@talxis/base-controls 1.2506.1 → 1.2506.3
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 +17 -11
- package/dist/components/DatasetControl/DatasetControl.js.map +1 -1
- package/dist/components/DatasetControl/interfaces.d.ts +10 -5
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.js +3 -2
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.js.map +1 -1
- package/dist/index.d.ts +119 -6
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/dataset/adapters/DatasetAdapter.d.ts +63 -0
- package/dist/utils/dataset/adapters/DatasetAdapter.js +229 -0
- package/dist/utils/dataset/adapters/DatasetAdapter.js.map +1 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.d.ts +48 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.js +169 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.js.map +1 -0
- package/dist/utils/dataset/adapters/index.d.ts +2 -0
- package/dist/utils/dataset/adapters/index.js +3 -0
- package/dist/utils/dataset/adapters/index.js.map +1 -0
- package/dist/utils/dataset/index.d.ts +1 -0
- package/dist/utils/dataset/index.js +3 -0
- package/dist/utils/dataset/index.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -5,9 +5,10 @@ import { datasetControlTranslations } from './translations.js';
|
|
|
5
5
|
import { getDatasetControlStyles } from './styles.js';
|
|
6
6
|
import { QuickFind } from './QuickFind/QuickFind.js';
|
|
7
7
|
import { useRerender } from '@talxis/react-components';
|
|
8
|
-
import {
|
|
8
|
+
import { Client } from '@talxis/client-libraries';
|
|
9
9
|
import { useControl } from '../../hooks/useControl.js';
|
|
10
10
|
|
|
11
|
+
const client = new Client();
|
|
11
12
|
const DatasetControl = (props) => {
|
|
12
13
|
const { labels, theme } = useControl('DatasetControl', props, datasetControlTranslations);
|
|
13
14
|
const rerender = useRerender();
|
|
@@ -15,17 +16,17 @@ const DatasetControl = (props) => {
|
|
|
15
16
|
const injectedContextRef = useRef(props.context);
|
|
16
17
|
const styles = useMemo(() => getDatasetControlStyles(theme, props.parameters.Height?.raw), []);
|
|
17
18
|
const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
useMemo(() => {
|
|
20
|
+
if (dataset.isVirtual() || !client.isTalxisPortal()) {
|
|
21
|
+
dataset.setInterceptor('__onRequestRender', () => rerender());
|
|
22
|
+
}
|
|
23
|
+
}, []);
|
|
20
24
|
//we need to have a way to customize the init behavior from above
|
|
21
25
|
const componentProps = onOverrideComponentProps({
|
|
22
26
|
onDatasetInit: () => {
|
|
23
|
-
if (dataset.
|
|
27
|
+
if (dataset.isVirtual()) {
|
|
24
28
|
dataset.paging.loadExactPage(dataset.paging.pageNumber);
|
|
25
29
|
}
|
|
26
|
-
else {
|
|
27
|
-
dataset.refresh();
|
|
28
|
-
}
|
|
29
30
|
},
|
|
30
31
|
containerProps: {
|
|
31
32
|
theme: theme,
|
|
@@ -38,7 +39,6 @@ const DatasetControl = (props) => {
|
|
|
38
39
|
onRender: (renderQuickFind) => renderQuickFind(),
|
|
39
40
|
onGetQuickFindProps: (props) => props
|
|
40
41
|
},
|
|
41
|
-
onOverrideControlProps: (props) => props
|
|
42
42
|
});
|
|
43
43
|
useMemo(() => {
|
|
44
44
|
//@ts-ignore - private property
|
|
@@ -47,11 +47,17 @@ const DatasetControl = (props) => {
|
|
|
47
47
|
useMemo(() => {
|
|
48
48
|
componentProps.onDatasetInit();
|
|
49
49
|
}, []);
|
|
50
|
-
|
|
50
|
+
const isQuickFindEnabled = () => {
|
|
51
|
+
if (dataset.isVirtual() && props.parameters.EnableQuickFind?.raw) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
};
|
|
56
|
+
return (jsxs(ThemeProvider, { ...componentProps.containerProps, children: [isQuickFindEnabled() &&
|
|
51
57
|
jsx("div", { ...componentProps.headerProps.headerContainerProps, children: componentProps.headerProps.onRender(() => {
|
|
52
|
-
return jsx(Fragment, { children:
|
|
58
|
+
return jsx(Fragment, { children: isQuickFindEnabled() &&
|
|
53
59
|
jsx(QuickFind, { dataset: dataset, labels: labels, theme: theme, onGetQuickFindComponentProps: (props) => componentProps.headerProps.onGetQuickFindProps(props) }) });
|
|
54
|
-
}) }),
|
|
60
|
+
}) }), props.onGetControlComponent({ ...props, context: injectedContextRef.current })] }));
|
|
55
61
|
};
|
|
56
62
|
|
|
57
63
|
export { DatasetControl };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetControl.js","sources":["../../../src/components/DatasetControl/DatasetControl.tsx"],"sourcesContent":["import { useMemo, useRef } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"DatasetControl.js","sources":["../../../src/components/DatasetControl/DatasetControl.tsx"],"sourcesContent":["import { useMemo, useRef } from \"react\";\nimport { useControl } from \"../../hooks\";\nimport { MessageBar, MessageBarButton, MessageBarType, ThemeProvider } from \"@fluentui/react\";\nimport { datasetControlTranslations } from \"./translations\";\nimport { getDatasetControlStyles } from \"./styles\";\nimport { IDatasetControl } from \"./interfaces\";\nimport { QuickFind } from \"./QuickFind/QuickFind\";\nimport { ErrorBoundary } from \"./ErrorBoundary\";\nimport { useRerender } from \"@talxis/react-components\";\nimport { Client } from \"@talxis/client-libraries\";\n\nconst client = new Client();\n\nexport const DatasetControl = (props: IDatasetControl) => {\n const { labels, theme } = useControl('DatasetControl', props, datasetControlTranslations);\n const rerender = useRerender();\n const dataset = props.parameters.Grid;\n const injectedContextRef = useRef(props.context);\n const styles = useMemo(() => getDatasetControlStyles(theme, props.parameters.Height?.raw), []);\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n useMemo(() => {\n if (dataset.isVirtual() || !client.isTalxisPortal()) {\n dataset.setInterceptor('__onRequestRender', () => rerender());\n }\n }, []);\n\n //we need to have a way to customize the init behavior from above\n const componentProps = onOverrideComponentProps({\n onDatasetInit: () => {\n if (dataset.isVirtual()) {\n dataset.paging.loadExactPage(dataset.paging.pageNumber);\n }\n },\n containerProps: {\n theme: theme,\n className: styles.datasetControlRoot,\n },\n\n headerProps: {\n headerContainerProps: {\n className: styles.headerRoot\n },\n onRender: (renderQuickFind) => renderQuickFind(),\n onGetQuickFindProps: (props) => props\n },\n });\n\n const renderErrorMessageBar = (onReset?: () => void) => {\n <MessageBar\n isMultiline={false}\n actions={<MessageBarButton className={styles.messageBarBtn} text={labels.reload()} onClick={() => {\n onReset?.();\n dataset.refresh();\n }} />}\n messageBarType={MessageBarType.error}>\n {dataset.errorMessage || labels.generalError()}\n </MessageBar>\n }\n\n useMemo(() => {\n //@ts-ignore - private property\n injectedContextRef.current = dataset._patchContext(props.context);\n }, [props.context]);\n\n useMemo(() => {\n componentProps.onDatasetInit();\n }, []);\n\n const isQuickFindEnabled = () => {\n if (dataset.isVirtual() && props.parameters.EnableQuickFind?.raw) {\n return true;\n }\n return false;\n }\n\n\n return (\n <ThemeProvider {...componentProps.containerProps}>\n {isQuickFindEnabled() &&\n <div {...componentProps.headerProps.headerContainerProps}>\n {componentProps.headerProps.onRender(() => {\n return <>\n {isQuickFindEnabled() &&\n <QuickFind\n dataset={dataset}\n labels={labels}\n theme={theme}\n onGetQuickFindComponentProps={(props) => componentProps.headerProps.onGetQuickFindProps(props)} />\n }\n </>\n })}\n </div>\n }\n {props.onGetControlComponent({ ...props, context: injectedContextRef.current })}\n </ThemeProvider>\n )\n}"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { ThemeProviderProps } from "@fluentui/react";
|
|
3
2
|
import { ITranslation } from "../../hooks";
|
|
4
|
-
import { IControl
|
|
5
|
-
import {
|
|
3
|
+
import { IControl } from "../../interfaces";
|
|
4
|
+
import { IGridOutputs, IGridParameters } from "../Grid";
|
|
6
5
|
import { gridTranslations } from "../Grid/translations";
|
|
7
6
|
import { datasetControlTranslations } from "./translations";
|
|
8
7
|
import { ITextFieldProps } from "@talxis/react-components";
|
|
8
|
+
import React from "react";
|
|
9
9
|
export interface IQuickFindProps {
|
|
10
10
|
textFieldProps: ITextFieldProps;
|
|
11
11
|
container: ThemeProviderProps;
|
|
@@ -15,11 +15,16 @@ export interface IDatasetControlComponentProps {
|
|
|
15
15
|
containerProps: ThemeProviderProps;
|
|
16
16
|
headerProps: {
|
|
17
17
|
headerContainerProps: React.HTMLAttributes<HTMLDivElement>;
|
|
18
|
+
/**
|
|
19
|
+
* Can be used to override the default header renderer (includes QuickFind).
|
|
20
|
+
*/
|
|
18
21
|
onRender: (renderQuickFind: () => React.ReactElement) => React.ReactElement;
|
|
19
22
|
onGetQuickFindProps: (props: IQuickFindProps) => IQuickFindProps;
|
|
20
23
|
};
|
|
21
|
-
onOverrideControlProps: (props: IGridComponentProps) => IGridComponentProps;
|
|
22
24
|
}
|
|
23
25
|
export interface IDatasetControl extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof datasetControlTranslations & typeof gridTranslations>>, IDatasetControlComponentProps> {
|
|
24
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Tells the Dataset control which UI component should be used for the dataset.
|
|
28
|
+
*/
|
|
29
|
+
onGetControlComponent: (props: IControl<IGridParameters, any, any, any>) => React.ReactElement<IControl<any, any, any, any>>;
|
|
25
30
|
}
|
|
@@ -5,6 +5,7 @@ import { DataTypes, MemoryDataProvider, Dataset } from '@talxis/client-libraries
|
|
|
5
5
|
import { useTheme } from '@fluentui/react';
|
|
6
6
|
import { getChangeGridStyles } from './styles.js';
|
|
7
7
|
import { AgGridContext } from '../../../../../AgGrid/context.js';
|
|
8
|
+
import { Grid } from '../../../../../../../Grid.js';
|
|
8
9
|
import { DatasetControl } from '../../../../../../../../DatasetControl/DatasetControl.js';
|
|
9
10
|
|
|
10
11
|
const ChangeGrid = (props) => {
|
|
@@ -168,7 +169,7 @@ const ChangeGrid = (props) => {
|
|
|
168
169
|
return dataset;
|
|
169
170
|
};
|
|
170
171
|
const dataset = useMemo(() => getDataset(), []);
|
|
171
|
-
return (jsx("div", { className: styles.root, children: jsx(DatasetControl, { context: {
|
|
172
|
+
return (jsx("div", { className: styles.root, children: jsx(DatasetControl, { onGetControlComponent: (props) => jsx(Grid, { ...props }), context: {
|
|
172
173
|
...grid.pcfContext,
|
|
173
174
|
parameters: {
|
|
174
175
|
...grid.pcfContext.parameters,
|
|
@@ -180,7 +181,7 @@ const ChangeGrid = (props) => {
|
|
|
180
181
|
headerProps: {
|
|
181
182
|
...props.headerProps,
|
|
182
183
|
headerContainerProps: {
|
|
183
|
-
...props.headerProps
|
|
184
|
+
...props.headerProps?.headerContainerProps,
|
|
184
185
|
style: {
|
|
185
186
|
display: 'none'
|
|
186
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeGrid.js","sources":["../../../../../../../../../../src/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\nimport { useGridInstance } from \"../../../../../../hooks/useGridInstance\";\nimport {\n Dataset,\n DataTypes,\n IColumn,\n IDataset,\n IRecordChange,\n MemoryDataProvider,\n} from \"@talxis/client-libraries\";\nimport { DatasetControl } from \"../../../../../../../../DatasetControl\";\nimport { useTheme } from \"@fluentui/react\";\nimport { getChangeGridStyles } from \"./styles\";\nimport React from \"react\";\nimport { AgGridContext } from \"../../../../../AgGrid/context\";\n\ninterface IChangeGrid {\n recordChange: IRecordChange;\n onDatasetReady: (dataset: IDataset) => void;\n onDatasetDestroyed: (dataset: IDataset) => void;\n onIsSaving: (value: boolean) => void;\n onRequestRender: () => void;\n}\n\nexport const ChangeGrid = (props: IChangeGrid) => {\n const fieldChangesRef = useRef(props.recordChange.columns);\n fieldChangesRef.current = props.recordChange.columns;\n const baseRecord = props.recordChange.record;\n const grid = useGridInstance();\n const changedColumns = fieldChangesRef.current.map((change) => {\n return grid.dataset.columns.find((x) => change.columnName === x.name)!;\n });\n const agGridContext = React.useContext(AgGridContext);\n\n const recordPrimaryName = (() => {\n let result;\n const primaryColumn = grid.dataset.columns.find((col) => col.isPrimary);\n if (primaryColumn) {\n result = baseRecord.getFormattedValue(primaryColumn.name);\n } else {\n const firstTextColumn = grid.dataset.columns.find(\n (col) => col.dataType === DataTypes.SingleLineText\n );\n if (firstTextColumn) {\n result = baseRecord.getFormattedValue(firstTextColumn.name);\n }\n }\n return result ?? grid.labels[\"no-name\"]();\n })();\n\n const theme = useTheme();\n const styles = useMemo(() => getChangeGridStyles(theme, recordPrimaryName), [theme, recordPrimaryName]);\n\n useEffect(() => {\n props.onDatasetReady(dataset);\n return () => {\n props.onDatasetDestroyed(dataset);\n agGridContext.rerender();\n }\n }, []);\n\n const getColumns = (): IColumn[] => {\n const virtualColumns: IColumn[] = [\n {\n name: \"id__virtual\",\n alias: \"id__virtual\",\n visualSizeFactor: 0,\n dataType: DataTypes.SingleLineText,\n displayName: \"\",\n order: 0,\n isHidden: true,\n },\n {\n name: \"valueDesc__virtual\",\n alias: \"valueDesc__virtual\",\n visualSizeFactor: 150,\n dataType: DataTypes.SingleLineText,\n displayName: \"\",\n order: 1,\n },\n ];\n return [...virtualColumns, ...changedColumns];\n };\n\n const getDataset = () => {\n const memoryProvider = new MemoryDataProvider(\n [\n {\n id__virtual: \"original\",\n 'valueDesc__virtual': grid.labels[\"original-value\"](),\n },\n {\n id__virtual: \"new\",\n 'valueDesc__virtual': grid.labels[\"new-value\"](),\n },\n ], {\n PrimaryIdAttribute: \"id__virtual\"\n }\n );\n memoryProvider.setColumns(getColumns());\n const dataset = new Dataset(memoryProvider);\n dataset.isValid = () => {\n return baseRecord.isValid()\n }\n grid.dataset.linking.getLinkedEntities().map(x => dataset.linking.addLinkedEntity(x))\n\n dataset.addEventListener('onRecordLoaded', (record) => {\n const recordId = record.getRecordId();\n record.expressions.ui.setCustomFormattingExpression('valueDesc__virtual', (cellTheme) => {\n return {\n themeOverride: {\n fonts: {\n medium: {\n fontWeight: 600\n }\n }\n }\n }\n })\n changedColumns.map(col => {\n const change = fieldChangesRef.current.find(x => x.columnName === col.name);\n record.expressions?.setCurrencySymbolExpression(col.name, () => baseRecord.getCurrencySymbol?.(col.name) ?? \"\");\n //we need to store the previous values somewhere, in changes?\n //record.expressions?.ui.setCustomFormattingExpression(col.name, (cellTheme) => baseRecord.getColumnInfo(col.name).ui.getCustomFormatting(cellTheme));\n record.expressions?.ui.setControlParametersExpression(col.name, (parameters) => baseRecord.getColumnInfo(col.name).ui.getControlParameters(parameters));\n record.expressions?.ui.setCustomControlsExpression(col.name, (defaultCustomControls) => baseRecord.getColumnInfo(col.name).ui.getCustomControls(defaultCustomControls));\n record.expressions?.ui.setCustomControlComponentExpression(col.name, () => baseRecord.getColumnInfo(col.name).ui.getCustomControlComponent())\n if (recordId === 'new') {\n record.expressions?.setValueExpression?.(col.name, () => {\n //this happens if we have removed a change\n if (!change) {\n return baseRecord.getValue(col.name);\n }\n return change.originalValue;\n })\n if(!change) {\n record.setValue(col.name, record.getValue(col.name))\n }\n else {\n record.setValue(col.name, change.currentValue);\n }\n record.expressions?.ui.setNotificationsExpression?.(col.name, () => {\n return [\n {\n uniqueId: \"clear\",\n title: grid.labels[\"saving-discard\"](),\n iconName: \"EraseTool\",\n compact: true,\n messages: [],\n actions: [\n {\n actions: [\n () => {\n baseRecord.clearChanges?.(col.name);\n record.setValue(col.name, baseRecord.getValue(col.name))\n },\n ],\n },\n ],\n }\n ]\n })\n record.expressions?.setValidationExpression?.(col.name, () => baseRecord.getColumnInfo(col.name))\n }\n else if (recordId === 'original') {\n record.expressions?.setDisabledExpression?.(col.name, () => true);\n record.expressions?.setValueExpression?.(col.name, () => {\n //this happens if we have removed a change\n if (!change) {\n return baseRecord.getValue(col.name);\n }\n return change.originalValue;\n })\n }\n });\n })\n\n dataset.addEventListener('onRecordColumnValueChanged', (record, columnName) => {\n baseRecord.setValue(columnName, record.getValue(columnName)); \n props.onRequestRender(); \n })\n dataset.addEventListener('onChangesCleared', () => {\n baseRecord.clearChanges?.();\n props.onRequestRender();\n })\n dataset.addEventListener('onRecordSave', async () => {\n props.onIsSaving(true);\n await baseRecord.save();\n baseRecord.clearChanges?.();\n props.onIsSaving(false);\n props.onRequestRender();\n })\n return dataset;\n };\n const dataset = useMemo(() => getDataset(), []);\n return (\n <div className={styles.root}>\n <DatasetControl\n context={{\n ...grid.pcfContext,\n parameters: {\n ...grid.pcfContext.parameters,\n Grid: dataset,\n },\n }}\n onOverrideComponentProps={(props) => {\n return {\n ...props,\n headerProps: {\n ...props.headerProps,\n headerContainerProps: {\n ...props.headerProps.headerContainerProps,\n style: {\n display: 'none'\n }\n }\n }\n }\n }}\n parameters={{\n Grid: dataset,\n EnablePagination: {\n raw: false,\n },\n EnableFiltering: {\n raw: false,\n },\n EnableEditing: {\n raw: true,\n },\n EnableNavigation: {\n raw: false,\n },\n EnableOptionSetColors: grid.parameters.EnableOptionSetColors,\n EnableSorting: {\n raw: false,\n },\n EnableChangeEditor: {\n raw: false\n },\n SelectableRows: {\n raw: \"none\",\n },\n Height: {\n raw: '160px'\n }\n }}\n />\n </div>\n );\n};\n"],"names":["React","_jsx"],"mappings":";;;;;;;;;AAwBa,MAAA,UAAU,GAAG,CAAC,KAAkB,KAAI;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3D,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AACrD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAE,CAAC;AAC3E,KAAC,CAAC,CAAC;IACH,MAAM,aAAa,GAAGA,cAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAEtD,IAAA,MAAM,iBAAiB,GAAG,CAAC,MAAK;AAC5B,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;AACxE,QAAA,IAAI,aAAa,EAAE;YACf,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAC7C,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,CACrD,CAAC;AACF,YAAA,IAAI,eAAe,EAAE;gBACjB,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/D,aAAA;AACJ,SAAA;QACD,OAAO,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;KAC7C,GAAG,CAAC;AAEL,IAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAExG,SAAS,CAAC,MAAK;AACX,QAAA,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC9B,QAAA,OAAO,MAAK;AACR,YAAA,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC7B,SAAC,CAAA;KACJ,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,MAAgB;AAC/B,QAAA,MAAM,cAAc,GAAc;AAC9B,YAAA;AACI,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,gBAAgB,EAAE,CAAC;gBACnB,QAAQ,EAAE,SAAS,CAAC,cAAc;AAClC,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA;AACD,YAAA;AACI,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,gBAAgB,EAAE,GAAG;gBACrB,QAAQ,EAAE,SAAS,CAAC,cAAc;AAClC,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,KAAK,EAAE,CAAC;AACX,aAAA;SACJ,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC,CAAC;AAClD,KAAC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAK;AACpB,QAAA,MAAM,cAAc,GAAG,IAAI,kBAAkB,CACzC;AACI,YAAA;AACI,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;AACxD,aAAA;AACD,YAAA;AACI,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACnD,aAAA;SACJ,EAAE;AACC,YAAA,kBAAkB,EAAE,aAAa;AACpC,SAAA,CACJ,CAAC;AACF,QAAA,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;AAC5C,QAAA,OAAO,CAAC,OAAO,GAAG,MAAK;AACnB,YAAA,OAAO,UAAU,CAAC,OAAO,EAAE,CAAA;AAC/B,SAAC,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;QAErF,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAI;AAClD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACtC,YAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,6BAA6B,CAAC,oBAAoB,EAAE,CAAC,SAAS,KAAI;gBACpF,OAAO;AACH,oBAAA,aAAa,EAAE;AACX,wBAAA,KAAK,EAAE;AACH,4BAAA,MAAM,EAAE;AACJ,gCAAA,UAAU,EAAE,GAAG;AAClB,6BAAA;AACJ,yBAAA;AACJ,qBAAA;iBACJ,CAAA;AACL,aAAC,CAAC,CAAA;AACF,YAAA,cAAc,CAAC,GAAG,CAAC,GAAG,IAAG;gBACrB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5E,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;;AAGhH,gBAAA,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,8BAA8B,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;AACxJ,gBAAA,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,qBAAqB,KAAK,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACxK,gBAAA,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,mCAAmC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAA;gBAC7I,IAAI,QAAQ,KAAK,KAAK,EAAE;oBACpB,MAAM,CAAC,WAAW,EAAE,kBAAkB,GAAG,GAAG,CAAC,IAAI,EAAE,MAAK;;wBAEpD,IAAI,CAAC,MAAM,EAAE;4BACT,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,yBAAA;wBACD,OAAO,MAAM,CAAC,aAAa,CAAC;AAChC,qBAAC,CAAC,CAAA;oBACF,IAAG,CAAC,MAAM,EAAE;AACR,wBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACvD,qBAAA;AACI,yBAAA;wBACD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAClD,qBAAA;AACD,oBAAA,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,0BAA0B,GAAG,GAAG,CAAC,IAAI,EAAE,MAAK;wBAC/D,OAAO;AACH,4BAAA;AACI,gCAAA,QAAQ,EAAE,OAAO;AACjB,gCAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;AACtC,gCAAA,QAAQ,EAAE,WAAW;AACrB,gCAAA,OAAO,EAAE,IAAI;AACb,gCAAA,QAAQ,EAAE,EAAE;AACZ,gCAAA,OAAO,EAAE;AACL,oCAAA;AACI,wCAAA,OAAO,EAAE;AACL,4CAAA,MAAK;gDACD,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,gDAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;6CAC3D;AACJ,yCAAA;AACJ,qCAAA;AACJ,iCAAA;AACJ,6BAAA;yBACJ,CAAA;AACL,qBAAC,CAAC,CAAA;oBACF,MAAM,CAAC,WAAW,EAAE,uBAAuB,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACpG,iBAAA;qBACI,IAAI,QAAQ,KAAK,UAAU,EAAE;AAC9B,oBAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;oBAClE,MAAM,CAAC,WAAW,EAAE,kBAAkB,GAAG,GAAG,CAAC,IAAI,EAAE,MAAK;;wBAEpD,IAAI,CAAC,MAAM,EAAE;4BACT,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,yBAAA;wBACD,OAAO,MAAM,CAAC,aAAa,CAAC;AAChC,qBAAC,CAAC,CAAA;AACL,iBAAA;AACL,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAA;QAEF,OAAO,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,UAAU,KAAI;AAC1E,YAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAK;AAC9C,YAAA,UAAU,CAAC,YAAY,IAAI,CAAC;YAC5B,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAW;AAChD,YAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,UAAU,CAAC,YAAY,IAAI,CAAC;AAC5B,YAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxB,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,OAAO,CAAC;AACnB,KAAC,CAAC;AACF,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,IAAA,QACIC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,IAAI,EAAA,QAAA,EACvBA,GAAC,CAAA,cAAc,EACX,EAAA,OAAO,EAAE;gBACL,GAAG,IAAI,CAAC,UAAU;AAClB,gBAAA,UAAU,EAAE;AACR,oBAAA,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AAC7B,oBAAA,IAAI,EAAE,OAAO;AAChB,iBAAA;AACJ,aAAA,EACD,wBAAwB,EAAE,CAAC,KAAK,KAAI;gBAChC,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,WAAW,EAAE;wBACT,GAAG,KAAK,CAAC,WAAW;AACpB,wBAAA,oBAAoB,EAAE;AAClB,4BAAA,GAAG,KAAK,CAAC,WAAW,CAAC,oBAAoB;AACzC,4BAAA,KAAK,EAAE;AACH,gCAAA,OAAO,EAAE,MAAM;AAClB,6BAAA;AACJ,yBAAA;AACJ,qBAAA;iBACJ,CAAA;aACJ,EACD,UAAU,EAAE;AACR,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,gBAAgB,EAAE;AACd,oBAAA,GAAG,EAAE,KAAK;AACb,iBAAA;AACD,gBAAA,eAAe,EAAE;AACb,oBAAA,GAAG,EAAE,KAAK;AACb,iBAAA;AACD,gBAAA,aAAa,EAAE;AACX,oBAAA,GAAG,EAAE,IAAI;AACZ,iBAAA;AACD,gBAAA,gBAAgB,EAAE;AACd,oBAAA,GAAG,EAAE,KAAK;AACb,iBAAA;AACD,gBAAA,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB;AAC5D,gBAAA,aAAa,EAAE;AACX,oBAAA,GAAG,EAAE,KAAK;AACb,iBAAA;AACD,gBAAA,kBAAkB,EAAE;AAChB,oBAAA,GAAG,EAAE,KAAK;AACb,iBAAA;AACD,gBAAA,cAAc,EAAE;AACZ,oBAAA,GAAG,EAAE,MAAM;AACd,iBAAA;AACD,gBAAA,MAAM,EAAE;AACJ,oBAAA,GAAG,EAAE,OAAO;AACf,iBAAA;aACJ,EACH,CAAA,EAAA,CACA,EACR;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"ChangeGrid.js","sources":["../../../../../../../../../../src/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\nimport { useGridInstance } from \"../../../../../../hooks/useGridInstance\";\nimport {\n Dataset,\n DataTypes,\n IColumn,\n IDataset,\n IRecordChange,\n MemoryDataProvider,\n} from \"@talxis/client-libraries\";\nimport { DatasetControl } from \"../../../../../../../../DatasetControl\";\nimport { useTheme } from \"@fluentui/react\";\nimport { getChangeGridStyles } from \"./styles\";\nimport React from \"react\";\nimport { AgGridContext } from \"../../../../../AgGrid/context\";\nimport { Grid } from \"../../../../../../../Grid\";\n\ninterface IChangeGrid {\n recordChange: IRecordChange;\n onDatasetReady: (dataset: IDataset) => void;\n onDatasetDestroyed: (dataset: IDataset) => void;\n onIsSaving: (value: boolean) => void;\n onRequestRender: () => void;\n}\n\nexport const ChangeGrid = (props: IChangeGrid) => {\n const fieldChangesRef = useRef(props.recordChange.columns);\n fieldChangesRef.current = props.recordChange.columns;\n const baseRecord = props.recordChange.record;\n const grid = useGridInstance();\n const changedColumns = fieldChangesRef.current.map((change) => {\n return grid.dataset.columns.find((x) => change.columnName === x.name)!;\n });\n const agGridContext = React.useContext(AgGridContext);\n\n const recordPrimaryName = (() => {\n let result;\n const primaryColumn = grid.dataset.columns.find((col) => col.isPrimary);\n if (primaryColumn) {\n result = baseRecord.getFormattedValue(primaryColumn.name);\n } else {\n const firstTextColumn = grid.dataset.columns.find(\n (col) => col.dataType === DataTypes.SingleLineText\n );\n if (firstTextColumn) {\n result = baseRecord.getFormattedValue(firstTextColumn.name);\n }\n }\n return result ?? grid.labels[\"no-name\"]();\n })();\n\n const theme = useTheme();\n const styles = useMemo(() => getChangeGridStyles(theme, recordPrimaryName), [theme, recordPrimaryName]);\n\n useEffect(() => {\n props.onDatasetReady(dataset);\n return () => {\n props.onDatasetDestroyed(dataset);\n agGridContext.rerender();\n }\n }, []);\n\n const getColumns = (): IColumn[] => {\n const virtualColumns: IColumn[] = [\n {\n name: \"id__virtual\",\n alias: \"id__virtual\",\n visualSizeFactor: 0,\n dataType: DataTypes.SingleLineText,\n displayName: \"\",\n order: 0,\n isHidden: true,\n },\n {\n name: \"valueDesc__virtual\",\n alias: \"valueDesc__virtual\",\n visualSizeFactor: 150,\n dataType: DataTypes.SingleLineText,\n displayName: \"\",\n order: 1,\n },\n ];\n return [...virtualColumns, ...changedColumns];\n };\n\n const getDataset = () => {\n const memoryProvider = new MemoryDataProvider(\n [\n {\n id__virtual: \"original\",\n 'valueDesc__virtual': grid.labels[\"original-value\"](),\n },\n {\n id__virtual: \"new\",\n 'valueDesc__virtual': grid.labels[\"new-value\"](),\n },\n ], {\n PrimaryIdAttribute: \"id__virtual\"\n }\n );\n memoryProvider.setColumns(getColumns());\n const dataset = new Dataset(memoryProvider);\n dataset.isValid = () => {\n return baseRecord.isValid()\n }\n grid.dataset.linking.getLinkedEntities().map(x => dataset.linking.addLinkedEntity(x))\n\n dataset.addEventListener('onRecordLoaded', (record) => {\n const recordId = record.getRecordId();\n record.expressions.ui.setCustomFormattingExpression('valueDesc__virtual', (cellTheme) => {\n return {\n themeOverride: {\n fonts: {\n medium: {\n fontWeight: 600\n }\n }\n }\n }\n })\n changedColumns.map(col => {\n const change = fieldChangesRef.current.find(x => x.columnName === col.name);\n record.expressions?.setCurrencySymbolExpression(col.name, () => baseRecord.getCurrencySymbol?.(col.name) ?? \"\");\n //we need to store the previous values somewhere, in changes?\n //record.expressions?.ui.setCustomFormattingExpression(col.name, (cellTheme) => baseRecord.getColumnInfo(col.name).ui.getCustomFormatting(cellTheme));\n record.expressions?.ui.setControlParametersExpression(col.name, (parameters) => baseRecord.getColumnInfo(col.name).ui.getControlParameters(parameters));\n record.expressions?.ui.setCustomControlsExpression(col.name, (defaultCustomControls) => baseRecord.getColumnInfo(col.name).ui.getCustomControls(defaultCustomControls));\n record.expressions?.ui.setCustomControlComponentExpression(col.name, () => baseRecord.getColumnInfo(col.name).ui.getCustomControlComponent())\n if (recordId === 'new') {\n record.expressions?.setValueExpression?.(col.name, () => {\n //this happens if we have removed a change\n if (!change) {\n return baseRecord.getValue(col.name);\n }\n return change.originalValue;\n })\n if(!change) {\n record.setValue(col.name, record.getValue(col.name))\n }\n else {\n record.setValue(col.name, change.currentValue);\n }\n record.expressions?.ui.setNotificationsExpression?.(col.name, () => {\n return [\n {\n uniqueId: \"clear\",\n title: grid.labels[\"saving-discard\"](),\n iconName: \"EraseTool\",\n compact: true,\n messages: [],\n actions: [\n {\n actions: [\n () => {\n baseRecord.clearChanges?.(col.name);\n record.setValue(col.name, baseRecord.getValue(col.name))\n },\n ],\n },\n ],\n }\n ]\n })\n record.expressions?.setValidationExpression?.(col.name, () => baseRecord.getColumnInfo(col.name))\n }\n else if (recordId === 'original') {\n record.expressions?.setDisabledExpression?.(col.name, () => true);\n record.expressions?.setValueExpression?.(col.name, () => {\n //this happens if we have removed a change\n if (!change) {\n return baseRecord.getValue(col.name);\n }\n return change.originalValue;\n })\n }\n });\n })\n\n dataset.addEventListener('onRecordColumnValueChanged', (record, columnName) => {\n baseRecord.setValue(columnName, record.getValue(columnName)); \n props.onRequestRender(); \n })\n dataset.addEventListener('onChangesCleared', () => {\n baseRecord.clearChanges?.();\n props.onRequestRender();\n })\n dataset.addEventListener('onRecordSave', async () => {\n props.onIsSaving(true);\n await baseRecord.save();\n baseRecord.clearChanges?.();\n props.onIsSaving(false);\n props.onRequestRender();\n })\n return dataset;\n };\n const dataset = useMemo(() => getDataset(), []);\n return (\n <div className={styles.root}>\n <DatasetControl\n onGetControlComponent={(props) => <Grid {...props} />}\n context={{\n ...grid.pcfContext,\n parameters: {\n ...grid.pcfContext.parameters,\n Grid: dataset,\n },\n }}\n onOverrideComponentProps={(props) => {\n return {\n ...props,\n headerProps: {\n ...props.headerProps,\n headerContainerProps: {\n ...props.headerProps?.headerContainerProps,\n style: {\n display: 'none'\n }\n }\n }\n }\n }}\n parameters={{\n Grid: dataset,\n EnablePagination: {\n raw: false,\n },\n EnableFiltering: {\n raw: false,\n },\n EnableEditing: {\n raw: true,\n },\n EnableNavigation: {\n raw: false,\n },\n EnableOptionSetColors: grid.parameters.EnableOptionSetColors,\n EnableSorting: {\n raw: false,\n },\n EnableChangeEditor: {\n raw: false\n },\n SelectableRows: {\n raw: \"none\",\n },\n Height: {\n raw: '160px'\n }\n }}\n />\n </div>\n );\n};\n"],"names":["React","_jsx"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="@types/powerapps-component-framework" />
|
|
2
2
|
/// <reference types="react" />
|
|
3
3
|
import { ITheme, ITextFieldProps, IDatePickerProps, ICommandBarProps, ITagPickerProps, IComboBoxProps } from '@talxis/react-components';
|
|
4
|
-
import { DeepPartial, DataType, IDataset, IColumn, IRecord, ICommand } from '@talxis/client-libraries';
|
|
4
|
+
import { DeepPartial, DataType, IDataset, Dataset, IDataProvider, PowerAppsDatasetProvider, IColumn, IRecord, ICommand } from '@talxis/client-libraries';
|
|
5
5
|
import { ITheme as ITheme$1, ThemeProviderProps, ITextProps, ILinkProps, IIconProps, IImageProps, ISpinnerProps, IShimmerProps, IMessageBar, IButtonProps, IToggleProps } from '@fluentui/react';
|
|
6
6
|
import React$1 from 'react';
|
|
7
7
|
import { AgGridReactProps } from '@ag-grid-community/react';
|
|
@@ -127,6 +127,114 @@ declare class BaseControls {
|
|
|
127
127
|
static IsBaseControl(name: string): boolean;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
interface IInputs {
|
|
131
|
+
Columns: ComponentFramework.PropertyTypes.StringProperty;
|
|
132
|
+
HomePageGridClientApiRibbonButtonId: ComponentFramework.PropertyTypes.StringProperty;
|
|
133
|
+
InlineRibbonButtonIds: ComponentFramework.PropertyTypes.StringProperty;
|
|
134
|
+
Height: ComponentFramework.PropertyTypes.StringProperty;
|
|
135
|
+
[key: string]: any;
|
|
136
|
+
}
|
|
137
|
+
interface IOutputs$3 {
|
|
138
|
+
DatasetControl?: any;
|
|
139
|
+
}
|
|
140
|
+
interface IParameterGetters$1 {
|
|
141
|
+
onGetDataset: () => ComponentFramework.PropertyTypes.DataSet | IDataset;
|
|
142
|
+
onGetColumns?: () => string | null;
|
|
143
|
+
onGetHeight?: () => string | null;
|
|
144
|
+
onGetHomePageGridClientApiRibbonButtonId?: () => string | null;
|
|
145
|
+
onGetInlineRibbonButtonIds?: () => string | null;
|
|
146
|
+
/**
|
|
147
|
+
* Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.
|
|
148
|
+
*/
|
|
149
|
+
onInitialize?: () => void | Promise<void>;
|
|
150
|
+
}
|
|
151
|
+
declare class DatasetAdapter {
|
|
152
|
+
private _container;
|
|
153
|
+
private _dataset;
|
|
154
|
+
private _context;
|
|
155
|
+
private _lastUsedColumns?;
|
|
156
|
+
private _pendingForceRefresh;
|
|
157
|
+
private _powerAppsDatasetProvider?;
|
|
158
|
+
private _client;
|
|
159
|
+
private _notifyOutputChanged;
|
|
160
|
+
private _resolveGetOutputs;
|
|
161
|
+
private _getOutputsPromise;
|
|
162
|
+
private _initialRender;
|
|
163
|
+
private _homePageGridClientApiRibbonButtonId?;
|
|
164
|
+
private _parameters;
|
|
165
|
+
private _datasetPropertyName;
|
|
166
|
+
init(context: ComponentFramework.Context<IInputs, IOutputs$3>, notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters$1): void;
|
|
167
|
+
/**
|
|
168
|
+
* Returns true if the control should re-render or false if it should not.
|
|
169
|
+
*/
|
|
170
|
+
updateView(context: ComponentFramework.Context<IInputs, IOutputs$3>): boolean | undefined;
|
|
171
|
+
getDataset(): ComponentFramework.PropertyTypes.DataSet | IDataset | Dataset<IDataProvider> | Dataset<PowerAppsDatasetProvider>;
|
|
172
|
+
getOutputs(): IOutputs$3;
|
|
173
|
+
destroy(): void;
|
|
174
|
+
getHeight(): string | null;
|
|
175
|
+
private _onDatasetInit;
|
|
176
|
+
private _getColumns;
|
|
177
|
+
private _getMergedColumns;
|
|
178
|
+
private _getFullHeightStyles;
|
|
179
|
+
private _getCurrentFetchXml;
|
|
180
|
+
private _isHomePageGrid;
|
|
181
|
+
private _refreshOnChange;
|
|
182
|
+
private _getGlobalDatasetInstanceName;
|
|
183
|
+
private _getNormalizedFetchXml;
|
|
184
|
+
private _setViewColumns;
|
|
185
|
+
private _getRefreshStatus;
|
|
186
|
+
private _forceRefresh;
|
|
187
|
+
private _getPowerAppsDatasetProvider;
|
|
188
|
+
private _getDatasetPropertyName;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
interface IOutputs$2 {
|
|
192
|
+
DatasetControl?: any;
|
|
193
|
+
}
|
|
194
|
+
interface IParameterGetters {
|
|
195
|
+
dataProviderType: "Memory" | "FetchXml" | 'Custom';
|
|
196
|
+
onGetData: () => string | null;
|
|
197
|
+
onGetColumns: () => string | null;
|
|
198
|
+
onGetEntityMetadata: () => string | null;
|
|
199
|
+
customDataProvider?: IDataProvider;
|
|
200
|
+
onGetHeight?: () => string | null;
|
|
201
|
+
/**
|
|
202
|
+
* Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.
|
|
203
|
+
*/
|
|
204
|
+
onInitialize?: () => void | Promise<void>;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Helper class that holds boilerplate code for handling a virtual dataset in PCF, like syncing data, columns, and metadata from parameters.
|
|
208
|
+
*
|
|
209
|
+
*/
|
|
210
|
+
declare class VirtualDatasetAdapter {
|
|
211
|
+
private _providerClasses;
|
|
212
|
+
private _dataset;
|
|
213
|
+
private _parsedData;
|
|
214
|
+
private _lastUsedColumns;
|
|
215
|
+
private _lastUsedData;
|
|
216
|
+
private _lastUsedMetadata;
|
|
217
|
+
private _dataProviderClass;
|
|
218
|
+
private _container;
|
|
219
|
+
private _notifyOutputChanged;
|
|
220
|
+
private _resolveGetOutputs;
|
|
221
|
+
private _getOutputsPromise;
|
|
222
|
+
private _parameters;
|
|
223
|
+
init(notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters): this;
|
|
224
|
+
updateView(): void;
|
|
225
|
+
getDataset(): Dataset<IDataProvider>;
|
|
226
|
+
destroy(): void;
|
|
227
|
+
getOutputs(): IOutputs$2;
|
|
228
|
+
private _onDatasetInit;
|
|
229
|
+
private _getData;
|
|
230
|
+
private _getColumns;
|
|
231
|
+
private _shouldMergeColumns;
|
|
232
|
+
private _getMergedColumns;
|
|
233
|
+
private _getEntityMetadata;
|
|
234
|
+
private _refreshOnChange;
|
|
235
|
+
private _getFullTabStyles;
|
|
236
|
+
}
|
|
237
|
+
|
|
130
238
|
interface IOutputs$1 {
|
|
131
239
|
[key: string]: any;
|
|
132
240
|
}
|
|
@@ -680,14 +788,19 @@ interface IDatasetControlComponentProps {
|
|
|
680
788
|
onDatasetInit: () => void;
|
|
681
789
|
containerProps: ThemeProviderProps;
|
|
682
790
|
headerProps: {
|
|
683
|
-
headerContainerProps: React.HTMLAttributes<HTMLDivElement>;
|
|
684
|
-
|
|
791
|
+
headerContainerProps: React$1.HTMLAttributes<HTMLDivElement>;
|
|
792
|
+
/**
|
|
793
|
+
* Can be used to override the default header renderer (includes QuickFind).
|
|
794
|
+
*/
|
|
795
|
+
onRender: (renderQuickFind: () => React$1.ReactElement) => React$1.ReactElement;
|
|
685
796
|
onGetQuickFindProps: (props: IQuickFindProps) => IQuickFindProps;
|
|
686
797
|
};
|
|
687
|
-
onOverrideControlProps: (props: IGridComponentProps) => IGridComponentProps;
|
|
688
798
|
}
|
|
689
799
|
interface IDatasetControl extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof datasetControlTranslations & typeof gridTranslations>>, IDatasetControlComponentProps> {
|
|
690
|
-
|
|
800
|
+
/**
|
|
801
|
+
* Tells the Dataset control which UI component should be used for the dataset.
|
|
802
|
+
*/
|
|
803
|
+
onGetControlComponent: (props: IControl<IGridParameters, any, any, any>) => React$1.ReactElement<IControl<any, any, any, any>>;
|
|
691
804
|
}
|
|
692
805
|
|
|
693
806
|
declare const DatasetControl: (props: IDatasetControl) => JSX.Element;
|
|
@@ -1285,4 +1398,4 @@ interface IDurationOutputs extends IOutputs$1 {
|
|
|
1285
1398
|
|
|
1286
1399
|
declare const Duration: (props: IDuration) => JSX.Element;
|
|
1287
1400
|
|
|
1288
|
-
export { BaseControl, BaseControls, ControlTheme, DatasetControl, DateTime, Decimal, Duration, Grid, GridCellRenderer, IContext, IControl, IControlController, IDatasetControl, IDatasetControlComponentProps, IDateTime, IDateTimeOutputs, IDateTimeParameters, IDateTimeProperty, IDecimal, IDecimalNumberProperty, IDecimalOutputs, IDecimalParameters, IDefaultTranslations, IDuration, IDurationOutputs, IDurationParameters, IEntity, IFileProperty, IFluentDesignState, IGrid, IGridCellRenderer, IGridCellRendererComponentProps, IGridCellRendererParameters, IGridComponentProps, IGridOutputs, IGridParameters, ILayout, ILookup, ILookupOutputs, ILookupParameters, ILookupProperty, IMetadata, IMultiSelectOptionSet, IMultiSelectOptionSetOutputs, IMultiSelectOptionSetParameters, IMultiSelectOptionSetProperty, IOptionProps, IOptionSet, IOptionSetOutputs, IOptionSetParameters, IOptionSetProperty, IOptionSetProps, IOutputs, IParameters$1 as IParameters, IProperty, IQuickFindProps, IRecordCommandsProps, IStringProperty, ITextField, ITextFieldOutputs, ITextFieldParameters, ITranslation, ITranslations, ITwoOptions, ITwoOptionsOutputs, ITwoOptionsParameters, ITwoOptionsProperty, IWholeNumberProperty, Lookup, MultiSelectOptionSet, NestedControlRenderer, OptionSet, TextField, ThemeWrapper, TwoOptions, useControl, useControlLabels, useControlSizing, useControlTheme, useControlThemeGenerator, useDateTime, useFocusIn, useInputBasedControl, useLookup, useMouseOver };
|
|
1401
|
+
export { BaseControl, BaseControls, ControlTheme, DatasetAdapter, DatasetControl, DateTime, Decimal, Duration, Grid, GridCellRenderer, IContext, IControl, IControlController, IDatasetControl, IDatasetControlComponentProps, IDateTime, IDateTimeOutputs, IDateTimeParameters, IDateTimeProperty, IDecimal, IDecimalNumberProperty, IDecimalOutputs, IDecimalParameters, IDefaultTranslations, IDuration, IDurationOutputs, IDurationParameters, IEntity, IFileProperty, IFluentDesignState, IGrid, IGridCellRenderer, IGridCellRendererComponentProps, IGridCellRendererParameters, IGridComponentProps, IGridOutputs, IGridParameters, ILayout, ILookup, ILookupOutputs, ILookupParameters, ILookupProperty, IMetadata, IMultiSelectOptionSet, IMultiSelectOptionSetOutputs, IMultiSelectOptionSetParameters, IMultiSelectOptionSetProperty, IOptionProps, IOptionSet, IOptionSetOutputs, IOptionSetParameters, IOptionSetProperty, IOptionSetProps, IOutputs, IParameters$1 as IParameters, IProperty, IQuickFindProps, IRecordCommandsProps, IStringProperty, ITextField, ITextFieldOutputs, ITextFieldParameters, ITranslation, ITranslations, ITwoOptions, ITwoOptionsOutputs, ITwoOptionsParameters, ITwoOptionsProperty, IWholeNumberProperty, Lookup, MultiSelectOptionSet, NestedControlRenderer, OptionSet, TextField, ThemeWrapper, TwoOptions, VirtualDatasetAdapter, useControl, useControlLabels, useControlSizing, useControlTheme, useControlThemeGenerator, useDateTime, useFocusIn, useInputBasedControl, useLookup, useMouseOver };
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,8 @@ export { ControlTheme } from './utils/theme/ControlTheme.js';
|
|
|
9
9
|
export { useControlThemeGenerator } from './utils/theme/hooks/useControlThemeGenerator.js';
|
|
10
10
|
export { ThemeWrapper } from './utils/theme/components/ThemeWrapper.js';
|
|
11
11
|
export { BaseControls } from './utils/BaseControls.js';
|
|
12
|
+
export { DatasetAdapter } from './utils/dataset/adapters/DatasetAdapter.js';
|
|
13
|
+
export { VirtualDatasetAdapter } from './utils/dataset/adapters/VirtualDatasetAdapter.js';
|
|
12
14
|
export { DatasetControl } from './components/DatasetControl/DatasetControl.js';
|
|
13
15
|
export { DateTime } from './components/DateTime/DateTime.js';
|
|
14
16
|
export { useDateTime } from './components/DateTime/hooks/useDateTime.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/// <reference types="@types/powerapps-component-framework" />
|
|
2
|
+
import { Dataset, IDataProvider, IDataset, PowerAppsDatasetProvider } from "@talxis/client-libraries";
|
|
3
|
+
interface IInputs {
|
|
4
|
+
Columns: ComponentFramework.PropertyTypes.StringProperty;
|
|
5
|
+
HomePageGridClientApiRibbonButtonId: ComponentFramework.PropertyTypes.StringProperty;
|
|
6
|
+
InlineRibbonButtonIds: ComponentFramework.PropertyTypes.StringProperty;
|
|
7
|
+
Height: ComponentFramework.PropertyTypes.StringProperty;
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
interface IOutputs {
|
|
11
|
+
DatasetControl?: any;
|
|
12
|
+
}
|
|
13
|
+
interface IParameterGetters {
|
|
14
|
+
onGetDataset: () => ComponentFramework.PropertyTypes.DataSet | IDataset;
|
|
15
|
+
onGetColumns?: () => string | null;
|
|
16
|
+
onGetHeight?: () => string | null;
|
|
17
|
+
onGetHomePageGridClientApiRibbonButtonId?: () => string | null;
|
|
18
|
+
onGetInlineRibbonButtonIds?: () => string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.
|
|
21
|
+
*/
|
|
22
|
+
onInitialize?: () => void | Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare class DatasetAdapter {
|
|
25
|
+
private _container;
|
|
26
|
+
private _dataset;
|
|
27
|
+
private _context;
|
|
28
|
+
private _lastUsedColumns?;
|
|
29
|
+
private _pendingForceRefresh;
|
|
30
|
+
private _powerAppsDatasetProvider?;
|
|
31
|
+
private _client;
|
|
32
|
+
private _notifyOutputChanged;
|
|
33
|
+
private _resolveGetOutputs;
|
|
34
|
+
private _getOutputsPromise;
|
|
35
|
+
private _initialRender;
|
|
36
|
+
private _homePageGridClientApiRibbonButtonId?;
|
|
37
|
+
private _parameters;
|
|
38
|
+
private _datasetPropertyName;
|
|
39
|
+
init(context: ComponentFramework.Context<IInputs, IOutputs>, notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters): void;
|
|
40
|
+
/**
|
|
41
|
+
* Returns true if the control should re-render or false if it should not.
|
|
42
|
+
*/
|
|
43
|
+
updateView(context: ComponentFramework.Context<IInputs, IOutputs>): boolean | undefined;
|
|
44
|
+
getDataset(): ComponentFramework.PropertyTypes.DataSet | IDataset | Dataset<IDataProvider> | Dataset<PowerAppsDatasetProvider>;
|
|
45
|
+
getOutputs(): IOutputs;
|
|
46
|
+
destroy(): void;
|
|
47
|
+
getHeight(): string | null;
|
|
48
|
+
private _onDatasetInit;
|
|
49
|
+
private _getColumns;
|
|
50
|
+
private _getMergedColumns;
|
|
51
|
+
private _getFullHeightStyles;
|
|
52
|
+
private _getCurrentFetchXml;
|
|
53
|
+
private _isHomePageGrid;
|
|
54
|
+
private _refreshOnChange;
|
|
55
|
+
private _getGlobalDatasetInstanceName;
|
|
56
|
+
private _getNormalizedFetchXml;
|
|
57
|
+
private _setViewColumns;
|
|
58
|
+
private _getRefreshStatus;
|
|
59
|
+
private _forceRefresh;
|
|
60
|
+
private _getPowerAppsDatasetProvider;
|
|
61
|
+
private _getDatasetPropertyName;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { Client, Dataset, FetchXmlBuilder, PowerAppsDatasetProvider } from '@talxis/client-libraries';
|
|
2
|
+
import { mergeStyles } from '@fluentui/react';
|
|
3
|
+
|
|
4
|
+
class DatasetAdapter {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._pendingForceRefresh = false;
|
|
7
|
+
this._client = new Client();
|
|
8
|
+
this._getOutputsPromise = new Promise(resolve => {
|
|
9
|
+
this._resolveGetOutputs = resolve;
|
|
10
|
+
});
|
|
11
|
+
this._initialRender = true;
|
|
12
|
+
}
|
|
13
|
+
init(context, notifyOutputChanged, container, parameters) {
|
|
14
|
+
this._container = container;
|
|
15
|
+
this._context = context;
|
|
16
|
+
this._parameters = parameters;
|
|
17
|
+
this._datasetPropertyName = this._getDatasetPropertyName();
|
|
18
|
+
this._lastUsedColumns = this._parameters.onGetColumns?.();
|
|
19
|
+
this._homePageGridClientApiRibbonButtonId = this._parameters.onGetHomePageGridClientApiRibbonButtonId?.();
|
|
20
|
+
this._notifyOutputChanged = notifyOutputChanged;
|
|
21
|
+
this._powerAppsDatasetProvider = this._getPowerAppsDatasetProvider();
|
|
22
|
+
this._dataset = this.getDataset();
|
|
23
|
+
if (this._powerAppsDatasetProvider) {
|
|
24
|
+
this._dataset.setColumns(this._parameters.onGetDataset().columns);
|
|
25
|
+
}
|
|
26
|
+
this._dataset.setColumns(this._getColumns());
|
|
27
|
+
if (this.getHeight() === '100%') {
|
|
28
|
+
this._container.classList.add(this._getFullHeightStyles());
|
|
29
|
+
}
|
|
30
|
+
this._notifyOutputChanged();
|
|
31
|
+
this._onDatasetInit();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns true if the control should re-render or false if it should not.
|
|
35
|
+
*/
|
|
36
|
+
updateView(context) {
|
|
37
|
+
this._context = context;
|
|
38
|
+
//refresh in PowerApps is broken, sometimes the paging will return broken (-100) or not updated
|
|
39
|
+
//calling loadExactPage after refresh occures fixes that (results in more API calls, but whan can you do)
|
|
40
|
+
if (this._getRefreshStatus() === 1 && !this._initialRender) {
|
|
41
|
+
return this._forceRefresh();
|
|
42
|
+
}
|
|
43
|
+
this._refreshOnChange([
|
|
44
|
+
{
|
|
45
|
+
previousValue: this._dataset.getDataSource(),
|
|
46
|
+
currentValue: this._getCurrentFetchXml(),
|
|
47
|
+
beforeRefreshCallback: () => this._dataset.setDataSource(this._getCurrentFetchXml())
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
previousValue: this._lastUsedColumns,
|
|
51
|
+
currentValue: this._parameters.onGetColumns?.(),
|
|
52
|
+
beforeRefreshCallback: () => this._dataset.setColumns(this._getColumns())
|
|
53
|
+
}, {
|
|
54
|
+
previousValue: false,
|
|
55
|
+
currentValue: this._pendingForceRefresh,
|
|
56
|
+
beforeRefreshCallback: () => this._pendingForceRefresh = false
|
|
57
|
+
}
|
|
58
|
+
]);
|
|
59
|
+
this._lastUsedColumns = this._parameters.onGetColumns?.();
|
|
60
|
+
this._initialRender = false;
|
|
61
|
+
}
|
|
62
|
+
getDataset() {
|
|
63
|
+
if (this._dataset) {
|
|
64
|
+
return this._dataset;
|
|
65
|
+
}
|
|
66
|
+
if (this._powerAppsDatasetProvider) {
|
|
67
|
+
return new Dataset(this._powerAppsDatasetProvider, {
|
|
68
|
+
isVirtual: false
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return this._parameters.onGetDataset();
|
|
72
|
+
}
|
|
73
|
+
getOutputs() {
|
|
74
|
+
this._resolveGetOutputs(true);
|
|
75
|
+
return {
|
|
76
|
+
DatasetControl: this._dataset
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
destroy() {
|
|
80
|
+
//@ts-ignore - typings
|
|
81
|
+
delete window.Xrm[this._getGlobalDatasetInstanceName()];
|
|
82
|
+
if (this._powerAppsDatasetProvider) {
|
|
83
|
+
this._dataset.destroy();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
getHeight() {
|
|
87
|
+
if (this._isHomePageGrid()) {
|
|
88
|
+
return '100%';
|
|
89
|
+
}
|
|
90
|
+
return this._parameters.onGetHeight?.() ?? null;
|
|
91
|
+
}
|
|
92
|
+
async _onDatasetInit() {
|
|
93
|
+
const initializationCallback = async () => {
|
|
94
|
+
await this._getOutputsPromise;
|
|
95
|
+
await this._parameters.onInitialize?.();
|
|
96
|
+
if (this._isHomePageGrid() && this._homePageGridClientApiRibbonButtonId) {
|
|
97
|
+
//@ts-ignore - typings
|
|
98
|
+
window.Xrm[this._getGlobalDatasetInstanceName()] = this._dataset;
|
|
99
|
+
//@ts-ignore
|
|
100
|
+
const commands = await this._parameters.onGetDataset().retrieveRecordCommand([], [this._homePageGridClientApiRibbonButtonId]);
|
|
101
|
+
if (commands.length === 0) {
|
|
102
|
+
this._context.navigation.openErrorDialog({
|
|
103
|
+
message: `Could not find ribbon button ${this._homePageGridClientApiRibbonButtonId}. Client API will not be enabled.`
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
await commands[0].execute();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
if (this._client.isTalxisPortal()) {
|
|
112
|
+
this._dataset.setInterceptor('onInitialize', () => initializationCallback());
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
await initializationCallback();
|
|
116
|
+
this._powerAppsDatasetProvider?.setPendingChangeFromOutside();
|
|
117
|
+
this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
_getColumns() {
|
|
121
|
+
try {
|
|
122
|
+
const parameterColumns = JSON.parse(this._parameters.onGetColumns?.() ?? '[]');
|
|
123
|
+
return this._getMergedColumns(parameterColumns);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
console.error(err);
|
|
127
|
+
return this._dataset.columns;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
_getMergedColumns(parameterColumns) {
|
|
131
|
+
const columnsMap = new Map(this._dataset.getDataProvider().getColumns().map(col => [col.name, col]));
|
|
132
|
+
parameterColumns.map(parameterCol => {
|
|
133
|
+
const col = columnsMap.get(parameterCol.name);
|
|
134
|
+
if (col) {
|
|
135
|
+
columnsMap.set(col.name, {
|
|
136
|
+
...col,
|
|
137
|
+
...parameterCol
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
columnsMap.set(parameterCol.name, parameterCol);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return [...columnsMap.values()];
|
|
145
|
+
}
|
|
146
|
+
_getFullHeightStyles() {
|
|
147
|
+
return mergeStyles({
|
|
148
|
+
display: 'flex',
|
|
149
|
+
flexDirection: 'column',
|
|
150
|
+
flexGrow: 1
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
_getCurrentFetchXml() {
|
|
154
|
+
if (this._client.isTalxisPortal()) {
|
|
155
|
+
return this._dataset.getDataSource();
|
|
156
|
+
}
|
|
157
|
+
//@ts-ignore - typings
|
|
158
|
+
return this._getNormalizedFetchXml(this._context.factory._customControlProperties.dynamicData.parameters[this._datasetPropertyName].cachedQueryState.fetchXml);
|
|
159
|
+
}
|
|
160
|
+
_isHomePageGrid() {
|
|
161
|
+
//@ts-ignore - typings
|
|
162
|
+
return this._context.utils._customControlProperties.contextString === 'grid';
|
|
163
|
+
}
|
|
164
|
+
_refreshOnChange(objectsToCompare) {
|
|
165
|
+
let shouldRefresh = false;
|
|
166
|
+
objectsToCompare.map(obj => {
|
|
167
|
+
if (obj.currentValue != obj.previousValue) {
|
|
168
|
+
shouldRefresh = true;
|
|
169
|
+
obj.beforeRefreshCallback?.();
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
if (shouldRefresh) {
|
|
173
|
+
this._powerAppsDatasetProvider?.setPendingChangeFromOutside();
|
|
174
|
+
this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);
|
|
175
|
+
}
|
|
176
|
+
queueMicrotask(() => {
|
|
177
|
+
this._powerAppsDatasetProvider?.resolveDataRefresh();
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
_getGlobalDatasetInstanceName() {
|
|
181
|
+
//@ts-ignore
|
|
182
|
+
return `talxis_grid_${this._context.utils._customControlProperties.id}`;
|
|
183
|
+
}
|
|
184
|
+
_getNormalizedFetchXml(fetchXmlString) {
|
|
185
|
+
const fetchXml = FetchXmlBuilder.fetch.fromXml(fetchXmlString);
|
|
186
|
+
fetchXml.savedqueryid = "";
|
|
187
|
+
fetchXml.userqueryid = "";
|
|
188
|
+
return fetchXml.toXml();
|
|
189
|
+
}
|
|
190
|
+
_setViewColumns(ids) {
|
|
191
|
+
//@ts-ignore - typings
|
|
192
|
+
this._context.factory.fireEvent('setViewColumns', ids);
|
|
193
|
+
}
|
|
194
|
+
_getRefreshStatus() {
|
|
195
|
+
if (this._client.isTalxisPortal()) {
|
|
196
|
+
//dummy refresh status
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
//@ts-ignore - typings
|
|
200
|
+
return this._context.utils._customControlProperties.dynamicData.parameters[this._datasetPropertyName].refreshingStatus;
|
|
201
|
+
}
|
|
202
|
+
_forceRefresh() {
|
|
203
|
+
this._pendingForceRefresh = true;
|
|
204
|
+
setTimeout(() => {
|
|
205
|
+
this._parameters.onGetDataset().paging.loadExactPage(1);
|
|
206
|
+
}, 100);
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
_getPowerAppsDatasetProvider() {
|
|
210
|
+
//instead check if it's instance of our dataset?
|
|
211
|
+
if (this._client.isTalxisPortal()) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
return new PowerAppsDatasetProvider(this._getCurrentFetchXml(), () => this._parameters.onGetDataset(), {
|
|
215
|
+
onColumnsChanged: (ids) => this._setViewColumns(ids)
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
_getDatasetPropertyName() {
|
|
219
|
+
for (const key of Object.keys(this._context.parameters)) {
|
|
220
|
+
if (this._context.parameters[key].records) {
|
|
221
|
+
return key;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
throw new Error("Dataset property not found in context parameters");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export { DatasetAdapter };
|
|
229
|
+
//# sourceMappingURL=DatasetAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatasetAdapter.js","sources":["../../../../src/utils/dataset/adapters/DatasetAdapter.ts"],"sourcesContent":["import { Client, Dataset, FetchXmlBuilder, IColumn, IDataProvider, IDataset, PowerAppsDatasetProvider } from \"@talxis/client-libraries\";\nimport { mergeStyles } from \"@fluentui/react\";\n\ninterface IInputs {\n Columns: ComponentFramework.PropertyTypes.StringProperty;\n HomePageGridClientApiRibbonButtonId: ComponentFramework.PropertyTypes.StringProperty;\n InlineRibbonButtonIds: ComponentFramework.PropertyTypes.StringProperty;\n Height: ComponentFramework.PropertyTypes.StringProperty;\n [key: string]: any\n}\n\ninterface IOutputs {\n DatasetControl?: any;\n}\n\ninterface IParameterGetters {\n onGetDataset: () => ComponentFramework.PropertyTypes.DataSet | IDataset;\n onGetColumns?: () => string | null\n onGetHeight?: () => string | null\n onGetHomePageGridClientApiRibbonButtonId?: () => string | null;\n onGetInlineRibbonButtonIds?: () => string | null;\n /**\n * Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.\n */\n onInitialize?: () => void | Promise<void>\n}\n\nexport class DatasetAdapter {\n private _container!: HTMLDivElement;\n private _dataset!: Dataset<IDataProvider>;\n private _context!: ComponentFramework.Context<IInputs, IOutputs>;\n private _lastUsedColumns?: string | null;\n private _pendingForceRefresh: boolean = false;\n private _powerAppsDatasetProvider?: PowerAppsDatasetProvider;\n private _client = new Client();\n private _notifyOutputChanged!: () => void;\n private _resolveGetOutputs!: (value: boolean | PromiseLike<boolean>) => void;\n private _getOutputsPromise: Promise<boolean> = new Promise(resolve => {\n this._resolveGetOutputs = resolve;\n });\n private _initialRender: boolean = true;\n private _homePageGridClientApiRibbonButtonId?: string | null;\n private _parameters!: IParameterGetters;\n private _datasetPropertyName!: string;\n\n public init(context: ComponentFramework.Context<IInputs, IOutputs>, notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters) {\n this._container = container;\n this._context = context;\n this._parameters = parameters;\n this._datasetPropertyName = this._getDatasetPropertyName();\n this._lastUsedColumns = this._parameters.onGetColumns?.();\n this._homePageGridClientApiRibbonButtonId = this._parameters.onGetHomePageGridClientApiRibbonButtonId?.();\n this._notifyOutputChanged = notifyOutputChanged;\n this._powerAppsDatasetProvider = this._getPowerAppsDatasetProvider();\n this._dataset = this.getDataset() as any;\n if (this._powerAppsDatasetProvider) {\n this._dataset.setColumns(this._parameters.onGetDataset().columns);\n }\n this._dataset.setColumns(this._getColumns());\n\n if (this.getHeight() === '100%') {\n this._container.classList.add(this._getFullHeightStyles())\n }\n this._notifyOutputChanged();\n this._onDatasetInit();\n }\n\n /**\n * Returns true if the control should re-render or false if it should not.\n */\n public updateView(context: ComponentFramework.Context<IInputs, IOutputs>) {\n this._context = context;\n //refresh in PowerApps is broken, sometimes the paging will return broken (-100) or not updated\n //calling loadExactPage after refresh occures fixes that (results in more API calls, but whan can you do)\n if (this._getRefreshStatus() === 1 && !this._initialRender) {\n return this._forceRefresh();\n }\n this._refreshOnChange([\n {\n previousValue: this._dataset.getDataSource(),\n currentValue: this._getCurrentFetchXml(),\n beforeRefreshCallback: () => this._dataset.setDataSource(this._getCurrentFetchXml())\n },\n {\n previousValue: this._lastUsedColumns!,\n currentValue: this._parameters.onGetColumns?.(),\n beforeRefreshCallback: () => this._dataset.setColumns(this._getColumns())\n }, {\n previousValue: false,\n currentValue: this._pendingForceRefresh,\n beforeRefreshCallback: () => this._pendingForceRefresh = false\n }\n ])\n this._lastUsedColumns = this._parameters.onGetColumns?.();\n this._initialRender = false;\n }\n\n public getDataset() {\n if (this._dataset) {\n return this._dataset;\n }\n if (this._powerAppsDatasetProvider) {\n return new Dataset(this._powerAppsDatasetProvider, {\n isVirtual: false\n });\n }\n return this._parameters.onGetDataset();\n }\n\n public getOutputs(): IOutputs {\n this._resolveGetOutputs(true);\n return {\n DatasetControl: this._dataset\n }\n }\n\n public destroy(): void {\n //@ts-ignore - typings\n delete window.Xrm[this._getGlobalDatasetInstanceName()];\n if (this._powerAppsDatasetProvider) {\n this._dataset.destroy();\n }\n }\n\n public getHeight(): string | null {\n if (this._isHomePageGrid()) {\n return '100%';\n }\n return this._parameters.onGetHeight?.() ?? null;\n }\n\n private async _onDatasetInit() {\n const initializationCallback = async () => {\n await this._getOutputsPromise;\n await this._parameters.onInitialize?.();\n if (this._isHomePageGrid() && this._homePageGridClientApiRibbonButtonId) {\n //@ts-ignore - typings\n window.Xrm[this._getGlobalDatasetInstanceName()] = this._dataset;\n //@ts-ignore\n const commands = await this._parameters.onGetDataset().retrieveRecordCommand([], [this._homePageGridClientApiRibbonButtonId]);\n if (commands.length === 0) {\n this._context.navigation.openErrorDialog({\n message: `Could not find ribbon button ${this._homePageGridClientApiRibbonButtonId}. Client API will not be enabled.`\n })\n }\n else {\n await commands[0].execute();\n }\n }\n }\n if (this._client.isTalxisPortal()) {\n this._dataset.setInterceptor('onInitialize', () => initializationCallback());\n }\n else {\n await initializationCallback();\n this._powerAppsDatasetProvider?.setPendingChangeFromOutside();\n this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);\n }\n }\n\n private _getColumns() {\n try {\n const parameterColumns: IColumn[] = JSON.parse(this._parameters.onGetColumns?.() ?? '[]');\n return this._getMergedColumns(parameterColumns);\n }\n catch (err) {\n console.error(err)\n return this._dataset.columns;\n }\n }\n\n private _getMergedColumns(parameterColumns: IColumn[]): IColumn[] {\n const columnsMap = new Map(this._dataset.getDataProvider().getColumns().map(col => [col.name, col]));\n parameterColumns.map(parameterCol => {\n const col = columnsMap.get(parameterCol.name);\n if (col) {\n columnsMap.set(col.name, {\n ...col,\n ...parameterCol\n })\n }\n else {\n columnsMap.set(parameterCol.name, parameterCol);\n }\n })\n return [...columnsMap.values()]\n }\n\n private _getFullHeightStyles() {\n return mergeStyles({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1\n })\n }\n\n private _getCurrentFetchXml(): string {\n if (this._client.isTalxisPortal()) {\n return this._dataset.getDataSource();\n }\n //@ts-ignore - typings\n return this._getNormalizedFetchXml(this._context.factory._customControlProperties.dynamicData.parameters[this._datasetPropertyName].cachedQueryState.fetchXml)\n }\n\n private _isHomePageGrid(): boolean {\n //@ts-ignore - typings\n return this._context.utils._customControlProperties.contextString === 'grid';\n }\n private _refreshOnChange(objectsToCompare: { currentValue: any, previousValue: any, beforeRefreshCallback?: () => void }[]) {\n let shouldRefresh = false;\n objectsToCompare.map(obj => {\n if (obj.currentValue != obj.previousValue) {\n shouldRefresh = true;\n obj.beforeRefreshCallback?.();\n }\n })\n if (shouldRefresh) {\n this._powerAppsDatasetProvider?.setPendingChangeFromOutside();\n this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);\n }\n queueMicrotask(() => {\n this._powerAppsDatasetProvider?.resolveDataRefresh();\n })\n }\n\n private _getGlobalDatasetInstanceName() {\n //@ts-ignore\n return `talxis_grid_${this._context.utils._customControlProperties.id}`;\n }\n\n private _getNormalizedFetchXml(fetchXmlString: string): string {\n const fetchXml = FetchXmlBuilder.fetch.fromXml(fetchXmlString)\n fetchXml.savedqueryid = \"\";\n fetchXml.userqueryid = \"\";\n return fetchXml.toXml();\n }\n\n private _setViewColumns(ids: string[]) {\n //@ts-ignore - typings\n this._context.factory.fireEvent('setViewColumns', ids);\n }\n\n private _getRefreshStatus(): number {\n if (this._client.isTalxisPortal()) {\n //dummy refresh status\n return 0;\n }\n //@ts-ignore - typings\n return this._context.utils._customControlProperties.dynamicData.parameters[this._datasetPropertyName].refreshingStatus;\n }\n\n private _forceRefresh() {\n this._pendingForceRefresh = true;\n setTimeout(() => {\n this._parameters.onGetDataset().paging.loadExactPage(1);\n }, 100);\n return false;\n }\n\n private _getPowerAppsDatasetProvider() {\n //instead check if it's instance of our dataset?\n if (this._client.isTalxisPortal()) {\n return undefined;\n }\n return new PowerAppsDatasetProvider(this._getCurrentFetchXml(), () => <any>this._parameters.onGetDataset(), {\n onColumnsChanged: (ids) => this._setViewColumns(ids)\n });\n }\n\n private _getDatasetPropertyName(): string {\n for (const key of Object.keys(this._context.parameters)) {\n if (this._context.parameters[key].records) {\n return key;\n }\n }\n throw new Error(\"Dataset property not found in context parameters\");\n }\n\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Dataset, IDataProvider } from "@talxis/client-libraries";
|
|
2
|
+
interface IOutputs {
|
|
3
|
+
DatasetControl?: any;
|
|
4
|
+
}
|
|
5
|
+
interface IParameterGetters {
|
|
6
|
+
dataProviderType: "Memory" | "FetchXml" | 'Custom';
|
|
7
|
+
onGetData: () => string | null;
|
|
8
|
+
onGetColumns: () => string | null;
|
|
9
|
+
onGetEntityMetadata: () => string | null;
|
|
10
|
+
customDataProvider?: IDataProvider;
|
|
11
|
+
onGetHeight?: () => string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.
|
|
14
|
+
*/
|
|
15
|
+
onInitialize?: () => void | Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Helper class that holds boilerplate code for handling a virtual dataset in PCF, like syncing data, columns, and metadata from parameters.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
export declare class VirtualDatasetAdapter {
|
|
22
|
+
private _providerClasses;
|
|
23
|
+
private _dataset;
|
|
24
|
+
private _parsedData;
|
|
25
|
+
private _lastUsedColumns;
|
|
26
|
+
private _lastUsedData;
|
|
27
|
+
private _lastUsedMetadata;
|
|
28
|
+
private _dataProviderClass;
|
|
29
|
+
private _container;
|
|
30
|
+
private _notifyOutputChanged;
|
|
31
|
+
private _resolveGetOutputs;
|
|
32
|
+
private _getOutputsPromise;
|
|
33
|
+
private _parameters;
|
|
34
|
+
init(notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters): this;
|
|
35
|
+
updateView(): void;
|
|
36
|
+
getDataset(): Dataset<IDataProvider>;
|
|
37
|
+
destroy(): void;
|
|
38
|
+
getOutputs(): IOutputs;
|
|
39
|
+
private _onDatasetInit;
|
|
40
|
+
private _getData;
|
|
41
|
+
private _getColumns;
|
|
42
|
+
private _shouldMergeColumns;
|
|
43
|
+
private _getMergedColumns;
|
|
44
|
+
private _getEntityMetadata;
|
|
45
|
+
private _refreshOnChange;
|
|
46
|
+
private _getFullTabStyles;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { mergeStyles } from '@fluentui/react';
|
|
2
|
+
import { FetchXmlDataProvider, MemoryDataProvider, Dataset } from '@talxis/client-libraries';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Helper class that holds boilerplate code for handling a virtual dataset in PCF, like syncing data, columns, and metadata from parameters.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
class VirtualDatasetAdapter {
|
|
9
|
+
constructor() {
|
|
10
|
+
this._providerClasses = {
|
|
11
|
+
'FetchXml': FetchXmlDataProvider,
|
|
12
|
+
'Memory': MemoryDataProvider
|
|
13
|
+
};
|
|
14
|
+
this._parsedData = null;
|
|
15
|
+
this._lastUsedColumns = null;
|
|
16
|
+
this._lastUsedData = null;
|
|
17
|
+
this._lastUsedMetadata = null;
|
|
18
|
+
this._getOutputsPromise = new Promise(resolve => {
|
|
19
|
+
this._resolveGetOutputs = resolve;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
init(notifyOutputChanged, container, parameters) {
|
|
23
|
+
this._parameters = parameters;
|
|
24
|
+
this._notifyOutputChanged = notifyOutputChanged;
|
|
25
|
+
this._container = container;
|
|
26
|
+
let dataProvider = null;
|
|
27
|
+
if (parameters.dataProviderType !== 'Custom') {
|
|
28
|
+
//@ts-ignore - typings
|
|
29
|
+
this._dataProviderClass = this._providerClasses[this._parameters.dataProviderType];
|
|
30
|
+
dataProvider = new this._dataProviderClass(this._getData(), this._getEntityMetadata());
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
dataProvider = this._parameters.customDataProvider;
|
|
34
|
+
}
|
|
35
|
+
//@ts-ignore - typings
|
|
36
|
+
this._dataset = new Dataset(dataProvider);
|
|
37
|
+
this._dataset.setColumns(this._getColumns());
|
|
38
|
+
this._dataset.setMetadata(this._getEntityMetadata());
|
|
39
|
+
if (this._parameters.onGetHeight?.() === '100%') {
|
|
40
|
+
this._container.classList.add(this._getFullTabStyles());
|
|
41
|
+
}
|
|
42
|
+
this._lastUsedColumns = this._parameters.onGetColumns();
|
|
43
|
+
this._lastUsedData = this._parameters.onGetData();
|
|
44
|
+
this._lastUsedMetadata = this._parameters.onGetEntityMetadata();
|
|
45
|
+
this._notifyOutputChanged();
|
|
46
|
+
this._onDatasetInit();
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
updateView() {
|
|
50
|
+
this._parsedData = null;
|
|
51
|
+
this._refreshOnChange([
|
|
52
|
+
{
|
|
53
|
+
previousValue: this._lastUsedColumns,
|
|
54
|
+
currentValue: this._parameters.onGetColumns(),
|
|
55
|
+
beforeRefreshCallback: () => this._dataset.setColumns(this._getColumns())
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
previousValue: this._lastUsedData,
|
|
59
|
+
currentValue: this._parameters.onGetData(),
|
|
60
|
+
beforeRefreshCallback: () => {
|
|
61
|
+
this._dataset.setDataSource(this._getData());
|
|
62
|
+
this._dataset.setColumns(this._getColumns());
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
previousValue: this._lastUsedMetadata,
|
|
67
|
+
currentValue: this._parameters.onGetEntityMetadata(),
|
|
68
|
+
beforeRefreshCallback: () => this._dataset.setMetadata(this._getEntityMetadata())
|
|
69
|
+
}
|
|
70
|
+
]);
|
|
71
|
+
this._lastUsedColumns = this._parameters.onGetColumns();
|
|
72
|
+
this._lastUsedData = this._parameters.onGetData();
|
|
73
|
+
this._lastUsedMetadata = this._parameters.onGetEntityMetadata();
|
|
74
|
+
}
|
|
75
|
+
getDataset() {
|
|
76
|
+
return this._dataset;
|
|
77
|
+
}
|
|
78
|
+
destroy() {
|
|
79
|
+
this._dataset.destroy();
|
|
80
|
+
}
|
|
81
|
+
getOutputs() {
|
|
82
|
+
this._resolveGetOutputs(true);
|
|
83
|
+
return {
|
|
84
|
+
DatasetControl: this.getDataset()
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
_onDatasetInit() {
|
|
88
|
+
this.getDataset().setInterceptor('onInitialize', async () => {
|
|
89
|
+
await this._getOutputsPromise;
|
|
90
|
+
await this._parameters.onInitialize?.();
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
_getData() {
|
|
94
|
+
if (this._parsedData) {
|
|
95
|
+
return this._parsedData;
|
|
96
|
+
}
|
|
97
|
+
this._parsedData = this._dataProviderClass.GetParsedData(this._parameters.onGetData());
|
|
98
|
+
return this._parsedData;
|
|
99
|
+
}
|
|
100
|
+
_getColumns() {
|
|
101
|
+
try {
|
|
102
|
+
const parameterColumns = JSON.parse(this._parameters.onGetColumns() ?? "[]");
|
|
103
|
+
if (this._shouldMergeColumns()) {
|
|
104
|
+
return this._getMergedColumns(parameterColumns);
|
|
105
|
+
}
|
|
106
|
+
return parameterColumns;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(err);
|
|
110
|
+
return this._dataset.columns;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
_shouldMergeColumns() {
|
|
114
|
+
if (this._dataset.getDataProvider() instanceof FetchXmlDataProvider) {
|
|
115
|
+
const fetchXml = this._parameters.onGetData();
|
|
116
|
+
if (fetchXml?.includes('savedqueryid') || fetchXml?.includes('userqueryid')) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
_getMergedColumns(parameterColumns) {
|
|
123
|
+
const columnsMap = new Map(this._dataset.columns.map(col => [col.name, col]));
|
|
124
|
+
parameterColumns.forEach(parameterCol => {
|
|
125
|
+
const col = columnsMap.get(parameterCol.name);
|
|
126
|
+
if (col) {
|
|
127
|
+
columnsMap.set(col.name, {
|
|
128
|
+
...col,
|
|
129
|
+
...parameterCol
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
columnsMap.set(parameterCol.name, parameterCol);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return [...columnsMap.values()];
|
|
137
|
+
}
|
|
138
|
+
_getEntityMetadata() {
|
|
139
|
+
try {
|
|
140
|
+
return JSON.parse(this._parameters.onGetEntityMetadata() ?? "{}");
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
console.error(err);
|
|
144
|
+
return this._dataset.getMetadata();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
_refreshOnChange(objectsToCompare) {
|
|
148
|
+
let shouldRefresh = false;
|
|
149
|
+
objectsToCompare.forEach(obj => {
|
|
150
|
+
if (obj.currentValue !== obj.previousValue) {
|
|
151
|
+
shouldRefresh = true;
|
|
152
|
+
obj.beforeRefreshCallback?.();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (shouldRefresh) {
|
|
156
|
+
this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
_getFullTabStyles() {
|
|
160
|
+
return mergeStyles({
|
|
161
|
+
display: 'flex',
|
|
162
|
+
flexDirection: 'column',
|
|
163
|
+
flexGrow: 1
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export { VirtualDatasetAdapter };
|
|
169
|
+
//# sourceMappingURL=VirtualDatasetAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualDatasetAdapter.js","sources":["../../../../src/utils/dataset/adapters/VirtualDatasetAdapter.ts"],"sourcesContent":["import { mergeStyles } from \"@fluentui/react\";\nimport { Dataset, FetchXmlDataProvider, IColumn, IDataProvider, MemoryDataProvider } from \"@talxis/client-libraries\";\n\ninterface IOutputs {\n DatasetControl?: any;\n}\n\ninterface IParameterGetters {\n dataProviderType: \"Memory\" | \"FetchXml\" | 'Custom';\n onGetData: () => string | null;\n onGetColumns: () => string | null;\n onGetEntityMetadata: () => string | null;\n customDataProvider?: IDataProvider;\n onGetHeight?: () => string | null;\n /**\n * Callback that gets triggered and awaited before the dataset is initialized. Useful for setting initialization code that needs to run before the dataset is ready.\n */\n onInitialize?: () => void | Promise<void>\n}\n\n/**\n * Helper class that holds boilerplate code for handling a virtual dataset in PCF, like syncing data, columns, and metadata from parameters.\n *\n */\nexport class VirtualDatasetAdapter {\n private _providerClasses = {\n 'FetchXml': FetchXmlDataProvider,\n 'Memory': MemoryDataProvider\n };\n private _dataset!: Dataset<IDataProvider>;\n private _parsedData: any = null;\n private _lastUsedColumns: string | null = null;\n private _lastUsedData: string | null = null;\n private _lastUsedMetadata: string | null = null;\n private _dataProviderClass!: (typeof this._providerClasses[keyof typeof this._providerClasses]);\n private _container!: HTMLDivElement;\n private _notifyOutputChanged!: () => void;\n private _resolveGetOutputs!: (value: boolean | PromiseLike<boolean>) => void;\n private _getOutputsPromise: Promise<boolean> = new Promise(resolve => {\n this._resolveGetOutputs = resolve;\n });\n private _parameters!: IParameterGetters;\n\n public init(notifyOutputChanged: () => void, container: HTMLDivElement, parameters: IParameterGetters) {\n this._parameters = parameters;\n this._notifyOutputChanged = notifyOutputChanged;\n this._container = container;\n let dataProvider: any = null;\n if(parameters.dataProviderType !== 'Custom') {\n //@ts-ignore - typings\n this._dataProviderClass = this._providerClasses[this._parameters.dataProviderType];\n dataProvider = new this._dataProviderClass(this._getData(), this._getEntityMetadata());\n }\n else {\n dataProvider = this._parameters.customDataProvider;\n }\n //@ts-ignore - typings\n this._dataset = new Dataset(dataProvider);\n this._dataset.setColumns(this._getColumns());\n this._dataset.setMetadata(this._getEntityMetadata());\n\n if (this._parameters.onGetHeight?.() === '100%') {\n this._container.classList.add(this._getFullTabStyles());\n }\n this._lastUsedColumns = this._parameters.onGetColumns();\n this._lastUsedData = this._parameters.onGetData();\n this._lastUsedMetadata = this._parameters.onGetEntityMetadata();\n this._notifyOutputChanged();\n this._onDatasetInit();\n return this;\n }\n\n public updateView(): void {\n this._parsedData = null;\n this._refreshOnChange([\n {\n previousValue: this._lastUsedColumns,\n currentValue: this._parameters.onGetColumns(),\n beforeRefreshCallback: () => this._dataset.setColumns(this._getColumns())\n },\n {\n previousValue: this._lastUsedData,\n currentValue: this._parameters.onGetData(),\n beforeRefreshCallback: () => {\n this._dataset.setDataSource(this._getData());\n this._dataset.setColumns(this._getColumns());\n }\n },\n {\n previousValue: this._lastUsedMetadata,\n currentValue: this._parameters.onGetEntityMetadata(),\n beforeRefreshCallback: () => this._dataset.setMetadata(this._getEntityMetadata())\n }\n ]);\n this._lastUsedColumns = this._parameters.onGetColumns();\n this._lastUsedData = this._parameters.onGetData();\n this._lastUsedMetadata = this._parameters.onGetEntityMetadata();\n }\n\n public getDataset(): Dataset<IDataProvider> {\n return this._dataset;\n }\n\n public destroy(): void {\n this._dataset.destroy();\n }\n\n public getOutputs(): IOutputs {\n this._resolveGetOutputs(true);\n return {\n DatasetControl: this.getDataset()\n };\n }\n\n private _onDatasetInit() {\n this.getDataset().setInterceptor('onInitialize', async () => {\n await this._getOutputsPromise;\n await this._parameters.onInitialize?.();\n })\n }\n\n private _getData() {\n if (this._parsedData) {\n return this._parsedData;\n }\n this._parsedData = this._dataProviderClass.GetParsedData(this._parameters.onGetData());\n return this._parsedData;\n }\n\n private _getColumns() {\n try {\n const parameterColumns: IColumn[] = JSON.parse(this._parameters.onGetColumns() ?? \"[]\");\n if (this._shouldMergeColumns()) {\n return this._getMergedColumns(parameterColumns);\n }\n return parameterColumns;\n }\n catch (err) {\n console.error(err);\n return this._dataset.columns;\n }\n }\n\n private _shouldMergeColumns(): boolean {\n if (this._dataset.getDataProvider() instanceof FetchXmlDataProvider) {\n const fetchXml = this._parameters.onGetData();\n if (fetchXml?.includes('savedqueryid') || fetchXml?.includes('userqueryid')) {\n return true;\n }\n }\n return false;\n }\n\n private _getMergedColumns(parameterColumns: IColumn[]): IColumn[] {\n const columnsMap = new Map(this._dataset.columns.map(col => [col.name, col]));\n parameterColumns.forEach(parameterCol => {\n const col = columnsMap.get(parameterCol.name);\n if (col) {\n columnsMap.set(col.name, {\n ...col,\n ...parameterCol\n });\n } else {\n columnsMap.set(parameterCol.name, parameterCol);\n }\n });\n return [...columnsMap.values()];\n }\n\n private _getEntityMetadata() {\n try {\n return JSON.parse(this._parameters.onGetEntityMetadata() ?? \"{}\");\n }\n catch (err) {\n console.error(err);\n return this._dataset.getMetadata();\n }\n }\n\n private _refreshOnChange(objectsToCompare: { currentValue: string | null, previousValue: string | null, beforeRefreshCallback?: () => void }[]) {\n let shouldRefresh = false;\n objectsToCompare.forEach(obj => {\n if (obj.currentValue !== obj.previousValue) {\n shouldRefresh = true;\n obj.beforeRefreshCallback?.();\n }\n });\n if (shouldRefresh) {\n this._dataset.paging.loadExactPage(this._dataset.paging.pageNumber);\n }\n }\n\n private _getFullTabStyles() {\n return mergeStyles({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1\n });\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './adapters';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -3,4 +3,6 @@ export { ControlTheme } from './theme/ControlTheme.js';
|
|
|
3
3
|
export { useControlTheme } from './theme/hooks/useControlTheme.js';
|
|
4
4
|
export { useControlThemeGenerator } from './theme/hooks/useControlThemeGenerator.js';
|
|
5
5
|
export { ThemeWrapper } from './theme/components/ThemeWrapper.js';
|
|
6
|
+
export { DatasetAdapter } from './dataset/adapters/DatasetAdapter.js';
|
|
7
|
+
export { VirtualDatasetAdapter } from './dataset/adapters/VirtualDatasetAdapter.js';
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talxis/base-controls",
|
|
3
|
-
"version": "1.2506.
|
|
3
|
+
"version": "1.2506.3",
|
|
4
4
|
"description": "Set of React components that natively work with Power Apps Component Framework API's",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -85,10 +85,10 @@
|
|
|
85
85
|
"validator": "^13.11.9"
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
88
|
-
"react": "
|
|
89
|
-
"
|
|
88
|
+
"@fluentui/react": "<=8.121.5",
|
|
89
|
+
"@talxis/client-libraries": "^1.2506.1",
|
|
90
90
|
"@talxis/react-components": "^1.2503.4",
|
|
91
|
-
"
|
|
92
|
-
"
|
|
91
|
+
"react": "^16.8.6 || ^17.0.2",
|
|
92
|
+
"react-dom": "^16.8.6 || ^17.0.2"
|
|
93
93
|
}
|
|
94
94
|
}
|