@deephaven/grid 0.6.1-beta.0 → 0.6.3-alpha.5

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.
@@ -22,7 +22,7 @@ export var directionForKey = key => {
22
22
  return null;
23
23
  }
24
24
  };
25
- export var CellInputField = (_ref) => {
25
+ export var CellInputField = _ref => {
26
26
  var {
27
27
  selectionRange = undefined,
28
28
  className = '',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/CellInputField.tsx"],"names":["React","useCallback","useEffect","useRef","useState","PropTypes","classNames","GridRange","GridUtils","directionForKey","key","SELECTION_DIRECTION","DOWN","UP","LEFT","RIGHT","CellInputField","selectionRange","undefined","className","disabled","value","propsValue","isQuickEdit","propsIsQuickEdit","onChange","onCancel","onDone","onContextMenu","style","inputField","isCancelled","initialValue","isChanged","setIsChanged","setIsQuickEdit","setValue","current","field","focus","setSelectionRange","length","sendUpdate","newValue","handleChange","event","target","handleCancel","handleClick","handleCommit","direction","fillRange","handleBlur","handleKeyDown","stopPropagation","preventDefault","isModifierKeyDown","altKey","shiftKey","handleContextMenu","propTypes","arrayOf","number","string","bool","func","shape","defaultProps"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport GridRange from './GridRange';\nimport GridUtils from './GridUtils';\nimport './CellInputField.scss';\n\nexport type GridRangeSelectionDirection = string;\n\nexport type CellInputFieldProps = {\n selectionRange?: number[];\n className?: string;\n disabled?: boolean;\n isQuickEdit?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onCancel?: () => void;\n onDone?: (\n value: string,\n options: {\n direction: GridRangeSelectionDirection | null;\n fillRange: boolean;\n }\n ) => void;\n onContextMenu?: React.MouseEventHandler<HTMLTextAreaElement>;\n style?: React.CSSProperties;\n};\n\nexport const directionForKey = (\n key: string\n): GridRangeSelectionDirection | null => {\n switch (key) {\n case 'ArrowDown':\n return GridRange.SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return GridRange.SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return GridRange.SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return GridRange.SELECTION_DIRECTION.RIGHT;\n default:\n return null;\n }\n};\n\nexport const CellInputField = ({\n selectionRange = undefined,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = () => undefined,\n onCancel = () => undefined,\n onDone = () => undefined,\n onContextMenu = () => undefined,\n style = {},\n}: CellInputFieldProps): JSX.Element => {\n const inputField = useRef<HTMLTextAreaElement>(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n const isCancelled = useRef<boolean>(false);\n const [initialValue] = useState(propsValue);\n const [isChanged, setIsChanged] = useState(false);\n const [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n const [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(() => {\n const { current: field } = inputField;\n if (field == null) {\n return;\n }\n\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n\n const sendUpdate = useCallback(\n (newValue: string) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const { value: newValue } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n },\n [sendUpdate, setValue, setIsChanged]\n );\n\n const handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n\n const handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n\n const handleCommit = useCallback(\n (\n direction: GridRangeSelectionDirection | null = GridRange\n .SELECTION_DIRECTION.DOWN,\n fillRange = false\n ) => {\n onDone(value, { direction, fillRange });\n },\n [onDone, value]\n );\n\n const handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n event.stopPropagation();\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(null, true);\n } else if (event.altKey) {\n const newValue = `${value}\\n`;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n },\n [\n handleCancel,\n handleCommit,\n isQuickEdit,\n setValue,\n setIsChanged,\n sendUpdate,\n value,\n ]\n );\n\n const handleContextMenu = useCallback(\n (event: React.MouseEvent<HTMLTextAreaElement, MouseEvent>) => {\n onContextMenu(event);\n },\n [onContextMenu]\n );\n\n return (\n <textarea\n ref={inputField}\n className={classNames('grid-cell-input-field', className)}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n disabled={disabled}\n style={style}\n />\n );\n};\n\nCellInputField.propTypes = {\n selectionRange: PropTypes.arrayOf(PropTypes.number),\n className: PropTypes.string,\n disabled: PropTypes.bool,\n isQuickEdit: PropTypes.bool,\n value: PropTypes.string,\n onChange: PropTypes.func,\n onCancel: PropTypes.func,\n onDone: PropTypes.func,\n onContextMenu: PropTypes.func,\n style: PropTypes.shape({}),\n};\n\nCellInputField.defaultProps = {\n selectionRange: null,\n className: '',\n disabled: false,\n value: '',\n isQuickEdit: true,\n onChange: () => undefined,\n onCancel: () => undefined,\n onDone: () => undefined,\n onContextMenu: () => undefined,\n style: {},\n};\n\nexport default CellInputField;\n"],"file":"CellInputField.js"}
1
+ {"version":3,"sources":["../src/CellInputField.tsx"],"names":["React","useCallback","useEffect","useRef","useState","PropTypes","classNames","GridRange","GridUtils","directionForKey","key","SELECTION_DIRECTION","DOWN","UP","LEFT","RIGHT","CellInputField","selectionRange","undefined","className","disabled","value","propsValue","isQuickEdit","propsIsQuickEdit","onChange","onCancel","onDone","onContextMenu","style","inputField","isCancelled","initialValue","isChanged","setIsChanged","setIsQuickEdit","setValue","current","field","focus","setSelectionRange","length","sendUpdate","newValue","handleChange","event","target","handleCancel","handleClick","handleCommit","direction","fillRange","handleBlur","handleKeyDown","stopPropagation","preventDefault","isModifierKeyDown","altKey","shiftKey","handleContextMenu","propTypes","arrayOf","number","string","bool","func","shape","defaultProps"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport GridRange from './GridRange';\nimport GridUtils from './GridUtils';\nimport './CellInputField.scss';\n\nexport type GridRangeSelectionDirection = string;\n\nexport type CellInputFieldProps = {\n selectionRange?: number[];\n className?: string;\n disabled?: boolean;\n isQuickEdit?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onCancel?: () => void;\n onDone?: (\n value: string,\n options: {\n direction: GridRangeSelectionDirection | null;\n fillRange: boolean;\n }\n ) => void;\n onContextMenu?: React.MouseEventHandler<HTMLTextAreaElement>;\n style?: React.CSSProperties;\n};\n\nexport const directionForKey = (\n key: string\n): GridRangeSelectionDirection | null => {\n switch (key) {\n case 'ArrowDown':\n return GridRange.SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return GridRange.SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return GridRange.SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return GridRange.SELECTION_DIRECTION.RIGHT;\n default:\n return null;\n }\n};\n\nexport const CellInputField = ({\n selectionRange = undefined,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = () => undefined,\n onCancel = () => undefined,\n onDone = () => undefined,\n onContextMenu = () => undefined,\n style = {},\n}: CellInputFieldProps): JSX.Element => {\n const inputField = useRef<HTMLTextAreaElement>(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n const isCancelled = useRef<boolean>(false);\n const [initialValue] = useState(propsValue);\n const [isChanged, setIsChanged] = useState(false);\n const [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n const [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(() => {\n const { current: field } = inputField;\n if (field == null) {\n return;\n }\n\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n\n const sendUpdate = useCallback(\n (newValue: string) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const { value: newValue } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n },\n [sendUpdate, setValue, setIsChanged]\n );\n\n const handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n\n const handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n\n const handleCommit = useCallback(\n (\n direction: GridRangeSelectionDirection | null = GridRange\n .SELECTION_DIRECTION.DOWN,\n fillRange = false\n ) => {\n onDone(value, { direction, fillRange });\n },\n [onDone, value]\n );\n\n const handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n event.stopPropagation();\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(null, true);\n } else if (event.altKey) {\n const newValue = `${value}\\n`;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n },\n [\n handleCancel,\n handleCommit,\n isQuickEdit,\n setValue,\n setIsChanged,\n sendUpdate,\n value,\n ]\n );\n\n const handleContextMenu = useCallback(\n (event: React.MouseEvent<HTMLTextAreaElement, MouseEvent>) => {\n onContextMenu(event);\n },\n [onContextMenu]\n );\n\n return (\n <textarea\n ref={inputField}\n className={classNames('grid-cell-input-field', className)}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n disabled={disabled}\n style={style}\n />\n );\n};\n\nCellInputField.propTypes = {\n selectionRange: PropTypes.arrayOf(PropTypes.number),\n className: PropTypes.string,\n disabled: PropTypes.bool,\n isQuickEdit: PropTypes.bool,\n value: PropTypes.string,\n onChange: PropTypes.func,\n onCancel: PropTypes.func,\n onDone: PropTypes.func,\n onContextMenu: PropTypes.func,\n style: PropTypes.shape({}),\n};\n\nCellInputField.defaultProps = {\n selectionRange: null,\n className: '',\n disabled: false,\n value: '',\n isQuickEdit: true,\n onChange: () => undefined,\n onCancel: () => undefined,\n onDone: () => undefined,\n onContextMenu: () => undefined,\n style: {},\n};\n\nexport default CellInputField;\n"],"file":"CellInputField.js"}
package/dist/Grid.js CHANGED
@@ -2,7 +2,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
2
2
 
3
3
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
4
 
5
- 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; }
5
+ 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; }
6
6
 
7
7
  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; }
8
8
 
@@ -1544,7 +1544,7 @@ class Grid extends PureComponent {
1544
1544
  }
1545
1545
 
1546
1546
  handleEditCellChange(value) {
1547
- this.setState((_ref) => {
1547
+ this.setState(_ref => {
1548
1548
  var {
1549
1549
  editingCell
1550
1550
  } = _ref;
@@ -1 +1 @@
1
- {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.js"],"names":[],"mappings":";AAIA;;;;GAIG;AACH;IACE,oDAAoD;IACpD,0BAA0B;IAE1B,gEAAgE;IAChE,gCAA8B;IAE9B;;;;;;OAMG;IACH,+CAHW,MAAM,eACN,MAAM,QAahB;IAED;;;;;;;;OAQG;IACH,0CANW,MAAM,YACN,MAAM,cACN,MAAM,OACN,MAAM,WACN,IAAI,MAAM,EAAE,MAAM,CAAC,iBAuB7B;IAED;;;;;;;;;;OAsBC;IAXC,gCAAwC;IACxC,8BAAoC;IACpC,oCAAgD;IAChD,sCAAoD;IACpD,0BAA4B;IAG5B,yBAA0B;IAC1B,4BAAgC;IAChC,eAA0B;IAC1B,kBAAgC;IAGlC,6FAA6F;IAC7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkYC;IAED,0BAKC;IAED,0BAKC;IAED,wEAmBC;IAED,yEAwBC;IAED,sEAUC;IAED,mDAAmD;IACnD,mCAMC;IAED,gDAAgD;IAChD,gCAMC;IAED;;;OAGG;IACH,oEAqBC;IAED;;;OAGG;IACH,qEAyBC;IAED,sDASC;IAED,+DAMC;IAED,yDASC;IAED,8DAMC;IAED,iDAmBC;IAED,gDAeC;IAED,gGAiCC;IAED,+FAwBC;IAED,+EAeC;IAED,kGAWC;IAED,0EAWC;IAED,yFAWC;IAED,4FAA4F;IAC5F,0FAoBC;IAED,uEAWC;IAED,wEAYC;IAED,qEAQC;IAED,wEAWC;IAED,4FASC;IAED,qGASC;IAED,2GAkBC;IAED,kHAwBC;IAED,mGAWC;IAED,0GAgBC;IAED,0GAaC;IAED,6EAKC;IAED,+CAMC;IAED,iGAiBC;IAED,0DAQC;IAED,8CAQC;IAED,gEAQC;IAED,oDAQC;IAED,6DAgBC;IAED,2EAA2E;IAC3E,kHA+BC;IAED,iEAWC;IAED,+DA8CC;IAED,0CAeC;IAED,8HAA8H;IAC9H,4CAeC;IAED;;;;OAIG;IACH,mDASC;IAED;;;OAGG;IACH,uCAGC;IAED;;;;OAIG;IACH,8CASC;IAED,+BAGC;CACF"}
1
+ {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.js"],"names":[],"mappings":";AAIA;;;;GAIG;AACH;IACE,oDAAoD;IACpD,0BAA0B;IAE1B,gEAAgE;IAChE,gCAA8B;IAE9B;;;;;;OAMG;IACH,+CAHW,MAAM,eACN,MAAM,QAahB;IAED;;;;;;;;OAQG;IACH,0CANW,MAAM,YACN,MAAM,cACN,MAAM,OACN,MAAM,WACN,IAAI,MAAM,EAAE,MAAM,CAAC,iBAsB7B;IAED;;;;;;;;;;OAsBC;IAXC,gCAAwC;IACxC,8BAAoC;IACpC,oCAAgD;IAChD,sCAAoD;IACpD,0BAA4B;IAG5B,yBAA0B;IAC1B,4BAAgC;IAChC,eAA0B;IAC1B,kBAAgC;IAGlC,6FAA6F;IAC7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmYC;IAED,0BAKC;IAED,0BAKC;IAED,wEAmBC;IAED,yEAwBC;IAED,sEAUC;IAED,mDAAmD;IACnD,mCAMC;IAED,gDAAgD;IAChD,gCAMC;IAED;;;OAGG;IACH,oEAqBC;IAED;;;OAGG;IACH,qEAyBC;IAED,sDASC;IAED,+DAMC;IAED,yDASC;IAED,8DAMC;IAED,iDAmBC;IAED,gDAeC;IAED,gGAiCC;IAED,+FAwBC;IAED,+EAeC;IAED,kGAWC;IAED,0EAWC;IAED,yFAWC;IAED,4FAA4F;IAC5F,0FAoBC;IAED,uEAWC;IAED,wEAYC;IAED,qEAQC;IAED,wEAWC;IAED,4FASC;IAED,qGASC;IAED,2GAkBC;IAED,kHAwBC;IAED,mGAWC;IAED,0GAgBC;IAED,0GAaC;IAED,6EAKC;IAED,+CAMC;IAED,iGAiBC;IAED,0DAQC;IAED,8CAQC;IAED,gEAQC;IAED,oDAQC;IAED,6DAgBC;IAED,2EAA2E;IAC3E,kHA+BC;IAED,iEAWC;IAED,+DA8CC;IAED,0CAiBC;IAED,8HAA8H;IAC9H,4CAeC;IAED;;;;OAIG;IACH,mDASC;IAED;;;OAGG;IACH,uCAGC;IAED;;;;OAIG;IACH,8CASC;IAED,+BAGC;CACF"}
@@ -155,8 +155,9 @@ class GridMetricCalculator {
155
155
  var rowHeightValues = Array.from(visibleRowHeights.values());
156
156
  var maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;
157
157
  var maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;
158
+ var floatingBottomHeight = this.getFloatingBottomHeight(state, visibleRowHeights);
158
159
  var lastLeft = this.getLastLeft(state, null, width - gridX - scrollBarSize - rowFooterWidth);
159
- var lastTop = this.getLastTop(state, null, height - gridY - scrollBarSize); // Calculate some metrics for the scroll bars
160
+ var lastTop = this.getLastTop(state, null, height - gridY - scrollBarSize - floatingBottomHeight); // Calculate some metrics for the scroll bars
160
161
 
161
162
  var hasHorizontalBar = lastLeft > 0;
162
163
  var hasVerticalBar = lastTop > 0;
@@ -200,7 +201,6 @@ class GridMetricCalculator {
200
201
  var bottomVisible = lastTop > 0 ? this.getBottomVisible(state, visibleRowYs, visibleRowHeights, visibleRows, gridY) : bottom;
201
202
  var rightVisible = lastLeft > 0 ? this.getRightVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns, gridX) : right;
202
203
  var floatingTopHeight = this.getFloatingTopHeight(state, visibleRowHeights);
203
- var floatingBottomHeight = this.getFloatingBottomHeight(state, visibleRowHeights);
204
204
  var floatingLeftWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);
205
205
  var floatingRightWidth = this.getFloatingRightWidth(state, visibleColumnWidths);
206
206
  var {
@@ -1078,6 +1078,11 @@ class GridMetricCalculator {
1078
1078
  rowHeight,
1079
1079
  treeDepthIndent
1080
1080
  } = theme;
1081
+
1082
+ if (!model.hasExpandableRows) {
1083
+ return 0;
1084
+ }
1085
+
1081
1086
  var treePadding = 0;
1082
1087
  var rowsPerPage = height / rowHeight;
1083
1088
  var bottom = Math.ceil(top + rowsPerPage);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridMetricCalculator.js"],"names":["GridUtils","GridMetricCalculator","trimMap","map","cacheSize","CACHE_SIZE","targetSize","Math","floor","size","iter","keys","delete","next","value","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","Map","x","i","set","get","constructor","userColumnWidths","userRowHeights","calculatedRowHeights","calculatedColumnWidths","fontWidths","modelRows","modelColumns","movedRows","movedColumns","getMetrics","state","left","top","leftOffset","topOffset","width","height","theme","model","rowHeight","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","clear","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","firstRow","getFirstRow","firstColumn","getFirstColumn","gridX","getGridX","gridY","getGridY","treePaddingX","hasExpandableRows","calculateTreePaddingX","treePaddingY","visibleRowHeights","getVisibleRowHeights","visibleColumnWidths","getVisibleColumnWidths","visibleRows","Array","from","visibleColumns","visibleColumnXs","getVisibleColumnXs","visibleRowYs","getVisibleRowYs","bottom","length","right","bottomViewport","getBottomViewport","rightViewport","getRightViewport","columnWidthValues","values","rowHeightValues","maxX","reduce","w","maxY","y","h","lastLeft","getLastLeft","lastTop","getLastTop","hasHorizontalBar","hasVerticalBar","horizontalBarHeight","verticalBarWidth","barWidth","barHeight","handleWidth","min","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","scrollX","scrollY","floatingRows","getFloatingRowHeights","getFloatingRowYs","floatingColumns","getFloatingColumnWidths","getFloatingColumnXs","allRows","concat","allColumns","getModelRows","getModelColumns","visibleRowTreeBoxes","getVisibleRowTreeBoxes","topVisible","getTopVisible","leftVisible","getLeftVisible","bottomVisible","getBottomVisible","rightVisible","getRightVisible","floatingTopHeight","getFloatingTopHeight","floatingBottomHeight","getFloatingBottomHeight","floatingLeftWidth","getFloatingLeftWidth","floatingRightWidth","getFloatingRightWidth","getVisibleHeight","getVisibleWidth","getFirstIndex","itemSizes","getModelIndex","modelIndex","getModelColumn","bind","getModelRow","visibleWidth","getVisibleColumnWidth","visibleHeight","getVisibleRowHeight","getTopForTopVisible","getTopForBottomVisible","availableHeight","getLeftForLeftVisible","getLeftForRightVisible","availableWidth","rowHeights","row","columnWidths","column","columnWidthMap","rowHeightMap","treeDepthIndent","treeHorizontalPadding","forEach","modelRow","isRowExpandable","depth","depthForRow","x1","x2","y1","y2","floatingWidth","floatingHeight","rowY","columnX","getLastIndexViewport","items","itemXs","maxSize","defaultItemSize","lastIndex","dataSize","ceil","getVisibleItemSize","userSizes","calculateSize","has","calculateRowHeight","modelColumn","calculateColumnWidth","visibleRow","visibleColumn","autoSizeRows","cachedValue","autoSizeColumns","minColumnWidth","headerWidth","calculateColumnHeaderWidth","dataWidth","calculateColumnDataWidth","headerFont","headerHorizontalPadding","headerText","textForColumnHeader","headerFontWidth","getWidthForFont","font","cellHorizontalPadding","fontWidth","rowsPerPage","iterateAllItems","text","textForCell","cellPadding","MAX_COLUMN_WIDTH","treePadding","context","textMetrics","measureText","setColumnWidth","resetColumnWidth","setRowHeight","resetRowHeight"],"mappings":"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","sourcesContent":["import GridUtils from './GridUtils';\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nclass GridMetricCalculator {\n /** The size of the caches this calculator stores */\n static CACHE_SIZE = 10000;\n\n /** The maximum column width as a percentage of the full grid */\n static MAX_COLUMN_WIDTH = 0.8;\n\n /**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param {Map} map The map to trim\n * @param {number} cacheSize The maximum number of elements to cache\n * @param {number} targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\n static trimMap(\n map,\n cacheSize = GridMetricCalculator.CACHE_SIZE,\n targetSize = Math.floor(cacheSize / 2)\n ) {\n if (map.size > cacheSize) {\n const iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n }\n\n /**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param {number} startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param {number} endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param {number} totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param {number} max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param {Map<number, number>} sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\n static getFloatingCoordinates(\n startCount,\n endCount,\n totalCount,\n max,\n sizeMap\n ) {\n const coordinates = new Map();\n let x = 0;\n for (let i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += sizeMap.get(i);\n }\n\n x = max;\n for (let i = 0; i < endCount && totalCount - i - 1 >= 0; i += 1) {\n x -= sizeMap.get(totalCount - i - 1);\n coordinates.set(totalCount - i - 1, x);\n }\n\n return coordinates;\n }\n\n constructor({\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n fontWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = null,\n movedColumns = null,\n } = {}) {\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n }\n\n /** update the calculated metrics from the model/canvas that are useful for many functions */\n getMetrics(state) {\n const {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n } = state;\n const {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize,\n } = theme;\n\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n\n const {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n // Get some basic metrics\n const firstRow = this.getFirstRow(state);\n const firstColumn = this.getFirstColumn(state);\n\n const gridX = this.getGridX(state);\n const gridY = this.getGridY(state);\n\n const treePaddingX = model.hasExpandableRows\n ? this.calculateTreePaddingX(state)\n : 0;\n const treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n let visibleRowHeights = this.getVisibleRowHeights(state);\n let visibleColumnWidths = this.getVisibleColumnWidths(\n state,\n firstColumn,\n treePaddingX\n );\n\n // Calculate the metrics for the main grid\n const visibleRows = Array.from(visibleRowHeights.keys());\n const visibleColumns = Array.from(visibleColumnWidths.keys());\n\n let visibleColumnXs = this.getVisibleColumnXs(\n visibleColumnWidths,\n visibleColumns,\n leftOffset\n );\n let visibleRowYs = this.getVisibleRowYs(\n visibleRowHeights,\n visibleRows,\n topOffset\n );\n\n const bottom =\n visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n const right =\n visibleColumns.length > 0\n ? visibleColumns[visibleColumns.length - 1]\n : left;\n\n const bottomViewport = this.getBottomViewport(\n state,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n\n const columnWidthValues = Array.from(visibleColumnWidths.values());\n const rowHeightValues = Array.from(visibleRowHeights.values());\n const maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n const maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n const lastLeft = this.getLastLeft(\n state,\n null,\n width - gridX - scrollBarSize - rowFooterWidth\n );\n const lastTop = this.getLastTop(\n state,\n null,\n height - gridY - scrollBarSize\n );\n\n // Calculate some metrics for the scroll bars\n const hasHorizontalBar = lastLeft > 0;\n const hasVerticalBar = lastTop > 0;\n const horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n const verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n const barWidth = width - rowHeaderWidth - verticalBarWidth;\n const barHeight = height - columnHeaderHeight - horizontalBarHeight;\n\n const handleWidth =\n lastLeft > 0\n ? Math.min(\n Math.max(\n minScrollHandleSize,\n barWidth * ((columnCount - lastLeft) / columnCount)\n ),\n barWidth - 1\n )\n : 0;\n const handleHeight =\n lastTop > 0\n ? Math.min(\n Math.max(\n minScrollHandleSize,\n barHeight * ((rowCount - lastTop) / rowCount)\n ),\n barHeight - 1\n )\n : 0;\n\n const leftColumnWidth = visibleColumnWidths.get(left);\n const topRowHeight = visibleRowHeights.get(top);\n const leftOffsetPercent =\n leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n const topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n const scrollX =\n lastLeft > 0\n ? ((left + leftOffsetPercent) / lastLeft) * (barWidth - handleWidth)\n : 0;\n const scrollY =\n lastTop > 0\n ? ((top + topOffsetPercent) / lastTop) * (barHeight - handleHeight)\n : 0;\n\n // Now add the floating sections\n let floatingRows = [];\n if (floatingTopRowCount > 0 || floatingBottomRowCount > 0) {\n floatingRows = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n visibleRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n visibleRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n visibleRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n }\n\n let floatingColumns = [];\n if (floatingLeftColumnCount > 0 || floatingRightColumnCount > 0) {\n floatingColumns = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n visibleColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n visibleColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n visibleColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\n ),\n ]);\n }\n\n const allRows = visibleRows.concat(floatingRows);\n const allColumns = visibleColumns.concat(floatingColumns);\n const modelRows = this.getModelRows(allRows, state);\n const modelColumns = this.getModelColumns(allColumns, state);\n\n const visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(\n visibleRowHeights,\n modelRows,\n state\n );\n\n // Calculate the visible viewport based on scroll position and floating sections\n const topVisible = this.getTopVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n );\n const leftVisible = this.getLeftVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n )\n : right;\n\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n\n const {\n fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n } = this;\n\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n\n // The grid offset from the top left\n gridX,\n gridY,\n\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n\n // Canvas width/height\n width,\n height,\n\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n\n // Scroll bar metrics\n barHeight,\n barWidth,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n\n // Array of visible rows/columns, by grid index\n visibleRows,\n visibleColumns,\n\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n\n // Map of the height/width of visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n\n // Map of the width of the fonts\n fontWidths,\n\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n };\n }\n\n getGridX(state) {\n const { theme } = state;\n const { rowHeaderWidth } = theme;\n\n return rowHeaderWidth;\n }\n\n getGridY(state) {\n const { theme } = state;\n const { columnHeaderHeight } = theme;\n\n return columnHeaderHeight;\n }\n\n getVisibleHeight(\n state,\n visibleRowHeights = this.getFloatingRowHeights(state)\n ) {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n\n return (\n height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize\n );\n }\n\n getVisibleWidth(\n state,\n visibleColumnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { width, theme } = state;\n const { scrollBarSize, rowFooterWidth } = theme;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n\n return (\n width -\n floatingLeftWidth -\n floatingRightWidth -\n gridX -\n scrollBarSize -\n rowFooterWidth\n );\n }\n\n getFirstIndex(itemSizes, getModelIndex, state) {\n // We only need to check at the very most the number of items the user has hidden + 1\n const max = itemSizes.size + 1;\n for (let i = 0; i < max; i += 1) {\n const modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /** Get the first column index that isn't hidden */\n getFirstColumn(state) {\n return this.getFirstIndex(\n this.userColumnWidths,\n this.getModelColumn.bind(this),\n state\n );\n }\n\n /** Get the first row index that isn't hidden */\n getFirstRow(state) {\n return this.getFirstIndex(\n this.userRowHeights,\n this.getModelRow.bind(this),\n state\n );\n }\n\n /**\n * Get the last column that can be the left most column (eg. scrolled to the right)\n * If no right column is provided, then the last column is used.\n */\n getLastLeft(state, right = null, visibleWidth = this.getVisibleWidth(state)) {\n const { model } = state;\n const { columnCount } = model;\n\n let lastLeft = columnCount - 1;\n if (right != null) {\n lastLeft = right;\n }\n let x = 0;\n while (lastLeft >= 0) {\n const columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n\n if (x >= visibleWidth) {\n return Math.min(lastLeft + 1, columnCount - 1);\n }\n\n lastLeft -= 1;\n }\n\n return 0;\n }\n\n /**\n * The last row that can be the top row (eg. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n */\n getLastTop(\n state,\n bottom = null,\n visibleHeight = this.getVisibleHeight(state)\n ) {\n const { model } = state;\n const { rowCount, floatingBottomRowCount } = model;\n\n let lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n let y = 0;\n while (lastTop > 0) {\n const rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n\n if (y >= visibleHeight) {\n return Math.min(lastTop + 1, rowCount - 1);\n }\n\n lastTop -= 1;\n }\n\n return 0;\n }\n\n getTopForTopVisible(state, topVisible) {\n const floatingTopHeight = this.getFloatingTopHeight(state);\n let top = topVisible;\n let y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n getTopForBottomVisible(state, bottomVisible) {\n const { height } = state;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(state);\n const availableHeight = height - gridY - floatingBottomHeight;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n getLeftForLeftVisible(state, leftVisible) {\n const floatingLeftWidth = this.getFloatingLeftWidth(state);\n let left = leftVisible;\n let x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n getLeftForRightVisible(state, rightVisible) {\n const { width } = state;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(state);\n const availableWidth = width - gridX - floatingRightWidth;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n getFloatingRowHeights(state) {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n const rowHeights = new Map();\n for (let i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n\n for (\n let i = 0;\n i < floatingBottomRowCount && rowCount - i - 1 >= 0;\n i += 1\n ) {\n const row = rowCount - i - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n\n return rowHeights;\n }\n\n getVisibleRowHeights(state) {\n const { top, topOffset, height, model } = state;\n\n let y = 0;\n let row = top;\n const rowHeights = new Map();\n const { rowCount } = model;\n while (y < height + topOffset && row < rowCount) {\n const rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n\n return rowHeights;\n }\n\n getFloatingColumnWidths(\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n const columnWidths = new Map();\n for (let i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(\n i,\n this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX)\n );\n }\n\n for (\n let i = 0;\n i < floatingRightColumnCount && columnCount - i - 1 >= 0;\n i += 1\n ) {\n const column = columnCount - i - 1;\n columnWidths.set(\n column,\n this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX)\n );\n }\n\n return columnWidths;\n }\n\n getVisibleColumnWidths(\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { left, leftOffset, width, model } = state;\n\n let x = 0;\n let column = left;\n const columnWidths = new Map();\n const { columnCount } = model;\n while (x < width + leftOffset && column < columnCount) {\n const columnWidth = this.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n columnWidths.set(column, columnWidth);\n x += columnWidth;\n column += 1;\n }\n\n return columnWidths;\n }\n\n getFloatingColumnXs(state, columnWidthMap, maxX) {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n return GridMetricCalculator.getFloatingCoordinates(\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n maxX,\n columnWidthMap\n );\n }\n\n getVisibleColumnXs(visibleColumnWidths, visibleColumns, leftOffset) {\n const visibleColumnXs = new Map();\n let x = -leftOffset;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n\n return visibleColumnXs;\n }\n\n getFloatingRowYs(state, rowHeightMap, maxY) {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n return GridMetricCalculator.getFloatingCoordinates(\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n maxY,\n rowHeightMap\n );\n }\n\n getVisibleRowYs(visibleRowHeights, visibleRows, topOffset) {\n const visibleRowYs = new Map();\n let y = -topOffset;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n\n return visibleRowYs;\n }\n\n /** Calculates the tree box click areas that are visible. In relation to the columnX/rowY */\n getVisibleRowTreeBoxes(visibleRowHeights, modelRows, state) {\n const visibleRowTreeBoxes = new Map();\n const { model, theme } = state;\n const { treeDepthIndent, treeHorizontalPadding } = theme;\n\n if (model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n const modelRow = modelRows.get(row);\n if (model.isRowExpandable(modelRow)) {\n const depth = model.depthForRow(modelRow);\n const x1 = depth * treeDepthIndent + treeHorizontalPadding;\n const x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n const y1 = 0;\n const y2 = rowHeight;\n visibleRowTreeBoxes.set(row, [x1, y1, x2, y2]);\n }\n });\n }\n\n return visibleRowTreeBoxes;\n }\n\n getFloatingLeftWidth(\n state,\n columnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { model } = state;\n const { floatingLeftColumnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += columnWidths.get(i) ?? 0;\n }\n return floatingWidth;\n }\n\n getFloatingRightWidth(\n state,\n columnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { model } = state;\n const { floatingRightColumnCount, columnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += columnWidths.get(columnCount - i - 1) ?? 0;\n }\n\n return floatingWidth;\n }\n\n getFloatingTopHeight(state, rowHeights = this.getFloatingRowHeights(state)) {\n const { model } = state;\n const { floatingTopRowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += rowHeights.get(i) ?? 0;\n }\n return floatingHeight;\n }\n\n getFloatingBottomHeight(\n state,\n rowHeights = this.getFloatingRowHeights(state)\n ) {\n const { model } = state;\n const { floatingBottomRowCount, rowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += rowHeights.get(rowCount - i - 1) ?? 0;\n }\n return floatingHeight;\n }\n\n getTopVisible(state, visibleRowYs, visibleRowHeights, visibleRows) {\n const floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n if (visibleRowYs.get(row) >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n getLeftVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns) {\n const floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n if (visibleColumnXs.get(column) >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n getBottomVisible(state, visibleRowYs, visibleRowHeights, visibleRows, gridY) {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const floatingHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n\n return 0;\n }\n\n getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n ) {\n const { width, theme } = state;\n const { scrollBarSize } = theme;\n const floatingWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n\n return 0;\n }\n\n getBottomViewport(state, visibleRows, visibleRowYs, visibleRowHeights) {\n const { height, theme } = state;\n const { rowHeight } = theme;\n\n return this.getLastIndexViewport(\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n height,\n rowHeight\n );\n }\n\n getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n ) {\n const { width, theme } = state;\n const { columnWidth } = theme;\n\n return this.getLastIndexViewport(\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnWidth\n );\n }\n\n getLastIndexViewport(items, itemXs, itemSizes, maxSize, defaultItemSize) {\n let lastIndex = 0;\n let dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize = itemXs.get(lastIndex) + itemSizes.get(lastIndex);\n }\n\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n\n return lastIndex;\n }\n\n getVisibleItemSize(modelIndex, userSizes, calculateSize) {\n if (userSizes.has(modelIndex)) {\n return userSizes.get(modelIndex);\n }\n return calculateSize();\n }\n\n getVisibleRowHeight(row, state) {\n const modelRow = this.getModelRow(row, state);\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () =>\n this.calculateRowHeight(row, modelRow, state)\n );\n }\n\n getVisibleColumnWidth(\n column,\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const modelColumn = this.getModelColumn(column, state);\n\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () =>\n this.calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn,\n treePaddingX\n )\n );\n }\n\n getModelRows(visibleRows, state) {\n const modelRows = new Map();\n for (let i = 0; i < visibleRows.length; i += 1) {\n const visibleRow = visibleRows[i];\n const modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n getModelRow(visibleRow, state) {\n if (this.modelRows.has(visibleRow)) {\n return this.modelRows.get(visibleRow);\n }\n const { movedRows } = state;\n const modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n getModelColumns(visibleColumns, state) {\n const modelColumns = new Map();\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const visibleColumn = visibleColumns[i];\n const modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n getModelColumn(visibleColumn, state) {\n if (this.modelColumns.has(visibleColumn)) {\n return this.modelColumns.get(visibleColumn);\n }\n const { movedColumns } = state;\n const modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n calculateRowHeight(row, modelRow, state) {\n const { theme } = state;\n const { autoSizeRows, rowHeight } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n const cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n GridMetricCalculator.trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /** Calculates the column width based on the provided column model index */\n calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { theme } = state;\n const { autoSizeColumns, minColumnWidth } = theme;\n if (!autoSizeColumns) {\n const { columnWidth } = theme;\n return columnWidth;\n }\n\n const headerWidth = this.calculateColumnHeaderWidth(modelColumn, state);\n const dataWidth = this.calculateColumnDataWidth(modelColumn, state);\n const cachedValue = this.calculatedColumnWidths.get(modelColumn);\n let columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n GridMetricCalculator.trimMap(this.calculatedColumnWidths);\n }\n\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n\n return columnWidth;\n }\n\n calculateColumnHeaderWidth(modelColumn, state) {\n const { model, theme } = state;\n const { headerFont, headerHorizontalPadding } = theme;\n\n const headerText = model.textForColumnHeader(modelColumn);\n if (headerText) {\n const headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n\n return headerHorizontalPadding * 2;\n }\n\n calculateColumnDataWidth(modelColumn, state) {\n const { top, height, width, model, theme } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n const {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n } = theme;\n\n let columnWidth = 0;\n\n const fontWidth = this.getWidthForFont(font, state);\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n GridUtils.iterateAllItems(\n top,\n bottom,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n row => {\n const modelRow = this.getModelRow(row, state);\n const text = model.textForCell(modelColumn, modelRow);\n if (text) {\n const cellPadding = cellHorizontalPadding * 2;\n columnWidth = Math.max(\n columnWidth,\n text.length * fontWidth + cellPadding\n );\n }\n }\n );\n\n columnWidth = Math.max(\n Math.min(\n columnWidth,\n (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) *\n GridMetricCalculator.MAX_COLUMN_WIDTH\n ),\n cellHorizontalPadding * 2\n );\n\n return columnWidth;\n }\n\n calculateTreePaddingX(state) {\n const { top, height, model, theme } = state;\n const { rowHeight, treeDepthIndent } = theme;\n\n let treePadding = 0;\n\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n for (let row = top; row <= bottom; row += 1) {\n const modelRow = this.getModelRow(row, state);\n const depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n\n return treePadding;\n }\n\n /** Get the width of the provided font. Exploits the fact that we're using tabular figures so every character is same width */\n getWidthForFont(font, state) {\n if (this.fontWidths.has(font)) {\n return this.fontWidths.get(font);\n }\n const { context } = state;\n context.font = font;\n const textMetrics = context.measureText('8');\n const { width } = textMetrics;\n\n // context.font changes the string a little bit, eg. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n\n return width;\n }\n\n /**\n * Sets the width for the specified column\n * @param {Number} column The column model index to set\n * @param {Number} size The size to set it to, or null to reset the column size\n */\n setColumnWidth(column, size) {\n const userColumnWidths = new Map(this.userColumnWidths);\n if (size != null) {\n userColumnWidths.set(column, Math.ceil(size));\n GridMetricCalculator.trimMap(userColumnWidths);\n } else {\n userColumnWidths.delete(column);\n }\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param {Number} column The column model index to reset\n */\n resetColumnWidth(column) {\n this.setColumnWidth(column, null);\n this.calculatedColumnWidths.delete(column);\n }\n\n /**\n * Sets the width for the specified row\n * @param {Number} row The row model index to set\n * @param {Number} size The size to set it to, or null to reset the row size\n */\n setRowHeight(row, size) {\n const userRowHeights = new Map(this.userRowHeights);\n if (size != null) {\n userRowHeights.set(row, Math.ceil(size));\n GridMetricCalculator.trimMap(userRowHeights);\n } else {\n userRowHeights.delete(row);\n }\n this.userRowHeights = userRowHeights;\n }\n\n resetRowHeight(row) {\n this.setRowHeight(row, null);\n this.calculatedRowHeights.delete(row);\n }\n}\n\nexport default GridMetricCalculator;\n"],"file":"GridMetricCalculator.js"}
1
+ {"version":3,"sources":["../src/GridMetricCalculator.js"],"names":["GridUtils","GridMetricCalculator","trimMap","map","cacheSize","CACHE_SIZE","targetSize","Math","floor","size","iter","keys","delete","next","value","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","Map","x","i","set","get","constructor","userColumnWidths","userRowHeights","calculatedRowHeights","calculatedColumnWidths","fontWidths","modelRows","modelColumns","movedRows","movedColumns","getMetrics","state","left","top","leftOffset","topOffset","width","height","theme","model","rowHeight","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","clear","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","firstRow","getFirstRow","firstColumn","getFirstColumn","gridX","getGridX","gridY","getGridY","treePaddingX","hasExpandableRows","calculateTreePaddingX","treePaddingY","visibleRowHeights","getVisibleRowHeights","visibleColumnWidths","getVisibleColumnWidths","visibleRows","Array","from","visibleColumns","visibleColumnXs","getVisibleColumnXs","visibleRowYs","getVisibleRowYs","bottom","length","right","bottomViewport","getBottomViewport","rightViewport","getRightViewport","columnWidthValues","values","rowHeightValues","maxX","reduce","w","maxY","y","h","floatingBottomHeight","getFloatingBottomHeight","lastLeft","getLastLeft","lastTop","getLastTop","hasHorizontalBar","hasVerticalBar","horizontalBarHeight","verticalBarWidth","barWidth","barHeight","handleWidth","min","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","scrollX","scrollY","floatingRows","getFloatingRowHeights","getFloatingRowYs","floatingColumns","getFloatingColumnWidths","getFloatingColumnXs","allRows","concat","allColumns","getModelRows","getModelColumns","visibleRowTreeBoxes","getVisibleRowTreeBoxes","topVisible","getTopVisible","leftVisible","getLeftVisible","bottomVisible","getBottomVisible","rightVisible","getRightVisible","floatingTopHeight","getFloatingTopHeight","floatingLeftWidth","getFloatingLeftWidth","floatingRightWidth","getFloatingRightWidth","getVisibleHeight","getVisibleWidth","getFirstIndex","itemSizes","getModelIndex","modelIndex","getModelColumn","bind","getModelRow","visibleWidth","getVisibleColumnWidth","visibleHeight","getVisibleRowHeight","getTopForTopVisible","getTopForBottomVisible","availableHeight","getLeftForLeftVisible","getLeftForRightVisible","availableWidth","rowHeights","row","columnWidths","column","columnWidthMap","rowHeightMap","treeDepthIndent","treeHorizontalPadding","forEach","modelRow","isRowExpandable","depth","depthForRow","x1","x2","y1","y2","floatingWidth","floatingHeight","rowY","columnX","getLastIndexViewport","items","itemXs","maxSize","defaultItemSize","lastIndex","dataSize","ceil","getVisibleItemSize","userSizes","calculateSize","has","calculateRowHeight","modelColumn","calculateColumnWidth","visibleRow","visibleColumn","autoSizeRows","cachedValue","autoSizeColumns","minColumnWidth","headerWidth","calculateColumnHeaderWidth","dataWidth","calculateColumnDataWidth","headerFont","headerHorizontalPadding","headerText","textForColumnHeader","headerFontWidth","getWidthForFont","font","cellHorizontalPadding","fontWidth","rowsPerPage","iterateAllItems","text","textForCell","cellPadding","MAX_COLUMN_WIDTH","treePadding","context","textMetrics","measureText","setColumnWidth","resetColumnWidth","setRowHeight","resetRowHeight"],"mappings":"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","sourcesContent":["import GridUtils from './GridUtils';\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nclass GridMetricCalculator {\n /** The size of the caches this calculator stores */\n static CACHE_SIZE = 10000;\n\n /** The maximum column width as a percentage of the full grid */\n static MAX_COLUMN_WIDTH = 0.8;\n\n /**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param {Map} map The map to trim\n * @param {number} cacheSize The maximum number of elements to cache\n * @param {number} targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\n static trimMap(\n map,\n cacheSize = GridMetricCalculator.CACHE_SIZE,\n targetSize = Math.floor(cacheSize / 2)\n ) {\n if (map.size > cacheSize) {\n const iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n }\n\n /**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param {number} startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param {number} endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param {number} totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param {number} max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param {Map<number, number>} sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\n static getFloatingCoordinates(\n startCount,\n endCount,\n totalCount,\n max,\n sizeMap\n ) {\n const coordinates = new Map();\n let x = 0;\n for (let i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += sizeMap.get(i);\n }\n\n x = max;\n for (let i = 0; i < endCount && totalCount - i - 1 >= 0; i += 1) {\n x -= sizeMap.get(totalCount - i - 1);\n coordinates.set(totalCount - i - 1, x);\n }\n return coordinates;\n }\n\n constructor({\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n fontWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = null,\n movedColumns = null,\n } = {}) {\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n }\n\n /** update the calculated metrics from the model/canvas that are useful for many functions */\n getMetrics(state) {\n const {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n } = state;\n const {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize,\n } = theme;\n\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n\n const {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n // Get some basic metrics\n const firstRow = this.getFirstRow(state);\n const firstColumn = this.getFirstColumn(state);\n\n const gridX = this.getGridX(state);\n const gridY = this.getGridY(state);\n\n const treePaddingX = model.hasExpandableRows\n ? this.calculateTreePaddingX(state)\n : 0;\n const treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n let visibleRowHeights = this.getVisibleRowHeights(state);\n let visibleColumnWidths = this.getVisibleColumnWidths(\n state,\n firstColumn,\n treePaddingX\n );\n\n // Calculate the metrics for the main grid\n const visibleRows = Array.from(visibleRowHeights.keys());\n const visibleColumns = Array.from(visibleColumnWidths.keys());\n\n let visibleColumnXs = this.getVisibleColumnXs(\n visibleColumnWidths,\n visibleColumns,\n leftOffset\n );\n let visibleRowYs = this.getVisibleRowYs(\n visibleRowHeights,\n visibleRows,\n topOffset\n );\n\n const bottom =\n visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n const right =\n visibleColumns.length > 0\n ? visibleColumns[visibleColumns.length - 1]\n : left;\n\n const bottomViewport = this.getBottomViewport(\n state,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n\n const columnWidthValues = Array.from(visibleColumnWidths.values());\n const rowHeightValues = Array.from(visibleRowHeights.values());\n const maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n const maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n\n const lastLeft = this.getLastLeft(\n state,\n null,\n width - gridX - scrollBarSize - rowFooterWidth\n );\n const lastTop = this.getLastTop(\n state,\n null,\n height - gridY - scrollBarSize - floatingBottomHeight\n );\n\n // Calculate some metrics for the scroll bars\n const hasHorizontalBar = lastLeft > 0;\n const hasVerticalBar = lastTop > 0;\n const horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n const verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n const barWidth = width - rowHeaderWidth - verticalBarWidth;\n const barHeight = height - columnHeaderHeight - horizontalBarHeight;\n\n const handleWidth =\n lastLeft > 0\n ? Math.min(\n Math.max(\n minScrollHandleSize,\n barWidth * ((columnCount - lastLeft) / columnCount)\n ),\n barWidth - 1\n )\n : 0;\n const handleHeight =\n lastTop > 0\n ? Math.min(\n Math.max(\n minScrollHandleSize,\n barHeight * ((rowCount - lastTop) / rowCount)\n ),\n barHeight - 1\n )\n : 0;\n\n const leftColumnWidth = visibleColumnWidths.get(left);\n const topRowHeight = visibleRowHeights.get(top);\n const leftOffsetPercent =\n leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n const topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n const scrollX =\n lastLeft > 0\n ? ((left + leftOffsetPercent) / lastLeft) * (barWidth - handleWidth)\n : 0;\n const scrollY =\n lastTop > 0\n ? ((top + topOffsetPercent) / lastTop) * (barHeight - handleHeight)\n : 0;\n\n // Now add the floating sections\n let floatingRows = [];\n if (floatingTopRowCount > 0 || floatingBottomRowCount > 0) {\n floatingRows = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n visibleRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n visibleRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n visibleRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n }\n\n let floatingColumns = [];\n if (floatingLeftColumnCount > 0 || floatingRightColumnCount > 0) {\n floatingColumns = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n visibleColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n visibleColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n visibleColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\n ),\n ]);\n }\n\n const allRows = visibleRows.concat(floatingRows);\n const allColumns = visibleColumns.concat(floatingColumns);\n const modelRows = this.getModelRows(allRows, state);\n const modelColumns = this.getModelColumns(allColumns, state);\n\n const visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(\n visibleRowHeights,\n modelRows,\n state\n );\n\n // Calculate the visible viewport based on scroll position and floating sections\n const topVisible = this.getTopVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n );\n const leftVisible = this.getLeftVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n )\n : right;\n\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n\n const {\n fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n } = this;\n\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n\n // The grid offset from the top left\n gridX,\n gridY,\n\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n\n // Canvas width/height\n width,\n height,\n\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n\n // Scroll bar metrics\n barHeight,\n barWidth,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n\n // Array of visible rows/columns, by grid index\n visibleRows,\n visibleColumns,\n\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n\n // Map of the height/width of visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n\n // Map of the width of the fonts\n fontWidths,\n\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n };\n }\n\n getGridX(state) {\n const { theme } = state;\n const { rowHeaderWidth } = theme;\n\n return rowHeaderWidth;\n }\n\n getGridY(state) {\n const { theme } = state;\n const { columnHeaderHeight } = theme;\n\n return columnHeaderHeight;\n }\n\n getVisibleHeight(\n state,\n visibleRowHeights = this.getFloatingRowHeights(state)\n ) {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n\n return (\n height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize\n );\n }\n\n getVisibleWidth(\n state,\n visibleColumnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { width, theme } = state;\n const { scrollBarSize, rowFooterWidth } = theme;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n\n return (\n width -\n floatingLeftWidth -\n floatingRightWidth -\n gridX -\n scrollBarSize -\n rowFooterWidth\n );\n }\n\n getFirstIndex(itemSizes, getModelIndex, state) {\n // We only need to check at the very most the number of items the user has hidden + 1\n const max = itemSizes.size + 1;\n for (let i = 0; i < max; i += 1) {\n const modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /** Get the first column index that isn't hidden */\n getFirstColumn(state) {\n return this.getFirstIndex(\n this.userColumnWidths,\n this.getModelColumn.bind(this),\n state\n );\n }\n\n /** Get the first row index that isn't hidden */\n getFirstRow(state) {\n return this.getFirstIndex(\n this.userRowHeights,\n this.getModelRow.bind(this),\n state\n );\n }\n\n /**\n * Get the last column that can be the left most column (eg. scrolled to the right)\n * If no right column is provided, then the last column is used.\n */\n getLastLeft(state, right = null, visibleWidth = this.getVisibleWidth(state)) {\n const { model } = state;\n const { columnCount } = model;\n\n let lastLeft = columnCount - 1;\n if (right != null) {\n lastLeft = right;\n }\n let x = 0;\n while (lastLeft >= 0) {\n const columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n\n if (x >= visibleWidth) {\n return Math.min(lastLeft + 1, columnCount - 1);\n }\n\n lastLeft -= 1;\n }\n\n return 0;\n }\n\n /**\n * The last row that can be the top row (eg. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n */\n getLastTop(\n state,\n bottom = null,\n visibleHeight = this.getVisibleHeight(state)\n ) {\n const { model } = state;\n const { rowCount, floatingBottomRowCount } = model;\n\n let lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n let y = 0;\n while (lastTop > 0) {\n const rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n\n if (y >= visibleHeight) {\n return Math.min(lastTop + 1, rowCount - 1);\n }\n\n lastTop -= 1;\n }\n\n return 0;\n }\n\n getTopForTopVisible(state, topVisible) {\n const floatingTopHeight = this.getFloatingTopHeight(state);\n let top = topVisible;\n let y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n getTopForBottomVisible(state, bottomVisible) {\n const { height } = state;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(state);\n const availableHeight = height - gridY - floatingBottomHeight;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n getLeftForLeftVisible(state, leftVisible) {\n const floatingLeftWidth = this.getFloatingLeftWidth(state);\n let left = leftVisible;\n let x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n getLeftForRightVisible(state, rightVisible) {\n const { width } = state;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(state);\n const availableWidth = width - gridX - floatingRightWidth;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n getFloatingRowHeights(state) {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n const rowHeights = new Map();\n for (let i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n\n for (\n let i = 0;\n i < floatingBottomRowCount && rowCount - i - 1 >= 0;\n i += 1\n ) {\n const row = rowCount - i - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n\n return rowHeights;\n }\n\n getVisibleRowHeights(state) {\n const { top, topOffset, height, model } = state;\n\n let y = 0;\n let row = top;\n const rowHeights = new Map();\n const { rowCount } = model;\n while (y < height + topOffset && row < rowCount) {\n const rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n\n return rowHeights;\n }\n\n getFloatingColumnWidths(\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n const columnWidths = new Map();\n for (let i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(\n i,\n this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX)\n );\n }\n\n for (\n let i = 0;\n i < floatingRightColumnCount && columnCount - i - 1 >= 0;\n i += 1\n ) {\n const column = columnCount - i - 1;\n columnWidths.set(\n column,\n this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX)\n );\n }\n\n return columnWidths;\n }\n\n getVisibleColumnWidths(\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { left, leftOffset, width, model } = state;\n\n let x = 0;\n let column = left;\n const columnWidths = new Map();\n const { columnCount } = model;\n while (x < width + leftOffset && column < columnCount) {\n const columnWidth = this.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n columnWidths.set(column, columnWidth);\n x += columnWidth;\n column += 1;\n }\n\n return columnWidths;\n }\n\n getFloatingColumnXs(state, columnWidthMap, maxX) {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n return GridMetricCalculator.getFloatingCoordinates(\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n maxX,\n columnWidthMap\n );\n }\n\n getVisibleColumnXs(visibleColumnWidths, visibleColumns, leftOffset) {\n const visibleColumnXs = new Map();\n let x = -leftOffset;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n\n return visibleColumnXs;\n }\n\n getFloatingRowYs(state, rowHeightMap, maxY) {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n return GridMetricCalculator.getFloatingCoordinates(\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n maxY,\n rowHeightMap\n );\n }\n\n getVisibleRowYs(visibleRowHeights, visibleRows, topOffset) {\n const visibleRowYs = new Map();\n let y = -topOffset;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n\n return visibleRowYs;\n }\n\n /** Calculates the tree box click areas that are visible. In relation to the columnX/rowY */\n getVisibleRowTreeBoxes(visibleRowHeights, modelRows, state) {\n const visibleRowTreeBoxes = new Map();\n const { model, theme } = state;\n const { treeDepthIndent, treeHorizontalPadding } = theme;\n\n if (model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n const modelRow = modelRows.get(row);\n if (model.isRowExpandable(modelRow)) {\n const depth = model.depthForRow(modelRow);\n const x1 = depth * treeDepthIndent + treeHorizontalPadding;\n const x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n const y1 = 0;\n const y2 = rowHeight;\n visibleRowTreeBoxes.set(row, [x1, y1, x2, y2]);\n }\n });\n }\n\n return visibleRowTreeBoxes;\n }\n\n getFloatingLeftWidth(\n state,\n columnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { model } = state;\n const { floatingLeftColumnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += columnWidths.get(i) ?? 0;\n }\n return floatingWidth;\n }\n\n getFloatingRightWidth(\n state,\n columnWidths = this.getFloatingColumnWidths(state)\n ) {\n const { model } = state;\n const { floatingRightColumnCount, columnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += columnWidths.get(columnCount - i - 1) ?? 0;\n }\n\n return floatingWidth;\n }\n\n getFloatingTopHeight(state, rowHeights = this.getFloatingRowHeights(state)) {\n const { model } = state;\n const { floatingTopRowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += rowHeights.get(i) ?? 0;\n }\n return floatingHeight;\n }\n\n getFloatingBottomHeight(\n state,\n rowHeights = this.getFloatingRowHeights(state)\n ) {\n const { model } = state;\n const { floatingBottomRowCount, rowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += rowHeights.get(rowCount - i - 1) ?? 0;\n }\n return floatingHeight;\n }\n\n getTopVisible(state, visibleRowYs, visibleRowHeights, visibleRows) {\n const floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n if (visibleRowYs.get(row) >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n getLeftVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns) {\n const floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n if (visibleColumnXs.get(column) >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n getBottomVisible(state, visibleRowYs, visibleRowHeights, visibleRows, gridY) {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const floatingHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n\n return 0;\n }\n\n getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n ) {\n const { width, theme } = state;\n const { scrollBarSize } = theme;\n const floatingWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n\n return 0;\n }\n\n getBottomViewport(state, visibleRows, visibleRowYs, visibleRowHeights) {\n const { height, theme } = state;\n const { rowHeight } = theme;\n\n return this.getLastIndexViewport(\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n height,\n rowHeight\n );\n }\n\n getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n ) {\n const { width, theme } = state;\n const { columnWidth } = theme;\n\n return this.getLastIndexViewport(\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnWidth\n );\n }\n\n getLastIndexViewport(items, itemXs, itemSizes, maxSize, defaultItemSize) {\n let lastIndex = 0;\n let dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize = itemXs.get(lastIndex) + itemSizes.get(lastIndex);\n }\n\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n\n return lastIndex;\n }\n\n getVisibleItemSize(modelIndex, userSizes, calculateSize) {\n if (userSizes.has(modelIndex)) {\n return userSizes.get(modelIndex);\n }\n return calculateSize();\n }\n\n getVisibleRowHeight(row, state) {\n const modelRow = this.getModelRow(row, state);\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () =>\n this.calculateRowHeight(row, modelRow, state)\n );\n }\n\n getVisibleColumnWidth(\n column,\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const modelColumn = this.getModelColumn(column, state);\n\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () =>\n this.calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn,\n treePaddingX\n )\n );\n }\n\n getModelRows(visibleRows, state) {\n const modelRows = new Map();\n for (let i = 0; i < visibleRows.length; i += 1) {\n const visibleRow = visibleRows[i];\n const modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n getModelRow(visibleRow, state) {\n if (this.modelRows.has(visibleRow)) {\n return this.modelRows.get(visibleRow);\n }\n const { movedRows } = state;\n const modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n getModelColumns(visibleColumns, state) {\n const modelColumns = new Map();\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const visibleColumn = visibleColumns[i];\n const modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n getModelColumn(visibleColumn, state) {\n if (this.modelColumns.has(visibleColumn)) {\n return this.modelColumns.get(visibleColumn);\n }\n const { movedColumns } = state;\n const modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n calculateRowHeight(row, modelRow, state) {\n const { theme } = state;\n const { autoSizeRows, rowHeight } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n const cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n GridMetricCalculator.trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /** Calculates the column width based on the provided column model index */\n calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ) {\n const { theme } = state;\n const { autoSizeColumns, minColumnWidth } = theme;\n if (!autoSizeColumns) {\n const { columnWidth } = theme;\n return columnWidth;\n }\n\n const headerWidth = this.calculateColumnHeaderWidth(modelColumn, state);\n const dataWidth = this.calculateColumnDataWidth(modelColumn, state);\n const cachedValue = this.calculatedColumnWidths.get(modelColumn);\n let columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n GridMetricCalculator.trimMap(this.calculatedColumnWidths);\n }\n\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n\n return columnWidth;\n }\n\n calculateColumnHeaderWidth(modelColumn, state) {\n const { model, theme } = state;\n const { headerFont, headerHorizontalPadding } = theme;\n\n const headerText = model.textForColumnHeader(modelColumn);\n if (headerText) {\n const headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n\n return headerHorizontalPadding * 2;\n }\n\n calculateColumnDataWidth(modelColumn, state) {\n const { top, height, width, model, theme } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n const {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n } = theme;\n\n let columnWidth = 0;\n\n const fontWidth = this.getWidthForFont(font, state);\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n GridUtils.iterateAllItems(\n top,\n bottom,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n row => {\n const modelRow = this.getModelRow(row, state);\n const text = model.textForCell(modelColumn, modelRow);\n if (text) {\n const cellPadding = cellHorizontalPadding * 2;\n columnWidth = Math.max(\n columnWidth,\n text.length * fontWidth + cellPadding\n );\n }\n }\n );\n\n columnWidth = Math.max(\n Math.min(\n columnWidth,\n (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) *\n GridMetricCalculator.MAX_COLUMN_WIDTH\n ),\n cellHorizontalPadding * 2\n );\n\n return columnWidth;\n }\n\n calculateTreePaddingX(state) {\n const { top, height, model, theme } = state;\n const { rowHeight, treeDepthIndent } = theme;\n if (!model.hasExpandableRows) {\n return 0;\n }\n let treePadding = 0;\n\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n for (let row = top; row <= bottom; row += 1) {\n const modelRow = this.getModelRow(row, state);\n const depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n\n return treePadding;\n }\n\n /** Get the width of the provided font. Exploits the fact that we're using tabular figures so every character is same width */\n getWidthForFont(font, state) {\n if (this.fontWidths.has(font)) {\n return this.fontWidths.get(font);\n }\n const { context } = state;\n context.font = font;\n const textMetrics = context.measureText('8');\n const { width } = textMetrics;\n\n // context.font changes the string a little bit, eg. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n\n return width;\n }\n\n /**\n * Sets the width for the specified column\n * @param {Number} column The column model index to set\n * @param {Number} size The size to set it to, or null to reset the column size\n */\n setColumnWidth(column, size) {\n const userColumnWidths = new Map(this.userColumnWidths);\n if (size != null) {\n userColumnWidths.set(column, Math.ceil(size));\n GridMetricCalculator.trimMap(userColumnWidths);\n } else {\n userColumnWidths.delete(column);\n }\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param {Number} column The column model index to reset\n */\n resetColumnWidth(column) {\n this.setColumnWidth(column, null);\n this.calculatedColumnWidths.delete(column);\n }\n\n /**\n * Sets the width for the specified row\n * @param {Number} row The row model index to set\n * @param {Number} size The size to set it to, or null to reset the row size\n */\n setRowHeight(row, size) {\n const userRowHeights = new Map(this.userRowHeights);\n if (size != null) {\n userRowHeights.set(row, Math.ceil(size));\n GridMetricCalculator.trimMap(userRowHeights);\n } else {\n userRowHeights.delete(row);\n }\n this.userRowHeights = userRowHeights;\n }\n\n resetRowHeight(row) {\n this.setRowHeight(row, null);\n this.calculatedRowHeights.delete(row);\n }\n}\n\nexport default GridMetricCalculator;\n"],"file":"GridMetricCalculator.js"}
@@ -31,8 +31,9 @@ declare class GridRenderer {
31
31
  * @param {string} str The string to calculate max length for
32
32
  * @param {number} width The width to truncate within
33
33
  * @param {number} fontWidth The estimated width of each character
34
+ * @returns {string} The truncated string that fits within the width provided
34
35
  */
35
- static truncateToWidth(context: any, str: string, width: number, fontWidth?: number): string | null;
36
+ static truncateToWidth(context: any, str: string, width: number, fontWidth?: number): string;
36
37
  /**
37
38
  *
38
39
  * @param {CanvasRenderingContext2D} context The context to draw the grid in
@@ -1 +1 @@
1
- {"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.js"],"names":[],"mappings":";AAOA;;;;GAIG;AACH;IACE,kCAA+B;IAE/B,mCAA+B;IAE/B,wCAAoC;IAEpC;;;;OAIG;IACH,qBAHW,MAAM,OACN,MAAM,UAQhB;IAED;;;;;;;OAOG;IACH,gDALW,MAAM,SACN,MAAM,UACN,MAAM,QACN,MAAM,UAmChB;IAED;;;;;;;;OAQG;IACH,0CAJW,MAAM,SACN,MAAM,cACN,MAAM,iBAgBhB;IAED;;;;OAIG;IACH,6BAsBC;IAED,iDAKC;IAED,+CAKC;IAED,yCAmBC;IAED,iDA0FC;IAED,oDAwGC;IAED,oDA2FC;IAED,wEA4DC;IAED,+CAaC;IAED,sHA0GC;IAED,qDAiBC;IAED,kDAaC;IAED,0DAqBC;IAED,kEAkBC;IAED,8CAYC;IAED,gHAkBC;IAED,sEASC;IAED,gEAWC;IAED,oDASC;IAED,qFAcC;IAED,yFAqCC;IAED,iDAQC;IAED,oEAsBC;IAED,uEAyEC;IAED,gEAwCC;IAED,mHAQC;IAED,mFA2DC;IAED,2GAIE;IAEF,4GAUE;IAEF,0GAGE;IAEF,4CAQC;IAED,4CAMC;IAED,kDAyJC;IAED,8FA6CC;IAED,+CA0JC;IAED,mFAUC;IAED,+CA6KC;IAED,kEAoIC;IAED,4FA0CC;IAED;;;;;;;;;OASG;IACH,iCANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,MACN,MAAM,QAchB;IAED,mDAyEC;IAED,gDA6DC;IAED,+CAkKC;CACF"}
1
+ {"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.js"],"names":[],"mappings":";AAOA;;;;GAIG;AACH;IACE,kCAA+B;IAE/B,mCAA+B;IAE/B,wCAAoC;IAEpC;;;;OAIG;IACH,qBAHW,MAAM,OACN,MAAM,UAQhB;IAED;;;;;;;OAOG;IACH,gDALW,MAAM,SACN,MAAM,UACN,MAAM,QACN,MAAM,UAuChB;IAED;;;;;;;;;OASG;IACH,0CALW,MAAM,SACN,MAAM,cACN,MAAM,GACJ,MAAM,CAsBlB;IAED;;;;OAIG;IACH,6BAsBC;IAED,iDAKC;IAED,+CAKC;IAED,yCAmBC;IAED,iDA0FC;IAED,oDAgHC;IAED,oDA2FC;IAED,wEA4DC;IAED,+CAaC;IAED,sHA0GC;IAED,qDAiBC;IAED,kDAaC;IAED,0DAqBC;IAED,kEAkBC;IAED,8CAYC;IAED,gHAkBC;IAED,sEASC;IAED,gEAYC;IAED,oDASC;IAED,qFAcC;IAED,yFAqCC;IAED,iDAQC;IAED,oEAsBC;IAED,uEAyEC;IAED,gEAwCC;IAED,mHAQC;IAED,mFA2DC;IAED,2GAIE;IAEF,4GAUE;IAEF,0GAGE;IAEF,4CAQC;IAED,4CAMC;IAED,kDAuMC;IAED,8FA0CC;IAED,+CA0JC;IAED,mFAUC;IAED,+CA6KC;IAED,kEAoIC;IAED,4FA0CC;IAED;;;;;;;;;OASG;IACH,iCANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,MACN,MAAM,QAchB;IAED,mDAyEC;IAED,gDA6DC;IAED,+CAkKC;CACF"}