From 9ea437b8246b4974be644889f7812798506a93a3 Mon Sep 17 00:00:00 2001 From: Samuel Date: Tue, 12 Nov 2024 22:30:10 +0100 Subject: [PATCH 01/16] fix(dashboard): user being routed before app was ready (#453) --- apps/dashboard/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dashboard/src/main.ts b/apps/dashboard/src/main.ts index f6bb8bfd..27b01e92 100644 --- a/apps/dashboard/src/main.ts +++ b/apps/dashboard/src/main.ts @@ -49,7 +49,6 @@ const app = createApp(App); app.use(i18n); app.use(createPinia()); -app.use(router); app.use(PrimeVue); app.use(ToastService); @@ -85,5 +84,6 @@ app.component('ConfirmDialog', ConfirmDialog); app.component('Divider', Divider); beforeLoad().then(() => { + app.use(router); app.mount('#app'); }); From 1c8377f91d2f35124381405c378a6cb20233c93a Mon Sep 17 00:00:00 2001 From: Samuel Date: Tue, 12 Nov 2024 22:45:44 +0100 Subject: [PATCH 02/16] ci: remove building of pos-ab (#454) --- .github/workflows/docker.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 3333181a..909b8758 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - app: [ dashboard, point-of-sale, point-of-sale-ab] + app: [ dashboard, point-of-sale ] include: - app: dashboard env_file_main: ${{ vars.ENV_FILE_PRODUCTION }} @@ -30,13 +30,6 @@ jobs: docker_tag: ${{ vars.DOCKER_TAG_POS }} dockerfile_path: "apps/point-of-sale/Dockerfile" dir: "point-of-sale" - - app: point-of-sale-ab - env_file_main: ${{ vars.ENV_FILE_PRODUCTION }} - env_file_develop: ${{ vars.ENV_FILE_PRODUCTION }} - docker_tag: ${{ vars.DOCKER_TAG_POS }}-ab - dockerfile_path: "apps/point-of-sale/Dockerfile" - dir: "point-of-sale" - steps: - name: Checkout repository uses: actions/checkout@v4 From b746f9bb083d02da6297f4cd79c20761222f213e Mon Sep 17 00:00:00 2001 From: Jobbiesaus <54932894+Jobbiesaus@users.noreply.github.com> Date: Fri, 15 Nov 2024 19:03:50 +0100 Subject: [PATCH 03/16] feat(dashboard): allow admin to create and delete API key for others (#455) --- .../components/users/AdminUserInfoCard.vue | 69 +++++++++++++++++++ .../user/components/UserSettingsComponent.vue | 4 +- lib/common/src/stores/user.store.ts | 3 + 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/src/modules/admin/components/users/AdminUserInfoCard.vue b/apps/dashboard/src/modules/admin/components/users/AdminUserInfoCard.vue index 35194844..0b294803 100644 --- a/apps/dashboard/src/modules/admin/components/users/AdminUserInfoCard.vue +++ b/apps/dashboard/src/modules/admin/components/users/AdminUserInfoCard.vue @@ -6,8 +6,25 @@ >
+ +

{{ t('modules.user.settings.apiKeys') }}

+
+

{{ t('modules.user.settings.changeApiKey') }}

+ +
+
+

{{ t('modules.user.settings.deleteApiKey') }}

+ +
+ diff --git a/apps/point-of-sale/src/stores/activity.store.ts b/apps/point-of-sale/src/stores/activity.store.ts index 28125493..bbcd553f 100644 --- a/apps/point-of-sale/src/stores/activity.store.ts +++ b/apps/point-of-sale/src/stores/activity.store.ts @@ -79,6 +79,7 @@ export const useActivityStore = defineStore('activity', { async onTimerEnd() { const cartStore = useCartStore(); + if (cartStore.checkUnallowedUserInDebt()) return logoutService(); if (useSettingStore().isBorrelmode) return; if (cartStore.cartTotalCount > 0 ) await useCartStore().checkout(); await logoutService(); diff --git a/apps/point-of-sale/src/stores/cart.store.ts b/apps/point-of-sale/src/stores/cart.store.ts index f7067ede..973b064c 100644 --- a/apps/point-of-sale/src/stores/cart.store.ts +++ b/apps/point-of-sale/src/stores/cart.store.ts @@ -4,7 +4,7 @@ import { ContainerResponse, ProductResponse, SubTransactionRequest, - TransactionRequest, + TransactionRequest, UserResponse, } from '@sudosos/sudosos-client'; import { SubTransactionRowRequest } from '@sudosos/sudosos-client/src/api'; import { usePointOfSaleStore } from '@/stores/pos.store'; @@ -20,10 +20,10 @@ export interface CartProduct { interface CartState { products: CartProduct[] - buyer: BaseUserResponse | null + buyer: UserResponse | null buyerBalance: DineroObjectResponse | null createdBy: BaseUserResponse | null - lockedIn: BaseUserResponse | null + lockedIn: UserResponse | null } export const useCartStore = defineStore('cart', { state: (): CartState => ({ @@ -46,15 +46,15 @@ export const useCartStore = defineStore('cart', { return total + product.count * productPrice; }, 0); }, - getBuyer(): BaseUserResponse | null { + getBuyer(): UserResponse | null { return this.buyer; } }, actions: { - setLockedIn(lockedIn: BaseUserResponse | null) { + setLockedIn(lockedIn: UserResponse | null) { this.lockedIn = lockedIn; }, - async setBuyer(buyer: BaseUserResponse | null) { + async setBuyer(buyer: UserResponse | null) { this.buyer = buyer; if (buyer) { const response = await apiService.balance.getBalanceId(buyer.id).catch(this.buyerBalance = null); @@ -79,6 +79,16 @@ export const useCartStore = defineStore('cart', { this.products.push(cartProduct); } }, + checkUnallowedUserInDebt(): boolean{ + const buyer = this.buyer; + if (buyer) { + if (buyer.canGoIntoDebt) return false; + if (!this.buyerBalance) return false; + + return (this.buyerBalance.amount - this.getTotalPrice) < 0; + } + return false; + }, removeFromCart(product: CartProduct): void { const index = this.products.findIndex( (p) => From 86eca1e7e8d0133009eb147ebdf071f25c414c45 Mon Sep 17 00:00:00 2001 From: Tom Udding Date: Mon, 25 Nov 2024 12:41:28 +0100 Subject: [PATCH 08/16] chore: remove unused GitHub actions from POS (#463) --- .../.github/workflows/docker.yml | 135 ------------------ apps/point-of-sale/.github/workflows/lint.yml | 48 ------- 2 files changed, 183 deletions(-) delete mode 100644 apps/point-of-sale/.github/workflows/docker.yml delete mode 100644 apps/point-of-sale/.github/workflows/lint.yml diff --git a/apps/point-of-sale/.github/workflows/docker.yml b/apps/point-of-sale/.github/workflows/docker.yml deleted file mode 100644 index 30c4df4b..00000000 --- a/apps/point-of-sale/.github/workflows/docker.yml +++ /dev/null @@ -1,135 +0,0 @@ -name: Docker - -on: - push: - branches: [ main, develop ] - # Publish semver tags as releases. - tags: [ 'v*.*.*' ] - pull_request: - branches: [ main, develop ] - -jobs: - dockerize: - runs-on: ubuntu-latest - container: - image: docker:dind - steps: - - name: upgrade git - run: | - apk add --update - apk add git - git --version - - - name: Checkout repository - uses: actions/checkout@v3 - with: - path: . - - - name: Set up environment - main - env: - ENV_FILE: ${{ secrets.ENV_FILE_PRODUCTION }} - if: github.ref == 'refs/heads/main' - run: | - echo "${ENV_FILE}" > .env - - - name: Set up environment - develop - env: - ENV_FILE: ${{ secrets.ENV_FILE_DEVELOPMENT }} - if: github.ref != 'refs/heads/main' - run: | - echo "${ENV_FILE}" > .env - - - - name: Get Docker meta (for tags) - id: meta - uses: docker/metadata-action@v4 - with: - # list of Docker images to use as base name for tags - images: | - ${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_TAG }} - # generate Docker tags based on the following events/attributes - tags: | - type=schedule - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to SudoSOS Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v2 - with: - registry: ${{ vars.DOCKER_REGISTRY }} - username: ${{ secrets.SVC_GH_SUDOSOS_USERNAME }} - password: ${{ secrets.SVC_GH_SUDOSOS_PWD }} - - # Build and push Docker image with Buildx (don't push on PR) - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - platforms: linux/amd64 #SudoSOS does not run on linux/arm64 - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - - dockerize-ab-testing: - runs-on: ubuntu-latest - container: - image: docker:dind - steps: - - name: upgrade git - run: | - apk add --update - apk add git - git --version - - name: Checkout repository - uses: actions/checkout@v3 - with: - path: . - - - name: Get Docker meta (for tags) - id: meta - uses: docker/metadata-action@v4 - with: - # list of Docker images to use as base name for tags - images: | - ${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_TAG }} - # generate Docker tags based on the following events/attributes - tags: | - type=schedule - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to SudoSOS Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v2 - with: - registry: ${{ vars.DOCKER_REGISTRY }} - username: ${{ secrets.SVC_GH_SUDOSOS_USERNAME }} - password: ${{ secrets.SVC_GH_SUDOSOS_PWD }} - - # Build and push Docker image with Buildx (don't push on PR) - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - platforms: linux/amd64 #SudoSOS does not run on linux/arm64 - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }}-ab-develop - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/apps/point-of-sale/.github/workflows/lint.yml b/apps/point-of-sale/.github/workflows/lint.yml deleted file mode 100644 index e43e8847..00000000 --- a/apps/point-of-sale/.github/workflows/lint.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Build & Lint - -on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main, develop ] - -jobs: - lint: - runs-on: ubuntu-latest - container: - image: node:18 - steps: - - uses: actions/checkout@v3 - - name: Cache and restore node_modules - id: cache-node - uses: actions/cache@v3 - with: - path: ./node_modules - key: ${{ runner.os }}-node-${{ hashFiles('./package-lock.json') }} - - run: npm install - if: steps.cache-node.outputs.cache-hit != 'true' - - run: npm run lint - build: - needs: [ lint ] - runs-on: ubuntu-latest - container: - image: node:18 - steps: - - uses: actions/checkout@v3 - - name: Cache and restore node_modules - id: cache-node - uses: actions/cache@v3 - with: - path: ./node_modules - key: ${{ runner.os }}-node-${{ hashFiles('./package-lock.json') }} - - run: npm install - if: steps.cache-node.outputs.cache-hit != 'true' - - run: npm run build - - name: "Compress dist folder" - run: tar -zcvf dist.tar.gz dist/ - - name: "Upload /dist of build" - uses: actions/upload-artifact@v3 - with: - name: build - path: dist.tar.gz - retention-days: 1 From 784a6fa7d2b8ad084ddcccc97a492e4afdb44099 Mon Sep 17 00:00:00 2001 From: Jobbiesaus <54932894+Jobbiesaus@users.noreply.github.com> Date: Mon, 25 Nov 2024 13:09:44 +0100 Subject: [PATCH 09/16] feat(dashboard): button to directly go to user page in fine overview (#456) --- .../modules/admin/views/AdminUserOverView.vue | 6 +- .../src/modules/financial/views/FineView.vue | 192 ++++++++++-------- .../src/modules/seller/views/POSInfoView.vue | 4 +- apps/dashboard/src/services/ApiService.ts | 2 +- 4 files changed, 113 insertions(+), 91 deletions(-) diff --git a/apps/dashboard/src/modules/admin/views/AdminUserOverView.vue b/apps/dashboard/src/modules/admin/views/AdminUserOverView.vue index 101ae0f9..aa3f8a16 100644 --- a/apps/dashboard/src/modules/admin/views/AdminUserOverView.vue +++ b/apps/dashboard/src/modules/admin/views/AdminUserOverView.vue @@ -122,8 +122,7 @@ diff --git a/apps/dashboard/src/modules/financial/views/FineView.vue b/apps/dashboard/src/modules/financial/views/FineView.vue index 578469e4..8c8d500c 100644 --- a/apps/dashboard/src/modules/financial/views/FineView.vue +++ b/apps/dashboard/src/modules/financial/views/FineView.vue @@ -6,12 +6,12 @@
+ + + + + diff --git a/apps/dashboard/src/modules/seller/views/POSInfoView.vue b/apps/dashboard/src/modules/seller/views/POSInfoView.vue index 6e00f7bb..961017d5 100644 --- a/apps/dashboard/src/modules/seller/views/POSInfoView.vue +++ b/apps/dashboard/src/modules/seller/views/POSInfoView.vue @@ -38,7 +38,7 @@ import type { } from '@sudosos/sudosos-client'; import ContainerCard from '@/components/container/ContainersCard.vue'; import router from '@/router'; -import apiService from '@/services/ApiService'; +import apiService, { DEFAULT_PAGINATION_MAX } from '@/services/ApiService'; import { useContainerStore } from "@/stores/container.store"; import MutationPOSCard from "@/components/mutations/MutationsPOS.vue"; import CardComponent from "@/components/CardComponent.vue"; @@ -96,7 +96,7 @@ onMounted(async () => { apiService, id.value!, new Date(Date.now()-(7*24*60*60*1000)).toISOString(), - new Date().toISOString(), Number.MAX_SAFE_INTEGER, 0)).data.records; + new Date().toISOString(), DEFAULT_PAGINATION_MAX, 0)).data.records; for (let transaction of transactionsInLastWeek) { totalSales.value = totalSales.value.add(Dinero(transaction.value as Dinero.Options)); diff --git a/apps/dashboard/src/services/ApiService.ts b/apps/dashboard/src/services/ApiService.ts index 681d18c5..d057466f 100644 --- a/apps/dashboard/src/services/ApiService.ts +++ b/apps/dashboard/src/services/ApiService.ts @@ -2,4 +2,4 @@ import { ApiService } from "@sudosos/sudosos-frontend-common"; const apiService = new ApiService(window.location.origin + "/api/v1"); export default apiService; -export const DEFAULT_PAGINATION_MAX = 500; +export const DEFAULT_PAGINATION_MAX = 500; \ No newline at end of file From a47be0a418c0a87d1cfcf362fe0a51dca59ea030 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 14:28:22 +0100 Subject: [PATCH 10/16] chore(deps): bump @stripe/stripe-js in /apps/dashboard (#464) Bumps [@stripe/stripe-js](https://github.com/stripe/stripe-js) from 4.10.0 to 5.2.0. - [Release notes](https://github.com/stripe/stripe-js/releases) - [Commits](https://github.com/stripe/stripe-js/compare/v4.10.0...v5.2.0) --- updated-dependencies: - dependency-name: "@stripe/stripe-js" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- apps/dashboard/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index cd3cc183..7843879c 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -15,7 +15,7 @@ "format": "prettier --write src/" }, "dependencies": { - "@stripe/stripe-js": "^4.8.0", + "@stripe/stripe-js": "^5.2.0", "@sudosos/sudosos-frontend-common": "workspace:^", "@vee-validate/rules": "^4.14.1", "@vee-validate/yup": "^4.14.1", From d3fbc80abfa06967d369001851c6c61b827bffa2 Mon Sep 17 00:00:00 2001 From: Victor Klomp Date: Mon, 2 Dec 2024 06:47:28 +0100 Subject: [PATCH 11/16] ci(vite): Clean up vite config (#466) --- apps/dashboard/vite.config.ts | 6 ++---- apps/point-of-sale/vite.config.ts | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/dashboard/vite.config.ts b/apps/dashboard/vite.config.ts index e1f64fa0..097ae266 100644 --- a/apps/dashboard/vite.config.ts +++ b/apps/dashboard/vite.config.ts @@ -1,13 +1,11 @@ import { fileURLToPath, URL } from 'node:url'; -import { defineConfig, loadEnv } from 'vite'; +import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; const PROXY_URL = 'https://sudosos.test.gewis.nl'; // https://vitejs.dev/config/ -export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd()); - +export default defineConfig(() => { return { plugins: [ vue(), diff --git a/apps/point-of-sale/vite.config.ts b/apps/point-of-sale/vite.config.ts index eabab869..db7fdd78 100644 --- a/apps/point-of-sale/vite.config.ts +++ b/apps/point-of-sale/vite.config.ts @@ -1,13 +1,11 @@ import { fileURLToPath, URL } from 'node:url'; -import { defineConfig, loadEnv } from 'vite'; +import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; const PROXY_URL = 'https://sudosos.test.gewis.nl'; // https://vitejs.dev/config/ -export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd()); - +export default defineConfig(() => { return { base: "./", plugins: [ From 12c435db9a263cc02ca9fc32bc4f86e01d2eee86 Mon Sep 17 00:00:00 2001 From: Victor Klomp Date: Mon, 2 Dec 2024 06:48:56 +0100 Subject: [PATCH 12/16] feat(routes): rework menu items (#467) --- apps/dashboard/src/components/TopNavbar.vue | 30 ++++++++----------- .../components/mutations/MutationsBalance.vue | 2 +- .../src/locales/en/common/common.json | 8 ++--- apps/dashboard/src/modules/admin/routes.ts | 6 ++-- .../dashboard/src/modules/financial/routes.ts | 6 ++-- apps/dashboard/src/modules/seller/routes.ts | 8 ++--- apps/dashboard/src/modules/user/routes.ts | 4 +-- 7 files changed, 29 insertions(+), 35 deletions(-) diff --git a/apps/dashboard/src/components/TopNavbar.vue b/apps/dashboard/src/components/TopNavbar.vue index 72468b2e..a4df0f6c 100644 --- a/apps/dashboard/src/components/TopNavbar.vue +++ b/apps/dashboard/src/components/TopNavbar.vue @@ -160,19 +160,19 @@ onBeforeMount(async () => { const navItems = computed(() => [ { label: t('common.navigation.transactions'), - route: '/transactions' + route: '/transaction' }, { label: t('common.navigation.admin'), visible: isBoard(), items: [ { - label: t('common.navigation.userOverview'), - route: '/user-overview' + label: t('common.navigation.users'), + route: '/user' }, { label: t('common.navigation.banners'), - route: '/banners' + route: '/banner' }, ], }, @@ -182,26 +182,20 @@ const navItems = computed(() => [ notifications: getFinancialNotifications(), items: [ { - label: t('common.navigation.userOverview'), - route: '/user-overview', - }, - { - label: t('common.navigation.flaggedTransactions'), - }, - { - label: t('common.navigation.socialDrinkCards'), + label: t('common.navigation.users'), + route: '/user', }, { label: t('common.navigation.invoices'), route: '/invoice', }, { - label: t('common.navigation.fineOverview'), + label: t('common.navigation.fines'), route: '/fine', }, { label: t('common.navigation.payouts'), - route: '/payouts', + route: '/payout', notifications: pendingPayouts?.value } ] @@ -211,12 +205,12 @@ const navItems = computed(() => [ visible: isSeller(), items: [ { - label: t('common.navigation.manageProducts'), - route: '/manage-products', + label: t('common.navigation.productsContainers'), + route: '/product', }, { - label: t('common.navigation.posOverview'), - route: '/point-of-sale/overview', + label: t('common.navigation.pos'), + route: '/point-of-sale', }, ...organs.value, ] diff --git a/apps/dashboard/src/components/mutations/MutationsBalance.vue b/apps/dashboard/src/components/mutations/MutationsBalance.vue index 04d9a48a..7ed1b02b 100644 --- a/apps/dashboard/src/components/mutations/MutationsBalance.vue +++ b/apps/dashboard/src/components/mutations/MutationsBalance.vue @@ -3,7 +3,7 @@ :header="t('components.mutations.balance')" class="w-full" :action="simple ? undefined: t('components.mutations.all')" - :routerLink="simple ? undefined : 'transaction-view'" + :routerLink="simple ? undefined : 'transactions'" > Date: Tue, 10 Dec 2024 15:26:22 +0100 Subject: [PATCH 13/16] feat: Permission based rendering (#303) * feat(seller): Permission based rendering * feat(permissions): Permissions isAllowed function * refactor(permissions): Added new meta for permission on routes * refactor(permissions): Router guard based on permissions * refactor(permissions): NavBar based on permissions * feat(permissions): Permission based rendering for the products * feat(permissions): Permission based rendering for the point of sales * style(routes): Fix indenting * fix(routes): Fix typing * fix(permission): Fix nits --- apps/dashboard/src/components/FormDialog.vue | 9 +- apps/dashboard/src/components/TopNavbar.vue | 42 +++---- .../container/ContainerActionsDialog.vue | 10 +- .../container/ContainerActionsForm.vue | 8 +- .../container/ContainerProductDisplay.vue | 8 +- .../container/ContainerProductGrid.vue | 22 +++- .../components/container/ContainersCard.vue | 33 +++++- .../src/locales/en/common/common.json | 5 +- .../src/locales/en/modules/seller.json | 3 +- .../src/locales/nl/common/common.json | 5 +- .../src/locales/nl/modules/seller.json | 3 +- apps/dashboard/src/main.ts | 2 + .../users/AdminUserFineWaiveModal.vue | 4 +- apps/dashboard/src/modules/admin/routes.ts | 11 +- .../modules/admin/views/AdminUserOverView.vue | 2 +- .../dashboard/src/modules/financial/routes.ts | 104 +++++++++--------- .../financial/views/payouts/PayoutsView.vue | 2 +- .../components/POSAddContainerModal.vue | 6 +- .../seller/components/POSCreateModal.vue | 2 +- .../seller/components/POSOverviewTable.vue | 8 +- .../seller/components/POSSettingsCard.vue | 5 +- .../seller/components/ProductActionDialog.vue | 16 ++- .../seller/components/ProductsCard.vue | 62 +++++------ apps/dashboard/src/modules/seller/routes.ts | 10 +- .../src/modules/seller/views/POSInfoView.vue | 18 ++- .../modules/seller/views/POSOverviewView.vue | 12 +- .../user/components/UserSettingsComponent.vue | 1 + apps/dashboard/src/modules/user/routes.ts | 17 ++- apps/dashboard/src/router/index.ts | 23 ++-- apps/dashboard/src/utils/permissionUtils.ts | 81 ++++++++++++++ apps/dashboard/vite.config.ts | 2 +- lib/common/src/stores/auth.store.ts | 3 + 32 files changed, 365 insertions(+), 174 deletions(-) create mode 100644 apps/dashboard/src/utils/permissionUtils.ts diff --git a/apps/dashboard/src/components/FormDialog.vue b/apps/dashboard/src/components/FormDialog.vue index 3d33259e..393b41fb 100644 --- a/apps/dashboard/src/components/FormDialog.vue +++ b/apps/dashboard/src/components/FormDialog.vue @@ -11,7 +11,7 @@

{{ product.name }}

- + \ No newline at end of file diff --git a/apps/dashboard/src/modules/financial/views/invoice/InvoiceOverview.vue b/apps/dashboard/src/modules/financial/views/invoice/InvoiceOverview.vue index 951dfeba..25d3488a 100644 --- a/apps/dashboard/src/modules/financial/views/invoice/InvoiceOverview.vue +++ b/apps/dashboard/src/modules/financial/views/invoice/InvoiceOverview.vue @@ -2,6 +2,7 @@
{{ t('modules.financial.invoice.title') }}
+