多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

128 lines
4.3 KiB

<script setup lang="ts">
const workspaceStore = useWorkspace()
const baseStore = useBase()
const { isUIAllowed } = useRoles()
const { appInfo } = useGlobal()
const { meta: metaKey, control } = useMagicKeys()
const { isWorkspaceLoading, isWorkspaceSettingsPageOpened, isIntegrationsPageOpened } = storeToRefs(workspaceStore)
const { navigateToWorkspaceSettings, navigateToIntegrations: _navigateToIntegrations } = workspaceStore
const { isSharedBase } = storeToRefs(baseStore)
const isCreateProjectOpen = ref(false)
const navigateToSettings = () => {
const cmdOrCtrl = isMac() ? metaKey.value : control.value
// TODO: Handle cloud case properly
navigateToWorkspaceSettings('', cmdOrCtrl)
// if (appInfo.value.baseHostName) {
// window.location.href = `https://app.${appInfo.value.baseHostName}/dashboard`
// } else {
// }
}
const navigateToIntegrations = () => {
const cmdOrCtrl = isMac() ? metaKey.value : control.value
_navigateToIntegrations('', cmdOrCtrl)
}
</script>
<template>
<template v-if="isWorkspaceLoading">
<div class="flex flex-col w-full gap-y-3.75 ml-3 mt-3.75">
<div v-if="appInfo.ee" class="flex flex-row items-center w-full gap-x-3">
<a-skeleton-input :active="true" class="!w-4 !h-4 !rounded overflow-hidden" />
<a-skeleton-input :active="true" class="!w-40 !h-4 !rounded overflow-hidden" />
</div>
<div class="flex flex-row items-center w-full gap-x-3">
<a-skeleton-input :active="true" class="!w-4 !h-4 !rounded overflow-hidden" />
<a-skeleton-input :active="true" class="!w-40 !h-4 !rounded overflow-hidden" />
</div>
<div class="flex flex-row items-center w-full gap-x-3">
<a-skeleton-input :active="true" class="!w-4 !h-4 !rounded overflow-hidden" />
<a-skeleton-input :active="true" class="!w-40 !h-4 !rounded overflow-hidden" />
</div>
</div>
</template>
<template v-else-if="!isSharedBase">
<div class="xs:hidden flex flex-col p-1 mt-0.25 mb-0.5 truncate">
<DashboardSidebarTopSectionHeader />
<NcButton
v-if="isUIAllowed('workspaceSettings') || isUIAllowed('workspaceCollaborators')"
v-e="['c:team:settings']"
type="text"
size="xsmall"
class="nc-sidebar-top-button !xs:hidden my-0.5 !h-7"
data-testid="nc-sidebar-team-settings-btn"
:centered="false"
:class="{
'!text-brand-600 !bg-brand-50 !hover:bg-brand-50': isWorkspaceSettingsPageOpened,
'!hover:(bg-gray-200 text-gray-700)': !isWorkspaceSettingsPageOpened,
}"
@click="navigateToSettings"
>
<div
class="flex items-center gap-2"
:class="{
'font-semibold': isWorkspaceSettingsPageOpened,
}"
>
<GeneralIcon icon="settings" class="!h-4" />
<div>{{ $t('title.teamAndSettings') }}</div>
</div>
</NcButton>
<NcButton
v-if="isUIAllowed('workspaceSettings')"
v-e="['c:integrations']"
type="text"
size="xsmall"
class="nc-sidebar-top-button !xs:hidden my-0.5 !h-7"
data-testid="nc-sidebar-integrations-btn"
:centered="false"
:class="{
'!text-brand-600 !bg-brand-50 !hover:bg-brand-50': isIntegrationsPageOpened,
'!hover:(bg-gray-200 text-gray-700)': !isIntegrationsPageOpened,
}"
@click="navigateToIntegrations"
>
<div
class="flex items-center gap-2"
:class="{
'font-semibold': isIntegrationsPageOpened,
}"
>
<GeneralIcon icon="integration" class="!h-4" />
<div>{{ $t('general.integrations') }}</div>
</div>
</NcButton>
<WorkspaceCreateProjectBtn
v-model:is-open="isCreateProjectOpen"
modal
type="text"
class="nc-sidebar-top-button !hover:(bg-gray-200 text-gray-700) !xs:hidden !h-7 my-0.5"
data-testid="nc-sidebar-create-base-btn"
>
<div class="gap-x-2 flex flex-row w-full items-center !font-normal">
<GeneralIcon icon="plus" />
<div class="flex">{{ $t('title.createBase') }}</div>
</div>
</WorkspaceCreateProjectBtn>
</div>
</template>
</template>
<style lang="scss" scoped>
.nc-sidebar-top-button {
@apply w-full !rounded-md !font-normal !px-3;
}
</style>