From 5c433e3086283f35ff4e4da6aecb4133e8d5563b Mon Sep 17 00:00:00 2001 From: mertmit Date: Sun, 25 Sep 2022 16:43:16 +0300 Subject: [PATCH] feat: team & settings modal data sources tab revised Signed-off-by: mertmit --- packages/nc-gui/components.d.ts | 7 +- .../nc-gui/components/cell/DateTimePicker.vue | 4 +- .../nc-gui/components/cell/MultiSelect.vue | 2 +- .../nc-gui/components/cell/TimePicker.vue | 6 +- .../nc-gui/components/dashboard/TreeView.vue | 16 +- .../dashboard/settings/AppStore.vue | 169 +++++++++--------- .../dashboard/settings/DataSources.vue | 142 ++++++++++----- .../components/dashboard/settings/Erd.vue | 10 +- .../dashboard/settings/Metadata.vue | 10 +- .../components/dashboard/settings/Modal.vue | 153 +++++++++++----- .../components/dashboard/settings/UIAcl.vue | 11 +- .../nc-gui/components/dlg/TableRename.vue | 9 +- packages/nc-gui/components/erd/View.vue | 19 +- .../components/general/AddBaseButton.vue | 21 +++ .../smartsheet/column/CurrencyOptions.vue | 4 +- .../components/virtual-cell/Formula.vue | 2 +- .../composables/useColumnCreateStore.ts | 11 +- packages/nc-gui/composables/useProject.ts | 8 +- packages/nc-gui/context/index.ts | 1 + packages/nc-gui/lib/enums.ts | 9 + .../pages/[projectType]/[projectId]/index.vue | 13 +- .../nocodb/src/lib/meta/api/metaDiffApis.ts | 7 + 22 files changed, 421 insertions(+), 213 deletions(-) create mode 100644 packages/nc-gui/components/general/AddBaseButton.vue diff --git a/packages/nc-gui/components.d.ts b/packages/nc-gui/components.d.ts index 1664e337f5..3af2f902d4 100644 --- a/packages/nc-gui/components.d.ts +++ b/packages/nc-gui/components.d.ts @@ -10,6 +10,8 @@ declare module '@vue/runtime-core' { AAlert: typeof import('ant-design-vue/es')['Alert'] AAutoComplete: typeof import('ant-design-vue/es')['AutoComplete'] ABadgeRibbon: typeof import('ant-design-vue/es')['BadgeRibbon'] + ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb'] + ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem'] AButton: typeof import('ant-design-vue/es')['Button'] ACard: typeof import('ant-design-vue/es')['Card'] ACardMeta: typeof import('ant-design-vue/es')['CardMeta'] @@ -65,7 +67,6 @@ declare module '@vue/runtime-core' { ATabs: typeof import('ant-design-vue/es')['Tabs'] ATag: typeof import('ant-design-vue/es')['Tag'] ATextarea: typeof import('ant-design-vue/es')['Textarea'] - ATimePicker: typeof import('ant-design-vue/es')['TimePicker'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle'] AUploadDragger: typeof import('ant-design-vue/es')['UploadDragger'] @@ -144,7 +145,9 @@ declare module '@vue/runtime-core' { MdiContentSave: typeof import('~icons/mdi/content-save')['default'] MdiContentSaveEdit: typeof import('~icons/mdi/content-save-edit')['default'] MdiCurrencyUsd: typeof import('~icons/mdi/currency-usd')['default'] + MdiDatabaseLockOutline: typeof import('~icons/mdi/database-lock-outline')['default'] MdiDatabaseOutline: typeof import('~icons/mdi/database-outline')['default'] + MdiDatabasePlusOutline: typeof import('~icons/mdi/database-plus-outline')['default'] MdiDatabaseSync: typeof import('~icons/mdi/database-sync')['default'] MdiDelete: typeof import('~icons/mdi/delete')['default'] MdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default'] @@ -176,6 +179,7 @@ declare module '@vue/runtime-core' { MdiFunction: typeof import('~icons/mdi/function')['default'] MdiGestureDoubleTap: typeof import('~icons/mdi/gesture-double-tap')['default'] MdiGithub: typeof import('~icons/mdi/github')['default'] + MdiGraphOutline: typeof import('~icons/mdi/graph-outline')['default'] MdiHeart: typeof import('~icons/mdi/heart')['default'] MdiHook: typeof import('~icons/mdi/hook')['default'] MdiInformation: typeof import('~icons/mdi/information')['default'] @@ -193,6 +197,7 @@ declare module '@vue/runtime-core' { MdiMagnify: typeof import('~icons/mdi/magnify')['default'] MdiMenu: typeof import('~icons/mdi/menu')['default'] MdiMenuDown: typeof import('~icons/mdi/menu-down')['default'] + MdiMenuIcon: typeof import('~icons/mdi/menu-icon')['default'] MdiMicrosoftTeams: typeof import('~icons/mdi/microsoft-teams')['default'] MdiMinusCircleOutline: typeof import('~icons/mdi/minus-circle-outline')['default'] MdiMoonFull: typeof import('~icons/mdi/moon-full')['default'] diff --git a/packages/nc-gui/components/cell/DateTimePicker.vue b/packages/nc-gui/components/cell/DateTimePicker.vue index 8819d23ce7..8ad758b8b8 100644 --- a/packages/nc-gui/components/cell/DateTimePicker.vue +++ b/packages/nc-gui/components/cell/DateTimePicker.vue @@ -28,9 +28,11 @@ const active = inject(ActiveCellInj, ref(false)) const editable = inject(EditModeInj, ref(false)) +const column = inject(ColumnInj)! + let isDateInvalid = $ref(false) -const dateFormat = isMysql ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm:ssZ' +const dateFormat = isMysql(column.value.base_id) ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm:ssZ' let localState = $computed({ get() { diff --git a/packages/nc-gui/components/cell/MultiSelect.vue b/packages/nc-gui/components/cell/MultiSelect.vue index 0e8ac91571..3815933e49 100644 --- a/packages/nc-gui/components/cell/MultiSelect.vue +++ b/packages/nc-gui/components/cell/MultiSelect.vue @@ -105,7 +105,7 @@ const vModel = computed({ const selectedTitles = computed(() => modelValue ? typeof modelValue === 'string' - ? isMysql + ? isMysql(column.value.base_id) ? modelValue.split(',').sort((a, b) => { const opa = options.value.find((el) => el.title === a) const opb = options.value.find((el) => el.title === b) diff --git a/packages/nc-gui/components/cell/TimePicker.vue b/packages/nc-gui/components/cell/TimePicker.vue index 6402de2bed..1d9f8fe7c6 100644 --- a/packages/nc-gui/components/cell/TimePicker.vue +++ b/packages/nc-gui/components/cell/TimePicker.vue @@ -1,6 +1,6 @@ diff --git a/packages/nc-gui/components/dashboard/settings/DataSources.vue b/packages/nc-gui/components/dashboard/settings/DataSources.vue index 8f4d227157..af8395cb3b 100644 --- a/packages/nc-gui/components/dashboard/settings/DataSources.vue +++ b/packages/nc-gui/components/dashboard/settings/DataSources.vue @@ -2,69 +2,90 @@ import { Empty } from 'ant-design-vue' import type { BaseType } from 'nocodb-sdk' import CreateBase from './data-sources/CreateBase.vue' +import Metadata from './Metadata.vue' +import UIAcl from './UIAcl.vue' +import Erd from './Erd.vue' +import { DataSourcesSubTab } from '~/lib' import { useNuxtApp, useProject } from '#imports' +interface Props { + state: string + reload: boolean +} + +const props = defineProps() + +const emits = defineEmits(['update:state', 'update:reload']) + +const vModel = useVModel(props, 'state', emits) +const vReload = useVModel(props, 'reload', emits) + const { $api } = useNuxtApp() const { project } = useProject() -let isLoading = $ref(false) let sources = $ref([]) -const newSourceTab = $ref(false) +let activeBaseId = $ref('') +let metadiffbases = $ref([]) async function loadBases() { try { if (!project.value?.id) return - isLoading = true + vReload.value = true const baseList = await $api.base.list(project.value?.id) if (baseList.bases.list && baseList.bases.list.length) { sources = baseList.bases.list } + loadMetaDiff() } catch (e) { console.error(e) } finally { - isLoading = false + vReload.value = false + } +} + +async function loadMetaDiff() { + try { + if (!project.value?.id) return + + metadiffbases = [] + + const metadiff = await $api.project.metaDiffGet(project.value?.id) + for (const model of metadiff) { + if (model.detectedChanges?.length > 0) { + metadiffbases.push(model.base_id) + } + } + } catch (e) { + console.error(e) } } +const baseAction = (baseId: string, action: string) => { + activeBaseId = baseId + vModel.value = action +} + onMounted(async () => { if (sources.length === 0) { await loadBases() } }) + +watch( + () => props.reload, + async (reload) => { + if (reload) { + await loadBases() + } + }, +) diff --git a/packages/nc-gui/components/dashboard/settings/Erd.vue b/packages/nc-gui/components/dashboard/settings/Erd.vue index e8ca1d8bd8..d89b7e8d1e 100644 --- a/packages/nc-gui/components/dashboard/settings/Erd.vue +++ b/packages/nc-gui/components/dashboard/settings/Erd.vue @@ -1,5 +1,13 @@ + + diff --git a/packages/nc-gui/components/dashboard/settings/Metadata.vue b/packages/nc-gui/components/dashboard/settings/Metadata.vue index e515eb9fb2..5d69142a4e 100644 --- a/packages/nc-gui/components/dashboard/settings/Metadata.vue +++ b/packages/nc-gui/components/dashboard/settings/Metadata.vue @@ -1,6 +1,12 @@