@abp/ng.components 10.1.1 → 10.2.0-rc.2

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.
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, DestroyRef, input, model, output, contentChild, signal, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import * as i1 from '@angular/common';
5
- import { CommonModule } from '@angular/common';
6
- import * as i2 from '@angular/forms';
4
+ import { NgTemplateOutlet } from '@angular/common';
5
+ import * as i1 from '@angular/forms';
7
6
  import { FormsModule } from '@angular/forms';
8
7
  import { LocalizationPipe } from '@abp/ng.core';
9
8
  import { of, Subject, debounceTime, distinctUntilChanged, finalize } from 'rxjs';
@@ -92,11 +91,11 @@ class LookupSearchComponent {
92
91
  return String(item[this.displayKey()] ?? item[this.valueKey()] ?? '');
93
92
  }
94
93
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: LookupSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
95
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: LookupSearchComponent, isStandalone: true, selector: "abp-lookup-search", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, minSearchLength: { classPropertyName: "minSearchLength", publicName: "minSearchLength", isSignal: true, isRequired: false, transformFunction: null }, displayKey: { classPropertyName: "displayKey", publicName: "displayKey", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: false, transformFunction: null }, selectedValue: { classPropertyName: "selectedValue", publicName: "selectedValue", isSignal: true, isRequired: false, transformFunction: null }, displayValue: { classPropertyName: "displayValue", publicName: "displayValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedValue: "selectedValueChange", displayValue: "displayValueChange", itemSelected: "itemSelected", searchChanged: "searchChanged" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true, isSignal: true }, { propertyName: "noResultsTemplate", first: true, predicate: ["noResultsTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".abp-lookup-dropdown{z-index:1060;max-height:200px;overflow-y:auto;top:100%;margin-top:.25rem;background-color:var(--lpx-content-bg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: LookupSearchComponent, isStandalone: true, selector: "abp-lookup-search", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, minSearchLength: { classPropertyName: "minSearchLength", publicName: "minSearchLength", isSignal: true, isRequired: false, transformFunction: null }, displayKey: { classPropertyName: "displayKey", publicName: "displayKey", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: false, transformFunction: null }, selectedValue: { classPropertyName: "selectedValue", publicName: "selectedValue", isSignal: true, isRequired: false, transformFunction: null }, displayValue: { classPropertyName: "displayValue", publicName: "displayValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedValue: "selectedValueChange", displayValue: "displayValueChange", itemSelected: "itemSelected", searchChanged: "searchChanged" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true, isSignal: true }, { propertyName: "noResultsTemplate", first: true, predicate: ["noResultsTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".abp-lookup-dropdown{z-index:1060;max-height:200px;overflow-y:auto;top:100%;margin-top:.25rem;background-color:var(--lpx-content-bg)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
96
95
  }
97
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: LookupSearchComponent, decorators: [{
98
97
  type: Component,
99
- args: [{ selector: 'abp-lookup-search', imports: [CommonModule, FormsModule, LocalizationPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".abp-lookup-dropdown{z-index:1060;max-height:200px;overflow-y:auto;top:100%;margin-top:.25rem;background-color:var(--lpx-content-bg)}\n"] }]
98
+ args: [{ selector: 'abp-lookup-search', imports: [FormsModule, LocalizationPipe, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".abp-lookup-dropdown{z-index:1060;max-height:200px;overflow-y:auto;top:100%;margin-top:.25rem;background-color:var(--lpx-content-bg)}\n"] }]
100
99
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], debounceTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounceTime", required: false }] }], minSearchLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSearchLength", required: false }] }], displayKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayKey", required: false }] }], valueKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueKey", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], searchFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFn", required: false }] }], selectedValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValue", required: false }] }, { type: i0.Output, args: ["selectedValueChange"] }], displayValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayValue", required: false }] }, { type: i0.Output, args: ["displayValueChange"] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], searchChanged: [{ type: i0.Output, args: ["searchChanged"] }], itemTemplate: [{ type: i0.ContentChild, args: ['itemTemplate', { isSignal: true }] }], noResultsTemplate: [{ type: i0.ContentChild, args: ['noResultsTemplate', { isSignal: true }] }] } });
101
100
 
