@deephaven/iris-grid 0.16.1-beta.0 → 0.16.1-vite.18
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/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridShortcuts.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/mousehandlers/index.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.js +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/aggregations/index.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CrossColumnSearch.tsx"],"names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","dh","TableUtils","CrossColumnSearch","createSearchFilter","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,EAAmBC,MAAnB,EAA2BC,WAA3B,EAAwCC,OAAxC,QAAuD,uBAAvD;AACA,SACEC,YADF,EAEEC,aAFF,EAGEC,cAHF,EAIEC,oBAJF,EAKEC,qBALF,EAMEC,mBANF,QAOO,kBAPP;AAQA,OAAOC,EAAP,MAA4C,uBAA5C;AACA,SAASC,UAAT,QAA2B,wBAA3B;;;AAmBA,MAAMC,iBAAN,SAAgCd,aAAhC,CAGE;AACyB,SAAlBe,kBAAkB,CACvBC,WADuB,EAEvBC,eAFuB,EAGvBC,OAHuB,EAIvBC,eAJuB,EAKM;AAC7B,QAAMC,aAAa,GAAGD,eAAe,GACjCD,OAAO,CACJG,MADH,CACUC,MAAM,IAAI,CAACL,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CADrB,EAEGC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACE,IAFxB,CADiC,GAIjCP,eAJJ;;AAKA,QAAID,WAAW,IAAII,aAAa,CAACM,MAAd,GAAuB,CAA1C,EAA6C;AAC3C,UAAMC,WAAW,GAAGf,EAAE,CAACgB,WAAH,CAAeC,QAAf,CAAwBb,WAAxB,CAApB;AACA,UAAMc,YAAY,GAChBV,aAAa,CAACM,MAAd,KAAyBR,OAAO,CAACQ,MAAjC,GACId,EAAE,CAACmB,eAAH,CAAmBC,MAAnB,CAA0BL,WAA1B,CADJ,GAEIf,EAAE,CAACmB,eAAH,CAAmBC,MAAnB,CACEL,WADF,EAEET,OAAO,CACJG,MADH,CACUC,MAAM,IAAIF,aAAa,CAACG,QAAd,CAAuBD,MAAM,CAACE,IAA9B,CADpB,EAEGC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACD,MAAP,EAFjB,CAFF,CAHN;AASA,aAAOS,YAAP;AACD;;AACD,WAAOG,SAAP;AACD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAgC;AACzC,UAAMA,KAAN;;AADyC;;AAEzC,SAAKC,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BC,IAA7B,CAAkC,IAAlC,CAA/B;AACA,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBD,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeF,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAKG,KAAL,GAAa,KAAKA,KAAL,CAAWH,IAAX,CAAgB,IAAhB,CAAb;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;AAEA,SAAKK,WAAL,gBAAmB3C,KAAK,CAAC4C,SAAN,EAAnB;AAEA,SAAKC,KAAL,GAAa;AACXC,MAAAA,uBAAuB,EAAE;AADd,KAAb;AAGD;;AAIDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKJ,WAAL,CAAiBK,OAAjB,gFAA0BD,KAA1B;AACD;;AAEDV,EAAAA,uBAAuB,CAACY,KAAD,EAAmD;AACxE,QAAM;AAAEC,MAAAA,QAAF;AAAYhC,MAAAA,eAAZ;AAA6BE,MAAAA;AAA7B,QAAiD,KAAKgB,KAA5D;AACAc,IAAAA,QAAQ,CAACD,KAAK,CAACE,MAAN,CAAaC,KAAd,EAAqBlC,eAArB,EAAsCE,eAAtC,CAAR;AACD;;AAEDiC,EAAAA,gBAAgB,CACdnC,eADc,EAEdE,eAFc,EAGR;AACN,QAAM;AAAE8B,MAAAA,QAAF;AAAYE,MAAAA;AAAZ,QAAsB,KAAKhB,KAAjC;AACAc,IAAAA,QAAQ,CAACE,KAAD,EAAQlC,eAAR,EAAyBE,eAAzB,CAAR;AACD;;AAEDkC,EAAAA,kBAAkB,CAAClC,eAAD,EAAiC;AACjD,QAAM;AAAE8B,MAAAA,QAAF;AAAYE,MAAAA;AAAZ,QAAsB,KAAKhB,KAAjC;AACAc,IAAAA,QAAQ,CAACE,KAAD,EAAQ,EAAR,EAAYhC,eAAZ,CAAR;AACD;;AAEDmB,EAAAA,YAAY,CAACd,IAAD,EAAqB;AAC/B,QAAM;AAAEP,MAAAA,eAAF;AAAmBE,MAAAA;AAAnB,QAAuC,KAAKgB,KAAlD;;AACA,QAAIlB,eAAe,CAACM,QAAhB,CAAyBC,IAAzB,CAAJ,EAAoC;AAClC,WAAK4B,gBAAL,CACEnC,eAAe,CAACI,MAAhB,CAAuBiC,CAAC,IAAIA,CAAC,KAAK9B,IAAlC,CADF,EAEEL,eAFF;AAID,KALD,MAKO;AACL,UAAMoC,MAAM,GAAGtC,eAAe,CAACuC,KAAhB,EAAf;AACAD,MAAAA,MAAM,CAACE,IAAP,CAAYjC,IAAZ;AACA,WAAK4B,gBAAL,CAAsBG,MAAtB,EAA8BpC,eAA9B;AACD;AACF;;AAEDoB,EAAAA,SAAS,GAAS;AAChB,SAAKc,kBAAL,CAAwB,IAAxB;AACD;;AAEDb,EAAAA,KAAK,GAAS;AACZ,SAAKa,kBAAL,CAAwB,KAAxB;AACD;;AAEDZ,EAAAA,aAAa,GAAS;AACpB,QAAM;AAAEvB,MAAAA;AAAF,QAAc,KAAKiB,KAAzB;AACA,SAAKiB,gBAAL,CACElC,OAAO,CACJG,MADH,CACUiC,CAAC,IAAIzC,UAAU,CAAC6C,YAAX,CAAwBJ,CAAC,CAACK,IAA1B,CADf,EAEGlC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACE,IAFxB,CADF,EAIE,KAJF;AAMD;;AAEDoC,EAAAA,MAAM,GAAuB;AAC3B,QAAM;AAAET,MAAAA,KAAF;AAASlC,MAAAA,eAAT;AAA0BE,MAAAA,eAA1B;AAA2CD,MAAAA;AAA3C,QAAuD,KAAKiB,KAAlE;AACA,QAAM;AAAEU,MAAAA;AAAF,QAA8B,KAAKD,KAAzC;AACA,QAAMiB,qBAAqB,GACxB5C,eAAe,CAACS,MAAhB,KAA2B,CAA3B,IAAgCP,eAAe,KAAK,IAArD,IACCF,eAAe,CAACS,MAAhB,KAA2BR,OAAO,CAACQ,MAAnC,IAA6CP,eAAe,KAAK,KAFpE;AAGA,QAAM2C,oBAAoB,GACvB7C,eAAe,CAACS,MAAhB,KAA2B,CAA3B,IAAgCP,eAAe,KAAK,KAArD,IACCF,eAAe,CAACS,MAAhB,KAA2BR,OAAO,CAACQ,MAAnC,IAA6CP,eAAe,KAAK,IAFpE,CAN2B,CAU3B;;AACA,QAAI4C,IAAJ;;AACA,QAAIF,qBAAJ,EAA2B;AACzB;AACAE,MAAAA,IAAI,gBACF,uDACE,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEvD,cADR;AAEE,QAAA,IAAI,EAAEF,YAFR;AAGE,QAAA,SAAS,EAAC;AAHZ,QADF,eAME,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEC,aADR;AAEE,QAAA,SAAS,EAAC,cAFZ;AAGE,QAAA,SAAS,EAAC;AAHZ,QANF,CADF;AAcD,KAhBD,MAgBO,IAAIuD,oBAAJ,EAA0B;AAC/B;AACAC,MAAAA,IAAI,gBACF,uDACE,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEpD,mBADR;AAEE,QAAA,IAAI,EAAEL,YAFR;AAGE,QAAA,SAAS,EAAC;AAHZ,QADF,eAME,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEI,qBADR;AAEE,QAAA,SAAS,EAAC,aAFZ;AAGE,QAAA,SAAS,EAAC;AAHZ,QANF,CADF;AAcD,KAhBM,MAgBA;AACL;AACAqD,MAAAA,IAAI,gBACF,uDACE,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEvD,cADR;AAEE,QAAA,IAAI,EAAEF,YAFR;AAGE,QAAA,SAAS,EAAC;AAHZ,QADF,eAME,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEG,oBADR;AAEE,QAAA,SAAS,EAAC,cAFZ;AAGE,QAAA,SAAS,EAAC;AAHZ,QANF,CADF;AAcD;;AAED,wBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,WAAD;AACE,MAAA,SAAS,EAAC,qBADZ;AAEE,MAAA,WAAW,EAAC,gBAFd;AAGE,MAAA,KAAK,EAAE0C,KAHT;AAIE,MAAA,QAAQ,EAAE,KAAKf,uBAJjB;AAKE,MAAA,GAAG,EAAE,KAAKM;AALZ,MADF,eAQE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,iCAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,YAAIG,uBAAJ,EAA6B;AAC3B,eAAKmB,QAAL,CAAc;AAAEnB,YAAAA,uBAAuB,EAAE;AAA3B,WAAd;AACD,SAFD,MAEO;AACL,eAAKmB,QAAL,CAAc;AAAEnB,YAAAA,uBAAuB,EAAE;AAA3B,WAAd;AACD;AACF;AATH,oBAWE;AAAK,MAAA,SAAS,EAAC;AAAf,OAA4BkB,IAA5B,CAXF,eAYE,oBAAC,OAAD,4BAZF,eAaE,oBAAC,MAAD;AACE,MAAA,OAAO,EAAElB,uBADX;AAEE,MAAA,SAAS,EAAC,qBAFZ;AAGE,MAAA,QAAQ,EAAE,MAAM;AACd,aAAKmB,QAAL,CAAc;AAAEnB,UAAAA,uBAAuB,EAAE;AAA3B,SAAd;AACD,OALH;AAME,MAAA,WAAW,MANb;AAOE,MAAA,WAAW;AAPb,oBASE;AAAK,MAAA,SAAS,EAAC;AAAf,wCAEE;AAAK,MAAA,SAAS,EAAC;AAAf,OACG3B,OAAO,CAACO,GAAR,CAAYH,MAAM,iBACjB,oBAAC,KAAD,CAAO,QAAP;AAAgB,MAAA,GAAG,EAAEA,MAAM,CAACE;AAA5B,oBACE,oBAAC,QAAD;AACE,MAAA,SAAS,EAAC,uBADZ;AAEE,MAAA,OAAO,EACLL,eAAe,GACX,CAACF,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CADU,GAEXP,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CALR;AAOE,MAAA,QAAQ,EAAE,MAAM,KAAKc,YAAL,CAAkBhB,MAAM,CAACE,IAAzB;AAPlB,OASGF,MAAM,CAACE,IATV,CADF,EAaGF,MAAM,CAACqC,IAAP,CAAYM,SAAZ,CAAsB3C,MAAM,CAACqC,IAAP,CAAYO,WAAZ,CAAwB,GAAxB,IAA+B,CAArD,CAbH,CADD,CADH,CAFF,eAqBE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,OAAO,EAAE,KAAK3B;AAHhB,oBADF,eAQE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,OAAO,EAAE,KAAKC;AAHhB,eARF,eAeE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,OAAO,EAAE,KAAKC;AAHhB,sBAfF,CArBF,EA4CGqB,oBAAoB,iBACnB;AAAG,MAAA,SAAS,EAAC;AAAb,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEpD;AAAvB,MADF,2CA7CJ,CATF,CAbF,CARF,CADF;AAsFD;;AAvPD;;AA0PF,eAAeI,iBAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport dh, { Column, FilterCondition } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n searchValue: string,\n selectedColumns: ColumnName[],\n columns: Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"file":"CrossColumnSearch.js"}
|
|
1
|
+
{"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","dh","TableUtils","CrossColumnSearch","createSearchFilter","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport dh, { Column, FilterCondition } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n searchValue: string,\n selectedColumns: ColumnName[],\n columns: Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FilterInputField.tsx"],"names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget?.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget?.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n <div className=\"advanced-filter-button-container\">\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon advanced-filter-button',\n {\n 'filter-set': isAdvancedFilterSet,\n }\n )}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"file":"FilterInputField.js"}
|
|
1
|
+
{"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget?.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget?.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n <div className=\"advanced-filter-button-container\">\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon advanced-filter-button',\n {\n 'filter-set': isAdvancedFilterSet,\n }\n )}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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"}
|
package/dist/GotoRow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"GotoRow.js","names":["FontAwesomeIcon","vsClose","React","useEffect","useRef","Button","classNames","IrisGridBottomBar","isIrisGridProxyModel","model","undefined","DEFAULT_FORMAT_STRING","GotoRow","gotoRow","gotoRowError","onSubmit","isShown","onEntering","onEntered","onExiting","onExited","onGotoRowNumberChanged","onClose","inputRef","res","rowCount","document","activeElement","current","select","e","key","stopPropagation","preventDefault","event","dh","i18n","NumberFormat","format","marginRight"],"sources":["../src/GotoRow.tsx"],"sourcesContent":["import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose } from '@deephaven/icons';\nimport React, { ChangeEvent, ReactElement, useEffect, useRef } from 'react';\nimport { Button } from '@deephaven/components';\nimport classNames from 'classnames';\nimport './GotoRow.scss';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridProxyModel from './IrisGridProxyModel';\nimport IrisGridBottomBar from './IrisGridBottomBar';\n\nexport function isIrisGridProxyModel(\n model: IrisGridModel\n): model is IrisGridProxyModel {\n return (model as IrisGridProxyModel).model !== undefined;\n}\n\nconst DEFAULT_FORMAT_STRING = '###,##0';\n\ninterface GotoRowProps {\n gotoRow: string;\n gotoRowError: string;\n onSubmit: () => void;\n model: IrisGridModel;\n onGotoRowNumberChanged: (event: ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n isShown: boolean;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\nconst GotoRow = ({\n gotoRow,\n gotoRowError,\n onSubmit,\n isShown,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n}: GotoRowProps): ReactElement => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const res = 'Row number';\n\n const { rowCount } = model;\n\n useEffect(() => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (document.activeElement !== inputRef.current) {\n inputRef.current?.select();\n }\n }, [gotoRow]);\n\n return (\n <IrisGridBottomBar\n isShown={isShown}\n className={classNames('goto-row')}\n onEntering={onEntering}\n onEntered={() => {\n onEntered();\n inputRef.current?.select();\n }}\n onExiting={onExiting}\n onExited={onExited}\n >\n <>\n <div className=\"goto-row-wrapper\">\n <div className=\"goto-row-text\">Go to row</div>\n <div className=\"goto-row-input\">\n <input\n ref={inputRef}\n type=\"number\"\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onSubmit();\n }\n }}\n className={classNames('form-control', {\n 'is-invalid': gotoRowError !== '',\n })}\n placeholder={res}\n onChange={event => {\n onGotoRowNumberChanged(event);\n }}\n value={gotoRow}\n />\n </div>\n <div className=\"goto-row-text\">\n of {dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)}\n </div>\n {gotoRowError && (\n <div className=\"goto-row-error text-danger\">{gotoRowError}</div>\n )}\n </div>\n <div className=\"goto-row-close\">\n <Button kind=\"ghost\" onClick={onClose}>\n <FontAwesomeIcon icon={vsClose} style={{ marginRight: '0' }} />\n </Button>\n </div>\n </>\n </IrisGridBottomBar>\n );\n};\n\nexport default GotoRow;\n"],"mappings":"AAAA,SAASA,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,QAAwB,kBAAxB;AACA,OAAOC,KAAP,IAA2CC,SAA3C,EAAsDC,MAAtD,QAAoE,OAApE;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;OAIOC,iB;AAEP,OAAO,SAASC,oBAAT,CACLC,KADK,EAEwB;EAC7B,OAAQA,KAAD,CAA8BA,KAA9B,KAAwCC,SAA/C;AACD;AAED,IAAMC,qBAAqB,GAAG,SAA9B;;AAgBA,IAAMC,OAAO,GAAG,QAYkB;EAAA,IAZjB;IACfC,OADe;IAEfC,YAFe;IAGfC,QAHe;IAIfC,OAJe;IAKfC,UALe;IAMfC,SAAS,EAATA,UANe;IAOfC,SAPe;IAQfC,QARe;IASfX,KATe;IAUfY,sBAVe;IAWfC;EAXe,CAYiB;EAChC,IAAMC,QAAQ,GAAGnB,MAAM,CAAmB,IAAnB,CAAvB;EAEA,IAAMoB,GAAG,GAAG,YAAZ;EAEA,IAAM;IAAEC;EAAF,IAAehB,KAArB;EAEAN,SAAS,CAAC,MAAM;IACd;IACA,IAAIuB,QAAQ,CAACC,aAAT,KAA2BJ,QAAQ,CAACK,OAAxC,EAAiD;MAAA;;MAC/C,qBAAAL,QAAQ,CAACK,OAAT,wEAAkBC,MAAlB;IACD;EACF,CALQ,EAKN,CAAChB,OAAD,CALM,CAAT;EAOA,oBACE,oBAAC,iBAAD;IACE,OAAO,EAAEG,OADX;IAEE,SAAS,EAAEV,UAAU,CAAC,UAAD,CAFvB;IAGE,UAAU,EAAEW,UAHd;IAIE,SAAS,EAAE,MAAM;MAAA;;MACfC,UAAS;;MACT,sBAAAK,QAAQ,CAACK,OAAT,0EAAkBC,MAAlB;IACD,CAPH;IAQE,SAAS,EAAEV,SARb;IASE,QAAQ,EAAEC;EATZ,gBAWE,uDACE;IAAK,SAAS,EAAC;EAAf,gBACE;IAAK,SAAS,EAAC;EAAf,eADF,eAEE;IAAK,SAAS,EAAC;EAAf,gBACE;IACE,GAAG,EAAEG,QADP;IAEE,IAAI,EAAC,QAFP;IAGE,SAAS,EAAEO,CAAC,IAAI;MACd,IAAIA,CAAC,CAACC,GAAF,KAAU,OAAd,EAAuB;QACrBD,CAAC,CAACE,eAAF;QACAF,CAAC,CAACG,cAAF;QACAlB,QAAQ;MACT;IACF,CATH;IAUE,SAAS,EAAET,UAAU,CAAC,cAAD,EAAiB;MACpC,cAAcQ,YAAY,KAAK;IADK,CAAjB,CAVvB;IAaE,WAAW,EAAEU,GAbf;IAcE,QAAQ,EAAEU,KAAK,IAAI;MACjBb,sBAAsB,CAACa,KAAD,CAAtB;IACD,CAhBH;IAiBE,KAAK,EAAErB;EAjBT,EADF,CAFF,eAuBE;IAAK,SAAS,EAAC;EAAf,UACMsB,EAAE,CAACC,IAAH,CAAQC,YAAR,CAAqBC,MAArB,CAA4B3B,qBAA5B,EAAmDc,QAAnD,CADN,CAvBF,EA0BGX,YAAY,iBACX;IAAK,SAAS,EAAC;EAAf,GAA6CA,YAA7C,CA3BJ,CADF,eA+BE;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,MAAD;IAAQ,IAAI,EAAC,OAAb;IAAqB,OAAO,EAAEQ;EAA9B,gBACE,oBAAC,eAAD;IAAiB,IAAI,EAAErB,OAAvB;IAAgC,KAAK,EAAE;MAAEsC,WAAW,EAAE;IAAf;EAAvC,EADF,CADF,CA/BF,CAXF,CADF;AAmDD,CA7ED;;AA+EA,eAAe3B,OAAf"}
|