add: pagination to loads public & calculator

This commit is contained in:
Alexandro Uc Santos
2024-02-09 21:32:57 -06:00
parent 3018a95a59
commit e648c2ff53
5 changed files with 86 additions and 7 deletions

View File

@@ -78,10 +78,14 @@ import { onMounted, ref } from 'vue';
background-color: #dab977; background-color: #dab977;
color: #323030; color: #323030;
margin: 4px; margin: 4px;
font-size: 1.1rem;
font-weight: 500;
} }
.page-active { .page-active {
width: 33px; width: 33px;
height: 33px; height: 33px;
font-size: 1.2rem;
font-weight: 700;
background-color: #FBBA33; background-color: #FBBA33;
} }
</style> </style>

View File

@@ -4,6 +4,8 @@ import api from "../lib/axios";
export default function useSearchLoads() { export default function useSearchLoads() {
const loads = ref([]); const loads = ref([]);
const loading = ref(false); const loading = ref(false);
const total = ref(0);
const currentPage = ref(1);
const getLoadsPublished = async(filterQuery) => { const getLoadsPublished = async(filterQuery) => {
loading.value = true; loading.value = true;
@@ -14,12 +16,14 @@ export default function useSearchLoads() {
filterStr = "?"+cleanfilterArr.join("&"); filterStr = "?"+cleanfilterArr.join("&");
} }
try { try {
const endpoint = `/loads/${filterStr}`; const endpoint = `/loads/${filterStr}&$sort%5BcreatedAt%5D=-1`;
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
console.log(data); console.log(data);
total.value = data.total;
loads.value = data.data; loads.value = data.data;
} catch (error) { } catch (error) {
loads.value = []; loads.value = [];
total.value = 0;
console.log(error); console.log(error);
} }
loading.value = false; loading.value = false;
@@ -28,6 +32,8 @@ export default function useSearchLoads() {
return { return {
getLoadsPublished, getLoadsPublished,
loading, loading,
loads loads,
total,
currentPage,
} }
} }

View File

@@ -390,6 +390,8 @@ export const useCompanyStore = defineStore('company', () => {
updateLocationCompany, updateLocationCompany,
deleteLocationCompany, deleteLocationCompany,
budgets, budgets,
budgetsCurrentPage,
budgetsTotal,
users, users,
drivers, drivers,
usersTotal, usersTotal,

View File

@@ -6,6 +6,7 @@
import CardBudget from '../components/CardBudget.vue'; import CardBudget from '../components/CardBudget.vue';
import CardEmpty from '../components/CardEmpty.vue'; import CardEmpty from '../components/CardEmpty.vue';
import CreateBudgetModal from '../components/CreateBudgetModal.vue'; import CreateBudgetModal from '../components/CreateBudgetModal.vue';
import Pagination from '../components/pagination.vue';
const companyStore = useCompanyStore(); const companyStore = useCompanyStore();
const authStore = useAuthStore(); const authStore = useAuthStore();
@@ -16,6 +17,7 @@
const currentBudget = ref(null); const currentBudget = ref(null);
const openModal = ref(false); const openModal = ref(false);
const printOpen = ref(false); const printOpen = ref(false);
const limit = 2;
onMounted(() => { onMounted(() => {
getInitData(); getInitData();
@@ -23,6 +25,8 @@
const getInitData = async() => { const getInitData = async() => {
loading.value = true; loading.value = true;
filterQuery.value.limit = '$limit=' + limit;
filterQuery.value.skip = "$skip=0"
filterQuery.value.company = "company="+ localStorage.getItem('id'); filterQuery.value.company = "company="+ localStorage.getItem('id');
await companyStore.getBudgetsCompany(filterQuery.value, false) await companyStore.getBudgetsCompany(filterQuery.value, false)
loading.value = false; loading.value = false;
@@ -35,7 +39,10 @@
} }
watch(query, () => { watch(query, () => {
filterQuery.value.skip = "$skip="+ 0;
filterQuery.value.limit = "$limit="+ 100;
if(query.value.length === 0){ if(query.value.length === 0){
clearRequest();
filterQuery.value.search = ""; filterQuery.value.search = "";
getBudgetsWithFilters(filterQuery.value); getBudgetsWithFilters(filterQuery.value);
} }
@@ -50,7 +57,15 @@
} }
const getBudgetsByPage = async(data) => {
loading.value = true;
filterQuery.value.skip = "$skip="+ data.skip;
companyStore.budgetsCurrentPage = data.page
await getBudgetsWithFilters(filterQuery.value)
}
const clearFilter = () => { const clearFilter = () => {
clearRequest();
filterQuery.value.search = ""; filterQuery.value.search = "";
filterQuery.value.company = "company="+ localStorage.getItem('id'); filterQuery.value.company = "company="+ localStorage.getItem('id');
@@ -61,6 +76,12 @@
} }
} }
const clearRequest = () => {
filterQuery.value.skip = "$skip="+ 0;
filterQuery.value.limit = "$limit="+ limit;
companyStore.budgetsCurrentPage = 1;
}
const handleSetCurrentBudget = (data) => { const handleSetCurrentBudget = (data) => {
openModal.value = true; openModal.value = true;
currentBudget.value = data.budget; currentBudget.value = data.budget;
@@ -114,6 +135,12 @@
v-else v-else
text="No hay presupuestos agregados" text="No hay presupuestos agregados"
/> />
<Pagination
:limit="limit"
:current-page="companyStore.budgetsCurrentPage"
:total="companyStore.budgetsTotal"
@get-elements="getBudgetsByPage"
/>
</div> </div>
</template> </template>

View File

@@ -9,21 +9,30 @@
import States from '../components/ui/States.vue'; import States from '../components/ui/States.vue';
import Cities from '../components/ui/Cities.vue'; import Cities from '../components/ui/Cities.vue';
import MakeProposalModal from '../components/MakeProposalModal.vue'; import MakeProposalModal from '../components/MakeProposalModal.vue';
import Pagination from '../components/pagination.vue';
const filterQuery = ref([]); const filterQuery = ref([]);
const query = ref(''); const query = ref('');
const selectedTruckType = ref([]); const selectedTruckType = ref([]);
const selectedCategory = ref([]); const selectedCategory = ref([]);
const selectedState = ref([]); const selectedState = ref([]);
const selectedCities = ref([]); const selectedCities = ref([]);
const limit = 3;
const { getLoadsPublished, loads, loading } = useSearchLoads(); const isSearch = ref(false);
const { getLoadsPublished, loads, loading, currentPage, total } = useSearchLoads();
onMounted(() => { onMounted(() => {
getInitData(); getInitData();
}); });
watch(query, () => { watch(query, () => {
isSearch.value = true;
setFilterUnlimited();
if(query.value.length === 0){ if(query.value.length === 0){
if(selectedCategory.value?.length === 0 && selectedTruckType.value?.length === 0 && selectedCities.value?.length === 0 && selectedState.value?.length === 0 ) {
console.log('here');
clearRequest();
isSearch.value = false;
}
filterQuery.value.search = ""; filterQuery.value.search = "";
getLoadsPublished(filterQuery.value); getLoadsPublished(filterQuery.value);
} }
@@ -31,6 +40,7 @@
watch(selectedState, () => { watch(selectedState, () => {
if(selectedState.value != null){ if(selectedState.value != null){
setFilterUnlimited()
filterQuery.value.state = "origin.state[$in][]="+ selectedState.value.state_name; filterQuery.value.state = "origin.state[$in][]="+ selectedState.value.state_name;
getLoadsPublished(filterQuery.value); getLoadsPublished(filterQuery.value);
} }
@@ -38,6 +48,7 @@
watch(selectedCities, () => { watch(selectedCities, () => {
if(selectedCities.value != null){ if(selectedCities.value != null){
setFilterUnlimited()
filterQuery.value.city = "origin.city[$regex]="+ selectedCities.value.city_name; filterQuery.value.city = "origin.city[$regex]="+ selectedCities.value.city_name;
getLoadsPublished(filterQuery.value); getLoadsPublished(filterQuery.value);
} }
@@ -45,6 +56,7 @@
watch(selectedCategory, () => { watch(selectedCategory, () => {
if(selectedCategory.value != null){ if(selectedCategory.value != null){
setFilterUnlimited()
filterQuery.value.category = "categories[$in][]=" + selectedCategory.value._id; filterQuery.value.category = "categories[$in][]=" + selectedCategory.value._id;
getLoadsPublished(filterQuery.value); getLoadsPublished(filterQuery.value);
} }
@@ -52,6 +64,7 @@
watch(selectedTruckType, () => { watch(selectedTruckType, () => {
if(selectedTruckType.value != null){ if(selectedTruckType.value != null){
setFilterUnlimited()
filterQuery.value.truck_type = "truck_type[$in][]="+ selectedTruckType.value.meta_value; filterQuery.value.truck_type = "truck_type[$in][]="+ selectedTruckType.value.meta_value;
getLoadsPublished(filterQuery.value); getLoadsPublished(filterQuery.value);
} }
@@ -67,7 +80,8 @@
} }
const clearFilter = () => { const clearFilter = () => {
clearRequest();
isSearch.value = false;
selectedCities.value = null; selectedCities.value = null;
selectedCategory.value = null; selectedCategory.value = null;
selectedState.value = null; selectedState.value = null;
@@ -108,13 +122,32 @@
} }
const getInitData = async() => { const getInitData = async() => {
filterQuery.value.limit = ""; filterQuery.value.limit = '$limit=' + limit;
filterQuery.value.company = "", filterQuery.value.skip = "$skip=0";
filterQuery.value.company = "";
filterQuery.value.status = "status=Published", filterQuery.value.status = "status=Published",
await getLoadsPublished(filterQuery.value); await getLoadsPublished(filterQuery.value);
} }
const getLoadsByPage = (data) => {
console.log(data);
filterQuery.value.skip = "$skip="+ data.skip;
currentPage.value = data.page
getLoadsPublished(filterQuery.value);
}
const clearRequest = () => {
filterQuery.value.skip = "$skip="+ 0;
filterQuery.value.limit = "$limit="+ limit;
currentPage.value = 1;
}
const setFilterUnlimited = () => {
filterQuery.value.skip = "$skip="+ 0;
filterQuery.value.limit = "$limit="+ 100;
}
const currentLoad = ref(null); const currentLoad = ref(null);
const handleSetCurrentLoad = (load) => { const handleSetCurrentLoad = (load) => {
@@ -175,6 +208,13 @@
v-else v-else
text="No hay cargas publicadas" text="No hay cargas publicadas"
/> />
<Pagination
v-if="!isSearch"
:limit="limit"
:total="total"
:current-page="currentPage"
@get-elements="getLoadsByPage"
/>
</div> </div>
</template> </template>