From f6225db3b091ba87c0737a933d763cc4470f3d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20St=C5=99=C3=ADbn=C3=BD?= Date: Tue, 31 Mar 2026 10:31:15 +0200 Subject: [PATCH 1/2] Don't allow 0 as valid form value for required rating field (#5084) --- .../contrib/database/fields/field_types.py | 33 +++++--- .../api/views/form/test_form_view_views.py | 83 +++++++++++++++++++ .../unreleased/bug/4985_rating_field_0.json | 9 ++ .../components/row/RowEditFieldRating.vue | 3 + web-frontend/modules/database/fieldTypes.js | 7 ++ 5 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 changelog/entries/unreleased/bug/4985_rating_field_0.json diff --git a/backend/src/baserow/contrib/database/fields/field_types.py b/backend/src/baserow/contrib/database/fields/field_types.py index 82831793db..fcc210dda0 100755 --- a/backend/src/baserow/contrib/database/fields/field_types.py +++ b/backend/src/baserow/contrib/database/fields/field_types.py @@ -910,16 +910,29 @@ def prepare_value_for_db(self, instance, value): return value def get_serializer_field(self, instance, **kwargs): - return serializers.IntegerField( - **{ - "required": False, - "allow_null": False, - "min_value": 0, - "default": 0, - "max_value": instance.max_value, - **kwargs, - } - ) + required = kwargs.get("required", False) + field_kwargs = { + "required": False, + "allow_null": False, + "min_value": 0, + "default": 0, + "max_value": instance.max_value, + **kwargs, + } + if required: + field_kwargs.pop("default", None) + validators = field_kwargs.get("validators", []) + validators.append(self._rating_required_validator) + field_kwargs["validators"] = validators + return serializers.IntegerField(**field_kwargs) + + @staticmethod + def _rating_required_validator(value): + if value == 0: + raise ValidationError( + "This field is required.", + code="required", + ) def force_same_type_alter_column(self, from_field, to_field): """ diff --git a/backend/tests/baserow/contrib/database/api/views/form/test_form_view_views.py b/backend/tests/baserow/contrib/database/api/views/form/test_form_view_views.py index 6780ff9999..9015393dcc 100644 --- a/backend/tests/baserow/contrib/database/api/views/form/test_form_view_views.py +++ b/backend/tests/baserow/contrib/database/api/views/form/test_form_view_views.py @@ -2995,6 +2995,89 @@ def test_submit_form_view_for_required_number_field_with_0(api_client, data_fixt } +@pytest.mark.django_db +def test_submit_form_view_for_required_rating_field_with_0(api_client, data_fixture): + user, token = data_fixture.create_user_and_token() + table = data_fixture.create_database_table(user=user) + form = data_fixture.create_form_view( + table=table, + submit_action_message="Test", + submit_action_redirect_url="https://baserow.io", + ) + rating_field = data_fixture.create_rating_field(table=table) + data_fixture.create_form_view_field_option( + form, rating_field, required=True, enabled=True, order=2 + ) + + url = reverse("api:database:views:form:submit", kwargs={"slug": form.slug}) + + # Submitting 0 should fail because 0 means "no rating" for a required rating field + response = api_client.post( + url, + {f"field_{rating_field.id}": 0}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_400_BAD_REQUEST + response_json = response.json() + assert response_json["detail"][f"field_{rating_field.id}"][0]["code"] == "required" + + # Submitting a valid rating should succeed + response = api_client.post( + url, + {f"field_{rating_field.id}": 3}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert response_json == { + "row_id": AnyInt(), + "submit_action": "MESSAGE", + "submit_action_message": "Test", + "submit_action_redirect_url": "https://baserow.io", + } + + +@pytest.mark.django_db +def test_submit_form_view_for_non_required_rating_field_with_0( + api_client, data_fixture +): + """ + Submitting 0 should succeed when the rating field is not required. + """ + + user, token = data_fixture.create_user_and_token() + table = data_fixture.create_database_table(user=user) + form = data_fixture.create_form_view( + table=table, + submit_action_message="Test", + submit_action_redirect_url="https://baserow.io", + ) + rating_field = data_fixture.create_rating_field(table=table) + data_fixture.create_form_view_field_option( + form, rating_field, required=False, enabled=True, order=2 + ) + + url = reverse("api:database:views:form:submit", kwargs={"slug": form.slug}) + + response = api_client.post( + url, + {f"field_{rating_field.id}": 0}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert response_json == { + "row_id": AnyInt(), + "submit_action": "MESSAGE", + "submit_action_message": "Test", + "submit_action_redirect_url": "https://baserow.io", + } + + @pytest.mark.django_db def test_upload_file_view(api_client, data_fixture, tmpdir): user, token = data_fixture.create_user_and_token( diff --git a/changelog/entries/unreleased/bug/4985_rating_field_0.json b/changelog/entries/unreleased/bug/4985_rating_field_0.json new file mode 100644 index 0000000000..5905fbb9fb --- /dev/null +++ b/changelog/entries/unreleased/bug/4985_rating_field_0.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Rating field now doesn't accept 0 as a valid value in form views when the field is required", + "issue_origin": "github", + "issue_number": 4985, + "domain": "database", + "bullet_points": [], + "created_at": "2026-03-30" +} diff --git a/web-frontend/modules/database/components/row/RowEditFieldRating.vue b/web-frontend/modules/database/components/row/RowEditFieldRating.vue index f13c46aade..52811d6225 100644 --- a/web-frontend/modules/database/components/row/RowEditFieldRating.vue +++ b/web-frontend/modules/database/components/row/RowEditFieldRating.vue @@ -10,6 +10,9 @@ @update="update" /> +
+ {{ getError() }} +
diff --git a/web-frontend/modules/database/fieldTypes.js b/web-frontend/modules/database/fieldTypes.js index 1a8c079c09..19abf4741b 100644 --- a/web-frontend/modules/database/fieldTypes.js +++ b/web-frontend/modules/database/fieldTypes.js @@ -1994,6 +1994,13 @@ export class RatingFieldType extends FieldType { return 0 } + isEmpty(field, value) { + if (value === 0) { + return true + } + return super.isEmpty(field, value) + } + canUpsert() { return true } From df68bd93396558b32ffc1b5a792412dea3226e5b Mon Sep 17 00:00:00 2001 From: Davide Silvestri <75379892+silvestrid@users.noreply.github.com> Date: Tue, 31 Mar 2026 14:42:43 +0200 Subject: [PATCH 2/2] fix (grid view): group by flickering at every change (#5043) * revert: undo unnecessary frontend changes from f6a7d302f Revert all frontend changes introduced in "fix: bug in public view with hidden group by" (f6a7d302f). The backend changes from that commit are kept as they are the actual fix for the public view bug. The reverted frontend changes caused a regression where group bys would flicker (disappear and reappear) when changing the group by order, because activeGroupBys was being cleared at the start of every refresh. * fix: public view crash when group by is added or removed Add ViewType.forceViewRefresh() method that handles updating the view, fields, and (for grid views) activeGroupBys atomically during a force_view_refresh realtime event. This prevents components from accessing fields that have been removed or haven't been added yet. Also fix LinkRowFieldType.isEqual crashing with null/undefined values when rows have no linked items. * fix: inconsistency in counting hidden fields in grid view * fix issue deleting/restoring group bys --- web-frontend/justfile | 4 +- .../components/field/DuplicateFieldModal.vue | 1 + .../components/field/InsertFieldContext.vue | 1 + .../components/view/grid/GridViewGroup.vue | 30 ++- .../components/view/grid/GridViewGroups.vue | 10 +- .../components/view/grid/GridViewHead.vue | 20 +- .../components/view/grid/GridViewHide.vue | 20 +- .../components/view/grid/GridViewSection.vue | 15 +- .../view/grid/GroupByFieldLinkRow.vue | 40 --- web-frontend/modules/database/fieldTypes.js | 17 +- .../database/mixins/gridViewHelpers.js | 29 +-- web-frontend/modules/database/realtime.js | 17 +- web-frontend/modules/database/store/view.js | 2 +- .../modules/database/store/view/grid.js | 16 +- web-frontend/modules/database/utils/view.js | 12 +- web-frontend/modules/database/viewTypes.js | 46 +++- .../__snapshots__/publicView.spec.js.snap | 68 +----- .../database/__snapshots__/table.spec.js.snap | 56 +---- .../galleryViewDecoration.spec.js.snap | 63 +---- .../gridViewDecoration.spec.js.snap | 231 ++---------------- 20 files changed, 167 insertions(+), 531 deletions(-) delete mode 100644 web-frontend/modules/database/components/view/grid/GroupByFieldLinkRow.vue diff --git a/web-frontend/justfile b/web-frontend/justfile index 0148f15bd3..04300b604c 100644 --- a/web-frontend/justfile +++ b/web-frontend/justfile @@ -102,10 +102,10 @@ test *ARGS: ci-test: yarn test:coverage -# Update Jest snapshots +# Update Vitest snapshots [group('3 - testing')] update-snapshots: - yarn test --update + EXTRA_VITEST_PARAMS="--update" yarn test # ============================================================================= # Development diff --git a/web-frontend/modules/database/components/field/DuplicateFieldModal.vue b/web-frontend/modules/database/components/field/DuplicateFieldModal.vue index 9d72e67201..3ff96d7549 100644 --- a/web-frontend/modules/database/components/field/DuplicateFieldModal.vue +++ b/web-frontend/modules/database/components/field/DuplicateFieldModal.vue @@ -122,6 +122,7 @@ export default { position: 'right', fromField: this.fromField, undoRedoActionGroupId: this.actionGroupId, + visible: true, }) this.onDuplicationEnd() } diff --git a/web-frontend/modules/database/components/field/InsertFieldContext.vue b/web-frontend/modules/database/components/field/InsertFieldContext.vue index 648a7a4ecf..9129cf2e86 100644 --- a/web-frontend/modules/database/components/field/InsertFieldContext.vue +++ b/web-frontend/modules/database/components/field/InsertFieldContext.vue @@ -59,6 +59,7 @@ export default { position: this.position, fromField: this.fromField, undoRedoActionGroupId, + visible: true, // when inserting a new field, it should always be visible }) }, toggle(ref, position) { diff --git a/web-frontend/modules/database/components/view/grid/GridViewGroup.vue b/web-frontend/modules/database/components/view/grid/GridViewGroup.vue index 64970b4b0d..8f48b0718c 100644 --- a/web-frontend/modules/database/components/view/grid/GridViewGroup.vue +++ b/web-frontend/modules/database/components/view/grid/GridViewGroup.vue @@ -2,7 +2,12 @@
- +
{{ count }} @@ -19,8 +24,8 @@ export default { type: Object, required: true, }, - field: { - type: Object, + allFieldsInTable: { + type: Array, required: true, }, value: { @@ -33,9 +38,24 @@ export default { }, }, computed: { + field() { + return this.getField(this.allFieldsInTable, this.groupBy) + }, groupByComponent() { - const fieldType = this.$registry.get('field', this.field.type) - return fieldType.getGroupByComponent(this.field) + if (!this.field) { + return null + } + return this.getGroupByComponent(this.field, this) + }, + }, + methods: { + getField(allFieldsInTable, groupBy) { + const field = allFieldsInTable.find((f) => f.id === groupBy.field) + return field + }, + getGroupByComponent(field, parent) { + const fieldType = parent.$registry.get('field', field.type) + return fieldType.getGroupByComponent(field) }, }, } diff --git a/web-frontend/modules/database/components/view/grid/GridViewGroups.vue b/web-frontend/modules/database/components/view/grid/GridViewGroups.vue index 215237ef61..df0dbbd537 100644 --- a/web-frontend/modules/database/components/view/grid/GridViewGroups.vue +++ b/web-frontend/modules/database/components/view/grid/GridViewGroups.vue @@ -20,7 +20,7 @@ > @@ -40,6 +40,14 @@ export default { components: { GridViewGroup }, mixins: [gridViewHelpers], props: { + /** + * All the fields in the table, regardless of the visibility, or whether they + * should be rendered. + */ + allFieldsInTable: { + type: Array, + required: true, + }, groupByValueSets: { type: Array, required: true, diff --git a/web-frontend/modules/database/components/view/grid/GridViewHead.vue b/web-frontend/modules/database/components/view/grid/GridViewHead.vue index f09c44bb9d..dd97c04ee2 100644 --- a/web-frontend/modules/database/components/view/grid/GridViewHead.vue +++ b/web-frontend/modules/database/components/view/grid/GridViewHead.vue @@ -1,12 +1,13 @@ diff --git a/web-frontend/modules/database/fieldTypes.js b/web-frontend/modules/database/fieldTypes.js index 19abf4741b..c0aa93635b 100644 --- a/web-frontend/modules/database/fieldTypes.js +++ b/web-frontend/modules/database/fieldTypes.js @@ -114,7 +114,6 @@ import RowCardFieldEmail from '@baserow/modules/database/components/card/RowCard import RowCardFieldFile from '@baserow/modules/database/components/card/RowCardFieldFile' import RowCardFieldFormula from '@baserow/modules/database/components/card/RowCardFieldFormula' import RowCardFieldLinkRow from '@baserow/modules/database/components/card/RowCardFieldLinkRow' -import GroupByFieldLinkRow from '@baserow/modules/database/components/view/grid/GroupByFieldLinkRow' import RowCardFieldMultipleSelect from '@baserow/modules/database/components/card/RowCardFieldMultipleSelect' import RowCardFieldNumber from '@baserow/modules/database/components/card/RowCardFieldNumber' import RowCardFieldRating from '@baserow/modules/database/components/card/RowCardFieldRating' @@ -1361,10 +1360,6 @@ export class LinkRowFieldType extends FieldType { return RowCardFieldLinkRow } - getGroupByComponent() { - return GroupByFieldLinkRow - } - getRowHistoryEntryComponent() { return RowHistoryFieldLinkRow } @@ -1392,8 +1387,8 @@ export class LinkRowFieldType extends FieldType { } isEqual(field, value1, value2) { - const value1Ids = value1.map((v) => v.id) - const value2Ids = value2.map((v) => v.id) + const value1Ids = (value1 || []).map((v) => v.id) + const value2Ids = (value2 || []).map((v) => v.id) return _.isEqual(value1Ids, value2Ids) } @@ -4274,14 +4269,6 @@ export class FormulaFieldType extends mix( return RowCardFieldFormula } - getGroupByComponent(field) { - const formulaType = this.getFormulaType(field) - if (formulaType) { - return formulaType.getCardComponent(field) - } - return this.getCardComponent(field) - } - getFilterInputComponent(field, filterType) { return this.getFormulaType(field)?.getFilterInputComponent( field, diff --git a/web-frontend/modules/database/mixins/gridViewHelpers.js b/web-frontend/modules/database/mixins/gridViewHelpers.js index 171d9f84b7..c23e22dfb1 100644 --- a/web-frontend/modules/database/mixins/gridViewHelpers.js +++ b/web-frontend/modules/database/mixins/gridViewHelpers.js @@ -14,18 +14,6 @@ export default { gridViewRowDetailsWidth: 72, } }, - /*beforeCreate() { - this.$options.computed = { - ...(this.$options.computed || {}), - ...mapGetters({ - fieldOptions: - this.$options.propsData.storePrefix + 'view/grid/getAllFieldOptions', - publicGrid: 'page/view/public/getIsPublic', - activeGroupBys: - this.$options.propsData.storePrefix + 'view/grid/getActiveGroupBys', - }), - } - },*/ computed: { activeGroupByWidth() { return this.activeGroupBys.reduce( @@ -51,26 +39,15 @@ export default { }, }, methods: { - getGroupByField(groupBy) { - return this.$store.getters['field/getAll'].find( - (f) => f.id === groupBy.field - ) - }, getFieldWidth(field) { const fieldId = field?.id - const hasFieldOptions = - fieldId && - Object.prototype.hasOwnProperty.call(this.fieldOptions, fieldId) + const options = fieldId ? this.fieldOptions[fieldId] : undefined - if ( - hasFieldOptions && - this.fieldOptions[fieldId].hidden && - !field.primary - ) { + if (options?.hidden && !field.primary) { return 0 } - return hasFieldOptions ? this.fieldOptions[fieldId].width : 200 + return options?.width ?? 200 }, async moveFieldWidth(field, width) { await this.$store.dispatch( diff --git a/web-frontend/modules/database/realtime.js b/web-frontend/modules/database/realtime.js index 940d676fa2..987a31a410 100644 --- a/web-frontend/modules/database/realtime.js +++ b/web-frontend/modules/database/realtime.js @@ -332,17 +332,14 @@ export const registerRealtimeEvents = (realtime) => { const view = store.getters['view/get'](data.view_id) if (view !== undefined) { if (store.getters['view/getSelectedId'] === view.id) { - const updateViewPromise = store.dispatch('view/forceUpdate', { + const viewType = app.$registry.get('view', view.type) + await viewType.forceViewRefresh( + { store }, view, - values: data.view, - repopulate: true, - }) - const updateFieldsPromise = store.dispatch('field/forceSetFields', { - fields: data.fields, - }) - - // This makes sure both dispatches are executed in parallel. - await Promise.all([updateViewPromise, updateFieldsPromise]) + data.view, + data.fields, + 'page/' + ) app.$bus.$emit('table-refresh', { tableId: store.getters['table/getSelectedId'], diff --git a/web-frontend/modules/database/store/view.js b/web-frontend/modules/database/store/view.js index c6ddd5ca7c..35f630b8b8 100644 --- a/web-frontend/modules/database/store/view.js +++ b/web-frontend/modules/database/store/view.js @@ -1374,7 +1374,7 @@ export const actions = { field.group_bys .filter((groupBy) => groupBy.view === view.id) .forEach((groupBy) => { - dispatch('forceCreateSort', { view, values: groupBy }) + dispatch('forceCreateGroupBy', { view, values: groupBy }) }) } }, diff --git a/web-frontend/modules/database/store/view/grid.js b/web-frontend/modules/database/store/view/grid.js index bb73155a6e..6a54c0a813 100644 --- a/web-frontend/modules/database/store/view/grid.js +++ b/web-frontend/modules/database/store/view/grid.js @@ -677,9 +677,8 @@ export const mutations = { let updated = false const groupByFields = groupBys .slice(0, groupByIndex + 1) - .map((groupBy) => { - return fields.find((f) => f.id === groupBy.field) - }) + .map((groupBy) => fields.find((f) => f.id === groupBy.field)) + .filter(Boolean) const fieldName = `field_${groupBy.field}` if (!Object.prototype.hasOwnProperty.call(existingMetadata, fieldName)) { existingMetadata[`field_${groupBy.field}`] = [] @@ -1529,6 +1528,7 @@ export const actions = { fromField, undoRedoActionGroupId = null, readOnly = false, + visible = null, } ) { const { $registry, $client, $i18n, $config } = this @@ -1566,6 +1566,9 @@ export const actions = { // Update all other field order options.order = index index += 1 + } else if (visible !== null) { + // Make the moved field visible if the `visible` parameter is not null + newFieldOptions[fieldId].hidden = !visible } }) @@ -3830,11 +3833,8 @@ export const getters = { return row._.selected && row._.selectedFieldId !== -1 }) }, - getActiveGroupBys(state, getters, rootState, rootGetters) { - const fields = rootGetters['field/getAll'] - return state.activeGroupBys.filter((groupBy) => - fields.some((f) => f.id === groupBy.field) - ) + getActiveGroupBys(state) { + return state.activeGroupBys }, getGroupByMetadata(state) { return state.groupByMetadata diff --git a/web-frontend/modules/database/utils/view.js b/web-frontend/modules/database/utils/view.js index d1e1da5f60..7fa250ab12 100644 --- a/web-frontend/modules/database/utils/view.js +++ b/web-frontend/modules/database/utils/view.js @@ -80,19 +80,17 @@ export function sortFieldsByOrderAndIdFunction( */ export function filterVisibleFieldsFunction(fieldOptions) { return (field) => { - const exists = Object.prototype.hasOwnProperty.call(fieldOptions, field.id) - return !exists || !fieldOptions[field.id].hidden + const options = fieldOptions[field.id] + return options && !options.hidden } } /** - * Returns only fields that are visible (not hidden). + * Returns only fields that are hidden (not visible). */ export function filterHiddenFieldsFunction(fieldOptions) { - return (field) => { - const exists = Object.prototype.hasOwnProperty.call(fieldOptions, field.id) - return exists && fieldOptions[field.id].hidden - } + const isFieldVisible = filterVisibleFieldsFunction(fieldOptions) + return (field) => !isFieldVisible(field) } /** diff --git a/web-frontend/modules/database/viewTypes.js b/web-frontend/modules/database/viewTypes.js index fc86543eeb..28c187eeb2 100644 --- a/web-frontend/modules/database/viewTypes.js +++ b/web-frontend/modules/database/viewTypes.js @@ -264,6 +264,22 @@ export class ViewType extends Registerable { return false } + /** + * Called when the view needs to be forcefully refreshed via a realtime event. + * Handles updating the view and fields atomically. View types can override to + * perform additional synchronization before the update. + */ + forceViewRefresh({ store }, view, values, fields, storePrefix) { + return Promise.all([ + store.dispatch('view/forceUpdate', { + view, + values, + repopulate: true, + }), + store.dispatch('field/forceSetFields', { fields }), + ]) + } + /** * Event that is called when a row is created from an outside source, so for example * via a real time event by another user. It can be used to check if data in an store @@ -603,7 +619,6 @@ export class GridViewType extends ViewType { includeFieldOptions = false, sourceEvent = null ) { - await store.dispatch(storePrefix + 'view/grid/updateActiveGroupBys', []) const isPublic = store.getters[storePrefix + 'view/public/getIsPublic'] const adhocFiltering = isAdhocFiltering( this.app, @@ -626,6 +641,18 @@ export class GridViewType extends ViewType { }) } + forceViewRefresh({ store }, view, values, fields, storePrefix) { + // Sync activeGroupBys together with the view and fields update so that + // components don't try to look up fields that have been removed or haven't + // been added yet. All dispatches are synchronous commits so Vue batches the + // re-render with all three applied atomically. + store.dispatch( + storePrefix + 'view/grid/updateActiveGroupBys', + clone(values.group_bys || []) + ) + return super.forceViewRefresh({ store }, view, values, fields, storePrefix) + } + async fieldRestored( { dispatch, rootGetters }, table, @@ -641,6 +668,13 @@ export class GridViewType extends ViewType { { field, fieldType, view: selectedView }, { root: true } ) + // Sync the grid store's activeGroupBys with the view's group_bys which + // may have been updated by the field restore above. + await dispatch( + storePrefix + 'view/grid/updateActiveGroupBys', + clone(selectedView.group_bys || []), + { root: true } + ) } shouldRefreshWhenFieldCreated(registry, store, field, storePrefix) { @@ -656,7 +690,7 @@ export class GridViewType extends ViewType { } async afterFieldCreated( - { dispatch }, + { rootGetters, dispatch }, table, field, fieldType, @@ -668,6 +702,12 @@ export class GridViewType extends ViewType { { field, value }, { root: true } ) + const viewId = rootGetters[storePrefix + 'view/grid/getLastGridId'] + const view = viewId === -1 ? null : rootGetters['view/get'](viewId) + const isPublic = view?.public ?? false + const anyOtherFieldHidden = Object.values( + rootGetters[storePrefix + 'view/grid/getAllFieldOptions'] + ).some((options) => options.hidden) await dispatch( storePrefix + 'view/grid/setFieldOptionsOfField', { @@ -676,7 +716,7 @@ export class GridViewType extends ViewType { // model in the backend to stay consistent. values: { width: 200, - hidden: false, + hidden: isPublic || anyOtherFieldHidden, order: maxPossibleOrderValue, aggregation_type: '', aggregation_raw_type: '', diff --git a/web-frontend/test/unit/database/__snapshots__/publicView.spec.js.snap b/web-frontend/test/unit/database/__snapshots__/publicView.spec.js.snap index 6f67af75fb..ae72d67931 100644 --- a/web-frontend/test/unit/database/__snapshots__/publicView.spec.js.snap +++ b/web-frontend/test/unit/database/__snapshots__/publicView.spec.js.snap @@ -429,7 +429,7 @@ exports[`Public View Page Tests > Can see a publicly shared grid view 1`] = `
Can see a publicly shared grid view 1`] = ` />
-
-
-
- - -
-
- - Active - -
- - - - - - - - - -
-
-
@@ -609,7 +569,7 @@ exports[`Public View Page Tests > Can see a publicly shared grid view 1`] = ` >
@@ -625,10 +585,6 @@ exports[`Public View Page Tests > Can see a publicly shared grid view 1`] = ` class="grid-view__placeholder-column" style="left: 599px;" /> -
@@ -697,22 +653,6 @@ exports[`Public View Page Tests > Can see a publicly shared grid view 1`] = `
-
-
-
- - common.summarize -
-
-
@@ -735,11 +675,11 @@ exports[`Public View Page Tests > Can see a publicly shared grid view 1`] = ` >
diff --git a/web-frontend/test/unit/database/__snapshots__/table.spec.js.snap b/web-frontend/test/unit/database/__snapshots__/table.spec.js.snap index a2bfd76800..2d3dc2d2e7 100644 --- a/web-frontend/test/unit/database/__snapshots__/table.spec.js.snap +++ b/web-frontend/test/unit/database/__snapshots__/table.spec.js.snap @@ -123,7 +123,7 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
+
@@ -156,26 +156,15 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
-
-
- -
-
Active
- -
-
-
-
+
-
@@ -193,8 +182,8 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
-
+ @@ -217,11 +206,6 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
common.summarize
-
-
-
common.summarize
-
-
@@ -230,8 +214,8 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
@@ -364,7 +348,7 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
+
@@ -397,26 +381,15 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
-
-
- -
-
Active
- -
-
-
-
+
-
@@ -434,8 +407,8 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
-
-
+ @@ -458,11 +431,6 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
common.summarize
-
-
-
common.summarize
-
-
@@ -471,8 +439,8 @@ exports[`Table Component Tests > Adding a row to a table increases the row count
diff --git a/web-frontend/test/unit/database/components/view/gallery/__snapshots__/galleryViewDecoration.spec.js.snap b/web-frontend/test/unit/database/components/view/gallery/__snapshots__/galleryViewDecoration.spec.js.snap index 19d891e1fb..ff5c5f78ef 100644 --- a/web-frontend/test/unit/database/components/view/gallery/__snapshots__/galleryViewDecoration.spec.js.snap +++ b/web-frontend/test/unit/database/components/view/gallery/__snapshots__/galleryViewDecoration.spec.js.snap @@ -16,7 +16,7 @@ exports[`GalleryView component with decoration > Default component with first_ce > -
-
- Address -
-
-
-
-
@@ -128,7 +109,7 @@ exports[`GalleryView component with decoration > Default component with row wrap > -
-
- Address -
-
-
-
-
@@ -242,7 +204,7 @@ exports[`GalleryView component with decoration > Default component with unavaila > -
-
- Address -
-
-
-
-
diff --git a/web-frontend/test/unit/database/components/view/grid/__snapshots__/gridViewDecoration.spec.js.snap b/web-frontend/test/unit/database/components/view/grid/__snapshots__/gridViewDecoration.spec.js.snap index 2a93867753..58091722a5 100644 --- a/web-frontend/test/unit/database/components/view/grid/__snapshots__/gridViewDecoration.spec.js.snap +++ b/web-frontend/test/unit/database/components/view/grid/__snapshots__/gridViewDecoration.spec.js.snap @@ -177,7 +177,7 @@ exports[`GridView component with decoration > Default component with first_cell
Default component with first_cell />
-
-
-
- - -
-
- - Address - -
- - - - - - - - - - -
-
-
Default component with first_cell >
@@ -356,10 +311,6 @@ exports[`GridView component with decoration > Default component with first_cell class="grid-view__placeholder-column" style="left: 399px;" /> -
@@ -421,11 +372,11 @@ exports[`GridView component with decoration > Default component with first_cell
-
-
-
- - common.summarize -
-
-
@@ -511,11 +446,11 @@ exports[`GridView component with decoration > Default component with first_cell >
@@ -700,7 +635,7 @@ exports[`GridView component with decoration > Default component with row wrapper
Default component with row wrapper />
-
-
Default component with row wrapper >
@@ -879,10 +769,6 @@ exports[`GridView component with decoration > Default component with row wrapper class="grid-view__placeholder-column" style="left: 399px;" /> -
@@ -952,11 +838,11 @@ exports[`GridView component with decoration > Default component with row wrapper
-
-
-
- - common.summarize -
-
-
@@ -1042,11 +912,11 @@ exports[`GridView component with decoration > Default component with row wrapper >
@@ -1223,7 +1093,7 @@ exports[`GridView component with decoration > Default component with unavailable
Default component with unavailable />
-
-
Default component with unavailable >
@@ -1402,10 +1227,6 @@ exports[`GridView component with decoration > Default component with unavailable class="grid-view__placeholder-column" style="left: 399px;" /> -
@@ -1467,11 +1288,11 @@ exports[`GridView component with decoration > Default component with unavailable
-
-
-
- - common.summarize -
-
-
@@ -1557,11 +1362,11 @@ exports[`GridView component with decoration > Default component with unavailable >