diff --git a/src/modules/grid/GridWidget.vue b/src/modules/grid/GridWidget.vue index 8c26456949..1fb297e980 100644 --- a/src/modules/grid/GridWidget.vue +++ b/src/modules/grid/GridWidget.vue @@ -9,10 +9,10 @@ data-cy="gridWidget">

- {{ widget.configuration.showTitle ? widget.configuration.title : typeLabel }} + {{ widget.configuration.showTitle ? label : typeLabel }}

- + @@ -86,8 +86,12 @@ export default { TrashCanOutline, }, provide() { - // A widget that renders its own heading sits one level below the card's heading - return { widgetHeadingLevel: computed(() => this.hasHeading ? 3 : 2) } + return { + // A widget that renders its own heading sits one level below the card's heading + widgetHeadingLevel: computed(() => this.hasHeading ? 3 : 2), + // Set when the server marked the widget's stored target as gone + widgetBroken: computed(() => this.widget.broken === true), + } }, props: { widget: { @@ -124,6 +128,10 @@ export default { widgetComponent() { return getWidgetComponent(this.widget.type) }, + // A widget of a type the server does not know is shown, not configured: its schema is unknown + isKnownType() { + return findWidgetType(this.widgetTypes, this.widget.type) !== null + }, typeLabel() { return findWidgetType(this.widgetTypes, this.widget.type)?.title ?? this.widget.type }, diff --git a/src/modules/grid/SchemaForm.vue b/src/modules/grid/SchemaForm.vue new file mode 100644 index 0000000000..f141d71954 --- /dev/null +++ b/src/modules/grid/SchemaForm.vue @@ -0,0 +1,235 @@ + + + + + + diff --git a/src/modules/grid/widgetRegistry.js b/src/modules/grid/widgetRegistry.js index 49bf755b94..bd958d46d1 100644 --- a/src/modules/grid/widgetRegistry.js +++ b/src/modules/grid/widgetRegistry.js @@ -4,6 +4,7 @@ */ import HeaderWidget from './widgets/HeaderWidget.vue' import TextWidget from './widgets/TextWidget.vue' +import DataWidget from './widgets/DataWidget.vue' export const WIDGET_TYPE_HEADER = 'header' export const WIDGET_TYPE_TEXT = 'text' @@ -17,6 +18,7 @@ export const WIDGET_TYPE_DATA = 'data' const widgetComponents = { [WIDGET_TYPE_HEADER]: HeaderWidget, [WIDGET_TYPE_TEXT]: TextWidget, + [WIDGET_TYPE_DATA]: DataWidget, } /** diff --git a/src/modules/grid/widgets/DataWidget.vue b/src/modules/grid/widgets/DataWidget.vue new file mode 100644 index 0000000000..228d6b6526 --- /dev/null +++ b/src/modules/grid/widgets/DataWidget.vue @@ -0,0 +1,203 @@ + + + + + + diff --git a/src/modules/modals/AddWidget.vue b/src/modules/modals/AddWidget.vue new file mode 100644 index 0000000000..5d97360def --- /dev/null +++ b/src/modules/modals/AddWidget.vue @@ -0,0 +1,173 @@ + + + + + +