@trudb/tru-common-lib 0.2.535 → 0.2.539
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/trudb-tru-common-lib.mjs +205 -111
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/base-views/detail/tru-detail-view-base.d.ts +1 -0
- package/lib/components/data-grid/tru-data-grid.d.ts +1 -0
- package/lib/components/login/classes/tru-auth-strategy-provider.d.ts +2 -1
- package/lib/components/login/classes/tru-auth-windows-strategy.d.ts +9 -0
- package/lib/components/login/services/tru-auth.d.ts +1 -1
- package/lib/components/login/tru-login.d.ts +6 -2
- package/lib/services/tru-app-environment.d.ts +2 -2
- package/lib/services/tru-entity-accessor.d.ts +2 -0
- package/lib/services/tru-entity-metadata-registry.d.ts +22 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -649,6 +649,72 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
649
649
|
}]
|
|
650
650
|
}], ctorParameters: () => [] });
|
|
651
651
|
|
|
652
|
+
class TruEntityMetadataRegistry {
|
|
653
|
+
static metadataByEntity = new Map();
|
|
654
|
+
static register(entity, metadata) {
|
|
655
|
+
this.metadataByEntity.set(entity, this.normalize(metadata));
|
|
656
|
+
}
|
|
657
|
+
static get(entity) {
|
|
658
|
+
const metadata = this.metadataByEntity.get(entity);
|
|
659
|
+
return metadata ? { ...metadata } : undefined;
|
|
660
|
+
}
|
|
661
|
+
static resolve(entity) {
|
|
662
|
+
return this.get(entity) ?? this.resolveFromBreeze(entity) ?? this.resolveFromConstructorName(entity);
|
|
663
|
+
}
|
|
664
|
+
static resolveFromBreeze(entity) {
|
|
665
|
+
const entityType = entity.prototype?.entityType;
|
|
666
|
+
const entityTypeName = this.getEntityTypeName(entityType);
|
|
667
|
+
if (!entityTypeName)
|
|
668
|
+
return undefined;
|
|
669
|
+
const primaryKeyName = this.getPrimaryKeyName(entityType) ?? `${entityTypeName}Ref`;
|
|
670
|
+
return {
|
|
671
|
+
entityTypeName,
|
|
672
|
+
queryResourceName: `Query${entityTypeName}`,
|
|
673
|
+
primaryKeyName,
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
static resolveFromConstructorName(entity) {
|
|
677
|
+
const entityTypeName = this.requireText(entity.name, 'entity.name');
|
|
678
|
+
return {
|
|
679
|
+
entityTypeName,
|
|
680
|
+
queryResourceName: `Query${entityTypeName}`,
|
|
681
|
+
primaryKeyName: `${entityTypeName}Ref`,
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
static normalize(metadata) {
|
|
685
|
+
return {
|
|
686
|
+
entityTypeName: this.requireText(metadata.entityTypeName, 'entityTypeName'),
|
|
687
|
+
queryResourceName: this.requireText(metadata.queryResourceName, 'queryResourceName'),
|
|
688
|
+
primaryKeyName: this.requireText(metadata.primaryKeyName, 'primaryKeyName'),
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
static getEntityTypeName(entityType) {
|
|
692
|
+
return this.textOrUndefined(entityType?.shortName)
|
|
693
|
+
?? this.shortNameFromQualifiedName(this.textOrUndefined(entityType?.name));
|
|
694
|
+
}
|
|
695
|
+
static getPrimaryKeyName(entityType) {
|
|
696
|
+
const keyProperty = entityType?.keyProperties?.[0];
|
|
697
|
+
return this.textOrUndefined(keyProperty?.name)
|
|
698
|
+
?? this.textOrUndefined(keyProperty?.nameOnServer);
|
|
699
|
+
}
|
|
700
|
+
static shortNameFromQualifiedName(name) {
|
|
701
|
+
if (!name)
|
|
702
|
+
return undefined;
|
|
703
|
+
const unqualifiedName = name.split(':#')[0];
|
|
704
|
+
const lastDotIndex = unqualifiedName.lastIndexOf('.');
|
|
705
|
+
return this.textOrUndefined(lastDotIndex >= 0 ? unqualifiedName.substring(lastDotIndex + 1) : unqualifiedName);
|
|
706
|
+
}
|
|
707
|
+
static requireText(value, propertyName) {
|
|
708
|
+
const text = this.textOrUndefined(value);
|
|
709
|
+
if (!text)
|
|
710
|
+
throw new Error(`Missing TruDB entity metadata value: ${propertyName}`);
|
|
711
|
+
return text;
|
|
712
|
+
}
|
|
713
|
+
static textOrUndefined(value) {
|
|
714
|
+
return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
652
718
|
class MaterialModule {
|
|
653
719
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
654
720
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: MaterialModule, exports: [A11yModule,
|
|
@@ -1638,9 +1704,9 @@ class TruEntityAccessor {
|
|
|
1638
1704
|
this._breezeContext = dataContext.breezeContext;
|
|
1639
1705
|
this._entityManager = dataContext.entityManager;
|
|
1640
1706
|
}
|
|
1641
|
-
getQueryServiceName = (entity) =>
|
|
1642
|
-
|
|
1643
|
-
|
|
1707
|
+
getQueryServiceName = (entity) => TruEntityMetadataRegistry.resolve(entity).queryResourceName;
|
|
1708
|
+
getPrimaryKeyName = (entity) => TruEntityMetadataRegistry.resolve(entity).primaryKeyName;
|
|
1709
|
+
getEntityTypeName = (entity) => TruEntityMetadataRegistry.resolve(entity).entityTypeName;
|
|
1644
1710
|
warnIfMaxRecords = (entities, entityName) => {
|
|
1645
1711
|
if (entities.length >= this.appEnvironment.maxRecordCount)
|
|
1646
1712
|
this.uiNotification.warning('[' + entityName + '] has more records available than supported');
|
|
@@ -1679,7 +1745,7 @@ class TruEntityAccessor {
|
|
|
1679
1745
|
query = setupQuery(query);
|
|
1680
1746
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1681
1747
|
if (!global)
|
|
1682
|
-
this.warnIfMaxRecords(queryData.results, entity
|
|
1748
|
+
this.warnIfMaxRecords(queryData.results, this.getEntityTypeName(entity));
|
|
1683
1749
|
return queryData.results;
|
|
1684
1750
|
})));
|
|
1685
1751
|
};
|
|
@@ -1697,11 +1763,11 @@ class TruEntityAccessor {
|
|
|
1697
1763
|
};
|
|
1698
1764
|
searchByRefCacheOnlySynchronously = (entity, ref = undefined) => {
|
|
1699
1765
|
let query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
|
|
1700
|
-
query = query.where(entity
|
|
1766
|
+
query = query.where(this.getPrimaryKeyName(entity), '==', ref);
|
|
1701
1767
|
return this._entityManager.executeQueryLocally(query);
|
|
1702
1768
|
};
|
|
1703
1769
|
searchQueryChoices = (entity, setupQuery = null, goToServer = false, ref = undefined, allRecords = false, dependantEntty = undefined, hid = null) => {
|
|
1704
|
-
const pkeyName = entity
|
|
1770
|
+
const pkeyName = this.getPrimaryKeyName(entity);
|
|
1705
1771
|
let query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
|
|
1706
1772
|
if (setupQuery)
|
|
1707
1773
|
if (dependantEntty)
|
|
@@ -1709,7 +1775,7 @@ class TruEntityAccessor {
|
|
|
1709
1775
|
else
|
|
1710
1776
|
query = setupQuery(query, entity) ?? query;
|
|
1711
1777
|
if (ref)
|
|
1712
|
-
query = query.where(entity
|
|
1778
|
+
query = query.where(this.getPrimaryKeyName(entity), '==', ref);
|
|
1713
1779
|
if (!allRecords)
|
|
1714
1780
|
query = query.top(this.appEnvironment.maxRecordCount);
|
|
1715
1781
|
if (goToServer) {
|
|
@@ -1722,20 +1788,20 @@ class TruEntityAccessor {
|
|
|
1722
1788
|
}
|
|
1723
1789
|
};
|
|
1724
1790
|
searchNameValuesCacheOnly = (entity, setupQuery = null, ref = undefined) => {
|
|
1725
|
-
const pkeyName = entity
|
|
1791
|
+
const pkeyName = this.getPrimaryKeyName(entity);
|
|
1726
1792
|
let query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
|
|
1727
1793
|
if (setupQuery)
|
|
1728
1794
|
query = setupQuery(query) ?? query;
|
|
1729
1795
|
if (ref)
|
|
1730
|
-
query = query.where(entity
|
|
1796
|
+
query = query.where(this.getPrimaryKeyName(entity), '==', ref);
|
|
1731
1797
|
return of(this.formatNameValues(query, this._entityManager.executeQueryLocally(query), pkeyName));
|
|
1732
1798
|
};
|
|
1733
1799
|
searchByRef = (entity, ref) => {
|
|
1734
|
-
const pkeyName = entity
|
|
1800
|
+
const pkeyName = this.getPrimaryKeyName(entity);
|
|
1735
1801
|
var queryOptions = this._entityManager.queryOptions.using({
|
|
1736
1802
|
fetchStrategy: FetchStrategy.FromServer
|
|
1737
1803
|
});
|
|
1738
|
-
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(entity
|
|
1804
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(this.getPrimaryKeyName(entity), '==', ref).using(queryOptions);
|
|
1739
1805
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1740
1806
|
return this.formatQueryChoices(query, queryData.results, pkeyName, null);
|
|
1741
1807
|
})));
|
|
@@ -1746,7 +1812,7 @@ class TruEntityAccessor {
|
|
|
1746
1812
|
var queryOptions = this._entityManager.queryOptions.using({
|
|
1747
1813
|
fetchStrategy: FetchStrategy.FromLocalCache
|
|
1748
1814
|
});
|
|
1749
|
-
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(entity
|
|
1815
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(this.getPrimaryKeyName(entity), '==', ref).using(queryOptions);
|
|
1750
1816
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1751
1817
|
return queryData.results[0];
|
|
1752
1818
|
})));
|
|
@@ -1755,7 +1821,7 @@ class TruEntityAccessor {
|
|
|
1755
1821
|
var queryOptions = this._entityManager.queryOptions.using({
|
|
1756
1822
|
fetchStrategy: FetchStrategy.FromServer
|
|
1757
1823
|
});
|
|
1758
|
-
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(entity
|
|
1824
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(this.getPrimaryKeyName(entity), '==', ref).using(queryOptions);
|
|
1759
1825
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1760
1826
|
return queryData.results[0];
|
|
1761
1827
|
})));
|
|
@@ -1768,7 +1834,7 @@ class TruEntityAccessor {
|
|
|
1768
1834
|
includeDeleted: includeDeleted,
|
|
1769
1835
|
fetchStrategy: FetchStrategy.FromLocalCache
|
|
1770
1836
|
});
|
|
1771
|
-
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(entity
|
|
1837
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(this.getPrimaryKeyName(entity), '==', ref).using(queryOptions);
|
|
1772
1838
|
var result = this._entityManager.executeQueryLocally(query)[0];
|
|
1773
1839
|
if (result)
|
|
1774
1840
|
return result;
|
|
@@ -1778,7 +1844,7 @@ class TruEntityAccessor {
|
|
|
1778
1844
|
var queryOptions = this._entityManager.queryOptions.using({
|
|
1779
1845
|
fetchStrategy: FetchStrategy.FromServer
|
|
1780
1846
|
});
|
|
1781
|
-
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(entity
|
|
1847
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).where(this.getPrimaryKeyName(entity), '==', ref).using(queryOptions);
|
|
1782
1848
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1783
1849
|
return queryData.results[0];
|
|
1784
1850
|
})));
|
|
@@ -1796,7 +1862,7 @@ class TruEntityAccessor {
|
|
|
1796
1862
|
if (query === null) //setupQuery() returned null to select no rows
|
|
1797
1863
|
return [];
|
|
1798
1864
|
if (refs.length > 0) {
|
|
1799
|
-
const pkeyName = entity
|
|
1865
|
+
const pkeyName = this.getPrimaryKeyName(entity);
|
|
1800
1866
|
var predicate = this._breezeContext.createPredicate(pkeyName, '==', refs[0]);
|
|
1801
1867
|
_.rest(refs, 1).forEach(function (ref) {
|
|
1802
1868
|
predicate = predicate.or(pkeyName, '==', ref);
|
|
@@ -1811,7 +1877,7 @@ class TruEntityAccessor {
|
|
|
1811
1877
|
searchByRefWithQuery = (entity, setupQuery, ref) => {
|
|
1812
1878
|
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
|
|
1813
1879
|
query = setupQuery(query);
|
|
1814
|
-
const pkeyName = entity
|
|
1880
|
+
const pkeyName = this.getPrimaryKeyName(entity);
|
|
1815
1881
|
var predicate = this._breezeContext.createPredicate(pkeyName, '==', ref);
|
|
1816
1882
|
query = query.where(predicate);
|
|
1817
1883
|
var localResults = this._entityManager.executeQueryLocally(query);
|
|
@@ -1836,7 +1902,7 @@ class TruEntityAccessor {
|
|
|
1836
1902
|
};
|
|
1837
1903
|
customSearch = (entity, query) => {
|
|
1838
1904
|
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
1839
|
-
this.warnIfMaxRecords(queryData.results, entity
|
|
1905
|
+
this.warnIfMaxRecords(queryData.results, this.getEntityTypeName(entity));
|
|
1840
1906
|
return queryData.results;
|
|
1841
1907
|
})));
|
|
1842
1908
|
};
|
|
@@ -1853,7 +1919,7 @@ class TruEntityAccessor {
|
|
|
1853
1919
|
useNames: false,
|
|
1854
1920
|
useEmptyTags: false,
|
|
1855
1921
|
entityRefs: null,
|
|
1856
|
-
entityTypeName: entity
|
|
1922
|
+
entityTypeName: this.getEntityTypeName(entity),
|
|
1857
1923
|
gridSpec: gridSpec
|
|
1858
1924
|
};
|
|
1859
1925
|
if (options.async)
|
|
@@ -4068,7 +4134,7 @@ class TruAuth {
|
|
|
4068
4134
|
});
|
|
4069
4135
|
}
|
|
4070
4136
|
userClaims() {
|
|
4071
|
-
if (this.appEnvironment.authType === 'session') {
|
|
4137
|
+
if (this.appEnvironment.authType === 'session' || this.appEnvironment.authType === 'windows') {
|
|
4072
4138
|
return this.http
|
|
4073
4139
|
.get(`${this.baseUrl}${TRU_AUTH_CONFIG.authUrl}/userClaims`)
|
|
4074
4140
|
.pipe(tap((userClaims) => {
|
|
@@ -4824,6 +4890,35 @@ class TruDetailViewBase {
|
|
|
4824
4890
|
this.desktopViewEventNotifier = desktopViewEventNotifier;
|
|
4825
4891
|
this.util = util;
|
|
4826
4892
|
}
|
|
4893
|
+
onDocumentKeydown = (event) => {
|
|
4894
|
+
if (this.view.active && this.view.window.active) {
|
|
4895
|
+
let keySequence = this.util.getKeySequence(event);
|
|
4896
|
+
if (keySequence === 'ctrl+i' || keySequence === 'meta+i') {
|
|
4897
|
+
//this.onAddEntity();
|
|
4898
|
+
event.preventDefault();
|
|
4899
|
+
}
|
|
4900
|
+
if (keySequence === 'ctrl+d' || keySequence === 'meta+d') {
|
|
4901
|
+
this.onDeleteEntity();
|
|
4902
|
+
event.preventDefault();
|
|
4903
|
+
}
|
|
4904
|
+
if (keySequence === 'ctrl+up' || keySequence === 'meta+up') {
|
|
4905
|
+
this.onFirstEntity();
|
|
4906
|
+
event.preventDefault();
|
|
4907
|
+
}
|
|
4908
|
+
if (keySequence === 'ctrl+left' || keySequence === 'meta+left') {
|
|
4909
|
+
this.onPreviousEntity();
|
|
4910
|
+
event.preventDefault();
|
|
4911
|
+
}
|
|
4912
|
+
if (keySequence === 'ctrl+right' || keySequence === 'meta+right') {
|
|
4913
|
+
this.onNextEntity();
|
|
4914
|
+
event.preventDefault();
|
|
4915
|
+
}
|
|
4916
|
+
if (keySequence === 'ctrl+down' || keySequence === 'meta+down') {
|
|
4917
|
+
this.onLastEntity();
|
|
4918
|
+
event.preventDefault();
|
|
4919
|
+
}
|
|
4920
|
+
}
|
|
4921
|
+
};
|
|
4827
4922
|
calculateNextIndex = () => {
|
|
4828
4923
|
let nextIndex = 0;
|
|
4829
4924
|
var removedRecords = this.recordsBeforeRevert - this.entities.length;
|
|
@@ -4925,38 +5020,7 @@ class TruDetailViewBase {
|
|
|
4925
5020
|
if (this.active)
|
|
4926
5021
|
this.setEntityDisplayValues(this.tableName);
|
|
4927
5022
|
}));
|
|
4928
|
-
this.subs.push(fromEvent(document, 'keydown').subscribe(
|
|
4929
|
-
if (this.view.active && this.view.window.active) {
|
|
4930
|
-
let keySequence = this.util.getKeySequence(event);
|
|
4931
|
-
if (keySequence === 'ctrl+i' || keySequence === 'meta+i') {
|
|
4932
|
-
//this.onAddEntity();
|
|
4933
|
-
event.preventDefault();
|
|
4934
|
-
}
|
|
4935
|
-
if (keySequence === 'ctrl+d' || keySequence === 'meta+d') {
|
|
4936
|
-
this.onDeleteEntity();
|
|
4937
|
-
event.preventDefault();
|
|
4938
|
-
}
|
|
4939
|
-
if (keySequence === 'ctrl+up' || keySequence === 'meta+up') {
|
|
4940
|
-
this.onFirstEntity();
|
|
4941
|
-
event.preventDefault();
|
|
4942
|
-
}
|
|
4943
|
-
if (keySequence === 'ctrl+left' || keySequence === 'meta+left') {
|
|
4944
|
-
this.onPreviousEntity();
|
|
4945
|
-
event.preventDefault();
|
|
4946
|
-
}
|
|
4947
|
-
if (keySequence === 'ctrl+right' || keySequence === 'meta+right') {
|
|
4948
|
-
this.onNextEntity();
|
|
4949
|
-
event.preventDefault();
|
|
4950
|
-
}
|
|
4951
|
-
if (keySequence === 'ctrl+down' || keySequence === 'meta+down') {
|
|
4952
|
-
this.onLastEntity();
|
|
4953
|
-
event.preventDefault();
|
|
4954
|
-
}
|
|
4955
|
-
var targetIsControl = this.util.targetIsControl(event.target);
|
|
4956
|
-
if (!targetIsControl && event.ctrlKey || event.altKey)
|
|
4957
|
-
event.preventDefault();
|
|
4958
|
-
}
|
|
4959
|
-
}));
|
|
5023
|
+
this.subs.push(fromEvent(document, 'keydown').subscribe(this.onDocumentKeydown));
|
|
4960
5024
|
}
|
|
4961
5025
|
setNavigationIndex(index) {
|
|
4962
5026
|
this.navigationIndex = index;
|
|
@@ -6095,29 +6159,26 @@ class TruCardColumn {
|
|
|
6095
6159
|
};
|
|
6096
6160
|
updateItemsSource(newEntities, revert) {
|
|
6097
6161
|
this.clear();
|
|
6162
|
+
this.busyMessage = 'Rendering...';
|
|
6098
6163
|
if (!revert)
|
|
6099
6164
|
localStorage.setItem('scroll_position' + v4(), '0');
|
|
6100
|
-
if (newEntities.length)
|
|
6101
|
-
this.busyMessage = 'Rendering...';
|
|
6102
6165
|
this.columnFilterChoices = [];
|
|
6103
6166
|
this.columnFilterRefs = [];
|
|
6104
6167
|
this.cardFilterStr = null;
|
|
6105
6168
|
if (!newEntities.length) {
|
|
6106
6169
|
this.lockedColumns = [];
|
|
6107
6170
|
this.columns = [];
|
|
6171
|
+
return;
|
|
6108
6172
|
}
|
|
6109
6173
|
let lockedColumns = [];
|
|
6110
6174
|
let emptyParents = [];
|
|
6111
6175
|
let columns = [];
|
|
6112
6176
|
let query = new breeze.EntityQuery('Query' + this.parentTableName);
|
|
6113
6177
|
let parentRefs = newEntities.map((e) => { return e[this.parentTableName + 'Ref']; });
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
query = query.expand([this.config.parentToChildRelationshipName, 'oBooking', 'oSalesContract']);
|
|
6119
|
-
let uniqueParentRefs = [...new Set(parentRefs)];
|
|
6120
|
-
query = query.where(this.parentTableName + 'Ref', 'in', uniqueParentRefs);
|
|
6178
|
+
if (this.config.resultConfig.cardColumnQuery)
|
|
6179
|
+
query = this.config.resultConfig.cardColumnQuery(query, this.config.parentToChildRelationshipName);
|
|
6180
|
+
else
|
|
6181
|
+
query = query.expand(this.config.parentToChildRelationshipName);
|
|
6121
6182
|
//if (this.parentQuery)
|
|
6122
6183
|
// query = queries[this.parentQuery](query);
|
|
6123
6184
|
this.dataContext.entityAccess().customSearch(this.modelTypeLookup.getType(this.parentTableName), query).subscribe((parents) => {
|
|
@@ -6168,12 +6229,7 @@ class TruCardColumn {
|
|
|
6168
6229
|
return false;
|
|
6169
6230
|
});
|
|
6170
6231
|
if (entityParent) {
|
|
6171
|
-
|
|
6172
|
-
entityParent.cards.push(this.createDataForEntity(entity));
|
|
6173
|
-
}
|
|
6174
|
-
else {
|
|
6175
|
-
entityParent.cards.push(this.createDataForEntity(entity));
|
|
6176
|
-
}
|
|
6232
|
+
entityParent.cards.push(this.createDataForEntity(entity));
|
|
6177
6233
|
}
|
|
6178
6234
|
else if (!entityParent &&
|
|
6179
6235
|
entity['o' + this.relatedParentName] &&
|
|
@@ -8642,6 +8698,30 @@ class TruDataGrid {
|
|
|
8642
8698
|
this.desktopViewEventNotifier = desktopViewEventNotifier;
|
|
8643
8699
|
this.tabGroupEventNotifier = tabGroupEventNotifier;
|
|
8644
8700
|
}
|
|
8701
|
+
onDocumentKeydown = (event) => {
|
|
8702
|
+
if (this.config.view.active && this.config.view.window.active) {
|
|
8703
|
+
if (event.code === 'Space' && event.target.classList.contains('ag-cell-value')) {
|
|
8704
|
+
event.preventDefault();
|
|
8705
|
+
}
|
|
8706
|
+
let keySequence = this.util.getKeySequence(event);
|
|
8707
|
+
if (keySequence === 'ctrl+i' || keySequence === 'meta+i') {
|
|
8708
|
+
this.onAdd();
|
|
8709
|
+
event.preventDefault();
|
|
8710
|
+
}
|
|
8711
|
+
if (keySequence === 'ctrl+d' || keySequence === 'meta+d') {
|
|
8712
|
+
this.onDelete();
|
|
8713
|
+
event.preventDefault();
|
|
8714
|
+
}
|
|
8715
|
+
if (keySequence === 'ctrl+k' || keySequence === 'meta+k') {
|
|
8716
|
+
this.onKeep();
|
|
8717
|
+
event.preventDefault();
|
|
8718
|
+
}
|
|
8719
|
+
if (keySequence === 'ctrl+r' || keySequence === 'meta+r') {
|
|
8720
|
+
this.onRemove();
|
|
8721
|
+
event.preventDefault();
|
|
8722
|
+
}
|
|
8723
|
+
}
|
|
8724
|
+
};
|
|
8645
8725
|
enhanceRowDataForEntity = (entity) => {
|
|
8646
8726
|
let rowData = this.config.resultConfig.rowDataEnhancer(entity);
|
|
8647
8727
|
rowData.$entity = entity;
|
|
@@ -8773,33 +8853,7 @@ class TruDataGrid {
|
|
|
8773
8853
|
}
|
|
8774
8854
|
this.api.refreshCells({ force: true });
|
|
8775
8855
|
}));
|
|
8776
|
-
this.subs.push(fromEvent(document, 'keydown').subscribe(
|
|
8777
|
-
if (this.config.view.active && this.config.view.window.active) {
|
|
8778
|
-
if (event.code === 'Space' && event.target.classList.contains('ag-cell-value')) {
|
|
8779
|
-
event.preventDefault();
|
|
8780
|
-
}
|
|
8781
|
-
let keySequence = this.util.getKeySequence(event);
|
|
8782
|
-
if (keySequence === 'ctrl+i' || keySequence === 'meta+i') {
|
|
8783
|
-
this.onAdd();
|
|
8784
|
-
event.preventDefault();
|
|
8785
|
-
}
|
|
8786
|
-
if (keySequence === 'ctrl+d' || keySequence === 'meta+d') {
|
|
8787
|
-
this.onDelete();
|
|
8788
|
-
event.preventDefault();
|
|
8789
|
-
}
|
|
8790
|
-
if (keySequence === 'ctrl+k' || keySequence === 'meta+k') {
|
|
8791
|
-
this.onKeep();
|
|
8792
|
-
event.preventDefault();
|
|
8793
|
-
}
|
|
8794
|
-
if (keySequence === 'ctrl+r' || keySequence === 'meta+r') {
|
|
8795
|
-
this.onRemove();
|
|
8796
|
-
event.preventDefault();
|
|
8797
|
-
}
|
|
8798
|
-
var targetIsControl = this.util.targetIsControl(event.target);
|
|
8799
|
-
if (!targetIsControl && event.ctrlKey || event.altKey)
|
|
8800
|
-
event.preventDefault();
|
|
8801
|
-
}
|
|
8802
|
-
}));
|
|
8856
|
+
this.subs.push(fromEvent(document, 'keydown').subscribe(this.onDocumentKeydown));
|
|
8803
8857
|
this.subs.push(fromEvent(document, 'mousedown').subscribe((event) => {
|
|
8804
8858
|
if (this.config.view.active &&
|
|
8805
8859
|
this.config.view.window.active &&
|
|
@@ -9120,9 +9174,10 @@ class TruDataGrid {
|
|
|
9120
9174
|
this.firstSearchRan = true;
|
|
9121
9175
|
this.api?.hideOverlay();
|
|
9122
9176
|
this.api?.showLoadingOverlay();
|
|
9123
|
-
let
|
|
9124
|
-
|
|
9125
|
-
|
|
9177
|
+
let parentIsUnsaved = !!this.entity && this.entity.Ref < 0;
|
|
9178
|
+
let parentWasLoaded = !!this.entity && this.loadedEntities.indexOf(this.entity.Ref) > -1;
|
|
9179
|
+
let canSearchLocally = this.config.resultConfig.canSearchLocally !== false;
|
|
9180
|
+
let searchLocally = parentIsUnsaved || (canSearchLocally && parentWasLoaded);
|
|
9126
9181
|
let joins = [];
|
|
9127
9182
|
if (searchLocally) {
|
|
9128
9183
|
joins.push(this.dataContext.entityAccess().searchCacheOnly(this.config.resultConfig.entityType, setupQuery, this.config.resultConfig.expands));
|
|
@@ -9145,7 +9200,7 @@ class TruDataGrid {
|
|
|
9145
9200
|
},
|
|
9146
9201
|
complete: () => {
|
|
9147
9202
|
if (this.gridType !== TruDataGridTypes.Search)
|
|
9148
|
-
this.loadedEntities.push(this.entity
|
|
9203
|
+
this.loadedEntities.push(this.entity.Ref);
|
|
9149
9204
|
this.api.hideOverlay();
|
|
9150
9205
|
if (this.rowData === null || !this.rowData.length) {
|
|
9151
9206
|
this.api.showNoRowsOverlay();
|
|
@@ -10658,9 +10713,6 @@ class TruDesktopWindow {
|
|
|
10658
10713
|
this.lastView();
|
|
10659
10714
|
event.preventDefault();
|
|
10660
10715
|
}
|
|
10661
|
-
var targetIsControl = this.util.targetIsControl(event.target);
|
|
10662
|
-
if (!targetIsControl && event.ctrlKey || event.altKey)
|
|
10663
|
-
event.preventDefault();
|
|
10664
10716
|
};
|
|
10665
10717
|
/**
|
|
10666
10718
|
* @tru.doc watch
|
|
@@ -11532,8 +11584,6 @@ class TruDesktop {
|
|
|
11532
11584
|
onKeyDown = (event) => {
|
|
11533
11585
|
if (event.key === 'Control' || event.key === 'Shift')
|
|
11534
11586
|
return;
|
|
11535
|
-
if (event.altKey)
|
|
11536
|
-
event.preventDefault();
|
|
11537
11587
|
var keySequence = this.util.getKeySequence(event);
|
|
11538
11588
|
if (keySequence === 'alt+m') { //Maximize
|
|
11539
11589
|
var activeWindow = this.getActiveWindow();
|
|
@@ -11597,10 +11647,6 @@ class TruDesktop {
|
|
|
11597
11647
|
this.restoreSavedPosition(activeWindow);
|
|
11598
11648
|
event.preventDefault();
|
|
11599
11649
|
}
|
|
11600
|
-
if (keySequence === 'alt+d') { //Toggle Desktop
|
|
11601
|
-
//this.desktopShown = this.hideShowAll();
|
|
11602
|
-
event.preventDefault();
|
|
11603
|
-
}
|
|
11604
11650
|
if (event.shiftKey)
|
|
11605
11651
|
this.shiftPressed = true;
|
|
11606
11652
|
if (event.altKey)
|
|
@@ -12061,13 +12107,26 @@ class TruLogin {
|
|
|
12061
12107
|
this.appEnvironment = appEnvironment;
|
|
12062
12108
|
this.title = appEnvironment.loginFormTitle;
|
|
12063
12109
|
}
|
|
12110
|
+
ngOnInit() {
|
|
12111
|
+
if (this.isWindowsAuth)
|
|
12112
|
+
this.loginWithWindows();
|
|
12113
|
+
}
|
|
12064
12114
|
get f() {
|
|
12065
12115
|
return this.loginForm.controls;
|
|
12066
12116
|
}
|
|
12117
|
+
get isWindowsAuth() {
|
|
12118
|
+
return this.appEnvironment.authType === 'windows';
|
|
12119
|
+
}
|
|
12067
12120
|
isDisabled = () => {
|
|
12121
|
+
if (this.isWindowsAuth)
|
|
12122
|
+
return this.isLoggingIn;
|
|
12068
12123
|
return !this.f.username.value || !this.f.password.value || this.isLoggingIn;
|
|
12069
12124
|
};
|
|
12070
12125
|
onSubmit() {
|
|
12126
|
+
if (this.isWindowsAuth) {
|
|
12127
|
+
this.loginWithWindows();
|
|
12128
|
+
return;
|
|
12129
|
+
}
|
|
12071
12130
|
const loginRequest = {
|
|
12072
12131
|
username: this.f.username.value,
|
|
12073
12132
|
password: this.f.password.value
|
|
@@ -12090,12 +12149,32 @@ class TruLogin {
|
|
|
12090
12149
|
});
|
|
12091
12150
|
}
|
|
12092
12151
|
}
|
|
12152
|
+
loginWithWindows() {
|
|
12153
|
+
this.isLoggingIn = true;
|
|
12154
|
+
this.auth
|
|
12155
|
+
.login(null).pipe(finalize(() => {
|
|
12156
|
+
this.isLoggingIn = false;
|
|
12157
|
+
}))
|
|
12158
|
+
.subscribe(() => {
|
|
12159
|
+
this.isLoggingIn = false;
|
|
12160
|
+
}, (error) => {
|
|
12161
|
+
if (error.status === 401) {
|
|
12162
|
+
this.loginError = "Windows authentication failed";
|
|
12163
|
+
}
|
|
12164
|
+
else if (error.status === 403) {
|
|
12165
|
+
this.loginError = error.error || "Your Windows account is not authorized for this application";
|
|
12166
|
+
}
|
|
12167
|
+
else {
|
|
12168
|
+
this.loginError = "Invalid Login - Error: " + error.status;
|
|
12169
|
+
}
|
|
12170
|
+
});
|
|
12171
|
+
}
|
|
12093
12172
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TruLogin, deps: [{ token: TruAuth }, { token: TruAppEnvironment }], target: i0.ɵɵFactoryTarget.Component });
|
|
12094
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: TruLogin, isStandalone: false, selector: "tru-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> {{title}} </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-form-field>\r\n
|
|
12173
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: TruLogin, isStandalone: false, selector: "tru-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> {{title}} </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <ng-container *ngIf=\"isWindowsAuth; else passwordLogin\"></ng-container>\r\n <ng-template #passwordLogin>\r\n <mat-form-field>\r\n <mat-label>Username</mat-label>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\">\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Password</mat-label>\r\n <input matInput type=\"password\" formControlName=\"password\" placeholder=\"Password\" [type]=\"passwordVisible ? 'text' : 'password'\">\r\n <button class=\"visibility-button\" [disableRipple]=\"true\" type=\"button\" mat-icon-button matSuffix (click)=\"passwordVisible = !passwordVisible\">\r\n <mat-icon class=\"visibility\" *ngIf=\"passwordVisible\" [svgIcon]=\"'visibility-icon'\">visibility-icon</mat-icon>\r\n <mat-icon class=\"visibility-off\" *ngIf=\"!passwordVisible\" [svgIcon]=\"'visibility-off-icon'\">visibility-off-icon</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-template>\r\n <div *ngIf=\"loginError\" class=\"animate-login-error animated rubberBand\">\r\n <p style=\"color: red; font-weight: bold;\"> {{ loginError }}</p>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions *ngIf=\"!isWindowsAuth\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"isDisabled()\">Login</button>\r\n </mat-card-actions>\r\n </mat-card>\r\n </form>\r\n</div>\r\n", styles: [".login-container{display:flex;justify-content:center;align-items:center;height:100vh;margin:0;padding:0}.login-input{margin-bottom:20px}.animate-login{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;margin-top:50px}.wrapper{display:flex;justify-content:center;align-items:center;height:100vh}mat-card{max-width:300px;width:100%;max-height:300px;padding:20px}.form-group{width:100%;max-width:400px;margin-bottom:20px}.login-wrapper{display:flex;justify-content:center;align-items:center;height:100vh}::ng-deep .login-wrapper .mat-mdc-text-field-wrapper{padding:0 16px!important}::ng-deep .login-wrapper .mat-mdc-icon-button.mat-mdc-button-base{height:20px;width:20px;padding:0!important}::ng-deep .login-wrapper .mat-icon{height:20px;width:30px;vertical-align:middle}::ng-deep .login-wrapper .material-icons{font-size:18px}::ng-deep .login-wrapper .visibility svg{fill:#006dcc;height:18px;width:18px;margin-top:5px}::ng-deep .login-wrapper .visibility-off svg{fill:#787878;height:18px;width:18px;margin-top:5px}::ng-deep .login-wrapper .visibility-button{--mat-text-button-state-layer-color: none}::ng-deep .login-wrapper button:focus{outline:none!important}::ng-deep .login-wrapper .mat-button-focus-overlay{display:none!important}::ng-deep .login-wrapper .mat-mdc-button-persistent-ripple{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5$3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i5$3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5$3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5$3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
12095
12174
|
}
|
|
12096
12175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TruLogin, decorators: [{
|
|
12097
12176
|
type: Component,
|
|
12098
|
-
args: [{ selector: 'tru-login', standalone: false, template: "<div class=\"login-wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> {{title}} </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-form-field>\r\n
|
|
12177
|
+
args: [{ selector: 'tru-login', standalone: false, template: "<div class=\"login-wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> {{title}} </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <ng-container *ngIf=\"isWindowsAuth; else passwordLogin\"></ng-container>\r\n <ng-template #passwordLogin>\r\n <mat-form-field>\r\n <mat-label>Username</mat-label>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\">\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Password</mat-label>\r\n <input matInput type=\"password\" formControlName=\"password\" placeholder=\"Password\" [type]=\"passwordVisible ? 'text' : 'password'\">\r\n <button class=\"visibility-button\" [disableRipple]=\"true\" type=\"button\" mat-icon-button matSuffix (click)=\"passwordVisible = !passwordVisible\">\r\n <mat-icon class=\"visibility\" *ngIf=\"passwordVisible\" [svgIcon]=\"'visibility-icon'\">visibility-icon</mat-icon>\r\n <mat-icon class=\"visibility-off\" *ngIf=\"!passwordVisible\" [svgIcon]=\"'visibility-off-icon'\">visibility-off-icon</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-template>\r\n <div *ngIf=\"loginError\" class=\"animate-login-error animated rubberBand\">\r\n <p style=\"color: red; font-weight: bold;\"> {{ loginError }}</p>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions *ngIf=\"!isWindowsAuth\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"isDisabled()\">Login</button>\r\n </mat-card-actions>\r\n </mat-card>\r\n </form>\r\n</div>\r\n", styles: [".login-container{display:flex;justify-content:center;align-items:center;height:100vh;margin:0;padding:0}.login-input{margin-bottom:20px}.animate-login{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;margin-top:50px}.wrapper{display:flex;justify-content:center;align-items:center;height:100vh}mat-card{max-width:300px;width:100%;max-height:300px;padding:20px}.form-group{width:100%;max-width:400px;margin-bottom:20px}.login-wrapper{display:flex;justify-content:center;align-items:center;height:100vh}::ng-deep .login-wrapper .mat-mdc-text-field-wrapper{padding:0 16px!important}::ng-deep .login-wrapper .mat-mdc-icon-button.mat-mdc-button-base{height:20px;width:20px;padding:0!important}::ng-deep .login-wrapper .mat-icon{height:20px;width:30px;vertical-align:middle}::ng-deep .login-wrapper .material-icons{font-size:18px}::ng-deep .login-wrapper .visibility svg{fill:#006dcc;height:18px;width:18px;margin-top:5px}::ng-deep .login-wrapper .visibility-off svg{fill:#787878;height:18px;width:18px;margin-top:5px}::ng-deep .login-wrapper .visibility-button{--mat-text-button-state-layer-color: none}::ng-deep .login-wrapper button:focus{outline:none!important}::ng-deep .login-wrapper .mat-button-focus-overlay{display:none!important}::ng-deep .login-wrapper .mat-mdc-button-persistent-ripple{display:none!important}\n"] }]
|
|
12099
12178
|
}], ctorParameters: () => [{ type: TruAuth }, { type: TruAppEnvironment }] });
|
|
12100
12179
|
|
|
12101
12180
|
class TruAuthJwtStrategy {
|
|
@@ -12172,7 +12251,7 @@ class TruAuthInterceptor {
|
|
|
12172
12251
|
intercept(request, next) {
|
|
12173
12252
|
if (this.appEnvironment.authType === 'jwt')
|
|
12174
12253
|
request = this.addToken(request, String(this.jwt.getToken()));
|
|
12175
|
-
if (this.appEnvironment.authType === 'session')
|
|
12254
|
+
if (this.appEnvironment.authType === 'session' || this.appEnvironment.authType === 'windows')
|
|
12176
12255
|
request = request.clone({
|
|
12177
12256
|
withCredentials: true
|
|
12178
12257
|
});
|
|
@@ -12255,6 +12334,19 @@ class TruAuthSessionStrategy {
|
|
|
12255
12334
|
}
|
|
12256
12335
|
}
|
|
12257
12336
|
|
|
12337
|
+
class TruAuthWindowsStrategy {
|
|
12338
|
+
doLoginUser(user) {
|
|
12339
|
+
}
|
|
12340
|
+
doLogoutUser() {
|
|
12341
|
+
}
|
|
12342
|
+
createUser(user) {
|
|
12343
|
+
return of({});
|
|
12344
|
+
}
|
|
12345
|
+
isLoggedIn() {
|
|
12346
|
+
return false;
|
|
12347
|
+
}
|
|
12348
|
+
}
|
|
12349
|
+
|
|
12258
12350
|
const TruAuthStrategyProvider = {
|
|
12259
12351
|
provide: TRU_AUTH_STRATEGY,
|
|
12260
12352
|
deps: [HttpClient, TruAppEnvironment],
|
|
@@ -12264,6 +12356,8 @@ const TruAuthStrategyProvider = {
|
|
|
12264
12356
|
return new TruAuthSessionStrategy(http);
|
|
12265
12357
|
case "jwt":
|
|
12266
12358
|
return new TruAuthJwtStrategy();
|
|
12359
|
+
case "windows":
|
|
12360
|
+
return new TruAuthWindowsStrategy();
|
|
12267
12361
|
default:
|
|
12268
12362
|
throw new Error("Invalid auth strategy");
|
|
12269
12363
|
}
|
|
@@ -14417,5 +14511,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
14417
14511
|
* Generated bundle index. Do not edit.
|
|
14418
14512
|
*/
|
|
14419
14513
|
|
|
14420
|
-
export { TruAboutDialog, TruActionInvoke, TruAppEnvironment, TruAppSettingsDialog, TruAuth, TruAuthInterceptor, TruBreezeContext, TruBreezeContextFactory, TruBreezeMetadataProvider, TruBreezeValidator, TruCard, TruCardColumn, TruCardColumnData, TruCardColumnSearchResultsConfigBase, TruChoice, TruCloneView, TruCloudFileManager, TruColumn, TruCommonModule, TruComponentConfigBase, TruComponentLookup, TruConfirmDialog, TruConfirmDialogConfig, TruConnectionHub, TruContextFilter, TruContextFilterChoice, TruContextFilters, TruControlComponentConfigBase, TruCountries, TruDataChange, TruDataContext, TruDataGrid, TruDataGridCellRenderer, TruDataGridHeader, TruDataGridHeaderFilter, TruDataGridPkeyCellRenderer, TruDataGridRefHeader, TruDataGridTypes, TruDataGridUtil, TruDesktop, TruDesktopEventHandler, TruDesktopManager, TruDesktopViewConfig, TruDesktopViewEventNotifier, TruDetailViewBase, TruEditControlBase, TruEditControlConfigBase, TruEditParentControlConfigBase, TruEditPkeyControlConfigBase, TruEntityAccessor, TruEntityBase, TruErrorDialog, TruErrorInterceptor, TruExportDialog, TruExportDialogConfig, TruForm, TruFormatter, TruFormulaEval, TruGlobalDataContext, TruGridValidationDialog, TruGridValidationDialogConfig, TruGroupBox, TruIconModule, TruIframeView, TruIframeViewConfig, TruListControlConfigBase, TruLogin, TruLoginModule, TruMatSelectPanel, TruModelNavigationPropertiesLookup, TruModelPropertyLookup, TruModelTableLookup, TruModelTypeLookup, TruNameValue, TruNavigationPropertiesConfig, TruNavigationPropertyConfig, TruPasswordDialog, TruPredicate, TruPredicateMap, TruPropertyConfigBase, TruPropertyConfigCloudFile, TruPropertyConfigDate, TruPropertyConfigDecimal, TruPropertyConfigFile, TruPropertyConfigForeignKey, TruPropertyConfigInteger, TruPropertyConfigPassword, TruPropertyConfigPercentage, TruPropertyConfigScientific, TruPropertyConfigText, TruPropertyConfigTextChoices, TruPropertyConfigUsaAddress, TruPropertyConfigZipCode, TruQueryPredicateManager, TruReportManager, TruRow, TruSearchConfigBase, TruSearchControlBase, TruSearchControlConfigBase, TruSearchControlParentBase, TruSearchControlRangeBase, TruSearchIconModule, TruSearchPanelPositionManager, TruSearchResultViewBase, TruSearchResultViewManager, TruSearchViewBase, TruSearchViewControlEventHandler, TruSearchViewEventHandler, TruSort, TruTab, TruTabGroup, TruTableConfigBase, TruTextManager, TruToolbar, TruToolbarAppCustomization, TruToolbarButton, TruToolbarContextFilter, TruToolbarDropdown, TruToolbarMenu, TruToolbarSeparator, TruToolbarText, TruToolbarTextbox, TruToolbarUserProfile, TruUiNotification, TruUser, TruUserPreferenceManager, TruUtil, TruValidationDialog, TruValidationDialogConfig, TruValidationDialogContext, TruValidatorFactory, TruViewBase, TruViewMenuConfig, TruWindowActionEventHandler, TruWindowCloseEventArgs, TruWindowEventArgs, TruWindowEventHandler, TruWindowManager };
|
|
14514
|
+
export { TruAboutDialog, TruActionInvoke, TruAppEnvironment, TruAppSettingsDialog, TruAuth, TruAuthInterceptor, TruBreezeContext, TruBreezeContextFactory, TruBreezeMetadataProvider, TruBreezeValidator, TruCard, TruCardColumn, TruCardColumnData, TruCardColumnSearchResultsConfigBase, TruChoice, TruCloneView, TruCloudFileManager, TruColumn, TruCommonModule, TruComponentConfigBase, TruComponentLookup, TruConfirmDialog, TruConfirmDialogConfig, TruConnectionHub, TruContextFilter, TruContextFilterChoice, TruContextFilters, TruControlComponentConfigBase, TruCountries, TruDataChange, TruDataContext, TruDataGrid, TruDataGridCellRenderer, TruDataGridHeader, TruDataGridHeaderFilter, TruDataGridPkeyCellRenderer, TruDataGridRefHeader, TruDataGridTypes, TruDataGridUtil, TruDesktop, TruDesktopEventHandler, TruDesktopManager, TruDesktopViewConfig, TruDesktopViewEventNotifier, TruDetailViewBase, TruEditControlBase, TruEditControlConfigBase, TruEditParentControlConfigBase, TruEditPkeyControlConfigBase, TruEntityAccessor, TruEntityBase, TruEntityMetadataRegistry, TruErrorDialog, TruErrorInterceptor, TruExportDialog, TruExportDialogConfig, TruForm, TruFormatter, TruFormulaEval, TruGlobalDataContext, TruGridValidationDialog, TruGridValidationDialogConfig, TruGroupBox, TruIconModule, TruIframeView, TruIframeViewConfig, TruListControlConfigBase, TruLogin, TruLoginModule, TruMatSelectPanel, TruModelNavigationPropertiesLookup, TruModelPropertyLookup, TruModelTableLookup, TruModelTypeLookup, TruNameValue, TruNavigationPropertiesConfig, TruNavigationPropertyConfig, TruPasswordDialog, TruPredicate, TruPredicateMap, TruPropertyConfigBase, TruPropertyConfigCloudFile, TruPropertyConfigDate, TruPropertyConfigDecimal, TruPropertyConfigFile, TruPropertyConfigForeignKey, TruPropertyConfigInteger, TruPropertyConfigPassword, TruPropertyConfigPercentage, TruPropertyConfigScientific, TruPropertyConfigText, TruPropertyConfigTextChoices, TruPropertyConfigUsaAddress, TruPropertyConfigZipCode, TruQueryPredicateManager, TruReportManager, TruRow, TruSearchConfigBase, TruSearchControlBase, TruSearchControlConfigBase, TruSearchControlParentBase, TruSearchControlRangeBase, TruSearchIconModule, TruSearchPanelPositionManager, TruSearchResultViewBase, TruSearchResultViewManager, TruSearchViewBase, TruSearchViewControlEventHandler, TruSearchViewEventHandler, TruSort, TruTab, TruTabGroup, TruTableConfigBase, TruTextManager, TruToolbar, TruToolbarAppCustomization, TruToolbarButton, TruToolbarContextFilter, TruToolbarDropdown, TruToolbarMenu, TruToolbarSeparator, TruToolbarText, TruToolbarTextbox, TruToolbarUserProfile, TruUiNotification, TruUser, TruUserPreferenceManager, TruUtil, TruValidationDialog, TruValidationDialogConfig, TruValidationDialogContext, TruValidatorFactory, TruViewBase, TruViewMenuConfig, TruWindowActionEventHandler, TruWindowCloseEventArgs, TruWindowEventArgs, TruWindowEventHandler, TruWindowManager };
|
|
14421
14515
|
//# sourceMappingURL=trudb-tru-common-lib.mjs.map
|