dinocollab-core 2.2.9 → 2.2.11

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 (122) hide show
  1. package/README.md +0 -22
  2. package/dist/data-surface/index.js +2 -0
  3. package/dist/filter-bar/index.js +1 -1
  4. package/dist/src/data-surface/button-switch.js +2 -0
  5. package/dist/src/data-surface/button-switch.js.map +1 -0
  6. package/dist/src/data-surface/helpers.js +2 -0
  7. package/dist/src/data-surface/helpers.js.map +1 -0
  8. package/dist/src/data-surface/index.create.js +2 -0
  9. package/dist/src/data-surface/index.create.js.map +1 -0
  10. package/dist/src/data-surface/index.dino.js +2 -0
  11. package/dist/src/data-surface/index.dino.js.map +1 -0
  12. package/dist/src/data-surface/types.js +2 -0
  13. package/dist/src/data-surface/types.js.map +1 -0
  14. package/dist/src/data-surface/ui.units.js +2 -0
  15. package/dist/src/data-surface/ui.units.js.map +1 -0
  16. package/dist/src/data-surface/view-grid/helpers.js +2 -0
  17. package/dist/src/data-surface/view-grid/helpers.js.map +1 -0
  18. package/dist/src/data-surface/view-grid/hooks.js +2 -0
  19. package/dist/src/data-surface/view-grid/hooks.js.map +1 -0
  20. package/dist/src/data-surface/view-grid/index.js +2 -0
  21. package/dist/src/data-surface/view-grid/index.js.map +1 -0
  22. package/dist/src/data-surface/view-grid/styleds.js +2 -0
  23. package/dist/src/data-surface/view-grid/styleds.js.map +1 -0
  24. package/dist/src/data-surface/view-grid/ui.units.js +2 -0
  25. package/dist/src/data-surface/view-grid/ui.units.js.map +1 -0
  26. package/dist/src/data-surface/view-list/helpers.js +2 -0
  27. package/dist/src/data-surface/view-list/helpers.js.map +1 -0
  28. package/dist/src/data-surface/view-list/hooks.js +2 -0
  29. package/dist/src/data-surface/view-list/hooks.js.map +1 -0
  30. package/dist/src/data-surface/view-list/index.js +2 -0
  31. package/dist/src/data-surface/view-list/index.js.map +1 -0
  32. package/dist/src/data-surface/view-list/styled.js +2 -0
  33. package/dist/src/data-surface/view-list/styled.js.map +1 -0
  34. package/dist/src/{lab/data-surface/view-list.types.js → data-surface/view-list/types.js} +1 -1
  35. package/dist/src/data-surface/view-list/types.js.map +1 -0
  36. package/dist/src/data-surface/view-switch-transition.js +2 -0
  37. package/dist/src/data-surface/view-switch-transition.js.map +1 -0
  38. package/dist/src/data-surface/view-switch-transition.units.js +2 -0
  39. package/dist/src/data-surface/view-switch-transition.units.js.map +1 -0
  40. package/dist/src/filter-bar/components/filter-menu.js +1 -1
  41. package/dist/src/filter-bar/components/filter-menu.js.map +1 -1
  42. package/dist/src/filter-bar/components/filter-summary.js +1 -1
  43. package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
  44. package/dist/src/filter-bar/components/hint-icon.js +1 -1
  45. package/dist/src/filter-bar/components/hint-icon.js.map +1 -1
  46. package/dist/src/filter-bar/components/units.js +1 -1
  47. package/dist/src/filter-bar/components/units.js.map +1 -1
  48. package/dist/src/filter-bar/convert-to-graphql.js +1 -1
  49. package/dist/src/filter-bar/convert-to-graphql.js.map +1 -1
  50. package/dist/src/filter-bar/helpers.js +1 -1
  51. package/dist/src/filter-bar/helpers.js.map +1 -1
  52. package/dist/src/filter-bar/index.create.js +1 -1
  53. package/dist/src/filter-bar/index.create.js.map +1 -1
  54. package/dist/src/filter-bar/index.dino.js +1 -1
  55. package/dist/src/filter-bar/index.dino.js.map +1 -1
  56. package/dist/src/filter-bar/local-filter-builder.js +2 -0
  57. package/dist/src/filter-bar/local-filter-builder.js.map +1 -0
  58. package/dist/src/table/create.table.js +1 -1
  59. package/dist/src/utils/helpers.js +1 -1
  60. package/dist/types/{lab/data-surface → data-surface}/index.create.d.ts +13 -5
  61. package/dist/types/{lab/data-surface → data-surface}/index.d.ts +2 -2
  62. package/dist/types/{lab/data-surface → data-surface}/index.dino.d.ts +4 -0
  63. package/dist/types/{lab/data-surface → data-surface}/types.d.ts +4 -10
  64. package/dist/types/data-surface/view-grid/helpers.d.ts +19 -0
  65. package/dist/types/data-surface/view-grid/hooks.d.ts +9 -0
  66. package/dist/types/data-surface/view-grid/index.d.ts +19 -0
  67. package/dist/types/data-surface/view-grid/styleds.d.ts +12 -0
  68. package/dist/types/data-surface/view-grid/types.d.ts +41 -0
  69. package/dist/types/data-surface/view-grid/ui.units.d.ts +3 -0
  70. package/dist/types/data-surface/view-list/helpers.d.ts +15 -0
  71. package/dist/types/{lab/data-surface/view-list.units.d.ts → data-surface/view-list/hooks.d.ts} +11 -5
  72. package/dist/types/data-surface/view-list/index.d.ts +13 -0
  73. package/dist/types/data-surface/view-list/styled.d.ts +17 -0
  74. package/dist/types/{lab/data-surface/view-list.types.d.ts → data-surface/view-list/types.d.ts} +40 -0
  75. package/dist/types/{lab/data-surface → data-surface}/view-switch-transition.d.ts +1 -1
  76. package/dist/types/data-view/dino.d.ts +1 -1
  77. package/dist/types/data-view/query-param-url.d.ts +1 -1
  78. package/dist/types/filter-bar/components/filter-menu.types.d.ts +2 -0
  79. package/dist/types/filter-bar/components/hint-icon.d.ts +4 -0
  80. package/dist/types/filter-bar/components/units.d.ts +1 -1
  81. package/dist/types/filter-bar/convert-to-graphql.d.ts +8 -0
  82. package/dist/types/filter-bar/helpers.d.ts +3 -0
  83. package/dist/types/filter-bar/index.create.d.ts +2 -0
  84. package/dist/types/filter-bar/index.d.ts +1 -0
  85. package/dist/types/filter-bar/index.dino.d.ts +2 -1
  86. package/dist/types/filter-bar/local-filter-builder.d.ts +39 -0
  87. package/package.json +20 -20
  88. package/dist/lab/data-surface/index.js +0 -2
  89. package/dist/src/lab/data-surface/button-switch.js +0 -2
  90. package/dist/src/lab/data-surface/button-switch.js.map +0 -1
  91. package/dist/src/lab/data-surface/helpers.js +0 -2
  92. package/dist/src/lab/data-surface/helpers.js.map +0 -1
  93. package/dist/src/lab/data-surface/index.create.js +0 -2
  94. package/dist/src/lab/data-surface/index.create.js.map +0 -1
  95. package/dist/src/lab/data-surface/index.dino.js +0 -2
  96. package/dist/src/lab/data-surface/index.dino.js.map +0 -1
  97. package/dist/src/lab/data-surface/types.js +0 -2
  98. package/dist/src/lab/data-surface/types.js.map +0 -1
  99. package/dist/src/lab/data-surface/ui.units.js +0 -2
  100. package/dist/src/lab/data-surface/ui.units.js.map +0 -1
  101. package/dist/src/lab/data-surface/view-grid.js +0 -2
  102. package/dist/src/lab/data-surface/view-grid.js.map +0 -1
  103. package/dist/src/lab/data-surface/view-grid.units.js +0 -2
  104. package/dist/src/lab/data-surface/view-grid.units.js.map +0 -1
  105. package/dist/src/lab/data-surface/view-list.js +0 -2
  106. package/dist/src/lab/data-surface/view-list.js.map +0 -1
  107. package/dist/src/lab/data-surface/view-list.types.js.map +0 -1
  108. package/dist/src/lab/data-surface/view-list.units.js +0 -2
  109. package/dist/src/lab/data-surface/view-list.units.js.map +0 -1
  110. package/dist/src/lab/data-surface/view-switch-transition.js +0 -2
  111. package/dist/src/lab/data-surface/view-switch-transition.js.map +0 -1
  112. package/dist/src/lab/data-surface/view-switch-transition.units.js +0 -2
  113. package/dist/src/lab/data-surface/view-switch-transition.units.js.map +0 -1
  114. package/dist/types/lab/data-surface/view-grid.d.ts +0 -42
  115. package/dist/types/lab/data-surface/view-grid.types.d.ts +0 -12
  116. package/dist/types/lab/data-surface/view-grid.units.d.ts +0 -11
  117. package/dist/types/lab/data-surface/view-list.d.ts +0 -52
  118. /package/dist/{lab/data-surface → data-surface}/index.js.map +0 -0
  119. /package/dist/types/{lab/data-surface → data-surface}/button-switch.d.ts +0 -0
  120. /package/dist/types/{lab/data-surface → data-surface}/helpers.d.ts +0 -0
  121. /package/dist/types/{lab/data-surface → data-surface}/ui.units.d.ts +0 -0
  122. /package/dist/types/{lab/data-surface → data-surface}/view-switch-transition.units.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/filter-bar/helpers.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport { QueryParam } from '../utils/query-param'\r\nimport { KeySpecial, TFilterState } from './types'\r\n\r\nexport const mapSpecialLabel: Record<KeySpecial, string> = {\r\n [KeySpecial.quickSearch]: 'Quick Search',\r\n [KeySpecial.sortShuffle]: 'Shuffle Arrangement'\r\n}\r\n\r\nexport interface IFilterStateQueryParams {\r\n filter?: string\r\n}\r\n\r\n/**\r\n * @en Remove null/undefined values from object recursively for accurate comparison.\r\n * @vi Loai bo cac gia tri null/undefined khoi object mot cach de quy de so sanh chinh xac.\r\n */\r\nexport function removeNullValues<T = any>(obj: T): T | undefined {\r\n if (obj === null || obj === undefined) {\r\n return undefined\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n const cleaned = obj.map(removeNullValues).filter((v) => v !== undefined)\r\n return cleaned.length > 0 ? (cleaned as any) : undefined\r\n }\r\n\r\n const cleaned: any = {}\r\n let hasValue = false\r\n\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n const value = removeNullValues(obj[key])\r\n if (value !== undefined) {\r\n cleaned[key] = value\r\n hasValue = true\r\n }\r\n }\r\n }\r\n\r\n return hasValue ? cleaned : undefined\r\n}\r\n\r\n/**\r\n * @en Check if filter state is empty (no filters applied). Null/undefined values are ignored in this check.\r\n * @vi Kiem tra xem filter state co rong khong (khong co filter nao duoc ap dung). Gia tri null/undefined se duoc bo qua trong kiem tra nay.\r\n */\r\nexport function isEmptyFilterState<T>(state?: TFilterState<T>): boolean {\r\n if (!state) return true\r\n const cleaned = removeNullValues(state)\r\n return !cleaned || Object.keys(cleaned).length === 0\r\n}\r\n\r\n/**\r\n * @en Deep comparison of two filter states to check if they are equal.\r\n * @vi So sanh sau hai filter state de kiem tra xem chung co bang nhau khong.\r\n */\r\nexport function isFilterStateEqual<T>(state1?: TFilterState<T>, state2?: TFilterState<T>): boolean {\r\n if (state1 === state2) return true\r\n\r\n try {\r\n // Remove null/undefined values before comparison\r\n const cleaned1 = removeNullValues(state1)\r\n const cleaned2 = removeNullValues(state2)\r\n\r\n if (cleaned1 === cleaned2) return true\r\n if (!cleaned1 || !cleaned2) return false\r\n\r\n return JSON.stringify(cleaned1) === JSON.stringify(cleaned2)\r\n } catch (error) {\r\n console.error('Error comparing filter states:', error)\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * @en Synchronize filter state to URL query parameters. If state equals defaultState, remove from URL to keep it clean.\r\n * @vi Dong bo filter state vao URL query parameters. Neu state bang defaultState, xoa khoi URL de giu URL sach.\r\n *\r\n * @param state - Current filter state to sync\r\n * @param defaultState - Default filter state (if current equals this, don't save to URL)\r\n */\r\nexport function setFilterToURL<T>(state?: TFilterState<T>, defaultState?: TFilterState<T>) {\r\n // If window is undefined (e.g., during SSR), do nothing\r\n if (typeof window === 'undefined') return\r\n\r\n try {\r\n const isEqualToDefault = isFilterStateEqual(state, defaultState)\r\n const isEmpty = isEmptyFilterState(state)\r\n // If state equals default or is empty, remove from URL\r\n if (isEqualToDefault || isEmpty) {\r\n QueryParam.replaceDeletes<IFilterStateQueryParams>('filter')\r\n return\r\n }\r\n\r\n // Serialize state to JSON and save to URL\r\n const updateParams: IFilterStateQueryParams = {\r\n filter: JSON.stringify(state)\r\n }\r\n\r\n QueryParam.replacePatch<IFilterStateQueryParams>(updateParams)\r\n } catch (error) {\r\n console.error('Error syncing filter state to URL:', error)\r\n }\r\n}\r\n\r\n/**\r\n * @en Retrieve filter state from URL query parameters.\r\n * @vi Lay filter state tu URL query parameters.\r\n *\r\n * @param defaultState - Default filter state to return if URL has no filter state\r\n * @returns Filter state from URL or defaultState\r\n */\r\nexport function getFilterFromURL<T>(defaultState?: TFilterState<T>): TFilterState<T> | undefined {\r\n // If window is undefined (e.g., during SSR), return defaultState\r\n if (typeof window === 'undefined') return defaultState\r\n\r\n try {\r\n const q = QueryParam.gets<IFilterStateQueryParams>('filter')\r\n\r\n if (!q.filter) return defaultState\r\n\r\n // Parse JSON from URL\r\n const state = JSON.parse(q.filter) as TFilterState<T>\r\n const isEmpty = isEmptyFilterState(state)\r\n return isEmpty ? defaultState : state\r\n } catch (error) {\r\n console.error('Error getting filter state from URL:', error)\r\n return defaultState\r\n }\r\n}\r\n\r\n/**\r\n * @en Set seed value to URL for shuffle sorting. If seed is undefined, remove from URL.\r\n * @vi Dat gia tri seed vao URL de sap xep shuffle. Neu seed khong xac dinh, xoa khoi URL.\r\n * @param seed - Seed value for shuffle sorting\r\n */\r\nexport const setSeedToURL = (seed?: string) => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n if (!seed) {\r\n QueryParam.replaceDeletes('seed')\r\n return\r\n }\r\n QueryParam.replacePatch({ seed })\r\n } catch (error) {\r\n console.error('Error syncing seed to URL:', error)\r\n }\r\n}\r\n\r\n/**\r\n * @en Get seed value from URL for shuffle sorting. Returns undefined if not set or on error.\r\n * @vi Lay gia tri seed tu URL de sap xep shuffle. Tra ve undefined neu khong duoc dat hoac co loi.\r\n * @returns Seed value from URL or undefined\r\n */\r\nexport const getSeedFromURL = (): string | undefined => {\r\n if (typeof window === 'undefined') return undefined\r\n try {\r\n const q = QueryParam.gets<{ seed?: string }>('seed')\r\n return q.seed\r\n } catch (error) {\r\n console.error('Error getting seed from URL:', error)\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * @en Remove seed value from URL.\r\n * @vi Xoa gia tri seed khoi URL.\r\n */\r\nexport const removeSeedFromURL = () => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n QueryParam.replaceDeletes('seed')\r\n } catch (error) {\r\n console.error('Error removing seed from URL:', error)\r\n }\r\n}\r\n"],"names":["mapSpecialLabel","_defineProperty","KeySpecial","quickSearch","sortShuffle","removeNullValues","obj","_typeof","Array","isArray","cleaned","map","filter","v","undefined","length","hasValue","key","hasOwnProperty","value","isEmptyFilterState","state","Object","keys","isFilterStateEqual","state1","state2","cleaned1","cleaned2","JSON","stringify","error","console","setFilterToURL","defaultState","window","isEqualToDefault","isEmpty","QueryParam","replaceDeletes","updateParams","replacePatch","getFilterFromURL","q","gets","parse","setSeedToURL","seed","getSeedFromURL","removeSeedFromURL"],"mappings":"0LAKaA,EAAeC,EAAAA,KACzBC,EAAWC,YAAc,gBACzBD,EAAWE,YAAc,uBAWtB,SAAUC,EAA0BC,GACxC,GAAIA,QAAJ,CAIA,GAAmB,WAAfC,EAAOD,GACT,OAAOA,EAGT,GAAIE,MAAMC,QAAQH,GAAM,CACtB,IAAMI,EAAUJ,EAAIK,IAAIN,GAAkBO,OAAO,SAACC,GAAC,YAAWC,IAAND,IACxD,OAAOH,EAAQK,OAAS,EAAKL,OAAkBI,CAChD,CAED,IAAMJ,EAAe,CAAE,EACnBM,GAAW,EAEf,IAAK,IAAMC,KAAOX,EAChB,GAAIA,EAAIY,eAAeD,GAAM,CAC3B,IAAME,EAAQd,EAAiBC,EAAIW,SACrBH,IAAVK,IACFT,EAAQO,GAAOE,EACfH,GAAW,EAEd,CAGH,OAAOA,EAAWN,OAAUI,CAxB3B,CAyBH,CAMM,SAAUM,EAAsBC,GACpC,IAAKA,EAAO,OAAO,EACnB,IAAMX,EAAUL,EAAiBgB,GACjC,OAAQX,GAA2C,IAAhCY,OAAOC,KAAKb,GAASK,MAC1C,CAMgB,SAAAS,EAAsBC,EAA0BC,GAC9D,GAAID,IAAWC,EAAQ,OAAO,EAE9B,IAEE,IAAMC,EAAWtB,EAAiBoB,GAC5BG,EAAWvB,EAAiBqB,GAElC,OAAIC,IAAaC,MACZD,IAAaC,IAEXC,KAAKC,UAAUH,KAAcE,KAAKC,UAAUF,EACpD,CAAC,MAAOG,GAEP,OADAC,QAAQD,MAAM,iCAAkCA,IACzC,CACR,CACH,CASgB,SAAAE,EAAkBZ,EAAyBa,GAEzD,GAAsB,oBAAXC,OAEX,IACE,IAAMC,EAAmBZ,EAAmBH,EAAOa,GAC7CG,EAAUjB,EAAmBC,GAEnC,GAAIe,GAAoBC,EAEtB,YADAC,EAAWC,eAAwC,UAKrD,IAAMC,EAAwC,CAC5C5B,OAAQiB,KAAKC,UAAUT,IAGzBiB,EAAWG,aAAsCD,EAClD,CAAC,MAAOT,GACPC,QAAQD,MAAM,qCAAsCA,EACrD,CACH,CASM,SAAUW,EAAoBR,GAElC,GAAsB,oBAAXC,OAAwB,OAAOD,EAE1C,IACE,IAAMS,EAAIL,EAAWM,KAA8B,UAEnD,IAAKD,EAAE/B,OAAQ,OAAOsB,EAGtB,IAAMb,EAAQQ,KAAKgB,MAAMF,EAAE/B,QAE3B,OADgBQ,EAAmBC,GAClBa,EAAeb,CACjC,CAAC,MAAOU,GAEP,OADAC,QAAQD,MAAM,uCAAwCA,GAC/CG,CACR,CACH,KAOaY,EAAe,SAACC,GAC3B,GAAsB,oBAAXZ,OACX,IACE,IAAKY,EAEH,YADAT,EAAWC,eAAe,QAG5BD,EAAWG,aAAa,CAAEM,KAAAA,GAC3B,CAAC,MAAOhB,GACPC,QAAQD,MAAM,6BAA8BA,EAC7C,CACH,EAOaiB,EAAiB,WAC5B,GAAsB,oBAAXb,OACX,IAEE,OADUG,EAAWM,KAAwB,QACpCG,IACV,CAAC,MAAOhB,GAEP,YADAC,QAAQD,MAAM,+BAAgCA,EAE/C,CACH,EAMakB,EAAoB,WAC/B,GAAsB,oBAAXd,OACX,IACEG,EAAWC,eAAe,OAC3B,CAAC,MAAOR,GACPC,QAAQD,MAAM,gCAAiCA,EAChD,CACH"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/filter-bar/helpers.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport { QueryParam } from '../utils/query-param'\r\nimport { KeySpecial, TFilterState } from './types'\r\n\r\nexport const mapSpecialTexts = {\r\n qsTooltip: 'Type to search — the suggestion list shows matching values and the current value.'\r\n}\r\n\r\nexport const mapSpecialLabel: Record<KeySpecial, string> = {\r\n [KeySpecial.quickSearch]: 'Quick Search',\r\n [KeySpecial.sortShuffle]: 'Shuffle Arrangement'\r\n}\r\n\r\nexport interface IFilterStateQueryParams {\r\n filter?: string\r\n}\r\n\r\n/**\r\n * @en Remove null/undefined values from object recursively for accurate comparison.\r\n * @vi Loai bo cac gia tri null/undefined khoi object mot cach de quy de so sanh chinh xac.\r\n */\r\nexport function removeNullValues<T = any>(obj: T): T | undefined {\r\n if (obj === null || obj === undefined) {\r\n return undefined\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n return obj\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n const cleaned = obj.map(removeNullValues).filter((v) => v !== undefined)\r\n return cleaned.length > 0 ? (cleaned as any) : undefined\r\n }\r\n\r\n const cleaned: any = {}\r\n let hasValue = false\r\n\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n const value = removeNullValues(obj[key])\r\n if (value !== undefined) {\r\n cleaned[key] = value\r\n hasValue = true\r\n }\r\n }\r\n }\r\n\r\n return hasValue ? cleaned : undefined\r\n}\r\n\r\n/**\r\n * @en Check if filter state is empty (no filters applied). Null/undefined values are ignored in this check.\r\n * @vi Kiem tra xem filter state co rong khong (khong co filter nao duoc ap dung). Gia tri null/undefined se duoc bo qua trong kiem tra nay.\r\n */\r\nexport function isEmptyFilterState<T>(state?: TFilterState<T>): boolean {\r\n if (!state) return true\r\n const cleaned = removeNullValues(state)\r\n return !cleaned || Object.keys(cleaned).length === 0\r\n}\r\n\r\n/**\r\n * @en Deep comparison of two filter states to check if they are equal.\r\n * @vi So sanh sau hai filter state de kiem tra xem chung co bang nhau khong.\r\n */\r\nexport function isFilterStateEqual<T>(state1?: TFilterState<T>, state2?: TFilterState<T>): boolean {\r\n if (state1 === state2) return true\r\n\r\n try {\r\n // Remove null/undefined values before comparison\r\n const cleaned1 = removeNullValues(state1)\r\n const cleaned2 = removeNullValues(state2)\r\n\r\n if (cleaned1 === cleaned2) return true\r\n if (!cleaned1 || !cleaned2) return false\r\n\r\n return JSON.stringify(cleaned1) === JSON.stringify(cleaned2)\r\n } catch (error) {\r\n console.error('Error comparing filter states:', error)\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * @en Synchronize filter state to URL query parameters. If state equals defaultState, remove from URL to keep it clean.\r\n * @vi Dong bo filter state vao URL query parameters. Neu state bang defaultState, xoa khoi URL de giu URL sach.\r\n *\r\n * @param state - Current filter state to sync\r\n * @param defaultState - Default filter state (if current equals this, don't save to URL)\r\n */\r\nexport function setFilterToURL<T>(state?: TFilterState<T>, defaultState?: TFilterState<T>) {\r\n // If window is undefined (e.g., during SSR), do nothing\r\n if (typeof window === 'undefined') return\r\n\r\n try {\r\n const isEqualToDefault = isFilterStateEqual(state, defaultState)\r\n const isEmpty = isEmptyFilterState(state)\r\n // If state equals default or is empty, remove from URL\r\n if (isEqualToDefault || isEmpty) {\r\n QueryParam.replaceDeletes<IFilterStateQueryParams>('filter')\r\n return\r\n }\r\n\r\n // Serialize state to JSON and save to URL\r\n const updateParams: IFilterStateQueryParams = {\r\n filter: JSON.stringify(state)\r\n }\r\n\r\n QueryParam.replacePatch<IFilterStateQueryParams>(updateParams)\r\n } catch (error) {\r\n console.error('Error syncing filter state to URL:', error)\r\n }\r\n}\r\n\r\n/**\r\n * @en Retrieve filter state from URL query parameters.\r\n * @vi Lay filter state tu URL query parameters.\r\n *\r\n * @param defaultState - Default filter state to return if URL has no filter state\r\n * @returns Filter state from URL or defaultState\r\n */\r\nexport function getFilterFromURL<T>(defaultState?: TFilterState<T>): TFilterState<T> | undefined {\r\n // If window is undefined (e.g., during SSR), return defaultState\r\n if (typeof window === 'undefined') return defaultState\r\n\r\n try {\r\n const q = QueryParam.gets<IFilterStateQueryParams>('filter')\r\n\r\n if (!q.filter) return defaultState\r\n\r\n // Parse JSON from URL\r\n const state = JSON.parse(q.filter) as TFilterState<T>\r\n const isEmpty = isEmptyFilterState(state)\r\n return isEmpty ? defaultState : state\r\n } catch (error) {\r\n console.error('Error getting filter state from URL:', error)\r\n return defaultState\r\n }\r\n}\r\n\r\n/**\r\n * @en Set seed value to URL for shuffle sorting. If seed is undefined, remove from URL.\r\n * @vi Dat gia tri seed vao URL de sap xep shuffle. Neu seed khong xac dinh, xoa khoi URL.\r\n * @param seed - Seed value for shuffle sorting\r\n */\r\nexport const setSeedToURL = (seed?: string) => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n if (!seed) {\r\n QueryParam.replaceDeletes('seed')\r\n return\r\n }\r\n QueryParam.replacePatch({ seed })\r\n } catch (error) {\r\n console.error('Error syncing seed to URL:', error)\r\n }\r\n}\r\n\r\n/**\r\n * @en Get seed value from URL for shuffle sorting. Returns undefined if not set or on error.\r\n * @vi Lay gia tri seed tu URL de sap xep shuffle. Tra ve undefined neu khong duoc dat hoac co loi.\r\n * @returns Seed value from URL or undefined\r\n */\r\nexport const getSeedFromURL = (): string | undefined => {\r\n if (typeof window === 'undefined') return undefined\r\n try {\r\n const q = QueryParam.gets<{ seed?: string }>('seed')\r\n return q.seed\r\n } catch (error) {\r\n console.error('Error getting seed from URL:', error)\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * @en Remove seed value from URL.\r\n * @vi Xoa gia tri seed khoi URL.\r\n */\r\nexport const removeSeedFromURL = () => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n QueryParam.replaceDeletes('seed')\r\n } catch (error) {\r\n console.error('Error removing seed from URL:', error)\r\n }\r\n}\r\n"],"names":["mapSpecialTexts","qsTooltip","mapSpecialLabel","_defineProperty","KeySpecial","quickSearch","sortShuffle","removeNullValues","obj","_typeof","Array","isArray","cleaned","map","filter","v","undefined","length","hasValue","key","hasOwnProperty","value","isEmptyFilterState","state","Object","keys","isFilterStateEqual","state1","state2","cleaned1","cleaned2","JSON","stringify","error","console","setFilterToURL","defaultState","window","isEqualToDefault","isEmpty","QueryParam","replaceDeletes","updateParams","replacePatch","getFilterFromURL","q","gets","parse","setSeedToURL","seed","getSeedFromURL","removeSeedFromURL"],"mappings":"sLAKO,IAAMA,EAAkB,CAC7BC,UAAW,qFAGAC,EAAeC,EAAAA,KACzBC,EAAWC,YAAc,gBACzBD,EAAWE,YAAc,uBAWtB,SAAUC,EAA0BC,GACxC,GAAIA,QAAJ,CAIA,GAAmB,WAAfC,EAAOD,GACT,OAAOA,EAGT,GAAIE,MAAMC,QAAQH,GAAM,CACtB,IAAMI,EAAUJ,EAAIK,IAAIN,GAAkBO,OAAO,SAACC,GAAC,YAAWC,IAAND,IACxD,OAAOH,EAAQK,OAAS,EAAKL,OAAkBI,CAChD,CAED,IAAMJ,EAAe,CAAE,EACnBM,GAAW,EAEf,IAAK,IAAMC,KAAOX,EAChB,GAAIA,EAAIY,eAAeD,GAAM,CAC3B,IAAME,EAAQd,EAAiBC,EAAIW,SACrBH,IAAVK,IACFT,EAAQO,GAAOE,EACfH,GAAW,EAEd,CAGH,OAAOA,EAAWN,OAAUI,CAxB3B,CAyBH,CAMM,SAAUM,EAAsBC,GACpC,IAAKA,EAAO,OAAO,EACnB,IAAMX,EAAUL,EAAiBgB,GACjC,OAAQX,GAA2C,IAAhCY,OAAOC,KAAKb,GAASK,MAC1C,CAMgB,SAAAS,EAAsBC,EAA0BC,GAC9D,GAAID,IAAWC,EAAQ,OAAO,EAE9B,IAEE,IAAMC,EAAWtB,EAAiBoB,GAC5BG,EAAWvB,EAAiBqB,GAElC,OAAIC,IAAaC,MACZD,IAAaC,IAEXC,KAAKC,UAAUH,KAAcE,KAAKC,UAAUF,EACpD,CAAC,MAAOG,GAEP,OADAC,QAAQD,MAAM,iCAAkCA,IACzC,CACR,CACH,CASgB,SAAAE,EAAkBZ,EAAyBa,GAEzD,GAAsB,oBAAXC,OAEX,IACE,IAAMC,EAAmBZ,EAAmBH,EAAOa,GAC7CG,EAAUjB,EAAmBC,GAEnC,GAAIe,GAAoBC,EAEtB,YADAC,EAAWC,eAAwC,UAKrD,IAAMC,EAAwC,CAC5C5B,OAAQiB,KAAKC,UAAUT,IAGzBiB,EAAWG,aAAsCD,EAClD,CAAC,MAAOT,GACPC,QAAQD,MAAM,qCAAsCA,EACrD,CACH,CASM,SAAUW,EAAoBR,GAElC,GAAsB,oBAAXC,OAAwB,OAAOD,EAE1C,IACE,IAAMS,EAAIL,EAAWM,KAA8B,UAEnD,IAAKD,EAAE/B,OAAQ,OAAOsB,EAGtB,IAAMb,EAAQQ,KAAKgB,MAAMF,EAAE/B,QAE3B,OADgBQ,EAAmBC,GAClBa,EAAeb,CACjC,CAAC,MAAOU,GAEP,OADAC,QAAQD,MAAM,uCAAwCA,GAC/CG,CACR,CACH,KAOaY,EAAe,SAACC,GAC3B,GAAsB,oBAAXZ,OACX,IACE,IAAKY,EAEH,YADAT,EAAWC,eAAe,QAG5BD,EAAWG,aAAa,CAAEM,KAAAA,GAC3B,CAAC,MAAOhB,GACPC,QAAQD,MAAM,6BAA8BA,EAC7C,CACH,EAOaiB,EAAiB,WAC5B,GAAsB,oBAAXb,OACX,IAEE,OADUG,EAAWM,KAAwB,QACpCG,IACV,CAAC,MAAOhB,GAEP,YADAC,QAAQD,MAAM,+BAAgCA,EAE/C,CACH,EAMakB,EAAoB,WAC/B,GAAsB,oBAAXd,OACX,IACEG,EAAWC,eAAe,OAC3B,CAAC,MAAOR,GACPC,QAAQD,MAAM,gCAAiCA,EAChD,CACH"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,slicedToArray as r,objectSpread2 as e,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{useState as l,useEffect as m}from"react";import{styled as u,Box as s,useMediaQuery as p}from"@mui/material";import{useTheme as f}from"@mui/material/styles";import{fetchDelay as c}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{createFilterBarContext as d}from"./index.context.js";import{createFilterSort as v}from"./components/filter-sort.js";import{createFilterMenu as g}from"./components/filter-menu.js";import{createFilterInput as y}from"./components/filter-input.js";import{createFilterSummary as C}from"./components/filter-summary.js";function S(t){if(!t.InputComponent){var u=t.inputConfig||{fields:{}};t.inputConfig=u,t.InputComponent=y(u)}if(!t.MenuComponent){var S=t.menuConfig||{fields:{}};t.menuConfig=S,t.MenuComponent=g(S)}if(!t.SummaryComponent&&!1!==t.enableSummary){var h=t.summaryConfig||{fields:{}};t.summaryConfig=h,t.SummaryComponent=C(h)}if(!t.SortComponent){var j=t.sortConfig||{fields:{}};t.sortConfig=j,t.SortComponent=v(j)}var P=t.defaultFilterLogic||"and",F=d();return function(u){var d,v=u.slots,g=t.InputComponent,y=t.MenuComponent,C=t.SummaryComponent,S=t.SortComponent,h=function(){return Object.assign({filterLogic:P},t.defaultFilterState,u.defaultValue)},j=l(function(){return u.value?{filterState:u.value}:{filterState:h()}}),I=r(j,2),w=I[0],B=I[1],k=l(!1),D=r(k,2),L=D[0],M=D[1];m(function(){u.value&&B({filterState:u.value})},[u.value]);var N=function(){var t=n(o().m(function t(r,e){var i;return o().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,B(function(t){var r;return{filterState:null!==(r=null==e?void 0:e.filterState)&&void 0!==r?r:t.filterState}}),M(!0),t.n=1,c(n(o().m(function t(){var e;return o().w(function(t){for(;;)if(0===t.n)return t.a(2,null===(e=u.onChange)||void 0===e?void 0:e.call(u,r))},t)})),500);case 1:M(!1),t.n=3;break;case 2:throw t.p=2,i=t.v,M(!1),i;case 3:return t.a(2)}},t,null,[[0,2]])}));return function(r,e){return t.apply(this,arguments)}}(),W={filterState:u.value||w.filterState,defaultFilterState:h(),isLoading:L,setFilterState:function(t){u.value?N(t):N(t,{filterState:t})}},A=f(),T=p(A.breakpoints.down("md"));return i(F.Provider,{value:W,children:a(x,{className:b.root,sx:u.sx,children:[a(s,{className:b.inner,children:[(null==v?void 0:v.before)||null,a("div",{className:b.action,children:[i(y,{slots:{popperProps:{placement:"bottom-start"}}}),i(S,{slots:{popperProps:{placement:"bottom-start"}}})]}),i(g,{slots:{minimalInput:T,popperProps:{placement:"bottom-start"}}}),(null==v?void 0:v.after)||null]}),a(s,e(e({},null==v?void 0:v.summaryWrapProps),{},{sx:e({display:"flex",alignItems:"center"},null==v||null===(d=v.summaryWrapProps)||void 0===d?void 0:d.sx),children:[(null==v?void 0:v.summaryBefore)||null,i(s,{sx:{flex:1,minWidth:0},children:!1!==t.enableSummary&&i(C,{})}),(null==v?void 0:v.summaryAfter)||null]}))]})})}}var b={root:"DinoFilterBar-root",inner:"DinoFilterBar-inner",action:"DinoFilterBar-action"},x=u(s)(function(r){var e=r.theme;return t(t(t({},"&.".concat(b.root),{backgroundColor:e.palette.background.paper,boxSizing:"border-box"}),".".concat(b.inner),{display:"flex",alignItems:"center",gap:e.spacing(1)}),".".concat(b.action),{display:"flex",alignItems:"center"})});export{S as createFilterBar};
1
+ import{defineProperty as t,slicedToArray as r,objectSpread2 as e,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as l}from"react/jsx-runtime";import{useState as a,useRef as u,useEffect as m}from"react";import{styled as s,Box as c,useMediaQuery as f}from"@mui/material";import{useTheme as p}from"@mui/material/styles";import{fetchDelay as d}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{createFilterBarContext as v}from"./index.context.js";import{createFilterSort as g}from"./components/filter-sort.js";import{createFilterMenu as y}from"./components/filter-menu.js";import{createFilterInput as S}from"./components/filter-input.js";import{createFilterSummary as C}from"./components/filter-summary.js";function b(t){var s,b=null!==(s=t.debounceDelay)&&void 0!==s?s:300;if(!t.InputComponent){var j=t.inputConfig||{fields:{}};t.inputConfig=j,t.InputComponent=S(j)}if(!t.MenuComponent){var P=t.menuConfig||{fields:{}};t.menuConfig=P,t.MenuComponent=y(P)}if(!t.SummaryComponent&&!1!==t.enableSummary){var w=t.summaryConfig||{fields:{}};t.summaryConfig=w,t.SummaryComponent=C(w)}if(!t.SortComponent){var F=t.sortConfig||{fields:{}};t.sortConfig=F,t.SortComponent=g(F)}var I=t.defaultFilterLogic||"and",B=v();return function(s){var v,g=s.slots,y=t.InputComponent,S=t.MenuComponent,C=t.SummaryComponent,j=t.SortComponent,P=function(){return Object.assign({filterLogic:I},t.defaultFilterState,s.defaultValue)},w=a(function(){return s.value?{filterState:s.value}:{filterState:P()}}),F=r(w,2),T=F[0],k=F[1],D=a(!1),L=r(D,2),M=L[0],N=L[1],W=u(null),A=u(null);m(function(){return function(){W.current&&(clearTimeout(W.current),W.current=null)}},[]),m(function(){s.value&&k({filterState:s.value})},[s.value]);var _=function(){var t=n(o().m(function t(r,e){var i;return o().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,k(function(t){var r;return{filterState:null!==(r=null==e?void 0:e.filterState)&&void 0!==r?r:t.filterState}}),N(!0),t.n=1,d(n(o().m(function t(){var e;return o().w(function(t){for(;;)if(0===t.n)return t.a(2,null===(e=s.onChange)||void 0===e?void 0:e.call(s,r))},t)})),b);case 1:N(!1),t.n=3;break;case 2:throw t.p=2,i=t.v,N(!1),i;case 3:return t.a(2)}},t,null,[[0,2]])}));return function(r,e){return t.apply(this,arguments)}}(),q={filterState:s.value||T.filterState,defaultFilterState:P(),isLoading:M,setFilterState:function(t){A.current=t,s.value||k({filterState:t}),W.current&&clearTimeout(W.current),W.current=window.setTimeout(function(){var t=A.current;s.value?_(t):_(t,{filterState:t}),W.current=null,A.current=null},b)}},z=p(),G=f(z.breakpoints.down("md"));return i(B.Provider,{value:q,children:l(h,{className:x.root,sx:s.sx,children:[l(c,{className:x.inner,children:[(null==g?void 0:g.before)||null,l("div",{className:x.action,children:[i(S,{slots:{popperProps:{placement:"bottom-start"}}}),i(j,{slots:{popperProps:{placement:"bottom-start"}}})]}),i(y,{slots:{minimalInput:G,popperProps:{placement:"bottom-start"}}}),(null==g?void 0:g.after)||null]}),l(c,e(e({},null==g?void 0:g.summaryWrapProps),{},{sx:e({display:"flex",alignItems:"center"},null==g||null===(v=g.summaryWrapProps)||void 0===v?void 0:v.sx),children:[(null==g?void 0:g.summaryBefore)||null,i(c,{sx:{flex:1,minWidth:0},children:!1!==t.enableSummary&&i(C,{})}),(null==g?void 0:g.summaryAfter)||null]}))]})})}}var x={root:"DinoFilterBar-root",inner:"DinoFilterBar-inner",action:"DinoFilterBar-action"},h=s(c)(function(r){var e=r.theme;return t(t(t({},"&.".concat(x.root),{backgroundColor:e.palette.background.paper,boxSizing:"border-box"}),".".concat(x.inner),{display:"flex",alignItems:"center",gap:e.spacing(1)}),".".concat(x.action),{display:"flex",alignItems:"center"})});export{b as createFilterBar};
2
2
  //# sourceMappingURL=index.create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useState, useEffect } from 'react'\r\nimport { Box, BoxProps, styled, useMediaQuery } from '@mui/material'\r\nimport { useTheme } from '@mui/material/styles'\r\nimport { fetchDelay } from '../utils'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './components/filter-menu'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './components/filter-menu.types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n defaultFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n InputComponent?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n MenuComponent?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n sortConfig?: IFilterSortConfig<T>\r\n SortComponent?: ComponentType<IFilterSortProps<T>>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n SummaryComponent?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n}\r\n\r\nexport interface IFilterBarSlots {\r\n summaryWrapProps?: BoxProps\r\n summaryBefore?: React.ReactNode\r\n summaryAfter?: React.ReactNode\r\n before?: React.ReactNode\r\n after?: React.ReactNode\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n defaultValue?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => Promise<void> | void\r\n slots?: IFilterBarSlots\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n if (!configs.InputComponent) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.inputConfig = configInput\r\n configs.InputComponent = createFilterInput<T>(configInput)\r\n }\r\n if (!configs.MenuComponent) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menuConfig = configMenu\r\n configs.MenuComponent = createFilterMenu<T>(configMenu)\r\n }\r\n if (!configs.SummaryComponent && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summaryConfig = configSummary\r\n configs.SummaryComponent = createFilterSummary<T>(configSummary)\r\n }\r\n if (!configs.SortComponent) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sortConfig = configSort\r\n configs.SortComponent = createFilterSort<T>(configSort)\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n const FilterBar: FC<IFilterBarProps<T>> = (props) => {\r\n const { slots } = props\r\n const InputComponent = configs.InputComponent as ComponentType<IFilterInputProps<T>>\r\n const MenuComponent = configs.MenuComponent as ComponentType<IFilterMenuProps<T>>\r\n const SummaryComponent = configs.SummaryComponent as ComponentType<IFilterSummaryProps<T>>\r\n const SortComponent = configs.SortComponent as ComponentType<IFilterSortProps<T>>\r\n\r\n const getDefaultFilterState = (): TFilterState<T> => {\r\n return Object.assign({ filterLogic: defaultFilterLogic }, configs.defaultFilterState, props.defaultValue)\r\n }\r\n\r\n const computeInitial = (): IFilterBarState<T> => {\r\n if (props.value) return { filterState: props.value }\r\n return { filterState: getDefaultFilterState() }\r\n }\r\n\r\n const [localState, setLocalState] = useState<IFilterBarState<T>>(computeInitial)\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n // keep local state in sync if controlled\r\n if (props.value) setLocalState({ filterState: props.value })\r\n }, [props.value])\r\n\r\n const handleChange = async (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => {\r\n try {\r\n setLocalState((prev) => ({ filterState: state?.filterState ?? prev.filterState }))\r\n setIsLoading(true)\r\n await fetchDelay(async () => props.onChange?.(filterState), 500)\r\n setIsLoading(false)\r\n } catch (error) {\r\n setIsLoading(false)\r\n throw error\r\n }\r\n }\r\n\r\n const setFilterState = (state: TFilterState<T>) => {\r\n if (props.value) {\r\n handleChange(state)\r\n return\r\n }\r\n handleChange(state, { filterState: state })\r\n }\r\n\r\n const contextValue: IFilterBarContext<T> = {\r\n filterState: props.value || localState.filterState,\r\n defaultFilterState: getDefaultFilterState(),\r\n isLoading: isLoading,\r\n setFilterState\r\n }\r\n\r\n const theme = useTheme()\r\n const isSmall = useMediaQuery(theme.breakpoints.down('md'))\r\n\r\n return (\r\n <Context.Provider value={contextValue}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={props.sx}>\r\n <Box className={filterbarClasses.inner}>\r\n {slots?.before || null}\r\n <div className={filterbarClasses.action}>\r\n <MenuComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <SortComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n <InputComponent slots={{ minimalInput: isSmall, popperProps: { placement: 'bottom-start' } }} />\r\n {slots?.after || null}\r\n </Box>\r\n <Box {...slots?.summaryWrapProps} sx={{ display: 'flex', alignItems: 'center', ...slots?.summaryWrapProps?.sx }}>\r\n {slots?.summaryBefore || null}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{configs.enableSummary !== false && <SummaryComponent />}</Box>\r\n {slots?.summaryAfter || null}\r\n </Box>\r\n </FilterBarStyled>\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner',\r\n action: 'DinoFilterBar-action'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper,\r\n boxSizing: 'border-box'\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n },\r\n [`.${filterbarClasses.action}`]: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","InputComponent","configInput","inputConfig","fields","createFilterInput","MenuComponent","configMenu","menuConfig","createFilterMenu","SummaryComponent","enableSummary","configSummary","summaryConfig","createFilterSummary","SortComponent","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","props","_slots$summaryWrapPro","slots","getDefaultFilterState","Object","assign","filterLogic","defaultFilterState","defaultValue","_useState","useState","value","filterState","_useState2","_slicedToArray","localState","setLocalState","_useState3","_useState4","isLoading","setIsLoading","useEffect","handleChange","_ref","_asyncToGenerator","_regenerator","m","_callee2","state","_t","w","_context2","p","n","prev","_state$filterState","fetchDelay","_callee","_props$onChange","_context","a","onChange","call","v","_x","_x2","apply","this","arguments","contextValue","setFilterState","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","Box","inner","before","action","popperProps","placement","minimalInput","after","_objectSpread","summaryWrapProps","display","alignItems","summaryBefore","flex","minWidth","summaryAfter","styled","_ref3","_defineProperty","concat","backgroundColor","palette","background","paper","boxSizing","gap","spacing"],"mappings":"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"}
