opnform-host-nginx/client/components/global/WorkspaceDropdown.vue

97 lines
2.6 KiB
Vue
Raw Normal View History

2023-12-09 15:47:03 +01:00
<template>
<Dropdown
v-if="user && workspaces && workspaces.length > 1"
ref="dropdown"
dropdown-class="origin-top-left absolute left-0 mt-2 w-56 rounded-md shadow-lg bg-white dark:bg-gray-800 ring-1 ring-black ring-opacity-5 z-50"
dusk="workspace-dropdown"
2023-12-09 15:47:03 +01:00
>
<template
v-if="workspace"
#trigger="{ toggle }"
>
<div
class="flex items-center cursor border border-transparent hover:border-gray-200 py-2 px-3 hover:bg-gray-50 rounded-md transition-colors"
role="button"
@click.stop="toggle()"
>
<WorkspaceIcon :workspace="workspace" />
<p
class="hidden md:block max-w-10 truncate text-sm ml-2 text-gray-800 dark:text-gray-200"
>
2023-12-09 15:47:03 +01:00
{{ workspace.name }}
</p>
</div>
</template>
<div class="px-1">
<a
v-for="worksp in workspaces"
:key="worksp.id"
href="#"
class="px-4 py-2 text-md rounded text-gray-700 hover:no-underline hover:bg-neutral-50 hover:text-gray-900 dark:text-gray-100 dark:hover:text-white dark:hover:bg-gray-600 flex items-center"
:class="{
'bg-blue-100 dark:bg-blue-900 hover:bg-blue-200':
workspace?.id === worksp?.id,
}"
@click.prevent="switchWorkspace(worksp)"
2023-12-09 15:47:03 +01:00
>
<WorkspaceIcon :workspace="worksp" />
<p class="ml-4 truncate text-sm">{{ worksp.name }}</p>
2023-12-09 15:47:03 +01:00
</a>
</div>
</Dropdown>
2023-12-09 15:47:03 +01:00
</template>
<script>
import { computed } from "vue"
import Dropdown from "~/components/global/Dropdown.vue"
import WorkspaceIcon from "~/components/workspaces/WorkspaceIcon.vue"
2023-12-09 15:47:03 +01:00
export default {
name: "WorkspaceDropdown",
2023-12-09 15:47:03 +01:00
components: {
WorkspaceIcon,
Dropdown,
2023-12-09 15:47:03 +01:00
},
setup() {
2023-12-09 15:47:03 +01:00
const authStore = useAuthStore()
const formsStore = useFormsStore()
const workspacesStore = useWorkspacesStore()
return {
formsStore,
workspacesStore,
user: computed(() => authStore.user),
2023-12-19 18:57:31 +01:00
workspaces: computed(() => workspacesStore.getAll),
loading: computed(() => workspacesStore.loading),
2023-12-09 15:47:03 +01:00
}
},
computed: {
workspace() {
2023-12-16 19:21:03 +01:00
return this.workspacesStore.getCurrent
},
2023-12-09 15:47:03 +01:00
},
watch: {},
2023-12-09 15:47:03 +01:00
mounted() {},
2023-12-09 15:47:03 +01:00
methods: {
switchWorkspace(workspace) {
2023-12-09 15:47:03 +01:00
this.workspacesStore.setCurrentId(workspace.id)
2023-12-20 16:10:32 +01:00
this.formsStore.resetState()
2023-12-20 18:38:43 +01:00
this.formsStore.loadAll(workspace.id)
2023-12-19 18:57:31 +01:00
const router = useRouter()
const route = useRoute()
if (route.name !== "home") {
router.push({ name: "home" })
2023-12-09 15:47:03 +01:00
}
2023-12-20 18:38:43 +01:00
this.formsStore.loadAll(workspace.id)
2023-12-09 15:47:03 +01:00
},
},
2023-12-09 15:47:03 +01:00
}
</script>
<style></style>