From ec5893db57352cdd4f644a2356d35d2af041e4cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Z=C3=BCrcher?= Date: Mon, 23 Feb 2026 21:21:52 +0100 Subject: [PATCH] add new workspace settings for users --- backend/gagag.dbaa | Bin 0 -> 32768 bytes backend/go.mod | 2 +- backend/go.sum | 4 +- src/pages/SettingsPage.vue | 43 +++++++++++------- src/vueLib/login/userStore.ts | 3 ++ src/vueLib/models/settings.ts | 8 +--- src/vueLib/models/user.ts | 4 +- src/vueLib/models/users.ts | 1 + .../tables/workspaces/WorkspaceTable.vue | 13 ++---- 9 files changed, 43 insertions(+), 35 deletions(-) create mode 100644 backend/gagag.dbaa diff --git a/backend/gagag.dbaa b/backend/gagag.dbaa new file mode 100644 index 0000000000000000000000000000000000000000..6e6a8f0f87845b674008f9f0e738bed99ac8a553 GIT binary patch literal 32768 zcmeI)O;6h}7zgkKXfx5VA#tb>7w>=|q8gfZ+HF}0TQx{o+D+oJCQz3~Ym$$mu^f41A?LhsFi6Hzkq1J{noQ)yL_W$8H~k|fpQ z*S+|~{*wF>%fz2Dm!6lbNsoW7tu%g1%CaIo{PnQ&;QjsG#-C-SF`ah_${_#&2tWV= z5P$##N)Y%msw>T{E%|#RvQH+|rS1t02J|EKqEN^vZBy6!I_YaK4s>D(br#vS(n|); z&?1f((K8yfSR20V$m|?y<}rD#AM@AnZPix0YxMf2)-n3T8hscDp|YV_WWQ_botH+j zBbAu?zHaJ9Tknx1B96iEq9K_C@5U`NABZ2vbgO#napItD4eWUze}D=~88Dl)cx*#mNej zRpIOjZ?C=WcRNOW)uC?mTb5_L)FKhRj9S*vj=1#atXTclT2h)D8}g4`ZlB~kB&>(ApW+R)}Vk4I4+nhK-G#=Xduv-?(^KIz}VGsfW5P$##AOHaf zKmY;|fB*y_0D;N`@cdsHJpw}j0uX=z1Rwwb2tWV=5P$##N)y2Ie`(YR1OW&@00Izz z00bZa0SG_<0uZQ70MGxG(IYSfAOHafKmY;|fB*y_009UCKoEcc W1Rwwb2tWV=5P$##AOL|X1pWd@q!K9r literal 0 HcmV?d00001 diff --git a/backend/go.mod b/backend/go.mod index 6216540..47d75cb 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -3,7 +3,7 @@ module backend go 1.25.4 require ( - gitea.tecamino.com/paadi/access-handler v1.0.48 + gitea.tecamino.com/paadi/access-handler v1.0.51 gitea.tecamino.com/paadi/memberDB v1.1.30 gitea.tecamino.com/paadi/tecamino-dbm v1.0.0 gitea.tecamino.com/paadi/tecamino-logger v0.2.1 diff --git a/backend/go.sum b/backend/go.sum index 24e4bba..34d5f2a 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -1,5 +1,5 @@ -gitea.tecamino.com/paadi/access-handler v1.0.48 h1:PYZvOwR9HCORAFpm7Nd5ZXvWwT5w04OvbcHhVHmPJlw= -gitea.tecamino.com/paadi/access-handler v1.0.48/go.mod h1:0kUGU4Jw2jSvopCCwecuX/2QnVKS09Ec1KQNrBXvsFs= +gitea.tecamino.com/paadi/access-handler v1.0.51 h1:kTPwN+0Zw/Uyfo6el1jl5ORzIrjQdC8PUlczoN9mBS4= +gitea.tecamino.com/paadi/access-handler v1.0.51/go.mod h1:0kUGU4Jw2jSvopCCwecuX/2QnVKS09Ec1KQNrBXvsFs= gitea.tecamino.com/paadi/dbHandler v1.1.12 h1:F1ARSTUm0MZmF84FfD/g5RQNMYyDYXHYrB3cXPSi4qw= gitea.tecamino.com/paadi/dbHandler v1.1.12/go.mod h1:y/xn/POJg1DO++67uKvnO23lJQgh+XFQq7HZCS9Getw= gitea.tecamino.com/paadi/memberDB v1.1.30 h1:N+3V9A/+OAGIoJeUNVHj1qUuBcy6ADLYFIgCnp2Ggk4= diff --git a/src/pages/SettingsPage.vue b/src/pages/SettingsPage.vue index 48a7825..3c6559b 100644 --- a/src/pages/SettingsPage.vue +++ b/src/pages/SettingsPage.vue @@ -38,7 +38,7 @@ :label="$t('workspaces')" :options="localUser?.workspaces" option-label="name" - v-model="settings.workspace" + v-model="localWorkspace" @update:model-value="changeWorkspace" > diff --git a/src/vueLib/login/userStore.ts b/src/vueLib/login/userStore.ts index 8f66de3..9104aa8 100644 --- a/src/vueLib/login/userStore.ts +++ b/src/vueLib/login/userStore.ts @@ -50,6 +50,9 @@ export const useUserStore = defineStore('user', { } }; }, + getWorkspaceUuid: (state: UserState) => { + return state.user?.workspaces?.find((w) => w.id === state.user?.workspaceId)?.uuid; + }, }, actions: { setFirstLogin(b: boolean) { diff --git a/src/vueLib/models/settings.ts b/src/vueLib/models/settings.ts index 233d4f0..a961642 100644 --- a/src/vueLib/models/settings.ts +++ b/src/vueLib/models/settings.ts @@ -1,16 +1,12 @@ import { ref } from 'vue'; -import type { Workspace } from './workspaces'; export const logo = ref(''); export const appName = ref('Attendance Records'); -export const databaseName = ref('members.dba'); -export const workspace = ref(''); export type Settings = { appName: string; icon: string; - databaseName: string; - workspace: Workspace | null; + databaseName?: string; primaryColor: string; primaryColorText: string; secondaryColor: string; @@ -21,8 +17,6 @@ export function DefaultSettings(): Settings { return { appName: 'Attendance Records', icon: '', - databaseName: 'members.dba', - workspace: { name: '', description: '', uuid: workspace.value }, primaryColor: document.documentElement.style.getPropertyValue('--q-primary-text'), primaryColorText: document.documentElement.style.getPropertyValue('--q-primary'), secondaryColor: document.documentElement.style.getPropertyValue('--q-secondary'), diff --git a/src/vueLib/models/user.ts b/src/vueLib/models/user.ts index 6c714da..b08d833 100644 --- a/src/vueLib/models/user.ts +++ b/src/vueLib/models/user.ts @@ -1,6 +1,7 @@ import type { Permissions } from '../checkboxes/permissions'; import type { Role } from './roles'; import type { Settings } from './settings'; +import type { Workspaces } from './workspaces'; export interface User { id: number; @@ -9,7 +10,8 @@ export interface User { permissions?: Permissions; settings?: Settings; newDatabase?: boolean; - workspaces?: string[]; + workspaceId?: number | undefined; + workspaces?: Workspaces; } export interface UserState { diff --git a/src/vueLib/models/users.ts b/src/vueLib/models/users.ts index 56fe269..01302a3 100644 --- a/src/vueLib/models/users.ts +++ b/src/vueLib/models/users.ts @@ -12,6 +12,7 @@ export interface User { password?: string; newPassword?: string; settings?: Settings; + workspaceId?: number; workspaces?: Workspace[]; } diff --git a/src/vueLib/tables/workspaces/WorkspaceTable.vue b/src/vueLib/tables/workspaces/WorkspaceTable.vue index 4abbb71..7f96e7f 100644 --- a/src/vueLib/tables/workspaces/WorkspaceTable.vue +++ b/src/vueLib/tables/workspaces/WorkspaceTable.vue @@ -129,8 +129,7 @@ import { i18n } from 'src/boot/lang'; import { QTable } from 'quasar'; import { useUserStore } from 'src/vueLib/login/userStore'; import SearchableInput from '../components/SearchableInput.vue'; -import type { User } from 'src/vueLib/models/user'; -import { workspace } from 'src/vueLib/models/settings'; +import { type User } from 'src/vueLib/models/user'; const { NotifyResponse } = useNotify(); const editOneDialog = ref(); @@ -179,8 +178,11 @@ function openRemoveDialog(...workspaces: Workspaces) { function removeWorkspace(...removeWorkspaces: Workspaces) { const workspaces: Workspace[] = []; + const user = useUserStore().user; + const usedWorkspaceId = user?.workspaces?.find((w) => w.uuid === user.workspaceId)?.id; + removeWorkspaces.forEach((workspace: Workspace) => { - if (workspace.id === currentUser.value?.settings?.workspace) { + if (workspace.id === usedWorkspaceId) { NotifyResponse(i18n.global.t('notPossibleToDeleteUsedWorkspace'), 'error'); } else if (workspace.id) { workspaces.push(workspace); @@ -192,11 +194,6 @@ function removeWorkspace(...removeWorkspaces: Workspaces) { workspaces: workspaces, }) .then(() => { - const storageWorkspace = localStorage.getItem('workspace'); - if (workspaces.some((w) => w.uuid === storageWorkspace)) { - workspace.value = ''; - localStorage.removeItem('workspace'); - } updateWorkspaces().catch((err) => NotifyResponse(err, 'error')); if (workspaces.length === 1) { NotifyResponse("'" + workspaces[0]?.name + "' " + i18n.global.t('deleted'), 'warning');