mirror of https://github.com/nocodb/nocodb
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.
153 lines
4.5 KiB
153 lines
4.5 KiB
<script lang="ts" setup> |
|
import { storeToRefs } from 'pinia' |
|
import { useGlobal } from '#imports' |
|
|
|
const router = useRouter() |
|
|
|
const route = router.currentRoute |
|
|
|
const workspaceStore = useWorkspace() |
|
|
|
const { activeWorkspace, isWorkspaceOwnerOrCreator } = storeToRefs(workspaceStore) |
|
|
|
const projectStore = useProject() |
|
|
|
const { isSharedBase } = storeToRefs(projectStore) |
|
|
|
const { navigateToWorkspaceSettings } = useWorkspace() |
|
|
|
const { isUIAllowed } = useUIPermission() |
|
|
|
const dialogOpen = ref(false) |
|
|
|
const openDialogKey = ref<string>('') |
|
|
|
const dataSourcesState = ref<string>('') |
|
|
|
const projectId = ref<string>() |
|
|
|
const isCreateProjectOpen = ref(false) |
|
|
|
function toggleDialog(value?: boolean, key?: string, dsState?: string, pId?: string) { |
|
dialogOpen.value = value ?? !dialogOpen.value |
|
openDialogKey.value = key || '' |
|
dataSourcesState.value = dsState || '' |
|
projectId.value = pId || '' |
|
} |
|
|
|
// todo: |
|
const currentVersion = ref('') |
|
|
|
const isTreeViewOnScrollTop = ref(true) |
|
const onTreeViewScrollTop = (onScrollTop: boolean) => { |
|
isTreeViewOnScrollTop.value = !onScrollTop |
|
} |
|
|
|
const { appInfo } = useGlobal() |
|
|
|
const navigateToSettings = () => { |
|
navigateToWorkspaceSettings() |
|
} |
|
</script> |
|
|
|
<template> |
|
<div |
|
class="nc-sidebar flex flex-col bg-gray-50 outline-r-1 outline-gray-100 select-none" |
|
:style="{ |
|
outlineWidth: '1px', |
|
height: isSharedBase ? '100%' : null, |
|
}" |
|
> |
|
<div class="flex flex-col"> |
|
<div style="border-bottom-width: 1px" class="flex items-center px-1 nc-sidebar-header !border-0 py-1.25 pl-2"> |
|
<div class="flex flex-row flex-grow hover:bg-gray-100 pl-2 pr-1 py-0.5 rounded-md max-w-full"> |
|
<a |
|
v-if="isSharedBase" |
|
class="w-[40px] min-w-[40px] transition-all duration-200 p-1 cursor-pointer transform hover:scale-105" |
|
href="https://github.com/nocodb/nocodb" |
|
target="_blank" |
|
> |
|
<img width="25" alt="NocoDB" src="~/assets/img/icons/512x512.png" /> |
|
</a> |
|
|
|
<WorkspaceMenu :workspace="activeWorkspace" :is-open="true"> |
|
<template #brandIcon> |
|
<div |
|
v-if="!isSharedBase" |
|
v-e="['c:navbar:home']" |
|
data-testid="nc-noco-brand-icon" |
|
class="w-[29px] min-w-[29px] nc-noco-brand-icon" |
|
> |
|
<img width="25" class="mr-0" alt="NocoDB" src="~/assets/img/icons/512x512.png" /> |
|
</div> |
|
</template> |
|
</WorkspaceMenu> |
|
</div> |
|
</div> |
|
|
|
<template v-if="!isSharedBase"> |
|
<div class="h-auto"> |
|
<div |
|
v-if="isWorkspaceOwnerOrCreator" |
|
role="button" |
|
class="nc-sidebar-top-button" |
|
data-testid="nc-sidebar-team-settings-btn" |
|
@click="navigateToSettings" |
|
> |
|
<GeneralIcon icon="settings" class="!h-3.9" /> |
|
<div>Team & Settings</div> |
|
</div> |
|
<WorkspaceCreateProjectBtn |
|
v-if="isUIAllowed('projectCreate', false)" |
|
v-model:is-open="isCreateProjectOpen" |
|
modal |
|
type="text" |
|
class="!p-0 mx-1" |
|
data-testid="nc-sidebar-create-project-btn" |
|
:active-workspace-id="route.params.typeOrId" |
|
> |
|
<div |
|
class="gap-x-2 flex flex-row w-full items-center nc-sidebar-top-button !my-0 !mx-0" |
|
:class="{ |
|
'bg-gray-100': isCreateProjectOpen, |
|
}" |
|
> |
|
<MdiPlus class="!h-4" /> |
|
|
|
<div class="flex">{{ $t('title.newProj') }}</div> |
|
</div> |
|
</WorkspaceCreateProjectBtn> |
|
</div> |
|
|
|
<div class="w-full mt-2"></div> |
|
|
|
<div class="text-gray-500 mx-5 font-medium mb-1.5">{{ $t('objects.projects') }}</div> |
|
<div |
|
class="w-full border-b-1" |
|
:class="{ |
|
'border-gray-200': !isTreeViewOnScrollTop, |
|
'border-transparent': isTreeViewOnScrollTop, |
|
}" |
|
></div> |
|
</template> |
|
</div> |
|
<LazyDashboardTreeViewNew |
|
class="flex-1" |
|
:class="{ |
|
'nc-shared-base': isSharedBase, |
|
}" |
|
@create-base-dlg="toggleDialog(true, 'dataSources', undefined, projectId)" |
|
@on-scroll-top="onTreeViewScrollTop" |
|
/> |
|
</div> |
|
</template> |
|
|
|
<style lang="scss" scoped> |
|
.nc-sidebar-top-button { |
|
@apply flex flex-row mx-1 px-3.5 rounded-md items-center py-0.75 my-0.5 gap-x-2 hover:bg-gray-200 cursor-pointer; |
|
} |
|
|
|
:deep(.nc-shared-base.nc-treeview-container) { |
|
@apply !h-full; |
|
} |
|
</style>
|
|
|