@pega/lists-react 9.0.0-build.21.9 → 9.0.0-build.22.0

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 (66) hide show
  1. package/lib/Core/Components/Filters/AdvanceFilter.d.ts.map +1 -1
  2. package/lib/Core/Components/Filters/AdvanceFilter.js +5 -2
  3. package/lib/Core/Components/Filters/AdvanceFilter.js.map +1 -1
  4. package/lib/Core/Components/Filters/SelectFilter.d.ts.map +1 -1
  5. package/lib/Core/Components/Filters/SelectFilter.js +2 -2
  6. package/lib/Core/Components/Filters/SelectFilter.js.map +1 -1
  7. package/lib/Core/Components/HeaderMenu/index.js +2 -2
  8. package/lib/Core/Components/HeaderMenu/index.js.map +1 -1
  9. package/lib/Core/Components/Toolbar/FieldSelector.js +1 -1
  10. package/lib/Core/Components/Toolbar/FieldSelector.js.map +1 -1
  11. package/lib/Core/Components/Toolbar/hooks/useFilter.d.ts.map +1 -1
  12. package/lib/Core/Components/Toolbar/hooks/useFilter.js +4 -1
  13. package/lib/Core/Components/Toolbar/hooks/useFilter.js.map +1 -1
  14. package/lib/Core/Components/Toolbar/utils/utils.d.ts +28 -7
  15. package/lib/Core/Components/Toolbar/utils/utils.d.ts.map +1 -1
  16. package/lib/Core/Components/Toolbar/utils/utils.js +41 -8
  17. package/lib/Core/Components/Toolbar/utils/utils.js.map +1 -1
  18. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.d.ts +1 -1
  19. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.js +1 -1
  20. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.js.map +1 -1
  21. package/lib/Core/Components/WarningBanner.d.ts +11 -0
  22. package/lib/Core/Components/WarningBanner.d.ts.map +1 -0
  23. package/lib/Core/Components/WarningBanner.js +23 -0
  24. package/lib/Core/Components/WarningBanner.js.map +1 -0
  25. package/lib/Core/Hooks/a11y/useAnnounce.d.ts +3 -4
  26. package/lib/Core/Hooks/a11y/useAnnounce.d.ts.map +1 -1
  27. package/lib/Core/Hooks/a11y/useAnnounce.js +3 -4
  28. package/lib/Core/Hooks/a11y/useAnnounce.js.map +1 -1
  29. package/lib/Core/Hooks/useDragDrop.d.ts +2 -2
  30. package/lib/Core/Hooks/useDragDrop.js +2 -2
  31. package/lib/Core/Hooks/useDragDrop.js.map +1 -1
  32. package/lib/Core/Test/TestUtils.d.ts +0 -1
  33. package/lib/Core/Test/TestUtils.d.ts.map +1 -1
  34. package/lib/Core/Test/TestUtils.js +3 -7
  35. package/lib/Core/Test/TestUtils.js.map +1 -1
  36. package/lib/Core/Views/Gallery/index.d.ts.map +1 -1
  37. package/lib/Core/Views/Gallery/index.js +2 -1
  38. package/lib/Core/Views/Gallery/index.js.map +1 -1
  39. package/lib/Core/Views/Table/StyledTableContainer.js +2 -2
  40. package/lib/Core/Views/Table/StyledTableContainer.js.map +1 -1
  41. package/lib/Core/Views/Table/index.d.ts.map +1 -1
  42. package/lib/Core/Views/Table/index.js +2 -1
  43. package/lib/Core/Views/Table/index.js.map +1 -1
  44. package/lib/Core/Views/Timeline/Timeline.d.ts.map +1 -1
  45. package/lib/Core/Views/Timeline/Timeline.js +11 -16
  46. package/lib/Core/Views/Timeline/Timeline.js.map +1 -1
  47. package/lib/Core/Views/Timeline/Timeline.styles.d.ts +17 -9
  48. package/lib/Core/Views/Timeline/Timeline.styles.d.ts.map +1 -1
  49. package/lib/Core/Views/Timeline/Timeline.styles.js +32 -25
  50. package/lib/Core/Views/Timeline/Timeline.styles.js.map +1 -1
  51. package/lib/Core/Views/Timeline/Timeline.types.d.ts +6 -0
  52. package/lib/Core/Views/Timeline/Timeline.types.d.ts.map +1 -1
  53. package/lib/Core/Views/Timeline/Timeline.types.js.map +1 -1
  54. package/lib/Core/Views/Timeline/TimelineGroup.d.ts +13 -0
  55. package/lib/Core/Views/Timeline/TimelineGroup.d.ts.map +1 -0
  56. package/lib/Core/Views/Timeline/TimelineGroup.js +21 -0
  57. package/lib/Core/Views/Timeline/TimelineGroup.js.map +1 -0
  58. package/lib/Core/Views/Timeline/TimelineItem.d.ts +1 -3
  59. package/lib/Core/Views/Timeline/TimelineItem.d.ts.map +1 -1
  60. package/lib/Core/Views/Timeline/TimelineItem.js +7 -6
  61. package/lib/Core/Views/Timeline/TimelineItem.js.map +1 -1
  62. package/lib/index.d.ts +1 -1
  63. package/lib/index.d.ts.map +1 -1
  64. package/lib/index.js +1 -1
  65. package/lib/index.js.map +1 -1
  66. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"AdvanceFilter.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Filters/AdvanceFilter.jsx"],"names":[],"mappings":"AAWA;;;;mDAsCC;;;;;;;;;;sBAjDqB,YAAY"}
1
+ {"version":3,"file":"AdvanceFilter.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Filters/AdvanceFilter.jsx"],"names":[],"mappings":"AAWA;;;;mDAgDC;;;;;;;;;;sBA3DqB,YAAY"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import PropTypes from 'prop-types';
3
- import { useRef } from 'react';
3
+ import { useRef, useMemo } from 'react';
4
4
  import { ConditionBuilder } from '@pega/cosmos-react-condition-builder';
5
5
  import { FormDialog } from '@pega/cosmos-react-core';
6
6
  import getMenuItemsFromColumns from '../Toolbar/utils/utils';
@@ -8,7 +8,10 @@ import useTranslate from '../../Hooks/useTranslate';
8
8
  import useValidRhsTypes from './Hooks/useValidRhsTypes';
