@cqa-lib/cqa-ui 1.1.199 → 1.1.201
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/esm2020/lib/custom-input/custom-input.component.mjs +3 -3
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +7 -3
- package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +67 -5
- package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +1 -1
- package/esm2020/lib/test-case-details/element-popup/element-popup-form-data.mjs +2 -0
- package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +289 -99
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +7 -3
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +26 -27
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +1 -1
- package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +24 -4
- package/esm2020/lib/test-case-details/test-case-step.models.mjs +1 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +431 -140
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +417 -138
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +6 -1
- package/lib/test-case-details/element-list/element-list.component.d.ts +15 -3
- package/lib/test-case-details/element-popup/element-popup-data.d.ts +3 -0
- package/lib/test-case-details/element-popup/element-popup-form-data.d.ts +22 -0
- package/lib/test-case-details/element-popup/element-popup.component.d.ts +72 -19
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +6 -1
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +1 -0
- package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +7 -2
- package/lib/test-case-details/test-case-step.models.d.ts +7 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/styles.css +1 -1
|
@@ -92,6 +92,11 @@ export declare class TestCaseConditionStepComponent implements OnInit, OnChanges
|
|
|
92
92
|
searchDataProfiles: EventEmitter<string>;
|
|
93
93
|
/** Emit when a nested step is updated (e.g., Apply button clicked in loop-step edit mode) */
|
|
94
94
|
stepUpdate: EventEmitter<TestCaseStepConfig>;
|
|
95
|
+
/** Re-emit when a nested step (e.g. normal-step) emits clickAction (e.g. element/label click for popup) */
|
|
96
|
+
clickAction: EventEmitter<{
|
|
97
|
+
event: MouseEvent;
|
|
98
|
+
step: TestCaseStepConfig;
|
|
99
|
+
}>;
|
|
95
100
|
onDndDrop(event: DndDropEvent, branch: ConditionBranch): void;
|
|
96
101
|
constructor(fb: FormBuilder, cdr: ChangeDetectorRef);
|
|
97
102
|
ngOnInit(): void;
|
|
@@ -159,5 +164,5 @@ export declare class TestCaseConditionStepComponent implements OnInit, OnChanges
|
|
|
159
164
|
/** Get select config for a template variable */
|
|
160
165
|
getSelectConfigForVariable(variable: any, branchIdOrIsElse?: string | boolean): DynamicSelectFieldConfig;
|
|
161
166
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestCaseConditionStepComponent, never>;
|
|
162
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseConditionStepComponent, "cqa-test-case-condition-step", never, { "config": "config"; "id": "id"; "stepNumber": "stepNumber"; "condition": "condition"; "branches": "branches"; "expanded": "expanded"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "isReorder": "isReorder"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; "setConditionTemplateVariables": "setConditionTemplateVariables"; }, { "toggleExpanded": "toggleExpanded"; "conditionChange": "conditionChange"; "branchStepChange": "branchStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "addBranch": "addBranch"; "addElse": "addElse"; "deleteBranch": "deleteBranch"; "duplicate": "duplicate"; "delete": "delete"; "moreOptions": "moreOptions"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; }, never, never>;
|
|
167
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseConditionStepComponent, "cqa-test-case-condition-step", never, { "config": "config"; "id": "id"; "stepNumber": "stepNumber"; "condition": "condition"; "branches": "branches"; "expanded": "expanded"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "isReorder": "isReorder"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; "setConditionTemplateVariables": "setConditionTemplateVariables"; }, { "toggleExpanded": "toggleExpanded"; "conditionChange": "conditionChange"; "branchStepChange": "branchStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "addBranch": "addBranch"; "addElse": "addElse"; "deleteBranch": "deleteBranch"; "duplicate": "duplicate"; "delete": "delete"; "moreOptions": "moreOptions"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; "clickAction": "clickAction"; }, never, never>;
|
|
163
168
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
1
|
+
import { EventEmitter, AfterViewInit, OnDestroy, ElementRef, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class ElementListComponent {
|
|
3
|
+
export declare class ElementListComponent implements AfterViewInit, OnDestroy, OnChanges {
|
|
4
|
+
scrollContainer?: ElementRef<HTMLDivElement>;
|
|
4
5
|
/** Array of items to display */
|
|
5
6
|
items: any[];
|
|
6
7
|
/** Key to access the title property from each item (default: 'title') */
|
|
@@ -11,8 +12,15 @@ export declare class ElementListComponent {
|
|
|
11
12
|
labelsKey: string;
|
|
12
13
|
/** Maximum height for the scrollable container (default: '200px') */
|
|
13
14
|
maxHeight: string;
|
|
15
|
+
/** Whether more items can be loaded */
|
|
16
|
+
hasMore: boolean;
|
|
14
17
|
/** Emitted when an item is clicked */
|
|
15
18
|
itemClick: EventEmitter<any>;
|
|
19
|
+
/** Emitted when user scrolls near the bottom and more items should be loaded */
|
|
20
|
+
loadMore: EventEmitter<void>;
|
|
21
|
+
private scrollObserver?;
|
|
22
|
+
/** Skip the first intersection callback (fires immediately when observe() is called) to prevent duplicate API calls on load */
|
|
23
|
+
private skipNextIntersection;
|
|
16
24
|
/**
|
|
17
25
|
* Get the value from an item using the specified key
|
|
18
26
|
*/
|
|
@@ -21,6 +29,10 @@ export declare class ElementListComponent {
|
|
|
21
29
|
* Handle item click
|
|
22
30
|
*/
|
|
23
31
|
onItemClick(item: any): void;
|
|
32
|
+
ngAfterViewInit(): void;
|
|
33
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
34
|
+
ngOnDestroy(): void;
|
|
35
|
+
private setupScrollObserver;
|
|
24
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElementListComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ElementListComponent, "cqa-element-list", never, { "items": "items"; "titleKey": "titleKey"; "selectorKey": "selectorKey"; "labelsKey": "labelsKey"; "maxHeight": "maxHeight"; }, { "itemClick": "itemClick"; }, never, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElementListComponent, "cqa-element-list", never, { "items": "items"; "titleKey": "titleKey"; "selectorKey": "selectorKey"; "labelsKey": "labelsKey"; "maxHeight": "maxHeight"; "hasMore": "hasMore"; }, { "itemClick": "itemClick"; "loadMore": "loadMore"; }, never, never>;
|
|
26
38
|
}
|
|
@@ -10,6 +10,9 @@ export interface ElementPopupDataElements {
|
|
|
10
10
|
labels: string[];
|
|
11
11
|
title: string;
|
|
12
12
|
selector?: string;
|
|
13
|
+
id?: number;
|
|
14
|
+
screenName?: string;
|
|
15
|
+
screenNameId?: number;
|
|
13
16
|
}
|
|
14
17
|
/** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
|
|
15
18
|
export declare const ELEMENT_POPUP_EDIT_IN_DEPTH: unique symbol;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Payload emitted when user creates a new element */
|
|
2
|
+
export interface ElementCreatePayload {
|
|
3
|
+
name: string;
|
|
4
|
+
screenNameId?: number;
|
|
5
|
+
screenNameName: string;
|
|
6
|
+
locatorValue: string;
|
|
7
|
+
labels: string[];
|
|
8
|
+
}
|
|
9
|
+
/** Payload emitted when user updates an existing element */
|
|
10
|
+
export interface ElementUpdatePayload {
|
|
11
|
+
elementId: number;
|
|
12
|
+
name: string;
|
|
13
|
+
screenNameId?: number;
|
|
14
|
+
screenNameName: string;
|
|
15
|
+
locatorValue: string;
|
|
16
|
+
labels: string[];
|
|
17
|
+
}
|
|
18
|
+
/** Screen name option for autocomplete */
|
|
19
|
+
export interface ScreenNameOption {
|
|
20
|
+
id?: number;
|
|
21
|
+
name: string;
|
|
22
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ElementPopupData, ElementPopupDataElements } from './element-popup-data';
|
|
3
|
+
import { ElementCreatePayload, ElementUpdatePayload, ScreenNameOption } from './element-popup-form-data';
|
|
3
4
|
import { ElementPopupRef } from './../element-popup/element-popup-ref';
|
|
4
5
|
import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
|
|
5
6
|
import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export declare class ElementPopupComponent implements OnInit, OnChanges {
|
|
8
|
-
private ref
|
|
9
|
+
private ref?;
|
|
9
10
|
private readonly cdr?;
|
|
10
11
|
value: string;
|
|
11
12
|
helpUrl: string;
|
|
@@ -14,47 +15,99 @@ export declare class ElementPopupComponent implements OnInit, OnChanges {
|
|
|
14
15
|
elements: ElementPopupDataElements[];
|
|
15
16
|
enableForm: boolean;
|
|
16
17
|
isOnRecord: boolean;
|
|
18
|
+
hasMoreElements: boolean;
|
|
19
|
+
/** Element ID when editing existing element */
|
|
20
|
+
elementId?: number;
|
|
21
|
+
/** Screen name options for autocomplete (from API) */
|
|
22
|
+
screenNameOptions: ScreenNameOption[];
|
|
23
|
+
/** Whether more screen names are available for infinite scroll */
|
|
24
|
+
hasMoreScreenNames: boolean;
|
|
25
|
+
/** True while parent is loading screen names (search or load more) */
|
|
26
|
+
isLoadingScreenNames: boolean;
|
|
27
|
+
/** Suggested tags from API for labels field */
|
|
28
|
+
suggestedTags: string[];
|
|
29
|
+
/** True while parent is fetching latest element data for edit (shows loading state) */
|
|
30
|
+
isElementLoading: boolean;
|
|
31
|
+
/** Recent searched items to display in Recent section */
|
|
32
|
+
recentSearchedItems: string[];
|
|
17
33
|
apply: EventEmitter<string>;
|
|
18
34
|
cancel: EventEmitter<void>;
|
|
19
35
|
editInDepth: EventEmitter<void>;
|
|
20
|
-
searchElement: EventEmitter<
|
|
36
|
+
searchElement: EventEmitter<string>;
|
|
37
|
+
/** Emitted when user clicks on a recent searched item */
|
|
38
|
+
recentItemClick: EventEmitter<string>;
|
|
39
|
+
loadMoreElements: EventEmitter<void>;
|
|
40
|
+
/** Emitted when user creates a new element (parent should call API) */
|
|
41
|
+
createElement: EventEmitter<ElementCreatePayload>;
|
|
42
|
+
/** Emitted when user updates an element (parent should call API) */
|
|
43
|
+
updateElement: EventEmitter<ElementUpdatePayload>;
|
|
44
|
+
/** Emitted when user requests to create a new screen name */
|
|
45
|
+
createScreenNameRequest: EventEmitter<string>;
|
|
46
|
+
/** Emitted when user searches screen names (server search) */
|
|
47
|
+
searchScreenName: EventEmitter<string>;
|
|
48
|
+
/** Emitted when user scrolls to load more screen names (passes current search query) */
|
|
49
|
+
loadMoreScreenNames: EventEmitter<string>;
|
|
50
|
+
/** Emitted when Create or Edit form is opened - parent should fetch screen names and (for edit) latest element */
|
|
51
|
+
formOpenRequest: EventEmitter<{
|
|
52
|
+
mode: 'create' | 'edit';
|
|
53
|
+
elementId?: number;
|
|
54
|
+
}>;
|
|
55
|
+
/** Emitted when user selects an element from the list - parent should set element and editingElementId for Edit flow */
|
|
56
|
+
elementSelect: EventEmitter<ElementPopupDataElements>;
|
|
57
|
+
/** Emitted when user clicks Record - parent should check extension and call installPlugin or openSidePanelAndListSteps */
|
|
58
|
+
toggleRecord: EventEmitter<void>;
|
|
21
59
|
form: FormGroup;
|
|
22
|
-
/** Tooltip shown when hovering over the "Need help ?" icon and text */
|
|
23
60
|
helpTooltipText: string;
|
|
24
|
-
/** Whether the help tooltip is visible (custom tooltip for use inside overlay) */
|
|
25
61
|
showHelpTooltip: boolean;
|
|
26
|
-
/** Whether we're in edit mode (true) or create mode (false) */
|
|
27
62
|
isEditMode: boolean;
|
|
63
|
+
/** Whether we're in create mode (no elementId) */
|
|
64
|
+
isCreateMode: boolean;
|
|
65
|
+
/** Labels (tags) as string array for multi-tag input */
|
|
66
|
+
formLabels: string[];
|
|
67
|
+
/** Current tag input value */
|
|
68
|
+
tagInputValue: string;
|
|
69
|
+
/** Current search input value (bound to search bar) */
|
|
70
|
+
searchValue: string;
|
|
71
|
+
/** Config for screen name dynamic-select (server search, allowCustomValue, infinite scroll) */
|
|
72
|
+
screenNameSelectConfig: DynamicSelectFieldConfig;
|
|
73
|
+
/** Whether we're saving (disable buttons) */
|
|
74
|
+
saving: boolean;
|
|
28
75
|
private injectedData?;
|
|
29
76
|
private fb;
|
|
30
|
-
|
|
31
|
-
private cachedSelectOptions;
|
|
32
|
-
/** Cached select config to avoid recreating on every change detection */
|
|
33
|
-
private cachedSelectConfig?;
|
|
34
|
-
constructor(ref: ElementPopupRef, data?: ElementPopupData, fb?: FormBuilder, cdr?: ChangeDetectorRef);
|
|
77
|
+
constructor(ref?: ElementPopupRef, data?: ElementPopupData, fb?: FormBuilder, cdr?: ChangeDetectorRef);
|
|
35
78
|
ngOnChanges(changes: SimpleChanges): void;
|
|
36
79
|
ngOnInit(): void;
|
|
37
80
|
private initializeForm;
|
|
81
|
+
private updateScreenNameSelectConfig;
|
|
38
82
|
private populateFormForEdit;
|
|
83
|
+
private populateFormForCreateWithElement;
|
|
39
84
|
private resetForm;
|
|
85
|
+
/** Called by parent when a new screen name was created (so we can set the selected value) */
|
|
86
|
+
setCreatedScreenName(opt: {
|
|
87
|
+
id: number;
|
|
88
|
+
name: string;
|
|
89
|
+
}): void;
|
|
40
90
|
onApply(): void;
|
|
91
|
+
onCreateOrUpdateSuccess(): void;
|
|
92
|
+
onCreateOrUpdateError(): void;
|
|
41
93
|
toggleForm(): void;
|
|
42
|
-
/** Called when "Create New" button is clicked - explicitly sets create mode */
|
|
43
94
|
openCreateForm(): void;
|
|
44
|
-
|
|
95
|
+
onToggleRecordClick(): void;
|
|
45
96
|
onCancel(): void;
|
|
46
97
|
onClose(): void;
|
|
47
98
|
onEditInDepth(event: Event): void;
|
|
48
|
-
search(event:
|
|
99
|
+
search(event: string): void;
|
|
49
100
|
onHelp(event: Event): void;
|
|
50
|
-
onVariableValueChange(variableName: string, value: any): void;
|
|
51
|
-
/** Update cached select options when labels change */
|
|
52
|
-
private updateSelectOptions;
|
|
53
|
-
getSelectConfig(): DynamicSelectFieldConfig;
|
|
54
101
|
getFormControl(controlName: string): FormControl;
|
|
55
102
|
getFormControlValue(controlName: string): string;
|
|
56
103
|
onFormControlChange(controlName: string, value: string): void;
|
|
104
|
+
/** Add a tag (label) */
|
|
105
|
+
addTag(tag?: string): void;
|
|
106
|
+
removeTag(tag: string): void;
|
|
107
|
+
onTagInputKeydown(event: KeyboardEvent): void;
|
|
57
108
|
onElementClick(element: ElementPopupDataElements): void;
|
|
58
|
-
|
|
59
|
-
|
|
109
|
+
onLoadMoreElements(): void;
|
|
110
|
+
onRecentItemClick(item: string): void;
|
|
111
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElementPopupComponent, [{ optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
112
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElementPopupComponent, "cqa-element-popup", never, { "value": "value"; "helpUrl": "helpUrl"; "labels": "labels"; "element": "element"; "elements": "elements"; "enableForm": "enableForm"; "isOnRecord": "isOnRecord"; "hasMoreElements": "hasMoreElements"; "elementId": "elementId"; "screenNameOptions": "screenNameOptions"; "hasMoreScreenNames": "hasMoreScreenNames"; "isLoadingScreenNames": "isLoadingScreenNames"; "suggestedTags": "suggestedTags"; "isElementLoading": "isElementLoading"; "recentSearchedItems": "recentSearchedItems"; }, { "apply": "apply"; "cancel": "cancel"; "editInDepth": "editInDepth"; "searchElement": "searchElement"; "recentItemClick": "recentItemClick"; "loadMoreElements": "loadMoreElements"; "createElement": "createElement"; "updateElement": "updateElement"; "createScreenNameRequest": "createScreenNameRequest"; "searchScreenName": "searchScreenName"; "loadMoreScreenNames": "loadMoreScreenNames"; "formOpenRequest": "formOpenRequest"; "elementSelect": "elementSelect"; "toggleRecord": "toggleRecord"; }, never, never>;
|
|
60
113
|
}
|
|
@@ -58,6 +58,11 @@ export declare class TestCaseLoopStepComponent implements OnInit, OnChanges {
|
|
|
58
58
|
searchDataProfiles: EventEmitter<string>;
|
|
59
59
|
/** Emit when step is updated (Apply button clicked in edit mode) */
|
|
60
60
|
stepUpdate: EventEmitter<LoopStepConfig>;
|
|
61
|
+
/** Re-emit when a nested step (e.g. normal-step) emits clickAction (e.g. element/label click for popup) */
|
|
62
|
+
clickAction: EventEmitter<{
|
|
63
|
+
event: MouseEvent;
|
|
64
|
+
step: TestCaseStepConfig;
|
|
65
|
+
}>;
|
|
61
66
|
onDndDrop(event: DndDropEvent): void;
|
|
62
67
|
/** Expose global constructors for template (Angular templates don't have String/Number) */
|
|
63
68
|
readonly stringFn: StringConstructor;
|
|
@@ -135,5 +140,5 @@ export declare class TestCaseLoopStepComponent implements OnInit, OnChanges {
|
|
|
135
140
|
onDelete(): void;
|
|
136
141
|
onMoreOptions(): void;
|
|
137
142
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestCaseLoopStepComponent, never>;
|
|
138
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseLoopStepComponent, "cqa-test-case-loop-step", never, { "config": "config"; "id": "id"; "loopType": "loopType"; "stepNumber": "stepNumber"; "condition": "condition"; "maxIterations": "maxIterations"; "testDataProfile": "testDataProfile"; "startStep": "startStep"; "endStep": "endStep"; "nestedSteps": "nestedSteps"; "expanded": "expanded"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "isReorder": "isReorder"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; }, { "toggleExpanded": "toggleExpanded"; "testDataProfileChange": "testDataProfileChange"; "startStepChange": "startStepChange"; "endStepChange": "endStepChange"; "conditionChange": "conditionChange"; "maxIterationsChange": "maxIterationsChange"; "nestedStepChange": "nestedStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "duplicate": "duplicate"; "delete": "delete"; "moreOptions": "moreOptions"; "edit": "edit"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; }, never, never>;
|
|
143
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseLoopStepComponent, "cqa-test-case-loop-step", never, { "config": "config"; "id": "id"; "loopType": "loopType"; "stepNumber": "stepNumber"; "condition": "condition"; "maxIterations": "maxIterations"; "testDataProfile": "testDataProfile"; "startStep": "startStep"; "endStep": "endStep"; "nestedSteps": "nestedSteps"; "expanded": "expanded"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "isReorder": "isReorder"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; }, { "toggleExpanded": "toggleExpanded"; "testDataProfileChange": "testDataProfileChange"; "startStepChange": "startStepChange"; "endStepChange": "endStepChange"; "conditionChange": "conditionChange"; "maxIterationsChange": "maxIterationsChange"; "nestedStepChange": "nestedStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "duplicate": "duplicate"; "delete": "delete"; "moreOptions": "moreOptions"; "edit": "edit"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; "clickAction": "clickAction"; }, never, never>;
|
|
139
144
|
}
|
|
@@ -17,6 +17,7 @@ export declare class TestCaseNormalStepComponent implements OnInit {
|
|
|
17
17
|
testDataTrigger?: ElementRef<HTMLElement>;
|
|
18
18
|
editTrigger?: ElementRef<HTMLElement>;
|
|
19
19
|
elementTrigger?: ElementRef<HTMLElement>;
|
|
20
|
+
clickElementTrigger?: ElementRef<HTMLElement>;
|
|
20
21
|
config: NormalStepConfig;
|
|
21
22
|
stepNumber: number | string;
|
|
22
23
|
action: string;
|
package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class TestCaseDetailsRendererComponent implements OnChanges, Afte
|
|
|
15
15
|
/** When true, enables drag-and-drop reordering and shows drag handle icon instead of checkbox */
|
|
16
16
|
isReorder: boolean;
|
|
17
17
|
addStepBetween: boolean;
|
|
18
|
+
action?: string;
|
|
18
19
|
nestedStepChange: EventEmitter<{
|
|
19
20
|
step: TestCaseStepConfig;
|
|
20
21
|
index: number;
|
|
@@ -67,7 +68,11 @@ export declare class TestCaseDetailsRendererComponent implements OnChanges, Afte
|
|
|
67
68
|
maxIterationsChange: EventEmitter<number>;
|
|
68
69
|
eventTypeChange: EventEmitter<any>;
|
|
69
70
|
parameterChange: EventEmitter<any>;
|
|
70
|
-
|
|
71
|
+
/** Emits with step so parent (e.g. step-list) gets correct step when click is from nested step (e.g. inside loop). */
|
|
72
|
+
clickAction: EventEmitter<{
|
|
73
|
+
event: MouseEvent;
|
|
74
|
+
step: TestCaseStepConfig;
|
|
75
|
+
}>;
|
|
71
76
|
/** Emitted when a step is dropped in a nested dropzone (step-group, loop, condition). Payload: { event, targetList }. */
|
|
72
77
|
dndDropInZone: EventEmitter<{
|
|
73
78
|
event: any;
|
|
@@ -102,5 +107,5 @@ export declare class TestCaseDetailsRendererComponent implements OnChanges, Afte
|
|
|
102
107
|
private wireOutputs;
|
|
103
108
|
ngOnDestroy(): void;
|
|
104
109
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestCaseDetailsRendererComponent, never>;
|
|
105
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseDetailsRendererComponent, "cqa-test-case-details-renderer", never, { "step": "step"; "index": "index"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "branch": "branch"; "isReorder": "isReorder"; "addStepBetween": "addStepBetween"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; "setConditionTemplateVariables": "setConditionTemplateVariables"; }, { "nestedStepChange": "nestedStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "toggleExpanded": "toggleExpanded"; "groupNameChange": "groupNameChange"; "descriptionChange": "descriptionChange"; "reusableChange": "reusableChange"; "openExternal": "openExternal"; "edit": "edit"; "link": "link"; "duplicate": "duplicate"; "delete": "delete"; "viewDetails": "viewDetails"; "selectionChange": "selectionChange"; "conditionChange": "conditionChange"; "branchStepChange": "branchStepChange"; "addStepForBranch": "addStepForBranch"; "deleteStepWithBranch": "deleteStepWithBranch"; "addBranch": "addBranch"; "addElse": "addElse"; "deleteBranch": "deleteBranch"; "testDataProfileChange": "testDataProfileChange"; "startStepChange": "startStepChange"; "endStepChange": "endStepChange"; "maxIterationsChange": "maxIterationsChange"; "eventTypeChange": "eventTypeChange"; "parameterChange": "parameterChange"; "clickAction": "clickAction"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; "addStepBetweenClick": "addStepBetweenClick"; }, never, never>;
|
|
110
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TestCaseDetailsRendererComponent, "cqa-test-case-details-renderer", never, { "step": "step"; "index": "index"; "isNested": "isNested"; "isInsideLoop": "isInsideLoop"; "branch": "branch"; "isReorder": "isReorder"; "addStepBetween": "addStepBetween"; "action": "action"; "dataProfileOptions": "dataProfileOptions"; "hasMoreDataProfiles": "hasMoreDataProfiles"; "isLoadingDataProfiles": "isLoadingDataProfiles"; "naturalTextActionsOptions": "naturalTextActionsOptions"; "setConditionTemplateVariables": "setConditionTemplateVariables"; }, { "nestedStepChange": "nestedStepChange"; "addStep": "addStep"; "deleteStep": "deleteStep"; "toggleExpanded": "toggleExpanded"; "groupNameChange": "groupNameChange"; "descriptionChange": "descriptionChange"; "reusableChange": "reusableChange"; "openExternal": "openExternal"; "edit": "edit"; "link": "link"; "duplicate": "duplicate"; "delete": "delete"; "viewDetails": "viewDetails"; "selectionChange": "selectionChange"; "conditionChange": "conditionChange"; "branchStepChange": "branchStepChange"; "addStepForBranch": "addStepForBranch"; "deleteStepWithBranch": "deleteStepWithBranch"; "addBranch": "addBranch"; "addElse": "addElse"; "deleteBranch": "deleteBranch"; "testDataProfileChange": "testDataProfileChange"; "startStepChange": "startStepChange"; "endStepChange": "endStepChange"; "maxIterationsChange": "maxIterationsChange"; "eventTypeChange": "eventTypeChange"; "parameterChange": "parameterChange"; "clickAction": "clickAction"; "dndDropInZone": "dndDropInZone"; "loadMoreDataProfiles": "loadMoreDataProfiles"; "searchDataProfiles": "searchDataProfiles"; "stepUpdate": "stepUpdate"; "addStepBetweenClick": "addStepBetweenClick"; }, never, never>;
|
|
106
111
|
}
|
|
@@ -43,11 +43,18 @@ export interface BaseStepConfig {
|
|
|
43
43
|
selected?: boolean;
|
|
44
44
|
disabled?: boolean;
|
|
45
45
|
expanded?: boolean;
|
|
46
|
+
event?: Record<string, unknown>;
|
|
46
47
|
}
|
|
47
48
|
export interface NormalStepConfig extends BaseStepConfig {
|
|
48
49
|
stepType: StepTypes.NORMAL;
|
|
49
50
|
eventType: TestCaseEventType;
|
|
50
51
|
parameters: StepParameter[];
|
|
52
|
+
elementData?: {
|
|
53
|
+
label?: string;
|
|
54
|
+
selector?: string;
|
|
55
|
+
pwLocator?: string[];
|
|
56
|
+
labels?: string[];
|
|
57
|
+
};
|
|
51
58
|
}
|
|
52
59
|
/** API Step Configuration */
|
|
53
60
|
export interface ApiStepConfig extends BaseStepConfig {
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -122,6 +122,7 @@ export * from './lib/step-builder/step-builder-loop/step-builder-loop.component'
|
|
|
122
122
|
export * from './lib/test-case-details/element-popup/element-popup.component';
|
|
123
123
|
export * from './lib/test-case-details/element-popup/element-popup-ref';
|
|
124
124
|
export * from './lib/test-case-details/element-popup/element-popup-data';
|
|
125
|
+
export * from './lib/test-case-details/element-popup/element-popup-form-data';
|
|
125
126
|
export * from './lib/test-case-details/element-popup/element-popup.service';
|
|
126
127
|
export * from './lib/step-builder/step-builder-condition/step-builder-condition.component';
|
|
127
128
|
export * from './lib/step-builder/step-builder-database/step-builder-database.component';
|