diff --git a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiActionsHelper.java b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiActionsHelper.java index 143914ab..ce50ba36 100644 --- a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiActionsHelper.java +++ b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiActionsHelper.java @@ -296,7 +296,11 @@ public static String getSelectorOpenActionParameters(Action action, PageContaine tokens.add("[]"); } } else { - tokens.add("data"); + if (action.getActionDefinition().getTargetType() != null) { + tokens.add("target!"); + } else { + tokens.add("data"); + } } if (action.getTargetPageDefinition().getContainer().isIsRelationSelector()) { diff --git a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiI18NHelper.java b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiI18NHelper.java index b8b38b0d..07c2fa53 100644 --- a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiI18NHelper.java +++ b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiI18NHelper.java @@ -38,7 +38,7 @@ import static hu.blackbelt.judo.ui.generator.react.ReactStoredVariableHelper.DEFAULT_I18N_LANGUAGE; import static hu.blackbelt.judo.ui.generator.react.UiActionsHelper.translationElementForBulkAction; import static hu.blackbelt.judo.ui.generator.react.UiWidgetHelper.collectVisualElementsMatchingCondition; -import static hu.blackbelt.judo.ui.generator.react.UiWidgetHelper.flexHasLabel; +import static hu.blackbelt.judo.ui.generator.react.UiWidgetHelper.elementHasLabel; import static hu.blackbelt.judo.ui.generator.typescript.rest.commons.UiCommonsHelper.restParamName; import static java.util.Arrays.stream; @@ -309,7 +309,7 @@ public static Map getApplicationTranslations(Application applica }); List flexElements = new ArrayList<>(); - collectVisualElementsMatchingCondition(container, (v) -> v instanceof Flex flex && flexHasLabel(flex) && !(v instanceof PageContainer), flexElements); + collectVisualElementsMatchingCondition(container, (v) -> v instanceof Flex flex && elementHasLabel(flex) && !(v instanceof PageContainer), flexElements); flexElements.forEach(f -> { translations.put(getTranslationKeyForVisualElement(f), f.getLabel()); }); diff --git a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiPageContainerHelper.java b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiPageContainerHelper.java index 1cdf9db6..a7029ed7 100644 --- a/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiPageContainerHelper.java +++ b/judo-ui-react/src/main/java/hu/blackbelt/judo/ui/generator/react/UiPageContainerHelper.java @@ -352,7 +352,7 @@ public static String containerButtonGroupButtonDisabledConditions(Button button, } public static boolean cardHasHeaderContent(Flex flex) { - return (flexHasIconOrLabel(flex) || flex.getActionButtonGroup() != null) && !(flex.eContainer() instanceof Tab); + return (elementHasIconOrLabel(flex) || flex.getActionButtonGroup() != null) && !(flex.eContainer() instanceof Tab); } public static boolean containerHasDateOrDateTimeInput(PageContainer container) { 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 966bd2ab..2bc3c7c1 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 @@ -419,12 +419,16 @@ public static boolean flexParentIsNotTab(Flex flex) { return !(flex.eContainer() instanceof Tab); } - public static boolean flexHasIconOrLabel(Flex flex) { - return flex.getIcon() != null || flexHasLabel(flex); + public static boolean elementHasIconOrLabel(VisualElement element) { + return elementHasIcon(element) || elementHasLabel(element); } - public static boolean flexHasLabel(Flex flex) { - return flex.getLabel() != null && !flex.getLabel().trim().isBlank(); + public static boolean elementHasIcon(VisualElement element) { + return element.getIcon() != null && element.getIcon().getIconName() != null && !element.getIcon().getIconName().trim().isBlank(); + } + + public static boolean elementHasLabel(VisualElement element) { + return element.getLabel() != null && !element.getLabel().trim().isBlank(); } public static Column getSortColumnForLink(Link link) { @@ -437,4 +441,8 @@ public static Column getSortColumnForLink(Link link) { public static boolean isLinkAssociation(Link link) { return link.getRelationType().getIsRelationKindAssociation(); } + + public static boolean displayTableHeading(Table table, PageContainer container) { + return elementHasIconOrLabel(table) && !container.isIsSelector() && !container.isTable(); + } } diff --git a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/divider.hbs b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/divider.hbs index 83f32087..999186a9 100644 --- a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/divider.hbs +++ b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/divider.hbs @@ -14,18 +14,18 @@ - {{# or child.icon child.label }} + {{# if (elementHasIconOrLabel child) }} - {{# if child.icon }} + {{# if (elementHasIcon child) }} {{/ if }} - {{# if child.label }} + {{# if (elementHasLabel child) }} { t('{{ getTranslationKeyForVisualElement child }}', { defaultValue: '{{ child.label }}' }) as string } {{/ if }} - {{/ or }} + {{/ if }} diff --git a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/flex.hbs b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/flex.hbs index 91fc2d94..67e6bf94 100644 --- a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/flex.hbs +++ b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/flex.hbs @@ -16,13 +16,13 @@ {{# if (cardHasHeaderContent this) }} - {{# if (flexHasIconOrLabel this) }} + {{# if (elementHasIconOrLabel this) }} - {{# if this.icon }} + {{# if (elementHasIcon this) }} {{/ if }} - {{# if this.label }} + {{# if (elementHasLabel this) }} { t('{{ getTranslationKeyForVisualElement this }}', { defaultValue: '{{ this.label }}' }) } @@ -68,13 +68,13 @@ {{ else }} - {{# and (flexHasIconOrLabel this) (flexParentIsNotTab this) }} + {{# and (elementHasIconOrLabel this) (flexParentIsNotTab this) }} - {{# if this.icon }} + {{# if (elementHasIcon this) }} {{/ if }} - {{# if this.label }} + {{# if (elementHasLabel this) }} { t('{{ getTranslationKeyForVisualElement this }}', { defaultValue: '{{ this.label }}' }) } diff --git a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/table.hbs b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/table.hbs index cb58422f..a3461db6 100644 --- a/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/table.hbs +++ b/judo-ui-react/src/main/resources/actor/src/containers/widget-fragments/table.hbs @@ -13,28 +13,46 @@ {{/ unless }} > {{/ if }} - - <{{ componentName child }} - uniqueId={'{{ getXMIID child }}'} - actions={actions} - {{# if container.isSelector }} - selectionDiff={selectionDiff} - setSelectionDiff={setSelectionDiff} - {{/ if }} - {{# if container.isRelationSelector }} - alreadySelected={alreadySelected} - {{/ if }} - {{# unless container.table }} - ownerData={data} - editMode={editMode} - isFormUpdateable={isFormUpdateable} - {{# unless child.isSelectorTable }} - validationError={validation.get('{{ child.dataElement.name }}')} - {{/ unless }} - {{/ unless }} - refreshCounter={refreshCounter} - isOwnerLoading={isLoading} - /> + + {{# if (displayTableHeading child container) }} + + + {{# if (elementHasIcon child) }} + + {{/ if }} + {{# if (elementHasLabel child) }} + + { t('{{ getTranslationKeyForVisualElement child }}', { defaultValue: '{{ child.label }}' }) } + + {{/ if }} + + + {{/ if }} + + + <{{ componentName child }} + uniqueId={'{{ getXMIID child }}'} + actions={actions} + {{# if container.isSelector }} + selectionDiff={selectionDiff} + setSelectionDiff={setSelectionDiff} + {{/ if }} + {{# if container.isRelationSelector }} + alreadySelected={alreadySelected} + {{/ if }} + {{# unless container.table }} + ownerData={data} + editMode={editMode} + isFormUpdateable={isFormUpdateable} + {{# unless child.isSelectorTable }} + validationError={validation.get('{{ child.dataElement.name }}')} + {{/ unless }} + {{/ unless }} + refreshCounter={refreshCounter} + isOwnerLoading={isLoading} + /> + + {{# if child.customImplementation }} diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputSelectorAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputSelectorAction.fragment.hbs index e46cf3ae..6c99c22f 100644 --- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputSelectorAction.fragment.hbs +++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputSelectorAction.fragment.hbs @@ -1,4 +1,4 @@ -const {{ simpleActionDefinitionName action.actionDefinition }} = async () => { +const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if }}) => { const { result, data: returnedData } = await open{{ pageName action.targetPageDefinition }}({{{ getSelectorOpenActionParameters action page.container }}}); if (result === 'submit') { {{# if page.container.view }}