@genesislcap/pbc-notify-ui 15.2.1 → 15.3.1

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.
Files changed (24) hide show
  1. package/dist/custom-elements.json +185 -150
  2. package/dist/dts/components/components.d.ts.map +1 -1
  3. package/dist/dts/components/foundation-inbox/inbox-base/inbox-base.d.ts.map +1 -1
  4. package/dist/dts/components/foundation-notification-dashboard/components/routes/route-management.d.ts.map +1 -1
  5. package/dist/dts/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.d.ts +4 -0
  6. package/dist/dts/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.d.ts.map +1 -0
  7. package/dist/dts/react.d.ts +21 -11
  8. package/dist/dts/services/notify-route.service.d.ts +11 -1
  9. package/dist/dts/services/notify-route.service.d.ts.map +1 -1
  10. package/dist/esm/components/components.js +2 -0
  11. package/dist/esm/components/foundation-inbox/inbox-base/inbox-base.js +2 -1
  12. package/dist/esm/components/foundation-notification-dashboard/components/routes/route-management.js +4 -0
  13. package/dist/esm/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.js +51 -0
  14. package/dist/esm/services/notify-route.service.js +5 -2
  15. package/dist/pbc-notify-ui.d.ts +11 -1
  16. package/dist/react.cjs +12 -5
  17. package/dist/react.mjs +10 -4
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +23 -23
  20. package/src/components/components.ts +2 -0
  21. package/src/components/foundation-inbox/inbox-base/inbox-base.ts +2 -1
  22. package/src/components/foundation-notification-dashboard/components/routes/route-management.ts +4 -0
  23. package/src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts +48 -0
  24. package/src/services/notify-route.service.ts +16 -3
@@ -6088,6 +6088,41 @@
6088
6088
  }
6089
6089
  ]
6090
6090
  },
6091
+ {
6092
+ "kind": "javascript-module",
6093
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts",
6094
+ "declarations": [
6095
+ {
6096
+ "kind": "class",
6097
+ "description": "",
6098
+ "name": "SlackRouteManagement",
6099
+ "superclass": {
6100
+ "name": "GenesisElement",
6101
+ "package": "@genesislcap/web-core"
6102
+ },
6103
+ "tagName": "slack-route-management",
6104
+ "customElement": true
6105
+ }
6106
+ ],
6107
+ "exports": [
6108
+ {
6109
+ "kind": "js",
6110
+ "name": "SlackRouteManagement",
6111
+ "declaration": {
6112
+ "name": "SlackRouteManagement",
6113
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
6114
+ }
6115
+ },
6116
+ {
6117
+ "kind": "custom-element-definition",
6118
+ "name": "slack-route-management",
6119
+ "declaration": {
6120
+ "name": "SlackRouteManagement",
6121
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
6122
+ }
6123
+ }
6124
+ ]
6125
+ },
6091
6126
  {
6092
6127
  "kind": "javascript-module",
6093
6128
  "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.template.ts",
@@ -6851,156 +6886,6 @@
6851
6886
  }
6852
6887
  ]
6853
6888
  },
6854
- {
6855
- "kind": "javascript-module",
6856
- "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts",
6857
- "declarations": [
6858
- {
6859
- "kind": "variable",
6860
- "name": "RuleConditionGroupTemplate",
6861
- "default": "html<RuleConditionGroup>`\n ${when(\n (x) => !x.isFirst,\n html`\n <div class=\"join-toggle-row\">\n <div class=\"join-toggle\">\n <span\n class=\"join-text${(x) => classNames(['active', x.joinOperator === 'AND'])}\"\n @click=${(x) => (x.joinOperator = 'AND')}\n >\n AND\n </span>\n <span\n class=\"join-text${(x) => classNames(['active', x.joinOperator === 'OR'])}\"\n @click=${(x) => (x.joinOperator = 'OR')}\n >\n OR\n </span>\n </div>\n </div>\n `,\n )}\n <div class=\"condition-group-row\">\n <div class=\"condition-group-box\">\n ${repeat(\n (x) => x.groupChildren,\n html<ConditionNode, RuleConditionGroup>`\n ${when(\n (x) => isGroup(x),\n html<ConditionNode>`\n <rule-condition-group\n :fields=${(x, c) => c.parent.fields}\n :node=${(x) => x}\n :isFirst=${(x, c) => c.index === 0}\n @edit=${(x, c) => c.parent.editChild(eventDetail(c))}\n @delete=${(x, c) => c.parent.deleteChild(eventDetail(c))}\n ></rule-condition-group>\n `,\n )}\n ${when(\n (x) => !isGroup(x),\n html<ConditionNode>`\n <rule-condition-builder\n :fields=${(x, c) => c.parent.fields}\n :condition=${(x) => x}\n :isFirst=${(x, c) => c.index === 0}\n @edit=${(x, c) => c.parent.editChild(eventDetail(c))}\n @delete=${(x, c) => c.parent.deleteChild(eventDetail(c))}\n ></rule-condition-builder>\n `,\n )}\n `,\n { positioning: true },\n )}\n\n <div class=\"content-row\">\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.newCondition()}>\n + Condition\n </rapid-button>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.newGroup()}>+ Group</rapid-button>\n <rapid-button appearance=\"icon\" class=\"delete-group\" @click=${(x) => x.deleteSelf()}>\n <rapid-icon variant=\"regular\" name=\"trash-alt\" size=\"lg\" part=\"icon\"></rapid-icon>\n </rapid-button>\n </div>\n </div>\n </div>\n`"
6862
- }
6863
- ],
6864
- "exports": [
6865
- {
6866
- "kind": "js",
6867
- "name": "RuleConditionGroupTemplate",
6868
- "declaration": {
6869
- "name": "RuleConditionGroupTemplate",
6870
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts"
6871
- }
6872
- }
6873
- ]
6874
- },
6875
- {
6876
- "kind": "javascript-module",
6877
- "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts",
6878
- "declarations": [
6879
- {
6880
- "kind": "class",
6881
- "description": "Parenthesized group of conditions/nested groups for notification rule\ncriteria, joined to the previous sibling via AND/OR like a single\ncondition row - but bracketing its own children off from the rest of the\nlist, so e.g. \"(A && B) || C\" can be expressed without the AND silently\nspanning more than intended.",
6882
- "name": "RuleConditionGroup",
6883
- "members": [
6884
- {
6885
- "kind": "field",
6886
- "name": "node",
6887
- "type": {
6888
- "text": "ConditionGroupEntity"
6889
- }
6890
- },
6891
- {
6892
- "kind": "field",
6893
- "name": "fields",
6894
- "type": {
6895
- "text": "Field[]"
6896
- },
6897
- "default": "[]"
6898
- },
6899
- {
6900
- "kind": "field",
6901
- "name": "isFirst",
6902
- "type": {
6903
- "text": "boolean"
6904
- },
6905
- "default": "false"
6906
- },
6907
- {
6908
- "kind": "field",
6909
- "name": "joinOperator",
6910
- "type": {
6911
- "text": "string"
6912
- }
6913
- },
6914
- {
6915
- "kind": "field",
6916
- "name": "groupChildren",
6917
- "type": {
6918
- "text": "ConditionNode[]"
6919
- },
6920
- "default": "[]"
6921
- },
6922
- {
6923
- "kind": "method",
6924
- "name": "nodeChanged"
6925
- },
6926
- {
6927
- "kind": "method",
6928
- "name": "joinOperatorChanged"
6929
- },
6930
- {
6931
- "kind": "method",
6932
- "name": "newCondition"
6933
- },
6934
- {
6935
- "kind": "method",
6936
- "name": "newGroup"
6937
- },
6938
- {
6939
- "kind": "method",
6940
- "name": "editChild",
6941
- "parameters": [
6942
- {
6943
- "name": "_editedChild",
6944
- "type": {
6945
- "text": "ConditionNode"
6946
- }
6947
- }
6948
- ]
6949
- },
6950
- {
6951
- "kind": "method",
6952
- "name": "deleteChild",
6953
- "parameters": [
6954
- {
6955
- "name": "deletedChild",
6956
- "type": {
6957
- "text": "ConditionNode"
6958
- }
6959
- }
6960
- ]
6961
- },
6962
- {
6963
- "kind": "method",
6964
- "name": "deleteSelf"
6965
- }
6966
- ],
6967
- "events": [
6968
- {
6969
- "description": "Fired when this whole group should be removed",
6970
- "name": "delete"
6971
- },
6972
- {
6973
- "description": "Fired when anything inside this group changes",
6974
- "name": "edit"
6975
- }
6976
- ],
6977
- "superclass": {
6978
- "name": "GenesisElement",
6979
- "package": "@genesislcap/web-core"
6980
- },
6981
- "tagName": "rule-condition-group",
6982
- "customElement": true
6983
- }
6984
- ],
6985
- "exports": [
6986
- {
6987
- "kind": "js",
6988
- "name": "RuleConditionGroup",
6989
- "declaration": {
6990
- "name": "RuleConditionGroup",
6991
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
6992
- }
6993
- },
6994
- {
6995
- "kind": "custom-element-definition",
6996
- "name": "rule-condition-group",
6997
- "declaration": {
6998
- "name": "RuleConditionGroup",
6999
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
7000
- }
7001
- }
7002
- ]
7003
- },
7004
6889
  {
7005
6890
  "kind": "javascript-module",
7006
6891
  "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.template.ts",
@@ -7285,6 +7170,156 @@
7285
7170
  "declarations": [],
7286
7171
  "exports": []
7287
7172
  },
