diff --git a/.github/ISSUE_TEMPLATE/--bug-report.yaml b/.github/ISSUE_TEMPLATE/--bug-report.yaml index e36d11df60..66f4b81e82 100644 --- a/.github/ISSUE_TEMPLATE/--bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/--bug-report.yaml @@ -53,8 +53,8 @@ body: - type: textarea attributes: - label: Attachements - description: Add any relevant attachemnts here + label: Attachments + description: Add any relevant attachment here placeholder: | > Drag & drop relevant image or videos validations: diff --git a/.github/workflows/release-nocodb.yml b/.github/workflows/release-nocodb.yml index 3a4322d9d6..dceb2732dd 100644 --- a/.github/workflows/release-nocodb.yml +++ b/.github/workflows/release-nocodb.yml @@ -103,12 +103,12 @@ jobs: NC_GITHUB_TOKEN: "${{ secrets.NC_GITHUB_TOKEN }}" # Close all issues with target tags 'Status: Ready for Next Release' - close-issues: - needs: [release-docker, process-input] - uses: ./.github/workflows/release-close-issue.yml - with: - issue_label: '🚀 Status: Ready for Next Release' - version: ${{ needs.process-input.outputs.target_tag }} + # close-issues: + # needs: [release-docker, process-input] + # uses: ./.github/workflows/release-close-issue.yml + # with: + # issue_label: '🚀 Status: Ready for Next Release' + # version: ${{ needs.process-input.outputs.target_tag }} # Publish Docs publish-docs: diff --git a/packages/nc-gui/assets/style.scss b/packages/nc-gui/assets/style.scss index d737db1989..b6409e84a8 100644 --- a/packages/nc-gui/assets/style.scss +++ b/packages/nc-gui/assets/style.scss @@ -34,7 +34,7 @@ a { } .nc-icon { - @apply color-transition; + @apply color-transition inline; } // menu item styling diff --git a/packages/nc-gui/components/cell/Checkbox.vue b/packages/nc-gui/components/cell/Checkbox.vue index dfffdec862..1de2de9d79 100644 --- a/packages/nc-gui/components/cell/Checkbox.vue +++ b/packages/nc-gui/components/cell/Checkbox.vue @@ -63,7 +63,7 @@ useSelectedCellKeyupListener(active, (e) => { + + diff --git a/packages/nc-gui/components/smartsheet/Form.vue b/packages/nc-gui/components/smartsheet/Form.vue index 19a9482c63..8b159cf669 100644 --- a/packages/nc-gui/components/smartsheet/Form.vue +++ b/packages/nc-gui/components/smartsheet/Form.vue @@ -662,7 +662,12 @@ watch(view, (nextView) => { v-if="isVirtualCol(element)" :name="element.title" class="!mb-0" - :rules="[{ required: isRequired(element, element.required), message: `${element.title} is required` }]" + :rules="[ + { + required: isRequired(element, element.required), + message: `${element.label || element.title} is required`, + }, + ]" > { v-else :name="element.title" class="!mb-0" - :rules="[{ required: isRequired(element, element.required), message: `${element.title} is required` }]" + :rules="[ + { + required: isRequired(element, element.required), + message: `${element.label || element.title} is required`, + }, + ]" > (null) const expandedFormDlg = ref(false) const expandedFormRow = ref() const expandedFormRowState = ref>() -const tbodyEl = ref() const gridWrapper = ref() const tableHead = ref() -const isAddingColumnAllowed = !readOnly.value && !isLocked.value && isUIAllowed('add-column') && !isSqlView.value +const isAddingColumnAllowed = $computed(() => !readOnly.value && !isLocked.value && isUIAllowed('add-column') && !isSqlView.value) -const isAddingEmptyRowAllowed = !isView && !isLocked.value && hasEditPermission && !isSqlView.value +const isAddingEmptyRowAllowed = $computed(() => !isView && !isLocked.value && hasEditPermission && !isSqlView.value) const { isLoading, @@ -182,6 +181,8 @@ const { clearSelectedRange, copyValue, isCellActive, + tbodyEl, + resetSelectedRange, } = useMultiSelect( meta, fields, @@ -279,6 +280,17 @@ const { if (isAddingEmptyRowAllowed) { $e('c:shortcut', { key: 'ALT + R' }) addEmptyRow() + activeCell.row = data.value.length - 1 + activeCell.col = 0 + resetSelectedRange() + makeEditable(data.value[activeCell.row], fields.value[activeCell.col]) + nextTick(() => { + ;( + document.querySelector('td.cell.active')?.querySelector('input,textarea') as + | HTMLInputElement + | HTMLTextAreaElement + )?.focus() + }) } break } @@ -483,7 +495,7 @@ useEventListener(document, 'keyup', async (e: KeyboardEvent) => { /** On clicking outside of table reset active cell */ const smartTable = ref(null) -onClickOutside(smartTable, (e) => { +onClickOutside(tbodyEl, (e) => { // do nothing if context menu was open if (contextMenu.value) return @@ -558,11 +570,14 @@ const saveOrUpdateRecords = async (args: { metaValue?: TableType; viewMetaValue? currentRow.rowMeta.changed = false continue } + /** if existing row check updated cell and invoke update method */ if (currentRow.rowMeta.changed) { currentRow.rowMeta.changed = false for (const field of (args.metaValue || meta.value)?.columns ?? []) { - if (isVirtualCol(field)) continue + // `url` would be enriched in attachment during listing + // hence it would consider as a change while it is not necessary to update + if (isVirtualCol(field) || field.uidt === UITypes.Attachment) continue if (field.title! in currentRow.row && currentRow.row[field.title!] !== currentRow.oldRow[field.title!]) { await updateOrSaveRow(currentRow, field.title!, {}, args) } @@ -699,7 +714,7 @@ const rowHeight = computed(() => { @contextmenu="showContextMenu" > - +