@genesislcap/pbc-notify-ui 14.484.2 → 14.485.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/custom-elements.json +19 -1
- package/dist/dts/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.d.ts.map +1 -1
- package/dist/dts/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.d.ts.map +1 -1
- package/dist/dts/components/foundation-notification-dashboard/notification-dashboard.utils.d.ts +1 -0
- package/dist/dts/components/foundation-notification-dashboard/notification-dashboard.utils.d.ts.map +1 -1
- package/dist/dts/notify.types.d.ts +2 -0
- package/dist/dts/notify.types.d.ts.map +1 -1
- package/dist/esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.js +2 -1
- package/dist/esm/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.js +2 -1
- package/dist/esm/components/foundation-notification-dashboard/notification-dashboard.utils.js +54 -0
- package/dist/esm/notify.types.js +14 -0
- package/package.json +23 -23
- package/src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts +2 -1
- package/src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts +2 -1
- package/src/components/foundation-notification-dashboard/notification-dashboard.utils.ts +63 -0
- package/src/notify.types.ts +14 -0
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"type": {
|
|
90
90
|
"text": "array"
|
|
91
91
|
},
|
|
92
|
-
"default": "[\n {\n label: 'Equals',\n operator: 'EQUALS',\n },\n {\n label: 'Not Equals',\n operator: 'NOT_EQUALS',\n },\n {\n label: 'Greater Than',\n operator: 'GREATER_THAN',\n },\n {\n label: 'Less Than',\n operator: 'LESS_THAN',\n },\n {\n label: 'Null',\n operator: 'NULL',\n },\n {\n label: 'Not Null',\n operator: 'NOT_NULL',\n },\n {\n label: 'Blank',\n operator: 'BLANK',\n },\n {\n label: 'Not Blank',\n operator: 'NOT_BLANK',\n },\n]"
|
|
92
|
+
"default": "[\n {\n label: 'Equals',\n operator: 'EQUALS',\n },\n {\n label: 'Not Equals',\n operator: 'NOT_EQUALS',\n },\n {\n label: 'Greater Than',\n operator: 'GREATER_THAN',\n },\n {\n label: 'Less Than',\n operator: 'LESS_THAN',\n },\n {\n label: 'Starts With',\n operator: 'STARTS_WITH',\n },\n {\n label: 'Ends With',\n operator: 'ENDS_WITH',\n },\n {\n label: 'Null',\n operator: 'NULL',\n },\n {\n label: 'Not Null',\n operator: 'NOT_NULL',\n },\n {\n label: 'Blank',\n operator: 'BLANK',\n },\n {\n label: 'Not Blank',\n operator: 'NOT_BLANK',\n },\n]"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
"kind": "variable",
|
|
@@ -1831,6 +1831,24 @@
|
|
|
1831
1831
|
}
|
|
1832
1832
|
]
|
|
1833
1833
|
},
|
|
1834
|
+
{
|
|
1835
|
+
"kind": "method",
|
|
1836
|
+
"name": "hasUnsupportedOperator",
|
|
1837
|
+
"static": true,
|
|
1838
|
+
"return": {
|
|
1839
|
+
"type": {
|
|
1840
|
+
"text": "boolean"
|
|
1841
|
+
}
|
|
1842
|
+
},
|
|
1843
|
+
"parameters": [
|
|
1844
|
+
{
|
|
1845
|
+
"name": "conditions",
|
|
1846
|
+
"type": {
|
|
1847
|
+
"text": "ConditionNode[]"
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
]
|
|
1851
|
+
},
|
|
1834
1852
|
{
|
|
1835
1853
|
"kind": "method",
|
|
1836
1854
|
"name": "flattenConditions",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAiB,cAAc,EAAc,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAEL,aAAa,EAGb,UAAU,EACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAU9E,OAAO,EAAQ,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;;;;GAKG;AACH,qBAKa,UAAW,SAAQ,cAAc;IAC/B,WAAW,EAAE,WAAW,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE5C,MAAM,EAAE,KAAK,CAAC;IACF,cAAc,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;IAEjF,OAAO,CAAC,MAAM,CAAgB;IAClB,IAAI,EAAE,MAAM,CAAM;IAClB,WAAW,EAAE,MAAM,CAAM;IACzB,QAAQ,EAAE,MAAM,CAAM;IACtB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,UAAU,EAAE,UAAU,EAAE,CAAqB;IAC7C,MAAM,EAAE,MAAM,CAAM;IACpB,OAAO,EAAE,MAAM,CAAM;IACrB,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAM;IACtC,cAAc,EAAE,OAAO,CAAC;IAIxB,oBAAoB,EAAE,MAAM,CAAM;IAElC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAM;IAErB,UAAU,CAAC,MAAM,EAAE,gBAAgB;IAmBhD,KAAK;YAsBS,UAAU;YAUV,QAAQ;IAuBtB,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,oBAAoB;IAc5B,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,MAAM;IAaN,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"rule-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAiB,cAAc,EAAc,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAEL,aAAa,EAGb,UAAU,EACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAU9E,OAAO,EAAQ,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;;;;GAKG;AACH,qBAKa,UAAW,SAAQ,cAAc;IAC/B,WAAW,EAAE,WAAW,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE5C,MAAM,EAAE,KAAK,CAAC;IACF,cAAc,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;IAEjF,OAAO,CAAC,MAAM,CAAgB;IAClB,IAAI,EAAE,MAAM,CAAM;IAClB,WAAW,EAAE,MAAM,CAAM;IACzB,QAAQ,EAAE,MAAM,CAAM;IACtB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,UAAU,EAAE,UAAU,EAAE,CAAqB;IAC7C,MAAM,EAAE,MAAM,CAAM;IACpB,OAAO,EAAE,MAAM,CAAM;IACrB,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAM;IACtC,cAAc,EAAE,OAAO,CAAC;IAIxB,oBAAoB,EAAE,MAAM,CAAM;IAElC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAM;IAErB,UAAU,CAAC,MAAM,EAAE,gBAAgB;IAmBhD,KAAK;YAsBS,UAAU;YAUV,QAAQ;IAuBtB,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,oBAAoB;IAc5B,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,MAAM;IAaN,OAAO,CAAC,gBAAgB;IAkCxB,gBAAgB,CAAC,QAAQ,KAAA;IASnB,eAAe;IAOrB,YAAY;IAKZ,QAAQ;IAKR,aAAa,CAAC,eAAe,EAAE,aAAa;IAI5C,eAAe,CAAC,gBAAgB,EAAE,aAAa;IAUxC,sBAAsB;CAK9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAiB,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAEL,aAAa,EAGb,UAAU,EACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAU3E,OAAO,EAAE,sBAAsB,EAAY,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE/F;;;;;GAKG;AACH,qBAKa,cAAe,SAAQ,cAAc;IAC/B,eAAe,EAAE,eAAe,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE5C,MAAM,EAAE,KAAK,CAAC;IACF,kBAAkB,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CACrF;IAEP,OAAO,CAAC,UAAU,CAAgB;IACtB,IAAI,EAAE,MAAM,CAAQ;IACpB,WAAW,EAAE,MAAM,CAAQ;IAC3B,MAAM,MAAQ;IACd,OAAO,MAAQ;IACf,QAAQ,EAAE,MAAM,CAAM;IACtB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,UAAU,EAAE,UAAU,EAAE,CAAqB;IAE7C,UAAU,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAM;IAC/C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAM;IAItC,oBAAoB,EAAE,MAAM,CAAM;IAElC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAEvC,OAAO,CAAC,cAAc,CAAkE;IAE3E,UAAU,CAAC,MAAM,EAAE,GAAG;IAoBnC,KAAK;YAuBS,cAAc;YAUd,YAAY;IAwB1B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,oBAAoB;IAc5B,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,MAAM;IAwBN,OAAO,CAAC,oBAAoB;
|
|
1
|
+
{"version":3,"file":"template-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAiB,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAEL,aAAa,EAGb,UAAU,EACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAU3E,OAAO,EAAE,sBAAsB,EAAY,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE/F;;;;;GAKG;AACH,qBAKa,cAAe,SAAQ,cAAc;IAC/B,eAAe,EAAE,eAAe,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE5C,MAAM,EAAE,KAAK,CAAC;IACF,kBAAkB,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CACrF;IAEP,OAAO,CAAC,UAAU,CAAgB;IACtB,IAAI,EAAE,MAAM,CAAQ;IACpB,WAAW,EAAE,MAAM,CAAQ;IAC3B,MAAM,MAAQ;IACd,OAAO,MAAQ;IACf,QAAQ,EAAE,MAAM,CAAM;IACtB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,UAAU,EAAE,UAAU,EAAE,CAAqB;IAE7C,UAAU,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAM;IAC/C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAM;IAItC,oBAAoB,EAAE,MAAM,CAAM;IAElC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAEvC,OAAO,CAAC,cAAc,CAAkE;IAE3E,UAAU,CAAC,MAAM,EAAE,GAAG;IAoBnC,KAAK;YAuBS,cAAc;YAUd,YAAY;IAwB1B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,oBAAoB;IAc5B,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,MAAM;IAwBN,OAAO,CAAC,oBAAoB;IAsC5B,gBAAgB,CAAC,QAAQ,KAAA;IASnB,eAAe;IAOrB,YAAY;IAKZ,QAAQ;IAKR,aAAa,CAAC,eAAe,EAAE,aAAa;IAI5C,eAAe,CAAC,gBAAgB,EAAE,aAAa;IAW/C,YAAY;IAIZ,aAAa,CAAC,eAAe,EAAE,sBAAsB;IAIrD,eAAe,CAAC,gBAAgB,EAAE,sBAAsB;IAYxD,IACW,sBAAsB,IAAI,OAAO,CAE3C;CACF"}
|
package/dist/dts/components/foundation-notification-dashboard/notification-dashboard.utils.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ export declare class DynamicRuleUtils {
|
|
|
32
32
|
static hasMultiValueCondition(conditions: ConditionNode[]): boolean;
|
|
33
33
|
static hasOrJoin(conditions: ConditionNode[]): boolean;
|
|
34
34
|
static hasGroup(conditions: ConditionNode[]): boolean;
|
|
35
|
+
static hasUnsupportedOperator(conditions: ConditionNode[]): boolean;
|
|
35
36
|
static flattenConditions(conditions: ConditionNode[]): ConditionBuilderEntity[];
|
|
36
37
|
static resolveLeftValues(conditions: ConditionNode[], fields: any[]): ConditionNode[];
|
|
37
38
|
static createEmptyGroup: () => ConditionGroupEntity;
|
package/dist/dts/components/foundation-notification-dashboard/notification-dashboard.utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-dashboard.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EASd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAEtG,qBAAa,aAAa;IAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAO;IAChC,MAAM,CAAC,UAAU,QAAO,MAAM,CAAyB;CACxD;AAED,eAAO,MAAM,OAAO,GAAI,UAAK,YAC8C,CAAC;AAkH5E,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,oBAAoB,QAAO,sBAAsB,CAOrD;IAEH,MAAM,CAAC,gBAAgB,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM;;;;;;;;;MASpD;IAQH,MAAM,CAAC,oBAAoB,GACzB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,SAAQ;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAAO;;;;;;MAOpC;IAEH,MAAM,CAAC,kBAAkB,GAAI,aAAa,GAAG,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,CACS;IAIhF,MAAM,CAAC,iBAAiB,GAAI,aAAa,GAAG,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,CAGpE;IAKF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,UAAU,CAAC,KAAA,GAAG,GAAG;IAkBtE,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAUnE,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAWtD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"notification-dashboard.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EASd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAEtG,qBAAa,aAAa;IAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAO;IAChC,MAAM,CAAC,UAAU,QAAO,MAAM,CAAyB;CACxD;AAED,eAAO,MAAM,OAAO,GAAI,UAAK,YAC8C,CAAC;AAkH5E,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,oBAAoB,QAAO,sBAAsB,CAOrD;IAEH,MAAM,CAAC,gBAAgB,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM;;;;;;;;;MASpD;IAQH,MAAM,CAAC,oBAAoB,GACzB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,SAAQ;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAAO;;;;;;MAOpC;IAEH,MAAM,CAAC,kBAAkB,GAAI,aAAa,GAAG,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,CACS;IAIhF,MAAM,CAAC,iBAAiB,GAAI,aAAa,GAAG,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,CAGpE;IAKF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,UAAU,CAAC,KAAA,GAAG,GAAG;IAkBtE,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAUnE,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAWtD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAUrD,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO;IAYnE,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,sBAAsB,EAAE;IAa/E,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE;IAcrF,MAAM,CAAC,gBAAgB,QAAO,oBAAoB,CAI/C;IAWH,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM;IAiB9D,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,IAAI;CAazE;AAqUD,qBAAa,aAAa;IACxB,MAAM,CAAC,oBAAoB,QAAO,sBAAsB,CAOrD;IAEH,MAAM,CAAC,aAAa,CAAC,UAAU,KAAA;;;;;;;;IAe/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAe9B,MAAM,CAAC,aAAa,CAAC,UAAU,KAAA,EAAE,UAAU,CAAC,KAAA;IAgB5C,MAAM,CAAC,sBAAsB,CAAC,UAAU,KAAA;CAmBzC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,eAAe;IAe9B,MAAM,CAAC,aAAa,CAAC,UAAU,KAAA;CAYhC;AAID,wBAAgB,qBAAqB,CAAC,KAAK,KAAA,QAa1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.types.d.ts","sourceRoot":"","sources":["../../src/notify.types.ts"],"names":[],"mappings":"AACA,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,gBAAgB;;;
|
|
1
|
+
{"version":3,"file":"notify.types.d.ts","sourceRoot":"","sources":["../../src/notify.types.ts"],"names":[],"mappings":"AACA,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IAKvB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,gBAAgB;;;GAyC5B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;GAyBhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,mBAK7C,CAAC;AAEF,oBAAY,aAAa;IACvB,KAAK,UAAU;IACf,UAAU,eAAe;CAC1B;AAED,oBAAY,SAAS;IAEnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;CACpB;AAED,oBAAY,QAAQ;IAClB,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,eAAe,oBAAoB;IACnC,KAAK,UAAU;CAChB;AAED,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,iBAAiB,cAAsB,CAAC;AAErD,oBAAY,UAAU;IACpB,KAAK,KAAK;IACV,IAAI,SAAS;CACd;AAID,oBAAY,YAAY;IACtB,GAAG,QAAQ;IACX,EAAE,OAAO;CACV;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IAGpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,oBAAoB,CAAC"}
|
|
@@ -149,7 +149,8 @@ let RuleDialog = class RuleDialog extends GenesisElement {
|
|
|
149
149
|
// structured CONDITIONS. The server branches on which one is non-null.
|
|
150
150
|
const useRaw = DynamicRuleUtils.hasMultiValueCondition(this.conditions) ||
|
|
151
151
|
DynamicRuleUtils.hasOrJoin(this.conditions) ||
|
|
152
|
-
DynamicRuleUtils.hasGroup(this.conditions)
|
|
152
|
+
DynamicRuleUtils.hasGroup(this.conditions) ||
|
|
153
|
+
DynamicRuleUtils.hasUnsupportedOperator(this.conditions);
|
|
153
154
|
return Object.assign(Object.assign({}, (this.ruleDialogMode === RuleDialogMode.EDIT && { DYNAMIC_RULE_ID: this.ruleId })), { RULE_NAME: this.name, RULE_DESCRIPTION: this.description, RULE_TABLE: this.resource, TABLE_OPERATIONS: this.updateType, RULE_EXPRESSION: useRaw
|
|
154
155
|
? null
|
|
155
156
|
: {
|
|
@@ -166,7 +166,8 @@ let TemplateDialog = class TemplateDialog extends GenesisElement {
|
|
|
166
166
|
// excluded automatically.
|
|
167
167
|
const useRaw = DynamicRuleUtils.hasMultiValueCondition(this.conditions) ||
|
|
168
168
|
DynamicRuleUtils.hasOrJoin(this.conditions) ||
|
|
169
|
-
DynamicRuleUtils.hasGroup(this.conditions)
|
|
169
|
+
DynamicRuleUtils.hasGroup(this.conditions) ||
|
|
170
|
+
DynamicRuleUtils.hasUnsupportedOperator(this.conditions);
|
|
170
171
|
return Object.assign(Object.assign({}, (this.templateDialogMode === TemplateDialogMode.EDIT && {
|
|
171
172
|
DYNAMIC_RULE_ID: this.templateId,
|
|
172
173
|
})), { RULE_NAME: this.name, RULE_DESCRIPTION: this.description, RULE_TABLE: this.resource, TABLE_OPERATIONS: this.updateType, RULE_EXPRESSION: useRaw
|
package/dist/esm/components/foundation-notification-dashboard/notification-dashboard.utils.js
CHANGED
|
@@ -156,6 +156,18 @@ export class DynamicRuleUtils {
|
|
|
156
156
|
static hasGroup(conditions) {
|
|
157
157
|
return conditions.some(isGroupNode);
|
|
158
158
|
}
|
|
159
|
+
// STARTS_WITH/ENDS_WITH compile to a Groovy method-call clause
|
|
160
|
+
// (`FIELD.startsWith("value")`), which the structured CONDITIONS format
|
|
161
|
+
// cannot express - genesis-criteria's server-side Operation enum only has
|
|
162
|
+
// ==, !=, >, < (see EvaluatorExpressionParser). Any condition using one of
|
|
163
|
+
// these always forces RAW_RULE_EXPRESSION, same as a group or multi-value
|
|
164
|
+
// condition.
|
|
165
|
+
static hasUnsupportedOperator(conditions) {
|
|
166
|
+
return conditions.some((node) => isGroupNode(node)
|
|
167
|
+
? DynamicRuleUtils.hasUnsupportedOperator(node.CHILDREN)
|
|
168
|
+
: node.LOGICAL_OPERATOR === LogicalOperator.STARTS_WITH ||
|
|
169
|
+
node.LOGICAL_OPERATOR === LogicalOperator.ENDS_WITH);
|
|
170
|
+
}
|
|
159
171
|
// Flattens a condition/group tree into just its leaf conditions, at any
|
|
160
172
|
// depth - for callers that only care about "is this parameter used
|
|
161
173
|
// anywhere" and don't need to know the group structure.
|
|
@@ -329,6 +341,17 @@ const resolveTemplateTextExpression = (expr) => {
|
|
|
329
341
|
return (_b = expr.VALUE) !== null && _b !== void 0 ? _b : '';
|
|
330
342
|
}
|
|
331
343
|
};
|
|
344
|
+
// Escapes a value for safe interpolation into a double-quoted Groovy string
|
|
345
|
+
// literal, guarding both injection routes double-quoted Groovy strings allow:
|
|
346
|
+
// 1. Breaking out of the literal, e.g. RIGHT_VALUE = `x") || (1==1` - closed
|
|
347
|
+
// off by escaping `"`.
|
|
348
|
+
// 2. GString interpolation, e.g. RIGHT_VALUE = `${1==1}` or `$foo` - Groovy
|
|
349
|
+
// evaluates `${...}`/`$identifier` as live code INSIDE a double-quoted
|
|
350
|
+
// string even without breaking out of it, so `"` alone is not enough;
|
|
351
|
+
// escaping `$` as `\$` forces it to stay a literal dollar sign.
|
|
352
|
+
// Order matters: backslash must be escaped first, before the other two
|
|
353
|
+
// replacements introduce new backslashes of their own.
|
|
354
|
+
const escapeGroovyStringLiteral = (value) => value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\$/g, '\\$');
|
|
332
355
|
const buildConditionClause = (condition) => {
|
|
333
356
|
var _b;
|
|
334
357
|
const name = condition.LEFT_VALUE.FIELD_NAME;
|
|
@@ -340,6 +363,21 @@ const buildConditionClause = (condition) => {
|
|
|
340
363
|
if (logicalOperator === LogicalOperator.BLANK || logicalOperator === LogicalOperator.NOT_BLANK) {
|
|
341
364
|
return `(${name} ${logicalOperator === LogicalOperator.BLANK ? '==' : '!='} "")`;
|
|
342
365
|
}
|
|
366
|
+
if (logicalOperator === LogicalOperator.STARTS_WITH ||
|
|
367
|
+
logicalOperator === LogicalOperator.ENDS_WITH) {
|
|
368
|
+
// No structured-CONDITIONS representation - compiled as a Groovy method
|
|
369
|
+
// call, evaluated at runtime via the platform's Groovy-backed
|
|
370
|
+
// EvaluatorPool (confirmed: RAW_RULE_EXPRESSION is stored verbatim and
|
|
371
|
+
// never re-validated by the structured-expression parser at load/eval
|
|
372
|
+
// time, only at create/edit-time in the dashboard itself). Unlike the
|
|
373
|
+
// ==/>/< path below, the argument is always a String literal regardless
|
|
374
|
+
// of the field's own type - String.startsWith/endsWith takes a
|
|
375
|
+
// CharSequence, so UNQUOTED_FIELD_TYPES (which exists for bare numeric/
|
|
376
|
+
// boolean comparisons) doesn't apply here.
|
|
377
|
+
const method = logicalOperator === LogicalOperator.STARTS_WITH ? 'startsWith' : 'endsWith';
|
|
378
|
+
const value = escapeGroovyStringLiteral(String(condition.RIGHT_VALUE));
|
|
379
|
+
return `(${name}.${method}("${value}"))`;
|
|
380
|
+
}
|
|
343
381
|
const op = (_b = OPERATOR_SYMBOLS[logicalOperator]) !== null && _b !== void 0 ? _b : '==';
|
|
344
382
|
// Rules support a "FIELD" RIGHT_CRITERIA (compare to another field) via a
|
|
345
383
|
// separate RightCriteria enum (rule-condition-builder.types.ts) that this
|
|
@@ -384,6 +422,22 @@ const parseAtom = (atom) => {
|
|
|
384
422
|
value: '',
|
|
385
423
|
};
|
|
386
424
|
}
|
|
425
|
+
// FIELD.startsWith("value") / FIELD.endsWith("value") - the method-call
|
|
426
|
+
// clause buildConditionClause emits for STARTS_WITH/ENDS_WITH. Reverses
|
|
427
|
+
// escapeGroovyStringLiteral so the value round-trips through edit unchanged.
|
|
428
|
+
const methodMatch = inner.match(/^([A-Za-z0-9_]+)\.(startsWith|endsWith)\("(.*)"\)$/);
|
|
429
|
+
if (methodMatch) {
|
|
430
|
+
return {
|
|
431
|
+
name: methodMatch[1].trim(),
|
|
432
|
+
operator: methodMatch[2] === 'startsWith' ? LogicalOperator.STARTS_WITH : LogicalOperator.ENDS_WITH,
|
|
433
|
+
// Single combined-pattern pass (not sequential independent replaces) so
|
|
434
|
+
// an escaped backslash immediately followed by an escaped quote/dollar
|
|
435
|
+
// can't be misinterpreted - each `\` in the raw text is always followed
|
|
436
|
+
// by exactly one of \, ", or $ (escapeGroovyStringLiteral's output),
|
|
437
|
+
// and this consumes both characters together in one match.
|
|
438
|
+
value: methodMatch[3].replace(/\\([\\"$])/g, '$1'),
|
|
439
|
+
};
|
|
440
|
+
}
|
|
387
441
|
const symbol = ['==', '!=', '>', '<'].find((s) => inner.includes(` ${s} `));
|
|
388
442
|
if (!symbol)
|
|
389
443
|
return null;
|
package/dist/esm/notify.types.js
CHANGED
|
@@ -5,6 +5,12 @@ export var LogicalOperator;
|
|
|
5
5
|
LogicalOperator["NOT_EQUALS"] = "NOT_EQUALS";
|
|
6
6
|
LogicalOperator["GREATER_THAN"] = "GREATER_THAN";
|
|
7
7
|
LogicalOperator["LESS_THAN"] = "LESS_THAN";
|
|
8
|
+
// No structured-CONDITIONS representation server-side (genesis-criteria's
|
|
9
|
+
// Operation enum has no string-method operator) - a condition using either
|
|
10
|
+
// of these always compiles to RAW_RULE_EXPRESSION. See
|
|
11
|
+
// DynamicRuleUtils.hasUnsupportedOperator.
|
|
12
|
+
LogicalOperator["STARTS_WITH"] = "STARTS_WITH";
|
|
13
|
+
LogicalOperator["ENDS_WITH"] = "ENDS_WITH";
|
|
8
14
|
LogicalOperator["NULL"] = "NULL";
|
|
9
15
|
LogicalOperator["NOT_NULL"] = "NOT_NULL";
|
|
10
16
|
LogicalOperator["BLANK"] = "BLANK";
|
|
@@ -27,6 +33,14 @@ export const LogicalOperators = [
|
|
|
27
33
|
label: 'Less Than',
|
|
28
34
|
operator: 'LESS_THAN',
|
|
29
35
|
},
|
|
36
|
+
{
|
|
37
|
+
label: 'Starts With',
|
|
38
|
+
operator: 'STARTS_WITH',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Ends With',
|
|
42
|
+
operator: 'ENDS_WITH',
|
|
43
|
+
},
|
|
30
44
|
{
|
|
31
45
|
label: 'Null',
|
|
32
46
|
operator: 'NULL',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/pbc-notify-ui",
|
|
3
3
|
"description": "Genesis PBC Notify UI",
|
|
4
|
-
"version": "14.
|
|
4
|
+
"version": "14.485.0",
|
|
5
5
|
"license": "SEE LICENSE IN license.txt",
|
|
6
6
|
"workspaces": [
|
|
7
7
|
"client"
|
|
@@ -83,30 +83,30 @@
|
|
|
83
83
|
"@commitlint/format": "^19.0.3",
|
|
84
84
|
"@genesiscommunitysuccess/cep-fast-plugin": "5.0.3",
|
|
85
85
|
"@genesiscommunitysuccess/custom-elements-lsp": "5.0.3",
|
|
86
|
-
"@genesislcap/design-system-configurator": "14.
|
|
87
|
-
"@genesislcap/eslint-config": "14.
|
|
88
|
-
"@genesislcap/eslint-stylelint-builder": "14.
|
|
89
|
-
"@genesislcap/foundation-testing": "14.
|
|
90
|
-
"@genesislcap/genx": "14.
|
|
91
|
-
"@genesislcap/prettier-config": "14.
|
|
92
|
-
"@genesislcap/stylelint-config": "14.
|
|
93
|
-
"@genesislcap/vite-builder": "14.
|
|
94
|
-
"@genesislcap/webpack-builder": "14.
|
|
86
|
+
"@genesislcap/design-system-configurator": "14.485.0",
|
|
87
|
+
"@genesislcap/eslint-config": "14.485.0",
|
|
88
|
+
"@genesislcap/eslint-stylelint-builder": "14.485.0",
|
|
89
|
+
"@genesislcap/foundation-testing": "14.485.0",
|
|
90
|
+
"@genesislcap/genx": "14.485.0",
|
|
91
|
+
"@genesislcap/prettier-config": "14.485.0",
|
|
92
|
+
"@genesislcap/stylelint-config": "14.485.0",
|
|
93
|
+
"@genesislcap/vite-builder": "14.485.0",
|
|
94
|
+
"@genesislcap/webpack-builder": "14.485.0",
|
|
95
95
|
"dayjs": "^1.11.7"
|
|
96
96
|
},
|
|
97
97
|
"dependencies": {
|
|
98
|
-
"@genesislcap/foundation-comms": "14.
|
|
99
|
-
"@genesislcap/foundation-criteria": "14.
|
|
100
|
-
"@genesislcap/foundation-entity-management": "14.
|
|
101
|
-
"@genesislcap/foundation-forms": "14.
|
|
102
|
-
"@genesislcap/foundation-layout": "14.
|
|
103
|
-
"@genesislcap/foundation-logger": "14.
|
|
104
|
-
"@genesislcap/foundation-notifications": "14.
|
|
105
|
-
"@genesislcap/foundation-ui": "14.
|
|
106
|
-
"@genesislcap/foundation-utils": "14.
|
|
107
|
-
"@genesislcap/rapid-design-system": "14.
|
|
108
|
-
"@genesislcap/rapid-grid-pro": "14.
|
|
109
|
-
"@genesislcap/web-core": "14.
|
|
98
|
+
"@genesislcap/foundation-comms": "14.485.0",
|
|
99
|
+
"@genesislcap/foundation-criteria": "14.485.0",
|
|
100
|
+
"@genesislcap/foundation-entity-management": "14.485.0",
|
|
101
|
+
"@genesislcap/foundation-forms": "14.485.0",
|
|
102
|
+
"@genesislcap/foundation-layout": "14.485.0",
|
|
103
|
+
"@genesislcap/foundation-logger": "14.485.0",
|
|
104
|
+
"@genesislcap/foundation-notifications": "14.485.0",
|
|
105
|
+
"@genesislcap/foundation-ui": "14.485.0",
|
|
106
|
+
"@genesislcap/foundation-utils": "14.485.0",
|
|
107
|
+
"@genesislcap/rapid-design-system": "14.485.0",
|
|
108
|
+
"@genesislcap/rapid-grid-pro": "14.485.0",
|
|
109
|
+
"@genesislcap/web-core": "14.485.0",
|
|
110
110
|
"lodash.debounce": "^4.0.8",
|
|
111
111
|
"rxjs": "^7.5.4"
|
|
112
112
|
},
|
|
@@ -114,5 +114,5 @@
|
|
|
114
114
|
"access": "public"
|
|
115
115
|
},
|
|
116
116
|
"customElements": "dist/custom-elements.json",
|
|
117
|
-
"gitHead": "
|
|
117
|
+
"gitHead": "6d8eacc0597e7a9a323fa3838c493e7ac8ddc589"
|
|
118
118
|
}
|
package/src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts
CHANGED
|
@@ -182,7 +182,8 @@ export class RuleDialog extends GenesisElement {
|
|
|
182
182
|
const useRaw =
|
|
183
183
|
DynamicRuleUtils.hasMultiValueCondition(this.conditions) ||
|
|
184
184
|
DynamicRuleUtils.hasOrJoin(this.conditions) ||
|
|
185
|
-
DynamicRuleUtils.hasGroup(this.conditions)
|
|
185
|
+
DynamicRuleUtils.hasGroup(this.conditions) ||
|
|
186
|
+
DynamicRuleUtils.hasUnsupportedOperator(this.conditions);
|
|
186
187
|
return {
|
|
187
188
|
...(this.ruleDialogMode === RuleDialogMode.EDIT && { DYNAMIC_RULE_ID: this.ruleId }),
|
|
188
189
|
RULE_NAME: this.name,
|
|
@@ -201,7 +201,8 @@ export class TemplateDialog extends GenesisElement {
|
|
|
201
201
|
const useRaw =
|
|
202
202
|
DynamicRuleUtils.hasMultiValueCondition(this.conditions) ||
|
|
203
203
|
DynamicRuleUtils.hasOrJoin(this.conditions) ||
|
|
204
|
-
DynamicRuleUtils.hasGroup(this.conditions)
|
|
204
|
+
DynamicRuleUtils.hasGroup(this.conditions) ||
|
|
205
|
+
DynamicRuleUtils.hasUnsupportedOperator(this.conditions);
|
|
205
206
|
return {
|
|
206
207
|
...(this.templateDialogMode === TemplateDialogMode.EDIT && {
|
|
207
208
|
DYNAMIC_RULE_ID: this.templateId,
|
|
@@ -232,6 +232,21 @@ export class DynamicRuleUtils {
|
|
|
232
232
|
return conditions.some(isGroupNode);
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
+
// STARTS_WITH/ENDS_WITH compile to a Groovy method-call clause
|
|
236
|
+
// (`FIELD.startsWith("value")`), which the structured CONDITIONS format
|
|
237
|
+
// cannot express - genesis-criteria's server-side Operation enum only has
|
|
238
|
+
// ==, !=, >, < (see EvaluatorExpressionParser). Any condition using one of
|
|
239
|
+
// these always forces RAW_RULE_EXPRESSION, same as a group or multi-value
|
|
240
|
+
// condition.
|
|
241
|
+
static hasUnsupportedOperator(conditions: ConditionNode[]): boolean {
|
|
242
|
+
return conditions.some((node) =>
|
|
243
|
+
isGroupNode(node)
|
|
244
|
+
? DynamicRuleUtils.hasUnsupportedOperator(node.CHILDREN)
|
|
245
|
+
: node.LOGICAL_OPERATOR === LogicalOperator.STARTS_WITH ||
|
|
246
|
+
node.LOGICAL_OPERATOR === LogicalOperator.ENDS_WITH,
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
235
250
|
// Flattens a condition/group tree into just its leaf conditions, at any
|
|
236
251
|
// depth - for callers that only care about "is this parameter used
|
|
237
252
|
// anywhere" and don't need to know the group structure.
|
|
@@ -383,6 +398,19 @@ const resolveTemplateTextExpression = (expr: any): string => {
|
|
|
383
398
|
}
|
|
384
399
|
};
|
|
385
400
|
|
|
401
|
+
// Escapes a value for safe interpolation into a double-quoted Groovy string
|
|
402
|
+
// literal, guarding both injection routes double-quoted Groovy strings allow:
|
|
403
|
+
// 1. Breaking out of the literal, e.g. RIGHT_VALUE = `x") || (1==1` - closed
|
|
404
|
+
// off by escaping `"`.
|
|
405
|
+
// 2. GString interpolation, e.g. RIGHT_VALUE = `${1==1}` or `$foo` - Groovy
|
|
406
|
+
// evaluates `${...}`/`$identifier` as live code INSIDE a double-quoted
|
|
407
|
+
// string even without breaking out of it, so `"` alone is not enough;
|
|
408
|
+
// escaping `$` as `\$` forces it to stay a literal dollar sign.
|
|
409
|
+
// Order matters: backslash must be escaped first, before the other two
|
|
410
|
+
// replacements introduce new backslashes of their own.
|
|
411
|
+
const escapeGroovyStringLiteral = (value: string): string =>
|
|
412
|
+
value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\$/g, '\\$');
|
|
413
|
+
|
|
386
414
|
const buildConditionClause = (condition: ConditionBuilderEntity): string => {
|
|
387
415
|
const name = condition.LEFT_VALUE.FIELD_NAME;
|
|
388
416
|
const type = condition.LEFT_VALUE.FIELD_TYPE;
|
|
@@ -394,6 +422,23 @@ const buildConditionClause = (condition: ConditionBuilderEntity): string => {
|
|
|
394
422
|
if (logicalOperator === LogicalOperator.BLANK || logicalOperator === LogicalOperator.NOT_BLANK) {
|
|
395
423
|
return `(${name} ${logicalOperator === LogicalOperator.BLANK ? '==' : '!='} "")`;
|
|
396
424
|
}
|
|
425
|
+
if (
|
|
426
|
+
logicalOperator === LogicalOperator.STARTS_WITH ||
|
|
427
|
+
logicalOperator === LogicalOperator.ENDS_WITH
|
|
428
|
+
) {
|
|
429
|
+
// No structured-CONDITIONS representation - compiled as a Groovy method
|
|
430
|
+
// call, evaluated at runtime via the platform's Groovy-backed
|
|
431
|
+
// EvaluatorPool (confirmed: RAW_RULE_EXPRESSION is stored verbatim and
|
|
432
|
+
// never re-validated by the structured-expression parser at load/eval
|
|
433
|
+
// time, only at create/edit-time in the dashboard itself). Unlike the
|
|
434
|
+
// ==/>/< path below, the argument is always a String literal regardless
|
|
435
|
+
// of the field's own type - String.startsWith/endsWith takes a
|
|
436
|
+
// CharSequence, so UNQUOTED_FIELD_TYPES (which exists for bare numeric/
|
|
437
|
+
// boolean comparisons) doesn't apply here.
|
|
438
|
+
const method = logicalOperator === LogicalOperator.STARTS_WITH ? 'startsWith' : 'endsWith';
|
|
439
|
+
const value = escapeGroovyStringLiteral(String(condition.RIGHT_VALUE));
|
|
440
|
+
return `(${name}.${method}("${value}"))`;
|
|
441
|
+
}
|
|
397
442
|
|
|
398
443
|
const op = OPERATOR_SYMBOLS[logicalOperator] ?? '==';
|
|
399
444
|
|
|
@@ -449,6 +494,24 @@ const parseAtom = (atom: string): { name: string; operator: string; value: strin
|
|
|
449
494
|
};
|
|
450
495
|
}
|
|
451
496
|
|
|
497
|
+
// FIELD.startsWith("value") / FIELD.endsWith("value") - the method-call
|
|
498
|
+
// clause buildConditionClause emits for STARTS_WITH/ENDS_WITH. Reverses
|
|
499
|
+
// escapeGroovyStringLiteral so the value round-trips through edit unchanged.
|
|
500
|
+
const methodMatch = inner.match(/^([A-Za-z0-9_]+)\.(startsWith|endsWith)\("(.*)"\)$/);
|
|
501
|
+
if (methodMatch) {
|
|
502
|
+
return {
|
|
503
|
+
name: methodMatch[1].trim(),
|
|
504
|
+
operator:
|
|
505
|
+
methodMatch[2] === 'startsWith' ? LogicalOperator.STARTS_WITH : LogicalOperator.ENDS_WITH,
|
|
506
|
+
// Single combined-pattern pass (not sequential independent replaces) so
|
|
507
|
+
// an escaped backslash immediately followed by an escaped quote/dollar
|
|
508
|
+
// can't be misinterpreted - each `\` in the raw text is always followed
|
|
509
|
+
// by exactly one of \, ", or $ (escapeGroovyStringLiteral's output),
|
|
510
|
+
// and this consumes both characters together in one match.
|
|
511
|
+
value: methodMatch[3].replace(/\\([\\"$])/g, '$1'),
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
|
|
452
515
|
const symbol = ['==', '!=', '>', '<'].find((s) => inner.includes(` ${s} `));
|
|
453
516
|
if (!symbol) return null;
|
|
454
517
|
// Split on the FIRST occurrence only - a quoted value may itself contain
|
package/src/notify.types.ts
CHANGED
|
@@ -4,6 +4,12 @@ export enum LogicalOperator {
|
|
|
4
4
|
NOT_EQUALS = 'NOT_EQUALS',
|
|
5
5
|
GREATER_THAN = 'GREATER_THAN',
|
|
6
6
|
LESS_THAN = 'LESS_THAN',
|
|
7
|
+
// No structured-CONDITIONS representation server-side (genesis-criteria's
|
|
8
|
+
// Operation enum has no string-method operator) - a condition using either
|
|
9
|
+
// of these always compiles to RAW_RULE_EXPRESSION. See
|
|
10
|
+
// DynamicRuleUtils.hasUnsupportedOperator.
|
|
11
|
+
STARTS_WITH = 'STARTS_WITH',
|
|
12
|
+
ENDS_WITH = 'ENDS_WITH',
|
|
7
13
|
NULL = 'NULL',
|
|
8
14
|
NOT_NULL = 'NOT_NULL',
|
|
9
15
|
BLANK = 'BLANK',
|
|
@@ -27,6 +33,14 @@ export const LogicalOperators = [
|
|
|
27
33
|
label: 'Less Than',
|
|
28
34
|
operator: 'LESS_THAN',
|
|
29
35
|
},
|
|
36
|
+
{
|
|
37
|
+
label: 'Starts With',
|
|
38
|
+
operator: 'STARTS_WITH',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Ends With',
|
|
42
|
+
operator: 'ENDS_WITH',
|
|
43
|
+
},
|
|
30
44
|
{
|
|
31
45
|
label: 'Null',
|
|
32
46
|
operator: 'NULL',
|