@elderbyte/ngx-starter 16.4.0 → 16.4.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.
- package/esm2022/lib/common/data/required-filter-evaluator.mjs +2 -3
- package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +11 -8
- package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +9 -4
- package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +9 -4
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +28 -24
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +20 -12
- package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +9 -10
- package/fesm2022/elderbyte-ngx-starter.mjs +72 -51
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/forms/directives/elder-initial-value.directive.d.ts +2 -2
- package/lib/components/forms/search/domain/context/search-context.d.ts +2 -1
- package/lib/components/forms/search/domain/input/search-input-state.d.ts +9 -1
- package/lib/components/forms/search/elder-search-context.directive.d.ts +4 -5
- package/lib/components/forms/search/elder-search-input.directive.d.ts +2 -0
- package/lib/components/forms/search/search-box/elder-search-box.component.d.ts +6 -7
- package/package.json +1 -1
|
@@ -4603,8 +4603,7 @@ class RequiredFilterEvaluator {
|
|
|
4603
4603
|
}
|
|
4604
4604
|
allRequiredFiltersPresent(requiredFilters, currentFilters) {
|
|
4605
4605
|
if (requiredFilters) {
|
|
4606
|
-
|
|
4607
|
-
return validatedFilterGroups.find(validGroup => !!validGroup);
|
|
4606
|
+
return requiredFilters.some(filterGroup => this.hasAllFilters(filterGroup, currentFilters));
|
|
4608
4607
|
}
|
|
4609
4608
|
return true;
|
|
4610
4609
|
}
|
|
@@ -25935,8 +25934,9 @@ class SearchContext {
|
|
|
25935
25934
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25936
25935
|
this.userFilterContext = new FilterContext();
|
|
25937
25936
|
this.forcedFilterContext = new FilterContext();
|
|
25937
|
+
this.allFilters$ = new BehaviorSubject(undefined);
|
|
25938
25938
|
this.id = id;
|
|
25939
|
-
this.
|
|
25939
|
+
this.userFilterContext.filters.pipe(combineLatestWith(this.forcedFilterContext.filters), skip(1), map(([userFilters, forcedFilters]) => FilterUtil.mergeCombine(userFilters, forcedFilters)), tap(x => this.log.debug('allFilters changed: ', x))).subscribe(merged => this.allFilters$.next(merged));
|
|
25940
25940
|
}
|
|
25941
25941
|
/***************************************************************************
|
|
25942
25942
|
* *
|
|
@@ -25944,7 +25944,7 @@ class SearchContext {
|
|
|
25944
25944
|
* *
|
|
25945
25945
|
**************************************************************************/
|
|
25946
25946
|
get allFiltersChanged() {
|
|
25947
|
-
return this.
|
|
25947
|
+
return this.allFilters$.pipe(filter(filters => !!filters));
|
|
25948
25948
|
}
|
|
25949
25949
|
get userFilters() {
|
|
25950
25950
|
return this.userFilterContext;
|
|
@@ -25963,6 +25963,9 @@ class SearchContext {
|
|
|
25963
25963
|
replaceUserFilters(filters) {
|
|
25964
25964
|
this.userFilterContext.replaceFilters(filters);
|
|
25965
25965
|
}
|
|
25966
|
+
replaceForcedFilters(filters) {
|
|
25967
|
+
this.forcedFilterContext.replaceFilters(filters);
|
|
25968
|
+
}
|
|
25966
25969
|
}
|
|
25967
25970
|
|
|
25968
25971
|
class SearchContextService {
|
|
@@ -26041,11 +26044,10 @@ class ElderSearchContextDirective {
|
|
|
26041
26044
|
this.syncSearchContextToBoundFilterContext();
|
|
26042
26045
|
}
|
|
26043
26046
|
ngAfterContentInit() {
|
|
26047
|
+
const searchContext = this.searchContext;
|
|
26048
|
+
this.applySearchContextToInputs(searchContext);
|
|
26044
26049
|
this.syncSearchInputsToSearchContext();
|
|
26045
26050
|
}
|
|
26046
|
-
ngAfterViewInit() {
|
|
26047
|
-
this.applySearchContextToInputs();
|
|
26048
|
-
}
|
|
26049
26051
|
ngOnDestroy() {
|
|
26050
26052
|
this.destroy$.next();
|
|
26051
26053
|
this.destroy$.complete();
|
|
@@ -26093,7 +26095,7 @@ class ElderSearchContextDirective {
|
|
|
26093
26095
|
* to also keep the users intent (by merging) them.
|
|
26094
26096
|
*/
|
|
26095
26097
|
set forcedFilters(filters) {
|
|
26096
|
-
this.searchContext.
|
|
26098
|
+
this.searchContext.replaceForcedFilters(filters);
|
|
26097
26099
|
}
|
|
26098
26100
|
get forcedFilters() {
|
|
26099
26101
|
return this.searchContext.forcedFilters.filtersSnapshot;
|
|
@@ -26146,7 +26148,8 @@ class ElderSearchContextDirective {
|
|
|
26146
26148
|
const searchContext = this.searchContext;
|
|
26147
26149
|
if (searchContext.userFilters.isEmpty) {
|
|
26148
26150
|
if (!dcFilters.isEmpty) {
|
|
26149
|
-
|
|
26151
|
+
// Consider all filters in DC as defaults, expect for foced filters.
|
|
26152
|
+
searchContext.updateUserFilters(FilterUtil.strip(dcFilters.filtersSnapshot, this.forcedFilters));
|
|
26150
26153
|
}
|
|
26151
26154
|
}
|
|
26152
26155
|
else {
|
|
@@ -26174,30 +26177,33 @@ class ElderSearchContextDirective {
|
|
|
26174
26177
|
this.log.warn('Failed to apply filters since no FilterContext is available!', filters);
|
|
26175
26178
|
}
|
|
26176
26179
|
}
|
|
26177
|
-
applySearchContextToInputs() {
|
|
26178
|
-
|
|
26179
|
-
this.applyFiltersToInputs(ctx.userFilters.filtersSnapshot // this.filterContext.filtersSnapshot (old)
|
|
26180
|
-
);
|
|
26180
|
+
applySearchContextToInputs(searchContext) {
|
|
26181
|
+
this.applyFiltersToInputs(searchContext.userFilters.filtersSnapshot);
|
|
26181
26182
|
}
|
|
26182
26183
|
applyFiltersToInputs(filters) {
|
|
26183
|
-
|
|
26184
|
-
|
|
26185
|
-
|
|
26186
|
-
|
|
26187
|
-
|
|
26188
|
-
}
|
|
26189
|
-
|
|
26190
|
-
|
|
26191
|
-
|
|
26192
|
-
|
|
26193
|
-
|
|
26194
|
-
|
|
26195
|
-
}
|
|
26184
|
+
if (filters.length > 0) {
|
|
26185
|
+
const inputsByName = this.searchInputsByName();
|
|
26186
|
+
this.log.warn('applyFiltersToInputs [' + Array.from(inputsByName.keys()) + ']', {
|
|
26187
|
+
filters: filters,
|
|
26188
|
+
inputsByName: inputsByName
|
|
26189
|
+
});
|
|
26190
|
+
filters.forEach(f => {
|
|
26191
|
+
const input = inputsByName.get(f.key);
|
|
26192
|
+
if (input) {
|
|
26193
|
+
input.applyInitialValue(f.value);
|
|
26194
|
+
}
|
|
26195
|
+
});
|
|
26196
26196
|
}
|
|
26197
|
-
|
|
26197
|
+
}
|
|
26198
|
+
searchInputsByName() {
|
|
26199
|
+
const inputs = this._searchInputs$.getValue();
|
|
26200
|
+
const map = new Map();
|
|
26201
|
+
inputs.forEach(input => map.set(input.name, input));
|
|
26202
|
+
return map;
|
|
26198
26203
|
}
|
|
26199
26204
|
convertToFilters(states) {
|
|
26200
26205
|
return states
|
|
26206
|
+
.filter(s => s.userEvent)
|
|
26201
26207
|
.filter(s => !!s.queryKey)
|
|
26202
26208
|
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
26203
26209
|
}
|
|
@@ -26224,7 +26230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
26224
26230
|
*/
|
|
26225
26231
|
class SearchInputState {
|
|
26226
26232
|
static unknown() {
|
|
26227
|
-
return new SearchInputState(null, null, null, true);
|
|
26233
|
+
return new SearchInputState(null, null, null, true, false);
|
|
26228
26234
|
}
|
|
26229
26235
|
/***************************************************************************
|
|
26230
26236
|
* *
|
|
@@ -26247,11 +26253,16 @@ class SearchInputState {
|
|
|
26247
26253
|
/**
|
|
26248
26254
|
* pristine Has the user touched this?
|
|
26249
26255
|
*/
|
|
26250
|
-
pristine
|
|
26256
|
+
pristine,
|
|
26257
|
+
/**
|
|
26258
|
+
* Was the input changed by a user interaction
|
|
26259
|
+
*/
|
|
26260
|
+
userEvent) {
|
|
26251
26261
|
this.attribute = attribute;
|
|
26252
26262
|
this.queryValue = queryValue;
|
|
26253
26263
|
this.queryKey = queryKey;
|
|
26254
26264
|
this.pristine = pristine;
|
|
26265
|
+
this.userEvent = userEvent;
|
|
26255
26266
|
}
|
|
26256
26267
|
/***************************************************************************
|
|
26257
26268
|
* *
|
|
@@ -26295,7 +26306,7 @@ class SearchInputState {
|
|
|
26295
26306
|
pristineNow = pristine;
|
|
26296
26307
|
}
|
|
26297
26308
|
}
|
|
26298
|
-
return new SearchInputState(this.attribute, value, this.queryKey, pristineNow);
|
|
26309
|
+
return new SearchInputState(this.attribute, value, this.queryKey, pristineNow, true);
|
|
26299
26310
|
}
|
|
26300
26311
|
}
|
|
26301
26312
|
|
|
@@ -26321,7 +26332,7 @@ class ElderInitialValueDirective {
|
|
|
26321
26332
|
this.initialValue$ = new BehaviorSubject(null);
|
|
26322
26333
|
this.destroy$ = new Subject();
|
|
26323
26334
|
this.initialDone$ = new Subject();
|
|
26324
|
-
const ngModelValue$ = of(
|
|
26335
|
+
const ngModelValue$ = of('dummy')
|
|
26325
26336
|
.pipe(delay(10), map(() => this.ngModel.model));
|
|
26326
26337
|
ngModelValue$
|
|
26327
26338
|
.pipe(combineLatestWith$1(this.initialValue$), takeUntil(this.initialDone$), takeUntil(this.destroy$)).subscribe(([ngModelValue, initialValue]) => {
|
|
@@ -26369,6 +26380,9 @@ class ElderInitialValueDirective {
|
|
|
26369
26380
|
.pipe(takeUntil(this.destroy$));
|
|
26370
26381
|
}
|
|
26371
26382
|
applyInitialValue(value) {
|
|
26383
|
+
if (value) {
|
|
26384
|
+
this.ngModel.control.setValue(value);
|
|
26385
|
+
}
|
|
26372
26386
|
this.initialValue$.next(value);
|
|
26373
26387
|
}
|
|
26374
26388
|
ngOnDestroy() {
|
|
@@ -26381,8 +26395,8 @@ class ElderInitialValueDirective {
|
|
|
26381
26395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderInitialValueDirective, decorators: [{
|
|
26382
26396
|
type: Directive,
|
|
26383
26397
|
args: [{
|
|
26384
|
-
selector:
|
|
26385
|
-
exportAs:
|
|
26398
|
+
selector: '[elderInitialValue]',
|
|
26399
|
+
exportAs: 'elderInitialValue'
|
|
26386
26400
|
}]
|
|
26387
26401
|
}], ctorParameters: function () { return [{ type: i3.NgModel, decorators: [{
|
|
26388
26402
|
type: Host
|
|
@@ -26400,11 +26414,10 @@ class ElderSearchInputDirective {
|
|
|
26400
26414
|
constructor(searchContext, ngModel) {
|
|
26401
26415
|
this.searchContext = searchContext;
|
|
26402
26416
|
this.ngModel = ngModel;
|
|
26403
|
-
//TODO: In Angular 16, use standalone directives and host component to inject directive to component
|
|
26404
|
-
this.initialValueDirective = new ElderInitialValueDirective(this.ngModel);
|
|
26405
26417
|
this._state = new BehaviorSubject(SearchInputState.unknown());
|
|
26406
26418
|
this.destroy$ = new Subject();
|
|
26407
26419
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
26420
|
+
this.initialValueDirective = new ElderInitialValueDirective(ngModel);
|
|
26408
26421
|
}
|
|
26409
26422
|
/***************************************************************************
|
|
26410
26423
|
* *
|
|
@@ -26418,8 +26431,9 @@ class ElderSearchInputDirective {
|
|
|
26418
26431
|
ngAfterViewInit() {
|
|
26419
26432
|
this._extractedName = this.extractName();
|
|
26420
26433
|
this.log.debug(this._extractedName + "|" + this.queryKey + "|" + this.resolvePath);
|
|
26421
|
-
|
|
26422
|
-
|
|
26434
|
+
this.stateObservable()
|
|
26435
|
+
.subscribe(state => {
|
|
26436
|
+
// this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state)
|
|
26423
26437
|
this.emitState(state);
|
|
26424
26438
|
});
|
|
26425
26439
|
}
|
|
@@ -26474,12 +26488,20 @@ class ElderSearchInputDirective {
|
|
|
26474
26488
|
* Private methods *
|
|
26475
26489
|
* *
|
|
26476
26490
|
**************************************************************************/
|
|
26491
|
+
get valueChanges$() {
|
|
26492
|
+
return this.ngModel.control.valueChanges
|
|
26493
|
+
.pipe(takeUntil(this.destroy$));
|
|
26494
|
+
}
|
|
26477
26495
|
stateObservable() {
|
|
26478
|
-
|
|
26479
|
-
|
|
26480
|
-
|
|
26481
|
-
|
|
26482
|
-
|
|
26496
|
+
const viewStabilized$ = of('stabilized$').pipe(delay(20), first());
|
|
26497
|
+
const inputStateChanges$ = this.valueChanges$.pipe(takeUntil(this.destroy$), map(value => this.buildInputState(value, true)), skipUntil(viewStabilized$), debounceTime(20));
|
|
26498
|
+
const startWithAsync$ = of('start').pipe(map(start => this.buildInputState(this.ngModel.control.value, false)));
|
|
26499
|
+
return concat(startWithAsync$, inputStateChanges$);
|
|
26500
|
+
}
|
|
26501
|
+
buildInputState(controlValue, userEvent) {
|
|
26502
|
+
const queryValue = this.convertRawModelValueToQueryString(controlValue);
|
|
26503
|
+
const pristine = !this.isAttributeValuePresent(controlValue);
|
|
26504
|
+
return new SearchInputState(this.name, queryValue, this.queryKey || this.name, pristine, userEvent);
|
|
26483
26505
|
}
|
|
26484
26506
|
convertQueryStringToRawModelValue(queryString) {
|
|
26485
26507
|
if (Objects.nonNull(queryString)) {
|
|
@@ -26939,8 +26961,8 @@ class ElderSearchBoxComponent {
|
|
|
26939
26961
|
* Constructor *
|
|
26940
26962
|
* *
|
|
26941
26963
|
**************************************************************************/
|
|
26942
|
-
constructor(
|
|
26943
|
-
this.
|
|
26964
|
+
constructor(searchContextDirective) {
|
|
26965
|
+
this.searchContextDirective = searchContextDirective;
|
|
26944
26966
|
/***************************************************************************
|
|
26945
26967
|
* *
|
|
26946
26968
|
* Fields *
|
|
@@ -26962,16 +26984,15 @@ class ElderSearchBoxComponent {
|
|
|
26962
26984
|
this.queryKey = 'query';
|
|
26963
26985
|
this._dense = false;
|
|
26964
26986
|
this.autocomplete = 'off';
|
|
26987
|
+
this.userFilters$ = searchContextDirective.userDefinedAttributes$.pipe(
|
|
26988
|
+
//switchMap(ctx => ctx.userFilters.filters)
|
|
26989
|
+
);
|
|
26965
26990
|
}
|
|
26966
26991
|
/***************************************************************************
|
|
26967
26992
|
* *
|
|
26968
26993
|
* Life Cycle *
|
|
26969
26994
|
* *
|
|
26970
26995
|
**************************************************************************/
|
|
26971
|
-
ngOnInit() {
|
|
26972
|
-
}
|
|
26973
|
-
ngAfterViewInit() {
|
|
26974
|
-
}
|
|
26975
26996
|
ngAfterContentInit() {
|
|
26976
26997
|
this.overlayState$.next(new OverlayState(!!this.advancedSearch));
|
|
26977
26998
|
}
|
|
@@ -26998,14 +27019,14 @@ class ElderSearchBoxComponent {
|
|
|
26998
27019
|
* Occurs when the user clicks the clear search button
|
|
26999
27020
|
*/
|
|
27000
27021
|
clearSearch(event) {
|
|
27001
|
-
this.
|
|
27022
|
+
this.searchContextDirective.reset();
|
|
27002
27023
|
}
|
|
27003
27024
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchBoxComponent, deps: [{ token: ElderSearchContextDirective }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27004
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ElderSearchBoxComponent, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "advancedSearch", first: true, predicate: ElderSearchPanelComponent, descendants: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"
|
|
27025
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ElderSearchBoxComponent, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "advancedSearch", first: true, predicate: ElderSearchPanelComponent, descendants: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"userFilters$ | async as userDefinedFilters\">\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"userDefinedFilters.length > 0\"\n (click)=\"clearSearch($event)\"\n name=\"clear\" aria-label=\"Clear\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"overlayState.hasOverlay\" name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\">\n <mat-icon\n [matBadge]=\"userDefinedFilters.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"userDefinedFilters.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"userDefinedFilters.length > 0 ? 'accent' : undefined\"\n >\n filter_list\n </mat-icon>\n </button>\n </div>\n </mat-form-field>\n</div>\n\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n\n <!-- Project the users search inputs here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-raised-button type=\"button\" name=\"clear\"\n (click)=\"clearSearch($event)\">{{'context.reset' | translate}}\n </button>\n\n <button mat-raised-button type=\"button\" name=\"ok\" color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\">Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-box-field{margin-top:4px;margin-bottom:4px}.elder-search-panel-container{min-width:250px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { kind: "directive", type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense", "subscriptSizing", "floatLabel"] }, { kind: "directive", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: ["elderSearchInputKey", "elderSearchInputTransform", "elderSearchInput", "dataSource", "elderSearchInputFallback", "valueAsId"], exportAs: ["elderSearchInput"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27005
27026
|
}
|
|
27006
27027
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchBoxComponent, decorators: [{
|
|
27007
27028
|
type: Component,
|
|
27008
|
-
args: [{ selector: 'elder-search-box', exportAs: 'elderSearchBox', host: { 'class': 'elder-form-field-host' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"
|
|
27029
|
+
args: [{ selector: 'elder-search-box', exportAs: 'elderSearchBox', host: { 'class': 'elder-form-field-host' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"userFilters$ | async as userDefinedFilters\">\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"userDefinedFilters.length > 0\"\n (click)=\"clearSearch($event)\"\n name=\"clear\" aria-label=\"Clear\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"overlayState.hasOverlay\" name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\">\n <mat-icon\n [matBadge]=\"userDefinedFilters.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"userDefinedFilters.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"userDefinedFilters.length > 0 ? 'accent' : undefined\"\n >\n filter_list\n </mat-icon>\n </button>\n </div>\n </mat-form-field>\n</div>\n\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n\n <!-- Project the users search inputs here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-raised-button type=\"button\" name=\"clear\"\n (click)=\"clearSearch($event)\">{{'context.reset' | translate}}\n </button>\n\n <button mat-raised-button type=\"button\" name=\"ok\" color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\">Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-box-field{margin-top:4px;margin-bottom:4px}.elder-search-panel-container{min-width:250px}\n"] }]
|
|
27009
27030
|
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }]; }, propDecorators: { search: [{
|
|
27010
27031
|
type: ViewChild,
|
|
27011
27032
|
args: ['search']
|