102
101
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"abp-ng.components-lookup.mjs","sources":["../../../../packages/components/lookup/src/lib/lookup-search.component.ts","../../../../packages/components/lookup/src/lib/lookup-search.component.html","../../../../packages/components/lookup/src/abp-ng.components-lookup.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n output,\r\n model,\r\n signal,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n TemplateRef,\r\n contentChild,\r\n DestroyRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { Subject, Observable, debounceTime, distinctUntilChanged, of, finalize } from 'rxjs';\r\n\r\nexport interface LookupItem {\r\n key: string;\r\n displayName: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport type LookupSearchFn<T = LookupItem> = (filter: string) => Observable<T[]>;\r\n\r\n@Component({\r\n selector: 'abp-lookup-search',\r\n templateUrl: './lookup-search.component.html',\r\n styleUrl: './lookup-search.component.scss',\r\n imports: [CommonModule, FormsModule, LocalizationPipe],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LookupSearchComponent<T extends LookupItem = LookupItem> implements OnInit {\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly label = input<string>();\r\n readonly placeholder = input<string>('');\r\n readonly debounceTime = input<number>(300);\r\n readonly minSearchLength = input<number>(0);\r\n readonly displayKey = input<keyof T>('displayName' as keyof T);\r\n readonly valueKey = input<keyof T>('key' as keyof T);\r\n readonly disabled = input<boolean>(false);\r\n\r\n readonly searchFn = input<LookupSearchFn<T>>(() => of([]));\r\n\r\n readonly selectedValue = model<string>('');\r\n readonly displayValue = model<string>('');\r\n\r\n readonly itemSelected = output<T>();\r\n readonly searchChanged = output<string>();\r\n\r\n readonly itemTemplate = contentChild<TemplateRef<{ $implicit: T }>>('itemTemplate');\r\n readonly noResultsTemplate = contentChild<TemplateRef<void>>('noResultsTemplate');\r\n\r\n readonly searchResults = signal<T[]>([]);\r\n readonly showDropdown = signal(true);\r\n readonly isLoading = signal(false);\r\n\r\n private readonly searchSubject = new Subject<string>();\r\n\r\n ngOnInit() {\r\n this.searchSubject\r\n .pipe(\r\n debounceTime(this.debounceTime()),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe(filter => {\r\n this.performSearch(filter);\r\n });\r\n }\r\n\r\n onSearchInput(filter: string) {\r\n this.displayValue.set(filter);\r\n this.showDropdown.set(true);\r\n this.searchChanged.emit(filter);\r\n\r\n if (filter.length >= this.minSearchLength()) {\r\n this.searchSubject.next(filter);\r\n } else {\r\n this.searchResults.set([]);\r\n }\r\n }\r\n\r\n onSearchFocus() {\r\n this.showDropdown.set(true);\r\n const currentFilter = this.displayValue() || '';\r\n if (currentFilter.length >= this.minSearchLength()) {\r\n this.performSearch(currentFilter);\r\n }\r\n }\r\n\r\n onSearchBlur(event: FocusEvent) {\r\n const relatedTarget = event.relatedTarget as HTMLElement;\r\n if (!relatedTarget?.closest('.abp-lookup-dropdown')) {\r\n this.showDropdown.set(false);\r\n }\r\n }\r\n\r\n selectItem(item: T) {\r\n const displayKeyValue = String(item[this.displayKey()] ?? '');\r\n const valueKeyValue = String(item[this.valueKey()] ?? '');\r\n\r\n this.displayValue.set(displayKeyValue);\r\n this.selectedValue.set(valueKeyValue);\r\n this.searchResults.set([]);\r\n this.showDropdown.set(false);\r\n this.itemSelected.emit(item);\r\n }\r\n\r\n clearSelection() {\r\n this.displayValue.set('');\r\n this.selectedValue.set('');\r\n this.searchResults.set([]);\r\n }\r\n\r\n private performSearch(filter: string) {\r\n this.isLoading.set(true);\r\n\r\n this.searchFn()(filter)\r\n .pipe(\r\n takeUntilDestroyed(this.destroyRef),\r\n finalize(() => this.isLoading.set(false)),\r\n )\r\n .subscribe({\r\n next: results => {\r\n this.searchResults.set(results);\r\n },\r\n error: () => {\r\n this.searchResults.set([]);\r\n },\r\n });\r\n }\r\n\r\n getDisplayValue(item: T): string {\r\n return String(item[this.displayKey()] ?? item[this.valueKey()] ?? '');\r\n }\r\n}\r\n","<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abp-ng.components-lookup.mjs","sources":["../../../../packages/components/lookup/src/lib/lookup-search.component.ts","../../../../packages/components/lookup/src/lib/lookup-search.component.html","../../../../packages/components/lookup/src/abp-ng.components-lookup.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n output,\r\n model,\r\n signal,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n TemplateRef,\r\n contentChild,\r\n DestroyRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { Subject, Observable, debounceTime, distinctUntilChanged, of, finalize } from 'rxjs';\r\n\r\nexport interface LookupItem {\r\n key: string;\r\n displayName: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport type LookupSearchFn<T = LookupItem> = (filter: string) => Observable<T[]>;\r\n\r\n@Component({\r\n selector: 'abp-lookup-search',\r\n templateUrl: './lookup-search.component.html',\r\n styleUrl: './lookup-search.component.scss',\r\n imports: [FormsModule, LocalizationPipe, NgTemplateOutlet],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LookupSearchComponent<T extends LookupItem = LookupItem> implements OnInit {\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly label = input<string>();\r\n readonly placeholder = input<string>('');\r\n readonly debounceTime = input<number>(300);\r\n readonly minSearchLength = input<number>(0);\r\n readonly displayKey = input<keyof T>('displayName' as keyof T);\r\n readonly valueKey = input<keyof T>('key' as keyof T);\r\n readonly disabled = input<boolean>(false);\r\n\r\n readonly searchFn = input<LookupSearchFn<T>>(() => of([]));\r\n\r\n readonly selectedValue = model<string>('');\r\n readonly displayValue = model<string>('');\r\n\r\n readonly itemSelected = output<T>();\r\n readonly searchChanged = output<string>();\r\n\r\n readonly itemTemplate = contentChild<TemplateRef<{ $implicit: T }>>('itemTemplate');\r\n readonly noResultsTemplate = contentChild<TemplateRef<void>>('noResultsTemplate');\r\n\r\n readonly searchResults = signal<T[]>([]);\r\n readonly showDropdown = signal(true);\r\n readonly isLoading = signal(false);\r\n\r\n private readonly searchSubject = new Subject<string>();\r\n\r\n ngOnInit() {\r\n this.searchSubject\r\n .pipe(\r\n debounceTime(this.debounceTime()),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe(filter => {\r\n this.performSearch(filter);\r\n });\r\n }\r\n\r\n onSearchInput(filter: string) {\r\n this.displayValue.set(filter);\r\n this.showDropdown.set(true);\r\n this.searchChanged.emit(filter);\r\n\r\n if (filter.length >= this.minSearchLength()) {\r\n this.searchSubject.next(filter);\r\n } else {\r\n this.searchResults.set([]);\r\n }\r\n }\r\n\r\n onSearchFocus() {\r\n this.showDropdown.set(true);\r\n const currentFilter = this.displayValue() || '';\r\n if (currentFilter.length >= this.minSearchLength()) {\r\n this.performSearch(currentFilter);\r\n }\r\n }\r\n\r\n onSearchBlur(event: FocusEvent) {\r\n const relatedTarget = event.relatedTarget as HTMLElement;\r\n if (!relatedTarget?.closest('.abp-lookup-dropdown')) {\r\n this.showDropdown.set(false);\r\n }\r\n }\r\n\r\n selectItem(item: T) {\r\n const displayKeyValue = String(item[this.displayKey()] ?? '');\r\n const valueKeyValue = String(item[this.valueKey()] ?? '');\r\n\r\n this.displayValue.set(displayKeyValue);\r\n this.selectedValue.set(valueKeyValue);\r\n this.searchResults.set([]);\r\n this.showDropdown.set(false);\r\n this.itemSelected.emit(item);\r\n }\r\n\r\n clearSelection() {\r\n this.displayValue.set('');\r\n this.selectedValue.set('');\r\n this.searchResults.set([]);\r\n }\r\n\r\n private performSearch(filter: string) {\r\n this.isLoading.set(true);\r\n\r\n this.searchFn()(filter)\r\n .pipe(\r\n takeUntilDestroyed(this.destroyRef),\r\n finalize(() => this.isLoading.set(false)),\r\n )\r\n .subscribe({\r\n next: results => {\r\n this.searchResults.set(results);\r\n },\r\n error: () => {\r\n this.searchResults.set([]);\r\n },\r\n });\r\n }\r\n\r\n getDisplayValue(item: T): string {\r\n return String(item[this.displayKey()] ?? item[this.valueKey()] ?? '');\r\n }\r\n}\r\n","<div class=\"abp-lookup-container position-relative\">\r\n @if (label()) {\r\n <label class=\"form-label\">{{ label() | abpLocalization }}</label>\r\n }\r\n\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [placeholder]=\"placeholder() | abpLocalization\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n (focus)=\"onSearchFocus()\"\r\n (blur)=\"onSearchBlur($event)\"\r\n [disabled]=\"disabled()\"\r\n />\r\n @if (displayValue() && !disabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline-secondary\"\r\n (mousedown)=\"clearSelection()\"\r\n tabindex=\"-1\"\r\n >\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showDropdown() && !disabled()) {\r\n <div class=\"abp-lookup-dropdown list-group position-absolute w-100\">\r\n @if (isLoading()) {\r\n <div class=\"list-group-item text-center py-3\">\r\n <i class=\"fa fa-spinner fa-spin me-2\"></i>\r\n {{ 'AbpUi::Loading' | abpLocalization }}\r\n </div>\r\n } @else if (searchResults().length > 0) {\r\n @for (item of searchResults(); track item.key) {\r\n <button\r\n type=\"button\"\r\n class=\"list-group-item list-group-item-action\"\r\n (mousedown)=\"selectItem(item)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item }\" />\r\n } @else {\r\n {{ getDisplayValue(item) }}\r\n }\r\n </button>\r\n }\r\n } @else if (displayValue()) {\r\n @if (noResultsTemplate()) {\r\n <ng-container *ngTemplateOutlet=\"noResultsTemplate()!\" />\r\n } @else {\r\n <div class=\"list-group-item text-muted\">\r\n {{ 'AbpUi::NoDataAvailableInDatatable' | abpLocalization }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, TemplateRef, ViewContainerRef, Injector, Input, Directive, ViewEncapsulation, Component, ContentChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, TemplateRef, ViewContainerRef, Injector, input, effect, Directive, ViewEncapsulation, Component, signal, contentChild, NgModule } from '@angular/core';
3
3
  import { Observable, of } from 'rxjs';
4
4
  import { BreadcrumbComponent } from '@abp/ng.theme.shared';
5
5
  import { PageToolbarComponent } from '@abp/ng.components/extensible';
@@ -12,6 +12,8 @@ class PagePartDirective {
12
12
  this.renderLogic = inject(PAGE_RENDER_STRATEGY, { optional: true });
13
13
  this.injector = inject(Injector);
14
14
  this.hasRendered = false;
15
+ this.context = input(undefined, { ...(ngDevMode ? { debugName: "context" } : {}), alias: 'abpPagePartContext' });
16
+ this.abpPagePart = input('', ...(ngDevMode ? [{ debugName: "abpPagePart" }] : []));
15
17
  this.render = (shouldRender) => {
16
18
  if (shouldRender && !this.hasRendered) {
17
19
  this.viewContainer.createEmbeddedView(this.templateRef);
@@ -22,25 +24,30 @@ class PagePartDirective {
22
24
  this.hasRendered = false;
23
25
  }
24
26
  };
25
- }
26
- set abpPagePart(type) {
27
- this.type = type;
28
- this.createRenderStream(type);
29
- }
30
- ngOnChanges({ context }) {
31
- if (this.renderLogic?.onContextUpdate) {
32
- this.renderLogic.onContextUpdate(context);
33
- }
27
+ // Watch for type changes
28
+ effect(() => {
29
+ const type = this.abpPagePart();
30
+ if (type) {
31
+ this.createRenderStream(type);
32
+ }
33
+ });
34
+ // Watch for context changes
35
+ effect(() => {
36
+ const ctx = this.context();
37
+ if (this.renderLogic?.onContextUpdate) {
38
+ this.renderLogic.onContextUpdate(ctx);
39
+ }
40
+ });
34
41
  }
35
42
  ngOnInit() {
36
43
  if (this.renderLogic?.onInit) {
37
- this.renderLogic.onInit(this.type, this.injector, this.context);
44
+ this.renderLogic.onInit(this.abpPagePart(), this.injector, this.context());
38
45
  }
39
46
  }
40
47
  ngOnDestroy() {
41
48
  this.clearSubscription();
42
49
  if (this.renderLogic?.onDestroy) {
43
- this.renderLogic.onDestroy(this.type, this.injector, this.context);
50
+ this.renderLogic.onDestroy(this.abpPagePart(), this.injector, this.context());
44
51
  }
45
52
  }
46
53
  shouldRender(type) {
@@ -60,19 +67,14 @@ class PagePartDirective {
60
67
  }
61
68
  }
62
69
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PagePartDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
63
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.9", type: PagePartDirective, isStandalone: true, selector: "[abpPagePart]", inputs: { context: ["abpPagePartContext", "context"], abpPagePart: "abpPagePart" }, usesOnChanges: true, ngImport: i0 }); }
70
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.9", type: PagePartDirective, isStandalone: true, selector: "[abpPagePart]", inputs: { context: { classPropertyName: "context", publicName: "abpPagePartContext", isSignal: true, isRequired: false, transformFunction: null }, abpPagePart: { classPropertyName: "abpPagePart", publicName: "abpPagePart", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
64
71
  }
65
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PagePartDirective, decorators: [{
66
73
  type: Directive,
67
74
  args: [{
68
75
  selector: '[abpPagePart]',
69
76
  }]
70
- }], propDecorators: { context: [{
71
- type: Input,
72
- args: ['abpPagePartContext']
73
- }], abpPagePart: [{
74
- type: Input
75
- }] } });
77
+ }], ctorParameters: () => [], propDecorators: { context: [{ type: i0.Input, args: [{ isSignal: true, alias: "abpPagePartContext", required: false }] }], abpPagePart: [{ type: i0.Input, args: [{ isSignal: true, alias: "abpPagePart", required: false }] }] } });
76
78
 
