@stemy/ngx-utils 19.2.11 → 19.2.13
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/fesm2022/stemy-ngx-utils.mjs +492 -20
- package/fesm2022/stemy-ngx-utils.mjs.map +1 -1
- package/ngx-utils/common-types.d.ts +26 -2
- package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +2 -2
- package/ngx-utils/components/fake-module/fake-module.component.d.ts +5 -0
- package/ngx-utils/directives/dropdown-toggle.directive.d.ts +15 -0
- package/ngx-utils/directives/dropdown.directive.d.ts +27 -0
- package/ngx-utils/directives/dynamic-table-template.directive.d.ts +1 -1
- package/ngx-utils/ngx-utils.imports.d.ts +8 -5
- package/ngx-utils/ngx-utils.module.d.ts +15 -12
- package/ngx-utils/services/component-loader.service.d.ts +23 -0
- package/ngx-utils/services/socket.service.d.ts +24 -0
- package/ngx-utils/utils/misc.d.ts +6 -0
- package/ngx-utils/utils/socket-client.d.ts +32 -0
- package/package.json +1 -1
- package/public_api.d.ts +8 -3
- package/ngx-utils/directives/toggle.directive.d.ts +0 -27
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, Injector, EventEmitter, isDevMode, ErrorHandler, NgZone, Pipe, Directive, Input, Output, HostBinding, HostListener, forwardRef, Component, ViewEncapsulation, ContentChild, ViewChild, ContentChildren, APP_INITIALIZER, makeEnvironmentProviders, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, Injector, EventEmitter, isDevMode, ErrorHandler, createComponent, NgZone, Pipe, Directive, Input, Output, HostBinding, HostListener, forwardRef, Component, ViewEncapsulation, ContentChild, ViewChild, ContentChildren, APP_INITIALIZER, makeEnvironmentProviders, NgModule } from '@angular/core';
|
|
3
3
|
import 'reflect-metadata';
|
|
4
4
|
import * as i2 from '@angular/router';
|
|
5
|
-
import { ActivatedRouteSnapshot, Scroll, NavigationEnd, DefaultUrlSerializer, UrlTree, UrlSegmentGroup, UrlSegment, UrlSerializer } from '@angular/router';
|
|
5
|
+
import { ActivatedRouteSnapshot, Scroll, NavigationEnd, Router, DefaultUrlSerializer, UrlTree, UrlSegmentGroup, UrlSegment, UrlSerializer, ROUTES } from '@angular/router';
|
|
6
6
|
import { BehaviorSubject, Observable, firstValueFrom, Subject, Subscription, from, TimeoutError, combineLatest, lastValueFrom } from 'rxjs';
|
|
7
7
|
import { skipWhile, debounceTime, distinctUntilChanged, map, filter, mergeMap, timeout } from 'rxjs/operators';
|
|
8
8
|
import * as i1$3 from '@angular/common';
|
|
@@ -391,6 +391,8 @@ var StorageMode;
|
|
|
391
391
|
})(StorageMode || (StorageMode = {}));
|
|
392
392
|
const TOASTER_SERVICE = new InjectionToken("toaster-service");
|
|
393
393
|
const DIALOG_SERVICE = new InjectionToken("dialog-service");
|
|
394
|
+
// --- Socket service ---
|
|
395
|
+
const SOCKET_IO_PATH = new InjectionToken("socket-io-path");
|
|
394
396
|
const PROMISE_SERVICE = new InjectionToken("promise-service");
|
|
395
397
|
const WASI_IMPLEMENTATION = new InjectionToken("wasi-implementation");
|
|
396
398
|
// --- Reflect utils ---
|
|
@@ -476,6 +478,8 @@ const API_SERVICE = new InjectionToken("api-service");
|
|
|
476
478
|
// --- Resource if ---
|
|
477
479
|
class ResourceIfContext {
|
|
478
480
|
}
|
|
481
|
+
const DYNAMIC_ENTRY_COMPONENTS = new InjectionToken("dynamic-entry-components");
|
|
482
|
+
const DYNAMIC_MODULE_INFO = new InjectionToken("dynamic-module-info");
|
|
479
483
|
// --- ConfigService ---
|
|
480
484
|
const APP_BASE_URL = new InjectionToken("app-base-url");
|
|
481
485
|
class IConfiguration {
|
|
@@ -2003,6 +2007,62 @@ function checkTransitions(el, cb) {
|
|
|
2003
2007
|
end();
|
|
2004
2008
|
}, 100);
|
|
2005
2009
|
}
|
|
2010
|
+
function getComponentDef(type) {
|
|
2011
|
+
const def = type["ɵcmp"];
|
|
2012
|
+
if (!def) {
|
|
2013
|
+
throw new Error(`No Angular definition found for ${type.name}`);
|
|
2014
|
+
}
|
|
2015
|
+
return def;
|
|
2016
|
+
}
|
|
2017
|
+
// Helper function to match a search selector to a stored selector
|
|
2018
|
+
function parseSelector(selector) {
|
|
2019
|
+
if (Array.isArray(selector)) {
|
|
2020
|
+
if (selector.length !== 1 && selector.length !== 3) {
|
|
2021
|
+
throw new Error("CSSSelector should contain 1 or 3 parts!");
|
|
2022
|
+
}
|
|
2023
|
+
if (selector.some(t => typeof t !== "string")) {
|
|
2024
|
+
throw new Error("CSSSelector parts can only be strings");
|
|
2025
|
+
}
|
|
2026
|
+
return selector;
|
|
2027
|
+
}
|
|
2028
|
+
if (selector.indexOf("#") > 0) {
|
|
2029
|
+
const parts = selector.split("#");
|
|
2030
|
+
selector = `${parts[0]}[id=${parts[1]}]`;
|
|
2031
|
+
}
|
|
2032
|
+
if (selector.indexOf(".") > 0) {
|
|
2033
|
+
const parts = selector.split(".");
|
|
2034
|
+
selector = `${parts[0]}[class=${parts[1]}]`;
|
|
2035
|
+
}
|
|
2036
|
+
const start = selector.indexOf("[");
|
|
2037
|
+
const end = Math.max(selector.indexOf("]"), Math.min(selector.length, start + 1));
|
|
2038
|
+
if (start >= 0) {
|
|
2039
|
+
const parts = selector.substring(start + 1, end).split("=");
|
|
2040
|
+
return [
|
|
2041
|
+
selector.substring(0, start),
|
|
2042
|
+
parts[0],
|
|
2043
|
+
parts[1] || ""
|
|
2044
|
+
];
|
|
2045
|
+
}
|
|
2046
|
+
return [selector];
|
|
2047
|
+
}
|
|
2048
|
+
function selectorMatchesList(list, selector) {
|
|
2049
|
+
for (const item of list) {
|
|
2050
|
+
if (selector.length === item.length && selector.every((s, i) => s === item[i])) {
|
|
2051
|
+
return true;
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
return false;
|
|
2055
|
+
}
|
|
2056
|
+
function provideEntryComponents(components, moduleId) {
|
|
2057
|
+
return {
|
|
2058
|
+
provide: DYNAMIC_ENTRY_COMPONENTS,
|
|
2059
|
+
useValue: {
|
|
2060
|
+
components,
|
|
2061
|
+
moduleId
|
|
2062
|
+
},
|
|
2063
|
+
multi: true
|
|
2064
|
+
};
|
|
2065
|
+
}
|
|
2006
2066
|
|
|
2007
2067
|
class TimerUtils {
|
|
2008
2068
|
static createTimeout(func, time) {
|
|
@@ -2194,6 +2254,129 @@ class SetUtils {
|
|
|
2194
2254
|
}
|
|
2195
2255
|
}
|
|
2196
2256
|
|
|
2257
|
+
function uuid() {
|
|
2258
|
+
if (typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.getRandomValues !== "undefined") {
|
|
2259
|
+
const buf = new Uint16Array(8);
|
|
2260
|
+
window.crypto.getRandomValues(buf);
|
|
2261
|
+
return Array.from(buf).map(pad4).join("");
|
|
2262
|
+
}
|
|
2263
|
+
return new Array(8).fill(0).map(random4).join("");
|
|
2264
|
+
}
|
|
2265
|
+
function pad4(num, index) {
|
|
2266
|
+
const prefix = 1 < index && index < 6 ? "-" : "";
|
|
2267
|
+
let ret = num.toString(16);
|
|
2268
|
+
while (ret.length < 4) {
|
|
2269
|
+
ret = "0" + ret;
|
|
2270
|
+
}
|
|
2271
|
+
return prefix + ret;
|
|
2272
|
+
}
|
|
2273
|
+
function random4(_, index) {
|
|
2274
|
+
const prefix = 1 < index && index < 6 ? "-" : "";
|
|
2275
|
+
return prefix + Math.floor((1 + Math.random()) * 0x10000)
|
|
2276
|
+
.toString(16)
|
|
2277
|
+
.substring(1);
|
|
2278
|
+
}
|
|
2279
|
+
class SocketClient {
|
|
2280
|
+
get id() {
|
|
2281
|
+
return this.open ? this.sid : null;
|
|
2282
|
+
}
|
|
2283
|
+
constructor(url, ioLoader) {
|
|
2284
|
+
this.url = url;
|
|
2285
|
+
this.ioLoader = ioLoader;
|
|
2286
|
+
this.status = new BehaviorSubject(false);
|
|
2287
|
+
this.channels = new Map([
|
|
2288
|
+
["connect", new Subject()],
|
|
2289
|
+
["disconnect", new Subject()],
|
|
2290
|
+
["error", new Subject()]
|
|
2291
|
+
]);
|
|
2292
|
+
this.responseHandlers = new Map();
|
|
2293
|
+
this.sid = null;
|
|
2294
|
+
this.open = false;
|
|
2295
|
+
}
|
|
2296
|
+
connect(extraHeaders = {}) {
|
|
2297
|
+
if (this.ws)
|
|
2298
|
+
return;
|
|
2299
|
+
const url = new URL(this.url);
|
|
2300
|
+
this.factory = this.factory || this.ioLoader();
|
|
2301
|
+
this.ws = new Promise((resolve, reject) => {
|
|
2302
|
+
this.factory.then(io => {
|
|
2303
|
+
const protocol = url.protocol.replace("http", "ws");
|
|
2304
|
+
const ws = io(`${protocol}//${url.host}`, {
|
|
2305
|
+
extraHeaders,
|
|
2306
|
+
timeout: 5000,
|
|
2307
|
+
path: url.pathname
|
|
2308
|
+
});
|
|
2309
|
+
console.log(`socket connecting to: ${protocol}//${url.host}`, url.pathname);
|
|
2310
|
+
ws.on(`connect`, () => {
|
|
2311
|
+
console.log(`socket connected`);
|
|
2312
|
+
this.open = true;
|
|
2313
|
+
this.sid = ws.id;
|
|
2314
|
+
this.status.next(true);
|
|
2315
|
+
});
|
|
2316
|
+
ws.on(`disconnect`, () => {
|
|
2317
|
+
this.open = false;
|
|
2318
|
+
this.status.next(false);
|
|
2319
|
+
});
|
|
2320
|
+
Object.keys(this.channels).map(event => {
|
|
2321
|
+
ws.on(event, (data) => {
|
|
2322
|
+
this.handleResponse(event, data);
|
|
2323
|
+
this.channels[event].next(data);
|
|
2324
|
+
});
|
|
2325
|
+
});
|
|
2326
|
+
resolve(ws);
|
|
2327
|
+
}, reject);
|
|
2328
|
+
});
|
|
2329
|
+
}
|
|
2330
|
+
disconnect() {
|
|
2331
|
+
if (!this.ws)
|
|
2332
|
+
return;
|
|
2333
|
+
this.ws.then(ws => ws.disconnect());
|
|
2334
|
+
this.ws = null;
|
|
2335
|
+
}
|
|
2336
|
+
subscribe(event, cb) {
|
|
2337
|
+
if (!this.channels[event]) {
|
|
2338
|
+
this.channels[event] = new Subject();
|
|
2339
|
+
this.ws?.then(ws => {
|
|
2340
|
+
ws.on(event, (data) => {
|
|
2341
|
+
this.handleResponse(event, data);
|
|
2342
|
+
this.channels[event].next(data);
|
|
2343
|
+
});
|
|
2344
|
+
});
|
|
2345
|
+
}
|
|
2346
|
+
return this.channels[event].subscribe(cb);
|
|
2347
|
+
}
|
|
2348
|
+
emit(event, content) {
|
|
2349
|
+
this.ws.then(ws => ws.emit(event, content));
|
|
2350
|
+
}
|
|
2351
|
+
async request(event, content) {
|
|
2352
|
+
const id = uuid();
|
|
2353
|
+
const ws = await this.ws;
|
|
2354
|
+
const promise = new Promise((resolve, reject) => {
|
|
2355
|
+
this.responseHandlers.set(id, { resolve, reject });
|
|
2356
|
+
setTimeout(() => {
|
|
2357
|
+
this.responseHandlers.delete(id);
|
|
2358
|
+
reject(`Timeout for ${event} request ${JSON.stringify(content)}`);
|
|
2359
|
+
}, 5000);
|
|
2360
|
+
});
|
|
2361
|
+
ws.emit(event, { ...content, immediate_response_id: id });
|
|
2362
|
+
return promise;
|
|
2363
|
+
}
|
|
2364
|
+
handleResponse(event, content) {
|
|
2365
|
+
if (typeof content !== "object" || Array.isArray(content) || content instanceof Date)
|
|
2366
|
+
return;
|
|
2367
|
+
const id = content.immediate_response_id;
|
|
2368
|
+
const handler = this.responseHandlers.get(id);
|
|
2369
|
+
if (!handler)
|
|
2370
|
+
return;
|
|
2371
|
+
this.responseHandlers.delete(id);
|
|
2372
|
+
if (event === "error") {
|
|
2373
|
+
handler.reject(content);
|
|
2374
|
+
return;
|
|
2375
|
+
}
|
|
2376
|
+
handler.resolve(content);
|
|
2377
|
+
}
|
|
2378
|
+
}
|
|
2379
|
+
|
|
2197
2380
|
class UniqueUtils {
|
|
2198
2381
|
static uuid() {
|
|
2199
2382
|
if (typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.getRandomValues !== "undefined") {
|
|
@@ -3727,6 +3910,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
3727
3910
|
args: [LANGUAGE_SERVICE]
|
|
3728
3911
|
}] }] });
|
|
3729
3912
|
|
|
3913
|
+
class ComponentLoaderService {
|
|
3914
|
+
get injector() {
|
|
3915
|
+
return this.ngModule.injector;
|
|
3916
|
+
}
|
|
3917
|
+
constructor(appRef, ngModule, rootElement, moduleRegistry) {
|
|
3918
|
+
this.appRef = appRef;
|
|
3919
|
+
this.ngModule = ngModule;
|
|
3920
|
+
this.rootElement = rootElement;
|
|
3921
|
+
this.typeMap = [];
|
|
3922
|
+
this.moduleRegistry = moduleRegistry || [];
|
|
3923
|
+
this.moduleMap = new Map();
|
|
3924
|
+
this.populateTypeMap("root", this.ngModule.injector);
|
|
3925
|
+
}
|
|
3926
|
+
findComponentType(selector, moduleId = "root") {
|
|
3927
|
+
const cssSelector = parseSelector(selector);
|
|
3928
|
+
const results = new Map();
|
|
3929
|
+
for (const item of this.typeMap) {
|
|
3930
|
+
if (selectorMatchesList(item[1], cssSelector)) {
|
|
3931
|
+
results.set(item[0], item[2]);
|
|
3932
|
+
}
|
|
3933
|
+
}
|
|
3934
|
+
const keys = Array.from(results.keys());
|
|
3935
|
+
const result = results.get(moduleId) || results.get(keys[0]);
|
|
3936
|
+
if (!result) {
|
|
3937
|
+
throw new Error(`Cannot find component by selector: ${selector} in module '${moduleId}' nor in any other module`);
|
|
3938
|
+
}
|
|
3939
|
+
return result;
|
|
3940
|
+
}
|
|
3941
|
+
async getComponentType(location) {
|
|
3942
|
+
// Find module info
|
|
3943
|
+
const moduleInfoList = this.moduleRegistry
|
|
3944
|
+
.filter(info => info.moduleId === location.moduleId);
|
|
3945
|
+
if (moduleInfoList.length > 1) {
|
|
3946
|
+
throw new Error(`Module with id '${location.moduleId}' has been declared more than once.`);
|
|
3947
|
+
}
|
|
3948
|
+
const moduleInfo = moduleInfoList[0];
|
|
3949
|
+
if (!moduleInfo) {
|
|
3950
|
+
throw new Error(`Module with id '${location.moduleId}' not found.`);
|
|
3951
|
+
}
|
|
3952
|
+
await this.loadModule(moduleInfo);
|
|
3953
|
+
return this.findComponentType(location.selector, location.moduleId);
|
|
3954
|
+
}
|
|
3955
|
+
createComponent(componentType, projectableNodes, injector, split) {
|
|
3956
|
+
if (projectableNodes) {
|
|
3957
|
+
projectableNodes = split ? projectableNodes.filter(node => {
|
|
3958
|
+
return node && node.nodeType !== Node.COMMENT_NODE;
|
|
3959
|
+
}).map(node => [node]) : [projectableNodes];
|
|
3960
|
+
}
|
|
3961
|
+
else {
|
|
3962
|
+
projectableNodes = [];
|
|
3963
|
+
}
|
|
3964
|
+
return createComponent(componentType, {
|
|
3965
|
+
environmentInjector: this.appRef.injector,
|
|
3966
|
+
elementInjector: injector || this.injector,
|
|
3967
|
+
projectableNodes
|
|
3968
|
+
});
|
|
3969
|
+
}
|
|
3970
|
+
bootstrap(componentType, rootSelectorOrNode) {
|
|
3971
|
+
rootSelectorOrNode = rootSelectorOrNode || this.rootElement;
|
|
3972
|
+
return !rootSelectorOrNode ? null : this.appRef.bootstrap(componentType, rootSelectorOrNode);
|
|
3973
|
+
}
|
|
3974
|
+
attachView(viewRef) {
|
|
3975
|
+
if (!viewRef)
|
|
3976
|
+
return;
|
|
3977
|
+
this.appRef.attachView(viewRef);
|
|
3978
|
+
}
|
|
3979
|
+
detachView(viewRef) {
|
|
3980
|
+
if (!viewRef)
|
|
3981
|
+
return;
|
|
3982
|
+
this.appRef.detachView(viewRef);
|
|
3983
|
+
try {
|
|
3984
|
+
viewRef.destroy();
|
|
3985
|
+
}
|
|
3986
|
+
catch (e) {
|
|
3987
|
+
console.log(`Can't destroy view, maybe it is already destroyed?`);
|
|
3988
|
+
}
|
|
3989
|
+
}
|
|
3990
|
+
populateTypeMap(moduleId, injector) {
|
|
3991
|
+
const entries = injector.get(DYNAMIC_ENTRY_COMPONENTS) || [];
|
|
3992
|
+
if (entries.length == 0) {
|
|
3993
|
+
console.warn("Entry components not found in the module", injector);
|
|
3994
|
+
}
|
|
3995
|
+
entries.forEach(entryComponents => {
|
|
3996
|
+
entryComponents.components.forEach(type => {
|
|
3997
|
+
const def = getComponentDef(type);
|
|
3998
|
+
console.log(def.selectors, type.name);
|
|
3999
|
+
this.typeMap.push([entryComponents.moduleId || moduleId, def.selectors, type]);
|
|
4000
|
+
});
|
|
4001
|
+
});
|
|
4002
|
+
}
|
|
4003
|
+
async loadModule(moduleInfo) {
|
|
4004
|
+
if (this.moduleMap.has(moduleInfo.moduleId)) {
|
|
4005
|
+
return this.moduleMap.get(moduleInfo.moduleId);
|
|
4006
|
+
}
|
|
4007
|
+
this.moduleMap.set(moduleInfo.moduleId, new Promise(async (resolve) => {
|
|
4008
|
+
const router = this.injector.get(Router);
|
|
4009
|
+
const loader = router["navigationTransitions"].configLoader;
|
|
4010
|
+
const loaded = await firstValueFrom(loader.loadChildren(this.injector, {
|
|
4011
|
+
loadChildren: moduleInfo.loadChildren
|
|
4012
|
+
}));
|
|
4013
|
+
if (moduleInfo.routes) {
|
|
4014
|
+
router.resetConfig(moduleInfo.routes);
|
|
4015
|
+
if (moduleInfo.initialNavigation !== false) {
|
|
4016
|
+
router.initialNavigation();
|
|
4017
|
+
}
|
|
4018
|
+
}
|
|
4019
|
+
this.populateTypeMap(moduleInfo.moduleId, loaded.injector);
|
|
4020
|
+
resolve(loaded.injector);
|
|
4021
|
+
}));
|
|
4022
|
+
return this.moduleMap.get(moduleInfo.moduleId);
|
|
4023
|
+
}
|
|
4024
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService, deps: [{ token: i0.ApplicationRef }, { token: i0.NgModuleRef }, { token: ROOT_ELEMENT }, { token: DYNAMIC_MODULE_INFO, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4025
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService }); }
|
|
4026
|
+
}
|
|
4027
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService, decorators: [{
|
|
4028
|
+
type: Injectable
|
|
4029
|
+
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.NgModuleRef }, { type: HTMLElement, decorators: [{
|
|
4030
|
+
type: Inject,
|
|
4031
|
+
args: [ROOT_ELEMENT]
|
|
4032
|
+
}] }, { type: undefined, decorators: [{
|
|
4033
|
+
type: Optional
|
|
4034
|
+
}, {
|
|
4035
|
+
type: Inject,
|
|
4036
|
+
args: [DYNAMIC_MODULE_INFO]
|
|
4037
|
+
}] }] });
|
|
4038
|
+
|
|
3730
4039
|
class TranslatedUrlSerializer extends DefaultUrlSerializer {
|
|
3731
4040
|
constructor(language) {
|
|
3732
4041
|
super();
|
|
@@ -3849,6 +4158,86 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
3849
4158
|
args: [NgZone]
|
|
3850
4159
|
}] }] });
|
|
3851
4160
|
|
|
4161
|
+
class SocketService {
|
|
4162
|
+
get status() {
|
|
4163
|
+
return this.client.status;
|
|
4164
|
+
}
|
|
4165
|
+
get id() {
|
|
4166
|
+
return this.client.id;
|
|
4167
|
+
}
|
|
4168
|
+
constructor(auth, api, ioPath) {
|
|
4169
|
+
this.auth = auth;
|
|
4170
|
+
this.api = api;
|
|
4171
|
+
this.ioPath = ioPath;
|
|
4172
|
+
const url = this.api.url(this.ioPath);
|
|
4173
|
+
this.client = new SocketClient(url, async () => {
|
|
4174
|
+
let script = null;
|
|
4175
|
+
try {
|
|
4176
|
+
script = await LoaderUtils.loadScript(`${url}/socket.io.js`);
|
|
4177
|
+
}
|
|
4178
|
+
catch (e) {
|
|
4179
|
+
script?.remove();
|
|
4180
|
+
await LoaderUtils.loadScript(`https://cdn.socket.io/4.7.4/socket.io.min.js`);
|
|
4181
|
+
}
|
|
4182
|
+
return window["io"];
|
|
4183
|
+
});
|
|
4184
|
+
}
|
|
4185
|
+
withAuth(extraHeaders = {}) {
|
|
4186
|
+
this.authSub = this.auth.userChanged.subscribe(user => {
|
|
4187
|
+
if (user) {
|
|
4188
|
+
this.connect(extraHeaders);
|
|
4189
|
+
return;
|
|
4190
|
+
}
|
|
4191
|
+
this.disconnect();
|
|
4192
|
+
});
|
|
4193
|
+
if (this.auth.isAuthenticated) {
|
|
4194
|
+
this.connect(extraHeaders);
|
|
4195
|
+
}
|
|
4196
|
+
}
|
|
4197
|
+
ngOnDestroy() {
|
|
4198
|
+
this.authSub?.unsubscribe();
|
|
4199
|
+
this.disconnect();
|
|
4200
|
+
}
|
|
4201
|
+
connect(extraHeaders = {}) {
|
|
4202
|
+
if (this.authSub && this.auth.isAuthenticated) {
|
|
4203
|
+
extraHeaders = {
|
|
4204
|
+
...(extraHeaders || {}),
|
|
4205
|
+
...Object.entries(this.api.client.requestHeaders || {}).reduce((res, entry) => {
|
|
4206
|
+
res[entry[0]] = Array.isArray(entry[1]) ? entry[1].join(", ") : entry[1];
|
|
4207
|
+
return res;
|
|
4208
|
+
}, {})
|
|
4209
|
+
};
|
|
4210
|
+
}
|
|
4211
|
+
this.client.connect(extraHeaders);
|
|
4212
|
+
}
|
|
4213
|
+
disconnect() {
|
|
4214
|
+
this.client.disconnect();
|
|
4215
|
+
}
|
|
4216
|
+
subscribe(event, cb) {
|
|
4217
|
+
return this.client.subscribe(event, cb);
|
|
4218
|
+
}
|
|
4219
|
+
emit(event, content) {
|
|
4220
|
+
this.client.emit(event, content);
|
|
4221
|
+
}
|
|
4222
|
+
request(event, content) {
|
|
4223
|
+
return this.client.request(event, content);
|
|
4224
|
+
}
|
|
4225
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService, deps: [{ token: AUTH_SERVICE }, { token: API_SERVICE }, { token: SOCKET_IO_PATH }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4226
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService }); }
|
|
4227
|
+
}
|
|
4228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService, decorators: [{
|
|
4229
|
+
type: Injectable
|
|
4230
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
4231
|
+
type: Inject,
|
|
4232
|
+
args: [AUTH_SERVICE]
|
|
4233
|
+
}] }, { type: undefined, decorators: [{
|
|
4234
|
+
type: Inject,
|
|
4235
|
+
args: [API_SERVICE]
|
|
4236
|
+
}] }, { type: undefined, decorators: [{
|
|
4237
|
+
type: Inject,
|
|
4238
|
+
args: [SOCKET_IO_PATH]
|
|
4239
|
+
}] }] });
|
|
4240
|
+
|
|
3852
4241
|
class DragDropHandler {
|
|
3853
4242
|
static get(el) {
|
|
3854
4243
|
if (DragDropHandler.handlers?.has(el)) {
|
|
@@ -5129,7 +5518,7 @@ class PaginationDirective {
|
|
|
5129
5518
|
refresh(time) {
|
|
5130
5519
|
time = isNaN(time) || time <= 0 ? this.updateTime : time;
|
|
5131
5520
|
this.updateTimer.time = isNaN(time) || time <= 0 ? 100 : time;
|
|
5132
|
-
this.waitFor.then(() => {
|
|
5521
|
+
Promise.resolve(this.waitFor).then(() => {
|
|
5133
5522
|
this.updateTimer.run();
|
|
5134
5523
|
});
|
|
5135
5524
|
}
|
|
@@ -5342,7 +5731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
5342
5731
|
type: Input
|
|
5343
5732
|
}] } });
|
|
5344
5733
|
|
|
5345
|
-
class
|
|
5734
|
+
class DropdownDirective {
|
|
5346
5735
|
static { this.active = null; }
|
|
5347
5736
|
get nativeElement() {
|
|
5348
5737
|
return this.element.nativeElement;
|
|
@@ -5392,8 +5781,8 @@ class ToggleDirective {
|
|
|
5392
5781
|
};
|
|
5393
5782
|
}
|
|
5394
5783
|
ngOnDestroy() {
|
|
5395
|
-
if (
|
|
5396
|
-
|
|
5784
|
+
if (DropdownDirective.active === this) {
|
|
5785
|
+
DropdownDirective.active = null;
|
|
5397
5786
|
this.onHidden.emit(this);
|
|
5398
5787
|
}
|
|
5399
5788
|
}
|
|
@@ -5416,7 +5805,7 @@ class ToggleDirective {
|
|
|
5416
5805
|
return;
|
|
5417
5806
|
this.opened = true;
|
|
5418
5807
|
this.showEvent();
|
|
5419
|
-
|
|
5808
|
+
DropdownDirective.active = this;
|
|
5420
5809
|
// Prevent toggle from selecting an item right after it is shown
|
|
5421
5810
|
setTimeout(() => {
|
|
5422
5811
|
if (!this.opened)
|
|
@@ -5436,21 +5825,21 @@ class ToggleDirective {
|
|
|
5436
5825
|
document.removeEventListener("keydown", this.onKeyDown);
|
|
5437
5826
|
// Prevent toggle from refocus itself after it is hidden because of another toggle
|
|
5438
5827
|
setTimeout(() => {
|
|
5439
|
-
if (
|
|
5440
|
-
|
|
5828
|
+
if (DropdownDirective.active === this) {
|
|
5829
|
+
DropdownDirective.active = null;
|
|
5441
5830
|
this.nativeElement?.focus();
|
|
5442
5831
|
}
|
|
5443
5832
|
}, 10);
|
|
5444
5833
|
}
|
|
5445
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type:
|
|
5446
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type:
|
|
5834
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5835
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type: DropdownDirective, isStandalone: false, selector: "[dd],[drop-down]", inputs: { closeInside: "closeInside", keyboardHandler: "keyboardHandler", isDisabled: "isDisabled" }, outputs: { onShown: "onShown", onHidden: "onHidden", onKeyboard: "onKeyboard" }, host: { listeners: { "keydown.enter": "show($event)", "keydown.space": "show($event)" }, properties: { "class.open": "this.isOpened", "class.disabled": "this.getDisabled" } }, exportAs: ["dropdown"], ngImport: i0 }); }
|
|
5447
5836
|
}
|
|
5448
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type:
|
|
5837
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownDirective, decorators: [{
|
|
5449
5838
|
type: Directive,
|
|
5450
5839
|
args: [{
|
|
5451
5840
|
standalone: false,
|
|
5452
|
-
selector: "[
|
|
5453
|
-
exportAs: "
|
|
5841
|
+
selector: "[dd],[drop-down]",
|
|
5842
|
+
exportAs: "dropdown"
|
|
5454
5843
|
}]
|
|
5455
5844
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { closeInside: [{
|
|
5456
5845
|
type: Input
|
|
@@ -5478,6 +5867,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
5478
5867
|
args: ["keydown.space", ["$event"]]
|
|
5479
5868
|
}] } });
|
|
5480
5869
|
|
|
5870
|
+
class DropdownToggleDirective extends AsyncMethodBase {
|
|
5871
|
+
constructor(element, dropdown, toaster, cdr) {
|
|
5872
|
+
super(toaster, cdr);
|
|
5873
|
+
this.element = element;
|
|
5874
|
+
this.dropdown = dropdown;
|
|
5875
|
+
}
|
|
5876
|
+
getMethod() {
|
|
5877
|
+
return this.beforeOpen;
|
|
5878
|
+
}
|
|
5879
|
+
callMethod() {
|
|
5880
|
+
if (this.dropdown.isOpened) {
|
|
5881
|
+
this.dropdown.hide();
|
|
5882
|
+
}
|
|
5883
|
+
else if (!super.callMethod()) {
|
|
5884
|
+
this.dropdown.show();
|
|
5885
|
+
}
|
|
5886
|
+
return true;
|
|
5887
|
+
}
|
|
5888
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownToggleDirective, deps: [{ token: i0.ElementRef }, { token: DropdownDirective }, { token: TOASTER_SERVICE }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5889
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type: DropdownToggleDirective, isStandalone: false, selector: "[dropdownToggle]", inputs: { beforeOpen: "beforeOpen" }, exportAs: ["dropdown-toggle"], usesInheritance: true, ngImport: i0 }); }
|
|
5890
|
+
}
|
|
5891
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownToggleDirective, decorators: [{
|
|
5892
|
+
type: Directive,
|
|
5893
|
+
args: [{
|
|
5894
|
+
standalone: false,
|
|
5895
|
+
selector: "[dropdownToggle]",
|
|
5896
|
+
exportAs: "dropdown-toggle",
|
|
5897
|
+
}]
|
|
5898
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: DropdownDirective }, { type: undefined, decorators: [{
|
|
5899
|
+
type: Inject,
|
|
5900
|
+
args: [TOASTER_SERVICE]
|
|
5901
|
+
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { beforeOpen: [{
|
|
5902
|
+
type: Input
|
|
5903
|
+
}] } });
|
|
5904
|
+
|
|
5481
5905
|
class UnorderedListItemDirective {
|
|
5482
5906
|
get elem() {
|
|
5483
5907
|
return this.elementRef.nativeElement;
|
|
@@ -5971,11 +6395,11 @@ class DynamicTableComponent {
|
|
|
5971
6395
|
});
|
|
5972
6396
|
}
|
|
5973
6397
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DynamicTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5974
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: DynamicTableComponent, isStandalone: false, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", selected: "selected", page: "page", urlParam: "urlParam", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", filterTime: "filterTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId", titlePrefix: "titlePrefix", dragStartFn: "dragStartFn", dragEnterFn: "dragEnterFn", dropFn: "dropFn" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" toggle #sortToggle=\"toggle\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortToggle}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "directive", type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { kind: "directive", type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { kind: "directive", type: PaginationItemDirective, selector: "[paginationItem]" }, { kind: "directive", type: ToggleDirective, selector: "[toggle]", inputs: ["closeInside", "keyboardHandler", "isDisabled"], outputs: ["onShown", "onHidden", "onKeyboard"], exportAs: ["toggle"] }, { kind: "component", type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
6398
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: DynamicTableComponent, isStandalone: false, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", selected: "selected", page: "page", urlParam: "urlParam", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", filterTime: "filterTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId", titlePrefix: "titlePrefix", dragStartFn: "dragStartFn", dragEnterFn: "dragEnterFn", dropFn: "dropFn" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" dd #sortDd=\"dropdown\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortDd}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "directive", type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { kind: "directive", type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { kind: "directive", type: PaginationItemDirective, selector: "[paginationItem]" }, { kind: "directive", type: DropdownDirective, selector: "[dd],[drop-down]", inputs: ["closeInside", "keyboardHandler", "isDisabled"], outputs: ["onShown", "onHidden", "onKeyboard"], exportAs: ["dropdown"] }, { kind: "component", type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
5975
6399
|
}
|
|
5976
6400
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DynamicTableComponent, decorators: [{
|
|
5977
6401
|
type: Component,
|
|
5978
|
-
args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "dynamic-table", template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\"
|
|
6402
|
+
args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "dynamic-table", template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" dd #sortDd=\"dropdown\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortDd}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"] }]
|
|
5979
6403
|
}], ctorParameters: () => [], propDecorators: { label: [{
|
|
5980
6404
|
type: Input
|
|
5981
6405
|
}], placeholder: [{
|
|
@@ -6051,6 +6475,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
6051
6475
|
args: [DynamicTableTemplateDirective]
|
|
6052
6476
|
}] } });
|
|
6053
6477
|
|
|
6478
|
+
class FakeModuleComponent {
|
|
6479
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FakeModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6480
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: FakeModuleComponent, isStandalone: false, selector: "fake-module-component", ngImport: i0, template: "", isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
|
|
6481
|
+
}
|
|
6482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FakeModuleComponent, decorators: [{
|
|
6483
|
+
type: Component,
|
|
6484
|
+
args: [{
|
|
6485
|
+
standalone: false,
|
|
6486
|
+
encapsulation: ViewEncapsulation.None,
|
|
6487
|
+
selector: "fake-module-component",
|
|
6488
|
+
template: "",
|
|
6489
|
+
}]
|
|
6490
|
+
}] });
|
|
6491
|
+
|
|
6054
6492
|
class UnorderedListComponent {
|
|
6055
6493
|
constructor(cdr) {
|
|
6056
6494
|
this.cdr = cdr;
|
|
@@ -6385,7 +6823,8 @@ const directives = [
|
|
|
6385
6823
|
ResourceIfDirective,
|
|
6386
6824
|
StickyDirective,
|
|
6387
6825
|
StickyClassDirective,
|
|
6388
|
-
|
|
6826
|
+
DropdownDirective,
|
|
6827
|
+
DropdownToggleDirective,
|
|
6389
6828
|
UnorderedListItemDirective,
|
|
6390
6829
|
UnorderedListTemplateDirective
|
|
6391
6830
|
];
|
|
@@ -6393,6 +6832,7 @@ const directives = [
|
|
|
6393
6832
|
const components = [
|
|
6394
6833
|
DropListComponent,
|
|
6395
6834
|
DynamicTableComponent,
|
|
6835
|
+
FakeModuleComponent,
|
|
6396
6836
|
PaginationMenuComponent,
|
|
6397
6837
|
UnorderedListComponent,
|
|
6398
6838
|
UploadComponent
|
|
@@ -6416,10 +6856,12 @@ const providers = [
|
|
|
6416
6856
|
LocalHttpService,
|
|
6417
6857
|
OpenApiService,
|
|
6418
6858
|
PromiseService,
|
|
6859
|
+
SocketService,
|
|
6419
6860
|
StateService,
|
|
6420
6861
|
StaticLanguageService,
|
|
6421
6862
|
StorageService,
|
|
6422
6863
|
BaseToasterService,
|
|
6864
|
+
ComponentLoaderService,
|
|
6423
6865
|
TranslatedUrlSerializer,
|
|
6424
6866
|
UniversalService,
|
|
6425
6867
|
WasmService,
|
|
@@ -6707,6 +7149,10 @@ class NgxUtilsModule {
|
|
|
6707
7149
|
provide: RESIZE_STRATEGY,
|
|
6708
7150
|
useValue: (!config ? null : config.resizeStrategy) ?? "object",
|
|
6709
7151
|
},
|
|
7152
|
+
{
|
|
7153
|
+
provide: SOCKET_IO_PATH,
|
|
7154
|
+
useValue: (!config ? null : config.socketPath) ?? "/socket",
|
|
7155
|
+
},
|
|
6710
7156
|
{
|
|
6711
7157
|
provide: APP_INITIALIZER,
|
|
6712
7158
|
useFactory: (!config ? null : config.initializeApp) || loadConfig,
|
|
@@ -6729,11 +7175,37 @@ class NgxUtilsModule {
|
|
|
6729
7175
|
static provideUtils(config) {
|
|
6730
7176
|
return makeEnvironmentProviders(NgxUtilsModule.getProviders(config));
|
|
6731
7177
|
}
|
|
7178
|
+
static useDynamic(moduleInfo) {
|
|
7179
|
+
return {
|
|
7180
|
+
ngModule: NgxUtilsModule,
|
|
7181
|
+
providers: [
|
|
7182
|
+
{
|
|
7183
|
+
provide: ROUTES,
|
|
7184
|
+
multi: true,
|
|
7185
|
+
useValue: [
|
|
7186
|
+
{
|
|
7187
|
+
loadChildren: moduleInfo.loadChildren,
|
|
7188
|
+
matcher: AuthGuard.noRouteMatch
|
|
7189
|
+
},
|
|
7190
|
+
{
|
|
7191
|
+
component: FakeModuleComponent,
|
|
7192
|
+
matcher: AuthGuard.wildRouteMatch
|
|
7193
|
+
}
|
|
7194
|
+
]
|
|
7195
|
+
},
|
|
7196
|
+
{
|
|
7197
|
+
provide: DYNAMIC_MODULE_INFO,
|
|
7198
|
+
useValue: moduleInfo,
|
|
7199
|
+
multi: true
|
|
7200
|
+
}
|
|
7201
|
+
]
|
|
7202
|
+
};
|
|
7203
|
+
}
|
|
6732
7204
|
constructor() {
|
|
6733
7205
|
}
|
|
6734
7206
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6735
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective,
|
|
6736
|
-
FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective,
|
|
7207
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, FakeModuleComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent], imports: [CommonModule,
|
|
7208
|
+
FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, FakeModuleComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent, FormsModule] }); }
|
|
6737
7209
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
|
|
6738
7210
|
FormsModule, FormsModule] }); }
|
|
6739
7211
|
}
|
|
@@ -6763,5 +7235,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
6763
7235
|
* Generated bundle index. Do not edit.
|
|
6764
7236
|
*/
|
|
6765
7237
|
|
|
6766
|
-
export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AuthGuard, BASE_CONFIG, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, CONFIG_SERVICE, CanvasColor, CanvasUtils, ChunkPipe, Circle, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DynamicTableComponent, DynamicTableTemplateDirective, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, ErrorHandlerService, EventsService, ExtraItemPropertiesPipe, FactoryDependencies, FileSystemEntry, FileUtils, FilterPipe, FindPipe, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HttpPromise, ICON_SERVICE, IConfiguration, IconDirective, IconService, Initializer, IsTypePipe, JSONfn, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, SCRIPT_PARAMS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShiftPipe, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, TOASTER_SERVICE, TimerUtils,
|
|
7238
|
+
export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AuthGuard, BASE_CONFIG, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, CONFIG_SERVICE, CanvasColor, CanvasUtils, ChunkPipe, Circle, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DropdownDirective, DropdownToggleDirective, DynamicTableComponent, DynamicTableTemplateDirective, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, ErrorHandlerService, EventsService, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HttpPromise, ICON_SERVICE, IConfiguration, IconDirective, IconService, Initializer, IsTypePipe, JSONfn, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, SCRIPT_PARAMS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, TOASTER_SERVICE, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, Vector, WASI_IMPLEMENTATION, WasmService, cachedFactory, cancelablePromise, checkTransitions, getComponentDef, impatientPromise, parseSelector, provideEntryComponents, provideWithOptions, selectorMatchesList };
|
|
6767
7239
|
//# sourceMappingURL=stemy-ngx-utils.mjs.map
|