7173
+ {
7174
+ "kind": "javascript-module",
7175
+ "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts",
7176
+ "declarations": [
7177
+ {
7178
+ "kind": "variable",
7179
+ "name": "RuleConditionGroupTemplate",
7180
+ "default": "html<RuleConditionGroup>`\n ${when(\n (x) => !x.isFirst,\n html`\n <div class=\"join-toggle-row\">\n <div class=\"join-toggle\">\n <span\n class=\"join-text${(x) => classNames(['active', x.joinOperator === 'AND'])}\"\n @click=${(x) => (x.joinOperator = 'AND')}\n >\n AND\n </span>\n <span\n class=\"join-text${(x) => classNames(['active', x.joinOperator === 'OR'])}\"\n @click=${(x) => (x.joinOperator = 'OR')}\n >\n OR\n </span>\n </div>\n </div>\n `,\n )}\n <div class=\"condition-group-row\">\n <div class=\"condition-group-box\">\n ${repeat(\n (x) => x.groupChildren,\n html<ConditionNode, RuleConditionGroup>`\n ${when(\n (x) => isGroup(x),\n html<ConditionNode>`\n <rule-condition-group\n :fields=${(x, c) => c.parent.fields}\n :node=${(x) => x}\n :isFirst=${(x, c) => c.index === 0}\n @edit=${(x, c) => c.parent.editChild(eventDetail(c))}\n @delete=${(x, c) => c.parent.deleteChild(eventDetail(c))}\n ></rule-condition-group>\n `,\n )}\n ${when(\n (x) => !isGroup(x),\n html<ConditionNode>`\n <rule-condition-builder\n :fields=${(x, c) => c.parent.fields}\n :condition=${(x) => x}\n :isFirst=${(x, c) => c.index === 0}\n @edit=${(x, c) => c.parent.editChild(eventDetail(c))}\n @delete=${(x, c) => c.parent.deleteChild(eventDetail(c))}\n ></rule-condition-builder>\n `,\n )}\n `,\n { positioning: true },\n )}\n\n <div class=\"content-row\">\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.newCondition()}>\n + Condition\n </rapid-button>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.newGroup()}>+ Group</rapid-button>\n <rapid-button appearance=\"icon\" class=\"delete-group\" @click=${(x) => x.deleteSelf()}>\n <rapid-icon variant=\"regular\" name=\"trash-alt\" size=\"lg\" part=\"icon\"></rapid-icon>\n </rapid-button>\n </div>\n </div>\n </div>\n`"
7181
+ }
7182
+ ],
7183
+ "exports": [
7184
+ {
7185
+ "kind": "js",
7186
+ "name": "RuleConditionGroupTemplate",
7187
+ "declaration": {
7188
+ "name": "RuleConditionGroupTemplate",
7189
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts"
7190
+ }
7191
+ }
7192
+ ]
7193
+ },
7194
+ {
7195
+ "kind": "javascript-module",
7196
+ "path": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts",
7197
+ "declarations": [
7198
+ {
7199
+ "kind": "class",
7200
+ "description": "Parenthesized group of conditions/nested groups for notification rule\ncriteria, joined to the previous sibling via AND/OR like a single\ncondition row - but bracketing its own children off from the rest of the\nlist, so e.g. \"(A && B) || C\" can be expressed without the AND silently\nspanning more than intended.",
7201
+ "name": "RuleConditionGroup",
7202
+ "members": [
7203
+ {
7204
+ "kind": "field",
7205
+ "name": "node",
7206
+ "type": {
7207
+ "text": "ConditionGroupEntity"
7208
+ }
7209
+ },
7210
+ {
7211
+ "kind": "field",
7212
+ "name": "fields",
7213
+ "type": {
7214
+ "text": "Field[]"
7215
+ },
7216
+ "default": "[]"
7217
+ },
7218
+ {
7219
+ "kind": "field",
7220
+ "name": "isFirst",
7221
+ "type": {
7222
+ "text": "boolean"
7223
+ },
7224
+ "default": "false"
7225
+ },
7226
+ {
7227
+ "kind": "field",
7228
+ "name": "joinOperator",
7229
+ "type": {
7230
+ "text": "string"
7231
+ }
7232
+ },
7233
+ {
7234
+ "kind": "field",
7235
+ "name": "groupChildren",
7236
+ "type": {
7237
+ "text": "ConditionNode[]"
7238
+ },
7239
+ "default": "[]"
7240
+ },
7241
+ {
7242
+ "kind": "method",
7243
+ "name": "nodeChanged"
7244
+ },
7245
+ {
7246
+ "kind": "method",
7247
+ "name": "joinOperatorChanged"
7248
+ },
7249
+ {
7250
+ "kind": "method",
7251
+ "name": "newCondition"
7252
+ },
7253
+ {
7254
+ "kind": "method",
7255
+ "name": "newGroup"
7256
+ },
7257
+ {
7258
+ "kind": "method",
7259
+ "name": "editChild",
7260
+ "parameters": [
7261
+ {
7262
+ "name": "_editedChild",
7263
+ "type": {
7264
+ "text": "ConditionNode"
7265
+ }
7266
+ }
7267
+ ]
7268
+ },
7269
+ {
7270
+ "kind": "method",
7271
+ "name": "deleteChild",
7272
+ "parameters": [
7273
+ {
7274
+ "name": "deletedChild",
7275
+ "type": {
7276
+ "text": "ConditionNode"
7277
+ }
7278
+ }
7279
+ ]
7280
+ },
7281
+ {
7282
+ "kind": "method",
7283
+ "name": "deleteSelf"
7284
+ }
7285
+ ],
7286
+ "events": [
7287
+ {
7288
+ "description": "Fired when this whole group should be removed",
7289
+ "name": "delete"
7290
+ },
7291
+ {
7292
+ "description": "Fired when anything inside this group changes",
7293
+ "name": "edit"
7294
+ }
7295
+ ],
7296
+ "superclass": {
7297
+ "name": "GenesisElement",
7298
+ "package": "@genesislcap/web-core"
7299
+ },
7300
+ "tagName": "rule-condition-group",
7301
+ "customElement": true
7302
+ }
7303
+ ],
7304
+ "exports": [
7305
+ {
7306
+ "kind": "js",
7307
+ "name": "RuleConditionGroup",
7308
+ "declaration": {
7309
+ "name": "RuleConditionGroup",
7310
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
7311
+ }
7312
+ },
7313
+ {
7314
+ "kind": "custom-element-definition",
7315
+ "name": "rule-condition-group",
7316
+ "declaration": {
7317
+ "name": "RuleConditionGroup",
7318
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
7319
+ }
7320
+ }
7321
+ ]
7322
+ },
7288
7323
  {
7289
7324
  "kind": "javascript-module",
7290
7325
  "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/components/components.ts"],"names":[],"mappings":"AAqDA,wBAAsB,WAAW,kBAIhC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/components/components.ts"],"names":[],"mappings":"AAuDA,wBAAsB,WAAW,kBAIhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-base.d.ts","sourceRoot":"","sources":["../../../../../src/components/foundation-inbox/inbox-base/inbox-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox-base.d.ts","sourceRoot":"","sources":["../../../../../src/components/foundation-inbox/inbox-base/inbox-base.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-management.d.ts","sourceRoot":"","sources":["../../../../../../src/components/foundation-notification-dashboard/components/routes/route-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAQ,MAAM,uBAAuB,CAAC;AAEjF,qBAqDa,eAAgB,SAAQ,cAAc;CAAG"}
1
+ {"version":3,"file":"route-management.d.ts","sourceRoot":"","sources":["../../../../../../src/components/foundation-notification-dashboard/components/routes/route-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAQ,MAAM,uBAAuB,CAAC;AAEjF,qBAyDa,eAAgB,SAAQ,cAAc;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { GenesisElement } from '@genesislcap/web-core';
2
+ export declare class SlackRouteManagement extends GenesisElement {
3
+ }
4
+ //# sourceMappingURL=slack-route-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-route-management.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAQ,MAAM,uBAAuB,CAAC;AA+B5E,qBAgBa,oBAAqB,SAAQ,cAAc;CAAG"}
@@ -16,6 +16,7 @@ import type { EmailUserRouteManagement as EmailUserRouteManagementWC } from './c
16
16
  import type { LogRouteManagement as LogRouteManagementWC } from './components/foundation-notification-dashboard/components/routes/tabs/log-route-management';
17
17
  import type { MSTeamsRouteManagement as MSTeamsRouteManagementWC } from './components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management';
18
18
  import type { ScreenRouteManagement as ScreenRouteManagementWC } from './components/foundation-notification-dashboard/components/routes/tabs/screen-route-management';
19
+ import type { SlackRouteManagement as SlackRouteManagementWC } from './components/foundation-notification-dashboard/components/routes/tabs/slack-route-management';
19
20
  import type { RuleConditionBuilder as RuleConditionBuilderWC } from './components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder';
20
21
  import type { RuleConditionGroup as RuleConditionGroupWC } from './components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group';
21
22
  import type { RuleDialog as RuleDialogWC } from './components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog';
@@ -205,6 +206,15 @@ export declare const ScreenRouteManagement: React.ForwardRefExoticComponent<
205
206
  >;
206
207
  export type ScreenRouteManagementRef = ScreenRouteManagementWC;
207
208
 
209
+ export declare const SlackRouteManagement: React.ForwardRefExoticComponent<
210
+ React.PropsWithChildren<
211
+ Omit<PublicOf<SlackRouteManagementWC>, 'children' | 'style'> &
212
+ HTMLWCProps & {
213
+ }
214
+ > & React.RefAttributes<SlackRouteManagementWC>
215
+ >;
216
+ export type SlackRouteManagementRef = SlackRouteManagementWC;
217
+
208
218
  export declare const RuleDialog: React.ForwardRefExoticComponent<
209
219
  React.PropsWithChildren<
210
220
  Omit<PublicOf<RuleDialogWC>, 'children' | 'style'> &
@@ -225,17 +235,6 @@ export declare const TemplateDialog: React.ForwardRefExoticComponent<
225
235
  >;
226
236
  export type TemplateDialogRef = TemplateDialogWC;
227
237
 
228
- export declare const RuleConditionGroup: React.ForwardRefExoticComponent<
229
- React.PropsWithChildren<
230
- Omit<PublicOf<RuleConditionGroupWC>, 'children' | 'style'> &
231
- HTMLWCProps & {
232
- onDelete?: (event: CustomEvent<unknown>) => void;
233
- onEdit?: (event: CustomEvent<unknown>) => void;
234
- }
235
- > & React.RefAttributes<RuleConditionGroupWC>
236
- >;
237
- export type RuleConditionGroupRef = RuleConditionGroupWC;
238
-
239
238
  export declare const RuleConditionBuilder: React.ForwardRefExoticComponent<
240
239
  React.PropsWithChildren<
241
240
  Omit<PublicOf<RuleConditionBuilderWC>, 'children' | 'style'> &
@@ -247,6 +246,17 @@ export declare const RuleConditionBuilder: React.ForwardRefExoticComponent<
247
246
  >;
248
247
  export type RuleConditionBuilderRef = RuleConditionBuilderWC;
249
248
 
249
+ export declare const RuleConditionGroup: React.ForwardRefExoticComponent<
250
+ React.PropsWithChildren<
251
+ Omit<PublicOf<RuleConditionGroupWC>, 'children' | 'style'> &
252
+ HTMLWCProps & {
253
+ onDelete?: (event: CustomEvent<unknown>) => void;
254
+ onEdit?: (event: CustomEvent<unknown>) => void;
255
+ }
256
+ > & React.RefAttributes<RuleConditionGroupWC>
257
+ >;
258
+ export type RuleConditionGroupRef = RuleConditionGroupWC;
259
+
250
260
  export declare const ParameterBuilder: React.ForwardRefExoticComponent<
251
261
  React.PropsWithChildren<
252
262
  Omit<PublicOf<ParameterBuilderWC>, 'children' | 'style'> &
@@ -15,7 +15,17 @@ export interface NotifyRoute {
15
15
  * A topic "supports" a channel when any route exists for that
16
16
  * TOPIC_MATCH + GATEWAY_ID (admin-configured marker rows, entity-blank).
17
17
  * A specific user has that channel enabled when a route additionally
18
- * exists scoped to ENTITY_ID_TYPE=USER_NAME, ENTITY_ID=<username>.
18
+ * exists scoped to ENTITY_ID_TYPE=SELF, ENTITY_ID=<username>.
19
+ *
20
+ * The per-user route is created with ENTITY_ID_TYPE=SELF (not USER_NAME) so
21
+ * delivery resolves to the notification's SENDER (the subscriber whose rule
22
+ * fired) rather than to a fixed named user. When several users subscribe to
23
+ * the same shared topic — each getting their own rule + route — a USER_NAME
24
+ * route makes every subscriber's rule deliver to every subscriber's route
25
+ * (an N×N fan-out: N alerts/emails per user). With SELF, each fired rule
26
+ * delivers only to its own owner, so delivery scales linearly (one per user).
27
+ * ENTITY_ID is still stored as the username purely as a per-user marker for
28
+ * subscribe idempotency / unsubscribe; the dispatcher ignores it for SELF.
19
29
  */
20
30
  export interface NotifyRouteService {
21
31
  getAllRoutes(channel: NotifyChannel): Promise<NotifyRoute[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"notify-route.service.d.ts","sourceRoot":"","sources":["../../../src/services/notify-route.service.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAO9C,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAsBD;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,aAAa,CACX,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/F,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAuGD,eAAO,MAAM,kBAAkB,0EAE9B,CAAC"}
1
+ {"version":3,"file":"notify-route.service.d.ts","sourceRoot":"","sources":["../../../src/services/notify-route.service.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAO9C,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAsBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,aAAa,CACX,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/F,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AA0GD,eAAO,MAAM,kBAAkB,0EAE9B,CAAC"}
@@ -12,6 +12,7 @@ import { EmailUserRouteManagement } from './foundation-notification-dashboard/co
12
12
  import { LogRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/log-route-management';
13
13
  import { MSTeamsRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management';
14
14
  import { ScreenRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/screen-route-management';
15
+ import { SlackRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/slack-route-management';
15
16
  import { RuleConditionBuilder } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder';
16
17
  import { RuleConditionGroup } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group';
17
18
  import { RuleDialog } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog';
@@ -43,6 +44,7 @@ EmailDistributionRouteManagement;
43
44
  EmailUserRouteManagement;
44
45
  LogRouteManagement;
45
46
  MSTeamsRouteManagement;
47
+ SlackRouteManagement;
46
48
  NotifyAuditManagement;
47
49
  // #endregion Notification Dashboard
48
50
  export function loadRemotes() {
@@ -300,7 +300,8 @@ export class FoundationInboxBase extends GenesisElement {
300
300
  });
301
301
  }
302
302
  isOwnRoute(route, username) {
303
- return !!username && route.ENTITY_ID_TYPE === 'USER_NAME' && route.ENTITY_ID === username;
303
+ // Per-user subscription routes are created as SELF with ENTITY_ID=<username>
304
+ return !!username && route.ENTITY_ID_TYPE === 'SELF' && route.ENTITY_ID === username;
304
305
  }
305
306
  findSubscribedRule(template) {
306
307
  return this.rules.find((rule) => rule.NAME === template.NAME);
@@ -12,6 +12,7 @@ RouteManagement = __decorate([
12
12
  <rapid-tab appearance="secondary">Email User Routes</rapid-tab>
13
13
  <rapid-tab appearance="secondary">Log Routes</rapid-tab>
14
14
  <rapid-tab appearance="secondary">MS Teams Routes</rapid-tab>
15
+ <rapid-tab appearance="secondary">Slack Routes</rapid-tab>
15
16
 
16
17
  <rapid-tab-panel>
17
18
  <screen-route-management></screen-route-management>
@@ -28,6 +29,9 @@ RouteManagement = __decorate([
28
29
  <rapid-tab-panel>
29
30
  <ms-teams-route-management></ms-teams-route-management>
30
31
  </rapid-tab-panel>
32
+ <rapid-tab-panel>
33
+ <slack-route-management></slack-route-management>
34
+ </rapid-tab-panel>
31
35
  </rapid-tabs>
32
36
  `,
33
37
  styles: css `
@@ -0,0 +1,51 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement, GenesisElement, html } from '@genesislcap/web-core';
3
+ import { managementGridStyles } from '../../../styles/management.styles';
4
+ const SLACK_ROUTE_MANAGEMENT_COLUMNS = [
5
+ {
6
+ field: 'NOTIFY_ROUTE_ID',
7
+ headerName: 'Notify Route Id',
8
+ flex: 1,
9
+ },
10
+ {
11
+ field: 'TOPIC_MATCH',
12
+ headerName: 'Topic Match',
13
+ flex: 1,
14
+ },
15
+ {
16
+ field: 'GATEWAY_ID',
17
+ headerName: 'Gateway Id',
18
+ flex: 1,
19
+ },
20
+ {
21
+ field: 'ROUTE_ENABLED',
22
+ headerName: 'Route Enabled',
23
+ flex: 1,
24
+ },
25
+ {
26
+ field: 'URL',
27
+ headerName: 'Url',
28
+ flex: 1,
29
+ },
30
+ ];
31
+ let SlackRouteManagement = class SlackRouteManagement extends GenesisElement {
32
+ };
33
+ SlackRouteManagement = __decorate([
34
+ customElement({
35
+ name: 'slack-route-management',
36
+ template: html `
37
+ <div class="grid">
38
+ <entity-management
39
+ design-system-prefix="rapid"
40
+ resourceName="ALL_SLACK_ROUTES"
41
+ createEvent="EVENT_SLACK_ROUTE_CREATE"
42
+ updateEvent="EVENT_SLACK_ROUTE_UPDATE"
43
+ deleteEvent="EVENT_SLACK_ROUTE_DELETE"
44
+ :columns=${() => [...SLACK_ROUTE_MANAGEMENT_COLUMNS]}
45
+ ></entity-management>
46
+ </div>
47
+ `,
48
+ styles: managementGridStyles,
49
+ })
50
+ ], SlackRouteManagement);
51
+ export { SlackRouteManagement };
@@ -31,7 +31,7 @@ class NotifyRouteServiceImpl {
31
31
  }
32
32
  findUserRoute(channel, topic, username) {
33
33
  return __awaiter(this, void 0, void 0, function* () {
34
- const criteriaMatch = `TOPIC_MATCH == '${this.escape(topic)}' && ENTITY_ID == '${this.escape(username)}' && ENTITY_ID_TYPE == 'USER_NAME'`;
34
+ const criteriaMatch = `TOPIC_MATCH == '${this.escape(topic)}' && ENTITY_ID == '${this.escape(username)}' && ENTITY_ID_TYPE == 'SELF'`;
35
35
  const [route] = yield this.queryRoutes(channel, criteriaMatch);
36
36
  return route !== null && route !== void 0 ? route : null;
37
37
  });
@@ -51,7 +51,10 @@ class NotifyRouteServiceImpl {
51
51
  GATEWAY_ID: GATEWAY_ID[channel],
52
52
  ROUTE_ENABLED: true,
53
53
  ENTITY_ID: username,
54
- ENTITY_ID_TYPE: 'USER_NAME',
54
+ // SELF (not USER_NAME): delivery resolves to the fired rule's SENDER (the
55
+ // subscriber), avoiding the N×N fan-out across co-subscribers of a shared
56
+ // topic. ENTITY_ID is kept as a per-user marker only; ignored for SELF.
57
+ ENTITY_ID_TYPE: 'SELF',
55
58
  EXCLUDE_SENDER: false,
56
59
  },
57
60
  IGNORE_WARNINGS: true,
@@ -270,7 +270,17 @@ declare interface NotifyRoute {
270
270
  * A topic "supports" a channel when any route exists for that
271
271
  * TOPIC_MATCH + GATEWAY_ID (admin-configured marker rows, entity-blank).
272
272
  * A specific user has that channel enabled when a route additionally
273
- * exists scoped to ENTITY_ID_TYPE=USER_NAME, ENTITY_ID=<username>.
273
+ * exists scoped to ENTITY_ID_TYPE=SELF, ENTITY_ID=<username>.
274
+ *
275
+ * The per-user route is created with ENTITY_ID_TYPE=SELF (not USER_NAME) so
276
+ * delivery resolves to the notification's SENDER (the subscriber whose rule
277
+ * fired) rather than to a fixed named user. When several users subscribe to
278
+ * the same shared topic — each getting their own rule + route — a USER_NAME
279
+ * route makes every subscriber's rule deliver to every subscriber's route
280
+ * (an N×N fan-out: N alerts/emails per user). With SELF, each fired rule
281
+ * delivers only to its own owner, so delivery scales linearly (one per user).
282
+ * ENTITY_ID is still stored as the username purely as a per-user marker for
283
+ * subscribe idempotency / unsubscribe; the dispatcher ignores it for SELF.
274
284
  */
275
285
  declare interface NotifyRouteService {
276
286
  getAllRoutes(channel: NotifyChannel): Promise<NotifyRoute[]>;
package/dist/react.cjs CHANGED
@@ -18,6 +18,7 @@ const { EmailUserRouteManagement: EmailUserRouteManagementWC } = require('./esm/
18
18
  const { LogRouteManagement: LogRouteManagementWC } = require('./esm/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.js');
19
19
  const { MSTeamsRouteManagement: MSTeamsRouteManagementWC } = require('./esm/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.js');
20
20
  const { ScreenRouteManagement: ScreenRouteManagementWC } = require('./esm/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.js');
21
+ const { SlackRouteManagement: SlackRouteManagementWC } = require('./esm/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.js');
21
22
  const { RuleConditionBuilder: RuleConditionBuilderWC } = require('./esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.js');
22
23
  const { RuleConditionGroup: RuleConditionGroupWC } = require('./esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.js');
23
24
  const { RuleDialog: RuleDialogWC } = require('./esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.js');
@@ -148,6 +149,11 @@ const ScreenRouteManagement = React.forwardRef(function ScreenRouteManagement(pr
148
149
  return React.createElement(customElements.getName(ScreenRouteManagementWC) ?? 'screen-route-management', { ...rest, ref }, children);
149
150
  });
150
151
 
152
+ const SlackRouteManagement = React.forwardRef(function SlackRouteManagement(props, ref) {
153
+ const { children, ...rest } = props;
154
+ return React.createElement(customElements.getName(SlackRouteManagementWC) ?? 'slack-route-management', { ...rest, ref }, children);
155
+ });
156
+
151
157
  const RuleDialog = React.forwardRef(function RuleDialog(props, ref) {
152
158
  const { onClose, children, ...rest } = props;
153
159
  const _innerRef = React.useRef(null);
@@ -182,7 +188,7 @@ const TemplateDialog = React.forwardRef(function TemplateDialog(props, ref) {
182
188
  return React.createElement(customElements.getName(TemplateDialogWC) ?? 'template-dialog', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
183
189
  });
184
190
 
185
- const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(props, ref) {
191
+ const RuleConditionBuilder = React.forwardRef(function RuleConditionBuilder(props, ref) {
186
192
  const { onDelete, onEdit, children, ...rest } = props;
187
193
  const _innerRef = React.useRef(null);
188
194
  const _onDeleteRef = React.useRef(onDelete);
@@ -201,10 +207,10 @@ const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(props, r
201
207
  el.removeEventListener('edit', _onEditFn);
202
208
  };
203
209
  }, []);
204
- return React.createElement(customElements.getName(RuleConditionGroupWC) ?? 'rule-condition-group', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
210
+ return React.createElement(customElements.getName(RuleConditionBuilderWC) ?? 'rule-condition-builder', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
205
211
  });
206
212
 
207
- const RuleConditionBuilder = React.forwardRef(function RuleConditionBuilder(props, ref) {
213
+ const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(props, ref) {
208
214
  const { onDelete, onEdit, children, ...rest } = props;
209
215
  const _innerRef = React.useRef(null);
210
216
  const _onDeleteRef = React.useRef(onDelete);
@@ -223,7 +229,7 @@ const RuleConditionBuilder = React.forwardRef(function RuleConditionBuilder(prop
223
229
  el.removeEventListener('edit', _onEditFn);
224
230
  };
225
231
  }, []);
226
- return React.createElement(customElements.getName(RuleConditionBuilderWC) ?? 'rule-condition-builder', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
232
+ return React.createElement(customElements.getName(RuleConditionGroupWC) ?? 'rule-condition-group', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
227
233
  });
228
234
 
229
235
  const ParameterBuilder = React.forwardRef(function ParameterBuilder(props, ref) {
@@ -309,10 +315,11 @@ module.exports = {
309
315
  LogRouteManagement,
310
316
  MSTeamsRouteManagement,
311
317
  ScreenRouteManagement,
318
+ SlackRouteManagement,
312
319
  RuleDialog,
313
320
  TemplateDialog,
314
- RuleConditionGroup,
315
321
  RuleConditionBuilder,
322
+ RuleConditionGroup,
316
323
  ParameterBuilder,
317
324
  TemplateConditionBuilder,
318
325
  TemplateConditionGroup,
package/dist/react.mjs CHANGED
@@ -16,6 +16,7 @@ import { EmailUserRouteManagement as EmailUserRouteManagementWC } from './esm/co
16
16
  import { LogRouteManagement as LogRouteManagementWC } from './esm/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.js';
17
17
  import { MSTeamsRouteManagement as MSTeamsRouteManagementWC } from './esm/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.js';
18
18
  import { ScreenRouteManagement as ScreenRouteManagementWC } from './esm/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.js';
19
+ import { SlackRouteManagement as SlackRouteManagementWC } from './esm/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.js';
19
20
  import { RuleConditionBuilder as RuleConditionBuilderWC } from './esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.js';
20
21
  import { RuleConditionGroup as RuleConditionGroupWC } from './esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.js';
21
22
  import { RuleDialog as RuleDialogWC } from './esm/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.js';
@@ -146,6 +147,11 @@ export const ScreenRouteManagement = React.forwardRef(function ScreenRouteManage
146
147
  return React.createElement(customElements.getName(ScreenRouteManagementWC) ?? 'screen-route-management', { ...rest, ref }, children);
147
148
  });
148
149
 
150
+ export const SlackRouteManagement = React.forwardRef(function SlackRouteManagement(props, ref) {
151
+ const { children, ...rest } = props;
152
+ return React.createElement(customElements.getName(SlackRouteManagementWC) ?? 'slack-route-management', { ...rest, ref }, children);
153
+ });
154
+
149
155
  export const RuleDialog = React.forwardRef(function RuleDialog(props, ref) {
150
156
  const { onClose, children, ...rest } = props;
151
157
  const _innerRef = React.useRef(null);
@@ -180,7 +186,7 @@ export const TemplateDialog = React.forwardRef(function TemplateDialog(props, re
180
186
  return React.createElement(customElements.getName(TemplateDialogWC) ?? 'template-dialog', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
181
187
  });
182
188
 
183
- export const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(props, ref) {
189
+ export const RuleConditionBuilder = React.forwardRef(function RuleConditionBuilder(props, ref) {
184
190
  const { onDelete, onEdit, children, ...rest } = props;
185
191
  const _innerRef = React.useRef(null);
186
192
  const _onDeleteRef = React.useRef(onDelete);
@@ -199,10 +205,10 @@ export const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(p
199
205
  el.removeEventListener('edit', _onEditFn);
200
206
  };
201
207
  }, []);
202
- return React.createElement(customElements.getName(RuleConditionGroupWC) ?? 'rule-condition-group', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
208
+ return React.createElement(customElements.getName(RuleConditionBuilderWC) ?? 'rule-condition-builder', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
203
209
  });
204
210
 
205
- export const RuleConditionBuilder = React.forwardRef(function RuleConditionBuilder(props, ref) {
211
+ export const RuleConditionGroup = React.forwardRef(function RuleConditionGroup(props, ref) {
206
212
  const { onDelete, onEdit, children, ...rest } = props;
207
213
  const _innerRef = React.useRef(null);
208
214
  const _onDeleteRef = React.useRef(onDelete);
@@ -221,7 +227,7 @@ export const RuleConditionBuilder = React.forwardRef(function RuleConditionBuild
221
227
  el.removeEventListener('edit', _onEditFn);
222
228
  };
223
229
  }, []);
224
- return React.createElement(customElements.getName(RuleConditionBuilderWC) ?? 'rule-condition-builder', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
230
+ return React.createElement(customElements.getName(RuleConditionGroupWC) ?? 'rule-condition-group', { ...rest, ref: _mergeRefs(_innerRef, ref) }, children);
225
231
  });
226
232
 
227
233
  export const ParameterBuilder = React.forwardRef(function ParameterBuilder(props, ref) {
@@ -1 +1 @@
1
- {"root":["../src/globals.d.ts","../src/index.federated.ts","../src/index.ts","../src/notify.types.ts","../src/sandbox.ts","../src/components/components.ts","../src/components/foundation-inbox/inbox.styles.ts","../src/components/foundation-inbox/inbox.template.ts","../src/components/foundation-inbox/inbox.ts","../src/components/foundation-inbox/inbox.types.ts","../src/components/foundation-inbox/inbox.utils.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.styles.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.template.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.styles.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.template.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.styles.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.template.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts","../src/components/foundation-inbox/inbox-base/inbox-base.ts","../src/components/foundation-notification-dashboard/index.ts","../src/components/foundation-notification-dashboard/notification-dashboard.styles.ts","../src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts","../src/components/foundation-notification-dashboard/notification-dashboard.template.ts","../src/components/foundation-notification-dashboard/notification-dashboard.ts","../src/components/foundation-notification-dashboard/notification-dashboard.utils.ts","../src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts","../src/components/foundation-notification-dashboard/components/routes/route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts","../src/components/foundation-notification-dashboard/components/rules/columns.ts","../src/components/foundation-notification-dashboard/components/rules/rule-management.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.types.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.types.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts","../src/components/foundation-notification-dashboard/components/templates/columns.ts","../src/components/foundation-notification-dashboard/components/templates/template-management.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.types.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.ts","../src/components/foundation-notification-dashboard/styles/condition-builder.styles.ts","../src/components/foundation-notification-dashboard/styles/dynamic-rule.styles.ts","../src/components/foundation-notification-dashboard/styles/management.styles.ts","../src/components/foundation-notification-dashboard/types/expression-type.ts","../src/components/foundation-notification-dashboard/types/logical-operator.ts","../src/components/foundation-notification-dashboard/types/param-source-type.ts","../src/components/foundation-notification-dashboard/types/param-type.ts","../src/components/foundation-notification-dashboard/types/right-criteria.ts","../src/components/foundation-notification-dashboard/types/rule-execution-strategy.ts","../src/components/foundation-notification-dashboard/types/severity.ts","../src/services/alert.service.ts","../src/services/inbox.service.ts","../src/services/notify-route.service.ts","../src/services/notify.service.ts","../src/services/rule.service.ts","../src/services/system.service.ts","../src/services/template.service.ts","../src/styles/scrollbar.styles.ts","../src/utils/eventDetail.ts","../src/utils/gridConfig.ts","../src/utils/humanize.ts","../src/utils/icons.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/notifyPermissions.ts","../src/utils/toBoolean.ts","../src/utils/updateArray.ts"],"version":"5.9.2"}
1
+ {"root":["../src/globals.d.ts","../src/index.federated.ts","../src/index.ts","../src/notify.types.ts","../src/sandbox.ts","../src/components/components.ts","../src/components/foundation-inbox/inbox.styles.ts","../src/components/foundation-inbox/inbox.template.ts","../src/components/foundation-inbox/inbox.ts","../src/components/foundation-inbox/inbox.types.ts","../src/components/foundation-inbox/inbox.utils.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts","../src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.styles.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.template.ts","../src/components/foundation-inbox/components/foundation-inbox-flyout/foundation-inbox-flyout.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.styles.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.template.ts","../src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.styles.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.template.ts","../src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts","../src/components/foundation-inbox/inbox-base/inbox-base.ts","../src/components/foundation-notification-dashboard/index.ts","../src/components/foundation-notification-dashboard/notification-dashboard.styles.ts","../src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts","../src/components/foundation-notification-dashboard/notification-dashboard.template.ts","../src/components/foundation-notification-dashboard/notification-dashboard.ts","../src/components/foundation-notification-dashboard/notification-dashboard.utils.ts","../src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts","../src/components/foundation-notification-dashboard/components/routes/route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts","../src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts","../src/components/foundation-notification-dashboard/components/rules/columns.ts","../src/components/foundation-notification-dashboard/components/rules/rule-management.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog.types.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder.types.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.template.ts","../src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts","../src/components/foundation-notification-dashboard/components/templates/columns.ts","../src/components/foundation-notification-dashboard/components/templates/template-management.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.types.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.template.ts","../src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.ts","../src/components/foundation-notification-dashboard/styles/condition-builder.styles.ts","../src/components/foundation-notification-dashboard/styles/dynamic-rule.styles.ts","../src/components/foundation-notification-dashboard/styles/management.styles.ts","../src/components/foundation-notification-dashboard/types/expression-type.ts","../src/components/foundation-notification-dashboard/types/logical-operator.ts","../src/components/foundation-notification-dashboard/types/param-source-type.ts","../src/components/foundation-notification-dashboard/types/param-type.ts","../src/components/foundation-notification-dashboard/types/right-criteria.ts","../src/components/foundation-notification-dashboard/types/rule-execution-strategy.ts","../src/components/foundation-notification-dashboard/types/severity.ts","../src/services/alert.service.ts","../src/services/inbox.service.ts","../src/services/notify-route.service.ts","../src/services/notify.service.ts","../src/services/rule.service.ts","../src/services/system.service.ts","../src/services/template.service.ts","../src/styles/scrollbar.styles.ts","../src/utils/eventDetail.ts","../src/utils/gridConfig.ts","../src/utils/humanize.ts","../src/utils/icons.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/notifyPermissions.ts","../src/utils/toBoolean.ts","../src/utils/updateArray.ts"],"version":"5.9.2"}
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": "15.2.1",
4
+ "version": "15.3.1",
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": "15.2.1",
87
- "@genesislcap/eslint-config": "15.2.1",
88
- "@genesislcap/eslint-stylelint-builder": "15.2.1",
89
- "@genesislcap/foundation-testing": "15.2.1",
90
- "@genesislcap/genx": "15.2.1",
91
- "@genesislcap/prettier-config": "15.2.1",
92
- "@genesislcap/stylelint-config": "15.2.1",
93
- "@genesislcap/vite-builder": "15.2.1",
94
- "@genesislcap/webpack-builder": "15.2.1",
86
+ "@genesislcap/design-system-configurator": "15.3.1",
87
+ "@genesislcap/eslint-config": "15.3.1",
88
+ "@genesislcap/eslint-stylelint-builder": "15.3.1",
89
+ "@genesislcap/foundation-testing": "15.3.1",
90
+ "@genesislcap/genx": "15.3.1",
91
+ "@genesislcap/prettier-config": "15.3.1",
92
+ "@genesislcap/stylelint-config": "15.3.1",
93
+ "@genesislcap/vite-builder": "15.3.1",
94
+ "@genesislcap/webpack-builder": "15.3.1",
95
95
  "dayjs": "^1.11.7"
96
96
  },
97
97
  "dependencies": {
98
- "@genesislcap/foundation-comms": "15.2.1",
99
- "@genesislcap/foundation-criteria": "15.2.1",
100
- "@genesislcap/foundation-entity-management": "15.2.1",
101
- "@genesislcap/foundation-forms": "15.2.1",
102
- "@genesislcap/foundation-layout": "15.2.1",
103
- "@genesislcap/foundation-logger": "15.2.1",
104
- "@genesislcap/foundation-notifications": "15.2.1",
105
- "@genesislcap/foundation-ui": "15.2.1",
106
- "@genesislcap/foundation-utils": "15.2.1",
107
- "@genesislcap/rapid-design-system": "15.2.1",
108
- "@genesislcap/rapid-grid-pro": "15.2.1",
109
- "@genesislcap/web-core": "15.2.1",
98
+ "@genesislcap/foundation-comms": "15.3.1",
99
+ "@genesislcap/foundation-criteria": "15.3.1",
100
+ "@genesislcap/foundation-entity-management": "15.3.1",
101
+ "@genesislcap/foundation-forms": "15.3.1",
102
+ "@genesislcap/foundation-layout": "15.3.1",
103
+ "@genesislcap/foundation-logger": "15.3.1",
104
+ "@genesislcap/foundation-notifications": "15.3.1",
105
+ "@genesislcap/foundation-ui": "15.3.1",
106
+ "@genesislcap/foundation-utils": "15.3.1",
107
+ "@genesislcap/rapid-design-system": "15.3.1",
108
+ "@genesislcap/rapid-grid-pro": "15.3.1",
109
+ "@genesislcap/web-core": "15.3.1",
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": "3917f3dc0bb5f4487bd30b37360fa0cddda92f0c"
117
+ "gitHead": "1c3a33f7d56acec166f832b9610e83343a8873e6"
118
118
  }
@@ -11,6 +11,7 @@ import { EmailUserRouteManagement } from './foundation-notification-dashboard/co
11
11
  import { LogRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/log-route-management';
12
12
  import { MSTeamsRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management';
13
13
  import { ScreenRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/screen-route-management';
14
+ import { SlackRouteManagement } from './foundation-notification-dashboard/components/routes/tabs/slack-route-management';
14
15
  import { RuleConditionBuilder } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-builder/rule-condition-builder';
15
16
  import { RuleConditionGroup } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group';
16
17
  import { RuleDialog } from './foundation-notification-dashboard/components/rules/rule-dialog/rule-dialog';
@@ -47,6 +48,7 @@ EmailDistributionRouteManagement;
47
48
  EmailUserRouteManagement;
48
49
  LogRouteManagement;
49
50
  MSTeamsRouteManagement;
51
+ SlackRouteManagement;
50
52
 
51
53
  NotifyAuditManagement;
52
54
  // #endregion Notification Dashboard
@@ -413,7 +413,8 @@ export class FoundationInboxBase extends GenesisElement {
413
413
  }
414
414
 
415
415
  private isOwnRoute(route: NotifyRoute, username: string): boolean {
416
- return !!username && route.ENTITY_ID_TYPE === 'USER_NAME' && route.ENTITY_ID === username;
416
+ // Per-user subscription routes are created as SELF with ENTITY_ID=<username>
417
+ return !!username && route.ENTITY_ID_TYPE === 'SELF' && route.ENTITY_ID === username;
417
418
  }
418
419
 
419
420
  findSubscribedRule(template: RuleTemplate): Rule | undefined {
@@ -9,6 +9,7 @@ import { css, customElement, GenesisElement, html } from '@genesislcap/web-core'
9
9
  <rapid-tab appearance="secondary">Email User Routes</rapid-tab>
10
10
  <rapid-tab appearance="secondary">Log Routes</rapid-tab>
11
11
  <rapid-tab appearance="secondary">MS Teams Routes</rapid-tab>
12
+ <rapid-tab appearance="secondary">Slack Routes</rapid-tab>
12
13
 
13
14
  <rapid-tab-panel>
14
15
  <screen-route-management></screen-route-management>
@@ -25,6 +26,9 @@ import { css, customElement, GenesisElement, html } from '@genesislcap/web-core'
25
26
  <rapid-tab-panel>
26
27
  <ms-teams-route-management></ms-teams-route-management>
27
28
  </rapid-tab-panel>
29
+ <rapid-tab-panel>
30
+ <slack-route-management></slack-route-management>
31
+ </rapid-tab-panel>
28
32
  </rapid-tabs>
29
33
  `,
30
34
  styles: css`
@@ -0,0 +1,48 @@
1
+ import { customElement, GenesisElement, html } from '@genesislcap/web-core';
2
+ import { managementGridStyles } from '../../../styles/management.styles';
3
+
4
+ const SLACK_ROUTE_MANAGEMENT_COLUMNS = [
5
+ {
6
+ field: 'NOTIFY_ROUTE_ID',
7
+ headerName: 'Notify Route Id',
8
+ flex: 1,
9
+ },
10
+ {
11
+ field: 'TOPIC_MATCH',
12
+ headerName: 'Topic Match',
13
+ flex: 1,
14
+ },
15
+ {
16
+ field: 'GATEWAY_ID',
17
+ headerName: 'Gateway Id',
18
+ flex: 1,
19
+ },
20
+ {
21
+ field: 'ROUTE_ENABLED',
22
+ headerName: 'Route Enabled',
23
+ flex: 1,
24
+ },
25
+ {
26
+ field: 'URL',
27
+ headerName: 'Url',
28
+ flex: 1,
29
+ },
30
+ ];
31
+
32
+ @customElement({
33
+ name: 'slack-route-management',
34
+ template: html<SlackRouteManagement>`
35
+ <div class="grid">
36
+ <entity-management
37
+ design-system-prefix="rapid"
38
+ resourceName="ALL_SLACK_ROUTES"
39
+ createEvent="EVENT_SLACK_ROUTE_CREATE"
40
+ updateEvent="EVENT_SLACK_ROUTE_UPDATE"
41
+ deleteEvent="EVENT_SLACK_ROUTE_DELETE"
42
+ :columns=${() => [...SLACK_ROUTE_MANAGEMENT_COLUMNS]}
43
+ ></entity-management>
44
+ </div>
45
+ `,
46
+ styles: managementGridStyles,
47
+ })
48
+ export class SlackRouteManagement extends GenesisElement {}
@@ -45,7 +45,17 @@ const DELETE_EVENT: Record<NotifyChannel, string> = {
45
45
  * A topic "supports" a channel when any route exists for that
46
46
  * TOPIC_MATCH + GATEWAY_ID (admin-configured marker rows, entity-blank).
47
47
  * A specific user has that channel enabled when a route additionally
48
- * exists scoped to ENTITY_ID_TYPE=USER_NAME, ENTITY_ID=<username>.
48
+ * exists scoped to ENTITY_ID_TYPE=SELF, ENTITY_ID=<username>.
49
+ *
50
+ * The per-user route is created with ENTITY_ID_TYPE=SELF (not USER_NAME) so
51
+ * delivery resolves to the notification's SENDER (the subscriber whose rule
52
+ * fired) rather than to a fixed named user. When several users subscribe to
53
+ * the same shared topic — each getting their own rule + route — a USER_NAME
54
+ * route makes every subscriber's rule deliver to every subscriber's route
55
+ * (an N×N fan-out: N alerts/emails per user). With SELF, each fired rule
56
+ * delivers only to its own owner, so delivery scales linearly (one per user).
57
+ * ENTITY_ID is still stored as the username purely as a per-user marker for
58
+ * subscribe idempotency / unsubscribe; the dispatcher ignores it for SELF.
49
59
  */
50
60
  export interface NotifyRouteService {
51
61
  getAllRoutes(channel: NotifyChannel): Promise<NotifyRoute[]>;
@@ -72,7 +82,7 @@ class NotifyRouteServiceImpl implements NotifyRouteService {
72
82
  topic: string,
73
83
  username: string,
74
84
  ): Promise<NotifyRoute | null> {
75
- const criteriaMatch = `TOPIC_MATCH == '${this.escape(topic)}' && ENTITY_ID == '${this.escape(username)}' && ENTITY_ID_TYPE == 'USER_NAME'`;
85
+ const criteriaMatch = `TOPIC_MATCH == '${this.escape(topic)}' && ENTITY_ID == '${this.escape(username)}' && ENTITY_ID_TYPE == 'SELF'`;
76
86
  const [route] = await this.queryRoutes(channel, criteriaMatch);
77
87
  return route ?? null;
78
88
  }
@@ -96,7 +106,10 @@ class NotifyRouteServiceImpl implements NotifyRouteService {
96
106
  GATEWAY_ID: GATEWAY_ID[channel],
97
107
  ROUTE_ENABLED: true,
98
108
  ENTITY_ID: username,
99
- ENTITY_ID_TYPE: 'USER_NAME',
109
+ // SELF (not USER_NAME): delivery resolves to the fired rule's SENDER (the
110
+ // subscriber), avoiding the N×N fan-out across co-subscribers of a shared
111
+ // topic. ENTITY_ID is kept as a per-user marker only; ignored for SELF.
112
+ ENTITY_ID_TYPE: 'SELF',
100
113
  EXCLUDE_SENDER: false,
101
114
  },
102
115
  IGNORE_WARNINGS: true,