@talxis/base-controls 1.2512.4 → 1.2601.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/components/DatasetControl/Filtering/DatasetColumnFiltering.js +14 -11
  2. package/dist/components/DatasetControl/Filtering/DatasetColumnFiltering.js.map +1 -1
  3. package/dist/components/DatasetControl/Filtering/DatasetColumnFilteringModel.d.ts +14 -2
  4. package/dist/components/DatasetControl/Filtering/DatasetColumnFilteringModel.js +41 -7
  5. package/dist/components/DatasetControl/Filtering/DatasetColumnFilteringModel.js.map +1 -1
  6. package/dist/components/DatasetControl/Header/Header.js +9 -2
  7. package/dist/components/DatasetControl/Header/Header.js.map +1 -1
  8. package/dist/components/DatasetControl/interfaces.d.ts +3 -1
  9. package/dist/components/Grid/cells/cell/Cell.js +17 -6
  10. package/dist/components/Grid/cells/cell/Cell.js.map +1 -1
  11. package/dist/components/Grid/grid/Grid.js +26 -13
  12. package/dist/components/Grid/grid/Grid.js.map +1 -1
  13. package/dist/components/Grid/grid/GridModel.d.ts +0 -1
  14. package/dist/components/Grid/grid/GridModel.js +1 -7
  15. package/dist/components/Grid/grid/GridModel.js.map +1 -1
  16. package/dist/components/Grid/grid/styles.d.ts +3 -0
  17. package/dist/components/Grid/grid/styles.js +3 -0
  18. package/dist/components/Grid/grid/styles.js.map +1 -1
  19. package/dist/components/Grid/interfaces.d.ts +1 -8
  20. package/dist/components/Grid/overlays/loading/LoadingOverlay.js +11 -3
  21. package/dist/components/Grid/overlays/loading/LoadingOverlay.js.map +1 -1
  22. package/dist/components/Grid/overlays/loading/styles.d.ts +10 -0
  23. package/dist/components/Grid/overlays/loading/styles.js +17 -0
  24. package/dist/components/Grid/overlays/loading/styles.js.map +1 -0
  25. package/dist/index.d.ts +5 -10
  26. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { ThemeProvider, PrimaryButton, DefaultButton } from '@fluentui/react';
3
3
  import { datasetColumnFilteringTranslations } from './translations.js';
4
- import React, { useState, useCallback, useMemo, useEffect } from 'react';
4
+ import React, { useState, useMemo, useCallback, useEffect } from 'react';
5
5
  import { DatasetColumnFilteringModel } from './DatasetColumnFilteringModel.js';
6
6
  import { useRerender } from '@talxis/react-components';
7
7
  import { getDatasetColumnFilteringStyles } from './styles.js';
8
8
  import { useDebouncedCallback } from 'use-debounce';
9
- import { Type } from '@talxis/client-libraries';
9
+ import { useEventEmitter } from '../../../hooks/useEventEmitter.js';
10
10
  import { useControl } from '../../../hooks/useControl.js';
11
11
  import { OptionSet } from '../../OptionSet/OptionSet.js';
12
12
  import { NestedControlRenderer } from '../../NestedControlRenderer/NestedControlRenderer.js';
@@ -25,6 +25,16 @@ const DatasetColumnFiltering = (props) => {
25
25
  const condition = columnFilter.getConditions()[0];
26
26
  const rerender = useRerender();
27
27
  const [shouldRemountValueControl, setShouldRemountValueControl] = useState(false);
28
+ const model = useMemo(() => {
29
+ return new DatasetColumnFilteringModel({
30
+ condition: condition,
31
+ labels: labels,
32
+ filtering: filtering
33
+ });
34
+ }, []);
35
+ useEventEmitter(model, 'onSave', (result) => onSave(result));
36
+ useEventEmitter(model, 'onConditionValueChanged', rerender);
37
+ useEventEmitter(condition, 'onOperatorChanged', () => onOperatorChanged());
28
38
  const onOperatorChanged = useCallback(() => {
29
39
  setShouldRemountValueControl(true);
30
40
  }, []);
@@ -36,9 +46,7 @@ const DatasetColumnFiltering = (props) => {
36
46
  return value == null;
37
47
  });
38
48
  };
