@deephaven/iris-grid 0.6.3-beta.0 → 0.6.3-beta.9

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 (41) hide show
  1. package/dist/IrisGrid.d.ts.map +1 -1
  2. package/dist/IrisGrid.js +67 -18
  3. package/dist/IrisGrid.js.map +1 -1
  4. package/dist/IrisGridBottomBar.js +1 -1
  5. package/dist/IrisGridModelUpdater.js +1 -1
  6. package/dist/IrisGridModelUpdater.js.map +1 -1
  7. package/dist/IrisGridRenderer.js +4 -1
  8. package/dist/IrisGridRenderer.js.map +1 -1
  9. package/dist/IrisGridTableModel.d.ts.map +1 -1
  10. package/dist/IrisGridTableModel.js +2 -1
  11. package/dist/IrisGridTableModel.js.map +1 -1
  12. package/dist/IrisGridTreeTableModel.js +1 -1
  13. package/dist/IrisGridUtils.js +32 -32
  14. package/dist/IrisGridUtils.js.map +1 -1
  15. package/dist/PendingDataBottomBar.js +1 -1
  16. package/dist/PendingDataBottomBar.js.map +1 -1
  17. package/dist/TableUtils.js +1 -1
  18. package/dist/ToastBottomBar.js +1 -1
  19. package/dist/ToastBottomBar.js.map +1 -1
  20. package/dist/memoizeClear.js +1 -1
  21. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
  22. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +4 -12
  23. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  24. package/dist/mousehandlers/IrisGridContextMenuHandler.js +1 -1
  25. package/dist/sidebar/AdvancedSettingsMenu.js +2 -2
  26. package/dist/sidebar/CustomColumnBuilder.js +2 -2
  27. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  28. package/dist/sidebar/InputEditor.js +1 -1
  29. package/dist/sidebar/RollupRows.js +10 -10
  30. package/dist/sidebar/RollupRows.js.map +1 -1
  31. package/dist/sidebar/SelectDistinctBuilder.js +5 -5
  32. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  33. package/dist/sidebar/VisibilityOrderingBuilder.js +10 -10
  34. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  35. package/dist/sidebar/aggregations/AggregationEdit.js +3 -3
  36. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  37. package/dist/sidebar/aggregations/AggregationUtils.js +1 -1
  38. package/dist/sidebar/aggregations/Aggregations.js +4 -4
  39. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +13 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PendingDataBottomBar.tsx"],"names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","current","setTimeout","clearTimeout","undefined","pendingRowCount","commitIcon"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: Map<number, { data: Map<number, { value: unknown }> }>;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const PendingDataBottomBar = ({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element => {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(() => {\n if (prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n\n useEffect(() => {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n\n useEffect(\n () => () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined,\n []\n );\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {!errorMessage && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n};\n\nexport default PendingDataBottomBar;\n"],"file":"PendingDataBottomBar.js"}
