@revolist/revogrid 4.9.41 → 4.10.0

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 (139) hide show
  1. package/dist/cjs/{column.drag.plugin-fcd892ec.js → column.drag.plugin-7098477f.js} +117 -46
  2. package/dist/cjs/column.drag.plugin-7098477f.js.map +1 -0
  3. package/dist/cjs/{column.service-26c61ed6.js → column.service-f1d5d924.js} +5 -10
  4. package/dist/cjs/column.service-f1d5d924.js.map +1 -0
  5. package/dist/cjs/{edit.utils-179c0800.js → edit.utils-75fa1cab.js} +2 -2
  6. package/dist/cjs/{edit.utils-179c0800.js.map → edit.utils-75fa1cab.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-d879d95e.js → header-cell-renderer-aaaad4c8.js} +2 -2
  8. package/dist/cjs/{header-cell-renderer-d879d95e.js.map → header-cell-renderer-aaaad4c8.js.map} +1 -1
  9. package/dist/cjs/{index-3ab26ab9.js → index-aecb871a.js} +3 -6
  10. package/dist/cjs/index-aecb871a.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +8 -7
  12. package/dist/cjs/index.cjs.js.map +1 -1
  13. package/dist/cjs/{key.utils-f49d7bee.js → key.utils-8f1105f3.js} +2 -2
  14. package/dist/cjs/{key.utils-f49d7bee.js.map → key.utils-8f1105f3.js.map} +1 -1
  15. package/dist/cjs/revo-grid.cjs.entry.js +26 -35
  16. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  17. package/dist/cjs/revogr-attribution_7.cjs.entry.js +6 -6
  18. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +4 -4
  19. package/dist/cjs/revogr-data_4.cjs.entry.js +36 -13
  20. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  21. package/dist/cjs/{row-header-utils-c37f76e4.js → row-header-utils-208e4026.js} +3 -3
  22. package/dist/cjs/{row-header-utils-c37f76e4.js.map → row-header-utils-208e4026.js.map} +1 -1
  23. package/dist/cjs/{text-editor-b756d6b3.js → text-editor-b64a080e.js} +3 -3
  24. package/dist/cjs/{text-editor-b756d6b3.js.map → text-editor-b64a080e.js.map} +1 -1
  25. package/dist/cjs/{throttle-a57f51f9.js → throttle-3b362440.js} +2 -2
  26. package/dist/cjs/{throttle-a57f51f9.js.map → throttle-3b362440.js.map} +1 -1
  27. package/dist/collection/components/data/revogr-data.js +28 -3
  28. package/dist/collection/components/data/revogr-data.js.map +1 -1
  29. package/dist/collection/components/revoGrid/revo-grid.js +7 -4
  30. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  31. package/dist/collection/components/scroll/revogr-viewport-scroll.js +26 -8
  32. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
  33. package/dist/collection/plugins/filter/filter.plugin.js +3 -0
  34. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  35. package/dist/collection/plugins/sorting/sorting.plugin.js +7 -4
  36. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  37. package/dist/collection/services/dimension.provider.js +7 -22
  38. package/dist/collection/services/dimension.provider.js.map +1 -1
  39. package/dist/collection/store/dataSource/trimmed.plugin.js +3 -8
  40. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -1
  41. package/dist/collection/store/dimension/dimension.helpers.js +2 -5
  42. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -1
  43. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +35 -0
  44. package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
  45. package/dist/collection/store/dimension/dimension.store.js +46 -66
  46. package/dist/collection/store/dimension/dimension.store.js.map +1 -1
  47. package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
  48. package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
  49. package/dist/collection/types/events.js +1 -0
  50. package/dist/collection/types/events.js.map +1 -1
  51. package/dist/collection/types/interfaces.js.map +1 -1
  52. package/dist/esm/{column.drag.plugin-3cc77986.js → column.drag.plugin-813698d2.js} +117 -46
  53. package/dist/esm/column.drag.plugin-813698d2.js.map +1 -0
  54. package/dist/esm/{column.service-751345b2.js → column.service-aa142672.js} +5 -10
  55. package/dist/esm/column.service-aa142672.js.map +1 -0
  56. package/dist/esm/{edit.utils-6fc686b9.js → edit.utils-cd6a3224.js} +2 -2
  57. package/dist/esm/{edit.utils-6fc686b9.js.map → edit.utils-cd6a3224.js.map} +1 -1
  58. package/dist/esm/{header-cell-renderer-32d2ed96.js → header-cell-renderer-5939221a.js} +2 -2
  59. package/dist/esm/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-5939221a.js.map} +1 -1
  60. package/dist/esm/{index-1dcad6ef.js → index-dbd1c020.js} +3 -6
  61. package/dist/esm/index-dbd1c020.js.map +1 -0
  62. package/dist/esm/index.js +8 -7
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/{key.utils-17273f42.js → key.utils-5ff2ec82.js} +2 -2
  65. package/dist/esm/{key.utils-17273f42.js.map → key.utils-5ff2ec82.js.map} +1 -1
  66. package/dist/esm/revo-grid.entry.js +26 -35
  67. package/dist/esm/revo-grid.entry.js.map +1 -1
  68. package/dist/esm/revogr-attribution_7.entry.js +6 -6
  69. package/dist/esm/revogr-clipboard_3.entry.js +4 -4
  70. package/dist/esm/revogr-data_4.entry.js +36 -13
  71. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  72. package/dist/esm/{row-header-utils-3dfbb81f.js → row-header-utils-5511678e.js} +3 -3
  73. package/dist/esm/{row-header-utils-3dfbb81f.js.map → row-header-utils-5511678e.js.map} +1 -1
  74. package/dist/esm/{text-editor-901c3eb8.js → text-editor-81767dcb.js} +3 -3
  75. package/dist/esm/{text-editor-901c3eb8.js.map → text-editor-81767dcb.js.map} +1 -1
  76. package/dist/esm/{throttle-138d69c3.js → throttle-4eff5b3c.js} +2 -2
  77. package/dist/esm/{throttle-138d69c3.js.map → throttle-4eff5b3c.js.map} +1 -1
  78. package/dist/revo-grid/column.drag.plugin-813698d2.js +5 -0
  79. package/dist/revo-grid/column.drag.plugin-813698d2.js.map +1 -0
  80. package/dist/revo-grid/{column.service-751345b2.js → column.service-aa142672.js} +2 -2
  81. package/dist/revo-grid/{column.service-751345b2.js.map → column.service-aa142672.js.map} +1 -1
  82. package/dist/revo-grid/{edit.utils-6fc686b9.js → edit.utils-cd6a3224.js} +2 -2
  83. package/dist/revo-grid/{header-cell-renderer-32d2ed96.js → header-cell-renderer-5939221a.js} +2 -2
  84. package/dist/revo-grid/index-dbd1c020.js +5 -0
  85. package/dist/revo-grid/index-dbd1c020.js.map +1 -0
  86. package/dist/revo-grid/index.esm.js +1 -1
  87. package/dist/revo-grid/index.esm.js.map +1 -1
  88. package/dist/revo-grid/{key.utils-17273f42.js → key.utils-5ff2ec82.js} +2 -2
  89. package/dist/revo-grid/revo-grid.entry.js +1 -1
  90. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  91. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  92. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  93. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  94. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  95. package/dist/revo-grid/{row-header-utils-3dfbb81f.js → row-header-utils-5511678e.js} +2 -2
  96. package/dist/revo-grid/{text-editor-901c3eb8.js → text-editor-81767dcb.js} +2 -2
  97. package/dist/revo-grid/{throttle-138d69c3.js → throttle-4eff5b3c.js} +2 -2
  98. package/dist/types/components/data/revogr-data.d.ts +6 -2
  99. package/dist/types/components/revoGrid/revo-grid.d.ts +1 -1
  100. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +1 -1
  101. package/dist/types/components.d.ts +7 -2
  102. package/dist/types/services/dimension.provider.d.ts +1 -1
  103. package/dist/types/store/dimension/dimension.helpers.d.ts +0 -3
  104. package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +9 -0
  105. package/dist/types/store/dimension/dimension.store.d.ts +2 -1
  106. package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
  107. package/dist/types/types/events.d.ts +1 -1
  108. package/dist/types/types/interfaces.d.ts +6 -1
  109. package/hydrate/index.js +170 -93
  110. package/hydrate/index.mjs +170 -93
  111. package/package.json +1 -1
  112. package/standalone/data.store.js +3 -8
  113. package/standalone/data.store.js.map +1 -1
  114. package/standalone/dimension.helpers.js +2 -5
  115. package/standalone/dimension.helpers.js.map +1 -1
  116. package/standalone/index.js +1 -0
  117. package/standalone/index.js.map +1 -1
  118. package/standalone/revo-grid.js +133 -71
  119. package/standalone/revo-grid.js.map +1 -1
  120. package/standalone/revogr-data2.js +6 -1
  121. package/standalone/revogr-data2.js.map +1 -1
  122. package/standalone/revogr-viewport-scroll2.js +26 -8
  123. package/standalone/revogr-viewport-scroll2.js.map +1 -1
  124. package/dist/cjs/column.drag.plugin-fcd892ec.js.map +0 -1
  125. package/dist/cjs/column.service-26c61ed6.js.map +0 -1
  126. package/dist/cjs/index-3ab26ab9.js.map +0 -1
  127. package/dist/esm/column.drag.plugin-3cc77986.js.map +0 -1
  128. package/dist/esm/column.service-751345b2.js.map +0 -1
  129. package/dist/esm/index-1dcad6ef.js.map +0 -1
  130. package/dist/revo-grid/column.drag.plugin-3cc77986.js +0 -5
  131. package/dist/revo-grid/column.drag.plugin-3cc77986.js.map +0 -1
  132. package/dist/revo-grid/index-1dcad6ef.js +0 -5
  133. package/dist/revo-grid/index-1dcad6ef.js.map +0 -1
  134. /package/dist/revo-grid/{edit.utils-6fc686b9.js.map → edit.utils-cd6a3224.js.map} +0 -0
  135. /package/dist/revo-grid/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-5939221a.js.map} +0 -0
  136. /package/dist/revo-grid/{key.utils-17273f42.js.map → key.utils-5ff2ec82.js.map} +0 -0
  137. /package/dist/revo-grid/{row-header-utils-3dfbb81f.js.map → row-header-utils-5511678e.js.map} +0 -0
  138. /package/dist/revo-grid/{text-editor-901c3eb8.js.map → text-editor-81767dcb.js.map} +0 -0
  139. /package/dist/revo-grid/{throttle-138d69c3.js.map → throttle-4eff5b3c.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"filter.plugin.js","sourceRoot":"","sources":["../../../src/plugins/filter/filter.plugin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport reduce from 'lodash/reduce';\n\nimport type { ColumnProp, ColumnRegular, DataType, PluginProviders } from '@type';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_PROP, isFilterBtn } from './filter.button';\nimport {\n filterCoreFunctionsIndexedByType,\n filterNames,\n filterTypes,\n} from './filter.indexed';\n\nimport type {\n ColumnFilterConfig,\n FilterCollection,\n LogicFunction,\n MultiFilterItem,\n} from './filter.types';\n\nimport { getCellDataParsed } from '../../utils';\n\nexport * from './filter.types';\nexport * from './filter.indexed';\nexport * from './filter.button';\n\nexport const FILTER_TRIMMED_TYPE = 'filter';\nexport const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';\nexport const FILTE_PANEL = 'revogr-filter-panel';\n\n/**\n * @typedef ColumnFilterConfig\n * @type {object}\n * @property {FilterCollection|undefined} collection - preserved filter data\n * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored\n * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.\n * @property {FilterLocalization|undefined} localization - translation for filter popup captions.\n * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering.\n * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.\n * A way to define your own filter types per column\n */\n/**\n * @internal\n */\n\nexport class FilterPlugin extends BasePlugin {\n pop?: HTMLRevogrFilterPanelElement;\n filterCollection: FilterCollection = {};\n multiFilterItems: MultiFilterItem = {};\n\n filterByType: Record<string, string[]> =\n { ...filterTypes };\n filterNameIndexByType: Record<string, string> = {\n ...filterNames,\n };\n filterFunctionsIndexedByType: Record<string, LogicFunction> = {\n ...filterCoreFunctionsIndexedByType,\n };\n\n filterProp = FILTER_PROP;\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: ColumnFilterConfig,\n ) {\n super(revogrid, providers);\n if (config) {\n this.initConfig(config);\n }\n\n const existingNodes = this.revogrid.registerVNode.filter(\n n => typeof n === 'object' && n.$tag$ !== FILTE_PANEL,\n );\n this.revogrid.registerVNode = [\n ...existingNodes,\n <revogr-filter-panel\n filterItems={this.multiFilterItems}\n filterNames={this.filterNameIndexByType}\n filterEntities={this.filterFunctionsIndexedByType}\n filterCaptions={config?.localization?.captions}\n onFilterChange={e => this.onFilterChange(e.detail)}\n onResetChange={e => this.onFilterReset(e.detail)}\n disableDynamicFiltering={config?.disableDynamicFiltering}\n ref={e => (this.pop = e)}\n > { this.extraContent() }</revogr-filter-panel>,\n ];\n\n const aftersourceset = async () => {\n const filterCollectionProps = Object.keys(this.filterCollection);\n if (filterCollectionProps.length > 0) {\n // handle old way of filtering by reworking FilterCollection to new MultiFilterItem\n filterCollectionProps.forEach((prop, index) => {\n if (!this.multiFilterItems[prop]) {\n this.multiFilterItems[prop] = [\n {\n id: index,\n type: this.filterCollection[prop].type,\n value: this.filterCollection[prop].value,\n relation: 'and',\n },\n ];\n }\n });\n }\n await this.runFiltering(this.multiFilterItems);\n };\n this.addEventListener(\n 'headerclick',\n (e: CustomEvent<HTMLRevoGridElementEventMap['headerclick']>) =>\n this.headerclick(e),\n );\n this.addEventListener(\n FILTER_CONFIG_CHANGED_EVENT,\n ({ detail }: CustomEvent<ColumnFilterConfig | boolean>) => {\n if (!detail) {\n this.clearFiltering();\n return;\n }\n if (typeof detail === 'object') {\n this.initConfig(detail);\n }\n aftersourceset();\n },\n );\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('filter', ({ detail }: CustomEvent) =>\n this.onFilterChange(detail),\n );\n }\n\n extraContent(): any {\n return null;\n }\n\n initConfig(config: ColumnFilterConfig) {\n if (config.multiFilterItems) {\n this.multiFilterItems = { ...config.multiFilterItems };\n }\n // Add custom filters\n if (config.customFilters) {\n for (let customFilterType in config.customFilters) {\n const cFilter = config.customFilters[customFilterType];\n if (!this.filterByType[cFilter.columnFilterType]) {\n this.filterByType[cFilter.columnFilterType] = [];\n }\n this.filterByType[cFilter.columnFilterType].push(customFilterType);\n this.filterFunctionsIndexedByType[customFilterType] = cFilter.func;\n this.filterNameIndexByType[customFilterType] = cFilter.name;\n }\n }\n\n // Add filterProp if provided in config\n if (config.filterProp) {\n this.filterProp = config.filterProp;\n }\n\n /**\n * which filters has to be included/excluded\n * convinient way to exclude system filters\n */\n const cfgInlcude = config.include;\n if (cfgInlcude) {\n const filters: Record<string, string[]> = {};\n\n for (let t in this.filterByType) {\n // validate filters, if appropriate function present\n const newTypes = this.filterByType[t].filter(\n f => cfgInlcude.indexOf(f) > -1,\n );\n if (newTypes.length) {\n filters[t] = newTypes;\n }\n }\n // if any valid filters provided show them\n if (Object.keys(filters).length > 0) {\n this.filterByType = filters;\n }\n }\n\n if (config.collection) {\n this.filterCollection = reduce(\n config.collection,\n (result: FilterCollection, item, prop) => {\n if (this.filterFunctionsIndexedByType[item.type]) {\n result[prop] = item;\n } else {\n console.warn(`${item.type} type is not found.`);\n }\n return result;\n },\n {},\n );\n }\n\n if (config.localization) {\n if (config.localization.filterNames) {\n Object.entries(config.localization.filterNames).forEach(([k, v]) => {\n if (this.filterNameIndexByType[k] != void 0) {\n this.filterNameIndexByType[k] = v;\n }\n });\n }\n }\n }\n\n async headerclick(e: CustomEvent<ColumnRegular>) {\n const el = e.detail.originalEvent?.target as HTMLElement;\n if (!isFilterBtn(el)) {\n return;\n }\n e.preventDefault();\n\n // close if same\n const changes = await this.pop?.getChanges();\n if (changes && changes?.prop === e.detail.prop) {\n this.pop?.show();\n return;\n }\n\n if (!this.pop) {\n return;\n }\n\n // filter button clicked, open filter dialog\n const gridPos = this.revogrid.getBoundingClientRect();\n const buttonPos = el.getBoundingClientRect();\n const prop = e.detail.prop;\n\n this.pop.show({\n ...this.filterCollection[prop],\n x: buttonPos.x - gridPos.x,\n y: buttonPos.y - gridPos.y + buttonPos.height,\n autoCorrect: true,\n prop,\n filterTypes: this.getColumnFilter(e.detail.filter),\n });\n }\n\n getColumnFilter(\n type?: boolean | string | string[],\n ): Record<string, string[]> {\n let filterType = 'string';\n if (!type) {\n return { [filterType]: this.filterByType[filterType] };\n }\n\n // if custom column filter\n if (this.isValidType(type)) {\n filterType = type;\n\n // if multiple filters applied\n } else if (typeof type === 'object' && type.length) {\n return type.reduce((r: Record<string, string[]>, multiType) => {\n if (this.isValidType(multiType)) {\n r[multiType] = this.filterByType[multiType];\n }\n return r;\n }, {});\n }\n return { [filterType]: this.filterByType[filterType] };\n }\n\n isValidType(type: any): type is string {\n return !!(typeof type === 'string' && this.filterByType[type]);\n }\n\n /**\n * Called on internal component change\n */\n async onFilterChange(filterItems: MultiFilterItem) {\n // store the filter items\n this.multiFilterItems = filterItems;\n\n // run the filtering when the items change\n this.runFiltering(this.multiFilterItems);\n }\n\n onFilterReset(prop?: ColumnProp) {\n delete this.multiFilterItems[prop ?? ''];\n this.onFilterChange(this.multiFilterItems);\n }\n\n /**\n * Triggers grid filtering\n */\n async doFiltering(\n collection: FilterCollection,\n source: DataType[],\n columns: ColumnRegular[],\n filterItems: MultiFilterItem,\n ) {\n const columnsToUpdate: ColumnRegular[] = [];\n\n /**\n * Loop through the columns and update the columns that need to be updated with the `hasFilter` property.\n */\n const columnByProp: Record<string, ColumnRegular> = {};\n columns.forEach(rgCol => {\n const column = { ...rgCol };\n const hasFilter = filterItems[column.prop];\n columnByProp[column.prop] = column;\n\n /**\n * If the column has a filter and it's not already marked as filtered, update the column.\n */\n if (column[this.filterProp] && !hasFilter) {\n delete column[this.filterProp];\n columnsToUpdate.push(column);\n }\n\n /**\n * If the column does not have a filter and it's marked as filtered, update the column.\n */\n\n if (!column[this.filterProp] && hasFilter) {\n columnsToUpdate.push(column);\n column[this.filterProp] = true;\n }\n });\n const itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);\n // check is filter event prevented\n const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {\n collection,\n itemsToFilter: itemsToTrim,\n source,\n filterItems,\n });\n if (defaultPrevented) {\n return;\n }\n\n // check is trimmed event prevented\n const isAddedEvent = await this.revogrid.addTrimmed(\n detail.itemsToFilter,\n FILTER_TRIMMED_TYPE,\n );\n if (isAddedEvent.defaultPrevented) {\n return;\n }\n\n // applies the hasFilter to the columns to show filter icon\n this.providers.column.updateColumns(columnsToUpdate);\n this.emit('afterfilterapply');\n }\n\n async clearFiltering() {\n this.multiFilterItems = {};\n await this.runFiltering(this.multiFilterItems);\n }\n\n async runFiltering(multiFilterItems: MultiFilterItem) {\n const collection: FilterCollection = {};\n\n // handle old filterCollection to return the first filter only (if any) from multiFilterItems\n const filterProps = Object.keys(multiFilterItems);\n\n for (const prop of filterProps) {\n // check if we have any filter for a column\n if (multiFilterItems[prop].length > 0) {\n const firstFilterItem = multiFilterItems[prop][0];\n collection[prop] = {\n filter: this.filterFunctionsIndexedByType[firstFilterItem.type],\n type: firstFilterItem.type,\n value: firstFilterItem.value,\n };\n }\n }\n\n this.filterCollection = collection;\n const columns = this.providers.column.getColumns();\n // run the filtering on the main source only\n const source = this.providers.data.stores['rgRow'].store.get('source');\n\n const { defaultPrevented, detail } = this.emit('beforefilterapply', {\n collection: this.filterCollection,\n source,\n columns,\n filterItems: this.multiFilterItems,\n });\n if (defaultPrevented) {\n return;\n }\n this.doFiltering(\n detail.collection,\n detail.source,\n detail.columns,\n detail.filterItems,\n );\n }\n\n /**\n * Get trimmed rows based on filter\n */\n getRowFilter(\n rows: DataType[],\n filterItems: MultiFilterItem,\n columnByProp: Record<string, ColumnRegular>\n ): Record<number, boolean> {\n const propKeys = Object.keys(filterItems);\n\n const trimmed: Record<number, boolean> = {};\n let propFilterSatisfiedCount = 0;\n let lastFilterResults: boolean[] = [];\n\n // each rows\n rows.forEach((model, rowIndex) => {\n // check filter by column properties\n for (const prop of propKeys) {\n const propFilters = filterItems[prop];\n\n // reset the count of satisfied filters\n propFilterSatisfiedCount = 0;\n // reset the array of last filter results\n lastFilterResults = [];\n\n // testing each filter for a prop\n for (const [filterIndex, filterData] of propFilters.entries()) {\n // the filter LogicFunction based on the type\n const filterFunc = this.filterFunctionsIndexedByType[filterData.type];\n\n // THE MAGIC OF FILTERING IS HERE\n const column = columnByProp[prop];\n // If there is no column but user wants to filter by a property\n const value = column ? getCellDataParsed(model, columnByProp[prop]) : model[prop];\n // OR relation\n if (filterData.relation === 'or') {\n // reset the array of last filter results\n lastFilterResults = [];\n // if the filter is satisfied, continue to the next filter\n if (filterFunc(value, filterData.value)) {\n continue;\n }\n // if the filter is not satisfied, count it\n propFilterSatisfiedCount++;\n\n // AND relation\n } else {\n // 'and' relation will need to know the next filter\n // so we save this current filter to include it in the next filter\n lastFilterResults.push(!filterFunc(value, filterData.value));\n\n // check first if we have a filter on the next index to pair it with this current filter\n const nextFilterData = propFilters[filterIndex + 1];\n // stop the sequence if there is no next filter or if the next filter is not an 'and' relation\n if (!nextFilterData || nextFilterData.relation !== 'and') {\n // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied\n if (lastFilterResults.indexOf(true) === -1) {\n // reset the array of last filter results\n lastFilterResults = [];\n continue;\n }\n\n // we need to add all of the lastFilterResults since we need to satisfy all\n propFilterSatisfiedCount += lastFilterResults.length;\n // reset the array of last filter results\n lastFilterResults = [];\n }\n }\n } // end of propFilters forEach\n\n // add to the list of removed/trimmed rows of filter condition is satisfied\n if (propFilterSatisfiedCount === propFilters.length) {\n trimmed[rowIndex] = true;\n }\n } // end of for-of propKeys\n });\n return trimmed;\n }\n}\n"]}
