slick-table 1.0.18 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/dist/index.cjs.js +31 -31
  2. package/dist/index.es.js +162 -157
  3. package/dist/types/shared/lib/slickgrid/lib/sorting/ColumnSorter.d.ts +1 -0
  4. package/dist/types/shared/lib/slickgrid/lib/sorting/ColumnSorter.d.ts.map +1 -1
  5. package/dist/types/shared/lib/sorting/Sort.d.ts +1 -0
  6. package/dist/types/shared/lib/sorting/Sort.d.ts.map +1 -1
  7. package/dist/types/shared/model/enums/ESortType.d.ts +3 -1
  8. package/dist/types/shared/model/enums/ESortType.d.ts.map +1 -1
  9. package/package.json +8 -3
  10. package/src/App.tsx +9 -0
  11. package/src/app/styles/global.scss +31 -0
  12. package/src/app/styles/slickgrid.scss +13 -0
  13. package/src/app/types/index.d.ts +9 -0
  14. package/src/entities/popup/index.ts +2 -0
  15. package/src/entities/popup/lib/index.ts +1 -0
  16. package/src/entities/popup/lib/visibility/index.ts +1 -0
  17. package/src/entities/popup/lib/visibility/makeVisible.ts +9 -0
  18. package/src/entities/popup/ui/Overlay/Overlay.style.ts +14 -0
  19. package/src/entities/popup/ui/Overlay/Overlay.test.tsx +19 -0
  20. package/src/entities/popup/ui/Overlay/Overlay.tsx +20 -0
  21. package/src/entities/popup/ui/Overlay/index.ts +1 -0
  22. package/src/entities/popup/ui/Popup.style.ts +17 -0
  23. package/src/entities/popup/ui/Popup.tsx +12 -0
  24. package/src/entities/popup/ui/index.ts +2 -0
  25. package/src/entities/skeleton/Skeleton.style.ts +10 -0
  26. package/src/entities/skeleton/Skeleton.tsx +11 -0
  27. package/src/entities/skeleton/index.ts +1 -0
  28. package/src/features/column-filters/index.ts +1 -0
  29. package/src/features/column-filters/lib/filter/applyFilter.ts +25 -0
  30. package/src/features/column-filters/lib/filter/index.ts +1 -0
  31. package/src/features/column-filters/lib/hooks/index.ts +2 -0
  32. package/src/features/column-filters/lib/hooks/useOpenMenu.ts +43 -0
  33. package/src/features/column-filters/lib/hooks/useSubscribeToEvent.ts +17 -0
  34. package/src/features/column-filters/lib/index.ts +4 -0
  35. package/src/features/column-filters/lib/props/datePickerProps.tsx +11 -0
  36. package/src/features/column-filters/lib/props/index.ts +1 -0
  37. package/src/features/column-filters/lib/select/firstIn.ts +22 -0
  38. package/src/features/column-filters/lib/select/index.ts +1 -0
  39. package/src/features/column-filters/model/consts/defaultValue.ts +6 -0
  40. package/src/features/column-filters/model/consts/id.ts +1 -0
  41. package/src/features/column-filters/model/consts/index.ts +3 -0
  42. package/src/features/column-filters/model/consts/label.ts +5 -0
  43. package/src/features/column-filters/model/index.ts +2 -0
  44. package/src/features/column-filters/model/types/IProps.ts +9 -0
  45. package/src/features/column-filters/model/types/index.ts +1 -0
  46. package/src/features/column-filters/ui/BooleanInput/BooleanInput.style.ts +10 -0
  47. package/src/features/column-filters/ui/BooleanInput/BooleanInput.tsx +53 -0
  48. package/src/features/column-filters/ui/BooleanInput/index.ts +1 -0
  49. package/src/features/column-filters/ui/ButtonReset/ButtonReset.style.ts +10 -0
  50. package/src/features/column-filters/ui/ButtonReset/ButtonReset.tsx +39 -0
  51. package/src/features/column-filters/ui/ButtonReset/index.ts +1 -0
  52. package/src/features/column-filters/ui/ColumnFilters.style.ts +12 -0
  53. package/src/features/column-filters/ui/ColumnFilters.tsx +44 -0
  54. package/src/features/column-filters/ui/DateBetween/DateBetween.tsx +52 -0
  55. package/src/features/column-filters/ui/DateBetween/index.ts +1 -0
  56. package/src/features/column-filters/ui/DateInput/DateInput.tsx +36 -0
  57. package/src/features/column-filters/ui/DateInput/index.ts +1 -0
  58. package/src/features/column-filters/ui/InputArea/InputArea.tsx +63 -0
  59. package/src/features/column-filters/ui/InputArea/index.ts +1 -0
  60. package/src/features/column-filters/ui/MultipleSelect/index.ts +1 -0
  61. package/src/features/column-filters/ui/MultipleSelect/lib/index.ts +2 -0
  62. package/src/features/column-filters/ui/MultipleSelect/lib/props/index.ts +1 -0
  63. package/src/features/column-filters/ui/MultipleSelect/lib/props/props.ts +36 -0
  64. package/src/features/column-filters/ui/MultipleSelect/lib/sorting/ascending.ts +17 -0
  65. package/src/features/column-filters/ui/MultipleSelect/lib/sorting/index.ts +1 -0
  66. package/src/features/column-filters/ui/MultipleSelect/model/IValue.ts +1 -0
  67. package/src/features/column-filters/ui/MultipleSelect/model/index.ts +1 -0
  68. package/src/features/column-filters/ui/MultipleSelect/ui/MultipleSelect.style.ts +9 -0
  69. package/src/features/column-filters/ui/MultipleSelect/ui/MultipleSelect.tsx +72 -0
  70. package/src/features/column-filters/ui/MultipleSelect/ui/index.ts +1 -0
  71. package/src/features/column-filters/ui/NumberBetween/NumberBetween.tsx +42 -0
  72. package/src/features/column-filters/ui/NumberBetween/index.ts +1 -0
  73. package/src/features/column-filters/ui/NumberInput/NumberInput.tsx +24 -0
  74. package/src/features/column-filters/ui/NumberInput/index.ts +1 -0
  75. package/src/features/column-filters/ui/SelectFilter/index.ts +1 -0
  76. package/src/features/column-filters/ui/SelectFilter/model/index.ts +1 -0
  77. package/src/features/column-filters/ui/SelectFilter/model/options/index.ts +1 -0
  78. package/src/features/column-filters/ui/SelectFilter/model/options/options.ts +66 -0
  79. package/src/features/column-filters/ui/SelectFilter/ui/SelectFilter.tsx +50 -0
  80. package/src/features/column-filters/ui/SelectFilter/ui/index.ts +1 -0
  81. package/src/features/column-filters/ui/TextInput/TextInput.tsx +23 -0
  82. package/src/features/column-filters/ui/TextInput/index.ts +1 -0
  83. package/src/features/column-filters/ui/index.ts +1 -0
  84. package/src/features/context-menu/index.ts +1 -0
  85. package/src/features/context-menu/lib/hooks/index.ts +1 -0
  86. package/src/features/context-menu/lib/hooks/useSubscribeToEvent.ts +27 -0
  87. package/src/features/context-menu/lib/index.ts +1 -0
  88. package/src/features/context-menu/model/consts/id.ts +1 -0
  89. package/src/features/context-menu/model/consts/index.ts +1 -0
  90. package/src/features/context-menu/model/index.ts +1 -0
  91. package/src/features/context-menu/ui/ButtonDownloadCSV/ButtonDownloadCSV.tsx +34 -0
  92. package/src/features/context-menu/ui/ButtonDownloadCSV/index.ts +1 -0
  93. package/src/features/context-menu/ui/ButtonGroup/ButtonGroup.tsx +28 -0
  94. package/src/features/context-menu/ui/ButtonGroup/index.ts +1 -0
  95. package/src/features/context-menu/ui/ButtonResetFilters/index.ts +1 -0
  96. package/src/features/context-menu/ui/ButtonResetFilters/lib/index.ts +1 -0
  97. package/src/features/context-menu/ui/ButtonResetFilters/lib/visibility/hasFiltersApplied.ts +8 -0
  98. package/src/features/context-menu/ui/ButtonResetFilters/lib/visibility/index.ts +1 -0
  99. package/src/features/context-menu/ui/ButtonResetFilters/ui/ButtonResetFilters.tsx +39 -0
  100. package/src/features/context-menu/ui/ButtonResetFilters/ui/index.ts +1 -0
  101. package/src/features/context-menu/ui/ButtonUngroup/ButtonUngroup.tsx +28 -0
  102. package/src/features/context-menu/ui/ButtonUngroup/index.ts +1 -0
  103. package/src/features/context-menu/ui/CollapseAll/CollapseAll.tsx +31 -0
  104. package/src/features/context-menu/ui/CollapseAll/index.ts +1 -0
  105. package/src/features/context-menu/ui/ContextMenu.style.ts +29 -0
  106. package/src/features/context-menu/ui/ContextMenu.tsx +55 -0
  107. package/src/features/context-menu/ui/CopyToClipboard/CopyToClipboard.tsx +42 -0
  108. package/src/features/context-menu/ui/CopyToClipboard/index.ts +1 -0
  109. package/src/features/context-menu/ui/ExpandAll/ExpandAll.tsx +30 -0
  110. package/src/features/context-menu/ui/ExpandAll/index.ts +1 -0
  111. package/src/features/context-menu/ui/Print/index.ts +1 -0
  112. package/src/features/context-menu/ui/Print/ui/Print.tsx +25 -0
  113. package/src/features/context-menu/ui/Print/ui/index.ts +1 -0
  114. package/src/features/context-menu/ui/index.ts +1 -0
  115. package/src/index.scss +2 -0
  116. package/src/index.ts +40 -0
  117. package/src/main.tsx +15 -0
  118. package/src/setupTests.ts +5 -0
  119. package/src/shared/lib/an-event/index.ts +31 -0
  120. package/src/shared/lib/datetime/dateToString.spec.ts +11 -0
  121. package/src/shared/lib/datetime/dateToString.ts +8 -0
  122. package/src/shared/lib/datetime/getTime.spec.ts +10 -0
  123. package/src/shared/lib/datetime/getTime.ts +3 -0
  124. package/src/shared/lib/datetime/index.ts +2 -0
  125. package/src/shared/lib/debounce/index.ts +11 -0
  126. package/src/shared/lib/dom/elementNotVisible.spec.ts +72 -0
  127. package/src/shared/lib/dom/elementNotVisible.ts +9 -0
  128. package/src/shared/lib/dom/index.ts +1 -0
  129. package/src/shared/lib/format/IOptions.ts +11 -0
  130. package/src/shared/lib/format/addParentheses.spec.ts +9 -0
  131. package/src/shared/lib/format/addParentheses.ts +7 -0
  132. package/src/shared/lib/format/formatNumber.spec.ts +50 -0
  133. package/src/shared/lib/format/formatNumber.ts +62 -0
  134. package/src/shared/lib/format/index.ts +2 -0
  135. package/src/shared/lib/localStrore/index.ts +1 -0
  136. package/src/shared/lib/localStrore/lib/getSlickTable.ts +5 -0
  137. package/src/shared/lib/localStrore/lib/getSorting.ts +5 -0
  138. package/src/shared/lib/localStrore/lib/index.ts +3 -0
  139. package/src/shared/lib/localStrore/lib/setSorting.ts +8 -0
  140. package/src/shared/lib/localStrore/model/enums/EStorageKey.ts +4 -0
  141. package/src/shared/lib/localStrore/model/enums/index.ts +1 -0
  142. package/src/shared/lib/localStrore/model/index.ts +3 -0
  143. package/src/shared/lib/localStrore/model/localStore.ts +28 -0
  144. package/src/shared/lib/localStrore/model/types/ILastSorting.ts +4 -0
  145. package/src/shared/lib/localStrore/model/types/ISlickTable.ts +1 -0
  146. package/src/shared/lib/localStrore/model/types/ISorting.ts +3 -0
  147. package/src/shared/lib/localStrore/model/types/index.ts +3 -0
  148. package/src/shared/lib/numbers/index.ts +1 -0
  149. package/src/shared/lib/numbers/toNumber.spec.ts +25 -0
  150. package/src/shared/lib/numbers/toNumber.ts +11 -0
  151. package/src/shared/lib/regexp/dates.spec.ts +23 -0
  152. package/src/shared/lib/regexp/dates.ts +6 -0
  153. package/src/shared/lib/regexp/escapeSpecialChar.spec.ts +24 -0
  154. package/src/shared/lib/regexp/escapeSpecialChar.ts +4 -0
  155. package/src/shared/lib/regexp/index.ts +2 -0
  156. package/src/shared/lib/slickgrid/index.ts +70 -0
  157. package/src/shared/lib/slickgrid/lib/callbacks/getOnKeyDownCallback.ts +12 -0
  158. package/src/shared/lib/slickgrid/lib/callbacks/index.ts +4 -0
  159. package/src/shared/lib/slickgrid/lib/callbacks/onCellChange.ts +13 -0
  160. package/src/shared/lib/slickgrid/lib/callbacks/onRowCountChanged.ts +12 -0
  161. package/src/shared/lib/slickgrid/lib/callbacks/onRowsChanged.ts +8 -0
  162. package/src/shared/lib/slickgrid/lib/contextMenu/index.ts +1 -0
  163. package/src/shared/lib/slickgrid/lib/contextMenu/openContextMenu.ts +17 -0
  164. package/src/shared/lib/slickgrid/lib/editors/Autocomplete/Autocomplete.ts +155 -0
  165. package/src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorAutocomplete.ts +66 -0
  166. package/src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorSelectWithSearch.ts +79 -0
  167. package/src/shared/lib/slickgrid/lib/editors/Autocomplete/index.ts +3 -0
  168. package/src/shared/lib/slickgrid/lib/editors/EditorAmount.ts +82 -0
  169. package/src/shared/lib/slickgrid/lib/editors/EditorDate.ts +127 -0
  170. package/src/shared/lib/slickgrid/lib/editors/EditorSelectNumber.ts +16 -0
  171. package/src/shared/lib/slickgrid/lib/editors/EditorSelectString.ts +95 -0
  172. package/src/shared/lib/slickgrid/lib/editors/index.ts +9 -0
  173. package/src/shared/lib/slickgrid/lib/formatters/DateFormatter.ts +9 -0
  174. package/src/shared/lib/slickgrid/lib/formatters/FormatterCheck.ts +11 -0
  175. package/src/shared/lib/slickgrid/lib/formatters/PercentFormatter.spec.ts +11 -0
  176. package/src/shared/lib/slickgrid/lib/formatters/PercentFormatter.ts +8 -0
  177. package/src/shared/lib/slickgrid/lib/formatters/StringFormatter.ts +2 -0
  178. package/src/shared/lib/slickgrid/lib/formatters/getFormatterNumber.ts +17 -0
  179. package/src/shared/lib/slickgrid/lib/formatters/index.ts +5 -0
  180. package/src/shared/lib/slickgrid/lib/functions/addNewRow.ts +22 -0
  181. package/src/shared/lib/slickgrid/lib/functions/commitCurrentEdit.ts +6 -0
  182. package/src/shared/lib/slickgrid/lib/functions/copySelectedRows.ts +34 -0
  183. package/src/shared/lib/slickgrid/lib/functions/deleteRows.ts +20 -0
  184. package/src/shared/lib/slickgrid/lib/functions/getActiveRowId.ts +16 -0
  185. package/src/shared/lib/slickgrid/lib/functions/getDisplayedRows.ts +13 -0
  186. package/src/shared/lib/slickgrid/lib/functions/getLastRow.ts +6 -0
  187. package/src/shared/lib/slickgrid/lib/functions/getNextId.ts +18 -0
  188. package/src/shared/lib/slickgrid/lib/functions/index.ts +10 -0
  189. package/src/shared/lib/slickgrid/lib/functions/isDeletionDangerous.ts +21 -0
  190. package/src/shared/lib/slickgrid/lib/functions/wereEdited.ts +12 -0
  191. package/src/shared/lib/slickgrid/lib/grouping/formatterGroupTotals.test.ts +59 -0
  192. package/src/shared/lib/slickgrid/lib/grouping/formatterGroupTotals.ts +21 -0
  193. package/src/shared/lib/slickgrid/lib/grouping/index.ts +1 -0
  194. package/src/shared/lib/slickgrid/lib/highlighting/getColumnsHash.ts +8 -0
  195. package/src/shared/lib/slickgrid/lib/highlighting/highlightCell.ts +21 -0
  196. package/src/shared/lib/slickgrid/lib/highlighting/highlightColumns.ts +24 -0
  197. package/src/shared/lib/slickgrid/lib/highlighting/index.ts +2 -0
  198. package/src/shared/lib/slickgrid/lib/hooks/eventClickOnTable.ts +17 -0
  199. package/src/shared/lib/slickgrid/lib/hooks/index.ts +4 -0
  200. package/src/shared/lib/slickgrid/lib/hooks/useHotKeys.ts +39 -0
  201. package/src/shared/lib/slickgrid/lib/hooks/useListenIfTablesWereEdited.ts +36 -0
  202. package/src/shared/lib/slickgrid/lib/hooks/useResizeCanvas.ts +18 -0
  203. package/src/shared/lib/slickgrid/lib/hooks/useUpdateTotal.ts +17 -0
  204. package/src/shared/lib/slickgrid/lib/hotKeys/hotKeysCopy.ts +7 -0
  205. package/src/shared/lib/slickgrid/lib/hotKeys/hotKeysDelete.ts +7 -0
  206. package/src/shared/lib/slickgrid/lib/hotKeys/hotKeysRedo.ts +7 -0
  207. package/src/shared/lib/slickgrid/lib/hotKeys/hotKeysReverse.ts +7 -0
  208. package/src/shared/lib/slickgrid/lib/hotKeys/hotKeysUndo.ts +7 -0
  209. package/src/shared/lib/slickgrid/lib/hotKeys/index.ts +7 -0
  210. package/src/shared/lib/slickgrid/lib/hotKeys/nothingToCopy.ts +14 -0
  211. package/src/shared/lib/slickgrid/lib/hotKeys/positionToPaste.ts +12 -0
  212. package/src/shared/lib/slickgrid/lib/index.ts +61 -0
  213. package/src/shared/lib/slickgrid/lib/selection/getUpdates.ts +41 -0
  214. package/src/shared/lib/slickgrid/lib/selection/index.ts +2 -0
  215. package/src/shared/lib/slickgrid/lib/selection/selectedRows.ts +17 -0
  216. package/src/shared/lib/slickgrid/lib/sorting/ColumnSorter.ts +166 -0
  217. package/src/shared/lib/slickgrid/lib/sorting/index.ts +1 -0
  218. package/src/shared/lib/slickgrid/lib/total-calculator/TotalCalculator.ts +71 -0
  219. package/src/shared/lib/slickgrid/lib/total-calculator/index.ts +1 -0
  220. package/src/shared/lib/slickgrid/lib/validators/DateValidator.ts +12 -0
  221. package/src/shared/lib/slickgrid/lib/validators/EmptyStringValidator.ts +5 -0
  222. package/src/shared/lib/slickgrid/lib/validators/LengthValidator.ts +7 -0
  223. package/src/shared/lib/slickgrid/lib/validators/index.ts +3 -0
  224. package/src/shared/lib/slickgrid/model/SlickTable/csvDownloadManager/DownloadManager.ts +110 -0
  225. package/src/shared/lib/slickgrid/model/SlickTable/csvDownloadManager/index.ts +1 -0
  226. package/src/shared/lib/slickgrid/model/SlickTable/filters/DeletedRowsFilter.test.ts +36 -0
  227. package/src/shared/lib/slickgrid/model/SlickTable/filters/DeletedRowsFilter.ts +12 -0
  228. package/src/shared/lib/slickgrid/model/SlickTable/filters/Filter.test.ts +80 -0
  229. package/src/shared/lib/slickgrid/model/SlickTable/filters/Filter.ts +52 -0
  230. package/src/shared/lib/slickgrid/model/SlickTable/filters/WithoutFilter.ts +30 -0
  231. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/ColumnFilter/DecoratorColumnFilter.test.ts +216 -0
  232. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/ColumnFilter/DecoratorColumnFilter.ts +53 -0
  233. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/ColumnFilter/Filter.test.ts +264 -0
  234. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/ColumnFilter/Filter.ts +108 -0
  235. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/ColumnFilter/index.ts +1 -0
  236. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/DecoratorEndingDate.ts +16 -0
  237. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/DecoratorFilter.test.ts +139 -0
  238. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/DecoratorFilter.ts +55 -0
  239. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/DecoratorPeriod.ts +24 -0
  240. package/src/shared/lib/slickgrid/model/SlickTable/filters/decorators/index.ts +4 -0
  241. package/src/shared/lib/slickgrid/model/SlickTable/filters/index.ts +9 -0
  242. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/DefaultHotKeys.ts +116 -0
  243. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/WithoutHotKeys.ts +20 -0
  244. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/decorators/HotKeysDecorator.ts +32 -0
  245. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/decorators/PreventCopying.ts +18 -0
  246. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/decorators/RedoUndoOnly.ts +18 -0
  247. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/decorators/WithConfirmationOfDeletion.ts +33 -0
  248. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/decorators/index.ts +4 -0
  249. package/src/shared/lib/slickgrid/model/SlickTable/hotKeys/index.ts +8 -0
  250. package/src/shared/lib/slickgrid/model/SlickTable/index.ts +19 -0
  251. package/src/shared/lib/slickgrid/model/SlickTable/printer/DefaultPrinter.test.ts +226 -0
  252. package/src/shared/lib/slickgrid/model/SlickTable/printer/DefaultPrinter.ts +179 -0
  253. package/src/shared/lib/slickgrid/model/SlickTable/printer/index.ts +1 -0
  254. package/src/shared/lib/slickgrid/model/SlickTable/printer/model/consts/cssStyles.ts +46 -0
  255. package/src/shared/lib/slickgrid/model/SlickTable/printer/model/consts/index.ts +1 -0
  256. package/src/shared/lib/slickgrid/model/SlickTable/printer/model/index.ts +1 -0
  257. package/src/shared/lib/slickgrid/model/SlickTable/table/SlickTable.test.ts +72 -0
  258. package/src/shared/lib/slickgrid/model/SlickTable/table/SlickTable.ts +168 -0
  259. package/src/shared/lib/slickgrid/model/SlickTable/table/index.ts +1 -0
  260. package/src/shared/lib/slickgrid/model/events/eventContextMenu.ts +10 -0
  261. package/src/shared/lib/slickgrid/model/events/index.ts +1 -0
  262. package/src/shared/lib/slickgrid/model/index.ts +18 -0
  263. package/src/shared/lib/slickgrid/ui/HeaderButtons/index.ts +2 -0
  264. package/src/shared/lib/slickgrid/ui/HeaderButtons/lib/handleClick/handleHeaderButtons.ts +27 -0
  265. package/src/shared/lib/slickgrid/ui/HeaderButtons/lib/handleClick/index.ts +1 -0
  266. package/src/shared/lib/slickgrid/ui/HeaderButtons/lib/highlighting/headerButtons.ts +45 -0
  267. package/src/shared/lib/slickgrid/ui/HeaderButtons/lib/highlighting/index.ts +1 -0
  268. package/src/shared/lib/slickgrid/ui/HeaderButtons/lib/index.ts +2 -0
  269. package/src/shared/lib/slickgrid/ui/HeaderButtons/model/buttons/index.ts +1 -0
  270. package/src/shared/lib/slickgrid/ui/HeaderButtons/model/buttons/openColumnFilter.ts +10 -0
  271. package/src/shared/lib/slickgrid/ui/HeaderButtons/model/event/eventOpenColumnFilters.ts +13 -0
  272. package/src/shared/lib/slickgrid/ui/HeaderButtons/model/event/index.ts +1 -0
  273. package/src/shared/lib/slickgrid/ui/HeaderButtons/model/index.ts +2 -0
  274. package/src/shared/lib/slickgrid/ui/SlickgridTable/index.ts +1 -0
  275. package/src/shared/lib/slickgrid/ui/SlickgridTable/lib/callbacks/index.ts +1 -0
  276. package/src/shared/lib/slickgrid/ui/SlickgridTable/lib/callbacks/onAddNewRow.ts +34 -0
  277. package/src/shared/lib/slickgrid/ui/SlickgridTable/lib/hooks/index.ts +1 -0
  278. package/src/shared/lib/slickgrid/ui/SlickgridTable/lib/hooks/useGrid.ts +142 -0
  279. package/src/shared/lib/slickgrid/ui/SlickgridTable/lib/index.ts +2 -0
  280. package/src/shared/lib/slickgrid/ui/SlickgridTable/model/defaultOptions.ts +8 -0
  281. package/src/shared/lib/slickgrid/ui/SlickgridTable/model/index.ts +2 -0
  282. package/src/shared/lib/slickgrid/ui/SlickgridTable/model/types/Props.ts +46 -0
  283. package/src/shared/lib/slickgrid/ui/SlickgridTable/model/types/index.ts +1 -0
  284. package/src/shared/lib/slickgrid/ui/SlickgridTable/ui/SlickgridTable.tsx +57 -0
  285. package/src/shared/lib/slickgrid/ui/SlickgridTable/ui/index.ts +1 -0
  286. package/src/shared/lib/slickgrid/ui/columns/columnCheckboxSelector/columnCheckboxSelector.ts +7 -0
  287. package/src/shared/lib/slickgrid/ui/columns/columnCheckboxSelector/index.ts +1 -0
  288. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/index.ts +1 -0
  289. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/lib/index.ts +1 -0
  290. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/lib/setEditedMark.spec.ts +11 -0
  291. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/lib/setEditedMark.ts +7 -0
  292. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/ui/columnIsEdited.ts +16 -0
  293. package/src/shared/lib/slickgrid/ui/columns/columnIsEdited/ui/index.ts +1 -0
  294. package/src/shared/lib/slickgrid/ui/columns/index.ts +2 -0
  295. package/src/shared/lib/slickgrid/ui/index.ts +9 -0
  296. package/src/shared/lib/slickgrid/ui/styles/WithTableStyles/WithTableStyles.style.ts +157 -0
  297. package/src/shared/lib/slickgrid/ui/styles/WithTableStyles/WithTableStyles.tsx +11 -0
  298. package/src/shared/lib/slickgrid/ui/styles/WithTableStyles/index.ts +1 -0
  299. package/src/shared/lib/slickgrid/ui/styles/index.ts +1 -0
  300. package/src/shared/lib/slickgrid/ui/styles/keyframes/index.ts +1 -0
  301. package/src/shared/lib/slickgrid/ui/styles/keyframes/wink.ts +7 -0
  302. package/src/shared/lib/sorting/Sort.ts +37 -0
  303. package/src/shared/lib/sorting/index.ts +1 -0
  304. package/src/shared/lib/stringCalculator/index.ts +2 -0
  305. package/src/shared/lib/stringCalculator/stringCalculator.js +834 -0
  306. package/src/shared/lib/stringCalculator/stringCalculator.spec.ts +16 -0
  307. package/src/shared/lib/strings/deleteDoubleQuotes.spec.ts +11 -0
  308. package/src/shared/lib/strings/deleteDoubleQuotes.ts +5 -0
  309. package/src/shared/lib/strings/index.ts +3 -0
  310. package/src/shared/lib/strings/removeHtml.spec.ts +29 -0
  311. package/src/shared/lib/strings/removeHtml.ts +5 -0
  312. package/src/shared/lib/strings/toStringWithCommas.spec.ts +16 -0
  313. package/src/shared/lib/strings/toStringWithCommas.ts +15 -0
  314. package/src/shared/model/consts/columnId.ts +1 -0
  315. package/src/shared/model/consts/dateFormats.ts +5 -0
  316. package/src/shared/model/consts/index.ts +4 -0
  317. package/src/shared/model/consts/invalidDate.ts +1 -0
  318. package/src/shared/model/consts/noPrivilegesMessage.ts +1 -0
  319. package/src/shared/model/enums/EColumnFilter.ts +16 -0
  320. package/src/shared/model/enums/EColumnFiltersGroup.ts +10 -0
  321. package/src/shared/model/enums/EDateFormat.ts +11 -0
  322. package/src/shared/model/enums/EKey.ts +9 -0
  323. package/src/shared/model/enums/EKeyCode.ts +8 -0
  324. package/src/shared/model/enums/ESortType.ts +17 -0
  325. package/src/shared/model/enums/index.ts +6 -0
  326. package/src/shared/model/types/IColumn.ts +11 -0
  327. package/src/shared/model/types/IColumnFilterValue.ts +4 -0
  328. package/src/shared/model/types/IDownloadManager.ts +6 -0
  329. package/src/shared/model/types/IEditedRow.ts +5 -0
  330. package/src/shared/model/types/IExternalVariables.ts +1 -0
  331. package/src/shared/model/types/IFilter.ts +17 -0
  332. package/src/shared/model/types/IFilterArguments.ts +14 -0
  333. package/src/shared/model/types/IGrouping.ts +12 -0
  334. package/src/shared/model/types/IHotKeysBehavior.ts +15 -0
  335. package/src/shared/model/types/IObserver.ts +3 -0
  336. package/src/shared/model/types/IPrinter.ts +24 -0
  337. package/src/shared/model/types/ISlickRow.ts +1 -0
  338. package/src/shared/model/types/ISlickTable.ts +41 -0
  339. package/src/shared/model/types/ITotalCalculator.ts +5 -0
  340. package/src/shared/model/types/TGridRow.ts +6 -0
  341. package/src/shared/model/types/index.ts +15 -0
  342. package/src/shared/ui/ContextSelect/ContextSelect.style.ts +9 -0
  343. package/src/shared/ui/ContextSelect/ContextSelect.tsx +87 -0
  344. package/src/shared/ui/ContextSelect/index.ts +2 -0
  345. package/src/shared/ui/notification/index.ts +1 -0
  346. package/src/shared/ui/notification/model/index.ts +1 -0
  347. package/src/shared/ui/notification/ui/index.style.ts +13 -0
  348. package/src/shared/ui/notification/ui/index.tsx +41 -0
  349. package/src/shared/ui/styles/WithDatePickerStyles.ts +11 -0
  350. package/src/shared/ui/styles/index.ts +1 -0
  351. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,216 @@
