@memberjunction/ng-dashboards 5.34.1 → 5.36.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/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +191 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +114 -99
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +51 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +46 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -0,0 +1,661 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component } from '@angular/core';
|
|
8
|
+
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
9
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
|
+
import { RunView } from '@memberjunction/core';
|
|
11
|
+
import { ActionEngineBase } from '@memberjunction/actions-base';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@memberjunction/ng-notifications";
|
|
14
|
+
import * as i2 from "@angular/forms";
|
|
15
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
16
|
+
import * as i4 from "@memberjunction/ng-list-management";
|
|
17
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
18
|
+
function CommunicationsNewMessageResource_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelement(0, "i", 16);
|
|
20
|
+
i0.ɵɵtext(1, " Previewing\u2026 ");
|
|
21
|
+
} }
|
|
22
|
+
function CommunicationsNewMessageResource_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelement(0, "i", 17);
|
|
24
|
+
i0.ɵɵtext(1, " Preview Audience ");
|
|
25
|
+
} }
|
|
26
|
+
function CommunicationsNewMessageResource_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
i0.ɵɵelement(0, "i", 16);
|
|
28
|
+
i0.ɵɵtext(1, " Sending\u2026 ");
|
|
29
|
+
} }
|
|
30
|
+
function CommunicationsNewMessageResource_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "i", 18);
|
|
32
|
+
i0.ɵɵtext(1, " Send ");
|
|
33
|
+
} }
|
|
34
|
+
function CommunicationsNewMessageResource_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelement(0, "mj-loading", 12);
|
|
36
|
+
} }
|
|
37
|
+
function CommunicationsNewMessageResource_Conditional_21_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "option", 21);
|
|
39
|
+
i0.ɵɵtext(1);
|
|
40
|
+
i0.ɵɵelementEnd();
|
|
41
|
+
} if (rf & 2) {
|
|
42
|
+
const p_r3 = ctx.$implicit;
|
|
43
|
+
i0.ɵɵproperty("ngValue", p_r3.ID);
|
|
44
|
+
i0.ɵɵadvance();
|
|
45
|
+
i0.ɵɵtextInterpolate(p_r3.Name);
|
|
46
|
+
} }
|
|
47
|
+
function CommunicationsNewMessageResource_Conditional_21_Conditional_7_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "option", 21);
|
|
49
|
+
i0.ɵɵtext(1);
|
|
50
|
+
i0.ɵɵelementEnd();
|
|
51
|
+
} if (rf & 2) {
|
|
52
|
+
const mt_r5 = ctx.$implicit;
|
|
53
|
+
i0.ɵɵproperty("ngValue", mt_r5.ID);
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵtextInterpolate(mt_r5.Name);
|
|
56
|
+
} }
|
|
57
|
+
function CommunicationsNewMessageResource_Conditional_21_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
59
|
+
i0.ɵɵelementStart(0, "label", 19);
|
|
60
|
+
i0.ɵɵtext(1, "Message type");
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
i0.ɵɵelementStart(2, "select", 20);
|
|
63
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Conditional_7_Template_select_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedMessageTypeID, $event) || (ctx_r1.selectedMessageTypeID = $event); return i0.ɵɵresetView($event); });
|
|
64
|
+
i0.ɵɵelementStart(3, "option", 21);
|
|
65
|
+
i0.ɵɵtext(4, "Select a message type\u2026");
|
|
66
|
+
i0.ɵɵelementEnd();
|
|
67
|
+
i0.ɵɵrepeaterCreate(5, CommunicationsNewMessageResource_Conditional_21_Conditional_7_For_6_Template, 2, 2, "option", 21, _forTrack0);
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
71
|
+
i0.ɵɵadvance(2);
|
|
72
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedMessageTypeID);
|
|
73
|
+
i0.ɵɵadvance();
|
|
74
|
+
i0.ɵɵproperty("ngValue", null);
|
|
75
|
+
i0.ɵɵadvance(2);
|
|
76
|
+
i0.ɵɵrepeater(ctx_r1.filteredMessageTypes);
|
|
77
|
+
} }
|
|
78
|
+
function CommunicationsNewMessageResource_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
80
|
+
i0.ɵɵelementStart(0, "label", 19);
|
|
81
|
+
i0.ɵɵtext(1, "Channel");
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
i0.ɵɵelementStart(2, "select", 20);
|
|
84
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Template_select_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedProviderID, $event) || (ctx_r1.selectedProviderID = $event); return i0.ɵɵresetView($event); });
|
|
85
|
+
i0.ɵɵlistener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Template_select_ngModelChange_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onProviderChange()); });
|
|
86
|
+
i0.ɵɵelementStart(3, "option", 21);
|
|
87
|
+
i0.ɵɵtext(4, "Select a channel\u2026");
|
|
88
|
+
i0.ɵɵelementEnd();
|
|
89
|
+
i0.ɵɵrepeaterCreate(5, CommunicationsNewMessageResource_Conditional_21_For_6_Template, 2, 2, "option", 21, _forTrack0);
|
|
90
|
+
i0.ɵɵelementEnd();
|
|
91
|
+
i0.ɵɵconditionalCreate(7, CommunicationsNewMessageResource_Conditional_21_Conditional_7_Template, 7, 2);
|
|
92
|
+
i0.ɵɵelementStart(8, "label", 19);
|
|
93
|
+
i0.ɵɵtext(9, "From");
|
|
94
|
+
i0.ɵɵelementEnd();
|
|
95
|
+
i0.ɵɵelementStart(10, "input", 22);
|
|
96
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.fromAddress, $event) || (ctx_r1.fromAddress = $event); return i0.ɵɵresetView($event); });
|
|
97
|
+
i0.ɵɵelementEnd();
|
|
98
|
+
i0.ɵɵelementStart(11, "label", 19);
|
|
99
|
+
i0.ɵɵtext(12, "Subject");
|
|
100
|
+
i0.ɵɵelementEnd();
|
|
101
|
+
i0.ɵɵelementStart(13, "input", 23);
|
|
102
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Template_input_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.subject, $event) || (ctx_r1.subject = $event); return i0.ɵɵresetView($event); });
|
|
103
|
+
i0.ɵɵelementEnd();
|
|
104
|
+
i0.ɵɵelementStart(14, "label", 19);
|
|
105
|
+
i0.ɵɵtext(15, "Body");
|
|
106
|
+
i0.ɵɵelementEnd();
|
|
107
|
+
i0.ɵɵelementStart(16, "textarea", 24);
|
|
108
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_21_Template_textarea_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.body, $event) || (ctx_r1.body = $event); return i0.ɵɵresetView($event); });
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
} if (rf & 2) {
|
|
111
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
112
|
+
i0.ɵɵadvance(2);
|
|
113
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedProviderID);
|
|
114
|
+
i0.ɵɵadvance();
|
|
115
|
+
i0.ɵɵproperty("ngValue", null);
|
|
116
|
+
i0.ɵɵadvance(2);
|
|
117
|
+
i0.ɵɵrepeater(ctx_r1.providers);
|
|
118
|
+
i0.ɵɵadvance(2);
|
|
119
|
+
i0.ɵɵconditional(ctx_r1.filteredMessageTypes.length > 0 ? 7 : -1);
|
|
120
|
+
i0.ɵɵadvance(3);
|
|
121
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.fromAddress);
|
|
122
|
+
i0.ɵɵadvance(3);
|
|
123
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.subject);
|
|
124
|
+
i0.ɵɵadvance(3);
|
|
125
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵinterpolate1("Hi ", "{{FirstName}}", ",..."));
|
|
126
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.body);
|
|
127
|
+
} }
|
|
128
|
+
function CommunicationsNewMessageResource_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
130
|
+
i0.ɵɵelementStart(0, "label", 25);
|
|
131
|
+
i0.ɵɵtext(1, "Recipient field");
|
|
132
|
+
i0.ɵɵelementEnd();
|
|
133
|
+
i0.ɵɵelementStart(2, "input", 26);
|
|
134
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationsNewMessageResource_Conditional_29_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.recipientField, $event) || (ctx_r1.recipientField = $event); return i0.ɵɵresetView($event); });
|
|
135
|
+
i0.ɵɵelementEnd();
|
|
136
|
+
i0.ɵɵelementStart(3, "p", 27);
|
|
137
|
+
i0.ɵɵtext(4, " Field on the audience entity that holds the recipient address. Records with no value will be skipped. ");
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
} if (rf & 2) {
|
|
140
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
141
|
+
i0.ɵɵadvance(2);
|
|
142
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.recipientField);
|
|
143
|
+
} }
|
|
144
|
+
function CommunicationsNewMessageResource_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "span", 30);
|
|
146
|
+
i0.ɵɵtext(2);
|
|
147
|
+
i0.ɵɵelementEnd();
|
|
148
|
+
i0.ɵɵelementStart(3, "span", 31);
|
|
149
|
+
i0.ɵɵtext(4);
|
|
150
|
+
i0.ɵɵelementEnd()();
|
|
151
|
+
} if (rf & 2) {
|
|
152
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
153
|
+
i0.ɵɵadvance(2);
|
|
154
|
+
i0.ɵɵtextInterpolate1("Skipped (missing ", ctx_r1.recipientField || "recipient", ")");
|
|
155
|
+
i0.ɵɵadvance(2);
|
|
156
|
+
i0.ɵɵtextInterpolate(ctx_r1.audienceSummary.SkippedCount);
|
|
157
|
+
} }
|
|
158
|
+
function CommunicationsNewMessageResource_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 29)(2, "span", 30);
|
|
160
|
+
i0.ɵɵtext(3, "Total audience");
|
|
161
|
+
i0.ɵɵelementEnd();
|
|
162
|
+
i0.ɵɵelementStart(4, "span", 31);
|
|
163
|
+
i0.ɵɵtext(5);
|
|
164
|
+
i0.ɵɵelementEnd()();
|
|
165
|
+
i0.ɵɵelementStart(6, "div", 32)(7, "span", 30);
|
|
166
|
+
i0.ɵɵtext(8, "Will receive");
|
|
167
|
+
i0.ɵɵelementEnd();
|
|
168
|
+
i0.ɵɵelementStart(9, "span", 31);
|
|
169
|
+
i0.ɵɵtext(10);
|
|
170
|
+
i0.ɵɵelementEnd()();
|
|
171
|
+
i0.ɵɵconditionalCreate(11, CommunicationsNewMessageResource_Conditional_30_Conditional_11_Template, 5, 2, "div", 33);
|
|
172
|
+
i0.ɵɵelementStart(12, "div", 34)(13, "span", 30);
|
|
173
|
+
i0.ɵɵtext(14, "Entity");
|
|
174
|
+
i0.ɵɵelementEnd();
|
|
175
|
+
i0.ɵɵelementStart(15, "span", 31);
|
|
176
|
+
i0.ɵɵtext(16);
|
|
177
|
+
i0.ɵɵelementEnd()()();
|
|
178
|
+
} if (rf & 2) {
|
|
179
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
180
|
+
i0.ɵɵclassProp("summary-block--has-skips", ctx_r1.audienceSummary.SkippedCount > 0);
|
|
181
|
+
i0.ɵɵadvance(5);
|
|
182
|
+
i0.ɵɵtextInterpolate(ctx_r1.audienceSummary.TotalAudienceSize);
|
|
183
|
+
i0.ɵɵadvance(5);
|
|
184
|
+
i0.ɵɵtextInterpolate(ctx_r1.audienceSummary.WillReceiveCount);
|
|
185
|
+
i0.ɵɵadvance();
|
|
186
|
+
i0.ɵɵconditional(ctx_r1.audienceSummary.SkippedCount > 0 ? 11 : -1);
|
|
187
|
+
i0.ɵɵadvance(5);
|
|
188
|
+
i0.ɵɵtextInterpolate(ctx_r1.audienceSummary.EntityName);
|
|
189
|
+
} }
|
|
190
|
+
let CommunicationsNewMessageResource = class CommunicationsNewMessageResource extends BaseResourceComponent {
|
|
191
|
+
cdr;
|
|
192
|
+
notificationService;
|
|
193
|
+
// BaseResourceComponent already exposes a protected `destroy$` Subject.
|
|
194
|
+
// Don't re-declare it here — the import is kept only for the rxjs type.
|
|
195
|
+
// (See base class comment.)
|
|
196
|
+
// Local lifecycle goes through super.ngOnDestroy().
|
|
197
|
+
// Channel state
|
|
198
|
+
loadingProviders = true;
|
|
199
|
+
providers = [];
|
|
200
|
+
messageTypes = [];
|
|
201
|
+
selectedProviderID = null;
|
|
202
|
+
selectedMessageTypeID = null;
|
|
203
|
+
// Message state
|
|
204
|
+
fromAddress = '';
|
|
205
|
+
subject = '';
|
|
206
|
+
body = '';
|
|
207
|
+
// Audience state
|
|
208
|
+
audienceSource = null;
|
|
209
|
+
recipientField = '';
|
|
210
|
+
audienceSummary = null;
|
|
211
|
+
// Action IDs — looked up lazily on first use to avoid an extra RunView
|
|
212
|
+
// on every page open. Cached for the session.
|
|
213
|
+
resolveAudienceActionID = null;
|
|
214
|
+
sendToAudienceActionID = null;
|
|
215
|
+
isResolvingAudience = false;
|
|
216
|
+
isSending = false;
|
|
217
|
+
constructor(cdr, notificationService) {
|
|
218
|
+
super();
|
|
219
|
+
this.cdr = cdr;
|
|
220
|
+
this.notificationService = notificationService;
|
|
221
|
+
}
|
|
222
|
+
async ngOnInit() {
|
|
223
|
+
super.ngOnInit();
|
|
224
|
+
await this.loadChannelMetadata();
|
|
225
|
+
this.NotifyLoadComplete();
|
|
226
|
+
}
|
|
227
|
+
ngOnDestroy() {
|
|
228
|
+
super.ngOnDestroy();
|
|
229
|
+
}
|
|
230
|
+
get filteredMessageTypes() {
|
|
231
|
+
if (!this.selectedProviderID)
|
|
232
|
+
return [];
|
|
233
|
+
return this.messageTypes.filter((mt) => mt.CommunicationProviderID === this.selectedProviderID);
|
|
234
|
+
}
|
|
235
|
+
get selectedProvider() {
|
|
236
|
+
return this.providers.find((p) => UUIDsEqual(p.ID, this.selectedProviderID)) ?? null;
|
|
237
|
+
}
|
|
238
|
+
get selectedMessageType() {
|
|
239
|
+
return this.messageTypes.find((mt) => UUIDsEqual(mt.ID, this.selectedMessageTypeID)) ?? null;
|
|
240
|
+
}
|
|
241
|
+
get canPreview() {
|
|
242
|
+
return !!this.audienceSource && this.recipientField.trim().length > 0;
|
|
243
|
+
}
|
|
244
|
+
get canSend() {
|
|
245
|
+
return this.canPreview
|
|
246
|
+
&& !!this.selectedProviderID
|
|
247
|
+
&& !!this.selectedMessageTypeID
|
|
248
|
+
&& this.fromAddress.trim().length > 0;
|
|
249
|
+
}
|
|
250
|
+
onProviderChange() {
|
|
251
|
+
this.selectedMessageTypeID = null;
|
|
252
|
+
}
|
|
253
|
+
onAudienceSourceChange(source) {
|
|
254
|
+
this.audienceSource = source;
|
|
255
|
+
this.audienceSummary = null;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Preview the audience without sending — calls "Send To Audience" with
|
|
259
|
+
* PreviewOnly=true. Surfaces the same total/will-receive/skipped tile
|
|
260
|
+
* mockup 21 shows. Cheaper than `Resolve Audience` for our purposes
|
|
261
|
+
* because it also evaluates the recipient-field skip rule.
|
|
262
|
+
*/
|
|
263
|
+
async onPreviewAudience() {
|
|
264
|
+
if (!this.canPreview)
|
|
265
|
+
return;
|
|
266
|
+
this.isResolvingAudience = true;
|
|
267
|
+
this.audienceSummary = null;
|
|
268
|
+
this.cdr.detectChanges();
|
|
269
|
+
try {
|
|
270
|
+
const actionID = await this.getSendToAudienceActionID();
|
|
271
|
+
if (!actionID) {
|
|
272
|
+
this.notificationService.CreateSimpleNotification("Couldn't find the 'Send To Audience' action — make sure CodeGen has run.", 'error', 5000);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const result = await this.invokeAction(actionID, {
|
|
276
|
+
Source: JSON.stringify(this.audienceSource),
|
|
277
|
+
RecipientField: this.recipientField.trim(),
|
|
278
|
+
ProviderName: this.selectedProvider?.Name ?? 'Preview',
|
|
279
|
+
ProviderMessageTypeName: this.selectedMessageType?.Name ?? 'Preview',
|
|
280
|
+
From: this.fromAddress || 'preview@local',
|
|
281
|
+
Subject: this.subject,
|
|
282
|
+
Body: this.body,
|
|
283
|
+
PreviewOnly: 'true',
|
|
284
|
+
});
|
|
285
|
+
const data = this.parseResultData(result);
|
|
286
|
+
this.audienceSummary = {
|
|
287
|
+
TotalAudienceSize: this.coerceNumber(data['TotalAudienceSize']),
|
|
288
|
+
WillReceiveCount: this.coerceNumber(data['WillReceiveCount']),
|
|
289
|
+
SkippedCount: this.coerceNumber(data['SkippedCount']),
|
|
290
|
+
EntityName: this.audienceSource ? this.describeSource(this.audienceSource) : '',
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
295
|
+
this.notificationService.CreateSimpleNotification(`Preview failed: ${message}`, 'error', 5000);
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
this.isResolvingAudience = false;
|
|
299
|
+
this.cdr.detectChanges();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
async onSend() {
|
|
303
|
+
if (!this.canSend)
|
|
304
|
+
return;
|
|
305
|
+
this.isSending = true;
|
|
306
|
+
this.cdr.detectChanges();
|
|
307
|
+
try {
|
|
308
|
+
const actionID = await this.getSendToAudienceActionID();
|
|
309
|
+
if (!actionID) {
|
|
310
|
+
this.notificationService.CreateSimpleNotification("Couldn't find the 'Send To Audience' action — make sure CodeGen has run.", 'error', 5000);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const result = await this.invokeAction(actionID, {
|
|
314
|
+
Source: JSON.stringify(this.audienceSource),
|
|
315
|
+
RecipientField: this.recipientField.trim(),
|
|
316
|
+
ProviderName: this.selectedProvider.Name,
|
|
317
|
+
ProviderMessageTypeName: this.selectedMessageType.Name,
|
|
318
|
+
From: this.fromAddress,
|
|
319
|
+
Subject: this.subject,
|
|
320
|
+
Body: this.body,
|
|
321
|
+
PreviewOnly: 'false',
|
|
322
|
+
});
|
|
323
|
+
const data = this.parseResultData(result);
|
|
324
|
+
const sent = this.coerceNumber(data['WillReceiveCount']) - this.coerceNumber(data['FailedCount']);
|
|
325
|
+
const failed = this.coerceNumber(data['FailedCount']);
|
|
326
|
+
const skipped = this.coerceNumber(data['SkippedCount']);
|
|
327
|
+
const okOverall = result.Success === true && failed === 0;
|
|
328
|
+
this.notificationService.CreateSimpleNotification(okOverall
|
|
329
|
+
? `Sent ${sent} message(s)${skipped > 0 ? ` (${skipped} skipped)` : ''}`
|
|
330
|
+
: `Sent with errors: ${sent} sent, ${failed} failed, ${skipped} skipped`, okOverall ? 'success' : 'warning', okOverall ? 3000 : 7000);
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
334
|
+
this.notificationService.CreateSimpleNotification(`Send failed: ${message}`, 'error', 5000);
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
this.isSending = false;
|
|
338
|
+
this.cdr.detectChanges();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// -----------------------------------------------------------------
|
|
342
|
+
// Internals
|
|
343
|
+
// -----------------------------------------------------------------
|
|
344
|
+
/**
|
|
345
|
+
* One RunView pair on init: providers + their message types. Cached on
|
|
346
|
+
* the component for the session — we don't go back to the DB on every
|
|
347
|
+
* channel selection. Use RunViews (plural) so it's a single round trip.
|
|
348
|
+
*/
|
|
349
|
+
async loadChannelMetadata() {
|
|
350
|
+
this.loadingProviders = true;
|
|
351
|
+
try {
|
|
352
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
353
|
+
const [providersResult, messageTypesResult] = await rv.RunViews([
|
|
354
|
+
{
|
|
355
|
+
EntityName: 'MJ: Communication Providers',
|
|
356
|
+
ExtraFilter: "Status='Active'",
|
|
357
|
+
OrderBy: 'Name',
|
|
358
|
+
ResultType: 'simple',
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
EntityName: 'MJ: Communication Provider Message Types',
|
|
362
|
+
ExtraFilter: "Status='Active'",
|
|
363
|
+
OrderBy: 'Name',
|
|
364
|
+
ResultType: 'simple',
|
|
365
|
+
},
|
|
366
|
+
]);
|
|
367
|
+
this.providers = (providersResult.Success ? providersResult.Results ?? [] : []);
|
|
368
|
+
this.messageTypes = (messageTypesResult.Success ? messageTypesResult.Results ?? [] : []);
|
|
369
|
+
}
|
|
370
|
+
catch (e) {
|
|
371
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
372
|
+
this.notificationService.CreateSimpleNotification(`Failed to load channels: ${message}`, 'error', 5000);
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
this.loadingProviders = false;
|
|
376
|
+
this.cdr.detectChanges();
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
async getSendToAudienceActionID() {
|
|
380
|
+
if (this.sendToAudienceActionID)
|
|
381
|
+
return this.sendToAudienceActionID;
|
|
382
|
+
// Read from the cached ActionEngineBase singleton rather than a
|
|
383
|
+
// fresh RunView. Config() is idempotent — short-circuits if the
|
|
384
|
+
// engine has already loaded — so calling it on every Preview/Send
|
|
385
|
+
// is effectively free after the first invocation.
|
|
386
|
+
const engine = ActionEngineBase.Instance;
|
|
387
|
+
await engine.Config(false, this.ProviderToUse.CurrentUser, this.ProviderToUse);
|
|
388
|
+
const match = engine.Actions?.find((a) => a.Name === 'Send To Audience');
|
|
389
|
+
this.sendToAudienceActionID = match?.ID ?? null;
|
|
390
|
+
return this.sendToAudienceActionID;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Invoke an Action via the RunAction GraphQL mutation. Same pattern as
|
|
394
|
+
* the Action Test Harness — kept inline here so the resource component
|
|
395
|
+
* stays self-contained.
|
|
396
|
+
*/
|
|
397
|
+
async invokeAction(actionID, params) {
|
|
398
|
+
const provider = this.ProviderToUse;
|
|
399
|
+
const query = `
|
|
400
|
+
mutation RunAction($input: RunActionInput!) {
|
|
401
|
+
RunAction(input: $input) {
|
|
402
|
+
Success
|
|
403
|
+
Message
|
|
404
|
+
ResultCode
|
|
405
|
+
ResultData
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
`;
|
|
409
|
+
const actionParams = Object.entries(params).map(([Name, Value]) => ({
|
|
410
|
+
Name, Value, Type: 'string',
|
|
411
|
+
}));
|
|
412
|
+
const variables = { input: { ActionID: actionID, Params: actionParams, SkipActionLog: false } };
|
|
413
|
+
const gqlResult = await provider.ExecuteGQL(query, variables);
|
|
414
|
+
if (!gqlResult?.RunAction) {
|
|
415
|
+
throw new Error('RunAction returned no result');
|
|
416
|
+
}
|
|
417
|
+
return gqlResult.RunAction;
|
|
418
|
+
}
|
|
419
|
+
parseResultData(result) {
|
|
420
|
+
if (!result.ResultData)
|
|
421
|
+
return {};
|
|
422
|
+
try {
|
|
423
|
+
const parsed = JSON.parse(result.ResultData);
|
|
424
|
+
// RunAction returns either an object or an array of {Name,Value}.
|
|
425
|
+
if (Array.isArray(parsed)) {
|
|
426
|
+
const out = {};
|
|
427
|
+
for (const item of parsed) {
|
|
428
|
+
if (item && typeof item === 'object' && 'Name' in item && 'Value' in item) {
|
|
429
|
+
out[String(item.Name)] = item.Value;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return out;
|
|
433
|
+
}
|
|
434
|
+
return parsed;
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return {};
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
coerceNumber(v) {
|
|
441
|
+
if (typeof v === 'number')
|
|
442
|
+
return v;
|
|
443
|
+
if (typeof v === 'string') {
|
|
444
|
+
const n = Number(v);
|
|
445
|
+
return isNaN(n) ? 0 : n;
|
|
446
|
+
}
|
|
447
|
+
return 0;
|
|
448
|
+
}
|
|
449
|
+
describeSource(s) {
|
|
450
|
+
switch (s.kind) {
|
|
451
|
+
case 'list': return 'List';
|
|
452
|
+
case 'view': return 'User View';
|
|
453
|
+
case 'adhoc': return s.entityName;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
async GetResourceDisplayName(_data) { return 'New Communication'; }
|
|
457
|
+
async GetResourceIconClass(_data) { return 'fa-solid fa-pen-to-square'; }
|
|
458
|
+
static ɵfac = function CommunicationsNewMessageResource_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CommunicationsNewMessageResource)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.MJNotificationService)); };
|
|
459
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CommunicationsNewMessageResource, selectors: [["mj-communications-new-message-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 31, vars: 9, consts: [[1, "new-message-resource"], [1, "page-header"], [1, "title-block"], [1, "fa-solid", "fa-message"], [1, "header-actions"], [1, "action-btn", 3, "click", "disabled"], [1, "action-btn", "action-btn--primary", 3, "click", "disabled"], [1, "layout-grid"], [1, "panel"], [1, "panel-header"], [1, "fa-solid", "fa-envelope"], [1, "panel-body"], ["text", "Loading channels...", "size", "small"], [1, "fa-solid", "fa-bullseye"], [3, "SourceChange", "Provider", "Source"], [1, "summary-block", 3, "summary-block--has-skips"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-eye"], [1, "fa-solid", "fa-paper-plane"], [1, "field-label"], [1, "mj-input", "mj-select", 3, "ngModelChange", "ngModel"], [3, "ngValue"], ["type", "text", "placeholder", "sender@example.com", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Message subject", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["rows", "10", 1, "mj-input", "mj-textarea", 3, "ngModelChange", "ngModel", "placeholder"], [1, "field-label", "field-label--spaced"], ["type", "text", "placeholder", "e.g. Email", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "field-hint"], [1, "summary-block"], [1, "summary-row"], [1, "summary-label"], [1, "summary-value"], [1, "summary-row", "summary-row--will-receive"], [1, "summary-row", "summary-row--skipped"], [1, "summary-row", "summary-row--entity"]], template: function CommunicationsNewMessageResource_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
461
|
+
i0.ɵɵelement(3, "i", 3);
|
|
462
|
+
i0.ɵɵelementStart(4, "h2");
|
|
463
|
+
i0.ɵɵtext(5, "New Communication");
|
|
464
|
+
i0.ɵɵelementEnd()();
|
|
465
|
+
i0.ɵɵelementStart(6, "div", 4)(7, "button", 5);
|
|
466
|
+
i0.ɵɵlistener("click", function CommunicationsNewMessageResource_Template_button_click_7_listener() { return ctx.onPreviewAudience(); });
|
|
467
|
+
i0.ɵɵconditionalCreate(8, CommunicationsNewMessageResource_Conditional_8_Template, 2, 0)(9, CommunicationsNewMessageResource_Conditional_9_Template, 2, 0);
|
|
468
|
+
i0.ɵɵelementEnd();
|
|
469
|
+
i0.ɵɵelementStart(10, "button", 6);
|
|
470
|
+
i0.ɵɵlistener("click", function CommunicationsNewMessageResource_Template_button_click_10_listener() { return ctx.onSend(); });
|
|
471
|
+
i0.ɵɵconditionalCreate(11, CommunicationsNewMessageResource_Conditional_11_Template, 2, 0)(12, CommunicationsNewMessageResource_Conditional_12_Template, 2, 0);
|
|
472
|
+
i0.ɵɵelementEnd()()();
|
|
473
|
+
i0.ɵɵelementStart(13, "div", 7)(14, "div", 8)(15, "div", 9);
|
|
474
|
+
i0.ɵɵelement(16, "i", 10);
|
|
475
|
+
i0.ɵɵelementStart(17, "h3");
|
|
476
|
+
i0.ɵɵtext(18, "Message");
|
|
477
|
+
i0.ɵɵelementEnd()();
|
|
478
|
+
i0.ɵɵelementStart(19, "div", 11);
|
|
479
|
+
i0.ɵɵconditionalCreate(20, CommunicationsNewMessageResource_Conditional_20_Template, 1, 0, "mj-loading", 12)(21, CommunicationsNewMessageResource_Conditional_21_Template, 17, 8);
|
|
480
|
+
i0.ɵɵelementEnd()();
|
|
481
|
+
i0.ɵɵelementStart(22, "div", 8)(23, "div", 9);
|
|
482
|
+
i0.ɵɵelement(24, "i", 13);
|
|
483
|
+
i0.ɵɵelementStart(25, "h3");
|
|
484
|
+
i0.ɵɵtext(26, "Audience");
|
|
485
|
+
i0.ɵɵelementEnd()();
|
|
486
|
+
i0.ɵɵelementStart(27, "div", 11)(28, "mj-audience-source-picker", 14);
|
|
487
|
+
i0.ɵɵlistener("SourceChange", function CommunicationsNewMessageResource_Template_mj_audience_source_picker_SourceChange_28_listener($event) { return ctx.onAudienceSourceChange($event); });
|
|
488
|
+
i0.ɵɵelementEnd();
|
|
489
|
+
i0.ɵɵconditionalCreate(29, CommunicationsNewMessageResource_Conditional_29_Template, 5, 1);
|
|
490
|
+
i0.ɵɵconditionalCreate(30, CommunicationsNewMessageResource_Conditional_30_Template, 17, 6, "div", 15);
|
|
491
|
+
i0.ɵɵelementEnd()()()();
|
|
492
|
+
} if (rf & 2) {
|
|
493
|
+
i0.ɵɵadvance(7);
|
|
494
|
+
i0.ɵɵproperty("disabled", !ctx.canPreview || ctx.isResolvingAudience || ctx.isSending);
|
|
495
|
+
i0.ɵɵadvance();
|
|
496
|
+
i0.ɵɵconditional(ctx.isResolvingAudience ? 8 : 9);
|
|
497
|
+
i0.ɵɵadvance(2);
|
|
498
|
+
i0.ɵɵproperty("disabled", !ctx.canSend || ctx.isResolvingAudience || ctx.isSending);
|
|
499
|
+
i0.ɵɵadvance();
|
|
500
|
+
i0.ɵɵconditional(ctx.isSending ? 11 : 12);
|
|
501
|
+
i0.ɵɵadvance(9);
|
|
502
|
+
i0.ɵɵconditional(ctx.loadingProviders ? 20 : 21);
|
|
503
|
+
i0.ɵɵadvance(8);
|
|
504
|
+
i0.ɵɵproperty("Provider", ctx.Provider)("Source", ctx.audienceSource);
|
|
505
|
+
i0.ɵɵadvance();
|
|
506
|
+
i0.ɵɵconditional(ctx.audienceSource ? 29 : -1);
|
|
507
|
+
i0.ɵɵadvance();
|
|
508
|
+
i0.ɵɵconditional(ctx.audienceSummary ? 30 : -1);
|
|
509
|
+
} }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.AudienceSourcePickerComponent], styles: [".new-message-resource[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px 24px;\n height: 100%;\n overflow: auto;\n }\n .page-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n }\n .title-block[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 12px; }\n .title-block[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; color: var(--mj-brand-primary); }\n .title-block[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-primary); }\n .header-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n .action-btn[_ngcontent-%COMP%] {\n padding: 8px 14px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .action-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n }\n .action-btn[_ngcontent-%COMP%]:disabled { opacity: 0.55; cursor: not-allowed; }\n .action-btn--primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n }\n .action-btn--primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .layout-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 16px;\n align-items: start;\n }\n @media (max-width: 1024px) {\n .layout-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }\n\n .panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n }\n .panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n .panel-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n .panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-body[_ngcontent-%COMP%] { padding: 16px; }\n\n .field-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin: 12px 0 6px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n }\n .field-label--spaced[_ngcontent-%COMP%] { margin-top: 20px; }\n .field-hint[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin: 6px 0 0;\n }\n\n .summary-block[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n .summary-block--has-skips[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n background: color-mix(in srgb, var(--mj-status-warning) 6%, var(--mj-bg-surface-card));\n }\n .summary-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n font-size: 13px;\n padding: 4px 0;\n }\n .summary-row[_ngcontent-%COMP%] + .summary-row[_ngcontent-%COMP%] { border-top: 1px solid var(--mj-border-subtle); }\n .summary-label[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n .summary-value[_ngcontent-%COMP%] { font-weight: 600; color: var(--mj-text-primary); }\n .summary-row--will-receive[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n .summary-row--skipped[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n .summary-row--entity[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%], \n .summary-row--entity[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }"] });
|
|
510
|
+
};
|
|
511
|
+
CommunicationsNewMessageResource = __decorate([
|
|
512
|
+
RegisterClass(BaseResourceComponent, 'CommunicationsNewMessageResource')
|
|
513
|
+
], CommunicationsNewMessageResource);
|
|
514
|
+
export { CommunicationsNewMessageResource };
|
|
515
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommunicationsNewMessageResource, [{
|
|
516
|
+
type: Component,
|
|
517
|
+
args: [{ standalone: false, selector: 'mj-communications-new-message-resource', template: `
|
|
518
|
+
<div class="new-message-resource">
|
|
519
|
+
<div class="page-header">
|
|
520
|
+
<div class="title-block">
|
|
521
|
+
<i class="fa-solid fa-message"></i>
|
|
522
|
+
<h2>New Communication</h2>
|
|
523
|
+
</div>
|
|
524
|
+
<div class="header-actions">
|
|
525
|
+
<button
|
|
526
|
+
class="action-btn"
|
|
527
|
+
(click)="onPreviewAudience()"
|
|
528
|
+
[disabled]="!canPreview || isResolvingAudience || isSending">
|
|
529
|
+
@if (isResolvingAudience) {
|
|
530
|
+
<i class="fa-solid fa-spinner fa-spin"></i> Previewing…
|
|
531
|
+
} @else {
|
|
532
|
+
<i class="fa-solid fa-eye"></i> Preview Audience
|
|
533
|
+
}
|
|
534
|
+
</button>
|
|
535
|
+
<button
|
|
536
|
+
class="action-btn action-btn--primary"
|
|
537
|
+
(click)="onSend()"
|
|
538
|
+
[disabled]="!canSend || isResolvingAudience || isSending">
|
|
539
|
+
@if (isSending) {
|
|
540
|
+
<i class="fa-solid fa-spinner fa-spin"></i> Sending…
|
|
541
|
+
} @else {
|
|
542
|
+
<i class="fa-solid fa-paper-plane"></i> Send
|
|
543
|
+
}
|
|
544
|
+
</button>
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
|
|
548
|
+
<div class="layout-grid">
|
|
549
|
+
<!-- Message panel -->
|
|
550
|
+
<div class="panel">
|
|
551
|
+
<div class="panel-header">
|
|
552
|
+
<i class="fa-solid fa-envelope"></i>
|
|
553
|
+
<h3>Message</h3>
|
|
554
|
+
</div>
|
|
555
|
+
<div class="panel-body">
|
|
556
|
+
@if (loadingProviders) {
|
|
557
|
+
<mj-loading text="Loading channels..." size="small"></mj-loading>
|
|
558
|
+
} @else {
|
|
559
|
+
<label class="field-label">Channel</label>
|
|
560
|
+
<select
|
|
561
|
+
class="mj-input mj-select"
|
|
562
|
+
[(ngModel)]="selectedProviderID"
|
|
563
|
+
(ngModelChange)="onProviderChange()">
|
|
564
|
+
<option [ngValue]="null">Select a channel…</option>
|
|
565
|
+
@for (p of providers; track p.ID) {
|
|
566
|
+
<option [ngValue]="p.ID">{{ p.Name }}</option>
|
|
567
|
+
}
|
|
568
|
+
</select>
|
|
569
|
+
|
|
570
|
+
@if (filteredMessageTypes.length > 0) {
|
|
571
|
+
<label class="field-label">Message type</label>
|
|
572
|
+
<select class="mj-input mj-select" [(ngModel)]="selectedMessageTypeID">
|
|
573
|
+
<option [ngValue]="null">Select a message type…</option>
|
|
574
|
+
@for (mt of filteredMessageTypes; track mt.ID) {
|
|
575
|
+
<option [ngValue]="mt.ID">{{ mt.Name }}</option>
|
|
576
|
+
}
|
|
577
|
+
</select>
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
<label class="field-label">From</label>
|
|
581
|
+
<input
|
|
582
|
+
class="mj-input"
|
|
583
|
+
type="text"
|
|
584
|
+
[(ngModel)]="fromAddress"
|
|
585
|
+
placeholder="sender@example.com" />
|
|
586
|
+
|
|
587
|
+
<label class="field-label">Subject</label>
|
|
588
|
+
<input
|
|
589
|
+
class="mj-input"
|
|
590
|
+
type="text"
|
|
591
|
+
[(ngModel)]="subject"
|
|
592
|
+
placeholder="Message subject" />
|
|
593
|
+
|
|
594
|
+
<label class="field-label">Body</label>
|
|
595
|
+
<textarea
|
|
596
|
+
class="mj-input mj-textarea"
|
|
597
|
+
[(ngModel)]="body"
|
|
598
|
+
rows="10"
|
|
599
|
+
placeholder="Hi {{ '{{FirstName}}' }},..."></textarea>
|
|
600
|
+
}
|
|
601
|
+
</div>
|
|
602
|
+
</div>
|
|
603
|
+
|
|
604
|
+
<!-- Audience panel -->
|
|
605
|
+
<div class="panel">
|
|
606
|
+
<div class="panel-header">
|
|
607
|
+
<i class="fa-solid fa-bullseye"></i>
|
|
608
|
+
<h3>Audience</h3>
|
|
609
|
+
</div>
|
|
610
|
+
<div class="panel-body">
|
|
611
|
+
<mj-audience-source-picker
|
|
612
|
+
[Provider]="Provider"
|
|
613
|
+
[Source]="audienceSource"
|
|
614
|
+
(SourceChange)="onAudienceSourceChange($event)">
|
|
615
|
+
</mj-audience-source-picker>
|
|
616
|
+
|
|
617
|
+
@if (audienceSource) {
|
|
618
|
+
<label class="field-label field-label--spaced">Recipient field</label>
|
|
619
|
+
<input
|
|
620
|
+
class="mj-input"
|
|
621
|
+
type="text"
|
|
622
|
+
[(ngModel)]="recipientField"
|
|
623
|
+
placeholder="e.g. Email" />
|
|
624
|
+
<p class="field-hint">
|
|
625
|
+
Field on the audience entity that holds the recipient address.
|
|
626
|
+
Records with no value will be skipped.
|
|
627
|
+
</p>
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
@if (audienceSummary) {
|
|
631
|
+
<div class="summary-block" [class.summary-block--has-skips]="audienceSummary.SkippedCount > 0">
|
|
632
|
+
<div class="summary-row">
|
|
633
|
+
<span class="summary-label">Total audience</span>
|
|
634
|
+
<span class="summary-value">{{ audienceSummary.TotalAudienceSize }}</span>
|
|
635
|
+
</div>
|
|
636
|
+
<div class="summary-row summary-row--will-receive">
|
|
637
|
+
<span class="summary-label">Will receive</span>
|
|
638
|
+
<span class="summary-value">{{ audienceSummary.WillReceiveCount }}</span>
|
|
639
|
+
</div>
|
|
640
|
+
@if (audienceSummary.SkippedCount > 0) {
|
|
641
|
+
<div class="summary-row summary-row--skipped">
|
|
642
|
+
<span class="summary-label">Skipped (missing {{ recipientField || 'recipient' }})</span>
|
|
643
|
+
<span class="summary-value">{{ audienceSummary.SkippedCount }}</span>
|
|
644
|
+
</div>
|
|
645
|
+
}
|
|
646
|
+
<div class="summary-row summary-row--entity">
|
|
647
|
+
<span class="summary-label">Entity</span>
|
|
648
|
+
<span class="summary-value">{{ audienceSummary.EntityName }}</span>
|
|
649
|
+
</div>
|
|
650
|
+
</div>
|
|
651
|
+
}
|
|
652
|
+
</div>
|
|
653
|
+
</div>
|
|
654
|
+
</div>
|
|
655
|
+
</div>
|
|
656
|
+
`, styles: ["\n .new-message-resource {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px 24px;\n height: 100%;\n overflow: auto;\n }\n .page-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n }\n .title-block { display: flex; align-items: center; gap: 12px; }\n .title-block i { font-size: 20px; color: var(--mj-brand-primary); }\n .title-block h2 { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-primary); }\n .header-actions { display: flex; gap: 8px; }\n .action-btn {\n padding: 8px 14px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .action-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n }\n .action-btn:disabled { opacity: 0.55; cursor: not-allowed; }\n .action-btn--primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n }\n .action-btn--primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .layout-grid {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 16px;\n align-items: start;\n }\n @media (max-width: 1024px) {\n .layout-grid { grid-template-columns: 1fr; }\n }\n\n .panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n }\n .panel-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n .panel-header i { color: var(--mj-text-secondary); }\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-body { padding: 16px; }\n\n .field-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin: 12px 0 6px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n }\n .field-label--spaced { margin-top: 20px; }\n .field-hint {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin: 6px 0 0;\n }\n\n .summary-block {\n margin-top: 20px;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n .summary-block--has-skips {\n border-color: var(--mj-status-warning);\n background: color-mix(in srgb, var(--mj-status-warning) 6%, var(--mj-bg-surface-card));\n }\n .summary-row {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n font-size: 13px;\n padding: 4px 0;\n }\n .summary-row + .summary-row { border-top: 1px solid var(--mj-border-subtle); }\n .summary-label { color: var(--mj-text-secondary); }\n .summary-value { font-weight: 600; color: var(--mj-text-primary); }\n .summary-row--will-receive .summary-value { color: var(--mj-status-success); }\n .summary-row--skipped .summary-value { color: var(--mj-status-warning); }\n .summary-row--entity .summary-label,\n .summary-row--entity .summary-value {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n "] }]
|
|
657
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.MJNotificationService }], null); })();
|
|
658
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CommunicationsNewMessageResource, { className: "CommunicationsNewMessageResource", filePath: "src/Communication/communication-new-message-resource.component.ts", lineNumber: 311 }); })();
|
|
659
|
+
/** Tree-shaking prevention */
|
|
660
|
+
export function LoadCommunicationsNewMessageResource() { }
|
|
661
|
+
//# sourceMappingURL=communication-new-message-resource.component.js.map
|