diff --git a/.github/workflows/dispatch-oss.yml b/.github/workflows/dispatch-oss.yml new file mode 100644 index 0000000000..3db310bc79 --- /dev/null +++ b/.github/workflows/dispatch-oss.yml @@ -0,0 +1,20 @@ +name: "Dispatch OSS" + +on: + workflow_dispatch: + push: + branches: [ develop ] + +jobs: + push: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + github-token: ${{ secrets.OSS_DISPATCH }} + script: | + const result = await github.rest.repos.createDispatchEvent({ + owner: 'nocodb', + repo: 'nocohub', + event_type: 'OSS' + }) diff --git a/.github/workflows/playwright-test-workflow.yml b/.github/workflows/playwright-test-workflow.yml index 5f2434c5d7..c2c7a0e01d 100644 --- a/.github/workflows/playwright-test-workflow.yml +++ b/.github/workflows/playwright-test-workflow.yml @@ -181,4 +181,20 @@ jobs: working-directory: ./packages/nocodb run: | service postgresql stop - service mysql stop \ No newline at end of file + service mysql stop + - name: Copy Artifacts to Local Artifacts Dir + if: always() + working-directory: ./ + run: | + # expects the variables to be available in runner context. + path="gh-artifacts/runs/${GITHUB_RUN_ID}/run-attempt/${GITHUB_RUN_ATTEMPT}/job_name/"${GITHUB_JOB}"-${{ inputs.shard }}/${RANDOM}-$(date +%s)" + target_dir="/mnt/${path}" + mkdir -p ${target_dir} + mkdir -p ${target_dir}/playwright-report + # start : add any artifacts to be copied here + cp -r ./tests/playwright/playwright-report ${target_dir}/ || echo "playwright reports directory does not exists" >> ${target_dir}/playwright-report/index.html + cp ./packages/nocodb/*_test_backend.log ${target_dir}/ || echo "backend logs file does not exists" >> ${target_dir}/index.html + # end: artifacts copy + SUMMARY='[Artifacts](http://135.181.48.96/'${path}') + [playwright-report](http://135.181.48.96/'${path}'/playwright-report)' + echo "$SUMMARY" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/packages/nc-gui/components.d.ts b/packages/nc-gui/components.d.ts index 3f0a87fac6..9b24a0e022 100644 --- a/packages/nc-gui/components.d.ts +++ b/packages/nc-gui/components.d.ts @@ -80,12 +80,10 @@ declare module '@vue/runtime-core' { ClarityColorPickerSolid: typeof import('~icons/clarity/color-picker-solid')['default'] ClaritySuccessLine: typeof import('~icons/clarity/success-line')['default'] IcBaselineMoreVert: typeof import('~icons/ic/baseline-more-vert')['default'] - IcOutlineAccessTime: typeof import('~icons/ic/outline-access-time')['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'] IcRoundSearch: typeof import('~icons/ic/round-search')['default'] - IcRoundStarBorder: typeof import('~icons/ic/round-star-border')['default'] LogosGoogleGmail: typeof import('~icons/logos/google-gmail')['default'] MaterialSymbolsArrowCircleLeftRounded: typeof import('~icons/material-symbols/arrow-circle-left-rounded')['default'] MaterialSymbolsArrowCircleRightRounded: typeof import('~icons/material-symbols/arrow-circle-right-rounded')['default'] @@ -95,8 +93,6 @@ declare module '@vue/runtime-core' { MaterialSymbolsDarkModeOutline: typeof import('~icons/material-symbols/dark-mode-outline')['default'] MaterialSymbolsDeleteOutlineRounded: typeof import('~icons/material-symbols/delete-outline-rounded')['default'] MaterialSymbolsFileCopyOutline: typeof import('~icons/material-symbols/file-copy-outline')['default'] - MaterialSymbolsGroupOutlineRounded: typeof import('~icons/material-symbols/group-outline-rounded')['default'] - MaterialSymbolsInboxOutlineRounded: typeof import('~icons/material-symbols/inbox-outline-rounded')['default'] MaterialSymbolsKeyboardArrowDownRounded: typeof import('~icons/material-symbols/keyboard-arrow-down-rounded')['default'] MaterialSymbolsKeyboardReturn: typeof import('~icons/material-symbols/keyboard-return')['default'] MaterialSymbolsLightModeOutline: typeof import('~icons/material-symbols/light-mode-outline')['default'] @@ -125,20 +121,15 @@ declare module '@vue/runtime-core' { MdiChatProcessingOutline: typeof import('~icons/mdi/chat-processing-outline')['default'] MdiCheck: typeof import('~icons/mdi/check')['default'] MdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] - MdiChevronLeft: typeof import('~icons/mdi/chevron-left')['default'] MdiChevronRight: typeof import('~icons/mdi/chevron-right')['default'] MdiCircleMedium: typeof import('~icons/mdi/circle-medium')['default'] MdiClose: typeof import('~icons/mdi/close')['default'] - MdiCloseCircleOutline: typeof import('~icons/mdi/close-circle-outline')['default'] MdiCodeTags: typeof import('~icons/mdi/code-tags')['default'] MdiContentCopy: typeof import('~icons/mdi/content-copy')['default'] MdiCurrencyUsd: typeof import('~icons/mdi/currency-usd')['default'] - MdiDatabaseOutline: typeof import('~icons/mdi/database-outline')['default'] - MdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default'] MdiDiscord: typeof import('~icons/mdi/discord')['default'] MdiDotsHorizontal: typeof import('~icons/mdi/dots-horizontal')['default'] MdiDotsVertical: typeof import('~icons/mdi/dots-vertical')['default'] - MdiEditOutline: typeof import('~icons/mdi/edit-outline')['default'] MdiEye: typeof import('~icons/mdi/eye')['default'] MdiFlag: typeof import('~icons/mdi/flag')['default'] MdiFolder: typeof import('~icons/mdi/folder')['default'] @@ -152,8 +143,6 @@ declare module '@vue/runtime-core' { MdiMicrosoftTeams: typeof import('~icons/mdi/microsoft-teams')['default'] MdiMoonFull: typeof import('~icons/mdi/moon-full')['default'] MdiPlus: typeof import('~icons/mdi/plus')['default'] - MdiPlusOutline: typeof import('~icons/mdi/plus-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'] MdiScriptTextOutline: typeof import('~icons/mdi/script-text-outline')['default'] diff --git a/packages/nc-gui/components/api-client/Params.vue b/packages/nc-gui/components/api-client/Params.vue index 61aa3f1f2c..49e1eaca74 100644 --- a/packages/nc-gui/components/api-client/Params.vue +++ b/packages/nc-gui/components/api-client/Params.vue @@ -23,6 +23,7 @@ const deleteParamRow = (i: number) => { + @@ -39,6 +40,11 @@ const deleteParamRow = (i: number) => { +
Parameter Name
+ + + + diff --git a/packages/nc-gui/components/dlg/AirtableImport.vue b/packages/nc-gui/components/dlg/AirtableImport.vue index 73cb9905f9..d94329e29d 100644 --- a/packages/nc-gui/components/dlg/AirtableImport.vue +++ b/packages/nc-gui/components/dlg/AirtableImport.vue @@ -57,6 +57,7 @@ const syncSource = ref({ syncDirection: 'Airtable to NocoDB', syncRetryCount: 1, apiKey: '', + appId: '', shareId: '', syncSourceUrlOrId: '', options: { @@ -158,7 +159,8 @@ async function loadSyncSrc() { if (srcs && srcs[0]) { srcs[0].details = srcs[0].details || {} syncSource.value = migrateSync(srcs[0]) - syncSource.value.details.syncSourceUrlOrId = srcs[0].details.shareId + syncSource.value.details.syncSourceUrlOrId = + srcs[0].details.appId && srcs[0].details.appId.length > 0 ? srcs[0].details.syncSourceUrlOrId : srcs[0].details.shareId $jobs.subscribe({ syncId: syncSource.value.id }, onSubscribe, onStatus, onLog) } else { syncSource.value = { @@ -169,6 +171,7 @@ async function loadSyncSrc() { syncDirection: 'Airtable to NocoDB', syncRetryCount: 1, apiKey: '', + appId: '', shareId: '', syncSourceUrlOrId: '', options: { @@ -242,6 +245,8 @@ watch( if (syncSource.value.details) { const m = v && v.match(/(exp|shr).{14}/g) syncSource.value.details.shareId = m ? m[0] : '' + const m2 = v && v.match(/(app).{14}/g) + syncSource.value.details.appId = m2 ? m2[0] : '' } }, ) @@ -296,7 +301,7 @@ onMounted(async () => { diff --git a/packages/nc-gui/components/smartsheet/Gallery.vue b/packages/nc-gui/components/smartsheet/Gallery.vue index 43b4703e23..40ba4a9a6c 100644 --- a/packages/nc-gui/components/smartsheet/Gallery.vue +++ b/packages/nc-gui/components/smartsheet/Gallery.vue @@ -39,6 +39,7 @@ const reloadViewDataHook = inject(ReloadViewDataHookInj) const openNewRecordFormHook = inject(OpenNewRecordFormHookInj, createEventHook()) const { isViewDataLoading } = storeToRefs(useViewsStore()) +const { isSqlView, xWhere } = useSmartsheetStoreOrThrow() const expandedFormDlg = ref(false) const expandedFormRow = ref() @@ -54,7 +55,7 @@ const { addEmptyRow, deleteRow, navigateToSiblingRow, -} = useViewData(meta, view) +} = useViewData(meta, view, xWhere) provide(IsFormInj, ref(false)) provide(IsGalleryInj, ref(true)) @@ -85,8 +86,6 @@ const isRowEmpty = (record: any, col: any) => { return Array.isArray(val) && val.length === 0 } -const { isSqlView } = useSmartsheetStoreOrThrow() - const { isUIAllowed } = useUIPermission() const hasEditPermission = computed(() => isUIAllowed('xcDatatableEditable')) // TODO: extract this code (which is duplicated in grid and gallery) into a separate component diff --git a/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue b/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue index 417c05c11a..05e9e7594b 100644 --- a/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue +++ b/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue @@ -50,7 +50,7 @@ vModel.value.au = !!vModel.value.au */ @@ -59,7 +59,6 @@ vModel.value.au = !!vModel.value.au */ @@ -68,17 +67,17 @@ vModel.value.au = !!vModel.value.au */ - + - + @@ -96,13 +95,13 @@ vModel.value.au = !!vModel.value.au */ - + diff --git a/packages/nc-gui/components/smartsheet/grid/Table.vue b/packages/nc-gui/components/smartsheet/grid/Table.vue index b7075a1335..ef05be4d58 100644 --- a/packages/nc-gui/components/smartsheet/grid/Table.vue +++ b/packages/nc-gui/components/smartsheet/grid/Table.vue @@ -1124,7 +1124,7 @@ defineExpose({ }) // when expand is clicked the drawer should open -// and cell should loose focs +// and cell should loose focus const expandAndLooseFocus = (row: Row, col: Record) => { if (expandForm) { expandForm(row, col) diff --git a/packages/nc-gui/components/smartsheet/header/Cell.vue b/packages/nc-gui/components/smartsheet/header/Cell.vue index 4ba762705d..dc287fb699 100644 --- a/packages/nc-gui/components/smartsheet/header/Cell.vue +++ b/packages/nc-gui/components/smartsheet/header/Cell.vue @@ -1,6 +1,6 @@ - - diff --git a/packages/nc-gui/pages/index-old/index.vue b/packages/nc-gui/pages/index-old/index.vue deleted file mode 100644 index 0e7d4a931d..0000000000 --- a/packages/nc-gui/pages/index-old/index.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/packages/nc-gui/pages/index-old/index/[projectId].vue b/packages/nc-gui/pages/index-old/index/[projectId].vue deleted file mode 100644 index 35862ff1e4..0000000000 --- a/packages/nc-gui/pages/index-old/index/[projectId].vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/packages/nc-gui/pages/index-old/index/create-external.vue b/packages/nc-gui/pages/index-old/index/create-external.vue deleted file mode 100644 index d81a051f0a..0000000000 --- a/packages/nc-gui/pages/index-old/index/create-external.vue +++ /dev/null @@ -1,643 +0,0 @@ - - - - - diff --git a/packages/nc-gui/pages/index-old/index/create.vue b/packages/nc-gui/pages/index-old/index/create.vue deleted file mode 100644 index 0ccc063328..0000000000 --- a/packages/nc-gui/pages/index-old/index/create.vue +++ /dev/null @@ -1,171 +0,0 @@ - - - - - diff --git a/packages/nc-gui/pages/index-old/index/index-old.vue b/packages/nc-gui/pages/index-old/index/index-old.vue deleted file mode 100644 index 556204e9d4..0000000000 --- a/packages/nc-gui/pages/index-old/index/index-old.vue +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - diff --git a/packages/nc-gui/pages/index-old/index/index.vue b/packages/nc-gui/pages/index-old/index/index.vue deleted file mode 100644 index dc7795fe99..0000000000 --- a/packages/nc-gui/pages/index-old/index/index.vue +++ /dev/null @@ -1,306 +0,0 @@ - - - - - diff --git a/packages/nc-gui/pages/index-old/index/user.vue b/packages/nc-gui/pages/index-old/index/user.vue deleted file mode 100644 index 37a87b1335..0000000000 --- a/packages/nc-gui/pages/index-old/index/user.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - diff --git a/packages/nc-gui/pages/index.vue b/packages/nc-gui/pages/index.vue index 2f7583f126..d4cdaf1485 100644 --- a/packages/nc-gui/pages/index.vue +++ b/packages/nc-gui/pages/index.vue @@ -35,6 +35,12 @@ const isSharedView = computed(() => { // check route is not project page by route name return !routeName.startsWith('index-typeOrId-projectId-') && !['index', 'index-typeOrId'].includes(routeName) }) +const isSharedFormView = computed(() => { + const routeName = (route.value.name as string) || '' + + // check route is shared form view route + return routeName.startsWith('index-typeOrId-form-viewId') +}) watch( () => route.value.params.typeOrId, @@ -67,7 +73,10 @@ provide(ToggleDialogInj, toggleDialog)