@revolist/revogrid 4.9.4 → 4.9.6

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 (203) hide show
  1. package/dist/cjs/{column.service-01f4a6c7.js → column.service-0615a373.js} +11 -12
  2. package/dist/cjs/column.service-0615a373.js.map +1 -0
  3. package/dist/cjs/{base.plugin-bf5f43a0.js → column.utils-694677fa.js} +136 -11
  4. package/dist/cjs/column.utils-694677fa.js.map +1 -0
  5. package/dist/cjs/edit.utils-2e1f4278.js +20 -0
  6. package/dist/cjs/edit.utils-2e1f4278.js.map +1 -0
  7. package/dist/cjs/{events-b28cc194.js → events-af8f6914.js} +1 -8
  8. package/dist/cjs/events-af8f6914.js.map +1 -0
  9. package/dist/cjs/{header-cell-renderer-3bc70679.js → header-cell-renderer-360528aa.js} +2 -2
  10. package/dist/cjs/{header-cell-renderer-3bc70679.js.map → header-cell-renderer-360528aa.js.map} +1 -1
  11. package/dist/cjs/{dimension.helpers-a6788214.js → index-2991afbb.js} +262 -4
  12. package/dist/cjs/index-2991afbb.js.map +1 -0
  13. package/dist/cjs/index.cjs.js +97 -35
  14. package/dist/cjs/index.cjs.js.map +1 -1
  15. package/dist/cjs/key.utils-b84b0eba.js +111 -0
  16. package/dist/cjs/key.utils-b84b0eba.js.map +1 -0
  17. package/dist/cjs/revo-grid.cjs.entry.js +140 -311
  18. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  19. package/dist/cjs/revogr-attribution_6.cjs.entry.js +37 -37
  20. package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -1
  21. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +10 -10
  22. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  23. package/dist/cjs/revogr-data_4.cjs.entry.js +13 -14
  24. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  25. package/dist/cjs/{viewport.store-35a3e7ee.js → row-header-utils-b5266b12.js} +13 -6
  26. package/dist/cjs/row-header-utils-b5266b12.js.map +1 -0
  27. package/dist/cjs/{selection.helpers-1a8c8d49.js → selection.helpers-4374518f.js} +13 -13
  28. package/dist/cjs/selection.helpers-4374518f.js.map +1 -0
  29. package/dist/cjs/{throttle-52be9e67.js → throttle-8885fd65.js} +2 -2
  30. package/dist/cjs/{throttle-52be9e67.js.map → throttle-8885fd65.js.map} +1 -1
  31. package/dist/collection/components/clipboard/revogr-clipboard.js +2 -2
  32. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
  33. package/dist/collection/components/editors/revogr-edit.js +1 -1
  34. package/dist/collection/components/header/revogr-header.js +1 -1
  35. package/dist/collection/components/overlay/revogr-overlay-selection.js +1 -1
  36. package/dist/collection/components/revoGrid/revo-grid.js +12 -11
  37. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  38. package/dist/collection/index.js +1 -1
  39. package/dist/collection/index.js.map +1 -1
  40. package/dist/collection/plugins/base.plugin.js.map +1 -1
  41. package/dist/collection/plugins/column.auto-size.plugin.js +2 -2
  42. package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -1
  43. package/dist/collection/plugins/column.stretch.plugin.js.map +1 -1
  44. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -1
  45. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +1 -1
  46. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -1
  47. package/dist/collection/plugins/sorting/sorting.plugin.js +2 -2
  48. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  49. package/dist/collection/services/column.data.provider.js +32 -88
  50. package/dist/collection/services/column.data.provider.js.map +1 -1
  51. package/dist/collection/services/dimension.provider.js +2 -2
  52. package/dist/collection/services/dimension.provider.js.map +1 -1
  53. package/dist/collection/types/interfaces.js.map +1 -1
  54. package/dist/collection/utils/column.utils.js +124 -0
  55. package/dist/collection/utils/column.utils.js.map +1 -0
  56. package/dist/collection/utils/index.js +7 -0
  57. package/dist/collection/utils/index.js.map +1 -1
  58. package/dist/esm/{column.service-5d14e7e9.js → column.service-af0694c5.js} +3 -4
  59. package/dist/esm/column.service-af0694c5.js.map +1 -0
  60. package/dist/esm/{base.plugin-5e7a3c51.js → column.utils-78dd3ef2.js} +122 -3
  61. package/dist/esm/column.utils-78dd3ef2.js.map +1 -0
  62. package/dist/esm/edit.utils-ca303802.js +17 -0
  63. package/dist/esm/edit.utils-ca303802.js.map +1 -0
  64. package/dist/esm/{events-77b43b40.js → events-cf0893a3.js} +2 -8
  65. package/dist/esm/events-cf0893a3.js.map +1 -0
  66. package/dist/esm/{header-cell-renderer-fc999784.js → header-cell-renderer-261317c3.js} +2 -2
  67. package/dist/esm/{header-cell-renderer-fc999784.js.map → header-cell-renderer-261317c3.js.map} +1 -1
  68. package/dist/esm/{dimension.helpers-56298828.js → index-f65def08.js} +231 -4
  69. package/dist/esm/index-f65def08.js.map +1 -0
  70. package/dist/esm/index.js +5 -4
  71. package/dist/esm/index.js.map +1 -1
  72. package/dist/esm/key.utils-4b0093d5.js +98 -0
  73. package/dist/esm/key.utils-4b0093d5.js.map +1 -0
  74. package/dist/esm/revo-grid.entry.js +50 -221
  75. package/dist/esm/revo-grid.entry.js.map +1 -1
  76. package/dist/esm/revogr-attribution_6.entry.js +8 -8
  77. package/dist/esm/revogr-clipboard_3.entry.js +5 -5
  78. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  79. package/dist/esm/revogr-data_4.entry.js +5 -6
  80. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  81. package/dist/esm/{viewport.store-d8e03528.js → row-header-utils-6081260c.js} +9 -3
  82. package/dist/esm/row-header-utils-6081260c.js.map +1 -0
  83. package/dist/esm/{selection.helpers-accaad4a.js → selection.helpers-d92697e1.js} +2 -2
  84. package/dist/esm/{selection.helpers-accaad4a.js.map → selection.helpers-d92697e1.js.map} +1 -1
  85. package/dist/esm/{throttle-7283692c.js → throttle-041ded8e.js} +2 -2
  86. package/dist/esm/{throttle-7283692c.js.map → throttle-041ded8e.js.map} +1 -1
  87. package/dist/revo-grid/column.service-af0694c5.js +5 -0
  88. package/dist/revo-grid/{column.service-5d14e7e9.js.map → column.service-af0694c5.js.map} +1 -1
  89. package/dist/revo-grid/column.utils-78dd3ef2.js +5 -0
  90. package/dist/revo-grid/column.utils-78dd3ef2.js.map +1 -0
  91. package/dist/revo-grid/edit.utils-ca303802.js +5 -0
  92. package/dist/revo-grid/edit.utils-ca303802.js.map +1 -0
  93. package/dist/revo-grid/events-cf0893a3.js +5 -0
  94. package/dist/revo-grid/events-cf0893a3.js.map +1 -0
  95. package/dist/revo-grid/{header-cell-renderer-fc999784.js → header-cell-renderer-261317c3.js} +2 -2
  96. package/dist/revo-grid/index-f65def08.js +5 -0
  97. package/dist/revo-grid/index-f65def08.js.map +1 -0
  98. package/dist/revo-grid/index.esm.js +1 -1
  99. package/dist/revo-grid/key.utils-4b0093d5.js +5 -0
  100. package/dist/revo-grid/key.utils-4b0093d5.js.map +1 -0
  101. package/dist/revo-grid/revo-grid.entry.js +1 -1
  102. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  103. package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
  104. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  105. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  106. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  107. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  108. package/dist/revo-grid/row-header-utils-6081260c.js +5 -0
  109. package/dist/revo-grid/row-header-utils-6081260c.js.map +1 -0
  110. package/dist/revo-grid/selection.helpers-d92697e1.js +5 -0
  111. package/dist/revo-grid/{selection.helpers-accaad4a.js.map → selection.helpers-d92697e1.js.map} +1 -1
  112. package/dist/revo-grid/{throttle-7283692c.js → throttle-041ded8e.js} +2 -2
  113. package/dist/types/components/revoGrid/revo-grid.d.ts +2 -1
  114. package/dist/types/components.d.ts +2 -2
  115. package/dist/types/index.d.ts +1 -1
  116. package/dist/types/plugins/base.plugin.d.ts +1 -1
  117. package/dist/types/plugins/column.auto-size.plugin.d.ts +2 -4
  118. package/dist/types/plugins/column.stretch.plugin.d.ts +2 -4
  119. package/dist/types/services/column.data.provider.d.ts +2 -13
  120. package/dist/types/services/dimension.provider.d.ts +0 -1
  121. package/dist/types/types/interfaces.d.ts +11 -11
  122. package/dist/types/utils/column.utils.d.ts +46 -0
  123. package/dist/types/utils/index.d.ts +7 -0
  124. package/hydrate/index.js +304 -357
  125. package/hydrate/index.mjs +304 -357
  126. package/package.json +2 -2
  127. package/standalone/_stringToPath.js +1389 -0
  128. package/standalone/_stringToPath.js.map +1 -0
  129. package/standalone/column.service.js +4 -3
  130. package/standalone/column.service.js.map +1 -1
  131. package/standalone/consts.js +1 -1
  132. package/standalone/data.store.js +31 -1410
  133. package/standalone/data.store.js.map +1 -1
  134. package/standalone/debounce.js +2 -1
  135. package/standalone/debounce.js.map +1 -1
  136. package/standalone/dimension.helpers.js +2 -2
  137. package/standalone/index.js +6 -3
  138. package/standalone/index.js.map +1 -1
  139. package/standalone/index2.js +160 -1
  140. package/standalone/index2.js.map +1 -1
  141. package/standalone/isObjectLike.js +195 -0
  142. package/standalone/isObjectLike.js.map +1 -0
  143. package/standalone/revo-grid.js +168 -218
  144. package/standalone/revo-grid.js.map +1 -1
  145. package/standalone/revogr-clipboard2.js +2 -2
  146. package/standalone/revogr-clipboard2.js.map +1 -1
  147. package/standalone/revogr-data2.js +3 -2
  148. package/standalone/revogr-data2.js.map +1 -1
  149. package/standalone/revogr-edit.js +1 -1
  150. package/standalone/revogr-edit2.js +57 -83
  151. package/standalone/revogr-edit2.js.map +1 -1
  152. package/standalone/revogr-focus2.js +2 -1
  153. package/standalone/revogr-focus2.js.map +1 -1
  154. package/standalone/revogr-header2.js +4 -3
  155. package/standalone/revogr-header2.js.map +1 -1
  156. package/standalone/revogr-order-editor2.js +3 -2
  157. package/standalone/revogr-order-editor2.js.map +1 -1
  158. package/standalone/revogr-overlay-selection2.js +5 -5
  159. package/standalone/revogr-row-headers2.js +3 -2
  160. package/standalone/revogr-row-headers2.js.map +1 -1
  161. package/standalone/selection.utils.js +2 -1
  162. package/standalone/selection.utils.js.map +1 -1
  163. package/standalone/throttle.js +1 -1
  164. package/standalone/toNumber.js +2 -189
  165. package/standalone/toNumber.js.map +1 -1
  166. package/dist/cjs/base.plugin-bf5f43a0.js.map +0 -1
  167. package/dist/cjs/column.service-01f4a6c7.js.map +0 -1
  168. package/dist/cjs/dimension.helpers-a6788214.js.map +0 -1
  169. package/dist/cjs/events-b28cc194.js.map +0 -1
  170. package/dist/cjs/index-2410bbd9.js +0 -103
  171. package/dist/cjs/index-2410bbd9.js.map +0 -1
  172. package/dist/cjs/key.utils-1e48ab8f.js +0 -144
  173. package/dist/cjs/key.utils-1e48ab8f.js.map +0 -1
  174. package/dist/cjs/selection.helpers-1a8c8d49.js.map +0 -1
  175. package/dist/cjs/viewport.store-35a3e7ee.js.map +0 -1
  176. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js +0 -43
  177. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js.map +0 -1
  178. package/dist/esm/base.plugin-5e7a3c51.js.map +0 -1
  179. package/dist/esm/column.service-5d14e7e9.js.map +0 -1
  180. package/dist/esm/dimension.helpers-56298828.js.map +0 -1
  181. package/dist/esm/events-77b43b40.js.map +0 -1
  182. package/dist/esm/index-4e881436.js +0 -77
  183. package/dist/esm/index-4e881436.js.map +0 -1
  184. package/dist/esm/key.utils-425c987d.js +0 -133
  185. package/dist/esm/key.utils-425c987d.js.map +0 -1
  186. package/dist/esm/viewport.store-d8e03528.js.map +0 -1
  187. package/dist/revo-grid/base.plugin-5e7a3c51.js +0 -5
  188. package/dist/revo-grid/base.plugin-5e7a3c51.js.map +0 -1
  189. package/dist/revo-grid/column.service-5d14e7e9.js +0 -5
  190. package/dist/revo-grid/dimension.helpers-56298828.js +0 -5
  191. package/dist/revo-grid/dimension.helpers-56298828.js.map +0 -1
  192. package/dist/revo-grid/events-77b43b40.js +0 -5
  193. package/dist/revo-grid/events-77b43b40.js.map +0 -1
  194. package/dist/revo-grid/index-4e881436.js +0 -5
  195. package/dist/revo-grid/index-4e881436.js.map +0 -1
  196. package/dist/revo-grid/key.utils-425c987d.js +0 -5
  197. package/dist/revo-grid/key.utils-425c987d.js.map +0 -1
  198. package/dist/revo-grid/selection.helpers-accaad4a.js +0 -5
  199. package/dist/revo-grid/viewport.store-d8e03528.js +0 -5
  200. package/dist/revo-grid/viewport.store-d8e03528.js.map +0 -1
  201. package/dist/types/plugins/groupingColumn/grouping.col.plugin.d.ts +0 -17
  202. /package/dist/revo-grid/{header-cell-renderer-fc999784.js.map → header-cell-renderer-261317c3.js.map} +0 -0
  203. /package/dist/revo-grid/{throttle-7283692c.js.map → throttle-041ded8e.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.row.plugin.js","sourceRoot":"","sources":["../../../src/plugins/groupingRow/grouping.row.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { ColumnCollection } from '../../services/column.data.provider';\nimport { getPhysical, setItems, columnTypes, TrimmedEntity, DSourceState } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_TRIMMED_TYPE } from '../filter/filter.plugin';\nimport {\n GROUPING_ROW_TYPE,\n GROUP_EXPANDED,\n GROUP_EXPAND_EVENT,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM_VALUE,\n} from './grouping.const';\nimport { doExpand, doCollapse } from './grouping.row.expand.service';\nimport {\n BeforeSourceSetEvent,\n GroupingOptions,\n OnExpandEvent,\n SourceGather,\n} from './grouping.row.types';\nimport {\n ExpandedOptions,\n gatherGrouping,\n isGrouping,\n isGroupingColumn,\n} from './grouping.service';\nimport {\n processDoubleConversionTrimmed,\n TRIMMED_GROUPING,\n} from './grouping.trimmed.service';\nimport { BeforeSaveDataDetails, ColumnRegular, DataType, DimensionRows, PluginProviders } from '@type';\nimport { Observable } from '../../utils/store.utils';\n\nexport default class GroupingRowPlugin extends BasePlugin {\n private options: GroupingOptions | undefined;\n\n get hasProps() {\n return this.options?.props && this.options?.props?.length;\n }\n\n get store(): Observable<DSourceState<DataType, DimensionRows>> {\n return this.providers.data.stores[GROUPING_ROW_TYPE].store;\n }\n\n // proxy for items get\n get rowItems() {\n return this.store.get('items');\n }\n\n get trimmed() {\n return this.store.get('trimmed');\n }\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n ) {\n super(revogrid, providers);\n }\n\n // befoce cell focus\n private onFocus(e: CustomEvent<BeforeSaveDataDetails>) {\n if (isGrouping(e.detail.model)) {\n e.preventDefault();\n }\n }\n\n // expand event triggered\n private onExpand({ virtualIndex }: OnExpandEvent) {\n const { source } = this.getSource();\n let newTrimmed = this.trimmed[TRIMMED_GROUPING];\n\n let i = getPhysical(this.store, virtualIndex);\n const model = source[i];\n const prevExpanded = model[GROUP_EXPANDED];\n if (!prevExpanded) {\n const { trimmed, items } = doExpand(virtualIndex, source, this.rowItems);\n newTrimmed = { ...newTrimmed, ...trimmed };\n if (items) {\n setItems(this.store, items);\n }\n } else {\n const { trimmed } = doCollapse(i, source);\n newTrimmed = { ...newTrimmed, ...trimmed };\n this.revogrid.clearFocus();\n }\n\n this.store.set('source', source);\n this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);\n }\n\n // get source based on proxy item collection to preserve rgRow order\n private getSource(withoutGrouping = false) {\n const source = this.store.get('source');\n const items = this.store.get('proxyItems');\n let index = 0;\n // order important here, expected parent is first, then others\n return items.reduce(\n (result: Required<SourceGather>, i) => {\n const model = source[i];\n if (!withoutGrouping) {\n result.source.push(model);\n return result;\n }\n\n // grouping filter\n if (!isGrouping(model)) {\n result.source.push(model);\n result.oldNewIndexes[i] = index;\n index++;\n } else {\n if (model[GROUP_EXPANDED]) {\n result.prevExpanded[model[PSEUDO_GROUP_ITEM_VALUE]] = true;\n }\n }\n return result;\n },\n {\n source: [],\n prevExpanded: {},\n oldNewIndexes: {},\n },\n );\n }\n\n private setColumnGrouping(cols?: ColumnRegular[]) {\n // if 0 column as holder\n if (cols?.length) {\n cols[0][PSEUDO_GROUP_COLUMN] = true;\n return true;\n }\n return false;\n }\n\n private setColumns({ columns }: ColumnCollection) {\n for (let type of columnTypes) {\n if (this.setColumnGrouping(columns[type])) {\n break;\n }\n }\n }\n\n // evaluate drag between groups\n private onDrag(e: CustomEvent<{ from: number; to: number }>) {\n const { from, to } = e.detail;\n const isDown = to - from >= 0;\n const { source } = this.getSource();\n const items = this.rowItems;\n let i = isDown ? from : to;\n const end = isDown ? to : from;\n for (; i < end; i++) {\n const model = source[items[i]];\n const isGroup = isGrouping(model);\n if (isGroup) {\n e.preventDefault();\n return;\n }\n }\n }\n\n private beforeTrimmedApply(trimmed: Record<number, boolean>, type: string) {\n /** Before filter apply remove grouping filtering */\n if (type === FILTER_TRIMMED_TYPE) {\n const source = this.store.get('source');\n for (let index in trimmed) {\n if (trimmed[index] && isGrouping(source[index])) {\n trimmed[index] = false;\n }\n }\n }\n }\n\n // subscribe to grid events to process them accordingly\n private subscribe() {\n /** if grouping present and new data source arrived */\n this.addEventListener(\n 'beforesourceset',\n ({ detail }: CustomEvent<BeforeSourceSetEvent>) => this.onDataSet(detail),\n );\n this.addEventListener(\n 'beforecolumnsset',\n ({ detail }: CustomEvent<ColumnCollection>) => this.setColumns(detail),\n );\n\n /**\n * filter applied need to clear grouping and apply again\n * based on new results can be new grouping\n */\n this.addEventListener(\n 'beforetrimmed',\n ({ detail: { trimmed, trimmedType } }) =>\n this.beforeTrimmedApply(trimmed, trimmedType),\n );\n /**\n * sorting applied need to clear grouping and apply again\n * based on new results whole grouping order will changed\n */\n this.addEventListener('aftersortingapply', () =>\n this.doSourceUpdate({ ...this.options }),\n );\n\n /**\n * Apply logic for focus inside of grouping\n * We can't focus on grouping rows, navigation only inside of groups for now\n */\n this.addEventListener('beforecellfocus', e => this.onFocus(e));\n /**\n * Prevent rgRow drag outside the group\n */\n this.addEventListener('roworderchanged', e => this.onDrag(e));\n\n /**\n * When grouping expand icon was clicked\n */\n this.addEventListener(\n GROUP_EXPAND_EVENT,\n ({ detail }: CustomEvent<OnExpandEvent>) => this.onExpand(detail),\n );\n }\n\n /**\n * Starts global source update with group clearing and applying new one\n * Initiated when need to reapply grouping\n */\n private doSourceUpdate(options?: ExpandedOptions) {\n if (!this.hasProps) {\n return;\n }\n /**\n * Get source without grouping\n * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping\n */\n const { source, prevExpanded, oldNewIndexes } = this.getSource(true);\n /**\n * Group again\n * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes\n */\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n childrenByGroup,\n } = gatherGrouping(source, this.options?.props || [], {\n prevExpanded,\n ...options,\n });\n\n // setup source\n this.providers.data.setData(\n sourceWithGroups,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n { depth, customRenderer: options?.groupLabelTemplate },\n true,\n );\n this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes ?? {}, oldNewIndexMap);\n }\n\n /**\n * Apply grouping on data set\n * Clear grouping from source\n * If source came from other plugin\n */\n private onDataSet(data: BeforeSourceSetEvent) {\n if (!this.hasProps || !data?.source || !data.source.length) {\n return;\n }\n const source = data.source.filter(s => !isGrouping(s));\n const expanded = this.revogrid.grouping || {};\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n childrenByGroup,\n } = gatherGrouping(source, this.options?.props || [], {\n ...(expanded || {}),\n });\n data.source = sourceWithGroups;\n this.providers.data.setGrouping({ depth });\n this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);\n }\n\n // apply grouping\n setGrouping(options: GroupingOptions) {\n // unsubscribe from all events when group applied\n this.clearSubscriptions();\n this.options = options;\n // clear props, no grouping exists\n if (!options.props || !Object.keys(options.props).length) {\n this.clearGrouping();\n return;\n }\n // props exist and source inited\n const { source } = this.getSource();\n if (source.length) {\n this.doSourceUpdate({ ...options });\n }\n // props exist and columns inited\n for (let t of columnTypes) {\n if (this.setColumnGrouping(this.providers.column.getColumns(t))) {\n this.providers.column.refreshByType(t);\n break;\n }\n }\n\n // if has any grouping subscribe to events again\n this.subscribe();\n }\n\n // clear grouping\n clearGrouping() {\n // clear columns\n columnTypes.forEach(t => {\n const cols = this.providers.column.getColumns(t);\n let deleted = false;\n cols.forEach(c => {\n if (isGroupingColumn(c)) {\n delete c[PSEUDO_GROUP_COLUMN];\n deleted = true;\n }\n });\n // if column store had grouping clear and refresh\n if (deleted) {\n this.providers.column.refreshByType(t);\n }\n });\n // clear rows\n const { source, oldNewIndexes } = this.getSource(true);\n this.providers.data.setData(\n source,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n undefined,\n true,\n );\n this.updateTrimmed(undefined, undefined, oldNewIndexes);\n }\n\n private updateTrimmed(\n trimmedGroup: TrimmedEntity = {},\n _childrenByGroup: Record<number, number[]> = {},\n firstLevelMap: Record<number, number> = {},\n secondLevelMap?: Record<number, number>,\n ) {\n // map previously trimmed data\n const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(\n this.trimmed,\n firstLevelMap,\n secondLevelMap,\n );\n for (let type in trimemedOptionsToUpgrade) {\n this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);\n }\n\n // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);\n\n // setup trimmed data for grouping\n this.revogrid.addTrimmed({ ...trimmedGroup }, TRIMMED_GROUPING);\n }\n}\n"]}
1
+ {"version":3,"file":"grouping.row.plugin.js","sourceRoot":"","sources":["../../../src/plugins/groupingRow/grouping.row.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPhysical, setItems, columnTypes, TrimmedEntity, DSourceState } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_TRIMMED_TYPE } from '../filter/filter.plugin';\nimport {\n GROUPING_ROW_TYPE,\n GROUP_EXPANDED,\n GROUP_EXPAND_EVENT,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM_VALUE,\n} from './grouping.const';\nimport { doExpand, doCollapse } from './grouping.row.expand.service';\nimport {\n BeforeSourceSetEvent,\n GroupingOptions,\n OnExpandEvent,\n SourceGather,\n} from './grouping.row.types';\nimport {\n ExpandedOptions,\n gatherGrouping,\n isGrouping,\n isGroupingColumn,\n} from './grouping.service';\nimport {\n processDoubleConversionTrimmed,\n TRIMMED_GROUPING,\n} from './grouping.trimmed.service';\nimport { BeforeSaveDataDetails, ColumnRegular, DataType, DimensionRows, PluginProviders } from '@type';\nimport { Observable } from '../../utils/store.utils';\nimport { ColumnCollection } from '../../utils/column.utils';\n\nexport default class GroupingRowPlugin extends BasePlugin {\n private options: GroupingOptions | undefined;\n\n get hasProps() {\n return this.options?.props && this.options?.props?.length;\n }\n\n get store(): Observable<DSourceState<DataType, DimensionRows>> {\n return this.providers.data.stores[GROUPING_ROW_TYPE].store;\n }\n\n // proxy for items get\n get rowItems() {\n return this.store.get('items');\n }\n\n get trimmed() {\n return this.store.get('trimmed');\n }\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n ) {\n super(revogrid, providers);\n }\n\n // befoce cell focus\n private onFocus(e: CustomEvent<BeforeSaveDataDetails>) {\n if (isGrouping(e.detail.model)) {\n e.preventDefault();\n }\n }\n\n // expand event triggered\n private onExpand({ virtualIndex }: OnExpandEvent) {\n const { source } = this.getSource();\n let newTrimmed = this.trimmed[TRIMMED_GROUPING];\n\n let i = getPhysical(this.store, virtualIndex);\n const model = source[i];\n const prevExpanded = model[GROUP_EXPANDED];\n if (!prevExpanded) {\n const { trimmed, items } = doExpand(virtualIndex, source, this.rowItems);\n newTrimmed = { ...newTrimmed, ...trimmed };\n if (items) {\n setItems(this.store, items);\n }\n } else {\n const { trimmed } = doCollapse(i, source);\n newTrimmed = { ...newTrimmed, ...trimmed };\n this.revogrid.clearFocus();\n }\n\n this.store.set('source', source);\n this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);\n }\n\n // get source based on proxy item collection to preserve rgRow order\n private getSource(withoutGrouping = false) {\n const source = this.store.get('source');\n const items = this.store.get('proxyItems');\n let index = 0;\n // order important here, expected parent is first, then others\n return items.reduce(\n (result: Required<SourceGather>, i) => {\n const model = source[i];\n if (!withoutGrouping) {\n result.source.push(model);\n return result;\n }\n\n // grouping filter\n if (!isGrouping(model)) {\n result.source.push(model);\n result.oldNewIndexes[i] = index;\n index++;\n } else {\n if (model[GROUP_EXPANDED]) {\n result.prevExpanded[model[PSEUDO_GROUP_ITEM_VALUE]] = true;\n }\n }\n return result;\n },\n {\n source: [],\n prevExpanded: {},\n oldNewIndexes: {},\n },\n );\n }\n\n private setColumnGrouping(cols?: ColumnRegular[]) {\n // if 0 column as holder\n if (cols?.length) {\n cols[0][PSEUDO_GROUP_COLUMN] = true;\n return true;\n }\n return false;\n }\n\n private setColumns({ columns }: ColumnCollection) {\n for (let type of columnTypes) {\n if (this.setColumnGrouping(columns[type])) {\n break;\n }\n }\n }\n\n // evaluate drag between groups\n private onDrag(e: CustomEvent<{ from: number; to: number }>) {\n const { from, to } = e.detail;\n const isDown = to - from >= 0;\n const { source } = this.getSource();\n const items = this.rowItems;\n let i = isDown ? from : to;\n const end = isDown ? to : from;\n for (; i < end; i++) {\n const model = source[items[i]];\n const isGroup = isGrouping(model);\n if (isGroup) {\n e.preventDefault();\n return;\n }\n }\n }\n\n private beforeTrimmedApply(trimmed: Record<number, boolean>, type: string) {\n /** Before filter apply remove grouping filtering */\n if (type === FILTER_TRIMMED_TYPE) {\n const source = this.store.get('source');\n for (let index in trimmed) {\n if (trimmed[index] && isGrouping(source[index])) {\n trimmed[index] = false;\n }\n }\n }\n }\n\n // subscribe to grid events to process them accordingly\n private subscribe() {\n /** if grouping present and new data source arrived */\n this.addEventListener(\n 'beforesourceset',\n ({ detail }: CustomEvent<BeforeSourceSetEvent>) => this.onDataSet(detail),\n );\n this.addEventListener(\n 'beforecolumnsset',\n ({ detail }: CustomEvent<ColumnCollection>) => this.setColumns(detail),\n );\n\n /**\n * filter applied need to clear grouping and apply again\n * based on new results can be new grouping\n */\n this.addEventListener(\n 'beforetrimmed',\n ({ detail: { trimmed, trimmedType } }) =>\n this.beforeTrimmedApply(trimmed, trimmedType),\n );\n /**\n * sorting applied need to clear grouping and apply again\n * based on new results whole grouping order will changed\n */\n this.addEventListener('aftersortingapply', () =>\n this.doSourceUpdate({ ...this.options }),\n );\n\n /**\n * Apply logic for focus inside of grouping\n * We can't focus on grouping rows, navigation only inside of groups for now\n */\n this.addEventListener('beforecellfocus', e => this.onFocus(e));\n /**\n * Prevent rgRow drag outside the group\n */\n this.addEventListener('roworderchanged', e => this.onDrag(e));\n\n /**\n * When grouping expand icon was clicked\n */\n this.addEventListener(\n GROUP_EXPAND_EVENT,\n ({ detail }: CustomEvent<OnExpandEvent>) => this.onExpand(detail),\n );\n }\n\n /**\n * Starts global source update with group clearing and applying new one\n * Initiated when need to reapply grouping\n */\n private doSourceUpdate(options?: ExpandedOptions) {\n if (!this.hasProps) {\n return;\n }\n /**\n * Get source without grouping\n * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping\n */\n const { source, prevExpanded, oldNewIndexes } = this.getSource(true);\n /**\n * Group again\n * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes\n */\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n childrenByGroup,\n } = gatherGrouping(source, this.options?.props || [], {\n prevExpanded,\n ...options,\n });\n\n // setup source\n this.providers.data.setData(\n sourceWithGroups,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n { depth, customRenderer: options?.groupLabelTemplate },\n true,\n );\n this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes ?? {}, oldNewIndexMap);\n }\n\n /**\n * Apply grouping on data set\n * Clear grouping from source\n * If source came from other plugin\n */\n private onDataSet(data: BeforeSourceSetEvent) {\n if (!this.hasProps || !data?.source || !data.source.length) {\n return;\n }\n const source = data.source.filter(s => !isGrouping(s));\n const expanded = this.revogrid.grouping || {};\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n childrenByGroup,\n } = gatherGrouping(source, this.options?.props || [], {\n ...(expanded || {}),\n });\n data.source = sourceWithGroups;\n this.providers.data.setGrouping({ depth });\n this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);\n }\n\n // apply grouping\n setGrouping(options: GroupingOptions) {\n // unsubscribe from all events when group applied\n this.clearSubscriptions();\n this.options = options;\n // clear props, no grouping exists\n if (!options.props || !Object.keys(options.props).length) {\n this.clearGrouping();\n return;\n }\n // props exist and source inited\n const { source } = this.getSource();\n if (source.length) {\n this.doSourceUpdate({ ...options });\n }\n // props exist and columns inited\n for (let t of columnTypes) {\n if (this.setColumnGrouping(this.providers.column.getColumns(t))) {\n this.providers.column.refreshByType(t);\n break;\n }\n }\n\n // if has any grouping subscribe to events again\n this.subscribe();\n }\n\n // clear grouping\n clearGrouping() {\n // clear columns\n columnTypes.forEach(t => {\n const cols = this.providers.column.getColumns(t);\n let deleted = false;\n cols.forEach(c => {\n if (isGroupingColumn(c)) {\n delete c[PSEUDO_GROUP_COLUMN];\n deleted = true;\n }\n });\n // if column store had grouping clear and refresh\n if (deleted) {\n this.providers.column.refreshByType(t);\n }\n });\n // clear rows\n const { source, oldNewIndexes } = this.getSource(true);\n this.providers.data.setData(\n source,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n undefined,\n true,\n );\n this.updateTrimmed(undefined, undefined, oldNewIndexes);\n }\n\n private updateTrimmed(\n trimmedGroup: TrimmedEntity = {},\n _childrenByGroup: Record<number, number[]> = {},\n firstLevelMap: Record<number, number> = {},\n secondLevelMap?: Record<number, number>,\n ) {\n // map previously trimmed data\n const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(\n this.trimmed,\n firstLevelMap,\n secondLevelMap,\n );\n for (let type in trimemedOptionsToUpgrade) {\n this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);\n }\n\n // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);\n\n // setup trimmed data for grouping\n this.revogrid.addTrimmed({ ...trimmedGroup }, TRIMMED_GROUPING);\n }\n}\n"]}
@@ -10,8 +10,8 @@ import { getItemByPosition } from "../../store/index";
10
10
  import { BasePlugin } from "../base.plugin";
11
11
  import { ColumnOrderHandler } from "./order-column.handler";
12
12
  import { dispatch } from "../dispatcher";
13
- import { isColGrouping } from "../groupingColumn/grouping.col.plugin";
14
13
  import { ON_COLUMN_CLICK } from "../../components/header/header-cell-renderer";
14
+ import { isColGrouping } from "../../utils/column.utils";
15
15
  const COLUMN_CLICK = ON_COLUMN_CLICK;
16
16
  const MOVE = 'columndragmousemove';
17
17
  const DRAG_END = 'columndragend';
@@ -1 +1 @@
1
- {"version":3,"file":"column.drag.plugin.js","sourceRoot":"","sources":["../../../src/plugins/moveColumn/column.drag.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport { DataProvider } from '../../services/data.provider';\nimport DimensionProvider from '../../services/dimension.provider';\nimport SelectionStoreConnector from '../../services/selection.store.connector';\nimport ViewportProvider from '../../services/viewport.provider';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport { isColGrouping } from '../groupingColumn/grouping.col.plugin';\nimport { ColumnPropProp, ColumnRegular, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\nexport type Providers = {\n data: DataProvider;\n dimension: DimensionProvider;\n selection: SelectionStoreConnector;\n column: ColumnDataProvider;\n viewport: ViewportProvider;\n};\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n data: ColumnRegular;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type EventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport default class ColumnPlugin extends BasePlugin {\n private moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n private staticDragData: StaticData | null = null;\n private dragData: EventData | null = null;\n private readonly orderUi: ColumnOrderHandler;\n protected readonly localSubscriptions: LocalSubscriptions = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n data,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const items = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[items[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n // todo: if move item out of group remove item from group\n const toMove = items.splice(this.staticDragData.startItem.itemIndex, 1);\n items.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', items);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n private clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n private getData({\n gridEl,\n dataEl,\n data,\n }: StaticData): EventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: data.pin || 'rgCol',\n scrollOffset,\n };\n }\n private getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n"]}
1
+ {"version":3,"file":"column.drag.plugin.js","sourceRoot":"","sources":["../../../src/plugins/moveColumn/column.drag.plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,IAAI,MAAM,aAAa,CAAC;AAM/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,iEAAiE;AACjE,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAmCrC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IAMlD,YAAmB,QAA6B,EAAS,SAA0B;QACjF,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QADV,aAAQ,GAAR,QAAQ,CAAqB;QAAS,cAAS,GAAT,SAAS,CAAiB;QAL3E,aAAQ,GAAG,QAAQ,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,mBAAc,GAAsB,IAAI,CAAC;QACzC,aAAQ,GAAqB,IAAI,CAAC;QAEvB,uBAAkB,GAAuB,EAAE,CAAC;QAG7D,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE3C,kBAAkB;QAClB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG;YACtC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG;YACnC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SAC/C,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG;YACrC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC1C,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAyB;QAC9C,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACvE,6CAA6C;QAC7C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,iBAAiB,CACjC,IAAI,EACJ,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,cAAc,GAAG;YACpB,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjB,SAAS;YACT,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,IAAI;SACL,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,kCACnB,IAAI,CAAC,QAAQ,GACb,IAAI,CAAC,cAAc,EACtB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,CAAa;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxF,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,WAAW,CACtB,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,YAAY,EACjC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,CAAa;QAChB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,eAAe;QACf,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,CAAa;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IACD,SAAS,CAAC,CAAa;QACrB,sBAAsB;QACtB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,IAAI,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAChG,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAE7E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YACrE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAEtC,oCAAoC;YACpC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,kCACzE,IAAI,CAAC,cAAc,KACtB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAC5C,WAAW,EACX,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAC5E,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,yDAAyD;gBACzD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACxE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;gBAClD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,UAAU;QACR,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD;;OAEG;IACH,kBAAkB;QAChB,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAEO,OAAO,CAAC,EACd,MAAM,EACN,MAAM,EACN,IAAI,GACO;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACjD,OAAO;YACL,MAAM;YACN,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO;YACzB,YAAY;SACb,CAAC;IACJ,CAAC;IACO,YAAY,CAAC,IAAwB;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjE,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,OAAO,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACtC,CAAC","sourcesContent":["/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport { DataProvider } from '../../services/data.provider';\nimport DimensionProvider from '../../services/dimension.provider';\nimport SelectionStoreConnector from '../../services/selection.store.connector';\nimport ViewportProvider from '../../services/viewport.provider';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport { ColumnPropProp, ColumnRegular, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\nimport { isColGrouping } from '../../utils/column.utils';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\nexport type Providers = {\n data: DataProvider;\n dimension: DimensionProvider;\n selection: SelectionStoreConnector;\n column: ColumnDataProvider;\n viewport: ViewportProvider;\n};\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n data: ColumnRegular;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type EventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport default class ColumnPlugin extends BasePlugin {\n private moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n private staticDragData: StaticData | null = null;\n private dragData: EventData | null = null;\n private readonly orderUi: ColumnOrderHandler;\n protected readonly localSubscriptions: LocalSubscriptions = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n data,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const items = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[items[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n // todo: if move item out of group remove item from group\n const toMove = items.splice(this.staticDragData.startItem.itemIndex, 1);\n items.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', items);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n private clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n private getData({\n gridEl,\n dataEl,\n data,\n }: StaticData): EventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: data.pin || 'rgCol',\n scrollOffset,\n };\n }\n private getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n"]}
@@ -5,8 +5,8 @@ import size from "lodash/size";
5
5
  import debounce from "lodash/debounce";
6
6
  import range from "lodash/range";
7
7
  import { setStore } from "../../utils/store.utils";
8
- import ColumnDataProvider from "../../services/column.data.provider";
9
8
  import { BasePlugin } from "../base.plugin";
9
+ import { getColumnByProp } from "../../utils/column.utils";
10
10
  /**
11
11
  * Lifecycle
12
12
  * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
@@ -42,7 +42,7 @@ export default class SortingPlugin extends BasePlugin {
42
42
  const columns = (await this.revogrid.getColumns());
43
43
  const sortingFunc = {};
44
44
  for (let prop in order) {
45
- const cmp = this.getComparer(ColumnDataProvider.getColumnByProp(columns, prop), order[prop]);
45
+ const cmp = this.getComparer(getColumnByProp(columns, prop), order[prop]);
46
46
  sortingFunc[prop] = cmp;
47
47
  }
48
48
  this.runSorting(order, sortingFunc);
@@ -1 +1 @@
1
- {"version":3,"file":"sorting.plugin.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\nimport range from 'lodash/range';\n\nimport { setStore } from '../../utils/store.utils';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport { BasePlugin } from '../base.plugin';\nimport {\n ColumnProp,\n Order,\n CellCompareFunc,\n ColumnRegular,\n InitialHeaderClick,\n DataType,\n DimensionRows,\n PluginProviders,\n} from '@type';\n\nexport type SortingOrder = Record<ColumnProp, Order>;\ntype SortingOrderFunction = Record<ColumnProp, CellCompareFunc | undefined>;\ntype ColumnSetEvent = {\n order: SortingOrder;\n};\n\n/**\n * Lifecycle\n * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.\n * 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.\n * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.\n * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.\n *\n * Note: If you prevent an event, it will not proceed to the subsequent steps.\n */\n\nexport default class SortingPlugin extends BasePlugin {\n // sorting order per column\n sorting?: SortingOrder;\n\n // sorting function per column, multiple columns sorting supported\n sortingFunc?: SortingOrderFunction;\n sortingPromise: (() => void) | null = null;\n postponeSort = debounce(\n async (order?: SortingOrder, comparison?: SortingOrderFunction) =>\n this.runSorting(order, comparison),\n 50,\n );\n\n async runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ) {\n await this.sort(order, comparison);\n this.sortingPromise?.();\n this.sortingPromise = null;\n }\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n ) {\n super(revogrid, providers);\n\n const beforeanysource = async ({\n detail: { type },\n }: CustomEvent<{\n type: DimensionRows;\n source: any[];\n }>) => {\n // if sorting was provided - sort data\n if (!!this.sorting && this.sortingFunc) {\n const beforeEvent = this.emit('beforesorting', { type });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n this.startSorting(this.sorting, this.sortingFunc);\n }\n };\n const aftercolumnsset = async ({\n detail: { order },\n }: CustomEvent<ColumnSetEvent>) => {\n const columns = (await this.revogrid.getColumns());\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const cmp = this.getComparer(\n ColumnDataProvider.getColumnByProp(columns, prop),\n order[prop],\n );\n sortingFunc[prop] = cmp;\n }\n this.runSorting(order, sortingFunc);\n };\n const headerclick = async (e: CustomEvent<InitialHeaderClick>) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail.column.sortable) {\n return;\n }\n\n this.headerclick(\n e.detail.column,\n e.detail.index,\n e.detail?.originalEvent?.shiftKey,\n );\n };\n\n this.addEventListener('beforeanysource', beforeanysource);\n this.addEventListener('aftercolumnsset', aftercolumnsset);\n this.addEventListener('beforeheaderclick', headerclick);\n }\n\n startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction) {\n if (!this.sortingPromise) {\n this.revogrid.jobsBeforeRender.push(\n new Promise<void>(resolve => {\n this.sortingPromise = resolve;\n }),\n );\n }\n this.postponeSort(order, sortingFunc);\n }\n\n getComparer(column: ColumnRegular | undefined, order: Order): CellCompareFunc | undefined {\n const cellCmp: CellCompareFunc =\n column?.cellCompare?.bind({ order }) || this.defaultCellCompare;\n if (order == 'asc') {\n return cellCmp;\n }\n if (order == 'desc') {\n return this.descCellCompare(cellCmp);\n }\n return undefined;\n }\n\n /**\n * Apply sorting to data on header click\n * If additive - add to existing sorting, multiple columns can be sorted\n */\n async headerclick(column: ColumnRegular, index: number, additive: boolean) {\n let order: Order = this.getNextOrder(column.order);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n const newCol = await this.revogrid.updateColumnSorting(\n beforeEvent.detail.column,\n index,\n order,\n additive,\n );\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', {\n column: newCol,\n order,\n additive,\n });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n order = beforeApplyEvent.detail.order;\n const cmp = this.getComparer(column, order);\n\n if (additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n this.sorting = {\n ...this.sorting,\n ...sorting,\n };\n // extend sorting function with new sorting for multiple columns sorting\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n\n if (column.prop in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[column.prop];\n delete sortingFunc[column.prop];\n } else {\n sorting[column.prop] = order;\n sortingFunc[column.prop] = cmp;\n }\n } else {\n if (order) {\n // reset sorting\n this.sorting = { [column.prop]: order };\n this.sortingFunc = { [column.prop]: cmp };\n } else {\n delete this.sorting?.[column.prop];\n delete this.sortingFunc?.[column.prop];\n }\n }\n\n this.startSorting(this.sorting, this.sortingFunc);\n }\n\n /**\n * Sort items by sorting function\n * @requires proxyItems applied to row store\n * @requires source applied to row store\n *\n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n async sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = ['rgRow', 'rowPinStart', 'rowPinEnd'],\n ) {\n // if no sorting - reset\n if (!size(sorting)) {\n this.sorting = undefined;\n this.sortingFunc = undefined;\n\n for (let type of types) {\n const store = await this.revogrid.getSourceStore(type);\n // row data\n const source = store.get('source');\n // row indexes\n const proxyItems = range(0, source.length);\n setStore(store, {\n proxyItems,\n source: [...source],\n });\n }\n } else {\n // set sorting\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n // by default it'll sort by rgRow store\n // todo: support multiple stores\n for (let type of types) {\n const store = await this.revogrid.getSourceStore(type);\n // row data\n const source = store.get('source');\n // row indexes\n const proxyItems = store.get('proxyItems');\n const data = this.sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n setStore(store, {\n proxyItems: data,\n source: [...source],\n });\n }\n }\n this.emit('aftersortingapply');\n }\n\n defaultCellCompare(prop: ColumnProp, a: DataType, b: DataType) {\n const av = a[prop]?.toString().toLowerCase();\n const bv = b[prop]?.toString().toLowerCase();\n\n return av == bv ? 0 : av > bv ? 1 : -1;\n }\n\n descCellCompare(cmp: CellCompareFunc) {\n return (prop: ColumnProp, a: DataType, b: DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n }\n\n sortIndexByItems(\n indexes: number[],\n source: DataType[],\n sortingFunc: SortingOrderFunction = {},\n ): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsorted indexes\n return [...Array(indexes.length).keys()];\n }\n //\n /**\n * go through all indexes and align in new order\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\n */\n return indexes.sort((a, b) => {\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n const itemA = source[a];\n const itemB = source[b];\n\n /**\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\n */\n const sorted = cmp?.(prop, itemA, itemB);\n if (sorted) {\n return sorted;\n }\n }\n return 0;\n });\n }\n\n getNextOrder(currentOrder: Order): Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sorting.plugin.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\nimport range from 'lodash/range';\n\nimport { setStore } from '../../utils/store.utils';\nimport { BasePlugin } from '../base.plugin';\nimport {\n ColumnProp,\n Order,\n CellCompareFunc,\n ColumnRegular,\n InitialHeaderClick,\n DataType,\n DimensionRows,\n PluginProviders,\n} from '@type';\nimport { getColumnByProp } from '../../utils/column.utils';\n\nexport type SortingOrder = Record<ColumnProp, Order>;\ntype SortingOrderFunction = Record<ColumnProp, CellCompareFunc | undefined>;\ntype ColumnSetEvent = {\n order: SortingOrder;\n};\n\n/**\n * Lifecycle\n * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.\n * 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.\n * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.\n * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.\n *\n * Note: If you prevent an event, it will not proceed to the subsequent steps.\n */\n\nexport default class SortingPlugin extends BasePlugin {\n // sorting order per column\n sorting?: SortingOrder;\n\n // sorting function per column, multiple columns sorting supported\n sortingFunc?: SortingOrderFunction;\n sortingPromise: (() => void) | null = null;\n postponeSort = debounce(\n async (order?: SortingOrder, comparison?: SortingOrderFunction) =>\n this.runSorting(order, comparison),\n 50,\n );\n\n async runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ) {\n await this.sort(order, comparison);\n this.sortingPromise?.();\n this.sortingPromise = null;\n }\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n ) {\n super(revogrid, providers);\n\n const beforeanysource = async ({\n detail: { type },\n }: CustomEvent<{\n type: DimensionRows;\n source: any[];\n }>) => {\n // if sorting was provided - sort data\n if (!!this.sorting && this.sortingFunc) {\n const beforeEvent = this.emit('beforesorting', { type });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n this.startSorting(this.sorting, this.sortingFunc);\n }\n };\n const aftercolumnsset = async ({\n detail: { order },\n }: CustomEvent<ColumnSetEvent>) => {\n const columns = (await this.revogrid.getColumns());\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const cmp = this.getComparer(\n getColumnByProp(columns, prop),\n order[prop],\n );\n sortingFunc[prop] = cmp;\n }\n this.runSorting(order, sortingFunc);\n };\n const headerclick = async (e: CustomEvent<InitialHeaderClick>) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail.column.sortable) {\n return;\n }\n\n this.headerclick(\n e.detail.column,\n e.detail.index,\n e.detail?.originalEvent?.shiftKey,\n );\n };\n\n this.addEventListener('beforeanysource', beforeanysource);\n this.addEventListener('aftercolumnsset', aftercolumnsset);\n this.addEventListener('beforeheaderclick', headerclick);\n }\n\n startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction) {\n if (!this.sortingPromise) {\n this.revogrid.jobsBeforeRender.push(\n new Promise<void>(resolve => {\n this.sortingPromise = resolve;\n }),\n );\n }\n this.postponeSort(order, sortingFunc);\n }\n\n getComparer(column: ColumnRegular | undefined, order: Order): CellCompareFunc | undefined {\n const cellCmp: CellCompareFunc =\n column?.cellCompare?.bind({ order }) || this.defaultCellCompare;\n if (order == 'asc') {\n return cellCmp;\n }\n if (order == 'desc') {\n return this.descCellCompare(cellCmp);\n }\n return undefined;\n }\n\n /**\n * Apply sorting to data on header click\n * If additive - add to existing sorting, multiple columns can be sorted\n */\n async headerclick(column: ColumnRegular, index: number, additive: boolean) {\n let order: Order = this.getNextOrder(column.order);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n const newCol = await this.revogrid.updateColumnSorting(\n beforeEvent.detail.column,\n index,\n order,\n additive,\n );\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', {\n column: newCol,\n order,\n additive,\n });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n order = beforeApplyEvent.detail.order;\n const cmp = this.getComparer(column, order);\n\n if (additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n this.sorting = {\n ...this.sorting,\n ...sorting,\n };\n // extend sorting function with new sorting for multiple columns sorting\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n\n if (column.prop in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[column.prop];\n delete sortingFunc[column.prop];\n } else {\n sorting[column.prop] = order;\n sortingFunc[column.prop] = cmp;\n }\n } else {\n if (order) {\n // reset sorting\n this.sorting = { [column.prop]: order };\n this.sortingFunc = { [column.prop]: cmp };\n } else {\n delete this.sorting?.[column.prop];\n delete this.sortingFunc?.[column.prop];\n }\n }\n\n this.startSorting(this.sorting, this.sortingFunc);\n }\n\n /**\n * Sort items by sorting function\n * @requires proxyItems applied to row store\n * @requires source applied to row store\n *\n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n async sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = ['rgRow', 'rowPinStart', 'rowPinEnd'],\n ) {\n // if no sorting - reset\n if (!size(sorting)) {\n this.sorting = undefined;\n this.sortingFunc = undefined;\n\n for (let type of types) {\n const store = await this.revogrid.getSourceStore(type);\n // row data\n const source = store.get('source');\n // row indexes\n const proxyItems = range(0, source.length);\n setStore(store, {\n proxyItems,\n source: [...source],\n });\n }\n } else {\n // set sorting\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n // by default it'll sort by rgRow store\n // todo: support multiple stores\n for (let type of types) {\n const store = await this.revogrid.getSourceStore(type);\n // row data\n const source = store.get('source');\n // row indexes\n const proxyItems = store.get('proxyItems');\n const data = this.sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n setStore(store, {\n proxyItems: data,\n source: [...source],\n });\n }\n }\n this.emit('aftersortingapply');\n }\n\n defaultCellCompare(prop: ColumnProp, a: DataType, b: DataType) {\n const av = a[prop]?.toString().toLowerCase();\n const bv = b[prop]?.toString().toLowerCase();\n\n return av == bv ? 0 : av > bv ? 1 : -1;\n }\n\n descCellCompare(cmp: CellCompareFunc) {\n return (prop: ColumnProp, a: DataType, b: DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n }\n\n sortIndexByItems(\n indexes: number[],\n source: DataType[],\n sortingFunc: SortingOrderFunction = {},\n ): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsorted indexes\n return [...Array(indexes.length).keys()];\n }\n //\n /**\n * go through all indexes and align in new order\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\n */\n return indexes.sort((a, b) => {\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n const itemA = source[a];\n const itemB = source[b];\n\n /**\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\n */\n const sorted = cmp?.(prop, itemA, itemB);\n if (sorted) {\n return sorted;\n }\n }\n return 0;\n });\n }\n\n getNextOrder(currentOrder: Order): Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n }\n}\n"]}
@@ -4,21 +4,25 @@
4
4
  import reduce from "lodash/reduce";
5
5
  import each from "lodash/each";
6
6
  import find from "lodash/find";
7
- import GroupingColumnPlugin, { isColGrouping, } from "../plugins/groupingColumn/grouping.col.plugin";
8
7
  import { columnTypes, DataStore, getSourceItem, getSourceItemVirtualIndexByProp, setSourceByVirtualIndex, } from "../store/index";
8
+ import { getColumnType } from "../utils/column.utils";
9
9
  export default class ColumnDataProvider {
10
10
  get order() {
11
- return reduce(this.sorting, (r, c, prop) => {
12
- r[prop] = c.order;
13
- return r;
14
- }, {});
11
+ const order = {};
12
+ const sorting = this.sorting;
13
+ if (sorting) {
14
+ Object.keys(sorting).forEach((prop) => {
15
+ order[prop] = sorting[prop].order;
16
+ });
17
+ }
18
+ return order;
15
19
  }
16
20
  get stores() {
17
21
  return this.dataSources;
18
22
  }
19
23
  constructor() {
20
24
  this.sorting = null;
21
- this.dataSources = reduce(columnTypes, (sources, k) => {
25
+ this.dataSources = columnTypes.reduce((sources, k) => {
22
26
  sources[k] = new DataStore(k);
23
27
  return sources;
24
28
  }, {});
@@ -80,7 +84,7 @@ export default class ColumnDataProvider {
80
84
  updateColumns(cols) {
81
85
  // collect column by type and propert
82
86
  const columnByKey = cols.reduce((res, c) => {
83
- const type = ColumnDataProvider.getColumnType(c);
87
+ const type = getColumnType(c);
84
88
  if (!res[type]) {
85
89
  res[type] = {};
86
90
  }
@@ -89,20 +93,32 @@ export default class ColumnDataProvider {
89
93
  }, {});
90
94
  // find indexes in source
91
95
  const colByIndex = {};
92
- each(columnByKey, (colsToUpdate, type) => {
96
+ for (const t in columnByKey) {
97
+ if (!columnByKey.hasOwnProperty(t)) {
98
+ continue;
99
+ }
100
+ const type = t;
101
+ const colsToUpdate = columnByKey[type];
93
102
  const items = this.dataSources[type].store.get('source');
94
- colByIndex[type] = items.reduce((result, rgCol, index) => {
103
+ colByIndex[type] = {};
104
+ for (let i = 0; i < items.length; i++) {
105
+ const rgCol = items[i];
95
106
  const colToUpdateIfExists = colsToUpdate === null || colsToUpdate === void 0 ? void 0 : colsToUpdate[rgCol.prop];
96
107
  if (colToUpdateIfExists) {
97
- result[index] = colToUpdateIfExists;
108
+ colByIndex[type][i] = colToUpdateIfExists;
98
109
  }
99
- return result;
100
- }, {});
101
- });
102
- each(colByIndex, (colsToUpdate, type) => setSourceByVirtualIndex(this.dataSources[type].store, colsToUpdate || {}));
110
+ }
111
+ }
112
+ for (const t in colByIndex) {
113
+ if (!colByIndex.hasOwnProperty(t)) {
114
+ continue;
115
+ }
116
+ const type = t;
117
+ setSourceByVirtualIndex(this.dataSources[type].store, colByIndex[type] || {});
118
+ }
103
119
  }
104
120
  updateColumn(column, index) {
105
- const type = ColumnDataProvider.getColumnType(column);
121
+ const type = getColumnType(column);
106
122
  setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });
107
123
  }
108
124
  updateColumnSorting(column, index, sorting, additive) {
@@ -119,7 +135,7 @@ export default class ColumnDataProvider {
119
135
  }
120
136
  clearSorting() {
121
137
  const types = reduce(this.sorting, (r, c) => {
122
- const k = ColumnDataProvider.getColumnType(c);
138
+ const k = getColumnType(c);
123
139
  r[k] = true;
124
140
  return r;
125
141
  }, {});
@@ -130,77 +146,5 @@ export default class ColumnDataProvider {
130
146
  });
131
147
  this.sorting = {};
132
148
  }
133
- static getSizes(cols) {
134
- return reduce(cols, (res, c, i) => {
135
- if (c.size) {
136
- res[i] = c.size;
137
- }
138
- return res;
139
- }, {});
140
- }
141
- static getColumnByProp(columns, prop) {
142
- return find(columns, c => {
143
- if (isColGrouping(c)) {
144
- return ColumnDataProvider.getColumnByProp(c.children, prop);
145
- }
146
- return c.prop === prop;
147
- });
148
- }
149
- // columns processing
150
- static getColumns(columns, level = 0, types) {
151
- const collection = {
152
- // columns as they are in stores per type
153
- columns: {
154
- rgCol: [],
155
- colPinStart: [],
156
- colPinEnd: [],
157
- },
158
- // columns grouped by prop for quick access
159
- columnByProp: {},
160
- // column grouping
161
- columnGrouping: {
162
- rgCol: [],
163
- colPinStart: [],
164
- colPinEnd: [],
165
- },
166
- // max depth level for column grouping
167
- maxLevel: level,
168
- // sorting
169
- sort: {},
170
- };
171
- return reduce(columns, (res, colData) => {
172
- // Grouped column
173
- if (isColGrouping(colData)) {
174
- return GroupingColumnPlugin.gatherGroup(res, colData, ColumnDataProvider.getColumns(colData.children, level + 1, types), level);
175
- }
176
- // Regular column
177
- const regularColumn = Object.assign(Object.assign({}, (colData.columnType && types && types[colData.columnType])), colData);
178
- // Regular column, no Pin
179
- if (!regularColumn.pin) {
180
- res.columns.rgCol.push(regularColumn);
181
- // Pin
182
- }
183
- else {
184
- res.columns[regularColumn.pin].push(regularColumn);
185
- }
186
- if (regularColumn.order) {
187
- res.sort[regularColumn.prop] = regularColumn;
188
- }
189
- // technically it's possible that some columns have same prop, but better to avoid it
190
- if (!res.columnByProp[regularColumn.prop]) {
191
- res.columnByProp[regularColumn.prop] = [];
192
- }
193
- res.columnByProp[regularColumn.prop].push(regularColumn);
194
- // trigger setup hook if present
195
- regularColumn.beforeSetup && regularColumn.beforeSetup(regularColumn);
196
- return res;
197
- }, collection);
198
- }
199
- static getColumnType(rgCol) {
200
- if (rgCol.pin) {
201
- return rgCol.pin;
202
- }
203
- return 'rgCol';
204
- }
205
149
  }
206
150
  //# sourceMappingURL=column.data.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"column.data.provider.js","sourceRoot":"","sources":["../../src/services/column.data.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import reduce from 'lodash/reduce';\nimport each from 'lodash/each';\nimport find from 'lodash/find';\n\nimport GroupingColumnPlugin, {\n ColumnGroupingCollection,\n isColGrouping,\n} from '../plugins/groupingColumn/grouping.col.plugin';\n\nimport {\n columnTypes,\n DataStore,\n getSourceItem,\n getSourceItemVirtualIndexByProp,\n Groups,\n setSourceByVirtualIndex,\n} from '@store';\nimport type {\n ColumnData,\n ColumnProp,\n ColumnRegular,\n ColumnTypes,\n ViewSettingSizeProp,\n DimensionCols,\n DimensionColPin,\n ColumnGrouping,\n} from '@type';\n\nexport type ColumnCollection = {\n columns: Record<DimensionCols, ColumnRegular[]>;\n columnByProp: Record<ColumnProp, ColumnRegular[]>;\n columnGrouping: ColumnGroupingCollection;\n maxLevel: number;\n sort: Record<ColumnProp, ColumnRegular>;\n};\n\nexport type ColumnDataSources = Record<\n DimensionCols,\n DataStore<ColumnRegular, DimensionCols>\n>;\ntype Sorting = Record<ColumnProp, ColumnRegular>;\ntype SortingOrder = Record<ColumnProp, 'asc' | 'desc' | undefined>;\n\nexport default class ColumnDataProvider {\n readonly dataSources: ColumnDataSources;\n sorting: Sorting | null = null;\n\n get order() {\n return reduce(\n this.sorting,\n (r: SortingOrder, c, prop) => {\n r[prop] = c.order;\n return r;\n },\n {},\n );\n }\n\n get stores() {\n return this.dataSources;\n }\n constructor() {\n this.dataSources = reduce(\n columnTypes,\n (sources: Partial<ColumnDataSources>, k: DimensionCols) => {\n sources[k] = new DataStore(k);\n return sources;\n },\n {},\n ) as ColumnDataSources;\n }\n\n column(c: number, pin?: DimensionColPin): ColumnRegular | undefined {\n return this.getColumn(c, pin || 'rgCol');\n }\n\n getColumn(\n virtualIndex: number,\n type: DimensionCols,\n ): ColumnRegular | undefined {\n return getSourceItem(this.dataSources[type].store, virtualIndex);\n }\n\n getRawColumns() {\n return reduce(\n this.dataSources,\n (\n result: Record<DimensionCols, ColumnRegular[]>,\n item,\n type: DimensionCols,\n ) => {\n result[type] = item.store.get('source');\n return result;\n },\n {\n rgCol: [],\n colPinStart: [],\n colPinEnd: [],\n },\n );\n }\n\n getColumns(type: DimensionCols | 'all' = 'all'): ColumnRegular[] {\n if (type !== 'all') {\n return this.dataSources[type].store.get('source');\n }\n return columnTypes.reduce((r: ColumnRegular[], t) => {\n r.push(...this.dataSources[t].store.get('source'));\n return r;\n }, []);\n }\n\n getColumnIndexByProp(prop: ColumnProp, type: DimensionCols): number {\n return getSourceItemVirtualIndexByProp(this.dataSources[type].store, prop);\n }\n\n getColumnByProp(\n prop: ColumnProp,\n type: DimensionCols,\n ): ColumnRegular | undefined {\n const items = this.dataSources[type].store.get('source');\n return find(items, { prop });\n }\n\n refreshByType(type: DimensionCols) {\n this.dataSources[type].refresh();\n }\n\n setColumns(data: ColumnCollection): ColumnCollection {\n columnTypes.forEach(k => {\n // set columns data\n this.dataSources[k].updateData(data.columns[k], {\n // max depth level\n depth: data.maxLevel,\n\n // groups\n groups: data.columnGrouping[k].reduce((res: Groups, g) => {\n if (!res[g.level]) {\n res[g.level] = [];\n }\n res[g.level].push(g);\n return res;\n }, {}),\n });\n });\n this.sorting = data.sort;\n return data;\n }\n\n updateColumns(cols: ColumnRegular[]) {\n // collect column by type and propert\n const columnByKey: Partial<\n Record<DimensionCols, Record<ColumnProp, ColumnRegular>>\n > = cols.reduce(\n (\n res: Partial<Record<DimensionCols, Record<ColumnProp, ColumnRegular>>>,\n c,\n ) => {\n const type = ColumnDataProvider.getColumnType(c);\n if (!res[type]) {\n res[type] = {};\n }\n res[type][c.prop] = c;\n return res;\n },\n {},\n );\n\n // find indexes in source\n const colByIndex: Partial<\n Record<DimensionCols, Record<number, ColumnRegular>>\n > = {};\n each(columnByKey, (colsToUpdate, type: DimensionCols) => {\n const items = this.dataSources[type].store.get('source');\n colByIndex[type] = items.reduce(\n (result: Record<number, ColumnRegular>, rgCol, index) => {\n const colToUpdateIfExists = colsToUpdate?.[rgCol.prop];\n if (colToUpdateIfExists) {\n result[index] = colToUpdateIfExists;\n }\n return result;\n },\n {},\n );\n });\n each(colByIndex, (colsToUpdate, type: DimensionCols) =>\n setSourceByVirtualIndex(this.dataSources[type].store, colsToUpdate || {}),\n );\n }\n\n updateColumn(column: ColumnRegular, index: number) {\n const type = ColumnDataProvider.getColumnType(column);\n setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });\n }\n\n updateColumnSorting(\n column: ColumnRegular,\n index: number,\n sorting: 'asc' | 'desc' | undefined,\n additive: boolean,\n ): ColumnRegular {\n if (!additive) {\n this.clearSorting();\n }\n column.order = sorting;\n if (!this.sorting) {\n this.sorting = {};\n }\n this.sorting[column.prop] = column;\n this.updateColumn(column, index);\n return column;\n }\n\n clearSorting() {\n const types = reduce(\n this.sorting,\n (r: { [key in Partial<DimensionCols>]: boolean }, c: ColumnRegular) => {\n const k = ColumnDataProvider.getColumnType(c);\n r[k] = true;\n return r;\n },\n {} as { [key in Partial<DimensionCols>]: boolean },\n );\n each(types, (_, type: DimensionCols) => {\n const cols = this.dataSources[type].store.get('source');\n each(cols, (c: ColumnRegular) => (c.order = undefined));\n this.dataSources[type].setData({ source: [...cols] });\n });\n\n this.sorting = {};\n }\n\n static getSizes(cols: ColumnRegular[]): ViewSettingSizeProp {\n return reduce(\n cols,\n (res: ViewSettingSizeProp, c: ColumnRegular, i: number) => {\n if (c.size) {\n res[i] = c.size;\n }\n return res;\n },\n {},\n );\n }\n\n static getColumnByProp(\n columns: ColumnData,\n prop: ColumnProp,\n ): ColumnRegular | undefined {\n return find(columns, c => {\n if (isColGrouping(c)) {\n return ColumnDataProvider.getColumnByProp(c.children, prop);\n }\n return c.prop === prop;\n }) as ColumnRegular | undefined;\n }\n\n // columns processing\n static getColumns(\n columns: ColumnData,\n level = 0,\n types?: ColumnTypes,\n ): ColumnCollection {\n const collection: ColumnCollection = {\n // columns as they are in stores per type\n columns: {\n rgCol: [],\n colPinStart: [],\n colPinEnd: [],\n },\n // columns grouped by prop for quick access\n columnByProp: {},\n // column grouping\n columnGrouping: {\n rgCol: [],\n colPinStart: [],\n colPinEnd: [],\n },\n // max depth level for column grouping\n maxLevel: level,\n // sorting\n sort: {},\n };\n\n return reduce(\n columns,\n (res: ColumnCollection, colData: ColumnGrouping | ColumnRegular) => {\n // Grouped column\n if (isColGrouping(colData)) {\n return GroupingColumnPlugin.gatherGroup(\n res,\n colData,\n ColumnDataProvider.getColumns(colData.children, level + 1, types),\n level,\n );\n }\n // Regular column\n const regularColumn = {\n ...(colData.columnType && types && types[colData.columnType]),\n ...colData,\n };\n // Regular column, no Pin\n if (!regularColumn.pin) {\n res.columns.rgCol.push(regularColumn);\n // Pin\n } else {\n res.columns[regularColumn.pin].push(regularColumn);\n }\n if (regularColumn.order) {\n res.sort[regularColumn.prop] = regularColumn;\n }\n // technically it's possible that some columns have same prop, but better to avoid it\n if (!res.columnByProp[regularColumn.prop]) {\n res.columnByProp[regularColumn.prop] = [];\n }\n res.columnByProp[regularColumn.prop].push(regularColumn);\n\n // trigger setup hook if present\n regularColumn.beforeSetup && regularColumn.beforeSetup(regularColumn);\n return res;\n },\n collection,\n );\n }\n\n static getColumnType(rgCol: ColumnRegular): DimensionCols {\n if (rgCol.pin) {\n return rgCol.pin;\n }\n return 'rgCol';\n }\n}\n"]}
1
+ {"version":3,"file":"column.data.provider.js","sourceRoot":"","sources":["../../src/services/column.data.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import reduce from 'lodash/reduce';\nimport each from 'lodash/each';\nimport find from 'lodash/find';\n\nimport {\n columnTypes,\n DataStore,\n getSourceItem,\n getSourceItemVirtualIndexByProp,\n Groups,\n setSourceByVirtualIndex,\n} from '@store';\nimport type {\n ColumnProp,\n ColumnRegular,\n DimensionCols,\n DimensionColPin,\n} from '@type';\nimport { ColumnCollection, getColumnType } from '../utils/column.utils';\n\n\nexport type ColumnDataSources = Record<\n DimensionCols,\n DataStore<ColumnRegular, DimensionCols>\n>;\ntype Sorting = Record<ColumnProp, ColumnRegular>;\ntype SortingOrder = Record<ColumnProp, 'asc' | 'desc' | undefined>;\n\nexport default class ColumnDataProvider {\n readonly dataSources: ColumnDataSources;\n sorting: Sorting | null = null;\n\n get order() {\n const order: SortingOrder = {};\n const sorting = this.sorting;\n if (sorting) {\n Object.keys(sorting).forEach((prop) => {\n order[prop] = sorting[prop].order;\n });\n }\n return order;\n }\n\n get stores() {\n return this.dataSources;\n }\n constructor() {\n this.dataSources = columnTypes.reduce((sources: ColumnDataSources, k: DimensionCols) => {\n sources[k] = new DataStore(k);\n return sources;\n }, {} as ColumnDataSources);\n }\n\n column(c: number, pin?: DimensionColPin): ColumnRegular | undefined {\n return this.getColumn(c, pin || 'rgCol');\n }\n\n getColumn(\n virtualIndex: number,\n type: DimensionCols,\n ): ColumnRegular | undefined {\n return getSourceItem(this.dataSources[type].store, virtualIndex);\n }\n\n getRawColumns() {\n return reduce(\n this.dataSources,\n (\n result: Record<DimensionCols, ColumnRegular[]>,\n item,\n type: DimensionCols,\n ) => {\n result[type] = item.store.get('source');\n return result;\n },\n {\n rgCol: [],\n colPinStart: [],\n colPinEnd: [],\n },\n );\n }\n\n getColumns(type: DimensionCols | 'all' = 'all'): ColumnRegular[] {\n if (type !== 'all') {\n return this.dataSources[type].store.get('source');\n }\n return columnTypes.reduce((r: ColumnRegular[], t) => {\n r.push(...this.dataSources[t].store.get('source'));\n return r;\n }, []);\n }\n\n getColumnIndexByProp(prop: ColumnProp, type: DimensionCols): number {\n return getSourceItemVirtualIndexByProp(this.dataSources[type].store, prop);\n }\n\n getColumnByProp(\n prop: ColumnProp,\n type: DimensionCols,\n ): ColumnRegular | undefined {\n const items = this.dataSources[type].store.get('source');\n return find(items, { prop });\n }\n\n refreshByType(type: DimensionCols) {\n this.dataSources[type].refresh();\n }\n\n setColumns(data: ColumnCollection): ColumnCollection {\n columnTypes.forEach(k => {\n // set columns data\n this.dataSources[k].updateData(data.columns[k], {\n // max depth level\n depth: data.maxLevel,\n\n // groups\n groups: data.columnGrouping[k].reduce((res: Groups, g) => {\n if (!res[g.level]) {\n res[g.level] = [];\n }\n res[g.level].push(g);\n return res;\n }, {}),\n });\n });\n this.sorting = data.sort;\n return data;\n }\n\n updateColumns(cols: ColumnRegular[]) {\n // collect column by type and propert\n const columnByKey: Partial<\n Record<DimensionCols, Record<ColumnProp, ColumnRegular>>\n > = cols.reduce(\n (\n res: Partial<Record<DimensionCols, Record<ColumnProp, ColumnRegular>>>,\n c,\n ) => {\n const type = getColumnType(c);\n if (!res[type]) {\n res[type] = {};\n }\n res[type][c.prop] = c;\n return res;\n },\n {},\n );\n\n // find indexes in source\n const colByIndex: Partial<\n Record<DimensionCols, Record<number, ColumnRegular>>\n > = {};\n for (const t in columnByKey) {\n if (!columnByKey.hasOwnProperty(t)) {\n continue;\n }\n const type = t as DimensionCols;\n const colsToUpdate = columnByKey[type];\n const items = this.dataSources[type].store.get('source');\n colByIndex[type] = {};\n for (let i = 0; i < items.length; i++) {\n const rgCol = items[i];\n const colToUpdateIfExists = colsToUpdate?.[rgCol.prop];\n if (colToUpdateIfExists) {\n colByIndex[type][i] = colToUpdateIfExists;\n }\n }\n }\n for (const t in colByIndex) {\n if (!colByIndex.hasOwnProperty(t)) {\n continue;\n }\n const type = t as DimensionCols;\n setSourceByVirtualIndex(\n this.dataSources[type].store,\n colByIndex[type] || {},\n );\n }\n }\n\n updateColumn(column: ColumnRegular, index: number) {\n const type = getColumnType(column);\n setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });\n }\n\n updateColumnSorting(\n column: ColumnRegular,\n index: number,\n sorting: 'asc' | 'desc' | undefined,\n additive: boolean,\n ): ColumnRegular {\n if (!additive) {\n this.clearSorting();\n }\n column.order = sorting;\n if (!this.sorting) {\n this.sorting = {};\n }\n this.sorting[column.prop] = column;\n this.updateColumn(column, index);\n return column;\n }\n\n clearSorting() {\n const types = reduce(\n this.sorting,\n (r: { [key in Partial<DimensionCols>]: boolean }, c: ColumnRegular) => {\n const k = getColumnType(c);\n r[k] = true;\n return r;\n },\n {} as { [key in Partial<DimensionCols>]: boolean },\n );\n each(types, (_, type: DimensionCols) => {\n const cols = this.dataSources[type].store.get('source');\n each(cols, (c: ColumnRegular) => (c.order = undefined));\n this.dataSources[type].setData({ source: [...cols] });\n });\n\n this.sorting = {};\n }\n}\n"]}
@@ -3,9 +3,9 @@
3
3
  */
4
4
  import reduce from "lodash/reduce";
5
5
  import debounce from "lodash/debounce";
6
- import ColumnDataProvider from "./column.data.provider";
7
6
  import { RESIZE_INTERVAL } from "../utils/consts";
8
7
  import { columnTypes, rowTypes, getItemByIndex, DimensionStore, gatherTrimmedItems, } from "../store/index";
8
+ import { getColumnSizes } from "../utils/column.utils";
9
9
  /**
10
10
  * Dimension provider
11
11
  * Stores dimension information and custom sizes
@@ -88,7 +88,7 @@ export default class DimensionProvider {
88
88
  // setItemCount
89
89
  this.stores[type].setStore({ count: items.length });
90
90
  // setCustomSizes
91
- const newSizes = ColumnDataProvider.getSizes(items);
91
+ const newSizes = getColumnSizes(items);
92
92
  this.stores[type].setDimensionSize(newSizes);
93
93
  const vpUpdate = {
94
94
  // this triggers drop on realCount change
@@ -1 +1 @@
1
- {"version":3,"file":"dimension.provider.js","sourceRoot":"","sources":["../../src/services/dimension.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import reduce from 'lodash/reduce';\nimport debounce from 'lodash/debounce';\nimport ColumnDataProvider from './column.data.provider';\nimport ViewportProvider from './viewport.provider';\nimport { RESIZE_INTERVAL } from '../utils/consts';\n\nimport {\n columnTypes,\n rowTypes,\n getItemByIndex,\n DimensionStore,\n DimensionStoreCollection,\n gatherTrimmedItems,\n Trimmed,\n} from '@store';\nimport {\n DimensionCols,\n DimensionType,\n MultiDimensionType,\n ColumnRegular,\n DimensionSettingsState,\n ViewPortScrollEvent,\n ViewSettingSizeProp,\n ViewportState,\n} from '@type';\n\nexport type ColumnItems = Record<DimensionCols, ColumnRegular[]>;\n\nexport type DimensionConfig = {\n realSizeChanged(k: MultiDimensionType): void;\n};\n/**\n * Dimension provider\n * Stores dimension information and custom sizes\n */\nexport default class DimensionProvider {\n readonly stores: DimensionStoreCollection;\n constructor(\n private viewports: ViewportProvider,\n config: DimensionConfig,\n ) {\n const sizeChanged = debounce(\n (k: MultiDimensionType) => config.realSizeChanged(k),\n RESIZE_INTERVAL,\n );\n this.stores = reduce(\n [...rowTypes, ...columnTypes],\n (sources: Partial<DimensionStoreCollection>, k: MultiDimensionType) => {\n sources[k] = new DimensionStore();\n sources[k].store.onChange('realSize', () => sizeChanged(k));\n return sources;\n },\n {},\n ) as DimensionStoreCollection;\n }\n\n /**\n * Clear old sizes from dimension and viewports\n * @param type - dimension type\n * @param count - count of items\n */\n clearSize(t: MultiDimensionType, count: number) {\n this.stores[t].drop();\n // after we done with drop trigger viewport recalculaction\n this.viewports.stores[t].setOriginalSizes(\n this.stores[t].store.get('originItemSize'),\n );\n this.setItemCount(count, t);\n }\n\n /**\n * Apply new custom sizes to dimension and view port\n * @param type - dimension type\n * @param sizes - new custom sizes\n * @param keepOld - keep old sizes merge new with old\n */\n setCustomSizes(\n type: MultiDimensionType,\n sizes: ViewSettingSizeProp,\n keepOld = false,\n ) {\n let newSizes = sizes;\n if (keepOld) {\n const oldSizes = this.stores[type].store.get('sizes');\n newSizes = {\n ...oldSizes,\n ...sizes,\n };\n }\n this.stores[type].setDimensionSize(newSizes);\n this.updateViewport(type, true);\n }\n\n setItemCount(realCount: number, type: MultiDimensionType) {\n this.viewports.stores[type].setViewport({ realCount });\n this.stores[type].setStore({ count: realCount });\n }\n\n /**\n * Apply trimmed items\n * @param trimmed - trimmed items\n * @param type\n */\n setTrimmed(trimmed: Trimmed, type: MultiDimensionType) {\n const allTrimmed = gatherTrimmedItems(trimmed);\n const dimStoreType = this.stores[type];\n dimStoreType.setStore({ trimmed: allTrimmed });\n this.updateViewport(type, true);\n }\n\n /**\n * Sets dimension data and view port coordinate\n * @param itemCount\n * @param type - dimension type\n * @param noVirtual - disable virtual data\n */\n setData(itemCount: number, type: MultiDimensionType, noVirtual = false) {\n this.setItemCount(itemCount, type);\n\n // Virtualization will get disabled\n if (noVirtual) {\n const dimension = this.stores[type].getCurrentState();\n this.viewports.stores[type].setViewport({\n virtualSize: dimension.realSize,\n });\n }\n this.updateViewport(type);\n }\n\n applyNewColumns(\n columns: Record<DimensionCols, ColumnRegular[]>,\n disableVirtualX: boolean,\n ) {\n for (let type of columnTypes) {\n // clear existing data\n this.stores[type].drop();\n\n const items = columns[type];\n\n // for pinned col no need virtual data\n const noVirtual = type !== 'rgCol' || disableVirtualX;\n\n // setItemCount\n this.stores[type].setStore({ count: items.length });\n\n // setCustomSizes\n const newSizes = ColumnDataProvider.getSizes(items);\n this.stores[type].setDimensionSize(newSizes);\n\n const vpUpdate: Partial<ViewportState> = {\n // this triggers drop on realCount change\n realCount: items.length,\n };\n\n // Virtualization will get disabled\n if (noVirtual) {\n vpUpdate.virtualSize = this.stores[type].getCurrentState().realSize;\n }\n\n this.viewports.stores[type].setViewport(vpUpdate);\n this.setViewPortCoordinate({\n coordinate: this.viewports.stores[type].lastCoordinate,\n type,\n });\n }\n }\n\n getFullSize(): { x: number; y: number } {\n let x = 0;\n let y = 0;\n for (let type of columnTypes) {\n x += this.stores[type]?.store.get('realSize') || 0;\n }\n for (let type of rowTypes) {\n y += this.stores[type]?.store.get('realSize') || 0;\n }\n return { y, x };\n }\n\n updateViewport(type: MultiDimensionType, force = false) {\n this.setViewPortCoordinate({\n coordinate: this.viewports.stores[type].lastCoordinate,\n type,\n force,\n });\n }\n\n setViewPortCoordinate({\n coordinate,\n type,\n force = false,\n }: {\n coordinate: number;\n type: MultiDimensionType;\n force?: boolean;\n }) {\n const dimension = this.stores[type].getCurrentState();\n this.viewports.stores[type].setViewPortCoordinate(coordinate, dimension, force);\n }\n\n getViewPortPos(e: ViewPortScrollEvent): number {\n const dimension = this.stores[e.dimension].getCurrentState();\n const item = getItemByIndex(dimension, e.coordinate);\n\n return item.start;\n }\n\n setSettings(\n data: Partial<DimensionSettingsState>,\n dimensionType: DimensionType,\n ) {\n let stores: MultiDimensionType[] = [];\n switch (dimensionType) {\n case 'rgCol':\n stores = columnTypes;\n break;\n case 'rgRow':\n stores = rowTypes;\n break;\n }\n for (let s of stores) {\n this.stores[s].setStore(data);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"dimension.provider.js","sourceRoot":"","sources":["../../src/services/dimension.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import reduce from 'lodash/reduce';\nimport debounce from 'lodash/debounce';\nimport ViewportProvider from './viewport.provider';\nimport { RESIZE_INTERVAL } from '../utils/consts';\n\nimport {\n columnTypes,\n rowTypes,\n getItemByIndex,\n DimensionStore,\n DimensionStoreCollection,\n gatherTrimmedItems,\n Trimmed,\n} from '@store';\nimport {\n DimensionCols,\n DimensionType,\n MultiDimensionType,\n ColumnRegular,\n DimensionSettingsState,\n ViewPortScrollEvent,\n ViewSettingSizeProp,\n ViewportState,\n} from '@type';\nimport { getColumnSizes } from '../utils/column.utils';\n\nexport type DimensionConfig = {\n realSizeChanged(k: MultiDimensionType): void;\n};\n/**\n * Dimension provider\n * Stores dimension information and custom sizes\n */\nexport default class DimensionProvider {\n readonly stores: DimensionStoreCollection;\n constructor(\n private viewports: ViewportProvider,\n config: DimensionConfig,\n ) {\n const sizeChanged = debounce(\n (k: MultiDimensionType) => config.realSizeChanged(k),\n RESIZE_INTERVAL,\n );\n this.stores = reduce(\n [...rowTypes, ...columnTypes],\n (sources: Partial<DimensionStoreCollection>, k: MultiDimensionType) => {\n sources[k] = new DimensionStore();\n sources[k].store.onChange('realSize', () => sizeChanged(k));\n return sources;\n },\n {},\n ) as DimensionStoreCollection;\n }\n\n /**\n * Clear old sizes from dimension and viewports\n * @param type - dimension type\n * @param count - count of items\n */\n clearSize(t: MultiDimensionType, count: number) {\n this.stores[t].drop();\n // after we done with drop trigger viewport recalculaction\n this.viewports.stores[t].setOriginalSizes(\n this.stores[t].store.get('originItemSize'),\n );\n this.setItemCount(count, t);\n }\n\n /**\n * Apply new custom sizes to dimension and view port\n * @param type - dimension type\n * @param sizes - new custom sizes\n * @param keepOld - keep old sizes merge new with old\n */\n setCustomSizes(\n type: MultiDimensionType,\n sizes: ViewSettingSizeProp,\n keepOld = false,\n ) {\n let newSizes = sizes;\n if (keepOld) {\n const oldSizes = this.stores[type].store.get('sizes');\n newSizes = {\n ...oldSizes,\n ...sizes,\n };\n }\n this.stores[type].setDimensionSize(newSizes);\n this.updateViewport(type, true);\n }\n\n setItemCount(realCount: number, type: MultiDimensionType) {\n this.viewports.stores[type].setViewport({ realCount });\n this.stores[type].setStore({ count: realCount });\n }\n\n /**\n * Apply trimmed items\n * @param trimmed - trimmed items\n * @param type\n */\n setTrimmed(trimmed: Trimmed, type: MultiDimensionType) {\n const allTrimmed = gatherTrimmedItems(trimmed);\n const dimStoreType = this.stores[type];\n dimStoreType.setStore({ trimmed: allTrimmed });\n this.updateViewport(type, true);\n }\n\n /**\n * Sets dimension data and view port coordinate\n * @param itemCount\n * @param type - dimension type\n * @param noVirtual - disable virtual data\n */\n setData(itemCount: number, type: MultiDimensionType, noVirtual = false) {\n this.setItemCount(itemCount, type);\n\n // Virtualization will get disabled\n if (noVirtual) {\n const dimension = this.stores[type].getCurrentState();\n this.viewports.stores[type].setViewport({\n virtualSize: dimension.realSize,\n });\n }\n this.updateViewport(type);\n }\n\n applyNewColumns(\n columns: Record<DimensionCols, ColumnRegular[]>,\n disableVirtualX: boolean,\n ) {\n for (let type of columnTypes) {\n // clear existing data\n this.stores[type].drop();\n\n const items = columns[type];\n\n // for pinned col no need virtual data\n const noVirtual = type !== 'rgCol' || disableVirtualX;\n\n // setItemCount\n this.stores[type].setStore({ count: items.length });\n\n // setCustomSizes\n const newSizes = getColumnSizes(items);\n this.stores[type].setDimensionSize(newSizes);\n\n const vpUpdate: Partial<ViewportState> = {\n // this triggers drop on realCount change\n realCount: items.length,\n };\n\n // Virtualization will get disabled\n if (noVirtual) {\n vpUpdate.virtualSize = this.stores[type].getCurrentState().realSize;\n }\n\n this.viewports.stores[type].setViewport(vpUpdate);\n this.setViewPortCoordinate({\n coordinate: this.viewports.stores[type].lastCoordinate,\n type,\n });\n }\n }\n\n getFullSize(): { x: number; y: number } {\n let x = 0;\n let y = 0;\n for (let type of columnTypes) {\n x += this.stores[type]?.store.get('realSize') || 0;\n }\n for (let type of rowTypes) {\n y += this.stores[type]?.store.get('realSize') || 0;\n }\n return { y, x };\n }\n\n updateViewport(type: MultiDimensionType, force = false) {\n this.setViewPortCoordinate({\n coordinate: this.viewports.stores[type].lastCoordinate,\n type,\n force,\n });\n }\n\n setViewPortCoordinate({\n coordinate,\n type,\n force = false,\n }: {\n coordinate: number;\n type: MultiDimensionType;\n force?: boolean;\n }) {\n const dimension = this.stores[type].getCurrentState();\n this.viewports.stores[type].setViewPortCoordinate(coordinate, dimension, force);\n }\n\n getViewPortPos(e: ViewPortScrollEvent): number {\n const dimension = this.stores[e.dimension].getCurrentState();\n const item = getItemByIndex(dimension, e.coordinate);\n\n return item.start;\n }\n\n setSettings(\n data: Partial<DimensionSettingsState>,\n dimensionType: DimensionType,\n ) {\n let stores: MultiDimensionType[] = [];\n switch (dimensionType) {\n case 'rgCol':\n stores = columnTypes;\n break;\n case 'rgRow':\n stores = rowTypes;\n break;\n }\n for (let s of stores) {\n this.stores[s].setStore(data);\n }\n }\n}\n"]}