1
+ import { SlickGrid } from "slickgrid";
2
+
3
+ import { headerButtons } from "shared/lib/slickgrid";
4
+ import { EColumnFilter, EColumnFiltersGroup } from "shared/model/enums";
5
+ import { IFilter } from "shared/model/types";
6
+
7
+ import { DecoratorColumnFilter } from "./DecoratorColumnFilter";
8
+ import { filter } from "./Filter";
9
+
10
+ jest.mock("app/store/store");
11
+
12
+ describe("DecoratorColumnFilter", () => {
13
+ let decoratorColumnFilter: DecoratorColumnFilter;
14
+ let mockFilter: IFilter;
15
+
16
+ beforeEach(() => {
17
+ mockFilter = {
18
+ getFilterFn: jest.fn(),
19
+ reset: jest.fn(),
20
+ print: jest.fn(),
21
+ args: {},
22
+ grid: {} as SlickGrid,
23
+ tableId: "test-table",
24
+ } as unknown as IFilter;
25
+ decoratorColumnFilter = new DecoratorColumnFilter(mockFilter);
26
+ });
27
+
28
+ it("should return true when args.columnFilters is undefined", () => {
29
+ const item = { id: 1, name: "Test" };
30
+ const args: any = {};
31
+
32
+ const result = decoratorColumnFilter.filterFn(item, args);
33
+
34
+ expect(result).toBe(true);
35
+ });
36
+
37
+ it("should return true when the grid is not available", () => {
38
+ const item = { id: 1, name: "Test" };
39
+ const args = {
40
+ columnFilters: {
41
+ name: {
42
+ filterId: EColumnFilter.TextContain,
43
+ group: EColumnFiltersGroup.Text,
44
+ value: { 1: "Test", 2: "" },
45
+ },
46
+ },
47
+ };
48
+ decoratorColumnFilter.grid = null;
49
+
50
+ const result = decoratorColumnFilter.filterFn(item, args);
51
+
52
+ expect(result).toBe(true);
53
+ });
54
+
55
+ it("should correctly apply filters for boolean column types", () => {
56
+ const mockGrid = {
57
+ getColumns: jest.fn(() => [{ id: "isActive", field: "isActive" }]),
58
+ getColumnIndex: jest.fn(() => 0),
59
+ } as unknown as SlickGrid;
60
+ decoratorColumnFilter.grid = mockGrid;
61
+
62
+ const item = { isActive: true };
63
+ const args = {
64
+ columnFilters: {
65
+ isActive: {
66
+ filterId: EColumnFilter.Boolean,
67
+ group: EColumnFiltersGroup.Boolean,
68
+ value: { 1: "true", 2: "" },
69
+ },
70
+ },
71
+ };
72
+
73
+ const result = decoratorColumnFilter.filterFn(item, args);
74
+
75
+ expect(result).toBe(true);
76
+ expect(mockGrid.getColumns).toHaveBeenCalled();
77
+ expect(mockGrid.getColumnIndex).toHaveBeenCalledWith("isActive");
78
+ });
79
+
80
+ it("should return false if any column filter fails", () => {
81
+ const mockGrid = {
82
+ getColumns: jest.fn(() => [
83
+ { id: "name", field: "name" },
84
+ { id: "age", field: "age" },
85
+ ]),
86
+ getColumnIndex: jest.fn((id) => (id === "name" ? 0 : 1)),
87
+ } as unknown as SlickGrid;
88
+ decoratorColumnFilter.grid = mockGrid;
89
+
90
+ const item = { name: "John", age: 30 };
91
+ const args = {
92
+ columnFilters: {
93
+ name: {
94
+ filterId: EColumnFilter.TextContain,
95
+ group: EColumnFiltersGroup.Text,
96
+ value: { 1: "John", 2: "" },
97
+ },
98
+ age: {
99
+ filterId: EColumnFilter.NumberFrom,
100
+ group: EColumnFiltersGroup.Number,
101
+ value: { 1: "40", 2: "" },
102
+ },
103
+ },
104
+ };
105
+
106
+ jest
107
+ .spyOn(filter, "passed")
108
+ .mockReturnValueOnce(true) // For name filter
109
+ .mockReturnValueOnce(false); // For age filter
110
+
111
+ const result = decoratorColumnFilter.filterFn(item, args);
112
+
113
+ expect(result).toBe(false);
114
+ expect(mockGrid.getColumns).toHaveBeenCalled();
115
+ expect(mockGrid.getColumnIndex).toHaveBeenCalledWith("name");
116
+ expect(mockGrid.getColumnIndex).toHaveBeenCalledWith("age");
117
+ expect(filter.passed).toHaveBeenCalledTimes(2);
118
+ });
119
+
120
+ it("should use the formatter function for non-boolean and non-number column types", () => {
121
+ const mockGrid = {
122
+ getColumns: jest.fn(() => [
123
+ {
124
+ id: "name",
125
+ field: "name",
126
+ formatter: (_row: number, _cell: number, value: string) =>
127
+ `Formatted: ${value}`,
128
+ },
129
+ { id: "age", field: "age" },
130
+ ]),
131
+ getColumnIndex: jest.fn((id) => (id === "name" ? 0 : 1)),
132
+ } as unknown as SlickGrid;
133
+ decoratorColumnFilter.grid = mockGrid;
134
+
135
+ const item = { name: "John", age: 30 };
136
+ const args = {
137
+ columnFilters: {
138
+ name: {
139
+ filterId: EColumnFilter.TextContain,
140
+ group: EColumnFiltersGroup.Text,
141
+ value: { 1: "Formatted: John", 2: "" },
142
+ },
143
+ age: {
144
+ filterId: EColumnFilter.NumberFrom,
145
+ group: EColumnFiltersGroup.Number,
146
+ value: { 1: "30", 2: "" },
147
+ },
148
+ },
149
+ };
150
+
151
+ jest.spyOn(filter, "passed").mockReturnValue(true);
152
+
153
+ decoratorColumnFilter.filterFn(item, args);
154
+
155
+ expect(filter.passed).toHaveBeenCalledWith(
156
+ "Formatted: John",
157
+ { 1: "Formatted: John", 2: "" },
158
+ EColumnFilter.TextContain,
159
+ );
160
+ expect(filter.passed).toHaveBeenCalledWith(
161
+ 30,
162
+ { 1: "30", 2: "" },
163
+ EColumnFilter.NumberFrom,
164
+ );
165
+ });
166
+
167
+ it("should correctly reset filters and highlight all columns", () => {
168
+ const mockFilter = {
169
+ reset: jest.fn(),
170
+ };
171
+ const mockHeaderButtons = {
172
+ highlightAllColumns: jest.fn(),
173
+ };
174
+ const mockArgs = { someArg: "value" };
175
+ const mockTableId = "test-table";
176
+
177
+ jest
178
+ .spyOn(headerButtons, "highlightAllColumns")
179
+ .mockImplementation(mockHeaderButtons.highlightAllColumns);
180
+
181
+ const decoratorColumnFilter = new DecoratorColumnFilter(mockFilter as any);
182
+ decoratorColumnFilter.args = mockArgs;
183
+ decoratorColumnFilter.tableId = mockTableId;
184
+
185
+ decoratorColumnFilter.reset();
186
+
187
+ expect(mockFilter.reset).toHaveBeenCalled();
188
+ expect(mockHeaderButtons.highlightAllColumns).toHaveBeenCalledWith(
189
+ mockArgs,
190
+ mockTableId,
191
+ );
192
+ });
193
+ it("should correctly reset filters and highlight all columns", () => {
194
+ const mockFilter = {
195
+ reset: jest.fn(),
196
+ };
197
+ const mockHeaderButtons = {
198
+ highlightAllColumns: jest.fn(),
199
+ };
200
+ const mockArgs = { someArg: "value" };
201
+ const mockTableId = "";
202
+
203
+ jest
204
+ .spyOn(headerButtons, "highlightAllColumns")
205
+ .mockImplementation(mockHeaderButtons.highlightAllColumns);
206
+
207
+ const decoratorColumnFilter = new DecoratorColumnFilter(mockFilter as any);
208
+ decoratorColumnFilter.args = mockArgs;
209
+ decoratorColumnFilter.tableId = mockTableId;
210
+
211
+ decoratorColumnFilter.reset();
212
+
213
+ expect(mockFilter.reset).toHaveBeenCalled();
214
+ expect(mockHeaderButtons.highlightAllColumns).not.toHaveBeenCalled();
215
+ });
216
+ });
@@ -0,0 +1,53 @@
1
+ import { EColumnFilter, EColumnFiltersGroup } from "shared/model/enums";
2
+ import { IColumnFilterValue } from "shared/model/types";
3
+
4
+ import { headerButtons } from "../../../../../ui";
5
+ import { DecoratorFilter } from "../DecoratorFilter";
6
+ import { filter } from "./Filter";
7
+
8
+ const formatterNotNeeded: EColumnFiltersGroup[] = [
9
+ EColumnFiltersGroup.Date,
10
+ EColumnFiltersGroup.Boolean,
11
+ EColumnFiltersGroup.Number,
12
+ ];
13
+
14
+ export class DecoratorColumnFilter extends DecoratorFilter {
15
+ public filterFn(item: Record<string, any>, args: IArgs) {
16
+ if (!args.columnFilters) return true;
17
+ const grid = this.grid;
18
+ if (!grid) return true;
19
+ const columns = grid.getColumns();
20
+ const columnIds = Object.keys(args.columnFilters);
21
+ for (let i = 0; i < columnIds.length; i++) {
22
+ const columnId = columnIds[i];
23
+ const column = columns[grid.getColumnIndex(columnId)];
24
+ const { filterId, group, value } = args.columnFilters[columnId];
25
+ let cellValue = item[column?.field];
26
+ if (!formatterNotNeeded.includes(group)) {
27
+ const formatter = column?.formatter;
28
+ if (formatter)
29
+ cellValue = formatter(0, 0, cellValue, column, item, grid);
30
+ }
31
+ if (!filter.passed(cellValue, value, filterId)) {
32
+ return false;
33
+ }
34
+ }
35
+ return true;
36
+ }
37
+ public reset() {
38
+ this.filter.reset();
39
+ if (this.tableId)
40
+ headerButtons.highlightAllColumns(this.args, this.tableId);
41
+ }
42
+ }
43
+
44
+ interface IArgs {
45
+ columnFilters?: Record<
46
+ string,
47
+ {
48
+ filterId: EColumnFilter;
49
+ group: EColumnFiltersGroup;
50
+ value: IColumnFilterValue;
51
+ }
52
+ >;
53
+ }
@@ -0,0 +1,264 @@
1
+ import { EColumnFilter } from "shared/model/enums";
2
+
3
+ import { filter } from "./Filter";
4
+
5
+ describe("Filter", () => {
6
+ const spring = "2024-03-20",
7
+ summer = "2024-06-21",
8
+ automn = "2024-09-23",
9
+ winter = "2024-12-21";
10
+
11
+ it("should filter EColumnFilter.Boolean", () => {
12
+ const trueResult = filter.passed(
13
+ "1",
14
+ { 1: "true", 2: "" },
15
+ EColumnFilter.Boolean,
16
+ );
17
+ const falseResult = filter.passed(
18
+ "0",
19
+ { 1: "", 2: "false" },
20
+ EColumnFilter.Boolean,
21
+ );
22
+ const falseResult_ = filter.passed(
23
+ "10",
24
+ { 1: "", 2: "false" },
25
+ EColumnFilter.Boolean,
26
+ );
27
+ const emptyResult = filter.passed(
28
+ "",
29
+ { 1: "", 2: "false" },
30
+ EColumnFilter.Boolean,
31
+ );
32
+ const defaultResult = filter.passed(
33
+ "0",
34
+ { 1: "", 2: "" },
35
+ EColumnFilter.Boolean,
36
+ );
37
+
38
+ expect(trueResult).toBe(true);
39
+ expect(falseResult).toBe(true);
40
+ expect(falseResult_).toBe(false);
41
+ expect(emptyResult).toBe(true);
42
+ expect(defaultResult).toBe(true);
43
+ });
44
+
45
+ it("should filter EColumnFilter.DateBetween", () => {
46
+ const between = filter.passed(
47
+ summer,
48
+ { 1: spring, 2: automn },
49
+ EColumnFilter.DateBetween,
50
+ );
51
+ const before = filter.passed(
52
+ summer,
53
+ { 1: automn, 2: winter },
54
+ EColumnFilter.DateBetween,
55
+ );
56
+ const after = filter.passed(
57
+ winter,
58
+ { 1: spring, 2: automn },
59
+ EColumnFilter.DateBetween,
60
+ );
61
+
62
+ const before2 = filter.passed(
63
+ winter,
64
+ { 1: spring, 2: "" },
65
+ EColumnFilter.DateBetween,
66
+ );
67
+ const after2 = filter.passed(
68
+ winter,
69
+ { 1: "", 2: automn },
70
+ EColumnFilter.DateBetween,
71
+ );
72
+
73
+ expect(between).toBe(true);
74
+ expect(before).toBe(false);
75
+ expect(after).toBe(false);
76
+ expect(before2).toBe(true);
77
+ expect(after2).toBe(false);
78
+ });
79
+
80
+ it("should filter EColumnFilter.DateEqual", () => {
81
+ const dateEqual = filter.passed(
82
+ summer,
83
+ { 1: summer, 2: "" },
84
+ EColumnFilter.DateEqual,
85
+ );
86
+ const dateNotEqual = filter.passed(
87
+ summer,
88
+ { 1: winter, 2: "" },
89
+ EColumnFilter.DateEqual,
90
+ );
91
+
92
+ expect(dateEqual).toBe(true);
93
+ expect(dateNotEqual).toBe(false);
94
+ });
95
+
96
+ it("should filter EColumnFilter.DateTo", () => {
97
+ const dateBefore = filter.passed(
98
+ spring,
99
+ { 1: summer, 2: "" },
100
+ EColumnFilter.DateTo,
101
+ );
102
+ const sameDay = filter.passed(
103
+ summer,
104
+ { 1: summer, 2: "" },
105
+ EColumnFilter.DateTo,
106
+ );
107
+ const dateAfter = filter.passed(
108
+ summer,
109
+ { 1: spring, 2: "" },
110
+ EColumnFilter.DateTo,
111
+ );
112
+
113
+ expect(dateBefore).toBe(true);
114
+ expect(sameDay).toBe(true);
115
+ expect(dateAfter).toBe(false);
116
+ });
117
+
118
+ it("should filter EColumnFilter.DateFrom", () => {
119
+ const dateBefore = filter.passed(
120
+ spring,
121
+ { 1: summer, 2: "" },
122
+ EColumnFilter.DateFrom,
123
+ );
124
+ const sameDay = filter.passed(
125
+ summer,
126
+ { 1: summer, 2: "" },
127
+ EColumnFilter.DateFrom,
128
+ );
129
+ const dateAfter = filter.passed(
130
+ summer,
131
+ { 1: spring, 2: "" },
132
+ EColumnFilter.DateFrom,
133
+ );
134
+
135
+ expect(dateBefore).toBe(false);
136
+ expect(sameDay).toBe(true);
137
+ expect(dateAfter).toBe(true);
138
+ });
139
+
140
+ it("should filter EColumnFilter.NumberBetween", () => {
141
+ const value = { 1: "25", 2: "75" };
142
+ const result1 = filter.passed("50", value, EColumnFilter.NumberBetween);
143
+ const result2 = filter.passed("20", value, EColumnFilter.NumberBetween);
144
+ const result3 = filter.passed("80", value, EColumnFilter.NumberBetween);
145
+
146
+ const result4 = filter.passed(
147
+ "20",
148
+ { 1: "", 2: "50" },
149
+ EColumnFilter.NumberBetween,
150
+ );
151
+
152
+ const result5 = filter.passed(
153
+ "20",
154
+ { 1: "10", 2: "" },
155
+ EColumnFilter.NumberBetween,
156
+ );
157
+
158
+ expect(result1).toBe(true);
159
+ expect(result2).toBe(false);
160
+ expect(result3).toBe(false);
161
+ expect(result4).toBe(true);
162
+ expect(result5).toBe(true);
163
+ });
164
+
165
+ it("should filter EColumnFilter.NumberFrom", () => {
166
+ const value = { 1: "25", 2: "" };
167
+ const result1 = filter.passed("50", value, EColumnFilter.NumberFrom);
168
+ const result2 = filter.passed("25", value, EColumnFilter.NumberFrom);
169
+ const result3 = filter.passed("20", value, EColumnFilter.NumberFrom);
170
+
171
+ expect(result1).toBe(true);
172
+ expect(result2).toBe(true);
173
+ expect(result3).toBe(false);
174
+ });
175
+
176
+ it("should filter EColumnFilter.NumberTo", () => {
177
+ const value = { 1: "25", 2: "" };
178
+ const result1 = filter.passed("50", value, EColumnFilter.NumberTo);
179
+ const result2 = filter.passed("25", value, EColumnFilter.NumberTo);
180
+ const result3 = filter.passed("20", value, EColumnFilter.NumberTo);
181
+
182
+ expect(result1).toBe(false);
183
+ expect(result2).toBe(true);
184
+ expect(result3).toBe(true);
185
+ });
186
+
187
+ it("should filter EColumnFilter.NumberEqual", () => {
188
+ const value = { 1: "25", 2: "" };
189
+ const result1 = filter.passed("50", value, EColumnFilter.NumberEqual);
190
+ const result2 = filter.passed("25", value, EColumnFilter.NumberEqual);
191
+ const result3 = filter.passed("20", value, EColumnFilter.NumberEqual);
192
+
193
+ expect(result1).toBe(false);
194
+ expect(result2).toBe(true);
195
+ expect(result3).toBe(false);
196
+ });
197
+
198
+ it("should filter EColumnFilter.TextEqual", () => {
199
+ const value = { 1: "hello world", 2: "" };
200
+ const result1 = filter.passed(
201
+ "Hello World",
202
+ value,
203
+ EColumnFilter.TextEqual,
204
+ );
205
+ const result2 = filter.passed(
206
+ "HELLO WORLD",
207
+ value,
208
+ EColumnFilter.TextEqual,
209
+ );
210
+ const result3 = filter.passed(
211
+ "Goodbye World",
212
+ value,
213
+ EColumnFilter.TextEqual,
214
+ );
215
+
216
+ expect(result1).toBe(true);
217
+ expect(result2).toBe(true);
218
+ expect(result3).toBe(false);
219
+ });
220
+
221
+ it("should filter EColumnFilter.TextNotEqual", () => {
222
+ const value = { 1: "hello world", 2: "" };
223
+ const result1 = filter.passed(
224
+ "Hello World",
225
+ value,
226
+ EColumnFilter.TextNotEqual,
227
+ );
228
+ const result2 = filter.passed(
229
+ "HELLO WORLD",
230
+ value,
231
+ EColumnFilter.TextNotEqual,
232
+ );
233
+ const result3 = filter.passed(
234
+ "Goodbye World",
235
+ value,
236
+ EColumnFilter.TextNotEqual,
237
+ );
238
+
239
+ expect(result1).toBe(false);
240
+ expect(result2).toBe(false);
241
+ expect(result3).toBe(true);
242
+ });
243
+
244
+ it("should filter EColumnFilter.TextContain (returns an array of matching string)", () => {
245
+ const string = "any value",
246
+ matching = "an";
247
+ const result = filter.passed(
248
+ string,
249
+ { 1: matching, 2: "" },
250
+ EColumnFilter.TextContain,
251
+ );
252
+
253
+ expect(result).toBeTruthy();
254
+ });
255
+
256
+ it("should filter EColumnFilter.TextNotContain", () => {
257
+ const result = filter.passed(
258
+ "any value",
259
+ { 1: " val", 2: "" },
260
+ EColumnFilter.TextNotContain,
261
+ );
262
+ expect(result).toBe(false);
263
+ });
264
+ });
@@ -0,0 +1,108 @@
1
+ import { getTime } from "shared/lib/datetime";
2
+ import { EColumnFilter } from "shared/model/enums";
3
+ import { IColumnFilterValue } from "shared/model/types";
4
+
5
+ class Filter {
6
+ passed(
7
+ cellValue: string,
8
+ value: IColumnFilterValue,
9
+ filterId: EColumnFilter,
10
+ ) {
11
+ if (!value[1] && !value[2]) return true;
12
+ switch (filterId) {
13
+ case EColumnFilter.Boolean: {
14
+ return this.boolean(cellValue, value);
15
+ }
16
+ case EColumnFilter.DateBetween: {
17
+ return this.dateBetween(cellValue, value);
18
+ }
19
+ case EColumnFilter.DateEqual: {
20
+ return this.dateEqual(cellValue, value[1]);
21
+ }
22
+ case EColumnFilter.DateFrom: {
23
+ return this.dateFrom(cellValue, value[1]);
24
+ }
25
+ case EColumnFilter.DateTo: {
26
+ return this.dateTo(cellValue, value[1]);
27
+ }
28
+ case EColumnFilter.MultipleSelect: {
29
+ return this.multipleSelect(cellValue, value[1]);
30
+ }
31
+ case EColumnFilter.NumberBetween: {
32
+ return this.numberBetween(cellValue, value);
33
+ }
34
+ case EColumnFilter.NumberEqual: {
35
+ return this.numberEqual(cellValue, value[1]);
36
+ }
37
+ case EColumnFilter.NumberFrom: {
38
+ return this.numberFrom(cellValue, value[1]);
39
+ }
40
+ case EColumnFilter.NumberTo: {
41
+ return this.numberTo(cellValue, value[1]);
42
+ }
43
+ case EColumnFilter.TextContain: {
44
+ return this.textContain(cellValue, value[1]);
45
+ }
46
+ case EColumnFilter.TextEqual: {
47
+ return this.textEqual(cellValue, value[1]);
48
+ }
49
+ case EColumnFilter.TextNotContain: {
50
+ return !this.textContain(cellValue, value[1]);
51
+ }
52
+ case EColumnFilter.TextNotEqual: {
53
+ return !this.textEqual(cellValue, value[1]);
54
+ }
55
+ }
56
+ }
57
+
58
+ boolean(cellValue: string, value: IColumnFilterValue) {
59
+ if (value[1]) return Boolean(cellValue);
60
+ if (value[2]) return !cellValue;
61
+ return true;
62
+ }
63
+ dateBetween(cellValue: string, value: IColumnFilterValue) {
64
+ const from = value[1];
65
+ const to = value[2];
66
+ if (!from) return this.dateTo(cellValue, to);
67
+ if (!to) return this.dateFrom(cellValue, from);
68
+ return this.dateFrom(cellValue, from) && this.dateTo(cellValue, to);
69
+ }
70
+ dateEqual(cellValue: string, filter: string) {
71
+ return filter === cellValue;
72
+ }
73
+ dateFrom(cellValue: string, filter: string) {
74
+ return getTime(cellValue) >= getTime(filter);
75
+ }
76
+ dateTo(cellValue: string, filter: string) {
77
+ return getTime(cellValue) <= getTime(filter);
78
+ }
79
+ multipleSelect(cellValue: string, filter: string) {
80
+ const array = JSON.parse(filter) as (number | string)[];
81
+ if (array.includes("All")) return true;
82
+ return array.includes(cellValue);
83
+ }
84
+ numberBetween(cellValue: string, value: IColumnFilterValue) {
85
+ const from = value[1] || 0;
86
+ const to = value[2] || 0;
87
+ if (!from) return Number(cellValue) <= Number(to);
88
+ if (!to) return Number(cellValue) >= Number(from);
89
+ return this.numberFrom(cellValue, from) && this.numberTo(cellValue, to);
90
+ }
91
+ numberEqual(cellValue: string, filter: string) {
92
+ return Number(filter) === Number(cellValue);
93
+ }
94
+ numberFrom(cellValue: string, filter: string) {
95
+ return Number(cellValue) >= Number(filter);
96
+ }
97
+ numberTo(cellValue: string, filter: string) {
98
+ return Number(cellValue) <= Number(filter);
99
+ }
100
+ textEqual(cellValue: string, filter: string) {
101
+ return (cellValue || "").toLowerCase() === filter.toLowerCase();
102
+ }
103
+ textContain(cellValue: string, filter: string) {
104
+ return (cellValue || "").toLowerCase().match(filter.toLowerCase());
105
+ }
106
+ }
107
+
108
+ export const filter = new Filter();
@@ -0,0 +1 @@
1
+ export { DecoratorColumnFilter } from "./DecoratorColumnFilter";
@@ -0,0 +1,16 @@
1
+ import { getTime } from "shared/lib/datetime";
2
+ import { ISlickRow } from "shared/model/types";
3
+
4
+ import { DecoratorFilter } from "./DecoratorFilter";
5
+
6
+ export class DecoratorEndingDate extends DecoratorFilter {
7
+ filterFn(row: ISlickRow, args: IArguments): boolean {
8
+ const { endingDate } = args;
9
+ if (!endingDate) return true;
10
+ return getTime(row.date) <= getTime(endingDate);
11
+ }
12
+ }
13
+
14
+ interface IArguments {
15
+ endingDate?: string;
16
+ }