Browse Source

refactor(nc-gui): simplify useSidebar and update comments

pull/3703/head
braks 2 years ago
parent
commit
27005af74c
  1. 6
      packages/nc-gui/components/tabs/Smartsheet.vue
  2. 35
      packages/nc-gui/composables/useSidebar/index.ts
  3. 4
      packages/nc-gui/layouts/default.vue

6
packages/nc-gui/components/tabs/Smartsheet.vue

@ -11,9 +11,9 @@ import {
ReloadViewDataHookInj, ReloadViewDataHookInj,
ReloadViewMetaHookInj, ReloadViewMetaHookInj,
computed, computed,
createEventHook,
inject, inject,
provide, provide,
provideSidebar,
useMetas, useMetas,
useProvideSmartsheetStore, useProvideSmartsheetStore,
watch, watch,
@ -35,14 +35,14 @@ const fields = ref<ColumnType[]>([])
provide(TabMetaInj, ref(activeTab)) provide(TabMetaInj, ref(activeTab))
const meta = computed<TableType>(() => metas.value?.[activeTab?.id as string]) const meta = computed<TableType>(() => metas.value?.[activeTab?.id as string])
const reloadEventHook = createEventHook<void>() const reloadEventHook = createEventHook()
const reloadViewMetaEventHook = createEventHook<void>() const reloadViewMetaEventHook = createEventHook<void>()
const openNewRecordFormHook = createEventHook<void>() const openNewRecordFormHook = createEventHook<void>()
const { isGallery, isGrid, isForm, isLocked } = useProvideSmartsheetStore(activeView, meta) const { isGallery, isGrid, isForm, isLocked } = useProvideSmartsheetStore(activeView, meta)
// provide the sidebar injection state // provide the sidebar injection state
provideSidebar('nc-right-sidebar', { useStorage: true, isOpen: true }) useSidebar('nc-right-sidebar', { useStorage: true, isOpen: true })
// todo: move to store // todo: move to store
provide(MetaInj, meta) provide(MetaInj, meta)

35
packages/nc-gui/composables/useSidebar/index.ts

@ -1,5 +1,5 @@
import { useStorage } from '@vueuse/core' import { useStorage } from '@vueuse/core'
import { MemStorage, onScopeDispose, watch } from '#imports' import { MemStorage, onScopeDispose, ref, syncRef, toRefs, watch } from '#imports'
interface UseSidebarProps { interface UseSidebarProps {
hasSidebar?: boolean hasSidebar?: boolean
@ -10,12 +10,8 @@ interface UseSidebarProps {
/** /**
* States for sidebars * States for sidebars
* *
* Use `provideSidebar` to provide the state and save to memory or local storage
* Use `useSidebar` to use the state
*
* If `provideSidebar` is not called explicitly, `useSidebar` will trigger the provider if no state can be found
*
* Requires an id to work, id should correspond to the sidebar state you want to create or fetch * Requires an id to work, id should correspond to the sidebar state you want to create or fetch
* If `useSidebar` was not called before it will create a new state if no state can be found for the specified id
*/ */
const sidebarStorage = new MemStorage() const sidebarStorage = new MemStorage()
@ -61,40 +57,25 @@ const createSidebar = (id: string, props: UseSidebarProps = {}) => {
} }
} }
export const provideSidebar = (id: string, props: UseSidebarProps = {}) => { export function useSidebar(id: string, props: UseSidebarProps = {}) {
if (!id) throw new Error('provideSidebar requires an id') if (!id) throw new Error('useSidebar requires an id')
onScopeDispose(() => {
sidebarStorage.remove(id)
})
if (!sidebarStorage.has(id)) { if (!sidebarStorage.has(id)) {
const sidebar = createSidebar(id, props) const sidebar = createSidebar(id, props)
sidebarStorage.set(id, sidebar) sidebarStorage.set(id, sidebar)
return sidebar onScopeDispose(() => {
} else { sidebarStorage.remove(id)
const sidebar = sidebarStorage.get(id) })
if (props.isOpen !== undefined) sidebar.isOpen.value = props.isOpen
if (props.hasSidebar !== undefined) sidebar.hasSidebar.value = props.hasSidebar
return sidebar return sidebar
} } else {
}
export function useSidebar(id: string, props: UseSidebarProps = {}) {
if (!id) throw new Error('useSidebar requires an id')
if (sidebarStorage.has(id)) {
const sidebar = sidebarStorage.get(id) const sidebar = sidebarStorage.get(id)
if (props.isOpen !== undefined) sidebar.isOpen.value = props.isOpen if (props.isOpen !== undefined) sidebar.isOpen.value = props.isOpen
if (props.hasSidebar !== undefined) sidebar.hasSidebar.value = props.hasSidebar if (props.hasSidebar !== undefined) sidebar.hasSidebar.value = props.hasSidebar
return sidebar return sidebar
} else {
return provideSidebar(id, props)
} }
} }

4
packages/nc-gui/layouts/default.vue

@ -1,12 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useTitle } from '@vueuse/core' import { useTitle } from '@vueuse/core'
import { provideSidebar, useI18n, useRoute } from '#imports' import { useI18n, useRoute, useSidebar } from '#imports'
const route = useRoute() const route = useRoute()
const { te, t } = useI18n() const { te, t } = useI18n()
const { hasSidebar } = provideSidebar('nc-left-sidebar') const { hasSidebar } = useSidebar('nc-left-sidebar')
useTitle(route.meta?.title && te(route.meta.title) ? `${t(route.meta.title)} | NocoDB` : 'NocoDB') useTitle(route.meta?.title && te(route.meta.title) ? `${t(route.meta.title)} | NocoDB` : 'NocoDB')
</script> </script>

Loading…
Cancel
Save