@deephaven/iris-grid 0.6.1-fixed-deps.2 → 0.6.3-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ColumnStatistics.css +5 -0
- package/dist/ColumnStatistics.css.map +1 -1
- package/dist/ColumnStatistics.d.ts +1 -0
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js +26 -9
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/IrisGrid.css +2 -0
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGrid.d.ts +1 -0
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +30 -14
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +1 -1
- package/dist/IrisGridModel.d.ts +5 -0
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +9 -0
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +4 -0
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +26 -7
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTheme.module.css +2 -0
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/IrisGridTreeTableModel.js +1 -1
- package/dist/IrisGridUtils.js +32 -32
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/PendingDataBottomBar.js +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableUtils.js +1 -1
- package/dist/ToastBottomBar.js +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/memoizeClear.js +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +6 -2
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +8 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +2 -2
- package/dist/sidebar/CustomColumnBuilder.js +2 -2
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/InputEditor.d.ts +1 -1
- package/dist/sidebar/InputEditor.js +2 -2
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.js +10 -10
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +5 -5
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableSaver.js +1 -1
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +10 -10
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +3 -3
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +4 -4
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/TableSaver.jsx"],"names":["PureComponent","PropTypes","WritableStream","ponyfillWritableStream","dh","Log","PromiseUtils","Formatter","log","module","TableSaver","csvEscapeString","str","replace","constructor","props","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","sw","port","fileWriter","table","tableSubscription","columns","fileName","chunkRows","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","window","streamTimeout","snapshotHandlerTimeout","downloadStartTime","iframes","useBlobFallback","safari","componentDidMount","getDownloadWorker","then","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","clearTimeout","createWriterStream","useBlob","chunks","encode","TextEncoder","prototype","streamConfig","write","chunk","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","startDownload","frozenTable","isDownloading","Date","now","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","cancelable","onDownloadCanceled","writeTableHeader","headerString","i","name","header","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","ceil","endRow","startRow","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","convertSnapshotIntoCsv","get","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","added","iterator","formatter","hasNext","next","value","rowIdx","j","cellData","getFormattedString","getData","n","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","data","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","loaded","isIframe","addEventListener","body","appendChild","render","propTypes","func","bool","instanceOf","isRequired","defaultProps","Promise","reject","Error"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,OAA9B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,cAAc,IAAIC,sBAA3B,QAAyD,+BAAzD;AACA,OAAOC,EAAP,MAAe,uBAAf;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,YAAT,QAA6B,kBAA7B;OACOC,S;AAEP,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,YAAX,CAAZ;AAEA,eAAe,MAAMC,UAAN,SAAyBV,aAAzB,CAAuC;AAS9B,SAAfW,eAAe,CAACC,GAAD,EAAM;AAC1B,uBAAWA,GAAG,CAACC,OAAJ,CAAY,IAAZ,EAAkB,IAAlB,CAAX;AACD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;AAEA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKC,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AAEA,SAAKG,KAAL,GAAa,EAAb;AAEA,SAAKC,EAAL,GAAU,IAAV;AACA,SAAKC,IAAL,GAAY,IAAZ;AACA,SAAKC,UAAL,GAAkB,IAAlB;AAEA,SAAKC,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AAEA,SAAKC,QAAL,GAAgB,IAAhB;AAEA,SAAKC,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B,CAhCiB,CAkCjB;;AACA,SAAKrC,cAAL,GAAsBsC,MAAM,CAACtC,cAAP,IAAyBC,sBAA/C,CAnCiB,CAqCjB;AACA;AACA;AACA;;AACA,SAAKsC,aAAL,GAAqB,IAArB;AAEA,SAAKC,sBAAL,GAA8B,IAA9B;AAEA,SAAKC,iBAAL,GAAyB,IAAzB;AAEA,SAAKC,OAAL,GAAe,EAAf;AAEA,SAAKC,eAAL,GAAuB,CAAC,CAACL,MAAM,CAACM,MAAhC;AACD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAwB,KAAKjC,KAAnC;AACAiC,IAAAA,iBAAiB,GACdC,IADH,CACQ5B,EAAE,IAAI;AACVb,MAAAA,GAAG,CAAC0C,IAAJ,CAAS,6BAAT;AACA,WAAK7B,EAAL,GAAUA,EAAV;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB,MAApB,EAHU,CAGmB;AAC9B,KALH,EAMGC,KANH,CAMSC,KAAK,IAAI;AACd;AACA7C,MAAAA,GAAG,CAAC8C,IAAJ,CAAS,gCAAT,EAA2CD,KAA3C;AACA,WAAKR,eAAL,GAAuB,IAAvB;AACD,KAVH;AAWD;;AAEDU,EAAAA,oBAAoB,GAAG;AACrB,QAAI,KAAKX,OAAL,CAAaY,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,WAAKZ,OAAL,CAAaa,OAAb,CAAqBC,MAAM,IAAI;AAC7BA,QAAAA,MAAM,CAACC,MAAP;AACD,OAFD;AAGD;;AACDC,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACD;;AAEDmB,EAAAA,kBAAkB,CAACvC,IAAD,EAAO;AACvB;AACA,QAAMwC,OAAO,GAAG,KAAKjB,eAArB;AACA,QAAMkB,MAAM,GAAG,EAAf;AACA,QAAIC,MAAM,GAAG,IAAb;;AACA,QAAIF,OAAJ,EAAa;AACXE,MAAAA,MAAM,GAAGC,WAAW,CAACC,SAAZ,CAAsBF,MAAtB,CAA6B/C,IAA7B,CAAkC,IAAIgD,WAAJ,EAAlC,CAAT;AACD;;AACD,QAAM;AAAEtC,MAAAA;AAAF,QAAe,IAArB;AAEA,QAAMwC,YAAY,GAAG,EAArB;;AACA,QAAIL,OAAJ,EAAa;AACXK,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5BN,QAAAA,MAAM,CAACO,IAAP,CAAYN,MAAM,CAACK,KAAK,CAACE,IAAP,CAAlB;AACD,OAFD;;AAGAJ,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzB,YAAMC,IAAI,GAAG,IAAIC,IAAJ,CAASX,MAAT,EAAiB;AAC5BY,UAAAA,IAAI,EAAE;AADsB,SAAjB,CAAb;AAGA,YAAMC,IAAI,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAb;AACAF,QAAAA,IAAI,CAACG,IAAL,GAAYC,GAAG,CAACC,eAAJ,CAAoBR,IAApB,CAAZ;AACAG,QAAAA,IAAI,CAACM,QAAL,GAAgBvD,QAAhB;AACAiD,QAAAA,IAAI,CAACO,KAAL;AACD,OARD;;AASAhB,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID,KAjBD,MAiBO;AACLL,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5B/C,QAAAA,IAAI,CAAC6B,WAAL,CAAiBkB,KAAjB;AACD,OAFD;;AAGAF,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzBlD,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEmC,UAAAA,GAAG,EAAE;AAAP,SAAjB;AACAhE,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;;AAIAL,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID;;AAED,WAAO,IAAI,KAAKtE,cAAT,CAAwBiE,YAAxB,CAAP;AACD;;AAEDoB,EAAAA,aAAa,CAAC5D,QAAD,EAAW6D,WAAX,EAAwB/D,iBAAxB,EAA2CI,UAA3C,EAAuD;AAClE;AACA,QAAM;AAAE4D,MAAAA;AAAF,QAAoB,KAAK1E,KAA/B;;AACA,QAAI0E,aAAJ,EAAmB;AACjB;AACD;;AAED,SAAK9C,iBAAL,GAAyB+C,IAAI,CAACC,GAAL,EAAzB;AACAnF,IAAAA,GAAG,CAAC0C,IAAJ,6BAA8BvB,QAA9B;AAEA,SAAKH,KAAL,GAAagE,WAAb;AACA,SAAK9D,OAAL,GAAe8D,WAAW,CAAC9D,OAA3B;AACA,SAAKD,iBAAL,GAAyBA,iBAAzB;AACA,SAAKI,UAAL,GAAkBA,UAAlB,CAbkE,CAelE;;AACA,QAAM+D,eAAe,GAAGC,kBAAkB,CAAClE,QAAQ,CAACd,OAAT,CAAiB,KAAjB,EAAwB,GAAxB,CAAD,CAAlB,CACrBA,OADqB,CACb,QADa,EACHiF,MADG,EAErBjF,OAFqB,CAEb,KAFa,EAEN,KAFM,CAAxB;AAIA,QAAMkF,cAAc,GAAG,IAAIC,cAAJ,EAAvB;AACA,SAAK1E,IAAL,GAAYyE,cAAc,CAACE,KAA3B;AACA,SAAKtE,QAAL,GAAgBA,QAAhB;AACA,SAAKJ,UAAL,GAAkB,KAAKsC,kBAAL,CAAwB,KAAKvC,IAA7B,EAAmC4E,SAAnC,EAAlB,CAvBkE,CAyBlE;;AACA,QAAI,KAAKrD,eAAT,EAA0B;AACxB,WAAKsD,aAAL;AACA;AACD;;AAED,QAAI,KAAK9E,EAAT,EAAa;AACX;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB;AAAEyC,QAAAA;AAAF,OAApB,EAAyC,CAACG,cAAc,CAACK,KAAhB,CAAzC;AACD;;AACD,SAAK9E,IAAL,CAAU+E,SAAV,GAAsB,KAAKrF,iBAA3B;AACD;;AAEDsF,EAAAA,cAAc,GAAG;AACf,QAAI,KAAK9E,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgBiD,KAAhB;AACD;;AAED,QAAM;AAAE+B,MAAAA;AAAF,QAA0B,KAAKxF,KAArC;AACAwF,IAAAA,mBAAmB;AACnB,SAAKC,eAAL;AAEAhG,IAAAA,GAAG,CAAC0C,IAAJ,iDAEI,CAACwC,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,IAAwC,IAF5C;AAKD;;AAED8D,EAAAA,cAAc,GAAG;AACf,QAAI,KAAKjF,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgB6D,KAAhB;AACD;;AAED,SAAK7C,mBAAL,CAAyBkB,OAAzB,CAAiCiD,UAAU,IAAI;AAC7C,UAAIA,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACtD,KAAX,CAAiB,MAAM,CAAE,CAAzB;AACAsD,QAAAA,UAAU,CAACrB,MAAX;AACD;AACF,KALD;AAMA,QAAM;AAAEsB,MAAAA;AAAF,QAAyB,KAAK5F,KAApC;AACA4F,IAAAA,kBAAkB;AAClB,SAAKH,eAAL;AACD;;AAEDA,EAAAA,eAAe,GAAG;AAChB,SAAKhF,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AACA,SAAKE,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B;AAEAqB,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACA,SAAKD,aAAL,GAAqB,IAArB;AACA,SAAKC,sBAAL,GAA8B,IAA9B;AACD;;AAEDvB,EAAAA,qBAAqB,GAAG;AACtBX,IAAAA,GAAG,CAAC0C,IAAJ,CAAS,mBAAT;AACA,SAAKuD,cAAL;AACD;;AAEDG,EAAAA,gBAAgB,GAAG;AACjB,QAAIC,YAAY,GAAG,EAAnB;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpF,OAAL,CAAa8B,MAAjC,EAAyCsD,CAAC,IAAI,CAA9C,EAAiD;AAC/CD,MAAAA,YAAY,IAAI,KAAKnF,OAAL,CAAaoF,CAAb,EAAgBC,IAAhC;AACAF,MAAAA,YAAY,IAAIC,CAAC,KAAK,KAAKpF,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAAvD;AACD;;AACD,SAAKjC,UAAL,CAAgB6C,KAAhB,CAAsB;AAAE4C,MAAAA,MAAM,EAAEH;AAAV,KAAtB,EAAgD5D,IAAhD,CAAqD,MAAM,CAAE,CAA7D;AACD;;AAEDgE,EAAAA,mBAAmB,GAAG;AACpB,SAAKrF,SAAL,GAAiBsF,IAAI,CAACC,KAAL,CACfzG,UAAU,CAAC0G,mBAAX,GAAiC,KAAK1F,OAAL,CAAa8B,MAD/B,CAAjB;AAIA,SAAKzB,oBAAL,GAA4B,KAAKF,UAAL,CAAgBwF,GAAhB,CAAoBC,KAAK,IACnDJ,IAAI,CAACK,IAAL,CAAU,CAACD,KAAK,CAACE,MAAN,GAAeF,KAAK,CAACG,QAArB,GAAgC,CAAjC,IAAsC,KAAK7F,SAArD,CAD0B,CAA5B;AAGA,SAAKK,cAAL,GAAsB,KAAKF,oBAAL,CAA0B2F,MAA1B,CACpB,CAACC,KAAD,EAAQC,aAAR,KAA0BD,KAAK,GAAGC,aADd,CAAtB;AAIApH,IAAAA,GAAG,CAAC0C,IAAJ,2CAAmD,KAAKjB,cAAxD;AAEA,SAAK4F,YAAL,CACEX,IAAI,CAACY,GAAL,CAASpH,UAAU,CAACqH,oBAApB,EAA0C,KAAK9F,cAA/C,CADF;AAGD;;AAEDkE,EAAAA,aAAa,GAAG;AACd,SAAKS,gBAAL;AACA,SAAKK,mBAAL;AACD;;AAEDe,EAAAA,aAAa,CAACC,aAAD,EAAgBC,gBAAhB,EAAkCC,cAAlC,EAAkD;AAC7D,QAAI,KAAK9F,oBAAL,KAA8B4F,aAA9B,IAA+C,KAAK1G,UAAxD,EAAoE;AAClE,aAAO,KAAKY,eAAL,CAAqBiG,GAArB,CAAyB,KAAK/F,oBAA9B,CAAP,EAA4D;AAC1D,aAAKd,UAAL,CAAgB6C,KAAhB,CAAsB;AACpBG,UAAAA,IAAI,EAAE,KAAK8D,sBAAL,CACJ,KAAKlG,eAAL,CAAqBmG,GAArB,CAAyB,KAAKjG,oBAA9B,CADI,EAEJ6F,gBAFI,EAGJC,cAHI;AADc,SAAtB;AAOA,aAAKhG,eAAL,CAAqBoG,MAArB,CAA4B,KAAKlG,oBAAjC;AACA,aAAKA,oBAAL,IAA6B,CAA7B;AAEA,aAAKmG,sBAAL,CAA4BP,aAA5B;AACD;;AACD,UAAI,KAAK5F,oBAAL,IAA6B,KAAKJ,cAAtC,EAAsD;AACpD,aAAKqE,cAAL;AACA;AACD;AACF;;AAED,QAAI,KAAKpE,eAAL,GAAuB,KAAKD,cAAhC,EAAgD;AAC9CzB,MAAAA,GAAG,CAACiI,MAAJ,0CAEyB,KAAK3G,gBAF9B,+CAG0B,KAAKI,eAH/B,sDAIiC,KAAKF,qBAJtC,0CAKqB,KAAKM,eAL1B,kCAMa,KAAKH,eAAL,CAAqBuG,IANlC,8BAOWxB,IAAI,CAACY,GAAL,CACPpH,UAAU,CAACqH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHA,EAIP,KAAKL,cAAL,GAAsB,KAAKC,eAJpB,CAPX;AAeA,WAAK2F,YAAL,CACEX,IAAI,CAACY,GAAL,CACEpH,UAAU,CAACqH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHT,EAIE,KAAKL,cAAL,GAAsB,KAAKC,eAJ7B,CADF;AAQD;AACF;;AAEDsG,EAAAA,sBAAsB,CAACP,aAAD,EAAgB;AACpC,QAAM;AAAEU,MAAAA;AAAF,QAA+B,KAAK5H,KAA1C;AACA,QAAM6H,gBAAgB,GAAG1B,IAAI,CAACC,KAAL,CACtBc,aAAa,GAAG,GAAjB,GAAwB,KAAKhG,cADN,CAAzB;AAGA,QAAM4G,YAAY,GAChBZ,aAAa,GAAG,CAAhB,GACIf,IAAI,CAACC,KAAL,CACG,CAACzB,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,KACE,KAAKV,cAAL,GAAsBgG,aADxB,CAAD,GAEEA,aAFF,GAGE,IAJJ,CADJ,GAOI,IARN;AAUAU,IAAAA,wBAAwB,CAACC,gBAAD,EAAmBC,YAAnB,CAAxB;AACD;;AAEDR,EAAAA,sBAAsB,CAACS,QAAD,EAAW;AAC/B,QAAIC,SAAS,GAAG,EAAhB;AACA,QAAMC,gBAAgB,GAAGF,QAAQ,CAACG,KAAT,CAAeC,QAAf,EAAzB;AACA,QAAM;AAAEC,MAAAA;AAAF,QAAgB,KAAKpI,KAA3B;AAEA,QAAMwD,IAAI,GAAG,EAAb;;AACA,WAAOyE,gBAAgB,CAACI,OAAjB,EAAP,EAAmC;AACjC7E,MAAAA,IAAI,CAACD,IAAL,CAAU0E,gBAAgB,CAACK,IAAjB,GAAwBC,KAAlC;AACD;;AAED,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvC,IAAI,CAACf,MAAzB,EAAiCsD,CAAC,IAAI,CAAtC,EAAyC;AACvC,UAAMyC,MAAM,GAAGhF,IAAI,CAACuC,CAAD,CAAnB;;AACA,WAAK,IAAI0C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,OAAL,CAAa8B,MAAjC,EAAyCgG,CAAC,IAAI,CAA9C,EAAiD;AAC/C,YAAMC,QAAQ,GAAGN,SAAS,CAACO,kBAAV,CACfZ,QAAQ,CAACa,OAAT,CAAiBJ,MAAjB,EAAyB,KAAK7H,OAAL,CAAa8H,CAAb,CAAzB,CADe,EAEf,KAAK9H,OAAL,CAAa8H,CAAb,EAAgB7E,IAFD,EAGf,KAAKjD,OAAL,CAAa8H,CAAb,EAAgBzC,IAHD,CAAjB;AAKAgC,QAAAA,SAAS,IAAIrI,UAAU,CAACC,eAAX,CAA2B8I,QAA3B,CAAb;AACAV,QAAAA,SAAS,IAAIS,CAAC,KAAK,KAAK9H,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAApD;AACD;AACF;;AAED,WAAOuF,SAAP;AACD;;AAEDlB,EAAAA,YAAY,CAAC+B,CAAD,EAAI;AAAA;;AACd,QAAIA,CAAC,IAAI,CAAT,EAAY;AACV;AACD;;AACD,QAAI9C,CAAC,GAAG,CAAR;AACA,QAAI+C,gBAAgB,GAAG,KAAKhI,UAAL,CAAgB,KAAKC,gBAArB,CAAvB;;AALc;AAOZ,UAAMoG,gBAAgB,GACpB2B,gBAAgB,CAACpC,QAAjB,GAA4B,KAAI,CAACzF,qBAAL,GAA6B,KAAI,CAACJ,SADhE;AAEA,UAAMuG,cAAc,GAAGjB,IAAI,CAACY,GAAL,CACrBI,gBAAgB,GAAG,KAAI,CAACtG,SAAxB,GAAoC,CADf,EAErBiI,gBAAgB,CAACrC,MAFI,CAAvB;AAKA,UAAMS,aAAa,GAAG,KAAI,CAAC/F,eAA3B;;AACA,MAAA,KAAI,CAACK,mBAAL,CAAyB+B,IAAzB,CACEhE,YAAY,CAACwJ,cAAb,CACE,KAAI,CAACrI,iBAAL,CACGqH,QADH,CAEI1I,EAAE,CAAC2J,QAAH,CAAYC,OAAZ,CAAoB9B,gBAApB,EAAsCC,cAAtC,CAFJ,EAGI,KAAI,CAACzG,OAHT,EAKGuB,IALH,CAKQ6F,QAAQ,IAAI;AAChB,QAAA,KAAI,CAAC5H,sBAAL,CACE4H,QADF,EAEEb,aAFF,EAGEC,gBAHF,EAIEC,cAJF;;AAOA,eAAOF,aAAP;AACD,OAdH,EAeG7E,KAfH,CAeS6G,GAAG,IAAI;AACZzJ,QAAAA,GAAG,CAAC6C,KAAJ,CAAU4G,GAAV;AACD,OAjBH,CADF,EAmBEC,GAAG,IAAI;AACL1J,QAAAA,GAAG,CAAC0C,IAAJ,oBAAqBgH,GAArB;AACD,OArBH,CADF;;AA0BA,MAAA,KAAI,CAAClI,qBAAL,IAA8B,CAA9B;AACA,MAAA,KAAI,CAACE,eAAL,IAAwB,CAAxB;AACA,MAAA,KAAI,CAACI,eAAL,IAAwB,CAAxB;;AAEA,UACE,KAAI,CAACN,qBAAL,IACA,KAAI,CAACD,oBAAL,CAA0B,KAAI,CAACD,gBAA/B,CAFF,EAGE;AACA,QAAA,KAAI,CAACA,gBAAL,IAAyB,CAAzB;AACA,QAAA,KAAI,CAACE,qBAAL,GAA6B,CAA7B;AACA6H,QAAAA,gBAAgB,GAAG,KAAI,CAAChI,UAAL,CAAgB,KAAI,CAACC,gBAArB,CAAnB;AACD;;AACDgF,MAAAA,CAAC,IAAI,CAAL;AArDY;;AAMd,WAAOA,CAAC,GAAG8C,CAAX,EAAc;AAAA;AAgDb;AACF;;AAED5I,EAAAA,iBAAiB,OAAW;AAAA,QAAV;AAAEmJ,MAAAA;AAAF,KAAU;AAC1B,QAAM;AAAEjF,MAAAA,QAAF;AAAYkF,MAAAA;AAAZ,QAAsCD,IAA5C;;AACA,QAAI,KAAKtH,eAAT,EAA0B;AACxB;AACD;;AACD,QAAIqC,QAAJ,EAAc;AACZ,WAAKmF,UAAL,WAAmBnF,QAAnB;AACA,WAAKiB,aAAL;AACD;;AACD,QAAIiE,qBAAJ,EAA2B;AACzB,UAAI,CAAC,KAAKvH,eAAV,EAA2B;AACzBe,QAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AAEA,aAAKA,aAAL,GAAqB6H,UAAU,CAC7B,KAAKnJ,qBADwB,EAE7BT,UAAU,CAAC6J,cAFkB,CAA/B;AAID;AACF;AACF;;AAEDrJ,EAAAA,sBAAsB,CACpB4H,QADoB,EAEpBb,aAFoB,EAGpBC,gBAHoB,EAIpBC,cAJoB,EAKpB;AACA;AACA,SAAKzF,sBAAL,GAA8B4H,UAAU,CAAC,MAAM;AAC7C,WAAKnI,eAAL,CAAqBqI,GAArB,CAAyBvC,aAAzB,EAAwCa,QAAxC;AACA,WAAKxG,eAAL,IAAwB,CAAxB;AACA,WAAK0F,aAAL,CAAmBC,aAAnB,EAAkCC,gBAAlC,EAAoDC,cAApD;AACA,WAAK5F,mBAAL,CAAyB0F,aAAzB,IAA0C,IAA1C;AACD,KALuC,EAKrCvH,UAAU,CAAC+J,wBAL0B,CAAxC;AAMD;;AAEDJ,EAAAA,UAAU,CAACK,GAAD,EAAM;AACd;AACA,QAAMhH,MAAM,GAAGmB,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;AACApB,IAAAA,MAAM,CAACiH,MAAP,GAAgB,IAAhB;AACAjH,IAAAA,MAAM,CAACgH,GAAP,sBAAyBA,GAAzB;AACAhH,IAAAA,MAAM,CAACkH,MAAP,GAAgB,KAAhB;AACAlH,IAAAA,MAAM,CAACqD,IAAP,GAAc,QAAd;AACArD,IAAAA,MAAM,CAACmH,QAAP,GAAkB,IAAlB;AACAnH,IAAAA,MAAM,CAACoH,gBAAP,CACE,MADF,EAEE,MAAM;AACJpH,MAAAA,MAAM,CAACkH,MAAP,GAAgB,IAAhB;AACD,KAJH,EAKE,KALF;AAOA/F,IAAAA,QAAQ,CAACkG,IAAT,CAAcC,WAAd,CAA0BtH,MAA1B;AACA,SAAKd,OAAL,CAAa0B,IAAb,CAAkBZ,MAAlB;AACD;;AAEDuH,EAAAA,MAAM,GAAG;AACP,WAAO,IAAP;AACD;;AAtemD;;gBAAjCvK,U,yBACU,I;;gBADVA,U,0BAGW,C;;gBAHXA,U,oBAKK,I;;gBALLA,U,8BAOe,C;;AAkepCA,UAAU,CAACwK,SAAX,GAAuB;AACrBlI,EAAAA,iBAAiB,EAAE/C,SAAS,CAACkL,IADR;AAErB1F,EAAAA,aAAa,EAAExF,SAAS,CAACmL,IAFJ;AAGrB7E,EAAAA,mBAAmB,EAAEtG,SAAS,CAACkL,IAHV;AAIrBxE,EAAAA,kBAAkB,EAAE1G,SAAS,CAACkL,IAJT;AAKrBxC,EAAAA,wBAAwB,EAAE1I,SAAS,CAACkL,IALf;AAMrBhC,EAAAA,SAAS,EAAElJ,SAAS,CAACoL,UAAV,CAAqB9K,SAArB,EAAgC+K;AANtB,CAAvB;AASA5K,UAAU,CAAC6K,YAAX,GAA0B;AACxBvI,EAAAA,iBAAiB,EAAE,MACjBwI,OAAO,CAACC,MAAR,CAAe,IAAIC,KAAJ,CAAU,8BAAV,CAAf,CAFsB;AAGxBjG,EAAAA,aAAa,EAAE,KAHS;AAIxBc,EAAAA,mBAAmB,EAAE,MAAM,CAAE,CAJL;AAKxBI,EAAAA,kBAAkB,EAAE,MAAM,CAAE,CALJ;AAMxBgC,EAAAA,wBAAwB,EAAE,MAAM,CAAE;AANV,CAA1B","sourcesContent":["import { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/ponyfill';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Formatter from '../Formatter';\n\nconst log = Log.module('TableSaver');\n\nexport default class TableSaver extends PureComponent {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static csvEscapeString(str) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.sw = null;\n this.port = null;\n this.fileWriter = null;\n\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n\n this.fileName = null;\n\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream || ponyfillWritableStream;\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n this.streamTimeout = null;\n\n this.snapshotHandlerTimeout = null;\n\n this.downloadStartTime = null;\n\n this.iframes = [];\n\n this.useBlobFallback = !!window.safari;\n }\n\n componentDidMount() {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount() {\n if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n }\n\n createWriterStream(port) {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [];\n let encode = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {};\n if (useBlob) {\n streamConfig.write = chunk => {\n chunks.push(encode(chunk.rows));\n };\n streamConfig.close = () => {\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = chunk => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new this.WritableStream(streamConfig);\n }\n\n startDownload(fileName, frozenTable, tableSubscription, gridRanges) {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = frozenTable.columns;\n this.tableSubscription = tableSubscription;\n this.gridRanges = gridRanges;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable();\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n\n cancelDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => {});\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver() {\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n this.streamTimeout = null;\n this.snapshotHandlerTimeout = null;\n }\n\n handleDownloadTimeout() {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader() {\n let headerString = '';\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n this.fileWriter.write({ header: headerString }).then(() => {});\n }\n\n startWriteTableBody() {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map(range =>\n Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows)\n );\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total, snapshotCount) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n\n writeCsvTable() {\n this.writeTableHeader();\n this.startWriteTableBody();\n }\n\n writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(\n this.snapshotsBuffer.get(this.currentSnapshotIndex),\n snapshotStartRow,\n snapshotEndRow\n ),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (this.currentSnapshotIndex >= this.snapshotsTotal) {\n this.finishDownload();\n return;\n }\n }\n\n if (this.snapshotCounter < this.snapshotsTotal) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n\n convertSnapshotIntoCsv(snapshot) {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n this.columns[j].type,\n this.columns[j].name\n );\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n) {\n if (n <= 0) {\n return;\n }\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n while (i < n) {\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({ data }) {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download) {\n this.makeIframe(`${download}`);\n this.writeCsvTable();\n }\n if (readableStreamPulling) {\n if (!this.useBlobFallback) {\n clearTimeout(this.streamTimeout);\n\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n ) {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src) {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = `download/${src}`;\n iframe.loaded = false;\n iframe.name = 'iframe';\n iframe.isIframe = true;\n iframe.addEventListener(\n 'load',\n () => {\n iframe.loaded = true;\n },\n false\n );\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render() {\n return null;\n }\n}\n\nTableSaver.propTypes = {\n getDownloadWorker: PropTypes.func,\n isDownloading: PropTypes.bool,\n onDownloadCompleted: PropTypes.func,\n onDownloadCanceled: PropTypes.func,\n onDownloadProgressUpdate: PropTypes.func,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nTableSaver.defaultProps = {\n getDownloadWorker: () =>\n Promise.reject(new Error('Download worker not provided')),\n isDownloading: false,\n onDownloadCompleted: () => {},\n onDownloadCanceled: () => {},\n onDownloadProgressUpdate: () => {},\n};\n"],"file":"TableSaver.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/TableSaver.jsx"],"names":["PureComponent","PropTypes","WritableStream","ponyfillWritableStream","dh","Log","PromiseUtils","Formatter","log","module","TableSaver","csvEscapeString","str","replace","constructor","props","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","sw","port","fileWriter","table","tableSubscription","columns","fileName","chunkRows","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","window","streamTimeout","snapshotHandlerTimeout","downloadStartTime","iframes","useBlobFallback","safari","componentDidMount","getDownloadWorker","then","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","clearTimeout","createWriterStream","useBlob","chunks","encode","TextEncoder","prototype","streamConfig","write","chunk","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","startDownload","frozenTable","isDownloading","Date","now","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","cancelable","onDownloadCanceled","writeTableHeader","headerString","i","name","header","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","ceil","endRow","startRow","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","convertSnapshotIntoCsv","get","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","added","iterator","formatter","hasNext","next","value","rowIdx","j","cellData","getFormattedString","getData","n","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","data","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","loaded","isIframe","addEventListener","body","appendChild","render","propTypes","func","bool","instanceOf","isRequired","defaultProps","Promise","reject","Error"],"mappings":"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","sourcesContent":["import { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/dist/ponyfill.js';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Formatter from '../Formatter';\n\nconst log = Log.module('TableSaver');\n\nexport default class TableSaver extends PureComponent {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static csvEscapeString(str) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.sw = null;\n this.port = null;\n this.fileWriter = null;\n\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n\n this.fileName = null;\n\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream || ponyfillWritableStream;\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n this.streamTimeout = null;\n\n this.snapshotHandlerTimeout = null;\n\n this.downloadStartTime = null;\n\n this.iframes = [];\n\n this.useBlobFallback = !!window.safari;\n }\n\n componentDidMount() {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount() {\n if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n }\n\n createWriterStream(port) {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [];\n let encode = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {};\n if (useBlob) {\n streamConfig.write = chunk => {\n chunks.push(encode(chunk.rows));\n };\n streamConfig.close = () => {\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = chunk => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new this.WritableStream(streamConfig);\n }\n\n startDownload(fileName, frozenTable, tableSubscription, gridRanges) {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = frozenTable.columns;\n this.tableSubscription = tableSubscription;\n this.gridRanges = gridRanges;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable();\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n\n cancelDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => {});\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver() {\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n this.streamTimeout = null;\n this.snapshotHandlerTimeout = null;\n }\n\n handleDownloadTimeout() {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader() {\n let headerString = '';\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n this.fileWriter.write({ header: headerString }).then(() => {});\n }\n\n startWriteTableBody() {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map(range =>\n Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows)\n );\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total, snapshotCount) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n\n writeCsvTable() {\n this.writeTableHeader();\n this.startWriteTableBody();\n }\n\n writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(\n this.snapshotsBuffer.get(this.currentSnapshotIndex),\n snapshotStartRow,\n snapshotEndRow\n ),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (this.currentSnapshotIndex >= this.snapshotsTotal) {\n this.finishDownload();\n return;\n }\n }\n\n if (this.snapshotCounter < this.snapshotsTotal) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n\n convertSnapshotIntoCsv(snapshot) {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n this.columns[j].type,\n this.columns[j].name\n );\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n) {\n if (n <= 0) {\n return;\n }\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n while (i < n) {\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({ data }) {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download) {\n this.makeIframe(`${download}`);\n this.writeCsvTable();\n }\n if (readableStreamPulling) {\n if (!this.useBlobFallback) {\n clearTimeout(this.streamTimeout);\n\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n ) {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src) {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = `download/${src}`;\n iframe.loaded = false;\n iframe.name = 'iframe';\n iframe.isIframe = true;\n iframe.addEventListener(\n 'load',\n () => {\n iframe.loaded = true;\n },\n false\n );\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render() {\n return null;\n }\n}\n\nTableSaver.propTypes = {\n getDownloadWorker: PropTypes.func,\n isDownloading: PropTypes.bool,\n onDownloadCompleted: PropTypes.func,\n onDownloadCanceled: PropTypes.func,\n onDownloadProgressUpdate: PropTypes.func,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nTableSaver.defaultProps = {\n getDownloadWorker: () =>\n Promise.reject(new Error('Download worker not provided')),\n isDownloading: false,\n onDownloadCompleted: () => {},\n onDownloadCanceled: () => {},\n onDownloadProgressUpdate: () => {},\n};\n"],"file":"TableSaver.js"}
|
|
@@ -444,22 +444,22 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
444
444
|
case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:
|
|
445
445
|
if (GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !== firstMovableIndex // check if the first visible column has reached top
|
|
446
446
|
) {
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
447
|
+
sortedSelectedColumns.forEach(columnModelIndex => {
|
|
448
|
+
var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
|
|
449
|
+
newMoves = GridUtils.moveItem(visibleIndex, visibleIndex - 1, newMoves);
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
452
|
|
|
453
453
|
break;
|
|
454
454
|
|
|
455
455
|
case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:
|
|
456
456
|
if (GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !== lastMovableIndex // check if the last visible column has reached bottom
|
|
457
457
|
) {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
458
|
+
sortedSelectedColumns.forEach(columnModelIndex => {
|
|
459
|
+
var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
|
|
460
|
+
newMoves = GridUtils.moveItem(visibleIndex, visibleIndex + 1, newMoves);
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
463
|
|
|
464
464
|
break;
|
|
465
465
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/VisibilityOrderingBuilder.jsx"],"names":["React","Component","classNames","PropTypes","GridUtils","TextUtils","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","SearchInput","Tooltip","Log","IrisGridModel","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","model","columns","i","length","isColumnMovable","columnName","modelIndex","visibleIndex","isHidden","isSelected","isDragging","isDragged","columnsDragged","provided","innerRef","draggableProps","event","handleVisibilityDraggingStart","VISIBILITY_OPTIONS","SHOW","HIDE","handleMouseEnter","handleVisibilityDraggingEnd","handleItemClick","key","handleVisibilityKeyDown","stopPropagation","preventDefault","dragHandleProps","handleSearchInputChange","bind","debouncedSearchColumns","searchColumns","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","index","toLowerCase","includes","push","Math","min","getVisibleIndex","addColumnToSelected","columnItemToFocus","querySelectorAll","scrollIntoView","block","visibilityOption","isModifierKeyDown","isShiftKeyDown","shiftKey","focus","start","document","documentElement","classList","add","draggableId","source","startIndex","parseInt","result","remove","destination","destinationIndex","selectedColumnsSortByVisibleIndex","sort","columnA","columnB","newMoves","concat","draggingVisibleIndex","upper","lower","moveItem","columnVisibleIndex","bottomDestinationIndex","reverse","debug","targetModelIndex","userColumnWidths","draggingStartVisibleIndex","targetVisibleIndex","columnsToChangeVisibility","checkDownward","visibleIndexToCheck","modelIndexToCheck","getModelIndex","checkColumnHidden","handleMoveColumns","option","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","sortedSelectedColumns","MOVE_OPTIONS","TOP","UP","scrollListAfterMove","columnModelIndex","scrollTop","BOTTOM","scrollHeight","DOWN","handleSortColumns","movableColumns","immovableColumns","movableColumnsSorted","a","b","isAscending","SORTING_OPTIONS","ASC","aName","toUpperCase","bName","modelIndexAlphaSorted","insertIndex","modelIndexClicked","removeSelectionOnClick","currentTarget","columnsToBeAdded","removeColumnFromSelected","lastSelectedColumn","lastSelectedColumnVisibleIndex","visibleIndexToBeSelected","columnsInBetween","addToExisting","newSelectedColumns","newLastSelectedColumns","splice","findIndex","selected","pop","makeVisibilityOrderingList","elements","wasMovable","isMovable","get","renderVisibilityOrderingItem","renderImmovableItem","render","noSelection","columnsToToggle","c","filter","toggleToShow","checkAllColumnsHidden","selectedToggleText","columnItems","DSC","snapshot","draggingFromThisWith","droppableProps","placeholder","ALL","SELECTION","propTypes","instanceOf","isRequired","arrayOf","shape","from","number","to","Map","func","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { GridUtils } from '@deephaven/grid';\nimport { TextUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsGripper,\n} from '@deephaven/icons';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { SearchInput, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\nclass VisibilityOrderingBuilder extends Component {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' };\n\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' };\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n };\n\n static COLUMN_CHANGE_OPTIONS = { ALL: 'ALL', SELECTION: 'SELECTION' };\n\n constructor(props) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.debouncedSearchColumns = debounce(\n this.searchColumns.bind(this),\n DEBOUNCE_SEARCH_COLUMN\n );\n this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);\n this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);\n\n this.state = {\n selectedColumns: [], // model index of selected column(s)\n lastSelectedColumns: [],\n isDraggingVisibility: false,\n visibilityDraggingOption: null,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentWillUnmount() {\n this.debouncedSearchColumns.cancel();\n }\n\n resetVisibilityOrdering() {\n const {\n model,\n onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => model.getColumnIndexByName(column.name)),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection() {\n const { isDraggingOrder } = this.state;\n // don't reset selection if user is dragging column(s)\n if (isDraggingOrder) {\n return;\n }\n this.setState({ selectedColumns: [], lastSelectedColumns: [] });\n }\n\n handleSearchInputChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter) {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [];\n let visibleIndexToFocus = columns.length;\n columns.forEach((column, index) => {\n const columnName = column.name.toLowerCase();\n if (\n model.isColumnMovable(index) &&\n columnName.includes(searchFilter.toLowerCase())\n ) {\n columnsMatch.push(index);\n visibleIndexToFocus = Math.min(\n visibleIndexToFocus,\n GridUtils.getVisibleIndex(index, movedColumns)\n );\n }\n });\n this.addColumnToSelected(columnsMatch, false);\n if (columnsMatch.length > 0) {\n const columnItemToFocus = this.list.querySelectorAll('.column-item')[\n visibleIndexToFocus\n ];\n columnItemToFocus.scrollIntoView({ block: 'center' });\n }\n }\n\n handleVisibilityKeyDown(modelIndex, visibilityOption) {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(modelIndex, visibilityOption, event) {\n const { onColumnVisibilityChanged, movedColumns } = this.props;\n\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (isModifierKeyDown || isShiftKeyDown) return;\n\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n this.setState({\n isDraggingVisibility: true,\n visibilityDraggingOption: visibilityOption,\n visibilityDraggingStartColumn: visibleIndex,\n });\n\n this.addColumnToSelected([modelIndex]);\n }\n\n handleVisibilityDraggingEnd(event = null) {\n if (event) event.target.focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: null,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start) {\n document.documentElement.classList.add('drag-pointer-events-none');\n\n const { selectedColumns } = this.state;\n const {\n draggableId,\n source: { index: startIndex },\n } = start;\n const orderDraggingColumn = parseInt(draggableId, 10);\n\n // we want to clear focus from any eye toggles\n // however to maintain react-beautiful-dnd keyboard functionality the only valid\n // focus target is the drag target itself, so we set it there instead of blurring\n this.list.querySelectorAll('.column-item')[startIndex].focus();\n\n if (!selectedColumns.includes(orderDraggingColumn)) {\n this.setState({\n isDraggingOrder: true,\n orderDraggingColumn,\n selectedColumns: [orderDraggingColumn],\n });\n return;\n }\n this.setState({ isDraggingOrder: true, orderDraggingColumn });\n }\n\n handleOrderDraggingEnd(result) {\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n const { movedColumns, onMovedColumnsChanged } = this.props;\n const { selectedColumns, orderDraggingColumn } = this.state;\n\n // reset dragging state\n this.setState({ isDraggingOrder: false, orderDraggingColumn: null });\n\n // if dropped outside the list, re-focus on the dragged item if necessary\n if (!result.destination) {\n return;\n }\n\n const { index: destinationIndex } = result.destination;\n\n const selectedColumnsSortByVisibleIndex = [...selectedColumns].sort(\n (columnA, columnB) =>\n GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n );\n\n let newMoves = [].concat(movedColumns);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper = [];\n const lower = [];\n\n // move the dragged column to destination first,\n newMoves = GridUtils.moveItem(\n draggingVisibleIndex,\n destinationIndex,\n newMoves\n );\n\n // split selected columns into two parts on drop destination index: top & bottom\n selectedColumnsSortByVisibleIndex.forEach(column => {\n const columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n if (column === orderDraggingColumn) {\n return;\n }\n if (columnVisibleIndex < destinationIndex) {\n upper.push(column);\n } else {\n lower.push(column);\n }\n });\n\n // for the top part, move column(s) to the destination index\n upper.forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);\n });\n\n // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside\n // otherwise, move column(s) under the dropping destination index\n const bottomDestinationIndex =\n upper.length > 0 || draggingVisibleIndex > destinationIndex\n ? destinationIndex + 1\n : destinationIndex;\n\n lower.reverse().forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(\n visibleIndex,\n bottomDestinationIndex,\n newMoves\n );\n });\n\n onMovedColumnsChanged(newMoves);\n log.debug('move column order by drag & drop', newMoves);\n }\n\n handleMouseEnter(targetModelIndex, event) {\n const {\n onColumnVisibilityChanged,\n movedColumns,\n userColumnWidths,\n } = this.props;\n const {\n isDraggingVisibility,\n visibilityDraggingOption,\n visibilityDraggingStartColumn: draggingStartVisibleIndex,\n } = this.state;\n const targetVisibleIndex = GridUtils.getVisibleIndex(\n targetModelIndex,\n movedColumns\n );\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {\n return;\n }\n\n event.target.focus();\n\n // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast\n // try to check columns between dragging start index to current index to compensate missing event,\n const columnsToChangeVisibility = [targetModelIndex];\n const checkDownward = targetVisibleIndex > draggingStartVisibleIndex;\n\n for (\n let visibleIndexToCheck = draggingStartVisibleIndex;\n checkDownward\n ? visibleIndexToCheck < targetVisibleIndex\n : visibleIndexToCheck > targetVisibleIndex;\n checkDownward ? (visibleIndexToCheck += 1) : (visibleIndexToCheck -= 1)\n ) {\n const modelIndexToCheck = GridUtils.getModelIndex(\n visibleIndexToCheck,\n movedColumns\n );\n const isHidden = GridUtils.checkColumnHidden(\n modelIndexToCheck,\n userColumnWidths\n );\n if (\n isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n } else if (\n !isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n }\n }\n\n this.addColumnToSelected(columnsToChangeVisibility, true);\n\n onColumnVisibilityChanged(\n columnsToChangeVisibility,\n visibilityDraggingOption\n );\n }\n\n handleMoveColumns(option) {\n const { movedColumns, onMovedColumnsChanged, model } = this.props;\n const { columns } = model;\n const { selectedColumns } = this.state;\n if (selectedColumns.length === 0) {\n return;\n }\n\n const firstMovableIndex = this.getFirstMovableIndex(model, columns);\n const lastMovableIndex = this.getLastMovableIndex(model, columns);\n if (firstMovableIndex == null || lastMovableIndex == null) {\n return;\n }\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n const sortedSelectedColumns = [\n ...selectedColumns,\n ].sort((columnA, columnB) =>\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP ||\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n ? GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n : GridUtils.getVisibleIndex(columnB, movedColumns) -\n GridUtils.getVisibleIndex(columnA, movedColumns)\n );\n\n let newMoves = [];\n let scrollListAfterMove = () => {};\n\n switch (option) {\n case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n firstMovableIndex + index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n this.list.scrollTop = 0;\n };\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n lastMovableIndex - index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n this.list.scrollTop = this.list.scrollHeight;\n };\n\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n firstMovableIndex // check if the first visible column has reached top\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex - 1,\n newMoves\n );\n });\n }\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n lastMovableIndex // check if the last visible column has reached bottom\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex + 1,\n newMoves\n );\n });\n }\n break;\n default:\n break;\n }\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n handleSortColumns(option) {\n const { model, onMovedColumnsChanged } = this.props;\n const { columns } = model;\n\n // We can't move the immovable columns when sorting, so separate them out first\n const movableColumns = [];\n const immovableColumns = [];\n for (let modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {\n if (model.isColumnMovable(modelIndex)) {\n movableColumns.push(modelIndex);\n } else {\n immovableColumns.push(modelIndex);\n }\n }\n\n // Sort all the movable columns\n const movableColumnsSorted = movableColumns.sort((a, b) => {\n const isAscending =\n option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;\n const aName = columns[a].name.toUpperCase();\n const bName = columns[b].name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n // Place all the immovable columns where they need to be\n const modelIndexAlphaSorted = [];\n for (let i = 0; i < immovableColumns.length; i += 1) {\n const modelIndex = immovableColumns[i];\n modelIndexAlphaSorted[modelIndex] = modelIndex;\n }\n\n // Then the rest of the sorted columns can be put in the empty spaces\n let insertIndex = 0;\n for (let i = 0; i < movableColumnsSorted.length; i += 1) {\n while (modelIndexAlphaSorted[insertIndex] != null) {\n insertIndex += 1;\n }\n\n modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[i];\n }\n\n let newMoves = [];\n modelIndexAlphaSorted.forEach((modelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);\n });\n onMovedColumnsChanged(newMoves);\n }\n\n handleItemClick(modelIndexClicked, event, removeSelectionOnClick = true) {\n event.stopPropagation();\n event.currentTarget.focus();\n\n const { selectedColumns, lastSelectedColumns } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.includes(modelIndexClicked);\n const columnsToBeAdded = [modelIndexClicked];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isShiftKeyDown) {\n const { movedColumns } = this.props;\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(\n lastSelectedColumn,\n movedColumns\n );\n const visibleIndexToBeSelected = GridUtils.getVisibleIndex(\n modelIndexClicked,\n movedColumns\n );\n const checkDownward =\n visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;\n const columnsInBetween = [];\n for (\n let i = lastSelectedColumnVisibleIndex;\n checkDownward\n ? i < visibleIndexToBeSelected\n : i > visibleIndexToBeSelected;\n checkDownward ? (i += 1) : (i -= 1)\n ) {\n columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));\n }\n columnsInBetween.forEach(column => {\n if (!selectedColumns.includes(column)) {\n columnsToBeAdded.push(column);\n }\n });\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n }\n\n addColumnToSelected(columnsToBeAdded, addToExisting = false) {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = addToExisting\n ? selectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n const newLastSelectedColumns = addToExisting\n ? lastSelectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n removeColumnFromSelected(modelIndex) {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = [...selectedColumns];\n\n newSelectedColumns.splice(\n newSelectedColumns.findIndex(selected => selected === modelIndex),\n 1\n );\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const newLastSelectedColumns = [...lastSelectedColumns];\n if (lastSelectedColumn === modelIndex) {\n newLastSelectedColumns.pop();\n }\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n makeVisibilityOrderingList() {\n const { model, userColumnWidths, movedColumns } = this.props;\n const { columns } = model;\n const {\n selectedColumns,\n isDraggingOrder,\n orderDraggingColumn,\n } = this.state;\n\n const elements = [];\n let wasMovable = false;\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n const isMovable = model.isColumnMovable(modelIndex);\n if (visibleIndex > 0 && isMovable !== wasMovable) {\n elements.push(<hr />);\n }\n if (isMovable) {\n const isHidden = userColumnWidths.get(modelIndex) === 0;\n const isSelected = selectedColumns.includes(modelIndex);\n const isDragged = orderDraggingColumn === modelIndex;\n const columnsDragged =\n isDraggingOrder && isDragged && selectedColumns.length > 1\n ? selectedColumns.length\n : null;\n elements.push(\n this.renderVisibilityOrderingItem(\n column.name,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDraggingOrder,\n isDragged,\n columnsDragged\n )\n );\n } else {\n elements.push(this.renderImmovableItem(column.name));\n }\n\n wasMovable = isMovable;\n }\n\n return elements;\n }\n\n getFirstMovableIndex = memoize((model, columns) => {\n for (let i = 0; i < columns.length; i += 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n getLastMovableIndex = memoize((model, columns) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n renderImmovableItem = memoize(columnName => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n ));\n\n renderVisibilityOrderingItem = memoize(\n (\n columnName,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDragging,\n isDragged,\n columnsDragged\n ) => (\n <Draggable\n draggableId={`${modelIndex}`} // draggableId requires string input\n index={visibleIndex}\n key={columnName}\n disableInteractiveElementBlocking\n >\n {provided => (\n <div\n className=\"visibility-ordering-list-item\"\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <button\n type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\n onMouseDown={event => {\n this.handleVisibilityDraggingStart(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE,\n event\n );\n }}\n onMouseEnter={event => {\n this.handleMouseEnter(modelIndex, event);\n }}\n onMouseUp={event => {\n this.handleVisibilityDraggingEnd(event);\n }}\n onClick={event => {\n this.handleItemClick(modelIndex, event, false);\n }}\n onKeyDown={event => {\n // trigger on keyboard enter or space keys\n if (event.key === 'Enter' || event.key === ' ') {\n this.handleVisibilityKeyDown(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n >\n <FontAwesomeIcon icon={isHidden ? dhEyeSlash : dhEye} />\n </button>\n <div\n role=\"menuitem\"\n tabIndex=\"0\"\n className={classNames(\n 'ordering column-item',\n {\n isSelected,\n },\n { isDragging },\n { isDragged },\n { 'two-dragged': columnsDragged === 2 },\n { 'multiple-dragged': columnsDragged > 2 }\n )}\n onClick={event => {\n this.handleItemClick(modelIndex, event);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <span className=\"column-name\">{columnName}</span>\n <div>\n {columnsDragged && (\n <span className=\"number-badge\">{columnsDragged}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n </div>\n )}\n </Draggable>\n )\n );\n\n render() {\n const { model, userColumnWidths, onColumnVisibilityChanged } = this.props;\n const { selectedColumns, searchFilter } = this.state;\n const { columns } = model;\n const noSelection = selectedColumns.length === 0;\n const columnsToToggle = noSelection\n ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i))\n : [...selectedColumns];\n const toggleToShow = GridUtils.checkAllColumnsHidden(\n columnsToToggle,\n userColumnWidths\n );\n const selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';\n\n const columnItems = this.makeVisibilityOrderingList();\n\n return (\n <div\n role=\"menu\"\n className=\"visibility-ordering-builder\"\n tabIndex=\"0\"\n onMouseUp={() => {\n this.handleVisibilityDraggingEnd();\n }}\n onMouseLeave={() => {\n this.handleVisibilityDraggingEnd();\n }}\n >\n <div className=\"top-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\n </button>\n </div>\n </div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={searchFilter ? selectedColumns.length : null}\n onChange={this.handleSearchInputChange}\n />\n </div>\n <DragDropContext\n onDragStart={this.handleOrderDraggingStart}\n onDragEnd={this.handleOrderDraggingEnd}\n >\n <Droppable droppableId=\"droppable-visibility-order-list\">\n {(provided, snapshot) => (\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n role=\"menu\"\n className={classNames('visibility-ordering-list', {\n isDragging: snapshot.draggingFromThisWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {columnItems}\n {provided.placeholder}\n </div>\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n );\n }\n}\n\nVisibilityOrderingBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number,\n to: PropTypes.number,\n })\n ),\n userColumnWidths: PropTypes.instanceOf(Map).isRequired,\n onColumnVisibilityChanged: PropTypes.func,\n onMovedColumnsChanged: PropTypes.func,\n};\n\nVisibilityOrderingBuilder.defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: () => {},\n onMovedColumnsChanged: () => {},\n};\n\nexport default VisibilityOrderingBuilder;\n"],"file":"VisibilityOrderingBuilder.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/VisibilityOrderingBuilder.jsx"],"names":["React","Component","classNames","PropTypes","GridUtils","TextUtils","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","SearchInput","Tooltip","Log","IrisGridModel","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","model","columns","i","length","isColumnMovable","columnName","modelIndex","visibleIndex","isHidden","isSelected","isDragging","isDragged","columnsDragged","provided","innerRef","draggableProps","event","handleVisibilityDraggingStart","VISIBILITY_OPTIONS","SHOW","HIDE","handleMouseEnter","handleVisibilityDraggingEnd","handleItemClick","key","handleVisibilityKeyDown","stopPropagation","preventDefault","dragHandleProps","handleSearchInputChange","bind","debouncedSearchColumns","searchColumns","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","index","toLowerCase","includes","push","Math","min","getVisibleIndex","addColumnToSelected","columnItemToFocus","querySelectorAll","scrollIntoView","block","visibilityOption","isModifierKeyDown","isShiftKeyDown","shiftKey","focus","start","document","documentElement","classList","add","draggableId","source","startIndex","parseInt","result","remove","destination","destinationIndex","selectedColumnsSortByVisibleIndex","sort","columnA","columnB","newMoves","concat","draggingVisibleIndex","upper","lower","moveItem","columnVisibleIndex","bottomDestinationIndex","reverse","debug","targetModelIndex","userColumnWidths","draggingStartVisibleIndex","targetVisibleIndex","columnsToChangeVisibility","checkDownward","visibleIndexToCheck","modelIndexToCheck","getModelIndex","checkColumnHidden","handleMoveColumns","option","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","sortedSelectedColumns","MOVE_OPTIONS","TOP","UP","scrollListAfterMove","columnModelIndex","scrollTop","BOTTOM","scrollHeight","DOWN","handleSortColumns","movableColumns","immovableColumns","movableColumnsSorted","a","b","isAscending","SORTING_OPTIONS","ASC","aName","toUpperCase","bName","modelIndexAlphaSorted","insertIndex","modelIndexClicked","removeSelectionOnClick","currentTarget","columnsToBeAdded","removeColumnFromSelected","lastSelectedColumn","lastSelectedColumnVisibleIndex","visibleIndexToBeSelected","columnsInBetween","addToExisting","newSelectedColumns","newLastSelectedColumns","splice","findIndex","selected","pop","makeVisibilityOrderingList","elements","wasMovable","isMovable","get","renderVisibilityOrderingItem","renderImmovableItem","render","noSelection","columnsToToggle","c","filter","toggleToShow","checkAllColumnsHidden","selectedToggleText","columnItems","DSC","snapshot","draggingFromThisWith","droppableProps","placeholder","ALL","SELECTION","propTypes","instanceOf","isRequired","arrayOf","shape","from","number","to","Map","func","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { GridUtils } from '@deephaven/grid';\nimport { TextUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsGripper,\n} from '@deephaven/icons';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { SearchInput, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\nclass VisibilityOrderingBuilder extends Component {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' };\n\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' };\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n };\n\n static COLUMN_CHANGE_OPTIONS = { ALL: 'ALL', SELECTION: 'SELECTION' };\n\n constructor(props) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.debouncedSearchColumns = debounce(\n this.searchColumns.bind(this),\n DEBOUNCE_SEARCH_COLUMN\n );\n this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);\n this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);\n\n this.state = {\n selectedColumns: [], // model index of selected column(s)\n lastSelectedColumns: [],\n isDraggingVisibility: false,\n visibilityDraggingOption: null,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentWillUnmount() {\n this.debouncedSearchColumns.cancel();\n }\n\n resetVisibilityOrdering() {\n const {\n model,\n onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => model.getColumnIndexByName(column.name)),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection() {\n const { isDraggingOrder } = this.state;\n // don't reset selection if user is dragging column(s)\n if (isDraggingOrder) {\n return;\n }\n this.setState({ selectedColumns: [], lastSelectedColumns: [] });\n }\n\n handleSearchInputChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter) {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [];\n let visibleIndexToFocus = columns.length;\n columns.forEach((column, index) => {\n const columnName = column.name.toLowerCase();\n if (\n model.isColumnMovable(index) &&\n columnName.includes(searchFilter.toLowerCase())\n ) {\n columnsMatch.push(index);\n visibleIndexToFocus = Math.min(\n visibleIndexToFocus,\n GridUtils.getVisibleIndex(index, movedColumns)\n );\n }\n });\n this.addColumnToSelected(columnsMatch, false);\n if (columnsMatch.length > 0) {\n const columnItemToFocus = this.list.querySelectorAll('.column-item')[\n visibleIndexToFocus\n ];\n columnItemToFocus.scrollIntoView({ block: 'center' });\n }\n }\n\n handleVisibilityKeyDown(modelIndex, visibilityOption) {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(modelIndex, visibilityOption, event) {\n const { onColumnVisibilityChanged, movedColumns } = this.props;\n\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (isModifierKeyDown || isShiftKeyDown) return;\n\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n this.setState({\n isDraggingVisibility: true,\n visibilityDraggingOption: visibilityOption,\n visibilityDraggingStartColumn: visibleIndex,\n });\n\n this.addColumnToSelected([modelIndex]);\n }\n\n handleVisibilityDraggingEnd(event = null) {\n if (event) event.target.focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: null,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start) {\n document.documentElement.classList.add('drag-pointer-events-none');\n\n const { selectedColumns } = this.state;\n const {\n draggableId,\n source: { index: startIndex },\n } = start;\n const orderDraggingColumn = parseInt(draggableId, 10);\n\n // we want to clear focus from any eye toggles\n // however to maintain react-beautiful-dnd keyboard functionality the only valid\n // focus target is the drag target itself, so we set it there instead of blurring\n this.list.querySelectorAll('.column-item')[startIndex].focus();\n\n if (!selectedColumns.includes(orderDraggingColumn)) {\n this.setState({\n isDraggingOrder: true,\n orderDraggingColumn,\n selectedColumns: [orderDraggingColumn],\n });\n return;\n }\n this.setState({ isDraggingOrder: true, orderDraggingColumn });\n }\n\n handleOrderDraggingEnd(result) {\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n const { movedColumns, onMovedColumnsChanged } = this.props;\n const { selectedColumns, orderDraggingColumn } = this.state;\n\n // reset dragging state\n this.setState({ isDraggingOrder: false, orderDraggingColumn: null });\n\n // if dropped outside the list, re-focus on the dragged item if necessary\n if (!result.destination) {\n return;\n }\n\n const { index: destinationIndex } = result.destination;\n\n const selectedColumnsSortByVisibleIndex = [...selectedColumns].sort(\n (columnA, columnB) =>\n GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n );\n\n let newMoves = [].concat(movedColumns);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper = [];\n const lower = [];\n\n // move the dragged column to destination first,\n newMoves = GridUtils.moveItem(\n draggingVisibleIndex,\n destinationIndex,\n newMoves\n );\n\n // split selected columns into two parts on drop destination index: top & bottom\n selectedColumnsSortByVisibleIndex.forEach(column => {\n const columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n if (column === orderDraggingColumn) {\n return;\n }\n if (columnVisibleIndex < destinationIndex) {\n upper.push(column);\n } else {\n lower.push(column);\n }\n });\n\n // for the top part, move column(s) to the destination index\n upper.forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);\n });\n\n // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside\n // otherwise, move column(s) under the dropping destination index\n const bottomDestinationIndex =\n upper.length > 0 || draggingVisibleIndex > destinationIndex\n ? destinationIndex + 1\n : destinationIndex;\n\n lower.reverse().forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(\n visibleIndex,\n bottomDestinationIndex,\n newMoves\n );\n });\n\n onMovedColumnsChanged(newMoves);\n log.debug('move column order by drag & drop', newMoves);\n }\n\n handleMouseEnter(targetModelIndex, event) {\n const {\n onColumnVisibilityChanged,\n movedColumns,\n userColumnWidths,\n } = this.props;\n const {\n isDraggingVisibility,\n visibilityDraggingOption,\n visibilityDraggingStartColumn: draggingStartVisibleIndex,\n } = this.state;\n const targetVisibleIndex = GridUtils.getVisibleIndex(\n targetModelIndex,\n movedColumns\n );\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {\n return;\n }\n\n event.target.focus();\n\n // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast\n // try to check columns between dragging start index to current index to compensate missing event,\n const columnsToChangeVisibility = [targetModelIndex];\n const checkDownward = targetVisibleIndex > draggingStartVisibleIndex;\n\n for (\n let visibleIndexToCheck = draggingStartVisibleIndex;\n checkDownward\n ? visibleIndexToCheck < targetVisibleIndex\n : visibleIndexToCheck > targetVisibleIndex;\n checkDownward ? (visibleIndexToCheck += 1) : (visibleIndexToCheck -= 1)\n ) {\n const modelIndexToCheck = GridUtils.getModelIndex(\n visibleIndexToCheck,\n movedColumns\n );\n const isHidden = GridUtils.checkColumnHidden(\n modelIndexToCheck,\n userColumnWidths\n );\n if (\n isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n } else if (\n !isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n }\n }\n\n this.addColumnToSelected(columnsToChangeVisibility, true);\n\n onColumnVisibilityChanged(\n columnsToChangeVisibility,\n visibilityDraggingOption\n );\n }\n\n handleMoveColumns(option) {\n const { movedColumns, onMovedColumnsChanged, model } = this.props;\n const { columns } = model;\n const { selectedColumns } = this.state;\n if (selectedColumns.length === 0) {\n return;\n }\n\n const firstMovableIndex = this.getFirstMovableIndex(model, columns);\n const lastMovableIndex = this.getLastMovableIndex(model, columns);\n if (firstMovableIndex == null || lastMovableIndex == null) {\n return;\n }\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n const sortedSelectedColumns = [\n ...selectedColumns,\n ].sort((columnA, columnB) =>\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP ||\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n ? GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n : GridUtils.getVisibleIndex(columnB, movedColumns) -\n GridUtils.getVisibleIndex(columnA, movedColumns)\n );\n\n let newMoves = [];\n let scrollListAfterMove = () => {};\n\n switch (option) {\n case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n firstMovableIndex + index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n this.list.scrollTop = 0;\n };\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n lastMovableIndex - index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n this.list.scrollTop = this.list.scrollHeight;\n };\n\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n firstMovableIndex // check if the first visible column has reached top\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex - 1,\n newMoves\n );\n });\n }\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n lastMovableIndex // check if the last visible column has reached bottom\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex + 1,\n newMoves\n );\n });\n }\n break;\n default:\n break;\n }\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n handleSortColumns(option) {\n const { model, onMovedColumnsChanged } = this.props;\n const { columns } = model;\n\n // We can't move the immovable columns when sorting, so separate them out first\n const movableColumns = [];\n const immovableColumns = [];\n for (let modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {\n if (model.isColumnMovable(modelIndex)) {\n movableColumns.push(modelIndex);\n } else {\n immovableColumns.push(modelIndex);\n }\n }\n\n // Sort all the movable columns\n const movableColumnsSorted = movableColumns.sort((a, b) => {\n const isAscending =\n option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;\n const aName = columns[a].name.toUpperCase();\n const bName = columns[b].name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n // Place all the immovable columns where they need to be\n const modelIndexAlphaSorted = [];\n for (let i = 0; i < immovableColumns.length; i += 1) {\n const modelIndex = immovableColumns[i];\n modelIndexAlphaSorted[modelIndex] = modelIndex;\n }\n\n // Then the rest of the sorted columns can be put in the empty spaces\n let insertIndex = 0;\n for (let i = 0; i < movableColumnsSorted.length; i += 1) {\n while (modelIndexAlphaSorted[insertIndex] != null) {\n insertIndex += 1;\n }\n\n modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[i];\n }\n\n let newMoves = [];\n modelIndexAlphaSorted.forEach((modelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);\n });\n onMovedColumnsChanged(newMoves);\n }\n\n handleItemClick(modelIndexClicked, event, removeSelectionOnClick = true) {\n event.stopPropagation();\n event.currentTarget.focus();\n\n const { selectedColumns, lastSelectedColumns } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.includes(modelIndexClicked);\n const columnsToBeAdded = [modelIndexClicked];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isShiftKeyDown) {\n const { movedColumns } = this.props;\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(\n lastSelectedColumn,\n movedColumns\n );\n const visibleIndexToBeSelected = GridUtils.getVisibleIndex(\n modelIndexClicked,\n movedColumns\n );\n const checkDownward =\n visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;\n const columnsInBetween = [];\n for (\n let i = lastSelectedColumnVisibleIndex;\n checkDownward\n ? i < visibleIndexToBeSelected\n : i > visibleIndexToBeSelected;\n checkDownward ? (i += 1) : (i -= 1)\n ) {\n columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));\n }\n columnsInBetween.forEach(column => {\n if (!selectedColumns.includes(column)) {\n columnsToBeAdded.push(column);\n }\n });\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n }\n\n addColumnToSelected(columnsToBeAdded, addToExisting = false) {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = addToExisting\n ? selectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n const newLastSelectedColumns = addToExisting\n ? lastSelectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n removeColumnFromSelected(modelIndex) {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = [...selectedColumns];\n\n newSelectedColumns.splice(\n newSelectedColumns.findIndex(selected => selected === modelIndex),\n 1\n );\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const newLastSelectedColumns = [...lastSelectedColumns];\n if (lastSelectedColumn === modelIndex) {\n newLastSelectedColumns.pop();\n }\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n makeVisibilityOrderingList() {\n const { model, userColumnWidths, movedColumns } = this.props;\n const { columns } = model;\n const {\n selectedColumns,\n isDraggingOrder,\n orderDraggingColumn,\n } = this.state;\n\n const elements = [];\n let wasMovable = false;\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n const isMovable = model.isColumnMovable(modelIndex);\n if (visibleIndex > 0 && isMovable !== wasMovable) {\n elements.push(<hr />);\n }\n if (isMovable) {\n const isHidden = userColumnWidths.get(modelIndex) === 0;\n const isSelected = selectedColumns.includes(modelIndex);\n const isDragged = orderDraggingColumn === modelIndex;\n const columnsDragged =\n isDraggingOrder && isDragged && selectedColumns.length > 1\n ? selectedColumns.length\n : null;\n elements.push(\n this.renderVisibilityOrderingItem(\n column.name,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDraggingOrder,\n isDragged,\n columnsDragged\n )\n );\n } else {\n elements.push(this.renderImmovableItem(column.name));\n }\n\n wasMovable = isMovable;\n }\n\n return elements;\n }\n\n getFirstMovableIndex = memoize((model, columns) => {\n for (let i = 0; i < columns.length; i += 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n getLastMovableIndex = memoize((model, columns) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n renderImmovableItem = memoize(columnName => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n ));\n\n renderVisibilityOrderingItem = memoize(\n (\n columnName,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDragging,\n isDragged,\n columnsDragged\n ) => (\n <Draggable\n draggableId={`${modelIndex}`} // draggableId requires string input\n index={visibleIndex}\n key={columnName}\n disableInteractiveElementBlocking\n >\n {provided => (\n <div\n className=\"visibility-ordering-list-item\"\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <button\n type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\n onMouseDown={event => {\n this.handleVisibilityDraggingStart(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE,\n event\n );\n }}\n onMouseEnter={event => {\n this.handleMouseEnter(modelIndex, event);\n }}\n onMouseUp={event => {\n this.handleVisibilityDraggingEnd(event);\n }}\n onClick={event => {\n this.handleItemClick(modelIndex, event, false);\n }}\n onKeyDown={event => {\n // trigger on keyboard enter or space keys\n if (event.key === 'Enter' || event.key === ' ') {\n this.handleVisibilityKeyDown(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n >\n <FontAwesomeIcon icon={isHidden ? dhEyeSlash : dhEye} />\n </button>\n <div\n role=\"menuitem\"\n tabIndex=\"0\"\n className={classNames(\n 'ordering column-item',\n {\n isSelected,\n },\n { isDragging },\n { isDragged },\n { 'two-dragged': columnsDragged === 2 },\n { 'multiple-dragged': columnsDragged > 2 }\n )}\n onClick={event => {\n this.handleItemClick(modelIndex, event);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <span className=\"column-name\">{columnName}</span>\n <div>\n {columnsDragged && (\n <span className=\"number-badge\">{columnsDragged}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n </div>\n )}\n </Draggable>\n )\n );\n\n render() {\n const { model, userColumnWidths, onColumnVisibilityChanged } = this.props;\n const { selectedColumns, searchFilter } = this.state;\n const { columns } = model;\n const noSelection = selectedColumns.length === 0;\n const columnsToToggle = noSelection\n ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i))\n : [...selectedColumns];\n const toggleToShow = GridUtils.checkAllColumnsHidden(\n columnsToToggle,\n userColumnWidths\n );\n const selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';\n\n const columnItems = this.makeVisibilityOrderingList();\n\n return (\n <div\n role=\"menu\"\n className=\"visibility-ordering-builder\"\n tabIndex=\"0\"\n onMouseUp={() => {\n this.handleVisibilityDraggingEnd();\n }}\n onMouseLeave={() => {\n this.handleVisibilityDraggingEnd();\n }}\n >\n <div className=\"top-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\n </button>\n </div>\n </div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={searchFilter ? selectedColumns.length : null}\n onChange={this.handleSearchInputChange}\n />\n </div>\n <DragDropContext\n onDragStart={this.handleOrderDraggingStart}\n onDragEnd={this.handleOrderDraggingEnd}\n >\n <Droppable droppableId=\"droppable-visibility-order-list\">\n {(provided, snapshot) => (\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n role=\"menu\"\n className={classNames('visibility-ordering-list', {\n isDragging: snapshot.draggingFromThisWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {columnItems}\n {provided.placeholder}\n </div>\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n );\n }\n}\n\nVisibilityOrderingBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number,\n to: PropTypes.number,\n })\n ),\n userColumnWidths: PropTypes.instanceOf(Map).isRequired,\n onColumnVisibilityChanged: PropTypes.func,\n onMovedColumnsChanged: PropTypes.func,\n};\n\nVisibilityOrderingBuilder.defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: () => {},\n onMovedColumnsChanged: () => {},\n};\n\nexport default VisibilityOrderingBuilder;\n"],"file":"VisibilityOrderingBuilder.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
2
2
|
|
|
3
3
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
4
4
|
|
|
@@ -22,7 +22,7 @@ var SortType;
|
|
|
22
22
|
|
|
23
23
|
var DEFAULT_ROW_HEIGHT = 30;
|
|
24
24
|
|
|
25
|
-
var AggregationEdit =
|
|
25
|
+
var AggregationEdit = _ref => {
|
|
26
26
|
var {
|
|
27
27
|
aggregation,
|
|
28
28
|
columns,
|
|
@@ -145,7 +145,7 @@ var AggregationEdit = (_ref) => {
|
|
|
145
145
|
itemCount: validColumns.length,
|
|
146
146
|
items: items,
|
|
147
147
|
offset: top,
|
|
148
|
-
renderItem:
|
|
148
|
+
renderItem: _ref2 => {
|
|
149
149
|
var {
|
|
150
150
|
item
|
|
151
151
|
} = _ref2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","filterValidColumns","TableUtils","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\nimport TableUtils from '../../TableUtils';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: { name: string; type: string }[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"file":"AggregationEdit.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","filterValidColumns","TableUtils","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,OAA7B,EAAsCC,MAAtC,EAA8CC,QAA9C,QAA8D,OAA9D;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,SAASC,MAAT,EAAiBC,QAAjB,EAA2BC,QAA3B,EAAqCC,WAArC,QAAwD,uBAAxD;AACA,SAASC,eAAT,EAA0BC,aAA1B,QAA+C,kBAA/C;SAESC,kB;;OAEFC,U;IAaFC,Q;;WAAAA,Q;AAAAA,EAAAA,Q,CAAAA,Q;AAAAA,EAAAA,Q,CAAAA,Q;AAAAA,EAAAA,Q,CAAAA,Q;GAAAA,Q,KAAAA,Q;;AAML,IAAMC,kBAAkB,GAAG,EAA3B;;AAEA,IAAMC,eAAe,GAAG,QAIiB;AAAA,MAJhB;AACvBC,IAAAA,WADuB;AAEvBC,IAAAA,OAFuB;AAGvBC,IAAAA;AAHuB,GAIgB;AACvC,MAAM,CAACC,GAAD,EAAMC,MAAN,IAAgBlB,QAAQ,CAAC,CAAC,CAAF,CAA9B;AACA,MAAM,CAACmB,MAAD,EAASC,SAAT,IAAsBpB,QAAQ,CAAC,CAAC,CAAF,CAApC;AACA,MAAM,CAACqB,IAAD,EAAOC,OAAP,IAAkBtB,QAAQ,CAACW,QAAQ,CAACY,IAAV,CAAhC;AACA,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,MAAuBX,WAA7B;AACA,MAAMY,IAAI,GAAG3B,MAAM,CAAgC,IAAhC,CAAnB;AAEA,MAAM4B,UAAU,GAAG9B,WAAW,CAC5B+B,IAAI,IAAKH,QAAQ,CAACI,QAAT,CAAkBD,IAAlB,IAA0B,CAACJ,MAA3B,GAAoCA,MADjB,EAE5B,CAACA,MAAD,EAASC,QAAT,CAF4B,CAA9B;AAKA,MAAMK,YAAY,GAAGhC,OAAO,CAAC,MAAM;AACjC,QAAIiC,eAAe,GAAGtB,kBAAkB,CAACM,OAAD,EAAUD,WAAW,CAACkB,SAAtB,CAAxC;;AACA,QAAIX,IAAI,KAAKV,QAAQ,CAACY,IAAtB,EAA4B;AAC1BQ,MAAAA,eAAe,GAAGrB,UAAU,CAACuB,WAAX,CAChBF,eADgB,EAEhBV,IAAI,KAAKV,QAAQ,CAACuB,SAFF,CAAlB;AAID;;AACD,WAAOH,eAAP;AACD,GAT2B,EASzB,CAAChB,OAAD,EAAUD,WAAW,CAACkB,SAAtB,EAAiCX,IAAjC,CATyB,CAA5B;AAWA,MAAMc,KAAK,GAAGrC,OAAO,CACnB,MACEmB,GAAG,IAAI,CAAP,GACIa,YAAY,CAACM,KAAb,CAAmBnB,GAAnB,EAAwBE,MAAM,GAAG,CAAjC,EAAoCkB,GAApC,CAAwCC,CAAC,KAAK;AAC5CC,IAAAA,KAAK,EAAED,CAAC,CAACV,IADmC;AAE5CY,IAAAA,YAAY,EAAEF,CAAC,CAACV,IAF4B;AAG5CD,IAAAA,UAAU,EAAEA,UAAU,CAACW,CAAC,CAACV,IAAH;AAHsB,GAAL,CAAzC,CADJ,GAMI,EARa,EASnB,CAACE,YAAD,EAAeH,UAAf,EAA2BR,MAA3B,EAAmCF,GAAnC,CATmB,CAArB;AAYA,MAAMwB,YAAY,GAAG5C,WAAW,CAC9B6C,SAAS,IAAI;AACX,QAAM;AAAEd,MAAAA;AAAF,QAAWE,YAAY,CAACY,SAAD,CAA7B;AACA,QAAMC,aAAa,GAAGlB,QAAQ,CAACmB,OAAT,CAAiBhB,IAAjB,CAAtB;AACA,QAAIiB,WAAW,GAAG,CAAC,GAAGpB,QAAJ,CAAlB;AACA,QAAIqB,SAAS,GAAGtB,MAAhB;;AACA,QAAImB,aAAa,IAAI,CAArB,EAAwB;AACtBE,MAAAA,WAAW,CAACE,MAAZ,CAAmBJ,aAAnB,EAAkC,CAAlC;AACD,KAFD,MAEO;AACLE,MAAAA,WAAW,CAACG,IAAZ,CAAiBpB,IAAjB;;AACA,UAAIiB,WAAW,CAACI,MAAZ,KAAuBnB,YAAY,CAACmB,MAAxC,EAAgD;AAC9C;AACAJ,QAAAA,WAAW,GAAG,EAAd;AACAC,QAAAA,SAAS,GAAG,CAACtB,MAAb;AACD;AACF;;AAEDR,IAAAA,QAAQ,iCAAMF,WAAN;AAAmBW,MAAAA,QAAQ,EAAEoB,WAA7B;AAA0CrB,MAAAA,MAAM,EAAEsB;AAAlD,OAAR;AACD,GAlB6B,EAmB9B,CAAChC,WAAD,EAAcU,MAAd,EAAsBM,YAAtB,EAAoCL,QAApC,EAA8CT,QAA9C,CAnB8B,CAAhC;AAsBA,MAAMkC,WAAW,GAAGrD,WAAW,CAAC,MAAM;AACpCyB,IAAAA,OAAO,CAACX,QAAQ,CAACY,IAAV,CAAP;AACAP,IAAAA,QAAQ,iCAAMF,WAAN;AAAmBW,MAAAA,QAAQ,EAAE,EAA7B;AAAiCD,MAAAA,MAAM,EAAE;AAAzC,OAAR;AACD,GAH8B,EAG5B,CAACV,WAAD,EAAcE,QAAd,CAH4B,CAA/B;AAKA,MAAMmC,oBAAoB,GAAGtD,WAAW,CACtC,CAACuD,MAAD,EAASC,SAAT,KAAuB;AACrBnC,IAAAA,MAAM,CAACkC,MAAD,CAAN;AACAhC,IAAAA,SAAS,CAACiC,SAAD,CAAT;AACD,GAJqC,EAKtC,CAACnC,MAAD,EAASE,SAAT,CALsC,CAAxC;AAQA,MAAMkC,SAAS,GAAGzD,WAAW,CAAC,MAAM;AAClC,QAAI4B,QAAQ,CAACwB,MAAT,KAAoB,CAAxB,EAA2B;AACzBjC,MAAAA,QAAQ,iCAAMF,WAAN;AAAmBU,QAAAA,MAAM,EAAE,CAACA;AAA5B,SAAR;AACD,KAFD,MAEO;AACLR,MAAAA,QAAQ,iCAAMF,WAAN;AAAmBW,QAAAA,QAAQ,EAAE,EAA7B;AAAiCD,QAAAA,MAAM,EAAE;AAAzC,SAAR;AACD;AACF,GAN4B,EAM1B,CAACV,WAAD,EAAcU,MAAd,EAAsBR,QAAtB,EAAgCS,QAAhC,CAN0B,CAA7B;AAQA,MAAM8B,OAAO,GAAG9B,QAAQ,CAACwB,MAAT,KAAoB,CAApB,GAAwBzB,MAAxB,GAAiC,IAAjD;AACA,MAAMgC,UAAU,GAAG/B,QAAQ,CAACwB,MAAT,KAAoB,CAApB,IAAyB,CAACzB,MAA1B,IAAoCH,IAAI,KAAKV,QAAQ,CAACY,IAAzE;AAEA,sBACE;AAAK,IAAA,IAAI,EAAC,MAAV;AAAiB,IAAA,SAAS,EAAC;AAA3B,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oBAAC,QAAD;AAAU,IAAA,OAAO,EAAEgC,OAAnB;AAA4B,IAAA,QAAQ,EAAED;AAAtC,kBADF,eAIE;AAAK,IAAA,SAAS,EAAC;AAAf,IAJF,eAKE,oBAAC,aAAD;AACE,IAAA,EAAE,EAAEE,UADN;AAEE,IAAA,OAAO,EAAElD,WAAW,CAACmD,gBAFvB;AAGE,IAAA,UAAU,EAAC,MAHb;AAIE,IAAA,YAAY,MAJd;AAKE,IAAA,aAAa;AALf,kBAOE,oBAAC,MAAD;AAAQ,IAAA,IAAI,EAAC,OAAb;AAAqB,IAAA,SAAS,EAAC,WAA/B;AAA2C,IAAA,OAAO,EAAEP;AAApD,aAPF,CALF,eAgBE,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,OADP;AAEE,IAAA,SAAS,EAAEjD,UAAU,CAAC;AACpByD,MAAAA,MAAM,EAAErC,IAAI,KAAKV,QAAQ,CAACuB;AADN,KAAD,CAFvB;AAKE,IAAA,IAAI,EAAE3B,eALR;AAME,IAAA,OAAO,EAAC,gBANV;AAOE,IAAA,OAAO,EAAE,MAAMe,OAAO,CAACX,QAAQ,CAACuB,SAAV;AAPxB,IAhBF,eAyBE,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,OADP;AAEE,IAAA,SAAS,EAAEjC,UAAU,CAAC;AACpByD,MAAAA,MAAM,EAAErC,IAAI,KAAKV,QAAQ,CAACgD;AADN,KAAD,CAFvB;AAKE,IAAA,IAAI,EAAEnD,aALR;AAME,IAAA,OAAO,EAAC,iBANV;AAOE,IAAA,OAAO,EAAE,MAAMc,OAAO,CAACX,QAAQ,CAACgD,UAAV;AAPxB,IAzBF,CADF,CADF,eAsCE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oBAAC,QAAD;AACE,IAAA,SAAS,EAAE7B,YAAY,CAACmB,MAD1B;AAEE,IAAA,KAAK,EAAEd,KAFT;AAGE,IAAA,MAAM,EAAElB,GAHV;AAIE,IAAA,UAAU,EAAE;AAAA,UAAC;AAAE2C,QAAAA;AAAF,OAAD;AAAA,0BACV,oBAAC,QAAD;AAAU,QAAA,OAAO,EAAEjC,UAAU,CAACiC,IAAI,CAACrB,KAAN;AAA7B,SACGqB,IAAI,CAACpB,YADR,CADU;AAAA,KAJd;AASE,IAAA,QAAQ,EAAEC,YATZ;AAUE,IAAA,gBAAgB,EAAEU,oBAVpB;AAWE,IAAA,SAAS,EAAEvC,kBAXb;AAYE,IAAA,aAAa,EAAC,OAZhB;AAaE,IAAA,GAAG,EAAEc;AAbP,IADF,CAtCF,CADF;AA0DD,CA/ID;;AAiJA,eAAeb,eAAf","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\nimport TableUtils from '../../TableUtils';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: { name: string; type: string }[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"file":"AggregationEdit.js"}
|
|
@@ -48,7 +48,7 @@ export var isValidOperation = (operationType, columnType) => {
|
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
50
|
export var filterValidColumns = (columns, operationType) => columns.filter(c => isValidOperation(operationType, c.type));
|
|
51
|
-
export var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(
|
|
51
|
+
export var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {
|
|
52
52
|
var {
|
|
53
53
|
name
|
|
54
54
|
} = _ref;
|