@myrmidon/cadmus-refs-asserted-ids 8.0.1 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,6 +16,7 @@ This project was generated using [Angular CLI](https://github.com/angular/angula
16
16
  - [Asserted Composite ID](#asserted-composite-id)
17
17
  - [Asserted Composite IDs](#asserted-composite-ids)
18
18
  - [History](#history)
19
+ - [9.0.0](#900)
19
20
  - [8.0.1](#801)
20
21
 
21
22
  The asserted ID and asserted composite IDs bricks provide a way to include _external_ or _internal_ references to resource identifiers, whatever their type and origin. These components are the foundation for pin-based links in links part and links fragment types, as they provide both external and internal links, optionally accompanied by an assertion.
@@ -360,6 +361,10 @@ A collection of asserted composite IDs.
360
361
 
361
362
  ## History
362
363
 
364
+ ### 9.0.0
365
+
366
+ - 2025-01-03: ⚠️ updated [Cadmus dependencies](https://github.com/vedph/cadmus-shell-v3) to version 11 (standalone components).
367
+
363
368
  ### 8.0.1
364
369
 
365
370
  - 2025-01-01: fixed missing unsubscribe in `AssertedCompositeIdComponent`.
@@ -519,7 +519,7 @@ class AssertedIdsComponent {
519
519
  this.ids.set(this.entries.value);
520
520
  }
521
521
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1$1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
522
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: AssertedIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-ids", inputs: { ids: { classPropertyName: "ids", publicName: "ids", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ids: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n", styles: ["th{font-weight:400;color:silver;text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedIdComponent, selector: "cadmus-refs-asserted-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "noEidLookup", "hasSubmit"], outputs: ["idChange", "editorClose"] }] });
522
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: AssertedIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-ids", inputs: { ids: { classPropertyName: "ids", publicName: "ids", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ids: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"entry === edited\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedIdComponent, selector: "cadmus-refs-asserted-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "noEidLookup", "hasSubmit"], outputs: ["idChange", "editorClose"] }] });
523
523
  }
524
524
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AssertedIdsComponent, decorators: [{
525
525
  type: Component,
@@ -532,7 +532,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
532
532
  MatIconModule,
533
533
  MatTooltipModule,
534
534
  AssertedIdComponent,
535
- ], template: "<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n", styles: ["th{font-weight:400;color:silver;text-align:left}\n"] }]
535
+ ], template: "<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"entry === edited\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"] }]
536
536
  }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: i2.DialogService }] });
537
537
 
538
538
  class ItemRefLookupService {
@@ -1442,7 +1442,7 @@ class AssertedCompositeIdsComponent {
1442
1442
  this.emitIdsChange();
1443
1443
  }
1444
1444
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AssertedCompositeIdsComponent, deps: [{ token: i1$1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
1445
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: AssertedCompositeIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-composite-ids", inputs: { ids: { classPropertyName: "ids", publicName: "ids", isSignal: false, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, pinByTypeMode: { classPropertyName: "pinByTypeMode", publicName: "pinByTypeMode", isSignal: true, isRequired: false, transformFunction: null }, canSwitchMode: { classPropertyName: "canSwitchMode", publicName: "canSwitchMode", isSignal: true, isRequired: false, transformFunction: null }, canEditTarget: { classPropertyName: "canEditTarget", publicName: "canEditTarget", isSignal: true, isRequired: false, transformFunction: null }, lookupDefinitions: { classPropertyName: "lookupDefinitions", publicName: "lookupDefinitions", isSignal: true, isRequired: false, transformFunction: null }, defaultPartTypeKey: { classPropertyName: "defaultPartTypeKey", publicName: "defaultPartTypeKey", isSignal: true, isRequired: false, transformFunction: null }, internalDefault: { classPropertyName: "internalDefault", publicName: "internalDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { idsChange: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}td{padding-right:4px}td.fit-width{width:1px;white-space:nowrap;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: AssertedCompositeIdComponent, selector: "cadmus-refs-asserted-composite-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "internalDefault", "hasSubmit", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idChange", "editorClose", "extMoreRequest"] }] });
1445
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: AssertedCompositeIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-composite-ids", inputs: { ids: { classPropertyName: "ids", publicName: "ids", isSignal: false, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, pinByTypeMode: { classPropertyName: "pinByTypeMode", publicName: "pinByTypeMode", isSignal: true, isRequired: false, transformFunction: null }, canSwitchMode: { classPropertyName: "canSwitchMode", publicName: "canSwitchMode", isSignal: true, isRequired: false, transformFunction: null }, canEditTarget: { classPropertyName: "canEditTarget", publicName: "canEditTarget", isSignal: true, isRequired: false, transformFunction: null }, lookupDefinitions: { classPropertyName: "lookupDefinitions", publicName: "lookupDefinitions", isSignal: true, isRequired: false, transformFunction: null }, defaultPartTypeKey: { classPropertyName: "defaultPartTypeKey", publicName: "defaultPartTypeKey", isSignal: true, isRequired: false, transformFunction: null }, internalDefault: { classPropertyName: "internalDefault", publicName: "internalDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { idsChange: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"entry === edited\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: AssertedCompositeIdComponent, selector: "cadmus-refs-asserted-composite-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "internalDefault", "hasSubmit", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idChange", "editorClose", "extMoreRequest"] }] });
1446
1446
  }