1
+ {"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useState, useEffect, useRef } from 'react'\r\nimport { Box, BoxProps, styled, useMediaQuery } from '@mui/material'\r\nimport { useTheme } from '@mui/material/styles'\r\nimport { fetchDelay } from '../utils'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './components/filter-menu'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './components/filter-menu.types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n /** Debounce delay for filter input changes in milliseconds @default 300 */\r\n debounceDelay?: number\r\n defaultFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n InputComponent?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n MenuComponent?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n sortConfig?: IFilterSortConfig<T>\r\n SortComponent?: ComponentType<IFilterSortProps<T>>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n SummaryComponent?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n}\r\n\r\nexport interface IFilterBarSlots {\r\n summaryWrapProps?: BoxProps\r\n summaryBefore?: React.ReactNode\r\n summaryAfter?: React.ReactNode\r\n before?: React.ReactNode\r\n after?: React.ReactNode\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n defaultValue?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => Promise<void> | void\r\n slots?: IFilterBarSlots\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n const debounceDelay = configs.debounceDelay ?? 300\r\n\r\n if (!configs.InputComponent) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.inputConfig = configInput\r\n configs.InputComponent = createFilterInput<T>(configInput)\r\n }\r\n if (!configs.MenuComponent) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menuConfig = configMenu\r\n configs.MenuComponent = createFilterMenu<T>(configMenu)\r\n }\r\n if (!configs.SummaryComponent && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summaryConfig = configSummary\r\n configs.SummaryComponent = createFilterSummary<T>(configSummary)\r\n }\r\n if (!configs.SortComponent) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sortConfig = configSort\r\n configs.SortComponent = createFilterSort<T>(configSort)\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n const FilterBar: FC<IFilterBarProps<T>> = (props) => {\r\n const { slots } = props\r\n const InputComponent = configs.InputComponent as ComponentType<IFilterInputProps<T>>\r\n const MenuComponent = configs.MenuComponent as ComponentType<IFilterMenuProps<T>>\r\n const SummaryComponent = configs.SummaryComponent as ComponentType<IFilterSummaryProps<T>>\r\n const SortComponent = configs.SortComponent as ComponentType<IFilterSortProps<T>>\r\n\r\n const getDefaultFilterState = (): TFilterState<T> => {\r\n return Object.assign({ filterLogic: defaultFilterLogic }, configs.defaultFilterState, props.defaultValue)\r\n }\r\n\r\n const computeInitial = (): IFilterBarState<T> => {\r\n if (props.value) return { filterState: props.value }\r\n return { filterState: getDefaultFilterState() }\r\n }\r\n\r\n const [localState, setLocalState] = useState<IFilterBarState<T>>(computeInitial)\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n const debounceTimer = useRef<number | null>(null)\r\n const pendingStateRef = useRef<TFilterState<T> | null>(null)\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (debounceTimer.current) {\r\n clearTimeout(debounceTimer.current)\r\n debounceTimer.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n // keep local state in sync if controlled\r\n if (props.value) setLocalState({ filterState: props.value })\r\n }, [props.value])\r\n\r\n const handleChange = async (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => {\r\n try {\r\n setLocalState((prev) => ({ filterState: state?.filterState ?? prev.filterState }))\r\n setIsLoading(true)\r\n await fetchDelay(async () => props.onChange?.(filterState), debounceDelay)\r\n setIsLoading(false)\r\n } catch (error) {\r\n setIsLoading(false)\r\n throw error\r\n }\r\n }\r\n\r\n // Action handlers to manipulate filter state\r\n // Debounce or throttle can be added to these handlers if needed to optimize performance for rapid changes\r\n const setFilterState = (state: TFilterState<T>) => {\r\n // store latest requested state\r\n pendingStateRef.current = state\r\n\r\n // If uncontrolled, update UI immediately for responsiveness\r\n if (!props.value) {\r\n setLocalState({ filterState: state })\r\n }\r\n\r\n // debounce actual handler calls so only the last one within delay fires\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current)\r\n debounceTimer.current = window.setTimeout(() => {\r\n const s = pendingStateRef.current as TFilterState<T>\r\n if (props.value) {\r\n handleChange(s)\r\n } else {\r\n handleChange(s, { filterState: s })\r\n }\r\n debounceTimer.current = null\r\n pendingStateRef.current = null\r\n }, debounceDelay)\r\n }\r\n\r\n const contextValue: IFilterBarContext<T> = {\r\n filterState: props.value || localState.filterState,\r\n defaultFilterState: getDefaultFilterState(),\r\n isLoading: isLoading,\r\n setFilterState\r\n }\r\n\r\n const theme = useTheme()\r\n const isSmall = useMediaQuery(theme.breakpoints.down('md'))\r\n\r\n //TODO - add panel: định vị trí, ẩn hiện, trạng thái,...\r\n return (\r\n <Context.Provider value={contextValue}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={props.sx}>\r\n <Box className={filterbarClasses.inner}>\r\n {slots?.before || null}\r\n <div className={filterbarClasses.action}>\r\n <MenuComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <SortComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n <InputComponent slots={{ minimalInput: isSmall, popperProps: { placement: 'bottom-start' } }} />\r\n {slots?.after || null}\r\n </Box>\r\n <Box {...slots?.summaryWrapProps} sx={{ display: 'flex', alignItems: 'center', ...slots?.summaryWrapProps?.sx }}>\r\n {slots?.summaryBefore || null}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{configs.enableSummary !== false && <SummaryComponent />}</Box>\r\n {slots?.summaryAfter || null}\r\n </Box>\r\n </FilterBarStyled>\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner',\r\n action: 'DinoFilterBar-action'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper,\r\n boxSizing: 'border-box'\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n },\r\n [`.${filterbarClasses.action}`]: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","_configs$debounceDela","debounceDelay","InputComponent","configInput","inputConfig","fields","createFilterInput","MenuComponent","configMenu","menuConfig","createFilterMenu","SummaryComponent","enableSummary","configSummary","summaryConfig","createFilterSummary","SortComponent","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","props","_slots$summaryWrapPro","slots","getDefaultFilterState","Object","assign","filterLogic","defaultFilterState","defaultValue","_useState","useState","value","filterState","_useState2","_slicedToArray","localState","setLocalState","_useState3","_useState4","isLoading","setIsLoading","debounceTimer","useRef","pendingStateRef","useEffect","current","clearTimeout","handleChange","_ref","_asyncToGenerator","_regenerator","m","_callee2","state","_t","w","_context2","p","n","prev","_state$filterState","fetchDelay","_callee","_props$onChange","_context","a","onChange","call","v","_x","_x2","apply","this","arguments","contextValue","setFilterState","window","setTimeout","s","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","Box","inner","before","action","popperProps","placement","minimalInput","after","_objectSpread","summaryWrapProps","display","alignItems","summaryBefore","flex","minWidth","summaryAfter","styled","_ref3","_defineProperty","concat","backgroundColor","palette","background","paper","boxSizing","gap","spacing"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createClass as t,classCallCheck as e,defineProperty as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createConvertToGraphQL as i,mapLogic as s,mapSortDirection as a}from"./convert-to-graphql.js";import{isEmptyFilterState as l,removeNullValues as o,isFilterStateEqual as h,setFilterToURL as p,getFilterFromURL as m}from"./helpers.js";import{createFilterBar as c}from"./index.create.js";var n=t(function t(){e(this,t),r(this,"createFilterBar",c),r(this,"createConvertToGraphQL",i),r(this,"mapLogic",s),r(this,"mapDirection",a),r(this,"isEmptyFilterState",l),r(this,"removeNullValues",o),r(this,"isFilterStateEqual",h),r(this,"setFilterToURL",p),r(this,"getFilterFromURL",m)}),u=new n;export{n as DinoFilterBar,u as dinoFilterBar};
1
+ import{createClass as t,classCallCheck as e,defineProperty as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createFilterBar as i}from"./index.create.js";import{createLocalFilterBuilder as s}from"./local-filter-builder.js";import{createConvertToGraphQL as l,mapLogic as a,mapSortDirection as o}from"./convert-to-graphql.js";import{isEmptyFilterState as h,removeNullValues as m,isFilterStateEqual as p,setFilterToURL as c,getFilterFromURL as n}from"./helpers.js";var u=t(function t(){e(this,t),r(this,"createFilterBar",i),r(this,"createConvertToGraphQL",l),r(this,"createLocalFilterBuilder",s),r(this,"mapLogic",a),r(this,"mapDirection",o),r(this,"isEmptyFilterState",h),r(this,"removeNullValues",m),r(this,"isFilterStateEqual",p),r(this,"setFilterToURL",c),r(this,"getFilterFromURL",n)}),f=new u;export{u as DinoFilterBar,f as dinoFilterBar};
2
2
  //# sourceMappingURL=index.dino.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.dino.js","sources":["../../../src/filter-bar/index.dino.tsx"],"sourcesContent":["import { createConvertToGraphQL, mapLogic, mapSortDirection } from './convert-to-graphql'\r\nimport { getFilterFromURL, isEmptyFilterState, isFilterStateEqual, removeNullValues, setFilterToURL } from './helpers'\r\nimport { createFilterBar } from './index.create'\r\n\r\nexport class DinoFilterBar {\r\n createFilterBar = createFilterBar as typeof createFilterBar\r\n createConvertToGraphQL = createConvertToGraphQL as typeof createConvertToGraphQL\r\n\r\n // support\r\n mapLogic = mapLogic\r\n mapDirection = mapSortDirection\r\n\r\n // helpers\r\n isEmptyFilterState = isEmptyFilterState\r\n removeNullValues = removeNullValues\r\n isFilterStateEqual = isFilterStateEqual\r\n setFilterToURL = setFilterToURL\r\n getFilterFromURL = getFilterFromURL\r\n}\r\n\r\nexport const dinoFilterBar = new DinoFilterBar()\r\n"],"names":["DinoFilterBar","_createClass","_classCallCheck","_defineProperty","createFilterBar","createConvertToGraphQL","mapLogic","mapSortDirection","isEmptyFilterState","removeNullValues","isFilterStateEqual","setFilterToURL","getFilterFromURL","dinoFilterBar"],"mappings":"qZAIA,IAAaA,EAAaC,EAAA,SAAAD,IAAAE,OAAAF,GAAAG,yBACNC,GAAyCD,gCAClCE,GAEzBF,kBACWG,GAAQH,sBACJI,GAEfJ,4BACqBK,GAAkBL,0BACpBM,GAAgBN,4BACdO,GAAkBP,wBACtBQ,GAAcR,0BACZS,EAAgB,GAGxBC,EAAgB,IAAIb"}
