diff --git a/src/store/admin.js b/src/store/admin.js index c460d9be..47162820 100644 --- a/src/store/admin.js +++ b/src/store/admin.js @@ -1,45 +1,66 @@ import { computed } from 'vue'; import { defineStore } from 'pinia'; import { useCollection } from 'vuefire'; -import { collection, orderBy, query, where } from 'firebase/firestore'; +import { collection, orderBy, query } from 'firebase/firestore'; import { db } from '@/config/firebaseConfig'; import { useAuthStore } from '@/store/auth'; -import { useTrackerStore } from '@/store/tracker'; export const useAdminStore = defineStore('admin', () => { const authStore = useAuthStore(); - const trackerStore = useTrackerStore(); // Users const users = useCollection( computed( () => - authStore.isLoggedIn && - query(collection(db, 'users'), orderBy('displayName', 'asc')) + authStore.isAdmin && query(collection(db, 'users'), orderBy('displayName', 'asc')) ), { ssrKey: 'users' } ); // Items - const organizations = computed(() => trackerStore.organizations); + const itemQuery = (collectionPath) => + authStore.isAdmin && + query( + collection(db, collectionPath), + orderBy('archived', 'asc'), + orderBy('name', 'asc') + ); - const departments = useCollection( - computed( - () => - authStore.isLoggedIn && - query( - collection(db, 'departments'), - where('archived', '==', false), - orderBy('name', 'asc') - ) - ), - { ssrKey: 'departments' } + const isItemAdmin = (item) => { + if (authStore.isSuperAdmin) { + return true; + } + if (item.organization) { + return authStore.user.admin.includes(item.organization.split('/')[1]); + } + return authStore.user.admin.includes(item.id); + }; + + const filterItems = (items) => items.filter((i) => isItemAdmin(i)); + + const _organizations = useCollection( + computed(() => itemQuery('organizations')), + { maxRefDepth: 0, ssrKey: 'organizations' } + ); + const organizations = computed(() => filterItems(_organizations.value)); + + const _departments = useCollection( + computed(() => itemQuery('departments')), + { maxRefDepth: 0, ssrKey: 'departments' } + ); + const departments = computed(() => filterItems(_departments.value)); + + const _products = useCollection( + computed(() => itemQuery('products')), + { maxRefDepth: 0, ssrKey: 'products' } ); + const products = computed(() => filterItems(_products.value)); return { users, organizations, departments, + products, }; }); diff --git a/src/views/Admin/CreateDepartment.vue b/src/views/Admin/CreateDepartment.vue index bac7d043..de842d1f 100644 --- a/src/views/Admin/CreateDepartment.vue +++ b/src/views/Admin/CreateDepartment.vue @@ -26,7 +26,7 @@ const breadcrumbs = computed(() => [ const organizationOptions = computed(() => organizations.value - .filter((o) => isSuperAdmin.value || user.value.admin.includes(o.id)) + .filter((o) => !o.archived && (isSuperAdmin.value || user.value.admin.includes(o.id))) .map(({ id, name }) => ({ id, name })) ); diff --git a/src/views/Admin/CreateProduct.vue b/src/views/Admin/CreateProduct.vue index 07dd2208..31445ae1 100644 --- a/src/views/Admin/CreateProduct.vue +++ b/src/views/Admin/CreateProduct.vue @@ -26,7 +26,7 @@ const breadcrumbs = computed(() => [ const departmentOptions = computed(() => departments.value - .filter((o) => isSuperAdmin.value || user.value.admin.includes(o.id)) + .filter((d) => !d.archived && (isSuperAdmin.value || user.value.admin.includes(d.id))) .map(({ id, name, organization }) => ({ id, name, organization_id: organization.id })) ); diff --git a/src/views/Admin/components/AddUsers.vue b/src/views/Admin/components/AddUsers.vue index a714f1c3..c2dcaa0f 100644 --- a/src/views/Admin/components/AddUsers.vue +++ b/src/views/Admin/components/AddUsers.vue @@ -38,10 +38,14 @@ async function save() { + + diff --git a/src/views/Admin/components/AdminAccessRequests.vue b/src/views/Admin/components/AdminAccessRequests.vue index 6d2e0e94..278cb6ca 100644 --- a/src/views/Admin/components/AdminAccessRequests.vue +++ b/src/views/Admin/components/AdminAccessRequests.vue @@ -53,16 +53,16 @@ function rejectRequest(request) { {{ $t('btn.acceptRequest') }} {{ $t('btn.rejectRequest') }} @@ -73,15 +73,21 @@ function rejectRequest(request) { diff --git a/src/views/Admin/components/AdminUsers.vue b/src/views/Admin/components/AdminUsers.vue index 5707e25e..c0500522 100644 --- a/src/views/Admin/components/AdminUsers.vue +++ b/src/views/Admin/components/AdminUsers.vue @@ -1,15 +1,14 @@