@deephaven/iris-grid 0.14.0 → 0.14.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +1 -4
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +0 -2
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +0 -4
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +1 -2
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +2 -5
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridCellOverflowModal.d.ts","sourceRoot":"","sources":["../src/IrisGridCellOverflowModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"IrisGridCellOverflowModal.d.ts","sourceRoot":"","sources":["../src/IrisGridCellOverflowModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,OAAO,kCAAkC,CAAC;AAE1C,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAChD,IAAI,EACJ,MAAM,EACN,OAAO,GACR,EAAE,8BAA8B,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAyJ5D"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { Editor } from '@deephaven/console';
|
|
3
|
-
import { Modal, ModalBody, ModalHeader } from '
|
|
4
|
-
import { Button } from '@deephaven/components';
|
|
3
|
+
import { Button, Modal, ModalBody, ModalHeader } from '@deephaven/components';
|
|
5
4
|
import { vsJson, vsListOrdered } from '@deephaven/icons';
|
|
6
5
|
import "./IrisGridCellOverflowModal.css";
|
|
7
6
|
export default function IrisGridCellOverflowModal(_ref) {
|
|
@@ -114,10 +113,8 @@ export default function IrisGridCellOverflowModal(_ref) {
|
|
|
114
113
|
setIsOpened(false);
|
|
115
114
|
setHeight(0);
|
|
116
115
|
},
|
|
117
|
-
size: "xl",
|
|
118
116
|
className: "theme-bg-dark cell-overflow-modal"
|
|
119
117
|
}, /*#__PURE__*/React.createElement(ModalHeader, {
|
|
120
|
-
tag: "div",
|
|
121
118
|
toggle: onClose
|
|
122
119
|
}, /*#__PURE__*/React.createElement("h5", {
|
|
123
120
|
className: "overflow-modal-title"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/IrisGridCellOverflowModal.tsx"],"names":["React","useEffect","useRef","useState","Editor","Modal","ModalBody","ModalHeader","
|
|
1
|
+
{"version":3,"sources":["../src/IrisGridCellOverflowModal.tsx"],"names":["React","useEffect","useRef","useState","Editor","Button","Modal","ModalBody","ModalHeader","vsJson","vsListOrdered","IrisGridCellOverflowModal","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","editor","getLineCount","handleToggle","onEditorInitialized","onDidContentSizeChange","contentHeight","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,MAA3B,EAAmCC,QAAnC,QAAmD,OAAnD;AACA,SAASC,MAAT,QAAuB,oBAAvB;AAEA,SAASC,MAAT,EAAiBC,KAAjB,EAAwBC,SAAxB,EAAmCC,WAAnC,QAAsD,uBAAtD;AACA,SAASC,MAAT,EAAiBC,aAAjB,QAAsC,kBAAtC;;AASA,eAAe,SAASC,yBAAT,OAI+C;AAAA,MAJZ;AAChDC,IAAAA,IADgD;AAEhDC,IAAAA,MAFgD;AAGhDC,IAAAA;AAHgD,GAIY;AAC5D,MAAM,CAACC,QAAD,EAAWC,WAAX,IAA0Bb,QAAQ,CAAC,KAAD,CAAxC;AACA,MAAM,CAACc,MAAD,EAASC,SAAT,IAAsBf,QAAQ,CAAC,CAAD,CAApC;AACA,MAAM,CAACgB,eAAD,EAAkBC,kBAAlB,IAAwCjB,QAAQ,CAAC,KAAD,CAAtD;AACA,MAAM,CAACkB,WAAD,EAAcC,cAAd,IAAgCnB,QAAQ,CAAC,KAAD,CAA9C;AACA,MAAM,CAACoB,SAAD,EAAYC,YAAZ,IAA4BrB,QAAQ,CAAC,KAAD,CAA1C;AACA,MAAMsB,SAAS,GAAGvB,MAAM,EAAxB,CAN4D,CAQ5D;;AACAD,EAAAA,SAAS,CACP,SAASyB,0BAAT,GAAsC;AACpC,QAAI,CAACb,MAAL,EAAa;AACX;AACD;;AAED,QAAI;AACFc,MAAAA,IAAI,CAACC,KAAL,CAAWhB,IAAX;AACAY,MAAAA,YAAY,CAAC,IAAD,CAAZ;AACD,KAHD,CAGE,gBAAM;AACNA,MAAAA,YAAY,CAAC,KAAD,CAAZ;AACD;;AACDF,IAAAA,cAAc,CAAC,KAAD,CAAd;AACD,GAbM,EAcP,CAACT,MAAD,EAASD,IAAT,CAdO,CAAT,CAT4D,CA0B5D;;AACAX,EAAAA,SAAS,CACP,SAAS4B,0BAAT,GAAsC;AACpC,QAAIJ,SAAS,CAACK,OAAd,EAAuB;AACrBL,MAAAA,SAAS,CAACK,OAAV,CAAkBC,MAAlB;AACD;AACF,GALM,EAMP,CAACd,MAAD,CANO,CAAT,CA3B4D,CAoC5D;;AACAhB,EAAAA,SAAS,CACP,SAAS+B,oBAAT,GAAgC;AAC9B,QAAIP,SAAS,CAACK,OAAd,EAAuB;AACrBL,MAAAA,SAAS,CAACK,OAAV,CAAkBG,aAAlB,CAAgC;AAC9BC,QAAAA,WAAW,EAAEf,eAAe,GAAG,IAAH,GAAU;AADR,OAAhC;AAGD;AACF,GAPM,EAQP,CAACA,eAAD,CARO,CAAT;;AAWA,WAASgB,iBAAT,GAA6B;AAC3Bf,IAAAA,kBAAkB,CAAC,CAACD,eAAF,CAAlB;AACD;;AAED,WAASiB,YAAT,GAAwB;AAAA;;AACtB,QAAMC,KAAK,yBAAGZ,SAAS,CAACK,OAAb,uDAAG,mBAAmBQ,QAAnB,EAAd;;AACA,QAAI,CAACf,SAAD,IAAc,CAACc,KAAnB,EAA0B;AACxB;AACD;;AAED,QAAI,CAAChB,WAAL,EAAkB;AAChBgB,MAAAA,KAAK,CAACE,QAAN,CAAeZ,IAAI,CAACa,SAAL,CAAeb,IAAI,CAACC,KAAL,CAAWhB,IAAX,CAAf,EAAiC6B,SAAjC,EAA4C,CAA5C,CAAf;AACAnB,MAAAA,cAAc,CAAC,IAAD,CAAd;AACD,KAHD,MAGO;AACLe,MAAAA,KAAK,CAACE,QAAN,CAAe3B,IAAf;AACAU,MAAAA,cAAc,CAAC,KAAD,CAAd;AACD;;AACDoB,IAAAA,kBAAkB;AACnB;;AAED,WAASA,kBAAT,GAA8B;AAAA;;AAC5B,QAAMC,MAAM,GAAGlB,SAAS,CAACK,OAAzB;;AACA,QAAI,CAACa,MAAL,EAAa;AACX;AACD;;AAEDvB,IAAAA,kBAAkB,CAAC,8CAACuB,MAAM,CAACL,QAAP,EAAD,qDAAC,iBAAmBM,YAAnB,EAAD,yEAAsC,CAAtC,IAA2C,CAA5C,CAAlB;AACD;;AAED,WAASC,YAAT,GAAwB;AACtB,QAAI9B,QAAJ,EAAc;AACZU,MAAAA,SAAS,CAACK,OAAV,GAAoBW,SAApB;AACA3B,MAAAA,OAAO;AACR;AACF;;AAED,WAASgC,mBAAT,CAA6BH,MAA7B,EAA0E;AACxElB,IAAAA,SAAS,CAACK,OAAV,GAAoBa,MAApB;AACAA,IAAAA,MAAM,CAACI,sBAAP,CAA8B;AAAA,UAAC;AAAEC,QAAAA;AAAF,OAAD;AAAA,aAC5B9B,SAAS,CAAC8B,aAAD,CADmB;AAAA,KAA9B;AAGAN,IAAAA,kBAAkB;AACnB;;AAED,MAAI,CAAC7B,MAAD,IAAW,CAACE,QAAhB,EAA0B;AACxB,WAAO,IAAP;AACD;;AAED,sBACE,oBAAC,KAAD;AACE,IAAA,MAAM,EAAEF,MADV;AAEE,IAAA,QAAQ,MAFV;AAGE,IAAA,QAAQ,MAHV;AAIE,IAAA,MAAM,EAAEgC,YAJV;AAKE,IAAA,QAAQ,EAAE,MAAM7B,WAAW,CAAC,IAAD,CAL7B;AAME,IAAA,QAAQ,EAAE,MAAM;AACdA,MAAAA,WAAW,CAAC,KAAD,CAAX;AACAE,MAAAA,SAAS,CAAC,CAAD,CAAT;AACD,KATH;AAUE,IAAA,SAAS,EAAC;AAVZ,kBAYE,oBAAC,WAAD;AAAa,IAAA,MAAM,EAAEJ;AAArB,kBACE;AAAI,IAAA,SAAS,EAAC;AAAd,qBADF,eAEE,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,QADP;AAEE,IAAA,MAAM,EAAEK,eAFV;AAGE,IAAA,IAAI,EAAET,aAHR;AAIE,IAAA,OAAO,EAAC,qBAJV;AAKE,IAAA,OAAO,EAAEyB;AALX,IAFF,EASGZ,SAAS,iBACR,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,QADP;AAEE,IAAA,IAAI,EAAEd,MAFR;AAGE,IAAA,MAAM,EAAEY,WAHV;AAIE,IAAA,OAAO,EAAC,gBAJV;AAKE,IAAA,OAAO,EAAEe;AALX,IAVJ,CAZF,eA+BE,oBAAC,SAAD;AAAW,IAAA,KAAK,EAAE;AAAEnB,MAAAA;AAAF;AAAlB,kBACE,oBAAC,MAAD;AACE,IAAA,mBAAmB,EAAE6B,mBADvB;AAEE,IAAA,QAAQ,EAAE;AACRG,MAAAA,KAAK,EAAErC,IADC;AAERsC,MAAAA,QAAQ,EAAE,IAFF;AAGRC,MAAAA,QAAQ,EAAE,IAHF;AAIR;AACAC,MAAAA,QAAQ,EAAE7B,SAAS,GAAG,YAAH,GAAkB,WAL7B;AAMR8B,MAAAA,OAAO,EAAE9B,SAND;AAOR+B,MAAAA,OAAO,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAPD;AAQRrB,MAAAA,WAAW,EAAEf,eAAe,GAAG,IAAH,GAAU,KAR9B;AASRqC,MAAAA,kBAAkB,EAAE,CATZ;AAURC,MAAAA,mBAAmB,EAAE,MAVb;;AAWR;AACZ;AACA;AACA;AACA;AACYC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,6BAA6B,EAAE;AAAjC;AAhBE;AAFZ,IADF,CA/BF,CADF;AAyDD","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport { Button, Modal, ModalBody, ModalHeader } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport './IrisGridCellOverflowModal.scss';\n\ninterface IrisGridCellOverflowModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function IrisGridCellOverflowModal({\n text,\n isOpen,\n onClose,\n}: IrisGridCellOverflowModalProps): React.ReactElement | null {\n const [isOpened, setIsOpened] = useState(false);\n const [height, setHeight] = useState(0);\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [isFormatted, setIsFormatted] = useState(false);\n const [canFormat, setCanFormat] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n // Update format button on open\n useEffect(\n function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch {\n setCanFormat(false);\n }\n setIsFormatted(false);\n },\n [isOpen, text]\n );\n\n // Re-layout editor on height change\n useEffect(\n function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n },\n [height]\n );\n\n // Update editor options on line number toggle\n useEffect(\n function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off',\n });\n }\n },\n [showLineNumbers]\n );\n\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON() {\n const model = editorRef.current?.getModel();\n if (!canFormat || !model) {\n return;\n }\n\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n\n function autoSetLineNumbers() {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor) {\n editorRef.current = editor;\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\n }\n\n if (!isOpen && !isOpened) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n toggle={handleToggle}\n onOpened={() => setIsOpened(true)}\n onClosed={() => {\n setIsOpened(false);\n setHeight(0);\n }}\n className=\"theme-bg-dark cell-overflow-modal\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <Button\n kind=\"inline\"\n active={showLineNumbers}\n icon={vsListOrdered}\n tooltip=\"Toggle line numbers\"\n onClick={toggleLineNumbers}\n />\n {canFormat && (\n <Button\n kind=\"inline\"\n icon={vsJson}\n active={isFormatted}\n tooltip=\"Format as JSON\"\n onClick={formatAsJSON}\n />\n )}\n </ModalHeader>\n <ModalBody style={{ height }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: { bottom: 16 },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: { seedSearchStringFromSelection: 'never' },\n }}\n />\n </ModalBody>\n </Modal>\n );\n}\n"],"file":"IrisGridCellOverflowModal.js"}
|
|
@@ -7,8 +7,6 @@ import IrisGridTableModelTemplate from './IrisGridTableModelTemplate';
|
|
|
7
7
|
* Model for a grid showing an iris data table
|
|
8
8
|
*/
|
|
9
9
|
declare class IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {
|
|
10
|
-
static ROW_BUFFER_PAGES: number;
|
|
11
|
-
static COLUMN_BUFFER_PAGES: number;
|
|
12
10
|
userFrozenColumns?: ColumnName[];
|
|
13
11
|
customColumnList: string[];
|
|
14
12
|
formatColumnList: CustomColumn[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAET,UAAU,EACV,aAAa,EAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AAEH,cAAM,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;IACvE,
|
|
1
|
+
{"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAET,UAAU,EACV,aAAa,EAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AAEH,cAAM,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;IACvE,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IAEjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,gBAAgB,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;OAIG;gBAED,KAAK,EAAE,KAAK,EACZ,SAAS,YAAkB,EAC3B,UAAU,GAAE,UAAU,GAAG,IAAW;IAQtC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,2BAA2B,IAAI,OAAO,CAEzC;IAED,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,aAAa,EAAE,CA0ClC;IAED,uBAAuB,mDAErB;IAEF,IAAI,YAAY,IAAI,UAAU,EAAE,CAE/B;IAED,sBAAsB,kDAEpB;IAEF,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,wBAAwB,6BAEM,UAAU,EAAE,+CAErC,UAAU,EAAE,CAEf;IAEF,IAAI,aAAa,IAAI,UAAU,EAAE,CAKhC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,aAAa,IAAI,UAAU,EAAE,CAEhC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,EAoB5C;IAED,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,EAoB9C;IAED,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAShD,IAAI,YAAY,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,EA6CxD;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAIxC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;IAI9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,4BAA4B,YAChB,MAAM,EAAE,iBAElB;IAEF,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYhD,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIzC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAwFjD;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -369,9 +369,5 @@ class IrisGridTableModel extends IrisGridTableModelTemplate {
|
|
|
369
369
|
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
-
_defineProperty(IrisGridTableModel, "ROW_BUFFER_PAGES", 1);
|
|
373
|
-
|
|
374
|
-
_defineProperty(IrisGridTableModel, "COLUMN_BUFFER_PAGES", 0);
|
|
375
|
-
|
|
376
372
|
export default IrisGridTableModel;
|
|
377
373
|
//# sourceMappingURL=IrisGridTableModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/IrisGridTableModel.ts"],"names":["memoize","GridRange","GridUtils","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","EMPTY_ARRAY","Object","freeze","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","movedColumns","frontColumns","length","backColumns","frozenColumns","usedColumns","moveColumn","name","toIndex","has","Error","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","frontIndex","forEach","backIndex","columnMap","size","getMemoizedFrontColumns","layoutHints","getMemoizedBackColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","description","customColumns","debug2","debug","closeSubscription","formatColumns","applyViewport","updateFrozenColumns","dispatchEvent","EVENT","TABLE_CHANGED","detail","totalsConfig","totals","formattedStringData","totalsTablePromise","cancel","setTotalsTable","UPDATED","makeCancelable","getTotalsTable","close","then","totalsTable","catch","err","isCanceled","error","REQUEST_FAILED","isFilterRequired","isUncoalesced","isFilterable","columnIndex","getCachedFilterableColumnSet","export","columnStatistics","column","isColumnMovable","columnName","includes","isKeyColumn","isColumnFrozen","delete","ranges","isDeletableRanges","keyColumns","pendingAreaRange","getPendingAreaRange","pendingRanges","range","intersection","filter","offset","floatingTopRowCount","newDataMap","Map","i","pendingRange","startRow","endRow","r","PENDING_DATA_UPDATED","tableAreaRange","getTableAreaRange","tableRanges","data","deleteTable","Promise","all","snapshot","filters","row","columnFilters","c","value","filterValue","makeFilterRawValue","type","eq","push","reduce","agg","curr","and","or","applyFilter"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport {\n GridRange,\n GridUtils,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport {\n Column,\n ColumnStatistics,\n CustomColumn,\n InputTable,\n LayoutHints,\n Table,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport { ColumnName, UITotalsTableConfig, UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {\n static ROW_BUFFER_PAGES = 1;\n\n static COLUMN_BUFFER_PAGES = 0;\n\n userFrozenColumns?: ColumnName[];\n\n customColumnList: string[];\n\n formatColumnList: CustomColumn[];\n\n /**\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n table: Table,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super(table, formatter, inputTable);\n\n this.customColumnList = [];\n this.formatColumnList = [];\n }\n\n get isExportAvailable(): boolean {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable(): boolean {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get movedColumns(): MoveOperation[] {\n let movedColumns: MoveOperation[] = [];\n\n if (\n this.frontColumns.length ||\n this.backColumns.length ||\n this.frozenColumns.length\n ) {\n const usedColumns = new Set();\n\n const moveColumn = (name: string, toIndex: VisibleIndex) => {\n if (usedColumns.has(name)) {\n throw new Error(`Column specified in multiple layout hints: ${name}`);\n }\n const modelIndex = this.getColumnIndexByName(name);\n if (!modelIndex) {\n throw new Error(`Unknown layout hint column: ${name}`);\n }\n const visibleIndex = GridUtils.getVisibleIndex(\n modelIndex,\n movedColumns\n );\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n\n let frontIndex = 0;\n this.frozenColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n this.frontColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n this.backColumns.forEach(name => {\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n return movedColumns;\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? EMPTY_ARRAY\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? EMPTY_ARRAY\n );\n\n get backColumns(): ColumnName[] {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (\n layoutHintsFrozenColumns: ColumnName[],\n userFrozenColumns?: ColumnName[]\n ): ColumnName[] =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? EMPTY_ARRAY\n );\n\n get frozenColumns(): ColumnName[] {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints(): LayoutHints {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount(): number {\n return this.frozenColumns.length;\n }\n\n get description(): string {\n return this.table.description;\n }\n\n get customColumns(): ColumnName[] {\n return this.customColumnList;\n }\n\n set customColumns(customColumns: ColumnName[]) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns(): CustomColumn[] {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n this.userFrozenColumns = columns;\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table,\n })\n );\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n get isFilterRequired(): boolean {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async export(): Promise<Table> {\n return this.table.freeze();\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[]) =>\n new Set(columns.map((_: Column, index: ModelIndex) => index))\n );\n\n isColumnMovable(modelIndex: ModelIndex): boolean {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex: ModelIndex): boolean {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(super.pendingDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n super.pendingDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n );\n })\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n}\n\nexport default IrisGridTableModel;\n"],"file":"IrisGridTableModel.js"}
|
|
1
|
+
{"version":3,"sources":["../src/IrisGridTableModel.ts"],"names":["memoize","GridRange","GridUtils","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","EMPTY_ARRAY","Object","freeze","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","movedColumns","frontColumns","length","backColumns","frozenColumns","usedColumns","moveColumn","name","toIndex","has","Error","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","frontIndex","forEach","backIndex","columnMap","size","getMemoizedFrontColumns","layoutHints","getMemoizedBackColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","description","customColumns","debug2","debug","closeSubscription","formatColumns","applyViewport","updateFrozenColumns","dispatchEvent","EVENT","TABLE_CHANGED","detail","totalsConfig","totals","formattedStringData","totalsTablePromise","cancel","setTotalsTable","UPDATED","makeCancelable","getTotalsTable","close","then","totalsTable","catch","err","isCanceled","error","REQUEST_FAILED","isFilterRequired","isUncoalesced","isFilterable","columnIndex","getCachedFilterableColumnSet","export","columnStatistics","column","isColumnMovable","columnName","includes","isKeyColumn","isColumnFrozen","delete","ranges","isDeletableRanges","keyColumns","pendingAreaRange","getPendingAreaRange","pendingRanges","range","intersection","filter","offset","floatingTopRowCount","newDataMap","Map","i","pendingRange","startRow","endRow","r","PENDING_DATA_UPDATED","tableAreaRange","getTableAreaRange","tableRanges","data","deleteTable","Promise","all","snapshot","filters","row","columnFilters","c","value","filterValue","makeFilterRawValue","type","eq","push","reduce","agg","curr","and","or","applyFilter"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport {\n GridRange,\n GridUtils,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport {\n Column,\n ColumnStatistics,\n CustomColumn,\n InputTable,\n LayoutHints,\n Table,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport { ColumnName, UITotalsTableConfig, UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {\n userFrozenColumns?: ColumnName[];\n\n customColumnList: string[];\n\n formatColumnList: CustomColumn[];\n\n /**\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n table: Table,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super(table, formatter, inputTable);\n\n this.customColumnList = [];\n this.formatColumnList = [];\n }\n\n get isExportAvailable(): boolean {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable(): boolean {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get movedColumns(): MoveOperation[] {\n let movedColumns: MoveOperation[] = [];\n\n if (\n this.frontColumns.length ||\n this.backColumns.length ||\n this.frozenColumns.length\n ) {\n const usedColumns = new Set();\n\n const moveColumn = (name: string, toIndex: VisibleIndex) => {\n if (usedColumns.has(name)) {\n throw new Error(`Column specified in multiple layout hints: ${name}`);\n }\n const modelIndex = this.getColumnIndexByName(name);\n if (!modelIndex) {\n throw new Error(`Unknown layout hint column: ${name}`);\n }\n const visibleIndex = GridUtils.getVisibleIndex(\n modelIndex,\n movedColumns\n );\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n\n let frontIndex = 0;\n this.frozenColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n this.frontColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n this.backColumns.forEach(name => {\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n return movedColumns;\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? EMPTY_ARRAY\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? EMPTY_ARRAY\n );\n\n get backColumns(): ColumnName[] {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (\n layoutHintsFrozenColumns: ColumnName[],\n userFrozenColumns?: ColumnName[]\n ): ColumnName[] =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? EMPTY_ARRAY\n );\n\n get frozenColumns(): ColumnName[] {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints(): LayoutHints {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount(): number {\n return this.frozenColumns.length;\n }\n\n get description(): string {\n return this.table.description;\n }\n\n get customColumns(): ColumnName[] {\n return this.customColumnList;\n }\n\n set customColumns(customColumns: ColumnName[]) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns(): CustomColumn[] {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n this.userFrozenColumns = columns;\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table,\n })\n );\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n get isFilterRequired(): boolean {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async export(): Promise<Table> {\n return this.table.freeze();\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[]) =>\n new Set(columns.map((_: Column, index: ModelIndex) => index))\n );\n\n isColumnMovable(modelIndex: ModelIndex): boolean {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex: ModelIndex): boolean {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(super.pendingDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n super.pendingDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n );\n })\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n}\n\nexport default IrisGridTableModel;\n"],"file":"IrisGridTableModel.js"}
|
|
@@ -13,6 +13,7 @@ export declare function isIrisGridTableModelTemplate(model: IrisGridModel): mode
|
|
|
13
13
|
* Template model for a grid
|
|
14
14
|
*/
|
|
15
15
|
declare class IrisGridTableModelTemplate<T extends TableTemplate<T> = Table, R extends UIRow = UIRow> extends IrisGridModel {
|
|
16
|
+
static ROW_BUFFER_PAGES: number;
|
|
16
17
|
export(): Promise<Table>;
|
|
17
18
|
columnStatistics(column: Column): Promise<ColumnStatistics>;
|
|
18
19
|
get customColumns(): ColumnName[];
|
|
@@ -25,8 +26,6 @@ declare class IrisGridTableModelTemplate<T extends TableTemplate<T> = Table, R e
|
|
|
25
26
|
get selectDistinctColumns(): ColumnName[];
|
|
26
27
|
set selectDistinctColumns(names: ColumnName[]);
|
|
27
28
|
get columns(): Column[];
|
|
28
|
-
static ROW_BUFFER_PAGES: number;
|
|
29
|
-
static COLUMN_BUFFER_PAGES: number;
|
|
30
29
|
private irisFormatter;
|
|
31
30
|
inputTable: InputTable | null;
|
|
32
31
|
private subscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTableModelTemplate.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModelTemplate.ts"],"names":[],"mappings":";;AAGA,OAAO,EACL,aAAa,EACb,SAAS,EAET,UAAU,EACV,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAW,EACT,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,UAAU,EACV,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,KAAK,EACL,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EAIlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,KAAK,EACL,cAAc,EACd,QAAQ,EACR,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"IrisGridTableModelTemplate.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModelTemplate.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,6 @@ import IrisGridModel from "./IrisGridModel.js";
|
|
|
20
20
|
import AggregationOperation from "./sidebar/aggregations/AggregationOperation.js";
|
|
21
21
|
import IrisGridUtils from "./IrisGridUtils.js";
|
|
22
22
|
import MissingKeyError from "./MissingKeyError.js";
|
|
23
|
-
import IrisGridTableModel from "./IrisGridTableModel.js";
|
|
24
23
|
var log = Log.module('IrisGridTableModel');
|
|
25
24
|
var SET_VIEWPORT_THROTTLE = 150;
|
|
26
25
|
var APPLY_VIEWPORT_THROTTLE = 0;
|
|
@@ -191,8 +190,8 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
191
190
|
|
|
192
191
|
_defineProperty(this, "getCachedViewportRowRange", memoize((top, bottom) => {
|
|
193
192
|
var viewHeight = bottom - top;
|
|
194
|
-
var viewportTop = Math.max(0, top - viewHeight *
|
|
195
|
-
var viewportBottom = bottom + viewHeight *
|
|
193
|
+
var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);
|
|
194
|
+
var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;
|
|
196
195
|
return [viewportTop, viewportBottom];
|
|
197
196
|
}));
|
|
198
197
|
|
|
@@ -1617,7 +1616,5 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
1617
1616
|
|
|
1618
1617
|
_defineProperty(IrisGridTableModelTemplate, "ROW_BUFFER_PAGES", 1);
|
|
1619
1618
|
|
|
1620
|
-
_defineProperty(IrisGridTableModelTemplate, "COLUMN_BUFFER_PAGES", 0);
|
|
1621
|
-
|
|
1622
1619
|
export default IrisGridTableModelTemplate;
|
|
1623
1620
|
//# sourceMappingURL=IrisGridTableModelTemplate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/IrisGridTableModelTemplate.ts"],"names":["memoize","throttle","GridRange","memoizeClear","dh","Log","EventShimCustomEvent","PromiseUtils","assertNotNull","TableUtils","Formatter","FormatterUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","IrisGridTableModel","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","model","table","undefined","IrisGridTableModelTemplate","export","Error","columnStatistics","column","customColumns","formatColumns","updateFrozenColumns","columns","rollupConfig","selectDistinctColumns","names","constructor","formatter","inputTable","tableColumns","columnMap","Map","forEach","col","set","name","indices","i","top","bottom","error","viewport","debug2","applyViewport","viewportTop","viewportBottom","getCachedViewportRowRange","applyBufferedViewport","leading","value","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","viewHeight","Math","ROW_BUFFER_PAGES","pendingDataMap","keyColumnCount","map","row","rowIndex","data","rowData","has","get","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","irisFormatter","subscription","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","pendingNewDataMap","pendingNewDataErrors","pendingNewRowCount","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","setViewport","dispatchEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","size","operationOrder","length","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","textValueForCell","valueForCell","totalsColumn","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","type","formatForCell","formatString","displayString","textForCell","isKeyColumn","pendingRow","truncationCharForCell","isNumberType","truncateNumbersWithPound","colorForCell","theme","dataForCell","format","nullStringColor","color","isPendingRow","pendingTextColor","isDateType","dateColor","positiveNumberColor","negativeNumberColor","zeroNumberColor","errorTextColor","textColor","backgroundColorForCell","backgroundColor","textAlignForCell","textForColumnHeader","textForRowFooter","totalsRow","getMemoizedColumnMap","groupedColumns","totalsRowCount","operation","offset","viewportY","rows","defaultOperation","SUM","tableColumn","find","isTotalsRow","warn","extractViewportData","totalsData","dataMap","operationMap","c","split","findIndex","getFormat","getColumnIndexByName","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","index","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","sort","applySort","totalsConfig","debug","setTotalsTable","makeCancelable","then","catch","err","isCanceled","listenerCount","snapshot","ranges","includeHeaders","formatValue","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","Set","tableRanges","bottomFloatingRowsSet","range","endRow","startRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","valuesTable","copy","selectDistinct","isRowMovable","isEditableRange","isBounded","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","cellText","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport {\n EditOperation,\n GridRange,\n memoizeClear,\n ModelIndex,\n VisibleIndex,\n} from '@deephaven/grid';\nimport dh, {\n Column,\n ColumnStatistics,\n CustomColumn,\n FilterCondition,\n Format,\n InputTable,\n RollupConfig,\n Row,\n Sort,\n Table,\n TableTemplate,\n TableViewportSubscription,\n TotalsTable,\n ViewportData,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\nimport {\n ColumnName,\n UITotalsTableConfig,\n UIRow,\n PendingDataMap,\n CellData,\n UIViewportData,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridTableModel from './IrisGridTableModel';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\n\nexport function isIrisGridTableModelTemplate(\n model: IrisGridModel\n): model is IrisGridTableModelTemplate {\n return (model as IrisGridTableModelTemplate).table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate<\n T extends TableTemplate<T> = Table,\n R extends UIRow = UIRow\n> extends IrisGridModel {\n export(): Promise<Table> {\n throw new Error('Method not implemented.');\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n throw new Error('Method not implemented.');\n }\n\n get customColumns(): ColumnName[] {\n return [];\n }\n\n set customColumns(customColumns: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get formatColumns(): CustomColumn[] {\n return [];\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n throw new Error('Method not implemented.');\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n throw new Error('Method not implemented.');\n }\n\n get rollupConfig(): RollupConfig | null {\n throw new Error('Method not implemented.');\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n throw new Error('Method not implemented.');\n }\n\n get selectDistinctColumns(): ColumnName[] {\n throw new Error('Method not implemented.');\n }\n\n set selectDistinctColumns(names: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get columns(): Column[] {\n return this.table.columns;\n }\n\n static ROW_BUFFER_PAGES = 1;\n\n static COLUMN_BUFFER_PAGES = 0;\n\n private irisFormatter: Formatter;\n\n inputTable: InputTable | null;\n\n private subscription: TableViewportSubscription | null;\n\n table: T;\n\n viewport: {\n top: VisibleIndex;\n bottom: VisibleIndex;\n columns: Column[];\n } | null;\n\n viewportData: UIViewportData<R> | null;\n\n formattedStringData: (string | null)[][];\n\n private pendingStringData: (string | null)[][];\n\n private isSaveInProgress: boolean;\n\n private totalsTable: TotalsTable | null;\n\n totalsTablePromise: CancelablePromise<TotalsTable> | null;\n\n totals: UITotalsTableConfig | null;\n\n private totalsDataMap: Map<string, R> | null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n private pendingNewDataMap: PendingDataMap<R>;\n\n private pendingNewRowCount = 0;\n\n private pendingNewDataErrors: Map<unknown, unknown> | null;\n\n /**\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n table: T,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super();\n\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n\n this.irisFormatter = formatter;\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = null;\n this.pendingNewRowCount = 0;\n }\n\n close(): void {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n\n startListening(): void {\n super.startListening();\n\n this.table.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n\n this.applyViewport();\n }\n\n stopListening(): void {\n super.stopListening();\n\n this.table.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n this.table.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.closeSubscription();\n }\n\n addTotalsListeners(totalsTable: TotalsTable): void {\n totalsTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n\n removeTotalsListeners(totalsTable: TotalsTable): void {\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT)\n );\n }\n\n handleTableReconnect(): void {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event: CustomEvent): void {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event: CustomEvent): void {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event: CustomEvent): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount(): number {\n return (\n this.table.size +\n this.pendingNewRowCount +\n (this.totals?.operationOrder?.length ?? 0)\n );\n }\n\n get pendingDataErrors(): Map<number, Error[]> {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap(): PendingDataMap<R> {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<R>) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n\n this.pendingNewDataMap = map;\n\n this.pendingNewRowCount = Math.max(\n this.pendingNewRowCount,\n this.maxPendingDataRow\n );\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount(): number {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count: number) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow(): number {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount(): number {\n return this.columns.length;\n }\n\n get floatingBottomRowCount(): number {\n return this.totals?.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount(): number {\n return this.totals?.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isChartBuilderAvailable(): boolean {\n return true;\n }\n\n get isTotalsAvailable(): boolean {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable(): boolean {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x: ModelIndex, y: ModelIndex): void {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x: ModelIndex, y: ModelIndex): string | null {\n // First check if there's any pending values we should read from\n if (this.pendingStringData[x]?.[y] !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (this.formattedStringData[x]?.[y] === undefined) {\n const value = this.valueForCell(x, y);\n if (value == null) {\n return null;\n }\n\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n this.formatter,\n column.name,\n column.type\n );\n let formatOverride;\n if (!hasCustomColumnFormat) {\n const formatForCell = this.formatForCell(x, y);\n if (formatForCell?.formatString != null) {\n formatOverride = formatForCell;\n }\n }\n const text = this.displayString(\n value,\n column.type,\n column.name,\n formatOverride\n );\n this.cacheFormattedValue(x, y, text);\n }\n\n return this.formattedStringData[x][y];\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n return text ?? '';\n }\n\n truncationCharForCell(x: ModelIndex): '#' | undefined {\n const column = this.columns[x];\n const { type } = column;\n if (\n TableUtils.isNumberType(type) &&\n this.formatter.truncateNumbersWithPound\n ) {\n return '#';\n }\n\n return undefined;\n }\n\n colorForCell(x: ModelIndex, y: ModelIndex, theme: IrisGridThemeType): string {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n if (TableUtils.isDateType(column.type) || column.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.formatForCell(x, y)?.backgroundColor ?? null;\n }\n\n textAlignForCell(x: ModelIndex): CanvasTextAlign {\n const column = this.columns[x];\n const { type } = column;\n\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n\n textForColumnHeader(x: ModelIndex): string {\n const column = this.columns[x];\n return `${column.name}`;\n }\n\n textForRowFooter(y: ModelIndex): string {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n getMemoizedColumnMap = memoize(\n (tableColumns: Column[]): Map<string, Column> => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }\n );\n\n get columnMap(): Map<ColumnName, Column> {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n get groupedColumns(): [] {\n return [];\n }\n\n row(y: ModelIndex): R | null {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n const operation = this.totals?.operationOrder[totalsRow];\n assertNotNull(operation);\n return this.totalsDataMap?.get(operation) ?? null;\n }\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n return this.pendingNewDataMap.get(pendingRow) ?? null;\n }\n const offset = this.viewportData?.offset ?? 0;\n const viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return this.viewportData?.rows?.[viewportY] ?? null;\n }\n\n /**\n * Retrieve the totals column if this is a totals row, or null otherwise\n * @param x Column index to get the totals column from\n * @param y Row index to get the totals column from\n */\n totalsColumn(x: ModelIndex, y: ModelIndex): Column | undefined | null {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals?.operationOrder[totalsRow];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const tableColumn = this.columns[x];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n return this.totalsTable?.columns.find(\n column =>\n column.name === `${tableColumn.name}__${operation}` ||\n ((operation === defaultOperation ||\n this.totals?.operationOrder.length === 1) &&\n column.name === tableColumn.name)\n );\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y: ModelIndex): ModelIndex | null {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y: ModelIndex): ModelIndex | null {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y: ModelIndex): boolean {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y: ModelIndex): boolean {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x: ModelIndex, y: ModelIndex): CellData | undefined {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x: ModelIndex, y: ModelIndex): Format | undefined {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x: ModelIndex, y: ModelIndex): unknown | null {\n const data = this.dataForCell(x, y);\n if (data) {\n return data.value ?? null;\n }\n return null;\n }\n\n copyViewportData(data: ViewportData): void {\n if (!data) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData: ViewportData): void {\n if (!totalsData) {\n log.warn('invalid data!');\n return;\n }\n\n const { columns, rows } = totalsData;\n if (rows.length !== 1) {\n log.error(\n 'Unexpected number of rows received for totals table, ignoring update'\n );\n return;\n }\n\n const dataMap = new Map();\n const row = rows[0];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const operationMap = this.totals?.operationMap;\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const [\n name,\n operation = operationMap?.[name]?.[0] ?? defaultOperation,\n ] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, { data: new Map() });\n }\n const { data: rowData } = dataMap.get(operation);\n const columnIndex = this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n log.debug2('copyTotalsData', dataMap);\n\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(\n (columns: Column[]): Map<ColumnName, ModelIndex> => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n }\n );\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data: ViewportData): UIViewportData<R> {\n const newData: UIViewportData<R> = {\n offset: data.offset,\n rows: [],\n };\n\n const { columns } = data;\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n\n return newData;\n }\n\n extractViewportRow(row: Row, columns: Column[]): R {\n const data = new Map<ModelIndex, CellData>();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data } as R;\n }\n\n closeSubscription(): void {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n\n get filter(): FilterCondition[] {\n return this.table.filter;\n }\n\n set filter(filter: FilterCondition[]) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter(): Formatter {\n return this.irisFormatter;\n }\n\n set formatter(formatter: Formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED)\n );\n }\n\n displayString(\n value: unknown,\n columnType: string,\n columnName = '',\n formatOverride?: { formatString: string }\n ): string {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort(): Sort[] {\n return this.table.sort;\n }\n\n set sort(sort: Sort[]) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n setTotalsTable(totalsTable: TotalsTable | null): void {\n log.debug('setTotalsTable', totalsTable);\n\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.totalsTable.close();\n }\n\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n setViewport = throttle(\n (top: VisibleIndex, bottom: VisibleIndex, columns: Column[]) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n const { viewport } = this;\n if (\n viewport != null &&\n viewport.top === top &&\n viewport.bottom === bottom &&\n viewport.columns === columns\n ) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n\n this.viewport = {\n top,\n bottom,\n columns,\n };\n log.debug2('setViewport', this.viewport);\n\n this.applyViewport();\n },\n SET_VIEWPORT_THROTTLE\n );\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport = throttle(\n (): void => {\n if (!this.viewport) {\n return;\n }\n\n log.debug2('applyViewport', this.viewport);\n const { top, bottom, columns } = this.viewport;\n const [viewportTop, viewportBottom] = this.getCachedViewportRowRange(\n top,\n bottom\n );\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n },\n APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (value: unknown, column: Column) => unknown = value => value\n ): Promise<unknown[][]> {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = GridRange.consolidate(ranges);\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(`Invalid snapshot ranges ${ranges}`);\n }\n\n // Need to separate out the floating ranges as they're from a different source\n const topFloatingRowsSet = new Set<number>();\n const tableRanges: GridRange[] = [];\n const bottomFloatingRowsSet = new Set<number>();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (\n let r = range.startRow;\n r <= range.endRow && r < this.floatingTopRowCount;\n r += 1\n ) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (\n range.endRow >= this.floatingTopRowCount &&\n range.startRow <= this.floatingTopRowCount + this.table.size\n ) {\n tableRanges.push(\n new GridRange(\n range.startColumn,\n Math.min(Math.max(0, range.startRow - this.floatingTopRowCount)),\n range.endColumn,\n Math.min(\n Math.max(0, range.endRow - this.floatingTopRowCount),\n this.table.size - this.floatingTopRowCount\n )\n )\n );\n }\n // Get the rows that are in the bottom aggregations section\n for (\n let r = Math.max(\n range.startRow,\n this.floatingTopRowCount + this.table.size\n );\n r <= range.endRow &&\n r <\n this.floatingTopRowCount +\n this.table.size +\n this.floatingBottomRowCount;\n r += 1\n ) {\n bottomFloatingRowsSet.add(r);\n }\n }\n\n const columns = IrisGridUtils.columnsFromRanges(consolidated, this.columns);\n const result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n const topFloatingRows = [...topFloatingRowsSet].sort();\n for (let i = 0; i < topFloatingRows.length; i += 1) {\n const row = topFloatingRows[i];\n const rowData = columns.map(column => {\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n if (tableRanges.length > 0) {\n const rangeSet = IrisGridUtils.rangeSetFromRanges(tableRanges);\n const snapshot = await this.subscription.snapshot(rangeSet, columns);\n result.push(\n ...snapshot.rows.map(rowData =>\n columns.map(column => formatValue(rowData.get(column), column))\n )\n );\n }\n\n const bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n for (let i = 0; i < bottomFloatingRows.length; i += 1) {\n const row = bottomFloatingRows[i];\n const rowData = columns.map(column => {\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (\n value: unknown,\n column: Column,\n row?: Row\n ) => string = value => `${value}`\n ): Promise<string> {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(ranges, includeHeaders, formatValue);\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n async valuesTable(column: Column): Promise<Table> {\n let table = null;\n try {\n table = await this.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct([column]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n }\n\n getCachedFormattedString = memoizeClear(\n (\n formatter: Formatter,\n value: unknown,\n columnType: string,\n columnName: ColumnName,\n formatOverride?: { formatString: string }\n ): string =>\n formatter.getFormattedString(\n value,\n columnType,\n columnName,\n formatOverride\n ),\n { max: 10000 }\n );\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n getCachedViewportRowRange = memoize((top: number, bottom: number): [\n number,\n number\n ] => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (\n pendingDataMap: PendingDataMap,\n columns: Column[],\n keyColumnCount: number\n ) => {\n const map = new Map<ModelIndex, MissingKeyError[]>();\n pendingDataMap.forEach((row, rowIndex) => {\n const { data: rowData } = row;\n for (let i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n map\n .get(rowIndex)\n ?.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }\n );\n\n isKeyColumn(x: ModelIndex): boolean {\n return x < (this.inputTable?.keyColumns.length ?? 0);\n }\n\n isRowMovable(): boolean {\n return false;\n }\n\n isEditableRange(range: GridRange): boolean {\n return (\n this.inputTable != null &&\n GridRange.isBounded(range) &&\n ((this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow)) ||\n (range.startColumn >= this.inputTable.keyColumns.length &&\n range.endColumn >= this.inputTable.keyColumns.length)) &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isDeletableRange(range: GridRange): boolean {\n return (\n this.inputTable != null &&\n range.startRow != null &&\n range.endRow != null &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isEditableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns {GridRange} A range corresponding to the pending new rows\n */\n getPendingAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount + this.table.size,\n null,\n this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1\n );\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(\n x: ModelIndex,\n y: ModelIndex,\n text: string\n ): Promise<void> {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return this.setValueForRanges([new GridRange(x, y, x, y)], text);\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges: GridRange[], text: string): Promise<void> {\n if (!this.isEditableRanges(ranges)) {\n throw new Error(`Uneditable ranges ${ranges}`);\n }\n\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n const columnSet = new Set<Column>();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n const formattedText: (string | null)[] = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n formattedText[x] =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n }\n this.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, { data: new Map() } as R);\n }\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n if (value != null) {\n newRowData.set(columnIndex, { value });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, { ...row, data: newRowData });\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n this.pendingDataMap = newDataMap;\n }\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range =>\n new GridRange(\n null,\n range?.startRow ?? null,\n null,\n range?.endRow ?? null\n )\n )\n );\n const newRows = data.map(row => {\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n columnSet.forEach(column => {\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n });\n return newRow;\n });\n\n const result = await this.inputTable?.addRows(newRows);\n\n log.debug(\n 'setValueForRanges(',\n ranges,\n ',',\n text,\n ') set tableRanges',\n tableRanges,\n 'result',\n result\n );\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n const cellText = formattedText[x];\n assertNotNull(cellText);\n this.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n this.clearPendingValue(x, y);\n });\n }\n }\n\n async setValues(edits: EditOperation[] = []): Promise<void> {\n log.debug('setValues(', edits, ')');\n if (\n !edits.every(edit =>\n this.isEditableRange(\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n )\n ) {\n throw new Error(`Uneditable ranges ${edits}`);\n }\n\n try {\n const newDataMap = new Map(this.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, { data: new Map() } as R);\n }\n\n const row = newDataMap.get(pendingRow);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, { value });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, { ...row, data: newRowData });\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n\n this.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n const rowEditMap = edits.reduce((rowMap, edit) => {\n const y = edit.row ?? edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n rowMap.get(y)?.push(edit);\n return rowMap;\n }, new Map<ModelIndex, EditOperation[]>());\n\n const ranges = GridRange.consolidate(\n edits.map(edit =>\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n );\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n })\n );\n const newRows = data.map((row, dataIndex) => {\n let rowIndex = null;\n let r = dataIndex;\n for (let i = 0; i < tableRanges.length; i += 1) {\n const range = tableRanges[i];\n assertNotNull(range);\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n const rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n const column = this.columns[edit.column ?? edit.x];\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n edit.text,\n this.formatter.timeZone\n );\n });\n }\n return newRow;\n });\n\n log.info('setValues setting tableRanges', tableRanges);\n\n const result = await this.inputTable?.addRows(newRows);\n\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n\n this.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n this.clearPendingValue(edit.column, edit.row);\n });\n }\n }\n\n async commitPending(): Promise<void> {\n if (this.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n\n try {\n this.isSaveInProgress = true;\n\n const newRows: Record<ColumnName, unknown>[] = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow: Record<ColumnName, unknown> = {};\n row.data.forEach(({ value }, columnIndex) => {\n const column = this.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n const result = await this.inputTable?.addRows(newRows);\n\n log.debug('commitPending()', this.pendingNewDataMap, 'result', result);\n\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = new Map();\n this.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n this.pendingNewDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n );\n })\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n // await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n\n isValidForCell(x: ModelIndex, y: ModelIndex, value: string): boolean {\n try {\n const column = this.columns[x];\n TableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModelTemplate;\n"],"file":"IrisGridTableModelTemplate.js"}
|
|
1
|
+
{"version":3,"sources":["../src/IrisGridTableModelTemplate.ts"],"names":["memoize","throttle","GridRange","memoizeClear","dh","Log","EventShimCustomEvent","PromiseUtils","assertNotNull","TableUtils","Formatter","FormatterUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","model","table","undefined","IrisGridTableModelTemplate","export","Error","columnStatistics","column","customColumns","formatColumns","updateFrozenColumns","columns","rollupConfig","selectDistinctColumns","names","constructor","formatter","inputTable","tableColumns","columnMap","Map","forEach","col","set","name","indices","i","top","bottom","error","viewport","debug2","applyViewport","viewportTop","viewportBottom","getCachedViewportRowRange","applyBufferedViewport","leading","value","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","viewHeight","Math","ROW_BUFFER_PAGES","pendingDataMap","keyColumnCount","map","row","rowIndex","data","rowData","has","get","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","irisFormatter","subscription","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","pendingNewDataMap","pendingNewDataErrors","pendingNewRowCount","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","setViewport","dispatchEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","size","operationOrder","length","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","textValueForCell","valueForCell","totalsColumn","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","type","formatForCell","formatString","displayString","textForCell","isKeyColumn","pendingRow","truncationCharForCell","isNumberType","truncateNumbersWithPound","colorForCell","theme","dataForCell","format","nullStringColor","color","isPendingRow","pendingTextColor","isDateType","dateColor","positiveNumberColor","negativeNumberColor","zeroNumberColor","errorTextColor","textColor","backgroundColorForCell","backgroundColor","textAlignForCell","textForColumnHeader","textForRowFooter","totalsRow","getMemoizedColumnMap","groupedColumns","totalsRowCount","operation","offset","viewportY","rows","defaultOperation","SUM","tableColumn","find","isTotalsRow","warn","extractViewportData","totalsData","dataMap","operationMap","c","split","findIndex","getFormat","getColumnIndexByName","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","index","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","sort","applySort","totalsConfig","debug","setTotalsTable","makeCancelable","then","catch","err","isCanceled","listenerCount","snapshot","ranges","includeHeaders","formatValue","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","Set","tableRanges","bottomFloatingRowsSet","range","endRow","startRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","valuesTable","copy","selectDistinct","isRowMovable","isEditableRange","isBounded","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","cellText","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport {\n EditOperation,\n GridRange,\n memoizeClear,\n ModelIndex,\n VisibleIndex,\n} from '@deephaven/grid';\nimport dh, {\n Column,\n ColumnStatistics,\n CustomColumn,\n FilterCondition,\n Format,\n InputTable,\n RollupConfig,\n Row,\n Sort,\n Table,\n TableTemplate,\n TableViewportSubscription,\n TotalsTable,\n ViewportData,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\nimport {\n ColumnName,\n UITotalsTableConfig,\n UIRow,\n PendingDataMap,\n CellData,\n UIViewportData,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\n\nexport function isIrisGridTableModelTemplate(\n model: IrisGridModel\n): model is IrisGridTableModelTemplate {\n return (model as IrisGridTableModelTemplate).table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate<\n T extends TableTemplate<T> = Table,\n R extends UIRow = UIRow\n> extends IrisGridModel {\n static ROW_BUFFER_PAGES = 1;\n\n export(): Promise<Table> {\n throw new Error('Method not implemented.');\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n throw new Error('Method not implemented.');\n }\n\n get customColumns(): ColumnName[] {\n return [];\n }\n\n set customColumns(customColumns: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get formatColumns(): CustomColumn[] {\n return [];\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n throw new Error('Method not implemented.');\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n throw new Error('Method not implemented.');\n }\n\n get rollupConfig(): RollupConfig | null {\n throw new Error('Method not implemented.');\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n throw new Error('Method not implemented.');\n }\n\n get selectDistinctColumns(): ColumnName[] {\n throw new Error('Method not implemented.');\n }\n\n set selectDistinctColumns(names: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get columns(): Column[] {\n return this.table.columns;\n }\n\n private irisFormatter: Formatter;\n\n inputTable: InputTable | null;\n\n private subscription: TableViewportSubscription | null;\n\n table: T;\n\n viewport: {\n top: VisibleIndex;\n bottom: VisibleIndex;\n columns: Column[];\n } | null;\n\n viewportData: UIViewportData<R> | null;\n\n formattedStringData: (string | null)[][];\n\n private pendingStringData: (string | null)[][];\n\n private isSaveInProgress: boolean;\n\n private totalsTable: TotalsTable | null;\n\n totalsTablePromise: CancelablePromise<TotalsTable> | null;\n\n totals: UITotalsTableConfig | null;\n\n private totalsDataMap: Map<string, R> | null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n private pendingNewDataMap: PendingDataMap<R>;\n\n private pendingNewRowCount = 0;\n\n private pendingNewDataErrors: Map<unknown, unknown> | null;\n\n /**\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n table: T,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super();\n\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n\n this.irisFormatter = formatter;\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = null;\n this.pendingNewRowCount = 0;\n }\n\n close(): void {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n\n startListening(): void {\n super.startListening();\n\n this.table.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n\n this.applyViewport();\n }\n\n stopListening(): void {\n super.stopListening();\n\n this.table.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n this.table.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.closeSubscription();\n }\n\n addTotalsListeners(totalsTable: TotalsTable): void {\n totalsTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n\n removeTotalsListeners(totalsTable: TotalsTable): void {\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT)\n );\n }\n\n handleTableReconnect(): void {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event: CustomEvent): void {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event: CustomEvent): void {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event: CustomEvent): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount(): number {\n return (\n this.table.size +\n this.pendingNewRowCount +\n (this.totals?.operationOrder?.length ?? 0)\n );\n }\n\n get pendingDataErrors(): Map<number, Error[]> {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap(): PendingDataMap<R> {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<R>) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n\n this.pendingNewDataMap = map;\n\n this.pendingNewRowCount = Math.max(\n this.pendingNewRowCount,\n this.maxPendingDataRow\n );\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount(): number {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count: number) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow(): number {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount(): number {\n return this.columns.length;\n }\n\n get floatingBottomRowCount(): number {\n return this.totals?.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount(): number {\n return this.totals?.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isChartBuilderAvailable(): boolean {\n return true;\n }\n\n get isTotalsAvailable(): boolean {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable(): boolean {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x: ModelIndex, y: ModelIndex): void {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x: ModelIndex, y: ModelIndex): string | null {\n // First check if there's any pending values we should read from\n if (this.pendingStringData[x]?.[y] !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (this.formattedStringData[x]?.[y] === undefined) {\n const value = this.valueForCell(x, y);\n if (value == null) {\n return null;\n }\n\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n this.formatter,\n column.name,\n column.type\n );\n let formatOverride;\n if (!hasCustomColumnFormat) {\n const formatForCell = this.formatForCell(x, y);\n if (formatForCell?.formatString != null) {\n formatOverride = formatForCell;\n }\n }\n const text = this.displayString(\n value,\n column.type,\n column.name,\n formatOverride\n );\n this.cacheFormattedValue(x, y, text);\n }\n\n return this.formattedStringData[x][y];\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n return text ?? '';\n }\n\n truncationCharForCell(x: ModelIndex): '#' | undefined {\n const column = this.columns[x];\n const { type } = column;\n if (\n TableUtils.isNumberType(type) &&\n this.formatter.truncateNumbersWithPound\n ) {\n return '#';\n }\n\n return undefined;\n }\n\n colorForCell(x: ModelIndex, y: ModelIndex, theme: IrisGridThemeType): string {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n if (TableUtils.isDateType(column.type) || column.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.formatForCell(x, y)?.backgroundColor ?? null;\n }\n\n textAlignForCell(x: ModelIndex): CanvasTextAlign {\n const column = this.columns[x];\n const { type } = column;\n\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n\n textForColumnHeader(x: ModelIndex): string {\n const column = this.columns[x];\n return `${column.name}`;\n }\n\n textForRowFooter(y: ModelIndex): string {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n getMemoizedColumnMap = memoize(\n (tableColumns: Column[]): Map<string, Column> => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }\n );\n\n get columnMap(): Map<ColumnName, Column> {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n get groupedColumns(): [] {\n return [];\n }\n\n row(y: ModelIndex): R | null {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n const operation = this.totals?.operationOrder[totalsRow];\n assertNotNull(operation);\n return this.totalsDataMap?.get(operation) ?? null;\n }\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n return this.pendingNewDataMap.get(pendingRow) ?? null;\n }\n const offset = this.viewportData?.offset ?? 0;\n const viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return this.viewportData?.rows?.[viewportY] ?? null;\n }\n\n /**\n * Retrieve the totals column if this is a totals row, or null otherwise\n * @param x Column index to get the totals column from\n * @param y Row index to get the totals column from\n */\n totalsColumn(x: ModelIndex, y: ModelIndex): Column | undefined | null {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals?.operationOrder[totalsRow];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const tableColumn = this.columns[x];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n return this.totalsTable?.columns.find(\n column =>\n column.name === `${tableColumn.name}__${operation}` ||\n ((operation === defaultOperation ||\n this.totals?.operationOrder.length === 1) &&\n column.name === tableColumn.name)\n );\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y: ModelIndex): ModelIndex | null {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y: ModelIndex): ModelIndex | null {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y: ModelIndex): boolean {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y: ModelIndex): boolean {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x: ModelIndex, y: ModelIndex): CellData | undefined {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x: ModelIndex, y: ModelIndex): Format | undefined {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x: ModelIndex, y: ModelIndex): unknown | null {\n const data = this.dataForCell(x, y);\n if (data) {\n return data.value ?? null;\n }\n return null;\n }\n\n copyViewportData(data: ViewportData): void {\n if (!data) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData: ViewportData): void {\n if (!totalsData) {\n log.warn('invalid data!');\n return;\n }\n\n const { columns, rows } = totalsData;\n if (rows.length !== 1) {\n log.error(\n 'Unexpected number of rows received for totals table, ignoring update'\n );\n return;\n }\n\n const dataMap = new Map();\n const row = rows[0];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const operationMap = this.totals?.operationMap;\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const [\n name,\n operation = operationMap?.[name]?.[0] ?? defaultOperation,\n ] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, { data: new Map() });\n }\n const { data: rowData } = dataMap.get(operation);\n const columnIndex = this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n log.debug2('copyTotalsData', dataMap);\n\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(\n (columns: Column[]): Map<ColumnName, ModelIndex> => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n }\n );\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data: ViewportData): UIViewportData<R> {\n const newData: UIViewportData<R> = {\n offset: data.offset,\n rows: [],\n };\n\n const { columns } = data;\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n\n return newData;\n }\n\n extractViewportRow(row: Row, columns: Column[]): R {\n const data = new Map<ModelIndex, CellData>();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data } as R;\n }\n\n closeSubscription(): void {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n\n get filter(): FilterCondition[] {\n return this.table.filter;\n }\n\n set filter(filter: FilterCondition[]) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter(): Formatter {\n return this.irisFormatter;\n }\n\n set formatter(formatter: Formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED)\n );\n }\n\n displayString(\n value: unknown,\n columnType: string,\n columnName = '',\n formatOverride?: { formatString: string }\n ): string {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort(): Sort[] {\n return this.table.sort;\n }\n\n set sort(sort: Sort[]) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n setTotalsTable(totalsTable: TotalsTable | null): void {\n log.debug('setTotalsTable', totalsTable);\n\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.totalsTable.close();\n }\n\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n setViewport = throttle(\n (top: VisibleIndex, bottom: VisibleIndex, columns: Column[]) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n const { viewport } = this;\n if (\n viewport != null &&\n viewport.top === top &&\n viewport.bottom === bottom &&\n viewport.columns === columns\n ) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n\n this.viewport = {\n top,\n bottom,\n columns,\n };\n log.debug2('setViewport', this.viewport);\n\n this.applyViewport();\n },\n SET_VIEWPORT_THROTTLE\n );\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport = throttle(\n (): void => {\n if (!this.viewport) {\n return;\n }\n\n log.debug2('applyViewport', this.viewport);\n const { top, bottom, columns } = this.viewport;\n const [viewportTop, viewportBottom] = this.getCachedViewportRowRange(\n top,\n bottom\n );\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n },\n APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (value: unknown, column: Column) => unknown = value => value\n ): Promise<unknown[][]> {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = GridRange.consolidate(ranges);\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(`Invalid snapshot ranges ${ranges}`);\n }\n\n // Need to separate out the floating ranges as they're from a different source\n const topFloatingRowsSet = new Set<number>();\n const tableRanges: GridRange[] = [];\n const bottomFloatingRowsSet = new Set<number>();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (\n let r = range.startRow;\n r <= range.endRow && r < this.floatingTopRowCount;\n r += 1\n ) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (\n range.endRow >= this.floatingTopRowCount &&\n range.startRow <= this.floatingTopRowCount + this.table.size\n ) {\n tableRanges.push(\n new GridRange(\n range.startColumn,\n Math.min(Math.max(0, range.startRow - this.floatingTopRowCount)),\n range.endColumn,\n Math.min(\n Math.max(0, range.endRow - this.floatingTopRowCount),\n this.table.size - this.floatingTopRowCount\n )\n )\n );\n }\n // Get the rows that are in the bottom aggregations section\n for (\n let r = Math.max(\n range.startRow,\n this.floatingTopRowCount + this.table.size\n );\n r <= range.endRow &&\n r <\n this.floatingTopRowCount +\n this.table.size +\n this.floatingBottomRowCount;\n r += 1\n ) {\n bottomFloatingRowsSet.add(r);\n }\n }\n\n const columns = IrisGridUtils.columnsFromRanges(consolidated, this.columns);\n const result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n const topFloatingRows = [...topFloatingRowsSet].sort();\n for (let i = 0; i < topFloatingRows.length; i += 1) {\n const row = topFloatingRows[i];\n const rowData = columns.map(column => {\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n if (tableRanges.length > 0) {\n const rangeSet = IrisGridUtils.rangeSetFromRanges(tableRanges);\n const snapshot = await this.subscription.snapshot(rangeSet, columns);\n result.push(\n ...snapshot.rows.map(rowData =>\n columns.map(column => formatValue(rowData.get(column), column))\n )\n );\n }\n\n const bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n for (let i = 0; i < bottomFloatingRows.length; i += 1) {\n const row = bottomFloatingRows[i];\n const rowData = columns.map(column => {\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (\n value: unknown,\n column: Column,\n row?: Row\n ) => string = value => `${value}`\n ): Promise<string> {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(ranges, includeHeaders, formatValue);\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n async valuesTable(column: Column): Promise<Table> {\n let table = null;\n try {\n table = await this.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct([column]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n }\n\n getCachedFormattedString = memoizeClear(\n (\n formatter: Formatter,\n value: unknown,\n columnType: string,\n columnName: ColumnName,\n formatOverride?: { formatString: string }\n ): string =>\n formatter.getFormattedString(\n value,\n columnType,\n columnName,\n formatOverride\n ),\n { max: 10000 }\n );\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n getCachedViewportRowRange = memoize((top: number, bottom: number): [\n number,\n number\n ] => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (\n pendingDataMap: PendingDataMap,\n columns: Column[],\n keyColumnCount: number\n ) => {\n const map = new Map<ModelIndex, MissingKeyError[]>();\n pendingDataMap.forEach((row, rowIndex) => {\n const { data: rowData } = row;\n for (let i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n map\n .get(rowIndex)\n ?.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }\n );\n\n isKeyColumn(x: ModelIndex): boolean {\n return x < (this.inputTable?.keyColumns.length ?? 0);\n }\n\n isRowMovable(): boolean {\n return false;\n }\n\n isEditableRange(range: GridRange): boolean {\n return (\n this.inputTable != null &&\n GridRange.isBounded(range) &&\n ((this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow)) ||\n (range.startColumn >= this.inputTable.keyColumns.length &&\n range.endColumn >= this.inputTable.keyColumns.length)) &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isDeletableRange(range: GridRange): boolean {\n return (\n this.inputTable != null &&\n range.startRow != null &&\n range.endRow != null &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isEditableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns {GridRange} A range corresponding to the pending new rows\n */\n getPendingAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount + this.table.size,\n null,\n this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1\n );\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(\n x: ModelIndex,\n y: ModelIndex,\n text: string\n ): Promise<void> {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return this.setValueForRanges([new GridRange(x, y, x, y)], text);\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges: GridRange[], text: string): Promise<void> {\n if (!this.isEditableRanges(ranges)) {\n throw new Error(`Uneditable ranges ${ranges}`);\n }\n\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n const columnSet = new Set<Column>();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n const formattedText: (string | null)[] = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n formattedText[x] =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n }\n this.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, { data: new Map() } as R);\n }\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n if (value != null) {\n newRowData.set(columnIndex, { value });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, { ...row, data: newRowData });\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n this.pendingDataMap = newDataMap;\n }\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range =>\n new GridRange(\n null,\n range?.startRow ?? null,\n null,\n range?.endRow ?? null\n )\n )\n );\n const newRows = data.map(row => {\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n columnSet.forEach(column => {\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n });\n return newRow;\n });\n\n const result = await this.inputTable?.addRows(newRows);\n\n log.debug(\n 'setValueForRanges(',\n ranges,\n ',',\n text,\n ') set tableRanges',\n tableRanges,\n 'result',\n result\n );\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n const cellText = formattedText[x];\n assertNotNull(cellText);\n this.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n this.clearPendingValue(x, y);\n });\n }\n }\n\n async setValues(edits: EditOperation[] = []): Promise<void> {\n log.debug('setValues(', edits, ')');\n if (\n !edits.every(edit =>\n this.isEditableRange(\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n )\n ) {\n throw new Error(`Uneditable ranges ${edits}`);\n }\n\n try {\n const newDataMap = new Map(this.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, { data: new Map() } as R);\n }\n\n const row = newDataMap.get(pendingRow);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, { value });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, { ...row, data: newRowData });\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n\n this.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n const rowEditMap = edits.reduce((rowMap, edit) => {\n const y = edit.row ?? edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n rowMap.get(y)?.push(edit);\n return rowMap;\n }, new Map<ModelIndex, EditOperation[]>());\n\n const ranges = GridRange.consolidate(\n edits.map(edit =>\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n );\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n })\n );\n const newRows = data.map((row, dataIndex) => {\n let rowIndex = null;\n let r = dataIndex;\n for (let i = 0; i < tableRanges.length; i += 1) {\n const range = tableRanges[i];\n assertNotNull(range);\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n const rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n const column = this.columns[edit.column ?? edit.x];\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n edit.text,\n this.formatter.timeZone\n );\n });\n }\n return newRow;\n });\n\n log.info('setValues setting tableRanges', tableRanges);\n\n const result = await this.inputTable?.addRows(newRows);\n\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n\n this.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n this.clearPendingValue(edit.column, edit.row);\n });\n }\n }\n\n async commitPending(): Promise<void> {\n if (this.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n\n try {\n this.isSaveInProgress = true;\n\n const newRows: Record<ColumnName, unknown>[] = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow: Record<ColumnName, unknown> = {};\n row.data.forEach(({ value }, columnIndex) => {\n const column = this.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n const result = await this.inputTable?.addRows(newRows);\n\n log.debug('commitPending()', this.pendingNewDataMap, 'result', result);\n\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = new Map();\n this.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n this.pendingNewDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n );\n })\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n // await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n\n isValidForCell(x: ModelIndex, y: ModelIndex, value: string): boolean {\n try {\n const column = this.columns[x];\n TableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModelTemplate;\n"],"file":"IrisGridTableModelTemplate.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.1-beta.1+ae071bb",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,18 +30,18 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/components": "^0.14.
|
|
34
|
-
"@deephaven/console": "^0.14.
|
|
35
|
-
"@deephaven/filters": "^0.14.
|
|
36
|
-
"@deephaven/grid": "^0.14.
|
|
37
|
-
"@deephaven/icons": "^0.14.
|
|
38
|
-
"@deephaven/jsapi-shim": "^0.14.
|
|
39
|
-
"@deephaven/jsapi-utils": "^0.14.
|
|
40
|
-
"@deephaven/log": "^0.14.
|
|
41
|
-
"@deephaven/react-hooks": "^0.14.
|
|
42
|
-
"@deephaven/redux": "^0.14.
|
|
43
|
-
"@deephaven/storage": "^0.14.
|
|
44
|
-
"@deephaven/utils": "^0.14.
|
|
33
|
+
"@deephaven/components": "^0.14.1-beta.1+ae071bb",
|
|
34
|
+
"@deephaven/console": "^0.14.1-beta.1+ae071bb",
|
|
35
|
+
"@deephaven/filters": "^0.14.1-beta.1+ae071bb",
|
|
36
|
+
"@deephaven/grid": "^0.14.1-beta.1+ae071bb",
|
|
37
|
+
"@deephaven/icons": "^0.14.1-beta.1+ae071bb",
|
|
38
|
+
"@deephaven/jsapi-shim": "^0.14.1-beta.1+ae071bb",
|
|
39
|
+
"@deephaven/jsapi-utils": "^0.14.1-beta.1+ae071bb",
|
|
40
|
+
"@deephaven/log": "^0.14.1-beta.1+ae071bb",
|
|
41
|
+
"@deephaven/react-hooks": "^0.14.1-beta.1+ae071bb",
|
|
42
|
+
"@deephaven/redux": "^0.14.1-beta.1+ae071bb",
|
|
43
|
+
"@deephaven/storage": "^0.14.1-beta.1+ae071bb",
|
|
44
|
+
"@deephaven/utils": "^0.14.1-beta.1+ae071bb",
|
|
45
45
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
46
46
|
"classnames": "^2.3.1",
|
|
47
47
|
"deep-equal": "^2.0.5",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"monaco-editor": "^0.27.0",
|
|
54
54
|
"prop-types": "^15.7.2",
|
|
55
55
|
"react-beautiful-dnd": "^13.1.0",
|
|
56
|
-
"react-transition-group": "^
|
|
56
|
+
"react-transition-group": "^4.4.2",
|
|
57
57
|
"reactstrap": "^8.10.0",
|
|
58
58
|
"shortid": "^2.2.16",
|
|
59
59
|
"web-streams-polyfill": "^2.1.0"
|
|
@@ -62,8 +62,8 @@
|
|
|
62
62
|
"react": "^17.x"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@deephaven/mocks": "^0.14.
|
|
66
|
-
"@deephaven/tsconfig": "^0.14.
|
|
65
|
+
"@deephaven/mocks": "^0.14.1-beta.1+ae071bb",
|
|
66
|
+
"@deephaven/tsconfig": "^0.14.1-beta.1+ae071bb"
|
|
67
67
|
},
|
|
68
68
|
"files": [
|
|
69
69
|
"dist"
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
"publishConfig": {
|
|
75
75
|
"access": "public"
|
|
76
76
|
},
|
|
77
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "ae071bbc7922b6e1c0ae2f9a729c246a10c09a3b"
|
|
78
78
|
}
|