1
+ {"version":3,"file":"index.dino.js","sources":["../../../src/filter-bar/index.dino.tsx"],"sourcesContent":["import { createFilterBar } from './index.create'\r\nimport { createLocalFilterBuilder } from './local-filter-builder'\r\nimport { createConvertToGraphQL, mapLogic, mapSortDirection } from './convert-to-graphql'\r\nimport { getFilterFromURL, isEmptyFilterState, isFilterStateEqual, removeNullValues, setFilterToURL } from './helpers'\r\n\r\nexport class DinoFilterBar {\r\n createFilterBar = createFilterBar\r\n createConvertToGraphQL = createConvertToGraphQL\r\n createLocalFilterBuilder = createLocalFilterBuilder\r\n\r\n // support\r\n mapLogic = mapLogic\r\n mapDirection = mapSortDirection\r\n\r\n // helpers\r\n isEmptyFilterState = isEmptyFilterState\r\n removeNullValues = removeNullValues\r\n isFilterStateEqual = isFilterStateEqual\r\n setFilterToURL = setFilterToURL\r\n getFilterFromURL = getFilterFromURL\r\n}\r\n\r\nexport const dinoFilterBar = new DinoFilterBar()\r\n"],"names":["DinoFilterBar","_createClass","_classCallCheck","_defineProperty","createFilterBar","createConvertToGraphQL","createLocalFilterBuilder","mapLogic","mapSortDirection","isEmptyFilterState","removeNullValues","isFilterStateEqual","setFilterToURL","getFilterFromURL","dinoFilterBar"],"mappings":"0dAKA,IAAaA,EAAaC,EAAA,SAAAD,IAAAE,OAAAF,GAAAG,yBACNC,GAAeD,gCACRE,GAAsBF,kCACpBG,GAE3BH,kBACWI,GAAQJ,sBACJK,GAEfL,4BACqBM,GAAkBN,0BACpBO,GAAgBP,4BACdQ,GAAkBR,wBACtBS,GAAcT,0BACZU,EAAgB,GAGxBC,EAAgB,IAAId"}
@@ -0,0 +1,2 @@
1
+ import{createClass as t,objectSpread2 as e,toConsumableArray as i,typeof as r,classCallCheck as a,defineProperty as n}from"../../_virtual/_rollupPluginBabelHelpers.js";var l=function(){return t(function t(e,i){a(this,t),n(this,"operation","contains"),n(this,"dataFiltered",[]),n(this,"filterState",{}),n(this,"autoMapConfigs",{}),this.data=e,this.filterState=i,this.dataFiltered=e.slice()},[{key:"autoMap",value:function(t){return t&&(this.autoMapConfigs=t),this}},{key:"filter",value:function(t){return null!=t&&t.fields&&(this.autoMapConfigs.fields=e(e({},this.autoMapConfigs.fields),t.fields)),this}},{key:"handleFilter",value:function(){var t,i=this,r=e({},this.autoMapConfigs.fields),a=this.filterState.storeFilter||{},n=null!==(t=this.filterState.filterLogic)&&void 0!==t?t:"and",l=Object.keys(a).filter(function(t){return"quickSearch"!==t&&r[t]});this.dataFiltered=this.dataFiltered.filter(function(t){var e=l.map(function(e){var n,l,o=r[e],s=a[e];if(!o||!s||!s.values||0===s.values.length)return null;var u=null!==(n=o.operation)&&void 0!==n?n:i.operation,f=Array.isArray(s.values)?s.values:[s.values],d=null!==(l=s.logic)&&void 0!==l?l:"and",c=t[e],h=f.map(function(t){return"contains"===u&&"string"==typeof c&&"string"==typeof t?c.toLowerCase().includes(t.toString().toLowerCase()):c===t});return"and"===d?h.every(Boolean):h.some(Boolean)}).filter(function(t){return null!==t});return 0===e.length||("and"===n?e.every(Boolean):e.some(Boolean))})}},{key:"quickSearch",value:function(t){if(null!=t&&t.fields){var e,r=new Set([].concat(i(null!==(e=this.autoMapConfigs.quickSearchFields)&&void 0!==e?e:[]),i(t.fields)));this.autoMapConfigs.quickSearchFields=Array.from(r)}return this}},{key:"handleQuickSearch",value:function(){var t,e,i=null!==(t=this.autoMapConfigs.quickSearchFields)&&void 0!==t?t:[],r=(this.filterState.storeFilter||{}).quickSearch;if(r&&0!==i.length){var a=Array.isArray(r.values)?r.values:[r.values];if(a&&0!==a.length){var n=null!==(e=r.logic)&&void 0!==e?e:"or";this.dataFiltered=this.dataFiltered.filter(function(t){var e=a.map(function(e){return i.some(function(i){var r=t[i];return"string"==typeof r&&"string"==typeof e?r.toLowerCase().includes(e.toString().toLowerCase()):r===e})});return"and"===n?e.every(Boolean):e.some(Boolean)})}}}},{key:"sort",value:function(t){var e;return null!=t&&t.sortFields&&(this.autoMapConfigs.sortFields=[].concat(i(null!==(e=this.autoMapConfigs.sortFields)&&void 0!==e?e:[]),i(t.sortFields))),this}},{key:"handleSort",value:function(){var t,e,i=this.filterState.storeSort,a=(null!==(t=this.autoMapConfigs.sortFields)&&void 0!==t?t:[]).map(String);if(i&&i.field){var n=String(i.field);if(a.includes(n)){var l="asc"===(null!==(e=i.direction)&&void 0!==e?e:"desc")?1:-1;this.dataFiltered.sort(function(t,e){var i=t[n],a=e[n];if(null==i&&null==a)return 0;if(null==i)return-1*l;if(null==a)return 1*l;var o=r(i);return"string"===o&&"string"==typeof a?i.localeCompare(a)*l:"number"===o&&"number"==typeof a?(i-a)*l:"boolean"===o&&"boolean"==typeof a?((i?1:0)-(a?1:0))*l:String(i).localeCompare(String(a))*l})}}}},{key:"build",value:function(){return this.dataFiltered=this.data.slice(),this.handleFilter(),this.handleQuickSearch(),this.handleSort(),this.dataFiltered}}])}(),o=function(t,e){return new l(t,e)};export{l as LocalFilterBuilder,o as createLocalFilterBuilder};
2
+ //# sourceMappingURL=local-filter-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-filter-builder.js","sources":["../../../src/filter-bar/local-filter-builder.ts"],"sourcesContent":["import { TFieldValue, TFilterState } from './types'\r\n\r\ntype TOperation = 'equal' | 'contains'\r\n\r\ntype TAutoMapField = {\r\n /** The operation to use for filtering. 'equal' for exact match, 'contains' for partial match. @default 'contains' */\r\n operation?: TOperation\r\n}\r\n\r\ntype TAutoMapFields<T> = Partial<Record<keyof T, TAutoMapField>>\r\n\r\ntype TAutoMapConfigs<T> = {\r\n fields?: TAutoMapFields<T>\r\n sortFields?: (keyof T)[]\r\n quickSearchFields?: (keyof T)[]\r\n}\r\n\r\nexport class LocalFilterBuilder<T> {\r\n private operation: TOperation = 'contains'\r\n private data: T[]\r\n private dataFiltered: T[] = []\r\n private filterState: TFilterState<T> = {}\r\n constructor(data: T[], filterState: TFilterState<T>) {\r\n this.data = data\r\n this.filterState = filterState\r\n this.dataFiltered = data.slice()\r\n }\r\n\r\n private autoMapConfigs: TAutoMapConfigs<T> = {}\r\n autoMap(configs?: TAutoMapConfigs<T>) {\r\n if (configs) this.autoMapConfigs = configs\r\n return this\r\n }\r\n\r\n //#region filter\r\n /** Register field filter config. Merged with autoMap.fields. */\r\n filter(config?: { fields?: TAutoMapFields<T> }) {\r\n if (config?.fields) this.autoMapConfigs.fields = { ...this.autoMapConfigs.fields, ...config.fields }\r\n return this\r\n }\r\n\r\n private handleFilter() {\r\n const fieldsMap = { ...this.autoMapConfigs.fields } as Record<string, TAutoMapField>\r\n const storeFilter = this.filterState.storeFilter || {}\r\n const globalLogic = this.filterState.filterLogic ?? 'and'\r\n // exclude 'quickSearch' — handled by handleQuickSearch\r\n const activeKeys = Object.keys(storeFilter).filter((k) => k !== 'quickSearch' && fieldsMap[k])\r\n\r\n this.dataFiltered = this.dataFiltered.filter((item) => {\r\n const perFieldResults = activeKeys.map((key) => {\r\n const fieldDef = fieldsMap[key]\r\n const fieldStore: TFieldValue = storeFilter[key as keyof typeof storeFilter]\r\n if (!fieldDef || !fieldStore || !fieldStore.values || fieldStore.values.length === 0) return null\r\n\r\n const op = fieldDef.operation ?? this.operation\r\n const values = Array.isArray(fieldStore.values) ? fieldStore.values : [fieldStore.values]\r\n const fieldLogic = fieldStore.logic ?? 'and'\r\n const itemValue = (item as any)[key]\r\n\r\n const matches = values.map((v) => {\r\n if (op === 'contains' && typeof itemValue === 'string' && typeof v === 'string') {\r\n return itemValue.toLowerCase().includes(v.toString().toLowerCase())\r\n }\r\n return itemValue === v\r\n })\r\n\r\n if (fieldLogic === 'and') return matches.every(Boolean)\r\n return matches.some(Boolean)\r\n })\r\n\r\n const validResults = perFieldResults.filter((r) => r !== null) as boolean[]\r\n if (validResults.length === 0) return true\r\n if (globalLogic === 'and') return validResults.every(Boolean)\r\n return validResults.some(Boolean)\r\n })\r\n }\r\n //#endregion\r\n\r\n //#region quick search\r\n /** Register quickSearch config. Merged with autoMap.quickSearchFields. */\r\n quickSearch(config?: { fields?: (keyof T)[] }) {\r\n if (config?.fields) {\r\n const fieldSet = new Set([...(this.autoMapConfigs.quickSearchFields ?? []), ...config.fields])\r\n this.autoMapConfigs.quickSearchFields = Array.from(fieldSet)\r\n }\r\n return this\r\n }\r\n\r\n private handleQuickSearch() {\r\n const quickFields = (this.autoMapConfigs.quickSearchFields ?? []) as string[]\r\n const storeFilter = this.filterState.storeFilter || {}\r\n const quickStore: TFieldValue = storeFilter['quickSearch' as keyof typeof storeFilter]\r\n\r\n if (!quickStore || quickFields.length === 0) return\r\n const qValues = Array.isArray(quickStore.values) ? quickStore.values : [quickStore.values]\r\n if (!qValues || qValues.length === 0) return\r\n\r\n const qLogic = quickStore.logic ?? 'or'\r\n\r\n this.dataFiltered = this.dataFiltered.filter((item) => {\r\n const matchesForAllQuick = qValues.map((qv) =>\r\n quickFields.some((kf) => {\r\n const val = (item as any)[kf]\r\n if (typeof val === 'string' && typeof qv === 'string') {\r\n return val.toLowerCase().includes(qv.toString().toLowerCase())\r\n }\r\n return val === qv\r\n })\r\n )\r\n return qLogic === 'and' ? matchesForAllQuick.every(Boolean) : matchesForAllQuick.some(Boolean)\r\n })\r\n }\r\n //#endregion\r\n\r\n //#region sort\r\n /** Register sort config. Merged with autoMap.sortFields. */\r\n sort(config?: { sortFields?: (keyof T)[] }) {\r\n if (config?.sortFields) this.autoMapConfigs.sortFields = [...(this.autoMapConfigs.sortFields ?? []), ...config.sortFields]\r\n return this\r\n }\r\n\r\n private handleSort() {\r\n const sortDef = this.filterState.storeSort\r\n const allowedSort = (this.autoMapConfigs.sortFields ?? []).map(String)\r\n\r\n if (!sortDef || !sortDef.field) return\r\n const sortField = String(sortDef.field)\r\n if (!allowedSort.includes(sortField)) return\r\n\r\n const dir = sortDef.direction ?? 'desc'\r\n const multiplier = dir === 'asc' ? 1 : -1\r\n\r\n this.dataFiltered.sort((a, b) => {\r\n const va = (a as any)[sortField]\r\n const vb = (b as any)[sortField]\r\n\r\n if (va == null && vb == null) return 0\r\n if (va == null) return -1 * multiplier\r\n if (vb == null) return 1 * multiplier\r\n\r\n const ta = typeof va\r\n if (ta === 'string' && typeof vb === 'string') return va.localeCompare(vb) * multiplier\r\n if (ta === 'number' && typeof vb === 'number') return (va - vb) * multiplier\r\n if (ta === 'boolean' && typeof vb === 'boolean') return ((va ? 1 : 0) - (vb ? 1 : 0)) * multiplier\r\n return String(va).localeCompare(String(vb)) * multiplier\r\n })\r\n }\r\n //#endregion\r\n\r\n build(): T[] {\r\n this.dataFiltered = this.data.slice()\r\n this.handleFilter()\r\n this.handleQuickSearch()\r\n this.handleSort()\r\n return this.dataFiltered\r\n }\r\n}\r\n\r\nexport const createLocalFilterBuilder = <T>(data: T[], filterState: TFilterState<T>) => {\r\n return new LocalFilterBuilder(data, filterState)\r\n}\r\n"],"names":["LocalFilterBuilder","_createClass","data","filterState","_classCallCheck","_defineProperty","this","dataFiltered","slice","key","value","configs","autoMapConfigs","config","fields","_objectSpread","_this$filterState$fil","_this","fieldsMap","storeFilter","globalLogic","filterLogic","activeKeys","Object","keys","filter","k","item","validResults","map","_fieldDef$operation","_fieldStore$logic","fieldDef","fieldStore","values","length","op","operation","Array","isArray","fieldLogic","logic","itemValue","matches","v","toLowerCase","includes","toString","every","Boolean","some","r","_this$autoMapConfigs$","fieldSet","Set","concat","_toConsumableArray","quickSearchFields","from","_this$autoMapConfigs$2","_quickStore$logic","quickFields","quickStore","qValues","qLogic","matchesForAllQuick","qv","kf","val","_this$autoMapConfigs$3","sortFields","_this$autoMapConfigs$4","_sortDef$direction","sortDef","storeSort","allowedSort","String","field","sortField","multiplier","direction","sort","a","b","va","vb","ta","_typeof","localeCompare","handleFilter","handleQuickSearch","handleSort","createLocalFilterBuilder"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as a,classCallCheck as t,callSuper as l,toConsumableArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Component as d,Fragment as u}from"react";import{styled as p,Box as c}from"@mui/material";import{DataGrid as g}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{TableBaseContext as h}from"./context.js";import{customFilterOperators as f}from"./custom.filter-operators.js";import v,{dinoTableClasses as b}from"./helpers.js";import y from"./toolbar-pannel.js";import{GlobalModal as C,mapGlobalModalContext as P}from"../api-context/global-modal.js";var w=["children"];function S(e){return function(){function p(r){var a;return t(this,p),a=l(this,p,[r]),i(a,"setTableQueryParams",function(e){a.tableQueryParams=m({},a.tableQueryParams,e)}),i(a,"renderWrapContext",function(o){var i=e.disableGlobalModalProvider?u:C;return s(i,{children:P(function(e){return s(h.Provider,{value:{showModal:e.show,closeModal:e.close},children:o})})})}),i(a,"getDataGridProps",function(){var o,i,r,t,l=v.mapInitialState(a.props.query,{columns:{columnVisibilityModel:e.columnVisibilityModel}}),n={getRowId:e.getRowId,initialState:l,columns:a.columns,rows:null!==(o=null===(i=a.props.data)||void 0===i?void 0:i.items)&&void 0!==o?o:[],checkboxSelection:!0,pagination:!0,density:null!==(r=null===(t=a.props.slots)||void 0===t?void 0:t.density)&&void 0!==r?r:"standard",filterDebounceMs:800,sx:{border:0},slots:{toolbar:a.mergeConfig.toolbar},rowSelectionModel:a.rowSelecteds,onRowSelectionModelChange:a.handleRowSelectionChange};if("server"===e.featureMode){var s,d,u={filterMode:"server",sortingMode:"server",paginationMode:"server",onPaginationModelChange:a.onPaginationModelChange,onFilterModelChange:a.onFilterModelChange,onSortModelChange:a.onSortModelChange,rowCount:null!==(s=null===(d=a.props.data)||void 0===d?void 0:d.rowTotal)&&void 0!==s?s:0,paginationModel:a.tableQueryParams.pagination,filterModel:a.tableQueryParams.filter,sortModel:v.mapSortModel(a.tableQueryParams.sort),loading:a.mergeConfig.loading};Object.assign(n,u)}return m(n,a.mergeConfig.dataGridProps)}),i(a,"initialColumns",function(){var i,r,t=a.mergeConfig,l=t.ActionRow,d=t.disableActionRow,u=[];return l&&!0!==d&&u.push(o({field:"Actions",minWidth:100,headerAlign:"right",align:"right",filterable:!1,sortable:!1,renderCell:function(e){return s(l,{value:e.row})}},e.actionRow)),i=u,r=Object.keys(e.columns).map(function(i){var r=o({field:i},e.columns[i]);return r.filterOperators=e.filterOperators?e.filterOperators(r):f(r),r}),i&&i.length>0&&r.push.apply(r,n(i)),r}),i(a,"onPaginationModelChange",function(e,o){a.mergeConfig.loading||(a.setTableQueryParams({pagination:e,detail:"pagination"}),a.handleChange())}),i(a,"onFilterModelChange",function(e,o){var i;if(!a.mergeConfig.loading){var r=a.tableQueryParams.pagination;a.setTableQueryParams({filter:e,pagination:{page:0,pageSize:null!==(i=null==r?void 0:r.pageSize)&&void 0!==i?i:25},detail:v.detectSearchType(e)}),a.handleChange()}}),i(a,"onSortModelChange",function(e,o){if(!a.mergeConfig.loading){var i,r,t,l,n,s=e,d=a.tableQueryParams.sort;if(null!=d&&d.length&&!s.length)if((null==d||null===(i=d[0])||void 0===i?void 0:i.field)===(null===(r=a.defaultTableQueryParams.sort)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.field))s=[{field:null===(t=d[0])||void 0===t?void 0:t.field,sort:"desc"===(null===(l=d[0])||void 0===l?void 0:l.sort)?"asc":"desc"}];else s=null!==(n=a.defaultTableQueryParams.sort)&&void 0!==n?n:[];a.setTableQueryParams({sort:s,detail:"sort"}),a.handleChange()}}),i(a,"handleChange",function(){a.changeTimeout&&clearTimeout(a.changeTimeout),a.changeTimeout=setTimeout(function(){a.props.onChange&&a.props.onChange(a.tableQueryParams)},300)}),i(a,"handleRowSelectionChange",function(e,o){a.mergeConfig.maxSelcion&&e.length>a.mergeConfig.maxSelcion?a.rowSelecteds=e.slice(0,a.mergeConfig.maxSelcion):a.rowSelecteds=e,a.props.onRowSelectionChange&&a.props.onRowSelectionChange(a.rowSelecteds,o),a.forceUpdate()}),a.columns=a.initialColumns(),a.tableQueryParams=o({},r.query),a.defaultTableQueryParams=a.tableQueryParams,a.rowSelecteds=[],a}return r(p,d),a(p,[{key:"mergeConfig",get:function(){var i,r,a,t,l,n,d,u,p,c,g=m({},null==e?void 0:e.toolbarProps,null===(i=this.props.slots)||void 0===i?void 0:i.toolbarProps);return{toolbar:null!==(r=null===(a=this.props.slots)||void 0===a?void 0:a.toolbar)&&void 0!==r?r:function(){return s(y,o({},g))},ActionRow:null===(t=this.props.slots)||void 0===t?void 0:t.actionRow,disableActionRow:e.disableActionRow,columnVisibilityModel:e.columnVisibilityModel,maxSelcion:null!==(l=null===(n=this.props.slots)||void 0===n?void 0:n.maxSelection)&&void 0!==l?l:e.maxSelection,dataGridProps:m({},e.dataGridProps,null===(d=this.props.slots)||void 0===d?void 0:d.dataGridProps),wrapProps:m({},e.wrapProps,null===(u=this.props.slots)||void 0===u?void 0:u.wrapProps),loading:null!==(p=void 0!==this.props.loading?this.props.loading:null===(c=this.tableQueryParams)||void 0===c?void 0:c.loading)&&void 0!==p&&p}}},{key:"componentWillUnmount",value:function(){this.changeTimeout&&clearTimeout(this.changeTimeout)}},{key:"shouldComponentUpdate",value:function(o){var i;return"server"!==e.featureMode||(v.equalTableQueryParams(o.query,this.props.query)?JSON.stringify(o.data)!==JSON.stringify(this.props.data)||o.loading!==this.props.loading:(this.setTableQueryParams(null!==(i=o.query)&&void 0!==i?i:{}),!0))}},{key:"render",value:function(){return this.renderWrapContext(s(M,o(o({},this.mergeConfig.wrapProps),{},{children:s(g,o({loading:this.props.loading},this.getDataGridProps()))})))}}])}()}var M=p(function(i){var r=i.children,a=e(i,w);return s(c,o(o({},a),{},{children:s("div",{children:r})}))})(i(i({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},".MuiDataGrid-root":{"--unstable_DataGrid-radius":0,overflow:"hidden"}},".MuiDataGrid-cell.".concat(b.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}),".MuiTablePagination-root p",{marginBottom:0}));export{S as CreateTable,S as default};
1
+ import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as a,classCallCheck as t,callSuper as l,toConsumableArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Fragment as d,Component as u}from"react";import{styled as p,Box as c}from"@mui/material";import{DataGrid as g}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{TableBaseContext as h}from"./context.js";import{customFilterOperators as f}from"./custom.filter-operators.js";import v,{dinoTableClasses as b}from"./helpers.js";import y from"./toolbar-pannel.js";import{GlobalModal as C,mapGlobalModalContext as P}from"../api-context/global-modal.js";var w=["children"];function S(e){return function(){function p(r){var a;return t(this,p),a=l(this,p,[r]),i(a,"setTableQueryParams",function(e){a.tableQueryParams=m({},a.tableQueryParams,e)}),i(a,"renderWrapContext",function(o){var i=e.disableGlobalModalProvider?d:C;return s(i,{children:P(function(e){return s(h.Provider,{value:{showModal:e.show,closeModal:e.close},children:o})})})}),i(a,"getDataGridProps",function(){var o,i,r,t,l=v.mapInitialState(a.props.query,{columns:{columnVisibilityModel:e.columnVisibilityModel}}),n={getRowId:e.getRowId,initialState:l,columns:a.columns,rows:null!==(o=null===(i=a.props.data)||void 0===i?void 0:i.items)&&void 0!==o?o:[],checkboxSelection:!0,pagination:!0,density:null!==(r=null===(t=a.props.slots)||void 0===t?void 0:t.density)&&void 0!==r?r:"standard",filterDebounceMs:800,sx:{border:0},slots:{toolbar:a.mergeConfig.toolbar},rowSelectionModel:a.rowSelecteds,onRowSelectionModelChange:a.handleRowSelectionChange};if("server"===e.featureMode){var s,d,u={filterMode:"server",sortingMode:"server",paginationMode:"server",onPaginationModelChange:a.onPaginationModelChange,onFilterModelChange:a.onFilterModelChange,onSortModelChange:a.onSortModelChange,rowCount:null!==(s=null===(d=a.props.data)||void 0===d?void 0:d.rowTotal)&&void 0!==s?s:0,paginationModel:a.tableQueryParams.pagination,filterModel:a.tableQueryParams.filter,sortModel:v.mapSortModel(a.tableQueryParams.sort),loading:a.mergeConfig.loading};Object.assign(n,u)}return m(n,a.mergeConfig.dataGridProps)}),i(a,"initialColumns",function(){var i,r,t=a.mergeConfig,l=t.ActionRow,d=t.disableActionRow,u=[];return l&&!0!==d&&u.push(o({field:"Actions",minWidth:100,headerAlign:"right",align:"right",filterable:!1,sortable:!1,renderCell:function(e){return s(l,{value:e.row})}},e.actionRow)),i=u,r=Object.keys(e.columns).map(function(i){var r=o({field:i},e.columns[i]);return r.filterOperators=e.filterOperators?e.filterOperators(r):f(r),r}),i&&i.length>0&&r.push.apply(r,n(i)),r}),i(a,"onPaginationModelChange",function(e,o){a.mergeConfig.loading||(a.setTableQueryParams({pagination:e,detail:"pagination"}),a.handleChange())}),i(a,"onFilterModelChange",function(e,o){var i;if(!a.mergeConfig.loading){var r=a.tableQueryParams.pagination;a.setTableQueryParams({filter:e,pagination:{page:0,pageSize:null!==(i=null==r?void 0:r.pageSize)&&void 0!==i?i:25},detail:v.detectSearchType(e)}),a.handleChange()}}),i(a,"onSortModelChange",function(e,o){if(!a.mergeConfig.loading){var i,r,t,l,n,s=e,d=a.tableQueryParams.sort;if(null!=d&&d.length&&!s.length)if((null==d||null===(i=d[0])||void 0===i?void 0:i.field)===(null===(r=a.defaultTableQueryParams.sort)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.field))s=[{field:null===(t=d[0])||void 0===t?void 0:t.field,sort:"desc"===(null===(l=d[0])||void 0===l?void 0:l.sort)?"asc":"desc"}];else s=null!==(n=a.defaultTableQueryParams.sort)&&void 0!==n?n:[];a.setTableQueryParams({sort:s,detail:"sort"}),a.handleChange()}}),i(a,"handleChange",function(){a.changeTimeout&&clearTimeout(a.changeTimeout),a.changeTimeout=setTimeout(function(){a.props.onChange&&a.props.onChange(a.tableQueryParams)},300)}),i(a,"handleRowSelectionChange",function(e,o){a.mergeConfig.maxSelcion&&e.length>a.mergeConfig.maxSelcion?a.rowSelecteds=e.slice(0,a.mergeConfig.maxSelcion):a.rowSelecteds=e,a.props.onRowSelectionChange&&a.props.onRowSelectionChange(a.rowSelecteds,o),a.forceUpdate()}),a.columns=a.initialColumns(),a.tableQueryParams=o({},r.query),a.defaultTableQueryParams=a.tableQueryParams,a.rowSelecteds=[],a}return r(p,u),a(p,[{key:"mergeConfig",get:function(){var i,r,a,t,l,n,d,u,p,c,g=m({},null==e?void 0:e.toolbarProps,null===(i=this.props.slots)||void 0===i?void 0:i.toolbarProps);return{toolbar:null!==(r=null===(a=this.props.slots)||void 0===a?void 0:a.toolbar)&&void 0!==r?r:function(){return s(y,o({},g))},ActionRow:null===(t=this.props.slots)||void 0===t?void 0:t.actionRow,disableActionRow:e.disableActionRow,columnVisibilityModel:e.columnVisibilityModel,maxSelcion:null!==(l=null===(n=this.props.slots)||void 0===n?void 0:n.maxSelection)&&void 0!==l?l:e.maxSelection,dataGridProps:m({},e.dataGridProps,null===(d=this.props.slots)||void 0===d?void 0:d.dataGridProps),wrapProps:m({},e.wrapProps,null===(u=this.props.slots)||void 0===u?void 0:u.wrapProps),loading:null!==(p=void 0!==this.props.loading?this.props.loading:null===(c=this.tableQueryParams)||void 0===c?void 0:c.loading)&&void 0!==p&&p}}},{key:"componentWillUnmount",value:function(){this.changeTimeout&&clearTimeout(this.changeTimeout)}},{key:"shouldComponentUpdate",value:function(o){var i;return"server"!==e.featureMode||(v.equalTableQueryParams(o.query,this.props.query)?JSON.stringify(o.data)!==JSON.stringify(this.props.data)||o.loading!==this.props.loading:(this.setTableQueryParams(null!==(i=o.query)&&void 0!==i?i:{}),!0))}},{key:"render",value:function(){return this.renderWrapContext(s(M,o(o({},this.mergeConfig.wrapProps),{},{children:s(g,o({loading:this.props.loading},this.getDataGridProps()))})))}}])}()}var M=p(function(i){var r=i.children,a=e(i,w);return s(c,o(o({},a),{},{children:s("div",{children:r})}))})(i(i({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},".MuiDataGrid-root":{"--unstable_DataGrid-radius":0,overflow:"hidden"}},".MuiDataGrid-cell.".concat(b.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}),".MuiTablePagination-root p",{marginBottom:0}));export{S as CreateTable,S as default};
2
2
  //# sourceMappingURL=create.table.js.map
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as r,slicedToArray as t,regenerator as n,typeof as e,objectSpread2 as o,toArray as a,arrayLikeToArray as c}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"dayjs";var u=function(r){return new Promise(function(t){return setTimeout(t,r)})},s=function(){var e=r(n().m(function r(e,o){var a,c,i;return n().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,Promise.all([e(),u(o)]);case 1:return a=r.v,c=t(a,1),i=c[0],r.a(2,i)}},r)}));return function(r,t){return e.apply(this,arguments)}}(),f=function(r){return/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(r)},l=function(r){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)},d=function(r){return/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())},y=function(r){return/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(r)},v=function(r,t){setTimeout(function(){window.scrollTo(o({top:0,left:0,behavior:"smooth"},r))},t||50)},h=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.join(" ")},p=function(r){return r&&"object"===e(r)&&!Array.isArray(r)},A=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.reduce(function(r,t){return t?(Object.keys(t).forEach(function(n){p(r[n])&&p(t[n])?r[n]=A(r[n],t[n]):r[n]=t[n]}),r):r},{})},g=function(r){try{return r?Object.entries(r).reduce(function(r,n){var e=t(n,2),o=e[0],a=e[1];return void 0!==a&&(r[o]=a),r},{}):{}}catch(r){return{}}},m=function(r){if("object"!==e(r)||null===r)return r;var n=Array.isArray(r)?[]:{};return Object.entries(r).forEach(function(r){var o=t(r,2),a=o[0],c=o[1];if(null==c||"string"==typeof c&&""===c.trim()||"number"==typeof c&&isNaN(c)||Array.isArray(c)&&0===c.length||"object"===e(c)&&!Array.isArray(c)&&0===Object.keys(m(c)).length);else if("object"!==e(c)||Array.isArray(c))n[a]=c;else{var i=m(c);Object.keys(i).length>0&&(n[a]=i)}}),n},b=function(r){try{var t=(new TextEncoder).encode(r),n="";return t.forEach(function(r){n+=String.fromCharCode(r)}),btoa(n)}catch(r){return console.error("Error encoding to base64",r),""}},j=function(r){try{for(var t=atob(r),n=new Uint8Array(t.length),e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return(new TextDecoder).decode(n)}catch(r){return void console.error("Error decoding base64",r)}},w=function(r,t){try{return r?JSON.parse(r):t}catch(r){return console.log("Try Parse Object error:",r),t}},F=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{if(!r)return[];var n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(r){return t}},M=function(r,t){try{return r?parseInt(r):t}catch(r){return t}},S=function(r){return new Promise(function(t,n){var e=new FileReader;e.onload=function(){try{var r=e.result.split(/\r?\n/).filter(Boolean);if(r.length<1)return t([]);var n=r[0].split(",").map(function(r){return r.trim()}),o=r.slice(1).map(function(r){var t=r.split(",").map(function(r){return r.trim()}),e={};return n.forEach(function(r,n){var o;e[r]=null!==(o=t[n])&&void 0!==o?o:""}),e});t(o)}catch(r){t([])}},e.onerror=function(){n(new Error("Error reading file"))},e.readAsText(r)})},Y=function(r){return r<1024?r.toFixed(2)+" Kb":r<1048576?(r/1024).toFixed(2)+" Mb":r<1073741824?(r/1048576).toFixed(2)+" Gb":(r/1073741824).toFixed(2)+" Tb"},E=function(r){var t=null==r,n="string"==typeof r&&isNaN(Number(r));if(t||n)return"00:00:00";var e=Math.round(r),o=Math.floor(e/3600),a=Math.floor(e%3600/60),c=e%60,i=String(o).padStart(2,"0"),u=String(a).padStart(2,"0"),s=String(c).padStart(2,"0");return"".concat(i,":").concat(u,":").concat(s)},T=function(r){var n,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$ ",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{n=parseFloat(r),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),c=t(a,2),i=c[0],u=c[1],s=i.replace(/\B(?=(\d{3})+(?!\d))/g," "),f=s;return"00"!==u&&(f="".concat(s,".").concat(u)),"".concat(e).concat(f).concat(o)},x=function(r){return r.toLocaleString("en-US")},N=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!r)return r;var t=Array.from(r),n=a(t),e=n[0],o=c(n).slice(1);return"".concat(e.toUpperCase()).concat(o.join(""))},O={style1:"DD/MM/YYYY HH:mm",style2:"MMMM D, YYYY",style3:"MM-DD-YYYY"},D=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"style1";try{var n;if(!r)throw new Error;var e=null!==(n=O[t])&&void 0!==n?n:t;return i(r).format(e)}catch(r){return"unknown"}};export{g as cleanObject,j as decodeBase64,m as deepRemoveEmptyFields,b as encodeBase64,s as fetchDelay,N as formatCapitalizeFirstText,T as formatCurrency,D as formatDatetime,O as formatDatetimeStyles,E as formatDuration,Y as formatFileSize,x as formatNumberWithCommas,f as isGuid,l as isValidEmail,d as isValidPhoneNumber,y as isValidURL,h as mergeClasses,A as mergeObjects,u as sleep,F as tryParseArray,S as tryParseCsvFileToArray,M as tryParseIntRequired,w as tryParseObject,v as windowScrollToTop};
1
+ import{typeof as r,slicedToArray as t,asyncToGenerator as n,regenerator as e,objectSpread2 as o,toArray as a,arrayLikeToArray as c}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"dayjs";var u=function(r){return new Promise(function(t){return setTimeout(t,r)})},s=function(){var r=n(e().m(function r(n,o){var a,c,i;return e().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,Promise.all([n(),u(o)]);case 1:return a=r.v,c=t(a,1),i=c[0],r.a(2,i)}},r)}));return function(t,n){return r.apply(this,arguments)}}(),f=function(r){return/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(r)},l=function(r){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)},d=function(r){return/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())},y=function(r){return/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(r)},v=function(r,t){setTimeout(function(){window.scrollTo(o({top:0,left:0,behavior:"smooth"},r))},t||50)},h=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.join(" ")},p=function(t){return t&&"object"===r(t)&&!Array.isArray(t)},A=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.reduce(function(r,t){return t?(Object.keys(t).forEach(function(n){p(r[n])&&p(t[n])?r[n]=A(r[n],t[n]):r[n]=t[n]}),r):r},{})},g=function(r){try{return r?Object.entries(r).reduce(function(r,n){var e=t(n,2),o=e[0],a=e[1];return void 0!==a&&(r[o]=a),r},{}):{}}catch(r){return{}}},m=function(n){if("object"!==r(n)||null===n)return n;var e=Array.isArray(n)?[]:{};return Object.entries(n).forEach(function(n){var o=t(n,2),a=o[0],c=o[1];if(null==c||"string"==typeof c&&""===c.trim()||"number"==typeof c&&isNaN(c)||Array.isArray(c)&&0===c.length||"object"===r(c)&&!Array.isArray(c)&&0===Object.keys(m(c)).length);else if("object"!==r(c)||Array.isArray(c))e[a]=c;else{var i=m(c);Object.keys(i).length>0&&(e[a]=i)}}),e},b=function(r){try{var t=(new TextEncoder).encode(r),n="";return t.forEach(function(r){n+=String.fromCharCode(r)}),btoa(n)}catch(r){return console.error("Error encoding to base64",r),""}},j=function(r){try{for(var t=atob(r),n=new Uint8Array(t.length),e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return(new TextDecoder).decode(n)}catch(r){return void console.error("Error decoding base64",r)}},w=function(r,t){try{return r?JSON.parse(r):t}catch(r){return console.log("Try Parse Object error:",r),t}},F=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{if(!r)return[];var n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(r){return t}},M=function(r,t){try{return r?parseInt(r):t}catch(r){return t}},S=function(r){return new Promise(function(t,n){var e=new FileReader;e.onload=function(){try{var r=e.result.split(/\r?\n/).filter(Boolean);if(r.length<1)return t([]);var n=r[0].split(",").map(function(r){return r.trim()}),o=r.slice(1).map(function(r){var t=r.split(",").map(function(r){return r.trim()}),e={};return n.forEach(function(r,n){var o;e[r]=null!==(o=t[n])&&void 0!==o?o:""}),e});t(o)}catch(r){t([])}},e.onerror=function(){n(new Error("Error reading file"))},e.readAsText(r)})},Y=function(r){return r<1024?r.toFixed(2)+" Kb":r<1048576?(r/1024).toFixed(2)+" Mb":r<1073741824?(r/1048576).toFixed(2)+" Gb":(r/1073741824).toFixed(2)+" Tb"},E=function(r){var t=null==r,n="string"==typeof r&&isNaN(Number(r));if(t||n)return"00:00:00";var e=Math.round(r),o=Math.floor(e/3600),a=Math.floor(e%3600/60),c=e%60,i=String(o).padStart(2,"0"),u=String(a).padStart(2,"0"),s=String(c).padStart(2,"0");return"".concat(i,":").concat(u,":").concat(s)},T=function(r){var n,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$ ",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{n=parseFloat(r),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),c=t(a,2),i=c[0],u=c[1],s=i.replace(/\B(?=(\d{3})+(?!\d))/g," "),f=s;return"00"!==u&&(f="".concat(s,".").concat(u)),"".concat(e).concat(f).concat(o)},x=function(r){return r.toLocaleString("en-US")},N=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!r)return r;var t=Array.from(r),n=a(t),e=n[0],o=c(n).slice(1);return"".concat(e.toUpperCase()).concat(o.join(""))},O={style1:"DD/MM/YYYY HH:mm",style2:"MMMM D, YYYY",style3:"MM-DD-YYYY"},D=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"style1";try{var n;if(!r)throw new Error;var e=null!==(n=O[t])&&void 0!==n?n:t;return i(r).format(e)}catch(r){return"unknown"}};export{g as cleanObject,j as decodeBase64,m as deepRemoveEmptyFields,b as encodeBase64,s as fetchDelay,N as formatCapitalizeFirstText,T as formatCurrency,D as formatDatetime,O as formatDatetimeStyles,E as formatDuration,Y as formatFileSize,x as formatNumberWithCommas,f as isGuid,l as isValidEmail,d as isValidPhoneNumber,y as isValidURL,h as mergeClasses,A as mergeObjects,u as sleep,F as tryParseArray,S as tryParseCsvFileToArray,M as tryParseIntRequired,w as tryParseObject,v as windowScrollToTop};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1,8 +1,8 @@
1
- import { DataSurfaceViewMode, LoadingModeRule } from './types';
1
+ import { DataSurfaceViewMode, LoadingModeRule, DataSurfaceFeatureMode } from './types';
2
2
  import type { BoxProps } from '@mui/material';
3
3
  import type { ComponentType, FC } from 'react';
4
+ import type { IViewGridConfig, IViewGridProps } from './view-grid/types';
4
5
  import type { TPagination, TDataSurfaceState, TRenderableNode } from './types';
5
- import type { IViewGridConfig, IViewGridProps } from './view-grid';
6
6
  import type { IViewListConfig, IViewListProps } from './view-list';
7
7
  export interface IDataSurfaceSlots {
8
8
  footer?: {
@@ -25,6 +25,8 @@ export interface IDataSurfaceProps<T> {
25
25
  viewMode?: DataSurfaceViewMode;
26
26
  /** Pagination metadata shared by both modes. */
27
27
  pagination?: TPagination;
28
+ /** Default page size. @default 20 */
29
+ defaultPageSize?: number;
28
30
  /** True while a page fetch is in flight (shows loading indicator). */
29
31
  loading?: boolean;
30
32
  /**
@@ -40,21 +42,27 @@ export interface IDataSurfaceProps<T> {
40
42
  slots?: IDataSurfaceSlots;
41
43
  /** Enable row selection with checkboxes (List view only). */
42
44
  selectable?: boolean;
43
- /** Array of selected row IDs (controlled). */
45
+ /** Array of selected row IDs (List view only). */
44
46
  selectedIds?: (string | number)[];
45
- /** Callback when selection changes. */
47
+ /** Callback when selection changes (List view only). */
46
48
  onSelectionChange?: (selectedIds: (string | number)[]) => void;
47
49
  }
48
50
  export interface IDataSurfaceConfig<T> {
51
+ /** Feature mode determines the internal optimizations and rendering strategies. @default 'client' */
52
+ featureMode?: DataSurfaceFeatureMode;
53
+ /** Default view mode when not provided via props. @default 'grid' */
49
54
  defaultViewMode?: DataSurfaceViewMode;
50
55
  /** Default load mode when not provided via props. @default 'pagination' */
51
56
  defaultLoadMode?: LoadingModeRule;
52
57
  /** Default page size. @default 20 */
53
58
  defaultPageSize?: number;
54
- enableSingleViewTransition?: boolean;
59
+ /** Configuration for List view. If not provided, List view will use default settings. */
55
60
  listConfig?: IViewListConfig<T>;
61
+ /** Custom List component. If not provided, a default List component will be used. */
56
62
  ListComponent?: ComponentType<IViewListProps<T>>;
63
+ /** Configuration for Grid view. If not provided, Grid view will use default settings. */
57
64
  gridConfig?: IViewGridConfig<T>;
65
+ /** Custom Grid component. If not provided, a default Grid component will be used. */
58
66
  GridComponent?: ComponentType<IViewGridProps<T>>;
59
67
  }
60
68
  export declare function createDataSurface<T>(config: IDataSurfaceConfig<T>): FC<IDataSurfaceProps<T>>;
@@ -1,7 +1,7 @@
1
1
  export * from './types';
2
2
  export * from './helpers';
3
3
  export * from './index.create';
4
- export * from './view-list.types';
5
- export * from './view-grid.types';
4
+ export * from './view-list';
5
+ export * from './view-grid';
6
6
  export * from './index.dino';
7
7
  export * from './button-switch';
@@ -2,11 +2,15 @@
2
2
  import { setViewModeToURL, getViewModeFromURL, setPaginationToURL, getPaginationFromURL } from './helpers';
3
3
  import createViewGrid from './view-grid';
4
4
  import createDataSurface from './index.create';
5
+ import createViewList from './view-list';
5
6
  export declare class DinoDataSurFace {
6
7
  createDataSurface: typeof createDataSurface;
7
8
  createViewGrid: typeof createViewGrid;
9
+ createViewList: typeof createViewList;
8
10
  ButtonSwitch: import("react").FC<import("./button-switch").IButtonSwitchProps>;
9
11
  createButtonSwitch: () => import("react").FC<import("./button-switch").IButtonSwitchProps>;
12
+ PanelPaginationFooter: import("react").FC<import("./ui.units").IPanelPaginationFooterProps>;
13
+ createPanelPaginationFooter: () => import("react").FC<import("./ui.units").IPanelPaginationFooterProps>;
10
14
  setViewModeToURL: typeof setViewModeToURL;
11
15
  getViewModeFromURL: typeof getViewModeFromURL;
12
16
  setPaginationToURL: typeof setPaginationToURL;
@@ -8,17 +8,11 @@ export type TPagination = {
8
8
  hasPrev?: boolean;
9
9
  total?: number;
10
10
  };
11
- /**
12
- * Virtualized rendering configuration.
13
- * Used by both grid and list views for windowing optimization.
14
- */
15
- export type TVirtualizedConfig = {
16
- scrollTop: number;
17
- viewportHeight: number;
18
- /** Number of extra rows/columns rendered outside the viewport as a buffer. Defaults to `4` (grid) / `6` (table). */
19
- overscan?: number;
20
- gap?: number;
11
+ export declare const DataSurfaceFeatureMode: {
12
+ readonly client: "client";
13
+ readonly server: "server";
21
14
  };
15
+ export type DataSurfaceFeatureMode = keyof typeof DataSurfaceFeatureMode;
22
16
  /**
23
17
  * Controls how the list is rendered into the DOM.
24
18
  * - `normal` — all rows are mounted (suitable for small datasets)
@@ -0,0 +1,19 @@
1
+ import type { TGridSizes } from './types';
2
+ /** Default spacing between grid items in pixels. */
3
+ export declare const DEFAULT_GRID_SPACING_PX = 8;
4
+ /** Resolves the final grid spacing from multiple optional values. */
5
+ export declare const resolveGridSpacing: (...spacing: (number | undefined)[]) => number;
6
+ /** Default scrolling threshold in pixels for triggering near-end events. */
7
+ export declare const DEFAULT_GRID_SCROLLING_THRESHOLD_PX = 80;
8
+ /** Resolves the final scrolling threshold from multiple optional values. */
9
+ export declare const resolveGridScrollingThreshold: (...threshold: (number | undefined)[]) => number;
10
+ /** Default grid item height estimate in pixels, used for virtualization calculations. */
11
+ export declare const DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE = 120;
12
+ /** Default grid item sizes for each breakpoint. */
13
+ export declare const DEFAULT_GRID_ITEM_SIZES: TGridSizes;
14
+ /** Returns the grid item sizes, falling back to defaults if not provided. */
15
+ export declare const getGridItemSizes: (sizes?: TGridSizes) => TGridSizes;
16
+ /** Normalizes grid item sizes, ensuring all breakpoints have a value. */
17
+ export declare const normalizeGridSizes: (sizes?: TGridSizes) => Required<TGridSizes>;
18
+ /** Resolves the number of grid columns based on the container width and item sizes. */
19
+ export declare const resolveGridColumnsFromWidth: (width: number, sizes?: TGridSizes) => number;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import type { IViewGridConfig, IViewGridProps } from './types';
3
+ /** Merges the provided props and config into a single configuration object. */
4
+ export declare const useMergedConfig: <T>(props: IViewGridProps<T>, config: IViewGridConfig<T>) => {
5
+ spacing: number;
6
+ scrollingThreshold: number;
7
+ sizes: Partial<Record<import("./types").TGridSize, number>>;
8
+ Component: import("react").FC<import("./types").IViewGridItemProps<any>> | import("react").ComponentType<import("./types").IViewGridItemProps<T>>;
9
+ };
@@ -0,0 +1,19 @@
1
+ import type { ComponentType, FC } from 'react';
2
+ import type { LoadingModeRule, TPagination } from '../types';
3
+ import type { IViewGridConfig, IViewGridProps } from './types';
4
+ export * from './types';
5
+ /**
6
+ * Factory function to create a Grid view component that can switch between normal and virtualized rendering strategies based on props and configuration.
7
+ * @param config - The configuration object for the grid view, containing default settings and required properties.
8
+ * @returns A React functional component that renders a grid view based on the provided configuration and props, supporting both normal and virtualized rendering strategies.
9
+ */
10
+ export declare function createViewGrid<T>(config: IViewGridConfig<T>): FC<IViewGridProps<T>>;
11
+ export interface IViewGridLoadingProps<T> extends IViewGridProps<T> {
12
+ value: T[];
13
+ loadMode: LoadingModeRule;
14
+ loading?: boolean;
15
+ pagination?: TPagination;
16
+ onPageChange?: (page: number, pageSize: number) => void | Promise<void>;
17
+ }
18
+ export declare function createViewGridLoading<T>(GridComponent: ComponentType<IViewGridProps<T>>): FC<IViewGridLoadingProps<T>>;
19
+ export default createViewGrid;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export declare const viewGridClasses: {
3
+ root: string;
4
+ virtualized: string;
5
+ scrollContainer: string;
6
+ grid: string;
7
+ gridItem: string;
8
+ scrolling: string;
9
+ };
10
+ export declare const ViewGridStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
11
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
12
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
@@ -0,0 +1,41 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { RenderStrategyRule, TGetterId } from '../types';
3
+ export type TGridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type TGridSizes = Partial<Record<TGridSize, number>>;
5
+ /**
6
+ * Props received by the custom render function for each card in Grid view.
7
+ * @template T - The shape of a single data row object.
8
+ */
9
+ export interface IViewGridItemProps<T> {
10
+ /** The data object for this grid card. */
11
+ value: T;
12
+ /** Zero-based position of this item in the data array. */
13
+ index: number;
14
+ }
15
+ export interface IViewGridBase<T> {
16
+ /** Spacing between grid items in pixels. @default 8 */
17
+ spacing?: number;
18
+ /** Scroll offset threshold in pixels before the `scrolling` class is applied. @default 80 */
19
+ scrollingThreshold?: number;
20
+ sizes?: TGridSizes;
21
+ /**
22
+ * Controls how the list is rendered into the DOM.
23
+ * - `normal` — all rows are mounted (suitable for small datasets)
24
+ * - `virtualized` — only visible rows are mounted (optimized for large datasets)
25
+ * @default 'normal'
26
+ */
27
+ renderStrategy?: RenderStrategyRule;
28
+ Component?: ComponentType<IViewGridItemProps<T>>;
29
+ /** Number of extra rows rendered outside the viewport as a buffer when using virtualized rendering. @default 4 */
30
+ overscan?: number;
31
+ }
32
+ export interface IViewGridConfig<T> extends IViewGridBase<T> {
33
+ getterId: TGetterId<T>;
34
+ }
35
+ export interface IViewGridProps<T> extends IViewGridBase<T> {
36
+ value: T[];
37
+ /** Called when user scrolls near the bottom of the list. Use this to trigger pagination or infinity load. */
38
+ onNearEnd?: () => void;
39
+ /** When this value changes, the scroll position resets to top (virtualized mode only). */
40
+ scrollResetToken?: unknown;
41
+ }
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ import { IViewGridItemProps } from './types';
3
+ export declare const GridItemDefault: FC<IViewGridItemProps<any>>;
@@ -0,0 +1,15 @@
1
+ import { TableCellProps } from '@mui/material';
2
+ import { ListDensity, TListColumn, TListColumns } from './types';
3
+ export declare const LIST_HEADER_HEIGHT = 48;
4
+ export declare const LIST_DEFAULT_ROW_SPACING = 4;
5
+ export declare const LIST_ROW_HEIGHT_BY_DENSITY: Record<ListDensity, number>;
6
+ export declare const LIST_CELL_PADDING_BY_DENSITY: Record<ListDensity, string>;
7
+ /**
8
+ * Converts TListColumns<T> Record type to TListColumn<T>[] array for internal use.
9
+ */
10
+ export declare const columnsRecordToArray: <T>(value: T[], columnsRecord?: Partial<Record<keyof T, Omit<TListColumn<T>, "field">>> | undefined) => TListColumn<T>[];
11
+ export declare function resolveListRowHeight(density?: number | ListDensity): number;
12
+ export declare function resolveListCellPadding(density?: number | ListDensity): string;
13
+ export declare function resolveListRowSpacing(spacing?: number): number;
14
+ export declare function resolveListSpacerHeight(count: number, rowHeight: number, rowSpacing: number): number;
15
+ export declare const mapSxTableCell: <T>(col: TListColumn<T>, totalFlex: number, sx?: TableCellProps['sx']) => TableCellProps['sx'];
@@ -1,8 +1,14 @@
1
- import { ListDensity } from './view-list.types';
2
- import type { TGetterId } from './types';
3
- export declare const LIST_HEADER_HEIGHT = 48;
4
- export declare const LIST_ROW_HEIGHT_BY_DENSITY: Record<ListDensity, number>;
5
- export declare const LIST_CELL_PADDING_BY_DENSITY: Record<ListDensity, string>;
1
+ import { CSSProperties } from 'react';
2
+ import type { TGetterId } from '../types';
3
+ import type { IViewListConfig, IViewListProps } from './types';
4
+ export declare function useMergedConfig<T>(config: IViewListConfig<T>, props: IViewListProps<T>): {
5
+ columns: import("./types").TListColumn<T>[];
6
+ selectable: boolean;
7
+ rowHeight: number;
8
+ cellPadding: string;
9
+ rowSpacing: number;
10
+ rootStyle: CSSProperties;
11
+ };
6
12
  /**
7
13
  * Custom hook to manage list row selection logic.
8
14
  * Handles select all, individual row selection, and indeterminate state.
@@ -0,0 +1,13 @@
1
+ import type { ComponentType, FC } from 'react';
2
+ import type { LoadingModeRule, TPagination } from '../types';
3
+ import type { IViewListConfig, IViewListProps } from './types';
4
+ export * from './types';
5
+ export declare function createViewList<T>(config: IViewListConfig<T>): FC<IViewListProps<T>>;
6
+ export interface IViewListLoadingProps<T> extends IViewListProps<T> {
7
+ loadMode: LoadingModeRule;
8
+ loading?: boolean;
9
+ pagination?: TPagination;
10
+ onPageChange?: (page: number, pageSize: number) => void | Promise<void>;
11
+ }
12
+ export declare function createViewListLoading<T>(ListComponent: ComponentType<IViewListProps<T>>): FC<IViewListLoadingProps<T>>;
13
+ export default createViewList;
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ export declare const VIEW_LIST_ROW_SPACING_VAR = "--DinoViewList-rowSpacing";
3
+ export declare const viewListClasses: {
4
+ root: string;
5
+ virtualized: string;
6
+ scrollContainer: string;
7
+ table: string;
8
+ tableHeader: string;
9
+ tableHeaderCell: string;
10
+ tableBodyCell: string;
11
+ tableSpacerRow: string;
12
+ tableSpacerCell: string;
13
+ tableCellContent: string;
14
+ };
15
+ export declare const ViewListStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
16
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
17
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;