77
79
  var PageParts;
78
80
  (function (PageParts) {
@@ -119,52 +121,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
119
121
 
120
122
  class PageComponent {
121
123
  constructor() {
122
- this.toolbarVisible = false;
123
- this.breadcrumb = true;
124
+ this.title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : []));
125
+ this.toolbarInput = input(undefined, { ...(ngDevMode ? { debugName: "toolbarInput" } : {}), alias: 'toolbar' });
126
+ this.breadcrumb = input(true, ...(ngDevMode ? [{ debugName: "breadcrumb" }] : []));
127
+ this.toolbarVisible = signal(false, ...(ngDevMode ? [{ debugName: "toolbarVisible" }] : []));
128
+ this.toolbarData = signal(undefined, ...(ngDevMode ? [{ debugName: "toolbarData" }] : []));
124
129
  this.pageParts = {
125
130
  title: PageParts.title,
126
131
  breadcrumb: PageParts.breadcrumb,
127
132
  toolbar: PageParts.toolbar,
128
133
  };
129
- }
130
- set toolbar(val) {
131
- this._toolbarData = val;
132
- this.toolbarVisible = true;
133
- }
134
- get toolbarData() {
135
- return this._toolbarData;
134
+ this.customTitle = contentChild(PageTitleContainerComponent, ...(ngDevMode ? [{ debugName: "customTitle" }] : []));
135
+ this.customBreadcrumb = contentChild(PageBreadcrumbContainerComponent, ...(ngDevMode ? [{ debugName: "customBreadcrumb" }] : []));
136
+ this.customToolbar = contentChild(PageToolbarContainerComponent, ...(ngDevMode ? [{ debugName: "customToolbar" }] : []));
137
+ effect(() => {
138
+ const toolbar = this.toolbarInput();
139
+ if (toolbar !== undefined) {
140
+ this.toolbarData.set(toolbar);
141
+ this.toolbarVisible.set(true);
142
+ }
143
+ });
136
144
  }
137
145
  get shouldRenderRow() {
138
- return !!(this.title ||
139
- this.toolbarVisible ||
140
- this.breadcrumb ||
141
- this.customTitle ||
142
- this.customBreadcrumb ||
143
- this.customToolbar ||
146
+ return !!(this.title() ||
147
+ this.toolbarVisible() ||
148
+ this.breadcrumb() ||
149
+ this.customTitle() ||
150
+ this.customBreadcrumb() ||
151
+ this.customToolbar() ||
144
152
  this.pageParts);
145
153
  }
146
154
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: PageComponent, isStandalone: true, selector: "abp-page", inputs: { title: "title", toolbar: "toolbar", breadcrumb: "breadcrumb" }, queries: [{ propertyName: "customTitle", first: true, predicate: PageTitleContainerComponent, descendants: true }, { propertyName: "customBreadcrumb", first: true, predicate: PageBreadcrumbContainerComponent, descendants: true }, { propertyName: "customToolbar", first: true, predicate: PageToolbarContainerComponent, descendants: true }], ngImport: i0, template: "@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData\">\r\n <abp-page-toolbar [record]=\"toolbarData\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n", dependencies: [{ kind: "component", type: BreadcrumbComponent, selector: "abp-breadcrumb" }, { kind: "component", type: PageToolbarComponent, selector: "abp-page-toolbar", exportAs: ["abpPageToolbar"] }, { kind: "directive", type: PagePartDirective, selector: "[abpPagePart]", inputs: ["abpPagePartContext", "abpPagePart"] }], encapsulation: i0.ViewEncapsulation.None }); }
155
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: PageComponent, isStandalone: true, selector: "abp-page", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, toolbarInput: { classPropertyName: "toolbarInput", publicName: "toolbar", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "customTitle", first: true, predicate: PageTitleContainerComponent, descendants: true, isSignal: true }, { propertyName: "customBreadcrumb", first: true, predicate: PageBreadcrumbContainerComponent, descendants: true, isSignal: true }, { propertyName: "customToolbar", first: true, predicate: PageToolbarContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle()) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title()) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title() }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb()) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb()) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar()) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible()) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData()\">\r\n <abp-page-toolbar [record]=\"toolbarData()\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n", dependencies: [{ kind: "component", type: BreadcrumbComponent, selector: "abp-breadcrumb" }, { kind: "component", type: PageToolbarComponent, selector: "abp-page-toolbar", exportAs: ["abpPageToolbar"] }, { kind: "directive", type: PagePartDirective, selector: "[abpPagePart]", inputs: ["abpPagePartContext", "abpPagePart"] }], encapsulation: i0.ViewEncapsulation.None }); }
148
156
  }
