diff --git a/client/web/compose/src/components/PageBlocks/RecordListBase.vue b/client/web/compose/src/components/PageBlocks/RecordListBase.vue index 659693ebb..3b4db1969 100644 --- a/client/web/compose/src/components/PageBlocks/RecordListBase.vue +++ b/client/web/compose/src/components/PageBlocks/RecordListBase.vue @@ -195,7 +195,7 @@ v-show="options.bulkRecordEditEnabled && canUpdateSelectedRecords && !showingDeletedRecords" :module="recordListModule" :namespace="namespace" - :selected-records="selectedAllRecords ? [] : selected" + :query="bulkQuery" @save="onBulkUpdate()" /> @@ -636,12 +636,13 @@ v-if="options.inlineRecordEditEnabled" :namespace="namespace" :module="recordListModule" - :selected-records="inlineEdit.recordIDs" :selected-fields="inlineEdit.fields" :initial-record="inlineEdit.record" + :query="inlineEdit.query" :modal-title="$t('recordList.inlineEdit.modal.title')" open-on-select @save="onInlineEdit()" + @close="onInlineEditClose()" /> @@ -1046,6 +1047,14 @@ export default { return this.$t(`recordList.${key}`, { count, total }) }, + + bulkQuery () { + if (this.selectedAllRecords) { + return this.filter.query + } + + return this.selected.map(r => `recordID='${r}'`).join(' OR ') + }, }, watch: { @@ -1515,18 +1524,10 @@ export default { } }) } else { - const { moduleID, namespaceID } = this.items[0].r + this.processing = true - let query = '' - - if (!this.selectedAllRecords) { - // filter deletable records from the selected list - const recordIDs = this.items - .filter(({ id, r }) => r.canUndeleteRecord && selected.includes(id)) - .map(({ id }) => id) - - query = recordIDs.map(r => `recordID='${r}'`).join(' OR ') - } + const query = this.bulkQuery + const { moduleID, namespaceID } = this.filter this.$ComposeAPI .recordBulkUndelete({ moduleID, namespaceID, query }) @@ -1555,25 +1556,12 @@ export default { } } } else { - // Pick module and namespace ID from the first record - // - // We are always showing list of records from the - // same module so this should be safe to do. - const { moduleID, namespaceID } = this.items[0].r - - let query = '' - - if (!this.selectedAllRecords) { - // filter deletable records from the selected list - const recordIDs = this.items - .filter(({ id, r }) => r.canDeleteRecord && selected.includes(id)) - .map(({ id }) => id) - - query = recordIDs.map(r => `recordID='${r}'`).join(' OR ') - } - this.processing = true + const query = this.bulkQuery + // Pick module and namespace ID from the filter + const { moduleID, namespaceID } = this.filter + this.$ComposeAPI .recordBulkDelete({ moduleID, namespaceID, query }) .then(() => this.refresh(true)) @@ -1821,14 +1809,18 @@ export default { editInlineField (record, field) { this.inlineEdit.fields = [field] this.inlineEdit.record = record.clone() - this.inlineEdit.recordIDs = [record.recordID] + this.inlineEdit.query = `recordID = ${record.recordID}` + }, + + onInlineEditClose () { + this.inlineEdit.fields = [] + this.inlineEdit.record = {} + this.inlineEdit.query = '' }, onInlineEdit () { this.refresh(true) - this.inlineEdit.fields = [] - this.inlineEdit.recordIDs = [] - this.inlineEdit.record = {} + this.onInlineEditClose() }, isFieldEditable (field) { diff --git a/client/web/compose/src/components/Public/Record/BulkEdit/index.vue b/client/web/compose/src/components/Public/Record/BulkEdit/index.vue index 201c90757..8293ebc97 100644 --- a/client/web/compose/src/components/Public/Record/BulkEdit/index.vue +++ b/client/web/compose/src/components/Public/Record/BulkEdit/index.vue @@ -88,7 +88,7 @@ {{ $t('general.label.save') }} @@ -132,11 +132,6 @@ export default { required: true, }, - selectedRecords: { - type: Array, - required: true, - }, - selectedFields: { type: Array, default: () => ([]), @@ -156,6 +151,11 @@ export default { type: String, default: '', }, + + query: { + type: String, + default: '', + }, }, data () { @@ -182,9 +182,9 @@ export default { }, watch: { - selectedRecords: { - handler (records) { - if (!this.openOnSelect || !records.length) return + query: { + handler (query) { + if (!this.openOnSelect || !query.length) return this.record = new compose.Record(this.module, this.initialRecord) this.showModal = true @@ -215,6 +215,7 @@ export default { this.fields = [] this.record = new compose.Record(this.module, {}) } + this.$emit('close') }, getFieldLabel ({ kind, label, name }) { diff --git a/client/web/compose/src/mixins/record.js b/client/web/compose/src/mixins/record.js index 0c1f3f4fc..346e330b8 100644 --- a/client/web/compose/src/mixins/record.js +++ b/client/web/compose/src/mixins/record.js @@ -255,14 +255,14 @@ export default { .then(() => this.dispatchUiEvent('afterUndelete')) .then(() => this.updatePrompts()) .then(this.loadRecord) - .catch(this.toastErrorHandler(this.$t('notification:record.undeleteFailed'))) + .catch(this.toastErrorHandler(this.$t('notification:record.restoreFailed'))) .finally(() => { this.processingUndelete = false this.processing = false }) }, 500), - handleBulkUpdateSelectedRecords: throttle(function (records) { + handleBulkUpdateSelectedRecords: throttle(function (query) { this.processing = true const values = [] @@ -281,8 +281,6 @@ export default { const { moduleID, namespaceID } = this.module - const query = records.map(r => `recordID='${r}'`).join(' OR ') - return this .$ComposeAPI.recordPatch({ moduleID, namespaceID, values, query }) .catch(err => { diff --git a/locale/en/corteza-webapp-compose/notification.yaml b/locale/en/corteza-webapp-compose/notification.yaml index a7971819e..4213eb66f 100644 --- a/locale/en/corteza-webapp-compose/notification.yaml +++ b/locale/en/corteza-webapp-compose/notification.yaml @@ -114,12 +114,12 @@ page: record: createFailed: Could not create record deleteFailed: Could not delete record - undeleteFailed: Could not undelete record + restoreFailed: Could not restore record deleteBulkFailed: Could not delete selected records deleteBulkRecordUpdateFailed: Could not update selected records deleteBulkSuccess: Successfully deleted selected records bulkRecordUpdateSuccess: Successfully updated selected records - undeleteBulkFailed: Could not restore selected records + restoreBulkFailed: Could not restore selected records restoreBulkSuccess: Successfully restored selected records invalidOwnerVar: Can not use ${ownerID} variable in non-record pages invalidRecordVar: Can not use ${record...} variable in non-record pages