@talxis/base-controls 1.2410.4 → 1.2410.6
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/dist/components/DatasetControl/DatasetControl.js +3 -8
- package/dist/components/DatasetControl/DatasetControl.js.map +1 -1
- package/dist/components/Grid/constants.d.ts +1 -2
- package/dist/components/Grid/constants.js +2 -2
- package/dist/components/Grid/constants.js.map +1 -1
- package/dist/components/Grid/core/components/AgGrid/AgGrid.js +2 -3
- package/dist/components/Grid/core/components/AgGrid/AgGrid.js.map +1 -1
- package/dist/components/Grid/core/components/AgGrid/controllers/useAgGridController.d.ts +2 -2
- package/dist/components/Grid/core/components/AgGrid/controllers/useAgGridController.js +8 -4
- package/dist/components/Grid/core/components/AgGrid/controllers/useAgGridController.js.map +1 -1
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.d.ts +1 -0
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.js +20 -9
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/Commands/Commands.d.ts +2 -2
- package/dist/components/Grid/core/components/Cell/Commands/Commands.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/Commands/Icon.d.ts +2 -2
- package/dist/components/Grid/core/components/Cell/Commands/Icon.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/Commands/useCommands.d.ts +2 -2
- package/dist/components/Grid/core/components/Cell/Commands/useCommands.js +2 -0
- package/dist/components/Grid/core/components/Cell/Commands/useCommands.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/EditableCell/EditableCell.js +4 -4
- package/dist/components/Grid/core/components/Cell/EditableCell/EditableCell.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/Notifications.d.ts +11 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/Notifications.js +93 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/Notifications.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/styles.d.ts +36 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/styles.js +42 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/Notifications/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyCell.d.ts +2 -2
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyCell.js +106 -41
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyCell.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyOptionSet/ReadOnlyOptionSet.d.ts +2 -2
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyOptionSet/ReadOnlyOptionSet.js +3 -3
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/ReadOnlyOptionSet/ReadOnlyOptionSet.js.map +1 -1
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/styles.d.ts +49 -2
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/styles.js +51 -4
- package/dist/components/Grid/core/components/Cell/ReadOnlyCell/styles.js.map +1 -1
- package/dist/components/Grid/core/components/ColumnHeader/ColumnHeader.js +1 -1
- package/dist/components/Grid/core/components/ColumnHeader/ColumnHeader.js.map +1 -1
- package/dist/components/Grid/core/components/ColumnHeader/styles.d.ts +2 -0
- package/dist/components/Grid/core/components/ColumnHeader/styles.js +2 -0
- package/dist/components/Grid/core/components/ColumnHeader/styles.js.map +1 -1
- package/dist/components/Grid/core/components/Component/model/Component.js +11 -9
- package/dist/components/Grid/core/components/Component/model/Component.js.map +1 -1
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/ChangeEditor.js.map +1 -1
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/RecordGrids/RecordGrids.js +5 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/RecordGrids/RecordGrids.js.map +1 -1
- package/dist/components/Grid/core/controllers/useGridController.js.map +1 -1
- package/dist/components/Grid/core/interfaces/IGridColumn.d.ts +9 -18
- package/dist/components/Grid/core/model/Grid.d.ts +7 -7
- package/dist/components/Grid/core/model/Grid.js +52 -62
- package/dist/components/Grid/core/model/Grid.js.map +1 -1
- package/dist/components/Grid/core/model/GridDependency.d.ts +1 -1
- package/dist/components/Grid/core/model/Metadata.d.ts +2 -3
- package/dist/components/Grid/core/model/Metadata.js +13 -9
- package/dist/components/Grid/core/model/Metadata.js.map +1 -1
- package/dist/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.d.ts +8 -8
- package/dist/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.js +21 -25
- package/dist/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.js.map +1 -1
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/model/ConditionComponentValue.d.ts +16 -16
- package/dist/components/Grid/filtering/model/Condition.js +7 -3
- package/dist/components/Grid/filtering/model/Condition.js.map +1 -1
- package/dist/components/Grid/filtering/model/Filtering.js +4 -4
- package/dist/components/Grid/filtering/model/Filtering.js.map +1 -1
- package/dist/components/Grid/interfaces.d.ts +3 -12
- package/dist/components/Grid/selection/controllers/useSelectionController.d.ts +2 -2
- package/dist/components/Grid/selection/controllers/useSelectionController.js.map +1 -1
- package/dist/components/Grid/selection/model/Selection.d.ts +3 -3
- package/dist/components/Grid/selection/model/Selection.js.map +1 -1
- package/dist/components/Grid/sorting/Sorting.js +3 -3
- package/dist/components/Grid/sorting/Sorting.js.map +1 -1
- package/dist/components/Grid/sorting/components/SortingContextualMenu/SortingContextualMenu.js +3 -3
- package/dist/components/Grid/sorting/components/SortingContextualMenu/SortingContextualMenu.js.map +1 -1
- package/dist/components/Grid/translations.d.ts +4 -0
- package/dist/components/Grid/translations.js +1 -0
- package/dist/components/Grid/translations.js.map +1 -1
- package/dist/components/Grid/validation/controllers/useRecordValidationController.d.ts +2 -2
- package/dist/components/Grid/validation/controllers/useRecordValidationController.js +2 -2
- package/dist/components/Grid/validation/controllers/useRecordValidationController.js.map +1 -1
- package/dist/hooks/useControl.js +1 -1
- package/dist/hooks/useControl.js.map +1 -1
- package/dist/hooks/useThemeOverride.d.ts +1 -0
- package/dist/hooks/useThemeOverride.js +23 -0
- package/dist/hooks/useThemeOverride.js.map +1 -0
- package/dist/index.d.ts +313 -346
- package/dist/interfaces/property.d.ts +0 -29
- package/dist/utils/Theme.js +26 -0
- package/dist/utils/Theme.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/// <reference types="powerapps-component-framework" />
|
|
2
|
-
import {
|
|
2
|
+
import { IDataset, IRecord } from "@talxis/client-libraries";
|
|
3
3
|
import { Filtering } from "../../filtering/model/Filtering";
|
|
4
|
-
import {
|
|
4
|
+
import { IGrid } from "../../interfaces";
|
|
5
5
|
import { Paging } from "../../paging/model/Paging";
|
|
6
6
|
import { Selection } from "../../selection/model/Selection";
|
|
7
7
|
import { Sorting } from "../../sorting/Sorting";
|
|
8
|
-
import { IGridColumn } from "../interfaces/IGridColumn";
|
|
9
8
|
import { KeyHoldListener } from "../services/KeyListener";
|
|
10
9
|
import { RecordUpdateService } from "../services/RecordUpdateService/model/RecordUpdateService";
|
|
11
10
|
import { Metadata } from "./Metadata";
|
|
11
|
+
import { IGridColumn } from "../interfaces/IGridColumn";
|
|
12
12
|
export declare class Grid {
|
|
13
13
|
private _props;
|
|
14
14
|
private _dataset;
|
|
@@ -27,14 +27,14 @@ export declare class Grid {
|
|
|
27
27
|
get isNavigationEnabled(): boolean;
|
|
28
28
|
get isEditable(): boolean;
|
|
29
29
|
get parameters(): import("../../interfaces").IGridParameters;
|
|
30
|
-
get error(): boolean
|
|
31
|
-
get errorMessage(): string
|
|
30
|
+
get error(): boolean;
|
|
31
|
+
get errorMessage(): string;
|
|
32
32
|
get labels(): any;
|
|
33
|
-
get dataset():
|
|
33
|
+
get dataset(): IDataset;
|
|
34
34
|
get pcfContext(): ComponentFramework.Context<any, ComponentFramework.IEventBag>;
|
|
35
35
|
get props(): IGrid;
|
|
36
36
|
get columns(): IGridColumn[];
|
|
37
|
-
get records():
|
|
37
|
+
get records(): IRecord[];
|
|
38
38
|
get recordUpdateService(): RecordUpdateService;
|
|
39
39
|
get sorting(): Sorting;
|
|
40
40
|
get metadata(): Metadata;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataTypes, Constants, Attribute } from '@talxis/client-libraries';
|
|
2
2
|
import { Filtering } from '../../filtering/model/Filtering.js';
|
|
3
3
|
import { Paging } from '../../paging/model/Paging.js';
|
|
4
4
|
import { Selection } from '../../selection/model/Selection.js';
|
|
@@ -7,6 +7,7 @@ import { ROW_HEIGHT } from '../constants.js';
|
|
|
7
7
|
import { DataType } from '../enums/DataType.js';
|
|
8
8
|
import { RecordUpdateService } from '../services/RecordUpdateService/model/RecordUpdateService.js';
|
|
9
9
|
import { Metadata } from './Metadata.js';
|
|
10
|
+
import { CHECKBOX_COLUMN_KEY } from '../../constants.js';
|
|
10
11
|
|
|
11
12
|
class Grid {
|
|
12
13
|
constructor(props, labels, keyHoldListener) {
|
|
@@ -145,82 +146,59 @@ class Grid {
|
|
|
145
146
|
this._records = Object.values(this._dataset.records);
|
|
146
147
|
this._previousRecordsReference = this._dataset.records;
|
|
147
148
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
149
|
+
Object.values(this._dependencies).map(dep => {
|
|
150
|
+
dep.onDependenciesUpdated();
|
|
151
|
+
});
|
|
151
152
|
this._shouldRerender = !this.shouldRerender;
|
|
152
153
|
}
|
|
153
154
|
async refreshColumns() {
|
|
154
155
|
const gridColumns = [];
|
|
155
156
|
for (const column of this._dataset.columns) {
|
|
156
|
-
if (column.isHidden) {
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
157
|
const sorted = this._dataset.sorting?.find(sort => sort.name === column.name);
|
|
160
|
-
const entityAliasName = column.name?.includes('.') ? column.name.split('.')[0] : null;
|
|
161
|
-
const attributeName = entityAliasName ? column.name.split('.')[1] : column.name;
|
|
162
|
-
const key = entityAliasName ? `${entityAliasName}.${attributeName}` : attributeName;
|
|
163
|
-
switch (column.dataType) {
|
|
164
|
-
case DataType.FILE:
|
|
165
|
-
case DataType.IMAGE: {
|
|
166
|
-
if (entityAliasName) {
|
|
167
|
-
//we do not support file fields with linked entities
|
|
168
|
-
//the getValue API throws an error in Power Apps
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
158
|
const gridColumn = {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
displayName: column.displayName,
|
|
180
|
-
isEditable: column.isEditable,
|
|
181
|
-
isFilterable: this._isColumnFilterable(column),
|
|
182
|
-
isRequired: column.isRequired,
|
|
183
|
-
isSortable: this._isColumnSortable(column),
|
|
184
|
-
isSorted: sorted ? true : false,
|
|
159
|
+
...column,
|
|
160
|
+
isEditable: await this._isColumnEditable(column),
|
|
161
|
+
isRequired: await this._isColumnRequired(column),
|
|
162
|
+
isFilterable: await this._isColumnFilterable(column),
|
|
163
|
+
disableSorting: !this._isColumnSortable(column),
|
|
185
164
|
isSortedDescending: sorted?.sortDirection === 1 ? true : false,
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
165
|
+
isResizable: true,
|
|
166
|
+
isSorted: sorted ? true : false,
|
|
167
|
+
isFiltered: false
|
|
189
168
|
};
|
|
190
169
|
const condition = await this.filtering.condition(gridColumn);
|
|
191
170
|
gridColumn.isFiltered = condition.isAppliedToDataset;
|
|
192
|
-
gridColumn.isEditable = await this._isColumnEditable(gridColumn);
|
|
193
|
-
gridColumn.isRequired = await this._isColumnRequired(gridColumn);
|
|
194
|
-
if (gridColumn.key === RIBBON_COLUMN_KEY) {
|
|
195
|
-
gridColumn.isFilterable = false;
|
|
196
|
-
gridColumn.isSortable = false;
|
|
197
|
-
}
|
|
198
171
|
gridColumns.push(gridColumn);
|
|
199
172
|
}
|
|
200
|
-
/* gridColumns.unshift({
|
|
201
|
-
key: RIBBON_COLUMN_KEY,
|
|
202
|
-
attributeName: RIBBON_COLUMN_KEY,
|
|
203
|
-
}) */
|
|
204
173
|
if (this.selection.type !== undefined) {
|
|
205
174
|
gridColumns.unshift({
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
175
|
+
name: CHECKBOX_COLUMN_KEY,
|
|
176
|
+
alias: CHECKBOX_COLUMN_KEY,
|
|
177
|
+
dataType: DataTypes.SingleLineText,
|
|
178
|
+
displayName: '',
|
|
179
|
+
isEditable: true,
|
|
180
|
+
isFilterable: false,
|
|
181
|
+
isFiltered: false,
|
|
182
|
+
isRequired: false,
|
|
183
|
+
isResizable: false,
|
|
184
|
+
disableSorting: true,
|
|
185
|
+
isSorted: false,
|
|
186
|
+
isSortedDescending: false,
|
|
187
|
+
order: 0,
|
|
188
|
+
visualSizeFactor: 45,
|
|
210
189
|
});
|
|
211
190
|
}
|
|
212
191
|
this._columns = gridColumns;
|
|
213
192
|
return gridColumns;
|
|
214
193
|
}
|
|
215
194
|
async _isColumnEditable(column) {
|
|
216
|
-
//top priority, overriden through props
|
|
217
|
-
if (typeof column.isEditable === 'boolean') {
|
|
218
|
-
return column.isEditable;
|
|
219
|
-
}
|
|
220
195
|
//only allow editing if specifically allowed
|
|
221
196
|
if (!this._props.parameters.EnableEditing?.raw) {
|
|
222
197
|
return false;
|
|
223
198
|
}
|
|
199
|
+
if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
224
202
|
//these field types do not support editing
|
|
225
203
|
switch (column.dataType) {
|
|
226
204
|
case DataType.FILE:
|
|
@@ -228,19 +206,20 @@ class Grid {
|
|
|
228
206
|
return false;
|
|
229
207
|
}
|
|
230
208
|
}
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
return metadata.Attributes.get(
|
|
209
|
+
const attributeName = Attribute.GetNameFromAlias(column.name);
|
|
210
|
+
const metadata = await this.metadata.get(column.name);
|
|
211
|
+
return metadata.Attributes.get(attributeName)?.attributeDescriptor?.IsValidForUpdate ?? false;
|
|
234
212
|
}
|
|
235
213
|
async _isColumnRequired(column) {
|
|
236
|
-
if (typeof column.isRequired === 'boolean') {
|
|
237
|
-
return column.isRequired;
|
|
238
|
-
}
|
|
239
214
|
if (!this.parameters.EnableEditing?.raw) {
|
|
240
215
|
return false;
|
|
241
216
|
}
|
|
242
|
-
|
|
243
|
-
|
|
217
|
+
if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
const metadata = await this.metadata.get(column.name);
|
|
221
|
+
const attributeName = Attribute.GetNameFromAlias(column.name);
|
|
222
|
+
const requiredLevel = metadata.Attributes.get(attributeName)?.attributeDescriptor?.RequiredLevel;
|
|
244
223
|
if (requiredLevel === 1 || requiredLevel === 2) {
|
|
245
224
|
return true;
|
|
246
225
|
}
|
|
@@ -253,21 +232,32 @@ class Grid {
|
|
|
253
232
|
if (this._props.parameters.EnableSorting?.raw === false) {
|
|
254
233
|
return false;
|
|
255
234
|
}
|
|
235
|
+
if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
256
238
|
switch (column.dataType) {
|
|
257
239
|
case DataType.IMAGE: {
|
|
258
240
|
return false;
|
|
259
241
|
}
|
|
260
242
|
}
|
|
243
|
+
if (column.disableSorting === undefined) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
261
246
|
return !column.disableSorting;
|
|
262
247
|
}
|
|
263
|
-
_isColumnFilterable(column) {
|
|
248
|
+
async _isColumnFilterable(column) {
|
|
264
249
|
if (column.name.endsWith('__virtual')) {
|
|
265
250
|
return false;
|
|
266
251
|
}
|
|
267
252
|
if (this.props.parameters.EnableFiltering?.raw === false) {
|
|
268
253
|
return false;
|
|
269
254
|
}
|
|
270
|
-
|
|
255
|
+
if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
const metadata = await this.metadata.get(column.name);
|
|
259
|
+
const attributeName = Attribute.GetNameFromAlias(column.name);
|
|
260
|
+
return metadata.Attributes.get(attributeName)?.attributeDescriptor?.isFilterable ?? true;
|
|
271
261
|
}
|
|
272
262
|
_getMaxHeight() {
|
|
273
263
|
let maxHeight = this._initialPageSize * ROW_HEIGHT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sources":["../../../../../src/components/Grid/core/model/Grid.ts"],"sourcesContent":["import { IDatasetProperty } from \"../../../../interfaces\";\nimport { RIBBON_COLUMN_KEY } from \"../../constants\";\nimport { Filtering } from \"../../filtering/model/Filtering\";\nimport { IEntityColumn, IEntityRecord, IGrid } from \"../../interfaces\";\nimport { Paging } from \"../../paging/model/Paging\";\nimport { Selection } from \"../../selection/model/Selection\";\nimport { Sorting } from \"../../sorting/Sorting\";\nimport { ROW_HEIGHT } from \"../constants\";\nimport { DataType } from \"../enums/DataType\";\nimport { IGridColumn } from \"../interfaces/IGridColumn\";\nimport { KeyHoldListener } from \"../services/KeyListener\";\nimport { RecordUpdateService } from \"../services/RecordUpdateService/model/RecordUpdateService\";\nimport { Metadata } from \"./Metadata\";\n\nexport class Grid {\n private _props: IGrid;\n private _dataset: IDatasetProperty\n private _pcfContext: ComponentFramework.Context<any>;\n private _columns: IGridColumn[] = [];\n //used for optimization\n private _previousRecordsReference: {\n [id: string]: IEntityRecord;\n } = {};\n //TODO: fix types\n private _labels: any;\n private _shouldRerender: boolean = false;\n private _records: IEntityRecord[] = [];\n //TODO: the dependencies might not have fully loaded grid\n //need to make sure that the grid is initialized before creating them\n private _dependencies: {\n recordUpdateService: RecordUpdateService,\n filtering: Filtering,\n sorting: Sorting,\n metadata: Metadata,\n selection: Selection,\n paging: Paging\n };\n private _maxHeight: number;\n private _minHeight: number = 150;\n private _initialPageSize: number;\n public readonly keyHoldListener: KeyHoldListener;\n\n constructor(props: IGrid, labels: any, keyHoldListener: KeyHoldListener) {\n this._props = props;\n this._dataset = props.parameters.Grid;\n this._pcfContext = props.context;\n this._labels = labels;\n this.keyHoldListener = keyHoldListener;\n\n this._dependencies = {\n recordUpdateService: new RecordUpdateService(this),\n filtering: new Filtering(this),\n selection: new Selection(this),\n metadata: new Metadata(this),\n sorting: new Sorting(this),\n paging: new Paging(this)\n }\n this._initialPageSize = this.paging.pageSize;\n this._maxHeight = this._getMaxHeight();\n\n };\n public get isNavigationEnabled() {\n //enabled by default\n return this.parameters.EnableNavigation?.raw !== false;\n }\n public get isEditable() {\n return this._columns.find(x => x.isEditable) ? true : false;\n }\n public get parameters() {\n return this._props.parameters\n }\n public get error() {\n return this._dataset.error;\n }\n public get errorMessage() {\n return this._dataset.errorMessage\n }\n public get labels() {\n return this._labels;\n }\n public get dataset() {\n return this._dataset;\n }\n public get pcfContext() {\n return this._pcfContext;\n }\n public get props() {\n return this._props;\n }\n public get columns() {\n return this._columns;\n }\n public get records() {\n return this._records\n }\n public get recordUpdateService() {\n return this._dependencies.recordUpdateService;\n }\n public get sorting() {\n return this._dependencies.sorting;\n }\n public get metadata() {\n return this._dependencies.metadata;\n }\n public get filtering() {\n return this._dependencies.filtering;\n }\n public get selection() {\n return this._dependencies.selection;\n }\n public get paging() {\n return this._dependencies.paging;\n }\n public get shouldRerender() {\n return this._shouldRerender;\n }\n public get loading() {\n return this._dataset.loading;\n }\n public get state() {\n return this._props.state;\n }\n public get useContainerAsHeight() {\n return this.parameters.UseContainerAsHeight?.raw === true;\n }\n public get enableOptionSetColors() {\n return this.parameters.EnableOptionSetColors?.raw === true;\n }\n public get linking() {\n return this.dataset.linking;\n }\n public get inlineRibbonButtonIds() {\n const idString = this.parameters.InlineRibbonButtonIds?.raw;\n if (!idString) {\n return undefined;\n }\n return idString.split(',');\n }\n\n public get height() {\n let height = this._maxHeight;\n if(this.parameters.Height?.raw) {\n return this.parameters.Height?.raw;\n }\n if(this._records.length === 0) {\n height = this._minHeight;\n }\n else if(this._records.length <= this._initialPageSize) {\n height = this._records.length * ROW_HEIGHT;\n }\n if(height > this._maxHeight) {\n height = this._maxHeight;\n }\n return `${height}px`;\n\n }\n\n public openDatasetItem(entityReference: ComponentFramework.EntityReference) {\n this._dataset.openDatasetItem(entityReference);\n const clickedRecord = this.records.find(x => x.getRecordId() === entityReference.id.guid);\n //we need to make sure the item we are opening gets selected in order for the\n //OnOpenRecord ribbon scripts to work correctly\n //if no record found we have clicked a lookup, no selection should be happening in that case\n if (clickedRecord) {\n this.selection.toggle(clickedRecord, true, true, true);\n }\n }\n\n public updateDependencies(props: IGrid): void {\n this._props = props;\n this._dataset = props.parameters.Grid;\n this._pcfContext = props.context;\n //THIS COULD MAKE GRID STOP WORKING IN POWER APPS!\n if(this._previousRecordsReference !== this._dataset.records) {\n this._records = Object.values(this._dataset.records);\n this._previousRecordsReference = this._dataset.records;\n }\n for (const [key, dependency] of Object.entries(this._dependencies)) {\n dependency.onDependenciesUpdated()\n }\n this._shouldRerender = !this.shouldRerender;\n }\n public async refreshColumns(): Promise<IGridColumn[]> {\n const gridColumns: IGridColumn[] = [];\n for (const column of this._dataset.columns) {\n if(column.isHidden) {\n continue;\n }\n const sorted = this._dataset.sorting?.find(sort => sort.name === column.name);\n const entityAliasName = column.name?.includes('.') ? column.name.split('.')[0] : null;\n const attributeName = entityAliasName ? column.name.split('.')[1] : column.name;\n const key = entityAliasName ? `${entityAliasName}.${attributeName}` : attributeName;\n switch (column.dataType) {\n case DataType.FILE:\n case DataType.IMAGE: {\n if (entityAliasName) {\n //we do not support file fields with linked entities\n //the getValue API throws an error in Power Apps\n continue;\n }\n }\n }\n const gridColumn = {\n entityAliasName: entityAliasName,\n attributeName: attributeName,\n key: entityAliasName ? `${entityAliasName}.${attributeName}` : attributeName,\n isPrimary: column.isPrimary,\n dataType: column.dataType as DataType,\n displayName: column.displayName,\n isEditable: column.isEditable,\n isFilterable: this._isColumnFilterable(column),\n isRequired: column.isRequired,\n isSortable: this._isColumnSortable(column),\n isSorted: sorted ? true : false,\n isSortedDescending: sorted?.sortDirection === 1 ? true : false,\n width: this.state?.columnSizing?.columnSizingModel?.find((x: any) => x.colId === key)?.width || column.visualSizeFactor,\n isResizable: column.isResizable ?? true,\n isHidden: column.isHidden\n } as IGridColumn;\n\n const condition = await this.filtering.condition(gridColumn);\n gridColumn.isFiltered = condition.isAppliedToDataset;\n gridColumn.isEditable = await this._isColumnEditable(gridColumn);\n gridColumn.isRequired = await this._isColumnRequired(gridColumn);\n\n if (gridColumn.key === RIBBON_COLUMN_KEY) {\n gridColumn.isFilterable = false;\n gridColumn.isSortable = false;\n }\n gridColumns.push(gridColumn);\n }\n/* gridColumns.unshift({\n key: RIBBON_COLUMN_KEY,\n attributeName: RIBBON_COLUMN_KEY,\n }) */\n if (this.selection.type !== undefined) {\n gridColumns.unshift({\n key: '__checkbox',\n attributeName: '__checkbox',\n width: 45,\n isResizable: false\n })\n }\n this._columns = gridColumns;\n return gridColumns;\n }\n\n private async _isColumnEditable(column: IGridColumn): Promise<boolean> {\n //top priority, overriden through props\n if (typeof column.isEditable === 'boolean') {\n return column.isEditable\n }\n //only allow editing if specifically allowed\n if (!this._props.parameters.EnableEditing?.raw) {\n return false;\n }\n //these field types do not support editing\n switch (column.dataType) {\n case DataType.FILE:\n case DataType.IMAGE: {\n return false;\n }\n }\n const metadata = await this.metadata.get(column);\n //IsEditable is not available in Power Apps\n return metadata.Attributes.get(column.attributeName)?.attributeDescriptor.IsValidForUpdate ?? false;\n }\n\n private async _isColumnRequired(column: IGridColumn) {\n if (typeof column.isRequired === 'boolean') {\n return column.isRequired;\n }\n if (!this.parameters.EnableEditing?.raw) {\n return false;\n }\n const metadata = await this.metadata.get(column);\n const requiredLevel = metadata.Attributes.get(column.attributeName)?.attributeDescriptor.RequiredLevel;\n if (requiredLevel === 1 || requiredLevel === 2) {\n return true;\n }\n return false;\n }\n private _isColumnSortable(column: IEntityColumn) {\n if(column.name.endsWith('__virtual')) {\n return false;\n }\n if (this._props.parameters.EnableSorting?.raw === false) {\n return false;\n }\n switch (column.dataType) {\n case DataType.IMAGE: {\n return false;\n }\n }\n return !column.disableSorting;\n }\n private _isColumnFilterable(column: IEntityColumn) {\n if(column.name.endsWith('__virtual')) {\n return false;\n }\n if (this.props.parameters.EnableFiltering?.raw === false) {\n return false;\n }\n return column.isFilterable ?? true;\n }\n private _getMaxHeight(): number {\n let maxHeight = this._initialPageSize * ROW_HEIGHT;\n if(maxHeight > 600) {\n maxHeight = 600;\n }\n return maxHeight;\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Grid.js","sources":["../../../../../src/components/Grid/core/model/Grid.ts"],"sourcesContent":["import { Attribute, Constants, DataTypes, IColumn, IDataset, IRecord } from \"@talxis/client-libraries\";\nimport { Filtering } from \"../../filtering/model/Filtering\";\nimport { IGrid } from \"../../interfaces\";\nimport { Paging } from \"../../paging/model/Paging\";\nimport { Selection } from \"../../selection/model/Selection\";\nimport { Sorting } from \"../../sorting/Sorting\";\nimport { ROW_HEIGHT } from \"../constants\";\nimport { DataType } from \"../enums/DataType\";\nimport { KeyHoldListener } from \"../services/KeyListener\";\nimport { RecordUpdateService } from \"../services/RecordUpdateService/model/RecordUpdateService\";\nimport { Metadata } from \"./Metadata\";\nimport { CHECKBOX_COLUMN_KEY } from \"../../constants\";\nimport { IGridColumn } from \"../interfaces/IGridColumn\";\n\nexport class Grid {\n private _props: IGrid;\n private _dataset: IDataset\n private _pcfContext: ComponentFramework.Context<any>;\n private _columns: IGridColumn[] = [];\n //used for optimization\n private _previousRecordsReference: {\n [id: string]: IRecord;\n } = {};\n //TODO: fix types\n private _labels: any;\n private _shouldRerender: boolean = false;\n private _records: IRecord[] = [];\n //TODO: the dependencies might not have fully loaded grid\n //need to make sure that the grid is initialized before creating them\n private _dependencies: {\n recordUpdateService: RecordUpdateService,\n filtering: Filtering,\n sorting: Sorting,\n metadata: Metadata,\n selection: Selection,\n paging: Paging\n };\n private _maxHeight: number;\n private _minHeight: number = 150;\n private _initialPageSize: number;\n public readonly keyHoldListener: KeyHoldListener;\n\n constructor(props: IGrid, labels: any, keyHoldListener: KeyHoldListener) {\n this._props = props;\n this._dataset = props.parameters.Grid;\n this._pcfContext = props.context;\n this._labels = labels;\n this.keyHoldListener = keyHoldListener;\n\n this._dependencies = {\n recordUpdateService: new RecordUpdateService(this),\n filtering: new Filtering(this),\n selection: new Selection(this),\n metadata: new Metadata(this),\n sorting: new Sorting(this),\n paging: new Paging(this)\n }\n this._initialPageSize = this.paging.pageSize;\n this._maxHeight = this._getMaxHeight();\n\n };\n public get isNavigationEnabled() {\n //enabled by default\n return this.parameters.EnableNavigation?.raw !== false;\n }\n public get isEditable() {\n return this._columns.find(x => x.isEditable) ? true : false;\n }\n public get parameters() {\n return this._props.parameters\n }\n public get error() {\n return this._dataset.error;\n }\n public get errorMessage() {\n return this._dataset.errorMessage\n }\n public get labels() {\n return this._labels;\n }\n public get dataset() {\n return this._dataset;\n }\n public get pcfContext() {\n return this._pcfContext;\n }\n public get props() {\n return this._props;\n }\n public get columns() {\n return this._columns;\n }\n public get records() {\n return this._records\n }\n public get recordUpdateService() {\n return this._dependencies.recordUpdateService;\n }\n public get sorting() {\n return this._dependencies.sorting;\n }\n public get metadata() {\n return this._dependencies.metadata;\n }\n public get filtering() {\n return this._dependencies.filtering;\n }\n public get selection() {\n return this._dependencies.selection;\n }\n public get paging() {\n return this._dependencies.paging;\n }\n public get shouldRerender() {\n return this._shouldRerender;\n }\n public get loading() {\n return this._dataset.loading;\n }\n public get state() {\n return this._props.state;\n }\n public get useContainerAsHeight() {\n return this.parameters.UseContainerAsHeight?.raw === true;\n }\n public get enableOptionSetColors() {\n return this.parameters.EnableOptionSetColors?.raw === true;\n }\n public get linking() {\n return this.dataset.linking;\n }\n public get inlineRibbonButtonIds() {\n const idString = this.parameters.InlineRibbonButtonIds?.raw;\n if (!idString) {\n return undefined;\n }\n return idString.split(',');\n }\n\n public get height() {\n let height = this._maxHeight;\n if (this.parameters.Height?.raw) {\n return this.parameters.Height?.raw;\n }\n if (this._records.length === 0) {\n height = this._minHeight;\n }\n else if (this._records.length <= this._initialPageSize) {\n height = this._records.length * ROW_HEIGHT;\n }\n if (height > this._maxHeight) {\n height = this._maxHeight;\n }\n return `${height}px`;\n\n }\n\n public openDatasetItem(entityReference: ComponentFramework.EntityReference) {\n this._dataset.openDatasetItem(entityReference);\n const clickedRecord = this.records.find(x => x.getRecordId() === entityReference.id.guid);\n //we need to make sure the item we are opening gets selected in order for the\n //OnOpenRecord ribbon scripts to work correctly\n //if no record found we have clicked a lookup, no selection should be happening in that case\n if (clickedRecord) {\n this.selection.toggle(clickedRecord, true, true, true);\n }\n }\n\n public updateDependencies(props: IGrid): void {\n this._props = props;\n this._dataset = props.parameters.Grid;\n this._pcfContext = props.context;\n //THIS COULD MAKE GRID STOP WORKING IN POWER APPS!\n if (this._previousRecordsReference !== this._dataset.records) {\n this._records = Object.values(this._dataset.records);\n this._previousRecordsReference = this._dataset.records;\n }\n Object.values(this._dependencies).map(dep => {\n dep.onDependenciesUpdated()\n })\n this._shouldRerender = !this.shouldRerender;\n }\n public async refreshColumns(): Promise<IGridColumn[]> {\n const gridColumns: IGridColumn[] = [];\n for (const column of this._dataset.columns) {\n const sorted = this._dataset.sorting?.find(sort => sort.name === column.name);\n const gridColumn: IGridColumn = {\n ...column,\n isEditable: await this._isColumnEditable(column),\n isRequired: await this._isColumnRequired(column),\n isFilterable: await this._isColumnFilterable(column),\n disableSorting: !this._isColumnSortable(column),\n isSortedDescending: sorted?.sortDirection === 1 ? true : false,\n isResizable: true,\n isSorted: sorted ? true : false,\n isFiltered: false\n }\n const condition = await this.filtering.condition(gridColumn);\n gridColumn.isFiltered = condition.isAppliedToDataset;\n gridColumns.push(gridColumn);\n }\n if (this.selection.type !== undefined) {\n gridColumns.unshift({\n name: CHECKBOX_COLUMN_KEY,\n alias: CHECKBOX_COLUMN_KEY,\n dataType: DataTypes.SingleLineText,\n displayName: '',\n isEditable: true,\n isFilterable: false,\n isFiltered: false,\n isRequired: false,\n isResizable: false,\n disableSorting: true,\n isSorted: false,\n isSortedDescending: false,\n order: 0,\n visualSizeFactor: 45,\n });\n }\n this._columns = gridColumns;\n return gridColumns;\n }\n\n private async _isColumnEditable(column: IColumn): Promise<boolean> {\n //only allow editing if specifically allowed\n if (!this._props.parameters.EnableEditing?.raw) {\n return false;\n }\n if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {\n return false;\n }\n //these field types do not support editing\n switch (column.dataType) {\n case DataType.FILE:\n case DataType.IMAGE: {\n return false;\n }\n }\n const attributeName = Attribute.GetNameFromAlias(column.name);\n const metadata = await this.metadata.get(column.name);\n return metadata.Attributes.get(attributeName)?.attributeDescriptor?.IsValidForUpdate ?? false;\n }\n\n private async _isColumnRequired(column: IColumn): Promise<boolean> {\n if (!this.parameters.EnableEditing?.raw) {\n return false;\n }\n if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {\n return false;\n }\n const metadata = await this.metadata.get(column.name);\n const attributeName = Attribute.GetNameFromAlias(column.name);\n const requiredLevel = metadata.Attributes.get(attributeName)?.attributeDescriptor?.RequiredLevel;\n if (requiredLevel === 1 || requiredLevel === 2) {\n return true;\n }\n return false;\n }\n private _isColumnSortable(column: IColumn): boolean {\n if (column.name.endsWith('__virtual')) {\n return false;\n }\n if (this._props.parameters.EnableSorting?.raw === false) {\n return false;\n }\n if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {\n return false;\n }\n switch (column.dataType) {\n case DataType.IMAGE: {\n return false;\n }\n }\n if(column.disableSorting === undefined) {\n return true;\n }\n return !column.disableSorting;\n }\n private async _isColumnFilterable(column: IColumn): Promise<boolean> {\n if (column.name.endsWith('__virtual')) {\n return false;\n }\n if (this.props.parameters.EnableFiltering?.raw === false) {\n return false;\n }\n if (column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) {\n return false;\n }\n const metadata = await this.metadata.get(column.name);\n const attributeName = Attribute.GetNameFromAlias(column.name);\n return metadata.Attributes.get(attributeName)?.attributeDescriptor?.isFilterable ?? true;\n }\n private _getMaxHeight(): number {\n let maxHeight = this._initialPageSize * ROW_HEIGHT;\n if (maxHeight > 600) {\n maxHeight = 600;\n }\n return maxHeight;\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,6 @@ export declare class GridDependency {
|
|
|
8
8
|
removeRefreshCallback(id: string): void;
|
|
9
9
|
onDependenciesUpdated(): void;
|
|
10
10
|
protected _triggerRefreshCallbacks(): void;
|
|
11
|
-
protected get _dataset(): import("
|
|
11
|
+
protected get _dataset(): import("@talxis/client-libraries").IDataset;
|
|
12
12
|
protected get _pcfContext(): ComponentFramework.Context<any, ComponentFramework.IEventBag>;
|
|
13
13
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="powerapps-component-framework" />
|
|
2
|
-
import { IGridColumn } from "../interfaces/IGridColumn";
|
|
3
2
|
import { GridDependency } from "./GridDependency";
|
|
4
3
|
export declare class Metadata extends GridDependency {
|
|
5
|
-
get(
|
|
6
|
-
getOptions(
|
|
4
|
+
get(columnName: string): Promise<ComponentFramework.PropertyHelper.EntityMetadata>;
|
|
5
|
+
getOptions(columnName: string): Promise<[number | boolean, ComponentFramework.PropertyHelper.OptionMetadata[]]>;
|
|
7
6
|
}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
+
import { Attribute } from '@talxis/client-libraries';
|
|
1
2
|
import { GridDependency } from './GridDependency.js';
|
|
2
3
|
|
|
3
4
|
class Metadata extends GridDependency {
|
|
4
|
-
async get(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
async get(columnName) {
|
|
6
|
+
const entityAliasName = Attribute.GetLinkedEntityAlias(columnName);
|
|
7
|
+
const attributeName = Attribute.GetNameFromAlias(columnName);
|
|
8
|
+
if (entityAliasName) {
|
|
9
|
+
const linkedEntity = this._grid.dataset.linking.getLinkedEntities().find(x => x.alias === entityAliasName);
|
|
10
|
+
return await this._grid.pcfContext.utils.getEntityMetadata(linkedEntity.name, [attributeName]);
|
|
8
11
|
}
|
|
9
12
|
else {
|
|
10
|
-
return await this._grid.pcfContext.utils.getEntityMetadata(this._grid.dataset.getTargetEntityType(), [
|
|
13
|
+
return await this._grid.pcfContext.utils.getEntityMetadata(this._grid.dataset.getTargetEntityType(), [attributeName]);
|
|
11
14
|
}
|
|
12
15
|
}
|
|
13
|
-
async getOptions(
|
|
14
|
-
const columnMetadata = await this.get(
|
|
15
|
-
const
|
|
16
|
-
const
|
|
16
|
+
async getOptions(columnName) {
|
|
17
|
+
const columnMetadata = await this.get(columnName);
|
|
18
|
+
const attributeName = Attribute.GetNameFromAlias(columnName);
|
|
19
|
+
const options = columnMetadata.Attributes.get(attributeName).attributeDescriptor.OptionSet;
|
|
20
|
+
const defaultValue = columnMetadata.Attributes.get(attributeName).DefaultFormValue;
|
|
17
21
|
return [defaultValue, options];
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Metadata.js","sources":["../../../../../src/components/Grid/core/model/Metadata.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Metadata.js","sources":["../../../../../src/components/Grid/core/model/Metadata.ts"],"sourcesContent":["import { Attribute } from \"@talxis/client-libraries\";\nimport { GridDependency } from \"./GridDependency\";\n\nexport class Metadata extends GridDependency {\n public async get(columnName: string): Promise<ComponentFramework.PropertyHelper.EntityMetadata> {\n const entityAliasName = Attribute.GetLinkedEntityAlias(columnName);\n const attributeName = Attribute.GetNameFromAlias(columnName);\n if(entityAliasName) {\n const linkedEntity = this._grid.dataset.linking.getLinkedEntities().find(x => x.alias === entityAliasName)!;\n return await this._grid.pcfContext.utils.getEntityMetadata(linkedEntity.name, [attributeName]);\n }\n else {\n return await this._grid.pcfContext.utils.getEntityMetadata(this._grid.dataset.getTargetEntityType(), [attributeName]);\n }\n }\n public async getOptions(columnName: string): Promise<[number | boolean, ComponentFramework.PropertyHelper.OptionMetadata[]]> {\n const columnMetadata = await this.get(columnName);\n const attributeName = Attribute.GetNameFromAlias(columnName);\n const options = columnMetadata.Attributes.get(attributeName).attributeDescriptor.OptionSet as ComponentFramework.PropertyHelper.OptionMetadata[]\n const defaultValue = columnMetadata.Attributes.get(attributeName).DefaultFormValue as number | boolean;\n return [defaultValue, options];\n }\n}\n"],"names":[],"mappings":";;;AAGM,MAAO,QAAS,SAAQ,cAAc,CAAA;IACjC,MAAM,GAAG,CAAC,UAAkB,EAAA;QAC/B,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAA,IAAG,eAAe,EAAE;YAChB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,CAAE,CAAC;AAC5G,YAAA,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AAClG,SAAA;AACI,aAAA;YACD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACzH,SAAA;KACJ;IACM,MAAM,UAAU,CAAC,UAAkB,EAAA;QACtC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,mBAAmB,CAAC,SAA+D,CAAA;AAChJ,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,gBAAoC,CAAC;AACvG,QAAA,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;KAClC;AACJ;;;;"}
|
package/dist/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IEntityColumn, IEntityRecord } from "../../../../interfaces";
|
|
2
1
|
import { Grid } from "../../../model/Grid";
|
|
3
2
|
import { GridDependency } from "../../../model/GridDependency";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { IColumn, IRecord } from "@talxis/client-libraries";
|
|
4
|
+
export interface IUpdatedRecord extends Omit<IRecord, 'save'> {
|
|
5
|
+
columns: Map<string, IColumn>;
|
|
6
|
+
isValid: (columnName: string) => boolean;
|
|
7
|
+
getOriginalValue: (columnName: string) => any;
|
|
8
|
+
getOriginalFormattedValue: (columnName: string) => any;
|
|
9
9
|
getOriginalFormattedPrimaryNameValue: () => any;
|
|
10
10
|
save: () => Promise<boolean>;
|
|
11
11
|
clear: () => void;
|
|
@@ -19,12 +19,12 @@ export declare class RecordUpdateService extends GridDependency {
|
|
|
19
19
|
get hasInvalidRecords(): boolean;
|
|
20
20
|
record(recordId: string): {
|
|
21
21
|
get: () => IUpdatedRecord | undefined;
|
|
22
|
-
setValue: (
|
|
22
|
+
setValue: (columnName: string, value: any, doNotPropagateToDatasetRecord?: boolean) => void;
|
|
23
23
|
};
|
|
24
24
|
saveAll(): Promise<boolean>;
|
|
25
25
|
clearAll(): Promise<void>;
|
|
26
26
|
onDependenciesUpdated(): void;
|
|
27
|
-
private
|
|
27
|
+
private _getColumnByName;
|
|
28
28
|
private _isReadOnlyChangeEditor;
|
|
29
29
|
private _isEqual;
|
|
30
30
|
}
|
|
@@ -45,7 +45,7 @@ class RecordUpdateService extends GridDependency {
|
|
|
45
45
|
if (this._isReadOnlyChangeEditor() && this._updatedRecords.size === 0) {
|
|
46
46
|
const record = this._grid.records[0];
|
|
47
47
|
for (const column of this._grid.columns) {
|
|
48
|
-
this.record(record.getRecordId()).setValue(column.
|
|
48
|
+
this.record(record.getRecordId()).setValue(column.name, record.getValue(column.name), true);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
return [...this._updatedRecords.values()];
|
|
@@ -66,21 +66,21 @@ class RecordUpdateService extends GridDependency {
|
|
|
66
66
|
record(recordId) {
|
|
67
67
|
return {
|
|
68
68
|
get: () => this._updatedRecords.get(recordId),
|
|
69
|
-
setValue: (
|
|
70
|
-
if (!doNotPropagateToDatasetRecord && this._isEqual(
|
|
69
|
+
setValue: (columnName, value, doNotPropagateToDatasetRecord) => {
|
|
70
|
+
if (!doNotPropagateToDatasetRecord && this._isEqual(columnName, this._internalRecordMap.get(recordId).getValue(columnName), value)) {
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
const updatedRecord = this._updatedRecords.get(recordId);
|
|
74
74
|
if (!updatedRecord) {
|
|
75
75
|
const deepCopiedRecord = cloneDeep(this._internalRecordMap.get(recordId));
|
|
76
76
|
this._updatedRecords.set(recordId, {
|
|
77
|
-
columns: new Map([[
|
|
77
|
+
columns: new Map([[columnName, this._getColumnByName(columnName)]]),
|
|
78
78
|
getRecordId: () => recordId,
|
|
79
|
-
getValue: (
|
|
80
|
-
getFormattedValue: (
|
|
79
|
+
getValue: (columnName) => this._internalRecordMap.get(recordId)?.getValue(columnName),
|
|
80
|
+
getFormattedValue: (columnName) => this._internalRecordMap.get(recordId)?.getFormattedValue(columnName),
|
|
81
81
|
getNamedReference: () => deepCopiedRecord.getNamedReference(),
|
|
82
|
-
getOriginalValue: (
|
|
83
|
-
getOriginalFormattedValue: (
|
|
82
|
+
getOriginalValue: (columnName) => deepCopiedRecord.getValue(columnName),
|
|
83
|
+
getOriginalFormattedValue: (columnName) => deepCopiedRecord.getFormattedValue(columnName),
|
|
84
84
|
getOriginalFormattedPrimaryNameValue: () => {
|
|
85
85
|
let primaryColumn = this._dataset.columns.find(x => x.isPrimary);
|
|
86
86
|
if (!primaryColumn) {
|
|
@@ -92,15 +92,16 @@ class RecordUpdateService extends GridDependency {
|
|
|
92
92
|
}
|
|
93
93
|
return value;
|
|
94
94
|
},
|
|
95
|
-
setValue: (
|
|
96
|
-
this._internalRecordMap.get(recordId)?.setValue(
|
|
95
|
+
setValue: (columnName, value) => {
|
|
96
|
+
this._internalRecordMap.get(recordId)?.setValue(columnName, value);
|
|
97
|
+
this._pcfContext.factory.requestRender();
|
|
97
98
|
},
|
|
98
|
-
isValid: (
|
|
99
|
-
const column = this._grid.columns.find(x => x.
|
|
99
|
+
isValid: (columnName) => {
|
|
100
|
+
const column = this._grid.columns.find(x => x.name === columnName);
|
|
100
101
|
if (!column) {
|
|
101
102
|
return true;
|
|
102
103
|
}
|
|
103
|
-
const [result, message] = new ColumnValidation(this._grid, column).validate(this._internalRecordMap.get(recordId)?.getValue(
|
|
104
|
+
const [result, message] = new ColumnValidation(this._grid, column).validate(this._internalRecordMap.get(recordId)?.getValue(columnName));
|
|
104
105
|
return result;
|
|
105
106
|
},
|
|
106
107
|
clear: () => {
|
|
@@ -129,11 +130,11 @@ class RecordUpdateService extends GridDependency {
|
|
|
129
130
|
});
|
|
130
131
|
}
|
|
131
132
|
else {
|
|
132
|
-
updatedRecord.columns.set(
|
|
133
|
+
updatedRecord.columns.set(columnName, this._getColumnByName(columnName));
|
|
133
134
|
}
|
|
134
135
|
if (!doNotPropagateToDatasetRecord) {
|
|
135
136
|
const updatedRecord = this._updatedRecords.get(recordId);
|
|
136
|
-
updatedRecord?.setValue(
|
|
137
|
+
updatedRecord?.setValue(columnName, value);
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
};
|
|
@@ -150,26 +151,21 @@ class RecordUpdateService extends GridDependency {
|
|
|
150
151
|
for (const record of this._updatedRecords.values()) {
|
|
151
152
|
record.clear();
|
|
152
153
|
}
|
|
154
|
+
this._pcfContext.factory.requestRender();
|
|
153
155
|
}
|
|
154
156
|
onDependenciesUpdated() {
|
|
155
157
|
for (const [recordId, record] of Object.entries(this._grid.dataset.records)) {
|
|
156
158
|
this._internalRecordMap.set(recordId, record);
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return this._dataset.columns.find(x => {
|
|
162
|
-
if (!gridColumn.entityAliasName) {
|
|
163
|
-
return x.name === gridColumn.attributeName;
|
|
164
|
-
}
|
|
165
|
-
return x.name === gridColumn.key;
|
|
166
|
-
});
|
|
161
|
+
_getColumnByName(columnName) {
|
|
162
|
+
return this._grid.columns.find(x => x.name === columnName);
|
|
167
163
|
}
|
|
168
164
|
_isReadOnlyChangeEditor() {
|
|
169
165
|
return this._grid.props.parameters.ChangeEditorMode?.raw === 'read';
|
|
170
166
|
}
|
|
171
|
-
_isEqual(
|
|
172
|
-
const column = this._grid.columns.find(x => x.
|
|
167
|
+
_isEqual(columnName, oldValue, newValue) {
|
|
168
|
+
const column = this._grid.columns.find(x => x.name === columnName);
|
|
173
169
|
//skip in special case for currency
|
|
174
170
|
//PCF has no info about the currency, which sometimes make it to ouput change
|
|
175
171
|
if (column?.dataType === DataType.CURRENCY) {
|
package/dist/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordUpdateService.js","sources":["../../../../../../../src/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.ts"],"sourcesContent":["import equal from \"fast-deep-equal/es6\";\nimport { cloneDeep } from \"lodash\";\nimport numeral from \"numeral\";\nimport { IEntityColumn, IEntityRecord } from \"../../../../interfaces\";\nimport { ColumnValidation } from \"../../../../validation/model/ColumnValidation\";\nimport { DataType } from \"../../../enums/DataType\";\nimport { Grid } from \"../../../model/Grid\";\nimport { GridDependency } from \"../../../model/GridDependency\";\nimport { Numeral } from \"@talxis/client-libraries\";\n\nexport interface IUpdatedRecord extends Omit<IEntityRecord, 'save'> {\n columns: Map<string, IEntityColumn>,\n isValid: (columnKey: string) => boolean,\n getOriginalValue: (columnKey: string) => any;\n getOriginalFormattedValue: (columnKey: string) => any;\n getOriginalFormattedPrimaryNameValue: () => any;\n save: () => Promise<boolean>,\n clear: () => void;\n}\n\nexport class RecordUpdateService extends GridDependency {\n private _updatedRecords: Map<string, IUpdatedRecord> = new Map();\n private _internalRecordMap: Map<string, IEntityRecord> = new Map();\n\n constructor(grid: Grid) {\n super(grid);\n const updatedRecordsFromState: IUpdatedRecord[] | undefined = this._grid.state?.['__updatedRecords'];\n //@ts-ignore - getRecordId could be undefined if it comes from serialized state\n if(updatedRecordsFromState && updatedRecordsFromState?.length > 0 && updatedRecordsFromState[0].getRecordId) {\n this._updatedRecords = new Map(updatedRecordsFromState.map(x => {\n const originalClear = x.clear;\n const originalSetValue = x.setValue;\n const originalSave = x.save;\n x.clear = () => {\n this._updatedRecords.delete(x.getRecordId());\n originalClear();\n this._pcfContext.factory.requestRender();\n }\n x.save = async () => {\n const result = await originalSave();\n if(result) {\n this._updatedRecords.delete(x.getRecordId());\n }\n [...x.columns.values()].map(col => {\n this._internalRecordMap.get(x.getRecordId())?.setValue(col.name, x.getValue(col.name));\n })\n return result;\n }\n x.setValue = (columnName: string, value: any) => {\n originalSetValue(columnName, value);\n this._pcfContext.factory.requestRender();\n }\n return [x.getRecordId(), x]\n }))\n }\n }\n\n public get updatedRecords() {\n if (this._isReadOnlyChangeEditor() && this._updatedRecords.size === 0) {\n const record = this._grid.records[0];\n for (const column of this._grid.columns) {\n this.record(record.getRecordId()).setValue(column.key, record.getValue(column.key), true);\n }\n }\n return [...this._updatedRecords.values()];\n }\n\n public get isDirty() {\n return this._updatedRecords.size > 0;\n }\n\n public get hasInvalidRecords() {\n return [...this._updatedRecords.values()].find(x => {\n for(const column of x.columns.values()) {\n if(!x.isValid(column.name)) {\n return true;\n }\n }\n return false;\n }) ? true : false;\n }\n\n public record(recordId: string) {\n return {\n get: () => this._updatedRecords.get(recordId),\n setValue: (columnKey: string, value: any, doNotPropagateToDatasetRecord?: boolean) => {\n if(!doNotPropagateToDatasetRecord && this._isEqual(columnKey, this._internalRecordMap.get(recordId)!.getValue(columnKey), value)) {\n return;\n }\n const updatedRecord = this._updatedRecords.get(recordId);\n if (!updatedRecord) {\n const deepCopiedRecord = cloneDeep(this._internalRecordMap.get(recordId)!);\n this._updatedRecords.set(recordId, {\n columns: new Map([[columnKey, this._getEntityColumnByKey(columnKey)]]),\n getRecordId: () => recordId,\n getValue: (columnKey: string) => this._internalRecordMap.get(recordId)?.getValue(columnKey)!,\n getFormattedValue: (columnKey: string) => this._internalRecordMap.get(recordId)?.getFormattedValue(columnKey)!,\n getNamedReference: () => deepCopiedRecord.getNamedReference(),\n getOriginalValue: (columnKey: string) => deepCopiedRecord.getValue(columnKey),\n getOriginalFormattedValue: (columnKey: string) => deepCopiedRecord.getFormattedValue(columnKey),\n getOriginalFormattedPrimaryNameValue: () => {\n let primaryColumn = this._dataset.columns.find(x => x.isPrimary);\n if(!primaryColumn) {\n primaryColumn = this._dataset.columns[0];\n }\n let value = deepCopiedRecord.getFormattedValue(primaryColumn.name);\n if(!value) {\n value = this._grid.labels[\"no-name\"]();\n }\n return value;\n },\n setValue: (columnKey: string, value: any) => {\n this._internalRecordMap.get(recordId)?.setValue(columnKey, value);\n },\n isValid: (columnKey: string) => {\n const column = this._grid.columns.find(x => x.key === columnKey);\n if(!column) {\n return true;\n }\n const [result, message] = new ColumnValidation(this._grid, column).validate(this._internalRecordMap.get(recordId)?.getValue(columnKey)!)\n return result;\n },\n clear: () => {\n const updatedRecord = this._updatedRecords.get(recordId);\n const columns = [...updatedRecord!.columns.values()];\n this._updatedRecords.delete(recordId);\n for(const column of columns) {\n this._internalRecordMap.get(recordId)?.setValue(column.name, deepCopiedRecord.getValue(column.name));\n }\n },\n save: async () => {\n try {\n await this._internalRecordMap.get(recordId)?.save();\n this._updatedRecords.delete(recordId);\n }\n catch (err) {\n this._grid.pcfContext.navigation.openErrorDialog({\n message: 'An error occurred during saving. Some of you changes might now have been saved.',\n //@ts-ignore\n details: err.message\n })\n return false;\n }\n return true;\n }\n })\n }\n else {\n updatedRecord.columns.set(columnKey, this._getEntityColumnByKey(columnKey))\n }\n if (!doNotPropagateToDatasetRecord) {\n const updatedRecord = this._updatedRecords.get(recordId);\n updatedRecord?.setValue(columnKey, value);\n }\n }\n }\n }\n\n public async saveAll(): Promise<boolean> {\n const savePromises: Promise<boolean>[] = [];\n for (const record of this._updatedRecords.values()) {\n savePromises.push(record.save());\n }\n const result = await Promise.all(savePromises);\n return !result.find(x => x === false)\n }\n public async clearAll() {\n for (const record of this._updatedRecords.values()) {\n record.clear();\n }\n }\n\n public onDependenciesUpdated(): void {\n for (const [recordId, record] of Object.entries(this._grid.dataset.records)) {\n this._internalRecordMap.set(recordId, record);\n }\n }\n private _getEntityColumnByKey(columnKey: string) {\n const gridColumn = this._grid.columns.find(x => x.key === columnKey)!;\n return this._dataset.columns.find(x => {\n if (!gridColumn.entityAliasName) {\n return x.name === gridColumn.attributeName;\n }\n return x.name === gridColumn.key;\n })!;\n }\n private _isReadOnlyChangeEditor() {\n return this._grid.props.parameters.ChangeEditorMode?.raw === 'read';\n }\n private _isEqual(columnKey: string, oldValue: any, newValue: any) {\n const column = this._grid.columns.find(x => x.key === columnKey);\n //skip in special case for currency\n //PCF has no info about the currency, which sometimes make it to ouput change\n if(column?.dataType === DataType.CURRENCY) {\n Numeral.currency(this._grid.pcfContext.userSettings.numberFormattingInfo);\n newValue = numeral(newValue).value();\n if(newValue === oldValue) {\n return true\n }\n\n }\n if(oldValue == newValue) {\n return true;\n }\n return equal(oldValue, newValue);\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RecordUpdateService.js","sources":["../../../../../../../src/components/Grid/core/services/RecordUpdateService/model/RecordUpdateService.ts"],"sourcesContent":["import equal from \"fast-deep-equal/es6\";\nimport { cloneDeep } from \"lodash\";\nimport numeral from \"numeral\";\nimport { ColumnValidation } from \"../../../../validation/model/ColumnValidation\";\nimport { DataType } from \"../../../enums/DataType\";\nimport { Grid } from \"../../../model/Grid\";\nimport { GridDependency } from \"../../../model/GridDependency\";\nimport { IColumn, IRecord, Numeral } from \"@talxis/client-libraries\";\n\nexport interface IUpdatedRecord extends Omit<IRecord, 'save'> {\n columns: Map<string, IColumn>,\n isValid: (columnName: string) => boolean,\n getOriginalValue: (columnName: string) => any;\n getOriginalFormattedValue: (columnName: string) => any;\n getOriginalFormattedPrimaryNameValue: () => any;\n save: () => Promise<boolean>,\n clear: () => void;\n}\n\nexport class RecordUpdateService extends GridDependency {\n private _updatedRecords: Map<string, IUpdatedRecord> = new Map();\n private _internalRecordMap: Map<string, IRecord> = new Map();\n\n constructor(grid: Grid) {\n super(grid);\n const updatedRecordsFromState: IUpdatedRecord[] | undefined = this._grid.state?.['__updatedRecords'];\n //@ts-ignore - getRecordId could be undefined if it comes from serialized state\n if(updatedRecordsFromState && updatedRecordsFromState?.length > 0 && updatedRecordsFromState[0].getRecordId) {\n this._updatedRecords = new Map(updatedRecordsFromState.map(x => {\n const originalClear = x.clear;\n const originalSetValue = x.setValue;\n const originalSave = x.save;\n x.clear = () => {\n this._updatedRecords.delete(x.getRecordId());\n originalClear();\n this._pcfContext.factory.requestRender();\n }\n x.save = async () => {\n const result = await originalSave();\n if(result) {\n this._updatedRecords.delete(x.getRecordId());\n }\n [...x.columns.values()].map(col => {\n this._internalRecordMap.get(x.getRecordId())?.setValue(col.name, x.getValue(col.name));\n })\n return result;\n }\n x.setValue = (columnName: string, value: any) => {\n originalSetValue(columnName, value);\n this._pcfContext.factory.requestRender();\n }\n return [x.getRecordId(), x]\n }))\n }\n }\n\n public get updatedRecords() {\n if (this._isReadOnlyChangeEditor() && this._updatedRecords.size === 0) {\n const record = this._grid.records[0];\n for (const column of this._grid.columns) {\n this.record(record.getRecordId()).setValue(column.name, record.getValue(column.name), true);\n }\n }\n return [...this._updatedRecords.values()];\n }\n\n public get isDirty() {\n return this._updatedRecords.size > 0;\n }\n\n public get hasInvalidRecords() {\n return [...this._updatedRecords.values()].find(x => {\n for(const column of x.columns.values()) {\n if(!x.isValid(column.name)) {\n return true;\n }\n }\n return false;\n }) ? true : false;\n }\n\n public record(recordId: string) {\n return {\n get: () => this._updatedRecords.get(recordId),\n setValue: (columnName: string, value: any, doNotPropagateToDatasetRecord?: boolean) => {\n if(!doNotPropagateToDatasetRecord && this._isEqual(columnName, this._internalRecordMap.get(recordId)!.getValue(columnName), value)) {\n return;\n }\n const updatedRecord = this._updatedRecords.get(recordId);\n if (!updatedRecord) {\n const deepCopiedRecord = cloneDeep(this._internalRecordMap.get(recordId)!);\n this._updatedRecords.set(recordId, {\n columns: new Map([[columnName, this._getColumnByName(columnName)]]),\n getRecordId: () => recordId,\n getValue: (columnName: string) => this._internalRecordMap.get(recordId)?.getValue(columnName)!,\n getFormattedValue: (columnName: string) => this._internalRecordMap.get(recordId)?.getFormattedValue(columnName)!,\n getNamedReference: () => deepCopiedRecord.getNamedReference(),\n getOriginalValue: (columnName: string) => deepCopiedRecord.getValue(columnName),\n getOriginalFormattedValue: (columnName: string) => deepCopiedRecord.getFormattedValue(columnName),\n getOriginalFormattedPrimaryNameValue: () => {\n let primaryColumn = this._dataset.columns.find(x => x.isPrimary);\n if(!primaryColumn) {\n primaryColumn = this._dataset.columns[0];\n }\n let value = deepCopiedRecord.getFormattedValue(primaryColumn.name);\n if(!value) {\n value = this._grid.labels[\"no-name\"]();\n }\n return value;\n },\n setValue: (columnName: string, value: any) => {\n this._internalRecordMap.get(recordId)?.setValue(columnName, value);\n this._pcfContext.factory.requestRender()\n },\n isValid: (columnName: string) => {\n const column = this._grid.columns.find(x => x.name === columnName);\n if(!column) {\n return true;\n }\n const [result, message] = new ColumnValidation(this._grid, column).validate(this._internalRecordMap.get(recordId)?.getValue(columnName)!)\n return result;\n },\n clear: () => {\n const updatedRecord = this._updatedRecords.get(recordId);\n const columns = [...updatedRecord!.columns.values()];\n this._updatedRecords.delete(recordId);\n for(const column of columns) {\n this._internalRecordMap.get(recordId)?.setValue(column.name, deepCopiedRecord.getValue(column.name));\n }\n },\n save: async () => {\n try {\n await this._internalRecordMap.get(recordId)?.save();\n this._updatedRecords.delete(recordId);\n }\n catch (err) {\n this._grid.pcfContext.navigation.openErrorDialog({\n message: 'An error occurred during saving. Some of you changes might now have been saved.',\n //@ts-ignore\n details: err.message\n })\n return false;\n }\n return true;\n }\n } as any)\n }\n else {\n updatedRecord.columns.set(columnName, this._getColumnByName(columnName))\n }\n if (!doNotPropagateToDatasetRecord) {\n const updatedRecord = this._updatedRecords.get(recordId);\n updatedRecord?.setValue(columnName, value);\n }\n }\n }\n }\n\n public async saveAll(): Promise<boolean> {\n const savePromises: Promise<boolean>[] = [];\n for (const record of this._updatedRecords.values()) {\n savePromises.push(record.save());\n }\n const result = await Promise.all(savePromises);\n return !result.find(x => x === false)\n }\n public async clearAll() {\n for (const record of this._updatedRecords.values()) {\n record.clear();\n }\n this._pcfContext.factory.requestRender();\n }\n\n public onDependenciesUpdated(): void {\n for (const [recordId, record] of Object.entries(this._grid.dataset.records)) {\n this._internalRecordMap.set(recordId, record);\n }\n }\n private _getColumnByName(columnName: string) {\n return this._grid.columns.find(x => x.name === columnName)!;\n }\n private _isReadOnlyChangeEditor() {\n return this._grid.props.parameters.ChangeEditorMode?.raw === 'read';\n }\n private _isEqual(columnName: string, oldValue: any, newValue: any) {\n const column = this._grid.columns.find(x => x.name === columnName);\n //skip in special case for currency\n //PCF has no info about the currency, which sometimes make it to ouput change\n if(column?.dataType === DataType.CURRENCY) {\n Numeral.currency(this._grid.pcfContext.userSettings.numberFormattingInfo);\n newValue = numeral(newValue).value();\n if(newValue === oldValue) {\n return true\n }\n\n }\n if(oldValue == newValue) {\n return true;\n }\n return equal(oldValue, newValue);\n }\n}"],"names":[],"mappings":"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"}
|