diff --git a/packages/nc-gui/components.d.ts b/packages/nc-gui/components.d.ts index ed6ae88878..377cd11c6a 100644 --- a/packages/nc-gui/components.d.ts +++ b/packages/nc-gui/components.d.ts @@ -8,7 +8,6 @@ export {} declare module '@vue/runtime-core' { export interface GlobalComponents { AAlert: typeof import('ant-design-vue/es')['Alert'] - AAutoComplete: typeof import('ant-design-vue/es')['AutoComplete'] ABadgeRibbon: typeof import('ant-design-vue/es')['BadgeRibbon'] AButton: typeof import('ant-design-vue/es')['Button'] ACard: typeof import('ant-design-vue/es')['Card'] @@ -24,7 +23,6 @@ declare module '@vue/runtime-core' { ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] ADropdown: typeof import('ant-design-vue/es')['Dropdown'] - ADropdownButton: typeof import('ant-design-vue/es')['DropdownButton'] AEmpty: typeof import('ant-design-vue/es')['Empty'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] @@ -67,21 +65,16 @@ declare module '@vue/runtime-core' { ATextarea: typeof import('ant-design-vue/es')['Textarea'] ATimePicker: typeof import('ant-design-vue/es')['TimePicker'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] - ATypography: typeof import('ant-design-vue/es')['Typography'] ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle'] AUploadDragger: typeof import('ant-design-vue/es')['UploadDragger'] BiFiletypeJson: typeof import('~icons/bi/filetype-json')['default'] BiFiletypeXlsx: typeof import('~icons/bi/filetype-xlsx')['default'] CilFullscreen: typeof import('~icons/cil/fullscreen')['default'] CilFullscreenExit: typeof import('~icons/cil/fullscreen-exit')['default'] - ClarityColorPickerLine: typeof import('~icons/clarity/color-picker-line')['default'] ClarityColorPickerSolid: typeof import('~icons/clarity/color-picker-solid')['default'] ClarityImageLine: typeof import('~icons/clarity/image-line')['default'] - ClaritySuccessLine: typeof import('~icons/clarity/success-line')['default'] EvaEmailOutline: typeof import('~icons/eva/email-outline')['default'] - 'Ic:twotoneWidthFull': typeof import('~icons/ic/twotone-width-full')['default'] IcBaselineMoreVert: typeof import('~icons/ic/baseline-more-vert')['default'] - IcBaselineWidthFull: typeof import('~icons/ic/baseline-width-full')['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'] @@ -94,7 +87,6 @@ declare module '@vue/runtime-core' { MaterialSymbolsArrowCircleLeftRounded: typeof import('~icons/material-symbols/arrow-circle-left-rounded')['default'] MaterialSymbolsArrowCircleRightRounded: typeof import('~icons/material-symbols/arrow-circle-right-rounded')['default'] MaterialSymbolsAttachFile: typeof import('~icons/material-symbols/attach-file')['default'] - MaterialSymbolsChevronLeftRounded: typeof import('~icons/material-symbols/chevron-left-rounded')['default'] MaterialSymbolsChevronRightRounded: typeof import('~icons/material-symbols/chevron-right-rounded')['default'] MaterialSymbolsCloseRounded: typeof import('~icons/material-symbols/close-rounded')['default'] MaterialSymbolsFileCopyOutline: typeof import('~icons/material-symbols/file-copy-outline')['default'] @@ -102,28 +94,18 @@ declare module '@vue/runtime-core' { MaterialSymbolsSendOutline: typeof import('~icons/material-symbols/send-outline')['default'] MaterialSymbolsTranslate: typeof import('~icons/material-symbols/translate')['default'] MaterialSymbolsWarning: typeof import('~icons/material-symbols/warning')['default'] - MaterialSymbolsWidthFull: typeof import('~icons/material-symbols/width-full')['default'] - MaterialSymbolsWidthWideOutline: typeof import('~icons/material-symbols/width-wide-outline')['default'] - 'Mdi:arrowExpandHorizontal': typeof import('~icons/mdi/arrow-expand-horizontal')['default'] MdiAccount: typeof import('~icons/mdi/account')['default'] MdiAccountCircle: typeof import('~icons/mdi/account-circle')['default'] - MdiAccountGroup: typeof import('~icons/mdi/account-group')['default'] - MdiAccountGroupIcon: typeof import('~icons/mdi/account-group-icon')['default'] - MdiAccountIcon: typeof import('~icons/mdi/account-icon')['default'] MdiAccountOutline: typeof import('~icons/mdi/account-outline')['default'] - MdiAccountPlus: typeof import('~icons/mdi/account-plus')['default'] MdiAccountPlusOutline: typeof import('~icons/mdi/account-plus-outline')['default'] - MdiAccountSupervisorOutline: typeof import('~icons/mdi/account-supervisor-outline')['default'] MdiAlpha: typeof import('~icons/mdi/alpha')['default'] MdiAlphaA: typeof import('~icons/mdi/alpha-a')['default'] MdiApi: typeof import('~icons/mdi/api')['default'] MdiArrowExpand: typeof import('~icons/mdi/arrow-expand')['default'] - MdiArrowExpandHorizontal: typeof import('~icons/mdi/arrow-expand-horizontal')['default'] MdiArrowLeftBold: typeof import('~icons/mdi/arrow-left-bold')['default'] MdiAt: typeof import('~icons/mdi/at')['default'] MdiBackburger: typeof import('~icons/mdi/backburger')['default'] MdiBookOpenOutline: typeof import('~icons/mdi/book-open-outline')['default'] - MdiBookOpenPageVariantOutline: typeof import('~icons/mdi/book-open-page-variant-outline')['default'] MdiBugOutline: typeof import('~icons/mdi/bug-outline')['default'] MdiCalculator: typeof import('~icons/mdi/calculator')['default'] MdiCalendarMonth: typeof import('~icons/mdi/calendar-month')['default'] @@ -131,7 +113,6 @@ declare module '@vue/runtime-core' { MdiCellphoneMessage: typeof import('~icons/mdi/cellphone-message')['default'] MdiChat: typeof import('~icons/mdi/chat')['default'] MdiCheck: typeof import('~icons/mdi/check')['default'] - MdiChevronDoubleLeft: typeof import('~icons/mdi/chevron-double-left')['default'] MdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] MdiChevronLeft: typeof import('~icons/mdi/chevron-left')['default'] MdiClose: typeof import('~icons/mdi/close')['default'] @@ -145,7 +126,6 @@ declare module '@vue/runtime-core' { MdiContentCopy: typeof import('~icons/mdi/content-copy')['default'] MdiContentSave: typeof import('~icons/mdi/content-save')['default'] MdiCurrencyUsd: typeof import('~icons/mdi/currency-usd')['default'] - MdiDatabase: typeof import('~icons/mdi/database')['default'] MdiDatabaseOutline: typeof import('~icons/mdi/database-outline')['default'] MdiDelete: typeof import('~icons/mdi/delete')['default'] MdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default'] @@ -169,28 +149,20 @@ declare module '@vue/runtime-core' { MdiFileUploadOutline: typeof import('~icons/mdi/file-upload-outline')['default'] MdiFilterOutline: typeof import('~icons/mdi/filter-outline')['default'] MdiFlag: typeof import('~icons/mdi/flag')['default'] - MdiFlashOutline: typeof import('~icons/mdi/flash-outline')['default'] MdiFolder: typeof import('~icons/mdi/folder')['default'] - MdiFullscreen: typeof import('~icons/mdi/fullscreen')['default'] - MdiFullscreenExit: typeof import('~icons/mdi/fullscreen-exit')['default'] MdiFunction: typeof import('~icons/mdi/function')['default'] MdiGestureDoubleTap: typeof import('~icons/mdi/gesture-double-tap')['default'] MdiGithub: typeof import('~icons/mdi/github')['default'] - MdiGmail: typeof import('~icons/mdi/gmail')['default'] - MdiGridLarge: typeof import('~icons/mdi/grid-large')['default'] MdiHeart: typeof import('~icons/mdi/heart')['default'] MdiHook: typeof import('~icons/mdi/hook')['default'] MdiInformation: typeof import('~icons/mdi/information')['default'] MdiJson: typeof import('~icons/mdi/json')['default'] MdiKeyboardReturn: typeof import('~icons/mdi/keyboard-return')['default'] - MdiKeyChange: typeof import('~icons/mdi/key-change')['default'] - MdiKeyPlus: typeof import('~icons/mdi/key-plus')['default'] MdiKeyStar: typeof import('~icons/mdi/key-star')['default'] MdiLink: typeof import('~icons/mdi/link')['default'] MdiLinkVariant: typeof import('~icons/mdi/link-variant')['default'] MdiLinkVariantRemove: typeof import('~icons/mdi/link-variant-remove')['default'] MdiLoading: typeof import('~icons/mdi/loading')['default'] - MdiLockOutlineIcon: typeof import('~icons/mdi/lock-outline-icon')['default'] MdiLogin: typeof import('~icons/mdi/login')['default'] MdiLogout: typeof import('~icons/mdi/logout')['default'] MdiMagnify: typeof import('~icons/mdi/magnify')['default'] @@ -199,32 +171,23 @@ declare module '@vue/runtime-core' { 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'] - MdiNotebookCheckOutline: typeof import('~icons/mdi/notebook-check-outline')['default'] - MdiNull: typeof import('~icons/mdi/null')['default'] MdiNumeric: typeof import('~icons/mdi/numeric')['default'] MdiOpenInNew: typeof import('~icons/mdi/open-in-new')['default'] MdiPencil: typeof import('~icons/mdi/pencil')['default'] MdiPlus: typeof import('~icons/mdi/plus')['default'] - MdiPlusBoxOutline: typeof import('~icons/mdi/plus-box-outline')['default'] MdiPlusCircleOutline: typeof import('~icons/mdi/plus-circle-outline')['default'] MdiPlusOutline: typeof import('~icons/mdi/plus-outline')['default'] - MdiPlusRoundedOutline: typeof import('~icons/mdi/plus-rounded-outline')['default'] MdiRefresh: typeof import('~icons/mdi/refresh')['default'] MdiReload: typeof import('~icons/mdi/reload')['default'] MdiRocketLaunchOutline: typeof import('~icons/mdi/rocket-launch-outline')['default'] MdiScriptTextKeyOutline: typeof import('~icons/mdi/script-text-key-outline')['default'] MdiScriptTextOutline: typeof import('~icons/mdi/script-text-outline')['default'] - MdiSearch: typeof import('~icons/mdi/search')['default'] - MdiShieldLockOutline: typeof import('~icons/mdi/shield-lock-outline')['default'] MdiSlack: typeof import('~icons/mdi/slack')['default'] MdiSort: typeof import('~icons/mdi/sort')['default'] MdiStar: typeof import('~icons/mdi/star')['default'] MdiStarOutline: typeof import('~icons/mdi/star-outline')['default'] - MdiStore: typeof import('~icons/mdi/store')['default'] MdiTable: typeof import('~icons/mdi/table')['default'] MdiTableArrowRight: typeof import('~icons/mdi/table-arrow-right')['default'] - MdiTableBorder: typeof import('~icons/mdi/table-border')['default'] - MdiTableLarge: typeof import('~icons/mdi/table-large')['default'] MdiText: typeof import('~icons/mdi/text')['default'] MdiThumbUp: typeof import('~icons/mdi/thumb-up')['default'] MdiTrashCan: typeof import('~icons/mdi/trash-can')['default'] @@ -239,6 +202,5 @@ declare module '@vue/runtime-core' { PhFileCsv: typeof import('~icons/ph/file-csv')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] - SystemUiconsExpandWidth: typeof import('~icons/system-uicons/expand-width')['default'] } } diff --git a/packages/nc-gui/components/smartsheet/Form.vue b/packages/nc-gui/components/smartsheet/Form.vue index 9f797dec50..d2c955ffaa 100644 --- a/packages/nc-gui/components/smartsheet/Form.vue +++ b/packages/nc-gui/components/smartsheet/Form.vue @@ -243,8 +243,10 @@ async function checkSMTPStatus() { emailMe.value = false // Please activate SMTP plugin in App store for enabling email notification message.info(t('msg.toast.formEmailSMTP')) + return false } } + return true } function setFormData() { @@ -263,7 +265,6 @@ function setFormData() { } catch (e) {} emailMe.value = data[state.user.value?.email as string] - checkSMTPStatus() localColumns.value = col .filter( @@ -306,12 +307,13 @@ function isRequired(_columnObj: Record, required = false) { return required || (columnObj && columnObj.rqd && !columnObj.cdf) } -function updateEmail() { +async function updateEmail() { try { + if (!(await checkSMTPStatus())) return + const data = formViewData.value?.email ? JSON.parse(formViewData.value?.email) : {} data[state.user.value?.email as string] = emailMe.value formViewData.value!.email = JSON.stringify(data) - checkSMTPStatus() } catch (e) {} } @@ -641,7 +643,7 @@ onMounted(async () => { v-if="isVirtualCol(element)" class="!m-0 gap-0 p-0" :name="element.title" - :rules="[{ required: element.required, message: `${element.title} is required` }]" + :rules="[{ required: isRequired(element, element.required), message: `${element.title} is required` }]" > { v-else class="!m-0 gap-0 p-0" :name="element.title" - :rules="[{ required: element.required, message: `${element.title} is required` }]" + :rules="[{ required: isRequired(element, element.required), message: `${element.title} is required` }]" > ) => { const isPg = computed(() => projectBaseType === 'pg') const isSharedBase = computed(() => projectType === 'base') + const router = useRouter() + async function loadProjectMetaInfo(force?: boolean) { if (!projectMetaInfo.value || force) { projectMetaInfo.value = await api.project.metaGet(project.value.id!, {}, {}) @@ -104,8 +106,15 @@ const [setup, use] = useInjectionState((_projectId?: MaybeRef) => { if (id) { project.value = await api.project.read(projectId.value) } else if (projectType === 'base') { - const baseData = await api.public.sharedBaseGet(route.params.projectId as string) - project.value = await api.project.read(baseData.project_id!) + try { + const baseData = await api.public.sharedBaseGet(route.params.projectId as string) + project.value = await api.project.read(baseData.project_id!) + } catch (e: any) { + if (e?.response?.status === 404) { + return router.push('/error/404') + } + throw e + } } else if (projectId.value) { project.value = await api.project.read(projectId.value) } else { diff --git a/packages/nc-gui/pages/error/404.vue b/packages/nc-gui/pages/error/404.vue new file mode 100644 index 0000000000..0948eb7d08 --- /dev/null +++ b/packages/nc-gui/pages/error/404.vue @@ -0,0 +1,17 @@ + + +