diff --git a/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model b/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model
index 1c9a6cf7..5d639e1d 100644
--- a/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model
+++ b/judo-ui-react-itest/ActionGroupTest/model/ActionGroupTest-ui.model
@@ -168,20 +168,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -198,6 +184,8 @@
+
+
@@ -280,7 +268,7 @@
-
+
@@ -368,9 +356,6 @@
-
-
-
@@ -378,8 +363,8 @@
-
-
+
+
@@ -399,21 +384,14 @@
-
-
-
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -422,6 +400,13 @@
+
+
+
+
+
+
+
@@ -442,9 +427,9 @@
-
-
-
+
+
+
@@ -840,14 +825,14 @@
-
+
-
+
@@ -861,18 +846,14 @@
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -889,9 +870,6 @@
-
-
-
@@ -906,6 +884,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -976,7 +969,7 @@
-
+
@@ -1029,21 +1022,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1053,14 +1046,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1070,18 +1063,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1094,9 +1075,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -1117,8 +1130,8 @@
-
-
+
+
@@ -1167,18 +1180,14 @@
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -1856,7 +1865,6 @@
UPDATE
DELETE
-
@@ -2090,45 +2098,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2138,11 +2146,11 @@
-
+
-
+
@@ -2150,15 +2158,15 @@
-
+
-
+
-
-
+
+
@@ -2294,11 +2302,11 @@
-
+
-
+
@@ -2308,11 +2316,11 @@
-
+
-
+
@@ -2380,45 +2388,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2428,11 +2436,11 @@
-
+
-
+
@@ -2440,15 +2448,15 @@
-
+
-
+
-
-
+
+
@@ -2599,11 +2607,11 @@
-
+
-
+
@@ -2613,11 +2621,11 @@
-
+
-
+
@@ -2730,11 +2738,11 @@
-
+
-
+
@@ -2744,11 +2752,11 @@
-
+
-
+
@@ -2808,37 +2816,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2849,11 +2857,11 @@
-
+
-
+
@@ -2861,11 +2869,11 @@
-
+
-
-
+
+
@@ -2920,11 +2928,11 @@
-
+
-
+
@@ -2934,11 +2942,11 @@
-
+
-
+
@@ -2966,37 +2974,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3007,11 +3015,11 @@
-
+
-
+
@@ -3019,11 +3027,11 @@
-
+
-
-
+
+
@@ -3095,37 +3103,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3183,11 +3191,11 @@
-
+
-
+
@@ -3197,11 +3205,11 @@
-
+
-
+
@@ -3244,37 +3252,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3358,11 +3366,11 @@
-
+
-
+
@@ -3372,11 +3380,11 @@
-
+
-
+
@@ -3472,11 +3480,11 @@
-
+
-
+
@@ -3486,11 +3494,11 @@
-
+
-
+
@@ -3591,11 +3599,11 @@
-
+
-
+
@@ -3605,11 +3613,11 @@
-
+
-
+
@@ -3718,11 +3726,11 @@
-
+
-
+
@@ -3732,11 +3740,11 @@
-
+
-
+
@@ -3830,45 +3838,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3879,19 +3887,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -3899,11 +3907,11 @@
-
+
-
+
@@ -3911,15 +3919,15 @@
-
+
-
+
-
-
+
+
@@ -4094,11 +4102,11 @@
-
+
-
+
@@ -4108,11 +4116,11 @@
-
+
-
+
@@ -4169,11 +4177,11 @@
-
+
-
+
@@ -4181,15 +4189,15 @@
-
+
-
+
-
-
+
+
@@ -4198,19 +4206,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -4224,45 +4232,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4452,11 +4460,11 @@
-
+
-
+
@@ -4466,11 +4474,11 @@
-
+
-
+
@@ -4528,37 +4536,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4601,17 +4609,17 @@
-
+
-
+
-
+
@@ -4622,29 +4630,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4654,15 +4662,15 @@
-
+
-
+
-
-
+
+
@@ -4783,11 +4791,11 @@
-
+
-
+
@@ -4797,11 +4805,11 @@
-
+
-
+
@@ -4829,17 +4837,17 @@
-
+
-
+
-
+
@@ -4850,29 +4858,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4882,15 +4890,15 @@
-
+
-
+
-
-
+
+
@@ -5049,11 +5057,11 @@
-
+
-
+
@@ -5063,23 +5071,11 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -5110,29 +5106,29 @@
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
@@ -5189,7 +5185,7 @@
-
+
@@ -5244,29 +5240,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5286,9 +5282,9 @@
-
-
-
+
+
+
@@ -5442,11 +5438,11 @@
-
+
-
+
@@ -5454,15 +5450,15 @@
-
+
-
+
-
-
+
+
@@ -5565,11 +5561,11 @@
-
+
-
+
@@ -5579,23 +5575,23 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -5619,41 +5615,41 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5695,11 +5691,11 @@
-
+
-
+
@@ -5707,15 +5703,15 @@
-
+
-
+
-
-
+
+
@@ -5840,11 +5836,11 @@
-
+
-
+
@@ -5957,11 +5953,11 @@
-
+
-
+
@@ -5971,11 +5967,11 @@
-
+
-
+
@@ -6087,15 +6083,27 @@
-
+
+
+
+
+
-
+
+
+
+
+
-
+
+
+
+
+
@@ -6136,11 +6144,11 @@
-
+
-
+
@@ -6150,11 +6158,11 @@
-
+
-
+
@@ -6253,11 +6261,11 @@
-
+
-
+
@@ -6267,11 +6275,11 @@
-
+
-
+
@@ -6373,19 +6381,31 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -6395,61 +6415,11 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -6467,38 +6437,21 @@
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
@@ -6535,53 +6488,70 @@
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -6611,79 +6581,15 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -6712,7 +6618,7 @@
-
+
@@ -6752,6 +6658,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6775,41 +6775,29 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -6864,11 +6852,11 @@
-
+
-
+
@@ -6878,11 +6866,11 @@
-
+
-
+
@@ -6918,41 +6906,29 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -7047,19 +7023,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -7070,33 +7046,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -7222,11 +7198,11 @@
-
+
-
+
@@ -7236,11 +7212,11 @@
-
+
-
+
@@ -7271,93 +7247,45 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -7368,19 +7296,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -7391,33 +7319,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/judo-ui-react-itest/ActionGroupTestPro/model/ActionGroupTestPro-ui.model b/judo-ui-react-itest/ActionGroupTestPro/model/ActionGroupTestPro-ui.model
index 1c9a6cf7..5d639e1d 100644
--- a/judo-ui-react-itest/ActionGroupTestPro/model/ActionGroupTestPro-ui.model
+++ b/judo-ui-react-itest/ActionGroupTestPro/model/ActionGroupTestPro-ui.model
@@ -168,20 +168,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -198,6 +184,8 @@
+
+
@@ -280,7 +268,7 @@
-
+
@@ -368,9 +356,6 @@
-
-
-
@@ -378,8 +363,8 @@
-
-
+
+
@@ -399,21 +384,14 @@
-
-
-
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -422,6 +400,13 @@
+
+
+
+
+
+
+
@@ -442,9 +427,9 @@
-
-
-
+
+
+
@@ -840,14 +825,14 @@
-
+
-
+
@@ -861,18 +846,14 @@
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -889,9 +870,6 @@
-
-
-
@@ -906,6 +884,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -976,7 +969,7 @@
-
+
@@ -1029,21 +1022,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1053,14 +1046,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1070,18 +1063,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1094,9 +1075,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -1117,8 +1130,8 @@
-
-
+
+
@@ -1167,18 +1180,14 @@
-
-
+
-
-
-
-
+
-
-
-
+
+
+
@@ -1856,7 +1865,6 @@
UPDATE
DELETE
-
@@ -2090,45 +2098,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2138,11 +2146,11 @@
-
+
-
+
@@ -2150,15 +2158,15 @@
-
+
-
+
-
-
+
+
@@ -2294,11 +2302,11 @@
-
+
-
+
@@ -2308,11 +2316,11 @@
-
+
-
+
@@ -2380,45 +2388,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2428,11 +2436,11 @@
-
+
-
+
@@ -2440,15 +2448,15 @@
-
+
-
+
-
-
+
+
@@ -2599,11 +2607,11 @@
-
+
-
+
@@ -2613,11 +2621,11 @@
-
+
-
+
@@ -2730,11 +2738,11 @@
-
+
-
+
@@ -2744,11 +2752,11 @@
-
+
-
+
@@ -2808,37 +2816,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2849,11 +2857,11 @@
-
+
-
+
@@ -2861,11 +2869,11 @@
-
+
-
-
+
+
@@ -2920,11 +2928,11 @@
-
+
-
+
@@ -2934,11 +2942,11 @@
-
+
-
+
@@ -2966,37 +2974,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3007,11 +3015,11 @@
-
+
-
+
@@ -3019,11 +3027,11 @@
-
+
-
-
+
+
@@ -3095,37 +3103,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3183,11 +3191,11 @@
-
+
-
+
@@ -3197,11 +3205,11 @@
-
+
-
+
@@ -3244,37 +3252,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3358,11 +3366,11 @@
-
+
-
+
@@ -3372,11 +3380,11 @@
-
+
-
+
@@ -3472,11 +3480,11 @@
-
+
-
+
@@ -3486,11 +3494,11 @@
-
+
-
+
@@ -3591,11 +3599,11 @@
-
+
-
+
@@ -3605,11 +3613,11 @@
-
+
-
+
@@ -3718,11 +3726,11 @@
-
+
-
+
@@ -3732,11 +3740,11 @@
-
+
-
+
@@ -3830,45 +3838,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3879,19 +3887,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -3899,11 +3907,11 @@
-
+
-
+
@@ -3911,15 +3919,15 @@
-
+
-
+
-
-
+
+
@@ -4094,11 +4102,11 @@
-
+
-
+
@@ -4108,11 +4116,11 @@
-
+
-
+
@@ -4169,11 +4177,11 @@
-
+
-
+
@@ -4181,15 +4189,15 @@
-
+
-
+
-
-
+
+
@@ -4198,19 +4206,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -4224,45 +4232,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4452,11 +4460,11 @@
-
+
-
+
@@ -4466,11 +4474,11 @@
-
+
-
+
@@ -4528,37 +4536,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4601,17 +4609,17 @@
-
+
-
+
-
+
@@ -4622,29 +4630,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4654,15 +4662,15 @@
-
+
-
+
-
-
+
+
@@ -4783,11 +4791,11 @@
-
+
-
+
@@ -4797,11 +4805,11 @@
-
+
-
+
@@ -4829,17 +4837,17 @@
-
+
-
+
-
+
@@ -4850,29 +4858,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4882,15 +4890,15 @@
-
+
-
+
-
-
+
+
@@ -5049,11 +5057,11 @@
-
+
-
+
@@ -5063,23 +5071,11 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -5110,29 +5106,29 @@
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
@@ -5189,7 +5185,7 @@
-
+
@@ -5244,29 +5240,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5286,9 +5282,9 @@
-
-
-
+
+
+
@@ -5442,11 +5438,11 @@
-
+
-
+
@@ -5454,15 +5450,15 @@
-
+
-
+
-
-
+
+
@@ -5565,11 +5561,11 @@
-
+
-
+
@@ -5579,23 +5575,23 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -5619,41 +5615,41 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5695,11 +5691,11 @@
-
+
-
+
@@ -5707,15 +5703,15 @@
-
+
-
+
-
-
+
+
@@ -5840,11 +5836,11 @@
-
+
-
+
@@ -5957,11 +5953,11 @@
-
+
-
+
@@ -5971,11 +5967,11 @@
-
+
-
+
@@ -6087,15 +6083,27 @@
-
+
+
+
+
+
-
+
+
+
+
+
-
+
+
+
+
+
@@ -6136,11 +6144,11 @@
-
+
-
+
@@ -6150,11 +6158,11 @@
-
+
-
+
@@ -6253,11 +6261,11 @@
-
+
-
+
@@ -6267,11 +6275,11 @@
-
+
-
+
@@ -6373,19 +6381,31 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -6395,61 +6415,11 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -6467,38 +6437,21 @@
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
@@ -6535,53 +6488,70 @@
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -6611,79 +6581,15 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -6712,7 +6618,7 @@
-
+
@@ -6752,6 +6658,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6775,41 +6775,29 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -6864,11 +6852,11 @@
-
+
-
+
@@ -6878,11 +6866,11 @@
-
+
-
+
@@ -6918,41 +6906,29 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -7047,19 +7023,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -7070,33 +7046,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -7222,11 +7198,11 @@
-
+
-
+
@@ -7236,11 +7212,11 @@
-
+
-
+
@@ -7271,93 +7247,45 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -7368,19 +7296,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -7391,33 +7319,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/judo-ui-react-itest/CRUDActionsTest/model/CRUDActionsTest-ui.model b/judo-ui-react-itest/CRUDActionsTest/model/CRUDActionsTest-ui.model
index 230f0eb8..0a5e62f1 100644
--- a/judo-ui-react-itest/CRUDActionsTest/model/CRUDActionsTest-ui.model
+++ b/judo-ui-react-itest/CRUDActionsTest/model/CRUDActionsTest-ui.model
@@ -37,7 +37,7 @@
-
+
@@ -99,7 +99,7 @@
-
+
@@ -621,11 +621,11 @@
-
+
-
+
@@ -635,11 +635,11 @@
-
+
-
+
@@ -682,25 +682,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -720,37 +720,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -766,45 +766,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -897,25 +897,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -935,37 +935,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -981,45 +981,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1131,11 +1131,11 @@
-
+
-
+
@@ -1145,11 +1145,11 @@
-
+
-
+
@@ -1186,15 +1186,15 @@
-
+
-
-
+
+
@@ -1216,11 +1216,11 @@
-
+
-
+
@@ -1228,11 +1228,11 @@
-
+
-
-
+
+
@@ -1244,11 +1244,11 @@
-
+
-
+
@@ -1256,15 +1256,15 @@
-
+
-
+
-
-
+
+
@@ -1346,15 +1346,15 @@
-
+
-
-
+
+
@@ -1376,11 +1376,11 @@
-
+
-
+
@@ -1388,11 +1388,11 @@
-
+
-
-
+
+
@@ -1404,11 +1404,11 @@
-
+
-
+
@@ -1416,15 +1416,15 @@
-
+
-
+
-
-
+
+
@@ -1531,11 +1531,11 @@
-
+
-
+
@@ -1545,11 +1545,11 @@
-
+
-
+
@@ -1722,11 +1722,11 @@
-
+
-
+
@@ -1736,11 +1736,11 @@
-
+
-
+
@@ -1878,11 +1878,11 @@
-
+
-
+
@@ -1892,11 +1892,11 @@
-
+
-
+
@@ -2034,11 +2034,11 @@
-
+
-
+
@@ -2048,11 +2048,11 @@
-
+
-
+
@@ -2227,7 +2227,7 @@
-
+
@@ -2289,7 +2289,7 @@
-
+
@@ -2811,11 +2811,11 @@
-
+
-
+
@@ -2825,11 +2825,11 @@
-
+
-
+
@@ -2872,25 +2872,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -2910,37 +2910,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2956,45 +2956,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3087,25 +3087,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -3125,37 +3125,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3171,45 +3171,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3321,11 +3321,11 @@
-
+
-
+
@@ -3335,11 +3335,11 @@
-
+
-
+
@@ -3376,15 +3376,15 @@
-
+
-
-
+
+
@@ -3406,11 +3406,11 @@
-
+
-
+
@@ -3418,11 +3418,11 @@
-
+
-
-
+
+
@@ -3434,11 +3434,11 @@
-
+
-
+
@@ -3446,15 +3446,15 @@
-
+
-
+
-
-
+
+
@@ -3536,15 +3536,15 @@
-
+
-
-
+
+
@@ -3566,11 +3566,11 @@
-
+
-
+
@@ -3578,11 +3578,11 @@
-
+
-
-
+
+
@@ -3594,11 +3594,11 @@
-
+
-
+
@@ -3606,15 +3606,15 @@
-
+
-
+
-
-
+
+
@@ -3721,11 +3721,11 @@
-
+
-
+
@@ -3735,11 +3735,11 @@
-
+
-
+
@@ -3912,11 +3912,11 @@
-
+
-
+
@@ -3926,11 +3926,11 @@
-
+
-
+
@@ -4068,11 +4068,11 @@
-
+
-
+
@@ -4082,11 +4082,11 @@
-
+
-
+
@@ -4224,11 +4224,11 @@
-
+
-
+
@@ -4238,11 +4238,11 @@
-
+
-
+
@@ -4417,7 +4417,7 @@
-
+
@@ -4479,7 +4479,7 @@
-
+
@@ -4992,11 +4992,11 @@
-
+
-
+
@@ -5006,11 +5006,11 @@
-
+
-
+
@@ -5053,25 +5053,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -5091,37 +5091,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5137,45 +5137,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5268,25 +5268,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -5306,37 +5306,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5352,45 +5352,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5502,11 +5502,11 @@
-
+
-
+
@@ -5516,11 +5516,11 @@
-
+
-
+
@@ -5557,15 +5557,15 @@
-
+
-
-
+
+
@@ -5587,11 +5587,11 @@
-
+
-
+
@@ -5599,11 +5599,11 @@
-
+
-
-
+
+
@@ -5615,11 +5615,11 @@
-
+
-
+
@@ -5627,15 +5627,15 @@
-
+
-
+
-
-
+
+
@@ -5717,15 +5717,15 @@
-
+
-
-
+
+
@@ -5747,11 +5747,11 @@
-
+
-
+
@@ -5759,11 +5759,11 @@
-
+
-
-
+
+
@@ -5775,11 +5775,11 @@
-
+
-
+
@@ -5787,15 +5787,15 @@
-
+
-
+
-
-
+
+
@@ -5902,11 +5902,11 @@
-
+
-
+
@@ -5916,11 +5916,11 @@
-
+
-
+
@@ -6093,11 +6093,11 @@
-
+
-
+
@@ -6107,11 +6107,11 @@
-
+
-
+
@@ -6249,11 +6249,11 @@
-
+
-
+
@@ -6263,11 +6263,11 @@
-
+
-
+
@@ -6405,11 +6405,11 @@
-
+
-
+
@@ -6419,11 +6419,11 @@
-
+
-
+
diff --git a/judo-ui-react-itest/OperationParametersTest/model/OperationParametersTest-ui.model b/judo-ui-react-itest/OperationParametersTest/model/OperationParametersTest-ui.model
index 93db98a2..302dc70f 100644
--- a/judo-ui-react-itest/OperationParametersTest/model/OperationParametersTest-ui.model
+++ b/judo-ui-react-itest/OperationParametersTest/model/OperationParametersTest-ui.model
@@ -19,9 +19,9 @@
-
-
-
+
+
+
@@ -29,9 +29,9 @@
-
-
-
+
+
+
@@ -46,10 +46,10 @@
-
-
-
-
+
+
+
+
@@ -162,7 +162,7 @@
-
+
@@ -211,6 +211,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -221,7 +263,7 @@
-
+
@@ -314,7 +356,7 @@
-
+
@@ -386,7 +428,7 @@
-
+
@@ -461,7 +503,7 @@
-
+
@@ -536,6 +578,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -572,7 +661,7 @@
-
+
@@ -612,7 +701,7 @@
-
+
@@ -1171,37 +1260,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1219,11 +1308,11 @@
-
+
-
-
+
+
@@ -1275,11 +1364,11 @@
-
+
-
+
@@ -1289,11 +1378,11 @@
-
+
-
+
@@ -1322,11 +1411,11 @@
-
+
-
-
+
+
@@ -1348,37 +1437,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1421,29 +1510,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1456,17 +1545,17 @@
-
+
-
+
-
+
@@ -1521,11 +1610,11 @@
-
+
-
+
@@ -1535,11 +1624,11 @@
-
+
-
+
@@ -1568,17 +1657,17 @@
-
+
-
+
-
+
@@ -1592,29 +1681,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1700,11 +1789,11 @@
-
+
-
+
@@ -1714,11 +1803,11 @@
-
+
-
+
@@ -1824,11 +1913,11 @@
-
+
-
+
@@ -1838,11 +1927,11 @@
-
+
-
+
@@ -1981,11 +2070,11 @@
-
+
-
+
@@ -1995,23 +2084,23 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -2032,17 +2121,17 @@
-
+
-
+
-
+
@@ -2133,11 +2222,11 @@
-
+
-
+
@@ -2147,11 +2236,11 @@
-
+
-
+
@@ -2230,17 +2319,17 @@
-
+
-
+
-
+
@@ -2255,29 +2344,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2287,19 +2376,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -2311,19 +2400,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -2334,17 +2423,17 @@
-
+
-
+
-
+
@@ -2354,11 +2443,11 @@
-
+
-
-
+
+
@@ -2417,11 +2506,11 @@
-
+
-
+
@@ -2431,11 +2520,11 @@
-
+
-
+
@@ -2475,11 +2564,11 @@
-
+
-
-
+
+
@@ -2491,17 +2580,17 @@
-
+
-
+
-
+
@@ -2512,19 +2601,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -2533,19 +2622,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -2559,29 +2648,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2595,17 +2684,17 @@
-
+
-
+
-
+
@@ -2805,11 +2894,11 @@
-
+
-
+
@@ -2819,11 +2908,11 @@
-
+
-
+
@@ -2886,11 +2975,11 @@
-
+
-
-
+
+
@@ -2901,37 +2990,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3032,11 +3121,11 @@
-
+
-
+
@@ -3046,11 +3135,11 @@
-
+
-
+
@@ -3116,11 +3205,11 @@
-
+
-
-
+
+
@@ -3131,37 +3220,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3252,17 +3341,17 @@
-
+
-
+
-
+
@@ -3276,17 +3365,17 @@
-
+
-
+
-
+
@@ -3300,17 +3389,17 @@
-
+
-
+
-
+
@@ -3327,15 +3416,15 @@
-
+
-
+
-
-
+
+
@@ -3347,29 +3436,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3386,19 +3475,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -3412,33 +3501,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3460,11 +3549,11 @@
-
+
-
-
+
+
@@ -3699,11 +3788,11 @@
-
+
-
+
@@ -3713,11 +3802,11 @@
-
+
-
+
@@ -3765,19 +3854,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -3797,33 +3886,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3845,11 +3934,11 @@
-
+
-
-
+
+
@@ -3858,15 +3947,15 @@
-
+
-
+
-
-
+
+
@@ -3878,29 +3967,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3920,17 +4009,17 @@
-
+
-
+
-
+
@@ -3944,17 +4033,17 @@
-
+
-
+
-
+
@@ -3968,17 +4057,17 @@
-
+
-
+
-
+
@@ -4174,17 +4263,17 @@
-
+
-
+
-
+
@@ -4195,11 +4284,11 @@
-
+
-
-
+
+
@@ -4211,29 +4300,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4244,15 +4333,15 @@
-
+
-
+
-
-
+
+
@@ -4293,9 +4382,13 @@
+
+
+
+
-
+
@@ -4411,11 +4504,11 @@
-
+
-
+
@@ -4425,11 +4518,11 @@
-
+
-
+
@@ -4473,15 +4566,15 @@
-
+
-
+
-
-
+
+
@@ -4490,11 +4583,11 @@
-
+
-
-
+
+
@@ -4506,29 +4599,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -4542,17 +4635,17 @@
-
+
-
+
-
+
@@ -4585,6 +4678,9 @@
+
+
+
@@ -4602,7 +4698,9 @@
+
+
@@ -4634,11 +4732,11 @@
-
+
-
+
@@ -4648,28 +4746,27 @@
-
+
-
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
+
@@ -4682,6 +4779,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4708,6 +4922,9 @@
+
+
+
@@ -4768,7 +4985,7 @@
-
+
@@ -4806,7 +5023,7 @@
-
+
@@ -4845,7 +5062,7 @@
-
+
@@ -4903,11 +5120,11 @@
-
+
-
+
@@ -4917,11 +5134,11 @@
-
+
-
+
@@ -5017,11 +5234,11 @@
-
+
-
+
@@ -5031,11 +5248,11 @@
-
+
-
+
@@ -5100,37 +5317,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5146,11 +5363,11 @@
-
+
-
-
+
+
@@ -5244,11 +5461,11 @@
-
+
-
+
@@ -5258,11 +5475,11 @@
-
+
-
+
@@ -5352,11 +5569,11 @@
-
+
-
-
+
+
@@ -5368,37 +5585,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -5486,11 +5703,11 @@
-
+
-
+
@@ -5500,11 +5717,11 @@
-
+
-
+
diff --git a/judo-ui-react-itest/RelationTest/model/RelationTest-ui.model b/judo-ui-react-itest/RelationTest/model/RelationTest-ui.model
index 103acf2a..29ffa5e1 100644
--- a/judo-ui-react-itest/RelationTest/model/RelationTest-ui.model
+++ b/judo-ui-react-itest/RelationTest/model/RelationTest-ui.model
@@ -393,7 +393,7 @@
-
+
@@ -425,7 +425,7 @@
-
+
@@ -825,11 +825,11 @@
-
+
-
+
@@ -837,16 +837,16 @@
-
+
-
+
-
-
-
+
+
+
@@ -854,20 +854,20 @@
-
+
-
+
-
+
-
-
-
+
+
+
@@ -875,16 +875,16 @@
-
+
-
-
-
+
+
+
@@ -892,20 +892,20 @@
-
+
-
+
-
-
-
+
+
+
@@ -913,16 +913,16 @@
-
+
-
-
-
+
+
+
@@ -1044,11 +1044,11 @@
-
+
-
+
@@ -1058,11 +1058,11 @@
-
+
-
+
@@ -1083,11 +1083,11 @@
-
+
-
+
@@ -1095,16 +1095,16 @@
-
+
-
+
-
-
-
+
+
+
@@ -1112,20 +1112,20 @@
-
+
-
+
-
+
-
-
-
+
+
+
@@ -1133,16 +1133,16 @@
-
+
-
-
-
+
+
+
@@ -1150,20 +1150,20 @@
-
+
-
+
-
-
-
+
+
+
@@ -1171,16 +1171,16 @@
-
+
-
-
-
+
+
+
@@ -1293,45 +1293,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1346,37 +1346,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1391,11 +1391,11 @@
-
+
-
+
@@ -1403,15 +1403,15 @@
-
+
-
+
-
-
+
+
@@ -1424,11 +1424,11 @@
-
+
-
+
@@ -1436,11 +1436,11 @@
-
+
-
-
+
+
@@ -1559,11 +1559,11 @@
-
+
-
+
@@ -1573,11 +1573,11 @@
-
+
-
+
@@ -1609,45 +1609,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1662,37 +1662,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1703,45 +1703,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1760,11 +1760,11 @@
-
+
-
+
@@ -1772,15 +1772,15 @@
-
+
-
+
-
-
+
+
@@ -1793,11 +1793,11 @@
-
+
-
+
@@ -1805,11 +1805,11 @@
-
+
-
-
+
+
@@ -1994,11 +1994,11 @@
-
+
-
+
@@ -2008,11 +2008,11 @@
-
+
-
+
@@ -2141,11 +2141,11 @@
-
+
-
+
@@ -2155,11 +2155,11 @@
-
+
-
+
@@ -2255,11 +2255,11 @@
-
+
-
+
@@ -2269,11 +2269,11 @@
-
+
-
+
@@ -2369,11 +2369,11 @@
-
+
-
+
@@ -2383,11 +2383,11 @@
-
+
-
+
@@ -2483,11 +2483,11 @@
-
+
-
+
@@ -2497,11 +2497,11 @@
-
+
-
+
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 871c8d0b..3b996d57 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
@@ -33,8 +33,7 @@
import static hu.blackbelt.judo.ui.generator.react.UiPageHelper.*;
import static hu.blackbelt.judo.ui.generator.react.UiWidgetHelper.*;
-import static hu.blackbelt.judo.ui.generator.typescript.rest.commons.UiCommonsHelper.classDataName;
-import static hu.blackbelt.judo.ui.generator.typescript.rest.commons.UiCommonsHelper.firstToUpper;
+import static hu.blackbelt.judo.ui.generator.typescript.rest.commons.UiCommonsHelper.*;
@Log
@TemplateHelper
@@ -65,10 +64,24 @@ public static Set getContainerOwnActionDefinitions(PageContain
actionDefinitions.addAll(buttons.stream().map(Button::getActionDefinition).toList());
actionDefinitions.addAll(buttons.stream().map(Button::getPreFetchActionDefinition).filter(Objects::nonNull).toList());
+ Set target = new HashSet<>();
+ Map actionDefinitionMap = new HashMap<>();
+
+ for (ActionDefinition actionDefinition : flexActionDefinitions) {
+ OperationType operationType = actionDefinition instanceof InputFormCallOperationActionDefinition cad ? cad.getOperation() : null;
+ if (operationType == null) {
+ target.add(actionDefinition);
+ } else {
+ actionDefinitionMap.putIfAbsent(getXMIID(operationType), actionDefinition);
+ }
+ }
+
+ target.addAll(actionDefinitionMap.values());
+
SortedSet sorted = new TreeSet<>(Comparator.comparing(NamedElement::getFQName));
+ sorted.addAll(target);
sorted.addAll(actionDefinitions);
- sorted.addAll(flexActionDefinitions);
return sorted;
}
@@ -437,6 +450,15 @@ public static Action getRowViewActionForCreateOpenAction(Action action) {
return null;
}
+ public static boolean isActionInTableInViewNonBulk(Action action) {
+ Table table = getTableParentForActionDefinition(action.getActionDefinition());
+ boolean isTableAction = table != null && table.getTableActionButtonGroup().getButtons().stream().anyMatch(b -> b.getActionDefinition().equals(action.getActionDefinition()));
+ if (!action.getActionDefinition().isIsBulk() && isTableAction) {
+ return ((PageDefinition) action.eContainer()).getContainer().isView();
+ }
+ return false;
+ }
+
public static boolean isActionParentEagerElement(Action action) {
Table table = getTableParentForActionDefinition(action.getActionDefinition());
Link link = getLinkParentForActionDefinition(action.getActionDefinition());
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 07c2fa53..19932cab 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
@@ -137,6 +137,7 @@ public static String getTranslationKeyForVisualElement(VisualElement element) {
if (element instanceof PageContainer) {
return element.getName().replaceAll("::", ".");
}
+
String root = element.getPageContainer().getName();
VisualElement target = element;
@@ -276,6 +277,9 @@ public static Map getApplicationTranslations(Application applica
return;
}
translations.put(getTranslationKeyForVisualElement(b), b.getLabel());
+ if (b.getConfirmation() != null) {
+ translations.put(getTranslationKeyForVisualElement(b) + ".confirmation", b.getConfirmation().getConfirmationMessage());
+ }
});
}
if (table.getRowActionButtonGroup() != null) {
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 1c8dafa5..e90d75d0 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
@@ -88,7 +88,7 @@ public static String simpleActionDefinitionName(ActionDefinition actionDefinitio
// CallOperation actions are rolled on the form container, which could lead to method name collisions.
suffix = firstToLower(callOperationActionDefinition.getOperation().getName()) + "For" + firstToUpper(callOperationActionDefinition.getOperation().getOwnerSimpleName());
} else if (actionDefinition instanceof BulkCallOperationActionDefinition bulkCallOperationActionDefinition) {
- suffix = "bulk" + firstToUpper(bulkCallOperationActionDefinition.getBulkOf().getOperation().getName());
+ suffix = "bulk" + firstToUpper(bulkCallOperationActionDefinition.getOperation().getName());
} else if (actionDefinition instanceof OpenOperationInputSelectorActionDefinition openOperationInputSelectorActionDefinition) {
if (openOperationInputSelectorActionDefinition.getSelectorFor() != null) {
if (openOperationInputSelectorActionDefinition.getSelectorFor() instanceof CallOperationActionDefinition callOperationActionDefinition) {
@@ -479,4 +479,29 @@ public static String getCustomImplementationProps(VisualElement element) {
}
return "data, validation, editMode, storeDiff, isLoading, actions";
}
+
+ public static List getOperationFormCallerPages(PageContainer container, Application application) {
+ List pages = new ArrayList<>();
+ if (!container.isForm()) {
+ return pages;
+ }
+ boolean hasOp = getContainerOwnActionDefinitions(container).stream().anyMatch(ActionDefinition::getIsInputFormCallOperationAction);
+
+ if (hasOp) {
+ pages = application.getPages().stream().filter(p -> p.getContainer().equals(container)).toList();
+ }
+ return pages;
+ }
+
+ public static boolean hasOperationFormCallerPages(PageContainer container, Application application) {
+ return !getOperationFormCallerPages(container, application).isEmpty();
+ }
+
+ public static PageDefinition getCallerPageForOperationFormCallButton(Button button, Application application) {
+ PageContainer container = button.getPageContainer();
+ List pages = getOperationFormCallerPages(container, application);
+ return pages.stream()
+ .filter(p -> p.getActions().stream().anyMatch(a -> a.getActionDefinition().equals(button.getActionDefinition())))
+ .findFirst().orElse(null);
+ }
}
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 a9b4936b..1a546948 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
@@ -251,10 +251,7 @@ public static boolean tableHasBulkOperations(Table table) {
}
public static boolean tableHasSelectorColumn(Table table) {
- 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());
+ return table.isIsSelectorTable() || tableHasBulkOperations(table);
}
public static Column getFirstTitleColumnForTable(Table table) {
diff --git a/judo-ui-react/src/main/resources/actor/src/components/table/EagerTable.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/components/table/EagerTable.tsx.hbs
index 234ce6f9..cff9e3cb 100644
--- a/judo-ui-react/src/main/resources/actor/src/components/table/EagerTable.tsx.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/components/table/EagerTable.tsx.hbs
@@ -25,6 +25,7 @@ import {
columnsActionCalculator,
} from '~/components/table';
import { RowHighlightLegend } from '~/components/table';
+import { useConfirmDialog } from '~/components/dialog';
import { basePageSizeOptions, baseTableConfig } from '~/config';
import { useDataStore } from '~/hooks';
import { transformRowStylings } from '~/theme/table-row-highlighting';
@@ -133,6 +134,7 @@ export function EagerTable}
variant={toolBarAction.variant}
onClick={async () => {
+ if (toolBarAction.confirmation && (typeof toolBarAction.confirmationCondition === 'undefined' || toolBarAction.confirmationCondition === true)) {
+ const result = await openConfirmDialog(
+ toolBarAction.id,
+ toolBarAction.confirmation,
+ t('judo.modal.confirm.confirm-title', { defaultValue: 'Confirm action' }) as string,
+ );
+
+ if (!result) {
+ return;
+ }
+ }
if (toolBarAction.name === calculateActionName(relationName, 'filterAction')) {
await filterAction(toolBarAction.id);
} else {
diff --git a/judo-ui-react/src/main/resources/actor/src/components/table/LazyTable.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/components/table/LazyTable.tsx.hbs
index 55402f73..16f259d7 100644
--- a/judo-ui-react/src/main/resources/actor/src/components/table/LazyTable.tsx.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/components/table/LazyTable.tsx.hbs
@@ -27,6 +27,7 @@ StripedDataGrid,
columnsActionCalculator,
RowHighlightLegend,
} from '~/components/table';
+import { useConfirmDialog } from '~/components/dialog';
import { basePageSizeOptions, baseTableConfig, filterDebounceMs } from '~/config';
import { useDataStore } from '~/hooks';
import { transformRowStylings } from '~/theme/table-row-highlighting';
@@ -166,6 +167,7 @@ export function LazyTable(false);
const [totalCount, setTotalCount] = useState(-1);
const [data, setData] = useState[]>(dataProp);
@@ -625,6 +627,17 @@ export function LazyTable}
variant={toolBarAction.variant}
onClick={async () => {
+ if (toolBarAction.confirmation && (typeof toolBarAction.confirmationCondition === 'undefined' || toolBarAction.confirmationCondition === true)) {
+ const result = await openConfirmDialog(
+ toolBarAction.id,
+ toolBarAction.confirmation,
+ t('judo.modal.confirm.confirm-title', { defaultValue: 'Confirm action' }) as string,
+ );
+
+ if (!result) {
+ return;
+ }
+ }
if (toolBarAction.name === calculateActionName(relationName, 'filterAction')) {
await filterAction(toolBarAction.id);
} else {
diff --git a/judo-ui-react/src/main/resources/actor/src/containers/components/table/index.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/containers/components/table/index.tsx.hbs
index 791daa77..8e8c9b31 100644
--- a/judo-ui-react/src/main/resources/actor/src/containers/components/table/index.tsx.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/containers/components/table/index.tsx.hbs
@@ -171,16 +171,22 @@ export function {{ componentName table }}(props: {{ componentName table }}Props)
const toolBarActions: ToolBarActionProps<{{# with (getReferenceClassType table) as |classType| }}{{# if classType.isMapped }}{{ classDataName (getReferenceClassType table) 'Stored' }}{{ else }}{{ classDataName (getReferenceClassType table) '' }}{{/ if }}{{/ with }}>[] = [
{{# each table.tableActionButtonGroup.buttons as |button| }}
{
- name:"{{ simpleActionDefinitionName actionDefinition }}",
- id:"{{ getXMIID button }}",
+ name: "{{ simpleActionDefinitionName actionDefinition }}",
+ id: "{{ getXMIID button }}",
{{# if button.icon }}
- startIcon:"{{ button.icon.iconName }}",
+ startIcon: "{{ button.icon.iconName }}",
{{/ if }}
- variant:{{{ variantForButton button }}},
- hiddenBy:{{# if button.hiddenBy }}true{{ else }}false{{/ if }},
- label:{ 'translationKey': '{{ getTranslationKeyForVisualElement button }}', 'defaultValue': '{{ button.label }}' },
+ variant: {{{ variantForButton button }}},
+ hiddenBy: {{# if button.hiddenBy }}true{{ else }}false{{/ if }},
+ label: { 'translationKey': '{{ getTranslationKeyForVisualElement button }}', 'defaultValue': '{{ button.label }}' },
enabled: (data: {{# with (getReferenceClassType table) as |classType| }}{{# if classType.isMapped }}{{ classDataName (getReferenceClassType table) 'Stored' }}[]{{ else }}{{ classDataName (getReferenceClassType table) '' }}[]{{/ if }}{{/ with }}, selectionModel: GridRowSelectionModel, ownerData?: any, isFormUpdateable?: () => boolean): boolean => {{{ tableButtonVisibilityConditions button table container }}},
isBulk: {{ boolValue actionDefinition.isBulk }},
+ {{# if button.confirmation }}
+ confirmation: t('{{ getTranslationKeyForVisualElement button }}.confirmation', { defaultValue: '{{ button.confirmation.confirmationMessage }}' }) as string,
+ {{# if (shouldRenderConfirmationCondition button) }}
+ confirmationCondition: data?.{{ button.confirmation.confirmationCondition.name }} ?? false,
+ {{/ if }}
+ {{/ if }}
},
{{/ each }}
diff --git a/judo-ui-react/src/main/resources/actor/src/containers/components/table/types.ts.hbs b/judo-ui-react/src/main/resources/actor/src/containers/components/table/types.ts.hbs
index ce8565c9..a23d68b4 100644
--- a/judo-ui-react/src/main/resources/actor/src/containers/components/table/types.ts.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/containers/components/table/types.ts.hbs
@@ -42,7 +42,7 @@ export interface {{ componentName table }}ActionDefinitions {
{{/ if }}
{{/ each }}
{{# each table.rowActionDefinitions as |actionDefinition| }}
- {{ simpleActionDefinitionName actionDefinition }}?: (row: {{ classDataName (getReferenceClassType table) 'Stored' }}{{# if actionDefinition.isBulkCapable }}, silentMode?: boolean{{ else }}{{# if actionDefinition.isOpenPageAction }}, isDraft?: boolean{{/ if }}{{/ if }}) => Promise;
+ {{ simpleActionDefinitionName actionDefinition }}?: (row: {{ classDataName (getReferenceClassType table) 'Stored' }}{{# if actionDefinition.isOpenPageAction }}, isDraft?: boolean{{/ if }}) => Promise;
{{/ each }}
{{ table.relationType.name }}AdditionalToolbarButtons?: (
{{# with (getReferenceClassType table) as |classType| }}
diff --git a/judo-ui-react/src/main/resources/actor/src/containers/dialog.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/containers/dialog.tsx.hbs
index ecb9a6af..5e803a5f 100644
--- a/judo-ui-react/src/main/resources/actor/src/containers/dialog.tsx.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/containers/dialog.tsx.hbs
@@ -57,6 +57,9 @@ export default function {{ containerComponentName container }}Dialog({{# unless
const createDropdownRef = useRef(null);
{{/ if }}
const {
+ {{# if (hasOperationFormCallerPages container application) }}
+ formFor,
+ {{/ if }}
ownerData,
onClose
{{# unless (containerIsEmptyDashboard container) }},
@@ -150,7 +153,7 @@ export default function {{ containerComponentName container }}Dialog({{# unless
{{# each container.actionButtonGroup.buttons as |button| }}
- { {{{ containerButtonAvailable button }}} && actions.{{ simpleActionDefinitionName actionDefinition }} && (
+ { {{# if button.actionDefinition.isInputFormCallOperationAction }}formFor === '{{ safeName (getCallerPageForOperationFormCallButton button application) }}' && {{/ if }}{{{ containerButtonAvailable button }}} && actions.{{ simpleActionDefinitionName actionDefinition }} && (
{{# if button.actionDefinition.isCreateAction }}
{{# unless button.actionDefinition.autoOpenAfterCreate }}
diff --git a/judo-ui-react/src/main/resources/actor/src/containers/types.ts.hbs b/judo-ui-react/src/main/resources/actor/src/containers/types.ts.hbs
index 595a62c5..a7767b47 100644
--- a/judo-ui-react/src/main/resources/actor/src/containers/types.ts.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/containers/types.ts.hbs
@@ -22,6 +22,10 @@
export interface {{ pageContainerActionDefinitionTypeName container }}{{# if (containerHasRelationComponents container) }} extends {{# each (getContainerActionsExtends container) as |ext| }}{{ ext }}{{# unless @last}},{{/ unless}}{{/ each }}{{/ if }} {
getPageTitle?: ({{# unless container.table }}data: {{ classDataName container.dataElement '' }}{{/ unless }}) => string;
{{# each (getContainerOwnActionDefinitions container) as |actionDefinition| }}
+ {{# if actionDefinition.isCallOperationAction }}
+ // {{ getXMIID actionDefinition.operation }}
+ // {{ actionDefinition.operation.name }}
+ {{/ if }}
{{ simpleActionDefinitionName actionDefinition }}?: ({{{ getContainerOwnActionParameters actionDefinition container }}}) => Promise<{{{ getContainerOwnActionReturnType actionDefinition container }}}>;
{{/ each }}
{{# each (getOnBlurAttributesForContainer container) as |attributeType| }}
@@ -53,7 +57,9 @@
{{# if actionDefinition.isRefreshAction }}
{{ simpleActionDefinitionName actionDefinition }}?: (queryCustomizer: {{ classDataName container.dataElement 'QueryCustomizer' }}) => Promise>;
{{ else }}
- {{ simpleActionDefinitionName actionDefinition }}?: () => Promise;
+ {{# unless actionDefinition.isCallOperationAction }}
+ {{ simpleActionDefinitionName actionDefinition }}?: () => Promise;
+ {{/ unless }}
{{/ if }}
{{/ each }}
}
@@ -79,13 +85,25 @@
export interface {{ containerComponentName container }}DialogActions extends {{ pageContainerActionDefinitionTypeName container }} {
{{# each container.pageActionDefinitions as |actionDefinition| }}
- {{ simpleActionDefinitionName actionDefinition }}?: ({{{ getContainerOwnActionParameters actionDefinition container }}}) => Promise<{{{ getContainerOwnActionReturnType actionDefinition container }}}>;
+ {{# unless actionDefinition.isCallOperationAction }}
+ {{ simpleActionDefinitionName actionDefinition }}?: ({{{ getContainerOwnActionParameters actionDefinition container }}}) => Promise<{{{ getContainerOwnActionReturnType actionDefinition container }}}>;
+ {{/ unless }}
{{/ each }}
}
+{{# if (hasOperationFormCallerPages container application) }}
+ export type FormFor{{ containerComponentName container }} =
+ {{# each (getOperationFormCallerPages container application) as |actionDefinition| }}
+ '{{ safeName actionDefinition }}'{{# unless @last}} | {{/ unless}}
+ {{/ each }};
+{{/ if }}
+
export interface {{ containerComponentName container }}DialogProps {
ownerData: any;
onClose: () => Promise;
+ {{# if (hasOperationFormCallerPages container application) }}
+ formFor: FormFor{{ containerComponentName container }};
+ {{/ if }}
{{# unless (containerIsEmptyDashboard container) }}
actions: {{ containerComponentName container }}DialogActions;
dataPath?: string;
@@ -109,16 +127,6 @@
isDraft?: boolean;
{{/ unless }}
};
-
- export interface {{ containerComponentName container }}PageActions extends {{ pageContainerActionDefinitionTypeName container }} {
- {{# each container.pageActionDefinitions as |actionDefinition| }}
- {{# if actionDefinition.isRefreshAction }}
- {{ simpleActionDefinitionName actionDefinition }}?: (queryCustomizer: {{ classDataName container.dataElement 'QueryCustomizer' }}) => Promise>;
- {{ else }}
- {{ simpleActionDefinitionName actionDefinition }}?: () => Promise;
- {{/ if }}
- {{/ each }}
- }
{{ else }}
export const _ = 'placeholder';
{{/ unless }}
diff --git a/judo-ui-react/src/main/resources/actor/src/dialogs/index.tsx.hbs b/judo-ui-react/src/main/resources/actor/src/dialogs/index.tsx.hbs
index c0494d8b..c27f7adc 100644
--- a/judo-ui-react/src/main/resources/actor/src/dialogs/index.tsx.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/dialogs/index.tsx.hbs
@@ -255,6 +255,9 @@ export default function {{ pageName page }}(props: {{ pageName page }}Props) {
// ViewModel setup
const viewModel: {{ containerComponentName page.container }}ViewModel = {
+ {{# if (hasOperationFormCallerPages page.container application) }}
+ formFor: '{{ safeName page }}',
+ {{/ if }}
onClose,
actions,
ownerData,
@@ -318,6 +321,9 @@ export default function {{ pageName page }}(props: {{ pageName page }}Props) {
isLoading={isLoading}
editMode={editMode}
refreshCounter={refreshCounter}
+ {{# if (hasOperationFormCallerPages page.container application) }}
+ formFor={'{{ safeName page }}'}
+ {{/ if }}
{{# unless (containerIsEmptyDashboard page.container) }}
{{# if page.container.isSelector }}
selectionDiff={selectionDiff}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/AddAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/AddAction.fragment.hbs
index a606981c..0f9a128e 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/AddAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/AddAction.fragment.hbs
@@ -1,3 +1,4 @@
+// AddAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected: {{ classDataName action.actionDefinition.targetType 'Stored' }}[]) => {
onSubmit(selected);
};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteRangeAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteRangeAction.fragment.hbs
index ad2b1b72..334987f3 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteRangeAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteRangeAction.fragment.hbs
@@ -1,3 +1,4 @@
+// AutocompleteRangeAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (queryCustomizer: {{ classDataName action.actionDefinition.targetType 'QueryCustomizer' }}): Promise<{{ classDataName action.actionDefinition.targetType 'Stored' }}[]> => {
{{# with (getLinkParentForActionDefinition action.actionDefinition) as |link| }}
try {
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteSetAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteSetAction.fragment.hbs
index 9e42cd7c..a7deff03 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteSetAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/AutocompleteSetAction.fragment.hbs
@@ -1,3 +1,4 @@
+// AutocompleteSetAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected: {{ classDataName action.actionDefinition.targetType 'Stored' }}) => {
{{# with (getLinkParentForActionDefinition action.actionDefinition) as |link| }}
try {
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/BackAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/BackAction.fragment.hbs
index 5f012b25..01d61b71 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/BackAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/BackAction.fragment.hbs
@@ -1,3 +1,4 @@
+// BackAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
{{# if page.openInDialog }}
onClose();
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkCallOperationAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkCallOperationAction.fragment.hbs
index 8a14bafc..9054abc3 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkCallOperationAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkCallOperationAction.fragment.hbs
@@ -1,4 +1,5 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.bulkOf.targetType 'Stored' }}[]): Promise>> => {
+// BulkCallOperationAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.targetType 'Stored' }}[]): Promise>> => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
return new Promise((resolve) => {
openCRUDDialog<{{ classDataName (getReferenceClassType table) 'Stored' }}>({
@@ -11,9 +12,7 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected
selectedItems: selectedRows,
action: async (item, successHandler: () => void, errorHandler: (error: any) => void) => {
try {
- if (actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}) {
- await actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}!(item, true);
- }
+ await {{ getServiceImplForPage page }}.{{ action.actionDefinition.operation.name }}{{ operationCallSuffix action }}(item);
successHandler();
} catch (error) {
errorHandler(error);
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkDeleteAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkDeleteAction.fragment.hbs
index 5bba6147..8f857944 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkDeleteAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkDeleteAction.fragment.hbs
@@ -1,4 +1,5 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.bulkOf.targetType 'Stored' }}[]): Promise>> => {
+// BulkDeleteAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.targetType 'Stored' }}[]): Promise>> => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
return new Promise((resolve) => {
{{# if table.isEager }}
@@ -20,9 +21,12 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected
selectedItems: selectedRows,
action: async (item, successHandler: () => void, errorHandler: (error: any) => void) => {
try {
- if (actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}) {
- await actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}!(item, true);
- }
+ {{# if (isActionParentEagerElement action) }}
+ const newList = (data?.{{ table.dataElement.name }} ?? []).filter((c: any) => c.__identifier !== item.__identifier);
+ storeDiff('{{ table.dataElement.name }}', newList);
+ {{ else }}
+ await {{ getServiceImplForPage page }}.delete{{# if action.targetDataElement }}{{ firstToUpper action.targetDataElement.name }}{{/ if }}(item);
+ {{/ if }}
successHandler();
} catch (error) {
errorHandler(error);
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkRemoveAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkRemoveAction.fragment.hbs
index 40734446..7b2fb444 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkRemoveAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/BulkRemoveAction.fragment.hbs
@@ -1,4 +1,5 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.bulkOf.targetType 'Stored' }}[]): Promise>> => {
+// BulkRemoveAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async (selectedRows: {{ classDataName action.actionDefinition.targetType 'Stored' }}[]): Promise>> => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
return new Promise((resolve) => {
{{# if table.isEager }}
@@ -20,9 +21,12 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected
selectedItems: selectedRows,
action: async (item, successHandler: () => void, errorHandler: (error: any) => void) => {
try {
- if (actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}) {
- await actions.{{ simpleActionDefinitionName actionDefinition.bulkOf }}!(item, true);
- }
+ {{# if table.isEager }}
+ const newList = (data?.{{ table.dataElement.name }} ?? []).filter((c: any) => c.__identifier !== item.__identifier);
+ storeDiff('{{ table.dataElement.name }}', newList);
+ {{ else }}
+ await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.targetDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as any{{ else }}data{{/ if }}, [item]);
+ {{/ if }}
successHandler();
} catch (error) {
errorHandler(error);
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/CancelAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/CancelAction.fragment.hbs
index 2f1038ff..3ad5c75d 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/CancelAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/CancelAction.fragment.hbs
@@ -1,3 +1,4 @@
+// CancelAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
setValidation(new Map());
{{# and page.openInDialog page.container.view }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/ClearAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/ClearAction.fragment.hbs
index 71e480df..b5528173 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/ClearAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/ClearAction.fragment.hbs
@@ -1,3 +1,4 @@
+// ClearAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
{{# if table.isEager }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/CreateAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/CreateAction.fragment.hbs
index 1363db86..f80a77e5 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/CreateAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/CreateAction.fragment.hbs
@@ -1,3 +1,4 @@
+// CreateAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (openCreated?: boolean) => {
try {
{{# if (hasPageRequiredBy page) }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/CustomAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/CustomAction.fragment.hbs
index b7500951..cd47592d 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/CustomAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/CustomAction.fragment.hbs
@@ -1,3 +1,4 @@
+// CustomAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
alert('CustomAction');
};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/DeleteAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/DeleteAction.fragment.hbs
index 0965bbf1..cba7c639 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/DeleteAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/DeleteAction.fragment.hbs
@@ -1,4 +1,5 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{# if action.actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}{{/ if}}) => {
+// DeleteAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if}}) => {
try {
const confirmed = await openConfirmDialog(
'delete-action',
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/ExportAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/ExportAction.fragment.hbs
index 671e81f2..bf73aeef 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/ExportAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/ExportAction.fragment.hbs
@@ -1,3 +1,4 @@
+// ExportAction: {{ getXMIID action }}
{{# if action.targetDataElement }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (queryCustomizer: {{ classDataName action.targetDataElement.target 'QueryCustomizer' }}) => {
{{ else }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/FilterAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/FilterAction.fragment.hbs
index 8ad0a322..00d15c36 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/FilterAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/FilterAction.fragment.hbs
@@ -1,3 +1,4 @@
+// FilterAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (id: string, filterOptions: FilterOption[], model?: GridFilterModel, filters?: Filter[]): Promise<{ model?: GridFilterModel; filters?: Filter[] }> => {
const newFilters = await openFilterDialog(id, filterOptions, filters);
return {
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/GetTemplateAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/GetTemplateAction.fragment.hbs
index 8a54aacf..259f5cec 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/GetTemplateAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/GetTemplateAction.fragment.hbs
@@ -1,3 +1,4 @@
+// GetTemplateAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (): Promise> => {
try {
setIsLoading(true);
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/InputFormCallOperationAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/InputFormCallOperationAction.fragment.hbs
new file mode 100644
index 00000000..48ad03b3
--- /dev/null
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/InputFormCallOperationAction.fragment.hbs
@@ -0,0 +1,59 @@
+// InputFormCallOperationAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if }}) => {
+ {{# with action.actionDefinition.operation as |operation| }}
+ try {
+ {{# if (hasPageRequiredBy page) }}
+ {{> actor/src/fragments/page/local-validate.fragment.hbs }}
+ {{/ if }}
+
+ setIsLoading(true);
+ {{# if operation.output }}const { data: result } = {{/ if }}await {{ getServiceImplForPage page }}.{{ operation.name }}{{ operationCallSuffix action }}(
+ {{# unless operation.isStatic }}produceDataAdjustedOwner(),{{/ unless }}
+ data
+ );
+ if (customActions?.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}) {
+ await customActions.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}(
+ {{# if action.actionDefinition.targetType }}target!,{{/ if }}
+ {{# if operation.output }}result,{{/ if }}
+ onSubmit,
+ onClose
+ );
+ } else {
+ showSuccessSnack(t('judo.action.operation.success', { defaultValue: 'Operation executed successfully' }) as string);
+ onSubmit({{# if operation.output }}result{{/ if }});
+
+ {{# if operation.postCallAccessNavigation }}
+ try {
+ const { data: pcan } = await {{ firstToLower (serviceRelationName operation.postCallAccessNavigation.accessRelation) }}Impl.list(undefined, {
+ _identifier: result.__identifier,
+ });
+ {{# if action.targetPageDefinition.openInDialog }}
+ await open{{ pageName operation.postCallAccessNavigation.pageDefinition }}({
+ ownerData: pcan[0]
+ });
+ {{ else }}
+ navigate(routeTo{{ pageName operation.postCallAccessNavigation.pageDefinition }}(pcan[0].__signedIdentifier));
+ {{/ if }}
+ } catch(error) {
+ console.error('Could not proceed with post call access navigation', error);
+ }
+ {{ else }}
+ {{# if operation.output }}
+ {{# if action.targetPageDefinition.openInDialog }}
+ await open{{ pageName action.targetPageDefinition }}({
+ ownerData: produceDataAdjustedOwner(),
+ data: result,
+ });
+ {{ else }}
+ navigate(routeTo{{ pageName action.targetPageDefinition }}(result.__signedIdentifier));
+ {{/ if }}
+ {{/ if }}
+ {{/ if }}
+ }
+ } catch (error) {
+ handleError<{{ classDataName (getReferenceClassType page) '' }}>(error, { setValidation }, owner.current, dataPath);
+ } finally {
+ setIsLoading(false);
+ }
+ {{/ with }}
+};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/CallOperationAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/InputSelectorCallOperationAction.fragment.hbs
similarity index 57%
rename from judo-ui-react/src/main/resources/actor/src/pages/actions/CallOperationAction.fragment.hbs
rename to judo-ui-react/src/main/resources/actor/src/pages/actions/InputSelectorCallOperationAction.fragment.hbs
index 4647a392..190111a9 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/CallOperationAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/InputSelectorCallOperationAction.fragment.hbs
@@ -1,59 +1,20 @@
+// InputSelectorCallOperationAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if }}) => {
{{# with action.actionDefinition.operation as |operation| }}
try {
- {{# if page.container.form }}
- {{# if (hasPageRequiredBy page) }}
- {{> actor/src/fragments/page/local-validate.fragment.hbs }}
- {{/ if }}
- {{/ if }}
-
setIsLoading(true);
{{# if operation.output }}const { data: result } = {{/ if }}await {{ getServiceImplForPage page }}.{{ operation.name }}{{ operationCallSuffix action }}(
- {{# if page.container.form }}
- {{# unless operation.isStatic }}produceDataAdjustedOwner(){{/ unless }}
- {{# if operation.input }}{{# unless operation.isStatic }}, {{/ unless }}data{{/ if }}
- {{ else }}
- {{# if page.container.isSelector }}
- {{# unless operation.isStatic }}ownerData, {{/ unless }}selectionDiff[0]
- {{ else }}
- {{# if page.container.table }}
- {{# unless operation.isStatic }}
- target!
- {{/ unless }}
- {{ else }}
- {{# unless operation.isStatic }}
- {{# if action.actionDefinition.targetType }}
- target!
- {{ else }}
- data
- {{/ if }}
- {{/ unless }}
- {{# if operation.input }}
- {{# unless operation.isStatic }}, {{/ unless }}target!
- {{/ if }}
- {{/ if }}
- {{/ if }}
- {{/ if }}
+ {{# unless operation.isStatic }}ownerData, {{/ unless }}selectionDiff[0]
);
if (customActions?.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}) {
await customActions.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}(
{{# if action.actionDefinition.targetType }}target!,{{/ if }}
{{# if operation.output }}result,{{/ if }}
- {{# if page.container.form }}onSubmit,{{/ if }}
{{# if page.openInDialog }}onClose{{/ if }}
);
} else {
showSuccessSnack(t('judo.action.operation.success', { defaultValue: 'Operation executed successfully' }) as string);
-
- {{# if page.openInDialog }}
- {{# or page.container.form page.container.isSelector }}
- onSubmit({{# if operation.output }}result{{/ if }});
- {{/ or }}
- {{ else }}
- {{# if (allowRefreshAfterOperationCall action) }}
- await refresh();
- {{/ if }}
- {{/ if }}
+ onSubmit({{# if operation.output }}result{{/ if }});
{{# if operation.postCallAccessNavigation }}
try {
@@ -84,11 +45,7 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if a
{{/ if }}
}
} catch (error) {
- {{# unless page.container.table }}
- handleError<{{ classDataName (getReferenceClassType page) '' }}>(error, { setValidation }, owner.current, dataPath);
- {{ else }}
- handleError(error);
- {{/ unless }}
+ handleError(error);
} finally {
setIsLoading(false);
}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenAddSelectorAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenAddSelectorAction.fragment.hbs
index 14415598..17e090f2 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenAddSelectorAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenAddSelectorAction.fragment.hbs
@@ -1,3 +1,4 @@
+// OpenAddSelectorAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
const { result, data: returnedData } = await open{{ pageName action.targetPageDefinition }}({
{{# unless page.container.table }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenCreateFormAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenCreateFormAction.fragment.hbs
index 8acb1e1c..f06069e7 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenCreateFormAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenCreateFormAction.fragment.hbs
@@ -1,3 +1,4 @@
+// OpenCreateFormAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}templateDataOverride?: Partial<{{ classDataName action.actionDefinition.targetType '' }}>, {{/ if}}) => {
{{# if (isActionParentEagerTable action) }}
const itemIndex = (data.{{ action.targetDataElement.name }} || []).length; // length gives next without -1-ing it
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputFormAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputFormAction.fragment.hbs
index 02327b63..02419215 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputFormAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenOperationInputFormAction.fragment.hbs
@@ -1,9 +1,14 @@
+// OpenOperationInputFormAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}, {{/ if}}isDraft?: boolean, ownerValidation?: (target: any) => Promise) => {
const { result, data: returnedData } = await open{{ actionTargetPageName action }}({
- {{# if action.actionDefinition.targetType }}
- ownerData: target,
+ {{# if (isActionInTableInViewNonBulk action) }}
+ ownerData: data,
{{ else }}
- ownerData: produceDataAdjustedOwner(),
+ {{# if action.actionDefinition.targetType }}
+ ownerData: target,
+ {{ else }}
+ ownerData: produceDataAdjustedOwner(),
+ {{/ if }}
{{/ if }}
});
if (result === 'submit'{{# if page.container.view }} && !editMode{{/ if }}) {
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 cd111983..457634ef 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,9 +1,14 @@
+// OpenOperationInputSelectorAction: {{ getXMIID action }}
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 }}({
- {{# if action.actionDefinition.targetType }}
- ownerData: target!,
+ {{# if (isActionInTableInViewNonBulk action) }}
+ ownerData: data,
{{ else }}
- ownerData: produceDataAdjustedOwner(),
+ {{# if action.actionDefinition.targetType }}
+ ownerData: target!,
+ {{ else }}
+ ownerData: produceDataAdjustedOwner(),
+ {{/ if }}
{{/ if }}
});
if (result === 'submit') {
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenPageAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenPageAction.fragment.hbs
index 9056ceb5..407d076b 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenPageAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenPageAction.fragment.hbs
@@ -1,3 +1,4 @@
+// OpenPageAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (target: {{ classDataName action.actionDefinition.targetType 'Stored' }}, isDraftParam?: boolean) => {
{{# if (isActionParentEagerTable action) }}
const itemIndex = {{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}(data.{{ table.relationName }} || []).findIndex(r => r.__identifier === target.__identifier)!{{/ with }};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenSetSelectorAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenSetSelectorAction.fragment.hbs
index 49ef7e2b..c6e85a4a 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenSetSelectorAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/OpenSetSelectorAction.fragment.hbs
@@ -1,3 +1,4 @@
+// OpenSelectorAction: {{ getXMIID action }}
{{# with (getLinkParentForActionDefinition action.actionDefinition) as |link| }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (): Promise<{{ classDataName (getReferenceClassType link) 'Stored' }} | undefined> => {
const { result, data: returnedData } = await open{{ pageName action.targetPageDefinition }}({
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/ParameterlessCallOperationAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/ParameterlessCallOperationAction.fragment.hbs
new file mode 100644
index 00000000..ae40fe4c
--- /dev/null
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/ParameterlessCallOperationAction.fragment.hbs
@@ -0,0 +1,70 @@
+// ParameterlessCallOperationAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{/ if }}) => {
+ {{# with action.actionDefinition.operation as |operation| }}
+ try {
+ setIsLoading(true);
+ {{# if operation.output }}const { data: result } = {{/ if }}await {{ getServiceImplForPage page }}.{{ operation.name }}{{# if action.actionDefinition.isContainedRelationAction }}{{ operationCallSuffix action }}{{/ if }}(
+ {{# if page.container.table }}
+ {{# unless operation.isStatic }}
+ target!
+ {{/ unless }}
+ {{ else }}
+ {{# unless operation.isStatic }}
+ {{# if (isActionInTableInViewNonBulk action) }}
+ data
+ {{ else }}
+ {{# if action.actionDefinition.targetType }}
+ target!
+ {{ else }}
+ data
+ {{/ if }}
+ {{/ if }}
+ {{/ unless }}
+ {{/ if }}
+ );
+ if (customActions?.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}) {
+ await customActions.post{{ firstToUpper (simpleActionDefinitionName action.actionDefinition) }}(
+ {{# if action.actionDefinition.targetType }}target!,{{/ if }}
+ {{# if operation.output }}result,{{/ if }}
+ );
+ } else {
+ showSuccessSnack(t('judo.action.operation.success', { defaultValue: 'Operation executed successfully' }) as string);
+ {{# if (allowRefreshAfterOperationCall action) }}
+ await refresh();
+ {{/ if }}
+
+ {{# if operation.postCallAccessNavigation }}
+ try {
+ const { data: pcan } = await {{ firstToLower (serviceRelationName operation.postCallAccessNavigation.accessRelation) }}Impl.list(undefined, {
+ _identifier: result.__identifier,
+ });
+ {{# if action.targetPageDefinition.openInDialog }}
+ await open{{ pageName operation.postCallAccessNavigation.pageDefinition }}({
+ ownerData: pcan[0]
+ });
+ {{ else }}
+ navigate(routeTo{{ pageName operation.postCallAccessNavigation.pageDefinition }}(pcan[0].__signedIdentifier));
+ {{/ if }}
+ } catch(error) {
+ console.error('Could not proceed with post call access navigation', error);
+ }
+ {{ else }}
+ {{# if operation.output }}
+ {{# if action.targetPageDefinition.openInDialog }}
+ await open{{ pageName action.targetPageDefinition }}({
+ ownerData: produceDataAdjustedOwner(),
+ data: result,
+ });
+ {{ else }}
+ navigate(routeTo{{ pageName action.targetPageDefinition }}(result.__signedIdentifier));
+ {{/ if }}
+ {{/ if }}
+ {{/ if }}
+ }
+ } catch (error) {
+ handleError(error);
+ } finally {
+ setIsLoading(false);
+ }
+ {{/ with }}
+};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/PreFetchAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/PreFetchAction.fragment.hbs
index 4b33255f..e24579c7 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/PreFetchAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/PreFetchAction.fragment.hbs
@@ -1,3 +1,4 @@
+// PreFetchAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (): Promise> => {
return {{ getServiceImplForPage page }}.get{{ firstToUpper action.targetDataElement.name }}({{# if (pageHasSignedId page) }}{{# if page.openInDialog }}data{{ else }}{ __signedIdentifier: signedIdentifier } as any{{/ if }}{{ else }}data{{/ if }}, {
_mask: '{}',
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/RefreshAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/RefreshAction.fragment.hbs
index 9ec33fbc..0cd437c4 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/RefreshAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/RefreshAction.fragment.hbs
@@ -1,3 +1,4 @@
+// RefreshAction: {{ getXMIID action }}
{{# if action.targetDataElement }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (queryCustomizer: {{ classDataName action.targetDataElement.target 'QueryCustomizer' }}): Promise> => {
const result = await {{ getServiceImplForPage page }}.{{# if action.targetDataElement.isCollection }}list{{ else }}get{{/ if }}{{ firstToUpper action.targetDataElement.name }}({{{ refreshActionDataParameter action }}}, queryCustomizer{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}{{# if table.showTotalCount }}, { [X_JUDO_COUNT_RECORDS]: 'true' }{{/ if }}{{/ with }});
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/RemoveAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/RemoveAction.fragment.hbs
index 0e752f01..ba3b713a 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/RemoveAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/RemoveAction.fragment.hbs
@@ -1,34 +1,19 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async (target?: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{# if action.actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}) => {
+// RemoveAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async (target: {{ classDataName action.actionDefinition.targetType 'Stored' }}) => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
- if (target) {
- {{# if table.isEager }}
- const newList = (data?.{{ table.dataElement.name }} ?? []).filter((c: any) => c.__identifier !== target!.__identifier);
- storeDiff('{{ table.dataElement.name }}', newList);
- {{ else }}
- try {
- if (!silentMode) {
- setIsLoading(true);
- }
- await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.targetDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as any{{ else }}data{{/ if }}, [target!]);
- if (!silentMode) {
- await refresh();
- }
- } catch(error) {
- if (!silentMode) {
- {{# if action.actionDefinition.targetType }}
- handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target);
- {{ else }}
- handleError(error, undefined, data);
- {{/ if }}
- } else {
- throw error;
- }
- } finally {
- if (!silentMode) {
- setIsLoading(false);
- }
- }
- {{/ if }}
- }
+ {{# if table.isEager }}
+ const newList = (data?.{{ table.dataElement.name }} ?? []).filter((c: any) => c.__identifier !== target.__identifier);
+ storeDiff('{{ table.dataElement.name }}', newList);
+ {{ else }}
+ try {
+ setIsLoading(true);
+ await {{ getServiceImplForPage page }}.remove{{ firstToUpper action.targetDataElement.name }}({{# if page.container.table }}{ __signedIdentifier: signedIdentifier } as any{{ else }}data{{/ if }}, [target]);
+ await refresh();
+ } catch(error) {
+ handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target);
+ } finally {
+ setIsLoading(false);
+ }
+ {{/ if }}
{{/ with }}
};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/RowDeleteAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/RowDeleteAction.fragment.hbs
index 377e158f..2faa2c88 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/RowDeleteAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/RowDeleteAction.fragment.hbs
@@ -1,10 +1,11 @@
-const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.actionDefinition.targetType }}target: {{ classDataName action.actionDefinition.targetType 'Stored' }}{{# if action.actionDefinition.isBulkCapable }}, silentMode?: boolean{{/ if }}{{/ if}}) => {
+// RowDeleteAction: {{ getXMIID action }}
+const {{ simpleActionDefinitionName action.actionDefinition }} = async (target: {{ classDataName action.actionDefinition.targetType 'Stored' }}) => {
try {
- const confirmed = {{# if action.actionDefinition.isBulkCapable }}!silentMode ? {{/ if }}await openConfirmDialog(
+ const confirmed = 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) {
{{# if (isActionParentEagerElement action) }}
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
@@ -15,10 +16,7 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if a
storeDiff('{{ link.dataElement.name }}', null);
{{/ with }}
{{ else }}
- 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 }}
+ await {{ getServiceImplForPage page }}.delete{{# if action.targetDataElement }}{{ firstToUpper action.targetDataElement.name }}{{/ if }}(target);
showSuccessSnack(t('judo.action.delete.success', { defaultValue: 'Delete successful' }));
{{# if page.container.table }}
setRefreshCounter((prev) => prev + 1);
@@ -26,7 +24,7 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if a
{{# if page.container.view }}
{{# unless action.actionDefinition.isContainedRelationAction }}
{{# if page.openInDialog }}
- onSubmit({{# if action.actionDefinition.targetType }}target{{ else }}data{{/ if }}, 'delete');
+ onSubmit(target, 'delete');
{{ else }}
navigateBack();
{{/ if }}
@@ -38,24 +36,9 @@ const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if a
{{/ if }}
{{/ unless }}
{{/ if }}
- {{# if action.actionDefinition.isBulkCapable }}
- }
- {{/ 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 }}
- } else {
- throw error;
- }
- {{/ if }}
+ handleError<{{ classDataName action.actionDefinition.targetType '' }}>(error, undefined, target);
}
};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/SelectorRangeAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/SelectorRangeAction.fragment.hbs
index af394ca4..c711a20c 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/SelectorRangeAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/SelectorRangeAction.fragment.hbs
@@ -1,3 +1,4 @@
+// SelectorRangeAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (queryCustomizer: {{ classDataName action.actionDefinition.targetType 'QueryCustomizer' }}): Promise> => {
{{# with (getTableParentForActionDefinition action.actionDefinition) as |table| }}
try {
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/SetAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/SetAction.fragment.hbs
index a606981c..8cccf308 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/SetAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/SetAction.fragment.hbs
@@ -1,3 +1,4 @@
+// SetAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async (selected: {{ classDataName action.actionDefinition.targetType 'Stored' }}[]) => {
onSubmit(selected);
};
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/UnsetAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/UnsetAction.fragment.hbs
index 31a73500..011c9388 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/UnsetAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/UnsetAction.fragment.hbs
@@ -1,3 +1,4 @@
+// UnsetAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async ({{# if action.targetDataElement }}target: {{ classDataName action.targetDataElement.target '' }} | {{ classDataName action.targetDataElement.target 'Stored' }}{{/ if }}) => {
{{# with (getLinkParentForActionDefinition action.actionDefinition) as |link| }}
{{# if link.isEager }}
diff --git a/judo-ui-react/src/main/resources/actor/src/pages/actions/UpdateAction.fragment.hbs b/judo-ui-react/src/main/resources/actor/src/pages/actions/UpdateAction.fragment.hbs
index 681bd204..6304603f 100644
--- a/judo-ui-react/src/main/resources/actor/src/pages/actions/UpdateAction.fragment.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/pages/actions/UpdateAction.fragment.hbs
@@ -1,3 +1,4 @@
+// UpdateAction: {{ getXMIID action }}
const {{ simpleActionDefinitionName action.actionDefinition }} = async () => {
{{# if (hasPageRequiredBy page) }}
{{> actor/src/fragments/page/local-validate.fragment.hbs }}
diff --git a/judo-ui-react/src/main/resources/actor/src/utilities/table.ts.hbs b/judo-ui-react/src/main/resources/actor/src/utilities/table.ts.hbs
index ecaf5b10..2fdbeb9e 100644
--- a/judo-ui-react/src/main/resources/actor/src/utilities/table.ts.hbs
+++ b/judo-ui-react/src/main/resources/actor/src/utilities/table.ts.hbs
@@ -53,8 +53,10 @@ export interface ToolBarActionProps {
selectionModel: GridRowSelectionModel,
ownerData?: any,
isFormUpdateable?: () => boolean,
- ) => boolean,
+ ) => boolean;
isBulk: boolean;
+ confirmation?: string;
+ confirmationCondition?: boolean;
}
export const TABLE_COLUMN_CUSTOMIZER_HOOK_INTERFACE_KEY = 'TABLE_COLUMN_CUSTOMIZER_HOOK_INTERFACE_KEY';
diff --git a/pom.xml b/pom.xml
index b908ac2e..a36d3d66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,9 +55,9 @@
18.14.2
8.9.2
- 1.1.0.20240627_173956_0ab8231d_develop
+ 1.1.0.20240705_152025_0a9b5431_feature_JNG_5504_modelled_table_actions
1.0.0.20240621_215702_cc6f5a66_develop
- 1.0.0.20240614_154655_e01ad5db_bugfix_JNG_5775_fix_filterable_attributes
+ 1.0.0.20240705_154122_a1f1410d_feature_JNG_5504_modelled_table_actions
3.0.0-M7
diff --git a/update-test-models.sh b/update-test-models.sh
index 4cf92021..45e14f4b 100755
--- a/update-test-models.sh
+++ b/update-test-models.sh
@@ -6,3 +6,4 @@ cp ../../runtime/judo-tatami-tests/models/ActionGroupTest/application/frontend-r
cp ../../runtime/judo-tatami-tests/models/ActionGroupTest/application/frontend-react/model/ActionGroupTest-ui.model ./judo-ui-react-itest/ActionGroupTestPro/model/ActionGroupTestPro-ui.model
cp ../../runtime/judo-tatami-tests/models/CRUDActionsTest/application/frontend-react/model/CRUDActionsTest-ui.model ./judo-ui-react-itest/CRUDActionsTest/model/CRUDActionsTest-ui.model
cp ../../runtime/judo-tatami-tests/models/OperationParametersTest/application/frontend-react/model/OperationParametersTest-ui.model ./judo-ui-react-itest/OperationParametersTest/model/OperationParametersTest-ui.model
+cp ../../runtime/judo-tatami-tests/models/RelationTest/application/frontend-react/model/RelationTest-ui.model ./judo-ui-react-itest/RelationTest/model/RelationTest-ui.model