@memberjunction/ng-record-clone 0.0.1-seed.1 → 6.2.0-edge.3
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/LICENSE +183 -0
- package/README.md +241 -3
- package/dist/lib/clone-lineage-chip.component.d.ts +50 -0
- package/dist/lib/clone-lineage-chip.component.d.ts.map +1 -0
- package/dist/lib/clone-lineage-chip.component.js +448 -0
- package/dist/lib/clone-lineage-chip.component.js.map +1 -0
- package/dist/lib/clone-plan-tree.component.d.ts +51 -0
- package/dist/lib/clone-plan-tree.component.d.ts.map +1 -0
- package/dist/lib/clone-plan-tree.component.js +634 -0
- package/dist/lib/clone-plan-tree.component.js.map +1 -0
- package/dist/lib/clone-progress.component.d.ts +12 -0
- package/dist/lib/clone-progress.component.d.ts.map +1 -0
- package/dist/lib/clone-progress.component.js +151 -0
- package/dist/lib/clone-progress.component.js.map +1 -0
- package/dist/lib/clone-result.component.d.ts +40 -0
- package/dist/lib/clone-result.component.d.ts.map +1 -0
- package/dist/lib/clone-result.component.js +357 -0
- package/dist/lib/clone-result.component.js.map +1 -0
- package/dist/lib/clone-review.component.d.ts +58 -0
- package/dist/lib/clone-review.component.d.ts.map +1 -0
- package/dist/lib/clone-review.component.js +581 -0
- package/dist/lib/clone-review.component.js.map +1 -0
- package/dist/lib/clone-scope-controls.component.d.ts +81 -0
- package/dist/lib/clone-scope-controls.component.d.ts.map +1 -0
- package/dist/lib/clone-scope-controls.component.js +394 -0
- package/dist/lib/clone-scope-controls.component.js.map +1 -0
- package/dist/lib/clone-values.component.d.ts +55 -0
- package/dist/lib/clone-values.component.d.ts.map +1 -0
- package/dist/lib/clone-values.component.js +493 -0
- package/dist/lib/clone-values.component.js.map +1 -0
- package/dist/lib/record-clone-panel.component.d.ts +247 -0
- package/dist/lib/record-clone-panel.component.d.ts.map +1 -0
- package/dist/lib/record-clone-panel.component.js +1252 -0
- package/dist/lib/record-clone-panel.component.js.map +1 -0
- package/dist/lib/record-clone-slide-in.component.d.ts +83 -0
- package/dist/lib/record-clone-slide-in.component.d.ts.map +1 -0
- package/dist/lib/record-clone-slide-in.component.js +206 -0
- package/dist/lib/record-clone-slide-in.component.js.map +1 -0
- package/dist/lib/record-clone-types.d.ts +89 -0
- package/dist/lib/record-clone-types.d.ts.map +1 -0
- package/dist/lib/record-clone-types.js +29 -0
- package/dist/lib/record-clone-types.js.map +1 -0
- package/dist/lib/record-clone.module.d.ts +16 -0
- package/dist/lib/record-clone.module.d.ts.map +1 -0
- package/dist/lib/record-clone.module.js +69 -0
- package/dist/lib/record-clone.module.js.map +1 -0
- package/dist/lib/record-clone.service.d.ts +42 -0
- package/dist/lib/record-clone.service.d.ts.map +1 -0
- package/dist/lib/record-clone.service.js +123 -0
- package/dist/lib/record-clone.service.js.map +1 -0
- package/dist/public-api.d.ts +16 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +16 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +47 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-values.component.js","sourceRoot":"","sources":["../../src/lib/clone-values.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Values configuration component for cloned records.\n *\n * Implements §12.3 & §12.4 of the Record Cloning architectural blueprint. Captures\n * the root cloned record's name (prefilled via the naming strategy), prompts for\n * required or configured field values, displays retarget pickers for foreign keys,\n * and records an optional clone justification reason.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MJSwitchComponent } from '@memberjunction/ng-ui-components';\nimport type {\n ClonePromptFieldItem,\n CloneRetargetFieldItem,\n} from './record-clone-types';\n\n@Component({\n standalone: true,\n selector: 'mj-clone-values',\n template: `\n <div class=\"clone-values-container\">\n <!-- Root Record Name -->\n <div class=\"control-group\">\n <label class=\"control-label\" for=\"root-name-input\">\n Name for Cloned {{EntityName}} <span class=\"required-asterisk\">*</span>\n </label>\n <input\n id=\"root-name-input\"\n type=\"text\"\n class=\"mj-input root-name-input\"\n placeholder=\"Enter record name...\"\n [value]=\"RootName\"\n [readOnly]=\"RootNameReadOnly\"\n [attr.aria-readonly]=\"RootNameReadOnly || null\"\n (input)=\"OnRootNameInput($event)\" />\n @if (NamingStrategyReason) {\n <span class=\"control-hint naming-hint\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{NamingStrategyReason}}\n </span>\n }\n </div>\n\n <!-- Prompted Fields -->\n @if (PromptedFields && PromptedFields.length > 0) {\n <div class=\"section-group\">\n <h4 class=\"section-title\">Required & Prompted Fields</h4>\n <p class=\"section-description\">\n Provide or verify the following fields for the cloned record:\n </p>\n\n <div class=\"fields-grid\">\n @for (field of PromptedFields; track field.FieldName) {\n <div class=\"control-group field-item\">\n <label class=\"control-label\" [for]=\"'field-' + field.FieldName\">\n {{field.DisplayName || field.FieldName}}\n @if (field.IsRequired) {\n <span class=\"required-asterisk\">*</span>\n }\n </label>\n\n @switch (field.Type.toLowerCase()) {\n @case ('boolean') {\n <div class=\"switch-field-row\">\n <mj-switch\n [InputId]=\"'field-' + field.FieldName\"\n [ngModel]=\"!!PromptedValues[field.FieldName]\"\n (ngModelChange)=\"OnFieldChange(field.FieldName, $event)\">\n </mj-switch>\n <span class=\"switch-field-label\">\n {{PromptedValues[field.FieldName] ? 'Yes / Enabled' : 'No / Disabled'}}\n </span>\n </div>\n }\n @case ('number') {\n <input\n [id]=\"'field-' + field.FieldName\"\n type=\"number\"\n class=\"mj-input\"\n [value]=\"PromptedValues[field.FieldName] ?? ''\"\n (input)=\"OnNumberFieldInput(field.FieldName, $event)\" />\n }\n @case ('date') {\n <input\n [id]=\"'field-' + field.FieldName\"\n type=\"date\"\n class=\"mj-input\"\n [value]=\"PromptedValues[field.FieldName] ?? ''\"\n (input)=\"OnTextFieldInput(field.FieldName, $event)\" />\n }\n @default {\n <input\n [id]=\"'field-' + field.FieldName\"\n type=\"text\"\n class=\"mj-input\"\n [value]=\"PromptedValues[field.FieldName] ?? ''\"\n (input)=\"OnTextFieldInput(field.FieldName, $event)\" />\n }\n }\n\n @if (field.Description) {\n <span class=\"control-hint\">{{field.Description}}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Retarget Foreign Keys -->\n @if (RetargetFields && RetargetFields.length > 0) {\n <div class=\"section-group\">\n <h4 class=\"section-title\">Retarget Relationships</h4>\n <p class=\"section-description\">\n Redirect parent or foreign key references for the cloned record:\n </p>\n\n <div class=\"retarget-grid\">\n @for (item of RetargetFields; track item.FieldName) {\n <div class=\"control-group retarget-item\">\n <label class=\"control-label\" [for]=\"'retarget-' + item.FieldName\">\n {{item.DisplayName || item.FieldName}}\n <span class=\"related-entity-tag\">({{item.RelatedEntity}})</span>\n </label>\n <div class=\"retarget-input-wrapper\">\n <input\n [id]=\"'retarget-' + item.FieldName\"\n type=\"text\"\n class=\"mj-input\"\n placeholder=\"Target record ID or key...\"\n [value]=\"item.NewValue || item.CurrentValue || ''\"\n (input)=\"OnRetargetInput(item, $event)\" />\n </div>\n @if (item.CurrentDisplayName) {\n <span class=\"control-hint\">\n Current: {{item.CurrentDisplayName}}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Clone Reason -->\n <div class=\"control-group reason-group\">\n <label class=\"control-label\" for=\"clone-reason-input\">\n Reason for Cloning <span class=\"optional-label\">(Optional)</span>\n </label>\n <textarea\n id=\"clone-reason-input\"\n rows=\"2\"\n class=\"mj-textarea\"\n placeholder=\"Briefly describe the business reason or project context for this clone...\"\n [value]=\"Reason\"\n (input)=\"OnReasonInput($event)\">\n </textarea>\n <span class=\"control-hint\">Recorded in the clone audit log for traceability.</span>\n </div>\n </div>\n `,\n styles: [`\n .clone-values-container {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-5);\n padding: var(--mj-space-1) 0;\n }\n\n .control-group {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1);\n }\n\n .control-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .required-asterisk {\n color: var(--mj-status-error-text);\n font-weight: 700;\n }\n\n .optional-label {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n }\n\n .control-hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n }\n\n .naming-hint {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n margin-top: 2px;\n }\n\n .mj-input, .mj-textarea {\n padding: var(--mj-space-1-5) var(--mj-space-2-5);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n outline: none;\n transition: border-color 0.15s ease-in-out;\n font-family: inherit;\n }\n\n .mj-input:focus, .mj-textarea:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .root-name-input {\n font-size: var(--mj-text-sm);\n font-weight: 500;\n }\n\n .section-group {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n padding: var(--mj-space-3);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n }\n\n .section-title {\n margin: 0;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-description {\n margin: 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n }\n\n .fields-grid, .retarget-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-3);\n margin-top: var(--mj-space-1);\n }\n\n @media (max-width: 640px) {\n .fields-grid, .retarget-grid {\n grid-template-columns: 1fr;\n }\n }\n\n .switch-field-row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: 4px 0;\n }\n\n .switch-field-label {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n }\n\n .related-entity-tag {\n font-size: 11px;\n font-weight: 400;\n color: var(--mj-text-muted);\n }\n\n .mj-textarea {\n resize: vertical;\n min-height: 52px;\n }\n `],\n imports: [\n CommonModule,\n FormsModule,\n MJSwitchComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CloneValuesComponent implements OnInit, OnChanges {\n /** Entity being cloned; used in labels. */\n @Input() EntityName = 'Record';\n /** Name the clone will get. Pre-filled from the naming strategy; editable. */\n @Input() RootName = '';\n /** Why the suggested name was chosen (e.g. the source name already exists). */\n @Input() NamingStrategyReason?: string;\n /** The configuration sets the name (a rule or reset), so it's shown but can't be typed over. */\n @Input() RootNameReadOnly = false;\n /** Fields the entity's `Clone.Fields.PromptFor` requires the user to fill. */\n @Input() PromptedFields: ClonePromptFieldItem[] = [];\n /** Current values for the prompted fields, keyed by field name. */\n @Input() PromptedValues: Record<string, string | number | boolean | null> = {};\n /** Foreign keys from `Clone.UI.RetargetFields` the user may point at a different record. */\n @Input() RetargetFields: CloneRetargetFieldItem[] = [];\n /** Free-text reason stored on the clone log. */\n @Input() Reason = '';\n\n public HasUserEditedRootName = false;\n\n /** Fires as the user edits the clone's name. */\n @Output() RootNameChange = new EventEmitter<string>();\n /** Fires with the full value map whenever a prompted field changes. */\n @Output() PromptedValuesChange = new EventEmitter<Record<string, string | number | boolean | null>>();\n /** Fires when a retarget picker changes. */\n @Output() RetargetFieldsChange = new EventEmitter<CloneRetargetFieldItem[]>();\n /** Fires as the user edits the reason. */\n @Output() ReasonChange = new EventEmitter<string>();\n /** Fires when the step becomes valid or invalid (every required prompted field filled). */\n @Output() ValidityChange = new EventEmitter<boolean>();\n\n public ngOnInit(): void {\n this.CheckValidity();\n }\n\n public ngOnChanges(): void {\n this.CheckValidity();\n }\n\n public OnRootNameInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.HasUserEditedRootName = true;\n this.OnRootNameChange(input.value);\n }\n\n public OnRootNameChange(name: string): void {\n this.RootName = name;\n this.RootNameChange.emit(name);\n this.CheckValidity();\n }\n\n public OnTextFieldInput(fieldName: string, event: Event): void {\n const input = event.target as HTMLInputElement;\n this.OnFieldChange(fieldName, input.value);\n }\n\n public OnNumberFieldInput(fieldName: string, event: Event): void {\n const input = event.target as HTMLInputElement;\n const val = input.value === '' ? null : parseFloat(input.value);\n this.OnFieldChange(fieldName, val);\n }\n\n public OnFieldChange(fieldName: string, value: string | number | boolean | null): void {\n this.PromptedValues = {\n ...this.PromptedValues,\n [fieldName]: value,\n };\n this.PromptedValuesChange.emit(this.PromptedValues);\n\n // Mirror a naming field into the name box for display only. RootNameChange means the user\n // typed a name (the host then sends it as an override); the host mirrors prompted values itself.\n if (!this.HasUserEditedRootName && (fieldName.toLowerCase() === 'name' || fieldName.toLowerCase() === 'email')) {\n if (typeof value === 'string' && value.trim().length > 0) {\n this.RootName = value;\n }\n }\n\n this.CheckValidity();\n }\n\n public OnRetargetInput(item: CloneRetargetFieldItem, event: Event): void {\n const input = event.target as HTMLInputElement;\n this.OnRetargetFieldChange(item, input.value);\n }\n\n public OnRetargetFieldChange(item: CloneRetargetFieldItem, newValue: string): void {\n item.NewValue = newValue;\n this.RetargetFieldsChange.emit([...this.RetargetFields]);\n this.CheckValidity();\n }\n\n public OnReasonInput(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.OnReasonChange(textarea.value);\n }\n\n public OnReasonChange(reason: string): void {\n this.Reason = reason;\n this.ReasonChange.emit(reason);\n }\n\n public CheckValidity(): void {\n const isRootNameValid = this.RootName.trim().length > 0;\n let arePromptedFieldsValid = true;\n\n if (this.PromptedFields && this.PromptedFields.length > 0) {\n for (const field of this.PromptedFields) {\n if (field.IsRequired) {\n const val = this.PromptedValues[field.FieldName];\n if (val === null || val === undefined || (typeof val === 'string' && val.trim().length === 0)) {\n arePromptedFieldsValid = false;\n break;\n }\n }\n }\n }\n\n const isValid = isRootNameValid && arePromptedFieldsValid;\n this.ValidityChange.emit(isValid);\n }\n}\n"]}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Embeddable record clone panel.
|
|
3
|
+
*
|
|
4
|
+
* Implements §12.2 and §12.3 of the record cloning plan. Hosts the full clone wizard
|
|
5
|
+
* (loading, scope, values, review, executing, done, failed, not cloneable) inline, with no
|
|
6
|
+
* overlay of its own, so it can sit in a slide-in, a dialog, a dashboard or a test harness.
|
|
7
|
+
* {@link RecordCloneSlideInComponent} wraps it in MJ's generic slide panel.
|
|
8
|
+
*
|
|
9
|
+
* The panel never navigates. It reports what happened through outputs and the host decides:
|
|
10
|
+
* `NavigateToRecord` carries the record to open, `CloseRequested` asks the host to dismiss it.
|
|
11
|
+
*/
|
|
12
|
+
import { EventEmitter } from '@angular/core';
|
|
13
|
+
import { BaseEntity } from '@memberjunction/core';
|
|
14
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
15
|
+
import type { RecordCloneKey, RecordCloneDescribeOutput, RecordClonePlanDetails, RecordClonePlanOptions, RecordClonePlanNode, RecordCloneExecuteOutput } from '@memberjunction/core-entities';
|
|
16
|
+
import { TabConfig } from '@memberjunction/ng-ui-components';
|
|
17
|
+
import type { RecordClonePanelState, RecordCloneStep, CloneCompletedEvent, CloneFailedEvent, CloneNavigationEvent, CloneProgressUpdate, ClonePromptFieldItem, CloneRetargetFieldItem, CloneEdgePolicyChange } from './record-clone-types';
|
|
18
|
+
import type { CloneScopeValues } from './clone-scope-controls.component';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
/** Plan options the scope step edits. */
|
|
21
|
+
type ScopeOptionKey = 'MaxDepth' | 'MaxRecords' | 'Subtypes' | 'Hierarchy' | 'SoftLinks' | 'EntityActions';
|
|
22
|
+
/**
|
|
23
|
+
* Embeddable clone wizard for one source record.
|
|
24
|
+
*
|
|
25
|
+
* Give it a source with either {@link Record} or {@link EntityName} plus {@link RecordKey}.
|
|
26
|
+
* With {@link AutoStart} on (the default) it describes the record and computes the first plan
|
|
27
|
+
* as soon as it has a source; otherwise call {@link Start}.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```html
|
|
31
|
+
* <mj-record-clone-panel
|
|
32
|
+
* [Record]="record"
|
|
33
|
+
* (CloneCompleted)="OnCloned($event)"
|
|
34
|
+
* (NavigateToRecord)="OpenRecord($event)"
|
|
35
|
+
* (CloseRequested)="HidePanel()">
|
|
36
|
+
* </mj-record-clone-panel>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare class RecordClonePanelComponent extends BaseAngularComponent {
|
|
40
|
+
private cloneService;
|
|
41
|
+
private cdr;
|
|
42
|
+
/**
|
|
43
|
+
* The record to clone. Takes precedence for the key when {@link RecordKey} is not set,
|
|
44
|
+
* and supplies the entity name when {@link EntityName} is not set.
|
|
45
|
+
*/
|
|
46
|
+
set Record(value: BaseEntity | null);
|
|
47
|
+
get Record(): BaseEntity | null;
|
|
48
|
+
private _record;
|
|
49
|
+
/** Entity of the source record, e.g. `'MJ: Users'`. Needed when {@link Record} is not set. */
|
|
50
|
+
set EntityName(value: string | undefined);
|
|
51
|
+
get EntityName(): string | undefined;
|
|
52
|
+
private _entityName?;
|
|
53
|
+
/**
|
|
54
|
+
* Key of the source record: a {@link RecordCloneKey}, or a record-id string in the
|
|
55
|
+
* compact URL-segment form (`'<value>'` for a single-column key, `'F1|V1||F2|V2'` for a
|
|
56
|
+
* composite one), parsed with `CompositeKey.FromURLSegment` against the entity's metadata.
|
|
57
|
+
*/
|
|
58
|
+
set RecordKey(value: RecordCloneKey | string | undefined);
|
|
59
|
+
get RecordKey(): RecordCloneKey | string | undefined;
|
|
60
|
+
private _recordKey?;
|
|
61
|
+
/** Start describing and planning as soon as a source is set. Default true. */
|
|
62
|
+
AutoStart: boolean;
|
|
63
|
+
/** Show the Scope / Values / Review step tabs. Default true. */
|
|
64
|
+
ShowStepTabs: boolean;
|
|
65
|
+
/** Fires whenever {@link CurrentState} changes. */
|
|
66
|
+
StateChange: EventEmitter<RecordClonePanelState>;
|
|
67
|
+
/** Fires whenever the active wizard step changes. */
|
|
68
|
+
StepChange: EventEmitter<RecordCloneStep>;
|
|
69
|
+
/** Fires after every successful plan computation with the fresh plan. */
|
|
70
|
+
PlanChanged: EventEmitter<RecordClonePlanDetails>;
|
|
71
|
+
/** Fires once the clone commits. The panel also raises one `remote-invalidate` event per written entity so open views refresh. */
|
|
72
|
+
CloneCompleted: EventEmitter<CloneCompletedEvent>;
|
|
73
|
+
/** Fires when describe, plan or execute fails, with the message the panel shows. */
|
|
74
|
+
CloneFailed: EventEmitter<CloneFailedEvent>;
|
|
75
|
+
/** Asks the host to open a record (the new clone, or a record linked from the result). The panel never routes itself. */
|
|
76
|
+
NavigateToRecord: EventEmitter<CloneNavigationEvent>;
|
|
77
|
+
/** Asks the host to dismiss the panel (Close, Cancel, or after a navigation request). */
|
|
78
|
+
CloseRequested: EventEmitter<void>;
|
|
79
|
+
/** Current wizard state. Setting it emits {@link StateChange}. */
|
|
80
|
+
get CurrentState(): RecordClonePanelState;
|
|
81
|
+
set CurrentState(value: RecordClonePanelState);
|
|
82
|
+
private _currentState;
|
|
83
|
+
/** Active authoring step. Setting it emits {@link StepChange}. */
|
|
84
|
+
get CurrentStep(): RecordCloneStep;
|
|
85
|
+
set CurrentStep(value: RecordCloneStep);
|
|
86
|
+
private _currentStep;
|
|
87
|
+
/** True while the panel is describing, planning for the first time, or executing. Hosts use it to block closing. */
|
|
88
|
+
get IsBusy(): boolean;
|
|
89
|
+
LoadingMessage: string;
|
|
90
|
+
NotCloneableReason: string;
|
|
91
|
+
ExecutionErrorMessage: string;
|
|
92
|
+
/** Describe answer for the source entity, once loaded. */
|
|
93
|
+
DescribeDetails: RecordCloneDescribeOutput | null;
|
|
94
|
+
/** Latest plan computed by the server. */
|
|
95
|
+
ActivePlan: RecordClonePlanDetails | null;
|
|
96
|
+
/** Result of the last execute call. */
|
|
97
|
+
ExecutionResult: RecordCloneExecuteOutput | null;
|
|
98
|
+
ExecutionProgress: CloneProgressUpdate | null;
|
|
99
|
+
/**
|
|
100
|
+
* Plan options sent with every plan and execute request. Holds only what the user changed (plus
|
|
101
|
+
* the preset and entered values); everything else comes from the entity's clone configuration.
|
|
102
|
+
*/
|
|
103
|
+
ScopeOptions: RecordClonePlanOptions;
|
|
104
|
+
AvailablePresets: string[];
|
|
105
|
+
/** How each preset is shown in the picker, from the entity's clone configuration. */
|
|
106
|
+
PresetLabels: Record<string, {
|
|
107
|
+
Label: string;
|
|
108
|
+
Description?: string;
|
|
109
|
+
}>;
|
|
110
|
+
SelectedPreset?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Whether the developer scope overrides are offered: `RecordClone.Describe` reports whether the
|
|
113
|
+
* user holds `Clone Records: Override Scope`. The server applies the same rule to every request.
|
|
114
|
+
*/
|
|
115
|
+
CanOverrideScope: boolean;
|
|
116
|
+
/** Branch policies the user changed in the plan tree, sent with every plan and execute. */
|
|
117
|
+
EdgeOverrides: CloneEdgePolicyChange[];
|
|
118
|
+
/** Whether the user may skip branches: the entity's UserEditable allows scope changes, or they hold Override Scope. */
|
|
119
|
+
get CanNarrowScope(): boolean;
|
|
120
|
+
/** The entity's configured scope (its `Configuration.Clone`, else the engine defaults), for the summary. */
|
|
121
|
+
get ConfiguredScope(): CloneScopeValues;
|
|
122
|
+
RootRecordName: string;
|
|
123
|
+
NamingStrategyReason?: string;
|
|
124
|
+
PromptedFields: ClonePromptFieldItem[];
|
|
125
|
+
PromptedValues: Record<string, string | number | boolean | null>;
|
|
126
|
+
RetargetFields: CloneRetargetFieldItem[];
|
|
127
|
+
CloneReason: string;
|
|
128
|
+
IsValuesValid: boolean;
|
|
129
|
+
HasUserEditedRootName: boolean;
|
|
130
|
+
WizardTabs: TabConfig[];
|
|
131
|
+
/** The promise of the most recent {@link Start}; tests and hosts can await it. */
|
|
132
|
+
InitializationPromise?: Promise<void>;
|
|
133
|
+
/** Entity name the panel is cloning, from {@link EntityName} or {@link Record}. */
|
|
134
|
+
get EffectiveEntityName(): string;
|
|
135
|
+
/** Source key resolved against the entity's primary key columns. */
|
|
136
|
+
get EffectiveRecordKey(): RecordCloneKey | undefined;
|
|
137
|
+
/** Default title for hosts that show one, e.g. `Clone MJ: Users`. */
|
|
138
|
+
get PanelTitle(): string;
|
|
139
|
+
get ShowWizardTabs(): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Describes the source, computes the first plan and lands on the Scope step.
|
|
142
|
+
* Safe to call again; each call starts the wizard over.
|
|
143
|
+
*/
|
|
144
|
+
Start(): Promise<void>;
|
|
145
|
+
/** Clears the values entered so far and starts over (used by "Clone another"). */
|
|
146
|
+
Reset(): Promise<void>;
|
|
147
|
+
/** True while a re-plan is in flight; Review disables Confirm so the user only confirms a plan they have seen. */
|
|
148
|
+
IsReplanning: boolean;
|
|
149
|
+
private replanRequestId;
|
|
150
|
+
/**
|
|
151
|
+
* Re-runs the plan with the current {@link ScopeOptions}, e.g. after a host changes them. When
|
|
152
|
+
* several re-plans overlap, only the latest request's answer is kept.
|
|
153
|
+
*/
|
|
154
|
+
Replan(): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* Moves to a wizard step. Review is refused while prompted values are invalid; entering
|
|
157
|
+
* Review folds the entered values into the options and re-plans so the diff is current.
|
|
158
|
+
*/
|
|
159
|
+
GoToStep(step: RecordCloneStep): void;
|
|
160
|
+
/** Executes the reviewed plan. The server refuses with `PLAN_CHANGED` if the plan hash moved. */
|
|
161
|
+
ExecuteClone(): Promise<void>;
|
|
162
|
+
/** Shown on Review after an Execute found the plan out of date. Cleared by the next Execute or step change. */
|
|
163
|
+
PlanChangedNotice: string | null;
|
|
164
|
+
/** From the Failed state: back to Review with a fresh plan, since the old one may be why it failed. */
|
|
165
|
+
BackToReview(): void;
|
|
166
|
+
/** Key of the root clone once execution succeeded, as a record-id string. */
|
|
167
|
+
get TargetRecordKey(): string | null;
|
|
168
|
+
/** Scope values the controls show: the server's effective options once a plan exists. */
|
|
169
|
+
get DisplayedScope(): Required<Pick<RecordClonePlanOptions, ScopeOptionKey>>;
|
|
170
|
+
/**
|
|
171
|
+
* Keeps only the scope values the user changed from what is displayed, so the entity's
|
|
172
|
+
* configured defaults (and a preset's options) are not overwritten by values nobody chose.
|
|
173
|
+
* Picking a preset clears earlier scope changes so the preset's options apply.
|
|
174
|
+
*/
|
|
175
|
+
OnScopeOptionsChanged(options: RecordClonePlanOptions): void;
|
|
176
|
+
/**
|
|
177
|
+
* A branch was switched in the plan tree. Switching a branch the user already changed drops that
|
|
178
|
+
* override (back to the configured policy); otherwise the change is remembered. Then re-plan.
|
|
179
|
+
*/
|
|
180
|
+
OnEdgePolicyChanged(change: CloneEdgePolicyChange): void;
|
|
181
|
+
/** Drops one branch override so that relationship follows its configured policy again. */
|
|
182
|
+
OnUndoEdgeOverride(relationshipID: string): void;
|
|
183
|
+
/** Drops every scope and branch override so the entity's configured scope applies again. */
|
|
184
|
+
OnResetScopeToDefaults(): void;
|
|
185
|
+
OnStepChange(stepKey: string): void;
|
|
186
|
+
OnRootNameChange(name: string): void;
|
|
187
|
+
/**
|
|
188
|
+
* Keeps the root name in step with a prompted value while the user has not typed a name.
|
|
189
|
+
* Which prompted field drives it comes from the entity's `Clone.Naming.Fields` (for MJ: Users
|
|
190
|
+
* that is Email), falling back to the entity's name field.
|
|
191
|
+
*/
|
|
192
|
+
OnPromptedValuesChange(values: Record<string, string | number | boolean | null>): void;
|
|
193
|
+
OnRetargetFieldsChange(fields: CloneRetargetFieldItem[]): void;
|
|
194
|
+
OnReasonChange(reason: string): void;
|
|
195
|
+
OnValuesValidityChange(isValid: boolean): void;
|
|
196
|
+
OnNodeSelected(_node: RecordClonePlanNode): void;
|
|
197
|
+
OnReviewNodeClicked(_nodeKey: string): void;
|
|
198
|
+
OnNavigateToRecord(event: CloneNavigationEvent): void;
|
|
199
|
+
OnClose(): void;
|
|
200
|
+
/** Label and description of each preset, by key, read the way the engine reads `Clone.Presets`. */
|
|
201
|
+
private static presetLabels;
|
|
202
|
+
/** Options of the named preset, read the way the engine reads `Clone.Presets`. */
|
|
203
|
+
private static presetOptions;
|
|
204
|
+
/** Branch overrides in the shape the operation accepts (labels stripped), or undefined when there are none. */
|
|
205
|
+
private wireEdgeOverrides;
|
|
206
|
+
/** What the controls show before the first plan arrives; the server's effective options replace it. */
|
|
207
|
+
private static builtInScope;
|
|
208
|
+
/** Re-plan from a UI event; a failure moves the wizard to Failed instead of leaving a stale plan up. */
|
|
209
|
+
private replanOrFail;
|
|
210
|
+
private autoStartQueued;
|
|
211
|
+
/** Coalesces the Record / EntityName / RecordKey setters into one start per change batch. */
|
|
212
|
+
private queueAutoStart;
|
|
213
|
+
private initialize;
|
|
214
|
+
/**
|
|
215
|
+
* Whether the configuration, not the user, decides the root's name: a rule derives it (a user's
|
|
216
|
+
* Name from the prompted Email), a reset stamps it, or UserEditable doesn't allow field edits.
|
|
217
|
+
* The server ignores a typed name then, so the box is read-only.
|
|
218
|
+
*/
|
|
219
|
+
get RootNameReadOnly(): boolean;
|
|
220
|
+
/** The last change on the root's name field in the current plan: the value the server applies. */
|
|
221
|
+
private rootNameChange;
|
|
222
|
+
private setupInitialValues;
|
|
223
|
+
/** Prompted fields whose value names the clone: `Clone.Naming.Fields` that are prompted, else the name field. */
|
|
224
|
+
private namingDrivenFields;
|
|
225
|
+
/** Current options plus the root name, prompted values and reason the user entered. */
|
|
226
|
+
/** Retarget pickers the user pointed at a different record, in the `Options.Retarget` shape. */
|
|
227
|
+
private retargets;
|
|
228
|
+
/**
|
|
229
|
+
* The scope options plus the Values step's current values, leaving out the ones that are empty:
|
|
230
|
+
* a Scope-step re-plan then carries no stale name or retarget, and nothing the user hasn't set.
|
|
231
|
+
*/
|
|
232
|
+
private scopeWithCurrentValues;
|
|
233
|
+
private buildOptionsWithValues;
|
|
234
|
+
/** The parts of the options that the Values step sets and that change the plan. */
|
|
235
|
+
private planValuesKey;
|
|
236
|
+
private fail;
|
|
237
|
+
/**
|
|
238
|
+
* The clone's rows were saved on the server, so no client-side BaseEntity raised a save.
|
|
239
|
+
* Announce each written entity the way the provider announces a server-side write
|
|
240
|
+
* (`remote-invalidate`, no `baseEntity`), so cached engines and open views reload it.
|
|
241
|
+
*/
|
|
242
|
+
private raiseRecordCreatedEvent;
|
|
243
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RecordClonePanelComponent, never>;
|
|
244
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RecordClonePanelComponent, "mj-record-clone-panel", never, { "Record": { "alias": "Record"; "required": false; }; "EntityName": { "alias": "EntityName"; "required": false; }; "RecordKey": { "alias": "RecordKey"; "required": false; }; "AutoStart": { "alias": "AutoStart"; "required": false; }; "ShowStepTabs": { "alias": "ShowStepTabs"; "required": false; }; }, { "StateChange": "StateChange"; "StepChange": "StepChange"; "PlanChanged": "PlanChanged"; "CloneCompleted": "CloneCompleted"; "CloneFailed": "CloneFailed"; "NavigateToRecord": "NavigateToRecord"; "CloseRequested": "CloseRequested"; }, never, never, true, never>;
|
|
245
|
+
}
|
|
246
|
+
export {};
|
|
247
|
+
//# sourceMappingURL=record-clone-panel.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-clone-panel.component.d.ts","sourceRoot":"","sources":["../../src/lib/record-clone-panel.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAKH,YAAY,EAGf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,UAAU,EAAiC,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,KAAK,EACR,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGH,SAAS,EACZ,MAAM,kCAAkC,CAAC;AAU1C,OAAO,KAAK,EACR,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;;AAMzE,yCAAyC;AACzC,KAAK,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC;AAG3G;;;;;;;;;;;;;;;;GAgBG;AACH,qBAwYa,yBAA0B,SAAQ,oBAAoB;IAC/D,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,GAAG,CAA6B;IAIxC;;;OAGG;IACH,IACI,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAGlC;IACD,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IACD,OAAO,CAAC,OAAO,CAA2B;IAE1C,8FAA8F;IAC9F,IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAGvC;IACD,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IACD,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B;;;;OAIG;IACH,IACI,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,EAGvD;IACD,IAAI,SAAS,IAAI,cAAc,GAAG,MAAM,GAAG,SAAS,CAEnD;IACD,OAAO,CAAC,UAAU,CAAC,CAA0B;IAE7C,8EAA8E;IACrE,SAAS,UAAQ;IAE1B,gEAAgE;IACvD,YAAY,UAAQ;IAI7B,mDAAmD;IACzC,WAAW,sCAA6C;IAElE,qDAAqD;IAC3C,UAAU,gCAAuC;IAE3D,yEAAyE;IAC/D,WAAW,uCAA8C;IAEnE,kIAAkI;IACxH,cAAc,oCAA2C;IAEnE,oFAAoF;IAC1E,WAAW,iCAAwC;IAE7D,yHAAyH;IAC/G,gBAAgB,qCAA4C;IAEtE,yFAAyF;IAC/E,cAAc,qBAA4B;IAIpD,kEAAkE;IAClE,IAAW,YAAY,IAAI,qBAAqB,CAE/C;IACD,IAAW,YAAY,CAAC,KAAK,EAAE,qBAAqB,EAInD;IACD,OAAO,CAAC,aAAa,CAAoC;IAEzD,kEAAkE;IAClE,IAAW,WAAW,IAAI,eAAe,CAExC;IACD,IAAW,WAAW,CAAC,KAAK,EAAE,eAAe,EAI5C;IACD,OAAO,CAAC,YAAY,CAA4B;IAEhD,oHAAoH;IACpH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAEM,cAAc,SAA0C;IACxD,kBAAkB,SAAyD;IAC3E,qBAAqB,SAAM;IAElC,0DAA0D;IACnD,eAAe,EAAE,yBAAyB,GAAG,IAAI,CAAQ;IAChE,0CAA0C;IACnC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IACxD,uCAAuC;IAChC,eAAe,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACxD,iBAAiB,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAE5D;;;OAGG;IACI,YAAY,EAAE,sBAAsB,CAAM;IAC1C,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACvC,qFAAqF;IAC9E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACI,gBAAgB,UAAS;IAEhC,2FAA2F;IACpF,aAAa,EAAE,qBAAqB,EAAE,CAAM;IAEnD,uHAAuH;IACvH,IAAW,cAAc,IAAI,OAAO,CAGnC;IAED,4GAA4G;IAC5G,IAAW,eAAe,IAAI,gBAAgB,CAa7C;IAEM,cAAc,SAAM;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,oBAAoB,EAAE,CAAM;IAC5C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAM;IACtE,cAAc,EAAE,sBAAsB,EAAE,CAAM;IAC9C,WAAW,SAAM;IACjB,aAAa,UAAQ;IACrB,qBAAqB,UAAS;IAE9B,UAAU,EAAE,SAAS,EAAE,CAI5B;IAEF,kFAAkF;IAC3E,qBAAqB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,mFAAmF;IACnF,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAED,oEAAoE;IACpE,IAAW,kBAAkB,IAAI,cAAc,GAAG,SAAS,CAU1D;IAED,qEAAqE;IACrE,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,cAAc,IAAI,OAAO,CAQnC;IAID;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,kFAAkF;IAC3E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,kHAAkH;IAC3G,YAAY,UAAS;IAC5B,OAAO,CAAC,eAAe,CAAK;IAE5B;;;OAGG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCpC;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAqB5C,iGAAiG;IACpF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6D1C,+GAA+G;IACxG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/C,uGAAuG;IAChG,YAAY,IAAI,IAAI;IAS3B,6EAA6E;IAC7E,IAAW,eAAe,IAAI,MAAM,GAAG,IAAI,CAE1C;IAID,yFAAyF;IACzF,IAAW,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC,CAElF;IAED;;;;OAIG;IACI,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAkBnE;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAO/D,0FAA0F;IACnF,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKvD,4FAA4F;IACrF,sBAAsB,IAAI,IAAI;IAQ9B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;OAIG;IACI,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;IAatF,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAI9D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAIhD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3C,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAKrD,OAAO,IAAI,IAAI;IAMtB,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,aAAa;IAK5B,+GAA+G;IAC/G,OAAO,CAAC,iBAAiB;IAIzB,uGAAuG;IACvG,OAAO,CAAC,MAAM,CAAC,YAAY;IAW3B,wGAAwG;YAC1F,YAAY;IAS1B,OAAO,CAAC,eAAe,CAAS;IAEhC,6FAA6F;IAC7F,OAAO,CAAC,cAAc;YAWR,UAAU;IA0CxB;;;;OAIG;IACH,IAAW,gBAAgB,IAAI,OAAO,CASrC;IAED,kGAAkG;IAClG,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;IAiE1B,iHAAiH;IACjH,OAAO,CAAC,kBAAkB;IAS1B,uFAAuF;IACvF,gGAAgG;IAChG,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,sBAAsB;IAiB9B,mFAAmF;IACnF,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,IAAI;IAMZ;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;yCAhvBtB,yBAAyB;2CAAzB,yBAAyB;CA8vBrC"}
|