diff --git a/src/helpers/query/administrations.js b/src/helpers/query/administrations.js
index ea4bcea64..0e2602849 100644
--- a/src/helpers/query/administrations.js
+++ b/src/helpers/query/administrations.js
@@ -4,7 +4,7 @@ import _mapValues from 'lodash/mapValues';
import _without from 'lodash/without';
import { storeToRefs } from 'pinia';
import { useAuthStore } from '@/store/auth';
-import { convertValues, getAxiosInstance } from './utils';
+import { convertValues, getAxiosInstance, orderByDefault } from './utils';
import { filterAdminOrgs } from '@/helpers';
export function getTitle(item, isSuperAdmin) {
@@ -95,7 +95,7 @@ const mapAdministrations = async ({ isSuperAdmin, data, adminOrgs }) => {
return administrations;
};
-export const administrationPageFetcher = async (isSuperAdmin, exhaustiveAdminOrgs, fetchTestData = false) => {
+export const administrationPageFetcher = async (isSuperAdmin, exhaustiveAdminOrgs, fetchTestData = false, orderBy) => {
const authStore = useAuthStore();
const { roarfirekit } = storeToRefs(authStore);
const administrationIds = await roarfirekit.value.getAdministrations({ testData: fetchTestData });
@@ -106,7 +106,7 @@ export const administrationPageFetcher = async (isSuperAdmin, exhaustiveAdminOrg
const { data } = await axiosInstance.post(':batchGet', { documents });
- const administrations = _without(
+ const administrationData = _without(
data.map(({ found }) => {
if (found) {
return {
@@ -122,5 +122,24 @@ export const administrationPageFetcher = async (isSuperAdmin, exhaustiveAdminOrg
undefined,
);
- return mapAdministrations({ isSuperAdmin, data: administrations, adminOrgs: exhaustiveAdminOrgs });
+ const administrations = await mapAdministrations({
+ isSuperAdmin,
+ data: administrationData,
+ adminOrgs: exhaustiveAdminOrgs,
+ });
+
+ console.log(`Fetched ${administrations.length} administrations`);
+ console.log(administrations);
+
+ const orderField = (orderBy?.value ?? orderByDefault)[0].field.fieldPath;
+ const orderDirection = (orderBy?.value ?? orderByDefault)[0].direction;
+ const sortedAdministrations = administrations
+ .filter((a) => a[orderField] !== undefined)
+ .sort((a, b) => {
+ if (orderDirection === 'ASCENDING') return 2 * +(a[orderField] > b[orderField]) - 1;
+ if (orderDirection === 'DESCENDING') return 2 * +(b[orderField] > a[orderField]) - 1;
+ return 0;
+ });
+
+ return sortedAdministrations;
};
diff --git a/src/pages/HomeAdministrator.vue b/src/pages/HomeAdministrator.vue
index 9df337ae5..333059a89 100644
--- a/src/pages/HomeAdministrator.vue
+++ b/src/pages/HomeAdministrator.vue
@@ -67,8 +67,8 @@
-
-
+
+
import { computed, onMounted, ref, watch } from 'vue';
import { storeToRefs } from 'pinia';
-import { fetchDocById } from '@/helpers/query/utils';
+import { fetchDocById, orderByDefault } from '@/helpers/query/utils';
import { administrationPageFetcher, getTitle } from '../helpers/query/administrations';
import CardAdministration from '@/components/CardAdministration.vue';
import { useAuthStore } from '@/store/auth';
@@ -154,6 +154,7 @@ onMounted(() => {
if (roarfirekit.value.restConfig) init();
});
+const orderBy = ref(orderByDefault);
const fetchTestAdministrations = ref(false);
const testAdminsCached = ref(false);
@@ -163,18 +164,23 @@ const canQueryAdministrations = computed(() => {
return initialized.value && !isLoadingClaims.value;
});
+const isFetchingCachedAdministrations = ref(false);
+
/**
* Fetches administrations from the cache or the server
* @param {Array} queryKey - The query key to use for fetching the data
* @returns {Promise} - The cached or fetched data
*/
const getAdministrations = async (queryKey) => {
+ isFetchingCachedAdministrations.value = true;
+
let cachedData = await queryClient.getQueryData(queryKey);
if (!cachedData) {
cachedData = await queryClient.fetchQuery({
queryKey,
- queryFn: () => administrationPageFetcher(isSuperAdmin, exhaustiveAdminOrgs, fetchTestAdministrations.value),
+ queryFn: () =>
+ administrationPageFetcher(isSuperAdmin, exhaustiveAdminOrgs, fetchTestAdministrations.value, orderBy),
keepPreviousData: true,
enabled: canQueryAdministrations,
staleTime: 5 * 60 * 1000, // 5 minutes
@@ -182,6 +188,7 @@ const getAdministrations = async (queryKey) => {
testAdminsCached.value = true;
}
+ isFetchingCachedAdministrations.value = false;
return cachedData;
};
@@ -194,13 +201,9 @@ const { isLoading: isLoadingClaims, data: userClaims } = useQuery({
cacheTime: Infinity,
});
-const {
- isLoading: isLoadingAdministrations,
- isFetching: isFetchingAdministrations,
- data: administrations,
-} = useQuery({
- queryKey: ['administrations', uid, isSuperAdmin, administrationQueryKeyIndex],
- queryFn: () => administrationPageFetcher(isSuperAdmin, exhaustiveAdminOrgs, fetchTestAdministrations.value),
+const { isFetching: isFetchingAdministrations, data: administrations } = useQuery({
+ queryKey: ['administrations', uid, isSuperAdmin, administrationQueryKeyIndex, fetchTestAdministrations.value],
+ queryFn: () => administrationPageFetcher(isSuperAdmin, exhaustiveAdminOrgs, fetchTestAdministrations.value, orderBy),
keepPreviousData: true,
enabled: canQueryAdministrations,
staleTime: 5 * 60 * 1000, // 5 minutes
@@ -220,12 +223,14 @@ const {
},
});
+const fetchingAdministrations = computed(() => {
+ return isFetchingAdministrations.value || isFetchingCachedAdministrations.value;
+});
+
const filteredAdministrations = ref(administrations.value);
watch(fetchTestAdministrations, async (newState) => {
- const queryKey = newState
- ? ['testAdministrations', uid, isSuperAdmin, administrationQueryKeyIndex]
- : ['administrations', uid, isSuperAdmin, administrationQueryKeyIndex];
+ const queryKey = ['administrations', uid, isSuperAdmin, administrationQueryKeyIndex, newState];
filteredAdministrations.value = await getAdministrations(queryKey);
});