diff --git a/CHANGELOG.md b/CHANGELOG.md index fc52971969..99f489c567 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * Custom operations registered with `addCreateWidgetOperation` can now specify an `ifTypesIntersect` property containing an array of widget type names. If the area in question allows at least one, the operation is offered. * The login-requirements tests were updated to include tests for the `uponSubmit` filter * Add `prependNodes` and `appendNodes` calls for `main`. +* Add options for pieces to change the title, message and icon of the empty state block. ### Fixes diff --git a/modules/@apostrophecms/asset/lib/globalIcons.js b/modules/@apostrophecms/asset/lib/globalIcons.js index 16dce6f0b0..765d398888 100644 --- a/modules/@apostrophecms/asset/lib/globalIcons.js +++ b/modules/@apostrophecms/asset/lib/globalIcons.js @@ -50,6 +50,7 @@ module.exports = { 'drag-icon': 'Apps', 'eye-icon': 'Eye', 'file-document-icon': 'FileDocument', + 'file-document-multiple-outline-icon': 'FileDocumentMultipleOutline', 'file-tree-icon': 'FileTree', 'flare-icon': 'Flare', 'format-align-center-icon': 'FormatAlignCenter', diff --git a/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue b/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue index 5e495f9baf..4e95915fe7 100644 --- a/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +++ b/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue @@ -872,7 +872,6 @@ export default { justify-content: center; width: 100%; height: 100%; - margin-top: 130px; } .apos-media-manager__sidebar { diff --git a/modules/@apostrophecms/modal/ui/apos/components/AposModalBody.vue b/modules/@apostrophecms/modal/ui/apos/components/AposModalBody.vue index 70a582ecbb..84ee675170 100644 --- a/modules/@apostrophecms/modal/ui/apos/components/AposModalBody.vue +++ b/modules/@apostrophecms/modal/ui/apos/components/AposModalBody.vue @@ -62,6 +62,16 @@ export default { } } +.apos-modal__body-inner { + display: flex; + flex-direction: column; + height: 100%; +} + +.apos-modal__body-main { + flex-grow: 1; +} + .apos-modal__body--flex { display: flex; flex-direction: column; diff --git a/modules/@apostrophecms/piece-type/index.js b/modules/@apostrophecms/piece-type/index.js index 33bdebd655..d471c376db 100644 --- a/modules/@apostrophecms/piece-type/index.js +++ b/modules/@apostrophecms/piece-type/index.js @@ -1295,6 +1295,7 @@ module.exports = { managerModal: self.getComponentName('managerModal', 'AposDocsManager') }); browserOptions.managerApiProjection = self.getManagerApiProjection(req); + browserOptions.emptyState = self.options.emptyState; return browserOptions; }, diff --git a/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue b/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue index d19e808a0d..fc63cd0cb9 100644 --- a/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +++ b/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue @@ -212,13 +212,16 @@ export default { }; }, emptyDisplay() { + const docModule = apos.modules[this.moduleName]; + if (docModule?.emptyState) { + return docModule.emptyState; + } return { + icon: 'file-document-multiple-outline-icon', title: { key: 'apostrophe:noTypeFound', type: this.$t(this.moduleLabels.plural || this.moduleLabels.singular) - }, - message: '', - emoji: '📄' + } }; }, disableUnpublished() { @@ -581,7 +584,6 @@ export default { justify-content: center; width: 100%; height: 100%; - margin-top: 130px; } .apos-pieces-manager__relationship__rail { diff --git a/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue b/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue index 8a54d0c234..8057f835a2 100644 --- a/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue +++ b/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue @@ -1,23 +1,28 @@ @@ -38,30 +43,27 @@ export default { display: flex; flex-direction: column; align-items: center; + max-width: 450px; + } + + .apos-empty-state__icon { + margin-bottom: 10px; } - .apos-title { + .apos-empty-state__title { @include type-title; & { - margin: 0 0 10px; + margin: 0; } } - .apos-hint { - @include type-base; + .apos-empty-state__message { + @include type-large; & { - font-style: italic; - line-height: var(--a-line-tallest); - color: var(--a-base-1); + margin-top: 5px; text-align: center; } } - - .apos-emoji { - // Variable sizes are less important for icons. - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 34px; - }