diff --git a/client/web/compose/src/components/PageBlocks/RecordOrganizerBase.vue b/client/web/compose/src/components/PageBlocks/RecordOrganizerBase.vue
index 41db124f4..3ea0ac90c 100644
--- a/client/web/compose/src/components/PageBlocks/RecordOrganizerBase.vue
+++ b/client/web/compose/src/components/PageBlocks/RecordOrganizerBase.vue
@@ -454,6 +454,11 @@ export default {
handleRecordClick (record) {
if (!this.roRecordPage) return
+ const page = this.pages.find(p => p.moduleID === this.moduleID)
+ if (!page) {
+ return
+ }
+
const route = {
name: 'page.record',
params: {
@@ -463,7 +468,16 @@ export default {
query: null,
}
- this.$router.push(route)
+ if (this.options.displayOption === 'newTab') {
+ window.open(this.$router.resolve(route).href)
+ } else if (this.options.displayOption === 'modal') {
+ this.$root.$emit('show-record-modal', {
+ recordID: record.recordID,
+ recordPageID: (this.roRecordPage || {}).pageID,
+ })
+ } else {
+ this.$router.push(route)
+ }
},
refresh () {
diff --git a/client/web/compose/src/components/PageBlocks/RecordOrganizerConfigurator.vue b/client/web/compose/src/components/PageBlocks/RecordOrganizerConfigurator.vue
index 152e3826f..c2e175827 100644
--- a/client/web/compose/src/components/PageBlocks/RecordOrganizerConfigurator.vue
+++ b/client/web/compose/src/components/PageBlocks/RecordOrganizerConfigurator.vue
@@ -162,6 +162,20 @@
{{ $t('recordOrganizer.group.footnote') }}
+
+
+
+
@@ -247,6 +261,14 @@ export default {
group () {
return this.allFields.find(f => f.name === this.options.groupField)
},
+
+ displayOptions () {
+ return [
+ { value: 'sameTab', text: this.$t('recordOrganizer.openInSameTab') },
+ { value: 'newTab', text: this.$t('recordOrganizer.openInNewTab') },
+ { value: 'modal', text: this.$t('recordOrganizer.openInModal') },
+ ]
+ },
},
watch: {
diff --git a/lib/js/src/compose/types/page-block/record-organizer.ts b/lib/js/src/compose/types/page-block/record-organizer.ts
index 48329fdf1..c8e63979f 100644
--- a/lib/js/src/compose/types/page-block/record-organizer.ts
+++ b/lib/js/src/compose/types/page-block/record-organizer.ts
@@ -13,6 +13,7 @@ interface Options {
refreshRate: number;
showRefresh: boolean;
magnifyOption: string;
+ displayOption: string;
}
const defaults: Readonly = Object.freeze({
@@ -26,6 +27,7 @@ const defaults: Readonly = Object.freeze({
refreshRate: 0,
showRefresh: false,
magnifyOption: '',
+ displayOption: 'sameTab'
})
export class PageBlockRecordOrganizer extends PageBlock {
@@ -42,7 +44,7 @@ export class PageBlockRecordOrganizer extends PageBlock {
if (!o) return
Apply(this.options, o, CortezaID, 'moduleID')
- Apply(this.options, o, String, 'labelField', 'descriptionField', 'filter', 'positionField', 'groupField', 'group', 'magnifyOption')
+ Apply(this.options, o, String, 'labelField', 'descriptionField', 'filter', 'positionField', 'groupField', 'group', 'magnifyOption', 'displayOption')
Apply(this.options, o, Number, 'refreshRate')
Apply(this.options, o, Boolean, 'showRefresh')
}
diff --git a/locale/en/corteza-webapp-compose/block.yaml b/locale/en/corteza-webapp-compose/block.yaml
index 4d37436a5..f61c1b42a 100644
--- a/locale/en/corteza-webapp-compose/block.yaml
+++ b/locale/en/corteza-webapp-compose/block.yaml
@@ -482,6 +482,10 @@ recordList:
deleted: Show deleted records
existing: Show existing records
recordOrganizer:
+ onRecordClick: On record click
+ openInSameTab: Open in the same tab
+ openInNewTab: Open in a new tab
+ openInModal: Open in a modal
descriptionField:
footnote: Field value will be used as record description
label: Description field