Skip to content

Commit cf427f8

Browse files
authored
Merge pull request #25 from Mosquito-Alert/fix_doubled_request
Fix double request when changing filter value
2 parents e0bf5fc + 8c39d72 commit cf427f8

File tree

2 files changed

+48
-52
lines changed

2 files changed

+48
-52
lines changed

src/views/annotations/ListView.vue

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
</template>
6666

6767
<script setup lang="ts">
68-
import { ref, watch, watchEffect, onMounted } from 'vue'
68+
import { ref, watch, computed, onMounted } from 'vue'
6969
import { useRoute, useRouter } from 'vue-router'
7070
7171
import type { DataViewPageEvent } from 'primevue/dataview'
@@ -118,8 +118,6 @@ const orderByArray = ref<Array<{ value: IdentificationtasksListOrderByParameter;
118118
const annotationsTotalCount = ref<number>(0);
119119
const annotationsArray = ref<Annotation[]>([]);
120120
121-
const listRequest = ref<IdentificationTasksApiAnnotationsListMineRequest>();
122-
123121
function clearFilters() {
124122
selectedDateRange.value = undefined;
125123
isExecutive.value = undefined;
@@ -148,11 +146,25 @@ onMounted(() => {
148146
numRows.value = q.pageSize ? Number(q.pageSize) : 25
149147
150148
// selectedOrderBy.value = q.orderBy ? { value: (q.orderBy as string).split(',')[0] } : null
149+
fetchData();
151150
})
152151
153-
const fetchData = () => {
152+
const listRequest = computed<IdentificationTasksApiAnnotationsListMineRequest>(() => ({
153+
updatedAtAfter: selectedDateRange.value && selectedDateRange.value.length > 1 ? selectedDateRange.value[0].toISOString() : undefined,
154+
updatedAtBefore: selectedDateRange.value && selectedDateRange.value.length > 1 ? new Date(new Date(selectedDateRange.value[1]).setDate(selectedDateRange.value[1].getDate() + 1)).toISOString() : undefined,
155+
isDecisive: isExecutive.value ?? undefined,
156+
isFlagged: isFlagged.value ?? undefined,
157+
isFavourite: isFavourite.value ?? undefined,
158+
classificationTaxonIds: selectedTaxon.value?.id ? [selectedTaxon.value.id] : undefined,
159+
type: selectedType.value ?? undefined,
160+
page: pageSelected.value + 1,
161+
pageSize: numRows.value,
162+
orderBy: selectedOrderBy.value ? [selectedOrderBy.value.value] : undefined
163+
}));
164+
165+
const fetchData = async () => {
154166
loading.value = true;
155-
identificationTasksApi.annotationsListMine(listRequest.value).then(
167+
await identificationTasksApi.annotationsListMine(listRequest.value).then(
156168
(response) => {
157169
// Assign results to annotationsArray.value, or an empty array if results is undefined
158170
annotationsArray.value = response.data.results || [];
@@ -166,31 +178,18 @@ const fetchData = () => {
166178
});
167179
}
168180
169-
watch(listRequest, async () => {
170-
fetchData();
171-
})
172181
173-
watchEffect(async () => {
174-
listRequest.value = {
175-
updatedAtAfter: selectedDateRange.value && selectedDateRange.value.length > 1 ? selectedDateRange.value[0].toISOString() : undefined,
176-
updatedAtBefore: selectedDateRange.value && selectedDateRange.value.length > 1 ? new Date(new Date(selectedDateRange.value[1]).setDate(selectedDateRange.value[1].getDate() + 1)).toISOString() : undefined,
177-
isDecisive: isExecutive.value ?? undefined,
178-
isFlagged: isFlagged.value ?? undefined,
179-
isFavourite: isFavourite.value ?? undefined,
180-
classificationTaxonIds: selectedTaxon.value?.id ? [selectedTaxon.value.id] : undefined,
181-
type: selectedType.value ?? undefined,
182-
page: pageSelected.value + 1,
183-
pageSize: numRows.value,
184-
orderBy: selectedOrderBy.value ? [selectedOrderBy.value.value] : undefined
185-
} as IdentificationTasksApiAnnotationsListMineRequest
182+
// Watch the computed request and update both listRequest and URL
183+
watch(listRequest, async () => {
184+
await fetchData();
186185
187186
const query = Object.fromEntries(
188187
Object.entries(listRequest.value)
189-
.filter(([_, v]) => v !== undefined && v !== null && !(Array.isArray(v) && v.length === 0))
188+
.filter(([, v]) => v !== undefined && v !== null && !(Array.isArray(v) && v.length === 0))
190189
.map(([k, v]) => Array.isArray(v) ? [k, v.join(',')] : [k, v])
191190
)
192191
193192
router.replace({ query })
194-
})
193+
}, { deep: true })
195194
196195
</script>

src/views/identification_task/ListView.vue

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
</template>
9393

9494
<script setup lang="ts">
95-
import { ref, watch, watchEffect, computed, onMounted } from 'vue'
95+
import { ref, watch, computed, onMounted } from 'vue'
9696
import { useRoute, useRouter } from 'vue-router';
9797
import type { DataViewPageEvent } from 'primevue/dataview'
9898
@@ -199,8 +199,6 @@ const onPageChange = (event: DataViewPageEvent) => {
199199
const identificationTasksTotalCount = ref<number>(0);
200200
const identificationTasksArray = ref<IdentificationTask[]>([]);
201201
202-
const listRequest = ref<IdentificationTasksApiListRequest>();
203-
204202
const numRows = ref<number>(25);
205203
206204
onMounted(() => {
@@ -225,11 +223,31 @@ onMounted(() => {
225223
226224
pageSelected.value = q.page ? Number(q.page) - 1 : 0
227225
numRows.value = q.pageSize ? Number(q.pageSize) : 25
226+
227+
fetchData();
228228
})
229229
230-
const fetchData = () => {
230+
const listRequest = computed<IdentificationTasksApiListRequest>(() => ({
231+
createdAtAfter: selectedCreatedAtDateRange.value && selectedCreatedAtDateRange.value.length > 1 ? selectedCreatedAtDateRange.value[0].toISOString() : undefined,
232+
createdAtBefore: selectedCreatedAtDateRange.value && selectedCreatedAtDateRange.value.length > 1 ? new Date(new Date(selectedCreatedAtDateRange.value[1]).setDate(selectedCreatedAtDateRange.value[1].getDate() + 1)).toISOString() : undefined,
233+
updatedAtAfter: selectedUpdatedAtDateRange.value && selectedUpdatedAtDateRange.value.length > 1 ? selectedUpdatedAtDateRange.value[0].toISOString() : undefined,
234+
updatedAtBefore: selectedUpdatedAtDateRange.value && selectedUpdatedAtDateRange.value.length > 1 ? new Date(new Date(selectedUpdatedAtDateRange.value[1]).setDate(selectedUpdatedAtDateRange.value[1].getDate() + 1)).toISOString() : undefined,
235+
status: selectedIdentificationTaskStatus.value || undefined,
236+
isFlagged: isFlagged.value ?? undefined,
237+
numAnnotationsMin: selectedNumAnnotation.value?.min,
238+
numAnnotationsMax: selectedNumAnnotation.value?.max,
239+
observationCountryIds: selectedCountryIds.value || undefined,
240+
resultSource: selectedSources.value || undefined,
241+
resultTaxonIds: selectedTaxon.value ? [selectedTaxon.value.id] : undefined,
242+
reviewAction: selectedReviewAction.value || undefined,
243+
page: pageSelected.value + 1,
244+
pageSize: numRows.value,
245+
orderBy: selectedOrderBy.value ? [selectedOrderBy.value.value] : undefined
246+
}));
247+
248+
const fetchData = async () => {
231249
loading.value = true;
232-
identificationTasksApi.list(listRequest.value).then(
250+
await identificationTasksApi.list(listRequest.value).then(
233251
(response) => {
234252
// Assign results to identificationTasksArray.value, or an empty array if results is undefined
235253
identificationTasksArray.value = response.data.results || [];
@@ -244,35 +262,14 @@ const fetchData = () => {
244262
}
245263
246264
watch(listRequest, async () => {
247-
fetchData();
248-
})
249-
250-
watchEffect(async () => {
251-
listRequest.value = {
252-
createdAtAfter: selectedCreatedAtDateRange.value && selectedCreatedAtDateRange.value.length > 1 ? selectedCreatedAtDateRange.value[0].toISOString() : undefined,
253-
createdAtBefore: selectedCreatedAtDateRange.value && selectedCreatedAtDateRange.value.length > 1 ? new Date(new Date(selectedCreatedAtDateRange.value[1]).setDate(selectedCreatedAtDateRange.value[1].getDate() + 1)).toISOString() : undefined,
254-
updatedAtAfter: selectedUpdatedAtDateRange.value && selectedUpdatedAtDateRange.value.length > 1 ? selectedUpdatedAtDateRange.value[0].toISOString() : undefined,
255-
updatedAtBefore: selectedUpdatedAtDateRange.value && selectedUpdatedAtDateRange.value.length > 1 ? new Date(new Date(selectedUpdatedAtDateRange.value[1]).setDate(selectedUpdatedAtDateRange.value[1].getDate() + 1)).toISOString() : undefined,
256-
status: selectedIdentificationTaskStatus.value || undefined,
257-
isFlagged: isFlagged.value ?? undefined,
258-
numAnnotationsMin: selectedNumAnnotation.value?.min,
259-
numAnnotationsMax: selectedNumAnnotation.value?.max,
260-
observationCountryIds: selectedCountryIds.value || undefined,
261-
resultSource: selectedSources.value || undefined,
262-
resultTaxonIds: selectedTaxon.value ? [selectedTaxon.value.id] : undefined,
263-
reviewAction: selectedReviewAction.value || undefined,
264-
page: pageSelected.value + 1,
265-
pageSize: numRows.value,
266-
orderBy: selectedOrderBy.value ? [selectedOrderBy.value.value] : undefined
267-
} as IdentificationTasksApiListRequest
265+
await fetchData();
268266
269267
const query = Object.fromEntries(
270268
Object.entries(listRequest.value)
271-
.filter(([_, v]) => v !== undefined && v !== null && !(Array.isArray(v) && v.length === 0))
269+
.filter(([, v]) => v !== undefined && v !== null && !(Array.isArray(v) && v.length === 0))
272270
.map(([k, v]) => Array.isArray(v) ? [k, v.join(',')] : [k, v])
273271
)
274-
275272
router.replace({ query })
276-
})
273+
}, { deep: true })
277274
278275
</script>

0 commit comments

Comments
 (0)