mindoodb 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +263 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts +5 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts.map +1 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js +17 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js.map +1 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +111 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +237 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts +78 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -0
- package/dist/appendonlystores/network/HttpTransport.js +356 -0
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +131 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +248 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -0
- package/dist/appendonlystores/network/index.d.ts +8 -0
- package/dist/appendonlystores/network/index.d.ts.map +1 -0
- package/dist/appendonlystores/network/index.js +21 -0
- package/dist/appendonlystores/network/index.js.map +1 -0
- package/dist/browser/crypto/BrowserCryptoAdapter.d.ts +14 -0
- package/dist/browser/crypto/BrowserCryptoAdapter.d.ts.map +1 -0
- package/dist/browser/crypto/BrowserCryptoAdapter.js +30 -0
- package/dist/browser/crypto/BrowserCryptoAdapter.js.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +26 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/core/BaseMindooDB.d.ts +182 -0
- package/dist/core/BaseMindooDB.d.ts.map +1 -0
- package/dist/core/BaseMindooDB.js +1701 -0
- package/dist/core/BaseMindooDB.js.map +1 -0
- package/dist/core/BaseMindooTenant.d.ts +155 -0
- package/dist/core/BaseMindooTenant.d.ts.map +1 -0
- package/dist/core/BaseMindooTenant.js +673 -0
- package/dist/core/BaseMindooTenant.js.map +1 -0
- package/dist/core/BaseMindooTenantDirectory.d.ts +99 -0
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -0
- package/dist/core/BaseMindooTenantDirectory.js +776 -0
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -0
- package/dist/core/BaseMindooTenantFactory.d.ts +91 -0
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -0
- package/dist/core/BaseMindooTenantFactory.js +297 -0
- package/dist/core/BaseMindooTenantFactory.js.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +111 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +293 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -0
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts +78 -0
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -0
- package/dist/core/appendonlystores/network/AuthenticationService.js +297 -0
- package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts +174 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -0
- package/dist/core/appendonlystores/network/NetworkTransport.js +3 -0
- package/dist/core/appendonlystores/network/NetworkTransport.js.map +1 -0
- package/dist/core/appendonlystores/network/types.d.ts +135 -0
- package/dist/core/appendonlystores/network/types.d.ts.map +1 -0
- package/dist/core/appendonlystores/network/types.js +35 -0
- package/dist/core/appendonlystores/network/types.js.map +1 -0
- package/dist/core/appendonlystores/types.d.ts +157 -0
- package/dist/core/appendonlystores/types.d.ts.map +1 -0
- package/dist/core/appendonlystores/types.js +3 -0
- package/dist/core/appendonlystores/types.js.map +1 -0
- package/dist/core/crypto/CryptoAdapter.d.ts +19 -0
- package/dist/core/crypto/CryptoAdapter.d.ts.map +1 -0
- package/dist/core/crypto/CryptoAdapter.js +3 -0
- package/dist/core/crypto/CryptoAdapter.js.map +1 -0
- package/dist/core/crypto/MindooDocSigner.d.ts +106 -0
- package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -0
- package/dist/core/crypto/MindooDocSigner.js +192 -0
- package/dist/core/crypto/MindooDocSigner.js.map +1 -0
- package/dist/core/crypto/RSAEncryption.d.ts +62 -0
- package/dist/core/crypto/RSAEncryption.d.ts.map +1 -0
- package/dist/core/crypto/RSAEncryption.js +167 -0
- package/dist/core/crypto/RSAEncryption.js.map +1 -0
- package/dist/core/errors.d.ts +10 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +17 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +53 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.d.ts +33 -0
- package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.js +27 -0
- package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.js.map +1 -0
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts +31 -0
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.js +3 -0
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.js.map +1 -0
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +52 -0
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +106 -0
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts +44 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.js +107 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.js.map +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +28 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +133 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +109 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualView.js +504 -0
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts +59 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.js +70 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts +49 -0
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.js +69 -0
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +121 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +365 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts +131 -0
- package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewFactory.js +236 -0
- package/dist/core/indexing/virtualviews/VirtualViewFactory.js.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewNavigator.d.ts +330 -0
- package/dist/core/indexing/virtualviews/VirtualViewNavigator.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewNavigator.js +1010 -0
- package/dist/core/indexing/virtualviews/VirtualViewNavigator.js.map +1 -0
- package/dist/core/indexing/virtualviews/index.d.ts +53 -0
- package/dist/core/indexing/virtualviews/index.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/index.js +89 -0
- package/dist/core/indexing/virtualviews/index.js.map +1 -0
- package/dist/core/indexing/virtualviews/types.d.ts +115 -0
- package/dist/core/indexing/virtualviews/types.d.ts.map +1 -0
- package/dist/core/indexing/virtualviews/types.js +175 -0
- package/dist/core/indexing/virtualviews/types.js.map +1 -0
- package/dist/core/keys/KeyBag.d.ts +122 -0
- package/dist/core/keys/KeyBag.d.ts.map +1 -0
- package/dist/core/keys/KeyBag.js +401 -0
- package/dist/core/keys/KeyBag.js.map +1 -0
- package/dist/core/types.d.ts +1004 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/userid/index.d.ts +53 -0
- package/dist/core/userid/index.d.ts.map +1 -0
- package/dist/core/userid/index.js +3 -0
- package/dist/core/userid/index.js.map +1 -0
- package/dist/core/utils/idGeneration.d.ts +109 -0
- package/dist/core/utils/idGeneration.d.ts.map +1 -0
- package/dist/core/utils/idGeneration.js +182 -0
- package/dist/core/utils/idGeneration.js.map +1 -0
- package/dist/core/utils/index.d.ts +5 -0
- package/dist/core/utils/index.d.ts.map +1 -0
- package/dist/core/utils/index.js +19 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/node/crypto/NodeCryptoAdapter.d.ts +16 -0
- package/dist/node/crypto/NodeCryptoAdapter.d.ts.map +1 -0
- package/dist/node/crypto/NodeCryptoAdapter.js +53 -0
- package/dist/node/crypto/NodeCryptoAdapter.js.map +1 -0
- package/dist/node/index.d.ts +3 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +26 -0
- package/dist/node/index.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VirtualView = void 0;
|
|
4
|
+
const VirtualViewEntryData_1 = require("./VirtualViewEntryData");
|
|
5
|
+
const ViewEntrySortKey_1 = require("./ViewEntrySortKey");
|
|
6
|
+
const ViewEntrySortKeyComparator_1 = require("./ViewEntrySortKeyComparator");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
/**
|
|
9
|
+
* VirtualView creates a hierarchical, sorted view of documents from one or more MindooDB instances.
|
|
10
|
+
* Documents are organized into categories (tree structure) with sorting and optional totals.
|
|
11
|
+
*/
|
|
12
|
+
class VirtualView {
|
|
13
|
+
constructor(columns) {
|
|
14
|
+
/** Categorization style (categories before/after documents) */
|
|
15
|
+
this.categorizationStyle = types_1.CategorizationStyle.DOCUMENT_THEN_CATEGORY;
|
|
16
|
+
/** Whether the index has been built */
|
|
17
|
+
this.indexBuilt = false;
|
|
18
|
+
/** Root entry of the view tree */
|
|
19
|
+
this.rootEntry = null;
|
|
20
|
+
/** Counter for generating category IDs */
|
|
21
|
+
this.categoryIdCounter = 4;
|
|
22
|
+
/** Map of origin:docId -> list of entry occurrences */
|
|
23
|
+
this.entriesByDocId = new Map();
|
|
24
|
+
/** Data providers */
|
|
25
|
+
this.dataProviderByOrigin = new Map();
|
|
26
|
+
/** Entries pending sibling index recalculation */
|
|
27
|
+
this.pendingSiblingIndexFlush = new Map();
|
|
28
|
+
/** Last index update timestamp */
|
|
29
|
+
this.lastIndexUpdateTime = null;
|
|
30
|
+
this.columns = [...columns];
|
|
31
|
+
this.categoryColumns = [];
|
|
32
|
+
this.sortColumns = [];
|
|
33
|
+
this.totalColumns = [];
|
|
34
|
+
this.valueFunctionColumns = [];
|
|
35
|
+
// Categorize columns
|
|
36
|
+
for (const column of columns) {
|
|
37
|
+
if (column.isCategory) {
|
|
38
|
+
this.categoryColumns.push(column);
|
|
39
|
+
}
|
|
40
|
+
else if (column.sorting !== types_1.ColumnSorting.NONE) {
|
|
41
|
+
this.sortColumns.push(column);
|
|
42
|
+
}
|
|
43
|
+
if (column.valueFunction) {
|
|
44
|
+
this.valueFunctionColumns.push(column);
|
|
45
|
+
}
|
|
46
|
+
if (column.totalMode !== types_1.TotalMode.NONE) {
|
|
47
|
+
this.totalColumns.push(column);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Build descending flags for document columns
|
|
51
|
+
this.docOrderDescending = this.sortColumns.map(col => col.sorting === types_1.ColumnSorting.DESCENDING);
|
|
52
|
+
// If no sort columns, add a default ascending flag
|
|
53
|
+
if (this.docOrderDescending.length === 0) {
|
|
54
|
+
this.docOrderDescending.push(false);
|
|
55
|
+
}
|
|
56
|
+
this.viewHasTotalColumns = this.totalColumns.length > 0;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Set the categorization style
|
|
60
|
+
*/
|
|
61
|
+
setCategorizationStyle(style) {
|
|
62
|
+
if (!this.indexBuilt) {
|
|
63
|
+
this.categorizationStyle = style;
|
|
64
|
+
}
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
getCategorizationStyle() {
|
|
68
|
+
return this.categorizationStyle;
|
|
69
|
+
}
|
|
70
|
+
getColumns() {
|
|
71
|
+
return [...this.columns];
|
|
72
|
+
}
|
|
73
|
+
getCategoryColumns() {
|
|
74
|
+
return [...this.categoryColumns];
|
|
75
|
+
}
|
|
76
|
+
getSortColumns() {
|
|
77
|
+
return [...this.sortColumns];
|
|
78
|
+
}
|
|
79
|
+
getTotalColumns() {
|
|
80
|
+
return [...this.totalColumns];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Add a data provider to the view
|
|
84
|
+
*/
|
|
85
|
+
addDataProvider(provider) {
|
|
86
|
+
const origin = provider.getOrigin();
|
|
87
|
+
if (this.dataProviderByOrigin.has(origin)) {
|
|
88
|
+
throw new Error(`Data provider with origin '${origin}' already added`);
|
|
89
|
+
}
|
|
90
|
+
this.dataProviderByOrigin.set(origin, provider);
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get all data providers
|
|
95
|
+
*/
|
|
96
|
+
getDataProviders() {
|
|
97
|
+
return this.dataProviderByOrigin.values();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get a data provider by origin
|
|
101
|
+
*/
|
|
102
|
+
getDataProvider(origin) {
|
|
103
|
+
return this.dataProviderByOrigin.get(origin);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Update all data providers (async)
|
|
107
|
+
*/
|
|
108
|
+
async update() {
|
|
109
|
+
for (const provider of this.dataProviderByOrigin.values()) {
|
|
110
|
+
await provider.update();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Update a specific data provider by origin
|
|
115
|
+
*/
|
|
116
|
+
async updateOrigin(origin) {
|
|
117
|
+
const provider = this.dataProviderByOrigin.get(origin);
|
|
118
|
+
if (provider) {
|
|
119
|
+
await provider.update();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get the root entry of the view
|
|
124
|
+
*/
|
|
125
|
+
getRoot() {
|
|
126
|
+
if (!this.rootEntry) {
|
|
127
|
+
// Create root comparator
|
|
128
|
+
let rootChildComparator;
|
|
129
|
+
if (this.categoryColumns.length === 0) {
|
|
130
|
+
rootChildComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, false, this.docOrderDescending);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
rootChildComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, this.categoryColumns[0].sorting === types_1.ColumnSorting.DESCENDING, this.docOrderDescending);
|
|
134
|
+
}
|
|
135
|
+
const rootSortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [], types_1.ORIGIN_VIRTUALVIEW, "root");
|
|
136
|
+
const rootDocId = this.createNewCategoryId();
|
|
137
|
+
this.rootEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, null, types_1.ORIGIN_VIRTUALVIEW, rootDocId, rootSortKey, rootChildComparator);
|
|
138
|
+
this.rootEntry.setColumnValues({});
|
|
139
|
+
this.rootEntry.setSiblingIndex(0);
|
|
140
|
+
}
|
|
141
|
+
return this.rootEntry;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate a new category ID
|
|
145
|
+
*/
|
|
146
|
+
createNewCategoryId() {
|
|
147
|
+
this.categoryIdCounter += 4;
|
|
148
|
+
return `cat_${this.categoryIdCounter}`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get the last index update time
|
|
152
|
+
*/
|
|
153
|
+
getLastModifiedTime() {
|
|
154
|
+
return this.lastIndexUpdateTime;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Apply changes from a data provider
|
|
158
|
+
*/
|
|
159
|
+
applyChanges(change) {
|
|
160
|
+
this.indexBuilt = true;
|
|
161
|
+
let indexChanged = false;
|
|
162
|
+
const origin = change.origin;
|
|
163
|
+
const categoryEntriesToCheck = [];
|
|
164
|
+
// Collect all doc IDs to remove (both explicit removals and additions that need re-adding)
|
|
165
|
+
const docIdsToRemove = new Set();
|
|
166
|
+
for (const docId of change.getRemovals()) {
|
|
167
|
+
docIdsToRemove.add(docId);
|
|
168
|
+
}
|
|
169
|
+
for (const docId of change.getAdditions().keys()) {
|
|
170
|
+
docIdsToRemove.add(docId);
|
|
171
|
+
}
|
|
172
|
+
// Process removals
|
|
173
|
+
for (const docId of docIdsToRemove) {
|
|
174
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
|
|
175
|
+
const entries = this.entriesByDocId.get(scopedKey);
|
|
176
|
+
if (entries) {
|
|
177
|
+
for (const entry of entries) {
|
|
178
|
+
// Don't remove our own entries (categories, root)
|
|
179
|
+
if (entry.isCategory() || entry.origin === types_1.ORIGIN_VIRTUALVIEW) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const parentEntry = entry.getParent();
|
|
183
|
+
if (parentEntry && parentEntry.removeChildEntry(entry.getSortKey())) {
|
|
184
|
+
indexChanged = true;
|
|
185
|
+
// Update totals
|
|
186
|
+
if (this.viewHasTotalColumns) {
|
|
187
|
+
this.removeDocFromTotalsOfParents(entry);
|
|
188
|
+
}
|
|
189
|
+
// Update descendant counts
|
|
190
|
+
this.removeDocFromCountsOfParents(entry);
|
|
191
|
+
// Mark for sibling index recalculation
|
|
192
|
+
this.markEntryForSiblingIndexFlush(parentEntry);
|
|
193
|
+
// Check if parent category is now empty
|
|
194
|
+
if (parentEntry.isCategory()) {
|
|
195
|
+
categoryEntriesToCheck.push(parentEntry);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
this.entriesByDocId.delete(scopedKey);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Process additions
|
|
203
|
+
const root = this.getRoot();
|
|
204
|
+
for (const [docId, entryData] of change.getAdditions()) {
|
|
205
|
+
const columnValues = entryData.values;
|
|
206
|
+
// Compute value function columns
|
|
207
|
+
for (const column of this.valueFunctionColumns) {
|
|
208
|
+
if (column.valueFunction) {
|
|
209
|
+
// Note: For additions, we don't have the original MindooDoc
|
|
210
|
+
// The data provider should have already computed all values
|
|
211
|
+
// This is for consistency if values depend on each other
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Check if document should be accepted (can be overridden)
|
|
215
|
+
if (!this.isAccepted(origin, docId, columnValues)) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
// Add entry to the view
|
|
219
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, root, this.categoryColumns);
|
|
220
|
+
if (addedEntries.length > 0) {
|
|
221
|
+
indexChanged = true;
|
|
222
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
|
|
223
|
+
this.entriesByDocId.set(scopedKey, addedEntries);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Clean up empty category entries
|
|
227
|
+
for (const categoryEntry of categoryEntriesToCheck) {
|
|
228
|
+
if (categoryEntry.getChildCount() === 0) {
|
|
229
|
+
this.removeCategoryFromParent(categoryEntry);
|
|
230
|
+
indexChanged = true;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Recalculate sibling indexes
|
|
234
|
+
this.processPendingSiblingIndexUpdates();
|
|
235
|
+
if (indexChanged) {
|
|
236
|
+
this.lastIndexUpdateTime = Date.now();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Override this method to filter entries
|
|
241
|
+
*/
|
|
242
|
+
isAccepted(origin, docId, columnValues) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Add an entry to the view hierarchy
|
|
247
|
+
*/
|
|
248
|
+
addEntry(origin, docId, columnValues, targetParent, remainingCategoryColumns) {
|
|
249
|
+
const createdEntries = [];
|
|
250
|
+
// If no more category columns, add as document entry
|
|
251
|
+
if (remainingCategoryColumns.length === 0) {
|
|
252
|
+
const docSortValues = [];
|
|
253
|
+
for (const sortColumn of this.sortColumns) {
|
|
254
|
+
const value = columnValues[sortColumn.name];
|
|
255
|
+
// Use first value if array
|
|
256
|
+
docSortValues.push(this.getFirstListValue(value));
|
|
257
|
+
}
|
|
258
|
+
const sortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(false, docSortValues, origin, docId);
|
|
259
|
+
const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, false, this.docOrderDescending);
|
|
260
|
+
const newDocEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, origin, docId, sortKey, childComparator);
|
|
261
|
+
newDocEntry.setColumnValues(columnValues);
|
|
262
|
+
if (targetParent.addChildEntry(newDocEntry)) {
|
|
263
|
+
// Update counts in parents
|
|
264
|
+
this.addDocToCountsOfParents(newDocEntry);
|
|
265
|
+
// Update totals in parents
|
|
266
|
+
if (this.viewHasTotalColumns) {
|
|
267
|
+
this.addDocToTotalsOfParents(newDocEntry);
|
|
268
|
+
}
|
|
269
|
+
// Mark for sibling index recalculation
|
|
270
|
+
this.markEntryForSiblingIndexFlush(targetParent);
|
|
271
|
+
}
|
|
272
|
+
createdEntries.push(newDocEntry);
|
|
273
|
+
return createdEntries;
|
|
274
|
+
}
|
|
275
|
+
// Process category column
|
|
276
|
+
const currCategoryColumn = remainingCategoryColumns[0];
|
|
277
|
+
const remainingColumns = remainingCategoryColumns.slice(1);
|
|
278
|
+
const itemName = currCategoryColumn.name;
|
|
279
|
+
const valueForColumn = columnValues[itemName];
|
|
280
|
+
// Handle multiple category values (e.g., [cat1, cat2])
|
|
281
|
+
let categoryValues;
|
|
282
|
+
if (valueForColumn === null ||
|
|
283
|
+
valueForColumn === undefined ||
|
|
284
|
+
valueForColumn === "" ||
|
|
285
|
+
(Array.isArray(valueForColumn) && valueForColumn.length === 0)) {
|
|
286
|
+
categoryValues = [null];
|
|
287
|
+
}
|
|
288
|
+
else if (Array.isArray(valueForColumn)) {
|
|
289
|
+
categoryValues = valueForColumn;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
categoryValues = [valueForColumn];
|
|
293
|
+
}
|
|
294
|
+
// Create entries for each category value
|
|
295
|
+
for (const categoryValue of categoryValues) {
|
|
296
|
+
// Handle backslash-separated categories (e.g., "2024\03")
|
|
297
|
+
if (typeof categoryValue === "string" && categoryValue.includes("\\")) {
|
|
298
|
+
const parts = categoryValue.split("\\");
|
|
299
|
+
let currentParent = targetParent;
|
|
300
|
+
for (let indentLevel = 0; indentLevel < parts.length; indentLevel++) {
|
|
301
|
+
const subCat = parts[indentLevel];
|
|
302
|
+
const isLastPart = indentLevel === parts.length - 1;
|
|
303
|
+
const subCatValue = subCat === "" ? null : subCat;
|
|
304
|
+
const categorySortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [subCatValue], types_1.ORIGIN_VIRTUALVIEW, "");
|
|
305
|
+
let existingCategory = currentParent.getChildEntry(categorySortKey);
|
|
306
|
+
if (!existingCategory) {
|
|
307
|
+
// Determine sort direction for children
|
|
308
|
+
let childCategoryDescending;
|
|
309
|
+
if (!isLastPart) {
|
|
310
|
+
childCategoryDescending = currCategoryColumn.sorting === types_1.ColumnSorting.DESCENDING;
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
const nextCatColumn = remainingColumns.length > 0 ? remainingColumns[0] : null;
|
|
314
|
+
childCategoryDescending = nextCatColumn?.sorting === types_1.ColumnSorting.DESCENDING;
|
|
315
|
+
}
|
|
316
|
+
const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, childCategoryDescending, this.docOrderDescending);
|
|
317
|
+
const newCategoryId = this.createNewCategoryId();
|
|
318
|
+
existingCategory = new VirtualViewEntryData_1.VirtualViewEntryData(this, currentParent, types_1.ORIGIN_VIRTUALVIEW, newCategoryId, categorySortKey, childComparator);
|
|
319
|
+
const catColValues = {};
|
|
320
|
+
if (subCatValue !== null) {
|
|
321
|
+
catColValues[itemName] = subCatValue;
|
|
322
|
+
}
|
|
323
|
+
existingCategory.setIndentLevels(indentLevel);
|
|
324
|
+
existingCategory.setColumnValues(catColValues);
|
|
325
|
+
if (currentParent.addChildEntry(existingCategory)) {
|
|
326
|
+
// Update descendant counts in parents
|
|
327
|
+
let parent = currentParent;
|
|
328
|
+
while (parent !== null) {
|
|
329
|
+
parent.incrementDescendantCount(true);
|
|
330
|
+
parent = parent.getParent();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(types_1.ORIGIN_VIRTUALVIEW, newCategoryId));
|
|
334
|
+
this.entriesByDocId.set(scopedKey, [existingCategory]);
|
|
335
|
+
this.markEntryForSiblingIndexFlush(currentParent);
|
|
336
|
+
}
|
|
337
|
+
currentParent = existingCategory;
|
|
338
|
+
}
|
|
339
|
+
// Continue with remaining categories under the last subcategory
|
|
340
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, currentParent, remainingColumns);
|
|
341
|
+
createdEntries.push(...addedEntries);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
// Simple category value
|
|
345
|
+
const categorySortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [categoryValue], types_1.ORIGIN_VIRTUALVIEW, "");
|
|
346
|
+
let existingCategory = targetParent.getChildEntry(categorySortKey);
|
|
347
|
+
if (!existingCategory) {
|
|
348
|
+
const nextCatColumn = remainingColumns.length > 0 ? remainingColumns[0] : null;
|
|
349
|
+
const childCategoryDescending = nextCatColumn?.sorting === types_1.ColumnSorting.DESCENDING;
|
|
350
|
+
const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, childCategoryDescending, this.docOrderDescending);
|
|
351
|
+
const newCategoryId = this.createNewCategoryId();
|
|
352
|
+
existingCategory = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, types_1.ORIGIN_VIRTUALVIEW, newCategoryId, categorySortKey, childComparator);
|
|
353
|
+
const catColValues = {};
|
|
354
|
+
if (categoryValue !== null) {
|
|
355
|
+
catColValues[itemName] = categoryValue;
|
|
356
|
+
}
|
|
357
|
+
existingCategory.setColumnValues(catColValues);
|
|
358
|
+
if (targetParent.addChildEntry(existingCategory)) {
|
|
359
|
+
// Update descendant counts in parents
|
|
360
|
+
let parent = targetParent;
|
|
361
|
+
while (parent !== null) {
|
|
362
|
+
parent.incrementDescendantCount(true);
|
|
363
|
+
parent = parent.getParent();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(types_1.ORIGIN_VIRTUALVIEW, newCategoryId));
|
|
367
|
+
this.entriesByDocId.set(scopedKey, [existingCategory]);
|
|
368
|
+
this.markEntryForSiblingIndexFlush(targetParent);
|
|
369
|
+
}
|
|
370
|
+
// Continue with remaining categories
|
|
371
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, existingCategory, remainingColumns);
|
|
372
|
+
createdEntries.push(...addedEntries);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return createdEntries;
|
|
376
|
+
}
|
|
377
|
+
getFirstListValue(value) {
|
|
378
|
+
if (Array.isArray(value)) {
|
|
379
|
+
return value.length > 0 ? value[0] : null;
|
|
380
|
+
}
|
|
381
|
+
return value;
|
|
382
|
+
}
|
|
383
|
+
addDocToCountsOfParents(docEntry) {
|
|
384
|
+
let parent = docEntry.getParent();
|
|
385
|
+
while (parent !== null) {
|
|
386
|
+
parent.incrementDescendantCount(false);
|
|
387
|
+
parent = parent.getParent();
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
removeDocFromCountsOfParents(docEntry) {
|
|
391
|
+
let parent = docEntry.getParent();
|
|
392
|
+
while (parent !== null) {
|
|
393
|
+
parent.decrementDescendantCount(false);
|
|
394
|
+
parent = parent.getParent();
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
addDocToTotalsOfParents(docEntry) {
|
|
398
|
+
const docTotalValues = new Map();
|
|
399
|
+
for (const totalColumn of this.totalColumns) {
|
|
400
|
+
const itemName = totalColumn.name;
|
|
401
|
+
const docVal = docEntry.getAsNumber(itemName, null);
|
|
402
|
+
if (docVal !== null) {
|
|
403
|
+
docTotalValues.set(itemName, docVal);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
let parent = docEntry.getParent();
|
|
407
|
+
while (parent !== null) {
|
|
408
|
+
for (const [itemName, value] of docTotalValues) {
|
|
409
|
+
parent.addTotalValue(itemName, value);
|
|
410
|
+
}
|
|
411
|
+
this.computeTotalColumnValues(parent);
|
|
412
|
+
parent = parent.getParent();
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
removeDocFromTotalsOfParents(docEntry) {
|
|
416
|
+
const docTotalValues = new Map();
|
|
417
|
+
for (const totalColumn of this.totalColumns) {
|
|
418
|
+
const itemName = totalColumn.name;
|
|
419
|
+
const docVal = docEntry.getAsNumber(itemName, null);
|
|
420
|
+
if (docVal !== null) {
|
|
421
|
+
docTotalValues.set(itemName, docVal);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
let parent = docEntry.getParent();
|
|
425
|
+
while (parent !== null) {
|
|
426
|
+
for (const [itemName, value] of docTotalValues) {
|
|
427
|
+
parent.addTotalValue(itemName, -value);
|
|
428
|
+
}
|
|
429
|
+
this.computeTotalColumnValues(parent);
|
|
430
|
+
parent = parent.getParent();
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
computeTotalColumnValues(catEntry) {
|
|
434
|
+
for (const totalColumn of this.totalColumns) {
|
|
435
|
+
const itemName = totalColumn.name;
|
|
436
|
+
const totalValue = catEntry.getTotalValue(itemName);
|
|
437
|
+
if (totalValue === null) {
|
|
438
|
+
// Remove from column values if no total
|
|
439
|
+
catEntry.setColumnValue(itemName, undefined);
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
if (totalColumn.totalMode === types_1.TotalMode.SUM) {
|
|
443
|
+
catEntry.setColumnValue(itemName, totalValue);
|
|
444
|
+
}
|
|
445
|
+
else if (totalColumn.totalMode === types_1.TotalMode.AVERAGE) {
|
|
446
|
+
const docCount = catEntry.getDescendantDocumentCount();
|
|
447
|
+
if (docCount === 0) {
|
|
448
|
+
catEntry.setColumnValue(itemName, undefined);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
catEntry.setColumnValue(itemName, totalValue / docCount);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
removeCategoryFromParent(entry) {
|
|
458
|
+
const parent = entry.getParent();
|
|
459
|
+
if (parent) {
|
|
460
|
+
if (parent.removeChildEntry(entry.getSortKey())) {
|
|
461
|
+
this.markEntryForSiblingIndexFlush(parent);
|
|
462
|
+
// Remove from lookup
|
|
463
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(entry.origin, entry.docId));
|
|
464
|
+
this.entriesByDocId.delete(scopedKey);
|
|
465
|
+
// Recursively check if parent is now empty
|
|
466
|
+
if (parent.isCategory() && parent.getChildCount() === 0) {
|
|
467
|
+
this.removeCategoryFromParent(parent);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
markEntryForSiblingIndexFlush(entry) {
|
|
473
|
+
const key = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(entry.origin, entry.docId));
|
|
474
|
+
let entries = this.pendingSiblingIndexFlush.get(key);
|
|
475
|
+
if (!entries) {
|
|
476
|
+
entries = [];
|
|
477
|
+
this.pendingSiblingIndexFlush.set(key, entries);
|
|
478
|
+
}
|
|
479
|
+
if (!entries.includes(entry)) {
|
|
480
|
+
entries.push(entry);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
processPendingSiblingIndexUpdates() {
|
|
484
|
+
for (const entries of this.pendingSiblingIndexFlush.values()) {
|
|
485
|
+
for (const entry of entries) {
|
|
486
|
+
const children = entry.getChildEntries();
|
|
487
|
+
let pos = 1;
|
|
488
|
+
for (const child of children) {
|
|
489
|
+
child.setSiblingIndex(pos++);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
this.pendingSiblingIndexFlush.clear();
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Get all entries for a document ID
|
|
497
|
+
*/
|
|
498
|
+
getEntries(origin, docId) {
|
|
499
|
+
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
|
|
500
|
+
return this.entriesByDocId.get(scopedKey) ?? [];
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
exports.VirtualView = VirtualView;
|
|
504
|
+
//# sourceMappingURL=VirtualView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualView.js","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualView.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ColumnSorting, TotalMode, ColumnValueFunction } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Options for creating a VirtualViewColumn
|
|
4
|
+
*/
|
|
5
|
+
export interface VirtualViewColumnOptions {
|
|
6
|
+
/** Programmatic name / item name for the column */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Display title for the column */
|
|
9
|
+
title?: string;
|
|
10
|
+
/** Whether this column creates categories */
|
|
11
|
+
isCategory?: boolean;
|
|
12
|
+
/** Whether this column is hidden from display */
|
|
13
|
+
isHidden?: boolean;
|
|
14
|
+
/** Sort direction for this column */
|
|
15
|
+
sorting?: ColumnSorting;
|
|
16
|
+
/** Aggregation mode for category totals */
|
|
17
|
+
totalMode?: TotalMode;
|
|
18
|
+
/** Function to compute column value from document data */
|
|
19
|
+
valueFunction?: ColumnValueFunction;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Defines a column in a VirtualView.
|
|
23
|
+
* Columns can be used for categorization, sorting, display, and totals.
|
|
24
|
+
*/
|
|
25
|
+
export declare class VirtualViewColumn {
|
|
26
|
+
/** Programmatic name / item name for the column */
|
|
27
|
+
readonly name: string;
|
|
28
|
+
/** Display title for the column */
|
|
29
|
+
readonly title: string;
|
|
30
|
+
/** Whether this column creates categories */
|
|
31
|
+
readonly isCategory: boolean;
|
|
32
|
+
/** Whether this column is hidden from display */
|
|
33
|
+
readonly isHidden: boolean;
|
|
34
|
+
/** Sort direction for this column */
|
|
35
|
+
readonly sorting: ColumnSorting;
|
|
36
|
+
/** Aggregation mode for category totals */
|
|
37
|
+
readonly totalMode: TotalMode;
|
|
38
|
+
/** Function to compute column value from document data */
|
|
39
|
+
readonly valueFunction: ColumnValueFunction | undefined;
|
|
40
|
+
constructor(options: VirtualViewColumnOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Create a category column
|
|
43
|
+
*/
|
|
44
|
+
static category(name: string, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "isCategory">>): VirtualViewColumn;
|
|
45
|
+
/**
|
|
46
|
+
* Create a sorted column (non-category)
|
|
47
|
+
*/
|
|
48
|
+
static sorted(name: string, sorting?: ColumnSorting, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "sorting">>): VirtualViewColumn;
|
|
49
|
+
/**
|
|
50
|
+
* Create a display-only column (not sorted, not category)
|
|
51
|
+
*/
|
|
52
|
+
static display(name: string, options?: Partial<Omit<VirtualViewColumnOptions, "name">>): VirtualViewColumn;
|
|
53
|
+
/**
|
|
54
|
+
* Create a total column for category aggregation
|
|
55
|
+
*/
|
|
56
|
+
static total(name: string, totalMode: TotalMode, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "totalMode">>): VirtualViewColumn;
|
|
57
|
+
toString(): string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=VirtualViewColumn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualViewColumn.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualViewColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAE5C,OAAO,EAAE,wBAAwB;IAe7C;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,GACvE,iBAAiB;IASpB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAuC,EAChD,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACpE,iBAAiB;IAQpB;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,GACxD,iBAAiB;IAQpB;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,GACtE,iBAAiB;IASpB,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VirtualViewColumn = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
/**
|
|
6
|
+
* Defines a column in a VirtualView.
|
|
7
|
+
* Columns can be used for categorization, sorting, display, and totals.
|
|
8
|
+
*/
|
|
9
|
+
class VirtualViewColumn {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.name = options.name;
|
|
12
|
+
this.title = options.title ?? options.name;
|
|
13
|
+
this.isCategory = options.isCategory ?? false;
|
|
14
|
+
this.isHidden = options.isHidden ?? false;
|
|
15
|
+
this.sorting = options.sorting ?? types_1.ColumnSorting.NONE;
|
|
16
|
+
this.totalMode = options.totalMode ?? types_1.TotalMode.NONE;
|
|
17
|
+
this.valueFunction = options.valueFunction;
|
|
18
|
+
// Validation: Category columns must be sorted
|
|
19
|
+
if (this.isCategory && this.sorting === types_1.ColumnSorting.NONE) {
|
|
20
|
+
throw new Error(`Category column '${this.name}' must have a sorting direction`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a category column
|
|
25
|
+
*/
|
|
26
|
+
static category(name, options) {
|
|
27
|
+
return new VirtualViewColumn({
|
|
28
|
+
name,
|
|
29
|
+
isCategory: true,
|
|
30
|
+
sorting: types_1.ColumnSorting.ASCENDING, // Default for categories
|
|
31
|
+
...options,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a sorted column (non-category)
|
|
36
|
+
*/
|
|
37
|
+
static sorted(name, sorting = types_1.ColumnSorting.ASCENDING, options) {
|
|
38
|
+
return new VirtualViewColumn({
|
|
39
|
+
name,
|
|
40
|
+
sorting,
|
|
41
|
+
...options,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a display-only column (not sorted, not category)
|
|
46
|
+
*/
|
|
47
|
+
static display(name, options) {
|
|
48
|
+
return new VirtualViewColumn({
|
|
49
|
+
name,
|
|
50
|
+
sorting: types_1.ColumnSorting.NONE,
|
|
51
|
+
...options,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a total column for category aggregation
|
|
56
|
+
*/
|
|
57
|
+
static total(name, totalMode, options) {
|
|
58
|
+
return new VirtualViewColumn({
|
|
59
|
+
name,
|
|
60
|
+
totalMode,
|
|
61
|
+
sorting: types_1.ColumnSorting.NONE,
|
|
62
|
+
...options,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
toString() {
|
|
66
|
+
return `VirtualViewColumn [name=${this.name}, title=${this.title}, isCategory=${this.isCategory}, sorting=${this.sorting}, totalMode=${this.totalMode}]`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.VirtualViewColumn = VirtualViewColumn;
|
|
70
|
+
//# sourceMappingURL=VirtualViewColumn.js.map
|