@one-paragon/angular-utilities 1.2.9 → 1.2.11
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 +24 -24
- package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +3 -3
- package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +1 -1
- package/esm2022/action-state/index.mjs +1 -1
- package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +1 -1
- package/esm2022/action-state/ngrx.mjs +1 -1
- package/esm2022/http-request-state/HttpRequestStateStore.mjs +19 -3
- package/esm2022/http-request-state/directives/index.mjs +1 -1
- package/esm2022/http-request-state/index.mjs +1 -1
- package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +1 -1
- package/esm2022/http-request-state/rxjs/getRequestorState.mjs +1 -1
- package/esm2022/http-request-state/rxjs/index.mjs +1 -1
- package/esm2022/http-request-state/types.mjs +1 -1
- package/esm2022/ngrx/actionable-selector.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/rxjs/defaultShareReplay.mjs +1 -1
- package/esm2022/rxjs/index.mjs +1 -1
- package/esm2022/rxjs/mapError.mjs +1 -1
- package/esm2022/rxjs/rxjs-operators.mjs +1 -1
- package/esm2022/rxjs/subjectifier.mjs +1 -1
- package/esm2022/rxjs/subscriber.directive.mjs +1 -1
- package/esm2022/table-builder/classes/DefaultSettings.mjs +1 -1
- package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +1 -1
- package/esm2022/table-builder/classes/TableBuilderConfig.mjs +1 -1
- package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +18 -12
- package/esm2022/table-builder/classes/TableState.mjs +5 -3
- package/esm2022/table-builder/classes/data-store.mjs +15 -0
- package/esm2022/table-builder/classes/display-col.mjs +1 -1
- package/esm2022/table-builder/classes/filter-info.mjs +1 -1
- package/esm2022/table-builder/classes/table-builder-general-settings.mjs +14 -1
- package/esm2022/table-builder/classes/table-builder.mjs +3 -3
- package/esm2022/table-builder/classes/table-store.mjs +71 -46
- package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +4 -4
- package/esm2022/table-builder/components/column-builder/column-helpers.mjs +1 -1
- package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/filter/filter.component.mjs +3 -3
- package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +19 -19
- package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +3 -3
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +100 -55
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +30 -28
- package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +3 -3
- package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/index.mjs +1 -1
- package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +3 -3
- package/esm2022/table-builder/components/link-column.component.mjs +31 -31
- package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +3 -3
- package/esm2022/table-builder/components/scroll-strategy.mjs +1 -1
- package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +4 -2
- package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +3 -3
- package/esm2022/table-builder/components/table-container/table-container-imports.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.mjs +90 -65
- package/esm2022/table-builder/components/table-container/tableProps.mjs +2 -1
- package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +17 -15
- package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +5 -6
- package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +9 -11
- package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +1 -1
- package/esm2022/table-builder/directives/custom-cell-directive.mjs +12 -13
- package/esm2022/table-builder/directives/index.mjs +1 -1
- package/esm2022/table-builder/directives/multi-sort.directive.mjs +1 -1
- package/esm2022/table-builder/directives/resize-column.directive.mjs +1 -1
- package/esm2022/table-builder/directives/table-wrapper.directive.mjs +4 -4
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +1 -1
- package/esm2022/table-builder/enums/filterTypes.mjs +1 -1
- package/esm2022/table-builder/functions/boolean-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/date-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/download-data.mjs +1 -1
- package/esm2022/table-builder/functions/null-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/number-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/sort-data-function.mjs +1 -1
- package/esm2022/table-builder/functions/string-filter-function.mjs +1 -1
- package/esm2022/table-builder/interfaces/ColumnInfo.mjs +1 -1
- package/esm2022/table-builder/interfaces/report-def.mjs +1 -1
- package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +1 -1
- package/esm2022/table-builder/pipes/column-total.pipe.mjs +1 -1
- package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +1 -1
- package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +1 -1
- package/esm2022/table-builder/services/export-to-csv.service.mjs +3 -3
- package/esm2022/table-builder/services/link-creator.service.mjs +1 -1
- package/esm2022/table-builder/services/table-template-service.mjs +1 -1
- package/esm2022/table-builder/services/transform-creator.mjs +1 -1
- package/esm2022/table-builder/table-builder.module.mjs +1 -1
- package/esm2022/utilities/array-helpers.mjs +1 -1
- package/esm2022/utilities/directives/auto-focus.directive.mjs +1 -1
- package/esm2022/utilities/directives/clickEmitterDirective.mjs +1 -1
- package/esm2022/utilities/directives/clickSubject.mjs +1 -1
- package/esm2022/utilities/directives/conditional-classes.directive.mjs +1 -1
- package/esm2022/utilities/directives/dialog-service.mjs +1 -1
- package/esm2022/utilities/directives/dialog.mjs +1 -1
- package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +1 -1
- package/esm2022/utilities/directives/prevent-enter.directive.mjs +1 -1
- package/esm2022/utilities/directives/stop-propagation.directive.mjs +1 -1
- package/esm2022/utilities/directives/trim-whitespace.directive.mjs +1 -1
- package/esm2022/utilities/index.mjs +1 -1
- package/esm2022/utilities/module.mjs +1 -1
- package/esm2022/utilities/pipes/function.pipe.mjs +1 -1
- package/esm2022/utilities/pipes/phone.pipe.mjs +1 -1
- package/esm2022/utilities/pipes/space-case.pipes.mjs +1 -1
- package/fesm2022/one-paragon-angular-utilities.mjs +616 -476
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
- package/http-request-state/HttpRequestStateStore.d.ts +5 -0
- package/http-request-state/types.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -2
- package/table-builder/classes/TableBuilderDataSource.d.ts +2 -3
- package/table-builder/classes/TableState.d.ts +14 -4
- package/table-builder/classes/data-store.d.ts +8 -0
- package/table-builder/classes/table-builder-general-settings.d.ts +6 -0
- package/table-builder/classes/table-store.d.ts +16 -28
- package/table-builder/components/generic-table/generic-table.component.d.ts +20 -10
- package/table-builder/components/generic-table/paginator.component.d.ts +1 -0
- package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +1 -0
- package/table-builder/components/table-container/table-container-imports.d.ts +1 -1
- package/table-builder/components/table-container/table-container.d.ts +15 -8
- package/table-builder/components/table-container/tableProps.d.ts +1 -0
- package/table-builder/components/table-container/virtual-scroll-container.d.ts +1 -0
- package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +2 -3
- package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +1 -3
- package/table-builder/directives/custom-cell-directive.d.ts +6 -4
- package/table-builder/directives/table-wrapper.directive.d.ts +1 -1
- package/table-builder/interfaces/ColumnInfo.d.ts +1 -1
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, Input, inject, Injector, TemplateRef, ViewContainerRef, NgModule,
|
|
3
|
-
import { shareReplay, switchAll, map, filter, tap, catchError, startWith, switchMap, mergeMap, concatMap, takeUntil,
|
|
2
|
+
import { Directive, Input, inject, Injector, TemplateRef, ViewContainerRef, NgModule, assertInInjectionContext, DestroyRef, isSignal, computed, Injectable, Pipe, Renderer2, ElementRef, booleanAttribute, signal, InjectionToken, makeEnvironmentProviders, HostListener, Component, ChangeDetectionStrategy, EventEmitter, untracked, Output, ContentChildren, ChangeDetectorRef, input, output, ViewChild, EnvironmentInjector, createComponent, viewChild, effect, forwardRef, contentChildren, ContentChild, APP_INITIALIZER } from '@angular/core';
|
|
3
|
+
import { shareReplay, switchAll, map, filter, tap, catchError, startWith, switchMap, mergeMap, concatMap as concatMap$1, takeUntil, distinctUntilChanged, first as first$1, distinctUntilKeyChanged, delay as delay$1, observeOn, scan as scan$1, timestamp as timestamp$1, withLatestFrom, mergeAll } from 'rxjs/operators';
|
|
4
4
|
import * as i1 from 'rxjs';
|
|
5
|
-
import { Subject, isObservable, of, ReplaySubject, filter as filter$1, first, map as map$1, Observable, combineLatest, Subscription, startWith as startWith$1, pairwise, concatMap
|
|
5
|
+
import { Subject, isObservable, of, ReplaySubject, filter as filter$1, first, map as map$1, Observable, combineLatest, Subscription, startWith as startWith$1, pairwise, concatMap, merge, delay, fromEvent, tap as tap$1, BehaviorSubject, takeUntil as takeUntil$1, switchMap as switchMap$1, scan, asyncScheduler, animationFrameScheduler, distinctUntilChanged as distinctUntilChanged$1, timestamp, skip } from 'rxjs';
|
|
6
6
|
import { ComponentStore } from '@ngrx/component-store';
|
|
7
|
+
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
7
8
|
import * as i1$8 from '@angular/common';
|
|
8
9
|
import { DatePipe, CurrencyPipe, AsyncPipe, KeyValuePipe, NgTemplateOutlet, NgClass, DecimalPipe, CommonModule } from '@angular/common';
|
|
9
10
|
import * as i3$2 from '@angular/material/sort';
|
|
10
11
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
11
12
|
import { v4 } from 'uuid';
|
|
12
|
-
import { merge, get, sumBy, difference, orderBy, intersection, groupBy, set, cloneDeep } from 'lodash';
|
|
13
|
+
import { merge as merge$1, get, sumBy, difference, orderBy, intersection, groupBy, set, cloneDeep } from 'lodash';
|
|
13
14
|
import { CdkColumnDef } from '@angular/cdk/table';
|
|
14
15
|
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
|
15
16
|
import * as i10 from '@angular/material/radio';
|
|
@@ -23,7 +24,6 @@ import * as i9 from '@angular/material/core';
|
|
|
23
24
|
import { MatOption, MatNativeDateModule } from '@angular/material/core';
|
|
24
25
|
import * as i5 from '@angular/cdk/drag-drop';
|
|
25
26
|
import { moveItemInArray, DragDropModule, CDK_DROP_LIST, CdkDropList, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
26
|
-
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
27
27
|
import * as i1$4 from '@angular/router';
|
|
28
28
|
import { RouterModule } from '@angular/router';
|
|
29
29
|
import * as i1$1 from '@angular/material/input';
|
|
@@ -49,7 +49,7 @@ import { LetDirective } from '@ngrx/component';
|
|
|
49
49
|
import * as i4$3 from '@angular/material/chips';
|
|
50
50
|
import { MatChipsModule } from '@angular/material/chips';
|
|
51
51
|
import * as i1$5 from '@angular/material/table';
|
|
52
|
-
import { MatTable, MatColumnDef, MatTableModule, MatTableDataSource, MatRowDef } from '@angular/material/table';
|
|
52
|
+
import { MatTable, MatColumnDef, MatTableModule, MatHeaderRowDef, MatFooterRowDef, MatTableDataSource, MatRowDef } from '@angular/material/table';
|
|
53
53
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
54
54
|
import * as i1$6 from '@angular/material/paginator';
|
|
55
55
|
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
@@ -362,14 +362,168 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
362
362
|
}]
|
|
363
363
|
}] });
|
|
364
364
|
|
|
365
|
+
const onceWhen = (predicate) => (src) => {
|
|
366
|
+
return src.pipe(filter$1(predicate), first());
|
|
367
|
+
};
|
|
368
|
+
const mapArray = (mapFunc) => (source) => source.pipe(map$1(src => src.map(mapFunc)));
|
|
369
|
+
const filterArray = (filterFunc) => (source) => source.pipe(map$1(src => src.filter(filterFunc)));
|
|
370
|
+
const onWait = startWithIfEmpty;
|
|
371
|
+
function startWithIfEmpty(val, wait = 0) {
|
|
372
|
+
return (source) => {
|
|
373
|
+
return new Observable(subscriber => {
|
|
374
|
+
let emitted = false;
|
|
375
|
+
setTimeout(() => {
|
|
376
|
+
if (!emitted) {
|
|
377
|
+
subscriber.next(val);
|
|
378
|
+
}
|
|
379
|
+
}, wait);
|
|
380
|
+
const sub = source.subscribe({
|
|
381
|
+
next(x) { emitted = true; subscriber.next(x); },
|
|
382
|
+
error(err) { emitted = true; subscriber.error(err); },
|
|
383
|
+
complete() { emitted = true; subscriber.complete(); }
|
|
384
|
+
});
|
|
385
|
+
return () => sub.unsubscribe();
|
|
386
|
+
});
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
const combineArrays = (sources) => {
|
|
390
|
+
return combineLatest(sources.map(src => src.pipe(startWithIfEmpty([])))).pipe(map$1(res => res.flat()));
|
|
391
|
+
};
|
|
392
|
+
function switchOff(switchSource, defaultState = true) {
|
|
393
|
+
return (source) => {
|
|
394
|
+
return new Observable(subsciber => {
|
|
395
|
+
let isOn = defaultState;
|
|
396
|
+
const subscription = new Subscription();
|
|
397
|
+
subscription.add(switchSource.subscribe(on => isOn = on));
|
|
398
|
+
subscription.add(source.subscribe({
|
|
399
|
+
next(value) {
|
|
400
|
+
if (isOn) {
|
|
401
|
+
subsciber.next(value);
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
error: error => subsciber.error(error),
|
|
405
|
+
complete: () => subsciber.complete()
|
|
406
|
+
}));
|
|
407
|
+
return subscription;
|
|
408
|
+
});
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function skipOneWhen(skipper) {
|
|
412
|
+
return (source) => {
|
|
413
|
+
return new Observable(subsriber => {
|
|
414
|
+
const subscription = new Subscription();
|
|
415
|
+
let skipNext = false;
|
|
416
|
+
subscription.add(skipper.subscribe(_ => skipNext = true));
|
|
417
|
+
subscription.add(source.subscribe({
|
|
418
|
+
next(value) {
|
|
419
|
+
if (skipNext) {
|
|
420
|
+
skipNext = false;
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
subsriber.next(value);
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
error: error => subsriber.error(error),
|
|
427
|
+
complete: () => subsriber.complete()
|
|
428
|
+
}));
|
|
429
|
+
return subscription;
|
|
430
|
+
});
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function previousAndCurrent(startingValue) {
|
|
434
|
+
return (source) => {
|
|
435
|
+
return source.pipe(startWith$1(startingValue), pairwise());
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function notNull() {
|
|
439
|
+
return (source) => {
|
|
440
|
+
return source.pipe(filter$1((o) => o != null));
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
function delayOn(predicate, delayTime) {
|
|
444
|
+
return (src) => {
|
|
445
|
+
return src.pipe(concatMap(r => {
|
|
446
|
+
if (predicate(r)) {
|
|
447
|
+
return merge(of({ r }), of(null).pipe(delay(delayTime))).pipe(notNull(), map$1(d => d.r));
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
return of(r);
|
|
451
|
+
}
|
|
452
|
+
}));
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
class Subjectifier extends Observable {
|
|
457
|
+
_subj = new Subject();
|
|
458
|
+
merged;
|
|
459
|
+
constructor(_source) {
|
|
460
|
+
super((obs) => {
|
|
461
|
+
const s = merge(_source, this._subj).subscribe(obs);
|
|
462
|
+
return s;
|
|
463
|
+
});
|
|
464
|
+
this.merged = merge(_source, this._subj);
|
|
465
|
+
}
|
|
466
|
+
next = this._subj.next.bind(this._subj);
|
|
467
|
+
newSubj = (...operations) => new Subjectifier(this.merged.pipe(...operations));
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
class Subscriber {
|
|
471
|
+
subscriptions = [];
|
|
472
|
+
handle = (subscription) => {
|
|
473
|
+
this.subscriptions.push(subscription);
|
|
474
|
+
};
|
|
475
|
+
on = (obs, action) => {
|
|
476
|
+
this.handle(obs.subscribe(action));
|
|
477
|
+
};
|
|
478
|
+
ngOnDestroy() {
|
|
479
|
+
this.subscriptions.forEach(subscription => {
|
|
480
|
+
subscription.unsubscribe();
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Subscriber, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
484
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: Subscriber, ngImport: i0 });
|
|
485
|
+
}
|
|
486
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Subscriber, decorators: [{
|
|
487
|
+
type: Directive
|
|
488
|
+
}] });
|
|
489
|
+
function subscriber(obsOrSubOrInjector, actionOrInjector, injector) {
|
|
490
|
+
const destroyRef = getDestroyRef$1(obsOrSubOrInjector, actionOrInjector, injector);
|
|
491
|
+
const subscriber = new Subscriber();
|
|
492
|
+
if (obsOrSubOrInjector instanceof Subscription) {
|
|
493
|
+
subscriber.handle(obsOrSubOrInjector);
|
|
494
|
+
}
|
|
495
|
+
else if (obsOrSubOrInjector instanceof Observable) {
|
|
496
|
+
subscriber.handle(obsOrSubOrInjector.subscribe(actionOrInjector));
|
|
497
|
+
}
|
|
498
|
+
destroyRef.onDestroy(() => subscriber?.ngOnDestroy());
|
|
499
|
+
return subscriber;
|
|
500
|
+
}
|
|
501
|
+
function getDestroyRef$1(obsOrSubOrInjector, actionOrInjector, injector) {
|
|
502
|
+
const providedInjector = obsOrSubOrInjector instanceof Injector ? obsOrSubOrInjector
|
|
503
|
+
: actionOrInjector instanceof Injector ? actionOrInjector
|
|
504
|
+
: injector;
|
|
505
|
+
if (!providedInjector) {
|
|
506
|
+
try {
|
|
507
|
+
assertInInjectionContext(subscriber);
|
|
508
|
+
}
|
|
509
|
+
catch (error) {
|
|
510
|
+
throw new Error('createRequestor() must be used in an Injection Context or you must provide an injector to createRequestor()');
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const destroyRef = providedInjector?.get(DestroyRef) || inject(DestroyRef);
|
|
514
|
+
return destroyRef;
|
|
515
|
+
}
|
|
516
|
+
|
|
365
517
|
class HttpRequestStateStore extends ComponentStore {
|
|
366
518
|
options;
|
|
367
519
|
project;
|
|
368
520
|
req;
|
|
521
|
+
injector;
|
|
369
522
|
constructor(req, options, project) {
|
|
370
523
|
super({ requestParams: null, response: notStarted });
|
|
371
524
|
this.project = project;
|
|
372
525
|
this.options = options;
|
|
526
|
+
this.injector = options?.injector;
|
|
373
527
|
this.req = req;
|
|
374
528
|
this.request = (this.options?.strategy === HttpRequestStrategy.singleUse) ? this.singleUseRequest : this.flattenedRequest;
|
|
375
529
|
if (options?.autoRequestWith) {
|
|
@@ -383,7 +537,7 @@ class HttpRequestStateStore extends ComponentStore {
|
|
|
383
537
|
if (this.options?.strategy === HttpRequestStrategy.concurrent)
|
|
384
538
|
return mergeMap((params) => this.createRequest(...params));
|
|
385
539
|
if (this.options?.strategy === HttpRequestStrategy.sequential)
|
|
386
|
-
return concatMap((params) => this.createRequest(...params));
|
|
540
|
+
return concatMap$1((params) => this.createRequest(...params));
|
|
387
541
|
return switchMap((params) => (params[0] instanceof CancellationToken) ?
|
|
388
542
|
of({ requestParams: params[0], response: { status: HttpRequestStatus.cancelled } }) : this.createRequest(...params));
|
|
389
543
|
};
|
|
@@ -449,6 +603,13 @@ class HttpRequestStateStore extends ComponentStore {
|
|
|
449
603
|
ngOnDestroy() {
|
|
450
604
|
super.ngOnDestroy();
|
|
451
605
|
}
|
|
606
|
+
requestWith = (params) => {
|
|
607
|
+
if (isSignal(params)) {
|
|
608
|
+
params = toObservable(params, { injector: this.injector }).pipe(notNull());
|
|
609
|
+
}
|
|
610
|
+
params.pipe(takeUntil(this.destroy$)).subscribe((p) => this.request(...p));
|
|
611
|
+
return this;
|
|
612
|
+
};
|
|
452
613
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: HttpRequestStateStore, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
453
614
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: HttpRequestStateStore, usesInheritance: true, ngImport: i0 });
|
|
454
615
|
}
|
|
@@ -457,6 +618,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
457
618
|
}], ctorParameters: () => [{ type: undefined }, { type: undefined }, { type: undefined }] });
|
|
458
619
|
class CancellationToken {
|
|
459
620
|
}
|
|
621
|
+
function wrapInArr(sigOrObs) {
|
|
622
|
+
return isSignal(sigOrObs) ?
|
|
623
|
+
computed(() => [sigOrObs()])
|
|
624
|
+
: sigOrObs.pipe(map(a => [a]));
|
|
625
|
+
}
|
|
460
626
|
|
|
461
627
|
class HttpRequestStateFactory {
|
|
462
628
|
constructor() { }
|
|
@@ -482,7 +648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
482
648
|
}], ctorParameters: () => [] });
|
|
483
649
|
function createRequestor(req, optionsOrProject, options) {
|
|
484
650
|
const ops = isFunction(optionsOrProject) ? options : optionsOrProject;
|
|
485
|
-
const destroyRef = getDestroyRef
|
|
651
|
+
const destroyRef = getDestroyRef(ops);
|
|
486
652
|
const requestStore = typeof (optionsOrProject) === 'function' ?
|
|
487
653
|
new HttpRequestStateStore(req, options, optionsOrProject)
|
|
488
654
|
: new HttpRequestStateStore(req, optionsOrProject);
|
|
@@ -492,7 +658,7 @@ function createRequestor(req, optionsOrProject, options) {
|
|
|
492
658
|
function isFunction(value) {
|
|
493
659
|
return typeof value === 'function';
|
|
494
660
|
}
|
|
495
|
-
function getDestroyRef
|
|
661
|
+
function getDestroyRef(options) {
|
|
496
662
|
const providedInjector = options?.injector;
|
|
497
663
|
if (!providedInjector) {
|
|
498
664
|
try {
|
|
@@ -585,12 +751,18 @@ function metaDataArrToDict(arr, transform) {
|
|
|
585
751
|
class GeneralTableSettings {
|
|
586
752
|
constructor(settings) {
|
|
587
753
|
if (settings) {
|
|
588
|
-
merge(this.headerSettings, settings.headerSettings);
|
|
589
|
-
merge(this.footerSettings, settings.footerSettings);
|
|
590
|
-
merge(this.columnHeaderSettings, settings.columnHeaderSettings);
|
|
591
|
-
merge(this.tableSettings, settings.tableSettings);
|
|
754
|
+
merge$1(this.headerSettings, settings.headerSettings);
|
|
755
|
+
merge$1(this.footerSettings, settings.footerSettings);
|
|
756
|
+
merge$1(this.columnHeaderSettings, settings.columnHeaderSettings);
|
|
757
|
+
merge$1(this.tableSettings, settings.tableSettings);
|
|
592
758
|
if (settings.tableSettings?.useVirtualScroll) {
|
|
593
759
|
const currVirt = settings.tableSettings.useVirtualScroll === true ? new VirtualScrollOptions() : settings.tableSettings.useVirtualScroll;
|
|
760
|
+
if (!currVirt.headerHeight || settings.tableSettings.useVirtualScroll === true) {
|
|
761
|
+
currVirt.headerHeight = (typeof settings.headerSettings?.headerHeight === 'number' ? settings.headerSettings?.headerHeight : DefaultVirtualScrollOptions.headerHeight);
|
|
762
|
+
}
|
|
763
|
+
if (!currVirt.rowHeight || settings.tableSettings.useVirtualScroll === true) {
|
|
764
|
+
currVirt.rowHeight = (typeof settings.tableSettings?.rowHeight === 'number' ? settings.tableSettings?.rowHeight : DefaultVirtualScrollOptions.rowHeight);
|
|
765
|
+
}
|
|
594
766
|
this.tableSettings.useVirtualScroll = { ...new VirtualScrollOptions(), ...currVirt };
|
|
595
767
|
}
|
|
596
768
|
}
|
|
@@ -624,6 +796,7 @@ class TableSettings {
|
|
|
624
796
|
useVirtualScroll = null;
|
|
625
797
|
includeAllInPaginatorOptions = false;
|
|
626
798
|
rowHeight = undefined;
|
|
799
|
+
groupHeaderHeight = undefined;
|
|
627
800
|
}
|
|
628
801
|
class PersistedTableSettings {
|
|
629
802
|
constructor(tableSettings) {
|
|
@@ -651,6 +824,7 @@ class NotPersistedTableSettings {
|
|
|
651
824
|
this.includeAllInPaginatorOptions = tableSettings.tableSettings.includeAllInPaginatorOptions;
|
|
652
825
|
this.rowHeight = tableSettings.tableSettings.rowHeight;
|
|
653
826
|
this.headerHeight = tableSettings.headerSettings.headerHeight;
|
|
827
|
+
this.groupHeaderHeight = tableSettings.tableSettings.groupHeaderHeight;
|
|
654
828
|
}
|
|
655
829
|
}
|
|
656
830
|
hideExport = true;
|
|
@@ -664,6 +838,7 @@ class NotPersistedTableSettings {
|
|
|
664
838
|
usePaginator = true;
|
|
665
839
|
useVirtualScroll = null;
|
|
666
840
|
includeAllInPaginatorOptions = false;
|
|
841
|
+
groupHeaderHeight = undefined;
|
|
667
842
|
rowHeight;
|
|
668
843
|
headerHeight = undefined;
|
|
669
844
|
}
|
|
@@ -679,6 +854,10 @@ class VirtualScrollOptions {
|
|
|
679
854
|
*/
|
|
680
855
|
maxViewPortHeight = undefined;
|
|
681
856
|
}
|
|
857
|
+
const DefaultVirtualScrollOptions = {
|
|
858
|
+
rowHeight: 48,
|
|
859
|
+
headerHeight: 56,
|
|
860
|
+
};
|
|
682
861
|
|
|
683
862
|
class KeysToDelete {
|
|
684
863
|
initializationState = null;
|
|
@@ -717,13 +896,15 @@ const defaultTableState = {
|
|
|
717
896
|
groupBy: [],
|
|
718
897
|
minColumnWidth: undefined,
|
|
719
898
|
currentPage: 0,
|
|
899
|
+
props: {},
|
|
900
|
+
showAll: false,
|
|
901
|
+
};
|
|
902
|
+
const defaultDataState = {
|
|
720
903
|
virtualScrollOffset: 0,
|
|
721
904
|
dataLen: 0,
|
|
722
905
|
virtualEnds: {
|
|
723
906
|
start: 0, end: 20
|
|
724
907
|
},
|
|
725
|
-
props: {},
|
|
726
|
-
showAll: false,
|
|
727
908
|
};
|
|
728
909
|
|
|
729
910
|
// here is how to use it
|
|
@@ -749,23 +930,21 @@ class CustomCellDirective {
|
|
|
749
930
|
if (this.templateRef !== null)
|
|
750
931
|
this.TemplateRef = this.templateRef;
|
|
751
932
|
}
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
this.TemplateRef = this.templateRef;
|
|
755
|
-
}
|
|
933
|
+
ngOnInit() {
|
|
934
|
+
this.$metaData.next(this.getMetaData());
|
|
756
935
|
}
|
|
757
|
-
|
|
936
|
+
$metaData = new ReplaySubject();
|
|
937
|
+
getMetaData = () => {
|
|
758
938
|
return {
|
|
759
939
|
key: this.customCell,
|
|
760
|
-
displayName: this.displayName
|
|
761
|
-
preSort: this.preSort
|
|
762
|
-
fieldType:
|
|
763
|
-
order: this.customCellOrder
|
|
764
|
-
width: this.customCellWidth
|
|
940
|
+
displayName: this.displayName,
|
|
941
|
+
preSort: this.preSort,
|
|
942
|
+
fieldType: this.customCellNotMapped ? FieldType.NotMapped : FieldType.Unknown,
|
|
943
|
+
order: this.customCellOrder,
|
|
944
|
+
width: this.customCellWidth,
|
|
765
945
|
customCell: true,
|
|
766
|
-
noExport: !metaData,
|
|
767
946
|
};
|
|
768
|
-
}
|
|
947
|
+
};
|
|
769
948
|
static ngTemplateContextGuard(dir, ctx) {
|
|
770
949
|
return true;
|
|
771
950
|
}
|
|
@@ -796,158 +975,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
796
975
|
type: Input
|
|
797
976
|
}] } });
|
|
798
977
|
|
|
799
|
-
const onceWhen = (predicate) => (src) => {
|
|
800
|
-
return src.pipe(filter$1(predicate), first());
|
|
801
|
-
};
|
|
802
|
-
const mapArray = (mapFunc) => (source) => source.pipe(map$1(src => src.map(mapFunc)));
|
|
803
|
-
const filterArray = (filterFunc) => (source) => source.pipe(map$1(src => src.filter(filterFunc)));
|
|
804
|
-
const onWait = startWithIfEmpty;
|
|
805
|
-
function startWithIfEmpty(val, wait = 0) {
|
|
806
|
-
return (source) => {
|
|
807
|
-
return new Observable(subscriber => {
|
|
808
|
-
let emitted = false;
|
|
809
|
-
setTimeout(() => {
|
|
810
|
-
if (!emitted) {
|
|
811
|
-
subscriber.next(val);
|
|
812
|
-
}
|
|
813
|
-
}, wait);
|
|
814
|
-
const sub = source.subscribe({
|
|
815
|
-
next(x) { emitted = true; subscriber.next(x); },
|
|
816
|
-
error(err) { emitted = true; subscriber.error(err); },
|
|
817
|
-
complete() { emitted = true; subscriber.complete(); }
|
|
818
|
-
});
|
|
819
|
-
return () => sub.unsubscribe();
|
|
820
|
-
});
|
|
821
|
-
};
|
|
822
|
-
}
|
|
823
|
-
const combineArrays = (sources) => {
|
|
824
|
-
return combineLatest(sources.map(src => src.pipe(startWithIfEmpty([])))).pipe(map$1(res => res.flat()));
|
|
825
|
-
};
|
|
826
|
-
function switchOff(switchSource, defaultState = true) {
|
|
827
|
-
return (source) => {
|
|
828
|
-
return new Observable(subsciber => {
|
|
829
|
-
let isOn = defaultState;
|
|
830
|
-
const subscription = new Subscription();
|
|
831
|
-
subscription.add(switchSource.subscribe(on => isOn = on));
|
|
832
|
-
subscription.add(source.subscribe({
|
|
833
|
-
next(value) {
|
|
834
|
-
if (isOn) {
|
|
835
|
-
subsciber.next(value);
|
|
836
|
-
}
|
|
837
|
-
},
|
|
838
|
-
error: error => subsciber.error(error),
|
|
839
|
-
complete: () => subsciber.complete()
|
|
840
|
-
}));
|
|
841
|
-
return subscription;
|
|
842
|
-
});
|
|
843
|
-
};
|
|
844
|
-
}
|
|
845
|
-
function skipOneWhen(skipper) {
|
|
846
|
-
return (source) => {
|
|
847
|
-
return new Observable(subsriber => {
|
|
848
|
-
const subscription = new Subscription();
|
|
849
|
-
let skipNext = false;
|
|
850
|
-
subscription.add(skipper.subscribe(_ => skipNext = true));
|
|
851
|
-
subscription.add(source.subscribe({
|
|
852
|
-
next(value) {
|
|
853
|
-
if (skipNext) {
|
|
854
|
-
skipNext = false;
|
|
855
|
-
}
|
|
856
|
-
else {
|
|
857
|
-
subsriber.next(value);
|
|
858
|
-
}
|
|
859
|
-
},
|
|
860
|
-
error: error => subsriber.error(error),
|
|
861
|
-
complete: () => subsriber.complete()
|
|
862
|
-
}));
|
|
863
|
-
return subscription;
|
|
864
|
-
});
|
|
865
|
-
};
|
|
866
|
-
}
|
|
867
|
-
function previousAndCurrent(startingValue) {
|
|
868
|
-
return (source) => {
|
|
869
|
-
return source.pipe(startWith$1(startingValue), pairwise());
|
|
870
|
-
};
|
|
871
|
-
}
|
|
872
|
-
function notNull() {
|
|
873
|
-
return (source) => {
|
|
874
|
-
return source.pipe(filter$1((o) => o != null));
|
|
875
|
-
};
|
|
876
|
-
}
|
|
877
|
-
function delayOn(predicate, delayTime) {
|
|
878
|
-
return (src) => {
|
|
879
|
-
return src.pipe(concatMap$1(r => {
|
|
880
|
-
if (predicate(r)) {
|
|
881
|
-
return merge$1(of({ r }), of(null).pipe(delay(delayTime))).pipe(notNull(), map$1(d => d.r));
|
|
882
|
-
}
|
|
883
|
-
else {
|
|
884
|
-
return of(r);
|
|
885
|
-
}
|
|
886
|
-
}));
|
|
887
|
-
};
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
class Subjectifier extends Observable {
|
|
891
|
-
_subj = new Subject();
|
|
892
|
-
merged;
|
|
893
|
-
constructor(_source) {
|
|
894
|
-
super((obs) => {
|
|
895
|
-
const s = merge$1(_source, this._subj).subscribe(obs);
|
|
896
|
-
return s;
|
|
897
|
-
});
|
|
898
|
-
this.merged = merge$1(_source, this._subj);
|
|
899
|
-
}
|
|
900
|
-
next = this._subj.next.bind(this._subj);
|
|
901
|
-
newSubj = (...operations) => new Subjectifier(this.merged.pipe(...operations));
|
|
902
|
-
}
|
|
903
|
-
|
|
904
|
-
class Subscriber {
|
|
905
|
-
subscriptions = [];
|
|
906
|
-
handle = (subscription) => {
|
|
907
|
-
this.subscriptions.push(subscription);
|
|
908
|
-
};
|
|
909
|
-
on = (obs, action) => {
|
|
910
|
-
this.handle(obs.subscribe(action));
|
|
911
|
-
};
|
|
912
|
-
ngOnDestroy() {
|
|
913
|
-
this.subscriptions.forEach(subscription => {
|
|
914
|
-
subscription.unsubscribe();
|
|
915
|
-
});
|
|
916
|
-
}
|
|
917
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Subscriber, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
918
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: Subscriber, ngImport: i0 });
|
|
919
|
-
}
|
|
920
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Subscriber, decorators: [{
|
|
921
|
-
type: Directive
|
|
922
|
-
}] });
|
|
923
|
-
function subscriber(obsOrSubOrInjector, actionOrInjector, injector) {
|
|
924
|
-
const destroyRef = getDestroyRef(obsOrSubOrInjector, actionOrInjector, injector);
|
|
925
|
-
const subscriber = new Subscriber();
|
|
926
|
-
if (obsOrSubOrInjector instanceof Subscription) {
|
|
927
|
-
subscriber.handle(obsOrSubOrInjector);
|
|
928
|
-
}
|
|
929
|
-
else if (obsOrSubOrInjector instanceof Observable) {
|
|
930
|
-
subscriber.handle(obsOrSubOrInjector.subscribe(actionOrInjector));
|
|
931
|
-
}
|
|
932
|
-
destroyRef.onDestroy(() => subscriber?.ngOnDestroy());
|
|
933
|
-
return subscriber;
|
|
934
|
-
}
|
|
935
|
-
function getDestroyRef(obsOrSubOrInjector, actionOrInjector, injector) {
|
|
936
|
-
const providedInjector = obsOrSubOrInjector instanceof Injector ? obsOrSubOrInjector
|
|
937
|
-
: actionOrInjector instanceof Injector ? actionOrInjector
|
|
938
|
-
: injector;
|
|
939
|
-
if (!providedInjector) {
|
|
940
|
-
try {
|
|
941
|
-
assertInInjectionContext(subscriber);
|
|
942
|
-
}
|
|
943
|
-
catch (error) {
|
|
944
|
-
throw new Error('createRequestor() must be used in an Injection Context or you must provide an injector to createRequestor()');
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
const destroyRef = providedInjector?.get(DestroyRef) || inject(DestroyRef);
|
|
948
|
-
return destroyRef;
|
|
949
|
-
}
|
|
950
|
-
|
|
951
978
|
class ResizeColumnDirective {
|
|
952
979
|
renderer = inject(Renderer2);
|
|
953
980
|
el = inject(ElementRef);
|
|
@@ -1030,9 +1057,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
1030
1057
|
}] } });
|
|
1031
1058
|
|
|
1032
1059
|
class TableWrapperDirective {
|
|
1033
|
-
registrations = [];
|
|
1060
|
+
$registrations = signal([]);
|
|
1034
1061
|
register(filter) {
|
|
1035
|
-
this
|
|
1062
|
+
this.$registrations.update(registrations => [...registrations, filter]);
|
|
1036
1063
|
}
|
|
1037
1064
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1038
1065
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TableWrapperDirective, isStandalone: true, selector: "[tbWrapper]", ngImport: i0 });
|
|
@@ -1729,22 +1756,18 @@ class TableStore extends ComponentStore {
|
|
|
1729
1756
|
this.effect(() => srcObservable.pipe(tap(func)));
|
|
1730
1757
|
return this;
|
|
1731
1758
|
};
|
|
1732
|
-
onLast(callback) {
|
|
1733
|
-
this.on(this.state$.pipe(last()), callback);
|
|
1734
|
-
}
|
|
1735
1759
|
metaData$ = this.select(state => state.metaData);
|
|
1736
|
-
|
|
1737
|
-
|
|
1760
|
+
$metaData = this.selectSignal(state => state.metaData);
|
|
1761
|
+
$userDefinedOrder = this.selectSignal(state => state.userDefined.order);
|
|
1762
|
+
$hiddenKeys = this.selectSignal(state => state.hiddenKeys);
|
|
1763
|
+
$metaDataArray = this.selectSignal(this.$metaData, this.$userDefinedOrder, orderMetaData);
|
|
1738
1764
|
getMetaData$ = (key) => {
|
|
1739
1765
|
return this.select(state => state.metaData[key]).pipe(tap(meta => { if (!meta)
|
|
1740
1766
|
console.warn(`Meta data with key ${key} not found`); }), notNull());
|
|
1741
1767
|
};
|
|
1742
|
-
getUserDefinedWidth
|
|
1743
|
-
|
|
1744
|
-
getUserDefinedWidths$ = this.select(state => state.userDefined.widths);
|
|
1745
|
-
getUserDefinedWidths = this.selectSignal(state => state.userDefined.widths);
|
|
1768
|
+
$getUserDefinedWidth = (key) => this.selectSignal(state => state.userDefined.widths[key]);
|
|
1769
|
+
$getUserDefinedWidths = this.selectSignal(state => state.userDefined.widths);
|
|
1746
1770
|
tableSettingsMinWidth = this.selectSignal(state => state.minColumnWidth);
|
|
1747
|
-
displayedColumns$ = this.select(orderedVisibleColumns);
|
|
1748
1771
|
resetState = this.updater((state) => {
|
|
1749
1772
|
const sorted = this.createPreSort(state.metaData);
|
|
1750
1773
|
return ({ ...state, hiddenKeys: [], sorted, filters: {}, groupBy: [], userDefined: { widths: {}, order: {}, table: {} } });
|
|
@@ -1769,7 +1792,7 @@ class TableStore extends ComponentStore {
|
|
|
1769
1792
|
});
|
|
1770
1793
|
setUserDefinedOrder = this.updater((state, moved) => {
|
|
1771
1794
|
const { newOrder, oldOrder } = moved;
|
|
1772
|
-
const mdsArr =
|
|
1795
|
+
const mdsArr = orderedStateVisibleMetaData(state);
|
|
1773
1796
|
moveItemInArray(mdsArr, oldOrder, newOrder);
|
|
1774
1797
|
const userDefinedOrder = mdsArr.reduce((aggregate, current, index) => {
|
|
1775
1798
|
aggregate[current.key] = index;
|
|
@@ -1777,6 +1800,7 @@ class TableStore extends ComponentStore {
|
|
|
1777
1800
|
}, {});
|
|
1778
1801
|
return ({ ...state, userDefined: { ...state.userDefined, order: userDefinedOrder } });
|
|
1779
1802
|
});
|
|
1803
|
+
$filters = this.selectSignal(state => state.filters);
|
|
1780
1804
|
filters$ = this.select(state => state.filters);
|
|
1781
1805
|
getFilter$ = (filterId) => {
|
|
1782
1806
|
return this.select(state => state.filters[filterId]);
|
|
@@ -1826,7 +1850,7 @@ class TableStore extends ComponentStore {
|
|
|
1826
1850
|
createPreSort = (metaDatas) => {
|
|
1827
1851
|
return Object.values(metaDatas).filter((metaData) => !!metaData.preSort)
|
|
1828
1852
|
.sort(({ preSort: ps1 }, { preSort: ps2 }) => (ps1.precedence || Number.MAX_VALUE) - (ps2.precedence || Number.MAX_VALUE))
|
|
1829
|
-
.map(({ key, preSort }) => ({ active: key, direction
|
|
1853
|
+
.map(({ key, preSort: { direction } }) => ({ active: key, direction }));
|
|
1830
1854
|
};
|
|
1831
1855
|
setSort = this.updater((state, { key, direction }) => {
|
|
1832
1856
|
const sortArray = state.sorted.filter(s => s.active !== key);
|
|
@@ -1853,17 +1877,8 @@ class TableStore extends ComponentStore {
|
|
|
1853
1877
|
setPageSize = this.updater((state, pageSize) => ({ ...state, pageSize, userDefined: { ...state.userDefined, pageSize } }));
|
|
1854
1878
|
getPageSize = this.select(state => state.userDefined.pageSize || state.pageSize);
|
|
1855
1879
|
updateState = this.updater(this.updateStateFunc);
|
|
1856
|
-
cleanPersistedState(state, pState) {
|
|
1857
|
-
const metas = Object.values(state.metaData);
|
|
1858
|
-
const filters = Object.values(pState.filters).filter(fltr => isCustomFilter(fltr) || metas.some(m => m.key === fltr.key)).reduce((obj, filter) => {
|
|
1859
|
-
obj[filter.filterId] = pState.filters[filter.filterId];
|
|
1860
|
-
return obj;
|
|
1861
|
-
}, {});
|
|
1862
|
-
const sorted = pState.sorted.filter(s => metas.some(m => m.key === s.active));
|
|
1863
|
-
return ({ ...pState, filters, sorted });
|
|
1864
|
-
}
|
|
1865
1880
|
updateStateFromPersistedState = this.updater((state, persistedState) => {
|
|
1866
|
-
const incomingTableState =
|
|
1881
|
+
const incomingTableState = cleanPersistedState(state, persistedState);
|
|
1867
1882
|
const newState = this.updateStateFunc(state, incomingTableState);
|
|
1868
1883
|
newState.initializationState = state.initializationState === InitializationState.MetaDataLoaded ? InitializationState.LoadedFromStore : state.initializationState;
|
|
1869
1884
|
return newState;
|
|
@@ -1906,7 +1921,7 @@ class TableStore extends ComponentStore {
|
|
|
1906
1921
|
this.runOnceWhen(stateIs(InitializationState.Ready), func);
|
|
1907
1922
|
}
|
|
1908
1923
|
setMetaData = this.updater((state, md) => {
|
|
1909
|
-
const metaData =
|
|
1924
|
+
const metaData = md
|
|
1910
1925
|
.reduce((prev, curr) => {
|
|
1911
1926
|
if (prev[curr.key]) {
|
|
1912
1927
|
prev[curr.key] = this.mergeMeta(prev[curr.key], curr);
|
|
@@ -2011,43 +2026,80 @@ class TableStore extends ComponentStore {
|
|
|
2011
2026
|
$isVirtual = this.selectSignal(state => state.notPersistedTableSettings.useVirtualScroll === true || state.notPersistedTableSettings.useVirtualScroll?.virtualAsDefault || state.showAll);
|
|
2012
2027
|
$viewType = this.selectSignal(state => {
|
|
2013
2028
|
const usePaginator = state.notPersistedTableSettings.usePaginator;
|
|
2014
|
-
|
|
2029
|
+
if (state.showAll || (this.$isVirtual() && !usePaginator)) {
|
|
2030
|
+
return 'virtual all';
|
|
2031
|
+
}
|
|
2032
|
+
else if (this.$isVirtual() && usePaginator) {
|
|
2033
|
+
return 'virtual paginator';
|
|
2034
|
+
}
|
|
2035
|
+
else if (usePaginator) {
|
|
2036
|
+
return 'paginator';
|
|
2037
|
+
}
|
|
2038
|
+
else {
|
|
2039
|
+
return 'all';
|
|
2040
|
+
}
|
|
2015
2041
|
});
|
|
2016
2042
|
viewType$ = toObservable(this.$viewType);
|
|
2043
|
+
$orderedVisibleColumns = this.selectSignal(this.$metaData, this.$userDefinedOrder, this.$hiddenKeys, (m, u, h) => orderedVisibleMetaData(m, u, h).map(md => md.key), { equal: (a, b) => b.length === a.length && b.every((s, i) => a[i] === s) });
|
|
2017
2044
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2018
2045
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableStore });
|
|
2019
2046
|
}
|
|
2020
2047
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableStore, decorators: [{
|
|
2021
2048
|
type: Injectable
|
|
2022
2049
|
}], ctorParameters: () => [] });
|
|
2023
|
-
const orderedVisibleColumns = (state) =>
|
|
2024
|
-
const
|
|
2025
|
-
const ordered =
|
|
2050
|
+
const orderedVisibleColumns = (state) => orderedStateVisibleMetaData(state).map(md => md.key);
|
|
2051
|
+
const orderedStateVisibleMetaData = (state) => {
|
|
2052
|
+
const ordered = orderStateMetaData(state);
|
|
2026
2053
|
const orderedVisible = ordered
|
|
2027
2054
|
.filter(metaData => !state.hiddenKeys.includes(metaData.key) && state.metaData[metaData.key].fieldType !== FieldType.Hidden);
|
|
2028
2055
|
return orderedVisible;
|
|
2029
2056
|
};
|
|
2030
|
-
const
|
|
2031
|
-
const
|
|
2032
|
-
const
|
|
2057
|
+
const orderedVisibleMetaData = (metaData, userDefinedOrder, hiddenKeys) => {
|
|
2058
|
+
const ordered = orderMetaData(metaData, userDefinedOrder);
|
|
2059
|
+
const orderedVisible = ordered
|
|
2060
|
+
.filter(m => !hiddenKeys.includes(m.key) && metaData[m.key].fieldType !== FieldType.Hidden);
|
|
2061
|
+
return orderedVisible;
|
|
2062
|
+
};
|
|
2063
|
+
const orderedCodeVisibleMetaData = (state) => orderStateMetaData(state).filter(md => md.fieldType !== FieldType.Hidden);
|
|
2064
|
+
const orderStateMetaData = (state) => {
|
|
2065
|
+
return orderMetaData(state.metaData, state.userDefined.order);
|
|
2066
|
+
};
|
|
2067
|
+
const orderMetaData = (metaData, userDefined) => {
|
|
2068
|
+
const userOrderArr = Object.entries(userDefined);
|
|
2033
2069
|
return userOrderArr.length ?
|
|
2034
|
-
Object.values(
|
|
2035
|
-
const orderA =
|
|
2036
|
-
const orderB =
|
|
2037
|
-
|
|
2038
|
-
return 0;
|
|
2039
|
-
}
|
|
2040
|
-
if (orderA == null) {
|
|
2041
|
-
return 1;
|
|
2042
|
-
}
|
|
2043
|
-
if (orderB == null) {
|
|
2044
|
-
return -1;
|
|
2045
|
-
}
|
|
2046
|
-
return state.userDefined.order[a.key] - state.userDefined.order[b.key];
|
|
2070
|
+
Object.values(metaData).sort((a, b) => {
|
|
2071
|
+
const orderA = userDefined[a.key];
|
|
2072
|
+
const orderB = userDefined[b.key];
|
|
2073
|
+
return order(orderA, orderB);
|
|
2047
2074
|
})
|
|
2048
2075
|
:
|
|
2049
|
-
Object.values(
|
|
2076
|
+
Object.values(metaData).sort((a, b) => {
|
|
2077
|
+
const orderA = a.order;
|
|
2078
|
+
const orderB = b.order;
|
|
2079
|
+
return order(orderA, orderB);
|
|
2080
|
+
});
|
|
2050
2081
|
};
|
|
2082
|
+
function order(orderA, orderB) {
|
|
2083
|
+
if (orderA == null && orderB == null) {
|
|
2084
|
+
return 0;
|
|
2085
|
+
}
|
|
2086
|
+
if (orderA == null) {
|
|
2087
|
+
return 1;
|
|
2088
|
+
}
|
|
2089
|
+
if (orderB == null) {
|
|
2090
|
+
return -1;
|
|
2091
|
+
}
|
|
2092
|
+
return orderA - orderB;
|
|
2093
|
+
}
|
|
2094
|
+
function cleanPersistedState(state, pState) {
|
|
2095
|
+
const metas = Object.values(state.metaData);
|
|
2096
|
+
const filters = Object.values(pState.filters).filter(fltr => isCustomFilter(fltr) || metas.some(m => m.key === fltr.key)).reduce((obj, filter) => {
|
|
2097
|
+
obj[filter.filterId] = pState.filters[filter.filterId];
|
|
2098
|
+
return obj;
|
|
2099
|
+
}, {});
|
|
2100
|
+
const sorted = pState.sorted.filter(s => metas.some(m => m.key === s.active));
|
|
2101
|
+
return ({ ...pState, filters, sorted });
|
|
2102
|
+
}
|
|
2051
2103
|
|
|
2052
2104
|
class MultiSortDirective extends MatSort {
|
|
2053
2105
|
state = inject(TableStore);
|
|
@@ -2422,7 +2474,7 @@ class MatSlideToggleGroupDirective {
|
|
|
2422
2474
|
return startValue;
|
|
2423
2475
|
}
|
|
2424
2476
|
getObs() {
|
|
2425
|
-
var toggleChanges = merge
|
|
2477
|
+
var toggleChanges = merge(...this._toggles.map(toggle => toggle.change));
|
|
2426
2478
|
const startValue = this.getInitValue();
|
|
2427
2479
|
return toggleChanges.pipe(scan((prev, cur) => {
|
|
2428
2480
|
const toggleName = cur.source.name;
|
|
@@ -2614,13 +2666,13 @@ class DateFilterComponent {
|
|
|
2614
2666
|
info;
|
|
2615
2667
|
CurrentFilterType;
|
|
2616
2668
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2617
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: DateFilterComponent, isStandalone: true, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\n <mat-form-field>\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\n <mat-datepicker #cal />\n </mat-form-field>\n}\n@if(CurrentFilterType === FilterType.DateBetween){\n <ng-container ngModelGroup=\"filterValue\">\n <mat-form-field class=\"my-filter\" >\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\n (click)=\"fromVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\n <mat-datepicker #fromVal></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\n <mat-datepicker #toVal />\n </mat-form-field>\n </ng-container>\n}\n\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2669
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: DateFilterComponent, isStandalone: true, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\r\n <mat-datepicker #cal />\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.DateBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\r\n <mat-datepicker #toVal />\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2618
2670
|
}
|
|
2619
2671
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DateFilterComponent, decorators: [{
|
|
2620
2672
|
type: Component,
|
|
2621
2673
|
args: [{ selector: 'tb-date-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
|
|
2622
2674
|
MatInputModule, FormsModule, MatDatepickerModule, PreventEnterDirective
|
|
2623
|
-
], template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\n <mat-form-field>\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\n <mat-datepicker #cal />\n </mat-form-field>\n}\n@if(CurrentFilterType === FilterType.DateBetween){\n <ng-container ngModelGroup=\"filterValue\">\n <mat-form-field class=\"my-filter\" >\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\n (click)=\"fromVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\n <mat-datepicker #fromVal></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\n <mat-datepicker #toVal />\n </mat-form-field>\n </ng-container>\n}\n\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2675
|
+
], template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\r\n <mat-datepicker #cal />\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.DateBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\r\n <mat-datepicker #toVal />\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2624
2676
|
}], propDecorators: { info: [{
|
|
2625
2677
|
type: Input
|
|
2626
2678
|
}], CurrentFilterType: [{
|
|
@@ -2671,7 +2723,7 @@ class InFilterComponent {
|
|
|
2671
2723
|
provide: NG_VALUE_ACCESSOR,
|
|
2672
2724
|
useExisting: InFilterComponent,
|
|
2673
2725
|
multi: true
|
|
2674
|
-
}], ngImport: i0, template: "<div class=inline>\n @for (val of value; track $index) {\n <div>\n @if(type === FieldType.Number || type === FieldType.Currency){\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index, $event)\"\n [readonly]=\"$index + 1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"$index === value.length - 1\"/>\n }\n @else {\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index ,$event)\"\n [readonly]=\"$index + 1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\n #input [autoFocus]=\"$index === value.length - 1\" />\n }\n </div>\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput($index)\">-</button>\n @if ($index === value.length - 1) {\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\n }\n \n }\n</div>\n", styles: [".inline{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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: AutoFocusDirective, selector: "[autoFocus]", inputs: ["autoFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2726
|
+
}], ngImport: i0, template: "<div class=inline>\r\n @for (val of value; track $index) {\r\n <div>\r\n @if(type === FieldType.Number || type === FieldType.Currency){\r\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index, $event)\"\r\n [readonly]=\"$index + 1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"$index === value.length - 1\"/>\r\n }\r\n @else {\r\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index ,$event)\"\r\n [readonly]=\"$index + 1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\r\n #input [autoFocus]=\"$index === value.length - 1\" />\r\n }\r\n </div>\r\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput($index)\">-</button>\r\n @if ($index === value.length - 1) {\r\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\r\n }\r\n \r\n }\r\n</div>\r\n", styles: [".inline{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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: AutoFocusDirective, selector: "[autoFocus]", inputs: ["autoFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2675
2727
|
}
|
|
2676
2728
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InFilterComponent, decorators: [{
|
|
2677
2729
|
type: Component,
|
|
@@ -2681,7 +2733,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
2681
2733
|
multi: true
|
|
2682
2734
|
}], standalone: true, imports: [
|
|
2683
2735
|
FormsModule, AutoFocusDirective
|
|
2684
|
-
], template: "<div class=inline>\n @for (val of value; track $index) {\n <div>\n @if(type === FieldType.Number || type === FieldType.Currency){\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index, $event)\"\n [readonly]=\"$index + 1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"$index === value.length - 1\"/>\n }\n @else {\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index ,$event)\"\n [readonly]=\"$index + 1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\n #input [autoFocus]=\"$index === value.length - 1\" />\n }\n </div>\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput($index)\">-</button>\n @if ($index === value.length - 1) {\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\n }\n \n }\n</div>\n", styles: [".inline{display:inline-block}\n"] }]
|
|
2736
|
+
], template: "<div class=inline>\r\n @for (val of value; track $index) {\r\n <div>\r\n @if(type === FieldType.Number || type === FieldType.Currency){\r\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index, $event)\"\r\n [readonly]=\"$index + 1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"$index === value.length - 1\"/>\r\n }\r\n @else {\r\n <input [ngModel]=\"val\" (ngModelChange)=\"onValueChange($index ,$event)\"\r\n [readonly]=\"$index + 1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\r\n #input [autoFocus]=\"$index === value.length - 1\" />\r\n }\r\n </div>\r\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput($index)\">-</button>\r\n @if ($index === value.length - 1) {\r\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\r\n }\r\n \r\n }\r\n</div>\r\n", styles: [".inline{display:inline-block}\n"] }]
|
|
2685
2737
|
}], ctorParameters: () => [], propDecorators: { type: [{
|
|
2686
2738
|
type: Input
|
|
2687
2739
|
}] } });
|
|
@@ -2692,13 +2744,13 @@ class NumberFilterComponent {
|
|
|
2692
2744
|
CurrentFilterType;
|
|
2693
2745
|
info;
|
|
2694
2746
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: NumberFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2695
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: NumberFilterComponent, isStandalone: true, selector: "tb-number-filter", inputs: { CurrentFilterType: "CurrentFilterType", info: "info" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In){\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\n </mat-form-field>\n}\n@if(CurrentFilterType === FilterType.NumberBetween){\n <ng-container ngModelGroup=\"filterValue\" >\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\n </mat-form-field>\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\n </mat-form-field>\n </ng-container>\n}\n\n@if (CurrentFilterType === FilterType.In) {\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' />\n}\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: FormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2747
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: NumberFilterComponent, isStandalone: true, selector: "tb-number-filter", inputs: { CurrentFilterType: "CurrentFilterType", info: "info" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.NumberBetween){\r\n <ng-container ngModelGroup=\"filterValue\" >\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\r\n </mat-form-field>\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n@if (CurrentFilterType === FilterType.In) {\r\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' />\r\n}\r\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: FormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2696
2748
|
}
|
|
2697
2749
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: NumberFilterComponent, decorators: [{
|
|
2698
2750
|
type: Component,
|
|
2699
2751
|
args: [{ selector: 'tb-number-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
|
|
2700
2752
|
MatInputModule, FormsModule, InFilterComponent
|
|
2701
|
-
], template: "@if(CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In){\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\n </mat-form-field>\n}\n@if(CurrentFilterType === FilterType.NumberBetween){\n <ng-container ngModelGroup=\"filterValue\" >\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\n </mat-form-field>\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\n </mat-form-field>\n </ng-container>\n}\n\n@if (CurrentFilterType === FilterType.In) {\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' />\n}\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"] }]
|
|
2753
|
+
], template: "@if(CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.NumberBetween){\r\n <ng-container ngModelGroup=\"filterValue\" >\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\r\n </mat-form-field>\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n@if (CurrentFilterType === FilterType.In) {\r\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' />\r\n}\r\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"] }]
|
|
2702
2754
|
}], propDecorators: { CurrentFilterType: [{
|
|
2703
2755
|
type: Input
|
|
2704
2756
|
}], info: [{
|
|
@@ -2710,13 +2762,13 @@ class DateTimeFilterComponent {
|
|
|
2710
2762
|
info;
|
|
2711
2763
|
CurrentFilterType;
|
|
2712
2764
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DateTimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2713
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: DateTimeFilterComponent, isStandalone: true, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\n}\n@if(CurrentFilterType === FilterType.DateTimeBetween){\n <ng-container ngModelGroup=\"filterValue\">\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\n </ng-container>\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2765
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: DateTimeFilterComponent, isStandalone: true, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n}\r\n@if(CurrentFilterType === FilterType.DateTimeBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n </ng-container>\r\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2714
2766
|
}
|
|
2715
2767
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DateTimeFilterComponent, decorators: [{
|
|
2716
2768
|
type: Component,
|
|
2717
2769
|
args: [{ selector: 'tb-date-time-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
|
|
2718
2770
|
FormsModule, PreventEnterDirective
|
|
2719
|
-
], template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\n}\n@if(CurrentFilterType === FilterType.DateTimeBetween){\n <ng-container ngModelGroup=\"filterValue\">\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\n </ng-container>\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2771
|
+
], template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n}\r\n@if(CurrentFilterType === FilterType.DateTimeBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n </ng-container>\r\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2720
2772
|
}], propDecorators: { info: [{
|
|
2721
2773
|
type: Input
|
|
2722
2774
|
}], CurrentFilterType: [{
|
|
@@ -2775,30 +2827,30 @@ class InListFilterComponent {
|
|
|
2775
2827
|
provide: NG_VALUE_ACCESSOR,
|
|
2776
2828
|
useExisting: InListFilterComponent,
|
|
2777
2829
|
multi: true
|
|
2778
|
-
}], ngImport: i0, template: `
|
|
2779
|
-
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
2780
|
-
<div>
|
|
2781
|
-
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
2782
|
-
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
2783
|
-
</mat-checkbox>
|
|
2784
|
-
</div>
|
|
2785
|
-
}
|
|
2786
|
-
|
|
2830
|
+
}], ngImport: i0, template: `
|
|
2831
|
+
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
2832
|
+
<div>
|
|
2833
|
+
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
2834
|
+
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
2835
|
+
</mat-checkbox>
|
|
2836
|
+
</div>
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2787
2839
|
`, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2788
2840
|
}
|
|
2789
2841
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InListFilterComponent, decorators: [{
|
|
2790
2842
|
type: Component,
|
|
2791
2843
|
args: [{
|
|
2792
2844
|
selector: 'tb-in-list-filter , [tb-in-list-filter]',
|
|
2793
|
-
template: `
|
|
2794
|
-
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
2795
|
-
<div>
|
|
2796
|
-
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
2797
|
-
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
2798
|
-
</mat-checkbox>
|
|
2799
|
-
</div>
|
|
2800
|
-
}
|
|
2801
|
-
|
|
2845
|
+
template: `
|
|
2846
|
+
@for (item of keyValues$ | async| keyvalue; track item.key) {
|
|
2847
|
+
<div>
|
|
2848
|
+
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
2849
|
+
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
2850
|
+
</mat-checkbox>
|
|
2851
|
+
</div>
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2802
2854
|
`,
|
|
2803
2855
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2804
2856
|
providers: [{
|
|
@@ -2836,7 +2888,7 @@ class FilterComponent {
|
|
|
2836
2888
|
}
|
|
2837
2889
|
}
|
|
2838
2890
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2839
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: FilterComponent, isStandalone: true, selector: "tb-filter", inputs: { $filter: { classPropertyName: "$filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close" }, ngImport: i0, template: "@let filter = $filter();\n@let currentFilterType = $currentFilterType();\n\n@if (filter) {\n<mat-card appearance=\"outlined\" class=\"filter-card\">\n <mat-card-content>\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"head-row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"filter-row\">\n <div class=\"inline\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [ngModel]=\"$currentFilterType()\" (ngModelChange)=\"$enteredFilterType.set($event)\" [panelWidth]=\"null\">\n @for (kvp of filterTypes[filter.fieldType]; track kvp) {\n <mat-option [value]=\"kvp\">\n {{ kvp }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\n <ng-container *ngTemplateOutlet=\"String\" />\n }\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.Boolean){\n <ng-container *ngTemplateOutlet=\"Boolean\" />\n }\n @else if(filter.fieldType === FieldType.Date){\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.DateTime){\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.Enum){\n <ng-container *ngTemplateOutlet=\"Enum\" />\n }\n\n @if(currentFilterType === FilterType.IsNull){\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n }\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n \n \n <ng-template #String>\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n } @else if(currentFilterType === FilterType.In) {\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\n }\n </ng-template>\n \n <ng-template #Boolean >\n @if(currentFilterType === FilterType.BooleanEquals){\n <div class=\"switch\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n }\n </ng-template>\n <ng-template #Enum>\n @if(currentFilterType === FilterType.In){\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n\n }\n </ng-template>\n </form>\n </mat-card-content>\n</mat-card>\n}\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1$3.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2891
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: FilterComponent, isStandalone: true, selector: "tb-filter", inputs: { $filter: { classPropertyName: "$filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close" }, ngImport: i0, template: "@let filter = $filter();\r\n@let currentFilterType = $currentFilterType();\r\n\r\n@if (filter) {\r\n<mat-card appearance=\"outlined\" class=\"filter-card\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [ngModel]=\"$currentFilterType()\" (ngModelChange)=\"$enteredFilterType.set($event)\" [panelWidth]=\"null\">\r\n @for (kvp of filterTypes[filter.fieldType]; track kvp) {\r\n <mat-option [value]=\"kvp\">\r\n {{ kvp }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\r\n <ng-container *ngTemplateOutlet=\"String\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Boolean){\r\n <ng-container *ngTemplateOutlet=\"Boolean\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Date){\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.DateTime){\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Enum){\r\n <ng-container *ngTemplateOutlet=\"Enum\" />\r\n }\r\n\r\n @if(currentFilterType === FilterType.IsNull){\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n }\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n } @else if(currentFilterType === FilterType.In) {\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n }\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n @if(currentFilterType === FilterType.BooleanEquals){\r\n <div class=\"switch\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #Enum>\r\n @if(currentFilterType === FilterType.In){\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n\r\n }\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n}\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1$3.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2840
2892
|
}
|
|
2841
2893
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FilterComponent, decorators: [{
|
|
2842
2894
|
type: Component,
|
|
@@ -2845,7 +2897,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
2845
2897
|
MatInputModule, MatSelectModule, KeyValuePipe, NumberFilterComponent,
|
|
2846
2898
|
DateFilterComponent, DateTimeFilterComponent, MatRadioModule, InFilterComponent, InListFilterComponent,
|
|
2847
2899
|
PreventEnterDirective, NgTemplateOutlet
|
|
2848
|
-
], template: "@let filter = $filter();\n@let currentFilterType = $currentFilterType();\n\n@if (filter) {\n<mat-card appearance=\"outlined\" class=\"filter-card\">\n <mat-card-content>\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"head-row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"filter-row\">\n <div class=\"inline\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [ngModel]=\"$currentFilterType()\" (ngModelChange)=\"$enteredFilterType.set($event)\" [panelWidth]=\"null\">\n @for (kvp of filterTypes[filter.fieldType]; track kvp) {\n <mat-option [value]=\"kvp\">\n {{ kvp }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\n <ng-container *ngTemplateOutlet=\"String\" />\n }\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.Boolean){\n <ng-container *ngTemplateOutlet=\"Boolean\" />\n }\n @else if(filter.fieldType === FieldType.Date){\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.DateTime){\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\n }\n @else if(filter.fieldType === FieldType.Enum){\n <ng-container *ngTemplateOutlet=\"Enum\" />\n }\n\n @if(currentFilterType === FilterType.IsNull){\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n }\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n \n \n <ng-template #String>\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n } @else if(currentFilterType === FilterType.In) {\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\n }\n </ng-template>\n \n <ng-template #Boolean >\n @if(currentFilterType === FilterType.BooleanEquals){\n <div class=\"switch\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n }\n </ng-template>\n <ng-template #Enum>\n @if(currentFilterType === FilterType.In){\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n\n }\n </ng-template>\n </form>\n </mat-card-content>\n</mat-card>\n}\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2900
|
+
], template: "@let filter = $filter();\r\n@let currentFilterType = $currentFilterType();\r\n\r\n@if (filter) {\r\n<mat-card appearance=\"outlined\" class=\"filter-card\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [ngModel]=\"$currentFilterType()\" (ngModelChange)=\"$enteredFilterType.set($event)\" [panelWidth]=\"null\">\r\n @for (kvp of filterTypes[filter.fieldType]; track kvp) {\r\n <mat-option [value]=\"kvp\">\r\n {{ kvp }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\r\n <ng-container *ngTemplateOutlet=\"String\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Boolean){\r\n <ng-container *ngTemplateOutlet=\"Boolean\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Date){\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.DateTime){\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Enum){\r\n <ng-container *ngTemplateOutlet=\"Enum\" />\r\n }\r\n\r\n @if(currentFilterType === FilterType.IsNull){\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n }\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n } @else if(currentFilterType === FilterType.In) {\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n }\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n @if(currentFilterType === FilterType.BooleanEquals){\r\n <div class=\"switch\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #Enum>\r\n @if(currentFilterType === FilterType.In){\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n\r\n }\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n}\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
|
|
2849
2901
|
}] });
|
|
2850
2902
|
|
|
2851
2903
|
class GenColDisplayerComponent {
|
|
@@ -2874,14 +2926,14 @@ class GenColDisplayerComponent {
|
|
|
2874
2926
|
this.tableState.setHiddenColumns(displayCols.map(c => ({ key: c.key, visible: c.isVisible })));
|
|
2875
2927
|
}
|
|
2876
2928
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenColDisplayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2877
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "@if(columns$ | async; as displayCols){\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n\n <button mat-menu-item>\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </button>\n\n <button mat-menu-item stop-propagation>\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </button>\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\n @for (col of displayCols; track col.key) {\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\n @if(col.isVisible){\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n } @else {\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n }\n \n <p class=\"label\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n\n </div>\n </button>\n }\n\n </div>\n </mat-menu>\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2929
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "@if(columns$ | async; as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2878
2930
|
}
|
|
2879
2931
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenColDisplayerComponent, decorators: [{
|
|
2880
2932
|
type: Component,
|
|
2881
2933
|
args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
2882
2934
|
AsyncPipe, MatTooltipModule, MatIconModule, MatButtonModule, MatMenuModule, StopPropagationDirective,
|
|
2883
2935
|
DragDropModule, SpaceCasePipe
|
|
2884
|
-
], template: "@if(columns$ | async; as displayCols){\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n\n <button mat-menu-item>\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </button>\n\n <button mat-menu-item stop-propagation>\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </button>\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\n @for (col of displayCols; track col.key) {\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\n @if(col.isVisible){\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n } @else {\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n }\n \n <p class=\"label\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n\n </div>\n </button>\n }\n\n </div>\n </mat-menu>\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
|
|
2936
|
+
], template: "@if(columns$ | async; as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
|
|
2885
2937
|
}], ctorParameters: () => [] });
|
|
2886
2938
|
|
|
2887
2939
|
class WrapperFilterStore extends ComponentStore {
|
|
@@ -2908,24 +2960,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
2908
2960
|
class GenFilterDisplayerComponent {
|
|
2909
2961
|
tableState = inject(TableStore);
|
|
2910
2962
|
filterStore = inject(WrapperFilterStore);
|
|
2911
|
-
|
|
2912
|
-
const
|
|
2913
|
-
|
|
2914
|
-
}
|
|
2915
|
-
filterCols$;
|
|
2963
|
+
$filterCols = computed(() => {
|
|
2964
|
+
const mds = this.tableState.$metaDataArray();
|
|
2965
|
+
return mds.filter(m => m.fieldType !== FieldType.Hidden && m.fieldType !== FieldType.NotMapped && !m.noFilter);
|
|
2966
|
+
});
|
|
2916
2967
|
addFilter(metaData) {
|
|
2917
2968
|
this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
|
|
2918
2969
|
}
|
|
2919
2970
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenFilterDisplayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2920
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenFilterDisplayerComponent, isStandalone: true, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @for (md of filterCols
|
|
2971
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenFilterDisplayerComponent, isStandalone: true, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\r\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n @for (md of $filterCols(); track md.key) {\r\n <button (click)=\"addFilter(md)\" mat-menu-item>\r\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\r\n </button>\r\n }\r\n</mat-menu>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}.d-w{display:flex;flex-direction:row;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2921
2972
|
}
|
|
2922
2973
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
|
|
2923
2974
|
type: Component,
|
|
2924
2975
|
args: [{ selector: 'tb-filter-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
2925
2976
|
MatButtonModule, MatMenuModule, MatTooltipModule, StopPropagationDirective, MatIconModule,
|
|
2926
2977
|
AsyncPipe, SpaceCasePipe
|
|
2927
|
-
], template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @for (md of filterCols
|
|
2928
|
-
}]
|
|
2978
|
+
], template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\r\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n @for (md of $filterCols(); track md.key) {\r\n <button (click)=\"addFilter(md)\" mat-menu-item>\r\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\r\n </button>\r\n }\r\n</mat-menu>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}.d-w{display:flex;flex-direction:row;justify-content:flex-end}\n"] }]
|
|
2979
|
+
}] });
|
|
2929
2980
|
|
|
2930
2981
|
class KeyDisplayPipe {
|
|
2931
2982
|
tableState = inject(TableStore);
|
|
@@ -2992,7 +3043,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
2992
3043
|
class FilterChipsComponent {
|
|
2993
3044
|
tableState = inject(TableStore);
|
|
2994
3045
|
filterStore = inject(WrapperFilterStore);
|
|
2995
|
-
filters
|
|
3046
|
+
$filters = computed(() => Object.values(this.tableState.$filters()).filter(f => isFilterInfo(f) && !f._isExternallyManaged));
|
|
2996
3047
|
deleteByIndex(index) {
|
|
2997
3048
|
this.filterStore.deleteByIndex(index);
|
|
2998
3049
|
}
|
|
@@ -3004,14 +3055,14 @@ class FilterChipsComponent {
|
|
|
3004
3055
|
}
|
|
3005
3056
|
currentFilters$ = this.filterStore.currentFilters$;
|
|
3006
3057
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FilterChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3007
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: FilterChipsComponent, isStandalone: true, selector: "lib-filter-list", ngImport: i0, template: "<div class=\"d-w\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n @if (currentFilters.length) {\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\" matTooltip=\"Close all Filters Cards\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n <div class=\"float\">\n @for (filter of currentFilters; track filter.key) {\n <div class=\"filter\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex($index)\" />\n </div>\n }\n </div>\n }\n\n <mat-chip-set
|
|
3058
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: FilterChipsComponent, isStandalone: true, selector: "lib-filter-list", ngImport: i0, template: "<div class=\"d-w\" *ngrxLet=\"currentFilters$ as currentFilters\" >\r\n\r\n @if (currentFilters.length) {\r\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\" matTooltip=\"Close all Filters Cards\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n <div class=\"float\">\r\n @for (filter of currentFilters; track filter.key) {\r\n <div class=\"filter\">\r\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex($index)\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <mat-chip-set>\r\n @for (filter of $filters(); track filter.key) {\r\n <mat-chip (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\r\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n @if ($filters().length > 1) {\r\n <mat-chip (removed)=\"tableState.clearFilters()\">\r\n Clear All\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n\r\n</div>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}.d-w{display:flex;flex-direction:row;justify-content:flex-end}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i4$3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i4$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4$3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyDisplayPipe, name: "keyDisplay" }, { kind: "pipe", type: FormatFilterTypePipe, name: "formatFilterType" }, { kind: "pipe", type: FormatFilterValuePipe, name: "formatFilterValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3008
3059
|
}
|
|
3009
3060
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FilterChipsComponent, decorators: [{
|
|
3010
3061
|
type: Component,
|
|
3011
3062
|
args: [{ selector: 'lib-filter-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
3012
3063
|
LetDirective, MatButtonModule, MatTooltipModule, MatIconModule, FilterComponent,
|
|
3013
3064
|
MatChipsModule, AsyncPipe, KeyDisplayPipe, FormatFilterTypePipe, FormatFilterValuePipe
|
|
3014
|
-
], template: "<div class=\"d-w\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n @if (currentFilters.length) {\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\" matTooltip=\"Close all Filters Cards\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n <div class=\"float\">\n @for (filter of currentFilters; track filter.key) {\n <div class=\"filter\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex($index)\" />\n </div>\n }\n </div>\n }\n\n <mat-chip-set
|
|
3065
|
+
], template: "<div class=\"d-w\" *ngrxLet=\"currentFilters$ as currentFilters\" >\r\n\r\n @if (currentFilters.length) {\r\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\" matTooltip=\"Close all Filters Cards\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n <div class=\"float\">\r\n @for (filter of currentFilters; track filter.key) {\r\n <div class=\"filter\">\r\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex($index)\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <mat-chip-set>\r\n @for (filter of $filters(); track filter.key) {\r\n <mat-chip (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\r\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n @if ($filters().length > 1) {\r\n <mat-chip (removed)=\"tableState.clearFilters()\">\r\n Clear All\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n\r\n</div>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}.d-w{display:flex;flex-direction:row;justify-content:flex-end}\n"] }]
|
|
3015
3066
|
}] });
|
|
3016
3067
|
|
|
3017
3068
|
function isPipe(o) {
|
|
@@ -3114,16 +3165,16 @@ class RouterLinkColumnComponent {
|
|
|
3114
3165
|
queryParams = computed(() => this.additional().routerLinkOptions.queryParams(this.element()));
|
|
3115
3166
|
routerLinkOptions = computed(() => this.additional().routerLinkOptions);
|
|
3116
3167
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: RouterLinkColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3117
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: RouterLinkColumnComponent, isStandalone: true, selector: "tb-router-link-column", inputs: { additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: true, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
3118
|
-
<a target="{{additional().target}}"
|
|
3119
|
-
[routerLink]=" [link()]"
|
|
3120
|
-
[queryParams]="queryParams()"
|
|
3121
|
-
[fragment]="routerLinkOptions().fragment"
|
|
3122
|
-
[preserveFragment]="routerLinkOptions().preserveFragment"
|
|
3123
|
-
[queryParamsHandling]="routerLinkOptions().queryParamsHandling"
|
|
3124
|
-
>
|
|
3125
|
-
{{value()}}
|
|
3126
|
-
</a>
|
|
3168
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: RouterLinkColumnComponent, isStandalone: true, selector: "tb-router-link-column", inputs: { additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: true, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
3169
|
+
<a target="{{additional().target}}"
|
|
3170
|
+
[routerLink]=" [link()]"
|
|
3171
|
+
[queryParams]="queryParams()"
|
|
3172
|
+
[fragment]="routerLinkOptions().fragment"
|
|
3173
|
+
[preserveFragment]="routerLinkOptions().preserveFragment"
|
|
3174
|
+
[queryParamsHandling]="routerLinkOptions().queryParamsHandling"
|
|
3175
|
+
>
|
|
3176
|
+
{{value()}}
|
|
3177
|
+
</a>
|
|
3127
3178
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3128
3179
|
}
|
|
3129
3180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: RouterLinkColumnComponent, decorators: [{
|
|
@@ -3135,16 +3186,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
3135
3186
|
imports: [
|
|
3136
3187
|
RouterModule
|
|
3137
3188
|
],
|
|
3138
|
-
template: `
|
|
3139
|
-
<a target="{{additional().target}}"
|
|
3140
|
-
[routerLink]=" [link()]"
|
|
3141
|
-
[queryParams]="queryParams()"
|
|
3142
|
-
[fragment]="routerLinkOptions().fragment"
|
|
3143
|
-
[preserveFragment]="routerLinkOptions().preserveFragment"
|
|
3144
|
-
[queryParamsHandling]="routerLinkOptions().queryParamsHandling"
|
|
3145
|
-
>
|
|
3146
|
-
{{value()}}
|
|
3147
|
-
</a>
|
|
3189
|
+
template: `
|
|
3190
|
+
<a target="{{additional().target}}"
|
|
3191
|
+
[routerLink]=" [link()]"
|
|
3192
|
+
[queryParams]="queryParams()"
|
|
3193
|
+
[fragment]="routerLinkOptions().fragment"
|
|
3194
|
+
[preserveFragment]="routerLinkOptions().preserveFragment"
|
|
3195
|
+
[queryParamsHandling]="routerLinkOptions().queryParamsHandling"
|
|
3196
|
+
>
|
|
3197
|
+
{{value()}}
|
|
3198
|
+
</a>
|
|
3148
3199
|
`
|
|
3149
3200
|
}]
|
|
3150
3201
|
}] });
|
|
@@ -3154,11 +3205,11 @@ class LinkColumnComponent {
|
|
|
3154
3205
|
additional = input.required();
|
|
3155
3206
|
link = computed(() => this.additional().link(this.element()));
|
|
3156
3207
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: LinkColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3157
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: LinkColumnComponent, isStandalone: true, selector: "tb-link-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
3158
|
-
<a target="{{additional().target}}"
|
|
3159
|
-
href="{{link()}}">
|
|
3160
|
-
{{value()}}
|
|
3161
|
-
</a>
|
|
3208
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: LinkColumnComponent, isStandalone: true, selector: "tb-link-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
3209
|
+
<a target="{{additional().target}}"
|
|
3210
|
+
href="{{link()}}">
|
|
3211
|
+
{{value()}}
|
|
3212
|
+
</a>
|
|
3162
3213
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3163
3214
|
}
|
|
3164
3215
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: LinkColumnComponent, decorators: [{
|
|
@@ -3167,11 +3218,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
3167
3218
|
selector: "tb-link-column",
|
|
3168
3219
|
standalone: true,
|
|
3169
3220
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3170
|
-
template: `
|
|
3171
|
-
<a target="{{additional().target}}"
|
|
3172
|
-
href="{{link()}}">
|
|
3173
|
-
{{value()}}
|
|
3174
|
-
</a>
|
|
3221
|
+
template: `
|
|
3222
|
+
<a target="{{additional().target}}"
|
|
3223
|
+
href="{{link()}}">
|
|
3224
|
+
{{value()}}
|
|
3225
|
+
</a>
|
|
3175
3226
|
`
|
|
3176
3227
|
}]
|
|
3177
3228
|
}] });
|
|
@@ -3236,14 +3287,14 @@ class InitializationComponent {
|
|
|
3236
3287
|
defaultTemplate;
|
|
3237
3288
|
defaultWithIcon;
|
|
3238
3289
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InitializationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3239
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: InitializationComponent, isStandalone: true, selector: "initialization", viewQueries: [{ propertyName: "linkTemplate", first: true, predicate: ["link"], descendants: true, static: true }, { propertyName: "routerLinkTemplate", first: true, predicate: ["routerLink"], descendants: true, static: true }, { propertyName: "imageUrlTemplate", first: true, predicate: ["imageUrl"], descendants: true, static: true }, { propertyName: "arrayNewLineTemplate", first: true, predicate: ["arrayNewLine"], descendants: true, static: true }, { propertyName: "arrayCommaTemplate", first: true, predicate: ["arrayComma"], descendants: true, static: true }, { propertyName: "defaultTemplate", first: true, predicate: ["default"], descendants: true, static: true }, { propertyName: "defaultWithIcon", first: true, predicate: ["defaultWithIcon"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #link let-value='value' let-element='element' let-additional=\"additional\">\n <tb-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\" />\n</ng-template>\n\n<ng-template #routerLink let-value='value' let-element='element' let-additional=\"additional\">\n <tb-router-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\"/>\n</ng-template>\n\n<ng-template #imageUrl let-value='value'>\n <span>\n <img src=\"{{value}}\" height=\"75px\" width=\"75px\" />\n </span>\n</ng-template>\n\n<ng-template #arrayNewLine let-value='value' let-element='element' let-additional=\"additional\">\n <tb-new-line-array-column [value]='value' [additional]='additional'/>\n</ng-template>\n\n<ng-template #arrayComma let-value='value' let-element='element' let-additional=\"additional\">\n <tb-comma-array-column [value]='value' [additional]='additional'/>\n</ng-template>\n\n<ng-template #default let-value='value'>\n <span>{{ value }}</span>\n</ng-template>\n\n<ng-template #defaultWithIcon let-value='value'>\n <mat-icon>{{ value}}</mat-icon>\n</ng-template>\n", dependencies: [{ kind: "component", type: LinkColumnComponent, selector: "tb-link-column", inputs: ["value", "element", "additional"] }, { kind: "component", type: ArrayCommaColumnComponent, selector: "tb-comma-array-column", inputs: ["value", "additional"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: RouterLinkColumnComponent, selector: "tb-router-link-column", inputs: ["additional", "element", "value"] }, { kind: "component", type: ArrayNewLineColumnComponent, selector: "tb-new-line-array-column", inputs: ["value", "additional"] }] });
|
|
3290
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: InitializationComponent, isStandalone: true, selector: "initialization", viewQueries: [{ propertyName: "linkTemplate", first: true, predicate: ["link"], descendants: true, static: true }, { propertyName: "routerLinkTemplate", first: true, predicate: ["routerLink"], descendants: true, static: true }, { propertyName: "imageUrlTemplate", first: true, predicate: ["imageUrl"], descendants: true, static: true }, { propertyName: "arrayNewLineTemplate", first: true, predicate: ["arrayNewLine"], descendants: true, static: true }, { propertyName: "arrayCommaTemplate", first: true, predicate: ["arrayComma"], descendants: true, static: true }, { propertyName: "defaultTemplate", first: true, predicate: ["default"], descendants: true, static: true }, { propertyName: "defaultWithIcon", first: true, predicate: ["defaultWithIcon"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #link let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\" />\r\n</ng-template>\r\n\r\n<ng-template #routerLink let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-router-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\"/>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-value='value'>\r\n <span>\r\n <img src=\"{{value}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #arrayNewLine let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-new-line-array-column [value]='value' [additional]='additional'/>\r\n</ng-template>\r\n\r\n<ng-template #arrayComma let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-comma-array-column [value]='value' [additional]='additional'/>\r\n</ng-template>\r\n\r\n<ng-template #default let-value='value'>\r\n <span>{{ value }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-value='value'>\r\n <mat-icon>{{ value}}</mat-icon>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: LinkColumnComponent, selector: "tb-link-column", inputs: ["value", "element", "additional"] }, { kind: "component", type: ArrayCommaColumnComponent, selector: "tb-comma-array-column", inputs: ["value", "additional"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: RouterLinkColumnComponent, selector: "tb-router-link-column", inputs: ["additional", "element", "value"] }, { kind: "component", type: ArrayNewLineColumnComponent, selector: "tb-new-line-array-column", inputs: ["value", "additional"] }] });
|
|
3240
3291
|
}
|
|
3241
3292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: InitializationComponent, decorators: [{
|
|
3242
3293
|
type: Component,
|
|
3243
3294
|
args: [{ selector: 'initialization', standalone: true, imports: [
|
|
3244
3295
|
LinkColumnComponent, ArrayCommaColumnComponent, MatIconModule, FunctionPipe,
|
|
3245
3296
|
RouterLinkColumnComponent, ArrayNewLineColumnComponent
|
|
3246
|
-
], template: "<ng-template #link let-value='value' let-element='element' let-additional=\"additional\">\n <tb-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\" />\n</ng-template>\n\n<ng-template #routerLink let-value='value' let-element='element' let-additional=\"additional\">\n <tb-router-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\"/>\n</ng-template>\n\n<ng-template #imageUrl let-value='value'>\n <span>\n <img src=\"{{value}}\" height=\"75px\" width=\"75px\" />\n </span>\n</ng-template>\n\n<ng-template #arrayNewLine let-value='value' let-element='element' let-additional=\"additional\">\n <tb-new-line-array-column [value]='value' [additional]='additional'/>\n</ng-template>\n\n<ng-template #arrayComma let-value='value' let-element='element' let-additional=\"additional\">\n <tb-comma-array-column [value]='value' [additional]='additional'/>\n</ng-template>\n\n<ng-template #default let-value='value'>\n <span>{{ value }}</span>\n</ng-template>\n\n<ng-template #defaultWithIcon let-value='value'>\n <mat-icon>{{ value}}</mat-icon>\n</ng-template>\n" }]
|
|
3297
|
+
], template: "<ng-template #link let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\" />\r\n</ng-template>\r\n\r\n<ng-template #routerLink let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-router-link-column [element]=\"element\" [value]=\"value\" [additional]=\"additional\"/>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-value='value'>\r\n <span>\r\n <img src=\"{{value}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #arrayNewLine let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-new-line-array-column [value]='value' [additional]='additional'/>\r\n</ng-template>\r\n\r\n<ng-template #arrayComma let-value='value' let-element='element' let-additional=\"additional\">\r\n <tb-comma-array-column [value]='value' [additional]='additional'/>\r\n</ng-template>\r\n\r\n<ng-template #default let-value='value'>\r\n <span>{{ value }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-value='value'>\r\n <mat-icon>{{ value}}</mat-icon>\r\n</ng-template>\r\n" }]
|
|
3247
3298
|
}], propDecorators: { linkTemplate: [{
|
|
3248
3299
|
type: ViewChild,
|
|
3249
3300
|
args: ['link', { static: true }]
|
|
@@ -3507,7 +3558,7 @@ class ColumnBuilderComponent {
|
|
|
3507
3558
|
}
|
|
3508
3559
|
classes;
|
|
3509
3560
|
styles = computed(() => {
|
|
3510
|
-
return columnStyles(this.metaData, this.state
|
|
3561
|
+
return columnStyles(this.metaData, this.state.$getUserDefinedWidth(this.metaData.key)(), this.state.tableSettingsMinWidth());
|
|
3511
3562
|
});
|
|
3512
3563
|
ngOnInit() {
|
|
3513
3564
|
this.initialSetUp();
|
|
@@ -3553,7 +3604,7 @@ class ColumnBuilderComponent {
|
|
|
3553
3604
|
};
|
|
3554
3605
|
additional;
|
|
3555
3606
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ColumnBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3556
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ColumnBuilderComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\n\n <!-- header -->\n <ng-template matHeaderCellDef #myHeader>\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\"\n [class]='metaData.additional?.columnPartClasses?.header'>\n <div class=\"header-container\" cdkDragHandle>\n @if(!customCell?.columnDef?.headerCell)\n {\n @if(metaData.fieldType !== FieldType.NotMapped){\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n } @else if(metaData.fieldType === FieldType.NotMapped){\n <div style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n }\n @if((showFilters$ | async)){\n <tb-header-menu #menu [metaData]='metaData' />\n }\n }\n @else\n {\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef!.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\n </ng-container>\n }\n </div>\n </mat-header-cell>\n </ng-template>\n\n <!-- body -->\n <ng-container *matCellDef=\"let element;\">\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\n </ng-container>\n <ng-template #body let-element='element' >\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\n </mat-cell>\n </ng-template>\n\n <!-- footer -->\n <ng-template matFooterCellDef>\n @if(customCell?.columnDef?.footerCell){\n <ng-container\n *ngTemplateOutlet=\"customCell!.columnDef!.footerCell.template; context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\n } @else {\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\n @if(!!data?.length && metaData.additional?.footer){\n <span class=\"bold\">\n @switch (metaData.fieldType) {\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\n }\n </span>\n }\n\n </mat-footer-cell>\n }\n </ng-template>\n</ng-container>\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "directive", type: i1$5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "pipe", type: FunctionPipe, name: "func" }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["element", "styler"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i3$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["metaData"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DecimalPipe, name: "number" }], viewProviders: [
|
|
3607
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ColumnBuilderComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\r\n\r\n <!-- header -->\r\n <ng-template matHeaderCellDef #myHeader>\r\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\"\r\n [class]='metaData.additional?.columnPartClasses?.header'>\r\n <div class=\"header-container\" cdkDragHandle>\r\n @if(!customCell?.columnDef?.headerCell)\r\n {\r\n @if(metaData.fieldType !== FieldType.NotMapped){\r\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n } @else if(metaData.fieldType === FieldType.NotMapped){\r\n <div style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n }\r\n @if((showFilters$ | async)){\r\n <tb-header-menu #menu [metaData]='metaData' />\r\n }\r\n }\r\n @else\r\n {\r\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef!.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n }\r\n </div>\r\n </mat-header-cell>\r\n </ng-template>\r\n\r\n <!-- body -->\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\r\n </ng-container>\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\r\n </mat-cell>\r\n </ng-template>\r\n\r\n <!-- footer -->\r\n <ng-template matFooterCellDef>\r\n @if(customCell?.columnDef?.footerCell){\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell!.columnDef!.footerCell.template; context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\r\n } @else {\r\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\r\n @if(!!data?.length && metaData.additional?.footer){\r\n <span class=\"bold\">\r\n @switch (metaData.fieldType) {\r\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\r\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\r\n }\r\n </span>\r\n }\r\n\r\n </mat-footer-cell>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "directive", type: i1$5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "pipe", type: FunctionPipe, name: "func" }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["element", "styler"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i3$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["metaData"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DecimalPipe, name: "number" }], viewProviders: [
|
|
3557
3608
|
{ provide: CDK_DROP_LIST, useExisting: CdkDropList },
|
|
3558
3609
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3559
3610
|
}
|
|
@@ -3565,7 +3616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
3565
3616
|
MatTableModule, NgTemplateOutlet, ResizeColumnDirective, FunctionPipe, StylerDirective,
|
|
3566
3617
|
ConditionalClassesDirective, DragDropModule, MatSortModule, SpaceCasePipe, HeaderMenuComponent,
|
|
3567
3618
|
AsyncPipe, MatTooltipModule, LetDirective, ColumnTotalPipe, CurrencyPipe, DecimalPipe
|
|
3568
|
-
], template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\n\n <!-- header -->\n <ng-template matHeaderCellDef #myHeader>\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\"\n [class]='metaData.additional?.columnPartClasses?.header'>\n <div class=\"header-container\" cdkDragHandle>\n @if(!customCell?.columnDef?.headerCell)\n {\n @if(metaData.fieldType !== FieldType.NotMapped){\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n } @else if(metaData.fieldType === FieldType.NotMapped){\n <div style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n }\n @if((showFilters$ | async)){\n <tb-header-menu #menu [metaData]='metaData' />\n }\n }\n @else\n {\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef!.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\n </ng-container>\n }\n </div>\n </mat-header-cell>\n </ng-template>\n\n <!-- body -->\n <ng-container *matCellDef=\"let element;\">\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\n </ng-container>\n <ng-template #body let-element='element' >\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\n </mat-cell>\n </ng-template>\n\n <!-- footer -->\n <ng-template matFooterCellDef>\n @if(customCell?.columnDef?.footerCell){\n <ng-container\n *ngTemplateOutlet=\"customCell!.columnDef!.footerCell.template; context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\n } @else {\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\n @if(!!data?.length && metaData.additional?.footer){\n <span class=\"bold\">\n @switch (metaData.fieldType) {\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\n }\n </span>\n }\n\n </mat-footer-cell>\n }\n </ng-template>\n</ng-container>\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"] }]
|
|
3619
|
+
], template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\r\n\r\n <!-- header -->\r\n <ng-template matHeaderCellDef #myHeader>\r\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\"\r\n [class]='metaData.additional?.columnPartClasses?.header'>\r\n <div class=\"header-container\" cdkDragHandle>\r\n @if(!customCell?.columnDef?.headerCell)\r\n {\r\n @if(metaData.fieldType !== FieldType.NotMapped){\r\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n } @else if(metaData.fieldType === FieldType.NotMapped){\r\n <div style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n }\r\n @if((showFilters$ | async)){\r\n <tb-header-menu #menu [metaData]='metaData' />\r\n }\r\n }\r\n @else\r\n {\r\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef!.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n }\r\n </div>\r\n </mat-header-cell>\r\n </ng-template>\r\n\r\n <!-- body -->\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\r\n </ng-container>\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\r\n </mat-cell>\r\n </ng-template>\r\n\r\n <!-- footer -->\r\n <ng-template matFooterCellDef>\r\n @if(customCell?.columnDef?.footerCell){\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell!.columnDef!.footerCell.template; context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\r\n } @else {\r\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\r\n @if(!!data?.length && metaData.additional?.footer){\r\n <span class=\"bold\">\r\n @switch (metaData.fieldType) {\r\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\r\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\r\n }\r\n </span>\r\n }\r\n\r\n </mat-footer-cell>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"] }]
|
|
3569
3620
|
}], propDecorators: { columnDef: [{
|
|
3570
3621
|
type: ViewChild,
|
|
3571
3622
|
args: [MatColumnDef]
|
|
@@ -3609,10 +3660,25 @@ function getSameTailLength(previousSorts, currentSorts) {
|
|
|
3609
3660
|
const initIndexSymbol = Symbol('tb_init_index');
|
|
3610
3661
|
const initialSortState = { sortsToRun: [], allSorts: [] };
|
|
3611
3662
|
|
|
3663
|
+
class DataStore extends ComponentStore {
|
|
3664
|
+
constructor() {
|
|
3665
|
+
super({ ...defaultDataState });
|
|
3666
|
+
}
|
|
3667
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DataStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3668
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DataStore });
|
|
3669
|
+
}
|
|
3670
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DataStore, decorators: [{
|
|
3671
|
+
type: Injectable
|
|
3672
|
+
}], ctorParameters: () => [] });
|
|
3673
|
+
|
|
3612
3674
|
class GenericTableComponent {
|
|
3613
3675
|
state = inject(TableStore);
|
|
3676
|
+
dataStore = inject(DataStore);
|
|
3614
3677
|
viewContainer = inject(ViewContainerRef);
|
|
3615
3678
|
transformCreator = inject(TransformCreator);
|
|
3679
|
+
$headerRow = viewChild(MatHeaderRowDef);
|
|
3680
|
+
$footerRow = viewChild(MatFooterRowDef);
|
|
3681
|
+
$table = viewChild(MatTable);
|
|
3616
3682
|
drop(event) {
|
|
3617
3683
|
this.state.setUserDefinedOrder({ newOrder: event.currentIndex, oldOrder: event.previousIndex });
|
|
3618
3684
|
}
|
|
@@ -3625,55 +3691,103 @@ class GenericTableComponent {
|
|
|
3625
3691
|
this.setUpSelections(trackBy);
|
|
3626
3692
|
}
|
|
3627
3693
|
get trackBy() { return this._trackBy; }
|
|
3628
|
-
displayData
|
|
3694
|
+
$displayData = input.required({ alias: 'displayData' });
|
|
3695
|
+
$displayDataLength = computed(() => this.$displayData()?.length || 0);
|
|
3696
|
+
$hasFooterMeta = computed(() => this.state.$metaDataArray().some(md => !!md.additional?.footer));
|
|
3629
3697
|
$data = input.required({ alias: 'data' });
|
|
3630
3698
|
data$ = toObservable(this.$data);
|
|
3631
3699
|
rows;
|
|
3632
3700
|
columnBuilders;
|
|
3633
|
-
columnInfos;
|
|
3634
|
-
|
|
3701
|
+
$columnInfos = input.required({ alias: 'columnInfos' });
|
|
3702
|
+
$hasCustomFooter = computed(() => this.$columnInfos()?.some(ci => !!ci.customCell?.columnDef?.footerCell));
|
|
3635
3703
|
dropList;
|
|
3704
|
+
$footerRowStyle = computed(() => {
|
|
3705
|
+
const hasData = !!this.$displayDataLength();
|
|
3706
|
+
const metaFooter = this.$hasFooterMeta();
|
|
3707
|
+
const customFooter = this.$hasCustomFooter();
|
|
3708
|
+
const hasSelectionColumn = this.state.props().selectionColumn;
|
|
3709
|
+
return customFooter || (hasData && (metaFooter || hasSelectionColumn)) ? 'regular-footer' : hasData ? 'no-footer' : 'small-footer';
|
|
3710
|
+
});
|
|
3711
|
+
$showFooterRow = computed(() => this.$footerRowStyle() !== 'no-footer');
|
|
3636
3712
|
currentColumns;
|
|
3637
|
-
keys = [];
|
|
3638
3713
|
_injector = inject(Injector);
|
|
3639
3714
|
injector = Injector.create({
|
|
3640
3715
|
providers: [
|
|
3641
|
-
{ provide: MatTable, useFactory: () => this
|
|
3716
|
+
{ provide: MatTable, useFactory: () => this.$table() },
|
|
3642
3717
|
{ provide: CdkDropList, useFactory: () => this.dropList },
|
|
3643
3718
|
],
|
|
3644
3719
|
parent: this._injector
|
|
3645
3720
|
});
|
|
3646
3721
|
rowDefArr = [];
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3722
|
+
$hasSelectColumn = computed(() => this.state.selectSignal(state => state.props.selectionColumn)());
|
|
3723
|
+
$hasIndexColumn = computed(() => this.state.selectSignal(state => state.props.indexColumn)());
|
|
3724
|
+
myColumns = signal({});
|
|
3725
|
+
$showHeader = computed(() => !this.state.tableSettings().hideColumnHeader);
|
|
3726
|
+
offset$ = this.dataStore.select(s => s.virtualScrollOffset);
|
|
3651
3727
|
offsetIndex = 0;
|
|
3652
3728
|
dataView;
|
|
3653
3729
|
constructor() {
|
|
3654
3730
|
this.setUpSelections();
|
|
3731
|
+
effect(() => {
|
|
3732
|
+
const columnInfos = this.$columnInfos() || [];
|
|
3733
|
+
untracked(() => {
|
|
3734
|
+
Object.entries(this.myColumns()).forEach(([key, value]) => {
|
|
3735
|
+
const columnInfo = columnInfos.find(ci => ci.metaData.key === key);
|
|
3736
|
+
if (!columnInfo || columnInfo.customCell !== value.customCell) {
|
|
3737
|
+
delete this.myColumns()[key];
|
|
3738
|
+
this.$table()?.removeColumnDef(value.columnDef);
|
|
3739
|
+
}
|
|
3740
|
+
});
|
|
3741
|
+
columnInfos.forEach(ci => this.addMetaData(ci));
|
|
3742
|
+
});
|
|
3743
|
+
});
|
|
3744
|
+
effect(() => {
|
|
3745
|
+
const headerRow = this.$headerRow();
|
|
3746
|
+
const showHeader = this.$showHeader();
|
|
3747
|
+
const table = this.$table();
|
|
3748
|
+
untracked(() => {
|
|
3749
|
+
if (headerRow && showHeader && table)
|
|
3750
|
+
table.addHeaderRowDef(headerRow);
|
|
3751
|
+
else if (headerRow && table)
|
|
3752
|
+
table.removeHeaderRowDef(headerRow);
|
|
3753
|
+
});
|
|
3754
|
+
});
|
|
3755
|
+
effect(() => {
|
|
3756
|
+
const footerRow = this.$footerRow();
|
|
3757
|
+
const showFooter = this.$showFooterRow();
|
|
3758
|
+
const table = this.$table();
|
|
3759
|
+
untracked(() => {
|
|
3760
|
+
if (footerRow && showFooter && table)
|
|
3761
|
+
table.addFooterRowDef(footerRow);
|
|
3762
|
+
else if (footerRow && table)
|
|
3763
|
+
table.removeFooterRowDef(footerRow);
|
|
3764
|
+
});
|
|
3765
|
+
});
|
|
3655
3766
|
}
|
|
3656
3767
|
defaultTrackBy = (index, item) => item[initIndexSymbol];
|
|
3657
3768
|
trackByFunction = this.defaultTrackBy;
|
|
3658
3769
|
ngOnChanges(changes) {
|
|
3659
|
-
if (changes.rows && this.rows && this.myColumns.length) {
|
|
3770
|
+
if (changes.rows && this.rows && this.myColumns().length) {
|
|
3660
3771
|
this.initializeRowDefs([...this.rows]);
|
|
3661
3772
|
}
|
|
3662
3773
|
}
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3774
|
+
$keys = computed(() => {
|
|
3775
|
+
const displayed = this.state.$orderedVisibleColumns();
|
|
3776
|
+
const built = this.myColumns();
|
|
3777
|
+
const keys = displayed.filter(d => !!built[d]);
|
|
3778
|
+
if (this.$hasSelectColumn()) {
|
|
3779
|
+
keys.unshift('select');
|
|
3666
3780
|
}
|
|
3667
|
-
if (this
|
|
3668
|
-
|
|
3781
|
+
if (this.$hasIndexColumn()) {
|
|
3782
|
+
keys.unshift('index');
|
|
3669
3783
|
}
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3784
|
+
return keys;
|
|
3785
|
+
});
|
|
3786
|
+
keys$ = toObservable(this.$keys);
|
|
3787
|
+
ngOnInit() {
|
|
3673
3788
|
this.initializeRowDefs([...this.rows]);
|
|
3674
|
-
this.state.on(this.
|
|
3675
|
-
this.
|
|
3676
|
-
this.rowDefArr?.forEach(row => row.columns = this.keys);
|
|
3789
|
+
this.state.on(this.keys$, keys => {
|
|
3790
|
+
this.rowDefArr?.forEach(row => row.columns = keys);
|
|
3677
3791
|
});
|
|
3678
3792
|
this.state.on(this.selectableData$, (data) => {
|
|
3679
3793
|
if (this.selection.selected.length) {
|
|
@@ -3682,18 +3796,9 @@ class GenericTableComponent {
|
|
|
3682
3796
|
this.selection.deselect(...removed);
|
|
3683
3797
|
}
|
|
3684
3798
|
});
|
|
3685
|
-
this.showHeader$ = this.state.tableSettings$.pipe(map(settings => !(settings.hideColumnHeader)));
|
|
3686
|
-
this.showFooterRow$ = combineLatest([
|
|
3687
|
-
this.displayData$.pipe(map(d => !!d.length), distinctUntilChanged()),
|
|
3688
|
-
this.state.metaDataArray$.pipe(map(metaData => metaData.some(md => !!md.additional?.footer)), distinctUntilChanged()),
|
|
3689
|
-
this.columnInfos.pipe(map(columnInfos => columnInfos.some(ci => !!ci.customCell?.columnDef?.footerCell)), distinctUntilChanged()),
|
|
3690
|
-
]).pipe(map(([hasData, hasFooterDef, hasCustomFooter]) => {
|
|
3691
|
-
const hasSelectionColumn = this.state.props().selectionColumn;
|
|
3692
|
-
return hasCustomFooter || (hasData && (hasFooterDef || hasSelectionColumn)) ? 'regular-footer' : hasData ? 'no-footer' : 'small-footer';
|
|
3693
|
-
}));
|
|
3694
3799
|
if (this.state.tableSettings().usePaginator || this.state.tableSettings().useVirtualScroll) {
|
|
3695
|
-
this.state.on(this.state.state$, (state) => {
|
|
3696
|
-
this.offsetIndex =
|
|
3800
|
+
this.state.on(combineLatest([this.state.state$, this.dataStore.state$]), ([state, data]) => {
|
|
3801
|
+
this.offsetIndex = data.virtualEnds.start;
|
|
3697
3802
|
if (this.state.tableSettings().usePaginator) {
|
|
3698
3803
|
this.offsetIndex += (state.pageSize * state.currentPage);
|
|
3699
3804
|
}
|
|
@@ -3707,7 +3812,7 @@ class GenericTableComponent {
|
|
|
3707
3812
|
this.state.updateExpandedGroups({ key, isExpanded, groupKey });
|
|
3708
3813
|
}
|
|
3709
3814
|
addMetaData(column) {
|
|
3710
|
-
const columnBuilder = this.myColumns[column.metaData.key];
|
|
3815
|
+
const columnBuilder = this.myColumns()[column.metaData.key];
|
|
3711
3816
|
if (columnBuilder) {
|
|
3712
3817
|
columnBuilder.metaData = column.metaData;
|
|
3713
3818
|
}
|
|
@@ -3719,17 +3824,18 @@ class GenericTableComponent {
|
|
|
3719
3824
|
component.instance.customCell = column.customCell;
|
|
3720
3825
|
component.instance.metaData = column.metaData;
|
|
3721
3826
|
component.instance.data$ = this.data$;
|
|
3722
|
-
this.myColumns[column.metaData.key]
|
|
3827
|
+
this.myColumns.update(mc => ({ ...mc, [column.metaData.key]: component.instance }));
|
|
3723
3828
|
}
|
|
3724
3829
|
}
|
|
3725
3830
|
initializeRowDefs = (defs) => {
|
|
3726
|
-
|
|
3831
|
+
const table = this.$table();
|
|
3832
|
+
if (!table)
|
|
3833
|
+
return;
|
|
3834
|
+
this.rowDefArr.forEach(r => table.removeRowDef(r));
|
|
3727
3835
|
this.rowDefArr = defs;
|
|
3728
3836
|
defs.forEach(r => {
|
|
3729
|
-
r.columns = this.
|
|
3730
|
-
|
|
3731
|
-
this.table.addRowDef(r);
|
|
3732
|
-
}
|
|
3837
|
+
r.columns = this.$keys().concat(Object.values(this.myColumns()).filter(c => c.metaData.fieldType !== FieldType.Hidden).map(c => c.metaData.key));
|
|
3838
|
+
table.addRowDef(r);
|
|
3733
3839
|
});
|
|
3734
3840
|
};
|
|
3735
3841
|
selection;
|
|
@@ -3780,7 +3886,6 @@ class GenericTableComponent {
|
|
|
3780
3886
|
return (previousUserDefinedWidth ?? 0) >= 0 && currentUserDefinedWidth == null;
|
|
3781
3887
|
}
|
|
3782
3888
|
}));
|
|
3783
|
-
showFooterRow$;
|
|
3784
3889
|
getTransform = (key, val) => {
|
|
3785
3890
|
if (val == undefined || val === 'null')
|
|
3786
3891
|
return '';
|
|
@@ -3793,7 +3898,8 @@ class GenericTableComponent {
|
|
|
3793
3898
|
};
|
|
3794
3899
|
$rowHeight = this.state.selectSignal(s => {
|
|
3795
3900
|
if (this.state.$isVirtual() && s.notPersistedTableSettings.useVirtualScroll?.enforceRowHeight) {
|
|
3796
|
-
|
|
3901
|
+
const height = s.notPersistedTableSettings.useVirtualScroll.rowHeight;
|
|
3902
|
+
return height + 'px';
|
|
3797
3903
|
}
|
|
3798
3904
|
if (typeof s.notPersistedTableSettings.rowHeight === 'number') {
|
|
3799
3905
|
return s.notPersistedTableSettings.rowHeight + 'px';
|
|
@@ -3802,36 +3908,36 @@ class GenericTableComponent {
|
|
|
3802
3908
|
});
|
|
3803
3909
|
$headerHeight = this.state.selectSignal(s => {
|
|
3804
3910
|
if (this.state.$isVirtual() && s.notPersistedTableSettings.useVirtualScroll?.enforceHeaderHeight) {
|
|
3805
|
-
|
|
3911
|
+
const height = s.notPersistedTableSettings.useVirtualScroll.headerHeight;
|
|
3912
|
+
return height + 'px';
|
|
3806
3913
|
}
|
|
3807
3914
|
if (typeof s.notPersistedTableSettings.headerHeight === 'number') {
|
|
3808
3915
|
return s.notPersistedTableSettings.headerHeight + 'px';
|
|
3809
3916
|
}
|
|
3810
3917
|
return s.notPersistedTableSettings.headerHeight;
|
|
3811
3918
|
});
|
|
3919
|
+
$groupHeaderHeight = this.state.selectSignal(s => {
|
|
3920
|
+
if (s.notPersistedTableSettings.groupHeaderHeight) {
|
|
3921
|
+
return s.notPersistedTableSettings.groupHeaderHeight + 'px';
|
|
3922
|
+
}
|
|
3923
|
+
return this.$rowHeight();
|
|
3924
|
+
});
|
|
3812
3925
|
$stickyFooter = computed(() => this.state.props().stickyFooter || this.state.$isVirtual());
|
|
3813
3926
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3814
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenericTableComponent, isStandalone: true, selector: "tb-generic-table", inputs: { trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: false, isRequired: false, transformFunction: null }, displayData
|
|
3927
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GenericTableComponent, isStandalone: true, selector: "tb-generic-table", inputs: { trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: false, isRequired: false, transformFunction: null }, $displayData: { classPropertyName: "$displayData", publicName: "displayData", isSignal: true, isRequired: true, transformFunction: null }, $data: { classPropertyName: "$data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: false, isRequired: false, transformFunction: null }, columnBuilders: { classPropertyName: "columnBuilders", publicName: "columnBuilders", isSignal: false, isRequired: false, transformFunction: null }, $columnInfos: { classPropertyName: "$columnInfos", publicName: "columnInfos", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "$headerRow", first: true, predicate: MatHeaderRowDef, descendants: true, isSignal: true }, { propertyName: "$footerRow", first: true, predicate: MatFooterRowDef, descendants: true, isSignal: true }, { propertyName: "$table", first: true, predicate: MatTable, descendants: true, isSignal: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n [class]=\"($footerRowStyle())\"\r\n #table\r\n [dataSource]=\"state.props().dataSource!\"\r\n [trackBy]=\"trackByFunction\"\r\n [style]=\"tableWidth | async \"\r\n>\r\n\r\n <!-- select column -->\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"select-column\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" class=\"select-column\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"/>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef class=\"select-column\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n\r\n <!-- index column -->\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" class=\"index-column\">#\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\" class=\"index-column\">\r\n {{ 1 + i + offsetIndex }}\r\n </mat-cell>\r\n <mat-footer-cell *matFooterCellDef class=\"index-column\"></mat-footer-cell>\r\n </ng-container>\r\n\r\n <!-- Grouping -->\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n @let expanded = (state.getIsExpanded | func : row.key : row.groupName );\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\">\r\n <button mat-icon-button (click)=\"setExpanded(row.key, row.groupName, !expanded());\">\r\n @if (!expanded()) {\r\n <mat-icon>chevron_right</mat-icon>\r\n } @else {\r\n <mat-icon>expand_more</mat-icon>\r\n }\r\n </button>\r\n {{ getTransform | func : row.key : row.groupHeaderDisplay }} ({{ row.length }})\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"state.props().groupHeaderTemplate!; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matRowDef=\"let row; columns: $keys(); let i = index\"/>\r\n <mat-row [style.height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n [style.min-height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"/>\r\n</mat-table>\r\n\r\n<mat-header-row [style.height]=\"$headerHeight()\" [style.min-height]=\"$headerHeight()\"\r\n *matHeaderRowDef=\"$keys(); sticky: state.props().isSticky\" [style.top.px]=\"((offset$ | async)! * -1)\"/>\r\n<mat-footer-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matFooterRowDef=\"$keys(); sticky: $stickyFooter() \"\r\n [style.bottom.px]=\"$stickyFooter() ? (offset$ | async) : undefined\"/>", styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$5.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1$5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1$5.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: FunctionPipe, name: "func" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3815
3928
|
}
|
|
3816
3929
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GenericTableComponent, decorators: [{
|
|
3817
3930
|
type: Component,
|
|
3818
3931
|
args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
3819
3932
|
MatTableModule, DragDropModule, MatCheckboxModule, MatButtonModule, MatIconModule, NgTemplateOutlet,
|
|
3820
3933
|
MatTooltipModule, AsyncPipe, FunctionPipe,
|
|
3821
|
-
], template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n [class]=\"(
|
|
3934
|
+
], template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n [class]=\"($footerRowStyle())\"\r\n #table\r\n [dataSource]=\"state.props().dataSource!\"\r\n [trackBy]=\"trackByFunction\"\r\n [style]=\"tableWidth | async \"\r\n>\r\n\r\n <!-- select column -->\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"select-column\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" class=\"select-column\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"/>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef class=\"select-column\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n\r\n <!-- index column -->\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" class=\"index-column\">#\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\" class=\"index-column\">\r\n {{ 1 + i + offsetIndex }}\r\n </mat-cell>\r\n <mat-footer-cell *matFooterCellDef class=\"index-column\"></mat-footer-cell>\r\n </ng-container>\r\n\r\n <!-- Grouping -->\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n @let expanded = (state.getIsExpanded | func : row.key : row.groupName );\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\">\r\n <button mat-icon-button (click)=\"setExpanded(row.key, row.groupName, !expanded());\">\r\n @if (!expanded()) {\r\n <mat-icon>chevron_right</mat-icon>\r\n } @else {\r\n <mat-icon>expand_more</mat-icon>\r\n }\r\n </button>\r\n {{ getTransform | func : row.key : row.groupHeaderDisplay }} ({{ row.length }})\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"state.props().groupHeaderTemplate!; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matRowDef=\"let row; columns: $keys(); let i = index\"/>\r\n <mat-row [style.height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n [style.min-height]=\"state.props().groupHeaderHeight ? state.props().groupHeaderHeight + 'px' : $groupHeaderHeight()\"\r\n *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"/>\r\n</mat-table>\r\n\r\n<mat-header-row [style.height]=\"$headerHeight()\" [style.min-height]=\"$headerHeight()\"\r\n *matHeaderRowDef=\"$keys(); sticky: state.props().isSticky\" [style.top.px]=\"((offset$ | async)! * -1)\"/>\r\n<mat-footer-row [style.height]=\"$rowHeight()\" [style.min-height]=\"$rowHeight()\"\r\n *matFooterRowDef=\"$keys(); sticky: $stickyFooter() \"\r\n [style.bottom.px]=\"$stickyFooter() ? (offset$ | async) : undefined\"/>", styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}\n"] }]
|
|
3822
3935
|
}], ctorParameters: () => [], propDecorators: { trackBy: [{
|
|
3823
3936
|
type: Input
|
|
3824
|
-
}], displayData$: [{
|
|
3825
|
-
type: Input
|
|
3826
3937
|
}], rows: [{
|
|
3827
3938
|
type: Input
|
|
3828
3939
|
}], columnBuilders: [{
|
|
3829
3940
|
type: Input
|
|
3830
|
-
}], columnInfos: [{
|
|
3831
|
-
type: Input
|
|
3832
|
-
}], table: [{
|
|
3833
|
-
type: ViewChild,
|
|
3834
|
-
args: [MatTable, { static: true }]
|
|
3835
3941
|
}], dropList: [{
|
|
3836
3942
|
type: ViewChild,
|
|
3837
3943
|
args: [CdkDropList, { static: true }]
|
|
@@ -3914,7 +4020,7 @@ class ExportToCsvService {
|
|
|
3914
4020
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ExportToCsvService, decorators: [{
|
|
3915
4021
|
type: Injectable
|
|
3916
4022
|
}] });
|
|
3917
|
-
const removeFromMetaData = (state, keysToRemove) =>
|
|
4023
|
+
const removeFromMetaData = (state, keysToRemove) => orderStateMetaData(state)
|
|
3918
4024
|
.filter(meta => !keysToRemove.includes(meta.key));
|
|
3919
4025
|
const nonExportableFields = (state) => Object.values(state.metaData)
|
|
3920
4026
|
.filter(md => md.noExport)
|
|
@@ -4148,13 +4254,13 @@ const defaultStorageState = {
|
|
|
4148
4254
|
class GroupByListComponent {
|
|
4149
4255
|
tableStore = inject(TableStore);
|
|
4150
4256
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GroupByListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4151
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GroupByListComponent, isStandalone: true, selector: "group-by-list", ngImport: i0, template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\n <span class=\"tb-group-label\">Group By:</span>\n @for (groupByKey of groupByKeys; track groupByKey) {\n @if($index > 0){\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\n }\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\n {{groupByKey | spaceCase}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n</mat-chip-set>\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i4$3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i4$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4$3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4257
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: GroupByListComponent, isStandalone: true, selector: "group-by-list", ngImport: i0, template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span class=\"tb-group-label\">Group By:</span>\r\n @for (groupByKey of groupByKeys; track groupByKey) {\r\n @if($index > 0){\r\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\r\n }\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey | spaceCase}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n</mat-chip-set>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i4$3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i4$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4$3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4152
4258
|
}
|
|
4153
4259
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: GroupByListComponent, decorators: [{
|
|
4154
4260
|
type: Component,
|
|
4155
4261
|
args: [{ selector: 'group-by-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4156
4262
|
MatChipsModule, LetDirective, MatIconModule, SpaceCasePipe
|
|
4157
|
-
], template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\n <span class=\"tb-group-label\">Group By:</span>\n @for (groupByKey of groupByKeys; track groupByKey) {\n @if($index > 0){\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\n }\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\n {{groupByKey | spaceCase}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n</mat-chip-set>\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"] }]
|
|
4263
|
+
], template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span class=\"tb-group-label\">Group By:</span>\r\n @for (groupByKey of groupByKeys; track groupByKey) {\r\n @if($index > 0){\r\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\r\n }\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey | spaceCase}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n</mat-chip-set>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"] }]
|
|
4158
4264
|
}] });
|
|
4159
4265
|
|
|
4160
4266
|
class SortMenuComponentStore extends ComponentStore {
|
|
@@ -4173,11 +4279,12 @@ class SortMenuComponentStore extends ComponentStore {
|
|
|
4173
4279
|
sorted.splice(index, 1, sort);
|
|
4174
4280
|
return ({ ...state, sorted });
|
|
4175
4281
|
});
|
|
4282
|
+
metaDataArr$ = toObservable(this.tableState.$metaDataArray);
|
|
4176
4283
|
reset = () => {
|
|
4177
4284
|
const sorted = this.tableState.sort$.pipe(mergeMap(sort => this.tableState.metaData$.pipe(notNull(), map(meta => sort.map(s => {
|
|
4178
4285
|
return { ...s, displayName: meta[s.active]?.displayName };
|
|
4179
4286
|
})))));
|
|
4180
|
-
const notSorted = this.
|
|
4287
|
+
const notSorted = this.metaDataArr$.pipe(mergeMap(metas => this.tableState.sort$.pipe(map(s => metas
|
|
4181
4288
|
.filter(meta => !s.some(s => s.active === meta.key) && meta.fieldType !== FieldType.NotMapped && !meta.noSort)
|
|
4182
4289
|
.map(meta => ({ active: meta.key, displayName: meta.displayName }))))));
|
|
4183
4290
|
this.set(combineLatest([
|
|
@@ -4245,18 +4352,19 @@ class SortMenuComponent {
|
|
|
4245
4352
|
this.store.setDirection(sort);
|
|
4246
4353
|
}
|
|
4247
4354
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SortMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4248
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: SortMenuComponent, isStandalone: true, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n @if(sorted$ | async; as sorted){\n @if (notSorted$ | async; as notSorted) {\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n @if(dirty){\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n }\n \n </div>\n </div>\n\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply @if (dirty) { Unsaved Changes }\n </button>\n </div>\n\n <!-- Default Sorting Text -->\n @if (!sorted.length) {\n <div class=\"tip\" >\n Sorting List\n </div>\n }\n\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n\n <!-- Menu Item Wrapper -->\n @for (sort of sorted; track sort.active) {\n <!-- Menu Item Headers -->\n @if (sorted.length > 1) {\n <span class=\"description sort-header\">{{$index === 0 ? 'First By' : 'Then By'}}</span>\n }\n \n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n \n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n \n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n\n </div>\n\n <!-- Default Not Sorted Text -->\n @if(!notSorted.length){\n <div class=\"tip\" >\n Not Sorted List\n </div>\n }\n\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n @for (sort of notSorted; track sort.active) {\n <div mat-menu-item class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4355
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: SortMenuComponent, isStandalone: true, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\r\n @if(sorted$ | async; as sorted){\r\n @if (notSorted$ | async; as notSorted) {\r\n <!-- Menu Trigger -->\r\n <span matTooltip=\"Sort\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">swap_vert</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\r\n <div mat-menu-item class=\"menu-button\">\r\n <div class=\"close-button-wrapper\">\r\n <span matTooltip=\"Close\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n @if(dirty){\r\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\r\n <mat-icon>undo</mat-icon>\r\n </span>\r\n }\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"apply-button-wrapper\">\r\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\r\n stop-propagation [class.apply-border]=\"dirty\"\r\n [disabled]=\"!dirty\">\r\n Apply @if (dirty) { Unsaved Changes }\r\n </button>\r\n </div>\r\n\r\n <!-- Default Sorting Text -->\r\n @if (!sorted.length) {\r\n <div class=\"tip\" >\r\n Sorting List\r\n </div>\r\n }\r\n\r\n <!-- Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #sortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\r\n [cdkDropListData]=\"sorted\"\r\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\r\n\r\n <!-- Menu Item Wrapper -->\r\n @for (sort of sorted; track sort.active) {\r\n <!-- Menu Item Headers -->\r\n @if (sorted.length > 1) {\r\n <span class=\"description sort-header\">{{$index === 0 ? 'First By' : 'Then By'}}</span>\r\n }\r\n \r\n <!-- Menu Item -->\r\n <div mat-menu-item cdkDrag class=\"menu-item\">\r\n <div class=\"sort-item\">\r\n <span class=\"sorted-name\">\r\n {{sort.displayName || (sort.active | spaceCase)}}\r\n <span class=\"direction-text\">{{sort.direction}}</span>\r\n </span>\r\n \r\n <!-- Sort Direction Buttons -->\r\n <div class=\"up-down-buttons-wrapper\">\r\n <button class=\"up-down-button up-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_upward\r\n </mat-icon>\r\n </button>\r\n \r\n <button class=\"up-down-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_downward\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Default Not Sorted Text -->\r\n @if(!notSorted.length){\r\n <div class=\"tip\" >\r\n Not Sorted List\r\n </div>\r\n }\r\n\r\n <!-- Not Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #notSortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\r\n [cdkDropListData]=\"notSorted\"\r\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\r\n @for (sort of notSorted; track sort.active) {\r\n <div mat-menu-item class=\"menu-item\" cdkDrag>\r\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\r\n </div>\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n }\r\n</ng-container>\r\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4249
4356
|
}
|
|
4250
4357
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SortMenuComponent, decorators: [{
|
|
4251
4358
|
type: Component,
|
|
4252
4359
|
args: [{ selector: 'tb-sort-menu', providers: [SortMenuComponentStore], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
4253
4360
|
LetDirective, MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, StopPropagationDirective, DragDropModule,
|
|
4254
4361
|
SpaceCasePipe, NgClass, AsyncPipe
|
|
4255
|
-
], template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n @if(sorted$ | async; as sorted){\n @if (notSorted$ | async; as notSorted) {\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n @if(dirty){\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n }\n \n </div>\n </div>\n\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply @if (dirty) { Unsaved Changes }\n </button>\n </div>\n\n <!-- Default Sorting Text -->\n @if (!sorted.length) {\n <div class=\"tip\" >\n Sorting List\n </div>\n }\n\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n\n <!-- Menu Item Wrapper -->\n @for (sort of sorted; track sort.active) {\n <!-- Menu Item Headers -->\n @if (sorted.length > 1) {\n <span class=\"description sort-header\">{{$index === 0 ? 'First By' : 'Then By'}}</span>\n }\n \n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n \n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n \n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n\n </div>\n\n <!-- Default Not Sorted Text -->\n @if(!notSorted.length){\n <div class=\"tip\" >\n Not Sorted List\n </div>\n }\n\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n @for (sort of notSorted; track sort.active) {\n <div mat-menu-item class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"] }]
|
|
4362
|
+
], template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\r\n @if(sorted$ | async; as sorted){\r\n @if (notSorted$ | async; as notSorted) {\r\n <!-- Menu Trigger -->\r\n <span matTooltip=\"Sort\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">swap_vert</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\r\n <div mat-menu-item class=\"menu-button\">\r\n <div class=\"close-button-wrapper\">\r\n <span matTooltip=\"Close\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n @if(dirty){\r\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\r\n <mat-icon>undo</mat-icon>\r\n </span>\r\n }\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"apply-button-wrapper\">\r\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\r\n stop-propagation [class.apply-border]=\"dirty\"\r\n [disabled]=\"!dirty\">\r\n Apply @if (dirty) { Unsaved Changes }\r\n </button>\r\n </div>\r\n\r\n <!-- Default Sorting Text -->\r\n @if (!sorted.length) {\r\n <div class=\"tip\" >\r\n Sorting List\r\n </div>\r\n }\r\n\r\n <!-- Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #sortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\r\n [cdkDropListData]=\"sorted\"\r\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\r\n\r\n <!-- Menu Item Wrapper -->\r\n @for (sort of sorted; track sort.active) {\r\n <!-- Menu Item Headers -->\r\n @if (sorted.length > 1) {\r\n <span class=\"description sort-header\">{{$index === 0 ? 'First By' : 'Then By'}}</span>\r\n }\r\n \r\n <!-- Menu Item -->\r\n <div mat-menu-item cdkDrag class=\"menu-item\">\r\n <div class=\"sort-item\">\r\n <span class=\"sorted-name\">\r\n {{sort.displayName || (sort.active | spaceCase)}}\r\n <span class=\"direction-text\">{{sort.direction}}</span>\r\n </span>\r\n \r\n <!-- Sort Direction Buttons -->\r\n <div class=\"up-down-buttons-wrapper\">\r\n <button class=\"up-down-button up-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_upward\r\n </mat-icon>\r\n </button>\r\n \r\n <button class=\"up-down-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_downward\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Default Not Sorted Text -->\r\n @if(!notSorted.length){\r\n <div class=\"tip\" >\r\n Not Sorted List\r\n </div>\r\n }\r\n\r\n <!-- Not Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #notSortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\r\n [cdkDropListData]=\"notSorted\"\r\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\r\n @for (sort of notSorted; track sort.active) {\r\n <div mat-menu-item class=\"menu-item\" cdkDrag>\r\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\r\n </div>\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n }\r\n</ng-container>\r\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"] }]
|
|
4256
4363
|
}], ctorParameters: () => [] });
|
|
4257
4364
|
|
|
4258
4365
|
class PaginatorComponent {
|
|
4259
4366
|
state = inject(TableStore);
|
|
4367
|
+
data = inject(DataStore);
|
|
4260
4368
|
paginator;
|
|
4261
4369
|
currentPageData$;
|
|
4262
4370
|
$collapseFooter = computed(() => this.state.selectSignal(state => state.persistedTableSettings.collapseFooter)() || this.$showAll());
|
|
@@ -4269,10 +4377,10 @@ class PaginatorComponent {
|
|
|
4269
4377
|
this.state.updateState({ currentPage: pageEvent.pageIndex });
|
|
4270
4378
|
});
|
|
4271
4379
|
this.state.setPageSize(onPaginatorPageSizeChange(this.paginator));
|
|
4272
|
-
this.state.on(this.
|
|
4380
|
+
this.state.on(this.data.select(s => s.dataLen), (len) => this.paginator.length = len);
|
|
4273
4381
|
}
|
|
4274
4382
|
ngAfterViewInit() {
|
|
4275
|
-
this.currentPageData$ = merge
|
|
4383
|
+
this.currentPageData$ = merge(this.paginator.page.pipe(map(mapPaginationEventToCurrentPageDetails)), this.data$.pipe(distinctUntilKeyChanged("length"), delayToAllowForProperUpdate, map(updateCurrentPageDetailsOnDataLengthChange(this.paginator))));
|
|
4276
4384
|
}
|
|
4277
4385
|
paginatorChange() {
|
|
4278
4386
|
if (!this.ourPageEvent) {
|
|
@@ -4290,35 +4398,35 @@ class PaginatorComponent {
|
|
|
4290
4398
|
this.updatePaginator();
|
|
4291
4399
|
}
|
|
4292
4400
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4293
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: PaginatorComponent, isStandalone: true, selector: "tb-paginator", inputs: { data$: "data$", tableElRef: "tableElRef" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], ngImport: i0, template: `
|
|
4294
|
-
<div class="paginator-row">
|
|
4295
|
-
@if(currentPageData$ | async; as pageData){
|
|
4296
|
-
<div [class]="{ 'hide' : ! $collapseFooter(), 'page-amounts':true}">
|
|
4297
|
-
@if(!$showAll()){{{pageData.currentStart}} - {{pageData.currentEnd}} of }{{pageData.total}}
|
|
4298
|
-
</div>
|
|
4299
|
-
}
|
|
4300
|
-
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
|
|
4301
|
-
[class]="{ 'hide' : $collapseFooter() }">
|
|
4302
|
-
</mat-paginator>
|
|
4303
|
-
@if ($showAllOption()) {<button mat-button (click)="updatePaginator()"><span [style.text-decoration]="$showAll() ? 'line-through' : ''" >All</span></button>}
|
|
4304
|
-
</div>
|
|
4305
|
-
`, isInline: true, styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}
|
|
4401
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: PaginatorComponent, isStandalone: true, selector: "tb-paginator", inputs: { data$: "data$", tableElRef: "tableElRef" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], ngImport: i0, template: `
|
|
4402
|
+
<div class="paginator-row">
|
|
4403
|
+
@if(currentPageData$ | async; as pageData){
|
|
4404
|
+
<div [class]="{ 'hide' : ! $collapseFooter(), 'page-amounts':true}">
|
|
4405
|
+
@if(!$showAll()){{{pageData.currentStart}} - {{pageData.currentEnd}} of }{{pageData.total}}
|
|
4406
|
+
</div>
|
|
4407
|
+
}
|
|
4408
|
+
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
|
|
4409
|
+
[class]="{ 'hide' : $collapseFooter() }">
|
|
4410
|
+
</mat-paginator>
|
|
4411
|
+
@if ($showAllOption()) {<button mat-button (click)="updatePaginator()"><span [style.text-decoration]="$showAll() ? 'line-through' : ''" >All</span></button>}
|
|
4412
|
+
</div>
|
|
4413
|
+
`, isInline: true, styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i1$6.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4306
4414
|
}
|
|
4307
4415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
4308
4416
|
type: Component,
|
|
4309
|
-
args: [{ selector: 'tb-paginator', standalone: true, imports: [AsyncPipe, MatPaginatorModule, NgClass, MatButtonModule], template: `
|
|
4310
|
-
<div class="paginator-row">
|
|
4311
|
-
@if(currentPageData$ | async; as pageData){
|
|
4312
|
-
<div [class]="{ 'hide' : ! $collapseFooter(), 'page-amounts':true}">
|
|
4313
|
-
@if(!$showAll()){{{pageData.currentStart}} - {{pageData.currentEnd}} of }{{pageData.total}}
|
|
4314
|
-
</div>
|
|
4315
|
-
}
|
|
4316
|
-
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
|
|
4317
|
-
[class]="{ 'hide' : $collapseFooter() }">
|
|
4318
|
-
</mat-paginator>
|
|
4319
|
-
@if ($showAllOption()) {<button mat-button (click)="updatePaginator()"><span [style.text-decoration]="$showAll() ? 'line-through' : ''" >All</span></button>}
|
|
4320
|
-
</div>
|
|
4321
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}
|
|
4417
|
+
args: [{ selector: 'tb-paginator', standalone: true, imports: [AsyncPipe, MatPaginatorModule, NgClass, MatButtonModule], template: `
|
|
4418
|
+
<div class="paginator-row">
|
|
4419
|
+
@if(currentPageData$ | async; as pageData){
|
|
4420
|
+
<div [class]="{ 'hide' : ! $collapseFooter(), 'page-amounts':true}">
|
|
4421
|
+
@if(!$showAll()){{{pageData.currentStart}} - {{pageData.currentEnd}} of }{{pageData.total}}
|
|
4422
|
+
</div>
|
|
4423
|
+
}
|
|
4424
|
+
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
|
|
4425
|
+
[class]="{ 'hide' : $collapseFooter() }">
|
|
4426
|
+
</mat-paginator>
|
|
4427
|
+
@if ($showAllOption()) {<button mat-button (click)="updatePaginator()"><span [style.text-decoration]="$showAll() ? 'line-through' : ''" >All</span></button>}
|
|
4428
|
+
</div>
|
|
4429
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--mat-paginator-container-size: initial}.select-column{min-width:var(--tb-min-select-column-width, 42px)}.index-column{min-width:var(--tb-min-index-column-width, 42px)}.mat-mdc-row:nth-child(odd){background-color:var(--tb-odd-row-background-color, #cdeefe)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:var(--tb-cell-padding, 0 0 0 .2rem);line-height:var(--tb-cell-line-height, normal)}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}.small-footer mat-footer-row{min-height:1rem;height:1rem}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"] }]
|
|
4322
4430
|
}], propDecorators: { paginator: [{
|
|
4323
4431
|
type: ViewChild,
|
|
4324
4432
|
args: [MatPaginator, { static: true }]
|
|
@@ -4400,14 +4508,15 @@ class TableVirtualScrollStrategy {
|
|
|
4400
4508
|
|
|
4401
4509
|
class VirtualScrollContainer {
|
|
4402
4510
|
state = inject(TableStore);
|
|
4511
|
+
dataStore = inject(DataStore);
|
|
4403
4512
|
viewport = viewChild(CdkVirtualScrollViewport);
|
|
4404
4513
|
defaultOptions = new VirtualScrollOptions();
|
|
4405
4514
|
scrollStrategy = new TableVirtualScrollStrategy(this.computedRowHeight(), this.computedHeaderHeight());
|
|
4406
|
-
dataLength$ = this.state.state
|
|
4515
|
+
dataLength$ = combineLatest([this.state.state$, this.dataStore.state$]).pipe(map$1(([s, d]) => ({
|
|
4407
4516
|
paginated: s.notPersistedTableSettings.usePaginator && !s.showAll,
|
|
4408
4517
|
pageSize: s.userDefined?.pageSize || s.pageSize,
|
|
4409
4518
|
pageNumber: s.currentPage,
|
|
4410
|
-
dataLen:
|
|
4519
|
+
dataLen: d.dataLen
|
|
4411
4520
|
})), distinctUntilChanged$1((a, b) => a.dataLen === b.dataLen &&
|
|
4412
4521
|
a.pageSize === b.pageSize &&
|
|
4413
4522
|
a.pageNumber === b.pageNumber &&
|
|
@@ -4428,7 +4537,7 @@ class VirtualScrollContainer {
|
|
|
4428
4537
|
if (!!viewport) {
|
|
4429
4538
|
addEventListener('resize', this.resizeHandler);
|
|
4430
4539
|
this.subscriber.on(viewport.renderedRangeStream, (range) => {
|
|
4431
|
-
this.
|
|
4540
|
+
this.dataStore.patchState({
|
|
4432
4541
|
virtualEnds: {
|
|
4433
4542
|
start: range.start,
|
|
4434
4543
|
end: range.end + 25,
|
|
@@ -4437,7 +4546,7 @@ class VirtualScrollContainer {
|
|
|
4437
4546
|
});
|
|
4438
4547
|
var offset$ = viewport.scrolledIndexChange.pipe(map$1(() => viewport.getOffsetToRenderedContentStart() ?? 0), distinctUntilChanged$1(), defaultShareReplay());
|
|
4439
4548
|
this.subscriber.on(offset$, (offset) => {
|
|
4440
|
-
this.
|
|
4549
|
+
this.dataStore.patchState({ virtualScrollOffset: offset });
|
|
4441
4550
|
});
|
|
4442
4551
|
this.setSize(this.viewport().elementRef);
|
|
4443
4552
|
}
|
|
@@ -4463,7 +4572,7 @@ class VirtualScrollContainer {
|
|
|
4463
4572
|
vsViewport.setAttribute('style', `height: ${height}px !important;`);
|
|
4464
4573
|
this.viewport()?.checkViewportSize();
|
|
4465
4574
|
const virtualScrollOffset = this.viewport()?.getOffsetToRenderedContentStart() ?? 0;
|
|
4466
|
-
this.
|
|
4575
|
+
this.dataStore.patchState({ virtualScrollOffset });
|
|
4467
4576
|
}
|
|
4468
4577
|
resizeHandler = () => {
|
|
4469
4578
|
if (this.viewport()) {
|
|
@@ -4481,10 +4590,10 @@ class VirtualScrollContainer {
|
|
|
4481
4590
|
return headerHeight;
|
|
4482
4591
|
}
|
|
4483
4592
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: VirtualScrollContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4484
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: VirtualScrollContainer, isStandalone: true, selector: "tb-virtual-scroll-container", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
4485
|
-
<cdk-virtual-scroll-viewport>
|
|
4486
|
-
<ng-content/>
|
|
4487
|
-
</cdk-virtual-scroll-viewport>
|
|
4593
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: VirtualScrollContainer, isStandalone: true, selector: "tb-virtual-scroll-container", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
4594
|
+
<cdk-virtual-scroll-viewport>
|
|
4595
|
+
<ng-content/>
|
|
4596
|
+
</cdk-virtual-scroll-viewport>
|
|
4488
4597
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i1$7.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], viewProviders: [
|
|
4489
4598
|
{
|
|
4490
4599
|
provide: VIRTUAL_SCROLL_STRATEGY,
|
|
@@ -4497,10 +4606,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
4497
4606
|
type: Component,
|
|
4498
4607
|
args: [{
|
|
4499
4608
|
selector: 'tb-virtual-scroll-container',
|
|
4500
|
-
template: `
|
|
4501
|
-
<cdk-virtual-scroll-viewport>
|
|
4502
|
-
<ng-content/>
|
|
4503
|
-
</cdk-virtual-scroll-viewport>
|
|
4609
|
+
template: `
|
|
4610
|
+
<cdk-virtual-scroll-viewport>
|
|
4611
|
+
<ng-content/>
|
|
4612
|
+
</cdk-virtual-scroll-viewport>
|
|
4504
4613
|
`,
|
|
4505
4614
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4506
4615
|
standalone: true,
|
|
@@ -4554,13 +4663,13 @@ class ProfilesMenuComponent {
|
|
|
4554
4663
|
return a;
|
|
4555
4664
|
};
|
|
4556
4665
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ProfilesMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4557
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ProfilesMenuComponent, isStandalone: true, selector: "tb-profiles-menu", inputs: { $tableId: { classPropertyName: "$tableId", publicName: "$tableId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onSaveState: "onSaveState" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], ngImport: i0, template: "<button mat-icon-button [matMenuTriggerFor]=\"menu\" #trigger=\"matMenuTrigger\" [matTooltip]=\"'Profiles'\">\n <mat-icon color=\"primary\">people</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\" (closed)=\"addedKey.value = null; allProfilesPanelOpened.set(false); newProfilePanelOpened.set(false)\">\n @if(!!$currentProfile())\n {\n <div mat-menu-item [matTooltip]=\"'Save Profile'\" mat-stroked-button (click)=\"saveState($currentProfile()!)\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>{{$currentProfile()}}</span>\n </div>\n }\n @else\n {\n <div class=\"profile-line\">\n <button class=\"first-in-line first-button\" mat-stroked-button (click)=\"addState(defaultName, m.checked);\">\n <mat-icon class=\"save-for-default-icon button-save-icon\" color=\"primary\">save</mat-icon>\n <span>Save as <span class=\"current-name\">{{defaultName}}</span> </span>\n </button>\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m.toggle()\" >\n <mat-icon style=\"color: green;\">{{m.checked ? 'star' : 'star_border'}}</mat-icon>\n </button>\n <mat-checkbox class=\"display-none\" [checked]=\"true\" #m />\n </div>\n }\n @if (allProfilesPanelOpened()) {<hr class=\"divider\"/>}\n <div [class]=\"{ hide: !$keys().length }\" mat-menu-item stop-propagation (click)=\"allProfilesPanelOpened.set(!allProfilesPanelOpened())\">All Profiles</div>\n <div [class]=\"{ hide: !allProfilesPanelOpened(), panel: true }\">\n @for (key of $keys() ; track key) {\n <div class=\"profile-line\" [class.current-in-list]=\"key === $currentProfile()\">\n <button [matTooltip]=\"'Select Profile'\" class=\"menu-item first-in-line\" mat-stroked-button (click)='stateService.setLocalCurrentState({ tableId: $tableId(), currentStateKey: key})'>\n <span>{{key}}</span>\n </button>\n @if(key !== $defaultProfile())\n {\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"setDefault(key)\">\n <mat-icon style=\"color: green;\">star_border</mat-icon>\n </button>\n }\n @else\n {\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"unsetDefault()\">\n <mat-icon style=\"color: green;\">star</mat-icon>\n </button>\n }\n <button [matTooltip]=\"'Delete Profile'\" class=\"last-in-line\" stop-propagation mat-icon-button (click)='stateService.deleteProfileFromLocalAndStorage($tableId(), key)'>\n <mat-icon color='warn'>delete_forever</mat-icon>\n </button>\n </div>\n }\n <hr class=\"divider\"/>\n </div>\n @if (newProfilePanelOpened() && !allProfilesPanelOpened()){<hr class=\"divider\"/>}\n <div mat-menu-item stop-propagation (click)=\"newProfilePanelOpened.set(!newProfilePanelOpened()); addedKey.focus()\">Add New Profile</div>\n <div [class]=\"{ hide: !newProfilePanelOpened(), panel: true }\" >\n <div class=\"profile-line\" stop-propagation>\n <div class=\"new-name-input\">\n <i class=\"input-hint\">Enter New Name</i>\n <input matInput #addedKey=\"matInput\" [name]=\"'key'\" />\n </div>\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m2.toggle()\" >\n <mat-icon style=\"color: green;\">{{m2.checked ? 'star' : 'star_border'}}</mat-icon>\n </button>\n <mat-checkbox class=\"display-none\" [ngModel]=\"!$defaultProfile()\" #m2 />\n </div>\n <button class=\"add-button\" color=\"primary\" [matTooltip]=\"'Create New Profile'\" mat-raised-button (click)=\"addState(addedKey.value, m2.checked); addedKey.value = null\" [disabled]=\"!addedKey.value\">\n Add\n </button>\n </div>\n</mat-menu>\n\n<ng-template #line let-key>\n\n\n</ng-template>\n", styles: [":host ::ng-deep .mat-expansion-panel-header{padding:0}.current-name{color:#00f}.menu-item{display:inline-flex;width:initial;flex-grow:1}.profile-line{display:flex;justify-content:space-between;align-items:center}.first-in-line{--f-b: 2rem;margin-left:var(--mat-menu-item-with-icon-leading-spacing)}.first-in-line.first-button{height:var(--f-b);margin:.2rem}.first-in-line .button-save-icon{height:var(--f-b);width:var(--f-b);font-size:var(--f-b)}.main-save-button{height:4rem;width:4rem;padding:.5rem}.main-save-button mat-icon{height:3rem;width:3rem;font-size:3rem}.save-for-default-icon{margin:0}.display-none{display:none}.last-in-line{padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}.default-cursor{cursor:default}.as-def{padding-left:var(--mat-menu-item-with-icon-leading-spacing)}.divider{margin:.2px 0}.add-key{max-width:8.5rem;margin-left:2px}.add-key ::ng-deep .mdc-text-field{padding:0}.panel{transition:height .1s}.hide{height:0;min-height:0;overflow:hidden}.open-panel-button{width:100%;height:2.5rem}.current-in-list{border-left:3px solid blue;background-color:#0000ff0d}.new-name-input{margin-left:3px;display:flex;flex-direction:column}.new-name-input .input-hint{font-size:smaller;font-weight:200;color:gray}.add-button{height:20px;line-height:20px;margin:3px 0 0 3px}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: 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: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: FormsModule }, { 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"] }] });
|
|
4666
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ProfilesMenuComponent, isStandalone: true, selector: "tb-profiles-menu", inputs: { $tableId: { classPropertyName: "$tableId", publicName: "$tableId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onSaveState: "onSaveState" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], ngImport: i0, template: "<button mat-icon-button [matMenuTriggerFor]=\"menu\" #trigger=\"matMenuTrigger\" [matTooltip]=\"'Profiles'\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" (closed)=\"addedKey.value = null; allProfilesPanelOpened.set(false); newProfilePanelOpened.set(false)\">\r\n @if(!!$currentProfile())\r\n {\r\n <div mat-menu-item [matTooltip]=\"'Save Profile'\" mat-stroked-button (click)=\"saveState($currentProfile()!)\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>{{$currentProfile()}}</span>\r\n </div>\r\n }\r\n @else\r\n {\r\n <div class=\"profile-line\">\r\n <button class=\"first-in-line first-button\" mat-stroked-button (click)=\"addState(defaultName, m.checked);\">\r\n <mat-icon class=\"save-for-default-icon button-save-icon\" color=\"primary\">save</mat-icon>\r\n <span>Save as <span class=\"current-name\">{{defaultName}}</span> </span>\r\n </button>\r\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m.toggle()\" >\r\n <mat-icon style=\"color: green;\">{{m.checked ? 'star' : 'star_border'}}</mat-icon>\r\n </button>\r\n <mat-checkbox class=\"display-none\" [checked]=\"true\" #m />\r\n </div>\r\n }\r\n @if (allProfilesPanelOpened()) {<hr class=\"divider\"/>}\r\n <div [class]=\"{ hide: !$keys().length }\" mat-menu-item stop-propagation (click)=\"allProfilesPanelOpened.set(!allProfilesPanelOpened())\">All Profiles</div>\r\n <div [class]=\"{ hide: !allProfilesPanelOpened(), panel: true }\">\r\n @for (key of $keys() ; track key) {\r\n <div class=\"profile-line\" [class.current-in-list]=\"key === $currentProfile()\">\r\n <button [matTooltip]=\"'Select Profile'\" class=\"menu-item first-in-line\" mat-stroked-button (click)='stateService.setLocalCurrentState({ tableId: $tableId(), currentStateKey: key})'>\r\n <span>{{key}}</span>\r\n </button>\r\n @if(key !== $defaultProfile())\r\n {\r\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"setDefault(key)\">\r\n <mat-icon style=\"color: green;\">star_border</mat-icon>\r\n </button>\r\n }\r\n @else\r\n {\r\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"unsetDefault()\">\r\n <mat-icon style=\"color: green;\">star</mat-icon>\r\n </button>\r\n }\r\n <button [matTooltip]=\"'Delete Profile'\" class=\"last-in-line\" stop-propagation mat-icon-button (click)='stateService.deleteProfileFromLocalAndStorage($tableId(), key)'>\r\n <mat-icon color='warn'>delete_forever</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <hr class=\"divider\"/>\r\n </div>\r\n @if (newProfilePanelOpened() && !allProfilesPanelOpened()){<hr class=\"divider\"/>}\r\n <div mat-menu-item stop-propagation (click)=\"newProfilePanelOpened.set(!newProfilePanelOpened()); addedKey.focus()\">Add New Profile</div>\r\n <div [class]=\"{ hide: !newProfilePanelOpened(), panel: true }\" >\r\n <div class=\"profile-line\" stop-propagation>\r\n <div class=\"new-name-input\">\r\n <i class=\"input-hint\">Enter New Name</i>\r\n <input matInput #addedKey=\"matInput\" [name]=\"'key'\" />\r\n </div>\r\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m2.toggle()\" >\r\n <mat-icon style=\"color: green;\">{{m2.checked ? 'star' : 'star_border'}}</mat-icon>\r\n </button>\r\n <mat-checkbox class=\"display-none\" [ngModel]=\"!$defaultProfile()\" #m2 />\r\n </div>\r\n <button class=\"add-button\" color=\"primary\" [matTooltip]=\"'Create New Profile'\" mat-raised-button (click)=\"addState(addedKey.value, m2.checked); addedKey.value = null\" [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-template #line let-key>\r\n\r\n\r\n</ng-template>\r\n", styles: [":host ::ng-deep .mat-expansion-panel-header{padding:0}.current-name{color:#00f}.menu-item{display:inline-flex;width:initial;flex-grow:1}.profile-line{display:flex;justify-content:space-between;align-items:center}.first-in-line{--f-b: 2rem;margin-left:var(--mat-menu-item-with-icon-leading-spacing)}.first-in-line.first-button{height:var(--f-b);margin:.2rem}.first-in-line .button-save-icon{height:var(--f-b);width:var(--f-b);font-size:var(--f-b)}.main-save-button{height:4rem;width:4rem;padding:.5rem}.main-save-button mat-icon{height:3rem;width:3rem;font-size:3rem}.save-for-default-icon{margin:0}.display-none{display:none}.last-in-line{padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}.default-cursor{cursor:default}.as-def{padding-left:var(--mat-menu-item-with-icon-leading-spacing)}.divider{margin:.2px 0}.add-key{max-width:8.5rem;margin-left:2px}.add-key ::ng-deep .mdc-text-field{padding:0}.panel{transition:height .1s}.hide{height:0;min-height:0;overflow:hidden}.open-panel-button{width:100%;height:2.5rem}.current-in-list{border-left:3px solid blue;background-color:#0000ff0d}.new-name-input{margin-left:3px;display:flex;flex-direction:column}.new-name-input .input-hint{font-size:smaller;font-weight:200;color:gray}.add-button{height:20px;line-height:20px;margin:3px 0 0 3px}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: 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: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: FormsModule }, { 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"] }] });
|
|
4558
4667
|
}
|
|
4559
4668
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ProfilesMenuComponent, decorators: [{
|
|
4560
4669
|
type: Component,
|
|
4561
4670
|
args: [{ selector: 'tb-profiles-menu', standalone: true, imports: [MatIcon, MatTooltip, MatIconButton, MatMenuModule, MatButton, MatInput, DialogDirective, ClickEmitterDirective, NgTemplateOutlet,
|
|
4562
4671
|
MatCheckbox, StopPropagationDirective, FunctionPipe, MatInputModule, AsyncPipe, FormsModule
|
|
4563
|
-
], template: "<button mat-icon-button [matMenuTriggerFor]=\"menu\" #trigger=\"matMenuTrigger\" [matTooltip]=\"'Profiles'\">\n <mat-icon color=\"primary\">people</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\" (closed)=\"addedKey.value = null; allProfilesPanelOpened.set(false); newProfilePanelOpened.set(false)\">\n @if(!!$currentProfile())\n {\n <div mat-menu-item [matTooltip]=\"'Save Profile'\" mat-stroked-button (click)=\"saveState($currentProfile()!)\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>{{$currentProfile()}}</span>\n </div>\n }\n @else\n {\n <div class=\"profile-line\">\n <button class=\"first-in-line first-button\" mat-stroked-button (click)=\"addState(defaultName, m.checked);\">\n <mat-icon class=\"save-for-default-icon button-save-icon\" color=\"primary\">save</mat-icon>\n <span>Save as <span class=\"current-name\">{{defaultName}}</span> </span>\n </button>\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m.toggle()\" >\n <mat-icon style=\"color: green;\">{{m.checked ? 'star' : 'star_border'}}</mat-icon>\n </button>\n <mat-checkbox class=\"display-none\" [checked]=\"true\" #m />\n </div>\n }\n @if (allProfilesPanelOpened()) {<hr class=\"divider\"/>}\n <div [class]=\"{ hide: !$keys().length }\" mat-menu-item stop-propagation (click)=\"allProfilesPanelOpened.set(!allProfilesPanelOpened())\">All Profiles</div>\n <div [class]=\"{ hide: !allProfilesPanelOpened(), panel: true }\">\n @for (key of $keys() ; track key) {\n <div class=\"profile-line\" [class.current-in-list]=\"key === $currentProfile()\">\n <button [matTooltip]=\"'Select Profile'\" class=\"menu-item first-in-line\" mat-stroked-button (click)='stateService.setLocalCurrentState({ tableId: $tableId(), currentStateKey: key})'>\n <span>{{key}}</span>\n </button>\n @if(key !== $defaultProfile())\n {\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"setDefault(key)\">\n <mat-icon style=\"color: green;\">star_border</mat-icon>\n </button>\n }\n @else\n {\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"unsetDefault()\">\n <mat-icon style=\"color: green;\">star</mat-icon>\n </button>\n }\n <button [matTooltip]=\"'Delete Profile'\" class=\"last-in-line\" stop-propagation mat-icon-button (click)='stateService.deleteProfileFromLocalAndStorage($tableId(), key)'>\n <mat-icon color='warn'>delete_forever</mat-icon>\n </button>\n </div>\n }\n <hr class=\"divider\"/>\n </div>\n @if (newProfilePanelOpened() && !allProfilesPanelOpened()){<hr class=\"divider\"/>}\n <div mat-menu-item stop-propagation (click)=\"newProfilePanelOpened.set(!newProfilePanelOpened()); addedKey.focus()\">Add New Profile</div>\n <div [class]=\"{ hide: !newProfilePanelOpened(), panel: true }\" >\n <div class=\"profile-line\" stop-propagation>\n <div class=\"new-name-input\">\n <i class=\"input-hint\">Enter New Name</i>\n <input matInput #addedKey=\"matInput\" [name]=\"'key'\" />\n </div>\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m2.toggle()\" >\n <mat-icon style=\"color: green;\">{{m2.checked ? 'star' : 'star_border'}}</mat-icon>\n </button>\n <mat-checkbox class=\"display-none\" [ngModel]=\"!$defaultProfile()\" #m2 />\n </div>\n <button class=\"add-button\" color=\"primary\" [matTooltip]=\"'Create New Profile'\" mat-raised-button (click)=\"addState(addedKey.value, m2.checked); addedKey.value = null\" [disabled]=\"!addedKey.value\">\n Add\n </button>\n </div>\n</mat-menu>\n\n<ng-template #line let-key>\n\n\n</ng-template>\n", styles: [":host ::ng-deep .mat-expansion-panel-header{padding:0}.current-name{color:#00f}.menu-item{display:inline-flex;width:initial;flex-grow:1}.profile-line{display:flex;justify-content:space-between;align-items:center}.first-in-line{--f-b: 2rem;margin-left:var(--mat-menu-item-with-icon-leading-spacing)}.first-in-line.first-button{height:var(--f-b);margin:.2rem}.first-in-line .button-save-icon{height:var(--f-b);width:var(--f-b);font-size:var(--f-b)}.main-save-button{height:4rem;width:4rem;padding:.5rem}.main-save-button mat-icon{height:3rem;width:3rem;font-size:3rem}.save-for-default-icon{margin:0}.display-none{display:none}.last-in-line{padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}.default-cursor{cursor:default}.as-def{padding-left:var(--mat-menu-item-with-icon-leading-spacing)}.divider{margin:.2px 0}.add-key{max-width:8.5rem;margin-left:2px}.add-key ::ng-deep .mdc-text-field{padding:0}.panel{transition:height .1s}.hide{height:0;min-height:0;overflow:hidden}.open-panel-button{width:100%;height:2.5rem}.current-in-list{border-left:3px solid blue;background-color:#0000ff0d}.new-name-input{margin-left:3px;display:flex;flex-direction:column}.new-name-input .input-hint{font-size:smaller;font-weight:200;color:gray}.add-button{height:20px;line-height:20px;margin:3px 0 0 3px}\n"] }]
|
|
4672
|
+
], template: "<button mat-icon-button [matMenuTriggerFor]=\"menu\" #trigger=\"matMenuTrigger\" [matTooltip]=\"'Profiles'\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" (closed)=\"addedKey.value = null; allProfilesPanelOpened.set(false); newProfilePanelOpened.set(false)\">\r\n @if(!!$currentProfile())\r\n {\r\n <div mat-menu-item [matTooltip]=\"'Save Profile'\" mat-stroked-button (click)=\"saveState($currentProfile()!)\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>{{$currentProfile()}}</span>\r\n </div>\r\n }\r\n @else\r\n {\r\n <div class=\"profile-line\">\r\n <button class=\"first-in-line first-button\" mat-stroked-button (click)=\"addState(defaultName, m.checked);\">\r\n <mat-icon class=\"save-for-default-icon button-save-icon\" color=\"primary\">save</mat-icon>\r\n <span>Save as <span class=\"current-name\">{{defaultName}}</span> </span>\r\n </button>\r\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m.toggle()\" >\r\n <mat-icon style=\"color: green;\">{{m.checked ? 'star' : 'star_border'}}</mat-icon>\r\n </button>\r\n <mat-checkbox class=\"display-none\" [checked]=\"true\" #m />\r\n </div>\r\n }\r\n @if (allProfilesPanelOpened()) {<hr class=\"divider\"/>}\r\n <div [class]=\"{ hide: !$keys().length }\" mat-menu-item stop-propagation (click)=\"allProfilesPanelOpened.set(!allProfilesPanelOpened())\">All Profiles</div>\r\n <div [class]=\"{ hide: !allProfilesPanelOpened(), panel: true }\">\r\n @for (key of $keys() ; track key) {\r\n <div class=\"profile-line\" [class.current-in-list]=\"key === $currentProfile()\">\r\n <button [matTooltip]=\"'Select Profile'\" class=\"menu-item first-in-line\" mat-stroked-button (click)='stateService.setLocalCurrentState({ tableId: $tableId(), currentStateKey: key})'>\r\n <span>{{key}}</span>\r\n </button>\r\n @if(key !== $defaultProfile())\r\n {\r\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"setDefault(key)\">\r\n <mat-icon style=\"color: green;\">star_border</mat-icon>\r\n </button>\r\n }\r\n @else\r\n {\r\n <button [matTooltip]=\"'Toggle Profile Being Default'\" stop-propagation mat-icon-button (click)=\"unsetDefault()\">\r\n <mat-icon style=\"color: green;\">star</mat-icon>\r\n </button>\r\n }\r\n <button [matTooltip]=\"'Delete Profile'\" class=\"last-in-line\" stop-propagation mat-icon-button (click)='stateService.deleteProfileFromLocalAndStorage($tableId(), key)'>\r\n <mat-icon color='warn'>delete_forever</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <hr class=\"divider\"/>\r\n </div>\r\n @if (newProfilePanelOpened() && !allProfilesPanelOpened()){<hr class=\"divider\"/>}\r\n <div mat-menu-item stop-propagation (click)=\"newProfilePanelOpened.set(!newProfilePanelOpened()); addedKey.focus()\">Add New Profile</div>\r\n <div [class]=\"{ hide: !newProfilePanelOpened(), panel: true }\" >\r\n <div class=\"profile-line\" stop-propagation>\r\n <div class=\"new-name-input\">\r\n <i class=\"input-hint\">Enter New Name</i>\r\n <input matInput #addedKey=\"matInput\" [name]=\"'key'\" />\r\n </div>\r\n <button [matTooltip]=\"'Toggle Profile Being Created As Default'\" stop-propagation mat-icon-button (click)=\"m2.toggle()\" >\r\n <mat-icon style=\"color: green;\">{{m2.checked ? 'star' : 'star_border'}}</mat-icon>\r\n </button>\r\n <mat-checkbox class=\"display-none\" [ngModel]=\"!$defaultProfile()\" #m2 />\r\n </div>\r\n <button class=\"add-button\" color=\"primary\" [matTooltip]=\"'Create New Profile'\" mat-raised-button (click)=\"addState(addedKey.value, m2.checked); addedKey.value = null\" [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-template #line let-key>\r\n\r\n\r\n</ng-template>\r\n", styles: [":host ::ng-deep .mat-expansion-panel-header{padding:0}.current-name{color:#00f}.menu-item{display:inline-flex;width:initial;flex-grow:1}.profile-line{display:flex;justify-content:space-between;align-items:center}.first-in-line{--f-b: 2rem;margin-left:var(--mat-menu-item-with-icon-leading-spacing)}.first-in-line.first-button{height:var(--f-b);margin:.2rem}.first-in-line .button-save-icon{height:var(--f-b);width:var(--f-b);font-size:var(--f-b)}.main-save-button{height:4rem;width:4rem;padding:.5rem}.main-save-button mat-icon{height:3rem;width:3rem;font-size:3rem}.save-for-default-icon{margin:0}.display-none{display:none}.last-in-line{padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}.default-cursor{cursor:default}.as-def{padding-left:var(--mat-menu-item-with-icon-leading-spacing)}.divider{margin:.2px 0}.add-key{max-width:8.5rem;margin-left:2px}.add-key ::ng-deep .mdc-text-field{padding:0}.panel{transition:height .1s}.hide{height:0;min-height:0;overflow:hidden}.open-panel-button{width:100%;height:2.5rem}.current-in-list{border-left:3px solid blue;background-color:#0000ff0d}.new-name-input{margin-left:3px;display:flex;flex-direction:column}.new-name-input .input-hint{font-size:smaller;font-weight:200;color:gray}.add-button{height:20px;line-height:20px;margin:3px 0 0 3px}\n"] }]
|
|
4564
4673
|
}] });
|
|
4565
4674
|
|
|
4566
4675
|
const containerImports = [
|
|
@@ -4857,18 +4966,25 @@ const defaultProps = {
|
|
|
4857
4966
|
selectionColumn: false,
|
|
4858
4967
|
isSticky: true,
|
|
4859
4968
|
stickyFooter: false,
|
|
4969
|
+
groupHeaderHeight: undefined,
|
|
4860
4970
|
};
|
|
4861
4971
|
|
|
4862
4972
|
class TableBuilderDataSource extends MatTableDataSource {
|
|
4863
4973
|
dataSrc;
|
|
4864
4974
|
subscription;
|
|
4865
|
-
|
|
4866
|
-
viewableData$ = this.#viewableData$.pipe(mergeAll());
|
|
4867
|
-
constructor(dataSrc, state) {
|
|
4975
|
+
constructor(dataSrc, state, data) {
|
|
4868
4976
|
super([]);
|
|
4869
4977
|
this.dataSrc = dataSrc;
|
|
4870
|
-
|
|
4871
|
-
|
|
4978
|
+
const viewType$ = state.viewType$.pipe(distinctUntilChanged$1(), defaultShareReplay());
|
|
4979
|
+
const distinctSizingData = combineLatest([state.state$, data.state$]).pipe(map$1(([{ currentPage, pageSize }, { virtualEnds }]) => ({ currentPage, pageSize, virtualEnd: virtualEnds?.end, virtualStart: virtualEnds?.start })), distinctUntilChanged$1((d1, d2) => d1.currentPage === d2.currentPage
|
|
4980
|
+
&& d1.pageSize === d2.pageSize
|
|
4981
|
+
&& d1.virtualEnd === d2.virtualEnd
|
|
4982
|
+
&& d1.virtualStart === d2.virtualStart));
|
|
4983
|
+
const _dataLength = this.dataSrc.pipe(map$1((data) => data.length), distinctUntilChanged$1());
|
|
4984
|
+
const firstDataLength = _dataLength.pipe(first());
|
|
4985
|
+
const subsequentDataLength = _dataLength.pipe(skip(1), delay(0));
|
|
4986
|
+
const dataLength = merge(firstDataLength, subsequentDataLength);
|
|
4987
|
+
const dataSize$ = combineLatest([viewType$, distinctSizingData, dataLength]).pipe(map$1(([viewType, { currentPage, pageSize, virtualEnd, virtualStart }, length]) => {
|
|
4872
4988
|
const previousPageRecords = currentPage * pageSize;
|
|
4873
4989
|
if (viewType === 'virtual paginator') {
|
|
4874
4990
|
return ({ start: virtualStart + previousPageRecords, end: Math.min(virtualEnd, pageSize) + previousPageRecords });
|
|
@@ -4876,15 +4992,16 @@ class TableBuilderDataSource extends MatTableDataSource {
|
|
|
4876
4992
|
if (viewType === 'paginator') {
|
|
4877
4993
|
return ({ start: previousPageRecords, end: previousPageRecords + pageSize });
|
|
4878
4994
|
}
|
|
4995
|
+
if (viewType === 'all') {
|
|
4996
|
+
return ({ start: 0, end: length });
|
|
4997
|
+
}
|
|
4879
4998
|
return ({ start: virtualStart, end: virtualEnd });
|
|
4880
|
-
}))
|
|
4999
|
+
}))
|
|
4881
5000
|
.pipe(distinctUntilChanged$1((a, b) => a.start === b.start && a.end === b.end), defaultShareReplay());
|
|
4882
|
-
this.dataToShow$ = combineLatest([this.dataSrc,
|
|
5001
|
+
this.dataToShow$ = combineLatest([this.dataSrc, dataSize$])
|
|
4883
5002
|
.pipe(map$1(([data, size]) => data.slice(size.start, size.end)))
|
|
4884
5003
|
.pipe(defaultShareReplay());
|
|
4885
5004
|
}
|
|
4886
|
-
#viewType$;
|
|
4887
|
-
#dataSize$;
|
|
4888
5005
|
dataToShow$;
|
|
4889
5006
|
connect() {
|
|
4890
5007
|
if (!this.subscription) {
|
|
@@ -4892,7 +5009,6 @@ class TableBuilderDataSource extends MatTableDataSource {
|
|
|
4892
5009
|
this.data = data;
|
|
4893
5010
|
});
|
|
4894
5011
|
}
|
|
4895
|
-
this.#viewableData$.next(this.dataToShow$);
|
|
4896
5012
|
return super.connect();
|
|
4897
5013
|
}
|
|
4898
5014
|
disconnect() {
|
|
@@ -4908,17 +5024,55 @@ class TableContainerComponent {
|
|
|
4908
5024
|
props = { ...defaultProps };
|
|
4909
5025
|
dataSubject = new ReplaySubject(1);
|
|
4910
5026
|
state = inject(TableStore);
|
|
5027
|
+
dataStore = inject(DataStore);
|
|
4911
5028
|
config = inject(TableBuilderConfigToken);
|
|
4912
5029
|
exportToCsvService = inject((ExportToCsvService));
|
|
4913
5030
|
wrapper = inject(TableWrapperDirective, { optional: true });
|
|
4914
5031
|
stateService = inject(TableBuilderStateStore);
|
|
4915
5032
|
injector = inject(Injector);
|
|
5033
|
+
filterDirectives = contentChildren(TableFilterDirective, { descendants: true });
|
|
5034
|
+
customFilterDirectives = contentChildren(TableCustomFilterDirective, { descendants: true });
|
|
5035
|
+
allFilterDirectives = computed(() => {
|
|
5036
|
+
if (this.wrapper) {
|
|
5037
|
+
return [...this.filterDirectives(), ...this.customFilterDirectives(), ...this.wrapper.$registrations()];
|
|
5038
|
+
}
|
|
5039
|
+
{
|
|
5040
|
+
return [...this.filterDirectives(), ...this.customFilterDirectives()];
|
|
5041
|
+
}
|
|
5042
|
+
});
|
|
5043
|
+
tableState = toSignal(this.state.state$.pipe(filter(stateIs(InitializationState.LoadedFromStore))));
|
|
5044
|
+
allFilterDirectivesEffect = effect(() => {
|
|
5045
|
+
const state = this.tableState();
|
|
5046
|
+
untracked(() => {
|
|
5047
|
+
if (state) {
|
|
5048
|
+
this.allFilterDirectives().filter(f => !f.used).forEach(f => {
|
|
5049
|
+
f.used = true;
|
|
5050
|
+
if (f.savable) {
|
|
5051
|
+
var filter = state.filters[f.filterId];
|
|
5052
|
+
if (isFilterInfo(filter)) {
|
|
5053
|
+
const filterDirective = f;
|
|
5054
|
+
filterDirective.fieldType = filter.fieldType;
|
|
5055
|
+
filterDirective.filterType = filter.filterType;
|
|
5056
|
+
filterDirective.setFilterValue(filter.filterValue);
|
|
5057
|
+
filterDirective.key = filter.key;
|
|
5058
|
+
filterDirective.update();
|
|
5059
|
+
}
|
|
5060
|
+
if (isCustomFilter(filter)) {
|
|
5061
|
+
f.active = filter.active ?? false;
|
|
5062
|
+
}
|
|
5063
|
+
this.state.addFilter(f.filter$);
|
|
5064
|
+
}
|
|
5065
|
+
});
|
|
5066
|
+
}
|
|
5067
|
+
});
|
|
5068
|
+
});
|
|
4916
5069
|
paginatorComponent;
|
|
4917
5070
|
genericTable;
|
|
4918
|
-
customFilterDirectives;
|
|
4919
|
-
filterDirectives;
|
|
4920
5071
|
customRows;
|
|
4921
|
-
customCells;
|
|
5072
|
+
$customCells = contentChildren(CustomCellDirective);
|
|
5073
|
+
$myColumns = computed(() => {
|
|
5074
|
+
return this.state.$metaDataArray().map(metaData => ({ metaData, customCell: this.$customCells().find(cc => cc.customCell === metaData.key) }));
|
|
5075
|
+
});
|
|
4922
5076
|
tableElRef;
|
|
4923
5077
|
tableBuilder;
|
|
4924
5078
|
tableId;
|
|
@@ -4940,6 +5094,9 @@ class TableContainerComponent {
|
|
|
4940
5094
|
set groupHeaderTemplate(template) {
|
|
4941
5095
|
this.props.groupHeaderTemplate = template;
|
|
4942
5096
|
}
|
|
5097
|
+
set groupHeaderHeight(value) {
|
|
5098
|
+
this.props.groupHeaderHeight = value;
|
|
5099
|
+
}
|
|
4943
5100
|
trackBy;
|
|
4944
5101
|
inputFilters;
|
|
4945
5102
|
selection$ = new EventEmitter();
|
|
@@ -4954,7 +5111,6 @@ class TableContainerComponent {
|
|
|
4954
5111
|
displayData = this.displayDataSubject.pipe(switchAll(), defaultShareReplay());
|
|
4955
5112
|
$displayData = toSignal(this.displayData, { initialValue: [] });
|
|
4956
5113
|
collapseFooter$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseFooter));
|
|
4957
|
-
myColumns$;
|
|
4958
5114
|
ngOnDestroy() {
|
|
4959
5115
|
if (this.tableId) {
|
|
4960
5116
|
this.stateService.saveTableStateToLocal({ tableId: this.tableId, tableState: this.state.getSavableStateSignal() });
|
|
@@ -4967,8 +5123,8 @@ class TableContainerComponent {
|
|
|
4967
5123
|
this.paginatorComponent?.paginator?.lastPage();
|
|
4968
5124
|
}
|
|
4969
5125
|
resetState() {
|
|
4970
|
-
this.customFilterDirectives.forEach(cf => cf.reset());
|
|
4971
|
-
this.filterDirectives.forEach(cf => cf.reset());
|
|
5126
|
+
this.customFilterDirectives().forEach(cf => cf.reset());
|
|
5127
|
+
this.filterDirectives().forEach(cf => cf.reset());
|
|
4972
5128
|
this.state.resetState();
|
|
4973
5129
|
this.onStateReset.next(null);
|
|
4974
5130
|
}
|
|
@@ -5003,11 +5159,21 @@ class TableContainerComponent {
|
|
|
5003
5159
|
this.displayDataSubject.next(flatGrouped$);
|
|
5004
5160
|
this.dataSubject.next(sortedAndFilteredData$);
|
|
5005
5161
|
this.state.on(this.displayData, (data) => {
|
|
5006
|
-
this.
|
|
5162
|
+
this.dataStore.patchState({ dataLen: data.length });
|
|
5007
5163
|
});
|
|
5008
5164
|
}
|
|
5009
5165
|
ngOnInit() {
|
|
5010
|
-
const
|
|
5166
|
+
const customCells$ = toObservable(this.$customCells, { injector: this.injector });
|
|
5167
|
+
this.state.setLinkMaps(this.tableBuilder.metaData$.pipe(map(createLinkCreatorDict)));
|
|
5168
|
+
const c = customCells$.pipe(switchMap(c => c.length ? combineLatest(c.map(c => c.$metaData)) : of([])));
|
|
5169
|
+
this.state.setMetaData(combineLatest([this.tableBuilder.metaData$, c]).pipe(map(([mds, customCells]) => {
|
|
5170
|
+
mds = mds.map(this.mapArrayFieldsMetaDatas);
|
|
5171
|
+
return [
|
|
5172
|
+
...mds,
|
|
5173
|
+
...customCells.map(md => this.mergeMetaData(md, mds.find(item => item.key === md.key)))
|
|
5174
|
+
];
|
|
5175
|
+
})));
|
|
5176
|
+
const ds = new TableBuilderDataSource(this.displayData, this.state, this.dataStore);
|
|
5011
5177
|
this.state.updateState({ props: {
|
|
5012
5178
|
dataSource: ds,
|
|
5013
5179
|
...this.props
|
|
@@ -5015,6 +5181,24 @@ class TableContainerComponent {
|
|
|
5015
5181
|
this.initializeState();
|
|
5016
5182
|
this.initializeData();
|
|
5017
5183
|
}
|
|
5184
|
+
mergeMetaData(metaData1, metaData2) {
|
|
5185
|
+
if (!metaData2) {
|
|
5186
|
+
metaData1.noExport = true;
|
|
5187
|
+
return metaData1;
|
|
5188
|
+
}
|
|
5189
|
+
if (!metaData1.displayName)
|
|
5190
|
+
metaData1.displayName = metaData2.displayName;
|
|
5191
|
+
if (!metaData1.preSort)
|
|
5192
|
+
metaData1.preSort = metaData2.preSort;
|
|
5193
|
+
if (!metaData1.order)
|
|
5194
|
+
metaData1.order = metaData2.order;
|
|
5195
|
+
if (!metaData1.width)
|
|
5196
|
+
metaData1.width = metaData2.width;
|
|
5197
|
+
if (metaData2.fieldType)
|
|
5198
|
+
metaData1.fieldType = metaData2.fieldType;
|
|
5199
|
+
metaData1.noExport = !metaData2;
|
|
5200
|
+
return metaData1;
|
|
5201
|
+
}
|
|
5018
5202
|
exportToCsv() {
|
|
5019
5203
|
const sorted = this.data.pipe(withLatestFrom(this.state.sort$), map(([data, sorted]) => sortData(data, sorted)));
|
|
5020
5204
|
this.exportToCsvService.exportToCsv(sorted);
|
|
@@ -5025,25 +5209,12 @@ class TableContainerComponent {
|
|
|
5025
5209
|
};
|
|
5026
5210
|
collapseAllGroups = () => this.state.collapseAll();
|
|
5027
5211
|
ngAfterContentInit() {
|
|
5028
|
-
this.initializeColumns();
|
|
5029
5212
|
this.state.runOnceWhen(stateIs(InitializationState.LoadedFromStore), state => {
|
|
5030
5213
|
this.addFilterDirectives(state);
|
|
5031
5214
|
this.state.updateState({ initializationState: InitializationState.Ready });
|
|
5032
5215
|
});
|
|
5033
5216
|
}
|
|
5034
|
-
|
|
5035
|
-
const customCellMap = new Map(this.customCells.map(cc => [cc.customCell, cc]));
|
|
5036
|
-
this.state.setMetaData(this.tableBuilder.metaData$.pipe(map((mds) => {
|
|
5037
|
-
mds = mds.map(this.mapMetaDatas);
|
|
5038
|
-
return [
|
|
5039
|
-
...mds,
|
|
5040
|
-
...this.customCells.map(cc => cc.getMetaData(mds.find(item => item.key === cc.customCell)))
|
|
5041
|
-
];
|
|
5042
|
-
})));
|
|
5043
|
-
this.state.setLinkMaps(this.tableBuilder.metaData$.pipe(map(createLinkCreatorDict)));
|
|
5044
|
-
this.myColumns$ = this.state.metaDataArray$.pipe(mapArray(metaData => ({ metaData, customCell: customCellMap.get(metaData.key) })), defaultShareReplay());
|
|
5045
|
-
}
|
|
5046
|
-
mapMetaDatas = (meta) => {
|
|
5217
|
+
mapArrayFieldsMetaDatas = (meta) => {
|
|
5047
5218
|
if (meta.fieldType === FieldType.Array) {
|
|
5048
5219
|
const additional = { ...meta.additional };
|
|
5049
5220
|
additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
|
|
@@ -5054,33 +5225,9 @@ class TableContainerComponent {
|
|
|
5054
5225
|
};
|
|
5055
5226
|
collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
|
|
5056
5227
|
addFilterDirectives = (state) => {
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5060
|
-
}
|
|
5061
|
-
const customFilters = [];
|
|
5062
|
-
allFilterDirectives.filter(f => !f.used).forEach(f => {
|
|
5063
|
-
f.used = true;
|
|
5064
|
-
if (f.savable) {
|
|
5065
|
-
var filter = state.filters[f.filterId];
|
|
5066
|
-
if (isFilterInfo(filter)) {
|
|
5067
|
-
const filterDirective = f;
|
|
5068
|
-
filterDirective.fieldType = filter.fieldType;
|
|
5069
|
-
filterDirective.filterType = filter.filterType;
|
|
5070
|
-
filterDirective.setFilterValue(filter.filterValue);
|
|
5071
|
-
filterDirective.key = filter.key;
|
|
5072
|
-
filterDirective.update();
|
|
5073
|
-
}
|
|
5074
|
-
if (isCustomFilter(filter)) {
|
|
5075
|
-
f.active = filter.active ?? false;
|
|
5076
|
-
}
|
|
5077
|
-
this.state.addFilter(f.filter$);
|
|
5078
|
-
}
|
|
5079
|
-
else {
|
|
5080
|
-
customFilters.push(f);
|
|
5081
|
-
}
|
|
5082
|
-
});
|
|
5083
|
-
const customFilters$ = from(customFilters.map(cf => cf.filter$)).pipe(mergeAll$1(), scan$1((a, b) => {
|
|
5228
|
+
const customFilters$ = toObservable(this.allFilterDirectives, { injector: this.injector }).pipe(mergeMap(customerFilters => customerFilters
|
|
5229
|
+
.filter(filter => !filter.savable)
|
|
5230
|
+
.map(filter => filter.filter$)), mergeAll(), scan$1((a, b) => {
|
|
5084
5231
|
if (b.active) {
|
|
5085
5232
|
a[b.filterId] = isCustomFilter(b) ? b.predicate : createFilterFunc(b);
|
|
5086
5233
|
}
|
|
@@ -5095,29 +5242,20 @@ class TableContainerComponent {
|
|
|
5095
5242
|
};
|
|
5096
5243
|
$useVirtual = this.state.$isVirtual;
|
|
5097
5244
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5098
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "
|
|
5245
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", groupHeaderHeight: "groupHeaderHeight", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], queries: [{ propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true, isSignal: true }, { propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true, isSignal: true }, { propertyName: "$customCells", predicate: CustomCellDirective, isSignal: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "customRows", predicate: MatRowDef }], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }, { propertyName: "genericTable", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"table-wrapper\">\r\n @if($useVirtual())\r\n {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n </tb-virtual-scroll-container>\r\n }\r\n @else\r\n {\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n }\r\n\r\n </div>\r\n @if(tableSettings.usePaginator)\r\n {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [data$]=\"data\" [tableElRef]=\"tableElRef\" />\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (tableId) {\r\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n <span>Profiles</span>\r\n </button>\r\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.table-wrapper{overflow-x:auto}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "pipe", type: i1$8.AsyncPipe, name: "async" }, { kind: "directive", type: i1$8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PaginatorComponent, selector: "tb-paginator", inputs: ["data$", "tableElRef"] }, { kind: "directive", type: i3$3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "displayData", "data", "rows", "columnBuilders", "columnInfos"], outputs: ["selection$"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: ProfilesMenuComponent, selector: "tb-profiles-menu", inputs: ["$tableId"], outputs: ["onSaveState"] }, { kind: "ngmodule", type: i3$1.MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i4$2.MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i2.MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i4$1.MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: VirtualScrollContainer, selector: "tb-virtual-scroll-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5099
5246
|
}
|
|
5100
5247
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, decorators: [{
|
|
5101
5248
|
type: Component,
|
|
5102
|
-
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\n\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\n <div class=\"header-wrapper\">\n <div class=\"title\">\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\n <ng-content select=\".tb-header-title\"/>\n }\n @if((state.groupByKeys$ | async)?.length){\n <group-by-list />\n }\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list />\n @if (!tableSettings.hideHeader) {\n @if (!(collapseHeader$ | async)) {\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n @else {\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n }\n\n </div>\n </div>\n <div class=\"table-wrapper\">\n @if($useVirtual())\n {\n <tb-virtual-scroll-container>\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData
|
|
5249
|
+
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"table-wrapper\">\r\n @if($useVirtual())\r\n {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n </tb-virtual-scroll-container>\r\n }\r\n @else\r\n {\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n }\r\n\r\n </div>\r\n @if(tableSettings.usePaginator)\r\n {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [data$]=\"data\" [tableElRef]=\"tableElRef\" />\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (tableId) {\r\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n <span>Profiles</span>\r\n </button>\r\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.table-wrapper{overflow-x:auto}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"] }]
|
|
5103
5250
|
}], propDecorators: { paginatorComponent: [{
|
|
5104
5251
|
type: ViewChild,
|
|
5105
5252
|
args: [PaginatorComponent]
|
|
5106
5253
|
}], genericTable: [{
|
|
5107
5254
|
type: ViewChild,
|
|
5108
5255
|
args: [GenericTableComponent]
|
|
5109
|
-
}], customFilterDirectives: [{
|
|
5110
|
-
type: ContentChildren,
|
|
5111
|
-
args: [TableCustomFilterDirective, { descendants: true }]
|
|
5112
|
-
}], filterDirectives: [{
|
|
5113
|
-
type: ContentChildren,
|
|
5114
|
-
args: [TableFilterDirective, { descendants: true }]
|
|
5115
5256
|
}], customRows: [{
|
|
5116
5257
|
type: ContentChildren,
|
|
5117
5258
|
args: [MatRowDef]
|
|
5118
|
-
}], customCells: [{
|
|
5119
|
-
type: ContentChildren,
|
|
5120
|
-
args: [CustomCellDirective]
|
|
5121
5259
|
}], tableElRef: [{
|
|
5122
5260
|
type: ContentChild,
|
|
5123
5261
|
args: ['table', { read: ElementRef }]
|
|
@@ -5138,6 +5276,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
5138
5276
|
type: Input
|
|
5139
5277
|
}], groupHeaderTemplate: [{
|
|
5140
5278
|
type: Input
|
|
5279
|
+
}], groupHeaderHeight: [{
|
|
5280
|
+
type: Input
|
|
5141
5281
|
}], trackBy: [{
|
|
5142
5282
|
type: Input
|
|
5143
5283
|
}], inputFilters: [{
|
|
@@ -5294,7 +5434,7 @@ class TableBuilder {
|
|
|
5294
5434
|
this.settings = this.coerceSettingsToObservable(settings)
|
|
5295
5435
|
.pipe(map(sett => new GeneralTableSettings(sett)), defaultShareReplay());
|
|
5296
5436
|
this.data$ = this.coerceToObservable(data, this.settings)
|
|
5297
|
-
.pipe(defaultShareReplay());
|
|
5437
|
+
.pipe(notNull(), defaultShareReplay());
|
|
5298
5438
|
this.metaData$ = metaData ?
|
|
5299
5439
|
this.coerceToObservable(metaData, this.settings).pipe(defaultShareReplay())
|
|
5300
5440
|
:
|
|
@@ -5423,11 +5563,11 @@ class ActionStateSpinnerComponent {
|
|
|
5423
5563
|
this.serverActionStatus$ = this.status$.pipe(delayOn(a => a.status === serverStatusTypes.inProgress, 500));
|
|
5424
5564
|
}
|
|
5425
5565
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ActionStateSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5426
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ActionStateSpinnerComponent, isStandalone: true, selector: "lib-action-state-spinner", inputs: { status$: "status$" }, ngImport: i0, template: "@if((serverActionStatus$ | async)?.status === serverStatusTypes.inProgress){\n <div id=\"blocker\">\n <mat-spinner class=\"spinner\" [diameter]=\"200\" />\n </div>\n}\n\n", styles: ["#blocker{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0e0d0d69;z-index:999999}.spinner{position:absolute;top:50%;left:40%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$a.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
5566
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ActionStateSpinnerComponent, isStandalone: true, selector: "lib-action-state-spinner", inputs: { status$: "status$" }, ngImport: i0, template: "@if((serverActionStatus$ | async)?.status === serverStatusTypes.inProgress){\r\n <div id=\"blocker\">\r\n <mat-spinner class=\"spinner\" [diameter]=\"200\" />\r\n </div>\r\n}\r\n\r\n", styles: ["#blocker{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0e0d0d69;z-index:999999}.spinner{position:absolute;top:50%;left:40%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$a.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
5427
5567
|
}
|
|
5428
5568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ActionStateSpinnerComponent, decorators: [{
|
|
5429
5569
|
type: Component,
|
|
5430
|
-
args: [{ selector: 'lib-action-state-spinner', standalone: true, imports: [AsyncPipe, MatProgressSpinnerModule], template: "@if((serverActionStatus$ | async)?.status === serverStatusTypes.inProgress){\n <div id=\"blocker\">\n <mat-spinner class=\"spinner\" [diameter]=\"200\" />\n </div>\n}\n\n", styles: ["#blocker{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0e0d0d69;z-index:999999}.spinner{position:absolute;top:50%;left:40%;transform:translate(-50%,-50%)}\n"] }]
|
|
5570
|
+
args: [{ selector: 'lib-action-state-spinner', standalone: true, imports: [AsyncPipe, MatProgressSpinnerModule], template: "@if((serverActionStatus$ | async)?.status === serverStatusTypes.inProgress){\r\n <div id=\"blocker\">\r\n <mat-spinner class=\"spinner\" [diameter]=\"200\" />\r\n </div>\r\n}\r\n\r\n", styles: ["#blocker{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0e0d0d69;z-index:999999}.spinner{position:absolute;top:50%;left:40%;transform:translate(-50%,-50%)}\n"] }]
|
|
5431
5571
|
}], propDecorators: { status$: [{
|
|
5432
5572
|
type: Input
|
|
5433
5573
|
}] } });
|
|
@@ -5529,5 +5669,5 @@ function provideActionableSelector() {
|
|
|
5529
5669
|
* Generated bundle index. Do not edit.
|
|
5530
5670
|
*/
|
|
5531
5671
|
|
|
5532
|
-
export { ActionStateSpinnerComponent, ActionStateUiModule, ActionStatus, AppStatusState, ArrayStyle, AutoFocusDirective, CancellationToken, ClickEmitterDirective, ClickSubjectDirective, ConditionalClassesDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, GroupByListComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestModule, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, MatButtonToggleFilterDirective, MatCheckboxTbFilterDirective, MatOptionTbFilterDirective, MatRadioButtonTbFilterDirective, MatSlideToggleGroupDirective, MatSlideToggleTbFilterDirective, MatTableObservableDataSource, MultiSortDirective, NgrxExtModule, NotPersistedTableSettings, PaginatorComponent, PersistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, Subjectifier, Subscriber, TableBuilder, TableBuilderConfigToken, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableCustomFilterDirective, TableCustomFilterDirectiveBase, TableFilterDirective, TableFilterStringContainsDirective, TableSettings, TableWrapperDirective, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, TbSelectedFilterDirective, TrimWhitespaceDirective, UtilitiesModule, VirtualScrollOptions, actionStatusReducer, chainRequest, clearActionableSelectorRequestCache, combineArrays, createActionableSelector, createFailure, createRequestor, createSuccess, defaultFilter, defaultShareReplay, delayOn, filterArray, getRequestorBody, getRequestorStatus, getStatusState, httpRequest, httpRequestor, inProgress, initialState, isDifferent, isErrorState, isSuccessOrErrorState, isSuccessState, mapArray, mapError, metaDataArrToDict, notNull, notStarted, onWait, onceWhen, previousAndCurrent, provideActionableSelector, provideTableBuilder, selectAll, selectEntities, selectEntity, selectIds, selectTotal, serverStatusTypes, setUpStoreFactory, skipOneWhen, spaceCase, startWithIfEmpty, statusAdapter, statusIsSuccessOrInProgress, subscriber, switchOff, tapError, tapSuccess };
|
|
5672
|
+
export { ActionStateSpinnerComponent, ActionStateUiModule, ActionStatus, AppStatusState, ArrayStyle, AutoFocusDirective, CancellationToken, ClickEmitterDirective, ClickSubjectDirective, ConditionalClassesDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DefaultVirtualScrollOptions, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FilterTypes, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, GroupByListComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestModule, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, MatButtonToggleFilterDirective, MatCheckboxTbFilterDirective, MatOptionTbFilterDirective, MatRadioButtonTbFilterDirective, MatSlideToggleGroupDirective, MatSlideToggleTbFilterDirective, MatTableObservableDataSource, MultiSortDirective, NgrxExtModule, NotPersistedTableSettings, PaginatorComponent, PersistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, Subjectifier, Subscriber, TableBuilder, TableBuilderConfigToken, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableCustomFilterDirective, TableCustomFilterDirectiveBase, TableFilterDirective, TableFilterStringContainsDirective, TableSettings, TableWrapperDirective, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, TbSelectedFilterDirective, TrimWhitespaceDirective, UtilitiesModule, VirtualScrollOptions, actionStatusReducer, chainRequest, clearActionableSelectorRequestCache, combineArrays, createActionableSelector, createFailure, createRequestor, createSuccess, defaultFilter, defaultShareReplay, delayOn, filterArray, getRequestorBody, getRequestorStatus, getStatusState, httpRequest, httpRequestor, inProgress, initialState, isDifferent, isErrorState, isSuccessOrErrorState, isSuccessState, mapArray, mapError, metaDataArrToDict, notNull, notStarted, onWait, onceWhen, previousAndCurrent, provideActionableSelector, provideTableBuilder, selectAll, selectEntities, selectEntity, selectIds, selectTotal, serverStatusTypes, setUpStoreFactory, skipOneWhen, spaceCase, startWithIfEmpty, statusAdapter, statusIsSuccessOrInProgress, subscriber, switchOff, tapError, tapSuccess, wrapInArr };
|
|
5533
5673
|
//# sourceMappingURL=one-paragon-angular-utilities.mjs.map
|