149
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PageComponent, decorators: [{
150
158
  type: Component,
151
- args: [{ selector: 'abp-page', encapsulation: ViewEncapsulation.None, imports: [BreadcrumbComponent, PageToolbarComponent, PagePartDirective], template: "@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData\">\r\n <abp-page-toolbar [record]=\"toolbarData\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n" }]
152
- }], propDecorators: { title: [{
153
- type: Input
154
- }], toolbar: [{
155
- type: Input
156
- }], breadcrumb: [{
157
- type: Input
158
- }], customTitle: [{
159
- type: ContentChild,
160
- args: [PageTitleContainerComponent]
161
- }], customBreadcrumb: [{
162
- type: ContentChild,
163
- args: [PageBreadcrumbContainerComponent]
164
- }], customToolbar: [{
165
- type: ContentChild,
166
- args: [PageToolbarContainerComponent]
167
- }] } });
159
+ args: [{ selector: 'abp-page', encapsulation: ViewEncapsulation.None, imports: [BreadcrumbComponent, PageToolbarComponent, PagePartDirective], template: "@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle()) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title()) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title() }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb()) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb()) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar()) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible()) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData()\">\r\n <abp-page-toolbar [record]=\"toolbarData()\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n" }]
160
+ }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], toolbarInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "toolbar", required: false }] }], breadcrumb: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb", required: false }] }], customTitle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PageTitleContainerComponent), { isSignal: true }] }], customBreadcrumb: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PageBreadcrumbContainerComponent), { isSignal: true }] }], customToolbar: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PageToolbarContainerComponent), { isSignal: true }] }] } });
168
161
 
