Browse Source

mobile optimisations - undo explorative changes to merge right and left menu

pull/4898/head
Daniel Spaude 2 years ago
parent
commit
ebd3a2e5f9
No known key found for this signature in database
GPG Key ID: 654A3D1FA4F35FFE
  1. 1
      packages/nc-gui/components.d.ts
  2. 7
      packages/nc-gui/components/dashboard/TreeView.vue
  3. 45
      packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue
  4. 45
      packages/nc-gui/components/tabs/Smartsheet.vue
  5. 4
      packages/nc-gui/lib/enums.ts
  6. 3
      packages/nc-gui/nuxt-shim.d.ts
  7. 43
      packages/nc-gui/pages/[projectType]/[projectId]/index.vue
  8. 17
      packages/nc-gui/pages/[projectType]/[projectId]/index/index.vue
  9. 2
      packages/nc-gui/pages/[projectType]/[projectId]/index/index/index.vue
  10. 7
      packages/nc-gui/plugins/globalEventBus.ts

1
packages/nc-gui/components.d.ts vendored

@ -80,6 +80,7 @@ declare module '@vue/runtime-core' {
ClaritySuccessLine: typeof import('~icons/clarity/success-line')['default']
EvaEmailOutline: typeof import('~icons/eva/email-outline')['default']
IcBaselineMoreVert: typeof import('~icons/ic/baseline-more-vert')['default']
Icon: typeof import('~icons/ic/on')['default']
IcOutlineInsertDriveFile: typeof import('~icons/ic/outline-insert-drive-file')['default']
IcRoundEdit: typeof import('~icons/ic/round-edit')['default']
IcRoundKeyboardArrowDown: typeof import('~icons/ic/round-keyboard-arrow-down')['default']

7
packages/nc-gui/components/dashboard/TreeView.vue

@ -35,7 +35,7 @@ const { isMobileMode } = useGlobal()
const { addTab, updateTab } = useTabs()
const { $api, $e, $globalEventBus } = useNuxtApp()
const { $api, $e } = useNuxtApp()
const { bases, tables, loadTables, isSharedBase } = useProject()
@ -168,9 +168,6 @@ const reloadTables = async () => {
}
const addTableTab = (table: TableType) => {
if (isMobileMode) {
$globalEventBus.emit(GlobalEvents.CLICKED_TABLE_LINK_IN_MOBILE_MODE)
}
addTab({ title: table.title, id: table.id, type: table.type as TabType })
}
@ -582,7 +579,6 @@ const setIcon = async (icon: string, table: TableType) => {
:key="`sortable-${bases[0].id}-${bases[0].id && bases[0].id in keys ? keys[bases[0].id] : '0'}`"
:nc-base="bases[0].id"
>
MARKER TABLES IN LEFT SIDEBAR
<div
v-for="table of tables.filter((table) => table.base_id === bases[0].id)"
:key="table.id"
@ -670,7 +666,6 @@ const setIcon = async (icon: string, table: TableType) => {
</div>
</GeneralTooltip>
</div>
MARKER TABLES IN LEFT SIDEBAR END
</div>
</div>
</div>

45
packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue

@ -234,30 +234,27 @@ const setIcon = async (icon: string, view: ViewType) => {
</script>
<template>
<div>
views in menutop: {{ JSON.stringify(views) }}
<a-menu ref="menuRef" :class="{ dragging }" class="nc-views-menu flex-1" :selected-keys="selected">
<!-- Lazy load breaks menu item active styles, i.e. styles never change even when active item changes -->
<SmartsheetSidebarRenameableMenuItem
v-for="view of views"
:id="view.id"
:key="view.id"
:view="view"
:on-validate="validate"
class="nc-view-item transition-all ease-in duration-300"
:class="{
'bg-gray-100': isMarked === view.id,
'active': activeView?.id === view.id,
[`nc-${view.type ? viewTypeAlias[view.type] : undefined || view.type}-view-item`]: true,
}"
@change-view="changeView"
@open-modal="$emit('openModal', $event)"
@delete="openDeleteDialog"
@rename="onRename"
@select-icon="setIcon($event, view)"
/>
</a-menu>
</div>
<a-menu ref="menuRef" :class="{ dragging }" class="nc-views-menu flex-1" :selected-keys="selected">
<!-- Lazy load breaks menu item active styles, i.e. styles never change even when active item changes -->
<SmartsheetSidebarRenameableMenuItem
v-for="view of views"
:id="view.id"
:key="view.id"
:view="view"
:on-validate="validate"
class="nc-view-item transition-all ease-in duration-300"
:class="{
'bg-gray-100': isMarked === view.id,
'active': activeView?.id === view.id,
[`nc-${view.type ? viewTypeAlias[view.type] : undefined || view.type}-view-item`]: true,
}"
@change-view="changeView"
@open-modal="$emit('openModal', $event)"
@delete="openDeleteDialog"
@rename="onRename"
@select-icon="setIcon($event, view)"
/>
</a-menu>
</template>
<style lang="scss">

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

@ -1,6 +1,5 @@
<script setup lang="ts">
import type { ColumnType, TableType } from 'nocodb-sdk'
import type { GlobalEvents } from '~/lib'
import {
ActiveViewInj,
FieldsInj,
@ -28,8 +27,6 @@ const props = defineProps<{
activeTab: TabItem
}>()
const { $globalEventBus } = useNuxtApp()
const { isUIAllowed } = useUIPermission()
const { metas } = useMetas()
@ -52,8 +49,6 @@ const reloadViewMetaEventHook = createEventHook<void | boolean>()
const openNewRecordFormHook = createEventHook<void>()
const mainArea = ref<HTMLDivElement>()
useProvideKanbanViewStore(meta, activeView)
// todo: move to store
@ -70,47 +65,11 @@ provide(
ReadonlyInj,
computed(() => !isUIAllowed('xcDatatableEditable')),
)
const { isOpen: isMobileRightSidebarOpen, toggle: toggleMobileRightSidebar } = useSidebar('nc-right-sidebar', { isOpen: true })
// const { isOpen, toggle } = useSidebar('nc-right-sidebar')
const hideSidebarOnClickOrTouchIfMobileMode = (_event: Event) => {
if (isMobileMode.value && isMobileRightSidebarOpen.value) {
toggleMobileRightSidebar(false)
}
}
onMounted(() => {
// if (isMobileMode.value) toggle(true)
mainArea.value?.addEventListener('click', hideSidebarOnClickOrTouchIfMobileMode)
})
watch(meta, (newMeta, oldMeta) => {
if (newMeta?.id !== oldMeta?.id) {
toggleMobileRightSidebar(true)
}
})
const FOO = (ev: GlobalEvents) => {
console.log(ev)
// alert('event')
if (!isMobileRightSidebarOpen) {
toggleMobileRightSidebar(true)
}
}
onMounted(() => {
$globalEventBus.on(FOO)
})
// SmartsheetSidebarMobile MARKER
</script>
<template>
<div class="nc-container flex h-full">
<!-- {{ JSON.stringify(metas) }} -->
<!-- <SmartsheetSidebarMobile v-if="meta && isMobileMode" v-show="isMobileRightSidebarOpen" class="nc-left-sidebar-mobile" /> -->
<div class="flex flex-col h-full flex-1 min-w-0" ref="mainArea">
<div class="flex flex-col h-full flex-1 min-w-0">
<LazySmartsheetToolbar />
<Transition name="layout" mode="out-in">
@ -133,7 +92,7 @@ onMounted(() => {
<LazySmartsheetExpandedFormDetached />
<!-- Lazy loading the sidebar causes issues when deleting elements, i.e. it appears as if multiple elements are removed when they are not -->
<SmartsheetSidebar v-if="meta && !isMobileMode" class="nc-right-sidebar" />
<SmartsheetSidebar v-if="meta" class="nc-right-sidebar" />
</div>
</template>

4
packages/nc-gui/lib/enums.ts

@ -87,10 +87,6 @@ export enum SmartsheetStoreEvents {
FIELD_ADD = 'field-add',
}
export enum GlobalEvents {
CLICKED_TABLE_LINK_IN_MOBILE_MODE = 'clicked-table-link-in-mobile-mode',
}
export enum DataSourcesSubTab {
New = 'New',
Metadata = 'Metadata',

3
packages/nc-gui/nuxt-shim.d.ts vendored

@ -1,13 +1,10 @@
import type { UseEventBusReturn } from '@vueuse/core'
import type { Api as BaseAPI } from 'nocodb-sdk'
import type { UseGlobalReturn } from './composables/useGlobal/types'
import type { NocoI18n } from './lib'
import type { TabType } from './composables'
import type { GlobalEvents } from './lib'
declare module '#app/nuxt' {
interface NuxtApp {
$globalEventBus: UseEventBusReturn<GlobalEvents, any>
$api: BaseAPI<any>
/** {@link import('./plugins/tele') Telemetry} */
$tele: {

43
packages/nc-gui/pages/[projectType]/[projectId]/index.vue

@ -1,7 +1,5 @@
<script setup lang="ts">
import tinycolor from 'tinycolor2'
import type { TableType } from 'nocodb-sdk'
import type { GlobalEvents } from '~/lib'
import {
TabType,
computed,
@ -40,9 +38,7 @@ const { theme, defaultTheme } = useTheme()
const { t } = useI18n()
const { $e, $globalEventBus } = useNuxtApp()
const { activeTab } = useTabs()
const { $e } = useNuxtApp()
const route = useRoute()
@ -191,20 +187,7 @@ onBeforeMount(async () => {
}
})
const showViewsMenu = ref(false)
const FOO = (ev: GlobalEvents) => {
// TODO: filter for event type
console.log(ev)
// alert('event')
showViewsMenu.value = true
if (isMobileMode) {
toggle(false)
}
}
onMounted(() => {
$globalEventBus.on(FOO)
toggle(true)
toggleHasSidebar(true)
})
@ -253,18 +236,6 @@ useEventListener(document, 'keydown', async (e: KeyboardEvent) => {
}
}
})
// const { bases, tables, loadTables } = useProject()
const { metas } = useMetas()
// const { tables } = useProject()
// const activeTable = computed(() => ([TabType.TABLE, TabType.VIEW].includes(activeTab.value?.type) ? activeTab.value.id : null))
const meta = computed<TableType | undefined>(() => activeTab.value && metas.value[activeTab.value.id!])
provide(MetaInj, meta)
</script>
<template>
@ -604,8 +575,8 @@ provide(MetaInj, meta)
class="hover:after:(bg-primary bg-opacity-75) group nc-sidebar-add-row flex items-center px-2"
:class="{ 'nc-sidebar-left-toggle-icon': !isMobileMode }"
>
<!-- <div>OUTER INDEX - isOpen: {{ isOpen }}</div> -->
FOO<MdiBackburger
<!-- <div>OUTER INDEX - isOpen: {{ isOpen }}</div> -->
<MdiBackburger
v-e="['c:grid:toggle-navdraw']"
class="cursor-pointer transform transition-transform duration-500"
:class="{ 'rotate-180': !isOpen }"
@ -614,13 +585,7 @@ provide(MetaInj, meta)
</div>
</div>
<LazyDashboardTreeView v-show="!showViewsMenu" @create-base-dlg="toggleDialog(true, 'dataSources')" />
<!-- v-show="isMobileRightSidebarOpen" -->
SmartsheetSidebarMobile IN INDEX<SmartsheetSidebarMobile
v-show="showViewsMenu"
v-if="meta && isMobileMode"
class="nc-left-sidebar-mobile"
/>SmartsheetSidebarMobile IN INDEX END
<LazyDashboardTreeView @create-base-dlg="toggleDialog(true, 'dataSources')" />
</a-layout-sider>
</template>

17
packages/nc-gui/pages/[projectType]/[projectId]/index/index.vue

@ -32,8 +32,25 @@ function onEdit(targetKey: number, action: 'add' | 'remove' | string) {
const hideSidebarOnClickOrTouchIfMobileMode = (event: Event) => {
if (isMobileMode.value && isOpen.value) {
// && !event.target?.matches('.show-sidebar-button')
// alert('now we will close the sidebar')
toggle(false)
}
// if (!event.target.matches('.show-sidebar-button')) {
// this.sidebarVisible = false
// }
// console.log('event.target', event.target)
// console.log('toggleSideBarButton.value', toggleSideBarButton.value)
// console.log('inside of hideSidebarOnClickOrTouchIfMobileMode')
// console.log('isOpen.value', isOpen.value)
// console.log('event.target !== toggleSideBarButton.value', event.target !== toggleSideBarButton.value)
// console.log('------------')
// debugger
// if (isMobileMode.value && isOpen.value && !event.target?.matchesSelector('.show-sidebar-button')) {
// if (isMobileMode.value && isOpen.value && event.target !== toggleSideBarButton.value) {
// toggle(false)
// }
}
onMounted(() => {

2
packages/nc-gui/pages/[projectType]/[projectId]/index/index/index.vue

@ -188,7 +188,7 @@ function onDropZoneClick(e: MouseEvent) {
</div>
<a-button type="primary" ghost class="create-table-btn">
TEST<span class="prose text-[1rem] text-primary z-50" @click.stop="openCreateTable">{{ $t('tooltip.addTable') }}</span>
<span class="prose text-[1rem] text-primary z-50" @click.stop="openCreateTable">{{ $t('tooltip.addTable') }}</span>
</a-button>
</div>
</div>

7
packages/nc-gui/plugins/globalEventBus.ts

@ -1,7 +0,0 @@
import type { GlobalEvents } from '#imports'
import { defineNuxtPlugin } from '#imports'
export default defineNuxtPlugin((nuxtApp) => {
const eventBus: UseEventBusReturn<GlobalEvents, any> = useEventBus<GlobalEvents>(Symbol('GlobalEventBus'))
nuxtApp.provide('globalEventBus', eventBus)
})
Loading…
Cancel
Save