From e0f8338991a97d7819dea31dafe0fd413ec843b0 Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Fri, 13 Feb 2026 16:56:35 +0400 Subject: [PATCH 1/4] Add dropdown loading state when adding date dependency field (#4747) --- .../DateDependencyFieldPicker.vue | 33 +++++++++++-------- .../dateDependency/DateDependencyModal.vue | 23 ++++++++++--- .../core/assets/scss/components/select.scss | 7 ++++ 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyFieldPicker.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyFieldPicker.vue index 99a56cd86e..5fc2fbccc6 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyFieldPicker.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyFieldPicker.vue @@ -7,16 +7,15 @@ :error="hasError" > - + @@ -83,6 +86,7 @@ export default { }, disabled: { type: Boolean, required: false, default: false }, addNew: { type: Boolean, required: false, default: false }, + loading: { type: Boolean, required: false, default: true }, }, computed: { errorMessageStr() { @@ -96,8 +100,9 @@ export default { }, }, methods: { - isAddNew(value) { - return value === 'add-new' + async hideDropdown() { + await this.$nextTick() + this.$refs.dropdown.hide() }, }, } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyModal.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyModal.vue index 5c7ed6dab2..22e5078584 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyModal.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/dateDependency/DateDependencyModal.vue @@ -39,6 +39,8 @@ icon="iconoir-calendar" :errors="v$.dependency.start_date_field_id.$errors" :field-name="$t('dateDependencyModal.startDateFieldLabel')" + :disabled="creatingField" + :loading="creatingField" add-new @add-new="addNewField('start_date_field_id')" /> @@ -52,6 +54,8 @@ :errors="v$.dependency.end_date_field_id.$errors" icon="iconoir-calendar" :field-name="$t('dateDependencyModal.endDateFieldLabel')" + :disabled="creatingField" + :loading="creatingField" add-new @add-new="addNewField('end_date_field_id')" /> @@ -68,6 +72,8 @@ icon="iconoir-clock-rotate-right" :field-name="$t('dateDependencyModal.durationFieldLabel')" :helper-text="$t('dateDependencyModal.durationFieldHint')" + :disabled="creatingField" + :loading="creatingField" add-new @add-new="addNewField('duration_field_id')" /> @@ -87,6 +93,8 @@ :helper-text=" $t('dateDependencyModal.dependencyLinkrowFieldHint') " + :disabled="creatingField" + :loading="creatingField" add-new @add-new="addNewField('dependency_linkrow_field_id')" /> @@ -154,6 +162,7 @@ export default { dependency_linkrow_field_id: null, }, loading: false, + creatingField: false, fields: [], ready: false, } @@ -298,10 +307,16 @@ export default { ) fieldDef.values.name = fieldName - const fieldCreated = await this.handleCreateField(fieldDef) - // fields is not using fields store, so we need to update it manually - this.fields.push(fieldCreated) - this.dependency[dependencyFieldName] = fieldCreated.id + this.creatingField = true + try { + const fieldCreated = await this.handleCreateField(fieldDef) + // fields is not using fields store, so we need to update it manually + this.fields.push(fieldCreated) + this.dependency[dependencyFieldName] = fieldCreated.id + } finally { + this.creatingField = false + this.$refs[dependencyFieldName].hideDropdown() + } }, async fetchFields() { diff --git a/web-frontend/modules/core/assets/scss/components/select.scss b/web-frontend/modules/core/assets/scss/components/select.scss index 7cf3b71e6d..b2cbf72b4d 100644 --- a/web-frontend/modules/core/assets/scss/components/select.scss +++ b/web-frontend/modules/core/assets/scss/components/select.scss @@ -287,6 +287,13 @@ &.button--loading { background-color: $palette-neutral-400; + + &::after { + position: relative; + top: 0; + left: 0; + margin: 0; + } } } From 80ab245c48d3532e764887600f1c50fc062c4d63 Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Fri, 13 Feb 2026 16:56:45 +0400 Subject: [PATCH 2/4] fix: move field context hide and loading reset calls to execute earlier (#4749) --- .../modules/database/components/field/FieldContext.vue | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/web-frontend/modules/database/components/field/FieldContext.vue b/web-frontend/modules/database/components/field/FieldContext.vue index 4b766e8c7e..f6f7ec0ad0 100644 --- a/web-frontend/modules/database/components/field/FieldContext.vue +++ b/web-frontend/modules/database/components/field/FieldContext.vue @@ -187,6 +187,8 @@ export default { try { const { data } = await this.$store.dispatch('field/deleteCall', field) this.$emit('delete') + this.hide() + this.deleteLoading = false await this.$store.dispatch('field/forceDelete', field) await this.$store.dispatch('field/forceUpdateFields', { fields: data.related_fields, @@ -198,13 +200,14 @@ export default { } catch (error) { if (error.response && error.response.status === 404) { this.$emit('delete') + this.hide() + this.deleteLoading = false await this.$store.dispatch('field/forceDelete', field) } else { notifyIf(error, 'field') + this.deleteLoading = false } } - this.hide() - this.deleteLoading = false }, }, } From 40ab8d08114751d1b85b5706f838c08fa6e76ba5 Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Fri, 13 Feb 2026 16:57:06 +0400 Subject: [PATCH 3/4] feat: Introduce `RouterViewPlaceholder` component and assign it to the `database-table-row` route. (#4751) --- .../core/components/RouterViewPlaceholder.vue | 15 +++++++++++++++ web-frontend/modules/database/routes.js | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 web-frontend/modules/core/components/RouterViewPlaceholder.vue diff --git a/web-frontend/modules/core/components/RouterViewPlaceholder.vue b/web-frontend/modules/core/components/RouterViewPlaceholder.vue new file mode 100644 index 0000000000..ee082dc282 --- /dev/null +++ b/web-frontend/modules/core/components/RouterViewPlaceholder.vue @@ -0,0 +1,15 @@ + + + diff --git a/web-frontend/modules/database/routes.js b/web-frontend/modules/database/routes.js index 6f76b85ec0..3fdf33bb33 100644 --- a/web-frontend/modules/database/routes.js +++ b/web-frontend/modules/database/routes.js @@ -14,6 +14,10 @@ export const routes = [ { path: 'row/:rowId', name: 'database-table-row', + file: path.resolve( + __dirname, + '../core/components/RouterViewPlaceholder.vue' + ), }, { path: 'webhooks', From f7d37f7bd6bfc6f4dcfabfe11ef986205c72e8ad Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Fri, 13 Feb 2026 16:57:22 +0400 Subject: [PATCH 4/4] Fix builder settings modal menu highlighting (#4750) --- .../components/settings/AutomationSettingsModal.vue | 6 +++++- .../builder/components/settings/BuilderSettingsModal.vue | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/web-frontend/modules/automation/components/settings/AutomationSettingsModal.vue b/web-frontend/modules/automation/components/settings/AutomationSettingsModal.vue index 99e995a312..f1f3b7cbcc 100644 --- a/web-frontend/modules/automation/components/settings/AutomationSettingsModal.vue +++ b/web-frontend/modules/automation/components/settings/AutomationSettingsModal.vue @@ -17,7 +17,11 @@
  • diff --git a/web-frontend/modules/builder/components/settings/BuilderSettingsModal.vue b/web-frontend/modules/builder/components/settings/BuilderSettingsModal.vue index 3bd0700ca7..f0fcad0827 100644 --- a/web-frontend/modules/builder/components/settings/BuilderSettingsModal.vue +++ b/web-frontend/modules/builder/components/settings/BuilderSettingsModal.vue @@ -16,7 +16,11 @@