From a8cbb28af655b8774e9b30a144e97636f5f5e4a6 Mon Sep 17 00:00:00 2001 From: Norbert Csaba Herczeg Date: Mon, 30 Oct 2023 14:53:35 +0100 Subject: [PATCH] JNG-4838 bulk save state --- .../model/ActionGroupTest-ui.model | 1460 ++++++++--------- .../ui/generator/react/UiTableHelper.java | 14 +- .../ui/generator/react/UiWidgetHelper.java | 9 +- .../src/containers/components/table.tsx.hbs | 46 +- .../BulkCallOperationAction.fragment.hbs | 4 + .../v2/actions/BulkDeleteAction.fragment.hbs | 2 +- .../v2/actions/BulkRemoveAction.fragment.hbs | 2 +- .../v2/actions/DeleteAction.fragment.hbs | 27 +- .../v2/actions/RemoveAction.fragment.hbs | 50 +- pom.xml | 2 +- 10 files changed, 851 insertions(+), 765 deletions(-) create mode 100644 judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkCallOperationAction.fragment.hbs diff --git a/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model b/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model index 760aae88..a4700849 100644 --- a/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model +++ b/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model @@ -1,18 +1,18 @@ - + - + - + - + - + @@ -21,15 +21,15 @@ - - + + + - + - @@ -68,9 +68,9 @@ - + @@ -82,15 +82,15 @@ - - + + + - + - @@ -143,9 +143,9 @@ - + @@ -184,8 +184,8 @@ - + @@ -194,8 +194,8 @@ - + @@ -214,16 +214,16 @@ - - - - - + + + + + @@ -250,9 +250,9 @@ - + @@ -260,9 +260,9 @@ - + @@ -290,15 +290,15 @@ - - + + + - + - @@ -318,9 +318,9 @@ - + @@ -393,13 +393,12 @@ View - - - - + + + REFRESH @@ -408,14 +407,15 @@ - + + + - LIST SET @@ -439,15 +439,15 @@ View - - - + + + LIST SET @@ -668,41 +668,41 @@ - + - + - + - + - - + + - - + + - + - + - + - + @@ -711,91 +711,91 @@ - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - + + + + + + @@ -805,23 +805,23 @@ - + - + - + - + - + @@ -829,71 +829,71 @@ - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + @@ -907,15 +907,15 @@ - + - + - + @@ -925,24 +925,24 @@ - + - + - - + + - - + + - + - + @@ -950,11 +950,11 @@ - + - + @@ -963,24 +963,24 @@ - + - + - - + + - - + + - + - + @@ -988,11 +988,11 @@ - + - + @@ -1001,24 +1001,24 @@ - + - + - - + + - - + + - + - + @@ -1026,11 +1026,11 @@ - + - + @@ -1038,54 +1038,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -1093,7 +1093,7 @@ - + @@ -1104,15 +1104,15 @@ - + - + - + @@ -1122,24 +1122,24 @@ - + - + - - + + - - + + - + - + @@ -1147,11 +1147,11 @@ - + - + @@ -1159,140 +1159,140 @@ - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - - + + + + + + + + + + + - - + + - - + + - - - + + + - + - + - - - - - + - + - + - + - + @@ -1300,16 +1300,16 @@ - + - + - + @@ -1317,49 +1317,49 @@ - - - + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + @@ -1367,31 +1367,31 @@ - + - + - + - + - + - + - + @@ -1399,101 +1399,101 @@ - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - + + + + + + @@ -1501,23 +1501,23 @@ - + - + - + - + - + @@ -1525,16 +1525,16 @@ - + - + - + @@ -1543,19 +1543,19 @@ - + - + - + - + @@ -1565,66 +1565,66 @@ - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -1633,24 +1633,24 @@ - + - + - - + + - - + + - + - + @@ -1658,11 +1658,11 @@ - + - + @@ -1672,120 +1672,120 @@ - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + - - - - - + + + + + - + @@ -1793,195 +1793,195 @@ - - - + + + - + - + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1989,10 +1989,10 @@ - + - + @@ -2003,25 +2003,25 @@ - + - + - + - - - - - + + + + + @@ -2029,24 +2029,24 @@ - + - + - - + + - - + + - + - + @@ -2054,11 +2054,11 @@ - + - + @@ -2066,53 +2066,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2121,11 +2121,11 @@ - + - + @@ -2135,115 +2135,115 @@ - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - + + + + + + - + - - - + + + - - - - + + + + - - - - + + + + - + - + - + - + @@ -2252,28 +2252,28 @@ - + - + - + - + - + - + @@ -2281,10 +2281,10 @@ - + - + @@ -2295,11 +2295,11 @@ - + - + @@ -2308,101 +2308,101 @@ - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - + + + + + + @@ -2410,11 +2410,11 @@ - + - + @@ -2424,57 +2424,57 @@ - + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -2483,60 +2483,60 @@ - + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -2545,115 +2545,115 @@ - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - - - - - + + - + - - - + + + + + + + + + + + - - + + - - + + - - - + + + - + - + - - - - - + @@ -2664,7 +2664,7 @@ - + @@ -2673,66 +2673,66 @@ - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -2741,60 +2741,60 @@ - + - + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -2803,66 +2803,66 @@ - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + @@ -2870,36 +2870,36 @@ - + - + - + - + - + - + - + - + diff --git a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiTableHelper.java b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiTableHelper.java index efaf6838..871a5ab8 100644 --- a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiTableHelper.java +++ b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiTableHelper.java @@ -27,6 +27,7 @@ import java.util.Collection; import java.util.Comparator; +import java.util.Optional; @Slf4j @TemplateHelper @@ -230,8 +231,7 @@ public static String getSortDirection(Column column) { } public static java.util.List getBulkOperationActionDefinitionsForTable(Table table) { - return table.getRowActionDefinitions().stream() - .filter(a ->((ActionDefinition) a).getIsCallOperationAction()) + return table.getTableActionDefinitions().stream() .filter(a -> ((ActionDefinition) a).isIsBulk()) .sorted(Comparator.comparing(NamedElement::getFQName)) .toList(); @@ -242,8 +242,16 @@ public static boolean tableHasBulkOperations(Table table) { } public static boolean tableHasSelectorColumn(Table table) { - return table.isIsSelectorTable() || !getBulkOperationActionDefinitionsForTable(table).isEmpty() + return table.isIsSelectorTable() + || table.getRowActionDefinitions().stream().anyMatch(a -> ((ActionDefinition) a).isIsBulkCapable()) || table.getRowActionDefinitions().stream().anyMatch(a -> ((ActionDefinition) a).getIsDeleteAction()) || table.getRowActionDefinitions().stream().anyMatch(a -> ((ActionDefinition) a).getIsRemoveAction()); } + + public static Column getFirstTitleColumnForTable(Table table) { + Optional column = table.getColumns().stream() + .filter(c -> c.getAttributeType().getDataType() instanceof StringType && !c.getAttributeType().getIsMemberTypeTransient()) + .findFirst(); + return column.orElse(null); + } } diff --git a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiWidgetHelper.java b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiWidgetHelper.java index b525e77e..a4c4ead7 100644 --- a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiWidgetHelper.java +++ b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiWidgetHelper.java @@ -307,11 +307,7 @@ public static String tableButtonVisibilityConditions(Button button, Table table, return "data.length"; } if (button.getActionDefinition().isIsBulk()) { - String condition = "selectionModel.length > 0"; - if (button.getHiddenBy() != null) { - condition += "&& !ownerData?." + button.getHiddenBy().getName(); - } - return condition; + return "selectionModel.length > 0"; } return "true"; } @@ -328,6 +324,9 @@ public static String tableToolbarButtonDisabledConditions(Button button, Table t } } } + if (button.getActionDefinition().isIsBulk() && button.getHiddenBy() != null) { + result += "!selectedRows.current.every(s => !s." + button.getHiddenBy().getName() + ") ||"; + } return result + "isLoading"; } diff --git a/judo-ui-react/src/main/resources/actor/src/containers/components/table.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/containers/components/table.tsx.hbs index 9025e75f..29255c3f 100644 --- a/judo-ui-react/src/main/resources/actor/src/containers/components/table.tsx.hbs +++ b/judo-ui-react/src/main/resources/actor/src/containers/components/table.tsx.hbs @@ -39,6 +39,8 @@ import { useL10N } from '~/l10n/l10n-context'; import { {{# if container.isSelector }} isRowSelectable, + {{ else }} + getUpdatedRowsSelected, {{/ if }} applyInMemoryFilters, fileHandling, @@ -49,7 +51,7 @@ import { useErrorHandler, } from '~/utilities'; import type { TableRowAction } from '~/utilities'; -import { useDataStore } from '~/hooks'; +import { {{# if (tableHasBulkOperations table) }}useCRUDDialog, {{/ if }}useDataStore } from '~/hooks'; import { OBJECTCLASS } from '@pandino/pandino-api'; {{# if (stringValueIsTrue useTableRowHighlighting) }} import { useTrackService } from '@pandino/react-hooks'; @@ -75,7 +77,7 @@ export interface {{ tableComponentName table }}ActionDefinitions { {{/ if }} {{/ each }} {{# each table.rowActionDefinitions as |actionDefinition| }} - {{ simpleActionDefinitionName actionDefinition }}?: (row: {{ classDataName (getReferenceClassType table) 'Stored' }}) => Promise; + {{ simpleActionDefinitionName actionDefinition }}?: (row: {{ classDataName (getReferenceClassType table) 'Stored' }}{{# if actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}) => Promise; {{/ each }} } @@ -126,6 +128,9 @@ export function {{ tableComponentName table }}(props: {{ tableComponentName tabl const { downloadFile, extractFileNameFromToken } = fileHandling(); const { t } = useTranslation(); const handleError = useErrorHandler(); + {{# if (tableHasBulkOperations table) }} + const openCRUDDialog = useCRUDDialog(); + {{/ if }} {{# if (stringValueIsTrue useTableRowHighlighting) }} const { service: rowHighlightingHook } = useTrackService>(`(&(${OBJECTCLASS}=${TABLE_ROW_HIGHLIGHTING_HOOK_INTERFACE_KEY})(component={{~ tableComponentName table ~}}))`); @@ -166,6 +171,9 @@ export function {{ tableComponentName table }}(props: {{ tableComponentName tabl const [isNextButtonEnabled, setIsNextButtonEnabled] = useState(true); {{/ unless }} + {{# unless container.isSelector }} + const selectedRows = useRef<{{ classDataName (getReferenceClassType table) 'Stored' }}[]>([]); + {{/ unless }} {{# if (stringValueIsTrue useTableContextMenus) }} const contextMenuRef = useRef(null); @@ -358,6 +366,10 @@ export function {{ tableComponentName table }}(props: {{ tableComponentName tabl setSelectionDiff([data.find((value) => value.__identifier === lastId)!]); {{/ if }} }; + {{ else }} + useEffect(() => { + selectedRows.current = getUpdatedRowsSelected(selectedRows, data, selectionModel); + }, [selectionModel]); {{/ if }} {{# unless table.isEager }} @@ -518,7 +530,35 @@ export function {{ tableComponentName table }}(props: {{ tableComponentName tabl {{# if actionDefinition.isSelectorRangeAction }} await actions.{{ simpleActionDefinitionName actionDefinition }}!(processQueryCustomizer(queryCustomizer)); {{ else }} - await actions.{{ simpleActionDefinitionName actionDefinition }}!(); + {{# if actionDefinition.isBulk }} + openCRUDDialog<{{ classDataName (getReferenceClassType table) 'Stored' }}>({ + dialogTitle: t('TMP', { defaultValue: '{{ button.label }}' }), + {{# with (getFirstTitleColumnForTable table) as |column| }} + itemTitleFn: (item) => item.{{ column.attributeType.name }}!, + {{ else }} + itemTitleFn: (item) => t('judo.placeholder', { defaultValue: 'placeholder' }) as string, + {{/ with }} + selectedItems: selectedRows.current, + action: async (item, successHandler: () => void, errorHandler: (error: any) => void) => { + try { + await actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}!(item, true); + successHandler(); + } catch (error) { + errorHandler(error); + } + }, + onClose: async (needsRefresh) => { + if (needsRefresh) { + {{# with (getRefreshActionDefinitionForTable table) as |refreshActionDefinition| }} + await actions.{{ simpleActionDefinitionName refreshActionDefinition }}!(processQueryCustomizer(queryCustomizer)); + {{/ with }} + setSelectionModel([]); // not resetting on refreshes because refreshes would always remove selections... + } + }, + }); + {{ else }} + await actions.{{ simpleActionDefinitionName actionDefinition }}!(); + {{/ if }} {{/ if }} {{/ if }} {{/ if }} diff --git a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkCallOperationAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkCallOperationAction.fragment.hbs new file mode 100644 index 00000000..f9a758a0 --- /dev/null +++ b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkCallOperationAction.fragment.hbs @@ -0,0 +1,4 @@ +const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.bulkOf.targetType 'Stored' }}[]) => { + alert('BulkCallOperationAction'); + console.info(selectedRows); +}; diff --git a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkDeleteAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkDeleteAction.fragment.hbs index 8a26d30b..007ab0f3 100644 --- a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkDeleteAction.fragment.hbs +++ b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkDeleteAction.fragment.hbs @@ -1,3 +1,3 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async () => { - alert('BulkDeleteAction'); + // alert('BulkDeleteAction'); }; diff --git a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkRemoveAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkRemoveAction.fragment.hbs index 0ad27cd4..4c5420b3 100644 --- a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkRemoveAction.fragment.hbs +++ b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/BulkRemoveAction.fragment.hbs @@ -1,3 +1,3 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async () => { - alert('BulkRemoveAction'); + // alert('BulkRemoveAction'); }; diff --git a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/DeleteAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/DeleteAction.fragment.hbs index 59cb43b9..058c8e7f 100644 --- a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/DeleteAction.fragment.hbs +++ b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/DeleteAction.fragment.hbs @@ -1,13 +1,16 @@ -const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if}}) => { +const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{# if action.actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}{{/ if}}) => { try { - const confirmed = await openConfirmDialog( + const confirmed = {{# if action.actionDefinition.isBulkCapable }}!silentMode ? {{/ if }}await openConfirmDialog( 'row-delete-action', t('judo.modal.confirm.confirm-delete', { defaultValue: 'Are you sure you would like to delete the selected element?' }), t('judo.modal.confirm.confirm-title', { defaultValue: 'Confirm action' }), - ); + ){{# if action.actionDefinition.isBulkCapable }} : true{{/ if }}; if (confirmed) { await {{ getServiceImplForPage page }}.delete{{# if action.targetDataElement }}{{ firstToUpper action.targetDataElement.name }}{{/ if }}({{# if action.actionDefinition.targetType }}target{{ else }}data{{/ if }}); + {{# if action.actionDefinition.isBulkCapable }} + if (!silentMode) { + {{/ if }} enqueueSnackbar(t('judo.action.delete.success', { defaultValue: 'Delete successful' }), { variant: 'success', ...toastConfig.success, @@ -32,12 +35,22 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if a {{/ if }} {{/ unless }} {{/ if }} + + {{# if action.actionDefinition.isBulkCapable }} + } + {{/ if }} } } catch(error) { - {{# if action.actionDefinition.targetType }} - handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target); - {{ else }} - handleError(error, undefined, data); + {{# if action.actionDefinition.isBulkCapable }} + if (!silentMode) { + {{/ if }} + {{# if action.actionDefinition.targetType }} + handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target); + {{ else }} + handleError(error, undefined, data); + {{/ if }} + {{# if action.actionDefinition.isBulkCapable }} + } {{/ if }} } }; diff --git a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/RemoveAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/RemoveAction.fragment.hbs index b86b94c8..216eb03e 100644 --- a/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/RemoveAction.fragment.hbs +++ b/judo-ui-react/src/main/resources/actor/src/pages/v2/actions/RemoveAction.fragment.hbs @@ -1,4 +1,4 @@ -const {{ simpleActionDefinitionName action.actionDefinition }} = async (target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}) => { +const {{ simpleActionDefinitionName action.actionDefinition }} = async (target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{# if action.actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}) => { {{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }} if (target) { {{# if table.isEager }} @@ -6,22 +6,44 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async (target?: storeDiff('{{ table.dataElement.name }}', newList); {{ else }} try { - setIsLoading(true); - await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.ownerDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as JudoIdentifiable{{ else }}data{{/ if }}, [target!]); - {{# if page.container.table }} - setRefreshCounter((prev) => prev + 1); - {{/ if }} - {{# if page.container.view }} - if (!editMode) { - {{# with (getRefreshActionDefinitionForContainer page.container) as |actionDefinition| }} - await actions.{{ simpleActionDefinitionName actionDefinition }}!(processQueryCustomizer(pageQueryCustomizer)); - {{/ with }} + {{# if action.actionDefinition.isBulkCapable }} + if (!silentMode) { + await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.ownerDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as JudoIdentifiable{{ else }}data{{/ if }}, [target!]); } + {{ else }} + setIsLoading(true); + await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.ownerDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as JudoIdentifiable{{ else }}data{{/ if }}, [target!]); + {{# if page.container.table }} + setRefreshCounter((prev) => prev + 1); + {{/ if }} + {{# if page.container.view }} + if (!editMode) { + {{# with (getRefreshActionDefinitionForContainer page.container) as |actionDefinition| }} + await actions.{{ simpleActionDefinitionName actionDefinition }}!(processQueryCustomizer(pageQueryCustomizer)); + {{/ with }} + } + {{/ if }} + {{/ if }} + } catch(error) { + {{# if action.actionDefinition.isBulkCapable }} + if (!silentMode) { + {{/ if }} + {{# if action.actionDefinition.targetType }} + handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target); + {{ else }} + handleError(error, undefined, data); + {{/ if }} + {{# if action.actionDefinition.isBulkCapable }} + } {{/ if }} - } catch(e) { - console.error(e); } finally { - setIsLoading(false); + {{# if action.actionDefinition.isBulkCapable }} + if (!silentMode) { + {{/ if }} + setIsLoading(false); + {{# if action.actionDefinition.isBulkCapable }} + } + {{/ if }} } {{/ if }} } diff --git a/pom.xml b/pom.xml index 99b0066a..89ae936d 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ 18.14.2 8.9.2 - 1.1.0.20231024_175354_d92dd516_feature_JNG_4838_SeparatePageContainerAndDefinition + 1.1.0-SNAPSHOT 1.0.0.20230826_230139_c0dd2610_develop 1.0.0.20231026_150611_b39a761b_feature_JNG_4838_SeparatePageContainerAndDefinition