1
+ {"version":3,"sources":["../src/PendingDataBottomBar.tsx"],"names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","current","setTimeout","clearTimeout","undefined","pendingRowCount","commitIcon"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: Map<number, { data: Map<number, { value: unknown }> }>;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const PendingDataBottomBar = ({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element => {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(() => {\n if (prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n\n useEffect(() => {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n\n useEffect(\n () => () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined,\n []\n );\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {!errorMessage && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n};\n\nexport default PendingDataBottomBar;\n"],"file":"PendingDataBottomBar.js"}
@@ -165,7 +165,7 @@ class TableUtils {
165
165
  var sorts = [];
166
166
 
167
167
  if (addToExisting) {
168
- sorts = sorts.concat(tableSort.filter((_ref) => {
168
+ sorts = sorts.concat(tableSort.filter(_ref => {
169
169
  var {
170
170
  direction
171
171
  } = _ref;
@@ -3,7 +3,7 @@ import { usePrevious } from '@deephaven/react-hooks';
3
3
  import IrisGridBottomBar from "./IrisGridBottomBar.js";
4
4
  import "./PendingDataBottomBar.css";
5
5
  var HIDE_TIMEOUT = 3000;
6
- export var ToastBottomBar = (_ref) => {
6
+ export var ToastBottomBar = _ref => {
7
7
  var {
8
8
  children = null,
9
9
  onEntering,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ToastBottomBar.tsx"],"names":["React","useCallback","useEffect","useRef","useState","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","ToastBottomBar","children","onEntering","onEntered","onExiting","onExited","isShown","setIsShown","timeout","prevChildren","startTimer","current","clearTimeout","setTimeout","undefined"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,EAAgDC,QAAhD,QAAgE,OAAhE;AACA,SAASC,WAAT,QAA4B,wBAA5B;OACOC,iB;;AAGP,IAAMC,YAAY,GAAG,IAArB;AAUA,OAAO,IAAMC,cAAc,GAAG,UAMU;AAAA,MANT;AAC7BC,IAAAA,QAAQ,GAAG,IADkB;AAE7BC,IAAAA,UAF6B;AAG7BC,IAAAA,SAH6B;AAI7BC,IAAAA,SAJ6B;AAK7BC,IAAAA;AAL6B,GAMS;AACtC,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwBX,QAAQ,CAAC,KAAD,CAAtC;AACA,MAAMY,OAAO,GAAGb,MAAM,EAAtB;AACA,MAAMc,YAAY,GAAGZ,WAAW,CAACI,QAAD,CAAhC;AAEA,MAAMS,UAAU,GAAGjB,WAAW,CAAC,MAAM;AACnCc,IAAAA,UAAU,CAAC,IAAD,CAAV;;AACA,QAAIC,OAAO,CAACG,OAAZ,EAAqB;AACnBC,MAAAA,YAAY,CAACJ,OAAO,CAACG,OAAT,CAAZ;AACD;;AACDH,IAAAA,OAAO,CAACG,OAAR,GAAkBE,UAAU,CAAC,MAAM;AACjCN,MAAAA,UAAU,CAAC,KAAD,CAAV;AACD,KAF2B,EAEzBR,YAFyB,CAA5B;AAGD,GAR6B,EAQ3B,CAACQ,UAAD,EAAaC,OAAb,CAR2B,CAA9B;AAUAd,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIe,YAAY,KAAKR,QAAjB,IAA6BA,QAAQ,IAAI,IAA7C,EAAmD;AACjDS,MAAAA,UAAU;AACX;AACF,GAJQ,EAIN,CAACT,QAAD,EAAWQ,YAAX,EAAyBF,UAAzB,EAAqCG,UAArC,CAJM,CAAT;AAMAhB,EAAAA,SAAS,CACP,MAAM,MAAOc,OAAO,CAACG,OAAR,GAAkBC,YAAY,CAACJ,OAAO,CAACG,OAAT,CAA9B,GAAkDG,SADxD,EAEP,EAFO,CAAT;AAKA,sBACE,oBAAC,iBAAD;AACE,IAAA,SAAS,EAAC,kBADZ;AAEE,IAAA,OAAO,EAAER,OAFX;AAGE,IAAA,UAAU,EAAEJ,UAHd;AAIE,IAAA,SAAS,EAAEC,SAJb;AAKE,IAAA,SAAS,EAAEC,SALb;AAME,IAAA,QAAQ,EAAEC;AANZ,KAQGJ,QARH,CADF;AAYD,CA5CM;AA8CP,eAAeD,cAAf","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\n\nconst HIDE_TIMEOUT = 3000;\n\nexport type ToastBottomBarProps = {\n children?: React.ReactNode;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const ToastBottomBar = ({\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: ToastBottomBarProps): JSX.Element => {\n const [isShown, setIsShown] = useState(false);\n const timeout = useRef<ReturnType<typeof setTimeout>>();\n const prevChildren = usePrevious(children);\n\n const startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n\n useEffect(\n () => () => (timeout.current ? clearTimeout(timeout.current) : undefined),\n []\n );\n\n return (\n <IrisGridBottomBar\n className=\"toast-bottom-bar\"\n isShown={isShown}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n {children}\n </IrisGridBottomBar>\n );\n};\n\nexport default ToastBottomBar;\n"],"file":"ToastBottomBar.js"}
1
+ {"version":3,"sources":["../src/ToastBottomBar.tsx"],"names":["React","useCallback","useEffect","useRef","useState","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","ToastBottomBar","children","onEntering","onEntered","onExiting","onExited","isShown","setIsShown","timeout","prevChildren","startTimer","current","clearTimeout","setTimeout","undefined"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,EAAgDC,QAAhD,QAAgE,OAAhE;AACA,SAASC,WAAT,QAA4B,wBAA5B;OACOC,iB;;AAGP,IAAMC,YAAY,GAAG,IAArB;AAUA,OAAO,IAAMC,cAAc,GAAG,QAMU;AAAA,MANT;AAC7BC,IAAAA,QAAQ,GAAG,IADkB;AAE7BC,IAAAA,UAF6B;AAG7BC,IAAAA,SAH6B;AAI7BC,IAAAA,SAJ6B;AAK7BC,IAAAA;AAL6B,GAMS;AACtC,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwBX,QAAQ,CAAC,KAAD,CAAtC;AACA,MAAMY,OAAO,GAAGb,MAAM,EAAtB;AACA,MAAMc,YAAY,GAAGZ,WAAW,CAACI,QAAD,CAAhC;AAEA,MAAMS,UAAU,GAAGjB,WAAW,CAAC,MAAM;AACnCc,IAAAA,UAAU,CAAC,IAAD,CAAV;;AACA,QAAIC,OAAO,CAACG,OAAZ,EAAqB;AACnBC,MAAAA,YAAY,CAACJ,OAAO,CAACG,OAAT,CAAZ;AACD;;AACDH,IAAAA,OAAO,CAACG,OAAR,GAAkBE,UAAU,CAAC,MAAM;AACjCN,MAAAA,UAAU,CAAC,KAAD,CAAV;AACD,KAF2B,EAEzBR,YAFyB,CAA5B;AAGD,GAR6B,EAQ3B,CAACQ,UAAD,EAAaC,OAAb,CAR2B,CAA9B;AAUAd,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIe,YAAY,KAAKR,QAAjB,IAA6BA,QAAQ,IAAI,IAA7C,EAAmD;AACjDS,MAAAA,UAAU;AACX;AACF,GAJQ,EAIN,CAACT,QAAD,EAAWQ,YAAX,EAAyBF,UAAzB,EAAqCG,UAArC,CAJM,CAAT;AAMAhB,EAAAA,SAAS,CACP,MAAM,MAAOc,OAAO,CAACG,OAAR,GAAkBC,YAAY,CAACJ,OAAO,CAACG,OAAT,CAA9B,GAAkDG,SADxD,EAEP,EAFO,CAAT;AAKA,sBACE,oBAAC,iBAAD;AACE,IAAA,SAAS,EAAC,kBADZ;AAEE,IAAA,OAAO,EAAER,OAFX;AAGE,IAAA,UAAU,EAAEJ,UAHd;AAIE,IAAA,SAAS,EAAEC,SAJb;AAKE,IAAA,SAAS,EAAEC,SALb;AAME,IAAA,QAAQ,EAAEC;AANZ,KAQGJ,QARH,CADF;AAYD,CA5CM;AA8CP,eAAeD,cAAf","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\n\nconst HIDE_TIMEOUT = 3000;\n\nexport type ToastBottomBarProps = {\n children?: React.ReactNode;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const ToastBottomBar = ({\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: ToastBottomBarProps): JSX.Element => {\n const [isShown, setIsShown] = useState(false);\n const timeout = useRef<ReturnType<typeof setTimeout>>();\n const prevChildren = usePrevious(children);\n\n const startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n\n useEffect(\n () => () => (timeout.current ? clearTimeout(timeout.current) : undefined),\n []\n );\n\n return (\n <IrisGridBottomBar\n className=\"toast-bottom-bar\"\n isShown={isShown}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n {children}\n </IrisGridBottomBar>\n );\n};\n\nexport default ToastBottomBar;\n"],"file":"ToastBottomBar.js"}
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridColumnTooltipMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridColumnTooltipMouseHandler.js"],"names":[],"mappings":";AAGA;;GAEG;AACH;IACE,2BAIC;IADC,cAAwB;IAG1B,6BAKC;IAED,0BAMC;CA0CF"}
1
+ {"version":3,"file":"IrisGridColumnTooltipMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridColumnTooltipMouseHandler.js"],"names":[],"mappings":";AAGA;;GAEG;AACH;IACE,2BAIC;IADC,cAAwB;IAG1B,6BAKC;IAED,0BAMC;CAsCF"}
@@ -43,6 +43,10 @@ class IrisGridColumnTooltipMouseHandler extends GridMouseHandler {
43
43
  return false;
44
44
  }
45
45
 
46
+ onWheel() {
47
+ this.destroyColumnTooltip();
48
+ }
49
+
46
50
  onMove(gridPoint) {
47
51
  var {
48
52
  y,
@@ -75,18 +79,6 @@ class IrisGridColumnTooltipMouseHandler extends GridMouseHandler {
75
79
  return false;
76
80
  }
77
81
 
78
- onLeave(gridPoint) {
79
- var {
80
- y
81
- } = gridPoint;
82
-
83
- if (y < 0) {
84
- this.destroyColumnTooltip();
85
- }
86
-
87
- return false;
88
- }
89
-
90
82
  }
91
83
 
92
84
  export default IrisGridColumnTooltipMouseHandler;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mousehandlers/IrisGridColumnTooltipMouseHandler.js"],"names":["GridMouseHandler","IrisGridColumnTooltipMouseHandler","constructor","irisGrid","destroyColumnTooltip","shownColumnTooltip","state","setState","hideColumnTooltip","tooltip","stopTimer","hide","onDown","onContextMenu","onMove","gridPoint","y","column","row","theme","getTheme","newTooltip","columnHeaderHeight","onLeave"],"mappings":"AAAA;AACA,SAASA,gBAAT,QAAiC,iBAAjC;AAEA;AACA;AACA;;AACA,MAAMC,iCAAN,SAAgDD,gBAAhD,CAAiE;AAC/DE,EAAAA,WAAW,CAACC,QAAD,EAAW;AACpB;AAEA,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAEDC,EAAAA,oBAAoB,GAAG;AACrB,QAAM;AAAEC,MAAAA;AAAF,QAAyB,KAAKF,QAAL,CAAcG,KAA7C;;AACA,QAAID,kBAAkB,IAAI,IAA1B,EAAgC;AAC9B,WAAKF,QAAL,CAAcI,QAAd,CAAuB;AAAEF,QAAAA,kBAAkB,EAAE;AAAtB,OAAvB;AACD;AACF;;AAEDG,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAc,KAAKN,QAAzB;;AACA,QAAIM,OAAJ,EAAa;AACXA,MAAAA,OAAO,CAACC,SAAR;AACAD,MAAAA,OAAO,CAACE,IAAR;AACD;AACF;;AAEDC,EAAAA,MAAM,GAAG;AACP,SAAKJ,iBAAL;AACA,WAAO,KAAP;AACD;;AAEDK,EAAAA,aAAa,GAAG;AACd,SAAKL,iBAAL;AACA,WAAO,KAAP;AACD;;AAEDM,EAAAA,MAAM,CAACC,SAAD,EAAY;AAChB,QAAM;AAAEC,MAAAA,CAAF;AAAKC,MAAAA,MAAL;AAAaC,MAAAA;AAAb,QAAqBH,SAA3B;AACA,QAAM;AAAEV,MAAAA;AAAF,QAAyB,KAAKF,QAAL,CAAcG,KAA7C;AACA,QAAMa,KAAK,GAAG,KAAKhB,QAAL,CAAciB,QAAd,EAAd;AACA,QAAIC,UAAU,GAAG,IAAjB;;AACA,QAAIJ,MAAM,KAAK,IAAX,IAAmBC,GAAG,KAAK,IAA/B,EAAqC;AACnC;AACN;AACA;AACA;AACA;AACM,UAAIF,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAIG,KAAK,CAACG,kBAAzB,EAA6C;AAC3CD,QAAAA,UAAU,GAAGJ,MAAb;AACD;AACF;;AAED,QAAII,UAAU,KAAKhB,kBAAnB,EAAuC;AACrC,WAAKF,QAAL,CAAcI,QAAd,CAAuB;AAAEF,QAAAA,kBAAkB,EAAEgB;AAAtB,OAAvB;AACD;;AAED,WAAO,KAAP;AACD;;AAEDE,EAAAA,OAAO,CAACR,SAAD,EAAY;AACjB,QAAM;AAAEC,MAAAA;AAAF,QAAQD,SAAd;;AACA,QAAIC,CAAC,GAAG,CAAR,EAAW;AACT,WAAKZ,oBAAL;AACD;;AACD,WAAO,KAAP;AACD;;AA7D8D;;AAgEjE,eAAeH,iCAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n\n/**\n * Detects mouse hover over column headers and displays the appropriate tooltip\n */\nclass IrisGridColumnTooltipMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n destroyColumnTooltip() {\n const { shownColumnTooltip } = this.irisGrid.state;\n if (shownColumnTooltip != null) {\n this.irisGrid.setState({ shownColumnTooltip: null });\n }\n }\n\n hideColumnTooltip() {\n const { tooltip } = this.irisGrid;\n if (tooltip) {\n tooltip.stopTimer();\n tooltip.hide();\n }\n }\n\n onDown() {\n this.hideColumnTooltip();\n return false;\n }\n\n onContextMenu() {\n this.hideColumnTooltip();\n return false;\n }\n\n onMove(gridPoint) {\n const { y, column, row } = gridPoint;\n const { shownColumnTooltip } = this.irisGrid.state;\n const theme = this.irisGrid.getTheme();\n let newTooltip = null;\n if (column !== null && row === null) {\n /**\n * one would expect at y == theme.columnHeaderHeight, row == null\n * however, gridY also == theme.columnHeaderHeight, so row still has a value\n * so this tooltip won't actually show until row is null at columnHeaderHeight - 1\n */\n if (y >= 0 && y <= theme.columnHeaderHeight) {\n newTooltip = column;\n }\n }\n\n if (newTooltip !== shownColumnTooltip) {\n this.irisGrid.setState({ shownColumnTooltip: newTooltip });\n }\n\n return false;\n }\n\n onLeave(gridPoint) {\n const { y } = gridPoint;\n if (y < 0) {\n this.destroyColumnTooltip();\n }\n return false;\n }\n}\n\nexport default IrisGridColumnTooltipMouseHandler;\n"],"file":"IrisGridColumnTooltipMouseHandler.js"}
1
+ {"version":3,"sources":["../../src/mousehandlers/IrisGridColumnTooltipMouseHandler.js"],"names":["GridMouseHandler","IrisGridColumnTooltipMouseHandler","constructor","irisGrid","destroyColumnTooltip","shownColumnTooltip","state","setState","hideColumnTooltip","tooltip","stopTimer","hide","onDown","onContextMenu","onWheel","onMove","gridPoint","y","column","row","theme","getTheme","newTooltip","columnHeaderHeight"],"mappings":"AAAA;AACA,SAASA,gBAAT,QAAiC,iBAAjC;AAEA;AACA;AACA;;AACA,MAAMC,iCAAN,SAAgDD,gBAAhD,CAAiE;AAC/DE,EAAAA,WAAW,CAACC,QAAD,EAAW;AACpB;AAEA,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAEDC,EAAAA,oBAAoB,GAAG;AACrB,QAAM;AAAEC,MAAAA;AAAF,QAAyB,KAAKF,QAAL,CAAcG,KAA7C;;AACA,QAAID,kBAAkB,IAAI,IAA1B,EAAgC;AAC9B,WAAKF,QAAL,CAAcI,QAAd,CAAuB;AAAEF,QAAAA,kBAAkB,EAAE;AAAtB,OAAvB;AACD;AACF;;AAEDG,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAc,KAAKN,QAAzB;;AACA,QAAIM,OAAJ,EAAa;AACXA,MAAAA,OAAO,CAACC,SAAR;AACAD,MAAAA,OAAO,CAACE,IAAR;AACD;AACF;;AAEDC,EAAAA,MAAM,GAAG;AACP,SAAKJ,iBAAL;AACA,WAAO,KAAP;AACD;;AAEDK,EAAAA,aAAa,GAAG;AACd,SAAKL,iBAAL;AACA,WAAO,KAAP;AACD;;AAEDM,EAAAA,OAAO,GAAG;AACR,SAAKV,oBAAL;AACD;;AAEDW,EAAAA,MAAM,CAACC,SAAD,EAAY;AAChB,QAAM;AAAEC,MAAAA,CAAF;AAAKC,MAAAA,MAAL;AAAaC,MAAAA;AAAb,QAAqBH,SAA3B;AACA,QAAM;AAAEX,MAAAA;AAAF,QAAyB,KAAKF,QAAL,CAAcG,KAA7C;AACA,QAAMc,KAAK,GAAG,KAAKjB,QAAL,CAAckB,QAAd,EAAd;AACA,QAAIC,UAAU,GAAG,IAAjB;;AACA,QAAIJ,MAAM,KAAK,IAAX,IAAmBC,GAAG,KAAK,IAA/B,EAAqC;AACnC;AACN;AACA;AACA;AACA;AACM,UAAIF,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAIG,KAAK,CAACG,kBAAzB,EAA6C;AAC3CD,QAAAA,UAAU,GAAGJ,MAAb;AACD;AACF;;AAED,QAAII,UAAU,KAAKjB,kBAAnB,EAAuC;AACrC,WAAKF,QAAL,CAAcI,QAAd,CAAuB;AAAEF,QAAAA,kBAAkB,EAAEiB;AAAtB,OAAvB;AACD;;AAED,WAAO,KAAP;AACD;;AAzD8D;;AA4DjE,eAAerB,iCAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n\n/**\n * Detects mouse hover over column headers and displays the appropriate tooltip\n */\nclass IrisGridColumnTooltipMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n destroyColumnTooltip() {\n const { shownColumnTooltip } = this.irisGrid.state;\n if (shownColumnTooltip != null) {\n this.irisGrid.setState({ shownColumnTooltip: null });\n }\n }\n\n hideColumnTooltip() {\n const { tooltip } = this.irisGrid;\n if (tooltip) {\n tooltip.stopTimer();\n tooltip.hide();\n }\n }\n\n onDown() {\n this.hideColumnTooltip();\n return false;\n }\n\n onContextMenu() {\n this.hideColumnTooltip();\n return false;\n }\n\n onWheel() {\n this.destroyColumnTooltip();\n }\n\n onMove(gridPoint) {\n const { y, column, row } = gridPoint;\n const { shownColumnTooltip } = this.irisGrid.state;\n const theme = this.irisGrid.getTheme();\n let newTooltip = null;\n if (column !== null && row === null) {\n /**\n * one would expect at y == theme.columnHeaderHeight, row == null\n * however, gridY also == theme.columnHeaderHeight, so row still has a value\n * so this tooltip won't actually show until row is null at columnHeaderHeight - 1\n */\n if (y >= 0 && y <= theme.columnHeaderHeight) {\n newTooltip = column;\n }\n }\n\n if (newTooltip !== shownColumnTooltip) {\n this.irisGrid.setState({ shownColumnTooltip: newTooltip });\n }\n\n return false;\n }\n}\n\nexport default IrisGridColumnTooltipMouseHandler;\n"],"file":"IrisGridColumnTooltipMouseHandler.js"}
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -2,13 +2,13 @@ import React from 'react';
2
2
  import { Menu } from '@deephaven/components';
3
3
  import AdvancedSettingsType from "./AdvancedSettingsType.js";
4
4
 
5
- var AdvancedSettingsMenu = (_ref) => {
5
+ var AdvancedSettingsMenu = _ref => {
6
6
  var {
7
7
  items,
8
8
  onChange: _onChange = () => undefined
9
9
  } = _ref;
10
10
  return /*#__PURE__*/React.createElement(Menu, {
11
- items: Array.from(items.entries()).map((_ref2) => {
11
+ items: Array.from(items.entries()).map(_ref2 => {
12
12
  var [key, isOn] = _ref2;
13
13
  return {
14
14
  title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),
@@ -1,6 +1,6 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
4
 
5
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
6
 
@@ -271,7 +271,7 @@ class CustomColumnBuilder extends Component {
271
271
  }
272
272
 
273
273
  resetRequestFailed() {
274
- this.setState((_ref) => {
274
+ this.setState(_ref => {
275
275
  var {
276
276
  hasRequestFailed
277
277
  } = _ref;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sidebar/CustomColumnBuilder.jsx"],"names":["React","Component","classNames","PropTypes","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsIssues","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","container","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","messageTimer","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","event","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","querySelector","nextFocusIndex","onSave","forEach","renderInputs","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","propTypes","instanceOf","isRequired","arrayOf","string","func","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsIssues } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nclass CustomColumnBuilder extends Component {\n static makeCustomColumnInputEventKey() {\n return shortid.generate();\n }\n\n static createCustomColumnInput() {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n };\n this.container = null;\n }\n\n componentDidMount() {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount() {\n this.stopListening();\n if (this.messageTimer) {\n clearTimeout(this.messageTimer);\n }\n }\n\n getInput = memoize((inputs, key) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs, key) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage() {\n this.setState({ errorMessage: null });\n }\n\n startListening() {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening() {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns) {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick() {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(eventKey, type, value) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput };\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated() {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState({ isCustomColumnApplying: false });\n }\n\n handleRequestFailed(event) {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsIssues} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {event.detail.errorMessage}\n <br />\n Table configuration: {JSON.stringify(event.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result) {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex, shiftKey) {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n this.container\n .querySelectorAll(`.btn-drag-handle`) // eslint-disable-next-line no-unexpected-multiline\n [focusEditorIndex].focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n // focus on add another column button\n this.container.querySelector('.btn-add-column').focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n this.container\n .querySelectorAll('.custom-column-input') // eslint-disable-next-line no-unexpected-multiline\n [nextFocusIndex].focus();\n }\n }\n\n handleSaveClick() {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed() {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs() {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n render() {\n const { onCancel } = this.props;\n const { inputs, errorMessage, isCustomColumnApplying } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <div className=\"section-title\">Custom Column Name and Formula</div>\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Another Column\n </button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={onCancel}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className={classNames('btn btn-primary btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isCustomColumnApplying &&\n (inputs.length > 1 ? 'Save Columns' : 'Save Column')}\n </button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nCustomColumnBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n customColumns: PropTypes.arrayOf(PropTypes.string),\n onSave: PropTypes.func,\n onCancel: PropTypes.func,\n};\n\nCustomColumnBuilder.defaultProps = {\n customColumns: [],\n onSave: () => {},\n onCancel: () => {},\n};\n\nexport default CustomColumnBuilder;\n"],"file":"CustomColumnBuilder.js"}
1
+ {"version":3,"sources":["../../src/sidebar/CustomColumnBuilder.jsx"],"names":["React","Component","classNames","PropTypes","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsIssues","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","container","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","messageTimer","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","event","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","querySelector","nextFocusIndex","onSave","forEach","renderInputs","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","propTypes","instanceOf","isRequired","arrayOf","string","func","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsIssues } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nclass CustomColumnBuilder extends Component {\n static makeCustomColumnInputEventKey() {\n return shortid.generate();\n }\n\n static createCustomColumnInput() {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n };\n this.container = null;\n }\n\n componentDidMount() {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount() {\n this.stopListening();\n if (this.messageTimer) {\n clearTimeout(this.messageTimer);\n }\n }\n\n getInput = memoize((inputs, key) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs, key) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage() {\n this.setState({ errorMessage: null });\n }\n\n startListening() {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening() {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns) {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick() {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(eventKey, type, value) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput };\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated() {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState({ isCustomColumnApplying: false });\n }\n\n handleRequestFailed(event) {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsIssues} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {event.detail.errorMessage}\n <br />\n Table configuration: {JSON.stringify(event.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result) {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex, shiftKey) {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n this.container\n .querySelectorAll(`.btn-drag-handle`) // eslint-disable-next-line no-unexpected-multiline\n [focusEditorIndex].focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n // focus on add another column button\n this.container.querySelector('.btn-add-column').focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n this.container\n .querySelectorAll('.custom-column-input') // eslint-disable-next-line no-unexpected-multiline\n [nextFocusIndex].focus();\n }\n }\n\n handleSaveClick() {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed() {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs() {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n render() {\n const { onCancel } = this.props;\n const { inputs, errorMessage, isCustomColumnApplying } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <div className=\"section-title\">Custom Column Name and Formula</div>\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Another Column\n </button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={onCancel}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className={classNames('btn btn-primary btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isCustomColumnApplying &&\n (inputs.length > 1 ? 'Save Columns' : 'Save Column')}\n </button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nCustomColumnBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n customColumns: PropTypes.arrayOf(PropTypes.string),\n onSave: PropTypes.func,\n onCancel: PropTypes.func,\n};\n\nCustomColumnBuilder.defaultProps = {\n customColumns: [],\n onSave: () => {},\n onCancel: () => {},\n};\n\nexport default CustomColumnBuilder;\n"],"file":"CustomColumnBuilder.js"}
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -146,7 +146,7 @@ class RollupRows extends Component {
146
146
  }
147
147
 
148
148
  handleSortAscending() {
149
- this.setState((_ref2) => {
149
+ this.setState(_ref2 => {
150
150
  var {
151
151
  sort
152
152
  } = _ref2;
@@ -157,7 +157,7 @@ class RollupRows extends Component {
157
157
  }
158
158
 
159
159
  handleSortDescending() {
160
- this.setState((_ref3) => {
160
+ this.setState(_ref3 => {
161
161
  var {
162
162
  sort
163
163
  } = _ref3;
@@ -226,7 +226,7 @@ class RollupRows extends Component {
226
226
 
227
227
 
228
228
  if (destination.droppableId === UNGROUPED_LIST_ID) {
229
- this.setState((_ref4) => {
229
+ this.setState(_ref4 => {
230
230
  var {
231
231
  groupedSelectedRanges,
232
232
  columns
@@ -253,7 +253,7 @@ class RollupRows extends Component {
253
253
  destinationIndex += 1;
254
254
  }
255
255
 
256
- this.setState((_ref5) => {
256
+ this.setState(_ref5 => {
257
257
  var {
258
258
  columns,
259
259
  ungroupedSelectedRanges,
@@ -277,7 +277,7 @@ class RollupRows extends Component {
277
277
 
278
278
  handleUngroupedSelect(itemIndex) {
279
279
  log.debug('handleUngroupedSelect');
280
- this.setState((_ref6) => {
280
+ this.setState(_ref6 => {
281
281
  var {
282
282
  columns
283
283
  } = _ref6;
@@ -291,7 +291,7 @@ class RollupRows extends Component {
291
291
 
292
292
  handleUngroupedSelectionChange(ungroupedSelectedRanges) {
293
293
  log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);
294
- this.setState((_ref7) => {
294
+ this.setState(_ref7 => {
295
295
  var {
296
296
  ungroupedSelectedRanges: stateUngroupedSelectedRanges
297
297
  } = _ref7;
@@ -309,7 +309,7 @@ class RollupRows extends Component {
309
309
 
310
310
  handleGroupedSelectionChange(groupedSelectedRanges) {
311
311
  log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);
312
- this.setState((_ref8) => {
312
+ this.setState(_ref8 => {
313
313
  var {
314
314
  groupedSelectedRanges: stateGroupedSelectedRanges
315
315
  } = _ref8;
@@ -326,7 +326,7 @@ class RollupRows extends Component {
326
326
  }
327
327
 
328
328
  handleDeleteClicked(index) {
329
- this.setState((_ref9) => {
329
+ this.setState(_ref9 => {
330
330
  var {
331
331
  columns
332
332
  } = _ref9;
@@ -339,7 +339,7 @@ class RollupRows extends Component {
339
339
  }
340
340
 
341
341
  handleShowConstituentsChange() {
342
- this.setState((_ref10) => {
342
+ this.setState(_ref10 => {
343
343
  var {
344
344
  showConstituents
345
345
  } = _ref10;
@@ -350,7 +350,7 @@ class RollupRows extends Component {
350
350
  }
351
351
 
352
352
  handleShowNonAggregatedColumnsChange() {
353
- this.setState((_ref11) => {
353
+ this.setState(_ref11 => {
354
354
  var {
355
355
  showNonAggregatedColumns
356
356
  } = _ref11;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sidebar/RollupRows.jsx"],"names":["React","Component","classNames","PropTypes","FontAwesomeIcon","DragDropContext","Droppable","ButtonOld","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","vsTrash","dhSortAlphaDown","dhSortAlphaUp","memoize","debounce","Log","IrisGridModel","TableUtils","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","columns","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","ungroupedList","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","ungroupedSelectedRanges","groupedSelectedRanges","searchFilter","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","setState","resetSelection","DESCENDING","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","current","scrollToItem","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze","propTypes","instanceOf","isRequired","func","shape","arrayOf","string","bool","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport {\n ButtonOld,\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './RollupRows.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport TableUtils from '../TableUtils';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nclass RollupRows extends Component {\n static SORT = Object.freeze({\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n });\n\n static renderColumn({ item, isClone, selectedCount }) {\n const text = item && item.name;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings,\n newGroupings,\n index = currentGroupings.length\n ) {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column) {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props) {\n super(props);\n\n this.search = debounce(this.search.bind(this), DEBOUNCE_SEARCH);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount() {\n this.search.cancel();\n }\n\n handleSearchChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\n }));\n }\n\n resetSelection() {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search(searchFilter) {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }\n\n handleDragStart(e) {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e) {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex) {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges) {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges) {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index) {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange() {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange() {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig() {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange() {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n });\n }\n\n getCachedUngroupedColumns = memoize((columns, groupedColumns) =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n !groupedColumns.find(name => name === column.name)\n )\n );\n\n getCachedSortedColumns = memoize((columns, sort) =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns() {\n const { model } = this.props;\n const { columns, searchFilter } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(\n originalColumns,\n columns,\n searchFilter\n );\n }\n\n getSortedUngroupedColumns() {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({ item, itemIndex, isClone, selectedCount }) {\n const indent = isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {!isClone && (\n <ButtonOld\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </ButtonOld>\n )}\n </>\n );\n }\n\n render() {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex=\"0\"\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDragDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : null\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </ButtonOld>\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </ButtonOld>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nRollupRows.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n onChange: PropTypes.func,\n config: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string),\n showConstituents: PropTypes.bool,\n showNonAggregatedColumns: PropTypes.bool,\n }),\n};\n\nRollupRows.defaultProps = {\n config: null,\n onChange: () => {},\n};\n\nexport default RollupRows;\n"],"file":"RollupRows.js"}
1
+ {"version":3,"sources":["../../src/sidebar/RollupRows.jsx"],"names":["React","Component","classNames","PropTypes","FontAwesomeIcon","DragDropContext","Droppable","ButtonOld","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","vsTrash","dhSortAlphaDown","dhSortAlphaUp","memoize","debounce","Log","IrisGridModel","TableUtils","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","columns","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","ungroupedList","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","ungroupedSelectedRanges","groupedSelectedRanges","searchFilter","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","setState","resetSelection","DESCENDING","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","current","scrollToItem","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze","propTypes","instanceOf","isRequired","func","shape","arrayOf","string","bool","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport {\n ButtonOld,\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './RollupRows.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport TableUtils from '../TableUtils';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nclass RollupRows extends Component {\n static SORT = Object.freeze({\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n });\n\n static renderColumn({ item, isClone, selectedCount }) {\n const text = item && item.name;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings,\n newGroupings,\n index = currentGroupings.length\n ) {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column) {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props) {\n super(props);\n\n this.search = debounce(this.search.bind(this), DEBOUNCE_SEARCH);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount() {\n this.search.cancel();\n }\n\n handleSearchChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\n }));\n }\n\n resetSelection() {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search(searchFilter) {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }\n\n handleDragStart(e) {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e) {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex) {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges) {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges) {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index) {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange() {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange() {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig() {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange() {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n });\n }\n\n getCachedUngroupedColumns = memoize((columns, groupedColumns) =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n !groupedColumns.find(name => name === column.name)\n )\n );\n\n getCachedSortedColumns = memoize((columns, sort) =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns() {\n const { model } = this.props;\n const { columns, searchFilter } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(\n originalColumns,\n columns,\n searchFilter\n );\n }\n\n getSortedUngroupedColumns() {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({ item, itemIndex, isClone, selectedCount }) {\n const indent = isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {!isClone && (\n <ButtonOld\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </ButtonOld>\n )}\n </>\n );\n }\n\n render() {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex=\"0\"\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDragDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : null\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </ButtonOld>\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </ButtonOld>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nRollupRows.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n onChange: PropTypes.func,\n config: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string),\n showConstituents: PropTypes.bool,\n showNonAggregatedColumns: PropTypes.bool,\n }),\n};\n\nRollupRows.defaultProps = {\n config: null,\n onChange: () => {},\n};\n\nexport default RollupRows;\n"],"file":"RollupRows.js"}