9
9
  export default function AdvanceFilter({ setShowFilter, view, popoverButtonRef }) {
10
10
  const filterExpression = view.state?.filterExpression;
11
- const formattedColumns = getMenuItemsFromColumns(view.getFieldDefs().filter(fieldDef => fieldDef.filter), 'name');
11
+ const viewFieldDefs = view.getFieldDefs();
12
+ const formattedColumns = useMemo(() => getMenuItemsFromColumns(viewFieldDefs.filter(fieldDef => fieldDef.filter), 'name', {
13
+ columns: view.columns
14
+ }), [viewFieldDefs, view.columns]);
12
15
  const validRhsTypes = useValidRhsTypes(view);
13
16
  const handle = useRef(null);
14
17
  const [translate] = useTranslate();
@@ -1 +1 @@
1
- {"version":3,"file":"AdvanceFilter.js","sourceRoot":"","sources":["../../../../Core/Components/Filters/AdvanceFilter.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,uBAAuB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEpD,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACtD,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EACvD,MAAM,CACP,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,EAAE,CAAC;IACnC,sGAAsG;IACtG,0FAA0F;IAC1F,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAChC,KAAC,UAAU,IACT,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,EACnC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAChC,SAAS,EAAC,cAAc,EACxB,QAAQ,EAAE,GAAG,EAAE;YACb,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,YAED,KAAC,gBAAgB,IACf,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,gBAAgB,IAAI,SAAS,EACxC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EACtC,WAAW,QACX,MAAM,EAAE,MAAM,GACd,GACS,CACd,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,aAAa,CAAC,SAAS,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU;IAClD,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CACzC,CAAC","sourcesContent":["import PropTypes from 'prop-types';\nimport { useRef } from 'react';\n\nimport { ConditionBuilder } from '@pega/cosmos-react-condition-builder';\nimport { FormDialog } from '@pega/cosmos-react-core';\n\nimport getMenuItemsFromColumns from '../Toolbar/utils/utils';\nimport useTranslate from '../../Hooks/useTranslate';\n\nimport useValidRhsTypes from './Hooks/useValidRhsTypes';\n\nexport default function AdvanceFilter({ setShowFilter, view, popoverButtonRef }) {\n const filterExpression = view.state?.filterExpression;\n const formattedColumns = getMenuItemsFromColumns(\n view.getFieldDefs().filter(fieldDef => fieldDef.filter),\n 'name'\n );\n const validRhsTypes = useValidRhsTypes(view);\n const handle = useRef(null);\n\n const [translate] = useTranslate();\n // FIXME: popoverButtonRef should be converted to a state since refs should not be read during render.\n // https://react.dev/learn/referencing-values-with-refs#differences-between-refs-and-state\n return popoverButtonRef.current ? (\n <FormDialog\n heading={translate('Filter column')}\n target={popoverButtonRef.current}\n placement='bottom-start'\n onCancel={() => {\n setShowFilter(false);\n }}\n onSubmit={() => {\n const [valid, filterExp] = handle.current.getCondition();\n if (valid) {\n setShowFilter(false);\n view.type.applyFilter({ filterExp });\n }\n }}\n >\n <ConditionBuilder\n fields={formattedColumns}\n condition={filterExpression || undefined}\n validRhsTypes={validRhsTypes}\n dateFunctions={view.meta.dateFunctions} // Could be undefined\n disallowNOT\n handle={handle}\n />\n </FormDialog>\n ) : null;\n}\n\nAdvanceFilter.propTypes = {\n view: PropTypes.objectOf(PropTypes.any).isRequired,\n setShowFilter: PropTypes.func.isRequired\n};\n"]}
1
+ {"version":3,"file":"AdvanceFilter.js","sourceRoot":"","sources":["../../../../Core/Components/Filters/AdvanceFilter.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,uBAAuB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEpD,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAE1C,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,uBAAuB,CACrB,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EACjD,MAAM,EACN;QACE,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CACF,EACH,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAC9B,CAAC;IAEF,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,EAAE,CAAC;IACnC,sGAAsG;IACtG,0FAA0F;IAC1F,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAChC,KAAC,UAAU,IACT,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,EACnC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAChC,SAAS,EAAC,cAAc,EACxB,QAAQ,EAAE,GAAG,EAAE;YACb,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,YAED,KAAC,gBAAgB,IACf,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,gBAAgB,IAAI,SAAS,EACxC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EACtC,WAAW,QACX,MAAM,EAAE,MAAM,GACd,GACS,CACd,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,aAAa,CAAC,SAAS,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU;IAClD,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CACzC,CAAC","sourcesContent":["import PropTypes from 'prop-types';\nimport { useRef, useMemo } from 'react';\n\nimport { ConditionBuilder } from '@pega/cosmos-react-condition-builder';\nimport { FormDialog } from '@pega/cosmos-react-core';\n\nimport getMenuItemsFromColumns from '../Toolbar/utils/utils';\nimport useTranslate from '../../Hooks/useTranslate';\n\nimport useValidRhsTypes from './Hooks/useValidRhsTypes';\n\nexport default function AdvanceFilter({ setShowFilter, view, popoverButtonRef }) {\n const filterExpression = view.state?.filterExpression;\n const viewFieldDefs = view.getFieldDefs();\n\n const formattedColumns = useMemo(\n () =>\n getMenuItemsFromColumns(\n viewFieldDefs.filter(fieldDef => fieldDef.filter),\n 'name',\n {\n columns: view.columns\n }\n ),\n [viewFieldDefs, view.columns]\n );\n\n const validRhsTypes = useValidRhsTypes(view);\n const handle = useRef(null);\n\n const [translate] = useTranslate();\n // FIXME: popoverButtonRef should be converted to a state since refs should not be read during render.\n // https://react.dev/learn/referencing-values-with-refs#differences-between-refs-and-state\n return popoverButtonRef.current ? (\n <FormDialog\n heading={translate('Filter column')}\n target={popoverButtonRef.current}\n placement='bottom-start'\n onCancel={() => {\n setShowFilter(false);\n }}\n onSubmit={() => {\n const [valid, filterExp] = handle.current.getCondition();\n if (valid) {\n setShowFilter(false);\n view.type.applyFilter({ filterExp });\n }\n }}\n >\n <ConditionBuilder\n fields={formattedColumns}\n condition={filterExpression || undefined}\n validRhsTypes={validRhsTypes}\n dateFunctions={view.meta.dateFunctions} // Could be undefined\n disallowNOT\n handle={handle}\n />\n </FormDialog>\n ) : null;\n}\n\nAdvanceFilter.propTypes = {\n view: PropTypes.objectOf(PropTypes.any).isRequired,\n setShowFilter: PropTypes.func.isRequired\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectFilter.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Filters/SelectFilter.jsx"],"names":[],"mappings":"AA6BA;;;;;4CA8JC;;;;;;;;;;;sBA3LqB,YAAY"}
1
+ {"version":3,"file":"SelectFilter.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Filters/SelectFilter.jsx"],"names":[],"mappings":"AA8BA;;;;;4CA8JC;;;;;;;;;;;sBA5LqB,YAAY"}
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import { useState, useEffect, useCallback } from 'react';
4
4
  import styled from 'styled-components';
5
5
  import { Checkbox, CheckboxGroup, Flex, Select, Option, FormDialog } from '@pega/cosmos-react-core';
6
- import { addFilter, getFilterInitializers, comparatorMap, FieldType } from 'pega-repeating-structures-core';
6
+ import { addFilter, getFilterInitializers, comparatorMap, FieldType, isEmpty } from 'pega-repeating-structures-core';
7
7
  import LoadingIndicator from '../LoadingIndicator';
8
8
  import RenderingEngine from '../RenderingEngine/RenderCell';
9
9
  import useTranslate from '../../Hooks/useTranslate';
@@ -30,7 +30,7 @@ export default function SelectFilter({ column, finishPopOver, onFilter, popoverB
30
30
  if (!uniqueValuesFetched)
31
31
  column.getUniqueValues().then(filteredData => {
32
32
  setUniqueValuesFetched(true);
33
- setUniqueColumnValues(filteredData);
33
+ setUniqueColumnValues(filteredData.filter(v => !isEmpty(v)));
34
34
  });
35
35
  }, [column, uniqueValuesFetched]);
36
36
  const [translate] = useTranslate();
@@ -1 +1 @@
1
- {"version":3,"file":"SelectFilter.js","sourceRoot":"","sources":["../../../../Core/Components/Filters/SelectFilter.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACpG,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,SAAS,EACV,MAAM,gCAAgC,CAAC;AAExC,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEpD,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKvC,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;CAIpC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IACxF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,AAAD,EAAG,gBAAgB,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtE,uHAAuH;IACvH,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAC5D,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,KAAK,MAAM,CAC1C,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,mBAAmB;YACtB,MAAM,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC3C,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC7B,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,EAAE,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,qBAAqB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,yIAAyI;IACzI,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,uBAAuB,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YACjE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,mEAAmE;IACrE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC;YAAE,OAAO;QAC7E,gBAAgB,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/D,aAAa,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,qBAAqB,GAAG,IAAI,CAAC;QACjC,MAAM,KAAK,GACT,aAAa,KAAK,aAAa,CAAC,MAAM,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS;YACjF,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,cAAc,CAAC;QACrB,qBAAqB,GAAG,SAAS,CAAC;YAChC,6GAA6G;YAC7G,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;YACnE,UAAU,EAAE,aAAa;YACzB,MAAM;YACN,KAAK;SACN,CAAC,CAAC;QACH,QAAQ,CAAC;YACP,SAAS,EAAE,qBAAqB;SACjC,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE9F,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,CAAC,EAAE;QACN,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CACpC,KAAK,CAAC,EAAE;QACN,+CAA+C;QAC/C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,sEAAsE;QACtE,IAAI,OAAO;YACT,iBAAiB,CACf,cAAc;gBACZ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAC/B,CAAC;aACC,CAAC;YACJ,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACtF,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,cAAc,CAAC,CACzB,CAAC;IAEF,2GAA2G;IAC3G,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,CAChF,aAAa,CAAC,UAAU,CAAC,CAC1B,CAAC;IAEF,OAAO,CACL,4BACG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAC1B,MAAC,UAAU,IACT,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,EACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,gBAAgB,CAAC,OAAO,aAEhC,KAAC,IAAI,cACH,KAAC,MAAM,IACL,YAAY,EAAE,UAAU,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,YAEvD,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5C,KAAC,MAAM,IAAe,KAAK,EAAE,GAAG,CAAC,GAAG,YACjC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IADV,GAAG,CAAC,GAAG,CAEX,CACV,CAAC,GACK,GACJ,EACN,gBAAgB,IAAI,CACnB,MAAC,kBAAkB,IAAC,SAAS,EAAC,YAAY,aACxC,KAAC,aAAa,cACX,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACvB,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gCACxC,kFAAkF;gCAClF,qGAAqG;gCACrG,4GAA4G;gCAC5G,MAAM,OAAO,GAAG;oCACd,mBAAmB,EAAE,GAAG,EAAE;wCACxB,OAAO;4CACL,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;4CAC/C,IAAI,EAAE,cAAc;yCACrB,CAAC;oCACJ,CAAC;oCACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;iCACrB,CAAC;gCACF,OAAO,CACL,KAAC,QAAQ,IAEP,EAAE,EAAE,IAAI,EACR,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,IAAI,EACX,KAAK,EACH,KAAC,eAAe,OAAK,MAAM,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,OAAO,GAAI,IAPxE,IAAI,CAST,CACH,CAAC;4BACJ,CAAC,CAAC,GACY,EAChB,KAAC,qBAAqB,cACpB,KAAC,gBAAgB,IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,mBAAmB,GAAI,GAC/C,IACL,CACtB,IACU,CACd,CAAC,CAAC,CAAC,IAAI,GACP,CACJ,CAAC;AACJ,CAAC;AAED,YAAY,CAAC,SAAS,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU;IACpD,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACxC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CACpC,CAAC","sourcesContent":["import PropTypes from 'prop-types';\nimport { useState, useEffect, useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport { Checkbox, CheckboxGroup, Flex, Select, Option, FormDialog } from '@pega/cosmos-react-core';\nimport {\n addFilter,\n getFilterInitializers,\n comparatorMap,\n FieldType\n} from 'pega-repeating-structures-core';\n\nimport LoadingIndicator from '../LoadingIndicator';\nimport RenderingEngine from '../RenderingEngine/RenderCell';\nimport useTranslate from '../../Hooks/useTranslate';\n\nconst LoadingIndicatorStyle = styled.div`\n position: absolute;\n margin: auto;\n left: 0;\n right: 0;\n`;\n\nconst CheckboxGroupStyle = styled.div`\n max-height: 11.719rem;\n overflow: auto;\n margin-top: 0.5rem;\n`;\n\nexport default function SelectFilter({ column, finishPopOver, onFilter, popoverButtonRef }) {\n const [fInput, fValue, , filterExpression] = getFilterInitializers(column);\n const [uniqueValues, setUniqueColumnValues] = useState([]);\n const [uniqueValuesFetched, setUniqueValuesFetched] = useState(false);\n // Prepopulate the select filter with values only when global filter condition matches with condition in select filter.\n const prePopulateSelectFilter = column.field.filterParams.some(\n filterParam => filterParam.key === fValue\n );\n const [selectedValues, setSelectedValues] = useState(prePopulateSelectFilter ? fInput : []);\n const [comparator, setComparator] = useState(fValue);\n\n const syncUniqueValues = useCallback(() => {\n if (!uniqueValuesFetched)\n column.getUniqueValues().then(filteredData => {\n setUniqueValuesFetched(true);\n setUniqueColumnValues(filteredData);\n });\n }, [column, uniqueValuesFetched]);\n const [translate] = useTranslate();\n useEffect(() => {\n const resultSet = new Set();\n column.data.forEach(d => {\n if (d) resultSet.add(d);\n });\n setUniqueColumnValues([...resultSet]);\n }, [column]);\n\n // set the comparator as 1st option by default only if global filter criteria does not match with select filter (prepopulateSelectFilter)\n useEffect(() => {\n if (!prePopulateSelectFilter && column.field.filterParams?.[0]?.key)\n setComparator(column.field.filterParams[0].key);\n // Should be call only on initial load thats why empty dependencies\n }, []);\n\n useEffect(() => {\n if (!column.field?.filterParams?.find(item => item.key !== 'select')) return;\n syncUniqueValues();\n }, [column, syncUniqueValues]);\n\n const onFilterChange = useCallback(({ value: comparatorType }) => {\n setComparator(comparatorType);\n }, []);\n\n const submitFilter = useCallback(() => {\n const formattedComp = comparatorMap[comparator];\n let localFilterExpression = null;\n const input =\n formattedComp === comparatorMap.isNull || formattedComp === comparatorMap.isNotNull\n ? null\n : selectedValues;\n localFilterExpression = addFilter({\n // Ignore the initial filter expression if prePopulateSelectFilter is true as user has chosen to override it.\n filterExpression: prePopulateSelectFilter ? null : filterExpression,\n comparator: formattedComp,\n column,\n input\n });\n onFilter({\n filterExp: localFilterExpression\n });\n finishPopOver();\n }, [comparator, selectedValues, filterExpression, column, onFilter, prePopulateSelectFilter]);\n\n const isSelected = useCallback(\n value => {\n return new Set(selectedValues).has(value);\n },\n [selectedValues]\n );\n\n const onSelectOrDeselect = useCallback(\n event => {\n /* Disabling operators like isAnyOf isNoneOf */\n const { value, checked } = event.target;\n const inputValue = column.field.type === FieldType.NUMBER ? parseFloat(value) : value;\n /* collecting set of unique values to sent with different operators */\n if (checked)\n setSelectedValues(\n selectedValues\n ? [...new Set([inputValue, ...selectedValues])]\n : [...new Set([inputValue])]\n );\n else {\n const index = selectedValues.findIndex(val => val === inputValue);\n const values = selectedValues.slice(0, index).concat(selectedValues.slice(index + 1));\n setSelectedValues(values);\n }\n },\n [column, selectedValues]\n );\n\n // show unique values checkboxes for selection only if comparator is other than 'IS_NULL' and 'IS_NOT_NULL'\n const showUniqueValues = ![comparatorMap.isNull, comparatorMap.isNotNull].includes(\n comparatorMap[comparator]\n );\n\n return (\n <>\n {popoverButtonRef.current ? (\n <FormDialog\n heading={translate('Filter column')}\n onSubmit={submitFilter}\n onCancel={finishPopOver}\n target={popoverButtonRef.current}\n >\n <Flex>\n <Select\n defaultValue={comparator}\n onChange={e => onFilterChange({ value: e.target.value })}\n >\n {(column.field.filterParams || []).map(opt => (\n <Option key={opt.key} value={opt.key}>\n {translate(opt.value)}\n </Option>\n ))}\n </Select>\n </Flex>\n {showUniqueValues && (\n <CheckboxGroupStyle className='popup-menu'>\n <CheckboxGroup>\n {uniqueValues.map(item => {\n const isItemSelected = isSelected(item);\n // Custom context prepared for Rendering engine should contain getExecutionContext\n // otherwise the execution context will be populated wrongly from the previous table rendering cycle.\n // For Select filter execution context should be derived from unique values that are displayed in the modal.\n const context = {\n getExecutionContext: () => {\n return {\n getValue: () => ({ [column.field.name]: item }),\n name: 'selectFilter'\n };\n },\n getValue: () => item\n };\n return (\n <Checkbox\n key={item}\n id={item}\n defaultChecked={isItemSelected}\n name={item}\n onClick={onSelectOrDeselect}\n value={item}\n label={\n <RenderingEngine {...column.getRenderingEngineProps()} context={context} />\n }\n />\n );\n })}\n </CheckboxGroup>\n <LoadingIndicatorStyle>\n <LoadingIndicator view={column.parent} show={!uniqueValuesFetched} />\n </LoadingIndicatorStyle>\n </CheckboxGroupStyle>\n )}\n </FormDialog>\n ) : null}\n </>\n );\n}\n\nSelectFilter.propTypes = {\n column: PropTypes.objectOf(PropTypes.any).isRequired,\n finishPopOver: PropTypes.func.isRequired,\n onFilter: PropTypes.func.isRequired\n};\n"]}
1
+ {"version":3,"file":"SelectFilter.js","sourceRoot":"","sources":["../../../../Core/Components/Filters/SelectFilter.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useState, useEffect, useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport { Checkbox, CheckboxGroup, Flex, Select, Option, FormDialog } from '@pega/cosmos-react-core';\nimport {\n addFilter,\n getFilterInitializers,\n comparatorMap,\n FieldType,\n isEmpty\n} from 'pega-repeating-structures-core';\n\nimport LoadingIndicator from '../LoadingIndicator';\nimport RenderingEngine from '../RenderingEngine/RenderCell';\nimport useTranslate from '../../Hooks/useTranslate';\n\nconst LoadingIndicatorStyle = styled.div`\n position: absolute;\n margin: auto;\n left: 0;\n right: 0;\n`;\n\nconst CheckboxGroupStyle = styled.div`\n max-height: 11.719rem;\n overflow: auto;\n margin-top: 0.5rem;\n`;\n\nexport default function SelectFilter({ column, finishPopOver, onFilter, popoverButtonRef }) {\n const [fInput, fValue, , filterExpression] = getFilterInitializers(column);\n const [uniqueValues, setUniqueColumnValues] = useState([]);\n const [uniqueValuesFetched, setUniqueValuesFetched] = useState(false);\n // Prepopulate the select filter with values only when global filter condition matches with condition in select filter.\n const prePopulateSelectFilter = column.field.filterParams.some(\n filterParam => filterParam.key === fValue\n );\n const [selectedValues, setSelectedValues] = useState(prePopulateSelectFilter ? fInput : []);\n const [comparator, setComparator] = useState(fValue);\n\n const syncUniqueValues = useCallback(() => {\n if (!uniqueValuesFetched)\n column.getUniqueValues().then(filteredData => {\n setUniqueValuesFetched(true);\n setUniqueColumnValues(filteredData.filter(v => !isEmpty(v)));\n });\n }, [column, uniqueValuesFetched]);\n const [translate] = useTranslate();\n useEffect(() => {\n const resultSet = new Set();\n column.data.forEach(d => {\n if (d) resultSet.add(d);\n });\n setUniqueColumnValues([...resultSet]);\n }, [column]);\n\n // set the comparator as 1st option by default only if global filter criteria does not match with select filter (prepopulateSelectFilter)\n useEffect(() => {\n if (!prePopulateSelectFilter && column.field.filterParams?.[0]?.key)\n setComparator(column.field.filterParams[0].key);\n // Should be call only on initial load thats why empty dependencies\n }, []);\n\n useEffect(() => {\n if (!column.field?.filterParams?.find(item => item.key !== 'select')) return;\n syncUniqueValues();\n }, [column, syncUniqueValues]);\n\n const onFilterChange = useCallback(({ value: comparatorType }) => {\n setComparator(comparatorType);\n }, []);\n\n const submitFilter = useCallback(() => {\n const formattedComp = comparatorMap[comparator];\n let localFilterExpression = null;\n const input =\n formattedComp === comparatorMap.isNull || formattedComp === comparatorMap.isNotNull\n ? null\n : selectedValues;\n localFilterExpression = addFilter({\n // Ignore the initial filter expression if prePopulateSelectFilter is true as user has chosen to override it.\n filterExpression: prePopulateSelectFilter ? null : filterExpression,\n comparator: formattedComp,\n column,\n input\n });\n onFilter({\n filterExp: localFilterExpression\n });\n finishPopOver();\n }, [comparator, selectedValues, filterExpression, column, onFilter, prePopulateSelectFilter]);\n\n const isSelected = useCallback(\n value => {\n return new Set(selectedValues).has(value);\n },\n [selectedValues]\n );\n\n const onSelectOrDeselect = useCallback(\n event => {\n /* Disabling operators like isAnyOf isNoneOf */\n const { value, checked } = event.target;\n const inputValue = column.field.type === FieldType.NUMBER ? parseFloat(value) : value;\n /* collecting set of unique values to sent with different operators */\n if (checked)\n setSelectedValues(\n selectedValues\n ? [...new Set([inputValue, ...selectedValues])]\n : [...new Set([inputValue])]\n );\n else {\n const index = selectedValues.findIndex(val => val === inputValue);\n const values = selectedValues.slice(0, index).concat(selectedValues.slice(index + 1));\n setSelectedValues(values);\n }\n },\n [column, selectedValues]\n );\n\n // show unique values checkboxes for selection only if comparator is other than 'IS_NULL' and 'IS_NOT_NULL'\n const showUniqueValues = ![comparatorMap.isNull, comparatorMap.isNotNull].includes(\n comparatorMap[comparator]\n );\n\n return (\n <>\n {popoverButtonRef.current ? (\n <FormDialog\n heading={translate('Filter column')}\n onSubmit={submitFilter}\n onCancel={finishPopOver}\n target={popoverButtonRef.current}\n >\n <Flex>\n <Select\n defaultValue={comparator}\n onChange={e => onFilterChange({ value: e.target.value })}\n >\n {(column.field.filterParams || []).map(opt => (\n <Option key={opt.key} value={opt.key}>\n {translate(opt.value)}\n </Option>\n ))}\n </Select>\n </Flex>\n {showUniqueValues && (\n <CheckboxGroupStyle className='popup-menu'>\n <CheckboxGroup>\n {uniqueValues.map(item => {\n const isItemSelected = isSelected(item);\n // Custom context prepared for Rendering engine should contain getExecutionContext\n // otherwise the execution context will be populated wrongly from the previous table rendering cycle.\n // For Select filter execution context should be derived from unique values that are displayed in the modal.\n const context = {\n getExecutionContext: () => {\n return {\n getValue: () => ({ [column.field.name]: item }),\n name: 'selectFilter'\n };\n },\n getValue: () => item\n };\n return (\n <Checkbox\n key={item}\n id={item}\n defaultChecked={isItemSelected}\n name={item}\n onClick={onSelectOrDeselect}\n value={item}\n label={\n <RenderingEngine {...column.getRenderingEngineProps()} context={context} />\n }\n />\n );\n })}\n </CheckboxGroup>\n <LoadingIndicatorStyle>\n <LoadingIndicator view={column.parent} show={!uniqueValuesFetched} />\n </LoadingIndicatorStyle>\n </CheckboxGroupStyle>\n )}\n </FormDialog>\n ) : null}\n </>\n );\n}\n\nSelectFilter.propTypes = {\n column: PropTypes.objectOf(PropTypes.any).isRequired,\n finishPopOver: PropTypes.func.isRequired,\n onFilter: PropTypes.func.isRequired\n};\n"]}
@@ -18,8 +18,8 @@ const DynamicColumnRight = 'Combine with right';
18
18
  const CustomizeColumn = 'Format';
19
19
  const sortActionStates = ['Sort-ascending', 'Sort-descending', 'Remove-sort'];
20
20
  const ariaSort = {
21
- asc: 'ascending',
22
- desc: 'descending'
21
+ asc: 'Ascending',
22
+ desc: 'Descending'
23
23
  };
24
24
  function getFirstLevelActions(actions) {
25
25
  return removeEmptyValues(actions.map(function mapper(s) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Components/HeaderMenu/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useCallback, useMemo, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Icon,\n Popover,\n Menu,\n useElement,\n Button,\n VisuallyHiddenText,\n createUID,\n getActiveElement,\n useOuterEvent\n} from '@pega/cosmos-react-core';\nimport { removeEmptyValues, FieldType } from 'pega-repeating-structures-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\nimport DynamicFieldConfiguration from '../DynamicFieldConfiguration';\nimport FilterComponent from '../Filters/Filter';\nimport RFColumnConfigurator from '../RFColumnConfigurator';\nimport GroupingMenu from '../Grouping/GroupingMenu';\n\nimport { getActions, customizeColumn } from './actions';\n\nconst Default = 'default';\nconst Filter = 'Filter';\nconst Grouping = 'Grouping';\nconst DynamicColumnLeft = 'Combine with left';\nconst DynamicColumnRight = 'Combine with right';\nconst CustomizeColumn = 'Format';\nconst sortActionStates = ['Sort-ascending', 'Sort-descending', 'Remove-sort'];\n\nconst ariaSort = {\n asc: 'ascending',\n desc: 'descending'\n};\n\nfunction getFirstLevelActions(actions) {\n return removeEmptyValues(\n actions.map(function mapper(s) {\n if (Array.isArray(s)) {\n return s.map(mapper);\n }\n const { id, icon, label, show = true, onClick, disabled } = s;\n if (!show) {\n return null;\n }\n return {\n 'data-test-id': id,\n primary: label,\n visual: <Icon name={icon} />,\n id: id.replaceAll(' ', '-'), // eg: Combine with right -> Combine-with-right\n onClick,\n disabled\n };\n })\n );\n}\n\nfunction getFocusables(elementRef) {\n return elementRef.querySelectorAll(\n 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]):not([readonly]), input:not([disabled]):not([readonly]), select:not([disabled]):not([readonly])'\n );\n}\n\nfunction headerMenuTabHandler(e, popperRef) {\n const focusables = getFocusables(popperRef);\n const { 0: firstFocusable, [focusables.length - 1]: lastFocusable } = focusables;\n const activeEl = getActiveElement();\n\n if (!e.shiftKey && (activeEl === popperRef || activeEl === lastFocusable)) {\n firstFocusable?.focus();\n e.preventDefault();\n } else if (e.shiftKey && (activeEl === popperRef || activeEl === firstFocusable)) {\n lastFocusable?.focus();\n e.preventDefault();\n }\n}\n\nexport default function HeaderMenu({ column, popoverButtonRef }) {\n const view = column.parent;\n const {\n state: { clearColFilter }\n } = view;\n const [translate] = useTranslate();\n const { field } = column;\n const uid = createUID();\n const sortDescriptionId = `${uid}_description`;\n const isClearColFilter = clearColFilter === field.id;\n const sort = ariaSort[column?.getSortProperties()?.sortOrder];\n const sortSequence = column?.getSortProperties()?.sortSequence;\n const filtered = column?.filtered;\n\n const [moreContent, setMoreContent] = useState(Default);\n const [forceShowMenu, setForceShowMenu] = useState(false);\n const [sortDescription, setSortDescription] = useState('');\n const [popperRef, setPopperRef] = useElement();\n\n const finishPopOver = useCallback(() => {\n if (moreContent === Filter && isClearColFilter) {\n view.type.clearFilter(null);\n }\n if (popperRef && popoverButtonRef.current) {\n popoverButtonRef.current.focus();\n }\n setForceShowMenu(false);\n }, [moreContent, isClearColFilter, view, popperRef, popoverButtonRef]);\n\n const onUndoHierarchy = useCallback(() => {\n column.parent?.type.clearHierarchicalGroup();\n finishPopOver();\n }, [column, finishPopOver]);\n\n useEffect(() => {\n let sortStr = '';\n if (sort) sortStr = `${translate('Sorted')} ${translate(sort)}`;\n if (sortSequence) sortStr += ` ${translate('Sort priority')} ${sortSequence}`;\n if (filtered) sortStr += ` ${translate('Filtered column')}`;\n setSortDescription(sortStr);\n }, [sort, sortSequence, filtered, translate]);\n\n const actions = useMemo(\n () =>\n getActions({\n column,\n setMoreContent,\n onUndoHierarchy,\n translate,\n finishPopOver\n }),\n [column, onUndoHierarchy, translate, finishPopOver]\n );\n\n const firstLevelActions = useMemo(() => getFirstLevelActions(actions), [actions]);\n\n const content = useMemo(() => {\n switch (moreContent) {\n case Filter:\n return (\n <FilterComponent\n column={column}\n finishPopOver={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n />\n );\n case Grouping:\n return <GroupingMenu column={column} finishPopOver={finishPopOver} />;\n case DynamicColumnLeft:\n case DynamicColumnRight:\n return (\n <DynamicFieldConfiguration\n column={column}\n onSubmit={(title, templateName, bHideColumns) => {\n column.applyMerge(\n moreContent === DynamicColumnLeft ? 'left' : 'right',\n title,\n templateName,\n bHideColumns\n );\n finishPopOver();\n if (templateName === 'multiline') view.type.applyRowHeight('4');\n }}\n onCancel={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n heading={`Combine with ${moreContent === DynamicColumnLeft ? 'left' : 'right'}`}\n />\n );\n case CustomizeColumn:\n return (\n <RFColumnConfigurator\n column={column}\n finishPopOver={finishPopOver}\n onSubmit={(rfConfig, columnAlias, displayMode) => {\n customizeColumn(column, rfConfig, displayMode, columnAlias, column.alias);\n }}\n onCancel={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n />\n );\n default:\n return (\n <Menu\n scrollAt='400'\n data-test-id='action-menu'\n items={firstLevelActions.flat()}\n className='action-menu'\n focusControlEl={popoverButtonRef.current}\n onItemClick={id => {\n // NVDA/JAWS reading out the stale sort order on sort action\n // Removing intermediate sort state and adding back when we receive it from column prop\n if (sortActionStates.includes(id)) {\n setSortDescription('');\n }\n }}\n />\n );\n }\n }, [moreContent, column, finishPopOver, popoverButtonRef, firstLevelActions, view.type]);\n\n useOuterEvent('mousedown', [popperRef], () => {\n if (\n moreContent !== Filter &&\n moreContent !== 'Format' &&\n moreContent !== 'Combine with left' &&\n moreContent !== 'Combine with right'\n ) {\n finishPopOver();\n }\n });\n\n useEffect(() => {\n if (isClearColFilter) {\n setMoreContent(Filter);\n setForceShowMenu(true);\n }\n }, [isClearColFilter]);\n\n useEffect(() => {\n // Focus the first focusable element in nested menu content eg: filter,customize column etc\n if (moreContent && popperRef && moreContent !== 'default') {\n getFocusables(popperRef)?.[0]?.focus();\n }\n }, [forceShowMenu, popperRef, moreContent]);\n\n // Don't show the menu for columns which are of action type eg: rowActionMenu, rowDragDrop etc\n if (firstLevelActions.flat().length === 0 || field.type === FieldType.ACTION_FIELD_TYPE)\n return null;\n\n return (\n <div className='header-menu'>\n <Button\n variant='simple'\n className='button-more'\n compact\n icon\n aria-expanded={forceShowMenu}\n aria-label={`${translate('Actions')} - ${column.categorizedHeaderLabel}`}\n label={!forceShowMenu ? `${translate('Actions')}` : undefined}\n ref={popoverButtonRef}\n aria-describedby={sortDescriptionId}\n onClick={() => {\n setMoreContent('default');\n setForceShowMenu(true);\n }}\n onKeyDown={e => {\n if (forceShowMenu && e.key !== 'Enter') {\n // TODO remove preventDefault when popover steals the focus into its content\n e.preventDefault();\n }\n if (e.key === 'Escape' && forceShowMenu) {\n e.stopPropagation();\n setForceShowMenu(false);\n setPopperRef(null);\n }\n }}\n >\n <Icon name='more' />\n </Button>\n {forceShowMenu &&\n createPortal(\n <Popover\n className='popper'\n ref={setPopperRef}\n arrow\n target={popoverButtonRef.current}\n placement='bottom-start'\n hideOnTargetHidden\n // TODO: Consume FormDialog cosmos component in nested menu option renderers filter, group etc\n onKeyDown={e => {\n if (e.key === 'Escape' && forceShowMenu) {\n setForceShowMenu(false);\n setPopperRef(null);\n popoverButtonRef.current.focus();\n }\n if (e.key === 'Tab') {\n headerMenuTabHandler(e, popperRef);\n }\n }}\n >\n {content}\n </Popover>,\n column.parent.getDomContainer()\n )}\n\n <VisuallyHiddenText id={sortDescriptionId} aria-hidden>\n {sortDescription}\n </VisuallyHiddenText>\n </div>\n );\n}\n\nHeaderMenu.propTypes = {\n column: PropTypes.objectOf(PropTypes.any),\n popoverButtonRef: PropTypes.objectOf(PropTypes.any)\n};\n\nHeaderMenu.defaultProps = {\n column: {},\n popoverButtonRef: {}\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Components/HeaderMenu/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useCallback, useMemo, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Icon,\n Popover,\n Menu,\n useElement,\n Button,\n VisuallyHiddenText,\n createUID,\n getActiveElement,\n useOuterEvent\n} from '@pega/cosmos-react-core';\nimport { removeEmptyValues, FieldType } from 'pega-repeating-structures-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\nimport DynamicFieldConfiguration from '../DynamicFieldConfiguration';\nimport FilterComponent from '../Filters/Filter';\nimport RFColumnConfigurator from '../RFColumnConfigurator';\nimport GroupingMenu from '../Grouping/GroupingMenu';\n\nimport { getActions, customizeColumn } from './actions';\n\nconst Default = 'default';\nconst Filter = 'Filter';\nconst Grouping = 'Grouping';\nconst DynamicColumnLeft = 'Combine with left';\nconst DynamicColumnRight = 'Combine with right';\nconst CustomizeColumn = 'Format';\nconst sortActionStates = ['Sort-ascending', 'Sort-descending', 'Remove-sort'];\n\nconst ariaSort = {\n asc: 'Ascending',\n desc: 'Descending'\n};\n\nfunction getFirstLevelActions(actions) {\n return removeEmptyValues(\n actions.map(function mapper(s) {\n if (Array.isArray(s)) {\n return s.map(mapper);\n }\n const { id, icon, label, show = true, onClick, disabled } = s;\n if (!show) {\n return null;\n }\n return {\n 'data-test-id': id,\n primary: label,\n visual: <Icon name={icon} />,\n id: id.replaceAll(' ', '-'), // eg: Combine with right -> Combine-with-right\n onClick,\n disabled\n };\n })\n );\n}\n\nfunction getFocusables(elementRef) {\n return elementRef.querySelectorAll(\n 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]):not([readonly]), input:not([disabled]):not([readonly]), select:not([disabled]):not([readonly])'\n );\n}\n\nfunction headerMenuTabHandler(e, popperRef) {\n const focusables = getFocusables(popperRef);\n const { 0: firstFocusable, [focusables.length - 1]: lastFocusable } = focusables;\n const activeEl = getActiveElement();\n\n if (!e.shiftKey && (activeEl === popperRef || activeEl === lastFocusable)) {\n firstFocusable?.focus();\n e.preventDefault();\n } else if (e.shiftKey && (activeEl === popperRef || activeEl === firstFocusable)) {\n lastFocusable?.focus();\n e.preventDefault();\n }\n}\n\nexport default function HeaderMenu({ column, popoverButtonRef }) {\n const view = column.parent;\n const {\n state: { clearColFilter }\n } = view;\n const [translate] = useTranslate();\n const { field } = column;\n const uid = createUID();\n const sortDescriptionId = `${uid}_description`;\n const isClearColFilter = clearColFilter === field.id;\n const sort = ariaSort[column?.getSortProperties()?.sortOrder];\n const sortSequence = column?.getSortProperties()?.sortSequence;\n const filtered = column?.filtered;\n\n const [moreContent, setMoreContent] = useState(Default);\n const [forceShowMenu, setForceShowMenu] = useState(false);\n const [sortDescription, setSortDescription] = useState('');\n const [popperRef, setPopperRef] = useElement();\n\n const finishPopOver = useCallback(() => {\n if (moreContent === Filter && isClearColFilter) {\n view.type.clearFilter(null);\n }\n if (popperRef && popoverButtonRef.current) {\n popoverButtonRef.current.focus();\n }\n setForceShowMenu(false);\n }, [moreContent, isClearColFilter, view, popperRef, popoverButtonRef]);\n\n const onUndoHierarchy = useCallback(() => {\n column.parent?.type.clearHierarchicalGroup();\n finishPopOver();\n }, [column, finishPopOver]);\n\n useEffect(() => {\n let sortStr = '';\n if (sort) sortStr = `${translate('Sorted')} ${translate(sort)}`;\n if (sortSequence) sortStr += ` ${translate('Sort priority')} ${sortSequence}`;\n if (filtered) sortStr += ` ${translate('Filtered column')}`;\n setSortDescription(sortStr);\n }, [sort, sortSequence, filtered, translate]);\n\n const actions = useMemo(\n () =>\n getActions({\n column,\n setMoreContent,\n onUndoHierarchy,\n translate,\n finishPopOver\n }),\n [column, onUndoHierarchy, translate, finishPopOver]\n );\n\n const firstLevelActions = useMemo(() => getFirstLevelActions(actions), [actions]);\n\n const content = useMemo(() => {\n switch (moreContent) {\n case Filter:\n return (\n <FilterComponent\n column={column}\n finishPopOver={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n />\n );\n case Grouping:\n return <GroupingMenu column={column} finishPopOver={finishPopOver} />;\n case DynamicColumnLeft:\n case DynamicColumnRight:\n return (\n <DynamicFieldConfiguration\n column={column}\n onSubmit={(title, templateName, bHideColumns) => {\n column.applyMerge(\n moreContent === DynamicColumnLeft ? 'left' : 'right',\n title,\n templateName,\n bHideColumns\n );\n finishPopOver();\n if (templateName === 'multiline') view.type.applyRowHeight('4');\n }}\n onCancel={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n heading={`Combine with ${moreContent === DynamicColumnLeft ? 'left' : 'right'}`}\n />\n );\n case CustomizeColumn:\n return (\n <RFColumnConfigurator\n column={column}\n finishPopOver={finishPopOver}\n onSubmit={(rfConfig, columnAlias, displayMode) => {\n customizeColumn(column, rfConfig, displayMode, columnAlias, column.alias);\n }}\n onCancel={finishPopOver}\n popoverButtonRef={popoverButtonRef}\n />\n );\n default:\n return (\n <Menu\n scrollAt='400'\n data-test-id='action-menu'\n items={firstLevelActions.flat()}\n className='action-menu'\n focusControlEl={popoverButtonRef.current}\n onItemClick={id => {\n // NVDA/JAWS reading out the stale sort order on sort action\n // Removing intermediate sort state and adding back when we receive it from column prop\n if (sortActionStates.includes(id)) {\n setSortDescription('');\n }\n }}\n />\n );\n }\n }, [moreContent, column, finishPopOver, popoverButtonRef, firstLevelActions, view.type]);\n\n useOuterEvent('mousedown', [popperRef], () => {\n if (\n moreContent !== Filter &&\n moreContent !== 'Format' &&\n moreContent !== 'Combine with left' &&\n moreContent !== 'Combine with right'\n ) {\n finishPopOver();\n }\n });\n\n useEffect(() => {\n if (isClearColFilter) {\n setMoreContent(Filter);\n setForceShowMenu(true);\n }\n }, [isClearColFilter]);\n\n useEffect(() => {\n // Focus the first focusable element in nested menu content eg: filter,customize column etc\n if (moreContent && popperRef && moreContent !== 'default') {\n getFocusables(popperRef)?.[0]?.focus();\n }\n }, [forceShowMenu, popperRef, moreContent]);\n\n // Don't show the menu for columns which are of action type eg: rowActionMenu, rowDragDrop etc\n if (firstLevelActions.flat().length === 0 || field.type === FieldType.ACTION_FIELD_TYPE)\n return null;\n\n return (\n <div className='header-menu'>\n <Button\n variant='simple'\n className='button-more'\n compact\n icon\n aria-expanded={forceShowMenu}\n aria-label={`${translate('Actions')} - ${column.categorizedHeaderLabel}`}\n label={!forceShowMenu ? `${translate('Actions')}` : undefined}\n ref={popoverButtonRef}\n aria-describedby={sortDescriptionId}\n onClick={() => {\n setMoreContent('default');\n setForceShowMenu(true);\n }}\n onKeyDown={e => {\n if (forceShowMenu && e.key !== 'Enter') {\n // TODO remove preventDefault when popover steals the focus into its content\n e.preventDefault();\n }\n if (e.key === 'Escape' && forceShowMenu) {\n e.stopPropagation();\n setForceShowMenu(false);\n setPopperRef(null);\n }\n }}\n >\n <Icon name='more' />\n </Button>\n {forceShowMenu &&\n createPortal(\n <Popover\n className='popper'\n ref={setPopperRef}\n arrow\n target={popoverButtonRef.current}\n placement='bottom-start'\n hideOnTargetHidden\n // TODO: Consume FormDialog cosmos component in nested menu option renderers filter, group etc\n onKeyDown={e => {\n if (e.key === 'Escape' && forceShowMenu) {\n setForceShowMenu(false);\n setPopperRef(null);\n popoverButtonRef.current.focus();\n }\n if (e.key === 'Tab') {\n headerMenuTabHandler(e, popperRef);\n }\n }}\n >\n {content}\n </Popover>,\n column.parent.getDomContainer()\n )}\n\n <VisuallyHiddenText id={sortDescriptionId} aria-hidden>\n {sortDescription}\n </VisuallyHiddenText>\n </div>\n );\n}\n\nHeaderMenu.propTypes = {\n column: PropTypes.objectOf(PropTypes.any),\n popoverButtonRef: PropTypes.objectOf(PropTypes.any)\n};\n\nHeaderMenu.defaultProps = {\n column: {},\n popoverButtonRef: {}\n};\n"]}
@@ -7,7 +7,7 @@ import getMenuItemsFromColumns from './utils/utils';
7
7
  function FieldSelector(props) {
8
8
  const { value, onChange, disabled = false, readOnly, fieldProp, label, labelHidden, fieldDefs } = props;
9
9
  const [translate] = useTranslate();
10
- const items = useMemo(() => getMenuItemsFromColumns(fieldDefs, fieldProp, value), [fieldDefs, value, fieldProp]);
10
+ const items = useMemo(() => getMenuItemsFromColumns(fieldDefs, fieldProp, { selectedField: value }), [fieldDefs, value, fieldProp]);
11
11
  const selected = useMemo(() => {
12
12
  const selectedItem = menuHelpers.getItem(items, value);
13
13
  return selectedItem ? { id: selectedItem.id, text: selectedItem.primary } : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"FieldSelector.js","sourceRoot":"","sources":["../../../../Core/Components/Toolbar/FieldSelector.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ComboBox, menuHelpers } from '@pega/cosmos-react-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\n\nimport getMenuItemsFromColumns from './utils/utils';\n\nfunction FieldSelector(props) {\n const {\n value,\n onChange,\n disabled = false,\n readOnly,\n fieldProp,\n label,\n labelHidden,\n fieldDefs\n } = props;\n const [translate] = useTranslate();\n\n const items = useMemo(\n () => getMenuItemsFromColumns(fieldDefs, fieldProp, value),\n [fieldDefs, value, fieldProp]\n );\n const selected = useMemo(() => {\n const selectedItem = menuHelpers.getItem(items, value);\n return selectedItem ? { id: selectedItem.id, text: selectedItem.primary } : undefined;\n }, [items, value]);\n\n const [filterValue, setFilterValue] = useState(undefined); // NOTE: `undefined` is needed to show the current selection\n const filterRegex = useMemo(() => {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n // Literal string match from input, not user regex input.\n return filterValue\n ? new RegExp(filterValue.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'i')\n : undefined;\n }, [filterValue]);\n\n const filteredItems = useMemo(() => {\n return filterRegex\n ? menuHelpers.flatten(items).filter(({ primary }) => filterRegex.test(primary))\n : items;\n }, [filterRegex, items]);\n\n return (\n <ComboBox\n label={label}\n labelHidden={labelHidden}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={translate('Select field')}\n mode='single-select'\n value={filterValue ?? ''}\n testId='FieldSelector'\n onChange={ev => {\n const newValue = ev.target.value;\n if (!newValue) {\n onChange('');\n }\n setFilterValue(newValue);\n }}\n onBlur={() => {\n setFilterValue(undefined);\n }}\n selected={selected ? { items: selected } : undefined}\n menu={{\n items: filteredItems,\n mode: 'single-select',\n accent: filterRegex,\n emptyText: 'No items',\n onItemClick: id => {\n if (disabled) return;\n onChange(id);\n setFilterValue(undefined); // To show the selected value in the input\n }\n }}\n onDropdownButtonClick={() => {}}\n />\n );\n}\n\nFieldSelector.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n fieldProp: PropTypes.string,\n label: PropTypes.string.isRequired,\n labelHidden: PropTypes.bool,\n fieldDefs: PropTypes.arrayOf(PropTypes.object).isRequired\n};\n\nexport default FieldSelector;\n"]}
1
+ {"version":3,"file":"FieldSelector.js","sourceRoot":"","sources":["../../../../Core/Components/Toolbar/FieldSelector.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ComboBox, menuHelpers } from '@pega/cosmos-react-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\n\nimport getMenuItemsFromColumns from './utils/utils';\n\nfunction FieldSelector(props) {\n const {\n value,\n onChange,\n disabled = false,\n readOnly,\n fieldProp,\n label,\n labelHidden,\n fieldDefs\n } = props;\n const [translate] = useTranslate();\n\n const items = useMemo(\n () => getMenuItemsFromColumns(fieldDefs, fieldProp, { selectedField: value }),\n [fieldDefs, value, fieldProp]\n );\n const selected = useMemo(() => {\n const selectedItem = menuHelpers.getItem(items, value);\n return selectedItem ? { id: selectedItem.id, text: selectedItem.primary } : undefined;\n }, [items, value]);\n\n const [filterValue, setFilterValue] = useState(undefined); // NOTE: `undefined` is needed to show the current selection\n const filterRegex = useMemo(() => {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n // Literal string match from input, not user regex input.\n return filterValue\n ? new RegExp(filterValue.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'i')\n : undefined;\n }, [filterValue]);\n\n const filteredItems = useMemo(() => {\n return filterRegex\n ? menuHelpers.flatten(items).filter(({ primary }) => filterRegex.test(primary))\n : items;\n }, [filterRegex, items]);\n\n return (\n <ComboBox\n label={label}\n labelHidden={labelHidden}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={translate('Select field')}\n mode='single-select'\n value={filterValue ?? ''}\n testId='FieldSelector'\n onChange={ev => {\n const newValue = ev.target.value;\n if (!newValue) {\n onChange('');\n }\n setFilterValue(newValue);\n }}\n onBlur={() => {\n setFilterValue(undefined);\n }}\n selected={selected ? { items: selected } : undefined}\n menu={{\n items: filteredItems,\n mode: 'single-select',\n accent: filterRegex,\n emptyText: 'No items',\n onItemClick: id => {\n if (disabled) return;\n onChange(id);\n setFilterValue(undefined); // To show the selected value in the input\n }\n }}\n onDropdownButtonClick={() => {}}\n />\n );\n}\n\nFieldSelector.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n fieldProp: PropTypes.string,\n label: PropTypes.string.isRequired,\n labelHidden: PropTypes.bool,\n fieldDefs: PropTypes.arrayOf(PropTypes.object).isRequired\n};\n\nexport default FieldSelector;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useFilter.d.ts","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/hooks/useFilter.jsx"],"names":[],"mappings":";AAQA;;;;;;;cAoDC"}
1
+ {"version":3,"file":"useFilter.d.ts","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/hooks/useFilter.jsx"],"names":[],"mappings":";AAQA;;;;;;;cAyDC"}
@@ -7,7 +7,10 @@ import { TOOLBAR_FEATURES } from '../../../constants';
7
7
  const useFilter = ({ view }) => {
8
8
  const { state: { filterExpression, clearColFilter } = {}, type: { clearFilter, applyFilter } } = view;
9
9
  const displayFilter = view.shouldDisplayFeature(TOOLBAR_FEATURES.FILTER);
10
- const formattedColumns = useMemo(() => getMenuItemsFromColumns(view.getFieldDefs()?.filter(c => c.filter), 'name'), [view]);
10
+ const viewFieldDefs = view.getFieldDefs();
11
+ const formattedColumns = useMemo(() => getMenuItemsFromColumns(viewFieldDefs?.filter(c => c.filter), 'name', {
12
+ columns: view.columns
13
+ }), [viewFieldDefs, view.columns]);
11
14
  const validRhsTypes = useValidRhsTypes(view);
12
15
  const handle = useRef(null);
13
16
  const { conditions } = splitConditionTree(filterExpression);
@@ -1 +1 @@
1
- {"version":3,"file":"useFilter.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/hooks/useFilter.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE5F,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,uBAAuB,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7B,MAAM,EACJ,KAAK,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,EAAE,EAChD,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EACnC,GAAG,IAAI,CAAC;IACT,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,uBAAuB,CACrB,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAC1C,MAAM,CACP,EACH,CAAC,IAAI,CAAC,CACP,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAE9C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,IAAI,CAAC;QAElC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,WAAW,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACzC,IAAI,cAAc;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,cAAc;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,OAAO,CACL,KAAC,gBAAgB,IACf,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,gBAAgB,IAAI,SAAS,EACxC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EACtC,WAAW,QACX,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,OAAO;QACL,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvD,QAAQ,EAAE,cAAc;QACxB,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { useCallback, useRef, useMemo } from 'react';\n\nimport { ConditionBuilder, splitConditionTree } from '@pega/cosmos-react-condition-builder';\n\nimport useValidRhsTypes from '../../Filters/Hooks/useValidRhsTypes';\nimport getMenuItemsFromColumns from '../utils/utils';\nimport { TOOLBAR_FEATURES } from '../../../constants';\n\nconst useFilter = ({ view }) => {\n const {\n state: { filterExpression, clearColFilter } = {},\n type: { clearFilter, applyFilter }\n } = view;\n const displayFilter = view.shouldDisplayFeature(TOOLBAR_FEATURES.FILTER);\n const formattedColumns = useMemo(\n () =>\n getMenuItemsFromColumns(\n view.getFieldDefs()?.filter(c => c.filter),\n 'name'\n ),\n [view]\n );\n const validRhsTypes = useValidRhsTypes(view);\n const handle = useRef(null);\n const { conditions } = splitConditionTree(filterExpression);\n const filters = Object.keys(conditions) || [];\n\n const onSubmit = useCallback(() => {\n if (!handle?.current) return true;\n\n const [valid, newCondition] = handle.current.getCondition();\n if (!valid) return false;\n\n applyFilter({ filterExp: newCondition });\n if (clearColFilter) clearFilter(null);\n return true;\n }, [applyFilter, clearFilter, clearColFilter]);\n\n const onCancel = useCallback(() => {\n if (clearColFilter) clearFilter(null);\n }, [clearColFilter, clearFilter]);\n const filterRenderer = useCallback(() => {\n return (\n <ConditionBuilder\n fields={formattedColumns}\n condition={filterExpression || undefined}\n validRhsTypes={validRhsTypes}\n dateFunctions={view.meta.dateFunctions} // Could be undefined\n disallowNOT\n handle={handle}\n />\n );\n }, [filterExpression, formattedColumns, validRhsTypes, view.meta.dateFunctions]);\n if (!displayFilter) return;\n return {\n count: filters?.length > 0 ? filters.length : undefined,\n renderer: filterRenderer,\n onCancel,\n onSubmit\n };\n};\n\nexport default useFilter;\n"]}
1
+ {"version":3,"file":"useFilter.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/hooks/useFilter.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useRef, useMemo } from 'react';\n\nimport { ConditionBuilder, splitConditionTree } from '@pega/cosmos-react-condition-builder';\n\nimport useValidRhsTypes from '../../Filters/Hooks/useValidRhsTypes';\nimport getMenuItemsFromColumns from '../utils/utils';\nimport { TOOLBAR_FEATURES } from '../../../constants';\n\nconst useFilter = ({ view }) => {\n const {\n state: { filterExpression, clearColFilter } = {},\n type: { clearFilter, applyFilter }\n } = view;\n const displayFilter = view.shouldDisplayFeature(TOOLBAR_FEATURES.FILTER);\n const viewFieldDefs = view.getFieldDefs();\n const formattedColumns = useMemo(\n () =>\n getMenuItemsFromColumns(\n viewFieldDefs?.filter(c => c.filter),\n 'name',\n {\n columns: view.columns\n }\n ),\n [viewFieldDefs, view.columns]\n );\n\n const validRhsTypes = useValidRhsTypes(view);\n const handle = useRef(null);\n const { conditions } = splitConditionTree(filterExpression);\n const filters = Object.keys(conditions) || [];\n\n const onSubmit = useCallback(() => {\n if (!handle?.current) return true;\n\n const [valid, newCondition] = handle.current.getCondition();\n if (!valid) return false;\n\n applyFilter({ filterExp: newCondition });\n if (clearColFilter) clearFilter(null);\n return true;\n }, [applyFilter, clearFilter, clearColFilter]);\n\n const onCancel = useCallback(() => {\n if (clearColFilter) clearFilter(null);\n }, [clearColFilter, clearFilter]);\n const filterRenderer = useCallback(() => {\n return (\n <ConditionBuilder\n fields={formattedColumns}\n condition={filterExpression || undefined}\n validRhsTypes={validRhsTypes}\n dateFunctions={view.meta.dateFunctions} // Could be undefined\n disallowNOT\n handle={handle}\n />\n );\n }, [filterExpression, formattedColumns, validRhsTypes, view.meta.dateFunctions]);\n if (!displayFilter) return;\n return {\n count: filters?.length > 0 ? filters.length : undefined,\n renderer: filterRenderer,\n onCancel,\n onSubmit\n };\n};\n\nexport default useFilter;\n"]}
@@ -2,9 +2,11 @@ export default getMenuItemsFromColumns;
2
2
  /**
3
3
  * returns copy of embedded property's leafNode model from store or null
4
4
  * @function getMenuItemsFromColumns
5
- * @param {array} columns columns array containing each column object
5
+ * @param fieldDefs - field definitions to build menu items from
6
6
  * @param {string} fieldProp value for id prop(either 'name' of 'id')
7
- * @param {string} selectedField field which is already selected as part of sort/group/filter action
7
+ * @param options.selectedField - field id that is already selected (for sort/group/filter actions)
8
+ * @param options.columns - live column objects that expose `field.filterPickList` and `getUniqueValues()`
9
+ * @param options.defaultType - fallback field type if not specified on the field definition
8
10
  * @returns {array} returns an array of objects where each object is one category
9
11
  *
10
12
  * @example <caption>Example for getMenuItemsFromColumns.</caption>
@@ -28,24 +30,43 @@ export default getMenuItemsFromColumns;
28
30
  id: '3',
29
31
  category: [{ label: 'Profile' }],
30
32
  sort: true
33
+ },
34
+ {
35
+ type: 'text',
36
+ name: 'pyOperatorName',
37
+ label: 'Operator name',
38
+ id: '4',
39
+ filterPicklist:true
31
40
  }
32
41
  ]
33
42
  *
34
- * getMenuItemsFromColumns(columns) returns :
43
+ * getMenuItemsFromColumns(fieldDefs) returns :
35
44
  * [
36
45
  {
37
- id: 'ID',
46
+ id: 'pyID',
38
47
  primary: ID,
39
48
  items: undefined,
40
49
  selected: undefined
41
50
  },
42
51
  {
43
- id: ‘Bugs Class’,
44
- primary: ‘Bugs Class’,
52
+ id: ‘pyLabel’,
53
+ primary: ‘Name’,
45
54
  selected: undefined,
46
55
  items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]
56
+ },
57
+ {
58
+ id: 'pyOperatorName',
59
+ primary: 'Operator name',
60
+ selected: undefined,
61
+ possibleValues: function() {
62
+ // Fetch unique values for Operator name column
63
+ }
47
64
  }
65
+
48
66
  ]
49
67
  */
50
- declare function getMenuItemsFromColumns(fieldDefs: any, fieldProp: string, selectedField: string, defaultType?: "text"): array;
68
+ declare function getMenuItemsFromColumns(fieldDefs: any, fieldProp: string, { selectedField, columns, defaultType }?: {
69
+ columns?: never[] | undefined;
70
+ defaultType?: "text" | undefined;
71
+ }): array;
51
72
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":";AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CE;AAEF,oEA7CW,MAAM,iBACN,MAAM,yBACJ,KAAK,CAwEjB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":";AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEE;AAEF,oEA/DW,MAAM;;;IAIJ,KAAK,CA2GjB"}
@@ -30,9 +30,11 @@ const prepareCategoryItems = (categories, items) => {
30
30
  /**
31
31
  * returns copy of embedded property's leafNode model from store or null
32
32
  * @function getMenuItemsFromColumns
33
- * @param {array} columns columns array containing each column object
33
+ * @param fieldDefs - field definitions to build menu items from
34
34
  * @param {string} fieldProp value for id prop(either 'name' of 'id')
35
- * @param {string} selectedField field which is already selected as part of sort/group/filter action
35
+ * @param options.selectedField - field id that is already selected (for sort/group/filter actions)
36
+ * @param options.columns - live column objects that expose `field.filterPickList` and `getUniqueValues()`
37
+ * @param options.defaultType - fallback field type if not specified on the field definition
36
38
  * @returns {array} returns an array of objects where each object is one category
37
39
  *
38
40
  * @example <caption>Example for getMenuItemsFromColumns.</caption>
@@ -56,37 +58,68 @@ const prepareCategoryItems = (categories, items) => {
56
58
  id: '3',
57
59
  category: [{ label: 'Profile' }],
58
60
  sort: true
61
+ },
62
+ {
63
+ type: 'text',
64
+ name: 'pyOperatorName',
65
+ label: 'Operator name',
66
+ id: '4',
67
+ filterPicklist:true
59
68
  }
60
69
  ]
61
70
  *
62
- * getMenuItemsFromColumns(columns) returns :
71
+ * getMenuItemsFromColumns(fieldDefs) returns :
63
72
  * [
64
73
  {
65
- id: 'ID',
74
+ id: 'pyID',
66
75
  primary: ID,
67
76
  items: undefined,
68
77
  selected: undefined
69
78
  },
70
79
  {
71
- id: ‘Bugs Class’,
72
- primary: ‘Bugs Class’,
80
+ id: ‘pyLabel’,
81
+ primary: ‘Name’,
73
82
  selected: undefined,
74
83
  items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]
84
+ },
85
+ {
86
+ id: 'pyOperatorName',
87
+ primary: 'Operator name',
88
+ selected: undefined,
89
+ possibleValues: function() {
90
+ // Fetch unique values for Operator name column
91
+ }
75
92
  }
93
+
76
94
  ]
77
95
  */
78
- function getMenuItemsFromColumns(fieldDefs, fieldProp, selectedField, defaultType = FieldType.TEXT) {
96
+ function getMenuItemsFromColumns(fieldDefs, fieldProp, { selectedField, columns = [], defaultType = FieldType.TEXT } = {}) {
79
97
  const items = [];
80
98
  let categoryArr = [];
81
99
  if (!fieldDefs) {
82
100
  return items;
83
101
  }
84
102
  fieldDefs.forEach(field => {
103
+ const filterPickListColumn = field.filterPickList && columns?.find(c => c.field.name === field[fieldProp]);
85
104
  const leafCategoryItem = {
86
105
  id: field[fieldProp],
87
106
  primary: field.label,
88
107
  type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],
89
- selected: field.id === selectedField
108
+ selected: field.id === selectedField,
109
+ // Attach possibleValues for picklist columns (e.g. UserReference, WorkStatus)
110
+ // TODO primary should be renderer rather string for user reference fields to show display value instead of id in condition builder.
111
+ ...(filterPickListColumn && {
112
+ possibleValues: args => filterPickListColumn.getUniqueValues().then(records => {
113
+ const filtered = records
114
+ .filter(id => id !== null && id !== undefined)
115
+ .map(id => ({ id, primary: id }));
116
+ // ConditionBuilder calls with { ids } to resolve display text for pre-selected values
117
+ if (args && 'ids' in args) {
118
+ return filtered.filter(({ id }) => args.ids?.includes(id));
119
+ }
120
+ return filtered;
121
+ })
122
+ })
90
123
  };
91
124
  categoryArr = items;
92
125
  if (field.category) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;IACnC,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7C,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;IACjD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAE3F,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,eAAe,GAAG,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,mBAAmB,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CE;AAEF,SAAS,uBAAuB,CAC9B,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,GAAG,SAAS,CAAC,IAAI;IAE5B,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,gBAAgB,GAAG;YACvB,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;YAChE,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,aAAa;SACrC,CAAC;QAEF,WAAW,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AACD,eAAe,uBAAuB,CAAC","sourcesContent":["import { FieldType } from 'pega-repeating-structures-core';\n\nimport { typeMap } from '../../Filters/config';\n\nconst getCategoryItems = (id, arr) => {\n for (const obj of arr) {\n if (obj.id === id && obj.items) {\n return obj.items;\n }\n }\n};\n\nconst prepareCategoryInfo = (id, label, arr) => {\n const items = [];\n arr.push({ id, primary: label, items });\n return items;\n};\n\nconst prepareCategoryItems = (categories, items) => {\n let curPath = '';\n let leafCategoryArr = items;\n for (let i = 0; i < categories.length; i += 1) {\n curPath = i > 0 ? `${curPath}.${categories[i].label}-${i}` : `${categories[i].label}-${i}`;\n\n const existingCategoryArr = getCategoryItems(curPath, leafCategoryArr);\n if (!existingCategoryArr) {\n leafCategoryArr = prepareCategoryInfo(curPath, categories[i].label, leafCategoryArr);\n } else {\n leafCategoryArr = existingCategoryArr;\n }\n }\n return leafCategoryArr;\n};\n\n/**\n * returns copy of embedded property's leafNode model from store or null\n * @function getMenuItemsFromColumns\n * @param {array} columns columns array containing each column object\n * @param {string} fieldProp value for id prop(either 'name' of 'id')\n * @param {string} selectedField field which is already selected as part of sort/group/filter action\n * @returns {array} returns an array of objects where each object is one category\n *\n * @example <caption>Example for getMenuItemsFromColumns.</caption>\n * We have two fields named ID and Priority where ID does not belong to any category and priority belongs to Bugs class category\n *\n * columns example(fieldDefs) :\n * [\n * {\n filter: true,\n type: 'text',\n name: 'pyID',\n label: 'ID',\n id: '2',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyLabel',\n label: 'Name',\n id: '3',\n category: [{ label: 'Profile' }],\n sort: true\n }\n ]\n *\n * getMenuItemsFromColumns(columns) returns :\n * [\n {\n id: 'ID',\n primary: ID,\n items: undefined,\n selected: undefined\n },\n {\n id: ‘Bugs Class’,\n primary: ‘Bugs Class’,\n selected: undefined,\n items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]\n }\n ]\n*/\n\nfunction getMenuItemsFromColumns(\n fieldDefs,\n fieldProp,\n selectedField,\n defaultType = FieldType.TEXT\n) {\n const items = [];\n let categoryArr = [];\n\n if (!fieldDefs) {\n return items;\n }\n\n fieldDefs.forEach(field => {\n const leafCategoryItem = {\n id: field[fieldProp],\n primary: field.label,\n type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],\n selected: field.id === selectedField\n };\n\n categoryArr = items;\n if (field.category) {\n categoryArr = prepareCategoryItems(field.category, categoryArr);\n }\n categoryArr.push(leafCategoryItem);\n });\n\n return items;\n}\nexport default getMenuItemsFromColumns;\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":"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","sourcesContent":["import { FieldType } from 'pega-repeating-structures-core';\n\nimport { typeMap } from '../../Filters/config';\n\nconst getCategoryItems = (id, arr) => {\n for (const obj of arr) {\n if (obj.id === id && obj.items) {\n return obj.items;\n }\n }\n};\n\nconst prepareCategoryInfo = (id, label, arr) => {\n const items = [];\n arr.push({ id, primary: label, items });\n return items;\n};\n\nconst prepareCategoryItems = (categories, items) => {\n let curPath = '';\n let leafCategoryArr = items;\n for (let i = 0; i < categories.length; i += 1) {\n curPath = i > 0 ? `${curPath}.${categories[i].label}-${i}` : `${categories[i].label}-${i}`;\n\n const existingCategoryArr = getCategoryItems(curPath, leafCategoryArr);\n if (!existingCategoryArr) {\n leafCategoryArr = prepareCategoryInfo(curPath, categories[i].label, leafCategoryArr);\n } else {\n leafCategoryArr = existingCategoryArr;\n }\n }\n return leafCategoryArr;\n};\n\n/**\n * returns copy of embedded property's leafNode model from store or null\n * @function getMenuItemsFromColumns\n * @param fieldDefs - field definitions to build menu items from\n * @param {string} fieldProp value for id prop(either 'name' of 'id')\n * @param options.selectedField - field id that is already selected (for sort/group/filter actions)\n * @param options.columns - live column objects that expose `field.filterPickList` and `getUniqueValues()`\n * @param options.defaultType - fallback field type if not specified on the field definition\n * @returns {array} returns an array of objects where each object is one category\n *\n * @example <caption>Example for getMenuItemsFromColumns.</caption>\n * We have two fields named ID and Priority where ID does not belong to any category and priority belongs to Bugs class category\n *\n * columns example(fieldDefs) :\n * [\n * {\n filter: true,\n type: 'text',\n name: 'pyID',\n label: 'ID',\n id: '2',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyLabel',\n label: 'Name',\n id: '3',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyOperatorName',\n label: 'Operator name',\n id: '4',\n filterPicklist:true\n }\n ]\n *\n * getMenuItemsFromColumns(fieldDefs) returns :\n * [\n {\n id: 'pyID',\n primary: ID,\n items: undefined,\n selected: undefined\n },\n {\n id: ‘pyLabel’,\n primary: ‘Name’,\n selected: undefined,\n items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]\n },\n {\n id: 'pyOperatorName',\n primary: 'Operator name',\n selected: undefined,\n possibleValues: function() {\n // Fetch unique values for Operator name column\n }\n }\n\n ]\n*/\n\nfunction getMenuItemsFromColumns(\n fieldDefs,\n fieldProp,\n { selectedField, columns = [], defaultType = FieldType.TEXT } = {}\n) {\n const items = [];\n let categoryArr = [];\n\n if (!fieldDefs) {\n return items;\n }\n\n fieldDefs.forEach(field => {\n const filterPickListColumn =\n field.filterPickList && columns?.find(c => c.field.name === field[fieldProp]);\n\n const leafCategoryItem = {\n id: field[fieldProp],\n primary: field.label,\n type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],\n selected: field.id === selectedField,\n // Attach possibleValues for picklist columns (e.g. UserReference, WorkStatus)\n // TODO primary should be renderer rather string for user reference fields to show display value instead of id in condition builder.\n ...(filterPickListColumn && {\n possibleValues: args =>\n filterPickListColumn.getUniqueValues().then(records => {\n const filtered = records\n .filter(id => id !== null && id !== undefined)\n .map(id => ({ id, primary: id }));\n\n // ConditionBuilder calls with { ids } to resolve display text for pre-selected values\n if (args && 'ids' in args) {\n return filtered.filter(({ id }) => args.ids?.includes(id));\n }\n\n return filtered;\n })\n })\n };\n\n categoryArr = items;\n if (field.category) {\n categoryArr = prepareCategoryItems(field.category, categoryArr);\n }\n categoryArr.push(leafCategoryItem);\n });\n\n return items;\n}\nexport default getMenuItemsFromColumns;\n"]}
@@ -23,7 +23,7 @@ interface GetVirtualizedPaginationIndicesParams {
23
23
  /**
24
24
  * Calculates the start and end indices for virtualized pagination in a variable-height list.
25
25
  *
26
- * @returns {{ startIndex: number, endIndex: number }} Object containing the calculated start and end indices for rendering (inclusive both indices).
26
+ * @returns Object containing the calculated start and end indices for rendering (inclusive both indices).
27
27
  */
28
28
  export declare const getVirtualizedPaginationIndices: (param: GetVirtualizedPaginationIndicesParams) => {
29
29
  startIndex: number;
@@ -3,7 +3,7 @@ import { isInstance } from '@pega/cosmos-react-core';
3
3
  /**
4
4
  * Calculates the start and end indices for virtualized pagination in a variable-height list.
5
5
  *
6
- * @returns {{ startIndex: number, endIndex: number }} Object containing the calculated start and end indices for rendering (inclusive both indices).
6
+ * @returns Object containing the calculated start and end indices for rendering (inclusive both indices).
7
7
  */
8
8
  export const getVirtualizedPaginationIndices = (param) => {
9
9
  const { totalItemCount, buffer, itemContainerRef, scrollTop, containerRef, itemsHeight, defaultItemHeight, endIndexLimit, isInfiniteMode } = param;