@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.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.
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +387 -107
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
- package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
- package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +494 -138
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +664 -208
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +429 -109
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +110 -4
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +858 -86
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +333 -113
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +549 -169
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.js +5 -1
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Users/user-overview.panel.js +2 -2
- package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +322 -124
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +43 -42
|
@@ -1355,46 +1355,46 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1355
1355
|
super(...arguments);
|
|
1356
1356
|
this.destroy$ = new Subject();
|
|
1357
1357
|
// UI state
|
|
1358
|
-
this.
|
|
1359
|
-
this.
|
|
1360
|
-
this.
|
|
1361
|
-
this.
|
|
1358
|
+
this.ActiveTab = 'overview';
|
|
1359
|
+
this.Loading = false;
|
|
1360
|
+
this.LoadingTestRuns = false;
|
|
1361
|
+
this.LoadingFeedbacks = false;
|
|
1362
1362
|
this.error = null;
|
|
1363
|
-
this.
|
|
1364
|
-
this.
|
|
1365
|
-
this.isRefreshing = false;
|
|
1366
|
-
this.
|
|
1363
|
+
this.TestRunsLoaded = false;
|
|
1364
|
+
this.FeedbacksLoaded = false;
|
|
1365
|
+
this.isRefreshing = false; // case-violation-ok-legacy-back-compat: an ancestor class already declares the PascalCase name
|
|
1366
|
+
this.AutoRefreshEnabled = false;
|
|
1367
1367
|
// Related entities
|
|
1368
|
-
this.
|
|
1369
|
-
this.
|
|
1370
|
-
this.
|
|
1368
|
+
this.TestSuite = null;
|
|
1369
|
+
this.TestRuns = [];
|
|
1370
|
+
this.Feedbacks = new Map();
|
|
1371
1371
|
// Tags
|
|
1372
1372
|
this.tags = [];
|
|
1373
|
-
this.
|
|
1374
|
-
this.
|
|
1375
|
-
this.
|
|
1373
|
+
this.NewTag = '';
|
|
1374
|
+
this.EditingTags = false;
|
|
1375
|
+
this.SavingTags = false;
|
|
1376
1376
|
// Inline feedback
|
|
1377
|
-
this.
|
|
1378
|
-
this.
|
|
1379
|
-
this.
|
|
1380
|
-
this.
|
|
1381
|
-
this.
|
|
1382
|
-
this.
|
|
1377
|
+
this.ExpandedRunId = null;
|
|
1378
|
+
this.InlineRating = 0;
|
|
1379
|
+
this.InlineHoverRating = 0;
|
|
1380
|
+
this.InlineIsCorrect = null;
|
|
1381
|
+
this.InlineComments = '';
|
|
1382
|
+
this.SavingInlineFeedback = false;
|
|
1383
1383
|
// Filter for test runs
|
|
1384
|
-
this.
|
|
1384
|
+
this.RunStatusFilter = null;
|
|
1385
1385
|
// Keyboard shortcuts
|
|
1386
|
-
this.
|
|
1387
|
-
this.
|
|
1386
|
+
this.KeyboardShortcutsEnabled = true;
|
|
1387
|
+
this.ShowShortcuts = false;
|
|
1388
1388
|
this.shortcutsSettingEntity = null;
|
|
1389
1389
|
// Evaluation system
|
|
1390
|
-
this.
|
|
1390
|
+
this.EvalPreferences = {
|
|
1391
1391
|
showExecution: true,
|
|
1392
1392
|
showHuman: true,
|
|
1393
1393
|
showAuto: false
|
|
1394
1394
|
};
|
|
1395
|
-
this.
|
|
1396
|
-
this.
|
|
1397
|
-
this.
|
|
1395
|
+
this.TestRunsWithFeedback = [];
|
|
1396
|
+
this.EvaluationMetrics = null;
|
|
1397
|
+
this.NeedsReviewItems = [];
|
|
1398
1398
|
// Service injections
|
|
1399
1399
|
this.navigationService = inject(NavigationService);
|
|
1400
1400
|
this.testingDialogService = inject(TestingDialogService);
|
|
@@ -1402,7 +1402,215 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1402
1402
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1403
1403
|
this.appManager = inject(ApplicationManager);
|
|
1404
1404
|
}
|
|
1405
|
+
/** @deprecated Use {@link ActiveTab}. */
|
|
1406
|
+
get activeTab() {
|
|
1407
|
+
return this.ActiveTab;
|
|
1408
|
+
}
|
|
1409
|
+
/** @deprecated Use {@link ActiveTab}. */
|
|
1410
|
+
set activeTab(value) {
|
|
1411
|
+
this.ActiveTab = value;
|
|
1412
|
+
}
|
|
1413
|
+
/** @deprecated Use {@link Loading}. */
|
|
1414
|
+
get loading() {
|
|
1415
|
+
return this.Loading;
|
|
1416
|
+
}
|
|
1417
|
+
/** @deprecated Use {@link Loading}. */
|
|
1418
|
+
set loading(value) {
|
|
1419
|
+
this.Loading = value;
|
|
1420
|
+
}
|
|
1421
|
+
/** @deprecated Use {@link LoadingTestRuns}. */
|
|
1422
|
+
get loadingTestRuns() {
|
|
1423
|
+
return this.LoadingTestRuns;
|
|
1424
|
+
}
|
|
1425
|
+
/** @deprecated Use {@link LoadingTestRuns}. */
|
|
1426
|
+
set loadingTestRuns(value) {
|
|
1427
|
+
this.LoadingTestRuns = value;
|
|
1428
|
+
}
|
|
1429
|
+
/** @deprecated Use {@link LoadingFeedbacks}. */
|
|
1430
|
+
get loadingFeedbacks() {
|
|
1431
|
+
return this.LoadingFeedbacks;
|
|
1432
|
+
}
|
|
1433
|
+
/** @deprecated Use {@link LoadingFeedbacks}. */
|
|
1434
|
+
set loadingFeedbacks(value) {
|
|
1435
|
+
this.LoadingFeedbacks = value;
|
|
1436
|
+
}
|
|
1437
|
+
/** @deprecated Use {@link TestRunsLoaded}. */
|
|
1438
|
+
get testRunsLoaded() {
|
|
1439
|
+
return this.TestRunsLoaded;
|
|
1440
|
+
}
|
|
1441
|
+
/** @deprecated Use {@link TestRunsLoaded}. */
|
|
1442
|
+
set testRunsLoaded(value) {
|
|
1443
|
+
this.TestRunsLoaded = value;
|
|
1444
|
+
}
|
|
1445
|
+
/** @deprecated Use {@link FeedbacksLoaded}. */
|
|
1446
|
+
get feedbacksLoaded() {
|
|
1447
|
+
return this.FeedbacksLoaded;
|
|
1448
|
+
}
|
|
1449
|
+
/** @deprecated Use {@link FeedbacksLoaded}. */
|
|
1450
|
+
set feedbacksLoaded(value) {
|
|
1451
|
+
this.FeedbacksLoaded = value;
|
|
1452
|
+
}
|
|
1453
|
+
/** @deprecated Use {@link AutoRefreshEnabled}. */
|
|
1454
|
+
get autoRefreshEnabled() {
|
|
1455
|
+
return this.AutoRefreshEnabled;
|
|
1456
|
+
}
|
|
1457
|
+
/** @deprecated Use {@link AutoRefreshEnabled}. */
|
|
1458
|
+
set autoRefreshEnabled(value) {
|
|
1459
|
+
this.AutoRefreshEnabled = value;
|
|
1460
|
+
}
|
|
1461
|
+
/** @deprecated Use {@link TestSuite}. */
|
|
1462
|
+
get testSuite() {
|
|
1463
|
+
return this.TestSuite;
|
|
1464
|
+
}
|
|
1465
|
+
/** @deprecated Use {@link TestSuite}. */
|
|
1466
|
+
set testSuite(value) {
|
|
1467
|
+
this.TestSuite = value;
|
|
1468
|
+
}
|
|
1469
|
+
/** @deprecated Use {@link TestRuns}. */
|
|
1470
|
+
get testRuns() {
|
|
1471
|
+
return this.TestRuns;
|
|
1472
|
+
}
|
|
1473
|
+
/** @deprecated Use {@link TestRuns}. */
|
|
1474
|
+
set testRuns(value) {
|
|
1475
|
+
this.TestRuns = value;
|
|
1476
|
+
}
|
|
1477
|
+
/** @deprecated Use {@link Feedbacks}. */
|
|
1478
|
+
get feedbacks() {
|
|
1479
|
+
return this.Feedbacks;
|
|
1480
|
+
}
|
|
1481
|
+
/** @deprecated Use {@link Feedbacks}. */
|
|
1482
|
+
set feedbacks(value) {
|
|
1483
|
+
this.Feedbacks = value;
|
|
1484
|
+
}
|
|
1485
|
+
/** @deprecated Use {@link NewTag}. */
|
|
1486
|
+
get newTag() {
|
|
1487
|
+
return this.NewTag;
|
|
1488
|
+
}
|
|
1489
|
+
/** @deprecated Use {@link NewTag}. */
|
|
1490
|
+
set newTag(value) {
|
|
1491
|
+
this.NewTag = value;
|
|
1492
|
+
}
|
|
1493
|
+
/** @deprecated Use {@link EditingTags}. */
|
|
1494
|
+
get editingTags() {
|
|
1495
|
+
return this.EditingTags;
|
|
1496
|
+
}
|
|
1497
|
+
/** @deprecated Use {@link EditingTags}. */
|
|
1498
|
+
set editingTags(value) {
|
|
1499
|
+
this.EditingTags = value;
|
|
1500
|
+
}
|
|
1501
|
+
/** @deprecated Use {@link SavingTags}. */
|
|
1502
|
+
get savingTags() {
|
|
1503
|
+
return this.SavingTags;
|
|
1504
|
+
}
|
|
1505
|
+
/** @deprecated Use {@link SavingTags}. */
|
|
1506
|
+
set savingTags(value) {
|
|
1507
|
+
this.SavingTags = value;
|
|
1508
|
+
}
|
|
1509
|
+
/** @deprecated Use {@link ExpandedRunId}. */
|
|
1510
|
+
get expandedRunId() {
|
|
1511
|
+
return this.ExpandedRunId;
|
|
1512
|
+
}
|
|
1513
|
+
/** @deprecated Use {@link ExpandedRunId}. */
|
|
1514
|
+
set expandedRunId(value) {
|
|
1515
|
+
this.ExpandedRunId = value;
|
|
1516
|
+
}
|
|
1517
|
+
/** @deprecated Use {@link InlineRating}. */
|
|
1518
|
+
get inlineRating() {
|
|
1519
|
+
return this.InlineRating;
|
|
1520
|
+
}
|
|
1521
|
+
/** @deprecated Use {@link InlineRating}. */
|
|
1522
|
+
set inlineRating(value) {
|
|
1523
|
+
this.InlineRating = value;
|
|
1524
|
+
}
|
|
1525
|
+
/** @deprecated Use {@link InlineHoverRating}. */
|
|
1526
|
+
get inlineHoverRating() {
|
|
1527
|
+
return this.InlineHoverRating;
|
|
1528
|
+
}
|
|
1529
|
+
/** @deprecated Use {@link InlineHoverRating}. */
|
|
1530
|
+
set inlineHoverRating(value) {
|
|
1531
|
+
this.InlineHoverRating = value;
|
|
1532
|
+
}
|
|
1533
|
+
/** @deprecated Use {@link InlineIsCorrect}. */
|
|
1534
|
+
get inlineIsCorrect() {
|
|
1535
|
+
return this.InlineIsCorrect;
|
|
1536
|
+
}
|
|
1537
|
+
/** @deprecated Use {@link InlineIsCorrect}. */
|
|
1538
|
+
set inlineIsCorrect(value) {
|
|
1539
|
+
this.InlineIsCorrect = value;
|
|
1540
|
+
}
|
|
1541
|
+
/** @deprecated Use {@link InlineComments}. */
|
|
1542
|
+
get inlineComments() {
|
|
1543
|
+
return this.InlineComments;
|
|
1544
|
+
}
|
|
1545
|
+
/** @deprecated Use {@link InlineComments}. */
|
|
1546
|
+
set inlineComments(value) {
|
|
1547
|
+
this.InlineComments = value;
|
|
1548
|
+
}
|
|
1549
|
+
/** @deprecated Use {@link SavingInlineFeedback}. */
|
|
1550
|
+
get savingInlineFeedback() {
|
|
1551
|
+
return this.SavingInlineFeedback;
|
|
1552
|
+
}
|
|
1553
|
+
/** @deprecated Use {@link SavingInlineFeedback}. */
|
|
1554
|
+
set savingInlineFeedback(value) {
|
|
1555
|
+
this.SavingInlineFeedback = value;
|
|
1556
|
+
}
|
|
1557
|
+
/** @deprecated Use {@link RunStatusFilter}. */
|
|
1558
|
+
get runStatusFilter() {
|
|
1559
|
+
return this.RunStatusFilter;
|
|
1560
|
+
}
|
|
1561
|
+
/** @deprecated Use {@link RunStatusFilter}. */
|
|
1562
|
+
set runStatusFilter(value) {
|
|
1563
|
+
this.RunStatusFilter = value;
|
|
1564
|
+
}
|
|
1565
|
+
/** @deprecated Use {@link KeyboardShortcutsEnabled}. */
|
|
1566
|
+
get keyboardShortcutsEnabled() {
|
|
1567
|
+
return this.KeyboardShortcutsEnabled;
|
|
1568
|
+
}
|
|
1569
|
+
/** @deprecated Use {@link KeyboardShortcutsEnabled}. */
|
|
1570
|
+
set keyboardShortcutsEnabled(value) {
|
|
1571
|
+
this.KeyboardShortcutsEnabled = value;
|
|
1572
|
+
}
|
|
1573
|
+
/** @deprecated Use {@link ShowShortcuts}. */
|
|
1574
|
+
get showShortcuts() {
|
|
1575
|
+
return this.ShowShortcuts;
|
|
1576
|
+
}
|
|
1577
|
+
/** @deprecated Use {@link ShowShortcuts}. */
|
|
1578
|
+
set showShortcuts(value) {
|
|
1579
|
+
this.ShowShortcuts = value;
|
|
1580
|
+
} // Hidden by default
|
|
1405
1581
|
get metadata() { return this.ProviderToUse; }
|
|
1582
|
+
/** @deprecated Use {@link EvalPreferences}. */
|
|
1583
|
+
get evalPreferences() {
|
|
1584
|
+
return this.EvalPreferences;
|
|
1585
|
+
}
|
|
1586
|
+
/** @deprecated Use {@link EvalPreferences}. */
|
|
1587
|
+
set evalPreferences(value) {
|
|
1588
|
+
this.EvalPreferences = value;
|
|
1589
|
+
}
|
|
1590
|
+
/** @deprecated Use {@link TestRunsWithFeedback}. */
|
|
1591
|
+
get testRunsWithFeedback() {
|
|
1592
|
+
return this.TestRunsWithFeedback;
|
|
1593
|
+
}
|
|
1594
|
+
/** @deprecated Use {@link TestRunsWithFeedback}. */
|
|
1595
|
+
set testRunsWithFeedback(value) {
|
|
1596
|
+
this.TestRunsWithFeedback = value;
|
|
1597
|
+
}
|
|
1598
|
+
/** @deprecated Use {@link EvaluationMetrics}. */
|
|
1599
|
+
get evaluationMetrics() {
|
|
1600
|
+
return this.EvaluationMetrics;
|
|
1601
|
+
}
|
|
1602
|
+
/** @deprecated Use {@link EvaluationMetrics}. */
|
|
1603
|
+
set evaluationMetrics(value) {
|
|
1604
|
+
this.EvaluationMetrics = value;
|
|
1605
|
+
}
|
|
1606
|
+
/** @deprecated Use {@link NeedsReviewItems}. */
|
|
1607
|
+
get needsReviewItems() {
|
|
1608
|
+
return this.NeedsReviewItems;
|
|
1609
|
+
}
|
|
1610
|
+
/** @deprecated Use {@link NeedsReviewItems}. */
|
|
1611
|
+
set needsReviewItems(value) {
|
|
1612
|
+
this.NeedsReviewItems = value;
|
|
1613
|
+
}
|
|
1406
1614
|
async ngOnInit() {
|
|
1407
1615
|
await super.ngOnInit();
|
|
1408
1616
|
this.loadShortcutsSetting();
|
|
@@ -1410,7 +1618,7 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1410
1618
|
this.evalPrefsService.preferences$
|
|
1411
1619
|
.pipe(takeUntil(this.destroy$))
|
|
1412
1620
|
.subscribe(prefs => {
|
|
1413
|
-
this.
|
|
1621
|
+
this.EvalPreferences = prefs;
|
|
1414
1622
|
this.cdr.markForCheck();
|
|
1415
1623
|
});
|
|
1416
1624
|
if (this.record && this.record.ID) {
|
|
@@ -1431,48 +1639,48 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1431
1639
|
}
|
|
1432
1640
|
// Keyboard shortcuts
|
|
1433
1641
|
handleKeyboardShortcut(event) {
|
|
1434
|
-
if (!this.
|
|
1642
|
+
if (!this.KeyboardShortcutsEnabled)
|
|
1435
1643
|
return;
|
|
1436
1644
|
// Cmd/Ctrl + R: Refresh
|
|
1437
1645
|
if ((event.metaKey || event.ctrlKey) && event.key === 'r' && !event.shiftKey) {
|
|
1438
1646
|
event.preventDefault();
|
|
1439
|
-
this.
|
|
1647
|
+
this.Refresh();
|
|
1440
1648
|
return;
|
|
1441
1649
|
}
|
|
1442
1650
|
// Cmd/Ctrl + Shift + R: Re-run suite
|
|
1443
1651
|
if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'r') {
|
|
1444
1652
|
event.preventDefault();
|
|
1445
|
-
this.
|
|
1653
|
+
this.ReRunSuite();
|
|
1446
1654
|
return;
|
|
1447
1655
|
}
|
|
1448
1656
|
// Number keys for tabs (1-4)
|
|
1449
1657
|
if (!event.metaKey && !event.ctrlKey && !event.altKey) {
|
|
1450
1658
|
switch (event.key) {
|
|
1451
1659
|
case '1':
|
|
1452
|
-
this.
|
|
1660
|
+
this.ChangeTab('overview');
|
|
1453
1661
|
break;
|
|
1454
1662
|
case '2':
|
|
1455
|
-
this.
|
|
1663
|
+
this.ChangeTab('runs');
|
|
1456
1664
|
break;
|
|
1457
1665
|
case '3':
|
|
1458
|
-
this.
|
|
1666
|
+
this.ChangeTab('details');
|
|
1459
1667
|
break;
|
|
1460
1668
|
case '4':
|
|
1461
|
-
this.
|
|
1669
|
+
this.ChangeTab('analytics');
|
|
1462
1670
|
break;
|
|
1463
1671
|
}
|
|
1464
1672
|
}
|
|
1465
1673
|
}
|
|
1466
1674
|
startAutoRefresh() {
|
|
1467
|
-
this.
|
|
1675
|
+
this.AutoRefreshEnabled = true;
|
|
1468
1676
|
interval(5000)
|
|
1469
1677
|
.pipe(takeUntil(this.destroy$))
|
|
1470
1678
|
.subscribe(() => {
|
|
1471
|
-
if (this.
|
|
1679
|
+
if (this.AutoRefreshEnabled && (this.record.Status === 'Running' || this.record.Status === 'Pending')) {
|
|
1472
1680
|
this.silentRefresh();
|
|
1473
1681
|
}
|
|
1474
1682
|
else {
|
|
1475
|
-
this.
|
|
1683
|
+
this.AutoRefreshEnabled = false;
|
|
1476
1684
|
}
|
|
1477
1685
|
});
|
|
1478
1686
|
}
|
|
@@ -1486,7 +1694,7 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1486
1694
|
}
|
|
1487
1695
|
}
|
|
1488
1696
|
async loadRelatedData() {
|
|
1489
|
-
this.
|
|
1697
|
+
this.Loading = true;
|
|
1490
1698
|
this.error = null;
|
|
1491
1699
|
try {
|
|
1492
1700
|
// Load test suite
|
|
@@ -1494,7 +1702,7 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1494
1702
|
const md = this.ProviderToUse;
|
|
1495
1703
|
const suite = await md.GetEntityObject('MJ: Test Suites');
|
|
1496
1704
|
if (suite && await suite.Load(this.record.SuiteID)) {
|
|
1497
|
-
this.
|
|
1705
|
+
this.TestSuite = suite;
|
|
1498
1706
|
}
|
|
1499
1707
|
}
|
|
1500
1708
|
this.cdr.markForCheck();
|
|
@@ -1504,7 +1712,7 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1504
1712
|
this.error = 'Failed to load related data. Click to retry.';
|
|
1505
1713
|
}
|
|
1506
1714
|
finally {
|
|
1507
|
-
this.
|
|
1715
|
+
this.Loading = false;
|
|
1508
1716
|
this.cdr.markForCheck();
|
|
1509
1717
|
}
|
|
1510
1718
|
}
|
|
@@ -1513,9 +1721,9 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1513
1721
|
await this.loadRelatedData();
|
|
1514
1722
|
}
|
|
1515
1723
|
async loadTestRuns() {
|
|
1516
|
-
if (this.
|
|
1724
|
+
if (this.TestRunsLoaded)
|
|
1517
1725
|
return;
|
|
1518
|
-
this.
|
|
1726
|
+
this.LoadingTestRuns = true;
|
|
1519
1727
|
this.cdr.markForCheck();
|
|
1520
1728
|
try {
|
|
1521
1729
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
@@ -1526,11 +1734,11 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1526
1734
|
ResultType: 'entity_object'
|
|
1527
1735
|
});
|
|
1528
1736
|
if (result.Success) {
|
|
1529
|
-
this.
|
|
1737
|
+
this.TestRuns = result.Results || [];
|
|
1530
1738
|
}
|
|
1531
|
-
this.
|
|
1739
|
+
this.TestRunsLoaded = true;
|
|
1532
1740
|
// Also load feedbacks for these runs
|
|
1533
|
-
if (this.
|
|
1741
|
+
if (this.TestRuns.length > 0) {
|
|
1534
1742
|
await this.loadFeedbacks();
|
|
1535
1743
|
}
|
|
1536
1744
|
}
|
|
@@ -1539,19 +1747,23 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1539
1747
|
SharedService.Instance.CreateSimpleNotification('Failed to load test runs', 'error', 3000);
|
|
1540
1748
|
}
|
|
1541
1749
|
finally {
|
|
1542
|
-
this.
|
|
1750
|
+
this.LoadingTestRuns = false;
|
|
1543
1751
|
this.cdr.markForCheck();
|
|
1544
1752
|
}
|
|
1545
1753
|
}
|
|
1546
|
-
|
|
1547
|
-
this.
|
|
1754
|
+
ChangeTab(tab) {
|
|
1755
|
+
this.ActiveTab = tab;
|
|
1548
1756
|
// Lazy load tabs
|
|
1549
|
-
if ((tab === 'runs' || tab === 'analytics') && !this.
|
|
1757
|
+
if ((tab === 'runs' || tab === 'analytics') && !this.TestRunsLoaded) {
|
|
1550
1758
|
this.loadTestRuns();
|
|
1551
1759
|
}
|
|
1552
1760
|
this.cdr.markForCheck();
|
|
1553
1761
|
}
|
|
1554
|
-
|
|
1762
|
+
/** @deprecated Use {@link ChangeTab}. */
|
|
1763
|
+
changeTab(tab) {
|
|
1764
|
+
return this.ChangeTab(tab);
|
|
1765
|
+
}
|
|
1766
|
+
GetStatusColor() {
|
|
1555
1767
|
switch (this.record.Status) {
|
|
1556
1768
|
case 'Completed': return '#10b981';
|
|
1557
1769
|
case 'Failed': return '#ef4444';
|
|
@@ -1561,7 +1773,11 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1561
1773
|
default: return '#9ca3af';
|
|
1562
1774
|
}
|
|
1563
1775
|
}
|
|
1564
|
-
|
|
1776
|
+
/** @deprecated Use {@link GetStatusColor}. */
|
|
1777
|
+
getStatusColor() {
|
|
1778
|
+
return this.GetStatusColor();
|
|
1779
|
+
}
|
|
1780
|
+
GetStatusIcon() {
|
|
1565
1781
|
switch (this.record.Status) {
|
|
1566
1782
|
case 'Completed': return 'fa-check-circle';
|
|
1567
1783
|
case 'Failed': return 'fa-times-circle';
|
|
@@ -1571,10 +1787,18 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1571
1787
|
default: return 'fa-question-circle';
|
|
1572
1788
|
}
|
|
1573
1789
|
}
|
|
1574
|
-
|
|
1790
|
+
/** @deprecated Use {@link GetStatusIcon}. */
|
|
1791
|
+
getStatusIcon() {
|
|
1792
|
+
return this.GetStatusIcon();
|
|
1793
|
+
}
|
|
1794
|
+
GetStatusClass() {
|
|
1575
1795
|
return `status-${this.record.Status?.toLowerCase() || 'unknown'}`;
|
|
1576
1796
|
}
|
|
1577
|
-
|
|
1797
|
+
/** @deprecated Use {@link GetStatusClass}. */
|
|
1798
|
+
getStatusClass() {
|
|
1799
|
+
return this.GetStatusClass();
|
|
1800
|
+
}
|
|
1801
|
+
CalculateDuration() {
|
|
1578
1802
|
if (!this.record.TotalDurationSeconds)
|
|
1579
1803
|
return 'N/A';
|
|
1580
1804
|
const seconds = this.record.TotalDurationSeconds;
|
|
@@ -1589,19 +1813,31 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1589
1813
|
const mins = Math.floor((seconds % 3600) / 60);
|
|
1590
1814
|
return `${hours}h ${mins}m`;
|
|
1591
1815
|
}
|
|
1592
|
-
|
|
1816
|
+
/** @deprecated Use {@link CalculateDuration}. */
|
|
1817
|
+
calculateDuration() {
|
|
1818
|
+
return this.CalculateDuration();
|
|
1819
|
+
}
|
|
1820
|
+
FormatCost(cost) {
|
|
1593
1821
|
if (cost === null || cost === undefined)
|
|
1594
1822
|
return 'N/A';
|
|
1595
1823
|
return `$${cost.toFixed(6)}`;
|
|
1596
1824
|
}
|
|
1597
|
-
|
|
1825
|
+
/** @deprecated Use {@link FormatCost}. */
|
|
1826
|
+
formatCost(cost) {
|
|
1827
|
+
return this.FormatCost(cost);
|
|
1828
|
+
}
|
|
1829
|
+
GetPassRate() {
|
|
1598
1830
|
const total = this.record.TotalTests || 0;
|
|
1599
1831
|
const passed = this.record.PassedTests || 0;
|
|
1600
1832
|
if (total === 0)
|
|
1601
1833
|
return 0;
|
|
1602
1834
|
return (passed / total) * 100;
|
|
1603
1835
|
}
|
|
1604
|
-
|
|
1836
|
+
/** @deprecated Use {@link GetPassRate}. */
|
|
1837
|
+
getPassRate() {
|
|
1838
|
+
return this.GetPassRate();
|
|
1839
|
+
}
|
|
1840
|
+
GetRelativeTime(date) {
|
|
1605
1841
|
if (!date)
|
|
1606
1842
|
return 'N/A';
|
|
1607
1843
|
const d = new Date(date);
|
|
@@ -1620,37 +1856,57 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1620
1856
|
return `${diffDays}d ago`;
|
|
1621
1857
|
return d.toLocaleDateString();
|
|
1622
1858
|
}
|
|
1623
|
-
|
|
1859
|
+
/** @deprecated Use {@link GetRelativeTime}. */
|
|
1860
|
+
getRelativeTime(date) {
|
|
1861
|
+
return this.GetRelativeTime(date);
|
|
1862
|
+
}
|
|
1863
|
+
NavigateToTestingDashboard() {
|
|
1624
1864
|
const testingApp = this.appManager.GetAppByName('Testing');
|
|
1625
1865
|
if (testingApp) {
|
|
1626
1866
|
this.navigationService.SwitchToApp(testingApp.ID);
|
|
1627
1867
|
}
|
|
1628
1868
|
}
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1869
|
+
/** @deprecated Use {@link NavigateToTestingDashboard}. */
|
|
1870
|
+
navigateToTestingDashboard() {
|
|
1871
|
+
return this.NavigateToTestingDashboard();
|
|
1872
|
+
}
|
|
1873
|
+
OpenTestSuite() {
|
|
1874
|
+
if (this.TestSuite) {
|
|
1875
|
+
SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(this.TestSuite.ID));
|
|
1632
1876
|
}
|
|
1633
1877
|
}
|
|
1634
|
-
|
|
1878
|
+
/** @deprecated Use {@link OpenTestSuite}. */
|
|
1879
|
+
openTestSuite() {
|
|
1880
|
+
return this.OpenTestSuite();
|
|
1881
|
+
}
|
|
1882
|
+
OpenTestRun(runId) {
|
|
1635
1883
|
SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));
|
|
1636
1884
|
}
|
|
1637
|
-
|
|
1885
|
+
/** @deprecated Use {@link OpenTestRun}. */
|
|
1886
|
+
openTestRun(runId) {
|
|
1887
|
+
return this.OpenTestRun(runId);
|
|
1888
|
+
}
|
|
1889
|
+
async ReRunSuite() {
|
|
1638
1890
|
if (!this.record.SuiteID) {
|
|
1639
1891
|
SharedService.Instance.CreateSimpleNotification('Cannot re-run: Suite ID not available', 'error', 3000);
|
|
1640
1892
|
return;
|
|
1641
1893
|
}
|
|
1642
1894
|
this.testingDialogService.OpenSuitePanel(this.record.SuiteID);
|
|
1643
1895
|
}
|
|
1644
|
-
|
|
1896
|
+
/** @deprecated Use {@link ReRunSuite}. */
|
|
1897
|
+
async reRunSuite() {
|
|
1898
|
+
return this.ReRunSuite();
|
|
1899
|
+
}
|
|
1900
|
+
async Refresh() {
|
|
1645
1901
|
this.isRefreshing = true;
|
|
1646
1902
|
this.cdr.markForCheck();
|
|
1647
1903
|
try {
|
|
1648
1904
|
await this.record.Load(this.record.ID);
|
|
1649
1905
|
await this.loadRelatedData();
|
|
1650
1906
|
// Reset lazy-loaded data
|
|
1651
|
-
if (this.
|
|
1652
|
-
this.
|
|
1653
|
-
this.
|
|
1907
|
+
if (this.TestRunsLoaded) {
|
|
1908
|
+
this.TestRunsLoaded = false;
|
|
1909
|
+
this.TestRuns = [];
|
|
1654
1910
|
await this.loadTestRuns();
|
|
1655
1911
|
}
|
|
1656
1912
|
SharedService.Instance.CreateSimpleNotification('Refreshed successfully', 'success', 2000);
|
|
@@ -1663,7 +1919,11 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1663
1919
|
this.cdr.markForCheck();
|
|
1664
1920
|
}
|
|
1665
1921
|
}
|
|
1666
|
-
|
|
1922
|
+
/** @deprecated Use {@link Refresh}. */
|
|
1923
|
+
async refresh() {
|
|
1924
|
+
return this.Refresh();
|
|
1925
|
+
}
|
|
1926
|
+
GetRunStatusColor(status) {
|
|
1667
1927
|
switch (status) {
|
|
1668
1928
|
case 'Passed': return '#10b981';
|
|
1669
1929
|
case 'Failed': return '#ef4444';
|
|
@@ -1675,7 +1935,11 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1675
1935
|
default: return '#9ca3af';
|
|
1676
1936
|
}
|
|
1677
1937
|
}
|
|
1678
|
-
|
|
1938
|
+
/** @deprecated Use {@link GetRunStatusColor}. */
|
|
1939
|
+
getRunStatusColor(status) {
|
|
1940
|
+
return this.GetRunStatusColor(status);
|
|
1941
|
+
}
|
|
1942
|
+
GetRunStatusIcon(status) {
|
|
1679
1943
|
switch (status) {
|
|
1680
1944
|
case 'Passed': return 'fa-check';
|
|
1681
1945
|
case 'Failed': return 'fa-times';
|
|
@@ -1687,45 +1951,65 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1687
1951
|
default: return 'fa-question';
|
|
1688
1952
|
}
|
|
1689
1953
|
}
|
|
1954
|
+
/** @deprecated Use {@link GetRunStatusIcon}. */
|
|
1955
|
+
getRunStatusIcon(status) {
|
|
1956
|
+
return this.GetRunStatusIcon(status);
|
|
1957
|
+
}
|
|
1690
1958
|
// ===========================
|
|
1691
1959
|
// Tag Management
|
|
1692
1960
|
// ===========================
|
|
1693
|
-
|
|
1694
|
-
this.
|
|
1961
|
+
StartEditingTags() {
|
|
1962
|
+
this.EditingTags = true;
|
|
1695
1963
|
this.cdr.markForCheck();
|
|
1696
1964
|
}
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
this.
|
|
1965
|
+
/** @deprecated Use {@link StartEditingTags}. */
|
|
1966
|
+
startEditingTags() {
|
|
1967
|
+
return this.StartEditingTags();
|
|
1968
|
+
}
|
|
1969
|
+
CancelEditingTags() {
|
|
1970
|
+
this.EditingTags = false;
|
|
1971
|
+
this.NewTag = '';
|
|
1700
1972
|
this.parseTags(); // Reset to original
|
|
1701
1973
|
this.cdr.markForCheck();
|
|
1702
1974
|
}
|
|
1703
|
-
|
|
1704
|
-
|
|
1975
|
+
/** @deprecated Use {@link CancelEditingTags}. */
|
|
1976
|
+
cancelEditingTags() {
|
|
1977
|
+
return this.CancelEditingTags();
|
|
1978
|
+
}
|
|
1979
|
+
AddTag() {
|
|
1980
|
+
const tag = this.NewTag.trim();
|
|
1705
1981
|
if (tag && !this.tags.includes(tag)) {
|
|
1706
1982
|
this.tags = [...this.tags, tag];
|
|
1707
|
-
this.
|
|
1983
|
+
this.NewTag = '';
|
|
1708
1984
|
this.cdr.markForCheck();
|
|
1709
1985
|
}
|
|
1710
1986
|
}
|
|
1711
|
-
|
|
1987
|
+
/** @deprecated Use {@link AddTag}. */
|
|
1988
|
+
addTag() {
|
|
1989
|
+
return this.AddTag();
|
|
1990
|
+
}
|
|
1991
|
+
RemoveTag(tag) {
|
|
1712
1992
|
this.tags = this.tags.filter(t => t !== tag);
|
|
1713
1993
|
this.cdr.markForCheck();
|
|
1714
1994
|
}
|
|
1715
|
-
|
|
1995
|
+
/** @deprecated Use {@link RemoveTag}. */
|
|
1996
|
+
removeTag(tag) {
|
|
1997
|
+
return this.RemoveTag(tag);
|
|
1998
|
+
}
|
|
1999
|
+
async SaveTags() {
|
|
1716
2000
|
// Auto-add any pending tag in the input before saving
|
|
1717
|
-
const pendingTag = this.
|
|
2001
|
+
const pendingTag = this.NewTag.trim();
|
|
1718
2002
|
if (pendingTag && !this.tags.includes(pendingTag)) {
|
|
1719
2003
|
this.tags = [...this.tags, pendingTag];
|
|
1720
|
-
this.
|
|
2004
|
+
this.NewTag = '';
|
|
1721
2005
|
}
|
|
1722
|
-
this.
|
|
2006
|
+
this.SavingTags = true;
|
|
1723
2007
|
this.cdr.markForCheck();
|
|
1724
2008
|
try {
|
|
1725
2009
|
this.record.Tags = TagsHelper.toJson(this.tags);
|
|
1726
2010
|
const result = await this.record.Save();
|
|
1727
2011
|
if (result) {
|
|
1728
|
-
this.
|
|
2012
|
+
this.EditingTags = false;
|
|
1729
2013
|
SharedService.Instance.CreateSimpleNotification('Tags saved successfully', 'success', 2000);
|
|
1730
2014
|
}
|
|
1731
2015
|
else {
|
|
@@ -1736,35 +2020,51 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1736
2020
|
SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);
|
|
1737
2021
|
}
|
|
1738
2022
|
finally {
|
|
1739
|
-
this.
|
|
2023
|
+
this.SavingTags = false;
|
|
1740
2024
|
this.cdr.markForCheck();
|
|
1741
2025
|
}
|
|
1742
2026
|
}
|
|
2027
|
+
/** @deprecated Use {@link SaveTags}. */
|
|
2028
|
+
async saveTags() {
|
|
2029
|
+
return this.SaveTags();
|
|
2030
|
+
}
|
|
1743
2031
|
// ===========================
|
|
1744
2032
|
// Test Run Filtering
|
|
1745
2033
|
// ===========================
|
|
1746
|
-
|
|
1747
|
-
this.
|
|
2034
|
+
SetRunStatusFilter(status) {
|
|
2035
|
+
this.RunStatusFilter = status;
|
|
1748
2036
|
this.cdr.markForCheck();
|
|
1749
2037
|
}
|
|
2038
|
+
/** @deprecated Use {@link SetRunStatusFilter}. */
|
|
2039
|
+
setRunStatusFilter(status) {
|
|
2040
|
+
return this.SetRunStatusFilter(status);
|
|
2041
|
+
}
|
|
2042
|
+
GetFilteredTestRuns() {
|
|
2043
|
+
if (!this.RunStatusFilter)
|
|
2044
|
+
return this.TestRuns;
|
|
2045
|
+
return this.TestRuns.filter(run => run.Status === this.RunStatusFilter);
|
|
2046
|
+
}
|
|
2047
|
+
/** @deprecated Use {@link GetFilteredTestRuns}. */
|
|
1750
2048
|
getFilteredTestRuns() {
|
|
1751
|
-
|
|
1752
|
-
return this.testRuns;
|
|
1753
|
-
return this.testRuns.filter(run => run.Status === this.runStatusFilter);
|
|
2049
|
+
return this.GetFilteredTestRuns();
|
|
1754
2050
|
}
|
|
2051
|
+
GetRunCountByStatus(status) {
|
|
2052
|
+
return this.TestRuns.filter(run => run.Status === status).length;
|
|
2053
|
+
}
|
|
2054
|
+
/** @deprecated Use {@link GetRunCountByStatus}. */
|
|
1755
2055
|
getRunCountByStatus(status) {
|
|
1756
|
-
return this.
|
|
2056
|
+
return this.GetRunCountByStatus(status);
|
|
1757
2057
|
}
|
|
1758
2058
|
// ===========================
|
|
1759
2059
|
// Inline Feedback
|
|
1760
2060
|
// ===========================
|
|
1761
2061
|
async loadFeedbacks() {
|
|
1762
|
-
if (this.
|
|
2062
|
+
if (this.FeedbacksLoaded)
|
|
1763
2063
|
return;
|
|
1764
|
-
this.
|
|
2064
|
+
this.LoadingFeedbacks = true;
|
|
1765
2065
|
this.cdr.markForCheck();
|
|
1766
2066
|
try {
|
|
1767
|
-
const testRunIds = this.
|
|
2067
|
+
const testRunIds = this.TestRuns.map(r => `'${r.ID}'`).join(',');
|
|
1768
2068
|
if (!testRunIds)
|
|
1769
2069
|
return;
|
|
1770
2070
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
@@ -1774,20 +2074,20 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1774
2074
|
ResultType: 'entity_object'
|
|
1775
2075
|
});
|
|
1776
2076
|
if (result.Success && result.Results) {
|
|
1777
|
-
this.
|
|
2077
|
+
this.Feedbacks.clear();
|
|
1778
2078
|
for (const feedback of result.Results) {
|
|
1779
|
-
this.
|
|
2079
|
+
this.Feedbacks.set(feedback.TestRunID, feedback);
|
|
1780
2080
|
}
|
|
1781
2081
|
}
|
|
1782
2082
|
// Build TestRunWithFeedback array and calculate metrics
|
|
1783
2083
|
this.buildTestRunsWithFeedback();
|
|
1784
|
-
this.
|
|
2084
|
+
this.FeedbacksLoaded = true;
|
|
1785
2085
|
}
|
|
1786
2086
|
catch (error) {
|
|
1787
2087
|
console.error('Error loading feedbacks:', error);
|
|
1788
2088
|
}
|
|
1789
2089
|
finally {
|
|
1790
|
-
this.
|
|
2090
|
+
this.LoadingFeedbacks = false;
|
|
1791
2091
|
this.cdr.markForCheck();
|
|
1792
2092
|
}
|
|
1793
2093
|
}
|
|
@@ -1795,8 +2095,8 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1795
2095
|
* Build TestRunWithFeedback array from testRuns and feedbacks
|
|
1796
2096
|
*/
|
|
1797
2097
|
buildTestRunsWithFeedback() {
|
|
1798
|
-
this.
|
|
1799
|
-
const feedback = this.
|
|
2098
|
+
this.TestRunsWithFeedback = this.TestRuns.map(run => {
|
|
2099
|
+
const feedback = this.Feedbacks.get(run.ID);
|
|
1800
2100
|
return {
|
|
1801
2101
|
id: run.ID,
|
|
1802
2102
|
testId: run.TestID,
|
|
@@ -1821,80 +2121,96 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1821
2121
|
};
|
|
1822
2122
|
});
|
|
1823
2123
|
// Calculate metrics
|
|
1824
|
-
this.
|
|
2124
|
+
this.EvaluationMetrics = calculateEvaluationMetrics(this.TestRunsWithFeedback);
|
|
1825
2125
|
// Get items needing review
|
|
1826
|
-
this.
|
|
2126
|
+
this.NeedsReviewItems = getNeedsReviewItems(this.TestRunsWithFeedback);
|
|
1827
2127
|
}
|
|
1828
|
-
|
|
1829
|
-
if (this.
|
|
1830
|
-
this.
|
|
2128
|
+
ToggleRunExpanded(runId) {
|
|
2129
|
+
if (this.ExpandedRunId === runId) {
|
|
2130
|
+
this.ExpandedRunId = null;
|
|
1831
2131
|
}
|
|
1832
2132
|
else {
|
|
1833
|
-
this.
|
|
2133
|
+
this.ExpandedRunId = runId;
|
|
1834
2134
|
this.initializeInlineFeedback(runId);
|
|
1835
2135
|
}
|
|
1836
2136
|
this.cdr.markForCheck();
|
|
1837
2137
|
}
|
|
2138
|
+
/** @deprecated Use {@link ToggleRunExpanded}. */
|
|
2139
|
+
toggleRunExpanded(runId) {
|
|
2140
|
+
return this.ToggleRunExpanded(runId);
|
|
2141
|
+
}
|
|
1838
2142
|
initializeInlineFeedback(runId) {
|
|
1839
|
-
const existingFeedback = this.
|
|
2143
|
+
const existingFeedback = this.Feedbacks.get(runId);
|
|
1840
2144
|
if (existingFeedback) {
|
|
1841
|
-
this.
|
|
1842
|
-
this.
|
|
1843
|
-
this.
|
|
2145
|
+
this.InlineRating = existingFeedback.Rating || 0;
|
|
2146
|
+
this.InlineIsCorrect = existingFeedback.IsCorrect;
|
|
2147
|
+
this.InlineComments = existingFeedback.CorrectionSummary || '';
|
|
1844
2148
|
}
|
|
1845
2149
|
else {
|
|
1846
|
-
this.
|
|
1847
|
-
this.
|
|
1848
|
-
this.
|
|
2150
|
+
this.InlineRating = 0;
|
|
2151
|
+
this.InlineIsCorrect = null;
|
|
2152
|
+
this.InlineComments = '';
|
|
1849
2153
|
}
|
|
1850
|
-
this.
|
|
2154
|
+
this.InlineHoverRating = 0;
|
|
1851
2155
|
}
|
|
1852
|
-
|
|
1853
|
-
this.
|
|
2156
|
+
SetInlineRating(value) {
|
|
2157
|
+
this.InlineRating = value;
|
|
1854
2158
|
this.cdr.markForCheck();
|
|
1855
2159
|
}
|
|
1856
|
-
|
|
1857
|
-
|
|
2160
|
+
/** @deprecated Use {@link SetInlineRating}. */
|
|
2161
|
+
setInlineRating(value) {
|
|
2162
|
+
return this.SetInlineRating(value);
|
|
2163
|
+
}
|
|
2164
|
+
GetInlineRatingLabel() {
|
|
2165
|
+
if (this.InlineRating <= 3)
|
|
1858
2166
|
return 'Poor';
|
|
1859
|
-
if (this.
|
|
2167
|
+
if (this.InlineRating <= 5)
|
|
1860
2168
|
return 'Below Average';
|
|
1861
|
-
if (this.
|
|
2169
|
+
if (this.InlineRating <= 6)
|
|
1862
2170
|
return 'Average';
|
|
1863
|
-
if (this.
|
|
2171
|
+
if (this.InlineRating <= 7)
|
|
1864
2172
|
return 'Good';
|
|
1865
|
-
if (this.
|
|
2173
|
+
if (this.InlineRating <= 8)
|
|
1866
2174
|
return 'Very Good';
|
|
1867
|
-
if (this.
|
|
2175
|
+
if (this.InlineRating <= 9)
|
|
1868
2176
|
return 'Excellent';
|
|
1869
2177
|
return 'Outstanding';
|
|
1870
2178
|
}
|
|
2179
|
+
/** @deprecated Use {@link GetInlineRatingLabel}. */
|
|
2180
|
+
getInlineRatingLabel() {
|
|
2181
|
+
return this.GetInlineRatingLabel();
|
|
2182
|
+
}
|
|
2183
|
+
CanSubmitInlineFeedback() {
|
|
2184
|
+
return this.InlineRating > 0 && this.InlineComments.trim().length > 0;
|
|
2185
|
+
}
|
|
2186
|
+
/** @deprecated Use {@link CanSubmitInlineFeedback}. */
|
|
1871
2187
|
canSubmitInlineFeedback() {
|
|
1872
|
-
return this.
|
|
2188
|
+
return this.CanSubmitInlineFeedback();
|
|
1873
2189
|
}
|
|
1874
|
-
async
|
|
1875
|
-
if (!this.
|
|
2190
|
+
async SaveInlineFeedback() {
|
|
2191
|
+
if (!this.ExpandedRunId || !this.CanSubmitInlineFeedback())
|
|
1876
2192
|
return;
|
|
1877
|
-
this.
|
|
2193
|
+
this.SavingInlineFeedback = true;
|
|
1878
2194
|
this.cdr.markForCheck();
|
|
1879
2195
|
try {
|
|
1880
2196
|
const md = this.ProviderToUse;
|
|
1881
2197
|
const currentUser = md.CurrentUser;
|
|
1882
|
-
let feedback = this.
|
|
2198
|
+
let feedback = this.Feedbacks.get(this.ExpandedRunId);
|
|
1883
2199
|
if (!feedback) {
|
|
1884
2200
|
feedback = await md.GetEntityObject('MJ: Test Run Feedbacks', currentUser);
|
|
1885
|
-
feedback.TestRunID = this.
|
|
2201
|
+
feedback.TestRunID = this.ExpandedRunId;
|
|
1886
2202
|
feedback.ReviewerUserID = currentUser.ID;
|
|
1887
2203
|
}
|
|
1888
|
-
feedback.Rating = this.
|
|
1889
|
-
feedback.IsCorrect = this.
|
|
1890
|
-
feedback.CorrectionSummary = this.
|
|
2204
|
+
feedback.Rating = this.InlineRating;
|
|
2205
|
+
feedback.IsCorrect = this.InlineIsCorrect;
|
|
2206
|
+
feedback.CorrectionSummary = this.InlineComments.trim() || null;
|
|
1891
2207
|
const result = await feedback.Save();
|
|
1892
2208
|
if (result) {
|
|
1893
|
-
this.
|
|
2209
|
+
this.Feedbacks.set(this.ExpandedRunId, feedback);
|
|
1894
2210
|
// Rebuild the metrics after feedback update
|
|
1895
2211
|
this.buildTestRunsWithFeedback();
|
|
1896
2212
|
SharedService.Instance.CreateSimpleNotification('Feedback saved', 'success', 2000);
|
|
1897
|
-
this.
|
|
2213
|
+
this.ExpandedRunId = null;
|
|
1898
2214
|
}
|
|
1899
2215
|
else {
|
|
1900
2216
|
SharedService.Instance.CreateSimpleNotification(feedback.LatestResult?.Message || 'Failed to save feedback', 'error', 3000);
|
|
@@ -1904,34 +2220,58 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1904
2220
|
SharedService.Instance.CreateSimpleNotification('Failed to save feedback', 'error', 3000);
|
|
1905
2221
|
}
|
|
1906
2222
|
finally {
|
|
1907
|
-
this.
|
|
2223
|
+
this.SavingInlineFeedback = false;
|
|
1908
2224
|
this.cdr.markForCheck();
|
|
1909
2225
|
}
|
|
1910
2226
|
}
|
|
2227
|
+
/** @deprecated Use {@link SaveInlineFeedback}. */
|
|
2228
|
+
async saveInlineFeedback() {
|
|
2229
|
+
return this.SaveInlineFeedback();
|
|
2230
|
+
}
|
|
2231
|
+
HasFeedback(runId) {
|
|
2232
|
+
return this.Feedbacks.has(runId);
|
|
2233
|
+
}
|
|
2234
|
+
/** @deprecated Use {@link HasFeedback}. */
|
|
1911
2235
|
hasFeedback(runId) {
|
|
1912
|
-
return this.
|
|
2236
|
+
return this.HasFeedback(runId);
|
|
1913
2237
|
}
|
|
2238
|
+
GetFeedbackRating(runId) {
|
|
2239
|
+
return this.Feedbacks.get(runId)?.Rating || 0;
|
|
2240
|
+
}
|
|
2241
|
+
/** @deprecated Use {@link GetFeedbackRating}. */
|
|
1914
2242
|
getFeedbackRating(runId) {
|
|
1915
|
-
return this.
|
|
2243
|
+
return this.GetFeedbackRating(runId);
|
|
1916
2244
|
}
|
|
1917
2245
|
/**
|
|
1918
2246
|
* Get TestRunWithFeedback by run ID for template binding
|
|
1919
2247
|
*/
|
|
2248
|
+
GetRunWithFeedback(runId) {
|
|
2249
|
+
return this.TestRunsWithFeedback.find(r => r.id === runId);
|
|
2250
|
+
}
|
|
2251
|
+
/** @deprecated Use {@link GetRunWithFeedback}. */
|
|
1920
2252
|
getRunWithFeedback(runId) {
|
|
1921
|
-
return this.
|
|
2253
|
+
return this.GetRunWithFeedback(runId);
|
|
1922
2254
|
}
|
|
1923
2255
|
/**
|
|
1924
2256
|
* Get the human correctness status for a run
|
|
1925
2257
|
*/
|
|
2258
|
+
GetHumanIsCorrect(runId) {
|
|
2259
|
+
return this.Feedbacks.get(runId)?.IsCorrect ?? null;
|
|
2260
|
+
}
|
|
2261
|
+
/** @deprecated Use {@link GetHumanIsCorrect}. */
|
|
1926
2262
|
getHumanIsCorrect(runId) {
|
|
1927
|
-
return this.
|
|
2263
|
+
return this.GetHumanIsCorrect(runId);
|
|
1928
2264
|
}
|
|
1929
2265
|
// ===========================
|
|
1930
2266
|
// Run Tags
|
|
1931
2267
|
// ===========================
|
|
1932
|
-
|
|
2268
|
+
GetRunTags(run) {
|
|
1933
2269
|
return TagsHelper.parseTags(run.Tags);
|
|
1934
2270
|
}
|
|
2271
|
+
/** @deprecated Use {@link GetRunTags}. */
|
|
2272
|
+
getRunTags(run) {
|
|
2273
|
+
return this.GetRunTags(run);
|
|
2274
|
+
}
|
|
1935
2275
|
// ===========================
|
|
1936
2276
|
// Keyboard Shortcuts Settings
|
|
1937
2277
|
// ===========================
|
|
@@ -1944,11 +2284,11 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1944
2284
|
const setting = engine.UserSettings.find(s => s.Setting === SHORTCUTS_SETTINGS_KEY);
|
|
1945
2285
|
if (setting) {
|
|
1946
2286
|
this.shortcutsSettingEntity = setting;
|
|
1947
|
-
this.
|
|
2287
|
+
this.ShowShortcuts = setting.Value === 'true';
|
|
1948
2288
|
}
|
|
1949
2289
|
else {
|
|
1950
2290
|
// Default to hidden
|
|
1951
|
-
this.
|
|
2291
|
+
this.ShowShortcuts = false;
|
|
1952
2292
|
}
|
|
1953
2293
|
this.cdr.markForCheck();
|
|
1954
2294
|
}
|
|
@@ -1959,8 +2299,8 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1959
2299
|
/**
|
|
1960
2300
|
* Toggle keyboard shortcuts visibility and save preference
|
|
1961
2301
|
*/
|
|
1962
|
-
async
|
|
1963
|
-
this.
|
|
2302
|
+
async ToggleShortcuts() {
|
|
2303
|
+
this.ShowShortcuts = !this.ShowShortcuts;
|
|
1964
2304
|
this.cdr.markForCheck();
|
|
1965
2305
|
try {
|
|
1966
2306
|
const userId = this.metadata.CurrentUser?.ID;
|
|
@@ -1978,62 +2318,94 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
1978
2318
|
this.shortcutsSettingEntity.Setting = SHORTCUTS_SETTINGS_KEY;
|
|
1979
2319
|
}
|
|
1980
2320
|
}
|
|
1981
|
-
this.shortcutsSettingEntity.Value = this.
|
|
2321
|
+
this.shortcutsSettingEntity.Value = this.ShowShortcuts ? 'true' : 'false';
|
|
1982
2322
|
await this.shortcutsSettingEntity.Save();
|
|
1983
2323
|
}
|
|
1984
2324
|
catch (error) {
|
|
1985
2325
|
console.warn('Failed to save shortcuts setting:', error);
|
|
1986
2326
|
}
|
|
1987
2327
|
}
|
|
2328
|
+
/** @deprecated Use {@link ToggleShortcuts}. */
|
|
2329
|
+
async toggleShortcuts() {
|
|
2330
|
+
return this.ToggleShortcuts();
|
|
2331
|
+
}
|
|
1988
2332
|
// ===========================
|
|
1989
2333
|
// Analytics Calculations
|
|
1990
2334
|
// ===========================
|
|
2335
|
+
GetPassedCount() {
|
|
2336
|
+
return this.TestRuns.filter(r => r.Status === 'Passed').length;
|
|
2337
|
+
}
|
|
2338
|
+
/** @deprecated Use {@link GetPassedCount}. */
|
|
1991
2339
|
getPassedCount() {
|
|
1992
|
-
return this.
|
|
2340
|
+
return this.GetPassedCount();
|
|
2341
|
+
}
|
|
2342
|
+
GetFailedCount() {
|
|
2343
|
+
return this.TestRuns.filter(r => r.Status === 'Failed' || r.Status === 'Error').length;
|
|
1993
2344
|
}
|
|
2345
|
+
/** @deprecated Use {@link GetFailedCount}. */
|
|
1994
2346
|
getFailedCount() {
|
|
1995
|
-
return this.
|
|
2347
|
+
return this.GetFailedCount();
|
|
1996
2348
|
}
|
|
2349
|
+
GetPassedPercent() {
|
|
2350
|
+
if (this.TestRuns.length === 0)
|
|
2351
|
+
return 0;
|
|
2352
|
+
return (this.GetPassedCount() / this.TestRuns.length) * 100;
|
|
2353
|
+
}
|
|
2354
|
+
/** @deprecated Use {@link GetPassedPercent}. */
|
|
1997
2355
|
getPassedPercent() {
|
|
1998
|
-
|
|
2356
|
+
return this.GetPassedPercent();
|
|
2357
|
+
}
|
|
2358
|
+
GetFailedPercent() {
|
|
2359
|
+
if (this.TestRuns.length === 0)
|
|
1999
2360
|
return 0;
|
|
2000
|
-
return (this.
|
|
2361
|
+
return (this.GetFailedCount() / this.TestRuns.length) * 100;
|
|
2001
2362
|
}
|
|
2363
|
+
/** @deprecated Use {@link GetFailedPercent}. */
|
|
2002
2364
|
getFailedPercent() {
|
|
2003
|
-
|
|
2004
|
-
return 0;
|
|
2005
|
-
return (this.getFailedCount() / this.testRuns.length) * 100;
|
|
2365
|
+
return this.GetFailedPercent();
|
|
2006
2366
|
}
|
|
2007
|
-
|
|
2008
|
-
const runsWithScore = this.
|
|
2367
|
+
GetAverageScore() {
|
|
2368
|
+
const runsWithScore = this.TestRuns.filter(r => r.Score != null);
|
|
2009
2369
|
if (runsWithScore.length === 0)
|
|
2010
2370
|
return 0;
|
|
2011
2371
|
const sum = runsWithScore.reduce((acc, r) => acc + (r.Score || 0), 0);
|
|
2012
2372
|
return sum / runsWithScore.length;
|
|
2013
2373
|
}
|
|
2014
|
-
|
|
2015
|
-
|
|
2374
|
+
/** @deprecated Use {@link GetAverageScore}. */
|
|
2375
|
+
getAverageScore() {
|
|
2376
|
+
return this.GetAverageScore();
|
|
2377
|
+
}
|
|
2378
|
+
GetAverageDuration() {
|
|
2379
|
+
const runsWithDuration = this.TestRuns.filter(r => r.DurationSeconds != null);
|
|
2016
2380
|
if (runsWithDuration.length === 0)
|
|
2017
2381
|
return 0;
|
|
2018
2382
|
const sum = runsWithDuration.reduce((acc, r) => acc + (r.DurationSeconds || 0), 0);
|
|
2019
2383
|
return sum / runsWithDuration.length;
|
|
2020
2384
|
}
|
|
2385
|
+
/** @deprecated Use {@link GetAverageDuration}. */
|
|
2386
|
+
getAverageDuration() {
|
|
2387
|
+
return this.GetAverageDuration();
|
|
2388
|
+
}
|
|
2389
|
+
GetTotalCost() {
|
|
2390
|
+
return this.TestRuns.reduce((acc, r) => acc + (r.CostUSD || 0), 0);
|
|
2391
|
+
}
|
|
2392
|
+
/** @deprecated Use {@link GetTotalCost}. */
|
|
2021
2393
|
getTotalCost() {
|
|
2022
|
-
return this.
|
|
2394
|
+
return this.GetTotalCost();
|
|
2023
2395
|
}
|
|
2024
2396
|
// ===========================
|
|
2025
2397
|
// Export
|
|
2026
2398
|
// ===========================
|
|
2027
|
-
|
|
2399
|
+
ExportToCSV() {
|
|
2028
2400
|
const headers = ['Test Name', 'Status', 'Score', 'Duration (s)', 'Cost (USD)', 'Started At', 'Tags'];
|
|
2029
|
-
const rows = this.
|
|
2401
|
+
const rows = this.TestRuns.map(run => [
|
|
2030
2402
|
run.Test || '',
|
|
2031
2403
|
run.Status || '',
|
|
2032
2404
|
run.Score?.toFixed(4) || '',
|
|
2033
2405
|
run.DurationSeconds?.toFixed(2) || '',
|
|
2034
2406
|
run.CostUSD?.toFixed(6) || '',
|
|
2035
2407
|
run.StartedAt ? new Date(run.StartedAt).toISOString() : '',
|
|
2036
|
-
this.
|
|
2408
|
+
this.GetRunTags(run).join('; ')
|
|
2037
2409
|
]);
|
|
2038
2410
|
const csvContent = [headers, ...rows]
|
|
2039
2411
|
.map(row => row.map(cell => `"${cell}"`).join(','))
|
|
@@ -2046,6 +2418,10 @@ let MJTestSuiteRunFormComponentExtended = class MJTestSuiteRunFormComponentExten
|
|
|
2046
2418
|
URL.revokeObjectURL(link.href);
|
|
2047
2419
|
SharedService.Instance.CreateSimpleNotification('Export complete', 'success', 2000);
|
|
2048
2420
|
}
|
|
2421
|
+
/** @deprecated Use {@link ExportToCSV}. */
|
|
2422
|
+
exportToCSV() {
|
|
2423
|
+
return this.ExportToCSV();
|
|
2424
|
+
}
|
|
2049
2425
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJTestSuiteRunFormComponentExtended_BaseFactory; return function MJTestSuiteRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJTestSuiteRunFormComponentExtended_BaseFactory || (ɵMJTestSuiteRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJTestSuiteRunFormComponentExtended)))(__ngFactoryType__ || MJTestSuiteRunFormComponentExtended); }; })(); }
|
|
2050
2426
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJTestSuiteRunFormComponentExtended, selectors: [["mj-test-suite-run-form"]], hostBindings: function MJTestSuiteRunFormComponentExtended_HostBindings(rf, ctx) { if (rf & 1) {
|
|
2051
2427
|
i0.ɵɵlistener("keydown", function MJTestSuiteRunFormComponentExtended_keydown_HostBindingHandler($event) { return ctx.handleKeyboardShortcut($event); }, i0.ɵɵresolveDocument);
|