1447
1447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AssertedCompositeIdsComponent, decorators: [{
1448
1448
  type: Component,
@@ -1456,7 +1456,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1456
1456
  MatIconModule,
1457
1457
  MatInputModule,
1458
1458
  AssertedCompositeIdComponent,
1459
- ], template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}td{padding-right:4px}td.fit-width{width:1px;white-space:nowrap;padding:0}\n"] }]
1459
+ ], template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"entry === edited\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"] }]
1460
1460
  }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: i2.DialogService }], propDecorators: { ids: [{
1461
1461
  type: Input
1462
1462
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\n\n/**\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\n * of the item ID and part ID, which are used to filter the results\n * by the ItemPinLookupComponent.\n */\nexport interface PinRefLookupFilter extends RefLookupFilter {\n itemId?: string;\n partId?: string;\n}\n\n/**\n * Cadmus pin-based lookup data service. The text being searched here is just\n * the pin's value, according to the options specified. These options correspond\n * to an index lookup definition. The resulting items are of type DataPinInfo.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PinRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public getName(item: any | undefined): string {\n return item?.value || '';\n }\n\n private buildQuery(\n def: IndexLookupDefinition,\n filter: PinRefLookupFilter\n ): string {\n const sb: string[] = [];\n const AND = ' AND ';\n\n if (def.typeId) {\n sb.push(`[partTypeId=${def.typeId}]`);\n }\n if (def.roleId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[roleId=${def.roleId}]`);\n }\n if (def.name) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[name=${def.name}]`);\n }\n if (filter.itemId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[itemId=${filter.itemId}]`);\n }\n if (filter.partId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[partId=${filter.partId}]`);\n }\n if (filter.text) {\n if (sb.length) {\n sb.push(AND);\n }\n // for other operators see backend SqlQueryBuilderBase.cs\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\n }\n\n return sb.join('');\n }\n\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\n // the index lookup definition is required\n const def = options as IndexLookupDefinition;\n if (!def) {\n return of([]);\n }\n\n // build the corresponding pin query\n const query = this.buildQuery(def, filter);\n\n // search the index\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\n if (w.error) {\n console.error(w.error);\n return [];\n } else {\n return w.value?.items || [];\n }\n })\n );\n }\n}\n","import { Component, Inject, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\nimport { forkJoin, of, take } from 'rxjs';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\ninterface LookupInfo {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n part?: MetadataPart;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n RefLookupComponent,\r\n ],\r\n})\r\nexport class ScopedPinLookupComponent {\r\n // lookup\r\n public key: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n public keys: string[];\r\n public info?: LookupInfo;\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n /**\r\n * Emitted whenever the user picks an ID.\r\n */\r\n public readonly idPick = output<string>();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _itemService: ItemService,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // lookup\r\n // keys are all the defined lookup searches\r\n this.keys = Object.keys(lookupDefs);\r\n // the selected key defines the lookup scope\r\n this.key = formBuilder.control(null);\r\n this.keyForm = formBuilder.group({\r\n key: this.key,\r\n });\r\n // id\r\n this.id = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.idForm = formBuilder.group({\r\n id: this.id,\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n // pre-select a unique key\r\n if (this.keys.length === 1) {\r\n this.key.setValue(this.keys[0]);\r\n this.key.markAsDirty();\r\n this.key.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public onItemChange(item: unknown): void {\r\n const info: LookupInfo = {\r\n pin: item as DataPinInfo,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: item\r\n ? this._itemService.getItem((item as DataPinInfo).itemId, false, true)\r\n : of(null),\r\n part: item\r\n ? this._itemService.getPartFromTypeAndRole(\r\n (item as DataPinInfo).itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n )\r\n : of(null),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n if (result.item) {\r\n info.item = result.item;\r\n info.part = result.part as MetadataPart;\r\n this.info = info;\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n public appendIdComponent(type: string, metaIndex = -1): void {\r\n let id = this.id.value || '';\r\n\r\n switch (type) {\r\n case 'pin':\r\n id += this.info?.pin.value;\r\n break;\r\n case 'itemId':\r\n id += this.info!.item?.id || '';\r\n break;\r\n case 'partId':\r\n id += this.info!.part?.id || '';\r\n break;\r\n case 'partTypeId':\r\n id += this.info!.part?.typeId || '';\r\n break;\r\n case 'partRoleId':\r\n id += this.info!.part?.roleId || '';\r\n break;\r\n case 'metadata':\r\n id += this.info!.part!.metadata[metaIndex].value;\r\n break;\r\n }\r\n\r\n this.id.setValue(id);\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n\r\n public pickId(): void {\r\n if (this.idForm.invalid) {\r\n return;\r\n }\r\n this.idPick.emit(this.id.value!);\r\n this.info = undefined;\r\n }\r\n\r\n public resetId(): void {\r\n this.id.reset();\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n}\r\n","<div>\n <!-- lookup -->\n <div>\n <form [formGroup]=\"keyForm\" class=\"form-row\">\n <!-- key -->\n @if (keys.length > 1) {\n <mat-form-field>\n <mat-label>type</mat-label>\n <mat-select [formControl]=\"key\">\n @for (k of keys; track k) {\n <mat-option [value]=\"k\">{{ k }}</mat-option>\n }\n </mat-select>\n @if ($any(key).errors?.required && (key.dirty || key.touched)) {\n <mat-error>type required</mat-error>\n }\n </mat-form-field>\n }\n <cadmus-ref-lookup\n [service]=\"lookupService\"\n label=\"pin\"\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\n (itemChange)=\"onItemChange($event)\"\n />\n </form>\n </div>\n\n <!-- builder -->\n @if (info) {\n <mat-expansion-panel [expanded]=\"info\" [disabled]=\"!info\">\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\n <!-- ID -->\n <div>\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\n <mat-form-field style=\"width: 100%\">\n <input matInput [formControl]=\"id\" />\n @if ($any(id).errors?.required && (id.dirty || id.touched)) {\n <mat-error>ID required</mat-error>\n } @if ($any(id).errors?.maxLength && (id.dirty || id.touched)) {\n <mat-error>ID too long</mat-error>\n }\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"resetId()\"\n [disabled]=\"!id.value\"\n >\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"pickId()\"\n [disabled]=\"idForm.invalid\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </div>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('pin')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ info!.pin.value }}</td>\n </tr>\n <!-- item ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('itemId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ info!.item?.id }}</td>\n </tr>\n <!-- item title -->\n <tr>\n <td></td>\n <td>item title</td>\n <td>{{ info!.item?.title }}</td>\n </tr>\n <!-- part ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ info!.part?.id }}</td>\n </tr>\n <!-- part type ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partTypeId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ info!.part?.typeId }}</td>\n </tr>\n <!-- part role ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partRoleId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ info!.part?.roleId }}</td>\n </tr>\n <!-- part's metadata -->\n @for (m of info!.part?.metadata; track m; let i = $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('metadata', i)\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </mat-expansion-panel>\n }\n</div>\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * An asserted ID.\r\n */\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n label?: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * Asserted ID editor component.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n AssertionComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n})\r\nexport class AssertedIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The asserted ID being edited.\r\n */\r\n public readonly id = model<AssertedId>();\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n public readonly noEidLookup = input<boolean>();\r\n\r\n /**\r\n * True to show the submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * Emitted when the editor is closed.\r\n */\r\n public readonly editorClose = output();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.label = formBuilder.control(null, Validators.maxLength(500));\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n label: this.label,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n this.lookupExpanded = false;\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.label.setValue(value.label || null);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n label: this.label.value?.trim() || undefined,\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit()) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries()?.length) {\n <mat-form-field>\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @else {\n <mat-form-field>\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\n <mat-error>scope too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\n <mat-error>value required</mat-error>\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\n {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n\n <!-- label -->\n <mat-form-field>\n <mat-label>label</mat-label>\n <input matInput [formControl]=\"label\" />\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\n <mat-error>label too long</mat-error>\n }\n </mat-form-field>\n\n <!-- lookup -->\n @if (!noEidLookup()) {\n <div>\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n }\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [assertion]=\"assertion.value || undefined\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit()) {\n <div>\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n }\n</form>\n","import { Component, effect, input, model, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport {\r\n AssertedId,\r\n AssertedIdComponent,\r\n} from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n AssertedIdComponent,\r\n ],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedId[]>([]);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._editedIndex = -1;\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n\r\n // when ids change, update form\r\n effect(() => {\r\n this.updateForm(this.ids());\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n\r\n public onIdChange(id?: AssertedId): void {\r\n this.saveId(id!);\r\n this.ids.set(this.entries.value);\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n","import { Injectable } from '@angular/core';\nimport { Observable, map } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { Item } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage } from '@myrmidon/ngx-tools';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ItemRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\n return this._itemService\n .getItems(\n {\n title: filter.text,\n },\n 1,\n filter.limit || 10\n )\n .pipe(map((page: DataPage<Item>) => page.items));\n }\n\n getName(item: Item): string {\n return item?.title;\n }\n}\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport {\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ClipboardModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n RefLookupComponent,\r\n RefLookupSetComponent,\r\n FlatLookupPipe,\r\n ],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private readonly _subs: Subscription[] = [];\r\n private _noTargetUpdate?: boolean;\r\n private _noFormUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = model<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n public readonly canSwitchMode = model<boolean>();\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = model<IndexLookupDefinitions>();\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n public readonly extLookupConfigs = input<RefLookupConfig[]>([]);\r\n\r\n /**\r\n * True if when a new target is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n public readonly target = model<PinTarget>();\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more items from an external lookup.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * Emitted when the user changes the external lookup configuration.\r\n */\r\n public readonly extLookupConfigChange = output<RefLookupConfig>();\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this.modelEntries = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n\r\n // when pinByTypeMode changes, adjust form\r\n effect(() => {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = this.pinByTypeMode();\r\n } else {\r\n this.byTypeMode.setValue(this.pinByTypeMode() || false, {\r\n emitEvent: false,\r\n });\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n });\r\n\r\n // when target changes, update form\r\n effect(() => {\r\n if (this._noFormUpdate) {\r\n this._noFormUpdate = false;\r\n return;\r\n }\r\n console.log('target changed', this.target());\r\n this.updateForm(this.target());\r\n });\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode.set(false);\r\n this.canSwitchMode.set(false);\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions()) {\r\n this.lookupDefinitions.set(this._presetLookupDefs);\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions()!);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n const defs: IndexLookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n defs[e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n this.lookupDefinitions.set(defs);\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey() || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes (by lookup), update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null, { emitEvent: false });\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes (by user selection), update target and\r\n // eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget(true);\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions()![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private emitChange(): void {\r\n this._noFormUpdate = true;\r\n this.target.set(this.getTarget());\r\n }\r\n\r\n private updateTarget(noEmit = false): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n if (!noEmit) {\r\n this.emitChange();\r\n }\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '', { emitEvent: false });\r\n this.label.setValue(target.label || '', { emitEvent: false });\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item, { emitEvent: false });\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name, { emitEvent: false });\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Item service error', error);\r\n }\r\n this.external.setValue(!target.name, { emitEvent: false });\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name && !this.internalDefault(), {\r\n emitEvent: false,\r\n });\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: unknown): void {\r\n if (!item) {\r\n return;\r\n }\r\n // load item's parts\r\n this._itemService.getItem((item as Item)!.id, true, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget(true);\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Error getting item', error);\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget(true);\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin?: DataPinInfo): void {\r\n if (!pin) {\r\n return;\r\n }\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget(true);\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error('Error loading item/metadata', error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: unknown): void {\r\n this.loadItemInfo(info as DataPinInfo);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n if (event.item) {\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId);\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel);\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n });\r\n }\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public onExtConfigChange(config: RefLookupConfig): void {\r\n this.extLookupConfigChange.emit(config);\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.target.set(this.getTarget());\r\n this.emitChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n <!-- mode switcher -->\r\n @if (!external.value) {\r\n <div>\r\n @if (canSwitchMode()) {\r\n <mat-checkbox [formControl]=\"byTypeMode\"> by type</mat-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n <mat-error>label required</mat-error>\r\n } @if ( $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && label.value) {\r\n <div class=\"info\"><span class=\"label\">label</span>{{ label.value }}</div>\r\n }\r\n </div>\r\n\r\n <!-- gid -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n @if ($any(gid).errors?.required && (gid.dirty || gid.touched)) {\r\n <mat-error>GID required</mat-error>\r\n } @if ($any(gid).errors?.maxLength && (gid.dirty || gid.touched)) {\r\n <mat-error>GID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && gid.value) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- external lookup set -->\r\n @if (external.value && extLookupConfigs().length) {\r\n <div>\r\n <cadmus-ref-lookup-set\r\n [configs]=\"extLookupConfigs()\"\r\n (itemChange)=\"onExtItemChange($event)\"\r\n (moreRequest)=\"onExtMoreRequest($event)\"\r\n (configChange)=\"onExtConfigChange($any($event))\"\r\n ></cadmus-ref-lookup-set>\r\n </div>\r\n }\r\n\r\n <!-- BY ITEM -->\r\n @if (!external.value) {\r\n <div>\r\n <div class=\"form-row\">\r\n @if (!byTypeMode.value) {\r\n <fieldset class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-ref-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n <!-- part filter -->\r\n @if (itemParts.length) {\r\n <mat-form-field>\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n @for (p of itemParts; track p) {\r\n <mat-option [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </fieldset>\r\n }\r\n <!-- BY TYPE -->\r\n @if (byTypeMode.value) {\r\n <div>\r\n <!-- par type filter -->\r\n @if (partTypeKeys.length) {\r\n <mat-form-field>\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n @for (k of partTypeKeys; track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <!-- PIN -->\r\n @if (partTypeKey.value) {\r\n <div>\r\n <!-- pin lookup -->\r\n <cadmus-ref-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter\"\r\n [options]=\"pinFilterOptions\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n <!-- data -->\r\n @if (lookupData?.pin?.name) {\r\n <mat-expansion-panel id=\"data\">\r\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n @if (lookupData?.pin?.value) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ lookupData!.pin.value }}</td>\r\n </tr>\r\n }\r\n <!-- item ID -->\r\n @if (lookupData?.pin?.itemId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ lookupData!.pin.itemId }}</td>\r\n </tr>\r\n }\r\n <!-- item title -->\r\n @if (lookupData?.item?.title) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item title</td>\r\n <td>{{ lookupData!.item!.title }}</td>\r\n </tr>\r\n }\r\n <!-- part ID -->\r\n @if (lookupData?.pin?.partId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ lookupData!.pin.partId }}</td>\r\n </tr>\r\n }\r\n <!-- part type ID -->\r\n @if (lookupData?.pin?.partTypeId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ lookupData!.pin!.partTypeId }}</td>\r\n </tr>\r\n }\r\n <!-- part role ID -->\r\n @if (lookupData?.pin?.roleId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ lookupData!.pin!.roleId }}</td>\r\n </tr>\r\n }\r\n <!-- part's metadata -->\r\n @for ( m of lookupData?.metaPart?.metadata || []; track m; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"button-row\" id=\"toolbar\">\r\n <button mat-icon-button type=\"button\" (click)=\"close()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon>check_circle</mat-icon>\r\n target\r\n </button>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { RamStorageService } from '@myrmidon/ngx-tools';\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport {\r\n PinTarget,\r\n PinTargetLookupComponent,\r\n} from '../pin-target-lookup/pin-target-lookup.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * The key to be used to retrieve the external lookup configs from the\r\n * settings storage. This is equal to the selector of\r\n * AssertedCompositeIdComponent plus \".configs\".\r\n */\r\nexport const ASSERTED_COMPOSITE_ID_CONFIGS_KEY =\r\n 'cadmus-refs-asserted-composite-id.configs';\r\n\r\n/**\r\n * An asserted composite ID editor. This allows the user to edit an asserted\r\n * composite ID, which can be an external ID or a lookup ID.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n AssertionComponent,\r\n PinTargetLookupComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public extLookupConfigs: RefLookupConfig[];\r\n public targetExpanded = false;\r\n // form\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n public readonly id = model<AssertedCompositeId>();\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions,\r\n settings: RamStorageService\r\n ) {\r\n // form\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n\r\n // external lookup configs\r\n this.extLookupConfigs =\r\n settings.retrieve<RefLookupConfig[]>(ASSERTED_COMPOSITE_ID_CONFIGS_KEY) ||\r\n [];\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target?: PinTarget): void {\r\n this.target.setValue(target!);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n if (this.form.valid) {\r\n this.targetExpanded = false;\r\n }\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit()) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onExtLookupConfigChange(config: RefLookupConfig): void {\r\n if (\r\n !this.scope.value ||\r\n this.extLookupConfigs.some((c) => c.name === this.scope.value)\r\n ) {\r\n this.scope.setValue(config.name || null);\r\n this.scope.markAsDirty();\r\n this.scope.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries()?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries()?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @else {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if ( $any(scope.errors)?.maxLength && (scope.dirty || scope.touched) )\n {\n <mat-error>scope too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- label and GID -->\n @if (target.value?.label) {\n <div class=\"info\">\n <span class=\"label\">label</span>{{ target.value?.label }}\n </div>\n } @if (target.value?.gid) {\n <div class=\"info\">\n <span class=\"label\">GID</span>{{ target.value?.gid }}\n </div>\n }\n </div>\n\n <!-- target -->\n <div class=\"boxed\">\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\n <cadmus-pin-target-lookup\n [pinByTypeMode]=\"pinByTypeMode()\"\n [canSwitchMode]=\"canSwitchMode()\"\n [canEditTarget]=\"canEditTarget()\"\n [lookupDefinitions]=\"lookupDefinitions()\"\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\n [target]=\"target.value || undefined\"\n [internalDefault]=\"internalDefault()\"\n [extLookupConfigs]=\"extLookupConfigs\"\n (targetChange)=\"onTargetChange($event)\"\n (editorClose)=\"onEditorClose()\"\n (extMoreRequest)=\"onExtMoreRequest($event)\"\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\n />\n </mat-expansion-panel>\n </div>\n\n <!-- assertion -->\n <br />\n <div class=\"boxed\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [assertion]=\"assertion.value || undefined\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit()) {\n <div>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\n >\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n }\n</form>\n","import { Component, input, Input, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdComponent,\r\n} from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted composite IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n AssertedCompositeIdComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n public readonly idsChange = output<AssertedCompositeId[]>();\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id?: AssertedCompositeId): void {\r\n this.saveId(id!);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i1","i4","i5","i6","i8","i9","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i7","i10","i11","i12","i13","i14"],"mappings":"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"}
1
+ {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\n\n/**\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\n * of the item ID and part ID, which are used to filter the results\n * by the ItemPinLookupComponent.\n */\nexport interface PinRefLookupFilter extends RefLookupFilter {\n itemId?: string;\n partId?: string;\n}\n\n/**\n * Cadmus pin-based lookup data service. The text being searched here is just\n * the pin's value, according to the options specified. These options correspond\n * to an index lookup definition. The resulting items are of type DataPinInfo.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PinRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public getName(item: any | undefined): string {\n return item?.value || '';\n }\n\n private buildQuery(\n def: IndexLookupDefinition,\n filter: PinRefLookupFilter\n ): string {\n const sb: string[] = [];\n const AND = ' AND ';\n\n if (def.typeId) {\n sb.push(`[partTypeId=${def.typeId}]`);\n }\n if (def.roleId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[roleId=${def.roleId}]`);\n }\n if (def.name) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[name=${def.name}]`);\n }\n if (filter.itemId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[itemId=${filter.itemId}]`);\n }\n if (filter.partId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[partId=${filter.partId}]`);\n }\n if (filter.text) {\n if (sb.length) {\n sb.push(AND);\n }\n // for other operators see backend SqlQueryBuilderBase.cs\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\n }\n\n return sb.join('');\n }\n\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\n // the index lookup definition is required\n const def = options as IndexLookupDefinition;\n if (!def) {\n return of([]);\n }\n\n // build the corresponding pin query\n const query = this.buildQuery(def, filter);\n\n // search the index\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\n if (w.error) {\n console.error(w.error);\n return [];\n } else {\n return w.value?.items || [];\n }\n })\n );\n }\n}\n","import { Component, Inject, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\nimport { forkJoin, of, take } from 'rxjs';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\ninterface LookupInfo {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n part?: MetadataPart;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n RefLookupComponent,\r\n ],\r\n})\r\nexport class ScopedPinLookupComponent {\r\n // lookup\r\n public key: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n public keys: string[];\r\n public info?: LookupInfo;\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n /**\r\n * Emitted whenever the user picks an ID.\r\n */\r\n public readonly idPick = output<string>();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _itemService: ItemService,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // lookup\r\n // keys are all the defined lookup searches\r\n this.keys = Object.keys(lookupDefs);\r\n // the selected key defines the lookup scope\r\n this.key = formBuilder.control(null);\r\n this.keyForm = formBuilder.group({\r\n key: this.key,\r\n });\r\n // id\r\n this.id = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.idForm = formBuilder.group({\r\n id: this.id,\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n // pre-select a unique key\r\n if (this.keys.length === 1) {\r\n this.key.setValue(this.keys[0]);\r\n this.key.markAsDirty();\r\n this.key.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public onItemChange(item: unknown): void {\r\n const info: LookupInfo = {\r\n pin: item as DataPinInfo,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: item\r\n ? this._itemService.getItem((item as DataPinInfo).itemId, false, true)\r\n : of(null),\r\n part: item\r\n ? this._itemService.getPartFromTypeAndRole(\r\n (item as DataPinInfo).itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n )\r\n : of(null),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n if (result.item) {\r\n info.item = result.item;\r\n info.part = result.part as MetadataPart;\r\n this.info = info;\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n public appendIdComponent(type: string, metaIndex = -1): void {\r\n let id = this.id.value || '';\r\n\r\n switch (type) {\r\n case 'pin':\r\n id += this.info?.pin.value;\r\n break;\r\n case 'itemId':\r\n id += this.info!.item?.id || '';\r\n break;\r\n case 'partId':\r\n id += this.info!.part?.id || '';\r\n break;\r\n case 'partTypeId':\r\n id += this.info!.part?.typeId || '';\r\n break;\r\n case 'partRoleId':\r\n id += this.info!.part?.roleId || '';\r\n break;\r\n case 'metadata':\r\n id += this.info!.part!.metadata[metaIndex].value;\r\n break;\r\n }\r\n\r\n this.id.setValue(id);\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n\r\n public pickId(): void {\r\n if (this.idForm.invalid) {\r\n return;\r\n }\r\n this.idPick.emit(this.id.value!);\r\n this.info = undefined;\r\n }\r\n\r\n public resetId(): void {\r\n this.id.reset();\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n}\r\n","<div>\n <!-- lookup -->\n <div>\n <form [formGroup]=\"keyForm\" class=\"form-row\">\n <!-- key -->\n @if (keys.length > 1) {\n <mat-form-field>\n <mat-label>type</mat-label>\n <mat-select [formControl]=\"key\">\n @for (k of keys; track k) {\n <mat-option [value]=\"k\">{{ k }}</mat-option>\n }\n </mat-select>\n @if ($any(key).errors?.required && (key.dirty || key.touched)) {\n <mat-error>type required</mat-error>\n }\n </mat-form-field>\n }\n <cadmus-ref-lookup\n [service]=\"lookupService\"\n label=\"pin\"\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\n (itemChange)=\"onItemChange($event)\"\n />\n </form>\n </div>\n\n <!-- builder -->\n @if (info) {\n <mat-expansion-panel [expanded]=\"info\" [disabled]=\"!info\">\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\n <!-- ID -->\n <div>\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\n <mat-form-field style=\"width: 100%\">\n <input matInput [formControl]=\"id\" />\n @if ($any(id).errors?.required && (id.dirty || id.touched)) {\n <mat-error>ID required</mat-error>\n } @if ($any(id).errors?.maxLength && (id.dirty || id.touched)) {\n <mat-error>ID too long</mat-error>\n }\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"resetId()\"\n [disabled]=\"!id.value\"\n >\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"pickId()\"\n [disabled]=\"idForm.invalid\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </div>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('pin')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ info!.pin.value }}</td>\n </tr>\n <!-- item ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('itemId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ info!.item?.id }}</td>\n </tr>\n <!-- item title -->\n <tr>\n <td></td>\n <td>item title</td>\n <td>{{ info!.item?.title }}</td>\n </tr>\n <!-- part ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ info!.part?.id }}</td>\n </tr>\n <!-- part type ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partTypeId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ info!.part?.typeId }}</td>\n </tr>\n <!-- part role ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('partRoleId')\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ info!.part?.roleId }}</td>\n </tr>\n <!-- part's metadata -->\n @for (m of info!.part?.metadata; track m; let i = $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"appendIdComponent('metadata', i)\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </mat-expansion-panel>\n }\n</div>\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * An asserted ID.\r\n */\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n label?: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * Asserted ID editor component.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n AssertionComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n})\r\nexport class AssertedIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The asserted ID being edited.\r\n */\r\n public readonly id = model<AssertedId>();\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n public readonly noEidLookup = input<boolean>();\r\n\r\n /**\r\n * True to show the submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * Emitted when the editor is closed.\r\n */\r\n public readonly editorClose = output();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.label = formBuilder.control(null, Validators.maxLength(500));\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n label: this.label,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n this.lookupExpanded = false;\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.label.setValue(value.label || null);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n label: this.label.value?.trim() || undefined,\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit()) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries()?.length) {\n <mat-form-field>\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @else {\n <mat-form-field>\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\n <mat-error>scope too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\n <mat-error>value required</mat-error>\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\n {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n\n <!-- label -->\n <mat-form-field>\n <mat-label>label</mat-label>\n <input matInput [formControl]=\"label\" />\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\n <mat-error>label too long</mat-error>\n }\n </mat-form-field>\n\n <!-- lookup -->\n @if (!noEidLookup()) {\n <div>\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n }\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [assertion]=\"assertion.value || undefined\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit()) {\n <div>\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n }\n</form>\n","import { Component, effect, input, model, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport {\r\n AssertedId,\r\n AssertedIdComponent,\r\n} from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n AssertedIdComponent,\r\n ],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedId[]>([]);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._editedIndex = -1;\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n\r\n // when ids change, update form\r\n effect(() => {\r\n this.updateForm(this.ids());\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.ids.set(this.entries.value);\r\n }\r\n\r\n public onIdChange(id?: AssertedId): void {\r\n this.saveId(id!);\r\n this.ids.set(this.entries.value);\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"entry === edited\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.value }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries()\"\n [idTagEntries]=\"idTagEntries()\"\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n","import { Injectable } from '@angular/core';\nimport { Observable, map } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { Item } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage } from '@myrmidon/ngx-tools';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ItemRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\n return this._itemService\n .getItems(\n {\n title: filter.text,\n },\n 1,\n filter.limit || 10\n )\n .pipe(map((page: DataPage<Item>) => page.items));\n }\n\n getName(item: Item): string {\n return item?.title;\n }\n}\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport {\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ClipboardModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n RefLookupComponent,\r\n RefLookupSetComponent,\r\n FlatLookupPipe,\r\n ],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private readonly _subs: Subscription[] = [];\r\n private _noTargetUpdate?: boolean;\r\n private _noFormUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = model<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n public readonly canSwitchMode = model<boolean>();\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = model<IndexLookupDefinitions>();\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n public readonly extLookupConfigs = input<RefLookupConfig[]>([]);\r\n\r\n /**\r\n * True if when a new target is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n public readonly target = model<PinTarget>();\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more items from an external lookup.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * Emitted when the user changes the external lookup configuration.\r\n */\r\n public readonly extLookupConfigChange = output<RefLookupConfig>();\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this.modelEntries = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n\r\n // when pinByTypeMode changes, adjust form\r\n effect(() => {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = this.pinByTypeMode();\r\n } else {\r\n this.byTypeMode.setValue(this.pinByTypeMode() || false, {\r\n emitEvent: false,\r\n });\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n });\r\n\r\n // when target changes, update form\r\n effect(() => {\r\n if (this._noFormUpdate) {\r\n this._noFormUpdate = false;\r\n return;\r\n }\r\n console.log('target changed', this.target());\r\n this.updateForm(this.target());\r\n });\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode.set(false);\r\n this.canSwitchMode.set(false);\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions()) {\r\n this.lookupDefinitions.set(this._presetLookupDefs);\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions()!);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n const defs: IndexLookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n defs[e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n this.lookupDefinitions.set(defs);\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey() || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes (by lookup), update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null, { emitEvent: false });\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes (by user selection), update target and\r\n // eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget(true);\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions()![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private emitChange(): void {\r\n this._noFormUpdate = true;\r\n this.target.set(this.getTarget());\r\n }\r\n\r\n private updateTarget(noEmit = false): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n if (!noEmit) {\r\n this.emitChange();\r\n }\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '', { emitEvent: false });\r\n this.label.setValue(target.label || '', { emitEvent: false });\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item, { emitEvent: false });\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name, { emitEvent: false });\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Item service error', error);\r\n }\r\n this.external.setValue(!target.name, { emitEvent: false });\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name && !this.internalDefault(), {\r\n emitEvent: false,\r\n });\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: unknown): void {\r\n if (!item) {\r\n return;\r\n }\r\n // load item's parts\r\n this._itemService.getItem((item as Item)!.id, true, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget(true);\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Error getting item', error);\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget(true);\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin?: DataPinInfo): void {\r\n if (!pin) {\r\n return;\r\n }\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget(true);\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error('Error loading item/metadata', error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: unknown): void {\r\n this.loadItemInfo(info as DataPinInfo);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n if (event.item) {\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId);\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel);\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n });\r\n }\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public onExtConfigChange(config: RefLookupConfig): void {\r\n this.extLookupConfigChange.emit(config);\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.target.set(this.getTarget());\r\n this.emitChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n <!-- mode switcher -->\r\n @if (!external.value) {\r\n <div>\r\n @if (canSwitchMode()) {\r\n <mat-checkbox [formControl]=\"byTypeMode\"> by type</mat-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n <mat-error>label required</mat-error>\r\n } @if ( $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && label.value) {\r\n <div class=\"info\"><span class=\"label\">label</span>{{ label.value }}</div>\r\n }\r\n </div>\r\n\r\n <!-- gid -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n @if ($any(gid).errors?.required && (gid.dirty || gid.touched)) {\r\n <mat-error>GID required</mat-error>\r\n } @if ($any(gid).errors?.maxLength && (gid.dirty || gid.touched)) {\r\n <mat-error>GID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && gid.value) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- external lookup set -->\r\n @if (external.value && extLookupConfigs().length) {\r\n <div>\r\n <cadmus-ref-lookup-set\r\n [configs]=\"extLookupConfigs()\"\r\n (itemChange)=\"onExtItemChange($event)\"\r\n (moreRequest)=\"onExtMoreRequest($event)\"\r\n (configChange)=\"onExtConfigChange($any($event))\"\r\n ></cadmus-ref-lookup-set>\r\n </div>\r\n }\r\n\r\n <!-- BY ITEM -->\r\n @if (!external.value) {\r\n <div>\r\n <div class=\"form-row\">\r\n @if (!byTypeMode.value) {\r\n <fieldset class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-ref-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n <!-- part filter -->\r\n @if (itemParts.length) {\r\n <mat-form-field>\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n @for (p of itemParts; track p) {\r\n <mat-option [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </fieldset>\r\n }\r\n <!-- BY TYPE -->\r\n @if (byTypeMode.value) {\r\n <div>\r\n <!-- par type filter -->\r\n @if (partTypeKeys.length) {\r\n <mat-form-field>\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n @for (k of partTypeKeys; track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <!-- PIN -->\r\n @if (partTypeKey.value) {\r\n <div>\r\n <!-- pin lookup -->\r\n <cadmus-ref-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter\"\r\n [options]=\"pinFilterOptions\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n <!-- data -->\r\n @if (lookupData?.pin?.name) {\r\n <mat-expansion-panel id=\"data\">\r\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n @if (lookupData?.pin?.value) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ lookupData!.pin.value }}</td>\r\n </tr>\r\n }\r\n <!-- item ID -->\r\n @if (lookupData?.pin?.itemId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ lookupData!.pin.itemId }}</td>\r\n </tr>\r\n }\r\n <!-- item title -->\r\n @if (lookupData?.item?.title) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item title</td>\r\n <td>{{ lookupData!.item!.title }}</td>\r\n </tr>\r\n }\r\n <!-- part ID -->\r\n @if (lookupData?.pin?.partId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ lookupData!.pin.partId }}</td>\r\n </tr>\r\n }\r\n <!-- part type ID -->\r\n @if (lookupData?.pin?.partTypeId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ lookupData!.pin!.partTypeId }}</td>\r\n </tr>\r\n }\r\n <!-- part role ID -->\r\n @if (lookupData?.pin?.roleId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ lookupData!.pin!.roleId }}</td>\r\n </tr>\r\n }\r\n <!-- part's metadata -->\r\n @for ( m of lookupData?.metaPart?.metadata || []; track m; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"button-row\" id=\"toolbar\">\r\n <button mat-icon-button type=\"button\" (click)=\"close()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon>check_circle</mat-icon>\r\n target\r\n </button>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { RamStorageService } from '@myrmidon/ngx-tools';\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport {\r\n PinTarget,\r\n PinTargetLookupComponent,\r\n} from '../pin-target-lookup/pin-target-lookup.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * The key to be used to retrieve the external lookup configs from the\r\n * settings storage. This is equal to the selector of\r\n * AssertedCompositeIdComponent plus \".configs\".\r\n */\r\nexport const ASSERTED_COMPOSITE_ID_CONFIGS_KEY =\r\n 'cadmus-refs-asserted-composite-id.configs';\r\n\r\n/**\r\n * An asserted composite ID editor. This allows the user to edit an asserted\r\n * composite ID, which can be an external ID or a lookup ID.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n AssertionComponent,\r\n PinTargetLookupComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public extLookupConfigs: RefLookupConfig[];\r\n public targetExpanded = false;\r\n // form\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n public readonly id = model<AssertedCompositeId>();\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions,\r\n settings: RamStorageService\r\n ) {\r\n // form\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n\r\n // external lookup configs\r\n this.extLookupConfigs =\r\n settings.retrieve<RefLookupConfig[]>(ASSERTED_COMPOSITE_ID_CONFIGS_KEY) ||\r\n [];\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target?: PinTarget): void {\r\n this.target.setValue(target!);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n if (this.form.valid) {\r\n this.targetExpanded = false;\r\n }\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit()) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onExtLookupConfigChange(config: RefLookupConfig): void {\r\n if (\r\n !this.scope.value ||\r\n this.extLookupConfigs.some((c) => c.name === this.scope.value)\r\n ) {\r\n this.scope.setValue(config.name || null);\r\n this.scope.markAsDirty();\r\n this.scope.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this.id.set(this.getId());\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries()?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries()?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries(); track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @else {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if ( $any(scope.errors)?.maxLength && (scope.dirty || scope.touched) )\n {\n <mat-error>scope too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- label and GID -->\n @if (target.value?.label) {\n <div class=\"info\">\n <span class=\"label\">label</span>{{ target.value?.label }}\n </div>\n } @if (target.value?.gid) {\n <div class=\"info\">\n <span class=\"label\">GID</span>{{ target.value?.gid }}\n </div>\n }\n </div>\n\n <!-- target -->\n <div class=\"boxed\">\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\n <cadmus-pin-target-lookup\n [pinByTypeMode]=\"pinByTypeMode()\"\n [canSwitchMode]=\"canSwitchMode()\"\n [canEditTarget]=\"canEditTarget()\"\n [lookupDefinitions]=\"lookupDefinitions()\"\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\n [target]=\"target.value || undefined\"\n [internalDefault]=\"internalDefault()\"\n [extLookupConfigs]=\"extLookupConfigs\"\n (targetChange)=\"onTargetChange($event)\"\n (editorClose)=\"onEditorClose()\"\n (extMoreRequest)=\"onExtMoreRequest($event)\"\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\n />\n </mat-expansion-panel>\n </div>\n\n <!-- assertion -->\n <br />\n <div class=\"boxed\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries()\"\n [refTypeEntries]=\"refTypeEntries()\"\n [refTagEntries]=\"refTagEntries()\"\n [assertion]=\"assertion.value || undefined\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit()) {\n <div>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\n >\n <mat-icon class=\"mat-warn\">close</mat-icon>\n </button>\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n }\n</form>\n","import { Component, input, Input, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdComponent,\r\n} from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted composite IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n AssertedCompositeIdComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n public readonly pinByTypeMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n public readonly internalDefault = input<boolean>();\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n public readonly idsChange = output<AssertedCompositeId[]>();\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id?: AssertedCompositeId): void {\r\n this.saveId(id!);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"entry === edited\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [internalDefault]=\"internalDefault()\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n</form>\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i1","i4","i5","i6","i8","i9","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i7","i10","i11","i12","i13","i14"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrmidon/cadmus-refs-asserted-ids",
3
- "version": "8.0.1",
3
+ "version": "9.0.0",
4
4
  "description": "Cadmus - asserted IDs components.",
5
5
  "keywords": [
6
6
  "Cadmus",
@@ -18,8 +18,8 @@
18
18
  "@angular/common": "^19.0.0",
19
19
  "@angular/core": "^19.0.0",
20
20
  "@myrmidon/ngx-mat-tools": "^0.0.1",
21
- "@myrmidon/cadmus-api": "^10.1.0",
22
- "@myrmidon/cadmus-refs-assertion": "^8.0.0"
21
+ "@myrmidon/cadmus-api": "^11.0.0",
22
+ "@myrmidon/cadmus-refs-assertion": "^9.0.0"
23
23
  },
24
24
  "dependencies": {
25
25
  "tslib": "^2.3.0"