Files
speckle-server/packages/frontend-2/lib/settings/composables/menu.ts
T
Gergő Jedlicska f210d9b749 gergo/web 2109 project region based db connection selector (#3434)
* feat(projects): add project regions, default to null

* feat(multiregion): add projectRegion Db client lookup logic

* feat(multiregion): add project region repositories and caching

* feat(multiRegion): db initialization and get project db client

* feat(docker-compose): add second db for regions testing

* feat(multiRegion): initialize region with pubs and subs working

* fix(multiRegion): get region client even if it was registered in another pod

* feat(workspaces): create workspace resolver split

* feat: update server region metadata

* feat(projects): rewrite project creation

* feat(multiRegion): getRegionDb

* fix(workspaces): get projects now can retur null

* feat(multiRegion): make local multi region DB-s work

* feat: set d efault workspace region

* CR changes

* tests

* feat(multiRegion): bind region properly

* fe update

* test fixes

* feat(multiRegion): automatically create aiven extras plugin

* ci(postgres): use published postgres with aiven extras

* fix(multiRegion): roll back the aiven extras migration, there is a better way

* tests fix

* fix(billing): we do not need to add a seat, if the workspace is on a plan, but has no sub

---------

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2024-11-06 17:29:08 +01:00

116 lines
4.1 KiB
TypeScript

import type { SettingsMenuItems } from '~/lib/settings/helpers/types'
import SettingsUserProfile from '~/components/settings/user/Profile.vue'
import SettingsUserNotifications from '~/components/settings/user/Notifications.vue'
import SettingsUserDeveloper from '~/components/settings/user/developer/Developer.vue'
import SettingsUserEmails from '~/components/settings/user/Emails.vue'
import SettingsServerGeneral from '~/components/settings/server/General.vue'
import SettingsServerRegions from '~/components/settings/server/Regions.vue'
import SettingsServerProjects from '~/components/settings/server/Projects.vue'
import SettingsServerMembers from '~/components/settings/server/Members.vue'
import SettingsWorkspaceGeneral from '~/components/settings/workspaces/General.vue'
import SettingsWorkspacesMembers from '~/components/settings/workspaces/Members.vue'
import SettingsWorkspacesSecurity from '~/components/settings/workspaces/Security.vue'
import SettingsWorkspacesProjects from '~/components/settings/workspaces/Projects.vue'
import SettingsWorkspacesBilling from '~/components/settings/workspaces/Billing.vue'
import SettingsWorkspacesRegions from '~/components/settings/workspaces/Regions.vue'
import { useIsMultipleEmailsEnabled } from '~/composables/globals'
import { Roles } from '@speckle/shared'
import { SettingMenuKeys } from '~/lib/settings/helpers/types'
import { useIsMultiregionEnabled } from '~/lib/multiregion/composables/main'
export const useSettingsMenu = () => {
const isMultipleEmailsEnabled = useIsMultipleEmailsEnabled().value
const isMultiRegionEnabled = useIsMultiregionEnabled()
const workspaceMenuItems = shallowRef<SettingsMenuItems>({
[SettingMenuKeys.Workspace.General]: {
title: 'General',
component: SettingsWorkspaceGeneral,
permission: [Roles.Workspace.Admin, Roles.Workspace.Member, Roles.Workspace.Guest]
},
[SettingMenuKeys.Workspace.Members]: {
title: 'Members',
component: SettingsWorkspacesMembers,
permission: [Roles.Workspace.Admin, Roles.Workspace.Member]
},
[SettingMenuKeys.Workspace.Projects]: {
title: 'Projects',
component: SettingsWorkspacesProjects,
permission: [Roles.Workspace.Admin, Roles.Workspace.Member]
},
[SettingMenuKeys.Workspace.Security]: {
title: 'Security',
component: SettingsWorkspacesSecurity,
permission: [Roles.Workspace.Admin]
},
[SettingMenuKeys.Workspace.Billing]: {
title: 'Billing',
component: SettingsWorkspacesBilling,
permission: [Roles.Workspace.Admin, Roles.Workspace.Member]
},
[SettingMenuKeys.Workspace.Regions]: {
title: 'Regions',
component: SettingsWorkspacesRegions,
permission: [Roles.Workspace.Admin, Roles.Workspace.Member],
...(isMultiRegionEnabled
? {}
: {
tooltipText: 'Set up regions for custom data residency',
disabled: true
})
}
})
const userMenuItems = shallowRef<SettingsMenuItems>({
[SettingMenuKeys.User.Profile]: {
title: 'User profile',
component: SettingsUserProfile
},
...(isMultipleEmailsEnabled
? {
[SettingMenuKeys.User.Emails]: {
title: 'Emails',
component: SettingsUserEmails
}
}
: {}),
[SettingMenuKeys.User.Notifications]: {
title: 'Notifications',
component: SettingsUserNotifications
},
[SettingMenuKeys.User.DeveloperSettings]: {
title: 'Developer',
component: SettingsUserDeveloper
}
})
const serverMenuItems = shallowRef<SettingsMenuItems>({
[SettingMenuKeys.Server.General]: {
title: 'General',
component: SettingsServerGeneral
},
[SettingMenuKeys.Server.ActiveUsers]: {
title: 'Members',
component: SettingsServerMembers
},
[SettingMenuKeys.Server.Projects]: {
title: 'Projects',
component: SettingsServerProjects
},
...(isMultiRegionEnabled
? {
[SettingMenuKeys.Server.Regions]: {
title: 'Regions',
component: SettingsServerRegions
}
}
: {})
})
return {
userMenuItems,
serverMenuItems,
workspaceMenuItems
}
}