1
+ {"version":3,"file":"filter.plugin.js","sourceRoot":"","sources":["../../../src/plugins/filter/filter.plugin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport reduce from 'lodash/reduce';\n\nimport type { ColumnProp, ColumnRegular, DataType, PluginProviders } from '@type';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_PROP, isFilterBtn } from './filter.button';\nimport {\n filterCoreFunctionsIndexedByType,\n filterNames,\n filterTypes,\n} from './filter.indexed';\n\nimport type {\n ColumnFilterConfig,\n FilterCollection,\n LogicFunction,\n MultiFilterItem,\n} from './filter.types';\n\nimport { getCellDataParsed } from '../../utils';\n\nexport * from './filter.types';\nexport * from './filter.indexed';\nexport * from './filter.button';\n\nexport const FILTER_TRIMMED_TYPE = 'filter';\nexport const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';\nexport const FILTE_PANEL = 'revogr-filter-panel';\n\n/**\n * @typedef ColumnFilterConfig\n * @type {object}\n * @property {FilterCollection|undefined} collection - preserved filter data\n * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored\n * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.\n * @property {FilterLocalization|undefined} localization - translation for filter popup captions.\n * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering.\n * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.\n * A way to define your own filter types per column\n */\n/**\n * @internal\n */\n\nexport class FilterPlugin extends BasePlugin {\n pop?: HTMLRevogrFilterPanelElement;\n filterCollection: FilterCollection = {};\n multiFilterItems: MultiFilterItem = {};\n\n filterByType: Record<string, string[]> =\n { ...filterTypes };\n filterNameIndexByType: Record<string, string> = {\n ...filterNames,\n };\n filterFunctionsIndexedByType: Record<string, LogicFunction> = {\n ...filterCoreFunctionsIndexedByType,\n };\n\n filterProp = FILTER_PROP;\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: ColumnFilterConfig,\n ) {\n super(revogrid, providers);\n if (config) {\n this.initConfig(config);\n }\n\n const existingNodes = this.revogrid.registerVNode.filter(\n n => typeof n === 'object' && n.$tag$ !== FILTE_PANEL,\n );\n this.revogrid.registerVNode = [\n ...existingNodes,\n <revogr-filter-panel\n filterItems={this.multiFilterItems}\n filterNames={this.filterNameIndexByType}\n filterEntities={this.filterFunctionsIndexedByType}\n filterCaptions={config?.localization?.captions}\n onFilterChange={e => this.onFilterChange(e.detail)}\n onResetChange={e => this.onFilterReset(e.detail)}\n disableDynamicFiltering={config?.disableDynamicFiltering}\n ref={e => (this.pop = e)}\n > { this.extraContent() }</revogr-filter-panel>,\n ];\n\n const aftersourceset = async () => {\n const filterCollectionProps = Object.keys(this.filterCollection);\n if (filterCollectionProps.length > 0) {\n // handle old way of filtering by reworking FilterCollection to new MultiFilterItem\n filterCollectionProps.forEach((prop, index) => {\n if (!this.multiFilterItems[prop]) {\n this.multiFilterItems[prop] = [\n {\n id: index,\n type: this.filterCollection[prop].type,\n value: this.filterCollection[prop].value,\n relation: 'and',\n },\n ];\n }\n });\n }\n if (Object.keys(this.multiFilterItems).length === 0) {\n return;\n }\n await this.runFiltering(this.multiFilterItems);\n };\n this.addEventListener(\n 'headerclick',\n (e: CustomEvent<HTMLRevoGridElementEventMap['headerclick']>) =>\n this.headerclick(e),\n );\n this.addEventListener(\n FILTER_CONFIG_CHANGED_EVENT,\n ({ detail }: CustomEvent<ColumnFilterConfig | boolean>) => {\n if (!detail) {\n this.clearFiltering();\n return;\n }\n if (typeof detail === 'object') {\n this.initConfig(detail);\n }\n aftersourceset();\n },\n );\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('filter', ({ detail }: CustomEvent) =>\n this.onFilterChange(detail),\n );\n }\n\n extraContent(): any {\n return null;\n }\n\n initConfig(config: ColumnFilterConfig) {\n if (config.multiFilterItems) {\n this.multiFilterItems = { ...config.multiFilterItems };\n }\n // Add custom filters\n if (config.customFilters) {\n for (let customFilterType in config.customFilters) {\n const cFilter = config.customFilters[customFilterType];\n if (!this.filterByType[cFilter.columnFilterType]) {\n this.filterByType[cFilter.columnFilterType] = [];\n }\n this.filterByType[cFilter.columnFilterType].push(customFilterType);\n this.filterFunctionsIndexedByType[customFilterType] = cFilter.func;\n this.filterNameIndexByType[customFilterType] = cFilter.name;\n }\n }\n\n // Add filterProp if provided in config\n if (config.filterProp) {\n this.filterProp = config.filterProp;\n }\n\n /**\n * which filters has to be included/excluded\n * convinient way to exclude system filters\n */\n const cfgInlcude = config.include;\n if (cfgInlcude) {\n const filters: Record<string, string[]> = {};\n\n for (let t in this.filterByType) {\n // validate filters, if appropriate function present\n const newTypes = this.filterByType[t].filter(\n f => cfgInlcude.indexOf(f) > -1,\n );\n if (newTypes.length) {\n filters[t] = newTypes;\n }\n }\n // if any valid filters provided show them\n if (Object.keys(filters).length > 0) {\n this.filterByType = filters;\n }\n }\n\n if (config.collection) {\n this.filterCollection = reduce(\n config.collection,\n (result: FilterCollection, item, prop) => {\n if (this.filterFunctionsIndexedByType[item.type]) {\n result[prop] = item;\n } else {\n console.warn(`${item.type} type is not found.`);\n }\n return result;\n },\n {},\n );\n }\n\n if (config.localization) {\n if (config.localization.filterNames) {\n Object.entries(config.localization.filterNames).forEach(([k, v]) => {\n if (this.filterNameIndexByType[k] != void 0) {\n this.filterNameIndexByType[k] = v;\n }\n });\n }\n }\n }\n\n async headerclick(e: CustomEvent<ColumnRegular>) {\n const el = e.detail.originalEvent?.target as HTMLElement;\n if (!isFilterBtn(el)) {\n return;\n }\n e.preventDefault();\n\n // close if same\n const changes = await this.pop?.getChanges();\n if (changes && changes?.prop === e.detail.prop) {\n this.pop?.show();\n return;\n }\n\n if (!this.pop) {\n return;\n }\n\n // filter button clicked, open filter dialog\n const gridPos = this.revogrid.getBoundingClientRect();\n const buttonPos = el.getBoundingClientRect();\n const prop = e.detail.prop;\n\n this.pop.show({\n ...this.filterCollection[prop],\n x: buttonPos.x - gridPos.x,\n y: buttonPos.y - gridPos.y + buttonPos.height,\n autoCorrect: true,\n prop,\n filterTypes: this.getColumnFilter(e.detail.filter),\n });\n }\n\n getColumnFilter(\n type?: boolean | string | string[],\n ): Record<string, string[]> {\n let filterType = 'string';\n if (!type) {\n return { [filterType]: this.filterByType[filterType] };\n }\n\n // if custom column filter\n if (this.isValidType(type)) {\n filterType = type;\n\n // if multiple filters applied\n } else if (typeof type === 'object' && type.length) {\n return type.reduce((r: Record<string, string[]>, multiType) => {\n if (this.isValidType(multiType)) {\n r[multiType] = this.filterByType[multiType];\n }\n return r;\n }, {});\n }\n return { [filterType]: this.filterByType[filterType] };\n }\n\n isValidType(type: any): type is string {\n return !!(typeof type === 'string' && this.filterByType[type]);\n }\n\n /**\n * Called on internal component change\n */\n async onFilterChange(filterItems: MultiFilterItem) {\n // store the filter items\n this.multiFilterItems = filterItems;\n\n // run the filtering when the items change\n this.runFiltering(this.multiFilterItems);\n }\n\n onFilterReset(prop?: ColumnProp) {\n delete this.multiFilterItems[prop ?? ''];\n this.onFilterChange(this.multiFilterItems);\n }\n\n /**\n * Triggers grid filtering\n */\n async doFiltering(\n collection: FilterCollection,\n source: DataType[],\n columns: ColumnRegular[],\n filterItems: MultiFilterItem,\n ) {\n const columnsToUpdate: ColumnRegular[] = [];\n\n /**\n * Loop through the columns and update the columns that need to be updated with the `hasFilter` property.\n */\n const columnByProp: Record<string, ColumnRegular> = {};\n columns.forEach(rgCol => {\n const column = { ...rgCol };\n const hasFilter = filterItems[column.prop];\n columnByProp[column.prop] = column;\n\n /**\n * If the column has a filter and it's not already marked as filtered, update the column.\n */\n if (column[this.filterProp] && !hasFilter) {\n delete column[this.filterProp];\n columnsToUpdate.push(column);\n }\n\n /**\n * If the column does not have a filter and it's marked as filtered, update the column.\n */\n\n if (!column[this.filterProp] && hasFilter) {\n columnsToUpdate.push(column);\n column[this.filterProp] = true;\n }\n });\n const itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);\n // check is filter event prevented\n const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {\n collection,\n itemsToFilter: itemsToTrim,\n source,\n filterItems,\n });\n if (defaultPrevented) {\n return;\n }\n\n // check is trimmed event prevented\n const isAddedEvent = await this.revogrid.addTrimmed(\n detail.itemsToFilter,\n FILTER_TRIMMED_TYPE,\n );\n if (isAddedEvent.defaultPrevented) {\n return;\n }\n\n // applies the hasFilter to the columns to show filter icon\n this.providers.column.updateColumns(columnsToUpdate);\n this.emit('afterfilterapply');\n }\n\n async clearFiltering() {\n this.multiFilterItems = {};\n await this.runFiltering(this.multiFilterItems);\n }\n\n async runFiltering(multiFilterItems: MultiFilterItem) {\n const collection: FilterCollection = {};\n\n // handle old filterCollection to return the first filter only (if any) from multiFilterItems\n const filterProps = Object.keys(multiFilterItems);\n\n for (const prop of filterProps) {\n // check if we have any filter for a column\n if (multiFilterItems[prop].length > 0) {\n const firstFilterItem = multiFilterItems[prop][0];\n collection[prop] = {\n filter: this.filterFunctionsIndexedByType[firstFilterItem.type],\n type: firstFilterItem.type,\n value: firstFilterItem.value,\n };\n }\n }\n\n this.filterCollection = collection;\n const columns = this.providers.column.getColumns();\n // run the filtering on the main source only\n const source = this.providers.data.stores['rgRow'].store.get('source');\n\n const { defaultPrevented, detail } = this.emit('beforefilterapply', {\n collection: this.filterCollection,\n source,\n columns,\n filterItems: this.multiFilterItems,\n });\n if (defaultPrevented) {\n return;\n }\n this.doFiltering(\n detail.collection,\n detail.source,\n detail.columns,\n detail.filterItems,\n );\n }\n\n /**\n * Get trimmed rows based on filter\n */\n getRowFilter(\n rows: DataType[],\n filterItems: MultiFilterItem,\n columnByProp: Record<string, ColumnRegular>\n ): Record<number, boolean> {\n const propKeys = Object.keys(filterItems);\n\n const trimmed: Record<number, boolean> = {};\n let propFilterSatisfiedCount = 0;\n let lastFilterResults: boolean[] = [];\n\n // each rows\n rows.forEach((model, rowIndex) => {\n // check filter by column properties\n for (const prop of propKeys) {\n const propFilters = filterItems[prop];\n\n // reset the count of satisfied filters\n propFilterSatisfiedCount = 0;\n // reset the array of last filter results\n lastFilterResults = [];\n\n // testing each filter for a prop\n for (const [filterIndex, filterData] of propFilters.entries()) {\n // the filter LogicFunction based on the type\n const filterFunc = this.filterFunctionsIndexedByType[filterData.type];\n\n // THE MAGIC OF FILTERING IS HERE\n const column = columnByProp[prop];\n // If there is no column but user wants to filter by a property\n const value = column ? getCellDataParsed(model, columnByProp[prop]) : model[prop];\n // OR relation\n if (filterData.relation === 'or') {\n // reset the array of last filter results\n lastFilterResults = [];\n // if the filter is satisfied, continue to the next filter\n if (filterFunc(value, filterData.value)) {\n continue;\n }\n // if the filter is not satisfied, count it\n propFilterSatisfiedCount++;\n\n // AND relation\n } else {\n // 'and' relation will need to know the next filter\n // so we save this current filter to include it in the next filter\n lastFilterResults.push(!filterFunc(value, filterData.value));\n\n // check first if we have a filter on the next index to pair it with this current filter\n const nextFilterData = propFilters[filterIndex + 1];\n // stop the sequence if there is no next filter or if the next filter is not an 'and' relation\n if (!nextFilterData || nextFilterData.relation !== 'and') {\n // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied\n if (lastFilterResults.indexOf(true) === -1) {\n // reset the array of last filter results\n lastFilterResults = [];\n continue;\n }\n\n // we need to add all of the lastFilterResults since we need to satisfy all\n propFilterSatisfiedCount += lastFilterResults.length;\n // reset the array of last filter results\n lastFilterResults = [];\n }\n }\n } // end of propFilters forEach\n\n // add to the list of removed/trimmed rows of filter condition is satisfied\n if (propFilterSatisfiedCount === propFilters.length) {\n trimmed[rowIndex] = true;\n }\n } // end of for-of propKeys\n });\n return trimmed;\n }\n}\n"]}
@@ -101,9 +101,8 @@ export default class SortingPlugin extends BasePlugin {
101
101
  if (beforeApplyEvent.defaultPrevented) {
102
102
  return;
103
103
  }
104
- order = beforeApplyEvent.detail.order;
105
- const cmp = this.getComparer(column, order);
106
- if (additive && this.sorting) {
104
+ const cmp = this.getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);
105
+ if (beforeApplyEvent.detail.additive && this.sorting) {
107
106
  const sorting = {};
108
107
  const sortingFunc = {};
109
108
  this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
@@ -167,11 +166,15 @@ export default class SortingPlugin extends BasePlugin {
167
166
  // row indexes
168
167
  const proxyItems = storeService.store.get('proxyItems');
169
168
  const newItemsOrder = this.sortIndexByItems([...proxyItems], source, sortingFunc);
170
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
169
+ // take row indexes before trim applied and proxy items
170
+ const prevItems = storeService.store.get('items');
171
171
  storeService.setData({
172
172
  proxyItems: newItemsOrder,
173
173
  source: [...source],
174
174
  });
175
+ // take currently visible row indexes
176
+ const newItems = storeService.store.get('items');
177
+ this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
175
178
  }
176
179
  }
177
180
  this.emit('aftersortingapply');
@@ -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';\n\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';\nimport { rowTypes } from '@store';\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 (order?: SortingOrder, comparison?: SortingOrderFunction) =>\n this.runSorting(order, comparison),\n 50,\n );\n\n runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ) {\n 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 = ({\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 = ({\n detail: { order },\n }: CustomEvent<ColumnSetEvent>) => {\n const columns = this.providers.column.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 = (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 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 = this.providers.column.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 sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = rowTypes,\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 storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n // row indexes\n const newItemsOrder = storeService.store.get('items'); // recover indexes range(0, source.length)\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\n storeService.setData({ proxyItems: newItemsOrder, source: [...source] });\n }\n } else {\n // set sorting\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n\n const newItemsOrder = this.sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\n \n storeService.setData({\n proxyItems: newItemsOrder,\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":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAW5C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAQlC;;;;;;;;GAQG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IAanD,UAAU,CACR,KAAoB,EACpB,UAAiC;;QAEjC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7B,MAAA,IAAI,CAAC,cAAc,oDAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,YACS,QAA6B,EACpC,SAA0B;QAE1B,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAHpB,aAAQ,GAAR,QAAQ,CAAqB;QAjBtC,mBAAc,GAAwB,IAAI,CAAC;QAC3C,iBAAY,GAAG,QAAQ,CACrB,CAAC,KAAoB,EAAE,UAAiC,EAAE,EAAE,CAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,EACpC,EAAE,CACH,CAAC;QAiBA,MAAM,eAAe,GAAG,CAAC,EACvB,MAAM,EAAE,EAAE,IAAI,EAAE,GAIhB,EAAE,EAAE;YACJ,sCAAsC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;oBACjC,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,EACvB,MAAM,EAAE,EAAE,KAAK,EAAE,GACW,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACnD,MAAM,WAAW,GAAyB,EAAE,CAAC;YAE7C,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAC1B,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,EAC9B,KAAK,CAAC,IAAI,CAAC,CACZ,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,CAAkC,EAAE,EAAE;;YACzD,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,CACd,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,CAAC,CAAC,MAAM,CAAC,KAAK,EACd,MAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,aAAa,0CAAE,QAAQ,CAClC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,YAAY,CAAC,KAAoB,EAAE,WAAkC;QACnE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CACjC,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAChC,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,MAAiC,EAAE,KAAY;;QACzD,MAAM,OAAO,GACX,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,KAAI,IAAI,CAAC,kBAAkB,CAAC;QAClE,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,MAAqB,EAAE,KAAa,EAAE,QAAiB;;QACjE,IAAI,KAAK,GAAU,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CACtD,WAAW,CAAC,MAAM,CAAC,MAAM,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,CACT,CAAC;QAEF,kBAAkB;QAClB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,KAAK;YACL,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5F,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,MAAM,WAAW,GAAyB,EAAE,CAAC;YAE7C,IAAI,CAAC,OAAO,mCACP,IAAI,CAAC,OAAO,GACZ,OAAO,CACX,CAAC;YACF,wEAAwE;YACxE,IAAI,CAAC,WAAW,mCACX,IAAI,CAAC,WAAW,GAChB,WAAW,CACf,CAAC;YAEF,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC7B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,EAAE,CAAC;gBACV,gBAAgB;gBAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACC,MAAA,IAAI,CAAC,OAAO,+CAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAA,IAAI,CAAC,WAAW,+CAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CACF,OAAsB,EACtB,WAAkC,EAClC,QAAyB,QAAQ;QAEjC,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAE7B,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtD,WAAW;gBACX,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChD,cAAc;gBACd,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxD,cAAc;gBACd,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C;gBACjG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;gBAC9F,YAAY,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAE/B,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtD,WAAW;gBACX,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChD,cAAc;gBACd,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAExD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CACzC,CAAC,GAAG,UAAU,CAAC,EACf,MAAM,EACN,WAAW,CACZ,CAAC;gBAEF,uDAAuD;gBACvD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClD,YAAY,CAAC,OAAO,CAAC;oBACnB,UAAU,EAAE,aAAa;oBACzB,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;iBACpB,CAAC,CAAC;gBACH,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB,CAAC,IAAgB,EAAE,CAAW,EAAE,CAAW;;QAC3D,MAAM,EAAE,GAAG,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAG,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAG,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;QAE/C,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,GAAoB;QAClC,OAAO,CAAC,IAAgB,EAAE,CAAW,EAAE,CAAW,EAAU,EAAE;YAC5D,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC;IAED,gBAAgB,CACd,OAAiB,EACjB,MAAkB,EAClB,cAAoC,EAAE;QAEtC,0CAA0C;QAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,mBAAmB;YACnB,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,EAAE;QACF;;;WAGG;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAExB;;;mBAGG;gBACH,MAAM,MAAM,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,YAAmB;QAC9B,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,MAAM,CAAC;YAChB,KAAK,MAAM;gBACT,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;CACF","sourcesContent":["import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\n\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';\nimport { rowTypes } from '@store';\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 (order?: SortingOrder, comparison?: SortingOrderFunction) =>\n this.runSorting(order, comparison),\n 50,\n );\n\n runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ) {\n 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 = ({\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 = ({\n detail: { order },\n }: CustomEvent<ColumnSetEvent>) => {\n const columns = this.providers.column.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 = (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 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 = this.providers.column.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 const cmp = this.getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);\n\n if (beforeApplyEvent.detail.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 sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = rowTypes,\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 storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n // row indexes\n const newItemsOrder = storeService.store.get('items'); // recover indexes range(0, source.length)\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\n storeService.setData({ proxyItems: newItemsOrder, source: [...source] });\n }\n } else {\n // set sorting\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n\n const newItemsOrder = this.sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n \n // take row indexes before trim applied and proxy items\n const prevItems = storeService.store.get('items');\n storeService.setData({\n proxyItems: newItemsOrder,\n source: [...source],\n });\n // take currently visible row indexes\n const newItems = storeService.store.get('items');\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);\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"]}
@@ -83,11 +83,13 @@ export default class DimensionProvider {
83
83
  * @param columns - new columns data
84
84
  * @param disableVirtualX - disable virtual data for X axis
85
85
  */
86
- applyNewColumns(columns, disableVirtualX) {
86
+ applyNewColumns(columns, disableVirtualX, keepOld = false) {
87
87
  // Apply new columns to dimension provider
88
88
  for (let type of columnTypes) {
89
- // Clear existing data in the dimension provider
90
- this.stores[type].drop();
89
+ if (!keepOld) {
90
+ // Clear existing data in the dimension provider
91
+ this.stores[type].drop();
92
+ }
91
93
  // Get the new columns for the current type
92
94
  const items = columns[type];
93
95
  // Determine if virtual data should be disabled for the current type
@@ -158,25 +160,8 @@ export default class DimensionProvider {
158
160
  }
159
161
  updateSizesPositionByNewDataIndexes(type, newItemsOrder, prevItemsOrder = []) {
160
162
  // Move custom sizes to new order
161
- const dimService = this.stores[type];
162
- const customSizes = Object.assign({}, dimService.store.get('sizes'));
163
- if (Object.keys(customSizes).length) {
164
- const originalIndices = new Map();
165
- prevItemsOrder.forEach((value, index) => {
166
- originalIndices.set(value, index);
167
- });
168
- const newSizes = {};
169
- newItemsOrder.forEach((value, newIndex) => {
170
- const originalIndex = originalIndices.get(value);
171
- if (originalIndex !== newIndex && customSizes[originalIndex]) {
172
- newSizes[newIndex] = customSizes[originalIndex];
173
- delete customSizes[originalIndex];
174
- }
175
- });
176
- if (Object.keys(newSizes).length) {
177
- this.setCustomSizes(type, Object.assign(Object.assign({}, customSizes), newSizes));
178
- }
179
- }
163
+ this.stores[type].updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder);
164
+ this.updateViewport(type, true);
180
165
  }
181
166
  }
182
167
  //# sourceMappingURL=dimension.provider.js.map
@@ -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 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>, t: MultiDimensionType) => {\n sources[t] = new DimensionStore(t);\n sources[t].store.onChange('realSize', () => sizeChanged(t));\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 /**\n * Applies new columns to the dimension provider\n * @param columns - new columns data\n * @param disableVirtualX - disable virtual data for X axis\n */\n applyNewColumns(\n columns: Record<DimensionCols, ColumnRegular[]>,\n disableVirtualX: boolean,\n ) {\n // Apply new columns to dimension provider\n for (let type of columnTypes) {\n // Clear existing data in the dimension provider\n this.stores[type].drop();\n\n // Get the new columns for the current type\n const items = columns[type];\n\n // Determine if virtual data should be disabled for the current type\n const noVirtual = type !== 'rgCol' || disableVirtualX;\n\n // Set the items count in the dimension provider\n this.stores[type].setStore({ count: items.length });\n\n // Set the custom sizes for the columns\n const newSizes = getColumnSizes(items);\n this.stores[type].setDimensionSize(newSizes);\n\n // Update the viewport with new data\n const vpUpdate: Partial<ViewportState> = {\n // This triggers drop on realCount change\n realCount: items.length,\n };\n\n // If virtual data is disabled, set the virtual size to the real size\n if (noVirtual) {\n vpUpdate.virtualSize = this.stores[type].getCurrentState().realSize;\n }\n\n // Update the viewport\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 updateSizesPositionByNewDataIndexes(type: MultiDimensionType, newItemsOrder: number[], prevItemsOrder: number[] = []) {\n // Move custom sizes to new order\n const dimService = this.stores[type];\n const customSizes = {...dimService.store.get('sizes')};\n if (Object.keys(customSizes).length) {\n const originalIndices = new Map();\n prevItemsOrder.forEach((value, index) => {\n originalIndices.set(value, index);\n });\n const newSizes: Record<number, number> = {};\n newItemsOrder.forEach((value, newIndex) => {\n const originalIndex = originalIndices.get(value);\n if (originalIndex !== newIndex && customSizes[originalIndex]) {\n newSizes[newIndex] = customSizes[originalIndex];\n delete customSizes[originalIndex];\n }\n });\n if (Object.keys(newSizes).length) {\n this.setCustomSizes(type, {\n ...customSizes,\n ...newSizes,\n });\n }\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>, t: MultiDimensionType) => {\n sources[t] = new DimensionStore(t);\n sources[t].store.onChange('realSize', () => sizeChanged(t));\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 /**\n * Applies new columns to the dimension provider\n * @param columns - new columns data\n * @param disableVirtualX - disable virtual data for X axis\n */\n applyNewColumns(\n columns: Record<DimensionCols, ColumnRegular[]>,\n disableVirtualX: boolean,\n keepOld = false,\n ) {\n // Apply new columns to dimension provider\n for (let type of columnTypes) {\n if (!keepOld) {\n // Clear existing data in the dimension provider\n this.stores[type].drop();\n }\n\n // Get the new columns for the current type\n const items = columns[type];\n\n // Determine if virtual data should be disabled for the current type\n const noVirtual = type !== 'rgCol' || disableVirtualX;\n\n // Set the items count in the dimension provider\n this.stores[type].setStore({ count: items.length });\n\n // Set the custom sizes for the columns\n const newSizes = getColumnSizes(items);\n this.stores[type].setDimensionSize(newSizes);\n\n // Update the viewport with new data\n const vpUpdate: Partial<ViewportState> = {\n // This triggers drop on realCount change\n realCount: items.length,\n };\n\n // If virtual data is disabled, set the virtual size to the real size\n if (noVirtual) {\n vpUpdate.virtualSize = this.stores[type].getCurrentState().realSize;\n }\n\n // Update the viewport\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(\n coordinate,\n dimension,\n force,\n );\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 updateSizesPositionByNewDataIndexes(\n type: MultiDimensionType,\n newItemsOrder: number[],\n prevItemsOrder: number[] = [],\n ) {\n // Move custom sizes to new order\n this.stores[type].updateSizesPositionByIndexes(\n newItemsOrder,\n prevItemsOrder,\n );\n this.updateViewport(type, true);\n }\n}\n"]}
@@ -8,18 +8,13 @@
8
8
  export const trimmedPlugin = (store) => ({
9
9
  set(k, newVal) {
10
10
  switch (k) {
11
- case 'trimmed':
11
+ case 'trimmed': {
12
12
  const proxy = store.get('proxyItems');
13
13
  const trimmed = gatherTrimmedItems(newVal);
14
- const newItems = proxy.reduce((result, v) => {
15
- // check if present in new trimmed remove from items (filter)
16
- if (!trimmed[v]) {
17
- result.push(v);
18
- }
19
- return result;
20
- }, []);
14
+ const newItems = proxy.filter(v => !trimmed[v]);
21
15
  store.set('items', newItems);
22
16
  break;
17
+ }
23
18
  }
24
19
  },
25
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"trimmed.plugin.js","sourceRoot":"","sources":["../../../src/store/dataSource/trimmed.plugin.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAsB,KAAuC,EAAyC,EAAE,CAAC,CAAC;IACrI,GAAG,CAAC,CAAC,EAAE,MAAM;QACX,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,SAAS;gBACZ,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAiB,CAAC,CAAC;gBAEtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAgB,EAAE,CAAS,EAAE,EAAE;oBAC5D,6DAA6D;oBAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACjB,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEP,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC7B,MAAM;QACV,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,YAAqB;IACtD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QACpC,iCAAiC;QACjC,KAAK,IAAI,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { Observable, PluginSubscribe } from '../../utils/store.utils';\nimport { DSourceState, GDataType } from './data.store';\n\nexport type TrimmedEntity = Record<number, boolean>;\nexport type Trimmed = Record<string, TrimmedEntity>;\n\n/**\n * Hide items from main collection\n * But keep them in store\n */\nexport const trimmedPlugin = <T extends GDataType>(store: Observable<DSourceState<T, any>>): PluginSubscribe<DSourceState<T, any>> => ({\n set(k, newVal) {\n switch (k) {\n case 'trimmed':\n const proxy = store.get('proxyItems');\n const trimmed = gatherTrimmedItems(newVal as Trimmed);\n\n const newItems = proxy.reduce((result: number[], v: number) => {\n // check if present in new trimmed remove from items (filter)\n if (!trimmed[v]) {\n result.push(v);\n }\n return result;\n }, []);\n\n store.set('items', newItems);\n break;\n }\n },\n});\n\nexport function gatherTrimmedItems(trimmedItems: Trimmed) {\n const trimmed: TrimmedEntity = {};\n\n for (let trimmedKey in trimmedItems) {\n // trimmed overweight not trimmed\n for (let t in trimmedItems[trimmedKey]) {\n trimmed[t] = trimmed[t] || trimmedItems[trimmedKey][t];\n }\n }\n return trimmed;\n}\n"]}
1
+ {"version":3,"file":"trimmed.plugin.js","sourceRoot":"","sources":["../../../src/store/dataSource/trimmed.plugin.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAuC,EACA,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,CAAC,EAAE,MAAM;QACX,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAiB,CAAC,CAAC;gBACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEhD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,YAAqB;IACtD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QACpC,iCAAiC;QACjC,KAAK,IAAI,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { Observable, PluginSubscribe } from '../../utils/store.utils';\nimport { DSourceState, GDataType } from './data.store';\n\nexport type TrimmedEntity = Record<number, boolean>;\nexport type Trimmed = Record<string, TrimmedEntity>;\n\n/**\n * Hide items from main collection\n * But keep them in store\n */\nexport const trimmedPlugin = <T extends GDataType>(\n store: Observable<DSourceState<T, any>>,\n): PluginSubscribe<DSourceState<T, any>> => ({\n set(k, newVal) {\n switch (k) {\n case 'trimmed': {\n const proxy = store.get('proxyItems');\n const trimmed = gatherTrimmedItems(newVal as Trimmed);\n const newItems = proxy.filter(v => !trimmed[v]);\n\n store.set('items', newItems);\n break;\n }\n }\n },\n});\n\nexport function gatherTrimmedItems(trimmedItems: Trimmed) {\n const trimmed: TrimmedEntity = {};\n\n for (let trimmedKey in trimmedItems) {\n // trimmed overweight not trimmed\n for (let t in trimmedItems[trimmedKey]) {\n trimmed[t] = trimmed[t] || trimmedItems[trimmedKey][t];\n }\n }\n return trimmed;\n}\n"]}
@@ -11,10 +11,8 @@ export function calculateDimensionData(originItemSize, newSizes = {}) {
11
11
  const positionIndexes = [];
12
12
  const positionIndexToItem = {};
13
13
  const indexToItem = {};
14
- // combine all new sizes
15
- const sizes = Object.assign({}, newSizes);
16
14
  // prepare order sorted new sizes and calculate changed real size
17
- const newIndexes = Object.keys(sizes).map(Number).sort((a, b) => a - b);
15
+ const newIndexes = Object.keys(newSizes).map(Number).sort((a, b) => a - b);
18
16
  // fill new coordinates based on what is changed
19
17
  newIndexes.reduce((previous, itemIndex, i) => {
20
18
  const newItem = {
@@ -30,7 +28,7 @@ export function calculateDimensionData(originItemSize, newSizes = {}) {
30
28
  else {
31
29
  newItem.start = itemIndex * originItemSize;
32
30
  }
33
- newItem.end = newItem.start + sizes[itemIndex];
31
+ newItem.end = newItem.start + newSizes[itemIndex];
34
32
  positionIndexes.push(newItem.start);
35
33
  indexToItem[itemIndex] = positionIndexToItem[i] = newItem;
36
34
  return newItem;
@@ -40,7 +38,6 @@ export function calculateDimensionData(originItemSize, newSizes = {}) {
40
38
  positionIndexes: [...positionIndexes],
41
39
  positionIndexToItem: Object.assign({}, positionIndexToItem),
42
40
  indexToItem,
43
- sizes,
44
41
  };
45
42
  }
46
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dimension.helpers.js","sourceRoot":"","sources":["../../../src/store/dimension/dimension.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import sortedIndex from 'lodash/sortedIndex';\n\nimport type {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n} from '@type';\n\nexport type DimensionPosition = Pick<\n DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'originItemSize' | 'positionIndexToItem'\n>;\nexport type DimensionIndexInput = Pick<\n DimensionSettingsState,\n 'indexes' | 'originItemSize' | 'indexToItem'\n>;\nexport type DimensionSize = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'indexToItem'\n | 'realSize'\n | 'sizes'\n>;\n/**\n * Pre-calculation\n * Dimension custom sizes for each cell\n * Keeps only changed sizes, skips origin size\n */\nexport function calculateDimensionData(\n originItemSize: number,\n newSizes: ViewSettingSizeProp = {},\n) {\n const positionIndexes: number[] = [];\n const positionIndexToItem: { [position: number]: PositionItem } = {};\n const indexToItem: { [index: number]: PositionItem } = {};\n\n // combine all new sizes\n const sizes = { ...newSizes };\n // prepare order sorted new sizes and calculate changed real size\n const newIndexes = Object.keys(sizes).map(Number).sort((a, b) => a - b);\n // fill new coordinates based on what is changed\n newIndexes.reduce(\n (previous: PositionItem | undefined, itemIndex: number, i: number) => {\n const newItem: PositionItem = {\n itemIndex,\n start: 0,\n end: 0,\n };\n // if previous item was changed too\n if (previous) {\n const itemsBetween =\n (itemIndex - previous.itemIndex - 1) * originItemSize;\n newItem.start = itemsBetween + previous.end;\n } else {\n newItem.start = itemIndex * originItemSize;\n }\n newItem.end = newItem.start + sizes[itemIndex];\n positionIndexes.push(newItem.start);\n indexToItem[itemIndex] = positionIndexToItem[i] = newItem;\n return newItem;\n },\n undefined,\n );\n\n return {\n indexes: newIndexes,\n positionIndexes: [...positionIndexes],\n positionIndexToItem: { ...positionIndexToItem },\n indexToItem,\n sizes,\n };\n}\n\n/**\n * Calculate item by position\n */\nexport const getItemByPosition = (\n {\n indexes,\n positionIndexes,\n originItemSize,\n positionIndexToItem,\n }: DimensionPosition,\n pos: number,\n) => {\n const item: PositionItem = {\n itemIndex: 0,\n start: 0,\n end: 0,\n };\n const currentPlace = indexes.length ? sortedIndex(positionIndexes, pos) : 0;\n // not found or first index\n if (!currentPlace) {\n item.itemIndex = Math.floor(pos / originItemSize);\n item.start = item.itemIndex * originItemSize;\n item.end = item.start + originItemSize;\n return item;\n }\n const positionItem = positionIndexToItem[currentPlace - 1];\n // if item has specified size\n if (positionItem.end > pos) {\n return positionItem;\n }\n // special size item was present before\n const relativePos = pos - positionItem.end;\n const relativeIndex = Math.floor(relativePos / originItemSize);\n item.itemIndex = positionItem.itemIndex + 1 + relativeIndex;\n item.start = positionItem.end + relativeIndex * originItemSize;\n item.end = item.start + originItemSize;\n return item;\n};\n\nexport function getItemByIndex(\n dimension: Pick<\n DimensionIndexInput,\n 'indexToItem' | 'indexes' | 'originItemSize'\n >,\n index: number,\n) {\n let item: PositionItem = {\n itemIndex: index,\n start: 0,\n end: 0,\n };\n // if item has specified size\n if (dimension.indexToItem[index]) {\n return dimension.indexToItem[index];\n }\n\n const currentPlace = dimension.indexes.length\n ? sortedIndex(dimension.indexes, index)\n : 0;\n // not found or first index\n if (!currentPlace) {\n item.start = item.itemIndex * dimension.originItemSize;\n item.end = item.start + dimension.originItemSize;\n return item;\n }\n // special size item was present before\n const positionItem =\n dimension.indexToItem[dimension.indexes[currentPlace - 1]];\n item.start =\n positionItem.end +\n (index - positionItem.itemIndex - 1) * dimension.originItemSize;\n item.end = item.start + dimension.originItemSize;\n return item;\n}\n"]}
1
+ {"version":3,"file":"dimension.helpers.js","sourceRoot":"","sources":["../../../src/store/dimension/dimension.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import sortedIndex from 'lodash/sortedIndex';\n\nimport type {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n} from '@type';\n\nexport type DimensionPosition = Pick<\n DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'originItemSize' | 'positionIndexToItem'\n>;\nexport type DimensionIndexInput = Pick<\n DimensionSettingsState,\n 'indexes' | 'originItemSize' | 'indexToItem'\n>;\nexport type DimensionSize = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'indexToItem'\n | 'realSize'\n | 'sizes'\n>;\n/**\n * Pre-calculation\n * Dimension custom sizes for each cell\n * Keeps only changed sizes, skips origin size\n */\nexport function calculateDimensionData(\n originItemSize: number,\n newSizes: ViewSettingSizeProp = {},\n) {\n const positionIndexes: number[] = [];\n const positionIndexToItem: { [position: number]: PositionItem } = {};\n const indexToItem: { [index: number]: PositionItem } = {};\n\n // prepare order sorted new sizes and calculate changed real size\n const newIndexes = Object.keys(newSizes).map(Number).sort((a, b) => a - b);\n // fill new coordinates based on what is changed\n newIndexes.reduce(\n (previous: PositionItem | undefined, itemIndex: number, i: number) => {\n const newItem: PositionItem = {\n itemIndex,\n start: 0,\n end: 0,\n };\n // if previous item was changed too\n if (previous) {\n const itemsBetween =\n (itemIndex - previous.itemIndex - 1) * originItemSize;\n newItem.start = itemsBetween + previous.end;\n } else {\n newItem.start = itemIndex * originItemSize;\n }\n newItem.end = newItem.start + newSizes[itemIndex];\n positionIndexes.push(newItem.start);\n indexToItem[itemIndex] = positionIndexToItem[i] = newItem;\n return newItem;\n },\n undefined,\n );\n\n return {\n indexes: newIndexes,\n positionIndexes: [...positionIndexes],\n positionIndexToItem: { ...positionIndexToItem },\n indexToItem,\n };\n}\n\n/**\n * Calculate item by position\n */\nexport const getItemByPosition = (\n {\n indexes,\n positionIndexes,\n originItemSize,\n positionIndexToItem,\n }: DimensionPosition,\n pos: number,\n) => {\n const item: PositionItem = {\n itemIndex: 0,\n start: 0,\n end: 0,\n };\n const currentPlace = indexes.length ? sortedIndex(positionIndexes, pos) : 0;\n // not found or first index\n if (!currentPlace) {\n item.itemIndex = Math.floor(pos / originItemSize);\n item.start = item.itemIndex * originItemSize;\n item.end = item.start + originItemSize;\n return item;\n }\n const positionItem = positionIndexToItem[currentPlace - 1];\n // if item has specified size\n if (positionItem.end > pos) {\n return positionItem;\n }\n // special size item was present before\n const relativePos = pos - positionItem.end;\n const relativeIndex = Math.floor(relativePos / originItemSize);\n item.itemIndex = positionItem.itemIndex + 1 + relativeIndex;\n item.start = positionItem.end + relativeIndex * originItemSize;\n item.end = item.start + originItemSize;\n return item;\n};\n\nexport function getItemByIndex(\n dimension: Pick<\n DimensionIndexInput,\n 'indexToItem' | 'indexes' | 'originItemSize'\n >,\n index: number,\n) {\n let item: PositionItem = {\n itemIndex: index,\n start: 0,\n end: 0,\n };\n // if item has specified size\n if (dimension.indexToItem[index]) {\n return dimension.indexToItem[index];\n }\n\n const currentPlace = dimension.indexes.length\n ? sortedIndex(dimension.indexes, index)\n : 0;\n // not found or first index\n if (!currentPlace) {\n item.start = item.itemIndex * dimension.originItemSize;\n item.end = item.start + dimension.originItemSize;\n return item;\n }\n // special size item was present before\n const positionItem =\n dimension.indexToItem[dimension.indexes[currentPlace - 1]];\n item.start =\n positionItem.end +\n (index - positionItem.itemIndex - 1) * dimension.originItemSize;\n item.end = item.start + dimension.originItemSize;\n return item;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ /**
5
+ * Plugin which recalculates realSize on changes of sizes, originItemSize and count
6
+ */
7
+ export const recalculateRealSizePlugin = (storeService) => {
8
+ /**
9
+ * Recalculates realSize if size, origin size or count changes
10
+ */
11
+ return {
12
+ /**
13
+ * Reacts on changes of count, sizes and originItemSize
14
+ */
15
+ set(k) {
16
+ switch (k) {
17
+ case 'count':
18
+ case 'sizes':
19
+ case 'originItemSize': {
20
+ // recalculate realSize
21
+ let realSize = 0;
22
+ const count = storeService.store.get('count');
23
+ for (let i = 0; i < count; i++) {
24
+ realSize +=
25
+ storeService.store.get('sizes')[i] ||
26
+ storeService.store.get('originItemSize');
27
+ }
28
+ storeService.setStore({ realSize });
29
+ break;
30
+ }
31
+ }
32
+ },
33
+ };
34
+ };
35
+ //# sourceMappingURL=dimension.recalculate.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimension.recalculate.plugin.js","sourceRoot":"","sources":["../../../src/store/dimension/dimension.recalculate.plugin.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,YAGzC,EAA2C,EAAE;IAC5C;;OAEG;IACH,OAAO;QACL;;WAEG;QACH,GAAG,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,CAAC;gBACV,KAAK,OAAO,CAAC;gBACb,KAAK,OAAO,CAAC;gBACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,uBAAuB;oBACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;oBACjB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/B,QAAQ;4BACN,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gCAClC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBAC7C,CAAC;oBACD,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACpC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { DimensionSettingsState } from '@type';\nimport { Observable, PluginSubscribe } from '../../utils';\n\n/**\n * Plugin which recalculates realSize on changes of sizes, originItemSize and count\n */\nexport const recalculateRealSizePlugin = (storeService: {\n store: Observable<DimensionSettingsState>;\n setStore: (k: Partial<DimensionSettingsState>) => void;\n}): PluginSubscribe<DimensionSettingsState> => {\n /**\n * Recalculates realSize if size, origin size or count changes\n */\n return {\n /**\n * Reacts on changes of count, sizes and originItemSize\n */\n set(k) {\n switch (k) {\n case 'count':\n case 'sizes':\n case 'originItemSize': {\n // recalculate realSize\n let realSize = 0;\n const count = storeService.store.get('count');\n for (let i = 0; i < count; i++) {\n realSize +=\n storeService.store.get('sizes')[i] ||\n storeService.store.get('originItemSize');\n }\n storeService.setStore({ realSize });\n break;\n }\n }\n },\n };\n};\n"]}