39
- const onSave = () => {
40
- condition.setIsValueRequired(true);
41
- const result = filtering.getFilterExpression(Type.And.Value);
49
+ const onSave = (result) => {
42
50
  if (!result) {
43
51
  rerender();
44
52
  }
@@ -53,11 +61,6 @@ const DatasetColumnFiltering = (props) => {
53
61
  const debouncedSetConditionControlValue = useDebouncedCallback((value, index) => {
54
62
  model.setConditionValue(value, index);
55
63
  });
56
- const model = useMemo(() => {
57
- condition.addEventListener('onOperatorChanged', onOperatorChanged);
58
- condition.addEventListener('onValueChanged', rerender);
59
- return new DatasetColumnFilteringModel(condition, labels);
60
- }, []);
61
64
  const conditionValue = model.getConditionValue();
62
65
  const validationResult = condition.getValidationResult();
63
66
  const styles = useMemo(() => getDatasetColumnFilteringStyles(), []);
@@ -152,7 +155,7 @@ const DatasetColumnFiltering = (props) => {
152
155
  return jsxs("div", { ...props.container, children: [props.onRenderApplyButton({
153
156
  text: 'Apply',
154
157
  disabled: condition.isValueLoading(),
155
- onClick: onSave,
158
+ onClick: () => model.save(),
156
159
  }, (props) => jsx(PrimaryButton, { ...props })), props.onRenderClearButton({
157
160
  text: 'Clear',
158
161
  disabled: isClearButtonDisabled(),
@@ -1 +1 @@
1
- {"version":3,"file":"DatasetColumnFiltering.js","sources":["../../../../src/components/DatasetControl/Filtering/DatasetColumnFiltering.tsx"],"sourcesContent":["import { DefaultButton, DirectionalHint, PrimaryButton, ThemeProvider } from \"@fluentui/react\";\nimport { useControl } from \"../../../hooks\"\nimport { OptionSet } from \"../../OptionSet\";\nimport { IDatasetColumnFiltering } from \"./interfaces\";\nimport { datasetColumnFilteringTranslations } from \"./translations\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { DatasetColumnFilteringModel } from \"./DatasetColumnFilteringModel\";\nimport { useRerender } from \"@talxis/react-components\";\nimport { NestedControlRenderer } from \"../../NestedControlRenderer\";\nimport React from \"react\";\nimport { getDatasetColumnFilteringStyles } from \"./styles\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { Type as FilterType } from \"@talxis/client-libraries\";\n\nexport const DatasetColumnFiltering = (props: IDatasetColumnFiltering) => {\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n const { labels, theme, onNotifyOutputChanged } = useControl('DatasetFiltering', props, datasetColumnFilteringTranslations);\n const context = props.context;\n const filtering = props.parameters.Filtering;\n const columnFilter = props.parameters.Filtering.getColumnFilter(props.parameters.ColumnName.raw!);\n //automatically create a condition if it's not present\n if (columnFilter.getConditions().length === 0) {\n columnFilter.addCondition();\n }\n //this is the first condition, we assume that the control is used for a single condition\n const condition = columnFilter.getConditions()[0];\n const rerender = useRerender();\n const [shouldRemountValueControl, setShouldRemountValueControl] = useState(false);\n\n const onOperatorChanged = useCallback(() => {\n setShouldRemountValueControl(true);\n }, []);\n\n const isClearButtonDisabled = () => {\n if (condition.isValueLoading()) {\n return true;\n }\n return model.getConditionValue().every(value => {\n return value == null;\n });\n }\n const onSave = () => {\n condition.setIsValueRequired(true);\n const result = filtering.getFilterExpression(FilterType.And.Value);\n if (!result) {\n rerender();\n }\n else {\n onNotifyOutputChanged(result)\n }\n }\n\n const onClear = () => {\n condition.setValue(null);\n setShouldRemountValueControl(true);\n }\n\n const debouncedSetConditionControlValue = useDebouncedCallback((value, index) => {\n model.setConditionValue(value, index);\n })\n\n const model = useMemo(() => {\n condition.addEventListener('onOperatorChanged', onOperatorChanged);\n condition.addEventListener('onValueChanged', rerender);\n return new DatasetColumnFilteringModel(condition, labels)\n }, []);\n\n const conditionValue = model.getConditionValue();\n const validationResult = condition.getValidationResult();\n const styles = useMemo(() => getDatasetColumnFilteringStyles(), []);\n\n const componentProps = onOverrideComponentProps({\n onRender: (props, defaultRender) => defaultRender(props),\n })\n\n useEffect(() => {\n if (shouldRemountValueControl) {\n setShouldRemountValueControl(false);\n }\n }, [shouldRemountValueControl])\n\n return componentProps.onRender({\n container: {\n theme: theme,\n className: styles.datasetColumnFilteringRoot\n },\n valueControlsContainer: {\n className: styles.valueControlsContainer\n },\n onRenderConditionOperatorControl: (props, defaultRender) => defaultRender(props),\n onRenderConditionValueControl: (props, defaultRender) => defaultRender(props),\n onRenderButtons: (props, defaultRender) => defaultRender(props),\n\n }, (props) => {\n return <ThemeProvider {...props.container}>\n {props.onRenderConditionOperatorControl({\n context: context,\n //@ts-ignore - typings\n onNotifyOutputChanged: (outputs) => condition.setOperator(outputs.value),\n parameters: {\n value: {\n raw: condition.getOperator(),\n //@ts-ignore - typings\n attributes: {\n Options: model.getOperatorOptionSet()\n }\n }\n },\n }, (props) => <OptionSet {...props} />)}\n <div {...props.valueControlsContainer}>\n {!shouldRemountValueControl &&\n <>\n {\n conditionValue.map((value, index) => {\n return <React.Fragment key={index}>\n {props.onRenderConditionValueControl({\n context: context,\n onOverrideComponentProps: (props) => {\n return {\n ...props,\n onOverrideIsLoading: () => condition.isValueLoading()\n }\n },\n parameters: {\n ControlName: model.getControlName()!,\n LoadingType: 'shimmer',\n Bindings: {\n value: {\n isStatic: false,\n value: value,\n type: condition.getDataType() ?? 'SingleLine.Text',\n error: validationResult[index].error,\n errorMessage: validationResult[index].errorMessage,\n metadata: {\n onOverrideMetadata: () => {\n return {\n ...condition.getMetadata()\n }\n }\n },\n onNotifyOutputChanged: (value) => debouncedSetConditionControlValue(value, index)\n },\n AutoFocus: {\n isStatic: true,\n value: index === 0 && conditionValue.length === 1,\n type: 'TwoOptions'\n },\n ShowErrorMessage: {\n isStatic: true,\n value: true,\n type: 'TwoOptions'\n },\n ...condition.getBindings()\n }\n }\n }, (props) => {\n if (!model.getControlName()) {\n return <></>\n }\n return <NestedControlRenderer {...props} />\n })}\n </React.Fragment>\n })\n }\n </>\n }\n </div>\n {props.onRenderButtons({\n container: {\n className: styles.buttons\n },\n onRenderApplyButton: (props, defaultRender) => defaultRender(props),\n onRenderClearButton: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n return <div {...props.container}>\n {props.onRenderApplyButton({\n text: 'Apply',\n disabled: condition.isValueLoading(),\n onClick: onSave,\n }, (props) => <PrimaryButton {...props} />)}\n {props.onRenderClearButton({\n text: 'Clear',\n disabled: isClearButtonDisabled(),\n onClick: onClear\n }, (props) => <DefaultButton\n {...props} />)}\n </div>\n })}\n </ThemeProvider>\n })\n}"],"names":["FilterType","_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"DatasetColumnFiltering.js","sources":["../../../../src/components/DatasetControl/Filtering/DatasetColumnFiltering.tsx"],"sourcesContent":["import { DefaultButton, DirectionalHint, PrimaryButton, ThemeProvider } from \"@fluentui/react\";\nimport { useControl, useEventEmitter } from \"../../../hooks\"\nimport { OptionSet } from \"../../OptionSet\";\nimport { IDatasetColumnFiltering } from \"./interfaces\";\nimport { datasetColumnFilteringTranslations } from \"./translations\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { DatasetColumnFilteringModel, IDatasetColumnFilteringModelEvents } from \"./DatasetColumnFilteringModel\";\nimport { useRerender } from \"@talxis/react-components\";\nimport { NestedControlRenderer } from \"../../NestedControlRenderer\";\nimport React from \"react\";\nimport { getDatasetColumnFilteringStyles } from \"./styles\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { IConditionEvents } from \"@talxis/client-libraries\";\n\nexport const DatasetColumnFiltering = (props: IDatasetColumnFiltering) => {\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n const { labels, theme, onNotifyOutputChanged } = useControl('DatasetFiltering', props, datasetColumnFilteringTranslations);\n const context = props.context;\n const filtering = props.parameters.Filtering;\n const columnFilter = props.parameters.Filtering.getColumnFilter(props.parameters.ColumnName.raw!);\n //automatically create a condition if it's not present\n if (columnFilter.getConditions().length === 0) {\n columnFilter.addCondition();\n }\n //this is the first condition, we assume that the control is used for a single condition\n const condition = columnFilter.getConditions()[0];\n const rerender = useRerender();\n const [shouldRemountValueControl, setShouldRemountValueControl] = useState(false);\n const model = useMemo(() => {\n return new DatasetColumnFilteringModel({\n condition: condition,\n labels: labels,\n filtering: filtering\n })\n }, []);\n useEventEmitter<IDatasetColumnFilteringModelEvents>(model, 'onSave', (result) => onSave(result));\n useEventEmitter<IDatasetColumnFilteringModelEvents>(model, 'onConditionValueChanged', rerender);\n useEventEmitter<IConditionEvents>(condition, 'onOperatorChanged', () => onOperatorChanged());\n\n const onOperatorChanged = useCallback(() => {\n setShouldRemountValueControl(true);\n }, []);\n\n const isClearButtonDisabled = () => {\n if (condition.isValueLoading()) {\n return true;\n }\n return model.getConditionValue().every(value => {\n return value == null;\n });\n }\n const onSave = (result: false | ComponentFramework.PropertyHelper.DataSetApi.FilterExpression) => {\n if (!result) {\n rerender();\n }\n else {\n onNotifyOutputChanged(result)\n }\n }\n\n const onClear = () => {\n condition.setValue(null);\n setShouldRemountValueControl(true);\n }\n\n const debouncedSetConditionControlValue = useDebouncedCallback((value, index) => {\n model.setConditionValue(value, index);\n });\n\n const conditionValue = model.getConditionValue();\n const validationResult = condition.getValidationResult();\n const styles = useMemo(() => getDatasetColumnFilteringStyles(), []);\n\n const componentProps = onOverrideComponentProps({\n onRender: (props, defaultRender) => defaultRender(props),\n })\n\n useEffect(() => {\n if (shouldRemountValueControl) {\n setShouldRemountValueControl(false);\n }\n }, [shouldRemountValueControl])\n\n return componentProps.onRender({\n container: {\n theme: theme,\n className: styles.datasetColumnFilteringRoot\n },\n valueControlsContainer: {\n className: styles.valueControlsContainer\n },\n onRenderConditionOperatorControl: (props, defaultRender) => defaultRender(props),\n onRenderConditionValueControl: (props, defaultRender) => defaultRender(props),\n onRenderButtons: (props, defaultRender) => defaultRender(props),\n\n }, (props) => {\n return <ThemeProvider {...props.container}>\n {props.onRenderConditionOperatorControl({\n context: context,\n //@ts-ignore - typings\n onNotifyOutputChanged: (outputs) => condition.setOperator(outputs.value),\n parameters: {\n value: {\n raw: condition.getOperator(),\n //@ts-ignore - typings\n attributes: {\n Options: model.getOperatorOptionSet()\n }\n }\n },\n }, (props) => <OptionSet {...props} />)}\n <div {...props.valueControlsContainer}>\n {!shouldRemountValueControl &&\n <>\n {\n conditionValue.map((value, index) => {\n return <React.Fragment key={index}>\n {props.onRenderConditionValueControl({\n context: context,\n onOverrideComponentProps: (props) => {\n return {\n ...props,\n onOverrideIsLoading: () => condition.isValueLoading()\n }\n },\n parameters: {\n ControlName: model.getControlName()!,\n LoadingType: 'shimmer',\n Bindings: {\n value: {\n isStatic: false,\n value: value,\n type: condition.getDataType() ?? 'SingleLine.Text',\n error: validationResult[index].error,\n errorMessage: validationResult[index].errorMessage,\n metadata: {\n onOverrideMetadata: () => {\n return {\n ...condition.getMetadata()\n }\n }\n },\n onNotifyOutputChanged: (value) => debouncedSetConditionControlValue(value, index)\n },\n AutoFocus: {\n isStatic: true,\n value: index === 0 && conditionValue.length === 1,\n type: 'TwoOptions'\n },\n ShowErrorMessage: {\n isStatic: true,\n value: true,\n type: 'TwoOptions'\n },\n ...condition.getBindings()\n }\n }\n }, (props) => {\n if (!model.getControlName()) {\n return <></>\n }\n return <NestedControlRenderer {...props} />\n })}\n </React.Fragment>\n })\n }\n </>\n }\n </div>\n {props.onRenderButtons({\n container: {\n className: styles.buttons\n },\n onRenderApplyButton: (props, defaultRender) => defaultRender(props),\n onRenderClearButton: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n return <div {...props.container}>\n {props.onRenderApplyButton({\n text: 'Apply',\n disabled: condition.isValueLoading(),\n onClick: () => model.save(),\n }, (props) => <PrimaryButton {...props} />)}\n {props.onRenderClearButton({\n text: 'Clear',\n disabled: isClearButtonDisabled(),\n onClick: onClear\n }, (props) => <DefaultButton\n {...props} />)}\n </div>\n })}\n </ThemeProvider>\n })\n}"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1,15 +1,27 @@
1
1
  /// <reference types="@types/powerapps-component-framework" />
2
+ import { EventEmitter, Filtering } from "@talxis/client-libraries";
2
3
  import { ITranslation } from "../../../hooks";
3
4
  import { datasetColumnFilteringTranslations } from "./translations";
4
5
  import { Condition } from '@talxis/client-libraries';
5
6
  type Labels = Required<ITranslation<typeof datasetColumnFilteringTranslations>>;
6
- export declare class DatasetColumnFilteringModel {
7
+ export interface IDatasetColumnFilteringModelEvents {
8
+ onSave: (result: false | ComponentFramework.PropertyHelper.DataSetApi.FilterExpression) => void;
9
+ onConditionValueChanged: () => void;
10
+ }
11
+ interface IDatasetColumnFilteringModelOptions {
12
+ condition: Condition;
13
+ labels: Labels;
14
+ filtering: Filtering;
15
+ }
16
+ export declare class DatasetColumnFilteringModel extends EventEmitter<IDatasetColumnFilteringModelEvents> {
7
17
  private _condition;
8
18
  private _labels;
9
- constructor(condition: Condition, labels: Labels);
19
+ private _filtering;
20
+ constructor(options: IDatasetColumnFilteringModelOptions);
10
21
  getOperatorOptionSet(): ComponentFramework.PropertyHelper.OptionMetadata[];
11
22
  setConditionValue(value: any, index: number): void;
12
23
  getConditionValue(): any[];
13
24
  getControlName(): "Decimal" | "TextField" | "OptionSet" | "MultiSelectOptionSet" | "DateTime" | "Duration" | "Lookup" | "TwoOptions" | null;
25
+ save(): void;
14
26
  }
15
27
  export {};
@@ -1,10 +1,12 @@
1
- import { Operators } from '@talxis/client-libraries';
1
+ import { EventEmitter, Operators, Type } from '@talxis/client-libraries';
2
2
  import { BaseControls } from '../../../utils/BaseControls.js';
3
3
 
4
- class DatasetColumnFilteringModel {
5
- constructor(condition, labels) {
6
- this._condition = condition;
7
- this._labels = labels;
4
+ class DatasetColumnFilteringModel extends EventEmitter {
5
+ constructor(options) {
6
+ super();
7
+ this._condition = options.condition;
8
+ this._labels = options.labels;
9
+ this._filtering = options.filtering;
8
10
  }
9
11
  getOperatorOptionSet() {
10
12
  const operators = this._condition.getColumn().metadata?.SupportedFilterConditionOperators ?? [];
@@ -32,13 +34,24 @@ class DatasetColumnFilteringModel {
32
34
  }
33
35
  this._condition.setValue(values);
34
36
  }
37
+ this.dispatchEvent('onConditionValueChanged');
35
38
  }
36
39
  getConditionValue() {
37
40
  const operator = this._condition.getOperator();
41
+ let value = this._condition.getControlValue();
42
+ switch (operator) {
43
+ case Operators.Like.Value:
44
+ case Operators.NotLike.Value: {
45
+ if (typeof value === 'string' && value.startsWith('*')) {
46
+ value = value.substring(1);
47
+ this._condition.setValue(value);
48
+ }
49
+ break;
50
+ }
51
+ }
38
52
  if (operator !== Operators.Between.Value && operator !== Operators.NotBetween.Value) {
39
- return [this._condition.getControlValue()];
53
+ return [value];
40
54
  }
41
- const value = this._condition.getControlValue();
42
55
  if (Array.isArray(value)) {
43
56
  return value;
44
57
  }
@@ -53,6 +66,27 @@ class DatasetColumnFilteringModel {
53
66
  return BaseControls.GetControlNameForDataType(dataType);
54
67
  }
55
68
  }
69
+ save() {
70
+ const operator = this._condition.getOperator();
71
+ switch (operator) {
72
+ case Operators.Like.Value:
73
+ case Operators.NotLike.Value: {
74
+ this._condition.setValue(`*${this._condition.getControlValue() ?? ''}`);
75
+ break;
76
+ }
77
+ }
78
+ this._condition.setIsValueRequired(true);
79
+ const result = this._filtering.getFilterExpression(Type.And.Value);
80
+ if (!result) {
81
+ switch (operator) {
82
+ case Operators.Like.Value:
83
+ case Operators.NotLike.Value: {
84
+ this._condition.setValue(this._condition.getControlValue()?.substring(1));
85
+ }
86
+ }
87
+ }
88
+ this.dispatchEvent('onSave', result);
89
+ }
56
90
  }
57
91
 
58
92
  export { DatasetColumnFilteringModel };
@@ -1 +1 @@
1
- {"version":3,"file":"DatasetColumnFilteringModel.js","sources":["../../../../src/components/DatasetControl/Filtering/DatasetColumnFilteringModel.ts"],"sourcesContent":["import { Operators } from \"@talxis/client-libraries\";\nimport { ITranslation } from \"../../../hooks\";\nimport { datasetColumnFilteringTranslations } from \"./translations\";\nimport { BaseControls } from \"../../../utils\";\nimport { Condition } from '@talxis/client-libraries';\n\ntype Labels = Required<ITranslation<typeof datasetColumnFilteringTranslations>>;\n\nexport class DatasetColumnFilteringModel {\n private _condition: Condition;\n private _labels: Labels;\n\n constructor(condition: Condition, labels: Labels) {\n this._condition = condition;\n this._labels = labels;\n }\n\n public getOperatorOptionSet(): ComponentFramework.PropertyHelper.OptionMetadata[] {\n const operators = this._condition.getColumn().metadata?.SupportedFilterConditionOperators ?? []\n return operators.map(operator => {\n return {\n Value: operator,\n //@ts-ignore - typings\n Label: this._labels[`operator-${operator}`](),\n Color: ''\n }\n })\n }\n\n public setConditionValue(value: any, index: number) {\n const operator = this._condition.getOperator();\n if (operator !== Operators.Between.Value && operator !== Operators.NotBetween.Value) {\n this._condition.setValue(value);\n }\n else {\n const values = [this._condition.getControlValue()?.[0] ?? null, this._condition.getControlValue()?.[1] ?? null];\n if (index === 0) {\n values[0] = value;\n }\n else {\n values[1] = value;\n }\n this._condition.setValue(values);\n }\n }\n\n public getConditionValue(): any[] {\n const operator = this._condition.getOperator();\n if (operator !== Operators.Between.Value && operator !== Operators.NotBetween.Value) {\n return [this._condition.getControlValue()];\n }\n const value = this._condition.getControlValue();\n if (Array.isArray(value)) {\n return value;\n }\n return [null, null];\n }\n\n public getControlName() {\n const dataType = this._condition.getDataType();\n if (!dataType) {\n return null;\n }\n else {\n return BaseControls.GetControlNameForDataType(dataType);\n }\n }\n}"],"names":[],"mappings":";;;MAQa,2BAA2B,CAAA;IAIpC,WAAY,CAAA,SAAoB,EAAE,MAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACzB;IAEM,oBAAoB,GAAA;AACvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,iCAAiC,IAAI,EAAE,CAAA;AAC/F,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,IAAG;YAC5B,OAAO;AACH,gBAAA,KAAK,EAAE,QAAQ;;gBAEf,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAY,SAAA,EAAA,QAAQ,CAAE,CAAA,CAAC,EAAE;AAC7C,gBAAA,KAAK,EAAE,EAAE;aACZ,CAAA;AACL,SAAC,CAAC,CAAA;KACL;IAEM,iBAAiB,CAAC,KAAU,EAAE,KAAa,EAAA;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;AACjF,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnC,SAAA;AACI,aAAA;AACD,YAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAChH,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACrB,aAAA;AACI,iBAAA;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACrB,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;KACJ;IAEM,iBAAiB,GAAA;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;YACjF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AAC9C,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;AAChD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACvB;IAEM,cAAc,GAAA;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACI,aAAA;AACD,YAAA,OAAO,YAAY,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC3D,SAAA;KACJ;AACJ;;;;"}
1
+ {"version":3,"file":"DatasetColumnFilteringModel.js","sources":["../../../../src/components/DatasetControl/Filtering/DatasetColumnFilteringModel.ts"],"sourcesContent":["import { EventEmitter, Filtering, Operators, Type } from \"@talxis/client-libraries\";\nimport { ITranslation } from \"../../../hooks\";\nimport { datasetColumnFilteringTranslations } from \"./translations\";\nimport { BaseControls } from \"../../../utils\";\nimport { Condition } from '@talxis/client-libraries';\n\ntype Labels = Required<ITranslation<typeof datasetColumnFilteringTranslations>>;\n\nexport interface IDatasetColumnFilteringModelEvents {\n onSave: (result: false | ComponentFramework.PropertyHelper.DataSetApi.FilterExpression) => void;\n onConditionValueChanged: () => void;\n}\n\ninterface IDatasetColumnFilteringModelOptions {\n condition: Condition;\n labels: Labels;\n filtering: Filtering;\n}\n\nexport class DatasetColumnFilteringModel extends EventEmitter<IDatasetColumnFilteringModelEvents> {\n private _condition: Condition;\n private _labels: Labels;\n private _filtering: Filtering;\n\n constructor(options: IDatasetColumnFilteringModelOptions) {\n super();\n this._condition = options.condition;\n this._labels = options.labels;\n this._filtering = options.filtering;\n }\n\n public getOperatorOptionSet(): ComponentFramework.PropertyHelper.OptionMetadata[] {\n const operators = this._condition.getColumn().metadata?.SupportedFilterConditionOperators ?? []\n return operators.map(operator => {\n return {\n Value: operator,\n //@ts-ignore - typings\n Label: this._labels[`operator-${operator}`](),\n Color: ''\n }\n })\n }\n\n public setConditionValue(value: any, index: number) {\n const operator = this._condition.getOperator();\n if (operator !== Operators.Between.Value && operator !== Operators.NotBetween.Value) {\n this._condition.setValue(value);\n }\n else {\n const values = [this._condition.getControlValue()?.[0] ?? null, this._condition.getControlValue()?.[1] ?? null];\n if (index === 0) {\n values[0] = value;\n }\n else {\n values[1] = value;\n }\n this._condition.setValue(values);\n }\n this.dispatchEvent('onConditionValueChanged');\n }\n\n public getConditionValue(): any[] {\n const operator = this._condition.getOperator();\n let value = this._condition.getControlValue();\n switch (operator) {\n case Operators.Like.Value:\n case Operators.NotLike.Value: {\n if(typeof value === 'string' && value.startsWith('*')) {\n value = value.substring(1);\n this._condition.setValue(value);\n }\n break;\n }\n }\n if (operator !== Operators.Between.Value && operator !== Operators.NotBetween.Value) {\n return [value];\n }\n if (Array.isArray(value)) {\n return value;\n }\n return [null, null];\n }\n\n public getControlName() {\n const dataType = this._condition.getDataType();\n if (!dataType) {\n return null;\n }\n else {\n return BaseControls.GetControlNameForDataType(dataType);\n }\n }\n public save() {\n const operator = this._condition.getOperator();\n switch (operator) {\n case Operators.Like.Value:\n case Operators.NotLike.Value: {\n this._condition.setValue(`*${this._condition.getControlValue() ?? ''}`);\n break;\n }\n }\n this._condition.setIsValueRequired(true);\n const result = this._filtering.getFilterExpression(Type.And.Value);\n if (!result) {\n switch (operator) {\n case Operators.Like.Value:\n case Operators.NotLike.Value: {\n this._condition.setValue(this._condition.getControlValue()?.substring(1))\n }\n }\n }\n this.dispatchEvent('onSave', result);\n }\n}"],"names":[],"mappings":"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"}
@@ -44,16 +44,23 @@ const Header = (props) => {
44
44
  ribbonQuickFindContainerProps: {
45
45
  className: styles.ribbonQuickFindContainer
46
46
  },
47
+ isRibbonVisible: datasetControl.isRibbonVisible(),
48
+ isQuickFindVisible: datasetControl.isQuickFindVisible(),
47
49
  onRenderQuickFind: (props, defaultRender) => defaultRender(props),
48
50
  onRenderRibbon: (props, defaultRender) => defaultRender(props)
49
51
  }, (props) => {
50
- return jsxs("div", { ...props.ribbonQuickFindContainerProps, children: [datasetControl.isRibbonVisible() &&
52
+ return jsxs("div", { ...props.ribbonQuickFindContainerProps, children: [props.isRibbonVisible &&
51
53
  jsx(Ribbon, { context: {
52
54
  ...datasetControl.getPcfContext(),
53
55
  mode: {
54
56
  ...datasetControl.getPcfContext().mode,
55
57
  isControlDisabled: dataset.loading
56
58
  }
59
+ }, onOverrideComponentProps: (ribbonProps) => {
60
+ return {
61
+ ...ribbonProps,
62
+ onRender: props.onRenderRibbon
63
+ };
57
64
  }, parameters: {
58
65
  Commands: {
59
66
  raw: datasetControl.retrieveRecordCommands(),
@@ -61,7 +68,7 @@ const Header = (props) => {
61
68
  Loading: {
62
69
  raw: !datasetControl.areCommandsLoaded()
63
70
  }
64
- } }), datasetControl.isQuickFindVisible() &&
71
+ } }), props.isQuickFindVisible &&
65
72
  jsx(QuickFind, { onRenderQuickFind: props.onRenderQuickFind })] });
66
73
  }), dataset.error &&
67
74
  props.onRenderErrorMessageBar({
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sources":["../../../../src/components/DatasetControl/Header/Header.tsx"],"sourcesContent":["import { MessageBar, MessageBarType } from \"@fluentui/react\";\nimport { IComponentProps } from \"../interfaces\";\nimport { useModel } from \"../useModel\";\nimport { useMemo } from \"react\";\nimport { getHeaderStyles } from \"./styles\";\nimport { useRerender } from \"@talxis/react-components\";\nimport { QuickFind } from \"../QuickFind/QuickFind\";\nimport { Ribbon } from \"../../Ribbon/Ribbon\";\nimport { useEventEmitter } from \"../../../hooks/useEventEmitter\";\nimport { IDataProviderEventListeners } from \"@talxis/client-libraries\";\nimport { IDatasetControlEvents } from \"../../../utils/dataset-control\";\n\nexport const Header = (props: { onRenderHeader: IComponentProps['onRenderHeader'] }) => {\n const model = useModel();\n const datasetControl = model.getDatasetControl();\n const dataset = datasetControl.getDataset();\n const rerender = useRerender();\n const styles = useMemo(() => getHeaderStyles(), []);\n useEventEmitter<IDataProviderEventListeners>(dataset, 'onLoading', rerender);\n useEventEmitter<IDatasetControlEvents>(datasetControl, 'onRecordCommandsLoaded', rerender);\n\n const isHeaderVisible = () => {\n switch (true) {\n case datasetControl.isQuickFindVisible():\n case dataset.error:\n case datasetControl.isRibbonVisible():\n {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n return props.onRenderHeader({\n headerContainerProps: {\n className: styles.header\n },\n onRenderErrorMessageBar: (props, defaultRender) => defaultRender(props),\n onRenderRibbonQuickFindWrapper: (props, defaultRender) => defaultRender(props),\n onRenderUnsavedChangesMessageBar: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n if (!isHeaderVisible()) {\n return <></>\n }\n return <div {...props.headerContainerProps}>\n {props.onRenderRibbonQuickFindWrapper({\n ribbonQuickFindContainerProps: {\n className: styles.ribbonQuickFindContainer\n },\n onRenderQuickFind: (props, defaultRender) => defaultRender(props),\n onRenderRibbon: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n return <div {...props.ribbonQuickFindContainerProps}>\n {datasetControl.isRibbonVisible() &&\n <Ribbon\n context={{\n ...datasetControl.getPcfContext(),\n mode: {\n ...datasetControl.getPcfContext().mode,\n isControlDisabled: dataset.loading\n }\n }}\n parameters={{\n Commands: {\n raw: datasetControl.retrieveRecordCommands(),\n },\n Loading: {\n raw: !datasetControl.areCommandsLoaded()\n }\n }}\n />\n }\n {datasetControl.isQuickFindVisible() &&\n <QuickFind\n onRenderQuickFind={props.onRenderQuickFind} />\n }\n </div>\n })}\n {dataset.error &&\n props.onRenderErrorMessageBar({\n messageBarProps: {\n messageBarType: MessageBarType.error\n },\n onRenderMessageBar: (props, defaultRender) => defaultRender(props)\n\n }, (props) => {\n return <MessageBar {...props.messageBarProps}>\n {dataset.errorMessage}\n </MessageBar>\n })\n }\n </div>\n })\n}"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Header.js","sources":["../../../../src/components/DatasetControl/Header/Header.tsx"],"sourcesContent":["import { MessageBar, MessageBarType } from \"@fluentui/react\";\nimport { IComponentProps } from \"../interfaces\";\nimport { useModel } from \"../useModel\";\nimport { useMemo } from \"react\";\nimport { getHeaderStyles } from \"./styles\";\nimport { useRerender } from \"@talxis/react-components\";\nimport { QuickFind } from \"../QuickFind/QuickFind\";\nimport { Ribbon } from \"../../Ribbon/Ribbon\";\nimport { useEventEmitter } from \"../../../hooks/useEventEmitter\";\nimport { IDataProviderEventListeners } from \"@talxis/client-libraries\";\nimport { IDatasetControlEvents } from \"../../../utils/dataset-control\";\n\nexport const Header = (props: { onRenderHeader: IComponentProps['onRenderHeader'] }) => {\n const model = useModel();\n const datasetControl = model.getDatasetControl();\n const dataset = datasetControl.getDataset();\n const rerender = useRerender();\n const styles = useMemo(() => getHeaderStyles(), []);\n useEventEmitter<IDataProviderEventListeners>(dataset, 'onLoading', rerender);\n useEventEmitter<IDatasetControlEvents>(datasetControl, 'onRecordCommandsLoaded', rerender);\n\n const isHeaderVisible = () => {\n switch (true) {\n case datasetControl.isQuickFindVisible():\n case dataset.error:\n case datasetControl.isRibbonVisible():\n {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n return props.onRenderHeader({\n headerContainerProps: {\n className: styles.header\n },\n onRenderErrorMessageBar: (props, defaultRender) => defaultRender(props),\n onRenderRibbonQuickFindWrapper: (props, defaultRender) => defaultRender(props),\n onRenderUnsavedChangesMessageBar: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n if (!isHeaderVisible()) {\n return <></>\n }\n return <div {...props.headerContainerProps}>\n {props.onRenderRibbonQuickFindWrapper({\n ribbonQuickFindContainerProps: {\n className: styles.ribbonQuickFindContainer\n },\n isRibbonVisible: datasetControl.isRibbonVisible(),\n isQuickFindVisible: datasetControl.isQuickFindVisible(),\n onRenderQuickFind: (props, defaultRender) => defaultRender(props),\n onRenderRibbon: (props, defaultRender) => defaultRender(props)\n }, (props) => {\n return <div {...props.ribbonQuickFindContainerProps}>\n {props.isRibbonVisible &&\n <Ribbon\n context={{\n ...datasetControl.getPcfContext(),\n mode: {\n ...datasetControl.getPcfContext().mode,\n isControlDisabled: dataset.loading\n }\n }}\n onOverrideComponentProps={(ribbonProps) => {\n return {\n ...ribbonProps,\n onRender: props.onRenderRibbon\n }\n }}\n parameters={{\n Commands: {\n raw: datasetControl.retrieveRecordCommands(),\n },\n Loading: {\n raw: !datasetControl.areCommandsLoaded()\n }\n }}\n />\n }\n {props.isQuickFindVisible &&\n <QuickFind\n onRenderQuickFind={props.onRenderQuickFind} />\n }\n </div>\n })}\n {dataset.error &&\n props.onRenderErrorMessageBar({\n messageBarProps: {\n messageBarType: MessageBarType.error\n },\n onRenderMessageBar: (props, defaultRender) => defaultRender(props)\n\n }, (props) => {\n return <MessageBar {...props.messageBarProps}>\n {dataset.errorMessage}\n </MessageBar>\n })\n }\n </div>\n })\n}"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -11,7 +11,7 @@ import { IRibbonComponentProps } from "../Ribbon/interfaces";
11
11
  import { IDatasetControl } from "../../utils/dataset-control";
12
12
  export interface IDatasetControlProps extends Omit<IControl<IDatasetControlParameters, IGridOutputs, Partial<ITranslation<typeof datasetControlTranslations & typeof gridTranslations>>, IDatasetControlComponentProps>, 'parameters' | 'context' | 'state'> {
13
13
  /**
14
- * Gets the instance of the Dataset control model.
14
+ * Used to provide the Dataset control instance.
15
15
  */
16
16
  onGetDatasetControlInstance: () => IDatasetControl;
17
17
  /**
@@ -58,6 +58,8 @@ export interface IHeaderProps {
58
58
  }
59
59
  export interface IRibbonQuickFindWrapperProps {
60
60
  ribbonQuickFindContainerProps: React.HTMLAttributes<HTMLDivElement>;
61
+ isRibbonVisible: boolean;
62
+ isQuickFindVisible: boolean;
61
63
  onRenderQuickFind: (props: IQuickFindProps, defaultRender: (props: IQuickFindProps) => React.ReactElement) => React.ReactElement;
62
64
  onRenderRibbon: IRibbonComponentProps['onRender'];
63
65
  }
@@ -126,13 +126,24 @@ const InternalCell = (props) => {
126
126
  const formatting = props.value.customFormatting;
127
127
  const grid = useGridInstance();
128
128
  const agGrid = useAgGridInstance();
129
- const error = props.value.error;
129
+ const errorRef = useRef(props.value.error);
130
130
  const notifications = props.value.notifications;
131
- const errorMessage = props.value.errorMessage;
131
+ const errorMessageRef = useRef(props.value.errorMessage);
132
132
  const theme = useTheme();
133
133
  const applicationTheme = useControlTheme(grid.getPcfContext().fluentDesignLanguage);
134
134
  const rerender = useRerender();
135
135
  const styles = useMemo(() => getInnerCellStyles(props.isCellEditor, theme, props.value.columnAlignment, node.expanded), [props.isCellEditor, theme, props.value.columnAlignment, node.expanded]);
136
+ useEventEmitter(record, 'onAfterSaved', (result) => {
137
+ if (!result.success) {
138
+ const errors = result.errors ?? [];
139
+ const fieldError = errors.find(error => error.fieldName === column.name);
140
+ if (fieldError) {
141
+ errorRef.current = true;
142
+ errorMessageRef.current = fieldError.message;
143
+ rerender();
144
+ }
145
+ }
146
+ });
136
147
  const shouldShowNotEditableNotification = () => {
137
148
  if (column.isEditable && !record.getColumnInfo(column.name).security.editable && record.getSummarizationType() === 'none') {
138
149
  return true;
@@ -143,7 +154,7 @@ const InternalCell = (props) => {
143
154
  if (props.isCellEditor) {
144
155
  return false;
145
156
  }
146
- if (error === true) {
157
+ if (errorRef.current === true) {
147
158
  return true;
148
159
  }
149
160
  if (shouldShowNotEditableNotification()) {
@@ -197,12 +208,12 @@ const InternalCell = (props) => {
197
208
  }
198
209
  });
199
210
  }
200
- if (error) {
211
+ if (errorRef.current) {
201
212
  result.push({
202
213
  key: 'error',
203
214
  iconOnly: true,
204
215
  disabled: true,
205
- text: errorMessage,
216
+ text: errorMessageRef.current,
206
217
  tooltipHostProps: tooltipProps,
207
218
  iconProps: {
208
219
  iconName: 'Error',
@@ -224,7 +235,7 @@ const InternalCell = (props) => {
224
235
  return false;
225
236
  };
226
237
  const shouldRenderNotifications = getShouldRenderNotifications();
227
- return jsx("div", { className: styles.innerCellRoot, "data-is-loading": isLoading(), "data-is-valid": !error, children: renderContent() });
238
+ return jsx("div", { className: styles.innerCellRoot, "data-is-loading": isLoading(), "data-is-valid": !errorRef.current, children: renderContent() });
228
239
  };
229
240
 
230
241
  export { Cell, InternalCell };
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","sources":["../../../../../src/components/Grid/cells/cell/Cell.tsx"],"sourcesContent":["import { ICellRendererParams } from \"@ag-grid-community/core\";\nimport { ThemeProvider, useTheme, Shimmer, ICommandBarItemProps, ITooltipHostProps, IconButton, mergeStyleSets } from \"@fluentui/react\";\nimport { IRecord, Constants, DataProvider, IRecordEvents } from \"@talxis/client-libraries\";\nimport { useThemeGenerator, getClassNames, useRerender } from \"@talxis/react-components\";\nimport { useMemo, useEffect, useRef, useCallback } from \"react\";\nimport { useControlTheme } from \"../../../../utils\";\nimport { ICellValues } from \"../../grid/ag-grid/AgGridModel\";\nimport { IGridColumn } from \"../../grid/GridModel\";\nimport { useGridInstance } from \"../../grid/useGridInstance\";\nimport { CellContent } from \"./content/CellContent\";\nimport { Notifications } from \"./notifications/Notifications\";\nimport { getCellStyles, getInnerCellStyles } from \"./styles\";\nimport { useAgGridInstance } from \"../../grid/ag-grid/useAgGridInstance\";\nimport ReactDOM from \"react-dom\";\nimport { GridContext } from \"../../grid/GridContext\";\nimport { AgGridContext } from \"../../grid/ag-grid/AgGridContext\";\nimport { useEventEmitter } from \"../../../../hooks/useEventEmitter\";\n\nexport interface ICellProps extends ICellRendererParams {\n baseColumn: IGridColumn;\n isCellEditor: boolean;\n record: IRecord;\n value: ICellValues;\n}\n\nexport const Cell = (props: ICellProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const memoizedContainerRef = useRef<HTMLDivElement | null>();\n const { record, node, baseColumn } = props;\n const column = baseColumn;\n const grid = useGridInstance();\n const agGrid = useAgGridInstance();\n const lastLoadingRefValue = useRef<boolean>(props.value.loading);\n const rerender = useRerender();\n\n const skipCellRendering = (() => {\n const dataProvider = record.getDataProvider();\n const summarizationType = dataProvider.getSummarizationType();\n switch (true) {\n case column.type === 'action': {\n return false;\n }\n case props.value.loading: {\n return false;\n }\n case summarizationType === 'grouping': {\n if (lastLoadingRefValue.current && !props.value.loading) {\n return false;\n }\n const _column = dataProvider.getColumnsMap()[column.name]!;\n if (_column.aggregation?.aggregationFunction && !_column.grouping?.isGrouped) {\n return false;\n }\n if (grid.getGroupType() === 'nested') {\n return dataProvider.grouping.getGroupBys()[0].columnName !== column.name\n }\n return !column.grouping?.isGrouped;\n }\n case summarizationType === 'aggregation': {\n return !dataProvider.getColumnsMap()[column.name]?.aggregation?.aggregationFunction;\n }\n case summarizationType === 'none': {\n return !!column.grouping?.isGrouped\n }\n default: {\n return false;\n }\n }\n })();\n lastLoadingRefValue.current = props.value.loading;\n\n const onCellClick = useCallback((e: MouseEvent) => {\n if (record.getDataProvider().getSummarizationType() === 'grouping' && !grid.isSelectionModifierKeyPressed()) {\n e.stopPropagation();\n }\n else if (node.isSelected()) {\n e.stopPropagation();\n }\n }, []);\n\n const onFieldValueChanged = useCallback(async (columnName: string) => {\n if (columnName !== column.name) {\n return;\n }\n props.api.refreshCells({\n rowNodes: [node]\n })\n setTimeout(() => {\n rerender();\n }, 0);\n }, []);\n\n\n const getTopLevelCellWrapperStyles = () => {\n return mergeStyleSets({\n cellRoot: {\n width: '100%',\n height: (() => {\n if (skipCellRendering && column.autoHeight) {\n return `${grid.getDefaultRowHeight()}px !important`;\n }\n return '100% !important';\n })()\n }\n })\n }\n useEventEmitter<IRecordEvents>(record, 'onFieldValueChanged', onFieldValueChanged);\n\n useEffect(() => {\n memoizedContainerRef.current = containerRef.current;\n containerRef.current?.addEventListener('click', onCellClick);\n return () => {\n containerRef.current?.removeEventListener('click', onCellClick);\n ReactDOM.unmountComponentAtNode(memoizedContainerRef.current!);\n }\n }, []);\n\n\n useEffect(() => {\n if (skipCellRendering) {\n ReactDOM.render(<></>, containerRef.current)\n }\n else {\n ReactDOM.render(\n <GridContext.Provider value={grid}>\n <AgGridContext.Provider value={agGrid}>\n <CellContentWrapper {...props} />\n </AgGridContext.Provider>\n </GridContext.Provider>,\n containerRef.current\n );\n }\n });\n return <div className={getTopLevelCellWrapperStyles().cellRoot} ref={containerRef} />\n}\n\nconst CellContentWrapper = (props: ICellProps) => {\n const { value: cellData, record } = props;\n const { customFormatting } = cellData;\n const cellTheme = useThemeGenerator(customFormatting.primaryColor, customFormatting.backgroundColor, customFormatting.textColor, customFormatting.themeOverride);\n const styles = useMemo(() => getCellStyles(cellTheme), [cellTheme])\n const cellRef = useRef<HTMLDivElement>(null);\n const rerender = useRerender();\n useEventEmitter<IRecordEvents>(record, 'onBeforeSaved', rerender);\n\n return <ThemeProvider\n ref={cellRef}\n theme={cellTheme}\n className={getClassNames([styles.cellRoot, customFormatting.className])}>\n <InternalCell {...props} />\n </ThemeProvider>\n}\n\n\nexport const InternalCell = (props: ICellProps) => {\n const column = props.baseColumn;\n const record = props.record;\n const node = props.node;\n const formatting = props.value.customFormatting;\n const grid = useGridInstance();\n const agGrid = useAgGridInstance();\n const error = props.value.error;\n const notifications = props.value.notifications;\n const errorMessage = props.value.errorMessage;\n const theme = useTheme();\n const applicationTheme = useControlTheme(grid.getPcfContext().fluentDesignLanguage);\n const rerender = useRerender();\n const styles = useMemo(() => getInnerCellStyles(\n props.isCellEditor,\n theme,\n props.value.columnAlignment,\n node.expanded\n ), [props.isCellEditor, theme, props.value.columnAlignment, node.expanded]);\n\n const shouldShowNotEditableNotification = () => {\n if (column.isEditable && !record.getColumnInfo(column.name).security.editable && record.getSummarizationType() === 'none') {\n return true;\n }\n return false;\n }\n\n const getShouldRenderNotifications = (): boolean => {\n if (props.isCellEditor) {\n return false;\n }\n if (error === true) {\n return true;\n }\n if (shouldShowNotEditableNotification()) {\n return true;\n }\n if (notifications && notifications.length > 0) {\n return true;\n }\n return false;\n }\n\n const renderContent = (): JSX.Element => {\n if (isLoading()) {\n return (\n <Shimmer styles={{\n shimmerWrapper: styles.shimmerWrapper,\n root: styles.shimmerRoot\n }} />\n );\n }\n return (\n <>\n {grid.isColumnExpandable(record, column) &&\n <IconButton\n iconProps={{ iconName: 'ChevronRight' }}\n styles={{\n root: styles.groupToggleButtonRoot,\n icon: styles.groupToggleButtonIcon\n }}\n onClick={() => {\n agGrid.toggleGroup(node);\n rerender();\n }} />\n }\n {(column.type !== 'action' || column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) &&\n <CellContent {...props} />\n }\n {shouldRenderNotifications &&\n renderNotifications()\n }\n </>\n )\n }\n\n const getFarNotifications = (): ICommandBarItemProps[] => {\n const result: ICommandBarItemProps[] = [];\n const tooltipProps: ITooltipHostProps = {\n tooltipProps: {\n theme: applicationTheme\n },\n calloutProps: {\n theme: applicationTheme,\n }\n }\n if (shouldShowNotEditableNotification()) {\n result.push({\n key: 'noteditable',\n text: grid.getLabels()['value-not-editable'](),\n iconOnly: true,\n disabled: true,\n tooltipHostProps: tooltipProps,\n iconProps: {\n iconName: 'Uneditable',\n styles: {\n root: styles.uneditableIconRoot\n }\n }\n })\n }\n if (error) {\n result.push({\n key: 'error',\n iconOnly: true,\n disabled: true,\n text: errorMessage,\n tooltipHostProps: tooltipProps,\n iconProps: {\n iconName: 'Error',\n styles: {\n root: styles.errorIconRoot\n }\n }\n })\n }\n return result;\n }\n\n const renderNotifications = (): JSX.Element => {\n return <Notifications\n formatting={formatting}\n isActionColumn={column.type === 'action'}\n columnAlignment={props.value.columnAlignment}\n notifications={notifications}\n farItems={getFarNotifications()} />\n }\n\n const isLoading = () => {\n if (props.value.loading) {\n return true;\n }\n return false;\n }\n const shouldRenderNotifications = getShouldRenderNotifications();\n\n return <div\n className={styles.innerCellRoot}\n data-is-loading={isLoading()}\n data-is-valid={!error}>\n {renderContent()}\n </div>\n}"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Cell.js","sources":["../../../../../src/components/Grid/cells/cell/Cell.tsx"],"sourcesContent":["import { ICellRendererParams } from \"@ag-grid-community/core\";\nimport { ThemeProvider, useTheme, Shimmer, ICommandBarItemProps, ITooltipHostProps, IconButton, mergeStyleSets } from \"@fluentui/react\";\nimport { IRecord, Constants, DataProvider, IRecordEvents, IRecordSaveOperationResult } from \"@talxis/client-libraries\";\nimport { useThemeGenerator, getClassNames, useRerender } from \"@talxis/react-components\";\nimport { useMemo, useEffect, useRef, useCallback } from \"react\";\nimport { useControlTheme } from \"../../../../utils\";\nimport { ICellValues } from \"../../grid/ag-grid/AgGridModel\";\nimport { IGridColumn } from \"../../grid/GridModel\";\nimport { useGridInstance } from \"../../grid/useGridInstance\";\nimport { CellContent } from \"./content/CellContent\";\nimport { Notifications } from \"./notifications/Notifications\";\nimport { getCellStyles, getInnerCellStyles } from \"./styles\";\nimport { useAgGridInstance } from \"../../grid/ag-grid/useAgGridInstance\";\nimport ReactDOM from \"react-dom\";\nimport { GridContext } from \"../../grid/GridContext\";\nimport { AgGridContext } from \"../../grid/ag-grid/AgGridContext\";\nimport { useEventEmitter } from \"../../../../hooks/useEventEmitter\";\n\nexport interface ICellProps extends ICellRendererParams {\n baseColumn: IGridColumn;\n isCellEditor: boolean;\n record: IRecord;\n value: ICellValues;\n}\n\nexport const Cell = (props: ICellProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const memoizedContainerRef = useRef<HTMLDivElement | null>();\n const { record, node, baseColumn } = props;\n const column = baseColumn;\n const grid = useGridInstance();\n const agGrid = useAgGridInstance();\n const lastLoadingRefValue = useRef<boolean>(props.value.loading);\n const rerender = useRerender();\n\n const skipCellRendering = (() => {\n const dataProvider = record.getDataProvider();\n const summarizationType = dataProvider.getSummarizationType();\n switch (true) {\n case column.type === 'action': {\n return false;\n }\n case props.value.loading: {\n return false;\n }\n case summarizationType === 'grouping': {\n if (lastLoadingRefValue.current && !props.value.loading) {\n return false;\n }\n const _column = dataProvider.getColumnsMap()[column.name]!;\n if (_column.aggregation?.aggregationFunction && !_column.grouping?.isGrouped) {\n return false;\n }\n if (grid.getGroupType() === 'nested') {\n return dataProvider.grouping.getGroupBys()[0].columnName !== column.name\n }\n return !column.grouping?.isGrouped;\n }\n case summarizationType === 'aggregation': {\n return !dataProvider.getColumnsMap()[column.name]?.aggregation?.aggregationFunction;\n }\n case summarizationType === 'none': {\n return !!column.grouping?.isGrouped\n }\n default: {\n return false;\n }\n }\n })();\n lastLoadingRefValue.current = props.value.loading;\n\n const onCellClick = useCallback((e: MouseEvent) => {\n if (record.getDataProvider().getSummarizationType() === 'grouping' && !grid.isSelectionModifierKeyPressed()) {\n e.stopPropagation();\n }\n else if (node.isSelected()) {\n e.stopPropagation();\n }\n }, []);\n\n const onFieldValueChanged = useCallback(async (columnName: string) => {\n if (columnName !== column.name) {\n return;\n }\n props.api.refreshCells({\n rowNodes: [node]\n })\n setTimeout(() => {\n rerender();\n }, 0);\n }, []);\n\n\n const getTopLevelCellWrapperStyles = () => {\n return mergeStyleSets({\n cellRoot: {\n width: '100%',\n height: (() => {\n if (skipCellRendering && column.autoHeight) {\n return `${grid.getDefaultRowHeight()}px !important`;\n }\n return '100% !important';\n })()\n }\n })\n }\n useEventEmitter<IRecordEvents>(record, 'onFieldValueChanged', onFieldValueChanged);\n\n useEffect(() => {\n memoizedContainerRef.current = containerRef.current;\n containerRef.current?.addEventListener('click', onCellClick);\n return () => {\n containerRef.current?.removeEventListener('click', onCellClick);\n ReactDOM.unmountComponentAtNode(memoizedContainerRef.current!);\n }\n }, []);\n\n\n useEffect(() => {\n if (skipCellRendering) {\n ReactDOM.render(<></>, containerRef.current)\n }\n else {\n ReactDOM.render(\n <GridContext.Provider value={grid}>\n <AgGridContext.Provider value={agGrid}>\n <CellContentWrapper {...props} />\n </AgGridContext.Provider>\n </GridContext.Provider>,\n containerRef.current\n );\n }\n });\n return <div className={getTopLevelCellWrapperStyles().cellRoot} ref={containerRef} />\n}\n\nconst CellContentWrapper = (props: ICellProps) => {\n const { value: cellData, record } = props;\n const { customFormatting } = cellData;\n const cellTheme = useThemeGenerator(customFormatting.primaryColor, customFormatting.backgroundColor, customFormatting.textColor, customFormatting.themeOverride);\n const styles = useMemo(() => getCellStyles(cellTheme), [cellTheme])\n const cellRef = useRef<HTMLDivElement>(null);\n const rerender = useRerender();\n useEventEmitter<IRecordEvents>(record, 'onBeforeSaved', rerender);\n\n return <ThemeProvider\n ref={cellRef}\n theme={cellTheme}\n className={getClassNames([styles.cellRoot, customFormatting.className])}>\n <InternalCell {...props} />\n </ThemeProvider>\n}\n\n\nexport const InternalCell = (props: ICellProps) => {\n const column = props.baseColumn;\n const record = props.record;\n const node = props.node;\n const formatting = props.value.customFormatting;\n const grid = useGridInstance();\n const agGrid = useAgGridInstance();\n const errorRef = useRef<boolean>(props.value.error);\n const notifications = props.value.notifications;\n const errorMessageRef = useRef<string | undefined>(props.value.errorMessage);\n const theme = useTheme();\n const applicationTheme = useControlTheme(grid.getPcfContext().fluentDesignLanguage);\n const rerender = useRerender();\n const styles = useMemo(() => getInnerCellStyles(\n props.isCellEditor,\n theme,\n props.value.columnAlignment,\n node.expanded\n ), [props.isCellEditor, theme, props.value.columnAlignment, node.expanded]);\n\n useEventEmitter<IRecordEvents>(record, 'onAfterSaved', (result: IRecordSaveOperationResult) => {\n if(!result.success) {\n const errors = result.errors ?? [];\n const fieldError = errors.find(error => error.fieldName === column.name);\n if(fieldError) {\n errorRef.current = true;\n errorMessageRef.current = fieldError.message;\n rerender();\n }\n }\n });\n\n const shouldShowNotEditableNotification = () => {\n if (column.isEditable && !record.getColumnInfo(column.name).security.editable && record.getSummarizationType() === 'none') {\n return true;\n }\n return false;\n }\n\n const getShouldRenderNotifications = (): boolean => {\n if (props.isCellEditor) {\n return false;\n }\n if (errorRef.current === true) {\n return true;\n }\n if (shouldShowNotEditableNotification()) {\n return true;\n }\n if (notifications && notifications.length > 0) {\n return true;\n }\n return false;\n }\n\n const renderContent = (): JSX.Element => {\n if (isLoading()) {\n return (\n <Shimmer styles={{\n shimmerWrapper: styles.shimmerWrapper,\n root: styles.shimmerRoot\n }} />\n );\n }\n return (\n <>\n {grid.isColumnExpandable(record, column) &&\n <IconButton\n iconProps={{ iconName: 'ChevronRight' }}\n styles={{\n root: styles.groupToggleButtonRoot,\n icon: styles.groupToggleButtonIcon\n }}\n onClick={() => {\n agGrid.toggleGroup(node);\n rerender();\n }} />\n }\n {(column.type !== 'action' || column.name === Constants.RIBBON_BUTTONS_COLUMN_NAME) &&\n <CellContent {...props} />\n }\n {shouldRenderNotifications &&\n renderNotifications()\n }\n </>\n )\n }\n\n const getFarNotifications = (): ICommandBarItemProps[] => {\n const result: ICommandBarItemProps[] = [];\n const tooltipProps: ITooltipHostProps = {\n tooltipProps: {\n theme: applicationTheme\n },\n calloutProps: {\n theme: applicationTheme,\n }\n }\n if (shouldShowNotEditableNotification()) {\n result.push({\n key: 'noteditable',\n text: grid.getLabels()['value-not-editable'](),\n iconOnly: true,\n disabled: true,\n tooltipHostProps: tooltipProps,\n iconProps: {\n iconName: 'Uneditable',\n styles: {\n root: styles.uneditableIconRoot\n }\n }\n })\n }\n if (errorRef.current) {\n result.push({\n key: 'error',\n iconOnly: true,\n disabled: true,\n text: errorMessageRef.current,\n tooltipHostProps: tooltipProps,\n iconProps: {\n iconName: 'Error',\n styles: {\n root: styles.errorIconRoot\n }\n }\n })\n }\n return result;\n }\n\n const renderNotifications = (): JSX.Element => {\n return <Notifications\n formatting={formatting}\n isActionColumn={column.type === 'action'}\n columnAlignment={props.value.columnAlignment}\n notifications={notifications}\n farItems={getFarNotifications()} />\n }\n\n const isLoading = () => {\n if (props.value.loading) {\n return true;\n }\n return false;\n }\n const shouldRenderNotifications = getShouldRenderNotifications();\n\n return <div\n className={styles.innerCellRoot}\n data-is-loading={isLoading()}\n data-is-valid={!errorRef.current}>\n {renderContent()}\n </div>\n}"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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"}
@@ -36,6 +36,7 @@ const Grid = (props) => {
36
36
  grid: grid,
37
37
  getContainer: () => containerRef.current
38
38
  }), []);
39
+ const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);
39
40
  const onGridReady = (event) => {
40
41
  agGrid.init(event.api);
41
42
  gridReadyRef.current = true;
@@ -45,19 +46,31 @@ const Grid = (props) => {
45
46
  grid.destroy();
46
47
  };
47
48
  }, []);
48
- return jsx(GridContext.Provider, { value: grid, children: jsx(AgGridContext.Provider, { value: agGrid, children: jsx(ThemeProvider, { className: getClassNames([className, styles.gridRoot, 'ag-theme-balham']), ref: containerRef, children: jsx(AgGridReact, { getRowId: (params) => `${params.data.getRecordId()}`, rowModelType: 'serverSide',
49
- //needs to be set here, crashes if set via API
50
- rowHeight: grid.getDefaultRowHeight(), rowSelection: agGrid.getSelectionType(), loadingOverlayComponent: LoadingOverlay, noRowsOverlayComponent: EmptyRecords, enableGroupEdit: true, reactiveCustomComponents: true, initialState: props.state?.AgGridState, gridOptions: {
51
- getRowStyle: (params) => {
52
- const record = params.data;
53
- if (!record) {
54
- return undefined;
55
- }
56
- return {
57
- backgroundColor: grid.getDefaultCellTheme(record).semanticColors.bodyBackground,
58
- };
59
- },
60
- }, onGridReady: onGridReady }) }) }) });
49
+ const componentProps = onOverrideComponentProps({
50
+ getRowId: (params) => `${params.data.getRecordId()}`,
51
+ rowModelType: 'serverSide',
52
+ //needs to be set here, crashes if set via API
53
+ rowHeight: grid.getDefaultRowHeight(),
54
+ rowSelection: agGrid.getSelectionType(),
55
+ loadingOverlayComponent: LoadingOverlay,
56
+ noRowsOverlayComponent: EmptyRecords,
57
+ enableGroupEdit: true,
58
+ reactiveCustomComponents: true,
59
+ initialState: props.state?.AgGridState,
60
+ gridOptions: {
61
+ getRowStyle: (params) => {
62
+ const record = params.data;
63
+ if (!record) {
64
+ return undefined;
65
+ }
66
+ return {
67
+ backgroundColor: grid.getDefaultCellTheme(record).semanticColors.bodyBackground,
68
+ };
69
+ },
70
+ },
71
+ onGridReady: onGridReady,
72
+ });
73
+ return jsx(GridContext.Provider, { value: grid, children: jsx(AgGridContext.Provider, { value: agGrid, children: jsx(ThemeProvider, { className: getClassNames([className, styles.gridRoot, 'ag-theme-balham']), ref: containerRef, children: jsx(AgGridReact, { ...componentProps }) }) }) });
61
74
  };
62
75
 
63
76
  export { Grid };
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sources":["../../../../src/components/Grid/grid/Grid.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\nimport { GetRowIdParams, GridReadyEvent, GridState } from \"@ag-grid-community/core\";\nimport { IRecord } from \"@talxis/client-libraries\";\nimport { AgGridModel } from \"./ag-grid/AgGridModel\";\nimport { AgGridReact } from \"@ag-grid-community/react\";\nimport { LoadingOverlay } from \"../overlays/loading/LoadingOverlay\";\nimport { EmptyRecords } from \"../overlays/empty-records/EmptyRecordsOverlay\";\nimport { getClassNames, ITheme, useStateValues } from \"@talxis/react-components\";\nimport { IGrid } from \"../interfaces\";\nimport { GridModel } from \"./GridModel\";\nimport { useControl } from \"../../../hooks\";\nimport { gridTranslations } from \"../translations\";\nimport { GridContext } from \"./GridContext\";\nimport { ThemeProvider } from \"@fluentui/react\";\nimport { getGridStyles } from \"./styles\";\nimport \"@ag-grid-community/styles/ag-grid.css\";\nimport \"@ag-grid-community/styles/ag-theme-balham.css\";\nimport { AgGridContext } from \"./ag-grid/AgGridContext\";\n\nconst getGridInstance = (onGetProps: () => IGrid, labels: any, theme: ITheme): GridModel => {\n return new GridModel({\n labels: labels,\n onGetProps: () => onGetProps(),\n theme: theme\n })\n}\n\nexport const Grid = (props: IGrid) => {\n const { labels, theme, className } = useControl('Grid', props, gridTranslations);\n const propsRef = useRef<IGrid>(props);\n propsRef.current = props;\n const grid = useMemo(() => {\n return getGridInstance(() => propsRef.current, labels, theme)\n }, []);\n\n const styles = useMemo(() => getGridStyles(theme), [theme]);\n const containerRef = useRef<HTMLDivElement>(null);\n const gridReadyRef = useRef<boolean>(false);\n const agGrid = useMemo(() => new AgGridModel({\n grid: grid,\n getContainer: () => containerRef.current!\n }), []);\n\n\n const onGridReady = (event: GridReadyEvent<IRecord, any>) => {\n agGrid.init(event.api);\n gridReadyRef.current = true;\n }\n\n useEffect(() => {\n return () => {\n grid.destroy();\n }\n }, []);\n\n\n return <GridContext.Provider value={grid}>\n <AgGridContext.Provider value={agGrid}>\n <ThemeProvider\n className={getClassNames([className, styles.gridRoot, 'ag-theme-balham'])}\n ref={containerRef}\n >\n <AgGridReact\n getRowId={(params: GetRowIdParams<IRecord>) => `${params.data.getRecordId()}`}\n rowModelType='serverSide'\n //needs to be set here, crashes if set via API\n rowHeight={grid.getDefaultRowHeight()}\n rowSelection={agGrid.getSelectionType()}\n loadingOverlayComponent={LoadingOverlay}\n noRowsOverlayComponent={EmptyRecords}\n enableGroupEdit\n reactiveCustomComponents\n initialState={props.state?.AgGridState}\n gridOptions={{\n getRowStyle: (params) => {\n const record = params.data;\n if (!record) {\n return undefined\n }\n return {\n backgroundColor: grid.getDefaultCellTheme(record).semanticColors.bodyBackground,\n }\n },\n }}\n onGridReady={onGridReady}\n />\n </ThemeProvider>\n </AgGridContext.Provider>\n </GridContext.Provider>\n}\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Grid.js","sources":["../../../../src/components/Grid/grid/Grid.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\nimport { GetRowIdParams, GridReadyEvent, GridState } from \"@ag-grid-community/core\";\nimport { IRecord } from \"@talxis/client-libraries\";\nimport { AgGridModel } from \"./ag-grid/AgGridModel\";\nimport { AgGridReact } from \"@ag-grid-community/react\";\nimport { LoadingOverlay } from \"../overlays/loading/LoadingOverlay\";\nimport { EmptyRecords } from \"../overlays/empty-records/EmptyRecordsOverlay\";\nimport { getClassNames, ITheme, useStateValues } from \"@talxis/react-components\";\nimport { IGrid } from \"../interfaces\";\nimport { GridModel } from \"./GridModel\";\nimport { useControl } from \"../../../hooks\";\nimport { gridTranslations } from \"../translations\";\nimport { GridContext } from \"./GridContext\";\nimport { ThemeProvider } from \"@fluentui/react\";\nimport { getGridStyles } from \"./styles\";\nimport \"@ag-grid-community/styles/ag-grid.css\";\nimport \"@ag-grid-community/styles/ag-theme-balham.css\";\nimport { AgGridContext } from \"./ag-grid/AgGridContext\";\n\nconst getGridInstance = (onGetProps: () => IGrid, labels: any, theme: ITheme): GridModel => {\n return new GridModel({\n labels: labels,\n onGetProps: () => onGetProps(),\n theme: theme\n })\n}\n\nexport const Grid = (props: IGrid) => {\n const { labels, theme, className } = useControl('Grid', props, gridTranslations);\n const propsRef = useRef<IGrid>(props);\n propsRef.current = props;\n const grid = useMemo(() => {\n return getGridInstance(() => propsRef.current, labels, theme)\n }, []);\n\n const styles = useMemo(() => getGridStyles(theme), [theme]);\n const containerRef = useRef<HTMLDivElement>(null);\n const gridReadyRef = useRef<boolean>(false);\n const agGrid = useMemo(() => new AgGridModel({\n grid: grid,\n getContainer: () => containerRef.current!\n }), []);\n\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n\n\n const onGridReady = (event: GridReadyEvent<IRecord, any>) => {\n agGrid.init(event.api);\n gridReadyRef.current = true;\n }\n\n useEffect(() => {\n return () => {\n grid.destroy();\n }\n }, []);\n\n const componentProps = onOverrideComponentProps({\n getRowId: (params: GetRowIdParams<IRecord>) => `${params.data.getRecordId()}`,\n rowModelType: 'serverSide' as const,\n //needs to be set here, crashes if set via API\n rowHeight: grid.getDefaultRowHeight(),\n rowSelection: agGrid.getSelectionType(),\n loadingOverlayComponent: LoadingOverlay,\n noRowsOverlayComponent: EmptyRecords,\n enableGroupEdit: true,\n reactiveCustomComponents: true,\n initialState: props.state?.AgGridState,\n gridOptions: {\n getRowStyle: (params) => {\n const record = params.data;\n if (!record) {\n return undefined\n }\n return {\n backgroundColor: grid.getDefaultCellTheme(record).semanticColors.bodyBackground,\n }\n },\n },\n onGridReady: onGridReady,\n })\n\n return <GridContext.Provider value={grid}>\n <AgGridContext.Provider value={agGrid}>\n <ThemeProvider\n className={getClassNames([className, styles.gridRoot, 'ag-theme-balham'])}\n ref={containerRef}\n >\n <AgGridReact\n {...componentProps}\n />\n </ThemeProvider>\n </AgGridContext.Provider>\n </GridContext.Provider>\n}\n"],"names":["_jsx"],"mappings":"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"}
@@ -102,7 +102,6 @@ export declare class GridModel {
102
102
  private _canColumnBeAggregated;
103
103
  private _registerEventListeners;
104
104
  private _showNestedProviderPagingLimitNotification;
105
- private _autoSaveRecord;
106
105
  private _refreshTotalRowOnAutoSave;
107
106
  private _setGroupingInterceptor;
108
107
  private get _dataset();
@@ -47,7 +47,7 @@ class GridModel {
47
47
  return this.getParameters().EnableNavigation?.raw !== false;
48
48
  }
49
49
  isAutoSaveEnabled() {
50
- return this.getParameters().EnableAutoSave?.raw === true;
50
+ return this._dataset.getDataProvider().getProperty('autoSave') === true;
51
51
  }
52
52
  isGroupedColumnsPinnedEnabled() {
53
53
  return this.getParameters().EnableGroupedColumnsPinning?.raw !== false;
@@ -697,7 +697,6 @@ class GridModel {
697
697
  return true;
698
698
  }
699
699
  _registerEventListeners() {
700
- this._dataset.addEventListener('onRecordColumnValueChanged', (record) => this._autoSaveRecord(record));
701
700
  this._dataset.addEventListener('onAfterRecordSaved', () => this._refreshTotalRowOnAutoSave());
702
701
  this._dataset.addEventListener('onAfterSaved', () => this._totalRow.refresh());
703
702
  this._dataset.addEventListener('onNestedProviderPagingLimitReached', () => this._showNestedProviderPagingLimitNotification());
@@ -713,11 +712,6 @@ class GridModel {
713
712
  });
714
713
  }
715
714
  }
716
- _autoSaveRecord(record) {
717
- if (this.isAutoSaveEnabled() && record.isDirty()) {
718
- record.save();
719
- }
720
- }
721
715
  _refreshTotalRowOnAutoSave() {
722
716
  if (this.isAutoSaveEnabled()) {
723
717
  this._totalRow.refresh();
@@ -1 +1 @@
1
- {"version":3,"file":"GridModel.js","sources":["../../../../src/components/Grid/grid/GridModel.ts"],"sourcesContent":["import { AggregationFunction, DataProvider, DataType, DataTypes, FieldValue, Filtering, Formatting, Grouping, IColumn, ICustomColumnControl, ICustomColumnFormatting, IDataProvider, IDataset, IGroupByMetadata, IInternalDataProvider, IRecord, Sanitizer, Sorting, TotalRow } from \"@talxis/client-libraries\";\nimport { merge } from \"merge-anything\";\nimport { ITheme, Theming } from \"@talxis/react-components\";\nimport { getTheme } from \"@fluentui/react\";\nimport { gridTranslations } from \"../translations\";\nimport { ITranslation } from \"../../../hooks\";\nimport { IBinding } from \"../../NestedControlRenderer/interfaces\";\nimport { BaseControls, IFluentDesignState } from \"../../../utils\";\nimport { IGrid, IGridParameters } from \"../interfaces\";\nimport { CHECKBOX_COLUMN_KEY } from \"../constants\";\nimport { Type as FilterType } from \"@talxis/client-libraries\";\nimport hotkeys from 'hotkeys-js';\n\nconst DEFAULT_ROW_HEIGHT = 42;\n\ninterface IGridDependencies {\n labels: Required<ITranslation<typeof gridTranslations>>;\n onGetProps: () => IGrid;\n theme?: ITheme;\n}\n\ninterface IPCFContext extends Omit<ComponentFramework.Context<any, any>, 'fluentDesignLanguage'> {\n fluentDesignLanguage?: IFluentDesignState\n}\n\nexport interface IGridColumn extends IColumn {\n isRequired: boolean;\n isEditable: boolean;\n isFilterable: boolean;\n isSorted: boolean;\n isFiltered: boolean;\n canBeAggregated: boolean;\n canBeGrouped: boolean;\n isSortedDescending: boolean;\n isResizable: boolean;\n alignment: IColumn['alignment'],\n}\n\nexport class GridModel {\n public readonly oddRowCellTheme: ITheme;\n public readonly evenRowCellTheme: ITheme;\n private _getProps: () => IGrid;\n private _labels: Required<ITranslation<typeof gridTranslations>>;\n private _theme: ITheme;\n private _sorting: Sorting;\n private _totalRow: TotalRow\n private _grouping: Grouping;\n private _filtering: Filtering;\n private _nestedProviderPagingLimitNotificationId: string | null = null;\n private _cachedGridColumnsMap: Map<string, IGridColumn> = new Map();\n\n constructor({ onGetProps, labels, theme }: IGridDependencies) {\n this._getProps = onGetProps;\n this._labels = labels;\n this._theme = theme ?? getTheme();\n this.oddRowCellTheme = Theming.GenerateThemeV8(this._theme.palette.themePrimary, this._theme.palette.neutralLighterAlt, this._theme.semanticColors.bodyText);\n this.evenRowCellTheme = Theming.GenerateThemeV8(this._theme.palette.themePrimary, this._theme.palette.white, this._theme.semanticColors.bodyText);\n const provider = this.getDataset().getDataProvider();\n this._sorting = new Sorting(provider);\n this._totalRow = new TotalRow(provider);\n this._filtering = new Filtering(provider, FieldValue);\n this._grouping = new Grouping(provider);\n this._registerEventListeners();\n hotkeys('*', (event, handler) => {\n })\n }\n\n public getDataset(): IDataset {\n return this._getProps().parameters.Grid;\n }\n\n public getPcfContext(): IPCFContext {\n return this._getProps().context;\n }\n\n public getState() {\n return this._getProps().state;\n }\n\n public getParameters(): IGridParameters {\n return this._getProps().parameters;\n }\n public getLabels(): Required<ITranslation<typeof gridTranslations>> {\n return this._labels;\n }\n public isZebraEnabled(): boolean {\n return this._getProps().parameters.EnableZebra?.raw !== false;\n }\n public isNavigationEnabled(): boolean {\n return this.getParameters().EnableNavigation?.raw !== false;\n }\n public isAutoSaveEnabled(): boolean {\n return this.getParameters().EnableAutoSave?.raw === true;\n }\n public isGroupedColumnsPinnedEnabled(): boolean {\n return this.getParameters().EnableGroupedColumnsPinning?.raw !== false;\n }\n public getInlineRibbonButtonIds(): string | null {\n return this.getParameters().InlineRibbonButtonIds?.raw ?? null;\n }\n public isEditingEnabled(): boolean {\n return this.getParameters().EnableEditing?.raw === true;\n }\n public getGroupType(): 'nested' | 'flat' {\n return this.getDataset().getDataProvider().getProperty('groupingType');\n }\n public optionSetColorsEnabled(): boolean {\n return this.getParameters().EnableOptionSetColors?.raw === true;\n }\n public getDefaultExpandedGroupLevel(): number {\n return this.getParameters().DefaultExpandedGroupLevel?.raw ?? -1;\n }\n public getLicenseKey(): string | null {\n return this.getParameters().LicenseKey?.raw ?? null;\n }\n public getDefaultRowHeight(): number {\n const height = this.getParameters().RowHeight?.raw;\n if (height) {\n return height;\n }\n return DEFAULT_ROW_HEIGHT;\n }\n\n public getSelectionType(): 'none' | 'single' | 'multiple' {\n switch (this.getParameters().SelectableRows?.raw) {\n case undefined:\n case null: {\n return 'multiple'\n }\n }\n return this.getParameters().SelectableRows!.raw;\n }\n public getControl(column: IColumn, record: IRecord, editing: boolean): Required<ICustomColumnControl> {\n editing = record.getSummarizationType() === 'aggregation' ? false : editing;\n //file and image currently do not support editor, always force cell renderers\n switch (column.dataType) {\n case 'File':\n case 'Image': {\n return {\n name: 'GridCellRenderer',\n appliesTo: 'both',\n bindings: {}\n }\n }\n }\n const defaultControl: Required<ICustomColumnControl> = {\n name: (() => {\n if (record.getSummarizationType() === 'aggregation') {\n return 'GridCellRenderer';\n }\n if (column.name === DataProvider.CONST.RIBBON_BUTTONS_COLUMN_NAME) {\n return BaseControls.GridInlineRibbon;\n }\n if (editing) {\n return BaseControls.GetControlNameForDataType(column.dataType as DataType)\n }\n return 'GridCellRenderer';\n })(),\n appliesTo: 'both',\n bindings: {}\n };\n const customControls = record.getColumnInfo(column.name).ui.getCustomControls([defaultControl]);\n const appliesToValue = editing ? 'editor' : 'renderer';\n const customControl = customControls.find(\n control => control.appliesTo === 'both' || control.appliesTo === appliesToValue\n );\n if (customControl) {\n return merge(defaultControl, customControl) as Required<ICustomColumnControl>;\n }\n\n return defaultControl;\n }\n\n public getBindings(record: IRecord, column: IColumn, control: ICustomColumnControl) {\n const columnInfo = record.getColumnInfo(column.name);\n const bindings: { [name: string]: IBinding } = {\n 'value': {\n isStatic: false,\n type: column.dataType as any,\n value: this.getControlValue(record, column),\n formattedValue: this.getRecordFormattedValue(record, column).value,\n error: columnInfo.error,\n errorMessage: columnInfo.errorMessage,\n onNotifyOutputChanged: () => { },\n metadata: {\n onOverrideMetadata: () => column.metadata\n }\n },\n 'IsCellCustomizer': {\n isStatic: true,\n type: DataTypes.TwoOptions,\n value: true\n }\n }\n if (control.bindings) {\n Object.entries(control.bindings).map(([name, binding]) => {\n bindings[name] = {\n isStatic: true,\n type: binding.type!,\n value: binding.value\n }\n })\n }\n return bindings;\n }\n\n public getFieldBindingParameters(record: IRecord, column: IColumn, editing: boolean) {\n //make sure we have IColumn, not IGridColumn\n column = record.getDataProvider().getColumnsMap()[column.name]!;\n const summarizationType = record.getDataProvider().getSummarizationType();\n const value = this.getRecordValue(record, column);\n const formattedValue = this.getRecordFormattedValue(record, column);\n const aggregationColumn = record.getDataProvider().getColumnsMap()[column.aggregation?.alias!];\n const parameters: any = {\n Dataset: {\n raw: this.getDataset(),\n type: DataTypes.Object\n },\n Record: {\n raw: record,\n type: DataTypes.Object\n },\n Column: {\n raw: column,\n type: DataTypes.Object\n }\n }\n parameters.AggregatedValue = {\n raw: value.aggregatedValue,\n formatted: formattedValue.aggregatedValue,\n type: aggregationColumn?.dataType ?? DataTypes.Decimal\n }\n parameters.EnableNavigation = {\n raw: (() => {\n if (!this.isNavigationEnabled()) {\n return false;\n }\n if (summarizationType === 'aggregation') {\n return false;\n }\n else if (summarizationType === 'grouping') {\n switch (column.dataType) {\n case DataTypes.LookupCustomer:\n case DataTypes.LookupRegarding:\n case DataTypes.LookupOwner:\n case DataTypes.LookupSimple:\n case DataTypes.File:\n case DataTypes.Image:\n case DataTypes.SingleLineEmail:\n case DataTypes.SingleLineUrl:\n case DataTypes.SingleLinePhone: {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n else {\n return true;\n }\n })(),\n type: DataTypes.TwoOptions\n }\n parameters.ColumnAlignment = {\n raw: column.alignment,\n type: DataTypes.SingleLineText\n }\n parameters.IsPrimaryColumn = {\n raw: column.isPrimary,\n type: DataTypes.TwoOptions\n }\n parameters.ShowErrorMessage = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.CellType = {\n raw: editing ? 'editor' : 'renderer',\n type: DataTypes.SingleLineText\n }\n parameters.AutoFocus = {\n raw: editing,\n type: DataTypes.TwoOptions\n }\n parameters.AggregationFunction = {\n raw: summarizationType === 'aggregation' ? aggregationColumn?.aggregation?.aggregationFunction : null,\n type: DataTypes.SingleLineText\n }\n parameters.PrefixIcon = {\n raw: null,\n type: DataTypes.SingleLineText\n }\n parameters.SuffixIcon = {\n raw: null,\n type: DataTypes.SingleLineText\n }\n parameters.IsInlineNewEnabled = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.EnableTypeSuffix = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.EnableOptionSetColors = {\n raw: this.optionSetColorsEnabled(),\n type: DataTypes.TwoOptions\n }\n parameters.CommandButtonIds = {\n raw: this.getInlineRibbonButtonIds(),\n type: DataTypes.SingleLineText\n }\n parameters.ShouldUnmountWhenOutputChanges = {\n raw: (() => {\n //by default, leave cell editor opened for these types since\n // they can output partial changes as values\n switch (column.dataType) {\n case 'DateAndTime.DateAndTime':\n case 'MultiSelectPicklist': {\n return false;\n }\n default: {\n return true;\n }\n }\n })(),\n type: DataTypes.TwoOptions\n }\n return parameters;\n }\n\n public isColumnExpandable(record: IRecord, column: IColumn): boolean {\n const groupBy = record.getDataProvider().grouping.getGroupBys()[0];\n return groupBy?.columnName === column.name\n }\n\n public getFieldFormatting(record: IRecord, columnName: string): Required<ICustomColumnFormatting> {\n const defaultTheme = this.getDefaultCellTheme(record);\n const defaultBackgroundColor = defaultTheme.semanticColors.bodyBackground;;\n\n // Handle checkbox column specifically\n if (columnName === CHECKBOX_COLUMN_KEY || !record) {\n return {\n primaryColor: this._theme.palette.themePrimary,\n backgroundColor: defaultBackgroundColor,\n textColor: Theming.GetTextColorForBackground(defaultBackgroundColor),\n className: '',\n themeOverride: {}\n };\n }\n\n const customFormatting = record.getColumnInfo(columnName).ui.getCustomFormatting(defaultTheme) ?? {};\n\n // Prepare the result with defaults\n const result: Required<ICustomColumnFormatting> = {\n backgroundColor: customFormatting.backgroundColor ?? defaultBackgroundColor,\n primaryColor: customFormatting.primaryColor ?? this._theme.palette.themePrimary,\n textColor: customFormatting.textColor ?? '',\n className: customFormatting.className ?? '',\n themeOverride: customFormatting.themeOverride ?? {}\n };\n\n // Apply background-specific adjustments\n if (result.backgroundColor !== defaultBackgroundColor) {\n result.themeOverride = merge({}, {\n fonts: {\n medium: {\n fontWeight: 600\n }\n }\n }, result.themeOverride);\n\n if (!customFormatting.primaryColor) {\n result.primaryColor = Theming.GetTextColorForBackground(result.backgroundColor);\n }\n }\n\n // Ensure text color is set\n if (!result.textColor) {\n result.textColor = Theming.GetTextColorForBackground(result.backgroundColor);\n }\n\n return result;\n }\n\n public getDefaultCellTheme(record: IRecord): ITheme {\n const isEven = record.getIndex() % 2 === 0;\n const summarizationType = record.getDataProvider().getSummarizationType();\n if (summarizationType !== 'none') {\n return this.oddRowCellTheme;\n }\n //child of a group record\n else if (record.getDataProvider().getParentDataProvider()) {\n return this.evenRowCellTheme;\n }\n else if (isEven || !this.isZebraEnabled()) {\n return this.evenRowCellTheme;\n }\n else {\n return this.oddRowCellTheme;\n }\n }\n\n public getGridColumns(): IGridColumn[] {\n this._cachedGridColumnsMap.clear();\n const gridColumns: IGridColumn[] = this.getDataset().columns.map(column => {\n const gridColumn = this.getGridColumnByName(column.name, true);\n this._cachedGridColumnsMap.set(gridColumn.name, gridColumn);\n return gridColumn;\n });\n return gridColumns;\n }\n\n public getColumnByName(columnName: string): IColumn {\n return this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n }\n\n public getGridColumnByName(columnName: string, force?: boolean): IGridColumn {\n if (!force) {\n const column = this._cachedGridColumnsMap.get(columnName);\n if (!column) {\n throw new Error(`Column with name ${columnName} not found in grid columns cache.`);\n }\n return column;\n }\n else {\n const column = this.getDataset().getColumnsMap()[columnName];\n const sorted = this.getDataset().sorting?.find(sort => sort.name === column.name);\n return {\n ...column,\n alignment: column.alignment!,\n isFiltered: this._filtering.getColumnFilter(column.name).isAppliedToDataset(),\n isEditable: this._isColumnEditable(column),\n isRequired: this._isColumnRequired(column),\n canBeGrouped: this._isColumnGroupable(column),\n isFilterable: this._isColumnFilterable(column),\n disableSorting: !this._isColumnSortable(column),\n canBeAggregated: this._canColumnBeAggregated(column),\n isSortedDescending: sorted?.sortDirection === 1 ? true : false,\n isResizable: true,\n isSorted: sorted ? true : false\n }\n }\n }\n\n public getRecordValue(record: IRecord, column: IColumn | string) {\n return this._getRecordValue(record, column, false);\n }\n public getRecordFormattedValue(record: IRecord, column: IColumn | string) {\n return this._getRecordValue(record, column, true);\n }\n //returns record value in a form that is compatible with PCF typings\n public getControlValue(record: IRecord, column: IColumn | string): any {\n const columnName = typeof column === 'string' ? column : column.name;\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n //can be the aggregated value\n let value = this.getRecordValue(record, column).value;\n switch (column.dataType) {\n //getValue always returns string for TwoOptions\n case 'TwoOptions': {\n if (typeof value === 'string') {\n value = value == '1' ? true : false\n }\n break;\n }\n //getValue always returns string for OptionSet\n case 'OptionSet': {\n value = value ? parseInt(value) : null;\n break;\n }\n case 'MultiSelectPicklist': {\n value = value ? value.split(',').map((x: string) => parseInt(x)) : null;\n break;\n }\n case 'Lookup.Simple':\n case 'Lookup.Customer':\n case 'Lookup.Owner':\n case 'Lookup.Regarding': {\n //our implementation returns array, Power Apps returns object\n if (value && !Array.isArray(value)) {\n value = [value];\n }\n value = value?.map((x: ComponentFramework.EntityReference) => Sanitizer.Lookup.getLookupValue(x))\n break;\n }\n }\n return value;\n }\n\n public isRecordSelectionDisabled(record: IRecord): boolean {\n const dataProvider = record.getDataProvider();\n const level = dataProvider.getNestingLevel();\n const groupBys = this.getDataset().grouping.getGroupBys();\n if (this.getGroupType() === 'nested' && level < groupBys.length - 1) {\n return true;\n }\n if (dataProvider.getSummarizationType() === 'grouping' && this.getSelectionType() === 'single') {\n return true;\n }\n return false;\n }\n\n public isColumnEditable(columnName: string, record?: IRecord): boolean {\n let isEditable = true;\n const mainDatasetColumn = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n let column = mainDatasetColumn;\n if (record) {\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n }\n switch (true) {\n case !this.isEditingEnabled():\n case record?.isSaving():\n case column.oneClickEdit: {\n isEditable = false;\n break;\n }\n }\n switch (column.name) {\n case DataProvider.CONST.CHECKBOX_COLUMN_KEY:\n case DataProvider.CONST.RIBBON_BUTTONS_COLUMN_NAME: {\n isEditable = false;\n break;\n }\n }\n //these field types do not support editing\n switch (column.dataType) {\n case DataTypes.File:\n case DataTypes.Image: {\n isEditable = false;\n break;\n }\n }\n //if the column is not editable, return false\n if (!isEditable) {\n return false\n }\n else {\n //columns is editable and we are not asking for record\n if (!record) {\n return true;\n }\n //column is editable, but we need to check if the record is editable\n else return this._isRecordFieldEditable(record, column);\n }\n }\n\n public addAggregation(columnName: string, aggregationFunction: AggregationFunction) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._setAggregationDecorator(() => {\n this._totalRow.addAggregation(columnName, aggregationFunction)\n })\n })\n }\n public removeAggregation(alias: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._setAggregationDecorator(() => {\n this._totalRow.removeAggregation(alias);\n })\n })\n }\n public toggleColumnGroup(columnName: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n const column = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n if (column.grouping?.isGrouped) {\n this._grouping.ungroupColumn(column.grouping.alias!);\n }\n else {\n this._grouping.groupColumn(column.name);\n }\n this._dataset.refresh();\n })\n }\n\n public getColumnFilter(columnName: string) {\n return this._filtering.getColumnFilter(columnName);\n }\n\n public removeColumnFilter(columnName: string, saveToDataset?: boolean) {\n this._filtering.removeColumnFilter(columnName);\n if (!saveToDataset) {\n return;\n }\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n const filterExpression = this._filtering.getFilterExpression(FilterType.And.Value);\n if (!filterExpression) {\n throw new Error('Unexpected error when clearing column filter.');\n }\n this._dataset.filtering.setFilter(filterExpression);\n this._dataset.refresh();\n })\n }\n\n public sortColumn(columnName: string, descending?: boolean) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._sorting.getColumnSorting(columnName).setSortValue(descending ? 1 : 0, hotkeys.getPressedKeyString().includes('⇧'));\n this._dataset.refresh();\n })\n }\n\n public clearColumnSorting(columnName: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._sorting.getColumnSorting(columnName).clear();\n this._dataset.refresh();\n })\n }\n public getTotalRow() {\n return this._totalRow;\n }\n public getFiltering() {\n return this._filtering;\n }\n public isSelectionModifierKeyPressed(): boolean {\n const pressedKeys = hotkeys.getPressedKeyString().join(',');\n switch (true) {\n case pressedKeys.includes('⇧'):\n case pressedKeys.includes('ctrl'):\n case pressedKeys.includes('⌘'): {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n public getColumnSortingLabel(columnName: string, descending?: boolean): string {\n const column = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n switch (column.dataType) {\n case DataTypes.WholeNone:\n case DataTypes.Decimal:\n case DataTypes.WholeDuration:\n case DataTypes.Currency: {\n if (!descending) {\n return this._labels['filtersortmenu-sortnumber-a-z']()\n }\n return this._labels['filtersortmenu-sortnumber-z-a']()\n }\n case DataTypes.DateAndTimeDateAndTime:\n case DataTypes.DateAndTimeDateOnly: {\n if (!descending) {\n return this._labels['filtersortmenu-sortdate-a-z']()\n }\n return this._labels['filtersortmenu-sortdate-z-a']()\n }\n case DataTypes.TwoOptions: {\n const options = column.metadata?.OptionSet ?? [];\n if (!descending) {\n return `${options[0].Label} ${this._labels['filtersortmenu-sorttwooption-joint']()} ${options[1].Label}`\n }\n return `${options[1].Label} ${this._labels['filtersortmenu-sorttwooption-joint']()} ${options[0].Label}`\n }\n default: {\n if (!descending) {\n return this._labels['filtersortmenu-sorttext-a-z']()\n }\n return this._labels['filtersortmenu-sorttext-z-a']()\n }\n }\n\n }\n\n public destroy() {\n if (this._nestedProviderPagingLimitNotificationId) {\n window.Xrm.App.clearGlobalNotification(this._nestedProviderPagingLimitNotificationId);\n }\n hotkeys.unbind();\n }\n\n private _getInternalDataProvider(): IInternalDataProvider {\n return this.getDataset().getDataProvider() as IInternalDataProvider;\n }\n\n private _setAggregationDecorator(fn: () => void) {\n fn();\n if (this._dataset.grouping.getGroupBys().length > 0) {\n this._dataset.refresh();\n }\n else {\n this._totalRow?.refresh();\n }\n }\n\n private _getRecordValue(record: IRecord, column: IColumn | string, formatted: boolean): { value: any; aggregatedValue: any } {\n if (!record) {\n return {\n value: null,\n aggregatedValue: null\n }\n }\n const columnName = typeof column === 'string' ? column : column.name;\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n if (!column) {\n return {\n value: null,\n aggregatedValue: null\n }\n }\n const method = formatted ? 'getFormattedValue' : 'getValue';\n const groupBy = record.getDataProvider().grouping.getGroupBy(column.grouping?.alias!);\n const aggregation = record.getDataProvider().aggregation.getAggregation(column.aggregation?.alias!);\n\n let value = record[method](columnName);\n let aggregatedValue = null;\n\n if (groupBy) {\n value = record[method](groupBy.alias);\n }\n if (aggregation) {\n aggregatedValue = record[method](aggregation.alias);\n }\n return {\n value: value,\n aggregatedValue: aggregatedValue\n }\n }\n\n private _isRecordFieldEditable(record: IRecord, column: IColumn): boolean {\n const columnInfo = record.getColumnInfo(column.name);\n //if editable not defined, return true since column is editable in this case\n return columnInfo?.security.editable ?? true;\n }\n\n private _isColumnRequired(column: IColumn): boolean {\n if (!this.getParameters().EnableEditing?.raw) {\n return false;\n }\n switch (column.metadata?.RequiredLevel) {\n case 1:\n case 2: {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n private _isColumnSortable(column: IColumn): boolean {\n //sorting enabled by default\n if (this.getParameters().EnableSorting?.raw === false) {\n return false;\n }\n return !column.disableSorting;\n }\n private _isColumnFilterable(column: IColumn): boolean {\n //filtering enabled by default\n if (this.getParameters().EnableFiltering?.raw === false) {\n return false;\n }\n if (!column.metadata?.SupportedFilterConditionOperators || column.metadata.SupportedFilterConditionOperators.length === 0) {\n return false;\n }\n return true;\n }\n\n private _isColumnGroupable(column: IColumn): boolean {\n //grouping disabled by default\n if (this.getParameters().EnableGrouping?.raw !== true) {\n return false;\n }\n return !!column.metadata?.CanBeGrouped;\n }\n\n private _isColumnEditable(column: IColumn): boolean {\n //editing disabled by default\n if (this.getParameters().EnableEditing?.raw !== true) {\n return false;\n }\n return !!column.metadata?.IsValidForUpdate;\n }\n\n private _canColumnBeAggregated(column: IColumn): boolean {\n //aggregations disabled by default\n if (this.getParameters().EnableAggregation?.raw !== true) {\n return false;\n }\n if (!column.metadata?.SupportedAggregations || column.metadata.SupportedAggregations.length === 0) {\n return false;\n }\n return true;\n }\n\n private _registerEventListeners() {\n this._dataset.addEventListener('onRecordColumnValueChanged', (record) => this._autoSaveRecord(record));\n this._dataset.addEventListener('onAfterRecordSaved', () => this._refreshTotalRowOnAutoSave());\n this._dataset.addEventListener('onAfterSaved', () => this._totalRow.refresh());\n this._dataset.addEventListener('onNestedProviderPagingLimitReached', () => this._showNestedProviderPagingLimitNotification());\n this._setGroupingInterceptor();\n }\n\n //TODO: use control notification instead\n private async _showNestedProviderPagingLimitNotification() {\n if (!this._nestedProviderPagingLimitNotificationId) {\n this._nestedProviderPagingLimitNotificationId = await window.Xrm.App.addGlobalNotification({\n level: 4,\n message: this.getLabels()['maximumGroupChildrenLimitReached']({ maxGroupChildren: Formatting.Get().formatInteger(5000) }),\n type: 2\n });\n }\n }\n private _autoSaveRecord(record: IRecord) {\n if (this.isAutoSaveEnabled() && record.isDirty()) {\n record.save();\n }\n }\n\n private _refreshTotalRowOnAutoSave() {\n if (this.isAutoSaveEnabled()) {\n this._totalRow.refresh()\n }\n }\n\n //this method makes sure that the grouping is only applied to the first grouping column\n //this allows for nested grouping to work correctly\n private _setGroupingInterceptor() {\n if (this.getGroupType() === 'flat') {\n return;\n }\n let originalSortedGrouping: IGroupByMetadata[] = [];\n let originalAggregation: IGroupByMetadata[] = [];\n this._dataset.addEventListener('onBeforeNewDataLoaded', () => {\n originalSortedGrouping = this._dataset.grouping.getGroupBys().sort((a, b) => {\n const colA = this._dataset.getDataProvider().getColumnsMap()[a.columnName]!;\n const colB = this._dataset.getDataProvider().getColumnsMap()[b.columnName]!;\n return colA.order! - colB.order!;\n });\n originalAggregation = this._dataset.aggregation.getAggregations();\n if (originalSortedGrouping.length > 1) {\n this._dataset.grouping.clear();\n const groupBy = originalSortedGrouping[0];\n this._dataset.grouping.addGroupBy(groupBy);\n //clear all grouping aggregations except the first one\n for (let i = 1; i < originalSortedGrouping.length; i++) {\n const column = this._dataset.getDataProvider().getColumnsMap()[originalSortedGrouping[i].columnName];\n this._dataset.aggregation.removeAggregation(column?.aggregation?.alias!);\n }\n }\n })\n this._dataset.addEventListener('onNewDataLoaded', () => {\n originalSortedGrouping.map((group) => {\n this._dataset.grouping.addGroupBy(group);\n })\n originalAggregation.map((aggr: any) => {\n this._dataset.aggregation.addAggregation(aggr);\n })\n })\n }\n\n private get _dataset() {\n return this.getDataset();\n }\n}"],"names":["FilterType"],"mappings":"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"}
1
+ {"version":3,"file":"GridModel.js","sources":["../../../../src/components/Grid/grid/GridModel.ts"],"sourcesContent":["import { AggregationFunction, DataProvider, DataType, DataTypes, FieldValue, Filtering, Formatting, Grouping, IColumn, ICustomColumnControl, ICustomColumnFormatting, IDataProvider, IDataset, IGroupByMetadata, IInternalDataProvider, IRecord, Sanitizer, Sorting, TotalRow } from \"@talxis/client-libraries\";\nimport { merge } from \"merge-anything\";\nimport { ITheme, Theming } from \"@talxis/react-components\";\nimport { getTheme } from \"@fluentui/react\";\nimport { gridTranslations } from \"../translations\";\nimport { ITranslation } from \"../../../hooks\";\nimport { IBinding } from \"../../NestedControlRenderer/interfaces\";\nimport { BaseControls, IFluentDesignState } from \"../../../utils\";\nimport { IGrid, IGridParameters } from \"../interfaces\";\nimport { CHECKBOX_COLUMN_KEY } from \"../constants\";\nimport { Type as FilterType } from \"@talxis/client-libraries\";\nimport hotkeys from 'hotkeys-js';\n\nconst DEFAULT_ROW_HEIGHT = 42;\n\ninterface IGridDependencies {\n labels: Required<ITranslation<typeof gridTranslations>>;\n onGetProps: () => IGrid;\n theme?: ITheme;\n}\n\ninterface IPCFContext extends Omit<ComponentFramework.Context<any, any>, 'fluentDesignLanguage'> {\n fluentDesignLanguage?: IFluentDesignState\n}\n\nexport interface IGridColumn extends IColumn {\n isRequired: boolean;\n isEditable: boolean;\n isFilterable: boolean;\n isSorted: boolean;\n isFiltered: boolean;\n canBeAggregated: boolean;\n canBeGrouped: boolean;\n isSortedDescending: boolean;\n isResizable: boolean;\n alignment: IColumn['alignment'],\n}\n\nexport class GridModel {\n public readonly oddRowCellTheme: ITheme;\n public readonly evenRowCellTheme: ITheme;\n private _getProps: () => IGrid;\n private _labels: Required<ITranslation<typeof gridTranslations>>;\n private _theme: ITheme;\n private _sorting: Sorting;\n private _totalRow: TotalRow\n private _grouping: Grouping;\n private _filtering: Filtering;\n private _nestedProviderPagingLimitNotificationId: string | null = null;\n private _cachedGridColumnsMap: Map<string, IGridColumn> = new Map();\n\n constructor({ onGetProps, labels, theme }: IGridDependencies) {\n this._getProps = onGetProps;\n this._labels = labels;\n this._theme = theme ?? getTheme();\n this.oddRowCellTheme = Theming.GenerateThemeV8(this._theme.palette.themePrimary, this._theme.palette.neutralLighterAlt, this._theme.semanticColors.bodyText);\n this.evenRowCellTheme = Theming.GenerateThemeV8(this._theme.palette.themePrimary, this._theme.palette.white, this._theme.semanticColors.bodyText);\n const provider = this.getDataset().getDataProvider();\n this._sorting = new Sorting(provider);\n this._totalRow = new TotalRow(provider);\n this._filtering = new Filtering(provider, FieldValue);\n this._grouping = new Grouping(provider);\n this._registerEventListeners();\n hotkeys('*', (event, handler) => {\n })\n }\n\n public getDataset(): IDataset {\n return this._getProps().parameters.Grid;\n }\n\n public getPcfContext(): IPCFContext {\n return this._getProps().context;\n }\n\n public getState() {\n return this._getProps().state;\n }\n\n public getParameters(): IGridParameters {\n return this._getProps().parameters;\n }\n public getLabels(): Required<ITranslation<typeof gridTranslations>> {\n return this._labels;\n }\n public isZebraEnabled(): boolean {\n return this._getProps().parameters.EnableZebra?.raw !== false;\n }\n public isNavigationEnabled(): boolean {\n return this.getParameters().EnableNavigation?.raw !== false;\n }\n public isAutoSaveEnabled(): boolean {\n return this._dataset.getDataProvider().getProperty('autoSave') === true\n }\n public isGroupedColumnsPinnedEnabled(): boolean {\n return this.getParameters().EnableGroupedColumnsPinning?.raw !== false;\n }\n public getInlineRibbonButtonIds(): string | null {\n return this.getParameters().InlineRibbonButtonIds?.raw ?? null;\n }\n public isEditingEnabled(): boolean {\n return this.getParameters().EnableEditing?.raw === true;\n }\n public getGroupType(): 'nested' | 'flat' {\n return this.getDataset().getDataProvider().getProperty('groupingType');\n }\n public optionSetColorsEnabled(): boolean {\n return this.getParameters().EnableOptionSetColors?.raw === true;\n }\n public getDefaultExpandedGroupLevel(): number {\n return this.getParameters().DefaultExpandedGroupLevel?.raw ?? -1;\n }\n public getLicenseKey(): string | null {\n return this.getParameters().LicenseKey?.raw ?? null;\n }\n public getDefaultRowHeight(): number {\n const height = this.getParameters().RowHeight?.raw;\n if (height) {\n return height;\n }\n return DEFAULT_ROW_HEIGHT;\n }\n\n public getSelectionType(): 'none' | 'single' | 'multiple' {\n switch (this.getParameters().SelectableRows?.raw) {\n case undefined:\n case null: {\n return 'multiple'\n }\n }\n return this.getParameters().SelectableRows!.raw;\n }\n public getControl(column: IColumn, record: IRecord, editing: boolean): Required<ICustomColumnControl> {\n editing = record.getSummarizationType() === 'aggregation' ? false : editing;\n //file and image currently do not support editor, always force cell renderers\n switch (column.dataType) {\n case 'File':\n case 'Image': {\n return {\n name: 'GridCellRenderer',\n appliesTo: 'both',\n bindings: {}\n }\n }\n }\n const defaultControl: Required<ICustomColumnControl> = {\n name: (() => {\n if (record.getSummarizationType() === 'aggregation') {\n return 'GridCellRenderer';\n }\n if (column.name === DataProvider.CONST.RIBBON_BUTTONS_COLUMN_NAME) {\n return BaseControls.GridInlineRibbon;\n }\n if (editing) {\n return BaseControls.GetControlNameForDataType(column.dataType as DataType)\n }\n return 'GridCellRenderer';\n })(),\n appliesTo: 'both',\n bindings: {}\n };\n const customControls = record.getColumnInfo(column.name).ui.getCustomControls([defaultControl]);\n const appliesToValue = editing ? 'editor' : 'renderer';\n const customControl = customControls.find(\n control => control.appliesTo === 'both' || control.appliesTo === appliesToValue\n );\n if (customControl) {\n return merge(defaultControl, customControl) as Required<ICustomColumnControl>;\n }\n\n return defaultControl;\n }\n\n public getBindings(record: IRecord, column: IColumn, control: ICustomColumnControl) {\n const columnInfo = record.getColumnInfo(column.name);\n const bindings: { [name: string]: IBinding } = {\n 'value': {\n isStatic: false,\n type: column.dataType as any,\n value: this.getControlValue(record, column),\n formattedValue: this.getRecordFormattedValue(record, column).value,\n error: columnInfo.error,\n errorMessage: columnInfo.errorMessage,\n onNotifyOutputChanged: () => { },\n metadata: {\n onOverrideMetadata: () => column.metadata\n }\n },\n 'IsCellCustomizer': {\n isStatic: true,\n type: DataTypes.TwoOptions,\n value: true\n }\n }\n if (control.bindings) {\n Object.entries(control.bindings).map(([name, binding]) => {\n bindings[name] = {\n isStatic: true,\n type: binding.type!,\n value: binding.value\n }\n })\n }\n return bindings;\n }\n\n public getFieldBindingParameters(record: IRecord, column: IColumn, editing: boolean) {\n //make sure we have IColumn, not IGridColumn\n column = record.getDataProvider().getColumnsMap()[column.name]!;\n const summarizationType = record.getDataProvider().getSummarizationType();\n const value = this.getRecordValue(record, column);\n const formattedValue = this.getRecordFormattedValue(record, column);\n const aggregationColumn = record.getDataProvider().getColumnsMap()[column.aggregation?.alias!];\n const parameters: any = {\n Dataset: {\n raw: this.getDataset(),\n type: DataTypes.Object\n },\n Record: {\n raw: record,\n type: DataTypes.Object\n },\n Column: {\n raw: column,\n type: DataTypes.Object\n }\n }\n parameters.AggregatedValue = {\n raw: value.aggregatedValue,\n formatted: formattedValue.aggregatedValue,\n type: aggregationColumn?.dataType ?? DataTypes.Decimal\n }\n parameters.EnableNavigation = {\n raw: (() => {\n if (!this.isNavigationEnabled()) {\n return false;\n }\n if (summarizationType === 'aggregation') {\n return false;\n }\n else if (summarizationType === 'grouping') {\n switch (column.dataType) {\n case DataTypes.LookupCustomer:\n case DataTypes.LookupRegarding:\n case DataTypes.LookupOwner:\n case DataTypes.LookupSimple:\n case DataTypes.File:\n case DataTypes.Image:\n case DataTypes.SingleLineEmail:\n case DataTypes.SingleLineUrl:\n case DataTypes.SingleLinePhone: {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n else {\n return true;\n }\n })(),\n type: DataTypes.TwoOptions\n }\n parameters.ColumnAlignment = {\n raw: column.alignment,\n type: DataTypes.SingleLineText\n }\n parameters.IsPrimaryColumn = {\n raw: column.isPrimary,\n type: DataTypes.TwoOptions\n }\n parameters.ShowErrorMessage = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.CellType = {\n raw: editing ? 'editor' : 'renderer',\n type: DataTypes.SingleLineText\n }\n parameters.AutoFocus = {\n raw: editing,\n type: DataTypes.TwoOptions\n }\n parameters.AggregationFunction = {\n raw: summarizationType === 'aggregation' ? aggregationColumn?.aggregation?.aggregationFunction : null,\n type: DataTypes.SingleLineText\n }\n parameters.PrefixIcon = {\n raw: null,\n type: DataTypes.SingleLineText\n }\n parameters.SuffixIcon = {\n raw: null,\n type: DataTypes.SingleLineText\n }\n parameters.IsInlineNewEnabled = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.EnableTypeSuffix = {\n raw: false,\n type: DataTypes.TwoOptions\n }\n parameters.EnableOptionSetColors = {\n raw: this.optionSetColorsEnabled(),\n type: DataTypes.TwoOptions\n }\n parameters.CommandButtonIds = {\n raw: this.getInlineRibbonButtonIds(),\n type: DataTypes.SingleLineText\n }\n parameters.ShouldUnmountWhenOutputChanges = {\n raw: (() => {\n //by default, leave cell editor opened for these types since\n // they can output partial changes as values\n switch (column.dataType) {\n case 'DateAndTime.DateAndTime':\n case 'MultiSelectPicklist': {\n return false;\n }\n default: {\n return true;\n }\n }\n })(),\n type: DataTypes.TwoOptions\n }\n return parameters;\n }\n\n public isColumnExpandable(record: IRecord, column: IColumn): boolean {\n const groupBy = record.getDataProvider().grouping.getGroupBys()[0];\n return groupBy?.columnName === column.name\n }\n\n public getFieldFormatting(record: IRecord, columnName: string): Required<ICustomColumnFormatting> {\n const defaultTheme = this.getDefaultCellTheme(record);\n const defaultBackgroundColor = defaultTheme.semanticColors.bodyBackground;;\n\n // Handle checkbox column specifically\n if (columnName === CHECKBOX_COLUMN_KEY || !record) {\n return {\n primaryColor: this._theme.palette.themePrimary,\n backgroundColor: defaultBackgroundColor,\n textColor: Theming.GetTextColorForBackground(defaultBackgroundColor),\n className: '',\n themeOverride: {}\n };\n }\n\n const customFormatting = record.getColumnInfo(columnName).ui.getCustomFormatting(defaultTheme) ?? {};\n\n // Prepare the result with defaults\n const result: Required<ICustomColumnFormatting> = {\n backgroundColor: customFormatting.backgroundColor ?? defaultBackgroundColor,\n primaryColor: customFormatting.primaryColor ?? this._theme.palette.themePrimary,\n textColor: customFormatting.textColor ?? '',\n className: customFormatting.className ?? '',\n themeOverride: customFormatting.themeOverride ?? {}\n };\n\n // Apply background-specific adjustments\n if (result.backgroundColor !== defaultBackgroundColor) {\n result.themeOverride = merge({}, {\n fonts: {\n medium: {\n fontWeight: 600\n }\n }\n }, result.themeOverride);\n\n if (!customFormatting.primaryColor) {\n result.primaryColor = Theming.GetTextColorForBackground(result.backgroundColor);\n }\n }\n\n // Ensure text color is set\n if (!result.textColor) {\n result.textColor = Theming.GetTextColorForBackground(result.backgroundColor);\n }\n\n return result;\n }\n\n public getDefaultCellTheme(record: IRecord): ITheme {\n const isEven = record.getIndex() % 2 === 0;\n const summarizationType = record.getDataProvider().getSummarizationType();\n if (summarizationType !== 'none') {\n return this.oddRowCellTheme;\n }\n //child of a group record\n else if (record.getDataProvider().getParentDataProvider()) {\n return this.evenRowCellTheme;\n }\n else if (isEven || !this.isZebraEnabled()) {\n return this.evenRowCellTheme;\n }\n else {\n return this.oddRowCellTheme;\n }\n }\n\n public getGridColumns(): IGridColumn[] {\n this._cachedGridColumnsMap.clear();\n const gridColumns: IGridColumn[] = this.getDataset().columns.map(column => {\n const gridColumn = this.getGridColumnByName(column.name, true);\n this._cachedGridColumnsMap.set(gridColumn.name, gridColumn);\n return gridColumn;\n });\n return gridColumns;\n }\n\n public getColumnByName(columnName: string): IColumn {\n return this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n }\n\n public getGridColumnByName(columnName: string, force?: boolean): IGridColumn {\n if (!force) {\n const column = this._cachedGridColumnsMap.get(columnName);\n if (!column) {\n throw new Error(`Column with name ${columnName} not found in grid columns cache.`);\n }\n return column;\n }\n else {\n const column = this.getDataset().getColumnsMap()[columnName];\n const sorted = this.getDataset().sorting?.find(sort => sort.name === column.name);\n return {\n ...column,\n alignment: column.alignment!,\n isFiltered: this._filtering.getColumnFilter(column.name).isAppliedToDataset(),\n isEditable: this._isColumnEditable(column),\n isRequired: this._isColumnRequired(column),\n canBeGrouped: this._isColumnGroupable(column),\n isFilterable: this._isColumnFilterable(column),\n disableSorting: !this._isColumnSortable(column),\n canBeAggregated: this._canColumnBeAggregated(column),\n isSortedDescending: sorted?.sortDirection === 1 ? true : false,\n isResizable: true,\n isSorted: sorted ? true : false\n }\n }\n }\n\n public getRecordValue(record: IRecord, column: IColumn | string) {\n return this._getRecordValue(record, column, false);\n }\n public getRecordFormattedValue(record: IRecord, column: IColumn | string) {\n return this._getRecordValue(record, column, true);\n }\n //returns record value in a form that is compatible with PCF typings\n public getControlValue(record: IRecord, column: IColumn | string): any {\n const columnName = typeof column === 'string' ? column : column.name;\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n //can be the aggregated value\n let value = this.getRecordValue(record, column).value;\n switch (column.dataType) {\n //getValue always returns string for TwoOptions\n case 'TwoOptions': {\n if (typeof value === 'string') {\n value = value == '1' ? true : false\n }\n break;\n }\n //getValue always returns string for OptionSet\n case 'OptionSet': {\n value = value ? parseInt(value) : null;\n break;\n }\n case 'MultiSelectPicklist': {\n value = value ? value.split(',').map((x: string) => parseInt(x)) : null;\n break;\n }\n case 'Lookup.Simple':\n case 'Lookup.Customer':\n case 'Lookup.Owner':\n case 'Lookup.Regarding': {\n //our implementation returns array, Power Apps returns object\n if (value && !Array.isArray(value)) {\n value = [value];\n }\n value = value?.map((x: ComponentFramework.EntityReference) => Sanitizer.Lookup.getLookupValue(x))\n break;\n }\n }\n return value;\n }\n\n public isRecordSelectionDisabled(record: IRecord): boolean {\n const dataProvider = record.getDataProvider();\n const level = dataProvider.getNestingLevel();\n const groupBys = this.getDataset().grouping.getGroupBys();\n if (this.getGroupType() === 'nested' && level < groupBys.length - 1) {\n return true;\n }\n if (dataProvider.getSummarizationType() === 'grouping' && this.getSelectionType() === 'single') {\n return true;\n }\n return false;\n }\n\n public isColumnEditable(columnName: string, record?: IRecord): boolean {\n let isEditable = true;\n const mainDatasetColumn = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n let column = mainDatasetColumn;\n if (record) {\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n }\n switch (true) {\n case !this.isEditingEnabled():\n case record?.isSaving():\n case column.oneClickEdit: {\n isEditable = false;\n break;\n }\n }\n switch (column.name) {\n case DataProvider.CONST.CHECKBOX_COLUMN_KEY:\n case DataProvider.CONST.RIBBON_BUTTONS_COLUMN_NAME: {\n isEditable = false;\n break;\n }\n }\n //these field types do not support editing\n switch (column.dataType) {\n case DataTypes.File:\n case DataTypes.Image: {\n isEditable = false;\n break;\n }\n }\n //if the column is not editable, return false\n if (!isEditable) {\n return false\n }\n else {\n //columns is editable and we are not asking for record\n if (!record) {\n return true;\n }\n //column is editable, but we need to check if the record is editable\n else return this._isRecordFieldEditable(record, column);\n }\n }\n\n public addAggregation(columnName: string, aggregationFunction: AggregationFunction) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._setAggregationDecorator(() => {\n this._totalRow.addAggregation(columnName, aggregationFunction)\n })\n })\n }\n public removeAggregation(alias: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._setAggregationDecorator(() => {\n this._totalRow.removeAggregation(alias);\n })\n })\n }\n public toggleColumnGroup(columnName: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n const column = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n if (column.grouping?.isGrouped) {\n this._grouping.ungroupColumn(column.grouping.alias!);\n }\n else {\n this._grouping.groupColumn(column.name);\n }\n this._dataset.refresh();\n })\n }\n\n public getColumnFilter(columnName: string) {\n return this._filtering.getColumnFilter(columnName);\n }\n\n public removeColumnFilter(columnName: string, saveToDataset?: boolean) {\n this._filtering.removeColumnFilter(columnName);\n if (!saveToDataset) {\n return;\n }\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n const filterExpression = this._filtering.getFilterExpression(FilterType.And.Value);\n if (!filterExpression) {\n throw new Error('Unexpected error when clearing column filter.');\n }\n this._dataset.filtering.setFilter(filterExpression);\n this._dataset.refresh();\n })\n }\n\n public sortColumn(columnName: string, descending?: boolean) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._sorting.getColumnSorting(columnName).setSortValue(descending ? 1 : 0, hotkeys.getPressedKeyString().includes('⇧'));\n this._dataset.refresh();\n })\n }\n\n public clearColumnSorting(columnName: string) {\n this._getInternalDataProvider().executeWithUnsavedChangesBlocker(() => {\n this._sorting.getColumnSorting(columnName).clear();\n this._dataset.refresh();\n })\n }\n public getTotalRow() {\n return this._totalRow;\n }\n public getFiltering() {\n return this._filtering;\n }\n public isSelectionModifierKeyPressed(): boolean {\n const pressedKeys = hotkeys.getPressedKeyString().join(',');\n switch (true) {\n case pressedKeys.includes('⇧'):\n case pressedKeys.includes('ctrl'):\n case pressedKeys.includes('⌘'): {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n public getColumnSortingLabel(columnName: string, descending?: boolean): string {\n const column = this.getDataset().getDataProvider().getColumnsMap()[columnName]!;\n switch (column.dataType) {\n case DataTypes.WholeNone:\n case DataTypes.Decimal:\n case DataTypes.WholeDuration:\n case DataTypes.Currency: {\n if (!descending) {\n return this._labels['filtersortmenu-sortnumber-a-z']()\n }\n return this._labels['filtersortmenu-sortnumber-z-a']()\n }\n case DataTypes.DateAndTimeDateAndTime:\n case DataTypes.DateAndTimeDateOnly: {\n if (!descending) {\n return this._labels['filtersortmenu-sortdate-a-z']()\n }\n return this._labels['filtersortmenu-sortdate-z-a']()\n }\n case DataTypes.TwoOptions: {\n const options = column.metadata?.OptionSet ?? [];\n if (!descending) {\n return `${options[0].Label} ${this._labels['filtersortmenu-sorttwooption-joint']()} ${options[1].Label}`\n }\n return `${options[1].Label} ${this._labels['filtersortmenu-sorttwooption-joint']()} ${options[0].Label}`\n }\n default: {\n if (!descending) {\n return this._labels['filtersortmenu-sorttext-a-z']()\n }\n return this._labels['filtersortmenu-sorttext-z-a']()\n }\n }\n\n }\n\n public destroy() {\n if (this._nestedProviderPagingLimitNotificationId) {\n window.Xrm.App.clearGlobalNotification(this._nestedProviderPagingLimitNotificationId);\n }\n hotkeys.unbind();\n }\n\n private _getInternalDataProvider(): IInternalDataProvider {\n return this.getDataset().getDataProvider() as IInternalDataProvider;\n }\n\n private _setAggregationDecorator(fn: () => void) {\n fn();\n if (this._dataset.grouping.getGroupBys().length > 0) {\n this._dataset.refresh();\n }\n else {\n this._totalRow?.refresh();\n }\n }\n\n private _getRecordValue(record: IRecord, column: IColumn | string, formatted: boolean): { value: any; aggregatedValue: any } {\n if (!record) {\n return {\n value: null,\n aggregatedValue: null\n }\n }\n const columnName = typeof column === 'string' ? column : column.name;\n column = record.getDataProvider().getColumnsMap()[columnName]!;\n if (!column) {\n return {\n value: null,\n aggregatedValue: null\n }\n }\n const method = formatted ? 'getFormattedValue' : 'getValue';\n const groupBy = record.getDataProvider().grouping.getGroupBy(column.grouping?.alias!);\n const aggregation = record.getDataProvider().aggregation.getAggregation(column.aggregation?.alias!);\n\n let value = record[method](columnName);\n let aggregatedValue = null;\n\n if (groupBy) {\n value = record[method](groupBy.alias);\n }\n if (aggregation) {\n aggregatedValue = record[method](aggregation.alias);\n }\n return {\n value: value,\n aggregatedValue: aggregatedValue\n }\n }\n\n private _isRecordFieldEditable(record: IRecord, column: IColumn): boolean {\n const columnInfo = record.getColumnInfo(column.name);\n //if editable not defined, return true since column is editable in this case\n return columnInfo?.security.editable ?? true;\n }\n\n private _isColumnRequired(column: IColumn): boolean {\n if (!this.getParameters().EnableEditing?.raw) {\n return false;\n }\n switch (column.metadata?.RequiredLevel) {\n case 1:\n case 2: {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n private _isColumnSortable(column: IColumn): boolean {\n //sorting enabled by default\n if (this.getParameters().EnableSorting?.raw === false) {\n return false;\n }\n return !column.disableSorting;\n }\n private _isColumnFilterable(column: IColumn): boolean {\n //filtering enabled by default\n if (this.getParameters().EnableFiltering?.raw === false) {\n return false;\n }\n if (!column.metadata?.SupportedFilterConditionOperators || column.metadata.SupportedFilterConditionOperators.length === 0) {\n return false;\n }\n return true;\n }\n\n private _isColumnGroupable(column: IColumn): boolean {\n //grouping disabled by default\n if (this.getParameters().EnableGrouping?.raw !== true) {\n return false;\n }\n return !!column.metadata?.CanBeGrouped;\n }\n\n private _isColumnEditable(column: IColumn): boolean {\n //editing disabled by default\n if (this.getParameters().EnableEditing?.raw !== true) {\n return false;\n }\n return !!column.metadata?.IsValidForUpdate;\n }\n\n private _canColumnBeAggregated(column: IColumn): boolean {\n //aggregations disabled by default\n if (this.getParameters().EnableAggregation?.raw !== true) {\n return false;\n }\n if (!column.metadata?.SupportedAggregations || column.metadata.SupportedAggregations.length === 0) {\n return false;\n }\n return true;\n }\n\n private _registerEventListeners() {\n this._dataset.addEventListener('onAfterRecordSaved', () => this._refreshTotalRowOnAutoSave());\n this._dataset.addEventListener('onAfterSaved', () => this._totalRow.refresh());\n this._dataset.addEventListener('onNestedProviderPagingLimitReached', () => this._showNestedProviderPagingLimitNotification());\n this._setGroupingInterceptor();\n }\n\n //TODO: use control notification instead\n private async _showNestedProviderPagingLimitNotification() {\n if (!this._nestedProviderPagingLimitNotificationId) {\n this._nestedProviderPagingLimitNotificationId = await window.Xrm.App.addGlobalNotification({\n level: 4,\n message: this.getLabels()['maximumGroupChildrenLimitReached']({ maxGroupChildren: Formatting.Get().formatInteger(5000) }),\n type: 2\n });\n }\n }\n private _refreshTotalRowOnAutoSave() {\n if (this.isAutoSaveEnabled()) {\n this._totalRow.refresh()\n }\n }\n\n //this method makes sure that the grouping is only applied to the first grouping column\n //this allows for nested grouping to work correctly\n private _setGroupingInterceptor() {\n if (this.getGroupType() === 'flat') {\n return;\n }\n let originalSortedGrouping: IGroupByMetadata[] = [];\n let originalAggregation: IGroupByMetadata[] = [];\n this._dataset.addEventListener('onBeforeNewDataLoaded', () => {\n originalSortedGrouping = this._dataset.grouping.getGroupBys().sort((a, b) => {\n const colA = this._dataset.getDataProvider().getColumnsMap()[a.columnName]!;\n const colB = this._dataset.getDataProvider().getColumnsMap()[b.columnName]!;\n return colA.order! - colB.order!;\n });\n originalAggregation = this._dataset.aggregation.getAggregations();\n if (originalSortedGrouping.length > 1) {\n this._dataset.grouping.clear();\n const groupBy = originalSortedGrouping[0];\n this._dataset.grouping.addGroupBy(groupBy);\n //clear all grouping aggregations except the first one\n for (let i = 1; i < originalSortedGrouping.length; i++) {\n const column = this._dataset.getDataProvider().getColumnsMap()[originalSortedGrouping[i].columnName];\n this._dataset.aggregation.removeAggregation(column?.aggregation?.alias!);\n }\n }\n })\n this._dataset.addEventListener('onNewDataLoaded', () => {\n originalSortedGrouping.map((group) => {\n this._dataset.grouping.addGroupBy(group);\n })\n originalAggregation.map((aggr: any) => {\n this._dataset.aggregation.addAggregation(aggr);\n })\n })\n }\n\n private get _dataset() {\n return this.getDataset();\n }\n}"],"names":["FilterType"],"mappings":"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"}
@@ -67,6 +67,9 @@ export declare const getGridStyles: (theme: ITheme) => import("@fluentui/react")
67
67
  'view-transition-name': string;
68
68
  };
69
69
  };
70
+ '.ag-overlay-loading-wrapper': {
71
+ backdropFilter: string;
72
+ };
70
73
  '.ag-cell-focus': {
71
74
  zIndex: number;
72
75
  '::after': {
@@ -68,6 +68,9 @@ const getGridStyles = (theme) => {
68
68
  'view-transition-name': 'cell-highlight',
69
69
  }
70
70
  },
71
+ '.ag-overlay-loading-wrapper': {
72
+ backdropFilter: 'blur(1px)'
73
+ },
71
74
  '.ag-cell-focus': {
72
75
  zIndex: 2,
73
76
  '::after': {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/Grid/grid/styles.ts"],"sourcesContent":["import { ITheme, mergeStyleSets } from \"@fluentui/react\";\nimport { IColumn } from \"@talxis/client-libraries\";\n\nexport const getGridStyles = (theme: ITheme) => {\n return mergeStyleSets({\n gridRoot: {\n height: '100%',\n minHeight: 180,\n display: 'flex',\n flexDirection: 'column',\n '--ag-borders': 'none !important',\n '.ag-root-wrapper': {\n maxHeight: '100%',\n '--ag-selected-row-background-color': theme.palette.themePrimary,\n '--ag-range-selection-border-color': theme.palette.themePrimary,\n '--ag-row-hover-color': theme.palette.black,\n '--ag-row-border-color': theme.semanticColors.menuDivider,\n '--ag-cell-horizontal-padding': 0,\n '--ag-input-focus-border-color': theme.semanticColors.inputFocusBorderAlt,\n borderBottom: `1px solid ${theme.semanticColors.menuDivider}`,\n '.ag-row::before': {\n zIndex: 1\n },\n '.ag-row-hover::before': {\n opacity: 0.1\n },\n '.ag-row-selected::before': {\n opacity: 0.2\n }\n },\n '.ag-body': {\n borderTop: `1px solid ${theme.semanticColors.menuDivider}`\n },\n '.ag-header-viewport': {\n backgroundColor: `${theme.semanticColors.bodyBackground}`\n },\n '.ag-center-cols-container': {\n minWidth: '100%',\n },\n '.ag-layout-auto-height .ag-center-cols-clipper, .ag-layout-auto-height .ag-center-cols-container, .ag-layout-print .ag-center-cols-clipper, .ag-layout-print .ag-center-cols-container': {\n minHeight: '42px !important'\n },\n '.ag-header-cell': {\n paddingLeft: 0,\n paddingRight: 0,\n backgroundColor: `${theme.semanticColors.bodyBackground} !important`\n },\n '.ag-cell': {\n border: 'none !important',\n borderRadius: 0,\n overflow: 'hidden'\n },\n '.ag-cell-wrapper:has([data-is-loading=\"true\"])': {\n height: '100%'\n },\n '.ms-Checkbox.is-disabled .ms-Checkbox-checkbox': {\n borderColor: `${theme.semanticColors.disabledBorder} !important`\n },\n '.ag-pinned-left-cols-container .ag-cell-last-left-pinned:not([col-id=\"__checkbox__virtual\"])': {\n borderRight: `1px solid ${theme.semanticColors.menuDivider} !important`\n },\n '.ag-cell-highlight': {\n '::after': {\n content: \"''\",\n position: 'absolute',\n left: 0,\n top: 0,\n backgroundColor: `color-mix(in srgb, ${theme.palette.themePrimary}, transparent 70%)`,\n 'view-transition-name': 'cell-highlight',\n }\n },\n '.ag-cell-focus': {\n zIndex: 2,\n '::after': {\n content: \"''\",\n position: 'absolute',\n inset: '-1px',\n border: `3px solid ${theme.semanticColors.inputFocusBorderAlt}`,\n borderRadius: theme.effects.roundedCorner2,\n pointerEvents: 'none'\n }\n },\n '.ag-cell-focus:has([data-is-valid=\"false\"])': {\n '::after': {\n borderColor: `${theme.semanticColors.errorIcon} !important`\n }\n },\n '.ag-floating-bottom .ag-row-pinned': {\n borderTop: `1px solid ${theme.semanticColors.menuDivider}`,\n borderBottom: 'none',\n }\n }\n })\n};\n\nexport const getJustifyContent = (columnAlignment: Required<IColumn['alignment']>) => {\n switch (columnAlignment) {\n case 'left': {\n return 'flex-start'\n }\n case 'center': {\n return 'center'\n }\n case 'right': {\n return 'flex-end'\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sources":["../../../../src/components/Grid/grid/styles.ts"],"sourcesContent":["import { ITheme, mergeStyleSets } from \"@fluentui/react\";\nimport { IColumn } from \"@talxis/client-libraries\";\n\nexport const getGridStyles = (theme: ITheme) => {\n return mergeStyleSets({\n gridRoot: {\n height: '100%',\n minHeight: 180,\n display: 'flex',\n flexDirection: 'column',\n '--ag-borders': 'none !important',\n '.ag-root-wrapper': {\n maxHeight: '100%',\n '--ag-selected-row-background-color': theme.palette.themePrimary,\n '--ag-range-selection-border-color': theme.palette.themePrimary,\n '--ag-row-hover-color': theme.palette.black,\n '--ag-row-border-color': theme.semanticColors.menuDivider,\n '--ag-cell-horizontal-padding': 0,\n '--ag-input-focus-border-color': theme.semanticColors.inputFocusBorderAlt,\n borderBottom: `1px solid ${theme.semanticColors.menuDivider}`,\n '.ag-row::before': {\n zIndex: 1\n },\n '.ag-row-hover::before': {\n opacity: 0.1\n },\n '.ag-row-selected::before': {\n opacity: 0.2\n }\n },\n '.ag-body': {\n borderTop: `1px solid ${theme.semanticColors.menuDivider}`\n },\n '.ag-header-viewport': {\n backgroundColor: `${theme.semanticColors.bodyBackground}`\n },\n '.ag-center-cols-container': {\n minWidth: '100%',\n },\n '.ag-layout-auto-height .ag-center-cols-clipper, .ag-layout-auto-height .ag-center-cols-container, .ag-layout-print .ag-center-cols-clipper, .ag-layout-print .ag-center-cols-container': {\n minHeight: '42px !important'\n },\n '.ag-header-cell': {\n paddingLeft: 0,\n paddingRight: 0,\n backgroundColor: `${theme.semanticColors.bodyBackground} !important`\n },\n '.ag-cell': {\n border: 'none !important',\n borderRadius: 0,\n overflow: 'hidden'\n },\n '.ag-cell-wrapper:has([data-is-loading=\"true\"])': {\n height: '100%'\n },\n '.ms-Checkbox.is-disabled .ms-Checkbox-checkbox': {\n borderColor: `${theme.semanticColors.disabledBorder} !important`\n },\n '.ag-pinned-left-cols-container .ag-cell-last-left-pinned:not([col-id=\"__checkbox__virtual\"])': {\n borderRight: `1px solid ${theme.semanticColors.menuDivider} !important`\n },\n '.ag-cell-highlight': {\n '::after': {\n content: \"''\",\n position: 'absolute',\n left: 0,\n top: 0,\n backgroundColor: `color-mix(in srgb, ${theme.palette.themePrimary}, transparent 70%)`,\n 'view-transition-name': 'cell-highlight',\n }\n },\n '.ag-overlay-loading-wrapper': {\n backdropFilter: 'blur(1px)'\n },\n '.ag-cell-focus': {\n zIndex: 2,\n '::after': {\n content: \"''\",\n position: 'absolute',\n inset: '-1px',\n border: `3px solid ${theme.semanticColors.inputFocusBorderAlt}`,\n borderRadius: theme.effects.roundedCorner2,\n pointerEvents: 'none'\n }\n },\n '.ag-cell-focus:has([data-is-valid=\"false\"])': {\n '::after': {\n borderColor: `${theme.semanticColors.errorIcon} !important`\n }\n },\n '.ag-floating-bottom .ag-row-pinned': {\n borderTop: `1px solid ${theme.semanticColors.menuDivider}`,\n borderBottom: 'none',\n }\n }\n })\n};\n\nexport const getJustifyContent = (columnAlignment: Required<IColumn['alignment']>) => {\n switch (columnAlignment) {\n case 'left': {\n return 'flex-start'\n }\n case 'center': {\n return 'center'\n }\n case 'right': {\n return 'flex-end'\n }\n }\n}\n"],"names":[],"mappings":";;AAGa,MAAA,aAAa,GAAG,CAAC,KAAa,KAAI;AAC3C,IAAA,OAAO,cAAc,CAAC;AAClB,QAAA,QAAQ,EAAE;AACN,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,cAAc,EAAE,iBAAiB;AACjC,YAAA,kBAAkB,EAAE;AAChB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,oCAAoC,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;AAChE,gBAAA,mCAAmC,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;AAC/D,gBAAA,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC3C,gBAAA,uBAAuB,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW;AACzD,gBAAA,8BAA8B,EAAE,CAAC;AACjC,gBAAA,+BAA+B,EAAE,KAAK,CAAC,cAAc,CAAC,mBAAmB;AACzE,gBAAA,YAAY,EAAE,CAAa,UAAA,EAAA,KAAK,CAAC,cAAc,CAAC,WAAW,CAAE,CAAA;AAC7D,gBAAA,iBAAiB,EAAE;AACf,oBAAA,MAAM,EAAE,CAAC;AACZ,iBAAA;AACD,gBAAA,uBAAuB,EAAE;AACrB,oBAAA,OAAO,EAAE,GAAG;AACf,iBAAA;AACD,gBAAA,0BAA0B,EAAE;AACxB,oBAAA,OAAO,EAAE,GAAG;AACf,iBAAA;AACJ,aAAA;AACD,YAAA,UAAU,EAAE;AACR,gBAAA,SAAS,EAAE,CAAa,UAAA,EAAA,KAAK,CAAC,cAAc,CAAC,WAAW,CAAE,CAAA;AAC7D,aAAA;AACD,YAAA,qBAAqB,EAAE;AACnB,gBAAA,eAAe,EAAE,CAAG,EAAA,KAAK,CAAC,cAAc,CAAC,cAAc,CAAE,CAAA;AAC5D,aAAA;AACD,YAAA,2BAA2B,EAAE;AACzB,gBAAA,QAAQ,EAAE,MAAM;AACnB,aAAA;AACD,YAAA,wLAAwL,EAAE;AACtL,gBAAA,SAAS,EAAE,iBAAiB;AAC/B,aAAA;AACD,YAAA,iBAAiB,EAAE;AACf,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,eAAe,EAAE,CAAG,EAAA,KAAK,CAAC,cAAc,CAAC,cAAc,CAAa,WAAA,CAAA;AACvE,aAAA;AACD,YAAA,UAAU,EAAE;AACR,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,QAAQ,EAAE,QAAQ;AACrB,aAAA;AACD,YAAA,gDAAgD,EAAE;AAC9C,gBAAA,MAAM,EAAE,MAAM;AACjB,aAAA;AACD,YAAA,gDAAgD,EAAE;AAC9C,gBAAA,WAAW,EAAE,CAAG,EAAA,KAAK,CAAC,cAAc,CAAC,cAAc,CAAa,WAAA,CAAA;AACnE,aAAA;AACD,YAAA,8FAA8F,EAAE;AAC5F,gBAAA,WAAW,EAAE,CAAa,UAAA,EAAA,KAAK,CAAC,cAAc,CAAC,WAAW,CAAa,WAAA,CAAA;AAC1E,aAAA;AACD,YAAA,oBAAoB,EAAE;AAClB,gBAAA,SAAS,EAAE;AACP,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,eAAe,EAAE,CAAsB,mBAAA,EAAA,KAAK,CAAC,OAAO,CAAC,YAAY,CAAoB,kBAAA,CAAA;AACrF,oBAAA,sBAAsB,EAAE,gBAAgB;AAC3C,iBAAA;AACJ,aAAA;AACD,YAAA,6BAA6B,EAAE;AAC3B,gBAAA,cAAc,EAAE,WAAW;AAC9B,aAAA;AACD,YAAA,gBAAgB,EAAE;AACd,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,SAAS,EAAE;AACP,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,CAAa,UAAA,EAAA,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAE,CAAA;AAC/D,oBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;AAC1C,oBAAA,aAAa,EAAE,MAAM;AACxB,iBAAA;AACJ,aAAA;AACD,YAAA,6CAA6C,EAAE;AAC3C,gBAAA,SAAS,EAAE;AACP,oBAAA,WAAW,EAAE,CAAG,EAAA,KAAK,CAAC,cAAc,CAAC,SAAS,CAAa,WAAA,CAAA;AAC9D,iBAAA;AACJ,aAAA;AACD,YAAA,oCAAoC,EAAE;AAClC,gBAAA,SAAS,EAAE,CAAa,UAAA,EAAA,KAAK,CAAC,cAAc,CAAC,WAAW,CAAE,CAAA;AAC1D,gBAAA,YAAY,EAAE,MAAM;AACvB,aAAA;AACJ,SAAA;AACJ,KAAA,CAAC,CAAA;AACN,EAAE;AAEW,MAAA,iBAAiB,GAAG,CAAC,eAA+C,KAAI;AACjF,IAAA,QAAQ,eAAe;QACnB,KAAK,MAAM,EAAE;AACT,YAAA,OAAO,YAAY,CAAA;AACtB,SAAA;QACD,KAAK,QAAQ,EAAE;AACX,YAAA,OAAO,QAAQ,CAAA;AAClB,SAAA;QACD,KAAK,OAAO,EAAE;AACV,YAAA,OAAO,UAAU,CAAA;AACpB,SAAA;AACJ,KAAA;AACL;;;;"}
@@ -5,14 +5,7 @@ import { IParameters, IStringProperty, ITwoOptionsProperty, IWholeNumberProperty
5
5
  import { IControl, IOutputs } from "../../interfaces/context";
6
6
  import { gridTranslations } from "./translations";
7
7
  import { IDataset } from "@talxis/client-libraries";
8
- export interface IGridComponentProps {
9
- agGrid: AgGridReactProps;
10
- registerRowGroupingModule: boolean;
11
- container: any;
12
- pagingProps: any;
13
- licenseKey?: string;
14
- }
15
- export interface IGrid extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof gridTranslations>>, IGridComponentProps> {
8
+ export interface IGrid extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof gridTranslations>>, AgGridReactProps> {
16
9
  }
17
10
  export interface IGridParameters extends IParameters {
18
11
  Grid: IDataset;
@@ -1,9 +1,17 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { SpinnerSize } from '@fluentui/react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { SpinnerSize, Text } from '@fluentui/react';
3
3
  import { Spinner } from '@talxis/react-components';
4
+ import { useGridInstance } from '../../grid/useGridInstance.js';
5
+ import { useMemo } from 'react';
6
+ import { getLoadingOverlayStyles } from './styles.js';
4
7
 
5
8
  const LoadingOverlay = () => {
6
- return jsx(Spinner, { size: SpinnerSize.large });
9
+ const grid = useGridInstance();
10
+ const provider = grid.getDataset().getDataProvider();
11
+ const loadingMessage = provider.getLoadingMessage();
12
+ const styles = useMemo(() => getLoadingOverlayStyles(), []);
13
+ return jsxs("div", { className: styles.root, children: [jsx(Spinner, { size: SpinnerSize.large }), loadingMessage &&
14
+ jsx(Text, { variant: 'large', className: styles.message, children: loadingMessage })] });
7
15
  };
8
16
 
9
17
  export { LoadingOverlay };
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingOverlay.js","sources":["../../../../../src/components/Grid/overlays/loading/LoadingOverlay.tsx"],"sourcesContent":["import { SpinnerSize } from '@fluentui/react';\nimport { Spinner } from '@talxis/react-components';\n\nexport const LoadingOverlay = () => {\n return <Spinner size={SpinnerSize.large} />\n}"],"names":["_jsx"],"mappings":";;;;AAGO,MAAM,cAAc,GAAG,MAAK;IAC/B,OAAOA,GAAA,CAAC,OAAO,EAAC,EAAA,IAAI,EAAE,WAAW,CAAC,KAAK,EAAA,CAAI,CAAA;AAC/C;;;;"}
1
+ {"version":3,"file":"LoadingOverlay.js","sources":["../../../../../src/components/Grid/overlays/loading/LoadingOverlay.tsx"],"sourcesContent":["import { SpinnerSize, Text } from '@fluentui/react';\nimport { Spinner } from '@talxis/react-components';\nimport { useGridInstance } from '../../grid/useGridInstance';\nimport { useMemo } from 'react';\nimport { getLoadingOverlayStyles } from './styles';\n\nexport const LoadingOverlay = () => {\n const grid = useGridInstance();\n const provider = grid.getDataset().getDataProvider();\n const loadingMessage = provider.getLoadingMessage();\n const styles = useMemo(() => getLoadingOverlayStyles(), []);\n\n return <div className={styles.root}>\n <Spinner size={SpinnerSize.large} />\n {loadingMessage && \n <Text variant='large' className={styles.message}>{loadingMessage}</Text>\n }\n </div>\n}"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAMO,MAAM,cAAc,GAAG,MAAK;AAC/B,IAAA,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,CAAC;AACrD,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;AACpD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC;AAE5D,IAAA,OAAOA,cAAK,SAAS,EAAE,MAAM,CAAC,IAAI,EAC9B,QAAA,EAAA,CAAAC,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,WAAW,CAAC,KAAK,EAAA,CAAI,EACnC,cAAc;AACX,gBAAAA,GAAA,CAAC,IAAI,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAA,QAAA,EAAG,cAAc,EAAA,CAAQ,IAE1E,CAAA;AACV;;;;"}
@@ -0,0 +1,10 @@
1
+ export declare const getLoadingOverlayStyles: () => import("@fluentui/react").IProcessedStyleSet<{
2
+ root: {
3
+ display: string;
4
+ flexDirection: string;
5
+ gap: number;
6
+ };
7
+ message: {
8
+ fontWeight: number;
9
+ };
10
+ }>;
@@ -0,0 +1,17 @@
1
+ import { mergeStyleSets } from '@fluentui/react';
2
+
3
+ const getLoadingOverlayStyles = () => {
4
+ return mergeStyleSets({
5
+ root: {
6
+ display: 'flex',
7
+ flexDirection: 'column',
8
+ gap: 10
9
+ },
10
+ message: {
11
+ fontWeight: 600
12
+ }
13
+ });
14
+ };
15
+
16
+ export { getLoadingOverlayStyles };
17
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sources":["../../../../../src/components/Grid/overlays/loading/styles.ts"],"sourcesContent":["import { mergeStyleSets } from \"@fluentui/react\"\n\nexport const getLoadingOverlayStyles = () => {\n return mergeStyleSets({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 10\n },\n message: {\n fontWeight: 600\n }\n })\n}"],"names":[],"mappings":";;AAEO,MAAM,uBAAuB,GAAG,MAAK;AACxC,IAAA,OAAO,cAAc,CAAC;AAClB,QAAA,IAAI,EAAE;AACF,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,GAAG,EAAE,EAAE;AACV,SAAA;AACD,QAAA,OAAO,EAAE;AACL,YAAA,UAAU,EAAE,GAAG;AAClB,SAAA;AACJ,KAAA,CAAC,CAAA;AACN;;;;"}
package/dist/index.d.ts CHANGED
@@ -341,14 +341,7 @@ declare const gridTranslations: {
341
341
  };
342
342
  };
343
343
 
344
- interface IGridComponentProps {
345
- agGrid: AgGridReactProps;
346
- registerRowGroupingModule: boolean;
347
- container: any;
348
- pagingProps: any;
349
- licenseKey?: string;
350
- }
351
- interface IGrid extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof gridTranslations>>, IGridComponentProps> {
344
+ interface IGrid extends IControl<IGridParameters, IGridOutputs, Partial<ITranslation<typeof gridTranslations>>, AgGridReactProps> {
352
345
  }
353
346
  interface IGridParameters extends IParameters {
354
347
  Grid: IDataset;
@@ -485,7 +478,7 @@ interface IDatasetControl extends EventEmitter<IDatasetControlEvents> {
485
478
 
486
479
  interface IDatasetControlProps extends Omit<IControl<IDatasetControlParameters, IGridOutputs, Partial<ITranslation<typeof datasetControlTranslations & typeof gridTranslations>>, IDatasetControlComponentProps>, 'parameters' | 'context' | 'state'> {
487
480
  /**
488
- * Gets the instance of the Dataset control model.
481
+ * Used to provide the Dataset control instance.
489
482
  */
490
483
  onGetDatasetControlInstance: () => IDatasetControl;
491
484
  /**
@@ -532,6 +525,8 @@ interface IHeaderProps {
532
525
  }
533
526
  interface IRibbonQuickFindWrapperProps {
534
527
  ribbonQuickFindContainerProps: React$1.HTMLAttributes<HTMLDivElement>;
528
+ isRibbonVisible: boolean;
529
+ isQuickFindVisible: boolean;
535
530
  onRenderQuickFind: (props: IQuickFindProps, defaultRender: (props: IQuickFindProps) => React$1.ReactElement) => React$1.ReactElement;
536
531
  onRenderRibbon: IRibbonComponentProps['onRender'];
537
532
  }
@@ -1489,4 +1484,4 @@ declare const useMouseOver: (ref: React.RefObject<HTMLElement>) => boolean;
1489
1484
 
1490
1485
  declare const useEventEmitter: <T extends { [K in keyof T]: (...args: any[]) => any; }>(emitter: IEventEmitter<T>, event: keyof T | (keyof T)[], callback: T[keyof T]) => void;
1491
1486
 
1492
- export { BaseControl, BaseControls, ControlTheme, DatasetAdapter, DatasetControl, DateTime, Decimal, Duration, Grid, GridCellRenderer, GridInlineRibbon, IBinding, IColorfulOptionSetValueRendererProps, IColorfulOptionValueRendererProps, IComponentProps$1 as IComponentProps, IContext, IControl, IControlController, IControlStates, IDatasetControlComponentProps, IDatasetControlParameters, IDatasetControlProps, IDateTime, IDateTimeOutputs, IDateTimeParameters, IDateTimeProperty, IDecimal, IDecimalNumberProperty, IDecimalOutputs, IDecimalParameters, IDefaultTranslations, IDuration, IDurationOutputs, IDurationParameters, IEntity, IFileProperty, IFileRendererProps, IFluentDesignState, IFooterProps, IGrid, IGridCellRenderer, IGridCellRendererComponentProps, IGridCellRendererParameters, IGridComponentProps, IGridInlineRibbon, IGridOutputs, IGridParameters, IHeaderProps, ILayout, ILookup, ILookupOutputs, ILookupParameters, ILookupProperty, IMetadata, IMultiSelectOptionSet, IMultiSelectOptionSetOutputs, IMultiSelectOptionSetParameters, IMultiSelectOptionSetProperty, INestedControlRenderer, INestedControlRendererComponentProps, INestedControlRendererParameters, IOptionSet, IOptionSetOutputs, IOptionSetParameters, IOptionSetProperty, IOutputs, IPaginationProps, IParameters, IProperty, IQuickFindProps, IRibbonParameters, IRibbonQuickFindWrapperProps, IStringProperty, ITextField, ITextFieldOutputs, ITextFieldParameters, ITranslation, ITranslations, ITwoOptions, ITwoOptionsOutputs, ITwoOptionsParameters, ITwoOptionsProperty, IValueRendererProps, IWholeNumberProperty, Lookup, MultiSelectOptionSet, NestedControlRenderer, OptionSet, TextField, ThemeWrapper, TwoOptions, VirtualDatasetAdapter, useControl, useControlLabels, useControlSizing, useControlTheme, useControlThemeGenerator, useDateTime, useEventEmitter, useFocusIn, useInputBasedControl, useLookup, useMouseOver };
1487
+ export { BaseControl, BaseControls, ControlTheme, DatasetAdapter, DatasetControl, DateTime, Decimal, Duration, Grid, GridCellRenderer, GridInlineRibbon, IBinding, IColorfulOptionSetValueRendererProps, IColorfulOptionValueRendererProps, IComponentProps$1 as IComponentProps, IContext, IControl, IControlController, IControlStates, IDatasetControlComponentProps, IDatasetControlParameters, IDatasetControlProps, IDateTime, IDateTimeOutputs, IDateTimeParameters, IDateTimeProperty, IDecimal, IDecimalNumberProperty, IDecimalOutputs, IDecimalParameters, IDefaultTranslations, IDuration, IDurationOutputs, IDurationParameters, IEntity, IFileProperty, IFileRendererProps, IFluentDesignState, IFooterProps, IGrid, IGridCellRenderer, IGridCellRendererComponentProps, IGridCellRendererParameters, IGridInlineRibbon, IGridOutputs, IGridParameters, IHeaderProps, ILayout, ILookup, ILookupOutputs, ILookupParameters, ILookupProperty, IMetadata, IMultiSelectOptionSet, IMultiSelectOptionSetOutputs, IMultiSelectOptionSetParameters, IMultiSelectOptionSetProperty, INestedControlRenderer, INestedControlRendererComponentProps, INestedControlRendererParameters, IOptionSet, IOptionSetOutputs, IOptionSetParameters, IOptionSetProperty, IOutputs, IPaginationProps, IParameters, IProperty, IQuickFindProps, IRibbonParameters, IRibbonQuickFindWrapperProps, IStringProperty, ITextField, ITextFieldOutputs, ITextFieldParameters, ITranslation, ITranslations, ITwoOptions, ITwoOptionsOutputs, ITwoOptionsParameters, ITwoOptionsProperty, IValueRendererProps, IWholeNumberProperty, Lookup, MultiSelectOptionSet, NestedControlRenderer, OptionSet, TextField, ThemeWrapper, TwoOptions, VirtualDatasetAdapter, useControl, useControlLabels, useControlSizing, useControlTheme, useControlThemeGenerator, useDateTime, useEventEmitter, useFocusIn, useInputBasedControl, useLookup, useMouseOver };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talxis/base-controls",
3
- "version": "1.2512.4",
3
+ "version": "1.2601.1",
4
4
  "description": "Set of React components that natively work with Power Apps Component Framework APIs.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -94,8 +94,8 @@
94
94
  },
95
95
  "peerDependencies": {
96
96
  "@fluentui/react": "<=8.121.5",
97
+ "@talxis/client-libraries": "1.2601.1",
97
98
  "@talxis/react-components": "1.2505.2",
98
- "@talxis/client-libraries": "1.2512.3",
99
99
  "react": "^16.8.6 || ^17.0.2",
100
100
  "react-dom": "^16.8.6 || ^17.0.2"
101
101
  }