169
162
  const PAGE_EXPORTS = [
170
163
  PageComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"abp-ng.components-page.mjs","sources":["../../../../packages/components/page/src/page-part.directive.ts","../../../../packages/components/page/src/page-parts.component.ts","../../../../packages/components/page/src/page.component.ts","../../../../packages/components/page/src/page.component.html","../../../../packages/components/page/src/page.module.ts","../../../../packages/components/page/src/abp-ng.components-page.ts"],"sourcesContent":["import { \r\n Directive, \r\n TemplateRef, \r\n ViewContainerRef, \r\n Input, \r\n InjectionToken, \r\n OnInit, \r\n OnDestroy, \r\n Injector, \r\n OnChanges, \r\n SimpleChanges, \r\n SimpleChange, \r\n inject\r\n } from '@angular/core';\r\nimport { Observable, Subscription, of } from 'rxjs';\r\n\r\nexport interface PageRenderStrategy {\r\n shouldRender(type?: string): boolean | Observable<boolean>;\r\n onInit?(type?: string, injector?: Injector, context?: any): void;\r\n onDestroy?(type?: string, injector?: Injector, context?: any): void;\r\n onContextUpdate?(change?: SimpleChange): void;\r\n}\r\n\r\nexport const PAGE_RENDER_STRATEGY = new InjectionToken<PageRenderStrategy>('PAGE_RENDER_STRATEGY');\r\n\r\n@Directive({\r\n selector: '[abpPagePart]',\r\n})\r\nexport class PagePartDirective implements OnInit, OnDestroy, OnChanges {\r\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\r\n private viewContainer = inject(ViewContainerRef);\r\n private renderLogic = inject<PageRenderStrategy>(PAGE_RENDER_STRATEGY, { optional: true })!;\r\n private injector = inject(Injector);\r\n\r\n hasRendered = false;\r\n type!: string;\r\n subscription!: Subscription;\r\n\r\n @Input('abpPagePartContext') context: any;\r\n @Input() set abpPagePart(type: string) {\r\n this.type = type;\r\n this.createRenderStream(type);\r\n }\r\n\r\n render = (shouldRender: boolean) => {\r\n if (shouldRender && !this.hasRendered) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasRendered = true;\r\n } else if (!shouldRender && this.hasRendered) {\r\n this.viewContainer.clear();\r\n this.hasRendered = false;\r\n }\r\n };\r\n\r\n ngOnChanges({ context }: SimpleChanges): void {\r\n if (this.renderLogic?.onContextUpdate) {\r\n this.renderLogic.onContextUpdate(context);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (this.renderLogic?.onInit) {\r\n this.renderLogic.onInit(this.type, this.injector, this.context);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearSubscription();\r\n\r\n if (this.renderLogic?.onDestroy) {\r\n this.renderLogic.onDestroy(this.type, this.injector, this.context);\r\n }\r\n }\r\n\r\n shouldRender(type: string) {\r\n if (this.renderLogic) {\r\n const willRender = this.renderLogic.shouldRender(type);\r\n return willRender instanceof Observable ? willRender : of(willRender);\r\n }\r\n return of(true);\r\n }\r\n\r\n protected createRenderStream(type: string) {\r\n this.clearSubscription();\r\n\r\n this.subscription = this.shouldRender(type).subscribe(this.render);\r\n }\r\n\r\n protected clearSubscription() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\nexport enum PageParts {\r\n title = 'PageTitleContainerComponent',\r\n breadcrumb = 'PageBreadcrumbContainerComponent',\r\n toolbar = 'PageToolbarContainerComponent',\r\n}\r\n\r\n@Component({\r\n selector: 'abp-page-title-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageTitleContainerComponent {}\r\n\r\n@Component({\r\n selector: 'abp-page-breadcrumb-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageBreadcrumbContainerComponent {}\r\n\r\n@Component({\r\n selector: 'abp-page-toolbar-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageToolbarContainerComponent {}\r\n","import { Component, Input, ViewEncapsulation, ContentChild } from '@angular/core';\r\nimport {\r\n PageTitleContainerComponent,\r\n PageBreadcrumbContainerComponent,\r\n PageToolbarContainerComponent,\r\n PageParts,\r\n} from './page-parts.component';\r\nimport { BreadcrumbComponent } from '@abp/ng.theme.shared';\r\nimport { PageToolbarComponent } from '@abp/ng.components/extensible';\r\nimport { PagePartDirective } from './page-part.directive';\r\n\r\n@Component({\r\n selector: 'abp-page',\r\n templateUrl: './page.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [BreadcrumbComponent, PageToolbarComponent, PagePartDirective],\r\n})\r\nexport class PageComponent {\r\n @Input() title?: string;\r\n\r\n toolbarVisible = false;\r\n _toolbarData: any;\r\n @Input() set toolbar(val: any) {\r\n this._toolbarData = val;\r\n this.toolbarVisible = true;\r\n }\r\n\r\n get toolbarData() {\r\n return this._toolbarData;\r\n }\r\n\r\n @Input() breadcrumb = true;\r\n\r\n pageParts = {\r\n title: PageParts.title,\r\n breadcrumb: PageParts.breadcrumb,\r\n toolbar: PageParts.toolbar,\r\n };\r\n\r\n @ContentChild(PageTitleContainerComponent) customTitle?: PageTitleContainerComponent;\r\n @ContentChild(PageBreadcrumbContainerComponent)\r\n customBreadcrumb?: PageBreadcrumbContainerComponent;\r\n @ContentChild(PageToolbarContainerComponent) customToolbar?: PageToolbarContainerComponent;\r\n\r\n get shouldRenderRow() {\r\n return !!(\r\n this.title ||\r\n this.toolbarVisible ||\r\n this.breadcrumb ||\r\n this.customTitle ||\r\n this.customBreadcrumb ||\r\n this.customToolbar ||\r\n this.pageParts\r\n );\r\n }\r\n}\r\n","@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData\">\r\n <abp-page-toolbar [record]=\"toolbarData\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n","import { NgModule } from '@angular/core';\r\nimport { PagePartDirective } from './page-part.directive';\r\nimport {\r\n PageBreadcrumbContainerComponent,\r\n PageTitleContainerComponent,\r\n PageToolbarContainerComponent,\r\n} from './page-parts.component';\r\nimport { PageComponent } from './page.component';\r\n\r\nexport const PAGE_EXPORTS = [\r\n PageComponent,\r\n PageTitleContainerComponent,\r\n PageBreadcrumbContainerComponent,\r\n PageToolbarContainerComponent,\r\n PagePartDirective,\r\n];\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [...PAGE_EXPORTS],\r\n exports: [...PAGE_EXPORTS],\r\n})\r\nexport class PageModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abp-ng.components-page.mjs","sources":["../../../../packages/components/page/src/page-part.directive.ts","../../../../packages/components/page/src/page-parts.component.ts","../../../../packages/components/page/src/page.component.ts","../../../../packages/components/page/src/page.component.html","../../../../packages/components/page/src/page.module.ts","../../../../packages/components/page/src/abp-ng.components-page.ts"],"sourcesContent":["import {\r\n Directive,\r\n TemplateRef,\r\n ViewContainerRef,\r\n InjectionToken,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n inject,\r\n input,\r\n effect\r\n} from '@angular/core';\r\nimport { Observable, Subscription, of } from 'rxjs';\r\n\r\nexport interface PageRenderStrategy {\r\n shouldRender(type?: string): boolean | Observable<boolean>;\r\n onInit?(type?: string, injector?: Injector, context?: any): void;\r\n onDestroy?(type?: string, injector?: Injector, context?: any): void;\r\n onContextUpdate?(context?: any): void;\r\n}\r\n\r\nexport const PAGE_RENDER_STRATEGY = new InjectionToken<PageRenderStrategy>('PAGE_RENDER_STRATEGY');\r\n\r\n@Directive({\r\n selector: '[abpPagePart]',\r\n})\r\nexport class PagePartDirective implements OnInit, OnDestroy {\r\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\r\n private viewContainer = inject(ViewContainerRef);\r\n private renderLogic = inject<PageRenderStrategy>(PAGE_RENDER_STRATEGY, { optional: true })!;\r\n private injector = inject(Injector);\r\n\r\n hasRendered = false;\r\n subscription!: Subscription;\r\n\r\n readonly context = input<any>(undefined, { alias: 'abpPagePartContext' });\r\n readonly abpPagePart = input<string>('');\r\n\r\n constructor() {\r\n // Watch for type changes\r\n effect(() => {\r\n const type = this.abpPagePart();\r\n if (type) {\r\n this.createRenderStream(type);\r\n }\r\n });\r\n\r\n // Watch for context changes\r\n effect(() => {\r\n const ctx = this.context();\r\n if (this.renderLogic?.onContextUpdate) {\r\n this.renderLogic.onContextUpdate(ctx);\r\n }\r\n });\r\n }\r\n\r\n render = (shouldRender: boolean) => {\r\n if (shouldRender && !this.hasRendered) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasRendered = true;\r\n } else if (!shouldRender && this.hasRendered) {\r\n this.viewContainer.clear();\r\n this.hasRendered = false;\r\n }\r\n };\r\n\r\n ngOnInit() {\r\n if (this.renderLogic?.onInit) {\r\n this.renderLogic.onInit(this.abpPagePart(), this.injector, this.context());\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearSubscription();\r\n\r\n if (this.renderLogic?.onDestroy) {\r\n this.renderLogic.onDestroy(this.abpPagePart(), this.injector, this.context());\r\n }\r\n }\r\n\r\n shouldRender(type: string) {\r\n if (this.renderLogic) {\r\n const willRender = this.renderLogic.shouldRender(type);\r\n return willRender instanceof Observable ? willRender : of(willRender);\r\n }\r\n return of(true);\r\n }\r\n\r\n protected createRenderStream(type: string) {\r\n this.clearSubscription();\r\n\r\n this.subscription = this.shouldRender(type).subscribe(this.render);\r\n }\r\n\r\n protected clearSubscription() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\nexport enum PageParts {\r\n title = 'PageTitleContainerComponent',\r\n breadcrumb = 'PageBreadcrumbContainerComponent',\r\n toolbar = 'PageToolbarContainerComponent',\r\n}\r\n\r\n@Component({\r\n selector: 'abp-page-title-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageTitleContainerComponent {}\r\n\r\n@Component({\r\n selector: 'abp-page-breadcrumb-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageBreadcrumbContainerComponent {}\r\n\r\n@Component({\r\n selector: 'abp-page-toolbar-container',\r\n template: ` <ng-content></ng-content> `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PageToolbarContainerComponent {}\r\n","import { Component, ViewEncapsulation, input, effect, signal, contentChild } from '@angular/core';\r\nimport {\r\n PageTitleContainerComponent,\r\n PageBreadcrumbContainerComponent,\r\n PageToolbarContainerComponent,\r\n PageParts,\r\n} from './page-parts.component';\r\nimport { BreadcrumbComponent } from '@abp/ng.theme.shared';\r\nimport { PageToolbarComponent } from '@abp/ng.components/extensible';\r\nimport { PagePartDirective } from './page-part.directive';\r\n\r\n@Component({\r\n selector: 'abp-page',\r\n templateUrl: './page.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [BreadcrumbComponent, PageToolbarComponent, PagePartDirective],\r\n})\r\nexport class PageComponent {\r\n readonly title = input<string | undefined>(undefined);\r\n readonly toolbarInput = input<any>(undefined, { alias: 'toolbar' });\r\n readonly breadcrumb = input(true);\r\n\r\n protected readonly toolbarVisible = signal(false);\r\n protected readonly toolbarData = signal<any>(undefined);\r\n\r\n pageParts = {\r\n title: PageParts.title,\r\n breadcrumb: PageParts.breadcrumb,\r\n toolbar: PageParts.toolbar,\r\n };\r\n\r\n readonly customTitle = contentChild(PageTitleContainerComponent);\r\n readonly customBreadcrumb = contentChild(PageBreadcrumbContainerComponent);\r\n readonly customToolbar = contentChild(PageToolbarContainerComponent);\r\n\r\n constructor() {\r\n effect(() => {\r\n const toolbar = this.toolbarInput();\r\n if (toolbar !== undefined) {\r\n this.toolbarData.set(toolbar);\r\n this.toolbarVisible.set(true);\r\n }\r\n });\r\n }\r\n\r\n get shouldRenderRow() {\r\n return !!(\r\n this.title() ||\r\n this.toolbarVisible() ||\r\n this.breadcrumb() ||\r\n this.customTitle() ||\r\n this.customBreadcrumb() ||\r\n this.customToolbar() ||\r\n this.pageParts\r\n );\r\n }\r\n}\r\n","@if (shouldRenderRow) {\r\n <div class=\"row entry-row\">\r\n @if (customTitle()) {\r\n <ng-content select=\"abp-page-title-container\"></ng-content>\r\n } @else {\r\n @if (title()) {\r\n <div class=\"col-auto\" *abpPagePart=\"pageParts.title\">\r\n <h1 class=\"content-header-title\">\r\n {{ title() }}\r\n </h1>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customBreadcrumb()) {\r\n <ng-content select=\"abp-page-breadcrumb-container\"></ng-content>\r\n } @else {\r\n @if (breadcrumb()) {\r\n <div class=\"col-lg-auto ps-lg-0\" *abpPagePart=\"pageParts.breadcrumb\">\r\n <abp-breadcrumb></abp-breadcrumb>\r\n </div>\r\n }\r\n }\r\n\r\n @if (customToolbar()) {\r\n <ng-content select=\"abp-page-toolbar-container\"></ng-content>\r\n } @else {\r\n @if (toolbarVisible()) {\r\n <div class=\"col\" *abpPagePart=\"pageParts.toolbar; context: toolbarData()\">\r\n <abp-page-toolbar [record]=\"toolbarData()\"></abp-page-toolbar>\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-content></ng-content>\r\n","import { NgModule } from '@angular/core';\r\nimport { PagePartDirective } from './page-part.directive';\r\nimport {\r\n PageBreadcrumbContainerComponent,\r\n PageTitleContainerComponent,\r\n PageToolbarContainerComponent,\r\n} from './page-parts.component';\r\nimport { PageComponent } from './page.component';\r\n\r\nexport const PAGE_EXPORTS = [\r\n PageComponent,\r\n PageTitleContainerComponent,\r\n PageBreadcrumbContainerComponent,\r\n PageToolbarContainerComponent,\r\n PagePartDirective,\r\n];\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [...PAGE_EXPORTS],\r\n exports: [...PAGE_EXPORTS],\r\n})\r\nexport class PageModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}