rez-table-listing-mui 1.2.16 → 1.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/index.d.ts +8 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +1 -1
  5. package/dist/index.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/src/assets/svg.tsx +2 -1
  8. package/src/kanban/index.tsx +11 -2
  9. package/src/listing/components/filter/components/attributes-filter.tsx +156 -50
  10. package/src/listing/components/filter/components/forms/components/Filter-criteria.tsx +21 -2
  11. package/src/listing/components/filter/components/forms/index.tsx +29 -9
  12. package/src/listing/components/filter/components/main-filter.tsx +16 -1
  13. package/src/listing/components/filter/components/saved-edit-filter.tsx +27 -0
  14. package/src/listing/components/filter/components/saved-filter.tsx +66 -25
  15. package/src/listing/components/filter/index.tsx +78 -44
  16. package/src/listing/components/index.scss +1 -1
  17. package/src/listing/components/login/index.tsx +1 -1
  18. package/src/listing/components/table-head.tsx +2 -6
  19. package/src/listing/components/topbar/index.scss +0 -1
  20. package/src/listing/components/topbar/index.tsx +66 -20
  21. package/src/listing/libs/hooks/useEntityTableAPI.tsx +39 -27
  22. package/src/listing/libs/hooks/useGetNavigationLayoutAPI.tsx +12 -0
  23. package/src/listing/libs/services/getLayoutAPI.tsx +17 -0
  24. package/src/listing/libs/services/saveLayoutAPI.tsx +20 -0
  25. package/src/listing/libs/utils/apiColumn.ts +2 -3
  26. package/src/listing/libs/utils/common.ts +1 -0
  27. package/src/listing/types/common.ts +8 -0
  28. package/src/listing/types/filter.ts +13 -0
  29. package/src/view/FIlterWrapper.tsx +130 -0
  30. package/src/view/ListingView.tsx +23 -10
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/assets/svg.tsx","../src/listing/components/table-change-layout.tsx","../src/listing/libs/hooks/useOutsideClick.tsx","../src/listing/libs/hooks/useFullScreen.tsx","../src/listing/components/viewmore/index.tsx","../src/listing/components/sorting-modal.tsx/sorting-item.tsx","../src/listing/components/sorting-modal.tsx/index.tsx","../src/listing/components/column-visibility-modal/column-list-item.tsx","../src/listing/types/common.ts","../src/listing/components/column-visibility-modal/index.tsx","../src/listing/libs/utils/debounce.ts","../src/listing/components/search/style.ts","../src/listing/components/search/index.tsx","../src/listing/components/topbar/index.tsx","../src/listing/components/pagination/default/index.tsx","../src/listing/libs/utils/common.ts","../src/listing/components/table-body-dnd-cell.tsx","../src/listing/components/inputs/checkbox/index.tsx","../src/listing/components/table-body.tsx","../src/listing/components/table-head-pin.tsx","../src/listing/components/table-head-popover.tsx","../src/listing/components/table-head-dnd-cell.tsx","../src/listing/components/table-head.tsx","../src/listing/components/table.tsx","../src/listing/components/table-dnd.tsx","../src/listing/components/tabs/styles.ts","../src/listing/components/common/confirm-modal/index.tsx","../src/listing/components/filter/components/tabs/custom-tab-panel.tsx","../src/listing/components/filter/components/tabs/index.tsx","../src/listing/components/filter/components/forms/components/styles.tsx","../src/listing/components/filter/components/forms/components/Textfield.tsx","../src/listing/components/filter/components/forms/components/Date.tsx","../src/listing/components/filter/components/forms/components/Dropdown.tsx","../src/listing/components/filter/components/forms/components/Multi-Select.tsx","../src/listing/components/filter/components/search/index.tsx","../src/listing/components/filter/style.ts","../src/listing/components/filter/components/forms/components/Filter-criteria.tsx","../src/listing/libs/hooks/useElementWidth.tsx","../src/listing/components/filter/components/forms/index.tsx","../src/listing/components/filter/components/main-filter.tsx","../src/listing/components/filter/components/saved-edit-filter.tsx","../src/listing/components/filter/components/saved-filter.tsx","../src/listing/components/filter/components/attributes-filter.tsx","../src/listing/components/table-settings/tabs/styles.ts","../src/listing/components/table-settings/tabs/vertical/index.tsx","../src/listing/components/table-settings/tabs/vertical/custom-tab-panel.tsx","../src/listing/components/table-settings/common/draggable-listitem.tsx","../src/listing/components/table-settings/style.ts","../src/listing/components/common/loader/loader.tsx","../src/listing/components/table-settings/common/listing-values.tsx","../src/listing/components/table-settings/common/info-alert.tsx","../src/listing/components/table-settings/components/quick-tab.tsx","../src/listing/components/table-settings/tabs/horizontal/index.tsx","../src/listing/components/table-settings/components/column.tsx","../src/listing/components/table-settings/components/sorting.tsx","../src/listing/components/table-settings/components/custom-dialog.tsx","../src/listing/components/table-settings/components/custom-button.tsx","../src/listing/components/table-settings/constants.ts","../src/listing/components/table-settings/components/lane.tsx","../src/listing/components/table-settings/components/group-by.tsx","../src/kanban/styles/styles.tsx","../src/kanban/constants/kanban-constants.ts","../src/listing/components/filter/index.tsx","../src/listing/components/table-settings/index.tsx","../src/listing/components/tabs/index.tsx","../src/kanban/index.tsx","../src/listing/components/index-table.tsx","../src/listing/libs/hooks/useCraftTable.tsx","../src/listing/libs/hooks/useCraftTableFilterSettings.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React from \"react\";\r\n\r\nexport const SortIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n strokeWidth={1.5}\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const GreenDot = () => (\r\n <svg\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#5CD961\" />\r\n </svg>\r\n);\r\n\r\nexport const RedDot = () => (\r\n <svg\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#F94144\" />\r\n </svg>\r\n);\r\n\r\nexport const BlueDot = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#04769A\" />\r\n </svg>\r\n);\r\n\r\nexport const UpArrow = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <polyline points=\"19 12 12 5 5 12\"></polyline>\r\n </svg>\r\n);\r\n\r\nexport const DownArrow = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line>\r\n <polyline points=\"5 12 12 19 19 12\"></polyline>\r\n </svg>\r\n);\r\n\r\nexport const TableFirstPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"></path>\r\n <path fill=\"none\" d=\"M24 24H0V0h24v24z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TablePreviousPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TableNextPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TableLastPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"></path>\r\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const VerticalThreeDots = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-three-dots-vertical\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path d=\"M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\" />\r\n </svg>\r\n);\r\n\r\nexport const ArrowDownUp = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"12\"\r\n height=\"12\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-arrow-down-up\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M11.5 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L11 2.707V14.5a.5.5 0 0 0 .5.5m-7-14a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V1.5a.5.5 0 0 1 .5-.5\"\r\n />\r\n </svg>\r\n);\r\nexport const EditIcon = () => (\r\n <svg\r\n width=\"18\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.33331 10.6663H2.17431L8.99865 3.84201L8.15765 3.00101L1.33331 9.82534V10.6663ZM0.93598 11.6663C0.765202 11.6663 0.622091 11.6086 0.506646 11.493C0.391091 11.3776 0.333313 11.2345 0.333313 11.0637V9.90867C0.333313 9.74612 0.364535 9.59118 0.42698 9.44384C0.489313 9.29651 0.575202 9.16812 0.684646 9.05868L9.12698 0.620174C9.22776 0.528619 9.33904 0.457897 9.46081 0.408008C9.5827 0.358008 9.71048 0.333008 9.84415 0.333008C9.97781 0.333008 10.1073 0.35673 10.2325 0.404175C10.3578 0.451619 10.4688 0.527063 10.5653 0.630507L11.3795 1.45484C11.4829 1.5514 11.5566 1.66251 11.6006 1.78817C11.6446 1.91384 11.6666 2.03951 11.6666 2.16517C11.6666 2.29929 11.6438 2.42723 11.598 2.54901C11.5522 2.6709 11.4794 2.78223 11.3795 2.88301L2.94098 11.315C2.83154 11.4245 2.70315 11.5103 2.55581 11.5727C2.40848 11.6351 2.25354 11.6663 2.09098 11.6663H0.93598ZM8.57081 3.42884L8.15765 3.00101L8.99865 3.84201L8.57081 3.42884Z\"\r\n fill=\"#0E0C0B\"\r\n fillOpacity={0.4}\r\n />\r\n </svg>\r\n);\r\n\r\nexport const DeleteIcon = () => (\r\n <svg\r\n width=\"18\"\r\n height=\"20\"\r\n viewBox=\"0 0 10 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.87183 11.6665C1.54039 11.6665 1.25667 11.5485 1.02067 11.3125C0.784667 11.0765 0.666667 10.7928 0.666667 10.4613V1.99982H0.5C0.358333 1.99982 0.239611 1.95188 0.143833 1.85599C0.0479445 1.7601 0 1.64132 0 1.49966C0 1.35788 0.0479445 1.23916 0.143833 1.14349C0.239611 1.04771 0.358333 0.999823 0.5 0.999823H3C3 0.836601 3.0575 0.69749 3.1725 0.58249C3.28739 0.467601 3.42644 0.410156 3.58967 0.410156H6.41033C6.57356 0.410156 6.71261 0.467601 6.8275 0.58249C6.9425 0.69749 7 0.836601 7 0.999823H9.5C9.64167 0.999823 9.76039 1.04777 9.85617 1.14366C9.95206 1.23955 10 1.35832 10 1.49999C10 1.64177 9.95206 1.76049 9.85617 1.85616C9.76039 1.95193 9.64167 1.99982 9.5 1.99982H9.33333V10.4613C9.33333 10.7928 9.21533 11.0765 8.97933 11.3125C8.74333 11.5485 8.45961 11.6665 8.12817 11.6665H1.87183ZM8.33333 1.99982H1.66667V10.4613C1.66667 10.5212 1.68589 10.5704 1.72433 10.6088C1.76278 10.6473 1.81194 10.6665 1.87183 10.6665H8.12817C8.18806 10.6665 8.23722 10.6473 8.27567 10.6088C8.31411 10.5704 8.33333 10.5212 8.33333 10.4613V1.99982ZM3.7695 9.33316C3.91117 9.33316 4.02989 9.28527 4.12567 9.18949C4.22133 9.0936 4.26917 8.97482 4.26917 8.83316V3.83316C4.26917 3.69149 4.22122 3.57271 4.12533 3.47682C4.02956 3.38104 3.91078 3.33316 3.769 3.33316C3.62733 3.33316 3.50861 3.38104 3.41283 3.47682C3.31717 3.57271 3.26933 3.69149 3.26933 3.83316V8.83316C3.26933 8.97482 3.31722 9.0936 3.413 9.18949C3.50889 9.28527 3.62772 9.33316 3.7695 9.33316ZM6.231 9.33316C6.37267 9.33316 6.49139 9.28527 6.58717 9.18949C6.68283 9.0936 6.73067 8.97482 6.73067 8.83316V3.83316C6.73067 3.69149 6.68278 3.57271 6.587 3.47682C6.49111 3.38104 6.37228 3.33316 6.2305 3.33316C6.08883 3.33316 5.97011 3.38104 5.87433 3.47682C5.77867 3.57271 5.73083 3.69149 5.73083 3.83316V8.83316C5.73083 8.97482 5.77878 9.0936 5.87467 9.18949C5.97044 9.28527 6.08922 9.33316 6.231 9.33316Z\"\r\n fill=\"#F63D68\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const CrossSearchIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-search-off\"\r\n >\r\n <path d=\"M5.039 5.062a7 7 0 0 0 9.91 9.89m1.584 -2.434a7 7 0 0 0 -9.038 -9.057\"></path>\r\n <path d=\"M3 3l18 18\"></path>\r\n </svg>\r\n);\r\n\r\nexport const FilterIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-funnel\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\" />\r\n </svg>\r\n);\r\n\r\nexport const HideColumnIcon = () => (\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 3.5H3C2.175 3.5 1.5 4.175 1.5 5V14C1.5 14.825 2.175 15.5 3 15.5H15C15.825 15.5 16.5 14.825 16.5 14V5C16.5 4.175 15.825 3.5 15 3.5ZM6 14H3V5H6V14ZM10.5 14H7.5V5H10.5V14ZM15 14H12V5H15V14Z\"\r\n fill=\"currentColor\"\r\n stroke=\"white\"\r\n strokeWidth=\"0.5\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const PaddingMD = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-medium\"\r\n >\r\n <path d=\"M4 20h16\"></path>\r\n <path d=\"M4 12h16\"></path>\r\n <path d=\"M4 4h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const PaddingSM = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-small\"\r\n >\r\n <path d=\"M4 3h16\"></path>\r\n <path d=\"M4 9h16\"></path>\r\n <path d=\"M4 15h16\"></path>\r\n <path d=\"M4 21h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const PaddingLG = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-large\"\r\n >\r\n <path d=\"M4 4h16\"></path>\r\n <path d=\"M4 20h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const DragHandleIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-grip-horizontal\"\r\n transform=\"rotate(90)\"\r\n >\r\n <path d=\"M10 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M10 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M18 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M18 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n </svg>\r\n);\r\n\r\nexport const IconPinOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <path d=\"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2l-2-2m-7.2 2l1.2-1.2V4h4v8.8l1.2 1.2H8.8z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const IconPinOffOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <path d=\"M8 6.2V4H7V2h10v2h-1v8l2 2v2h-.2L14 12.2V4h-4v4.2l-2-2m12 14.5L18.7 22l-5.9-5.9V22h-1.6v-6H6v-2l2-2v-.7l-6-6L3.3 4 20 20.7M8.8 14h1.8l-.9-.9-.9.9z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const IconExpand = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 1024 1024\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <defs>\r\n <style />\r\n </defs>\r\n <path d=\"M342 88H120c-17.7 0-32 14.3-32 32v224c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V168h174c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zm578 576h-48c-8.8 0-16 7.2-16 16v176H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h222c17.7 0 32-14.3 32-32V680c0-8.8-7.2-16-16-16zM342 856H168V680c0-8.8-7.2-16-16-16h-48c-8.8 0-16 7.2-16 16v224c0 17.7 14.3 32 32 32h222c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zM904 88H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h174v176c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V120c0-17.7-14.3-32-32-32z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const LoaderAnimation = () => {\r\n return (\r\n <svg viewBox=\"0 0 60 60\" width={\"4rem\"}>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"6\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 15 ; 0 -15; 0 15\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.1\"\r\n />\r\n </circle>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"24\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 10 ; 0 -10; 0 10\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.2\"\r\n />\r\n </circle>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"42\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 5 ; 0 -5; 0 5\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.3\"\r\n />\r\n </circle>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChangeLayoutIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12587\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12587)\">\r\n <path\r\n d=\"M4.42311 17.0834C4.00214 17.0834 3.64582 16.9375 3.35416 16.6459C3.06249 16.3542 2.91666 15.9979 2.91666 15.5769V4.42315C2.91666 4.00217 3.06249 3.64585 3.35416 3.35419C3.64582 3.06252 4.00214 2.91669 4.42311 2.91669H15.5769C15.9978 2.91669 16.3542 3.06252 16.6458 3.35419C16.9375 3.64585 17.0833 4.00217 17.0833 4.42315V15.5769C17.0833 15.9979 16.9375 16.3542 16.6458 16.6459C16.3542 16.9375 15.9978 17.0834 15.5769 17.0834H4.42311ZM4.42311 15.8334H9.37499V4.16669H4.42311C4.35895 4.16669 4.3002 4.19342 4.24687 4.24689C4.19339 4.30023 4.16666 4.35898 4.16666 4.42315V15.5769C4.16666 15.6411 4.19339 15.6998 4.24687 15.7531C4.3002 15.8066 4.35895 15.8334 4.42311 15.8334ZM10.625 15.8334H15.5769C15.641 15.8334 15.6998 15.8066 15.7531 15.7531C15.8066 15.6998 15.8333 15.6411 15.8333 15.5769V10H10.625V15.8334ZM10.625 8.75002H15.8333V4.42315C15.8333 4.35898 15.8066 4.30023 15.7531 4.24689C15.6998 4.19342 15.641 4.16669 15.5769 4.16669H10.625V8.75002Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const BoardIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"10\"\r\n viewBox=\"0 0 13 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.37179 9H4.05763V1H1.37179C1.3119 1 1.26274 1.01922 1.22429 1.05767C1.18585 1.09611 1.16663 1.14528 1.16663 1.20517V8.79483C1.16663 8.85472 1.18585 8.90389 1.22429 8.94233C1.26274 8.98078 1.3119 9 1.37179 9ZM5.05763 9H7.94229V1H5.05763V9ZM8.94229 9H11.6281C11.688 9 11.7372 8.98078 11.7756 8.94233C11.8141 8.90389 11.8333 8.85472 11.8333 8.79483V1.20517C11.8333 1.14528 11.8141 1.09611 11.7756 1.05767C11.7372 1.01922 11.688 1 11.6281 1H8.94229V9ZM1.37179 10C1.03501 10 0.749959 9.88333 0.516626 9.65C0.283293 9.41667 0.166626 9.13161 0.166626 8.79483V1.20517C0.166626 0.868389 0.283293 0.583333 0.516626 0.35C0.749959 0.116667 1.03501 0 1.37179 0H11.6281C11.9649 0 12.25 0.116667 12.4833 0.35C12.7166 0.583333 12.8333 0.868389 12.8333 1.20517V8.79483C12.8333 9.13161 12.7166 9.41667 12.4833 9.65C12.25 9.88333 11.9649 10 11.6281 10H1.37179Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const TableIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const TimeLineIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ListIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.20521 10.5C5.06354 10.5 4.94476 10.452 4.84887 10.3562C4.7531 10.2603 4.70521 10.1415 4.70521 9.99982C4.70521 9.85805 4.7531 9.73932 4.84887 9.64366C4.94476 9.54788 5.06354 9.49999 5.20521 9.49999H11.6667C11.8084 9.49999 11.9271 9.54794 12.0229 9.64382C12.1188 9.73971 12.1667 9.85849 12.1667 10.0002C12.1667 10.1419 12.1188 10.2607 12.0229 10.3563C11.9271 10.4521 11.8084 10.5 11.6667 10.5H5.20521ZM5.20521 6.49999C5.06354 6.49999 4.94476 6.45205 4.84887 6.35616C4.7531 6.26027 4.70521 6.14149 4.70521 5.99982C4.70521 5.85805 4.7531 5.73932 4.84887 5.64366C4.94476 5.54788 5.06354 5.49999 5.20521 5.49999H11.6667C11.8084 5.49999 11.9271 5.54794 12.0229 5.64382C12.1188 5.73971 12.1667 5.85849 12.1667 6.00016C12.1667 6.14194 12.1188 6.26066 12.0229 6.35632C11.9271 6.4521 11.8084 6.49999 11.6667 6.49999H5.20521ZM5.20521 2.49999C5.06354 2.49999 4.94476 2.45205 4.84887 2.35616C4.7531 2.26027 4.70521 2.14149 4.70521 1.99982C4.70521 1.85805 4.7531 1.73932 4.84887 1.64366C4.94476 1.54788 5.06354 1.49999 5.20521 1.49999H11.6667C11.8084 1.49999 11.9271 1.54794 12.0229 1.64382C12.1188 1.73971 12.1667 1.85849 12.1667 2.00016C12.1667 2.14194 12.1188 2.26066 12.0229 2.35632C11.9271 2.4521 11.8084 2.49999 11.6667 2.49999H5.20521ZM1.94237 11.109C1.63737 11.109 1.37632 11.0004 1.15921 10.7832C0.941985 10.566 0.833374 10.305 0.833374 9.99999C0.833374 9.69499 0.941985 9.43394 1.15921 9.21682C1.37632 8.9996 1.63737 8.89099 1.94237 8.89099C2.24737 8.89099 2.50843 8.9996 2.72554 9.21682C2.94276 9.43394 3.05137 9.69499 3.05137 9.99999C3.05137 10.305 2.94276 10.566 2.72554 10.7832C2.50843 11.0004 2.24737 11.109 1.94237 11.109ZM1.94237 7.10899C1.63737 7.10899 1.37632 7.00038 1.15921 6.78316C0.941985 6.56605 0.833374 6.30499 0.833374 5.99999C0.833374 5.69499 0.941985 5.43394 1.15921 5.21682C1.37632 4.9996 1.63737 4.89099 1.94237 4.89099C2.24737 4.89099 2.50843 4.9996 2.72554 5.21682C2.94276 5.43394 3.05137 5.69499 3.05137 5.99999C3.05137 6.30499 2.94276 6.56605 2.72554 6.78316C2.50843 7.00038 2.24737 7.10899 1.94237 7.10899ZM1.94237 3.10899C1.63737 3.10899 1.37632 3.00038 1.15921 2.78316C0.941985 2.56605 0.833374 2.30499 0.833374 1.99999C0.833374 1.69499 0.941985 1.43394 1.15921 1.21682C1.37632 0.999602 1.63737 0.890991 1.94237 0.890991C2.24737 0.890991 2.50843 0.999602 2.72554 1.21682C2.94276 1.43394 3.05137 1.69499 3.05137 1.99999C3.05137 2.30499 2.94276 2.56605 2.72554 2.78316C2.50843 3.00038 2.24737 3.10899 1.94237 3.10899Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const CalendarIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M2.03854 13.3333C1.70176 13.3333 1.41671 13.2167 1.18337 12.9833C0.950041 12.75 0.833374 12.465 0.833374 12.1282V3.20518C0.833374 2.8684 0.950041 2.58334 1.18337 2.35001C1.41671 2.11668 1.70176 2.00001 2.03854 2.00001H2.96154V1.10251C2.96154 0.956399 3.01049 0.834399 3.10837 0.73651C3.20626 0.638732 3.32826 0.589844 3.47437 0.589844C3.6206 0.589844 3.7426 0.638732 3.84037 0.73651C3.93826 0.834399 3.98721 0.956399 3.98721 1.10251V2.00001H9.03854V1.08984C9.03854 0.947955 9.08637 0.829121 9.18204 0.733344C9.27782 0.637677 9.39665 0.589844 9.53854 0.589844C9.68043 0.589844 9.79921 0.637677 9.89487 0.733344C9.99065 0.829121 10.0385 0.947955 10.0385 1.08984V2.00001H10.9615C11.2983 2.00001 11.5834 2.11668 11.8167 2.35001C12.05 2.58334 12.1667 2.8684 12.1667 3.20518V12.1282C12.1667 12.465 12.05 12.75 11.8167 12.9833C11.5834 13.2167 11.2983 13.3333 10.9615 13.3333H2.03854ZM2.03854 12.3333H10.9615C11.0129 12.3333 11.0599 12.312 11.1025 12.2692C11.1453 12.2265 11.1667 12.1795 11.1667 12.1282V5.87184H1.83337V12.1282C1.83337 12.1795 1.85476 12.2265 1.89754 12.2692C1.94021 12.312 1.98721 12.3333 2.03854 12.3333ZM1.83337 4.87184H11.1667V3.20518C11.1667 3.15384 11.1453 3.10684 11.1025 3.06418C11.0599 3.0214 11.0129 3.00001 10.9615 3.00001H2.03854C1.98721 3.00001 1.94021 3.0214 1.89754 3.06418C1.85476 3.10684 1.83337 3.15384 1.83337 3.20518V4.87184ZM6.50004 8.38468C6.33682 8.38468 6.19771 8.32718 6.08271 8.21218C5.96782 8.09729 5.91037 7.95818 5.91037 7.79484C5.91037 7.63162 5.96782 7.49251 6.08271 7.37751C6.19771 7.26262 6.33682 7.20518 6.50004 7.20518C6.66326 7.20518 6.80237 7.26262 6.91737 7.37751C7.03226 7.49251 7.08971 7.63162 7.08971 7.79484C7.08971 7.95818 7.03226 8.09729 6.91737 8.21218C6.80237 8.32718 6.66326 8.38468 6.50004 8.38468ZM3.83337 8.38468C3.67015 8.38468 3.53104 8.32718 3.41604 8.21218C3.30115 8.09729 3.24371 7.95818 3.24371 7.79484C3.24371 7.63162 3.30115 7.49251 3.41604 7.37751C3.53104 7.26262 3.67015 7.20518 3.83337 7.20518C3.9966 7.20518 4.13571 7.26262 4.25071 7.37751C4.3656 7.49251 4.42304 7.63162 4.42304 7.79484C4.42304 7.95818 4.3656 8.09729 4.25071 8.21218C4.13571 8.32718 3.9966 8.38468 3.83337 8.38468ZM9.16671 8.38468C9.00348 8.38468 8.86437 8.32718 8.74937 8.21218C8.63449 8.09729 8.57704 7.95818 8.57704 7.79484C8.57704 7.63162 8.63449 7.49251 8.74937 7.37751C8.86437 7.26262 9.00348 7.20518 9.16671 7.20518C9.32993 7.20518 9.46904 7.26262 9.58404 7.37751C9.69893 7.49251 9.75637 7.63162 9.75637 7.79484C9.75637 7.95818 9.69893 8.09729 9.58404 8.21218C9.46904 8.32718 9.32993 8.38468 9.16671 8.38468ZM6.50004 11C6.33682 11 6.19771 10.9425 6.08271 10.8275C5.96782 10.7126 5.91037 10.5736 5.91037 10.4103C5.91037 10.247 5.96782 10.1079 6.08271 9.99301C6.19771 9.87801 6.33682 9.82051 6.50004 9.82051C6.66326 9.82051 6.80237 9.87801 6.91737 9.99301C7.03226 10.1079 7.08971 10.247 7.08971 10.4103C7.08971 10.5736 7.03226 10.7126 6.91737 10.8275C6.80237 10.9425 6.66326 11 6.50004 11ZM3.83337 11C3.67015 11 3.53104 10.9425 3.41604 10.8275C3.30115 10.7126 3.24371 10.5736 3.24371 10.4103C3.24371 10.247 3.30115 10.1079 3.41604 9.99301C3.53104 9.87801 3.67015 9.82051 3.83337 9.82051C3.9966 9.82051 4.13571 9.87801 4.25071 9.99301C4.3656 10.1079 4.42304 10.247 4.42304 10.4103C4.42304 10.5736 4.3656 10.7126 4.25071 10.8275C4.13571 10.9425 3.9966 11 3.83337 11ZM9.16671 11C9.00348 11 8.86437 10.9425 8.74937 10.8275C8.63449 10.7126 8.57704 10.5736 8.57704 10.4103C8.57704 10.247 8.63449 10.1079 8.74937 9.99301C8.86437 9.87801 9.00348 9.82051 9.16671 9.82051C9.32993 9.82051 9.46904 9.87801 9.58404 9.99301C9.69893 10.1079 9.75637 10.247 9.75637 10.4103C9.75637 10.5736 9.69893 10.7126 9.58404 10.8275C9.46904 10.9425 9.32993 11 9.16671 11Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const GalleryIcon = () => {\r\n return (\r\n <svg\r\n width=\"15\"\r\n height=\"10\"\r\n viewBox=\"0 0 15 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.87179 9.33329C1.54035 9.33329 1.25663 9.21529 1.02063 8.97929C0.784626 8.74329 0.666626 8.45957 0.666626 8.12813V1.87179C0.666626 1.54035 0.784626 1.25663 1.02063 1.02063C1.25663 0.784626 1.54035 0.666626 1.87179 0.666626H8.12813C8.45957 0.666626 8.74329 0.784626 8.97929 1.02063C9.21529 1.25663 9.33329 1.54035 9.33329 1.87179V8.12813C9.33329 8.45957 9.21529 8.74329 8.97929 8.97929C8.74329 9.21529 8.45957 9.33329 8.12813 9.33329H1.87179ZM11.2723 4.33329C11.0984 4.33329 10.954 4.27579 10.8391 4.16079C10.7241 4.0459 10.6666 3.90151 10.6666 3.72763V1.27246C10.6666 1.09846 10.7241 0.954014 10.8391 0.839126C10.954 0.724126 11.0984 0.666626 11.2723 0.666626H13.7275C13.9015 0.666626 14.0459 0.724126 14.1608 0.839126C14.2758 0.954014 14.3333 1.09846 14.3333 1.27246V3.72763C14.3333 3.90151 14.2758 4.0459 14.1608 4.16079C14.0459 4.27579 13.9015 4.33329 13.7275 4.33329H11.2723ZM11.6666 3.33329H13.3333V1.66663H11.6666V3.33329ZM1.87179 8.33329H8.12813C8.18802 8.33329 8.23718 8.31407 8.27563 8.27563C8.31407 8.23718 8.33329 8.18802 8.33329 8.12813V1.87179C8.33329 1.8119 8.31407 1.76274 8.27563 1.72429C8.23718 1.68585 8.18802 1.66663 8.12813 1.66663H1.87179C1.8119 1.66663 1.76274 1.68585 1.72429 1.72429C1.68585 1.76274 1.66663 1.8119 1.66663 1.87179V8.12813C1.66663 8.18802 1.68585 8.23718 1.72429 8.27563C1.76274 8.31407 1.8119 8.33329 1.87179 8.33329ZM2.99996 6.96796H6.99996C7.11829 6.96796 7.20707 6.91324 7.26629 6.80379C7.32552 6.69435 7.31707 6.58835 7.24096 6.48579L6.15763 5.03579C6.09529 4.95546 6.01496 4.91529 5.91663 4.91529C5.81829 4.91529 5.73796 4.95546 5.67563 5.03579L4.66663 6.38463L3.99096 5.48579C3.92863 5.40546 3.84829 5.36529 3.74996 5.36529C3.65163 5.36529 3.57129 5.40546 3.50896 5.48579L2.75896 6.48579C2.68285 6.58835 2.6744 6.69435 2.73363 6.80379C2.79285 6.91324 2.88163 6.96796 2.99996 6.96796ZM11.2723 9.33329C11.0984 9.33329 10.954 9.27579 10.8391 9.16079C10.7241 9.0459 10.6666 8.90146 10.6666 8.72746V6.27229C10.6666 6.0984 10.7241 5.95402 10.8391 5.83913C10.954 5.72413 11.0984 5.66663 11.2723 5.66663H13.7275C13.9015 5.66663 14.0459 5.72413 14.1608 5.83913C14.2758 5.95402 14.3333 6.0984 14.3333 6.27229V8.72746C14.3333 8.90146 14.2758 9.0459 14.1608 9.16079C14.0459 9.27579 13.9015 9.33329 13.7275 9.33329H11.2723ZM11.6666 8.33329H13.3333V6.66663H11.6666V8.33329Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChartsIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M7.14485 1.42317C7.14485 1.22028 7.22413 1.058 7.38268 0.936332C7.54124 0.814666 7.71879 0.777333 7.91535 0.824333C9.12135 1.07389 10.16 1.64056 11.0314 2.52433C11.9028 3.40811 12.4633 4.46328 12.7128 5.68983C12.753 5.86583 12.7148 6.02133 12.5985 6.15633C12.4822 6.29144 12.3228 6.359 12.1205 6.359H8.42435C8.38424 6.359 8.34907 6.34894 8.31885 6.32883C8.28874 6.30872 8.26363 6.27861 8.24352 6.2385C8.14352 6.01794 8.00863 5.82105 7.83885 5.64783C7.66896 5.47461 7.47779 5.34072 7.26535 5.24617C7.22524 5.22628 7.19513 5.20389 7.17502 5.179C7.1549 5.15411 7.14485 5.12178 7.14485 5.082V1.42317ZM8.14485 1.95133V4.60267C8.29274 4.70689 8.43079 4.82206 8.55902 4.94817C8.68724 5.07417 8.80135 5.21111 8.90135 5.359H11.5653C11.3158 4.54278 10.8874 3.831 10.2802 3.22367C9.67285 2.61644 8.96107 2.19233 8.14485 1.95133ZM5.10518 13.1692C3.6804 12.8462 2.5039 12.113 1.57568 10.9697C0.647461 9.82644 0.18335 8.50322 0.18335 7C0.18335 5.49367 0.647461 4.17028 1.57568 3.02983C2.5039 1.8895 3.6804 1.1565 5.10518 0.830832C5.30607 0.783832 5.48685 0.8265 5.64752 0.958833C5.80818 1.09117 5.88852 1.25917 5.88852 1.46283V5.108C5.88852 5.11867 5.85729 5.16128 5.79485 5.23583C5.43852 5.38294 5.15352 5.61672 4.93985 5.93717C4.72607 6.25772 4.61918 6.61244 4.61918 7.00133C4.61918 7.39022 4.72607 7.74 4.93985 8.05067C5.15352 8.36133 5.43852 8.58805 5.79485 8.73083C5.81285 8.73761 5.84407 8.77989 5.88852 8.85767V12.5577C5.88852 12.7643 5.80818 12.9297 5.64752 13.0537C5.48685 13.1777 5.30607 13.2162 5.10518 13.1692ZM4.88852 1.95133C3.78341 2.28033 2.88957 2.91194 2.20702 3.84617C1.52457 4.78039 1.18335 5.83167 1.18335 7C1.18335 8.16833 1.52457 9.21961 2.20702 10.1538C2.88957 11.0881 3.78341 11.7265 4.88852 12.0692V9.37183C4.50052 9.08805 4.19196 8.74122 3.96285 8.33133C3.73385 7.92156 3.61935 7.47672 3.61935 6.99683C3.61935 6.51694 3.73279 6.071 3.95968 5.659C4.18657 5.247 4.49618 4.89911 4.88852 4.61533V1.95133ZM7.89618 13.1757C7.69963 13.2183 7.52524 13.1806 7.37302 13.0625C7.2209 12.9443 7.14485 12.7867 7.14485 12.5897V8.90133C7.14485 8.86111 7.1549 8.82594 7.17502 8.79583C7.19513 8.76572 7.22524 8.74061 7.26535 8.7205C7.48335 8.62472 7.67707 8.49194 7.84652 8.32217C8.01596 8.15228 8.14829 7.96111 8.24352 7.74867C8.2504 7.735 8.30713 7.69483 8.41368 7.62817H12.1205C12.3022 7.62817 12.4536 7.70405 12.5747 7.85583C12.6958 8.0075 12.7363 8.17822 12.6962 8.368C12.4355 9.59444 11.8667 10.6417 10.9897 11.5097C10.1128 12.3776 9.08163 12.9329 7.89618 13.1757ZM8.90135 8.62817C8.79957 8.77172 8.68502 8.90656 8.55768 9.03267C8.43035 9.15878 8.29274 9.27183 8.14485 9.37183V12.0487C8.9654 11.8034 9.67824 11.3772 10.2833 10.7698C10.8885 10.1626 11.3158 9.44872 11.5653 8.62817H8.90135Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const ViewMoreIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12719\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12719)\">\r\n <path\r\n d=\"M4.99998 11.6666C4.54165 11.6666 4.14929 11.5035 3.8229 11.1771C3.49651 10.8507 3.33331 10.4583 3.33331 9.99998C3.33331 9.54165 3.49651 9.14929 3.8229 8.8229C4.14929 8.49651 4.54165 8.33331 4.99998 8.33331C5.45831 8.33331 5.85067 8.49651 6.17706 8.8229C6.50345 9.14929 6.66665 9.54165 6.66665 9.99998C6.66665 10.4583 6.50345 10.8507 6.17706 11.1771C5.85067 11.5035 5.45831 11.6666 4.99998 11.6666ZM9.99998 11.6666C9.54165 11.6666 9.14929 11.5035 8.8229 11.1771C8.49651 10.8507 8.33331 10.4583 8.33331 9.99998C8.33331 9.54165 8.49651 9.14929 8.8229 8.8229C9.14929 8.49651 9.54165 8.33331 9.99998 8.33331C10.4583 8.33331 10.8507 8.49651 11.1771 8.8229C11.5035 9.14929 11.6666 9.54165 11.6666 9.99998C11.6666 10.4583 11.5035 10.8507 11.1771 11.1771C10.8507 11.5035 10.4583 11.6666 9.99998 11.6666ZM15 11.6666C14.5416 11.6666 14.1493 11.5035 13.8229 11.1771C13.4965 10.8507 13.3333 10.4583 13.3333 9.99998C13.3333 9.54165 13.4965 9.14929 13.8229 8.8229C14.1493 8.49651 14.5416 8.33331 15 8.33331C15.4583 8.33331 15.8507 8.49651 16.1771 8.8229C16.5035 9.14929 16.6666 9.54165 16.6666 9.99998C16.6666 10.4583 16.5035 10.8507 16.1771 11.1771C15.8507 11.5035 15.4583 11.6666 15 11.6666Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const CloseIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 14 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M11.0833 3.73919L10.2608 2.91669L6.99996 6.17752L3.73913 2.91669L2.91663 3.73919L6.17746 7.00002L2.91663 10.2609L3.73913 11.0834L6.99996 7.82252L10.2608 11.0834L11.0833 10.2609L7.82246 7.00002L11.0833 3.73919Z\"\r\n fill=\"#0C2033\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SearchIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12583\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12583)\">\r\n <path\r\n d=\"M7.93274 13.0127C6.50969 13.0127 5.30455 12.5192 4.31733 11.5321C3.33024 10.5449 2.8367 9.33971 2.8367 7.91666C2.8367 6.4936 3.33024 5.28847 4.31733 4.30124C5.30455 3.31416 6.50969 2.82062 7.93274 2.82062C9.3558 2.82062 10.5609 3.31416 11.5482 4.30124C12.5352 5.28847 13.0288 6.4936 13.0288 7.91666C13.0288 8.5118 12.9289 9.0802 12.7292 9.62187C12.5293 10.1635 12.2627 10.6346 11.9294 11.0352L16.7244 15.8302C16.8398 15.9455 16.8989 16.0905 16.9015 16.2652C16.9041 16.4399 16.8451 16.5876 16.7244 16.7083C16.6037 16.829 16.4573 16.8894 16.2852 16.8894C16.1133 16.8894 15.967 16.829 15.8463 16.7083L11.0513 11.9133C10.6346 12.2574 10.1554 12.5266 9.61378 12.721C9.07212 12.9155 8.51177 13.0127 7.93274 13.0127ZM7.93274 11.7629C9.00649 11.7629 9.91594 11.3903 10.6611 10.645C11.4064 9.89985 11.779 8.99041 11.779 7.91666C11.779 6.84291 11.4064 5.93346 10.6611 5.18833C9.91594 4.44305 9.00649 4.07041 7.93274 4.07041C6.85899 4.07041 5.94955 4.44305 5.20441 5.18833C4.45913 5.93346 4.08649 6.84291 4.08649 7.91666C4.08649 8.99041 4.45913 9.89985 5.20441 10.645C5.94955 11.3903 6.85899 11.7629 7.93274 11.7629Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SortingIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12710\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12710)\">\r\n <path\r\n d=\"M7.63605 10.5369C7.45883 10.5369 7.31036 10.477 7.19064 10.3571C7.07105 10.2374 7.01126 10.089 7.01126 9.9119V4.4696L5.08022 6.40065C4.96744 6.51606 4.82654 6.57377 4.65751 6.57377C4.48848 6.57377 4.33932 6.51398 4.21001 6.3944C4.0807 6.26398 4.01605 6.11488 4.01605 5.94711C4.01605 5.77947 4.0807 5.63099 4.21001 5.50169L7.10105 2.61065C7.17897 2.53259 7.26154 2.47759 7.34876 2.44565C7.43612 2.41356 7.52966 2.39752 7.62939 2.39752C7.72911 2.39752 7.82383 2.41363 7.91355 2.44586C8.00327 2.47822 8.08661 2.53315 8.16355 2.61065L11.0754 5.52252C11.1993 5.64641 11.2604 5.79009 11.2588 5.95356C11.2572 6.11704 11.1918 6.26398 11.0625 6.3944C10.9332 6.51398 10.7868 6.57592 10.6233 6.58023C10.4599 6.5844 10.3136 6.5219 10.1844 6.39273L8.26126 4.4696V9.91981C8.26126 10.0947 8.20133 10.2412 8.08147 10.3594C7.96161 10.4777 7.81314 10.5369 7.63605 10.5369ZM12.3706 17.5946C12.2709 17.5946 12.1762 17.5784 12.0865 17.5461C11.9967 17.5138 11.9134 17.459 11.8365 17.3815L8.92459 14.4696C8.8007 14.3456 8.73959 14.2019 8.74126 14.0386C8.74279 13.8751 8.8082 13.7281 8.93751 13.5977C9.06682 13.4781 9.2132 13.4162 9.37668 13.4119C9.54015 13.4076 9.68647 13.4701 9.81564 13.5994L11.7388 15.5225V10.0721C11.7388 9.89738 11.7987 9.75085 11.9186 9.63252C12.0384 9.51433 12.1869 9.45523 12.364 9.45523C12.5412 9.45523 12.6897 9.51509 12.8094 9.63481C12.929 9.75467 12.9888 9.90315 12.9888 10.0802V15.5225L14.9198 13.5913C15.0326 13.476 15.1735 13.4184 15.3425 13.4184C15.5115 13.4184 15.6607 13.4781 15.79 13.5977C15.9193 13.7281 15.984 13.8772 15.984 14.0448C15.984 14.2126 15.9193 14.3611 15.79 14.4904L12.899 17.3815C12.8211 17.4594 12.7385 17.5144 12.6513 17.5465C12.5639 17.5786 12.4704 17.5946 12.3706 17.5946Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const FilterationIcon = ({ color = \"#1C1B1F\" }) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12698\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12698)\">\r\n <path\r\n d=\"M8.33333 15V13.3333H11.6667V15H8.33333ZM5 10.8333V9.16667H15V10.8333H5ZM2.5 6.66667V5H17.5V6.66667H2.5Z\"\r\n fill={color}\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const HideIcon = () => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_957_24305\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_957_24305)\">\r\n <path\r\n d=\"M9.91805 5.74863C10.1889 6.01963 10.3983 6.34891 10.5462 6.73647C10.6941 7.12413 10.75 7.51325 10.714 7.9038C10.714 8.03202 10.6679 8.14058 10.5757 8.22947C10.4834 8.31836 10.3731 8.3628 10.2449 8.3628C10.1167 8.3628 10.0081 8.31836 9.91922 8.22947C9.83033 8.14058 9.78588 8.03202 9.78588 7.9038C9.82866 7.61069 9.80455 7.33291 9.71355 7.07047C9.62255 6.80813 9.4826 6.58252 9.29372 6.39363C9.10483 6.20475 8.87705 6.06136 8.61038 5.96347C8.34372 5.86558 8.06249 5.84013 7.76672 5.88713C7.63849 5.89147 7.52783 5.84852 7.43472 5.7583C7.34149 5.66819 7.29277 5.55902 7.28855 5.4308C7.28422 5.30258 7.32544 5.19186 7.41222 5.09863C7.49899 5.00552 7.60649 4.95686 7.73472 4.95263C8.12272 4.90819 8.51266 4.9588 8.90455 5.10447C9.29644 5.25025 9.63427 5.46497 9.91805 5.74863ZM8.00005 3.99997C7.76327 3.99997 7.53099 4.01152 7.30322 4.03463C7.07544 4.05763 6.84872 4.09563 6.62305 4.14863C6.48116 4.17774 6.35338 4.15747 6.23972 4.0878C6.12605 4.01813 6.04788 3.91791 6.00522 3.78713C5.96244 3.65213 5.97655 3.52375 6.04755 3.40197C6.11844 3.28019 6.22138 3.20474 6.35638 3.17563C6.62483 3.11152 6.89599 3.06625 7.16988 3.0398C7.44388 3.01325 7.7206 2.99997 8.00005 2.99997C9.43249 2.99997 10.7483 3.37219 11.9475 4.11663C13.1467 4.86108 14.0688 5.86836 14.714 7.13847C14.7585 7.22302 14.7908 7.30825 14.8109 7.39413C14.831 7.48002 14.841 7.57086 14.841 7.66663C14.841 7.76241 14.8327 7.85325 14.816 7.93913C14.7994 8.02502 14.7688 8.11024 14.7244 8.1948C14.5202 8.62213 14.2719 9.02063 13.9796 9.3903C13.6872 9.75997 13.3654 10.0995 13.0141 10.409C12.9107 10.5013 12.7926 10.5395 12.6597 10.5236C12.5267 10.5079 12.4175 10.4414 12.332 10.3243C12.2466 10.2072 12.2112 10.0816 12.2257 9.94747C12.2403 9.81325 12.2992 9.69997 12.4026 9.60763C12.7034 9.33497 12.9778 9.03691 13.2257 8.71347C13.4736 8.38991 13.6873 8.04097 13.8667 7.66663C13.3112 6.54441 12.5084 5.65275 11.4584 4.99163C10.4084 4.33052 9.2556 3.99997 8.00005 3.99997ZM8.00005 12.3333C6.5966 12.3333 5.31027 11.9583 4.14105 11.2083C2.97183 10.4583 2.04238 9.47047 1.35272 8.2448C1.29716 8.16025 1.25655 8.06836 1.23088 7.96913C1.20522 7.87002 1.19238 7.76919 1.19238 7.66663C1.19238 7.56408 1.20349 7.46491 1.22572 7.36913C1.24794 7.27347 1.28683 7.17991 1.34238 7.08847C1.59027 6.63547 1.87105 6.20402 2.18472 5.79413C2.49838 5.38436 2.85905 5.01708 3.26672 4.6923L1.76155 3.1768C1.66933 3.07769 1.62383 2.95997 1.62505 2.82363C1.62638 2.6873 1.67533 2.57086 1.77188 2.4743C1.86844 2.37775 1.98555 2.32947 2.12322 2.32947C2.26077 2.32947 2.37783 2.37775 2.47438 2.4743L13.5257 13.5256C13.618 13.618 13.667 13.7322 13.6725 13.8685C13.6781 14.0048 13.6292 14.1247 13.5257 14.2281C13.4292 14.3247 13.312 14.373 13.1744 14.373C13.0368 14.373 12.9198 14.3247 12.8232 14.2281L10.477 11.9025C10.0838 12.0546 9.67972 12.1644 9.26472 12.232C8.84983 12.2995 8.42827 12.3333 8.00005 12.3333ZM3.96938 5.3948C3.57872 5.69658 3.22761 6.0378 2.91605 6.41847C2.60449 6.79924 2.3436 7.2153 2.13338 7.66663C2.68894 8.78886 3.49172 9.68052 4.54172 10.3416C5.59172 11.0027 6.74449 11.3333 8.00005 11.3333C8.28638 11.3333 8.56822 11.3141 8.84555 11.2756C9.12288 11.2372 9.39833 11.1778 9.67188 11.0975L8.82822 10.2333C8.69322 10.2923 8.55838 10.3322 8.42372 10.3531C8.28916 10.3741 8.14794 10.3846 8.00005 10.3846C7.2436 10.3846 6.60149 10.1207 6.07372 9.59297C5.54594 9.06519 5.28205 8.42308 5.28205 7.66663C5.28205 7.51874 5.2936 7.37752 5.31672 7.24297C5.33983 7.1083 5.37872 6.97347 5.43338 6.83847L3.96938 5.3948Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const PinIcon = () => {\r\n return (\r\n <svg\r\n width=\"8\"\r\n height=\"13\"\r\n viewBox=\"0 0 8 13\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6.33337 1.33337V6.14104L7.37686 7.18471C7.42642 7.23426 7.46364 7.29004 7.48853 7.35204C7.51331 7.41393 7.5257 7.47793 7.5257 7.54404V7.82904C7.5257 7.96949 7.47714 8.08865 7.38003 8.18654C7.28303 8.28443 7.16275 8.33337 7.0192 8.33337H4.50003V11.9257C4.50003 12.0674 4.45209 12.1861 4.3562 12.2819C4.26031 12.3777 4.14153 12.4255 3.99987 12.4255C3.85809 12.4255 3.73937 12.3777 3.6437 12.2819C3.54792 12.1861 3.50003 12.0674 3.50003 11.9257V8.33337H0.980865C0.83731 8.33337 0.717032 8.28443 0.620032 8.18654C0.522921 8.08865 0.474365 7.96949 0.474365 7.82904V7.54404C0.474365 7.47793 0.486754 7.41393 0.511532 7.35204C0.536421 7.29004 0.573643 7.23426 0.623199 7.18471L1.6667 6.14104V1.33337H1.50003C1.35837 1.33337 1.23964 1.28543 1.14387 1.18954C1.04798 1.09365 1.00003 0.974874 1.00003 0.833207C1.00003 0.691429 1.04798 0.572707 1.14387 0.477041C1.23964 0.381263 1.35837 0.333374 1.50003 0.333374H6.50003C6.6417 0.333374 6.76042 0.381319 6.8562 0.477207C6.95209 0.573096 7.00003 0.691874 7.00003 0.833541C7.00003 0.975319 6.95209 1.09404 6.8562 1.18971C6.76042 1.28549 6.6417 1.33337 6.50003 1.33337H6.33337ZM1.90003 7.33337H6.10003L5.33336 6.56671V1.33337H2.6667V6.56671L1.90003 7.33337Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const VisibilityIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"10\"\r\n viewBox=\"0 0 14 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M7.00147 7.38467C7.75692 7.38467 8.39853 7.12028 8.92631 6.5915C9.45408 6.06272 9.71797 5.42061 9.71797 4.66517C9.71797 3.90972 9.45358 3.26811 8.9248 2.74033C8.39603 2.21256 7.75392 1.94867 6.99847 1.94867C6.24303 1.94867 5.60142 2.21306 5.07364 2.74183C4.54586 3.27061 4.28197 3.91272 4.28197 4.66817C4.28197 5.42361 4.54636 6.06522 5.07514 6.593C5.60392 7.12078 6.24603 7.38467 7.00147 7.38467ZM6.99997 6.46667C6.49997 6.46667 6.07497 6.29167 5.72497 5.94167C5.37497 5.59167 5.19997 5.16667 5.19997 4.66667C5.19997 4.16667 5.37497 3.74167 5.72497 3.39167C6.07497 3.04167 6.49997 2.86667 6.99997 2.86667C7.49997 2.86667 7.92497 3.04167 8.27497 3.39167C8.62497 3.74167 8.79997 4.16667 8.79997 4.66667C8.79997 5.16667 8.62497 5.59167 8.27497 5.94167C7.92497 6.29167 7.49997 6.46667 6.99997 6.46667ZM6.99997 9.33333C5.59653 9.33333 4.31297 8.95894 3.1493 8.21017C1.98564 7.4615 1.0568 6.4765 0.362803 5.25517C0.307248 5.15939 0.266637 5.06289 0.24097 4.96567C0.215414 4.86844 0.202637 4.76867 0.202637 4.66633C0.202637 4.564 0.215414 4.46433 0.24097 4.36733C0.266637 4.27033 0.307248 4.17394 0.362803 4.07817C1.0568 2.85683 1.98564 1.87183 3.1493 1.12317C4.31297 0.374389 5.59653 0 6.99997 0C8.40342 0 9.68697 0.374389 10.8506 1.12317C12.0143 1.87183 12.9431 2.85683 13.6371 4.07817C13.6927 4.17394 13.7333 4.27044 13.759 4.36767C13.7845 4.46489 13.7973 4.56467 13.7973 4.667C13.7973 4.76933 13.7845 4.869 13.759 4.966C13.7333 5.063 13.6927 5.15939 13.6371 5.25517C12.9431 6.4765 12.0143 7.4615 10.8506 8.21017C9.68697 8.95894 8.40342 9.33333 6.99997 9.33333ZM6.99997 8.33333C8.25553 8.33333 9.4083 8.00278 10.4583 7.34167C11.5083 6.68055 12.3111 5.78889 12.8666 4.66667C12.3111 3.54444 11.5083 2.65278 10.4583 1.99167C9.4083 1.33056 8.25553 1 6.99997 1C5.74442 1 4.59164 1.33056 3.54164 1.99167C2.49164 2.65278 1.68886 3.54444 1.1333 4.66667C1.68886 5.78889 2.49164 6.68055 3.54164 7.34167C4.59164 8.00278 5.74442 8.33333 6.99997 8.33333Z\"\r\n fill=\"#505050\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const VisibilityOffIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"13\"\r\n viewBox=\"0 0 14 13\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M8.91793 3.74863C9.18882 4.01963 9.39821 4.34891 9.54609 4.73647C9.69398 5.12413 9.74993 5.51325 9.71393 5.9038C9.71393 6.03202 9.66782 6.14058 9.57559 6.22947C9.48326 6.31836 9.37298 6.3628 9.24476 6.3628C9.11654 6.3628 9.00798 6.31836 8.9191 6.22947C8.83021 6.14058 8.78576 6.03202 8.78576 5.9038C8.82854 5.61069 8.80443 5.33291 8.71343 5.07047C8.62243 4.80813 8.48248 4.58252 8.29359 4.39363C8.1047 4.20475 7.87693 4.06136 7.61026 3.96347C7.34359 3.86558 7.06237 3.84013 6.76659 3.88713C6.63837 3.89147 6.52771 3.84852 6.43459 3.7583C6.34137 3.66819 6.29265 3.55902 6.28843 3.4308C6.28409 3.30258 6.32532 3.19186 6.41209 3.09863C6.49887 3.00552 6.60637 2.95686 6.73459 2.95263C7.12259 2.90819 7.51254 2.9588 7.90443 3.10447C8.29632 3.25025 8.63415 3.46497 8.91793 3.74863ZM6.99993 1.99997C6.76315 1.99997 6.53087 2.01152 6.30309 2.03463C6.07532 2.05763 5.84859 2.09563 5.62293 2.14863C5.48104 2.17774 5.35326 2.15747 5.23959 2.0878C5.12593 2.01813 5.04776 1.91791 5.00509 1.78713C4.96232 1.65213 4.97643 1.52375 5.04743 1.40197C5.11832 1.28019 5.22126 1.20474 5.35626 1.17563C5.62471 1.11152 5.89587 1.06625 6.16976 1.0398C6.44376 1.01325 6.72048 0.999967 6.99993 0.999967C8.43237 0.999967 9.74821 1.37219 10.9474 2.11663C12.1465 2.86108 13.0687 3.86836 13.7139 5.13847C13.7584 5.22302 13.7907 5.30825 13.8108 5.39413C13.8309 5.48002 13.8409 5.57086 13.8409 5.66663C13.8409 5.76241 13.8326 5.85325 13.8159 5.93913C13.7993 6.02502 13.7687 6.11024 13.7243 6.1948C13.52 6.62213 13.2718 7.02063 12.9794 7.3903C12.6871 7.75997 12.3653 8.09952 12.0139 8.40897C11.9106 8.5013 11.7925 8.53952 11.6596 8.52363C11.5266 8.50786 11.4174 8.44141 11.3319 8.3243C11.2465 8.20719 11.211 8.08158 11.2256 7.94747C11.2402 7.81325 11.2991 7.69997 11.4024 7.60763C11.7033 7.33497 11.9777 7.03691 12.2256 6.71347C12.4735 6.38991 12.6872 6.04097 12.8666 5.66663C12.311 4.54441 11.5083 3.65275 10.4583 2.99163C9.40826 2.33052 8.25548 1.99997 6.99993 1.99997ZM6.99993 10.3333C5.59648 10.3333 4.31015 9.9583 3.14093 9.2083C1.97171 8.4583 1.04226 7.47047 0.352594 6.2448C0.297039 6.16025 0.256427 6.06836 0.230761 5.96913C0.205094 5.87002 0.192261 5.76919 0.192261 5.66663C0.192261 5.56408 0.203372 5.46491 0.225594 5.36913C0.247816 5.27347 0.286705 5.17991 0.342261 5.08847C0.59015 4.63547 0.870927 4.20402 1.18459 3.79413C1.49826 3.38436 1.85893 3.01708 2.26659 2.6923L0.761427 1.1768C0.669205 1.07769 0.623705 0.959967 0.624927 0.823634C0.626261 0.6873 0.675205 0.570857 0.771761 0.474301C0.868316 0.377746 0.985427 0.329468 1.12309 0.329468C1.26065 0.329468 1.37771 0.377746 1.47426 0.474301L12.5256 11.5256C12.6179 11.618 12.6669 11.7322 12.6724 11.8685C12.678 12.0048 12.629 12.1247 12.5256 12.2281C12.429 12.3247 12.3119 12.373 12.1743 12.373C12.0367 12.373 11.9197 12.3247 11.8231 12.2281L9.47693 9.90247C9.08371 10.0546 8.67959 10.1644 8.2646 10.232C7.84971 10.2995 7.42815 10.3333 6.99993 10.3333ZM2.96926 3.3948C2.57859 3.69658 2.22748 4.0378 1.91593 4.41847C1.60437 4.79924 1.34348 5.2153 1.13326 5.66663C1.68882 6.78886 2.49159 7.68052 3.54159 8.34163C4.59159 9.00274 5.74437 9.3333 6.99993 9.3333C7.28626 9.3333 7.56809 9.31408 7.84543 9.27563C8.12276 9.23719 8.3982 9.1778 8.67176 9.09747L7.82809 8.2333C7.69309 8.2923 7.55826 8.33224 7.42359 8.35313C7.28904 8.37413 7.14782 8.38463 6.99993 8.38463C6.24348 8.38463 5.60137 8.12074 5.07359 7.59297C4.54582 7.06519 4.28193 6.42308 4.28193 5.66663C4.28193 5.51874 4.29348 5.37752 4.31659 5.24297C4.33971 5.1083 4.37859 4.97347 4.43326 4.83847L2.96926 3.3948Z\"\r\n fill=\"#C5C5C5\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const DragandDrogIcon = () => {\r\n return (\r\n <svg\r\n width=\"8\"\r\n height=\"12\"\r\n viewBox=\"0 0 8 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M2.00005 11.0768C1.70394 11.0768 1.45044 10.9714 1.23955 10.7605C1.02866 10.5496 0.923218 10.2961 0.923218 9.99999C0.923218 9.70388 1.02866 9.45038 1.23955 9.23949C1.45044 9.0286 1.70394 8.92316 2.00005 8.92316C2.29616 8.92316 2.54966 9.0286 2.76055 9.23949C2.97144 9.45038 3.07688 9.70388 3.07688 9.99999C3.07688 10.2961 2.97144 10.5496 2.76055 10.7605C2.54966 10.9714 2.29616 11.0768 2.00005 11.0768ZM6.00005 11.0768C5.70394 11.0768 5.45044 10.9714 5.23955 10.7605C5.02866 10.5496 4.92322 10.2961 4.92322 9.99999C4.92322 9.70388 5.02866 9.45038 5.23955 9.23949C5.45044 9.0286 5.70394 8.92316 6.00005 8.92316C6.29616 8.92316 6.54966 9.0286 6.76055 9.23949C6.97144 9.45038 7.07688 9.70388 7.07688 9.99999C7.07688 10.2961 6.97144 10.5496 6.76055 10.7605C6.54966 10.9714 6.29616 11.0768 6.00005 11.0768ZM2.00005 7.07682C1.70394 7.07682 1.45044 6.97138 1.23955 6.76049C1.02866 6.5496 0.923218 6.2961 0.923218 5.99999C0.923218 5.70388 1.02866 5.45038 1.23955 5.23949C1.45044 5.0286 1.70394 4.92316 2.00005 4.92316C2.29616 4.92316 2.54966 5.0286 2.76055 5.23949C2.97144 5.45038 3.07688 5.70388 3.07688 5.99999C3.07688 6.2961 2.97144 6.5496 2.76055 6.76049C2.54966 6.97138 2.29616 7.07682 2.00005 7.07682ZM6.00005 7.07682C5.70394 7.07682 5.45044 6.97138 5.23955 6.76049C5.02866 6.5496 4.92322 6.2961 4.92322 5.99999C4.92322 5.70388 5.02866 5.45038 5.23955 5.23949C5.45044 5.0286 5.70394 4.92316 6.00005 4.92316C6.29616 4.92316 6.54966 5.0286 6.76055 5.23949C6.97144 5.45038 7.07688 5.70388 7.07688 5.99999C7.07688 6.2961 6.97144 6.5496 6.76055 6.76049C6.54966 6.97138 6.29616 7.07682 6.00005 7.07682ZM2.00005 3.07682C1.70394 3.07682 1.45044 2.97138 1.23955 2.76049C1.02866 2.5496 0.923218 2.2961 0.923218 1.99999C0.923218 1.70388 1.02866 1.45038 1.23955 1.23949C1.45044 1.0286 1.70394 0.923157 2.00005 0.923157C2.29616 0.923157 2.54966 1.0286 2.76055 1.23949C2.97144 1.45038 3.07688 1.70388 3.07688 1.99999C3.07688 2.2961 2.97144 2.5496 2.76055 2.76049C2.54966 2.97138 2.29616 3.07682 2.00005 3.07682ZM6.00005 3.07682C5.70394 3.07682 5.45044 2.97138 5.23955 2.76049C5.02866 2.5496 4.92322 2.2961 4.92322 1.99999C4.92322 1.70388 5.02866 1.45038 5.23955 1.23949C5.45044 1.0286 5.70394 0.923157 6.00005 0.923157C6.29616 0.923157 6.54966 1.0286 6.76055 1.23949C6.97144 1.45038 7.07688 1.70388 7.07688 1.99999C7.07688 2.2961 6.97144 2.5496 6.76055 2.76049C6.54966 2.97138 6.29616 3.07682 6.00005 3.07682Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\n// export const SettingIcon = () => {\r\n// return (\r\n// <svg\r\n// width=\"18\"\r\n// height=\"17\"\r\n// viewBox=\"0 0 18 17\"\r\n// fill=\"none\"\r\n// xmlns=\"http://www.w3.org/2000/svg\"\r\n// >\r\n// <path\r\n// d=\"M15.1935 9.31669C15.2269 9.05002 15.2519 8.78335 15.2519 8.50002C15.2519 8.21669 15.2269 7.95002 15.1935 7.68335L16.9519 6.30835C17.1102 6.18335 17.1518 5.95835 17.0518 5.77502L15.3852 2.89169C15.3102 2.75835 15.1685 2.68335 15.0185 2.68335C14.9685 2.68335 14.9185 2.69169 14.8768 2.70835L12.8018 3.54169C12.3685 3.20835 11.9018 2.93335 11.3935 2.72502L11.0768 0.516687C11.0518 0.316687 10.8769 0.166687 10.6685 0.166687H7.33518C7.12685 0.166687 6.95185 0.316687 6.92685 0.516687L6.61018 2.72502C6.10185 2.93335 5.63518 3.21669 5.20185 3.54169L3.12685 2.70835C3.07685 2.69169 3.02685 2.68335 2.97685 2.68335C2.83518 2.68335 2.69352 2.75835 2.61852 2.89169L0.95185 5.77502C0.843516 5.95835 0.893517 6.18335 1.05185 6.30835L2.81018 7.68335C2.77685 7.95002 2.75185 8.22502 2.75185 8.50002C2.75185 8.77502 2.77685 9.05002 2.81018 9.31669L1.05185 10.6917C0.893517 10.8167 0.85185 11.0417 0.95185 11.225L2.61852 14.1084C2.69352 14.2417 2.83518 14.3167 2.98518 14.3167C3.03518 14.3167 3.08518 14.3084 3.12685 14.2917L5.20185 13.4584C5.63518 13.7917 6.10185 14.0667 6.61018 14.275L6.92685 16.4834C6.95185 16.6834 7.12685 16.8334 7.33518 16.8334H10.6685C10.8769 16.8334 11.0518 16.6834 11.0768 16.4834L11.3935 14.275C11.9018 14.0667 12.3685 13.7834 12.8018 13.4584L14.8768 14.2917C14.9268 14.3084 14.9768 14.3167 15.0268 14.3167C15.1685 14.3167 15.3102 14.2417 15.3852 14.1084L17.0518 11.225C17.1518 11.0417 17.1102 10.8167 16.9519 10.6917L15.1935 9.31669ZM13.5435 7.89169C13.5769 8.15002 13.5852 8.32502 13.5852 8.50002C13.5852 8.67502 13.5685 8.85835 13.5435 9.10835L13.4268 10.05L14.1685 10.6334L15.0685 11.3334L14.4852 12.3417L13.4268 11.9167L12.5602 11.5667L11.8102 12.1334C11.4518 12.4 11.1102 12.6 10.7685 12.7417L9.88518 13.1L9.75185 14.0417L9.58518 15.1667H8.41852L8.12685 13.1L7.24352 12.7417C6.88518 12.5917 6.55185 12.4 6.21852 12.15L5.46018 11.5667L4.57685 11.925L3.51852 12.35L2.93518 11.3417L3.83518 10.6417L4.57685 10.0584L4.46018 9.11669C4.43518 8.85835 4.41852 8.66669 4.41852 8.50002C4.41852 8.33335 4.43518 8.14169 4.46018 7.89169L4.57685 6.95002L3.83518 6.36669L2.93518 5.66669L3.51852 4.65835L4.57685 5.08335L5.44352 5.43335L6.19352 4.86669C6.55185 4.60002 6.89352 4.40002 7.23518 4.25835L8.11852 3.90002L8.25185 2.95835L8.41852 1.83335H9.57685L9.86852 3.90002L10.7519 4.25835C11.1102 4.40835 11.4435 4.60002 11.7768 4.85002L12.5352 5.43335L13.4185 5.07502L14.4768 4.65002L15.0602 5.65835L14.1685 6.36669L13.4268 6.95002L13.5435 7.89169ZM9.00185 5.16669C7.16018 5.16669 5.66852 6.65835 5.66852 8.50002C5.66852 10.3417 7.16018 11.8334 9.00185 11.8334C10.8435 11.8334 12.3352 10.3417 12.3352 8.50002C12.3352 6.65835 10.8435 5.16669 9.00185 5.16669ZM9.00185 10.1667C8.08518 10.1667 7.33518 9.41669 7.33518 8.50002C7.33518 7.58335 8.08518 6.83335 9.00185 6.83335C9.91852 6.83335 10.6685 7.58335 10.6685 8.50002C10.6685 9.41669 9.91852 10.1667 9.00185 10.1667Z\"\r\n// fill=\"#1E1E1E\"\r\n// />\r\n// </svg>\r\n// );\r\n// };\r\n\r\nexport const DropDownIcon = () => {\r\n return (\r\n <svg\r\n width=\"10\"\r\n height=\"7\"\r\n viewBox=\"0 0 10 7\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M8.825 0.412476L5 4.22914L1.175 0.412476L0 1.58748L5 6.58748L10 1.58748L8.825 0.412476Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const AddIcon = ({ ...props }) => {\r\n return (\r\n <svg\r\n width=\"10\"\r\n height=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M4.50002 5.50002H1.16669C1.02502 5.50002 0.906298 5.45208 0.81052 5.35619C0.714632 5.2603 0.666687 5.14152 0.666687 4.99985C0.666687 4.85808 0.714632 4.73935 0.81052 4.64369C0.906298 4.54791 1.02502 4.50002 1.16669 4.50002H4.50002V1.16669C4.50002 1.02502 4.54797 0.906298 4.64385 0.81052C4.73974 0.714632 4.85852 0.666687 5.00019 0.666687C5.14197 0.666687 5.26069 0.714632 5.35635 0.81052C5.45213 0.906298 5.50002 1.02502 5.50002 1.16669V4.50002H8.83335C8.97502 4.50002 9.09374 4.54797 9.18952 4.64385C9.28541 4.73974 9.33335 4.85852 9.33335 5.00019C9.33335 5.14197 9.28541 5.26069 9.18952 5.35635C9.09374 5.45213 8.97502 5.50002 8.83335 5.50002H5.50002V8.83335C5.50002 8.97502 5.45208 9.09374 5.35619 9.18952C5.2603 9.28541 5.14152 9.33335 4.99985 9.33335C4.85808 9.33335 4.73935 9.28541 4.64369 9.18952C4.54791 9.09374 4.50002 8.97502 4.50002 8.83335V5.50002Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChevronDownIcon = () => {\r\n return (\r\n <svg\r\n width=\"12\"\r\n height=\"6\"\r\n viewBox=\"0 0 12 6\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1 0.5L6 5.5L11 0.5\"\r\n stroke=\"#181D27\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const CheckBox = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.72054 8.43116L4.17187 6.88233C4.07954 6.7901 3.96349 6.74288 3.82371 6.74066C3.68404 6.73855 3.56587 6.78577 3.46921 6.88233C3.37265 6.97899 3.32437 7.0961 3.32437 7.23366C3.32437 7.37121 3.37265 7.48833 3.46921 7.58499L5.29871 9.41449C5.41926 9.53494 5.55987 9.59516 5.72054 9.59516C5.88121 9.59516 6.02182 9.53494 6.14237 9.41449L9.85137 5.70549C9.9436 5.61316 9.99082 5.4971 9.99304 5.35733C9.99515 5.21766 9.94793 5.09949 9.85137 5.00283C9.75471 4.90627 9.6376 4.85799 9.50004 4.85799C9.36249 4.85799 9.24537 4.90627 9.14871 5.00283L5.72054 8.43116ZM6.66787 13.3337C5.79187 13.3337 4.96848 13.1674 4.19771 12.835C3.42693 12.5025 2.75648 12.0514 2.18637 11.4815C1.61626 10.9116 1.16487 10.2414 0.832207 9.47099C0.499652 8.70055 0.333374 7.87738 0.333374 7.00149C0.333374 6.12549 0.499596 5.3021 0.832041 4.53133C1.16449 3.76055 1.61565 3.0901 2.18554 2.51999C2.75543 1.94988 3.4256 1.49849 4.19604 1.16583C4.96649 0.83327 5.78965 0.666992 6.66554 0.666992C7.54154 0.666992 8.36493 0.833214 9.13571 1.16566C9.90649 1.4981 10.5769 1.94927 11.147 2.51916C11.7172 3.08905 12.1685 3.75921 12.5012 4.52966C12.8338 5.3001 13 6.12327 13 6.99916C13 7.87516 12.8338 8.69855 12.5014 9.46933C12.1689 10.2401 11.7178 10.9105 11.1479 11.4807C10.578 12.0508 9.90782 12.5022 9.13737 12.8348C8.36693 13.1674 7.54376 13.3337 6.66787 13.3337Z\"\r\n fill=\"#16B364\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const CrossBox = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6.66659 7.70283L8.71525 9.75166C8.80759 9.84388 8.92364 9.8911 9.06342 9.89333C9.20309 9.89544 9.32125 9.84821 9.41792 9.75166C9.51447 9.65499 9.56275 9.53788 9.56275 9.40033C9.56275 9.26277 9.51447 9.14566 9.41792 9.04899L7.36909 7.00033L9.41792 4.95166C9.51014 4.85933 9.55736 4.74327 9.55959 4.60349C9.5617 4.46383 9.51447 4.34566 9.41792 4.24899C9.32125 4.15244 9.20414 4.10416 9.06659 4.10416C8.92903 4.10416 8.81192 4.15244 8.71525 4.24899L6.66659 6.29783L4.61792 4.24899C4.52559 4.15677 4.40953 4.10955 4.26975 4.10733C4.13009 4.10521 4.01192 4.15244 3.91525 4.24899C3.8187 4.34566 3.77042 4.46277 3.77042 4.60033C3.77042 4.73788 3.8187 4.85499 3.91525 4.95166L5.96409 7.00033L3.91525 9.04899C3.82303 9.14133 3.77581 9.25738 3.77359 9.39716C3.77147 9.53683 3.8187 9.65499 3.91525 9.75166C4.01192 9.84821 4.12903 9.89649 4.26659 9.89649C4.40414 9.89649 4.52125 9.84821 4.61792 9.75166L6.66659 7.70283ZM6.66775 13.3337C5.79175 13.3337 4.96836 13.1674 4.19759 12.835C3.42681 12.5025 2.75636 12.0514 2.18625 11.4815C1.61614 10.9116 1.16475 10.2414 0.832085 9.47099C0.49953 8.70055 0.333252 7.87738 0.333252 7.00149C0.333252 6.12549 0.499474 5.3021 0.831919 4.53133C1.16436 3.76055 1.61553 3.0901 2.18542 2.51999C2.75531 1.94988 3.42547 1.49849 4.19592 1.16583C4.96636 0.83327 5.78953 0.666992 6.66542 0.666992C7.54142 0.666992 8.36481 0.833214 9.13559 1.16566C9.90636 1.4981 10.5768 1.94927 11.1469 2.51916C11.717 3.08905 12.1684 3.75921 12.5011 4.52966C12.8336 5.3001 12.9999 6.12327 12.9999 6.99916C12.9999 7.87516 12.8337 8.69855 12.5013 9.46933C12.1688 10.2401 11.7176 10.9105 11.1478 11.4807C10.5779 12.0508 9.9077 12.5022 9.13725 12.8348C8.36681 13.1674 7.54364 13.3337 6.66775 13.3337Z\"\r\n fill=\"#F63D68\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const EyeIcon = () => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_6673_82208\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6673_82208)\">\r\n <path\r\n d=\"M8.00147 10.3847C8.75692 10.3847 9.39853 10.1203 9.92631 9.5915C10.4541 9.06272 10.718 8.42061 10.718 7.66517C10.718 6.90972 10.4536 6.26811 9.9248 5.74033C9.39603 5.21256 8.75392 4.94867 7.99847 4.94867C7.24303 4.94867 6.60142 5.21306 6.07364 5.74183C5.54586 6.27061 5.28197 6.91272 5.28197 7.66817C5.28197 8.42361 5.54636 9.06522 6.07514 9.593C6.60392 10.1208 7.24603 10.3847 8.00147 10.3847ZM7.99997 9.46667C7.49997 9.46667 7.07497 9.29167 6.72497 8.94167C6.37497 8.59167 6.19997 8.16667 6.19997 7.66667C6.19997 7.16667 6.37497 6.74167 6.72497 6.39167C7.07497 6.04167 7.49997 5.86667 7.99997 5.86667C8.49997 5.86667 8.92497 6.04167 9.27497 6.39167C9.62497 6.74167 9.79997 7.16667 9.79997 7.66667C9.79997 8.16667 9.62497 8.59167 9.27497 8.94167C8.92497 9.29167 8.49997 9.46667 7.99997 9.46667ZM7.99997 12.3333C6.59653 12.3333 5.31297 11.9589 4.1493 11.2102C2.98564 10.4615 2.0568 9.4765 1.3628 8.25517C1.30725 8.15939 1.26664 8.06289 1.24097 7.96567C1.21541 7.86844 1.20264 7.76867 1.20264 7.66633C1.20264 7.564 1.21541 7.46433 1.24097 7.36733C1.26664 7.27033 1.30725 7.17394 1.3628 7.07817C2.0568 5.85683 2.98564 4.87183 4.1493 4.12317C5.31297 3.37439 6.59653 3 7.99997 3C9.40342 3 10.687 3.37439 11.8506 4.12317C13.0143 4.87183 13.9431 5.85683 14.6371 7.07817C14.6927 7.17394 14.7333 7.27044 14.759 7.36767C14.7845 7.46489 14.7973 7.56467 14.7973 7.667C14.7973 7.76933 14.7845 7.869 14.759 7.966C14.7333 8.063 14.6927 8.15939 14.6371 8.25517C13.9431 9.4765 13.0143 10.4615 11.8506 11.2102C10.687 11.9589 9.40342 12.3333 7.99997 12.3333ZM7.99997 11.3333C9.25553 11.3333 10.4083 11.0028 11.4583 10.3417C12.5083 9.68055 13.3111 8.78889 13.8666 7.66667C13.3111 6.54444 12.5083 5.65278 11.4583 4.99167C10.4083 4.33056 9.25553 4 7.99997 4C6.74442 4 5.59164 4.33056 4.54164 4.99167C3.49164 5.65278 2.68886 6.54444 2.1333 7.66667C2.68886 8.78889 3.49164 9.68055 4.54164 10.3417C5.59164 11.0028 6.74442 11.3333 7.99997 11.3333Z\"\r\n fill=\"#505050\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ClosedEyeIcon = () => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_6673_82183\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6673_82183)\">\r\n <path\r\n d=\"M9.91793 5.74876C10.1888 6.01976 10.3982 6.34903 10.5461 6.73659C10.694 7.12426 10.7499 7.51337 10.7139 7.90392C10.7139 8.03215 10.6678 8.1407 10.5756 8.22959C10.4833 8.31848 10.373 8.36292 10.2448 8.36292C10.1165 8.36292 10.008 8.31848 9.9191 8.22959C9.83021 8.1407 9.78576 8.03215 9.78576 7.90392C9.82854 7.61081 9.80443 7.33303 9.71343 7.07059C9.62243 6.80826 9.48248 6.58264 9.29359 6.39376C9.1047 6.20487 8.87693 6.06148 8.61026 5.96359C8.34359 5.8657 8.06237 5.84026 7.76659 5.88726C7.63837 5.89159 7.52771 5.84864 7.43459 5.75842C7.34137 5.66831 7.29265 5.55914 7.28843 5.43092C7.28409 5.3027 7.32532 5.19198 7.41209 5.09876C7.49887 5.00564 7.60637 4.95698 7.73459 4.95276C8.12259 4.90831 8.51254 4.95892 8.90443 5.10459C9.29632 5.25037 9.63415 5.46509 9.91793 5.74876ZM7.99993 4.00009C7.76315 4.00009 7.53087 4.01165 7.30309 4.03476C7.07532 4.05776 6.84859 4.09576 6.62293 4.14876C6.48104 4.17787 6.35326 4.15759 6.23959 4.08792C6.12593 4.01826 6.04776 3.91803 6.00509 3.78726C5.96232 3.65226 5.97643 3.52387 6.04743 3.40209C6.11832 3.28031 6.22126 3.20487 6.35626 3.17576C6.62471 3.11164 6.89587 3.06637 7.16976 3.03992C7.44376 3.01337 7.72048 3.00009 7.99993 3.00009C9.43237 3.00009 10.7482 3.37231 11.9474 4.11676C13.1465 4.8612 14.0687 5.86848 14.7139 7.13859C14.7584 7.22315 14.7907 7.30837 14.8108 7.39426C14.8309 7.48014 14.8409 7.57098 14.8409 7.66676C14.8409 7.76253 14.8326 7.85337 14.8159 7.93926C14.7993 8.02515 14.7687 8.11037 14.7243 8.19492C14.52 8.62226 14.2718 9.02076 13.9794 9.39042C13.6871 9.76009 13.3653 10.0996 13.0139 10.4091C12.9106 10.5014 12.7925 10.5396 12.6596 10.5238C12.5266 10.508 12.4174 10.4415 12.3319 10.3244C12.2465 10.2073 12.211 10.0817 12.2256 9.94759C12.2402 9.81337 12.2991 9.70009 12.4024 9.60776C12.7033 9.33509 12.9777 9.03703 13.2256 8.71359C13.4735 8.39003 13.6872 8.04109 13.8666 7.66676C13.311 6.54453 12.5083 5.65287 11.4583 4.99176C10.4083 4.33065 9.25548 4.00009 7.99993 4.00009ZM7.99993 12.3334C6.59648 12.3334 5.31015 11.9584 4.14093 11.2084C2.97171 10.4584 2.04226 9.47059 1.35259 8.24492C1.29704 8.16037 1.25643 8.06848 1.23076 7.96926C1.20509 7.87014 1.19226 7.76931 1.19226 7.66676C1.19226 7.5642 1.20337 7.46503 1.22559 7.36926C1.24782 7.27359 1.28671 7.18003 1.34226 7.08859C1.59015 6.63559 1.87093 6.20415 2.18459 5.79426C2.49826 5.38448 2.85893 5.0172 3.26659 4.69242L1.76143 3.17692C1.66921 3.07781 1.62371 2.96009 1.62493 2.82376C1.62626 2.68742 1.67521 2.57098 1.77176 2.47442C1.86832 2.37787 1.98543 2.32959 2.12309 2.32959C2.26065 2.32959 2.37771 2.37787 2.47426 2.47442L13.5256 13.5258C13.6179 13.6181 13.6669 13.7324 13.6724 13.8686C13.678 14.0049 13.629 14.1248 13.5256 14.2283C13.429 14.3248 13.3119 14.3731 13.1743 14.3731C13.0367 14.3731 12.9197 14.3248 12.8231 14.2283L10.4769 11.9026C10.0837 12.0547 9.67959 12.1645 9.2646 12.2321C8.84971 12.2996 8.42815 12.3334 7.99993 12.3334ZM3.96926 5.39492C3.57859 5.6967 3.22748 6.03792 2.91593 6.41859C2.60437 6.79937 2.34348 7.21542 2.13326 7.66676C2.68882 8.78898 3.49159 9.68064 4.54159 10.3418C5.59159 11.0029 6.74437 11.3334 7.99993 11.3334C8.28626 11.3334 8.56809 11.3142 8.84543 11.2758C9.12276 11.2373 9.3982 11.1779 9.67176 11.0976L8.82809 10.2334C8.69309 10.2924 8.55826 10.3324 8.42359 10.3533C8.28904 10.3743 8.14782 10.3848 7.99993 10.3848C7.24348 10.3848 6.60137 10.1209 6.07359 9.59309C5.54582 9.06531 5.28193 8.4232 5.28193 7.66676C5.28193 7.51887 5.29348 7.37765 5.31659 7.24309C5.33971 7.10842 5.37859 6.97359 5.43326 6.83859L3.96926 5.39492Z\"\r\n fill=\"#C5C5C5\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SettingIcon: React.FC = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"21\"\r\n viewBox=\"0 0 20 21\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M11.3748 18.8346H8.62484C8.47206 18.8346 8.33664 18.786 8.21859 18.6888C8.10053 18.5916 8.02762 18.4666 7.99984 18.3138L7.6665 16.2096C7.40262 16.1124 7.12484 15.9805 6.83317 15.8138C6.5415 15.6471 6.28456 15.4735 6.06234 15.293L4.12484 16.1888C3.97206 16.2582 3.81928 16.2687 3.6665 16.2201C3.51373 16.1714 3.39567 16.0707 3.31234 15.918L1.93734 13.4805C1.854 13.3416 1.83317 13.1957 1.87484 13.043C1.9165 12.8902 1.99984 12.7652 2.12484 12.668L3.9165 11.3555C3.88873 11.2305 3.87137 11.0881 3.86442 10.9284C3.85748 10.7687 3.854 10.6263 3.854 10.5013C3.854 10.3763 3.85748 10.2339 3.86442 10.0742C3.87137 9.9145 3.88873 9.77214 3.9165 9.64714L2.12484 8.33464C1.99984 8.23741 1.9165 8.11241 1.87484 7.95964C1.83317 7.80686 1.854 7.66102 1.93734 7.52214L3.31234 5.08464C3.39567 4.93186 3.51373 4.83116 3.6665 4.78255C3.81928 4.73394 3.97206 4.74436 4.12484 4.8138L6.06234 5.70964C6.28456 5.52908 6.5415 5.35547 6.83317 5.1888C7.12484 5.02214 7.40262 4.89714 7.6665 4.8138L7.99984 2.6888C8.02762 2.53602 8.10053 2.41102 8.21859 2.3138C8.33664 2.21658 8.47206 2.16797 8.62484 2.16797H11.3748C11.5276 2.16797 11.663 2.21658 11.7811 2.3138C11.8991 2.41102 11.9721 2.53602 11.9998 2.6888L12.3332 4.79297C12.5971 4.89019 12.8783 5.01866 13.1769 5.17839C13.4755 5.33811 13.729 5.51519 13.9373 5.70964L15.8748 4.8138C16.0276 4.74436 16.1804 4.73394 16.3332 4.78255C16.4859 4.83116 16.604 4.93186 16.6873 5.08464L18.0623 7.5013C18.1457 7.64019 18.17 7.7895 18.1353 7.94922C18.1005 8.10894 18.0137 8.23741 17.8748 8.33464L16.0832 9.60547C16.1109 9.74436 16.1283 9.89366 16.1353 10.0534C16.1422 10.2131 16.1457 10.3624 16.1457 10.5013C16.1457 10.6402 16.1422 10.786 16.1353 10.9388C16.1283 11.0916 16.1109 11.2374 16.0832 11.3763L17.8748 12.668C17.9998 12.7652 18.0832 12.8902 18.1248 13.043C18.1665 13.1957 18.1457 13.3416 18.0623 13.4805L16.6873 15.918C16.604 16.0707 16.4859 16.1714 16.3332 16.2201C16.1804 16.2687 16.0276 16.2582 15.8748 16.1888L13.9373 15.293C13.7151 15.4735 13.4616 15.6506 13.1769 15.8242C12.8922 15.9978 12.6109 16.1263 12.3332 16.2096L11.9998 18.3138C11.9721 18.4666 11.8991 18.5916 11.7811 18.6888C11.663 18.786 11.5276 18.8346 11.3748 18.8346ZM9.99984 13.2096C10.7498 13.2096 11.3887 12.9457 11.9165 12.418C12.4443 11.8902 12.7082 11.2513 12.7082 10.5013C12.7082 9.7513 12.4443 9.11241 11.9165 8.58464C11.3887 8.05686 10.7498 7.79297 9.99984 7.79297C9.24984 7.79297 8.61095 8.05686 8.08317 8.58464C7.55539 9.11241 7.2915 9.7513 7.2915 10.5013C7.2915 11.2513 7.55539 11.8902 8.08317 12.418C8.61095 12.9457 9.24984 13.2096 9.99984 13.2096ZM9.99984 11.9596C9.59706 11.9596 9.25331 11.8173 8.96859 11.5326C8.68387 11.2478 8.5415 10.9041 8.5415 10.5013C8.5415 10.0985 8.68387 9.75477 8.96859 9.47005C9.25331 9.18533 9.59706 9.04297 9.99984 9.04297C10.4026 9.04297 10.7464 9.18533 11.0311 9.47005C11.3158 9.75477 11.4582 10.0985 11.4582 10.5013C11.4582 10.9041 11.3158 11.2478 11.0311 11.5326C10.7464 11.8173 10.4026 11.9596 9.99984 11.9596ZM9.08317 17.5846H10.9165L11.2082 15.2513C11.6665 15.1402 12.1005 14.9666 12.5103 14.7305C12.92 14.4944 13.2915 14.2096 13.6248 13.8763L15.8332 14.8346L16.6665 13.3346L14.7082 11.8971C14.7637 11.661 14.8089 11.4284 14.8436 11.1992C14.8783 10.9701 14.8957 10.7374 14.8957 10.5013C14.8957 10.2652 14.8818 10.0326 14.854 9.80339C14.8262 9.57422 14.7776 9.34158 14.7082 9.10547L16.6665 7.66797L15.8332 6.16797L13.6248 7.1263C13.3054 6.76519 12.9443 6.46311 12.5415 6.22005C12.1387 5.977 11.6943 5.82075 11.2082 5.7513L10.9165 3.41797H9.08317L8.7915 5.7513C8.31928 5.84852 7.87831 6.01519 7.46859 6.2513C7.05887 6.48741 6.69428 6.77908 6.37484 7.1263L4.1665 6.16797L3.33317 7.66797L5.2915 9.10547C5.23595 9.34158 5.19081 9.57422 5.15609 9.80339C5.12137 10.0326 5.104 10.2652 5.104 10.5013C5.104 10.7374 5.12137 10.9701 5.15609 11.1992C5.19081 11.4284 5.23595 11.661 5.2915 11.8971L3.33317 13.3346L4.1665 14.8346L6.37484 13.8763C6.70817 14.2096 7.0797 14.4944 7.48942 14.7305C7.89914 14.9666 8.33317 15.1402 8.7915 15.2513L9.08317 17.5846Z\"\r\n fill=\"#0E0C0B\"\r\n fill-opacity=\"0.7\"\r\n />\r\n </svg>\r\n);\r\n","import {\r\n BoardIcon,\r\n CalendarIcon,\r\n ChartsIcon,\r\n CloseIcon,\r\n GalleryIcon,\r\n ListIcon,\r\n TableIcon,\r\n TimeLineIcon,\r\n} from \"../../assets/svg\";\r\nimport { Box, Typography, ButtonBase, Grid, IconButton } from \"@mui/material\";\r\n\r\ninterface LayoutSelectorProps {\r\n onSelect: (layout: string) => void;\r\n selectedLayout?: string;\r\n}\r\n\r\nconst layoutIcons: Record<string, JSX.Element> = {\r\n Board: <BoardIcon />,\r\n Table: <TableIcon />,\r\n Timeline: <TimeLineIcon />,\r\n List: <ListIcon />,\r\n Calendar: <CalendarIcon />,\r\n Gallery: <GalleryIcon />,\r\n Charts: <ChartsIcon />,\r\n};\r\n\r\nconst LayoutSelector = ({ onSelect, selectedLayout }: LayoutSelectorProps) => {\r\n return (\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n maxWidth: \"500px\",\r\n height: \"330px\",\r\n // backgroundColor: \"#fff\",\r\n // borderRadius: 2,\r\n // overflow: \"hidden\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n px: 3,\r\n py: 2,\r\n // borderBottom: \"1px solid #eee\",\r\n backgroundColor: \"#FBFBFC\",\r\n }}\r\n >\r\n <Typography\r\n variant=\"h5\"\r\n sx={{ fontWeight: 400, fontSize: 18, color: \"#0C2033\" }}\r\n >\r\n Layouts\r\n </Typography>\r\n <IconButton onClick={() => onSelect(\"close\")}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Layout Grid */}\r\n <Grid container spacing={2} sx={{ p: 3 }}>\r\n {Object.keys(layoutIcons).map((layout) => {\r\n const isSelected = layout === selectedLayout;\r\n return (\r\n <Grid size={3} key={layout}>\r\n <ButtonBase\r\n onClick={() => onSelect(layout)}\r\n sx={{\r\n border: isSelected\r\n ? \"1.5px solid #1E1E1E\"\r\n : \"1.5px solid #E5E7EB\",\r\n borderRadius: 2,\r\n p: 2,\r\n width: \"100%\",\r\n height: \"100%\",\r\n flexDirection: \"column\",\r\n backgroundColor: isSelected ? \"#fff\" : \"\",\r\n transition: \"0.3s\",\r\n boxShadow: isSelected\r\n ? \"0px 2px 6px rgba(0,0,0,0.06)\"\r\n : \"none\",\r\n }}\r\n >\r\n <Box mb={1}>{layoutIcons[layout]}</Box>\r\n <Typography\r\n variant=\"subtitle1\"\r\n sx={{\r\n color: \"#1E1E1E\",\r\n fontWeight: isSelected ? 400 : 200,\r\n opacity: isSelected ? 1 : 0.5,\r\n }}\r\n >\r\n {layout}\r\n </Typography>\r\n </ButtonBase>\r\n </Grid>\r\n );\r\n })}\r\n </Grid>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LayoutSelector;\r\n","import React, { useEffect } from \"react\";\r\n\r\ninterface OutsideClickHandlerProps {\r\n ref: React.RefObject<HTMLElement>;\r\n handler: () => void;\r\n}\r\n\r\nconst useOutsideClick = ({ ref, handler }: OutsideClickHandlerProps) => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n handler();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [ref, handler]);\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport function useFullscreenPopoverContainer() {\r\n const [isFullscreen, setIsFullscreen] = useState<boolean>(\r\n !!document.fullscreenElement\r\n );\r\n const [container, setContainer] = useState<Element | undefined>(\r\n document.fullscreenElement ?? undefined\r\n );\r\n\r\n useEffect(() => {\r\n const handleFullscreenChange = () => {\r\n const el = document.fullscreenElement ?? undefined;\r\n setIsFullscreen(!!el);\r\n setContainer(el);\r\n };\r\n\r\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n return () => {\r\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n };\r\n }, []);\r\n\r\n return { isFullscreen, container };\r\n}\r\n","import React from \"react\";\r\nimport {\r\n Popover,\r\n Typography,\r\n Box,\r\n MenuItem,\r\n Select,\r\n IconButton,\r\n Switch as MUISwitch,\r\n} from \"@mui/material\";\r\nimport { CloseIcon, ViewMoreIcon } from \"../../../assets/svg\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\n\r\n// interface ViewMorePopoverProps {\r\n// compactMode: boolean;\r\n// onCompactToggle: (value: string) => void;\r\n// isFullscreen: boolean;\r\n// onFullscreenToggle: () => void;\r\n// groupBy: string;\r\n// onGroupByChange: (value: string) => void;\r\n// tableStates: CraftTableOptionsProps;\r\n// }\r\n\r\n// const ViewMore = ({\r\n// compactMode,\r\n// onCompactToggle,\r\n// isFullscreen,\r\n// onFullscreenToggle,\r\n// // groupBy,\r\n// // onGroupByChange,\r\n// tableStates,\r\n// }: ViewMorePopoverProps) => {\r\n// const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n\r\n// const open = Boolean(anchorEl);\r\n// const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n// const handleClick = (event: React.MouseEvent<HTMLElement>) => {\r\n// setAnchorEl(event.currentTarget);\r\n// };\r\n\r\n// const handleClose = () => {\r\n// setAnchorEl(null);\r\n// };\r\n\r\n// const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n// const onWrapCellToggle = () => {\r\n// setWrapColumns((prev: Record<string, boolean>) => ({\r\n// all_wrap: !prev[\"all_wrap\"],\r\n// }));\r\n// };\r\n\r\n// return (\r\n// <>\r\n// <div onClick={handleClick}>\r\n// <ViewMoreIcon />\r\n// </div>\r\n\r\n// <Popover\r\n// open={open}\r\n// anchorEl={anchorEl}\r\n// onClose={handleClose}\r\n// container={fullscreenContainer}\r\n// anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n// transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n// PaperProps={{\r\n// sx: {\r\n// mt: 2,\r\n// padding: 3,\r\n// width: 380,\r\n// borderRadius: 1,\r\n// boxShadow: 4,\r\n// },\r\n// }}\r\n// >\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// px={2}\r\n// py={2}\r\n// sx={{\r\n// backgroundColor: \"#F9FAFB\",\r\n// // borderBottom: \"1px solid #E0E0E0\",\r\n// // borderTopLeftRadius: 4,\r\n// // borderTopRightRadius: 4,\r\n// margin: \"-24px -24px 24px -24px\",\r\n// }}\r\n// >\r\n// <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n// View\r\n// </Typography>\r\n// <IconButton size=\"small\" onClick={handleClose}>\r\n// <CloseIcon />\r\n// </IconButton>\r\n// </Box>\r\n\r\n// {/* Wrap Cell */}\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Wrap Cell\r\n// </Typography>\r\n// <MUISwitch\r\n// checked={wrapColumns?.all_wrap || false}\r\n// onChange={onWrapCellToggle}\r\n// />\r\n// </Box>\r\n\r\n// {/* List View */}\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// List View\r\n// </Typography>\r\n// <Select\r\n// size=\"small\"\r\n// value={compactMode ? \"Compact\" : \"Comfy\"}\r\n// onChange={(e) => onCompactToggle(e.target.value)}\r\n// sx={{\r\n// minWidth: 120,\r\n// fontWeight: 400,\r\n// color: \"#000\",\r\n// fontSize: \"13px\",\r\n// }}\r\n// MenuProps={{\r\n// container: fullscreenContainer,\r\n// disablePortal: false,\r\n// PaperProps: {\r\n// style: {\r\n// zIndex: 1500,\r\n// },\r\n// },\r\n// }}\r\n// >\r\n// <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n// <MenuItem value=\"Compact\">Compact</MenuItem>\r\n// </Select>\r\n// </Box>\r\n\r\n// {/* Group By */}\r\n// {/* <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Group By\r\n// </Typography>\r\n// <Select\r\n// size=\"small\"\r\n// value={groupBy}\r\n// onChange={(e) => onGroupByChange(e.target.value)}\r\n// sx={{\r\n// minWidth: 120,\r\n// fontWeight: 400,\r\n// color: \"#000\",\r\n// fontSize: \"13px\",\r\n// }}\r\n// MenuProps={{\r\n// container: fullscreenContainer,\r\n// disablePortal: false,\r\n// PaperProps: {\r\n// style: {\r\n// zIndex: 1500,\r\n// },\r\n// },\r\n// }}\r\n// >\r\n// <MenuItem value=\"None\">None</MenuItem>\r\n// <MenuItem value=\"Status\">Status</MenuItem>\r\n// <MenuItem value=\"Owner\">Owner</MenuItem>\r\n// </Select>\r\n// </Box> */}\r\n\r\n// {/* Fullscreen */}\r\n// <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Fullscreen\r\n// </Typography>\r\n// <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n// </Box>\r\n// </Popover>\r\n// </>\r\n// );\r\n// };\r\n\r\n// export default ViewMore;\r\n\r\ninterface ViewMoreProps {\r\n compactMode: boolean;\r\n onCompactToggle: (value: string) => void;\r\n isFullscreen: boolean;\r\n onFullscreenToggle: () => void;\r\n groupBy?: string;\r\n onGroupByChange?: (value: string) => void;\r\n tableStates: CraftTableOptionsProps;\r\n onClose?: () => void;\r\n}\r\n\r\nconst ViewMore = ({\r\n compactMode,\r\n onCompactToggle,\r\n isFullscreen,\r\n onFullscreenToggle,\r\n // groupBy,\r\n // onGroupByChange,\r\n tableStates,\r\n onClose,\r\n}: ViewMoreProps) => {\r\n const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n const onWrapCellToggle = () => {\r\n setWrapColumns((prev: Record<string, boolean>) => ({\r\n all_wrap: !prev[\"all_wrap\"],\r\n }));\r\n };\r\n\r\n return (\r\n <Box sx={{ p: 3, width: 380 }}>\r\n {/* Header */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={3}\r\n >\r\n <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n View\r\n </Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Wrap Cell */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={2}\r\n >\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n Wrap Cell\r\n </Typography>\r\n <MUISwitch\r\n checked={wrapColumns?.all_wrap || false}\r\n onChange={onWrapCellToggle}\r\n />\r\n </Box>\r\n\r\n {/* List View */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={2}\r\n >\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n List View\r\n </Typography>\r\n <Select\r\n size=\"small\"\r\n value={compactMode ? \"Compact\" : \"Comfy\"}\r\n onChange={(e) => onCompactToggle(e.target.value)}\r\n sx={{\r\n minWidth: 120,\r\n fontWeight: 400,\r\n color: \"#000\",\r\n fontSize: \"13px\",\r\n }}\r\n MenuProps={{\r\n container: fullscreenContainer,\r\n disablePortal: false,\r\n PaperProps: {\r\n style: {\r\n zIndex: 1500,\r\n },\r\n },\r\n }}\r\n >\r\n <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n <MenuItem value=\"Compact\">Compact</MenuItem>\r\n </Select>\r\n </Box>\r\n\r\n {/* Fullscreen */}\r\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n Fullscreen\r\n </Typography>\r\n <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ViewMore;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DragHandleIcon } from \"../../../assets/svg\";\r\n\r\nconst SortableItem = ({\r\n id,\r\n children,\r\n}: {\r\n id: string;\r\n children: React.ReactNode;\r\n}) => {\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({ id });\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n style={{\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n }}\r\n >\r\n <span {...attributes} {...listeners} style={{ cursor: \"grab\" }}>\r\n <DragHandleIcon />\r\n </span>\r\n <div style={{ flexGrow: 1 }}>{children}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SortableItem;\r\n","import { useState } from \"react\";\r\nimport {\r\n Popover,\r\n Box,\r\n IconButton,\r\n MenuItem,\r\n Select,\r\n Typography,\r\n Button,\r\n} from \"@mui/material\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n useSensor,\r\n useSensors,\r\n MouseSensor,\r\n TouchSensor,\r\n KeyboardSensor,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport SortableItem from \"./sorting-item\";\r\nimport { AddIcon, CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface SortItem {\r\n id: string;\r\n field: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\ntype SortPopoverProps = {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n columns: { id: string; label: string }[];\r\n onChange: (sorting: { id: string; desc: boolean }[]) => void;\r\n};\r\n\r\nconst SortPopover = ({\r\n anchorEl,\r\n onClose,\r\n columns,\r\n onChange,\r\n}: SortPopoverProps) => {\r\n const [sorts, setSorts] = useState<SortItem[]>([]);\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const handleDragEnd = (event: any) => {\r\n const { active, over } = event;\r\n if (active.id !== over.id) {\r\n const oldIndex = sorts.findIndex((item) => item.id === active.id);\r\n const newIndex = sorts.findIndex((item) => item.id === over.id);\r\n const updated = arrayMove(sorts, oldIndex, newIndex);\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n }\r\n };\r\n\r\n const handleChange = (id: string, field: keyof SortItem, value: any) => {\r\n const updated = sorts.map((item) =>\r\n item.id === id ? { ...item, [field]: value } : item\r\n );\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const handleAddSort = () => {\r\n const newSort: SortItem = {\r\n id: Date.now().toString(),\r\n field: columns[0]?.id ?? \"\",\r\n direction: \"asc\",\r\n };\r\n const updated = [...sorts, newSort];\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const handleRemove = (id: string) => {\r\n const updated = sorts.filter((item) => item.id !== id);\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const triggerTableSortUpdate = (sortItems: SortItem[]) => {\r\n const sortingPayload = sortItems.map((item) => ({\r\n id: item.field,\r\n desc: item.direction === \"desc\",\r\n }));\r\n onChange(sortingPayload);\r\n };\r\n\r\n return (\r\n <Popover\r\n open={Boolean(anchorEl)}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n >\r\n <Box p={2} minWidth={300}>\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n px={2}\r\n py={1}\r\n sx={{\r\n backgroundColor: \"#F9FAFB\",\r\n // borderBottom: \"1px solid #E0E0E0\",\r\n margin: \"-16px -16px 16px -16px\",\r\n }}\r\n >\r\n <Typography fontSize=\"18px\" fontWeight={600} color=\"#0C2033\">\r\n Sort By\r\n </Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {sorts.length > 0 && (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={sorts.map((s) => s.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {sorts.map((sort) => (\r\n <SortableItem key={sort.id} id={sort.id}>\r\n <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n <Select\r\n value={sort.field}\r\n onChange={(e) =>\r\n handleChange(sort.id, \"field\", e.target.value)\r\n }\r\n size=\"small\"\r\n fullWidth\r\n sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n >\r\n {columns.map((col) => (\r\n <MenuItem key={col.id} value={col.id}>\r\n {col.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <Select\r\n value={sort.direction}\r\n onChange={(e) =>\r\n handleChange(sort.id, \"direction\", e.target.value)\r\n }\r\n size=\"small\"\r\n sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n >\r\n <MenuItem value=\"asc\">Ascending</MenuItem>\r\n <MenuItem value=\"desc\">Descending</MenuItem>\r\n </Select>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => handleRemove(sort.id)}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </SortableItem>\r\n ))}\r\n </SortableContext>\r\n </DndContext>\r\n )}\r\n\r\n <Button\r\n onClick={handleAddSort}\r\n startIcon={\r\n <span>\r\n <AddIcon />\r\n </span>\r\n }\r\n size=\"small\"\r\n sx={{\r\n fontWeight: 400,\r\n fontSize: 12,\r\n color: \"#888888\",\r\n }}\r\n >\r\n Add Sort\r\n </Button>\r\n </Box>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport default SortPopover;\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport {\r\n DragandDrogIcon,\r\n VisibilityIcon,\r\n VisibilityOffIcon,\r\n} from \"../../../assets/svg\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { camelCaseToTitle } from \"../../types/common\";\r\n\r\nconst DraggableColumn = ({\r\n column,\r\n onToggle,\r\n}: {\r\n column: any;\r\n onToggle: () => void;\r\n}) => {\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({\r\n id: column.id,\r\n });\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n };\r\n\r\n const isVisible = column.getIsVisible();\r\n const label =\r\n typeof column.columnDef.header === \"string\"\r\n ? column.columnDef.header\r\n : column.id;\r\n\r\n return (\r\n <div ref={setNodeRef} style={style} {...attributes} className=\"column-row\">\r\n <Box {...listeners} className=\"drag-icon\">\r\n <DragandDrogIcon />\r\n </Box>\r\n <Typography>{camelCaseToTitle(label as string)}</Typography>\r\n <Box onClick={onToggle} className=\"visibility-icon\">\r\n {isVisible ? <VisibilityIcon /> : <VisibilityOffIcon />}\r\n </Box>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DraggableColumn;\r\n","export interface defaultColumnsProps {\r\n id: number;\r\n name: string;\r\n department: string;\r\n position: string;\r\n email: string;\r\n location: string;\r\n phone: string;\r\n dateOfJoining: string;\r\n salary: number;\r\n performanceRating: string;\r\n subRows?: any;\r\n}\r\n\r\nexport interface amountFormatProps {\r\n amount: number;\r\n decimal?: boolean;\r\n removeFloat?: boolean;\r\n compactFormat?: \"crore\" | \"10lakh\" | \"lakh\";\r\n}\r\n\r\nexport interface formatDateProps {\r\n date: string;\r\n style: string;\r\n}\r\n\r\nexport type alignProps = \"left\" | \"center\" | \"right\";\r\nexport interface align {\r\n align: alignProps;\r\n}\r\n\r\nexport const camelCaseToTitle = (str: string): string => {\r\n if (!str) return \"\";\r\n\r\n return str\r\n .replace(/_/g, \" \") // Replace underscores with spaces\r\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // Add space between camelCase transitions\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) // Capitalize each word's first letter\r\n .trim();\r\n};\r\n\r\n//API INTEGRATION\r\nexport interface EntityTableAPIProps {\r\n entity_type?: string;\r\n page: number;\r\n size: number;\r\n tabs?: {\r\n columnName: string;\r\n sortBy: \"ASC\" | \"DSC\";\r\n value?: string;\r\n };\r\n sortby?: {\r\n sortColum: string;\r\n sortType: \"ASC\" | \"DSC\";\r\n }[];\r\n quickFilter?: {\r\n filter_attribute: string;\r\n filter_operator: string;\r\n filter_value: string[] | string;\r\n }[];\r\n attributeFilter?: {\r\n filter_attribute: string;\r\n filter_operator: string;\r\n filter_value: string[] | string;\r\n }[];\r\n}\r\n\r\nexport interface viewSettingsDropDownAPIProps {\r\n entity_type: string;\r\n column: string | undefined;\r\n sort_by: string | undefined;\r\n}\r\n\r\ninterface EntityListTab {\r\n tab_value: string | null;\r\n tab_value_count: string | number;\r\n}\r\n\r\ninterface EntityList {\r\n id: string;\r\n entity_type: string;\r\n name: string;\r\n status: string | null;\r\n parent_type: string | null;\r\n parent_id: string | null;\r\n code: string;\r\n created_by: string | null;\r\n created_date: string | null;\r\n modified_by: string | null;\r\n modified_date: string | null;\r\n enterprise_id: string | null;\r\n organization_id: number | null;\r\n app_code: string | null;\r\n is_system: number | null;\r\n description: string | null;\r\n}\r\n\r\nexport interface EntityListingResponse {\r\n data: {\r\n entity_tabs: EntityListTab[];\r\n entity_list: EntityList[];\r\n };\r\n}\r\n\r\nexport interface APIParamsProps {\r\n page?: number;\r\n size?: number;\r\n}\r\n\r\nexport type DropdownOption = {\r\n value: string | number;\r\n label: string;\r\n};\r\n","import React from \"react\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n useSensor,\r\n useSensors,\r\n MouseSensor,\r\n TouchSensor,\r\n KeyboardSensor,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n SortableContext,\r\n arrayMove,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { Popover, IconButton, Typography, Box } from \"@mui/material\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport DraggableColumn from \"./column-list-item\";\r\nimport \"./index.scss\";\r\nimport { CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface ColumnToggleProps<T> {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n table: Table<T>;\r\n columnOrder: string[];\r\n setColumnOrder: React.Dispatch<React.SetStateAction<string[]>>;\r\n}\r\n\r\nconst ColumnToggle = <T,>({\r\n anchorEl,\r\n onClose,\r\n table,\r\n columnOrder,\r\n setColumnOrder,\r\n}: ColumnToggleProps<T>) => {\r\n const open = Boolean(anchorEl);\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const allColumns = table.getAllLeafColumns();\r\n\r\n const shownColumns = columnOrder\r\n .map((id) => allColumns.find((col) => col.id === id))\r\n .filter((col) => col?.getIsVisible());\r\n\r\n const hiddenColumns = columnOrder\r\n .map((id) => allColumns.find((col) => col.id === id))\r\n .filter((col) => col && !col.getIsVisible());\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n if (!over || active.id === over.id) return;\r\n\r\n const activeCol = table.getColumn(active.id as string);\r\n const overCol = table.getColumn(over.id as string);\r\n if (!activeCol || !overCol) return;\r\n\r\n const activeVisible = activeCol.getIsVisible();\r\n const overVisible = overCol.getIsVisible();\r\n\r\n if (activeVisible !== overVisible) {\r\n activeCol.toggleVisibility();\r\n }\r\n\r\n const oldIndex = columnOrder.indexOf(active.id as string);\r\n const newIndex = columnOrder.indexOf(over.id as string);\r\n setColumnOrder(arrayMove(columnOrder, oldIndex, newIndex));\r\n };\r\n\r\n const toggleVisibility = (columnId: string) => {\r\n const col = table.getColumn(columnId);\r\n col?.toggleVisibility();\r\n };\r\n\r\n const handleHideAll = () => {\r\n allColumns.forEach((col) => col.toggleVisibility(false));\r\n };\r\n\r\n const handleShowAll = () => {\r\n allColumns.forEach((col) => col.toggleVisibility(true));\r\n };\r\n\r\n return (\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n sx={{ width: \"600px\" }}\r\n >\r\n <div className=\"column-manager\">\r\n <div className=\"header\">\r\n <Typography variant=\"h6\">Column</Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </div>\r\n\r\n <div className=\"content-wrapper\">\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <div className=\"list-section\">\r\n <div className=\"list-header\">\r\n <Typography variant=\"subtitle2\">Shown in List</Typography>\r\n {/* <button onClick={handleHideAll}>Hide All</button> */}\r\n <Box\r\n onClick={handleHideAll}\r\n fontStyle={{\r\n cursor: \"pointer\",\r\n color: \"#C5C5C5\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n Hide All\r\n </Box>\r\n </div>\r\n <SortableContext\r\n items={shownColumns.map((col) => col!.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {shownColumns.map((col) => (\r\n <DraggableColumn\r\n key={col!.id}\r\n column={col!}\r\n onToggle={() => toggleVisibility(col!.id)}\r\n />\r\n ))}\r\n </SortableContext>\r\n </div>\r\n\r\n <div className=\"list-section\">\r\n <div className=\"list-header\">\r\n <Typography variant=\"subtitle2\">Hidden in List</Typography>\r\n {/* <button onClick={handleShowAll}>Show All</button> */}\r\n <Box\r\n onClick={handleShowAll}\r\n fontStyle={{\r\n cursor: \"pointer\",\r\n color: \"#C5C5C5\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n Show All\r\n </Box>\r\n </div>\r\n <SortableContext\r\n items={hiddenColumns.map((col) => col!.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {hiddenColumns.map((col) => (\r\n <DraggableColumn\r\n key={col!.id}\r\n column={col!}\r\n onToggle={() => toggleVisibility(col!.id)}\r\n />\r\n ))}\r\n </SortableContext>\r\n </div>\r\n </DndContext>\r\n </div>\r\n </div>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport default ColumnToggle;\r\n","export const customDebounce = <T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number\r\n) => {\r\n let timerId: NodeJS.Timeout;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n const context = this;\r\n\r\n clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n func.apply(context, args);\r\n }, delay);\r\n };\r\n};\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\nexport interface StyleProps {\r\n searchField: (showSearchInput: boolean) => SxProps<Theme>;\r\n}\r\n\r\nexport const searchStyles: StyleProps = {\r\n searchField: (showSearchInput: boolean): SxProps<Theme> => ({\r\n width: showSearchInput ? \"180px\" : \"40px\",\r\n transition: \"all 0.3s ease\",\r\n opacity: showSearchInput ? 1 : 0.8,\r\n marginRight: \"0.5rem\",\r\n\r\n \"& .MuiOutlinedInput-root\": {\r\n paddingRight: \"4px\",\r\n height: \"32px\",\r\n borderRadius: \"6px\",\r\n backgroundColor: \"#fff\",\r\n border: showSearchInput ? \"1px solid #ccc\" : \"none\",\r\n },\r\n\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n\r\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {},\r\n\r\n \" & .css-4bojcr-MuiInputBase-root-MuiOutlinedInput-root \": {\r\n paddingLeft: \"6px !important\",\r\n },\r\n \"& .css-1mnoz6i-MuiInputBase-root-MuiOutlinedInput-root\": {\r\n paddingLeft: \"6px !important\",\r\n },\r\n }),\r\n};\r\n","import React, { useState, useRef, useEffect, useCallback } from \"react\";\r\nimport { SearchIcon } from \"../../../assets/svg\";\r\nimport useOutsideClick from \"../../libs/hooks/useOutsideClick\";\r\nimport { customDebounce } from \"../../libs/utils/debounce\";\r\nimport { Box, IconButton, InputAdornment, TextField } from \"@mui/material\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\nimport { searchStyles } from \"./style\";\r\n\r\ninterface TableSearchProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n}\r\n\r\nexport const TableSearch = ({\r\n value,\r\n onChange,\r\n}: TableSearchProps): JSX.Element => {\r\n const [showSearchInput, setShowSearchInput] = useState(false);\r\n const [localValue, setLocalValue] = useState(value);\r\n const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n // Debounced onChange function\r\n const debouncedOnChange = useCallback(\r\n customDebounce((newValue: string) => {\r\n onChange(newValue);\r\n }, 1000),\r\n [onChange]\r\n );\r\n\r\n // Sync local state with prop value\r\n useEffect(() => {\r\n setLocalValue(value);\r\n }, [value]);\r\n\r\n useOutsideClick({\r\n ref: searchContainerRef,\r\n handler: () => {\r\n setShowSearchInput(false);\r\n },\r\n });\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n setLocalValue(newValue);\r\n debouncedOnChange(newValue);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\") {\r\n onChange(localValue);\r\n }\r\n if (e.key === \"Escape\") {\r\n setShowSearchInput(false);\r\n }\r\n };\r\n\r\n return (\r\n <Box\r\n ref={searchContainerRef}\r\n className=\"search-container\"\r\n sx={{\r\n display: \"flex\",\r\n position: \"relative\",\r\n top: \"10px\",\r\n }}\r\n >\r\n <TextField\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n value={localValue}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n className={`search-input ${showSearchInput ? \"expanded\" : \"\"}`}\r\n sx={searchStyles.searchField(showSearchInput)}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setShowSearchInput((prev) => !prev);\r\n if (!showSearchInput) {\r\n setTimeout(() => {\r\n searchContainerRef.current\r\n ?.querySelector(\"input\")\r\n ?.focus();\r\n }, 100);\r\n }\r\n }}\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n edge=\"start\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n endAdornment:\r\n showSearchInput && localValue !== \"\" ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setLocalValue(\"\");\r\n handleChange({ target: { value: \"\" } } as any);\r\n }}\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n edge=\"end\"\r\n >\r\n <CloseRoundedIcon\r\n fontSize=\"small\"\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n />\r\n </IconButton>\r\n </InputAdornment>\r\n ) : null,\r\n }}\r\n />\r\n </Box>\r\n );\r\n};\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport {\r\n ChangeLayoutIcon,\r\n SortingIcon,\r\n FilterationIcon,\r\n HideColumnIcon,\r\n} from \"../../../assets/svg.tsx\";\r\nimport { Popover } from \"@mui/material\";\r\nimport LayoutSelector from \"../table-change-layout.tsx\";\r\nimport useOutsideClick from \"../../libs/hooks/useOutsideClick.tsx\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport { TopbarOptionsProps } from \"../../types/table.ts\";\r\nimport \"./index.scss\";\r\nimport ViewMore from \"../viewmore/index.tsx\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen.tsx\";\r\nimport SortPopover from \"../sorting-modal.tsx/index.tsx\";\r\nimport ColumnToggle from \"../column-visibility-modal/index.tsx\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options.ts\";\r\nimport { TableSearch } from \"../search/index.tsx\";\r\n\r\ninterface TopbarProps<T> {\r\n table: Table<T>;\r\n isFullscreen: boolean;\r\n fullscreenToggle: () => void;\r\n isCompactTable: boolean;\r\n setIsCompactTable: React.Dispatch<React.SetStateAction<boolean>>;\r\n paginationComponent?: React.ReactNode;\r\n topbarOptions?: TopbarOptionsProps;\r\n columnOrder?: string[];\r\n setColumnOrder?: React.Dispatch<React.SetStateAction<string[]>>;\r\n tableStates: CraftTableOptionsProps;\r\n searchValue?: string;\r\n onSearchChange?: (val: string) => void;\r\n onFilterButtonClick?: () => void;\r\n}\r\n\r\nfunction Topbar<T>({\r\n table,\r\n isCompactTable,\r\n isFullscreen,\r\n fullscreenToggle,\r\n setIsCompactTable,\r\n paginationComponent,\r\n topbarOptions,\r\n tableStates,\r\n onFilterButtonClick,\r\n}: TopbarProps<T>) {\r\n const [sortAnchorEl, setSortAnchorEl] = useState<HTMLElement | null>(null);\r\n const [groupBy, setGroupBy] = useState<string>(\"None\");\r\n\r\n const [showColumnHiding, setShowColumnHiding] = useState(false);\r\n const [layoutAnchorEl, setLayoutAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n const [selectedLayout, setSelectedLayout] = useState(\"Table\");\r\n const [columnAnchorEl, setColumnAnchorEl] = useState<HTMLElement | null>(\r\n null\r\n );\r\n const [columnOrder, setColumnOrder] = useState<string[]>(\r\n table.getAllLeafColumns().map((col) => col.id)\r\n );\r\n\r\n //Filter\r\n // const [showFilterInput, setShowFilterInput] = useState(false);\r\n\r\n // search\r\n const [showSearchInput, setShowSearchInput] = useState(false);\r\n const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n // sync column order with table instance\r\n useEffect(() => {\r\n table.setColumnOrder(columnOrder);\r\n }, [columnOrder]);\r\n\r\n const {\r\n leftSideComponent,\r\n rightSideComponent,\r\n showColumnToggle,\r\n showChangeLayoutToggle,\r\n viewMoreToggle,\r\n showSortingToggle,\r\n showFilterToggle,\r\n showSearch,\r\n searchValue,\r\n onSearchChange,\r\n } = topbarOptions ?? {};\r\n\r\n const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n useOutsideClick({\r\n ref: dropdownRef,\r\n handler: () => setShowColumnHiding(false),\r\n });\r\n\r\n const handleLayoutIconClick = (event: React.MouseEvent<HTMLElement>) => {\r\n setLayoutAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleLayoutSelect = (layout: string) => {\r\n setSelectedLayout(layout);\r\n setLayoutAnchorEl(null);\r\n };\r\n\r\n useOutsideClick({\r\n ref: searchContainerRef,\r\n handler: () => setShowSearchInput(false),\r\n });\r\n\r\n useEffect(() => {\r\n const handleExternalLayoutTrigger = (e: Event) => {\r\n const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n setLayoutAnchorEl(target);\r\n };\r\n\r\n const handleExternalFilterTrigger = () => {\r\n onFilterButtonClick?.();\r\n };\r\n\r\n const handleExternalViewMoreTrigger = (e: Event) => {\r\n const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n if (target) setViewMoreAnchorEl(target);\r\n };\r\n\r\n const handleExternalSearchTrigger = () => {\r\n setShowSearchInput(true);\r\n setTimeout(() => {\r\n searchContainerRef.current?.querySelector(\"input\")?.focus();\r\n }, 100);\r\n };\r\n\r\n window.addEventListener(\r\n \"triggerLayoutPopover\",\r\n handleExternalLayoutTrigger\r\n );\r\n window.addEventListener(\"triggerFilterButton\", handleExternalFilterTrigger);\r\n window.addEventListener(\"triggerViewMore\", handleExternalViewMoreTrigger);\r\n window.addEventListener(\"triggerSearchInput\", handleExternalSearchTrigger); // ✅\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"triggerLayoutPopover\",\r\n handleExternalLayoutTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerFilterButton\",\r\n handleExternalFilterTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerViewMore\",\r\n handleExternalViewMoreTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerSearchInput\",\r\n handleExternalSearchTrigger\r\n ); // ✅\r\n };\r\n }, [onFilterButtonClick]);\r\n\r\n const [viewMoreAnchorEl, setViewMoreAnchorEl] = useState<HTMLElement | null>(\r\n null\r\n );\r\n\r\n const isViewMoreOpen = Boolean(viewMoreAnchorEl);\r\n\r\n return (\r\n <div className=\"ts-topbar\">\r\n <div className=\"tabs-section\">\r\n <div style={{ overflowX: \"auto\", whiteSpace: \"nowrap\" }}>\r\n {leftSideComponent}\r\n </div>\r\n </div>\r\n\r\n <div className=\"right-section\">\r\n {rightSideComponent}\r\n {paginationComponent}\r\n\r\n {/* {showSearch && (\r\n <div title=\"Search\">\r\n <TableSearch\r\n value={searchValue ?? \"\"}\r\n onChange={onSearchChange ?? (() => {})}\r\n />\r\n </div>\r\n )} */}\r\n {showSearch && (\r\n <div\r\n title=\"Search\"\r\n className=\"external-search-trigger\"\r\n onClick={() => {\r\n const customEvent = new CustomEvent(\"triggerSearchInput\");\r\n window.dispatchEvent(customEvent);\r\n }}\r\n ref={searchContainerRef}\r\n >\r\n <TableSearch\r\n value={searchValue ?? \"\"}\r\n onChange={onSearchChange ?? (() => {})}\r\n />\r\n </div>\r\n )}\r\n\r\n {showChangeLayoutToggle && (\r\n <>\r\n <div className=\"change-layout ts--button\" title=\"Layout\">\r\n {/* <div onClick={handleLayoutIconClick}>\r\n <ChangeLayoutIcon />\r\n </div> */}\r\n <div\r\n onClick={(e) => {\r\n const customEvent = new CustomEvent(\"triggerLayoutPopover\", {\r\n detail: { target: e.currentTarget },\r\n });\r\n window.dispatchEvent(customEvent);\r\n }}\r\n className=\"external-layout-trigger\"\r\n >\r\n <ChangeLayoutIcon />\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n <Popover\r\n open={Boolean(layoutAnchorEl)}\r\n anchorEl={layoutAnchorEl}\r\n onClose={() => setLayoutAnchorEl(null)}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n container={fullscreenContainer}\r\n sx={{\r\n mt: 2.2,\r\n }}\r\n >\r\n <LayoutSelector\r\n onSelect={handleLayoutSelect}\r\n selectedLayout={selectedLayout}\r\n />\r\n </Popover>\r\n {showColumnToggle && (\r\n <>\r\n <div\r\n className=\"hide-column ts--button\"\r\n onClick={(e) => setColumnAnchorEl(e.currentTarget)}\r\n title=\"Column\"\r\n >\r\n <HideColumnIcon />\r\n </div>\r\n <ColumnToggle\r\n anchorEl={columnAnchorEl}\r\n onClose={() => setColumnAnchorEl(null)}\r\n table={table}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n />\r\n </>\r\n )}\r\n\r\n {showSortingToggle && (\r\n <>\r\n <div\r\n className=\"filter ts--button\"\r\n title=\"Sort\"\r\n onClick={(e) => setSortAnchorEl(e.currentTarget)}\r\n >\r\n <SortingIcon />\r\n </div>\r\n <SortPopover\r\n anchorEl={sortAnchorEl}\r\n onClose={() => setSortAnchorEl(null)}\r\n columns={table.getAllLeafColumns().map((col) => ({\r\n id: col.id,\r\n label: (col.columnDef.meta as any)?.label || col.id,\r\n }))}\r\n onChange={(sortingRules) => table.setSorting(sortingRules)}\r\n />\r\n </>\r\n )}\r\n\r\n {showFilterToggle && (\r\n <div\r\n className=\"filter ts--button\"\r\n title=\"Filter\"\r\n onClick={onFilterButtonClick && onFilterButtonClick}\r\n >\r\n <FilterationIcon color=\"#1C1B1F\" />\r\n </div>\r\n )}\r\n\r\n {/* {viewMoreToggle && (\r\n <div className=\"view-more ts--button\" title=\"View More\">\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n />\r\n </div>\r\n )} */}\r\n {/* {viewMoreToggle && (\r\n <div\r\n className=\"view-more ts--button view-more-trigger\"\r\n title=\"View More\"\r\n >\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n />\r\n </div>\r\n )} */}\r\n <Popover\r\n open={isViewMoreOpen}\r\n anchorEl={viewMoreAnchorEl}\r\n onClose={() => setViewMoreAnchorEl(null)}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n // PaperProps={{\r\n // sx: {\r\n // mt: 2,\r\n // padding: 0,\r\n // width: 380,\r\n // borderRadius: 1,\r\n // boxShadow: 4,\r\n // },\r\n // }}\r\n >\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n onClose={() => setViewMoreAnchorEl(null)}\r\n />\r\n </Popover>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Topbar;\r\n","import { Table } from \"@tanstack/react-table\";\r\nimport {\r\n TableFirstPageIcon,\r\n TableLastPageIcon,\r\n // TableNextPageIcon,\r\n // TablePreviousPageIcon,\r\n} from \"../../../../assets/svg\";\r\nimport TablePreviousPageIcon from \"@mui/icons-material/NavigateBeforeRounded\";\r\nimport TableNextPageIcon from \"@mui/icons-material/NavigateNextRounded\";\r\nimport \"./index.scss\";\r\nimport { CraftTablePaginationProps } from \"../../../types/table\";\r\n\r\ninterface DefaultPaginationProps<T> {\r\n table: Table<T>;\r\n rowsPerPageArray: number[];\r\n paginationOptions?: CraftTablePaginationProps;\r\n}\r\n\r\nfunction DefaultPagination<T>({\r\n table,\r\n rowsPerPageArray,\r\n paginationOptions,\r\n}: DefaultPaginationProps<T>) {\r\n const pageIndex = table.getState().pagination.pageIndex + 1;\r\n const pageCount = table.getPageCount();\r\n const pageSize = table.getState().pagination.pageSize;\r\n const rowCount = table.getRowCount();\r\n const recordsRangeFirst = pageIndex * pageSize - pageSize + 1;\r\n const recordsRangeLast = Math.min(pageIndex * pageSize, rowCount);\r\n\r\n return (\r\n <div className=\"pagination_container\">\r\n {paginationOptions?.paginationView === \"full\" ? (\r\n <>\r\n <span className=\"go_to_page_container\">\r\n &nbsp;&nbsp;Go to page&nbsp;:&nbsp;\r\n <input\r\n type=\"number\"\r\n defaultValue={pageIndex}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n const page = e.currentTarget.value\r\n ? Number(e.currentTarget.value) - 1\r\n : 0;\r\n table.setPageIndex(page);\r\n }\r\n }}\r\n style={{ width: \"60px\", textAlign: \"center\" }}\r\n min={1}\r\n max={table?.getPageCount()}\r\n />\r\n &nbsp;\r\n </span>\r\n\r\n <div className=\"rows_per_page_container\">\r\n <span>Rows Per Page&nbsp;:&nbsp;</span>\r\n <select\r\n value={table.getState().pagination.pageSize}\r\n onChange={(e) => {\r\n table.setPageSize(Number(e.target.value));\r\n }}\r\n >\r\n {rowsPerPageArray.map((pageSize) => (\r\n <option key={pageSize} value={pageSize}>\r\n {pageSize}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"records_range_container\">\r\n <span>Showing&nbsp;</span>\r\n <strong>\r\n {recordsRangeFirst} - {recordsRangeLast} of {rowCount}\r\n </strong>\r\n </div>\r\n\r\n <span className=\"page_range_container\">\r\n <span>&nbsp;Page&nbsp;</span>\r\n <strong>\r\n {pageIndex} of {pageCount}\r\n &nbsp;\r\n </strong>\r\n </span>\r\n\r\n <div className=\"pagination_btn_container\">\r\n <button\r\n title=\"First Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.setPageIndex(0)}\r\n >\r\n <TableFirstPageIcon />\r\n </button>\r\n <button\r\n title=\"Previous Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.previousPage()}\r\n >\r\n <TablePreviousPageIcon fontSize=\"small\" />\r\n </button>\r\n <button\r\n title=\"Next Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.nextPage()}\r\n >\r\n <TableNextPageIcon />\r\n </button>\r\n <button\r\n title=\"Last Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.setPageIndex(pageCount - 1)}\r\n >\r\n <TableLastPageIcon />\r\n </button>\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"rows_per_page_container\">\r\n {/* <span>Rows Per Page&nbsp;:&nbsp;</span> */}\r\n <select\r\n value={table.getState().pagination.pageSize}\r\n onChange={(e) => {\r\n table.setPageSize(Number(e.target.value));\r\n }}\r\n >\r\n {rowsPerPageArray.map((pageSize) => (\r\n <option key={pageSize} value={pageSize}>\r\n {pageSize}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"records_range_container\">\r\n {/* <span>Showing&nbsp;</span> */}\r\n <strong>\r\n {recordsRangeFirst} - {recordsRangeLast} of {rowCount}\r\n </strong>\r\n </div>\r\n\r\n <div className=\"pagination_btn_container\">\r\n <button\r\n title=\"Previous Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.previousPage()}\r\n >\r\n <TablePreviousPageIcon />\r\n </button>\r\n <button\r\n title=\"Next Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.nextPage()}\r\n >\r\n <TableNextPageIcon />\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default DefaultPagination;\r\n","import { Column } from \"@tanstack/react-table\";\r\nimport { alignProps } from \"../../types/common\";\r\nimport { CSSProperties } from \"react\";\r\nimport axios from \"axios\";\r\n\r\nexport const formatClassName = (className: string): string => {\r\n return className.replace(/\\s+/g, \" \").trim();\r\n};\r\n\r\nexport const getColumnAlignment = (align: string) => {\r\n const contentAlignment = {\r\n left: \"flex-start\",\r\n center: \"center\",\r\n right: \"flex-end\",\r\n };\r\n\r\n const alignment = contentAlignment[(align as alignProps) || \"left\"];\r\n return alignment;\r\n};\r\n\r\nexport const getColumnPinningStyles = <T>(column: Column<T>): CSSProperties => {\r\n const isPinned = column.getIsPinned();\r\n const isLastLeftPinnedColumn =\r\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n const isFirstRightPinnedColumn =\r\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n return {\r\n boxShadow: isLastLeftPinnedColumn\r\n ? \"-4px 0 4px -4px gray inset\"\r\n : isFirstRightPinnedColumn\r\n ? \"4px 0 4px -4px gray inset\"\r\n : undefined,\r\n background: \"inherit\",\r\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n position: isPinned ? \"sticky\" : \"relative\",\r\n width: column.getSize(),\r\n };\r\n};\r\n\r\nexport const getColumnPinningStylesBody = <T>(\r\n column: Column<T>\r\n): CSSProperties => {\r\n const isPinned = column.getIsPinned();\r\n const isLastLeftPinnedColumn =\r\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n const isFirstRightPinnedColumn =\r\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n return {\r\n boxShadow: isLastLeftPinnedColumn\r\n ? \"-4px 0 4px -4px gray inset\"\r\n : isFirstRightPinnedColumn\r\n ? \"4px 0 4px -4px gray inset\"\r\n : undefined,\r\n background: \"inherit\",\r\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n position: isPinned ? \"sticky\" : \"relative\",\r\n width: column.getSize(),\r\n };\r\n};\r\n\r\nexport function customDebounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number\r\n): (...args: Parameters<T>) => void {\r\n let timerId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: ThisParameterType<T>, ...args: Parameters<T>): void {\r\n if (timerId) clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n func.apply(this, args);\r\n }, delay);\r\n };\r\n}\r\n\r\n//ENTITY TYPE\r\nconst ENVIRONMENT = \"crm_dev\";\r\nexport const ENTITY_TYPE = \"LEAD\";\r\n\r\nconst environments = {\r\n adm_dev: \"http://localhost:4010/api\",\r\n crm_dev: \"http://localhost:4011/api\",\r\n uat: \"http://13.200.182.92:4010/api\",\r\n};\r\n\r\nconst getBaseUrl = () => environments[ENVIRONMENT];\r\n\r\n// API INTEGRATION\r\nexport const api = axios.create({\r\n baseURL: getBaseUrl(),\r\n timeout: 10000,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n});\r\n\r\napi.interceptors.request.use(\r\n (config) => {\r\n const token = localStorage.getItem(\"authToken\");\r\n if (token) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Cell, flexRender } from \"@tanstack/react-table\";\r\nimport { CSSProperties } from \"react\";\r\nimport { align } from \"../types/common\";\r\nimport { getColumnPinningStylesBody } from \"../libs/utils/common\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\n\r\ninterface DragAlongCellProps<T> {\r\n cell: Cell<T, unknown>;\r\n featureOptions: CraftTableFeatureProps;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction DragAlongCell<T>({\r\n cell,\r\n // featureOptions,\r\n tableStates,\r\n}: DragAlongCellProps<T>) {\r\n const { isDragging, setNodeRef, transform } = useSortable({\r\n id: cell.column.id,\r\n });\r\n // const { enableWordBreakAll } = featureOptions;\r\n const { wrapColumns } = tableStates;\r\n\r\n const isPinned = cell.column.getIsPinned();\r\n\r\n const style: CSSProperties = {\r\n opacity: isDragging ? 0.8 : 1,\r\n transform: CSS.Translate.toString(transform),\r\n transition: \"width transform 0.2s ease-in-out\",\r\n width: cell.column.getSize(),\r\n ...getColumnPinningStylesBody(cell.column),\r\n ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n wordBreak: \"break-all\",\r\n // whiteSpace: \"normal\",\r\n }),\r\n };\r\n\r\n return (\r\n <td\r\n ref={setNodeRef}\r\n {...{\r\n style: {\r\n ...style,\r\n zIndex: isPinned ? 2 : isDragging ? 1 : 0,\r\n },\r\n align: (cell.column.columnDef.meta as align)?.align || \"left\",\r\n className: \"ts__body__td\",\r\n }}\r\n >\r\n {cell.getIsPlaceholder()\r\n ? null\r\n : flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </td>\r\n );\r\n}\r\n\r\nexport default DragAlongCell;\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\ninterface CheckboxProps {\r\n type?: \"checkbox\";\r\n checked: boolean;\r\n disabled?: boolean;\r\n onChange: (checked: boolean) => void;\r\n indeterminate?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nconst Checkbox = ({\r\n checked = false,\r\n disabled = false,\r\n onChange = () => {},\r\n indeterminate = false,\r\n className,\r\n style,\r\n ...props\r\n}: CheckboxProps) => {\r\n const id = uuidv4();\r\n const [check, setCheck] = React.useState<boolean>(checked);\r\n const ref = useRef(null);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const isChecked = e.target.checked;\r\n setCheck(isChecked);\r\n\r\n if (onChange) onChange(isChecked);\r\n };\r\n\r\n useEffect(() => {\r\n setCheck(checked);\r\n }, [checked]);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n (ref.current as HTMLInputElement).indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return (\r\n <input\r\n id={id}\r\n ref={ref}\r\n type=\"checkbox\"\r\n checked={check}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n className={className}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport {\r\n ColumnOrderState,\r\n flexRender,\r\n Row,\r\n Table,\r\n} from \"@tanstack/react-table\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\nimport { align } from \"../types/common\";\r\nimport DragAlongCell from \"./table-body-dnd-cell\";\r\nimport {\r\n horizontalListSortingStrategy,\r\n SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport { getColumnPinningStylesBody } from \"../libs/utils/common\";\r\nimport Checkbox from \"./inputs/checkbox\";\r\n\r\ninterface TableBodyProps<T> {\r\n table: Table<T>;\r\n featureOptions: CraftTableFeatureProps;\r\n NestedComponent?: React.ComponentType<{ row: Row<T> }>;\r\n columnOrder: ColumnOrderState;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction TableBody<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n tableStates,\r\n}: TableBodyProps<T>) {\r\n const { enableColumnReordering, enableRowSelection } = featureOptions;\r\n\r\n const { wrapColumns } = tableStates;\r\n\r\n const renderRow = (row: Row<T>) => {\r\n const renderedRow = (\r\n <tr key={row.id} className=\"ts__body__tr\">\r\n {enableRowSelection && (\r\n <td\r\n className=\"ts__body__td ts__body__checkbox\"\r\n style={{\r\n position: \"sticky\",\r\n left: 0,\r\n width: \"50px\",\r\n }}\r\n >\r\n <Checkbox\r\n checked={row.getIsSelected()}\r\n indeterminate={row.getIsSomeSelected()}\r\n onChange={row.getToggleSelectedHandler()}\r\n className=\"checkbox__input\"\r\n />\r\n </td>\r\n )}\r\n\r\n {row?.getVisibleCells()?.map((cell) => {\r\n const tdProps = {\r\n className: \"ts__body__td\",\r\n style: {\r\n ...getColumnPinningStylesBody(cell.column),\r\n width: cell.column.getSize(),\r\n ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n wordBreak: \"break-all\",\r\n // whiteSpace: \"normal\",\r\n }),\r\n } as React.CSSProperties,\r\n align: (cell.column.columnDef.meta as align)?.align || \"left\",\r\n };\r\n\r\n return enableColumnReordering ? (\r\n <SortableContext\r\n key={cell.id}\r\n items={columnOrder}\r\n strategy={horizontalListSortingStrategy}\r\n >\r\n <DragAlongCell\r\n cell={cell}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n </SortableContext>\r\n ) : (\r\n <td key={cell?.id} {...tdProps}>\r\n {flexRender(cell?.column?.columnDef?.cell, cell?.getContext())}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n );\r\n\r\n if (row.getIsExpanded()) {\r\n return (\r\n <React.Fragment key={row.id}>\r\n {renderedRow}\r\n {NestedComponent && (\r\n <tr>\r\n {/* <td colSpan={table.getAllLeafColumns().length}>//commented out to remove extra line on opening of \r\n {NestedComponent && <NestedComponent {...{ row }} />}\r\n </td> */}\r\n {<NestedComponent {...{ row }} />}\r\n </tr>\r\n )}\r\n </React.Fragment>\r\n );\r\n } else {\r\n return renderedRow;\r\n }\r\n };\r\n\r\n return (\r\n <tbody className=\"ts__body\">\r\n {table?.getRowModel()?.rows?.map((row) => renderRow(row))}\r\n </tbody>\r\n );\r\n}\r\n\r\nexport default TableBody;\r\n","import { IconPinOffOutline } from \"../../assets/svg\";\r\nimport { TableHeaderProps } from \"../types/table\";\r\n\r\nfunction TableHeadPin<T>({ header }: TableHeaderProps<T>) {\r\n return header.column.getIsPinned() !== \"left\" ? (\r\n <div className=\"ts--head--button\" onClick={() => header.column.pin(\"left\")}>\r\n {/* <IconPinOutline /> */}\r\n </div>\r\n ) : (\r\n <div className=\"ts--head--button\" onClick={() => header.column.pin(false)}>\r\n <IconPinOffOutline />\r\n </div>\r\n );\r\n}\r\n\r\nexport default TableHeadPin;\r\n","import {\r\n Popover,\r\n List,\r\n ListItemButton,\r\n ListItemText,\r\n ListItemIcon,\r\n Switch,\r\n} from \"@mui/material\";\r\nimport { Header } from \"@tanstack/react-table\";\r\nimport {\r\n UpArrow,\r\n DownArrow,\r\n HideIcon,\r\n IconPinOffOutline,\r\n IconPinOutline,\r\n} from \"../../assets/svg\";\r\nimport { CraftTableOptionsProps } from \"../types/table-options\";\r\n\r\ntype Props<T> = {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n header: Header<T, unknown>;\r\n tableStates: CraftTableOptionsProps;\r\n};\r\n\r\nfunction TableHeadPopover<T>({\r\n anchorEl,\r\n onClose,\r\n header,\r\n tableStates,\r\n}: Props<T>) {\r\n const open = Boolean(anchorEl);\r\n const column = header.column;\r\n const isPinned = column.getIsPinned() === \"left\";\r\n\r\n const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n const toggleWrapForColumn = (columnId: string) => {\r\n setWrapColumns((prev: Record<string, boolean>) => ({\r\n ...prev,\r\n [columnId]: !prev[columnId],\r\n all_wrap: false,\r\n }));\r\n };\r\n\r\n return (\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n >\r\n <List dense>\r\n <ListItemButton onClick={() => column.toggleSorting(false)}>\r\n <ListItemIcon>\r\n <UpArrow />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Sort ascending\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={() => column.toggleSorting(true)}>\r\n <ListItemIcon>\r\n <DownArrow />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Sort descending\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={() => column.toggleVisibility()}>\r\n <ListItemIcon>\r\n <HideIcon />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Hide in view\" />\r\n </ListItemButton>\r\n <ListItemButton\r\n onClick={() => {\r\n column.pin(isPinned ? false : \"left\");\r\n }}\r\n >\r\n <ListItemIcon>\r\n {isPinned ? <IconPinOffOutline /> : <IconPinOutline />}\r\n </ListItemIcon>\r\n <ListItemText\r\n primary={isPinned ? \"Unfreeze column\" : \"Freeze column\"}\r\n />\r\n </ListItemButton>\r\n\r\n <ListItemButton>\r\n <ListItemText primary=\"Wrap Cell\" />\r\n <Switch\r\n checked={wrapColumns.all_wrap || wrapColumns[column.id]}\r\n onChange={() => toggleWrapForColumn(column.id)}\r\n />\r\n </ListItemButton>\r\n </List>\r\n </Popover>\r\n );\r\n}\r\n\r\nexport default TableHeadPopover;\r\n","import { flexRender } from \"@tanstack/react-table\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSSProperties, useState } from \"react\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DownArrow, DragHandleIcon, UpArrow } from \"../../assets/svg\";\r\nimport {\r\n getColumnAlignment,\r\n getColumnPinningStyles,\r\n} from \"../libs/utils/common\";\r\nimport { align } from \"../types/common\";\r\nimport { TableHeaderProps } from \"../types/table\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport TableHeadPopover from \"./table-head-popover\";\r\n\r\nfunction DraggableTableHeader<T>({\r\n header,\r\n featureOptions,\r\n tableStates,\r\n}: TableHeaderProps<T>) {\r\n const { enableColumnPinning } = featureOptions;\r\n\r\n // Popover\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n const handleHover = (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const { isDragging, transform, attributes, listeners } = useSortable({\r\n id: header.column.id,\r\n });\r\n\r\n const isPinned = header.column.getIsPinned();\r\n\r\n const styles: CSSProperties = {\r\n opacity: isDragging ? 0.8 : 1,\r\n position: \"relative\",\r\n transform: CSS.Translate.toString(transform),\r\n transition: \"width transform 0.2s ease-in-out\",\r\n width: header.column.getSize(),\r\n minWidth: `${header.column.columnDef.minSize ?? 180}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n };\r\n\r\n let sortProps: {\r\n className: string;\r\n title?: string;\r\n style?: CSSProperties;\r\n } = {\r\n className: \"ts__content\",\r\n // style: {\r\n // justifyContent: getColumnAlignment(\r\n // (header?.column?.columnDef?.meta as align)?.align\r\n // ),\r\n // },\r\n };\r\n\r\n // if (header.column.getCanSort()) {\r\n // sortProps = {\r\n // ...sortProps,\r\n // title:\r\n // header.column.getNextSortingOrder() === \"asc\"\r\n // ? \"Sort ascending\"\r\n // : header.column.getNextSortingOrder() === \"desc\"\r\n // ? \"Sort descending\"\r\n // : \"Clear sort\",\r\n // };\r\n // }\r\n\r\n return (\r\n <th\r\n onMouseLeave={handleClose}\r\n key={header?.id}\r\n className=\"ts__head__th\"\r\n colSpan={header.colSpan}\r\n onClick={handleHover}\r\n style={{\r\n width: `${header.column.getSize()}px `,\r\n minWidth: `${header.column.columnDef.minSize}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n ...styles,\r\n ...getColumnPinningStyles(header.column),\r\n zIndex: isPinned ? 3 : isDragging ? 1 : 0,\r\n }}\r\n >\r\n {header.isPlaceholder ? null : (\r\n <div {...sortProps}>\r\n <div\r\n className={`${\r\n header.column.getCanSort() ? \"ts__content__sort\" : \"\"\r\n }`.trim()}\r\n // onClick={header.column.getToggleSortingHandler()}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n\r\n {{\r\n asc: <UpArrow />,\r\n desc: <DownArrow />,\r\n }[header.column.getIsSorted() as \"asc\" | \"desc\"] ?? null}\r\n </div>\r\n\r\n {enableColumnPinning && (\r\n <TableHeadPin\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n\r\n <div {...attributes} {...listeners} className=\"ts__dnd__button\">\r\n <DragHandleIcon />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* column resizing */}\r\n {header.column.getCanResize() ? (\r\n <div\r\n onDoubleClick={() => header.column.resetSize()}\r\n onMouseDown={header.getResizeHandler()}\r\n onTouchStart={header.getResizeHandler()}\r\n className={`column__resize ${\r\n header.column.getIsResizing() ? \"is__resizing\" : \"\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {/* Popover */}\r\n <TableHeadPopover\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n header={header}\r\n tableStates={tableStates}\r\n />\r\n </th>\r\n );\r\n}\r\n\r\nexport default DraggableTableHeader;\r\n","import { ColumnOrderState, flexRender, Table } from \"@tanstack/react-table\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\nimport { DownArrow, UpArrow } from \"../../assets/svg\";\r\nimport { CSSProperties, useState } from \"react\";\r\nimport {\r\n getColumnAlignment,\r\n getColumnPinningStyles,\r\n} from \"../libs/utils/common\";\r\nimport { align } from \"../types/common\";\r\nimport {\r\n horizontalListSortingStrategy,\r\n SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport DraggableTableHeader from \"./table-head-dnd-cell\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport Checkbox from \"./inputs/checkbox\";\r\n\r\ninterface TableHeadProps<T> {\r\n table: Table<T>;\r\n featureOptions: CraftTableFeatureProps;\r\n columnOrder: ColumnOrderState;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction TableHead<T>({\r\n table,\r\n featureOptions,\r\n columnOrder,\r\n tableStates,\r\n}: TableHeadProps<T>) {\r\n const {\r\n stickyHeader,\r\n enableColumnReordering,\r\n enableColumnPinning,\r\n enableRowSelection,\r\n } = featureOptions;\r\n\r\n // Popover\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n const handleHover = (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n };\r\n\r\n return (\r\n <thead className={`ts__head ${stickyHeader ? \"ts--sticky\" : \"\"}`.trim()}>\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <tr className=\"ts__head__tr\" key={headerGroup?.id}>\r\n {enableRowSelection && (\r\n <th\r\n className=\"ts__head__th ts__head__checkbox\"\r\n style={{\r\n position: \"sticky\",\r\n left: 0,\r\n width: \"50px\",\r\n }}\r\n >\r\n <div className=\"ts__content\">\r\n <Checkbox\r\n checked={table.getIsAllRowsSelected()}\r\n indeterminate={table.getIsSomeRowsSelected()}\r\n onChange={() => table.toggleAllRowsSelected()}\r\n />\r\n </div>\r\n </th>\r\n )}\r\n\r\n {headerGroup.headers.map((header) => {\r\n let sortProps: {\r\n className: string;\r\n title?: string;\r\n style?: CSSProperties;\r\n } = {\r\n className: \"ts__content\",\r\n // style: {\r\n // justifyContent: getColumnAlignment(\r\n // (header?.column?.columnDef?.meta as align)?.align\r\n // ),\r\n // },\r\n };\r\n\r\n // if (header.column.getCanSort()) {\r\n // sortProps = {\r\n // ...sortProps,\r\n // title:\r\n // header.column.getNextSortingOrder() === \"asc\"\r\n // ? \"Sort ascending\"\r\n // : header.column.getNextSortingOrder() === \"desc\"\r\n // ? \"Sort descending\"\r\n // : \"Clear sort\",\r\n // };\r\n // }\r\n\r\n return enableColumnReordering ? (\r\n <SortableContext\r\n key={header?.id}\r\n items={columnOrder}\r\n strategy={horizontalListSortingStrategy}\r\n >\r\n <DraggableTableHeader\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n </SortableContext>\r\n ) : (\r\n <th\r\n key={header?.id}\r\n className=\"ts__head__th\"\r\n colSpan={header.colSpan}\r\n style={{\r\n ...getColumnPinningStyles(header.column),\r\n width: `${header.column.getSize()}px`,\r\n minWidth: `${header.column.columnDef.minSize}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n }}\r\n onClick={handleHover}\r\n >\r\n {header.isPlaceholder ? null : (\r\n <div {...sortProps}>\r\n <div\r\n className={`${\r\n header.column.getCanSort() ? \"ts__content__sort\" : \"\"\r\n }`.trim()}\r\n // onClick={header.column.getToggleSortingHandler()}\r\n >\r\n {flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )}\r\n\r\n {{\r\n asc: <UpArrow />,\r\n desc: <DownArrow />,\r\n }[header.column.getIsSorted() as \"asc\" | \"desc\"] ?? null}\r\n </div>\r\n\r\n {enableColumnPinning && (\r\n <TableHeadPin\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* column resizing */}\r\n {header.column.getCanResize() ? (\r\n <div\r\n onDoubleClick={() => header.column.resetSize()}\r\n onMouseDown={header.getResizeHandler()}\r\n onTouchStart={header.getResizeHandler()}\r\n className={`column__resize ${\r\n header.column.getIsResizing() ? \"is__resizing\" : \"\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {/* Popover */}\r\n {/* <TableHeadPopover\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n header={header}\r\n wrap={wrap}\r\n tableStates={tableStates}\r\n /> */}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </thead>\r\n );\r\n}\r\n\r\nexport default TableHead;\r\n","import { formatClassName } from \"../libs/utils/common\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport TableBody from \"./table-body\";\r\nimport TableHead from \"./table-head\";\r\n\r\nfunction Table<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n isCompactTable,\r\n tableStates,\r\n}: CraftTableComponentProps<T>) {\r\n const { striped } = featureOptions;\r\n\r\n return (\r\n <table\r\n className={formatClassName(\r\n `ts__table ${striped ? \"ts--striped\" : \"\"} ${\r\n isCompactTable ? \"ts--compact\" : \"\"\r\n }`\r\n )}\r\n >\r\n <TableHead\r\n table={table}\r\n featureOptions={featureOptions}\r\n columnOrder={columnOrder}\r\n tableStates={tableStates}\r\n />\r\n <TableBody\r\n table={table}\r\n featureOptions={featureOptions}\r\n NestedComponent={NestedComponent}\r\n columnOrder={columnOrder}\r\n tableStates={tableStates}\r\n />\r\n </table>\r\n );\r\n}\r\n\r\nexport default Table;\r\n","import {\r\n closestCenter,\r\n DndContext,\r\n DragEndEvent,\r\n KeyboardSensor,\r\n MouseSensor,\r\n SensorDescriptor,\r\n SensorOptions,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport Table from \"./table\";\r\nimport { restrictToHorizontalAxis } from \"@dnd-kit/modifiers\";\r\nimport { arrayMove } from \"@dnd-kit/sortable\";\r\n\r\nfunction TableDND<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n setColumnOrder,\r\n isCompactTable,\r\n tableStates,\r\n}: CraftTableComponentProps<T>) {\r\n const sensors: SensorDescriptor<SensorOptions>[] = useSensors(\r\n useSensor(MouseSensor, {}),\r\n useSensor(TouchSensor, {}),\r\n useSensor(KeyboardSensor, {})\r\n );\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (active && over && active.id !== over.id) {\r\n setColumnOrder((columnOrder) => {\r\n const oldIndex = columnOrder.indexOf(active.id as string);\r\n const newIndex = columnOrder.indexOf(over.id as string);\r\n return arrayMove(columnOrder, oldIndex, newIndex);\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <DndContext\r\n collisionDetection={closestCenter}\r\n modifiers={[restrictToHorizontalAxis]}\r\n onDragEnd={handleDragEnd}\r\n sensors={sensors}\r\n >\r\n <Table\r\n table={table}\r\n featureOptions={featureOptions}\r\n NestedComponent={NestedComponent}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n </DndContext>\r\n );\r\n}\r\n\r\nexport default TableDND;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface TabStylesProps {\r\n tabs: SxProps<Theme>;\r\n tab: SxProps<Theme>;\r\n tabCount: SxProps<Theme>;\r\n}\r\n\r\nexport const tableTabsStyles: TabStylesProps = {\r\n tabs: {\r\n minHeight: \"38px\",\r\n },\r\n\r\n tab: {\r\n color: \"#888888\",\r\n padding: \"8px 12px\",\r\n minHeight: \"38px\",\r\n textTransform: \"none\",\r\n minWidth: \"unset\",\r\n whiteSpace: \"nowrap\",\r\n\r\n \"&.Mui-selected\": {\r\n color: \"#0e0c0b\",\r\n fontWeight: 700,\r\n },\r\n },\r\n\r\n tabCount: {\r\n padding: \"2px 3px\",\r\n borderRadius: \"6px\",\r\n border: \"1px solid #0E0C0BE6\",\r\n color: \"#0E0C0B\",\r\n },\r\n};\r\n","import React, { useState } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Typography,\r\n TextField,\r\n Button,\r\n IconButton,\r\n Box,\r\n SxProps,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Theme } from \"@emotion/react\";\r\n\r\n// Types for the component props\r\nexport interface ModalButton {\r\n label: string;\r\n onClick: (inputValue?: string, error?: string, setError?: any) => void;\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n color?: \"primary\" | \"secondary\" | \"error\" | \"info\" | \"success\" | \"warning\";\r\n disabled?: boolean;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport interface InputField {\r\n label: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n type?: \"text\" | \"email\" | \"password\" | \"number\";\r\n multiline?: boolean;\r\n rows?: number;\r\n defaultValue?: string;\r\n labelClassName?: string;\r\n}\r\n\r\nexport interface ConfirmModalProps {\r\n open: boolean;\r\n onClose: () => void;\r\n title: string;\r\n description?: string;\r\n buttons: ModalButton[];\r\n input?: InputField;\r\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n fullWidth?: boolean;\r\n className?: string;\r\n}\r\n\r\nconst ConfirmModal: React.FC<ConfirmModalProps> = ({\r\n open,\r\n onClose,\r\n title,\r\n description,\r\n buttons,\r\n input,\r\n maxWidth = \"sm\",\r\n fullWidth = true,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(input?.defaultValue || \"\");\r\n const [error, setError] = useState(\"\");\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const handleButtonClick = (button: ModalButton) => {\r\n if (input) {\r\n button.onClick(inputValue, error, setError);\r\n } else {\r\n button.onClick();\r\n }\r\n setInputValue(\"\");\r\n };\r\n\r\n const handleClose = () => {\r\n setInputValue(input?.defaultValue || \"\");\r\n onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={(event, reason) => {\r\n if (reason !== \"backdropClick\" && reason !== \"escapeKeyDown\") {\r\n handleClose();\r\n }\r\n }}\r\n maxWidth={maxWidth}\r\n fullWidth={fullWidth}\r\n PaperProps={{\r\n sx: {\r\n borderRadius: 2,\r\n padding: 1,\r\n },\r\n }}\r\n >\r\n <DialogTitle\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n // padding: \"16px 0px\",\r\n px: \"0px\",\r\n marginX: \"24px\",\r\n paddingBottom: description ? \"18px\" : \"20px\",\r\n borderBottom: \"1px solid #eeeeee\",\r\n }}\r\n >\r\n <Typography variant=\"h6\" component=\"h2\" fontWeight=\"bold\">\r\n {title}\r\n </Typography>\r\n <IconButton\r\n onClick={handleClose}\r\n size=\"small\"\r\n sx={{\r\n color: \"text.secondary\",\r\n }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ padding: \"0 24px 16px 24px\", mt: 2 }}>\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n color=\"text.secondary\"\r\n sx={{ marginBottom: input ? 3 : 0 }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n\r\n {input && (\r\n <Box sx={{ marginTop: description ? 0 : 2 }}>\r\n <Typography\r\n variant=\"body2\"\r\n component=\"label\"\r\n className={input.labelClassName}\r\n sx={{\r\n display: \"block\",\r\n marginBottom: 1,\r\n fontWeight: 500,\r\n color: \"text.primary\",\r\n }}\r\n >\r\n {input.label}\r\n {input.required && (\r\n <Typography component=\"span\" color=\"error.main\">\r\n {\" \"}\r\n *\r\n </Typography>\r\n )}\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n value={inputValue}\r\n onChange={handleInputChange}\r\n placeholder={input.placeholder}\r\n type={input.type || \"text\"}\r\n multiline={input.multiline}\r\n rows={input.rows}\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n maxWidth: 280,\r\n borderRadius: 1,\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n border: \"2px solid #7A5AF8\",\r\n },\r\n },\r\n }}\r\n />\r\n {error && (\r\n <Typography variant=\"body2\" color=\"error.main\">\r\n {error}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </DialogContent>\r\n\r\n <DialogActions\r\n sx={{\r\n padding: \"16px 24px 24px 24px\",\r\n gap: 1,\r\n }}\r\n >\r\n {buttons.map((button, index) => (\r\n <Button\r\n key={index}\r\n variant={button.variant || \"outlined\"}\r\n color={button.color || \"primary\"}\r\n className=\"confirm-modal-button\"\r\n sx={button.sx}\r\n onClick={() => handleButtonClick(button)}\r\n disabled={\r\n button.disabled ||\r\n (input?.required &&\r\n !inputValue.trim() &&\r\n button.variant === \"contained\")\r\n }\r\n >\r\n {button.label}\r\n </Button>\r\n ))}\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default ConfirmModal;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n children,\r\n value,\r\n index,\r\n sx,\r\n ...props\r\n}: TabPanelProps) => {\r\n return (\r\n <div\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`simple-tabpanel-${index}`}\r\n aria-labelledby={`simple-tab-${index}`}\r\n style={{ height: \"100%\" }}\r\n {...props}\r\n >\r\n {value === index && <Box sx={{ height: \"100%\", ...sx }}>{children}</Box>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import { useState } from \"react\";\r\nimport { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { CheckBox, CrossBox } from \"../../../../../assets/svg\";\r\n\r\nexport interface TabItem {\r\n label: string;\r\n}\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n tabItems: TabItem[];\r\n activeFilterIndex: number;\r\n handleCrossClick: (index: number) => void;\r\n}\r\n\r\nconst CustomTabs = ({\r\n tabItems,\r\n activeFilterIndex = -1,\r\n handleCrossClick,\r\n value,\r\n onChange,\r\n ...tabsProps\r\n}: StyledTabsProps) => {\r\n const [hoveredTab, setHoveredTab] = useState<number | null>(null);\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n variant=\"fullWidth\"\r\n sx={{\r\n px: \"12px\",\r\n borderBottom: `1px solid #ccc`,\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"black\",\r\n },\r\n }}\r\n {...tabsProps}\r\n >\r\n {tabItems.map((tab, idx) => {\r\n const isActive = activeFilterIndex === idx;\r\n const isHovered = hoveredTab === idx;\r\n\r\n return (\r\n <Tab\r\n key={idx}\r\n label={\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <span>{tab.label}</span>\r\n {isActive && (\r\n <Box\r\n onMouseEnter={() => setHoveredTab(idx)}\r\n onMouseLeave={() => setHoveredTab(null)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: isHovered ? \"pointer\" : \"default\",\r\n }}\r\n onClick={\r\n isHovered ? () => handleCrossClick(idx) : undefined\r\n }\r\n >\r\n {isHovered ? <CrossBox /> : <CheckBox />}\r\n </Box>\r\n )}\r\n </Box>\r\n }\r\n sx={{\r\n fontSize: \"14px\",\r\n textTransform: \"capitalize\",\r\n color: \"#888888\",\r\n fontWeight: \"normal\",\r\n whiteSpace: \"nowrap\",\r\n \"&.Mui-selected\": {\r\n color: \"black\",\r\n fontWeight: \"bold\",\r\n },\r\n }}\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomTabs;\r\n","export const TextFieldStyles = {\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport { TextFieldStyles } from \"./styles\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\n\r\ninterface FormTextfieldProps {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n isLoading?: boolean;\r\n onValueChange?: () => void;\r\n}\r\n\r\nconst FormTextfield = ({\r\n filter,\r\n control,\r\n isLoading = false,\r\n onValueChange,\r\n}: FormTextfieldProps) => {\r\n return (\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={filter.filter_value || \"\"}\r\n render={({ field }) => (\r\n <TextField\r\n {...field}\r\n fullWidth\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{\r\n ...TextFieldStyles,\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n }}\r\n type={filter.data_type || \"text\"}\r\n placeholder={\"Enter value\"}\r\n disabled={isLoading}\r\n onChange={(e) => {\r\n field.onChange(e);\r\n onValueChange?.();\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default FormTextfield;\r\n","import { Controller } from \"react-hook-form\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport moment from \"moment\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport { SxProps, Theme, Box } from \"@mui/material\";\r\n\r\ntype FormDatePickerProps = {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n sx?: SxProps<Theme>;\r\n views?: Array<\"year\" | \"month\" | \"day\">;\r\n onValueChange?: () => void;\r\n};\r\n\r\nconst FormDatePicker = ({\r\n filter,\r\n control,\r\n sx,\r\n views = [\"day\", \"month\", \"year\"],\r\n onValueChange,\r\n}: FormDatePickerProps) => {\r\n const isRange = filter.filter_operator === \"between\";\r\n const isRelativeToToday = filter.filter_operator === \"today\";\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <Box display=\"flex\" gap={1}>\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={\r\n isRange\r\n ? [\"\", \"\"]\r\n : isRelativeToToday\r\n ? moment().format(\"YYYY-MM-DD\")\r\n : filter.filter_value\r\n ? moment(filter.filter_value, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n render={({ field }) => {\r\n const value = field.value;\r\n const todayDate = moment().toDate();\r\n if (isRange) {\r\n const fromDate = Array.isArray(value) ? value[0] : \"\";\r\n const toDate = Array.isArray(value) ? value[1] : \"\";\r\n\r\n return (\r\n <>\r\n <DatePicker\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : fromDate\r\n ? moment(fromDate, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n const updated: [string, string] = [\r\n formatted,\r\n toDate || \"\",\r\n ];\r\n field.onChange(updated);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"From Date\",\r\n },\r\n }}\r\n />\r\n\r\n <DatePicker\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : toDate\r\n ? moment(toDate, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n const updated: [string, string] = [\r\n fromDate || \"\",\r\n formatted,\r\n ];\r\n field.onChange(updated);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"To Date\",\r\n },\r\n }}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n // Single DatePicker\r\n return (\r\n <DatePicker\r\n {...field}\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : field.value\r\n ? moment(field.value, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n field.onChange(formatted);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"DD-MM-YYYY\",\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n </Box>\r\n </LocalizationProvider>\r\n );\r\n};\r\n\r\nexport default FormDatePicker;\r\n","import { FormControl, MenuItem, Select, SxProps, Theme } from \"@mui/material\";\r\nimport { Controller, UseFormSetValue } from \"react-hook-form\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport moment from \"moment\";\r\n\r\ninterface FormDropdownProps {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n setValue: UseFormSetValue<any>;\r\n dropdownList: {\r\n label?: string;\r\n value?: string;\r\n }[];\r\n isLoading?: boolean;\r\n sx?: SxProps<Theme>;\r\n onValueChange?: () => void;\r\n}\r\n\r\nconst FormDropdown = ({\r\n filter,\r\n control,\r\n setValue,\r\n dropdownList,\r\n isLoading = false,\r\n sx,\r\n onValueChange,\r\n}: FormDropdownProps) => {\r\n return (\r\n <Controller\r\n name={`${filter?.name}.operator`}\r\n control={control}\r\n defaultValue={filter.filter_operator || dropdownList?.[0]?.value || \"\"}\r\n render={({ field }) => (\r\n <FormControl sx={sx} size=\"small\">\r\n <Select\r\n {...field}\r\n variant=\"standard\"\r\n sx={{\r\n fontSize: \"0.875rem\",\r\n minWidth: 50,\r\n border: \"none\",\r\n boxShadow: \"none\",\r\n \"& .MuiSelect-icon\": {\r\n top: \"45%\",\r\n transform: \"translateY(-50%)\",\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n },\r\n }}\r\n disabled={isLoading}\r\n disableUnderline\r\n onChange={(e) => {\r\n const newOperator = e.target.value;\r\n const oldOperator = field.value;\r\n\r\n field.onChange(e);\r\n\r\n if (\r\n (filter.data_type === \"date\" || filter.data_type === \"year\") &&\r\n newOperator !== oldOperator\r\n ) {\r\n if (newOperator === \"today\") {\r\n setValue(\r\n `${filter.name}.value`,\r\n moment().format(\"YYYY-MM-DD\"),\r\n {\r\n shouldDirty: true,\r\n }\r\n );\r\n } else if (newOperator === \"between\") {\r\n setValue(`${filter.name}.value`, [\"\", \"\"], {\r\n shouldDirty: true,\r\n });\r\n } else if (\r\n oldOperator === \"between\" ||\r\n oldOperator === \"today\"\r\n ) {\r\n setValue(`${filter.name}.value`, \"\", {\r\n shouldDirty: true,\r\n });\r\n }\r\n }\r\n\r\n onValueChange?.();\r\n }}\r\n >\r\n {dropdownList?.map((item, idx) => (\r\n <MenuItem key={idx} value={item.value}>\r\n {item.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default FormDropdown;\r\n","import { Controller } from \"react-hook-form\";\r\nimport {\r\n FormControl,\r\n Select,\r\n MenuItem,\r\n Theme,\r\n SxProps,\r\n Checkbox,\r\n} from \"@mui/material\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport { DropdownOption } from \"../../../../../types/common\";\r\n\r\nconst FormMultiSelect = ({\r\n filter,\r\n control,\r\n dropdownData,\r\n sx,\r\n onValueChange,\r\n}: {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n dropdownData: Record<string, DropdownOption[]>;\r\n sx?: SxProps<Theme>;\r\n onValueChange?: () => void;\r\n}) => {\r\n const options = dropdownData[filter.filter_attribute] || [];\r\n\r\n return (\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={\r\n Array.isArray(filter.filter_value)\r\n ? filter.filter_value.filter(Boolean)\r\n : []\r\n }\r\n render={({ field }) => {\r\n const cleanedValue = Array.isArray(field.value)\r\n ? field.value.filter(Boolean)\r\n : [];\r\n\r\n return (\r\n <FormControl sx={sx} fullWidth size=\"small\">\r\n <Select\r\n {...field}\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"10px 20px\",\r\n height: \"21px\",\r\n },\r\n }}\r\n multiple\r\n value={cleanedValue}\r\n onChange={(e) => {\r\n const value = e.target.value;\r\n const filtered = Array.isArray(value)\r\n ? value.filter(Boolean)\r\n : [];\r\n field.onChange(filtered);\r\n onValueChange?.();\r\n }}\r\n renderValue={(selected) => {\r\n const filtered = Array.isArray(selected)\r\n ? selected.filter(Boolean)\r\n : [];\r\n return filtered\r\n .map(\r\n (val) =>\r\n options.find((item) => item.value === val)?.label || val\r\n )\r\n .join(\", \");\r\n }}\r\n >\r\n {options.map((item, idx) => (\r\n <MenuItem key={idx} value={item.value}>\r\n <Checkbox\r\n checked={cleanedValue.includes(item.value)}\r\n sx={{ marginRight: 1 }}\r\n />\r\n {item.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default FormMultiSelect;\r\n","import React, { useState } from \"react\";\r\nimport { TextField, InputAdornment, IconButton } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport { CloseIcon } from \"../../../../../assets/svg\";\r\n\r\ninterface SearchInputProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nconst CustomSearch = ({\r\n value = \"\",\r\n onChange,\r\n placeholder = \"Search...\",\r\n}: SearchInputProps) => {\r\n const [search, setSearch] = useState(value);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n setSearch(val);\r\n onChange?.(val);\r\n };\r\n\r\n const handleClear = () => {\r\n setSearch(\"\"); // Clear the search value\r\n onChange?.(\"\"); // Propagate the cleared value\r\n };\r\n\r\n return (\r\n <TextField\r\n fullWidth\r\n size=\"small\"\r\n value={search}\r\n onChange={handleChange}\r\n placeholder={placeholder}\r\n className={\"search-input\"}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon\r\n sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n className=\"search-icon-svg\"\r\n />\r\n </InputAdornment>\r\n ),\r\n endAdornment: search && ( // Show the clear icon only when there's a value\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n edge=\"end\"\r\n onClick={handleClear}\r\n sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#c1c1c1\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default CustomSearch;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface StyleProps {\r\n filterContainer: SxProps<Theme>;\r\n filterMainHeader: SxProps<Theme>;\r\n filterMainComponentWrapper: SxProps<Theme>;\r\n filterAttributeMainSelect: SxProps<Theme>;\r\n scrollbarCustom: SxProps<Theme>;\r\n}\r\n\r\ninterface filterFormStyleType {\r\n formEditModeStyle: SxProps<Theme>;\r\n formFlexContainer: SxProps<Theme>;\r\n formListItem: SxProps<Theme>;\r\n formListItemHeader: SxProps<Theme>;\r\n formListItemHeaderName: SxProps<Theme>;\r\n formListItemHeaderDropdown: SxProps<Theme>;\r\n}\r\n\r\nexport const filterStyles: StyleProps = {\r\n scrollbarCustom: {\r\n overflowY: \"auto\",\r\n pr: 1,\r\n\r\n \"&::-webkit-scrollbar\": {\r\n width: \"4px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"#999\",\r\n borderRadius: \"4px\",\r\n },\r\n \"&::-webkit-scrollbar-track\": {\r\n backgroundColor: \"#f0f0f0\",\r\n },\r\n },\r\n\r\n filterContainer: {\r\n backgroundColor: \"#fff\",\r\n height: \"100%\",\r\n overflowY: \"hidden\",\r\n boxShadow: \"0px 3px 8px 0px rgba(34, 48, 62, 0.10)\",\r\n borderRadius: \"0.5rem\",\r\n },\r\n\r\n filterMainHeader: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n bgcolor: \"#EEEEEE\",\r\n height: \"50px\",\r\n px: 2,\r\n borderBottom: \"1px solid #ccc\",\r\n mx: \"auto\",\r\n },\r\n\r\n filterMainComponentWrapper: {\r\n height: \"calc(100% - 90px)\",\r\n overflowY: \"auto\",\r\n },\r\n\r\n filterAttributeMainSelect: {\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n \"& .MuiSelect-select\": {\r\n padding: \"8px 14px\",\r\n },\r\n },\r\n};\r\n\r\nexport const filterFormStyles: filterFormStyleType = {\r\n formEditModeStyle: {\r\n border: \"1px solid #c5c5c5\",\r\n borderRadius: \"6px\",\r\n padding: \"5px 10px 10px 10px\",\r\n },\r\n\r\n formFlexContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"0.75rem\",\r\n },\r\n\r\n formListItem: {\r\n p: 1,\r\n borderRadius: 2,\r\n backgroundColor: \"#FAFAFA\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 0.5,\r\n },\r\n\r\n formListItemHeader: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n alignItems: \"center\",\r\n gap: 2,\r\n },\r\n\r\n formListItemHeaderName: {\r\n fontWeight: 500,\r\n fontSize: \"13px\",\r\n color: \"#797877\",\r\n },\r\n\r\n formListItemHeaderDropdown: {\r\n fontSize: \"13px\",\r\n minWidth: 50,\r\n border: \"none\",\r\n boxShadow: \"none\",\r\n },\r\n};\r\n","import {\r\n Box,\r\n Button,\r\n styled,\r\n List,\r\n ListItem,\r\n Paper,\r\n ListItemText,\r\n} from \"@mui/material\";\r\nimport { useRef } from \"react\";\r\nimport { AddIcon } from \"../../../../../../assets/svg\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterColumnsListProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../../../types/table-options\";\r\nimport CustomSearch from \"../../search\";\r\nimport { filterStyles } from \"../../../style\";\r\nimport useElementWidth from \"../../../../../libs/hooks/useElementWidth\";\r\n\r\nconst FilterCriteria = ({\r\n columnsData,\r\n tableStates,\r\n setSelectedFilters,\r\n searchTerm,\r\n setSearchTerm,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n tableStates: CraftTableOptionsProps;\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n searchTerm: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n}) => {\r\n const FilterButton = styled(Button)(({ theme }) => ({\r\n borderRadius: 20,\r\n borderColor: theme.palette.primary.main,\r\n color: theme.palette.primary.main,\r\n textTransform: \"none\",\r\n padding: \"8px 16px\",\r\n \"&:hover\": {\r\n borderColor: theme.palette.primary.dark,\r\n },\r\n }));\r\n\r\n const { filters, setFilters, showFilterOptions, setShowFilterOption } =\r\n tableStates;\r\n\r\n const filterButtonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const filterButtonWidth = useElementWidth(filterButtonRef);\r\n\r\n const handleAddFilter = (column: FilterColumnsListProps) => {\r\n const dropdownOptions = columnsData.operation_list[column.data_type];\r\n\r\n const defaultValue = column.data_type === \"multiselect\" ? [] : \"\";\r\n\r\n const defaultOperator = dropdownOptions?.[0]?.value || \"\";\r\n\r\n const matchingDropdownList =\r\n columnsData.operation_list[column.data_type] || [];\r\n\r\n const newFilter = {\r\n filter_attribute: column.attribute_key,\r\n filter_operator: defaultOperator,\r\n filter_value: defaultValue,\r\n };\r\n\r\n const newSelectedFilter = {\r\n ...newFilter,\r\n id: column.id,\r\n name: column.name,\r\n data_type: column.data_type,\r\n dropdown_list: matchingDropdownList,\r\n };\r\n\r\n setFilters((prev) => [...prev, newFilter]);\r\n setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // if (editMode) {\r\n // setEditFilters((prev) => [...prev, newFilter]);\r\n // setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // } else {\r\n // setFilters((prev) => [...prev, newFilter]);\r\n // setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // }\r\n\r\n setShowFilterOption(false);\r\n };\r\n\r\n const toggleFilterOptions = () => {\r\n setShowFilterOption((prev) => !prev);\r\n };\r\n\r\n return (\r\n <Box>\r\n <FilterButton\r\n fullWidth\r\n startIcon={<AddIcon />}\r\n onClick={toggleFilterOptions}\r\n sx={{\r\n bgcolor: \"#eae4fe\",\r\n borderRadius: \"6px\",\r\n color: \"#7a5af8\",\r\n fontSize: \"13px\",\r\n fontWeight: 500,\r\n }}\r\n ref={filterButtonRef}\r\n >\r\n Filter Criteria\r\n </FilterButton>\r\n\r\n {showFilterOptions && (\r\n <Paper\r\n sx={{\r\n width: filterButtonWidth || 360, // Dynamic width based on button\r\n p: 1,\r\n mt: 2,\r\n cursor: \"pointer\",\r\n position: \"absolute\",\r\n zIndex: 1300,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n maxHeight: `calc(100vh - 440px)`,\r\n overflowY: \"auto\",\r\n width: \"100%\",\r\n ...filterStyles.scrollbarCustom,\r\n }}\r\n >\r\n <List>\r\n <CustomSearch\r\n placeholder=\"Filter by...\"\r\n value={searchTerm}\r\n onChange={setSearchTerm}\r\n />\r\n\r\n <Box\r\n sx={{\r\n my: 2,\r\n overflowY: \"auto\",\r\n transition: \"all 0.4s ease-in-out\",\r\n }}\r\n >\r\n {columnsData?.column_list\r\n ?.filter(\r\n (column) =>\r\n column.name.toLowerCase() !== \"action\" && // Exclude Action column in filter criteria options\r\n column.name\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase())\r\n )\r\n .map((column, index) => {\r\n const isAlreadySelected = filters?.some(\r\n (filter) =>\r\n filter.filter_attribute === column.attribute_key\r\n );\r\n\r\n return (\r\n <ListItem\r\n key={index}\r\n onClick={() =>\r\n !isAlreadySelected && handleAddFilter(column)\r\n } // Prevent click if already selected\r\n sx={{\r\n opacity: isAlreadySelected ? 0.5 : 1,\r\n cursor: isAlreadySelected ? \"not-allowed\" : \"pointer\",\r\n }}\r\n >\r\n <ListItemText primary={column.name} />\r\n </ListItem>\r\n );\r\n })}\r\n </Box>\r\n </List>\r\n </Box>\r\n </Paper>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default FilterCriteria;\r\n","import { useState, useEffect } from \"react\";\r\n\r\n// Custom hook to track the width of an element\r\nconst useElementWidth = (ref: React.RefObject<HTMLElement>) => {\r\n const [width, setWidth] = useState<number>(0);\r\n\r\n useEffect(() => {\r\n // If there's no element to observe, just return early\r\n if (!ref.current) return;\r\n\r\n // ResizeObserver callback function\r\n const resizeObserver = new ResizeObserver(() => {\r\n if (ref.current) {\r\n setWidth(ref.current.clientWidth); // Update width state\r\n }\r\n });\r\n\r\n // Start observing the element's size changes\r\n resizeObserver.observe(ref.current);\r\n\r\n // Clean up observer on component unmount\r\n return () => resizeObserver.disconnect();\r\n }, [ref, ref.current?.clientWidth]);\r\n\r\n return width; // Return the current width\r\n};\r\n\r\nexport default useElementWidth;\r\n","import {\r\n Box,\r\n Button,\r\n FormControl,\r\n IconButton,\r\n TextField,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { CloseIcon, DeleteIcon } from \"../../../../../assets/svg\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterDropdownDataProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../../types/filter\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport FormTextfield from \"./components/Textfield\";\r\nimport React, { useEffect, useMemo, useCallback } from \"react\";\r\nimport FormDatePicker from \"./components/Date\";\r\nimport FormDropdown from \"./components/Dropdown\";\r\nimport FormMultiSelect from \"./components/Multi-Select\";\r\nimport { CraftTableOptionsProps } from \"../../../../types/table-options\";\r\nimport FilterCriteria from \"./components/Filter-criteria\";\r\nimport CustomSearch from \"../search\";\r\nimport { customDebounce } from \"../../../../libs/utils/debounce\";\r\nimport { filterFormStyles } from \"../../style\";\r\n\r\ninterface FormValues {\r\n filterName: string;\r\n [key: string]:\r\n | {\r\n value: string | string[];\r\n operator: string;\r\n }\r\n | string;\r\n}\r\n\r\nconst FilterForm = ({\r\n columnsData,\r\n dropdownData,\r\n searchTerm = \"\",\r\n setSearchTerm,\r\n criteriaSearchTerm = \"\",\r\n setCriteriaSearchTerm,\r\n selectedFilters,\r\n setSelectedFilters,\r\n handleRemoveFilter,\r\n editMode = false,\r\n tableStates,\r\n setSavedFilterModalOpen,\r\n setDeleteFilterModalOpen,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n dropdownData: FilterDropdownDataProps;\r\n searchTerm?: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n criteriaSearchTerm?: string;\r\n setCriteriaSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n selectedFilters: UpdatedFilterStateProps[];\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n handleRemoveFilter: (filter_attribute: string) => void;\r\n editMode?: boolean;\r\n tableStates: CraftTableOptionsProps;\r\n setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n}) => {\r\n const { filterMaster, setFilters, setFilterMaster, setPagination } =\r\n tableStates;\r\n\r\n const filterName = filterMaster?.saved_filters?.selectedName || \"\";\r\n\r\n const defaultValues = useMemo(() => {\r\n const filterValues = selectedFilters.reduce((acc, curr) => {\r\n if (curr.name) {\r\n acc[curr.name] = {\r\n value: curr.filter_value ?? \"\",\r\n operator:\r\n curr.filter_operator ?? curr.dropdown_list?.[0]?.value ?? \"\",\r\n };\r\n }\r\n return acc;\r\n }, {} as Record<string, { value: string | string[]; operator: string }>);\r\n\r\n return {\r\n filterName: filterName ?? \"\",\r\n dummyChange: \"\",\r\n ...filterValues,\r\n };\r\n }, [selectedFilters, filterName]);\r\n\r\n const {\r\n control,\r\n watch,\r\n reset,\r\n // formState: { isDirty },\r\n setValue,\r\n unregister,\r\n } = useForm<FormValues & { dummyChange: string }>({\r\n mode: \"onChange\",\r\n defaultValues,\r\n resetOptions: {\r\n keepDirtyValues: false,\r\n keepErrors: false,\r\n },\r\n });\r\n\r\n const formValues = watch();\r\n\r\n useEffect(() => {\r\n reset(defaultValues);\r\n }, [selectedFilters]);\r\n\r\n const debouncedUpdateFilters = useCallback(\r\n customDebounce((updatedFilters: UpdatedFilterStateProps[]) => {\r\n setSelectedFilters(updatedFilters);\r\n setFilters(updatedFilters);\r\n }, 1000),\r\n [setSelectedFilters, setFilters]\r\n );\r\n\r\n const updateFiltersFromForm = useCallback(() => {\r\n const updatedFilters = selectedFilters.map((filter) => {\r\n if (filter.name && typeof formValues[filter.name] === \"object\") {\r\n const filterValue = formValues[filter.name] as {\r\n value: string | string[];\r\n operator: string;\r\n };\r\n\r\n return {\r\n ...filter,\r\n filter_value: filterValue.value,\r\n filter_operator: filterValue.operator,\r\n };\r\n }\r\n return filter;\r\n });\r\n\r\n setPagination((prev) => ({ ...prev, pageIndex: 0 }));\r\n debouncedUpdateFilters(updatedFilters);\r\n }, [formValues, selectedFilters, debouncedUpdateFilters]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n reset();\r\n selectedFilters.forEach((filter) => {\r\n if (filter.name) {\r\n unregister(filter.name);\r\n }\r\n });\r\n };\r\n }, []);\r\n\r\n return (\r\n <form\r\n onSubmit={(e) => {\r\n e.preventDefault(); // 🔥 This prevents the page from reloading\r\n }}\r\n >\r\n <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>\r\n {editMode && (\r\n <Box\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: \"0.5rem 0 1rem 0\",\r\n gap: 1,\r\n }}\r\n >\r\n <Controller\r\n name=\"filterName\"\r\n control={control}\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n size=\"small\"\r\n placeholder=\"Filter Name\"\r\n value={filterName || field.value}\r\n onChange={(e) => {\r\n field.onChange(e);\r\n if (editMode) {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.saved_filters,\r\n selectedName: e.target.value,\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n }\r\n }}\r\n inputRef={field.ref}\r\n sx={{\r\n maxWidth: 400,\r\n\r\n \"& .MuiOutlinedInput-root\": {\r\n bgcolor: \"white\",\r\n borderRadius: \"0px\",\r\n fontSize: \"14px\",\r\n color: \"#272524\",\r\n fontWeight: \"500\",\r\n \"& fieldset\": { borderColor: \"#c5c5c5\" },\r\n \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n },\r\n }}\r\n />\r\n )}\r\n />\r\n <Box onClick={(e) => e.stopPropagation()}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() =>\r\n setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)\r\n }\r\n >\r\n <DeleteIcon />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n <Box\r\n className=\"filter-criteria-form\"\r\n sx={filterFormStyles.formFlexContainer}\r\n >\r\n <FilterCriteria\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n setSelectedFilters={setSelectedFilters}\r\n searchTerm={criteriaSearchTerm}\r\n setSearchTerm={setCriteriaSearchTerm}\r\n />\r\n\r\n {!editMode && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n <Box\r\n className=\"filter-form-inputs\"\r\n sx={filterFormStyles.formFlexContainer}\r\n >\r\n {selectedFilters\r\n .filter(\r\n (filter) =>\r\n filter.name\r\n ?.toLowerCase()\r\n .includes(searchTerm.toLowerCase()) ||\r\n filter.filter_value\r\n ?.toString()\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase())\r\n )\r\n .reverse()\r\n .map((filter) => {\r\n const { dropdown_list = [] } = filter;\r\n return (\r\n <Box\r\n key={filter.filter_attribute}\r\n sx={filterFormStyles.formListItem}\r\n >\r\n <Box sx={filterFormStyles.formListItemHeader}>\r\n <Typography sx={filterFormStyles.formListItemHeaderName}>\r\n {filter.name}\r\n </Typography>\r\n <FormDropdown\r\n filter={filter}\r\n control={control}\r\n setValue={setValue}\r\n dropdownList={dropdown_list}\r\n sx={filterFormStyles.formListItemHeaderDropdown}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n <IconButton\r\n sx={{ marginLeft: \"auto\" }}\r\n onClick={() => {\r\n unregister(`${filter.name}.value`);\r\n unregister(`${filter.name}.operator`);\r\n\r\n // ✅ Toggle dummy field to force form dirty\r\n const dummy = watch(\"dummyChange\");\r\n setValue(\r\n \"dummyChange\",\r\n dummy === \"changed\" ? \"reset\" : \"changed\",\r\n {\r\n shouldDirty: true,\r\n }\r\n );\r\n\r\n handleRemoveFilter(filter.filter_attribute);\r\n }}\r\n size=\"small\"\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n <Box>\r\n {filter.data_type === \"text\" ||\r\n filter.data_type === \"number\" ? (\r\n <FormTextfield\r\n filter={filter}\r\n control={control}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"year\" ? (\r\n <FormDatePicker\r\n filter={filter}\r\n control={control}\r\n views={[\"year\"]}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"date\" ? (\r\n <FormDatePicker\r\n filter={filter}\r\n control={control}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"select\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"multiselect\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"radio\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"checkbox\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : (\r\n <FormControl fullWidth size=\"small\" />\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {selectedFilters.length > 0 && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", gap: 1, mt: 3 }}>\r\n <Button\r\n variant=\"outlined\"\r\n sx={{\r\n color: \"#7A5AF8\",\r\n border: `1px solid #7A5AF8`,\r\n borderRadius: \"6px\",\r\n textTransform: \"none\",\r\n fontSize: \"14px\",\r\n }}\r\n fullWidth\r\n onClick={() => {\r\n setFilters([]);\r\n setSelectedFilters([]);\r\n }}\r\n >\r\n Clear All\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n fullWidth\r\n // disabled={!isDirty && editMode}\r\n sx={{\r\n color: \"white\",\r\n backgroundColor: \"#7A5AF8\",\r\n \"&.Mui-disabled\": {\r\n backgroundColor: \"#d7cefd\",\r\n color: \"rgba(255, 255, 255, 0.7)\",\r\n },\r\n }}\r\n onClick={() => {\r\n setSavedFilterModalOpen && setSavedFilterModalOpen(true);\r\n }}\r\n >\r\n Save Filter\r\n </Button>\r\n </Box>\r\n )}\r\n </form>\r\n );\r\n};\r\n\r\nexport default FilterForm;\r\n","import { Box } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport FilterForm from \"./forms\";\r\nimport {\r\n FilterFormComponentProps,\r\n FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { filterStyles } from \"../style\";\r\n\r\nconst MainFilter = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n setSavedFilterModalOpen,\r\n}: FilterFormComponentProps) => {\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [criteriaSearchTerm, setCriteriaSearchTerm] = useState<string>(\"\");\r\n\r\n const { setFilters, setFilterMaster } = tableStates;\r\n\r\n useEffect(() => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n activeFilterTabIndex: 0,\r\n } as FilterMasterStateProps)\r\n );\r\n }, []);\r\n\r\n const handleRemoveFilter = (filter_attribute: string) => {\r\n setFilters((prev) =>\r\n prev.filter((filter) => filter.filter_attribute !== filter_attribute)\r\n );\r\n setSelectedFilters((prev) =>\r\n prev.filter((filter) => filter.filter_attribute !== filter_attribute)\r\n );\r\n };\r\n\r\n const mainBoxStyles = {\r\n ...filterStyles.filterMainComponentWrapper,\r\n ...filterStyles.scrollbarCustom,\r\n };\r\n\r\n return (\r\n <Box sx={mainBoxStyles} className=\"main-filter-component-wrapper\">\r\n {/* Set selectedFilters state */}\r\n\r\n {/* Render selectedFilters state */}\r\n <FilterForm\r\n columnsData={columnsData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n handleRemoveFilter={handleRemoveFilter}\r\n tableStates={tableStates}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n dropdownData={dropdownData}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MainFilter;\r\n","import { Box, Typography } from \"@mui/material\";\r\nimport FilterForm from \"./forms\";\r\nimport BackArrow from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterDropdownDataProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../types/table-options\";\r\n\r\nconst SavedFilterEditComponent = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n editMode,\r\n setEditMode,\r\n searchTerm,\r\n setSearchTerm,\r\n criteriaSearchTerm,\r\n setCriteriaSearchTerm,\r\n setSavedFilterModalOpen,\r\n setDeleteFilterModalOpen,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n dropdownData: FilterDropdownDataProps;\r\n tableStates: CraftTableOptionsProps;\r\n selectedFilters: UpdatedFilterStateProps[];\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n editMode?: boolean;\r\n setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;\r\n searchTerm?: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n criteriaSearchTerm?: string;\r\n setCriteriaSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n}) => {\r\n const { setFilters, setFilterMaster } = tableStates;\r\n\r\n const handleRemoveFilter = (filter_attribute: string) => {\r\n setFilters((prev) =>\r\n prev.filter((filter) => filter?.filter_attribute !== filter_attribute)\r\n );\r\n setSelectedFilters((prev) =>\r\n prev.filter((filter) => filter?.filter_attribute !== filter_attribute)\r\n );\r\n };\r\n\r\n const handleBackButtonClick = () => {\r\n setEditMode && setEditMode(false);\r\n setFilters([]);\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.saved_filters,\r\n selectedId: \"\",\r\n selectedName: \"\",\r\n },\r\n activeFilterTabIndex: -1,\r\n } as FilterMasterStateProps)\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n cursor: \"pointer\",\r\n mb: 2,\r\n }}\r\n onClick={handleBackButtonClick}\r\n >\r\n <BackArrow sx={{ width: \"13px\", height: \"13px\" }} />\r\n <Typography variant=\"body2\" sx={{ color: \"#8592A3\" }}>\r\n Back To Saved Filters\r\n </Typography>\r\n </Box>\r\n </Box>\r\n\r\n {/* Render selectedFilters state */}\r\n <FilterForm\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n handleRemoveFilter={handleRemoveFilter}\r\n editMode={editMode}\r\n tableStates={tableStates}\r\n columnsData={columnsData}\r\n dropdownData={dropdownData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default SavedFilterEditComponent;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n FilterFormComponentProps,\r\n FilterMasterStateProps,\r\n FilterOperationListProps,\r\n} from \"../../../types/filter\";\r\nimport {\r\n Box,\r\n IconButton,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"./search\";\r\nimport { DeleteIcon, EditIcon } from \"../../../../assets/svg\";\r\nimport SavedFilterEditComponent from \"./saved-edit-filter\";\r\nimport { filterStyles } from \"../style\";\r\nimport { CheckBox } from \"../../../../assets/svg\";\r\n\r\nconst SavedFilter = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n editMode,\r\n setEditMode,\r\n setDeleteFilterModalOpen,\r\n setSavedFilterModalOpen,\r\n tabValue,\r\n}: FilterFormComponentProps) => {\r\n const { setFilterMaster, setFilterToDelete } = tableStates;\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [criteriaSearchTerm, setCriteriaSearchTerm] = useState<string>(\"\");\r\n\r\n // reset savedFilterEditValue when component unmounts\r\n useEffect(() => {\r\n return () => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.attributes,\r\n selectedId: \"\",\r\n selectedName: \"\",\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n\r\n setSelectedFilters([]);\r\n setEditMode && setEditMode(false);\r\n };\r\n }, []);\r\n\r\n const handleListItemClick = (filter: FilterOperationListProps) => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.attributes,\r\n selectedId: filter?.value,\r\n selectedName: filter?.label,\r\n },\r\n activeFilterTabIndex: tabValue,\r\n } as FilterMasterStateProps)\r\n );\r\n // setEditfilter state on edit icon click\r\n setEditMode && setEditMode(true);\r\n setFilterToDelete(filter);\r\n };\r\n\r\n const handleAppyFilter = (filter: FilterOperationListProps) => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.attributes,\r\n selectedId: filter?.value,\r\n selectedName: filter?.label,\r\n },\r\n activeFilterTabIndex: tabValue,\r\n } as FilterMasterStateProps)\r\n );\r\n };\r\n\r\n const renderList = () => (\r\n <>\r\n <CustomSearch\r\n value={searchTerm}\r\n onChange={setSearchTerm}\r\n className=\"search-input\"\r\n />\r\n\r\n {columnsData?.saved_filter?.length === 0 ? (\r\n <Typography sx={{ mt: 2 }}>No saved filters yet.</Typography>\r\n ) : (\r\n <List\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 1,\r\n mt: 2,\r\n }}\r\n >\r\n {columnsData?.saved_filter\r\n ?.filter((filter) =>\r\n filter.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n )\r\n ?.map((filter) => (\r\n <ListItem\r\n key={filter?.value}\r\n sx={{\r\n cursor: \"pointer\",\r\n border:\r\n filter?.value ===\r\n tableStates?.filterMaster?.saved_filters?.selectedId\r\n ? `3px solid #7a5af8`\r\n : \"1px solid #C5C5C5\",\r\n borderRadius: \"8px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n alignItems: \"center\",\r\n \"&:hover .action-icons\": {\r\n opacity: 1,\r\n visibility: \"visible\",\r\n },\r\n }}\r\n onClick={() => handleAppyFilter(filter)}\r\n >\r\n {filter?.value ===\r\n tableStates?.filterMaster?.saved_filters?.selectedId && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n color: \"green\",\r\n rounded: \"full\",\r\n }}\r\n >\r\n <CheckBox />\r\n </Box>\r\n )}\r\n <ListItemText primary={filter?.label} />\r\n\r\n <Box\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"action-icons\"\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n opacity: 0,\r\n visibility: \"hidden\",\r\n transition: \"opacity 0.2s ease, visibility 0.2s ease\",\r\n }}\r\n >\r\n <IconButton\r\n size=\"large\"\r\n onClick={() => handleListItemClick(filter)}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setFilterToDelete(filter);\r\n setDeleteFilterModalOpen?.(true);\r\n }}\r\n >\r\n <DeleteIcon />\r\n </IconButton>\r\n </Box>\r\n </ListItem>\r\n ))}\r\n </List>\r\n )}\r\n </>\r\n );\r\n\r\n const mainBoxStyles = {\r\n ...filterStyles.filterMainComponentWrapper,\r\n ...filterStyles.scrollbarCustom,\r\n };\r\n\r\n return (\r\n <Box sx={mainBoxStyles} className=\"saved-filter-component-wrapper\">\r\n {/* Render search input and list */}\r\n {!editMode && renderList()}\r\n\r\n {editMode ? (\r\n <SavedFilterEditComponent\r\n columnsData={columnsData}\r\n dropdownData={dropdownData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n editMode={editMode}\r\n setEditMode={setEditMode}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n />\r\n ) : null}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SavedFilter;\r\n","import {\r\n Box,\r\n FormControl,\r\n FormControlLabel,\r\n MenuItem,\r\n Radio,\r\n Select,\r\n SelectChangeEvent,\r\n} from \"@mui/material\";\r\nimport {\r\n AttributesFilterProps,\r\n FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport CustomSearch from \"./search\";\r\nimport { useMemo } from \"react\";\r\n\r\nconst AttributesFilter = ({\r\n columnsData,\r\n tableStates,\r\n dropdownData,\r\n searchTerm,\r\n setSearchTerm,\r\n tabValue,\r\n}: AttributesFilterProps) => {\r\n const { filterMaster, setFilterMaster, filters, setFilters } = tableStates;\r\n\r\n const selectedAttribute = filterMaster?.attributes?.selected;\r\n\r\n // Get the current filter value (single selection)\r\n const currentFilterValue = useMemo(() => {\r\n if (!selectedAttribute) return [];\r\n\r\n const matchingColumn = columnsData?.column_list?.find(\r\n (column) => column.datasource_list === selectedAttribute\r\n );\r\n\r\n if (!matchingColumn) return [];\r\n\r\n const existingFilter = filters.find(\r\n (filter) => filter.filter_attribute === matchingColumn.attribute_key\r\n );\r\n\r\n return Array.isArray(existingFilter?.filter_value)\r\n ? existingFilter?.filter_value\r\n : [];\r\n }, [selectedAttribute, filters, columnsData]);\r\n\r\n const handleSelectChange = (event: SelectChangeEvent) => {\r\n const attributeKey = event.target.value as string;\r\n\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n attributes: {\r\n ...prev?.attributes,\r\n selected: attributeKey,\r\n radio: [],\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n };\r\n\r\n const handleSingleRadioSelect = (value: string) => {\r\n const selectedAttr = filterMaster?.attributes.selected;\r\n if (!selectedAttr) return;\r\n\r\n const matchingColumn = columnsData?.column_list?.find(\r\n (column) => column.datasource_list === selectedAttr\r\n );\r\n if (!matchingColumn) return;\r\n\r\n const defaultOperator =\r\n columnsData.operation_list[matchingColumn.data_type]?.[0]?.value || \"in\";\r\n\r\n const newFilter = {\r\n filter_attribute: matchingColumn.attribute_key,\r\n filter_operator: defaultOperator,\r\n filter_value: [value], // single selection\r\n };\r\n\r\n setFilters((prevFilters) => {\r\n const exists = prevFilters.some(\r\n (f) => f.filter_attribute === matchingColumn.attribute_key\r\n );\r\n if (exists) {\r\n return prevFilters.map((f) =>\r\n f.filter_attribute === matchingColumn.attribute_key ? newFilter : f\r\n );\r\n } else {\r\n return [...prevFilters, newFilter];\r\n }\r\n });\r\n\r\n setFilterMaster((prev) => {\r\n if (!prev || !prev.attributes.selected) return prev;\r\n\r\n return {\r\n ...prev,\r\n attributes: {\r\n ...prev.attributes,\r\n radio: [value],\r\n },\r\n activeFilterTabIndex: tabValue as number,\r\n };\r\n });\r\n };\r\n\r\n const selectedAttributeOptions = useMemo(() => {\r\n const selected = columnsData?.column_list?.find(\r\n (col) => col.datasource_list === selectedAttribute\r\n )?.attribute_key;\r\n\r\n return selected ? dropdownData[selected] : [];\r\n }, [selectedAttribute, dropdownData]);\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"1.25rem\",\r\n }}\r\n className=\"attributes-filter-component-wrapper\"\r\n >\r\n {/* Attribute Select Dropdown */}\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={selectedAttribute || \"\"}\r\n onChange={handleSelectChange}\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <span>Select Attribute</span>;\r\n }\r\n return columnsData?.column_list?.find(\r\n (col) => col.datasource_list === selected\r\n )?.name;\r\n }}\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n \"& .MuiSelect-select\": {\r\n padding: \"8px 14px\",\r\n },\r\n }}\r\n >\r\n {columnsData?.column_list\r\n ?.filter((column) => column.data_type.includes(\"select\"))\r\n .map((column, index) => (\r\n <MenuItem\r\n key={index}\r\n value={column.datasource_list}\r\n disabled={column.datasource_list === selectedAttribute}\r\n >\r\n {column.name}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n\r\n {/* Search and Single Radio Options */}\r\n <Box>\r\n {selectedAttribute && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n {dropdownData && (\r\n <Box\r\n className=\"attributes-filter-list\"\r\n sx={{ mt: 2, overflow: \"auto\", maxHeight: \"calc(100dvh - 300px)\" }}\r\n >\r\n <FormControl>\r\n {selectedAttributeOptions\r\n ?.filter((option) => {\r\n if (!searchTerm) return true;\r\n return option.label\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase());\r\n })\r\n .map((option) => {\r\n const isSelected = currentFilterValue.includes(option.value);\r\n\r\n return (\r\n <FormControlLabel\r\n key={option.value}\r\n control={\r\n <Radio\r\n checked={isSelected}\r\n onChange={() => handleSingleRadioSelect(option.value)}\r\n />\r\n }\r\n label={option.label}\r\n />\r\n );\r\n })}\r\n </FormControl>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default AttributesFilter;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface VerticalTabStyleProps {\r\n mainTabsContainer: SxProps<Theme>;\r\n mainTabContainer: SxProps<Theme>;\r\n mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const verticalTabStyles: VerticalTabStyleProps = {\r\n mainTabsContainer: {\r\n backgroundColor: \"#FAFAF9\",\r\n height: \"100%\",\r\n minWidth: \"6.75rem\",\r\n position: \"sticky\",\r\n top: \"0\",\r\n left: \"0\",\r\n\r\n \"& .MuiTabs-indicator\": {\r\n display: \"none\",\r\n },\r\n },\r\n\r\n mainTabContainer: {\r\n borderRadius: \"0.375rem\",\r\n padding: \"0.5rem 1.25rem\",\r\n alignItems: \"flex-start\",\r\n color: \"rgba(14, 12, 11, 0.9)\",\r\n textTransform: \"initial\",\r\n minHeight: \"38px\",\r\n\r\n \"&.Mui-selected\": {\r\n backgroundColor: \"rgba(122, 90, 248, 0.16)\",\r\n color: \"#7A5AF8\",\r\n borderRadius: \"0.375rem\",\r\n },\r\n },\r\n\r\n mainTabLabel: {},\r\n};\r\n\r\ninterface HorizontalTabStyleProps {\r\n mainTabsContainer: SxProps<Theme>;\r\n mainTabContainer: SxProps<Theme>;\r\n mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const horizontalTabStyles: HorizontalTabStyleProps = {\r\n mainTabsContainer: {\r\n mb: 2,\r\n \"& .MuiTab-root\": {\r\n color: \"#0E0C0BE5\",\r\n textTransform: \"none\",\r\n fontWeight: 500,\r\n },\r\n \"& .Mui-selected\": {\r\n color: \"#7A5AF8\",\r\n },\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"#7A5AF8\",\r\n height: 3,\r\n },\r\n },\r\n\r\n mainTabContainer: {},\r\n\r\n mainTabLabel: {},\r\n};\r\n","import { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { verticalTabStyles } from \"../styles\";\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n tabItems: { label: string }[];\r\n}\r\n\r\nconst CustomVerticalTabs = ({ tabItems, ...props }: StyledTabsProps) => {\r\n const { value, onChange } = props;\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n aria-label=\"vertical-tabs\"\r\n orientation=\"vertical\"\r\n variant=\"scrollable\"\r\n sx={verticalTabStyles.mainTabsContainer}\r\n {...props}\r\n >\r\n {tabItems.map((tab, idx) => {\r\n return (\r\n <Tab\r\n key={idx}\r\n sx={verticalTabStyles.mainTabContainer}\r\n label={\r\n <Box sx={verticalTabStyles.mainTabLabel}>\r\n <span>{tab.label}</span>\r\n </Box>\r\n }\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomVerticalTabs;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n children,\r\n value,\r\n index,\r\n ...props\r\n}: TabPanelProps) => {\r\n return (\r\n <Box\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`simple-tabpanel-${index}`}\r\n aria-labelledby={`simple-tab-${index}`}\r\n {...props}\r\n sx={{ height: \"100%\" }}\r\n >\r\n {value === index && children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Box } from \"@mui/material\";\r\nimport { DragIndicator } from \"@mui/icons-material\";\r\n\r\nexport interface SortableFilterItemProps {\r\n id: string;\r\n containerId: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst DraggableListItem = ({\r\n id,\r\n containerId,\r\n children,\r\n}: SortableFilterItemProps) => {\r\n const {\r\n attributes,\r\n listeners,\r\n setNodeRef,\r\n transform,\r\n transition,\r\n isDragging,\r\n } = useSortable({\r\n id,\r\n data: {\r\n type: \"filter-item\",\r\n containerId,\r\n id,\r\n },\r\n });\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n opacity: isDragging ? 0.8 : 1,\r\n };\r\n\r\n return (\r\n <Box\r\n ref={setNodeRef}\r\n style={style}\r\n {...attributes}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n \"&:hover\": { bgcolor: \"#f5f5f5\" },\r\n borderRadius: 1,\r\n marginBottom: 1,\r\n cursor: isDragging ? \"grabbing\" : \"default\",\r\n boxShadow: isDragging ? \"0 2px 8px rgba(0,0,0,0.1)\" : \"none\",\r\n }}\r\n >\r\n <Box\r\n {...listeners}\r\n sx={{ cursor: \"grab\", display: \"flex\", alignItems: \"center\" }}\r\n >\r\n <DragIndicator sx={{ mr: 1, color: \"#ccc\" }} />\r\n </Box>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DraggableListItem;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface DialogStyleProps {\r\n dialogTitle: SxProps<Theme>;\r\n dialogContent: SxProps<Theme>;\r\n dialogActionsButton: SxProps<Theme>;\r\n}\r\n\r\ninterface ListingValuesStyleProps {\r\n wrapper: SxProps<Theme>;\r\n heading: SxProps<Theme>;\r\n button: SxProps<Theme>;\r\n draggableContainer: SxProps<Theme>;\r\n draggableCover: SxProps<Theme>;\r\n itemLabel: SxProps<Theme>;\r\n headerContainer: SxProps<Theme>;\r\n}\r\ninterface TabStyleProps {\r\n mainTabsHeader: SxProps<Theme>;\r\n mainTabSelect: SxProps<Theme>;\r\n mainTabDropdown: SxProps<Theme>;\r\n selectDropdownSeparator: SxProps<Theme>;\r\n checkboxStyle: SxProps<Theme>;\r\n}\r\n\r\nexport const dialogStyles: DialogStyleProps = {\r\n dialogTitle: {\r\n backgroundColor: \"#FBFBFC\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"0.75rem\",\r\n },\r\n\r\n dialogContent: {\r\n display: \"flex\",\r\n gap: \"1rem\",\r\n paddingTop: \"1rem !important\",\r\n },\r\n\r\n dialogActionsButton: {\r\n backgroundColor: \"#7A5AF8\",\r\n color: \"#fff\",\r\n },\r\n};\r\n\r\nexport const listingValuesStyles: ListingValuesStyleProps = {\r\n wrapper: {\r\n border: \"0.5px solid #0E0C0B1F\",\r\n borderRadius: \"8px\",\r\n minHeight: \"10rem\",\r\n backgroundColor: \"#fdfdfc\",\r\n zIndex: 1,\r\n },\r\n heading: { fontWeight: 400, color: \"#0E0C0BB2\", fontSize: \"16px\" },\r\n button: { fontSize: \"13px\", textTransform: \"none\", color: \"#0E0C0BB2\" },\r\n draggableContainer: {\r\n maxHeight: 200,\r\n borderRadius: 1,\r\n mt: 2,\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n draggableCover: {\r\n minHeight: \"200px\",\r\n maxHeight: \"200px\",\r\n overflowY: \"auto\",\r\n },\r\n itemLabel: { display: \"flex\", alignItems: \"center\", flex: 1 },\r\n headerContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n mb: 2,\r\n },\r\n};\r\n\r\nexport const TabsStyles: TabStyleProps = {\r\n mainTabsHeader: {\r\n fontStyle: \"italic\",\r\n fontWeight: 400,\r\n fontSize: \"12px\",\r\n color: \"#0E0C0BB2\",\r\n },\r\n mainTabDropdown: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n width: \"50%\",\r\n paddingRight: 1,\r\n },\r\n mainTabSelect: {\r\n width: \"65%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n },\r\n\r\n selectDropdownSeparator: {\r\n width: \"30%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n },\r\n\r\n checkboxStyle: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n};\r\n","import { Box, CircularProgress, Typography } from \"@mui/material\";\r\n\r\nconst Loader = ({ loaderText }: { loaderText?: string }) => {\r\n return (\r\n <Box\r\n display={\"flex\"}\r\n justifyContent=\"center\"\r\n alignItems={\"center\"}\r\n flexDirection={\"column\"}\r\n gap={2}\r\n height={\"100%\"}\r\n width={\"100%\"}\r\n >\r\n <CircularProgress />\r\n {loaderText && <Typography variant=\"h6\">{loaderText}</Typography>}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import {\r\n Alert,\r\n Box,\r\n Button,\r\n Grid,\r\n IconButton,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"../../filter/components/search/index.tsx\";\r\nimport {\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { useDroppable } from \"@dnd-kit/core\";\r\nimport DraggableListItem from \"./draggable-listitem.tsx\";\r\nimport { listingValuesStyles } from \"../style.ts\";\r\nimport Loader from \"../../common/loader/loader.tsx\";\r\nimport { ClosedEyeIcon, EyeIcon } from \"../../../../assets/svg.tsx\";\r\nimport InfoAlert from \"./info-alert.tsx\";\r\nimport React from \"react\";\r\n``;\r\n\r\ninterface FilterValue {\r\n id: string;\r\n label: string;\r\n}\r\n\r\ninterface ListingValuesProps {\r\n filteredValues: FilterValue[];\r\n buttonText: string;\r\n onClick: () => void;\r\n headerText: string;\r\n searchTerm?: string;\r\n setSearchTerm?: React.Dispatch<React.SetStateAction<string>>;\r\n containerId: string;\r\n tabsApiDataLoading?: boolean;\r\n onItemToggle: (itemId: string, fromContainerId: string) => void;\r\n enableDragAndDrop?: boolean;\r\n isQuickTabActive?: boolean;\r\n AlertComponenet?: React.ReactNode;\r\n}\r\n\r\nconst ListingValuesContent = ({\r\n item,\r\n containerId,\r\n onItemToggle,\r\n}: {\r\n item: FilterValue;\r\n containerId: string;\r\n onItemToggle: (itemId: string, fromContainerId: string) => void;\r\n}) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n flex: 1,\r\n color: containerId === \"tabs\" ? \"black\" : \"#9e9d9b\",\r\n }}\r\n >\r\n <Typography>{item.label}</Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => onItemToggle(item.id, containerId)}\r\n >\r\n {containerId === \"tabs\" ? <EyeIcon /> : <ClosedEyeIcon />}\r\n </IconButton>\r\n </Box>\r\n );\r\n};\r\n\r\nconst ListingValues = ({\r\n filteredValues,\r\n buttonText,\r\n onClick,\r\n headerText,\r\n searchTerm,\r\n setSearchTerm,\r\n containerId,\r\n tabsApiDataLoading,\r\n onItemToggle,\r\n enableDragAndDrop = true,\r\n AlertComponenet,\r\n}: ListingValuesProps) => {\r\n const { setNodeRef } = useDroppable({\r\n id: containerId,\r\n data: {\r\n type: \"container\",\r\n containerId: containerId,\r\n },\r\n });\r\n\r\n return (\r\n <Grid size={6} sx={listingValuesStyles.wrapper}>\r\n {tabsApiDataLoading ? (\r\n <Loader />\r\n ) : (\r\n <>\r\n <Box sx={{ p: 2, zIndex: 10 }}>\r\n <Box sx={listingValuesStyles.headerContainer}>\r\n <Typography variant=\"h6\" sx={listingValuesStyles.heading}>\r\n {headerText}\r\n </Typography>\r\n <Button\r\n onClick={onClick}\r\n variant=\"text\"\r\n size=\"small\"\r\n sx={listingValuesStyles.button}\r\n disabled={filteredValues.length === 0}\r\n >\r\n {buttonText}\r\n </Button>\r\n </Box>\r\n\r\n {searchTerm !== undefined && setSearchTerm !== undefined && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n <Box ref={setNodeRef} sx={listingValuesStyles.draggableContainer}>\r\n {enableDragAndDrop ? (\r\n <SortableContext\r\n items={filteredValues.map((item) => item.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n <Box sx={listingValuesStyles.draggableCover}>\r\n {filteredValues.map((item) => (\r\n <DraggableListItem\r\n key={item.id}\r\n id={item.id}\r\n containerId={containerId}\r\n >\r\n <ListingValuesContent\r\n item={item}\r\n containerId={containerId}\r\n onItemToggle={onItemToggle}\r\n />\r\n </DraggableListItem>\r\n ))}\r\n </Box>\r\n </SortableContext>\r\n ) : (\r\n <Box sx={listingValuesStyles.draggableCover}>\r\n {filteredValues.map((item) => (\r\n <ListingValuesContent\r\n key={item.id}\r\n item={item}\r\n containerId={containerId}\r\n onItemToggle={onItemToggle}\r\n />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n {AlertComponenet && AlertComponenet}\r\n </>\r\n )}\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default ListingValues;\r\n","import { Alert, Box } from \"@mui/material\";\r\n\r\ninterface InfoAlertProps {\r\n message: string;\r\n width?: string | number;\r\n top?: number | string;\r\n color?: string;\r\n zIndex?: number;\r\n position?: \"absolute\" | \"relative\" | \"fixed\" | \"sticky\";\r\n}\r\n\r\nconst InfoAlert = ({\r\n message,\r\n width = \"100%\",\r\n top = 10,\r\n color = \"#088AB2\",\r\n zIndex = 0,\r\n position = \"absolute\",\r\n}: InfoAlertProps) => {\r\n return (\r\n <Box\r\n sx={{\r\n fontSize: \"12px\",\r\n color,\r\n width,\r\n height: \"fit-content\",\r\n position,\r\n zIndex,\r\n top,\r\n }}\r\n >\r\n <Alert severity=\"info\">{message}</Alert>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default InfoAlert;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\n\r\nconst QuickTab = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: SettingsQuickTabProps) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as QuickTabConfigProps;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: columnsData?.column_list?.filter(\r\n (item) => item.datasource_list\r\n )[0]?.attribute_key,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Tab: Please select at least one item\"\r\n : \"Quick Tab: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || []).map((id) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowAllTabChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n isAllSelected: e.target.checked,\r\n },\r\n }));\r\n };\r\n const handleCombineOtherTabChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n isCombineOther: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"tabs\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in horizontal tabs\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n >\r\n {columnsData?.column_list\r\n ?.filter((col) => col.datasource_list != null)\r\n .map((column) => (\r\n <MenuItem\r\n key={column?.attribute_key}\r\n value={column?.attribute_key}\r\n >\r\n {column?.name}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n >\r\n {sortingOptions.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as tabs.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Tabs\"\r\n filteredValues={showListValues}\r\n containerId=\"tabs\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n AlertComponenet={\r\n <InfoAlert\r\n message=\"Please select at least 1 and at most 5 values to display as\r\n tabs.\"\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={10}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.isAllSelected || false}\r\n onChange={handleShowAllTabChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label='Show \"All\" tab'\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.isCombineOther || false}\r\n onChange={handleCombineOtherTabChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label='Combine remaining values under \"Other\" tab'\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default QuickTab;\r\n","import { Tabs, TabsProps } from \"@mui/material\";\r\nimport { horizontalTabStyles } from \"../styles\";\r\n\r\nconst CustomTabs = ({ children, ...props }: TabsProps) => {\r\n const { value, onChange } = props;\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n aria-label=\"horizontal-tabs\"\r\n variant=\"scrollable\"\r\n sx={horizontalTabStyles.mainTabsContainer}\r\n {...props}\r\n >\r\n {children}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomTabs;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, Typography, Tab, Grid } from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport CustomToggleSwitchButton from \"./toggle-button-switch\";\r\nimport { FilterColumnsDataProps } from \"../../../types/filter\";\r\nimport { TOGGLE_BUTTON_TABS } from \"../constants\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport { ColumnTabConfigProps } from \"../../../types/filter-settings\";\r\nimport InfoAlert from \"../common/info-alert\";\r\n\r\nexport interface ColumnItem {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface TabData {\r\n tab_name: string;\r\n show_list: ColumnItem[];\r\n hide_list: ColumnItem[];\r\n}\r\n\r\ninterface ColumnTabProps {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: FilterColumnsDataProps;\r\n}\r\n\r\nconst ColumnTab = ({ filterSettingStates, columnsData }: ColumnTabProps) => {\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [selectedTabIndex, setSelectedTabIndex] = useState<number>(0);\r\n\r\n const {\r\n quickTabStates,\r\n settingsData,\r\n setSettingsData,\r\n saveButtonError,\r\n setSaveButtonError,\r\n } = filterSettingStates;\r\n const settingsColumnState = (settingsData?.column ||\r\n {}) as ColumnTabConfigProps;\r\n const isColumnDefault = settingsColumnState?.isDefault || false;\r\n const ERROR_CODE = \"column_error\";\r\n\r\n /**\r\n * ? What is this for?\r\n *\r\n * Three main conditions are checked here:\r\n * - If the state is empty, then set the state to default and add all columns in show_list\r\n * - if Default is selected and Default is empty, then add all columns in show_list\r\n * - If Default is not selected and tabs is empty, then add all columns in show_list\r\n * of their respective tabs\r\n */\r\n useEffect(() => {\r\n const stateToArray = Object.entries(settingsColumnState) || [];\r\n const isStateEmpty = stateToArray.length ? false : true;\r\n const isDefaultEmpty =\r\n settingsColumnState?.show_list?.length ||\r\n settingsColumnState?.hide_list?.length\r\n ? false\r\n : true;\r\n const isTabWiseEmpty = settingsColumnState?.tabs?.length ? false : true;\r\n\r\n const mappedColumns: ColumnItem[] =\r\n columnsData?.column_list?.map((column) => ({\r\n label: column?.name,\r\n value: column?.attribute_key,\r\n })) || [];\r\n\r\n if (isStateEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n isDefault: true,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n },\r\n }));\r\n } else if (isColumnDefault && isDefaultEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n },\r\n }));\r\n } else if (!isColumnDefault && isTabWiseEmpty) {\r\n const mappedTabs: TabData[] =\r\n quickTabStates?.show_list?.map((tab) => ({\r\n tab_name: tab,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n })) || [];\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: mappedTabs,\r\n },\r\n }));\r\n }\r\n }, [isColumnDefault]);\r\n\r\n useEffect(() => {\r\n const showList = settingsColumnState?.show_list || [];\r\n const hideList = settingsColumnState?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n const isValidShowList = showList?.length > 0;\r\n\r\n if (!isValidShowList) {\r\n const hasColumnError = saveButtonError.messages.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n if (!hasColumnError) {\r\n setSaveButtonError((prev) => ({\r\n ...prev,\r\n hasError: true,\r\n messages: [\r\n ...prev.messages,\r\n {\r\n type: ERROR_CODE,\r\n message: \"Column: Please select at least one column\",\r\n },\r\n ],\r\n }));\r\n }\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n\r\n // Reset error state if the list is valid\r\n setSaveButtonError((prev) => ({\r\n ...prev,\r\n hasError: hasOtherMessages,\r\n messages:\r\n prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n [],\r\n }));\r\n }\r\n }\r\n }, [settingsColumnState?.show_list, settingsColumnState?.hide_list]);\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const handleToggleChange = (\r\n _: React.MouseEvent<HTMLElement>,\r\n newValue: boolean\r\n ) => {\r\n if (newValue !== null) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n isDefault: newValue,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const getCurrentLists = () => {\r\n if (settingsColumnState?.isDefault) {\r\n return {\r\n showList: settingsColumnState.show_list || [],\r\n hideList: settingsColumnState.hide_list || [],\r\n };\r\n } else {\r\n const currentTab = settingsColumnState?.tabs?.[selectedTabIndex];\r\n return {\r\n showList: currentTab?.show_list || [],\r\n hideList: currentTab?.hide_list || [],\r\n };\r\n }\r\n };\r\n\r\n const { showList, hideList } = getCurrentLists();\r\n\r\n const showListValues = showList.map((item) => ({\r\n id: item.value,\r\n label: item.label,\r\n visible: true,\r\n }));\r\n\r\n const hideListValues = hideList.map((item) => ({\r\n id: item.value,\r\n label: item.label,\r\n visible: false,\r\n }));\r\n\r\n const filteredListValues = hideListValues.filter((value) =>\r\n value.label.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n let newShowList = [...showList];\r\n let newHideList = [...hideList];\r\n\r\n if (fromContainerId === \"tabs\") {\r\n const idx = newShowList.findIndex((item) => item.value === itemId);\r\n if (idx > -1) {\r\n const [moved] = newShowList.splice(idx, 1);\r\n newHideList.push(moved);\r\n }\r\n } else if (fromContainerId === \"list\") {\r\n const idx = newHideList.findIndex((item) => item.value === itemId);\r\n if (idx > -1) {\r\n const [moved] = newHideList.splice(idx, 1);\r\n newShowList.push(moved);\r\n }\r\n }\r\n\r\n if (isColumnDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n const updatedTabs = [...(settingsColumnState?.tabs || [])];\r\n updatedTabs[selectedTabIndex] = {\r\n ...updatedTabs[selectedTabIndex],\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n };\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: updatedTabs,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) return;\r\n\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n\r\n const activeItem = [...showList, ...hideList].find(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (!activeItem) return;\r\n\r\n let newShowList = [...showList];\r\n let newHideList = [...hideList];\r\n\r\n if (currentContainer === overContainer) {\r\n const list = currentContainer === \"list\" ? newHideList : newShowList;\r\n const oldIndex = list.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n const newIndex = list.findIndex((item) => item.value === String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = list.splice(oldIndex, 1);\r\n list.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n const idx = newHideList.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(activeItem);\r\n }\r\n } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n const idx = newShowList.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(activeItem);\r\n }\r\n }\r\n }\r\n\r\n if (isColumnDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n const updatedTabs = [...(settingsColumnState?.tabs || [])];\r\n updatedTabs[selectedTabIndex] = {\r\n ...updatedTabs[selectedTabIndex],\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n };\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: updatedTabs,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleShowAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: [...showList, ...hideList],\r\n hide_list: [],\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: [],\r\n hide_list: [...hideList, ...showList],\r\n },\r\n }));\r\n };\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n setSelectedTabIndex(newValue);\r\n };\r\n\r\n const hasShowListQuickTabs =\r\n quickTabStates?.show_list?.length !== 0 || isColumnDefault;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"0.75rem\",\r\n height: \"100%\",\r\n position: \"relative\",\r\n }}\r\n >\r\n <Box>\r\n <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\r\n Customize column by\r\n </Typography>\r\n {/* <CustomToggleSwitchButton\r\n buttons={TOGGLE_BUTTON_TABS}\r\n value={isColumnDefault}\r\n onChange={handleToggleChange}\r\n /> */}\r\n </Box>\r\n\r\n <Box sx={{ flex: 1 }}>\r\n {!isColumnDefault && hasShowListQuickTabs && (\r\n <CustomTabs value={selectedTabIndex} onChange={handleTabChange}>\r\n {quickTabStates?.show_list?.map((tab) => (\r\n <Tab key={tab} label={tab} />\r\n ))}\r\n </CustomTabs>\r\n )}\r\n\r\n {hasShowListQuickTabs ? (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid container spacing={2}>\r\n <ListingValues\r\n containerId=\"list\"\r\n headerText=\"Hidden In List\"\r\n filteredValues={filteredListValues}\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n onItemToggle={handleItemToggle}\r\n />\r\n <ListingValues\r\n containerId=\"tabs\"\r\n headerText=\"Show In List\"\r\n filteredValues={showListValues}\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n onItemToggle={handleItemToggle}\r\n AlertComponenet={\r\n <InfoAlert\r\n message={\r\n \"Please select at least 1 value to display as tabs.\"\r\n }\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={2}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n ) : (\r\n <Typography>View as Tabs empty in Quick Tab</Typography>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ColumnTab;\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n Box,\r\n Button,\r\n IconButton,\r\n MenuItem,\r\n Select,\r\n Tab,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport {\r\n ColumnTabConfigProps,\r\n SettingsSortingProps,\r\n SortingConfigProps,\r\n SortingConfigSortByProps,\r\n} from \"../../../types/filter-settings\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport {\r\n closestCenter,\r\n DndContext,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport SortableItem from \"../../sorting-modal.tsx/sorting-item\";\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { AddIcon, CloseIcon } from \"../../../../assets/svg\";\r\n\r\nconst Sorting = ({\r\n filterSettingStates,\r\n columnsData,\r\n}: SettingsSortingProps) => {\r\n const { quickTabStates, saveButtonError, settingsData, setSettingsData } =\r\n filterSettingStates;\r\n\r\n const [activeTab, setActiveTab] = useState<string | undefined>(\r\n quickTabStates?.show_list?.[0]\r\n );\r\n\r\n const columnTabState = settingsData?.column as ColumnTabConfigProps;\r\n const sortingTabState = settingsData?.sorting as SortingConfigProps;\r\n const isSortingDefault = sortingTabState?.isDefault;\r\n\r\n const isStateEmpty = useMemo(() => {\r\n return !sortingTabState || Object.entries(sortingTabState).length === 0;\r\n }, [sortingTabState]);\r\n\r\n const isEmptyDefault = useMemo(() => {\r\n return !isStateEmpty && !sortingTabState?.sortby?.length;\r\n }, [isStateEmpty, sortingTabState]);\r\n\r\n const ERROR_CODE = \"sorting_error\";\r\n\r\n useEffect(() => {\r\n const emptySortBy: SortingConfigSortByProps[] = [\r\n { column: \"\", order: \"asc\" },\r\n ];\r\n\r\n if (isStateEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n isDefault: true,\r\n sortby: emptySortBy,\r\n },\r\n }));\r\n } else if (isEmptyDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n isDefault: true,\r\n },\r\n }));\r\n\r\n if (!sortingTabState?.isDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n sortby: emptySortBy,\r\n },\r\n }));\r\n }\r\n }\r\n }, [\r\n isStateEmpty,\r\n isEmptyDefault,\r\n sortingTabState,\r\n quickTabStates,\r\n setSettingsData,\r\n ]);\r\n\r\n // sortingTabState.sortby is filtered based on columnTabState.show_list\r\n useEffect(() => {\r\n // filter sorting sortby based on column show list\r\n if (columnTabState?.isDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n // remove sortby items that are not in column show list\r\n sortby: prev.sorting?.sortby?.filter((item) =>\r\n columnTabState?.show_list?.some(\r\n (columnItem) => columnItem.value === item.column\r\n )\r\n ),\r\n },\r\n }));\r\n }\r\n }, [columnTabState?.show_list]);\r\n\r\n const sensors = useSensors(useSensor(PointerSensor));\r\n\r\n const activeTabIndex = sortingTabState?.tabs?.findIndex(\r\n (tab) => tab?.tab_name === activeTab\r\n );\r\n\r\n /**\r\n * * What is happening here?\r\n *\r\n * * If isDefault is true\r\n * * - Return the sortby array from the state\r\n *\r\n * * If isDefault is false\r\n * * - Filter tabs array from sortingTabState according to activeTab index\r\n *\r\n * * If activeTab is undefined\r\n * * - Return an empty array\r\n */\r\n const tabSortedList = useMemo(() => {\r\n return isSortingDefault\r\n ? sortingTabState?.sortby\r\n : activeTab !== undefined\r\n ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n : []\r\n : [];\r\n }, [sortingTabState, activeTab]);\r\n\r\n const updateSortList = (updated: SortingConfigSortByProps[]) => {\r\n setSettingsData((prev) => {\r\n if (prev?.sorting?.isDefault) {\r\n return { ...prev, sorting: { ...prev?.sorting, sortby: updated } };\r\n } else {\r\n const tabs = [...(prev?.sorting?.tabs || [])];\r\n tabs[activeTabIndex || 0] = {\r\n ...tabs[activeTabIndex || 0],\r\n sortby: updated,\r\n };\r\n return { ...prev, sorting: { ...prev?.sorting, tabs } };\r\n }\r\n });\r\n };\r\n\r\n const handleDNDDropdownChange = (\r\n key: \"column\" | \"order\",\r\n value: string,\r\n index: number\r\n ) => {\r\n if (!tabSortedList) return;\r\n\r\n const updated = [...tabSortedList];\r\n updated[index] = { ...updated[index], [key]: value };\r\n updateSortList(updated);\r\n };\r\n\r\n const handleAddSort = () => {\r\n if (!tabSortedList) return;\r\n\r\n const newItem: SortingConfigSortByProps = {\r\n column: \"\",\r\n order: \"asc\",\r\n };\r\n\r\n updateSortList([...tabSortedList, newItem]);\r\n };\r\n\r\n const handleRemove = (columnKey: string) => {\r\n if (!tabSortedList) return;\r\n\r\n const updated = tabSortedList.filter((item) => item.column !== columnKey);\r\n updateSortList(updated);\r\n };\r\n\r\n const handleModeChange = (\r\n _: React.MouseEvent<HTMLElement>,\r\n value: boolean\r\n ) => {\r\n if (value !== null) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n isDefault: value,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: any) => {\r\n if (!tabSortedList) return;\r\n\r\n const { active, over } = event;\r\n if (!over || active.id === over.id) return;\r\n\r\n const oldIndex = tabSortedList.findIndex((i) => i.column === active.id);\r\n const newIndex = tabSortedList.findIndex((i) => i.column === over.id);\r\n\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const reordered = arrayMove(tabSortedList, oldIndex, newIndex);\r\n updateSortList(reordered);\r\n }\r\n };\r\n\r\n const hasShowListQuickTabs =\r\n quickTabStates?.show_list?.length !== 0 || isSortingDefault ? true : false;\r\n\r\n /**\r\n * ? What is happening here?\r\n *\r\n * If column show list is present then takes it's length\r\n * else it takes columnsData.column_list length\r\n *\r\n * compare it with sortingTabState.sortby.length\r\n *\r\n * if both are equal then showAddSortButton is false\r\n */\r\n const showAddSortButton = useMemo(() => {\r\n const stateLength =\r\n columnTabState?.show_list?.length ??\r\n columnsData?.column_list?.length ??\r\n 0;\r\n const sortLength = sortingTabState?.sortby?.length ?? 0;\r\n\r\n return sortLength !== stateLength;\r\n }, [columnTabState, columnsData, sortingTabState]);\r\n\r\n /**\r\n * ? What is happening here?\r\n *\r\n * Check if sorting_error exists in saveButtonError state\r\n * Check if sortingTabState sortby column is empty\r\n */\r\n const isAddSortDisabled = useMemo(() => {\r\n const hasEmptyColumn = sortingTabState?.sortby?.some(\r\n (item) => item.column === \"\"\r\n );\r\n\r\n return hasEmptyColumn;\r\n }, [saveButtonError, sortingTabState]);\r\n\r\n const getCurrentLists = () => {\r\n if (sortingTabState?.isDefault) {\r\n return {\r\n showList:\r\n columnTabState?.show_list ||\r\n // if columns isDefault and show_list is empty, show all columns\r\n columnsData?.column_list?.map((column) => ({\r\n label: column.name,\r\n value: column.attribute_key,\r\n })) ||\r\n [],\r\n hideList: columnTabState?.hide_list || [],\r\n };\r\n } else {\r\n const currentTab = columnTabState?.tabs?.[activeTabIndex || 0];\r\n return {\r\n showList: currentTab?.show_list || [],\r\n hideList: currentTab?.hide_list || [],\r\n };\r\n }\r\n };\r\n\r\n const { showList } = getCurrentLists();\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\r\n <Typography>Select attribute(s) you want to sort by</Typography>\r\n\r\n {/* <CustomToggleSwitchButton\r\n buttons={TOGGLE_BUTTON_TABS}\r\n value={isSortingDefault}\r\n onChange={handleModeChange}\r\n /> */}\r\n\r\n {hasShowListQuickTabs ? (\r\n <>\r\n <Box>\r\n {!isSortingDefault && (\r\n <CustomTabs\r\n value={activeTab}\r\n onChange={(_, tab) => setActiveTab(tab)}\r\n >\r\n {quickTabStates?.show_list?.map((tab) => (\r\n <Tab key={tab} label={tab} value={tab} />\r\n ))}\r\n </CustomTabs>\r\n )}\r\n\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={tabSortedList?.map((s) => s.column) || []}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {tabSortedList?.map((sort, index) => (\r\n <SortableItem key={sort.column} id={sort.column}>\r\n <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n <Select\r\n value={sort.column}\r\n onChange={(e) =>\r\n handleDNDDropdownChange(\r\n \"column\",\r\n e.target.value,\r\n index\r\n )\r\n }\r\n size=\"small\"\r\n fullWidth\r\n >\r\n {showList\r\n ?.filter((column) => column.value != \"action\")\r\n .map((column, index) => (\r\n <MenuItem\r\n key={index}\r\n value={column.value}\r\n disabled={tabSortedList.some(\r\n (s) => s.column === column?.value\r\n )}\r\n >\r\n {column?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <Select\r\n value={sort.order}\r\n onChange={(e) =>\r\n handleDNDDropdownChange(\r\n \"order\",\r\n e.target.value,\r\n index\r\n )\r\n }\r\n size=\"small\"\r\n fullWidth\r\n >\r\n <MenuItem value=\"asc\">Ascending</MenuItem>\r\n <MenuItem value=\"dsc\">Descending</MenuItem>\r\n </Select>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => handleRemove(sort.column)}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </SortableItem>\r\n ))}\r\n </SortableContext>\r\n </DndContext>\r\n\r\n {showAddSortButton && (\r\n <Box>\r\n <Button\r\n onClick={handleAddSort}\r\n startIcon={<AddIcon />}\r\n variant=\"text\"\r\n sx={{\r\n fontSize: 13,\r\n color: \"#7A5AF8\",\r\n }}\r\n disabled={isAddSortDisabled}\r\n >\r\n Add Sort\r\n </Button>\r\n </Box>\r\n )}\r\n </Box>\r\n </>\r\n ) : (\r\n <Typography>View as Tabs empty in Quick Tab</Typography>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Sorting;\r\n","import { Dialog, Slide, styled } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\nimport React from \"react\";\r\nimport { TransitionProps } from \"@mui/material/transitions\";\r\n\r\nexport const CustomDialog = styled(Dialog)(({ theme }) => ({\r\n \"& .MuiPaper-root\": {\r\n borderRadius: 0,\r\n height: \"100%\",\r\n },\r\n \"& .MuiDialogContent-root\": {\r\n ...dialogStyles.dialogContent,\r\n padding: theme.spacing(2),\r\n },\r\n \"& .MuiDialogActions-root\": {\r\n padding: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport const DialogTransition = React.forwardRef(function Transition(\r\n props: TransitionProps & {\r\n children: React.ReactElement<any, any>;\r\n },\r\n ref: React.Ref<unknown>\r\n) {\r\n return <Slide direction=\"down\" ref={ref} {...props} />;\r\n});\r\n","import { Button, ButtonProps } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\ninterface CustomButtonProps extends ButtonProps {}\r\n\r\nconst CustomButton = ({ ...props }: CustomButtonProps) => {\r\n const customSx = { ...dialogStyles.dialogActionsButton, ...props.sx };\r\n\r\n return (\r\n <Button variant=\"contained\" {...props} sx={customSx}>\r\n {props.children}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default CustomButton;\r\n","import { ToggleButtonTabsProps } from \"../../types/filter-settings\";\r\n\r\nexport const SETTINGS_TABS: { label: string }[] = [\r\n { label: \"Quick Tab\" },\r\n { label: \"Column\" },\r\n { label: \"Sorting\" },\r\n];\r\n\r\nexport const KANBAN_SETTINGS_TABS: { label: string }[] = [\r\n { label: \"Lane\" },\r\n { label: \"Group By\" },\r\n];\r\n\r\nexport const LANE_SELECTS = [\r\n { key: \"stage_group\", value: \"Stage Group\" },\r\n { key: \"stage\", value: \"Stage\" },\r\n { key: \"source\", value: \"Source\" },\r\n { key: \"status\", value: \"Status\" },\r\n];\r\n\r\nexport const TOGGLE_BUTTON_TABS: ToggleButtonTabsProps[] = [\r\n { label: \"Default\", value: true, isDisabled: false },\r\n { label: \"Tab Wise\", value: false, isDisabled: false },\r\n];\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport { LANE_SELECTS } from \"../constants\";\r\n\r\nconst Lane = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: any;\r\n tabsApiData?: string[];\r\n tabsApiDataLoading?: boolean;\r\n}) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as any;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: LANE_SELECTS[0].value,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Lane: Please select at least one item\"\r\n : \"Quick Lane: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"lanes\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"lanes\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value: any) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item: string) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowSubLaneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showSubLane: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleShowColorColumnsChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showColorColumns: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"lanes\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in vertical lanes\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Select Attribute</em>;\r\n }\r\n return selected;\r\n }}\r\n >\r\n {LANE_SELECTS?.map((lane: any) => (\r\n <MenuItem key={lane?.key} value={lane?.value}>\r\n {lane?.value}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Sort by</em>;\r\n }\r\n const option = sortingOptions.find(\r\n (opt) => opt.value === selected\r\n );\r\n return option?.label || selected;\r\n }}\r\n >\r\n {sortingOptions.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as lanes.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Lanes\"\r\n filteredValues={showListValues}\r\n containerId=\"lanes\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n AlertComponenet={\r\n <InfoAlert\r\n message=\"Please select at least 1 and at most 5 values to display as\r\n lanes.\"\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={10}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showSubLane || false}\r\n onChange={handleShowSubLaneChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Sublane\"\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showColorColumns || false}\r\n onChange={handleShowColorColumnsChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Color columns\"\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Lane;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport { LANE_SELECTS } from \"../constants\";\r\nimport { Group } from \"@mui/icons-material\";\r\n\r\nconst GroupBy = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: any;\r\n tabsApiData?: string[];\r\n tabsApiDataLoading?: boolean;\r\n}) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as any;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: LANE_SELECTS[0].value,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Lane: Please select at least one item\"\r\n : \"Quick Lane: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"lanes\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"lanes\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value: any) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item: string) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowSubLaneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showSubLane: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleShowColorColumnsChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showColorColumns: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"lanes\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in vertical lanes\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Select Attribute</em>;\r\n }\r\n return selected;\r\n }}\r\n >\r\n {LANE_SELECTS?.map((lane: any) => (\r\n <MenuItem key={lane?.key} value={lane?.value}>\r\n {lane?.value}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Sort by</em>;\r\n }\r\n const option = sortingOptions.find(\r\n (opt) => opt.value === selected\r\n );\r\n return option?.label || selected;\r\n }}\r\n >\r\n {sortingOptions?.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as lanes.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Lanes\"\r\n filteredValues={showListValues}\r\n containerId=\"lanes\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n // AlertComponenet={\r\n // <InfoAlert\r\n // message=\"Please select at least 1 and at most 5 values to display as\r\n // lanes.\"\r\n // width={\"49%\"}\r\n // position=\"absolute\"\r\n // color=\"#088AB2\"\r\n // top={10}\r\n // zIndex={1}\r\n // />\r\n // }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showSubLane || false}\r\n onChange={handleShowSubLaneChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Sublane\"\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showColorColumns || false}\r\n onChange={handleShowColorColumnsChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Color columns\"\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default GroupBy;\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\ninterface KanbanStyles {\r\n syncingStyle: SxProps<Theme>;\r\n topHeader: SxProps<Theme>;\r\n laneHeader: SxProps<Theme>;\r\n badge: SxProps<Theme>;\r\n swimlaneWrapperStyle: SxProps<Theme>;\r\n columnStyle: SxProps<Theme>;\r\n stageStyle: SxProps<Theme>;\r\n stageBadge: SxProps<Theme>;\r\n cardContainer: SxProps<Theme>;\r\n cardContent: SxProps<Theme>;\r\n cardHeaderStyle: SxProps<Theme>;\r\n cardAvatar: SxProps<Theme>;\r\n statusStyle: SxProps<Theme>;\r\n codeStyle: SxProps<Theme>;\r\n nameIconContainer: SxProps<Theme>;\r\n leadName: SxProps<Theme>;\r\n iconStyle: SxProps<Theme>;\r\n leadOwnerStyle: SxProps<Theme>;\r\n calendarIcon: SxProps<Theme>;\r\n dateStyle: SxProps<Theme>;\r\n subSectionAccordion: SxProps<Theme>;\r\n subSectionCountContainer: SxProps<Theme>;\r\n cardsContainer: SxProps<Theme>;\r\n settingStyle: SxProps<Theme>;\r\n swimLaneAccordionStyle: SxProps<Theme>;\r\n subSectionHeaderContainer: SxProps<Theme>;\r\n}\r\n\r\nexport const kanbanStyles: KanbanStyles = {\r\n syncingStyle: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n gap: \"8px\",\r\n width: \"100%\",\r\n },\r\n topHeader: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n px: 1,\r\n pt: 2,\r\n bgcolor: \"white\",\r\n width: \"fit-content\",\r\n position: \"sticky\", // Add sticky positioning\r\n top: 0, // Stick to the top of the viewport\r\n right: 0,\r\n zIndex: 1100, // Ensure it stays above other content\r\n },\r\n laneHeader: {\r\n flex: 1, // Equal width distribution\r\n minWidth: \"263px\",\r\n maxWidth: \"263px\",\r\n display: \"flex\",\r\n fontWeight: 700,\r\n fontSize: \"16px\",\r\n borderRadius: \"6px\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n py: \"8px\",\r\n px: \"12px\",\r\n position: \"relative\",\r\n },\r\n badge: {\r\n position: \"absolute\",\r\n top: \"-12px\",\r\n left: \"8px\",\r\n px: 1,\r\n color: \"white\",\r\n borderRadius: \"8px\",\r\n },\r\n swimlaneWrapperStyle: {\r\n flexDirection: \"row-reverse\",\r\n bgcolor: \"white\",\r\n minHeight: 44, // overall height\r\n px: 2,\r\n py: 0, // remove vertical padding\r\n \"&.Mui-expanded\": {\r\n minHeight: 44,\r\n },\r\n \"& .MuiAccordionSummary-content\": {\r\n margin: \"8px 0\", // reduced vertical spacing\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n gap: 5,\r\n \"&.Mui-expanded\": {\r\n margin: \"8px 0\", // maintain same margin when expanded\r\n },\r\n },\r\n \"& .MuiAccordionSummary-expandIconWrapper\": {\r\n mr: 0, // reduce gap between icon and content\r\n },\r\n },\r\n columnStyle: {\r\n flex: 1, // Equal width distribution\r\n p: \"12px\",\r\n // px: \"2px\",\r\n minHeight: \"500px\",\r\n // borderRight: \"1px solid #e0e0e0\",\r\n\r\n borderRadius: \"6px\",\r\n minWidth: \"263px\",\r\n maxWidth: \"263px\",\r\n },\r\n stageStyle: {\r\n mb: 2,\r\n bgcolor: \"#f9fafb\",\r\n borderTopLeftRadius: \"8px !important\",\r\n borderBottomLeftRadius: \"8px !important\",\r\n borderTopRightRadius: \"8px !important\",\r\n // borderRadius: 2,\r\n overflow: \"hidden\",\r\n boxShadow: \"none\",\r\n \"&:before\": { display: \"none\" }, // remove default divider line\r\n },\r\n stageBadge: {\r\n \"& .MuiBadge-badge\": {\r\n color: \"black\",\r\n fontWeight: \"bold\",\r\n fontSize: \"0.75rem\",\r\n },\r\n },\r\n cardContainer: {\r\n borderRadius: 2,\r\n bgcolor: \"#fff\",\r\n position: \"relative\",\r\n\r\n boxShadow:\r\n \"0px 1.36px 2.72px rgba(23, 23, 23, 0.06), 0px 2.72px 5.44px rgba(23, 23, 23, 0.1)\",\r\n border: \"none\", // explicitly remove border\r\n },\r\n cardContent: {\r\n p: \"12px !important\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"4px\",\r\n },\r\n cardHeaderStyle: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-start\",\r\n // mb: 1,\r\n },\r\n cardAvatar: {\r\n width: \"18px\",\r\n height: \"18px\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n bgcolor: \"#e5e7eb\",\r\n color: \"#374151\",\r\n mr: 1,\r\n },\r\n statusStyle: {\r\n height: 20,\r\n fontSize: \"0.6875rem\",\r\n\r\n fontWeight: 500,\r\n },\r\n codeStyle: {\r\n fontSize: \"12px\",\r\n color: \"#6b7280\",\r\n fontWeight: 500,\r\n mb: 0.5,\r\n cursor: \"pointer\",\r\n },\r\n nameIconContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-start\",\r\n borderBottom: \"1px solid #e5e7eb\",\r\n pb: 2,\r\n },\r\n leadName: {\r\n fontSize: \"15px\",\r\n fontWeight: 500,\r\n color: \"#1f2937\",\r\n lineHeight: 1.3,\r\n },\r\n iconStyle: {\r\n color: \"#6b7280\",\r\n bgcolor: \"#f3f4f6\",\r\n borderRadius: \"50%\",\r\n width: \"20px\",\r\n height: \"20px\",\r\n p: 0.6,\r\n },\r\n leadOwnerStyle: {\r\n fontSize: \"12px\",\r\n color: \"#374151\",\r\n fontWeight: 500,\r\n },\r\n calendarIcon: {\r\n width: \"14px\",\r\n height: \"14px\",\r\n color: \"#7b7a79\",\r\n mr: 0.5,\r\n },\r\n dateStyle: {\r\n fontSize: \"12px\",\r\n color: \"#7b7a79\",\r\n\r\n fontWeight: 500,\r\n },\r\n subSectionAccordion: {\r\n height: \"52px\", // fixed height\r\n minHeight: \"52px\", // prevent auto-expansion\r\n \"&.Mui-expanded\": {\r\n minHeight: \"52px\", // fix expanded state height\r\n height: \"52px\",\r\n },\r\n border: \"1px solid #e2e8f0\",\r\n borderTopRightRadius: \"8px\",\r\n px: 2,\r\n },\r\n subSectionCountContainer: {\r\n // px: 1,\r\n color: \"white\",\r\n height: \"26px\",\r\n width: \"26px !important\",\r\n fontSize: \"10px\",\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: \"50%\",\r\n },\r\n cardsContainer: {\r\n px: 1,\r\n gap: \"12px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n p: \"8px\",\r\n },\r\n settingStyle: {\r\n bgcolor: \"#f8fafc\",\r\n width: \"56px\",\r\n height: \"41px\",\r\n borderRadius: \"6px\",\r\n border: \"1px solid #e2e8f0\",\r\n },\r\n swimLaneAccordionStyle: {\r\n mb: 1,\r\n \"&:before\": { display: \"none\" },\r\n py: 0,\r\n boxShadow: \"none\",\r\n },\r\n subSectionHeaderContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n },\r\n};\r\n","export const rawData = {\r\n lanes: [\r\n { id: 1, name: \"Enquiry\", color: \"#fff0f3\", darkColor: \"#fea3b4\" },\r\n { id: 2, name: \"Qualified Lead\", color: \"#fffbed\", darkColor: \"#fde272\" },\r\n { id: 3, name: \"Application\", color: \"#ebf9fc\", darkColor: \"#67e3f9\" },\r\n { id: 4, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n { id: 5, name: \"Documents\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n { id: 6, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n ],\r\n swim_lanes: [\r\n {\r\n id: 12,\r\n name: \"Active\",\r\n sub_lanes: [\r\n {\r\n id: 1,\r\n name: \"Lead Assignment\",\r\n color: \"red\",\r\n lane_id: 1,\r\n expanded: true,\r\n },\r\n {\r\n id: 2,\r\n name: \"Initial Outreach\",\r\n color: \"green\",\r\n lane_id: 1,\r\n expanded: true,\r\n },\r\n {\r\n id: 3,\r\n name: \"Lead Assessment\",\r\n color: \"yellow\",\r\n lane_id: 2,\r\n expanded: true,\r\n },\r\n {\r\n id: 4,\r\n name: \"Campus Visit\",\r\n color: \"#FFE885\",\r\n lane_id: 2,\r\n expanded: true,\r\n },\r\n {\r\n id: 5,\r\n name: \"Application Collection\",\r\n color: \"#90E0F3\",\r\n lane_id: 3,\r\n expanded: true,\r\n },\r\n {\r\n id: 6,\r\n name: \"Student Assessment\",\r\n color: \"#90E0F3\",\r\n lane_id: 3,\r\n expanded: true,\r\n },\r\n {\r\n id: 7,\r\n name: \"Fee Collection\",\r\n color: \"#90EE90\",\r\n lane_id: 4,\r\n expanded: true,\r\n },\r\n {\r\n id: 8,\r\n name: \"System Integration\",\r\n color: \"#90EE90\",\r\n lane_id: 4,\r\n expanded: true,\r\n },\r\n ],\r\n },\r\n {\r\n id: 13,\r\n name: \"Dormant\",\r\n sub_lanes: [],\r\n },\r\n {\r\n id: 14,\r\n name: \"Disqualify\",\r\n sub_lanes: [],\r\n },\r\n {\r\n id: 15,\r\n name: \"Lost\",\r\n sub_lanes: [],\r\n },\r\n ],\r\n data: [\r\n // Lead Assignment\r\n {\r\n id: 1,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 1,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n {\r\n id: 2,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 1,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Initial Outreach\r\n {\r\n id: 3,\r\n name: \"Rashmi Desai\",\r\n sub_lane_id: 2,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9765874320\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Lead Assessment\r\n {\r\n id: 4,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 3,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Campus Visit\r\n {\r\n id: 5,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 4,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Lost\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"2DQ2024XY\",\r\n priority: null,\r\n lost: true,\r\n },\r\n {\r\n id: 6,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 4,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Application Collection\r\n {\r\n id: 7,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 5,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n {\r\n id: 8,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 5,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Student Assessment\r\n {\r\n id: 9,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 6,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Fee Collection\r\n {\r\n id: 10,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 7,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846015495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"You\",\r\n reference_id: \"INQ2024XY\",\r\n priority: \"High\",\r\n lost: false,\r\n },\r\n // System Integration\r\n {\r\n id: 11,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 8,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846015495\",\r\n status: \"Lost\",\r\n progress: 0,\r\n days: \"You\",\r\n reference_id: \"INQ2024XY\",\r\n priority: \"Low\",\r\n lost: true,\r\n },\r\n ],\r\n};\r\n\r\nexport const COLOR_CONSTANTS = [\r\n { color: \"#fff0f3\", darkColor: \"#fea3b4\" },\r\n { color: \"#fffbed\", darkColor: \"#fde272\" },\r\n { color: \"#ebf9fc\", darkColor: \"#67e3f9\" },\r\n { color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n];\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, IconButton, Typography } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport {\r\n FilterDrawerProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../types/filter\";\r\n\r\nimport ConfirmModal, { InputField } from \"../common/confirm-modal\";\r\nimport CustomTabPanel from \"./components/tabs/custom-tab-panel\";\r\nimport CustomTabs, { TabItem } from \"./components/tabs/index\";\r\nimport MainFilter from \"./components/main-filter\";\r\nimport SavedFilter from \"./components/saved-filter\";\r\nimport AttributesFilter from \"./components/attributes-filter\";\r\nimport { filterStyles } from \"./style\";\r\n\r\nexport function TableFilter({\r\n onClose,\r\n columnsData,\r\n tableStates,\r\n onDeleteFilter,\r\n onSaveFilter,\r\n onUpdateFilter,\r\n dropdownData,\r\n}: FilterDrawerProps) {\r\n const [tabValue, setTabValue] = useState(0);\r\n const [editMode, setEditMode] = useState(false);\r\n const [selectedFilters, setSelectedFilters] = useState<\r\n UpdatedFilterStateProps[]\r\n >([]);\r\n\r\n // remove this\r\n const [saveFilterModalOpen, setSaveFilterModalOpen] = useState(false);\r\n const [deleteFilterModalOpen, setDeleteFilterModalOpen] = useState(false);\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n\r\n const {\r\n filters,\r\n setFilters,\r\n filterToDelete,\r\n filterMaster,\r\n setFilterMaster,\r\n setShowFilterOption,\r\n } = tableStates;\r\n\r\n const filterNameInput: InputField = {\r\n label: \"Filter Name\",\r\n placeholder: 'e.g., \"Website Leads - This Week\"',\r\n required: true,\r\n type: \"text\",\r\n };\r\n\r\n useEffect(() => {\r\n if (!columnsData || !columnsData?.column_list) {\r\n setSelectedFilters([]);\r\n return;\r\n }\r\n\r\n const updated = filters?.map((filter) => {\r\n const matchingColumn = columnsData?.column_list.find(\r\n (column) => column.attribute_key === filter.filter_attribute\r\n );\r\n const matchingDropdownList =\r\n columnsData.operation_list[matchingColumn?.data_type || \"text\"];\r\n\r\n return {\r\n ...filter,\r\n id: matchingColumn?.id ?? \"\",\r\n name: matchingColumn?.name,\r\n data_type: matchingColumn?.data_type,\r\n dropdown_list: matchingDropdownList,\r\n };\r\n });\r\n\r\n setSelectedFilters(updated || []);\r\n }, [filters, columnsData, tabValue]);\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n setTabValue(newValue);\r\n if (newValue === 0) {\r\n setEditMode(false);\r\n setSelectedFilters([]);\r\n }\r\n };\r\n\r\n //FOR TABS\r\n const tabItems: TabItem[] = [\r\n { label: \"Filter\" },\r\n { label: \"Saved Filter\" },\r\n { label: \"Attributes\" },\r\n ];\r\n\r\n const handleTabCrossClick = (index: number) => {\r\n const commonStateReset = () => {\r\n setFilters([]);\r\n setSelectedFilters([]);\r\n setFilterMaster(\r\n (prev) =>\r\n ({ ...prev, activeFilterTabIndex: -1 } as FilterMasterStateProps)\r\n );\r\n };\r\n\r\n const indexMapper: { [key: number]: () => void } = {\r\n 0: () => commonStateReset(),\r\n 1: () => {\r\n commonStateReset();\r\n setEditMode(false);\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: { selectedId: \"\", selectedName: \"\" },\r\n } as FilterMasterStateProps)\r\n );\r\n },\r\n 2: () => {\r\n commonStateReset();\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n attributes: {\r\n radio: [],\r\n selected: \"\",\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n },\r\n };\r\n\r\n indexMapper[index] && indexMapper[index]();\r\n };\r\n\r\n return (\r\n <Box sx={filterStyles.filterContainer}>\r\n <Box sx={filterStyles.filterMainHeader}>\r\n <Typography variant=\"h6\" fontWeight=\"bold\" fontSize=\"18px\">\r\n Filter\r\n </Typography>\r\n <IconButton\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose && onClose();\r\n setShowFilterOption(false);\r\n }}\r\n aria-label=\"close\"\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n <CustomTabs\r\n value={tabValue}\r\n onChange={handleTabChange}\r\n tabItems={tabItems}\r\n activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}\r\n handleCrossClick={handleTabCrossClick}\r\n />\r\n\r\n <CustomTabPanel value={tabValue} index={0} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <MainFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n setSavedFilterModalOpen={setSaveFilterModalOpen}\r\n dropdownData={dropdownData}\r\n />\r\n </CustomTabPanel>\r\n\r\n <CustomTabPanel value={tabValue} index={1} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <SavedFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n editMode={editMode}\r\n setEditMode={setEditMode}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n setSavedFilterModalOpen={setSaveFilterModalOpen}\r\n dropdownData={dropdownData}\r\n tabValue={tabValue}\r\n />\r\n </CustomTabPanel>\r\n\r\n <CustomTabPanel value={tabValue} index={2} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <AttributesFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n dropdownData={dropdownData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n tabValue={tabValue}\r\n />\r\n </CustomTabPanel>\r\n\r\n <ConfirmModal\r\n open={saveFilterModalOpen}\r\n onClose={() => setSaveFilterModalOpen(false)}\r\n title={editMode ? \"Replace Existing Filter ?\" : \"Save Filter\"}\r\n description={\r\n editMode\r\n ? \"You already have a filter applied. Applying a new filter will replace the current one. Do you want to continue?\"\r\n : \"Give a name to this filter so you can easily reuse it later.\"\r\n }\r\n buttons={[\r\n {\r\n label: \"Cancel\",\r\n onClick: () => {\r\n setSaveFilterModalOpen(false);\r\n },\r\n variant: \"outlined\",\r\n color: \"primary\",\r\n sx: {\r\n color: \"#7A5AF8\",\r\n border: `1px solid #7A5AF8`,\r\n },\r\n },\r\n {\r\n label: editMode ? \"Replace Filter\" : \"Save\",\r\n onClick: (inputValue) => {\r\n if (editMode) {\r\n onUpdateFilter && onUpdateFilter(inputValue || \"\");\r\n setSaveFilterModalOpen(false);\r\n setEditMode(false);\r\n return;\r\n }\r\n\r\n onSaveFilter && onSaveFilter(inputValue || \"\");\r\n setSaveFilterModalOpen(false);\r\n\r\n setTabValue(1);\r\n },\r\n variant: \"contained\",\r\n color: \"primary\",\r\n sx: {\r\n color: \"white\",\r\n backgroundColor: editMode ? \"#7A5AF8\" : \"#7A5AF8\",\r\n },\r\n },\r\n ]}\r\n input={editMode ? undefined : filterNameInput}\r\n />\r\n\r\n <ConfirmModal\r\n open={deleteFilterModalOpen}\r\n onClose={() => setDeleteFilterModalOpen(false)}\r\n title=\"Delete Saved Filter?\"\r\n description={`You're about to delete the saved filter: \"${\r\n filterToDelete?.label || \"[Filter Name]\"\r\n }\". This action cannot be undone. Are you sure you want to continue?`}\r\n buttons={[\r\n {\r\n label: \"Cancel\",\r\n onClick: () => {\r\n setDeleteFilterModalOpen(false);\r\n },\r\n variant: \"outlined\",\r\n color: \"primary\",\r\n sx: { color: \"#7A5AF8\", border: `1px solid #7A5AF8` },\r\n },\r\n {\r\n label: \"Delete\",\r\n onClick: () => {\r\n onDeleteFilter && onDeleteFilter();\r\n setDeleteFilterModalOpen(false);\r\n setEditMode && setEditMode(false);\r\n setSelectedFilters([]);\r\n setFilters([]);\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n activeFilterTabIndex: -1,\r\n } as FilterMasterStateProps)\r\n );\r\n },\r\n variant: \"contained\",\r\n sx: {\r\n color: \"white\",\r\n backgroundColor: \"#f63d68\",\r\n \"&:hover\": { backgroundColor: \"#f63d68\" },\r\n },\r\n },\r\n ]}\r\n maxWidth=\"xs\"\r\n />\r\n </Box>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport {\r\n DialogTitle,\r\n IconButton,\r\n Box,\r\n Typography,\r\n DialogContent,\r\n DialogActions,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport CustomVerticalTabs from \"./tabs/vertical\";\r\nimport CustomTabPanel from \"./tabs/vertical/custom-tab-panel\";\r\nimport QuickTab from \"./components/quick-tab\";\r\nimport Column from \"./components/column\";\r\nimport Sorting from \"./components/sorting\";\r\nimport { QuickFilterModalProps } from \"../../types/filter-settings\";\r\nimport { CustomDialog, DialogTransition } from \"./components/custom-dialog\";\r\nimport { dialogStyles } from \"./style\";\r\nimport CustomButton from \"./components/custom-button\";\r\nimport { KANBAN_SETTINGS_TABS, SETTINGS_TABS } from \"./constants\";\r\nimport Loader from \"../common/loader/loader\";\r\nimport Lane from \"./components/lane\";\r\nimport GroupBy from \"./components/group-by\";\r\n\r\nexport function QuickFilterSettings({\r\n view = \"listing\",\r\n show,\r\n filterSettingStates,\r\n onClose,\r\n columnsData,\r\n columnsDataLoading,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n onSaveSettingsData,\r\n}: QuickFilterModalProps) {\r\n const [tabValue, setTabValue] = useState(0);\r\n\r\n const {\r\n showListViewSettings,\r\n quickTabStates,\r\n columnTabState,\r\n sortingTabState,\r\n saveButtonError,\r\n } = filterSettingStates;\r\n\r\n const hasAPIData = Boolean(Object.entries(columnsData).length);\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n const handleSaveSetSettingsData = () => {\r\n const copyColumnTabState = columnTabState?.isDefault\r\n ? {\r\n isDefault: true,\r\n show_list: columnTabState?.show_list || [],\r\n hide_list: columnTabState?.hide_list || [],\r\n }\r\n : {\r\n isDefault: false,\r\n tabs: columnTabState?.tabs || [],\r\n };\r\n\r\n const copySortingTabState = sortingTabState?.isDefault\r\n ? {\r\n isDefault: true,\r\n sortby:\r\n sortingTabState?.sortby?.filter((item) => item.column !== \"\") || [],\r\n }\r\n : null;\r\n\r\n const modifiedSettingsData = {\r\n quick_tab: quickTabStates,\r\n column: copyColumnTabState,\r\n sorting: copySortingTabState,\r\n };\r\n\r\n onSaveSettingsData && onSaveSettingsData(modifiedSettingsData);\r\n onClose && onClose();\r\n };\r\n\r\n return (\r\n <CustomDialog\r\n open={show || showListViewSettings}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n slots={{\r\n transition: DialogTransition,\r\n }}\r\n >\r\n <DialogTitle sx={dialogStyles.dialogTitle}>\r\n <Typography sx={{ fontSize: \"1.125rem\" }}>List View Setting</Typography>\r\n <IconButton\r\n size=\"small\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n onClose && onClose();\r\n }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent>\r\n {columnsDataLoading ? (\r\n <Loader loaderText=\"Loading settings...\" />\r\n ) : !hasAPIData ? ( // check if columns data is available\r\n <Typography>Please pass meta data in component</Typography>\r\n ) : (\r\n <>\r\n <CustomVerticalTabs\r\n value={tabValue}\r\n onChange={handleTabChange}\r\n tabItems={\r\n view === \"listing\" ? SETTINGS_TABS : KANBAN_SETTINGS_TABS\r\n }\r\n />\r\n\r\n <Box sx={{ flex: \"1\" }}>\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={0}>\r\n {tabValue === 0 && (\r\n <QuickTab\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n tabsApiData={tabsApiData}\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={1}>\r\n {tabValue === 1 && (\r\n <Column\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={2}>\r\n {tabValue === 2 && (\r\n <Sorting\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n {view.toLowerCase() === \"kanban\" && (\r\n <CustomTabPanel value={tabValue} index={0}>\r\n {tabValue === 0 && (\r\n <Lane\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"kanban\" && (\r\n <CustomTabPanel value={tabValue} index={1}>\r\n {tabValue === 1 && (\r\n <GroupBy\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n </Box>\r\n </>\r\n )}\r\n </DialogContent>\r\n\r\n {!columnsDataLoading && hasAPIData && (\r\n <DialogActions>\r\n <CustomButton\r\n // disabled={saveButtonError?.hasError}\r\n disabled={saveButtonError?.hasError}\r\n onClick={handleSaveSetSettingsData}\r\n >\r\n {view === \"listing\" ? \"Save Quick Filter\" : \"Save Kanban Layout\"}\r\n </CustomButton>\r\n </DialogActions>\r\n )}\r\n </CustomDialog>\r\n );\r\n}\r\n","import \"./index.scss\";\r\nimport { Box, CircularProgress, IconButton, Tab, Tabs } from \"@mui/material\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\r\nimport { settingsOptionsProps } from \"../../types/table\";\r\nimport { tableTabsStyles } from \"./styles\";\r\nimport { useMemo } from \"react\";\r\nimport { SettingIcon } from \"../../../assets/svg\";\r\n\r\ninterface TabDataProps {\r\n tab_value: string | null;\r\n tab_value_count: string | number;\r\n}\r\n\r\ninterface TableTabsProps {\r\n loading?: boolean;\r\n tabsData?: TabDataProps[];\r\n activeTab?: string;\r\n tableStates: CraftTableOptionsProps;\r\n onClick: (state: string) => void;\r\n columns?: any[];\r\n settingsOptions?: settingsOptionsProps;\r\n}\r\n\r\nexport function TableTabs({\r\n loading = false,\r\n tabsData = [],\r\n activeTab = \"All\",\r\n onClick,\r\n tableStates,\r\n settingsOptions,\r\n}: TableTabsProps) {\r\n if (loading) return <CircularProgress size={24} />;\r\n\r\n const handleTabClick = (tab: string) => {\r\n onClick(tab);\r\n tableStates.setPagination((prev) => ({ ...prev, pageIndex: 0 }));\r\n };\r\n\r\n // Normalize tab_value to uppercase for display + logic\r\n const normalizedTabs = useMemo(() => {\r\n return tabsData\r\n ?.filter((tab) => tab.tab_value !== null)\r\n ?.map((tab) => ({\r\n ...tab,\r\n tab_value: tab.tab_value,\r\n }));\r\n }, [tabsData]);\r\n\r\n const defaultTab = useMemo(() => {\r\n return (\r\n normalizedTabs.find((t) => t.tab_value === \"All\")?.tab_value ||\r\n normalizedTabs[0]?.tab_value ||\r\n \"\"\r\n );\r\n }, [normalizedTabs]);\r\n\r\n const selectedTab = activeTab || defaultTab;\r\n\r\n return (\r\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"flex-start\">\r\n {/* Layout settings icon */}\r\n {settingsOptions?.showIcon && (\r\n <IconButton\r\n onClick={settingsOptions?.onClick}\r\n sx={{ zIndex: 1000, mx: 0 }}\r\n >\r\n <SettingIcon />\r\n </IconButton>\r\n )}\r\n\r\n {/* Tabs */}\r\n <Tabs\r\n value={selectedTab}\r\n onChange={(_, newValue) => handleTabClick(newValue)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n slotProps={{ indicator: { sx: { display: \"none\" } } }}\r\n sx={tableTabsStyles.tabs}\r\n >\r\n {normalizedTabs.map(({ tab_value, tab_value_count }) => {\r\n const isSelected = activeTab === tab_value;\r\n\r\n return (\r\n <Tab\r\n key={tab_value}\r\n value={tab_value}\r\n label={\r\n <Box display=\"flex\" alignItems=\"center\" gap={1}>\r\n <Box>{tab_value}</Box>\r\n <Box\r\n sx={{\r\n ...tableTabsStyles.tabCount,\r\n ...(isSelected && {\r\n // backgroundColor: \"#ced3da\",\r\n // borderColor: \"#ced3da\",\r\n backgroundColor: \"#000\",\r\n color: \"#fff\",\r\n fontWeight: \"500\",\r\n }),\r\n }}\r\n >\r\n {tab_value_count == 0\r\n ? \"0\"\r\n : String(tab_value_count).padStart(2, \"0\")}\r\n </Box>\r\n </Box>\r\n }\r\n sx={tableTabsStyles.tab}\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n </Box>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\r\nimport {\r\n ExpandMore as ExpandMoreIcon,\r\n Settings as SettingsIcon,\r\n} from \"@mui/icons-material\";\r\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\r\nimport { kanbanStyles } from \"./styles/styles\";\r\nimport { Lane, SubLane, SwimLane } from \"./types/types\";\r\nimport { COLOR_CONSTANTS } from \"./constants/kanban-constants\";\r\nimport Loader from \"../listing/components/common/loader/loader\";\r\n\r\nconst Kanban = ({\r\n metaData,\r\n data,\r\n isLoading,\r\n KanbanCardComponent,\r\n showSettings,\r\n onOpenSettings,\r\n}: {\r\n metaData: any;\r\n data: any;\r\n isLoading?: boolean;\r\n KanbanCardComponent: React.ComponentType<{\r\n key: string | number;\r\n cardData: any;\r\n }>;\r\n showSettings: boolean;\r\n onOpenSettings?: () => void;\r\n}) => {\r\n const [expandedPanels, setExpandedPanels] = useState<{\r\n [key: string]: boolean;\r\n }>({\r\n Active: true,\r\n });\r\n\r\n const [subLaneExpanded, setSubLaneExpanded] = useState<{\r\n [key: string]: boolean;\r\n }>({});\r\n\r\n useEffect(() => {\r\n if (metaData?.swim_lanes?.length) {\r\n const initial: { [key: string]: boolean } = {};\r\n metaData?.swim_lanes.forEach((swim_lane: SwimLane) => {\r\n swim_lane?.sub_lanes?.forEach((sub_lane) => {\r\n const key = `${swim_lane.id}-${sub_lane.lane_id}-${sub_lane.id}`;\r\n initial[key] = sub_lane.expanded || false;\r\n });\r\n });\r\n setSubLaneExpanded(initial);\r\n }\r\n }, [metaData]);\r\n\r\n const handleAccordionChange =\r\n (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\r\n setExpandedPanels((prev) => ({\r\n ...prev,\r\n [panel]: isExpanded,\r\n }));\r\n };\r\n\r\n const toggleSubLane = (subLaneId: number | string) => {\r\n setSubLaneExpanded((prev) => ({\r\n ...prev,\r\n [subLaneId]: !prev[subLaneId],\r\n }));\r\n };\r\n\r\n const getLeadCount = (laneId: number): number => {\r\n if (!metaData?.swim_lanes || !data) return 0;\r\n\r\n const seenLeadIds = new Set<number | string>();\r\n let count = 0;\r\n\r\n metaData?.swim_lanes.forEach((swimLane: SwimLane) => {\r\n swimLane.sub_lanes\r\n ?.filter((subLane) => subLane.lane_id === laneId)\r\n ?.forEach((subLane) => {\r\n data.forEach((lead: any) => {\r\n if (lead?.stage_id === subLane?.id && !seenLeadIds.has(lead?.id)) {\r\n seenLeadIds.add(lead.id);\r\n count++;\r\n }\r\n });\r\n });\r\n });\r\n\r\n return count;\r\n };\r\n\r\n return (\r\n <>\r\n {isLoading ? (\r\n <Loader />\r\n ) : (\r\n <Box>\r\n <Box sx={{ width: \"100%\", bgcolor: \"white\", overflowX: \"auto\" }}>\r\n {/* Header */}\r\n <Box sx={kanbanStyles.topHeader}>\r\n <IconButton\r\n onClick={onOpenSettings}\r\n sx={{\r\n ...kanbanStyles.settingStyle,\r\n visibility: showSettings ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <SettingsOutlinedIcon />\r\n </IconButton>\r\n\r\n {/* Lane Headers - Replaced Grid with Flex */}\r\n <Box\r\n sx={{\r\n ...kanbanStyles.syncingStyle,\r\n flex: 1,\r\n }}\r\n >\r\n {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n <Box\r\n className=\"lane-header\"\r\n sx={{\r\n ...kanbanStyles.laneHeader,\r\n\r\n bgcolor: lane.color || COLOR_CONSTANTS[index % 4].color,\r\n }}\r\n key={lane.id}\r\n >\r\n <Box\r\n sx={{\r\n ...kanbanStyles.badge,\r\n\r\n bgcolor:\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4].darkColor,\r\n }}\r\n >\r\n {getLeadCount(Number(lane.id))}\r\n </Box>\r\n\r\n <Typography variant=\"h6\" fontWeight=\"bold\" sx={{ px: 2 }}>\r\n {lane.name}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n\r\n {/* Content */}\r\n <Box\r\n className=\"kanban-content\"\r\n id=\"kanban-content\"\r\n sx={{\r\n maxHeight: \"calc(100vh - 186px)\",\r\n // minWidth: \"100%\",\r\n\r\n width: \"fit-content\",\r\n }}\r\n >\r\n {/* Swim Lanes */}\r\n {metaData?.swim_lanes?.map((swim_lane: SwimLane) => (\r\n <Accordion\r\n key={swim_lane.id}\r\n expanded={!!expandedPanels[swim_lane.name]}\r\n onChange={handleAccordionChange(swim_lane.name)}\r\n sx={kanbanStyles.swimLaneAccordionStyle}\r\n // disabled={getSwimLaneCount(swim_lane.id) === 0 ? true : false}\r\n >\r\n <AccordionSummary\r\n disabled={swim_lane?.sub_lanes?.length > 0 ? false : true}\r\n expandIcon={\r\n <ArrowDropDownIcon\r\n sx={{\r\n color: \"black\",\r\n }}\r\n />\r\n }\r\n sx={kanbanStyles.swimlaneWrapperStyle}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n fontWeight=\"medium\"\r\n sx={{ ml: 1.5 }}\r\n >\r\n {swim_lane.name} ({swim_lane?.count})\r\n </Typography>\r\n </AccordionSummary>\r\n\r\n <AccordionDetails\r\n sx={{ pl: \"16px\", pr: \"8px\", width: \"fit-content\", py: 0 }}\r\n >\r\n {/* Replaced Grid with Flex */}\r\n <Box sx={{ ...kanbanStyles.syncingStyle, pl: 7 }}>\r\n {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n <Box\r\n className=\"column\"\r\n sx={{\r\n ...kanbanStyles.columnStyle,\r\n bgcolor:\r\n lane.color || COLOR_CONSTANTS[index % 4].color,\r\n }}\r\n key={lane.id}\r\n >\r\n {/* Sub-lanes for this lane */}\r\n {swim_lane?.sub_lanes\r\n ?.filter(\r\n (sub_lane: SubLane) =>\r\n sub_lane.lane_id.toString() === lane.id\r\n )\r\n ?.map((sub_section: SubLane) => {\r\n const subLaneKey = `${swim_lane.id}-${lane.id}-${sub_section.id}`;\r\n return (\r\n <Accordion\r\n key={sub_section.id}\r\n expanded={\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id == swim_lane.id\r\n )?.length === 0\r\n ? false\r\n : subLaneExpanded[subLaneKey] || false\r\n }\r\n onChange={() => toggleSubLane(subLaneKey)}\r\n sx={{\r\n ...kanbanStyles.stageStyle,\r\n borderLeft: `4px solid ${\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4].darkColor\r\n }`,\r\n }}\r\n // disabled={\r\n // metaData?.data?.filter(\r\n // (lead: LeadData) =>\r\n // lead.sub_lane_id === sub_section.id &&\r\n // !usedLeadIds.has(lead.id)\r\n // )?.length === 0\r\n // ? true\r\n // : false\r\n // }\r\n >\r\n <AccordionSummary\r\n expandIcon={\r\n <ExpandMoreIcon\r\n sx={{\r\n display:\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id ===\r\n sub_section.id &&\r\n lead.lead_status_id ==\r\n swim_lane.id\r\n )?.length === 0\r\n ? \"none\"\r\n : \"block\",\r\n }}\r\n />\r\n }\r\n sx={kanbanStyles.subSectionAccordion}\r\n >\r\n <Box\r\n sx={\r\n kanbanStyles.subSectionHeaderContainer\r\n }\r\n >\r\n <Box\r\n className=\"sub-section-count\"\r\n sx={{\r\n ...kanbanStyles.subSectionCountContainer,\r\n bgcolor:\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4]\r\n .darkColor,\r\n }}\r\n >\r\n {data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id === swim_lane.id\r\n )?.length || 0}\r\n </Box>\r\n <Typography\r\n fontWeight=\"700\"\r\n color=\"#555354\"\r\n fontSize=\"12px\"\r\n >\r\n {sub_section.name}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n\r\n <AccordionDetails\r\n sx={kanbanStyles.cardsContainer}\r\n >\r\n {(() => {\r\n const leadsForThisSubLane =\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id ==\r\n swim_lane.id &&\r\n lead.stage_group_id == lane.id\r\n ) || [];\r\n\r\n return leadsForThisSubLane.map(\r\n (card: any) =>\r\n (KanbanCardComponent && (\r\n <KanbanCardComponent\r\n key={card.id}\r\n cardData={card}\r\n />\r\n )) ||\r\n null\r\n );\r\n })()}\r\n </AccordionDetails>\r\n </Accordion>\r\n );\r\n })}\r\n </Box>\r\n ))}\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Kanban;\r\n","import {\r\n ColumnDef,\r\n ColumnMeta,\r\n getCoreRowModel,\r\n getExpandedRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from \"@tanstack/react-table\";\r\nimport \"./index.scss\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport {\r\n CraftTablePaginationProps,\r\n CraftTableProps,\r\n TopbarOptionsProps,\r\n} from \"../types/table\";\r\nimport { CraftTableFeatureProps } from \"../types/table-options\";\r\nimport { LoaderAnimation } from \"../../assets/svg\";\r\nimport Topbar from \"./topbar\";\r\nimport DefaultPagination from \"./pagination/default\";\r\nimport TableDND from \"./table-dnd\";\r\nimport Table from \"./table\";\r\nimport { useFullscreenPopoverContainer } from \"../libs/hooks/useFullScreen\";\r\n\r\ninterface CustomColumnMeta<T> extends ColumnMeta<T, unknown> {\r\n defaultPinned?: \"left\" | \"right\" | undefined;\r\n}\r\n\r\nfunction TableWrapper<T>({\r\n data = [],\r\n columns = [],\r\n tableStates,\r\n paginationOptions,\r\n featureOptions,\r\n topbarOptions,\r\n nestedComponent,\r\n loadingOptions = { isLoading: false },\r\n customRenderFn = {},\r\n // styleOptions,\r\n shouldHideColumn,\r\n emptyListComponent,\r\n filterOptions,\r\n}: CraftTableProps<T>) {\r\n if (!Array.isArray(data)) {\r\n throw new Error(\"data must be an array of objects.\");\r\n }\r\n const [metaColumns, setMetaColumns] = useState<ColumnDef<T>[]>([]);\r\n\r\n useEffect(() => {\r\n if (columns?.length > 0) {\r\n const updatedColumns = columns\r\n ?.filter((col) => {\r\n const accessorKey =\r\n \"accessorKey\" in col\r\n ? (col as { accessorKey: string })?.accessorKey\r\n : undefined;\r\n return typeof shouldHideColumn === \"function\"\r\n ? !shouldHideColumn(accessorKey)\r\n : true;\r\n })\r\n ?.map((col, index) => {\r\n const id =\r\n \"accessorKey\" in col\r\n ? (col as { accessorKey: string })?.accessorKey\r\n : `col_${index}`;\r\n\r\n const cell = (ctx: any) => {\r\n if (col?.meta?.type === \"custom\" && col?.meta?.propName) {\r\n const customFn = customRenderFn?.[col?.meta?.propName];\r\n return typeof customFn === \"function\"\r\n ? customFn({\r\n value: ctx?.getValue(),\r\n row: ctx?.row,\r\n table: ctx?.table?.getRowModel()?.rows,\r\n })\r\n : ctx?.getValue();\r\n }\r\n\r\n if (typeof col?.cell === \"function\") {\r\n return col?.cell(ctx);\r\n }\r\n\r\n return ctx?.getValue();\r\n };\r\n\r\n return { ...col, id, cell };\r\n });\r\n\r\n setMetaColumns(updatedColumns);\r\n }\r\n }, [columns]);\r\n\r\n //For Default Column Pinning to work\r\n useEffect(() => {\r\n table.getAllLeafColumns().forEach((col) => {\r\n const where = (col.columnDef.meta as CustomColumnMeta<T>)\r\n ?.defaultPinned as \"left\" | \"right\" | undefined;\r\n if (where && !col.getIsPinned()) {\r\n col.pin(where);\r\n }\r\n });\r\n }, [tableStates?.columnPinning?.left, metaColumns]);\r\n\r\n const [columnOrder, setColumnOrder] = useState<string[]>(() =>\r\n metaColumns.map((c) => c.id!)\r\n );\r\n\r\n useEffect(() => {\r\n if (metaColumns.length > 0) {\r\n setColumnOrder(metaColumns.map((c) => c.id!));\r\n }\r\n }, [metaColumns]);\r\n\r\n const [isCompactTable, setIsCompactTable] = useState<boolean>(\r\n featureOptions?.compactTable ?? false\r\n );\r\n\r\n const tableRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n setIsCompactTable(featureOptions?.compactTable ?? false);\r\n }, [featureOptions?.compactTable]);\r\n\r\n const craftPaginationOptions: CraftTablePaginationProps = {\r\n showPagination: true,\r\n paginationPosition: \"bottom\",\r\n paginationView: \"full\",\r\n\r\n ...paginationOptions,\r\n };\r\n\r\n const totalRows = craftPaginationOptions?.totalRows ?? data.length;\r\n const rowsPerPageArray = craftPaginationOptions?.rowsPerPageArray ?? [\r\n 25, 50, 100, 150,\r\n ];\r\n const craftTopbarOptions: TopbarOptionsProps = {\r\n showColumnToggle: true,\r\n showCompactTableToggle: true,\r\n showChangeLayoutToggle: true,\r\n viewMoreToggle: true,\r\n showSearch: true,\r\n showSortingToggle: false,\r\n showFilterToggle: true,\r\n tableStates,\r\n\r\n // Add other conditions above topbarOptions\r\n ...topbarOptions,\r\n };\r\n\r\n const craftFeatureOptions: CraftTableFeatureProps = {\r\n enableTopbar: true,\r\n enableSorting: true,\r\n enableServerSidePagination: false,\r\n enableServerSideSorting: false,\r\n enableRowSelection: false,\r\n enableColumnResizing: true,\r\n enableColumnReordering: true,\r\n enableColumnPinning: true,\r\n enableMultiColumnSorting: true,\r\n compactTable: false,\r\n stickyHeader: true,\r\n enableWordBreakAll: false,\r\n striped: false,\r\n\r\n // Add other conditions above featureOptions\r\n ...featureOptions,\r\n };\r\n\r\n const {\r\n enableTopbar,\r\n enableRowSelection,\r\n enableServerSidePagination,\r\n enableServerSideSorting,\r\n enableSorting,\r\n enableColumnResizing,\r\n enableColumnReordering,\r\n enableColumnPinning,\r\n // enableMultiColumnSorting,\r\n } = craftFeatureOptions;\r\n\r\n const {\r\n sorting,\r\n setSorting,\r\n pagination,\r\n setPagination,\r\n rowSelection,\r\n setRowSelection,\r\n expanded,\r\n setExpanded,\r\n } = tableStates;\r\n\r\n const table = useReactTable({\r\n data,\r\n columns: metaColumns,\r\n state: {\r\n sorting,\r\n pagination,\r\n rowSelection,\r\n columnOrder,\r\n expanded,\r\n },\r\n\r\n getCoreRowModel: getCoreRowModel(),\r\n\r\n /** Sorting options start here */\r\n enableSorting: enableSorting,\r\n onSortingChange: setSorting,\r\n getSortedRowModel: getSortedRowModel(),\r\n manualSorting: enableServerSideSorting,\r\n // isMultiSortEvent: () => enableMultiColumnSorting || false,\r\n /** Sorting options end here */\r\n\r\n /** Pagination options start here */\r\n getPaginationRowModel: getPaginationRowModel(),\r\n onPaginationChange: setPagination,\r\n rowCount: totalRows,\r\n manualPagination: enableServerSidePagination,\r\n /** Pagination options end here */\r\n\r\n /** Row selection options start here */\r\n enableRowSelection: enableRowSelection,\r\n onRowSelectionChange: setRowSelection,\r\n /** Row selection options end here */\r\n\r\n /** Column Sizing options start here */\r\n enableColumnResizing: enableColumnResizing,\r\n columnResizeDirection: \"ltr\",\r\n columnResizeMode: \"onChange\",\r\n /** Column Sizing options end here */\r\n\r\n /** Column Ordering options start here */\r\n onColumnOrderChange: setColumnOrder,\r\n /** Column Ordering options end here */\r\n\r\n /** Column Pinning options end here */\r\n enableColumnPinning: enableColumnPinning,\r\n /** Column Pinning options end here */\r\n\r\n /** Row expanding options start here */\r\n getExpandedRowModel: getExpandedRowModel(),\r\n onExpandedChange: setExpanded,\r\n getSubRows: (row) => (row as { subRows?: T[] }).subRows ?? [],\r\n /** Row expanding options end here */\r\n });\r\n\r\n const { isLoading, loadingComponent, loaderText } = loadingOptions;\r\n const { isFullscreen } = useFullscreenPopoverContainer();\r\n\r\n const handleFullscreenToggle = () => {\r\n if (!document.fullscreenElement) {\r\n tableRef.current?.requestFullscreen().catch((err) => {\r\n console.error(\"Error attempting to enable fullscreen mode:\", err);\r\n });\r\n } else {\r\n document.exitFullscreen();\r\n }\r\n };\r\n\r\n // const tableWrapperProps = {\r\n // ...(styleOptions?.wrapperStyle && { style: styleOptions.wrapperStyle }),\r\n // className: \"ts__table__wrapper\",\r\n // };\r\n // const emptyListComponentCondition = () => {\r\n // if(isLoading) {}\r\n // }\r\n\r\n const showFilterCondition = filterOptions?.show;\r\n\r\n return (\r\n <div className=\"ts__table__container\">\r\n <div\r\n className={`ts__table__layout ${\r\n showFilterCondition ? \"has-filter\" : \"\"\r\n }`}\r\n >\r\n {/* Main Table Area */}\r\n <div\r\n className={`ts__table__main ${isFullscreen ? \"is-fullscreen\" : \"\"}`}\r\n ref={tableRef}\r\n >\r\n {enableTopbar && (\r\n <Topbar\r\n table={table}\r\n topbarOptions={craftTopbarOptions}\r\n isCompactTable={isCompactTable}\r\n setIsCompactTable={setIsCompactTable}\r\n isFullscreen={isFullscreen}\r\n fullscreenToggle={handleFullscreenToggle}\r\n paginationComponent={\r\n craftPaginationOptions?.showPagination === true &&\r\n craftPaginationOptions?.paginationPosition === \"top\" ? (\r\n <DefaultPagination\r\n table={table}\r\n rowsPerPageArray={rowsPerPageArray}\r\n paginationOptions={craftPaginationOptions}\r\n />\r\n ) : null\r\n }\r\n searchValue={craftTopbarOptions.searchValue}\r\n onSearchChange={craftTopbarOptions.onSearchChange}\r\n tableStates={tableStates}\r\n onFilterButtonClick={topbarOptions?.onFilterButtonClick}\r\n />\r\n )}\r\n\r\n {isLoading ? (\r\n loadingComponent ?? (\r\n <div className=\"ts__loader\">\r\n <LoaderAnimation />\r\n {loaderText && <p>{loaderText}</p>}\r\n </div>\r\n )\r\n ) : !isLoading && data.length === 0 && emptyListComponent ? (\r\n emptyListComponent\r\n ) : (\r\n <div\r\n // {...tableWrapperProps}\r\n className={`ts__table__wrapper ${\r\n isFullscreen ? \"is-fullscreen\" : \"\"\r\n }`}\r\n >\r\n {enableColumnReordering ? (\r\n <TableDND\r\n table={table}\r\n columnOrder={columnOrder}\r\n featureOptions={craftFeatureOptions}\r\n NestedComponent={nestedComponent}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n ) : (\r\n <Table\r\n table={table}\r\n featureOptions={craftFeatureOptions}\r\n NestedComponent={nestedComponent}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {craftPaginationOptions?.showPagination === true &&\r\n craftPaginationOptions?.paginationPosition === \"bottom\" ? (\r\n <DefaultPagination\r\n table={table}\r\n rowsPerPageArray={rowsPerPageArray}\r\n paginationOptions={craftPaginationOptions}\r\n />\r\n ) : null}\r\n </div>\r\n\r\n <div\r\n className={`ts__table__filter ${\r\n showFilterCondition ? \"show\" : \"\"\r\n }`.trim()}\r\n >\r\n {filterOptions?.component && filterOptions?.component}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TableWrapper;\r\n","import {\r\n ColumnPinningState,\r\n ExpandedState,\r\n PaginationState,\r\n RowSelectionState,\r\n SortingState,\r\n} from \"@tanstack/react-table\";\r\nimport { useState } from \"react\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n FilterMasterStateProps,\r\n FilterOperationListProps,\r\n FilterStateProps,\r\n} from \"../../types/filter\";\r\n\r\nexport function useCraftTable(paginationPageSize: number = 25) {\r\n const [pagination, setPagination] = useState<PaginationState>({\r\n pageIndex: 0,\r\n pageSize: paginationPageSize,\r\n });\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\r\n const [expanded, setExpanded] = useState<ExpandedState>({});\r\n const [wrapColumns, setWrapColumns] = useState<Record<string, boolean>>({\r\n all_wrap: true,\r\n });\r\n\r\n // Filters to be rendered in form\r\n const [filters, setFilters] = useState<FilterStateProps[]>([]);\r\n // Saved filter Component - savedFilterEditValue is set on list click\r\n const [savedFilterEditValue, setSavedFilterEditValue] = useState<\r\n string | number\r\n >(\"\");\r\n const [filterToDelete, setFilterToDelete] =\r\n useState<FilterOperationListProps | null>(null);\r\n const [filterSelectedAttributeValue, setFilterSelectedAttributeValue] =\r\n useState<string>(\"\");\r\n\r\n const [filterMaster, setFilterMaster] =\r\n useState<FilterMasterStateProps | null>(null);\r\n\r\n const [showTableFilter, setShowTableFilter] = useState<boolean>(false);\r\n\r\n //For filter criteria paper\r\n const [showFilterOptions, setShowFilterOption] = useState<boolean>(false);\r\n\r\n if (pagination.pageIndex < 0 || pagination.pageSize <= 0) {\r\n throw new Error(\r\n \"Invalid pagination values: pageIndex and pageSize must be positive.\"\r\n );\r\n }\r\n\r\n // For Default Column Pinning\r\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\r\n left: [],\r\n right: [],\r\n });\r\n\r\n const craftTableOptions: CraftTableOptionsProps = {\r\n sorting: sorting,\r\n setSorting: setSorting,\r\n pagination: pagination,\r\n setPagination: setPagination,\r\n rowSelection: rowSelection,\r\n setRowSelection: setRowSelection,\r\n expanded: expanded,\r\n setExpanded: setExpanded,\r\n wrapColumns: wrapColumns,\r\n setWrapColumns: setWrapColumns,\r\n filters: filters,\r\n setFilters: setFilters,\r\n savedFilterEditValue: savedFilterEditValue,\r\n setSavedFilterEditValue: setSavedFilterEditValue,\r\n filterToDelete: filterToDelete,\r\n setFilterToDelete: setFilterToDelete,\r\n filterSelectedAttributeValue: filterSelectedAttributeValue,\r\n setFilterSelectedAttributeValue: setFilterSelectedAttributeValue,\r\n filterMaster: filterMaster,\r\n setFilterMaster: setFilterMaster,\r\n showTableFilter: showTableFilter,\r\n setShowTableFilter: setShowTableFilter,\r\n showFilterOptions: showFilterOptions,\r\n setShowFilterOption: setShowFilterOption,\r\n columnPinning: columnPinning,\r\n setColumnPinning: setColumnPinning,\r\n };\r\n\r\n return craftTableOptions;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n ColumnTabConfigProps,\r\n QuickTabConfigProps,\r\n SavedButtonErrorProps,\r\n SettingsDataProps,\r\n SortingConfigProps,\r\n} from \"../../types/filter-settings\";\r\n\r\nexport function useCraftTableFilterSettings() {\r\n //states for the quick filter layout\r\n const [showListViewSettings, setShowListViewSettings] =\r\n useState<boolean>(false);\r\n\r\n const [settingsData, setSettingsData] = useState<SettingsDataProps>({});\r\n\r\n // Quick FIlter settings local states\r\n\r\n const [quickTabStates, setQuickTabStates] = useState<QuickTabConfigProps>({});\r\n const [columnTabState, setColumnTabState] = useState<ColumnTabConfigProps>(\r\n {}\r\n );\r\n const [sortingTabState, setSortingTabState] = useState<SortingConfigProps>(\r\n {}\r\n );\r\n\r\n // This state will be used for settings validation\r\n const [saveButtonError, setSaveButtonError] = useState<SavedButtonErrorProps>(\r\n { hasError: false, messages: [] }\r\n );\r\n\r\n useEffect(() => {\r\n if (settingsData?.quick_tab) {\r\n setQuickTabStates(settingsData?.quick_tab);\r\n }\r\n if (settingsData?.column) {\r\n setColumnTabState(settingsData?.column);\r\n }\r\n if (settingsData?.sorting) {\r\n setSortingTabState(settingsData?.sorting);\r\n }\r\n }, [settingsData]);\r\n\r\n const craftTableFilterSettingsOptions: craftTableFilterSettingsOptionsProps =\r\n {\r\n settingsData: settingsData,\r\n setSettingsData: setSettingsData,\r\n showListViewSettings: showListViewSettings,\r\n setShowListViewSettings: setShowListViewSettings,\r\n quickTabStates: quickTabStates,\r\n setQuickTabStates: setQuickTabStates,\r\n columnTabState: columnTabState,\r\n setColumnTabState: setColumnTabState,\r\n sortingTabState: sortingTabState,\r\n setSortingTabState: setSortingTabState,\r\n saveButtonError: saveButtonError,\r\n setSaveButtonError: setSaveButtonError,\r\n };\r\n\r\n return craftTableFilterSettingsOptions;\r\n}\r\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","UpArrow","_jsxs","jsxs","xmlns","viewBox","width","height","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","children","_jsx","jsx","x1","y1","x2","y2","points","DownArrow","TableFirstPageIcon","role","d","TableLastPageIcon","EditIcon","fillOpacity","DeleteIcon","HideColumnIcon","DragHandleIcon","className","transform","IconPinOutline","props","IconPinOffOutline","LoaderAnimation","cx","cy","r","attributeName","dur","values","repeatCount","begin","ChangeLayoutIcon","id","maskType","maskUnits","x","y","mask","CloseIcon","SearchIcon","SortingIcon","FilterationIcon","color","HideIcon","VisibilityIcon","VisibilityOffIcon","DragandDrogIcon","AddIcon","CheckBox","CrossBox","EyeIcon","ClosedEyeIcon","SettingIcon","layoutIcons","Board","Table","Timeline","List","Calendar","Gallery","Charts","LayoutSelector","onSelect","selectedLayout","Box","sx","maxWidth","display","justifyContent","alignItems","px","py","backgroundColor","Typography","variant","fontWeight","fontSize","IconButton","onClick","Grid","container","spacing","p","Object","keys","map","layout","isSelected","size","ButtonBase","border","borderRadius","flexDirection","transition","boxShadow","mb","opacity","useOutsideClick","handler","useEffect","handleClickOutside","event","current","contains","target","addEventListener","removeEventListener","useFullscreenPopoverContainer","isFullscreen","setIsFullscreen","useState","fullscreenElement","setContainer","undefined","handleFullscreenChange","el","ViewMore","compactMode","onCompactToggle","onFullscreenToggle","tableStates","onClose","fullscreenContainer","wrapColumns","setWrapColumns","MUISwitch","Switch","checked","all_wrap","onChange","prev","Select","value","e","minWidth","MenuProps","disablePortal","PaperProps","zIndex","MenuItem","SortableItem","attributes","listeners","setNodeRef","useSortable","CSS","Transform","toString","gap","cursor","flexGrow","SortPopover","anchorEl","columns","sorts","setSorts","sensors","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","handleChange","field","updated","item","triggerTableSortUpdate","sortItems","sortingPayload","desc","direction","Popover","open","Boolean","anchorOrigin","vertical","horizontal","margin","length","DndContext","collisionDetection","closestCenter","onDragEnd","active","over","oldIndex","findIndex","newIndex","arrayMove","SortableContext","items","s","strategy","verticalListSortingStrategy","sort","fullWidth","col","label","filter","handleRemove","Button","newSort","Date","now","startIcon","DraggableColumn","column","onToggle","isVisible","getIsVisible","columnDef","header","str","replace","char","toUpperCase","trim","ColumnToggle","table","columnOrder","setColumnOrder","allColumns","getAllLeafColumns","shownColumns","find","hiddenColumns","toggleVisibility","columnId","getColumn","activeCol","overCol","indexOf","forEach","fontStyle","customDebounce","func","delay","timerId","args","context","this","clearTimeout","setTimeout","apply","searchStyles","showSearchInput","marginRight","paddingRight","paddingLeft","TableSearch","setShowSearchInput","localValue","setLocalValue","searchContainerRef","useRef","debouncedOnChange","useCallback","newValue","position","top","TextField","placeholder","onKeyDown","key","InputProps","startAdornment","InputAdornment","querySelector","focus","edge","endAdornment","CloseRoundedIcon","Topbar","isCompactTable","fullscreenToggle","setIsCompactTable","paginationComponent","topbarOptions","onFilterButtonClick","sortAnchorEl","setSortAnchorEl","groupBy","setGroupBy","showColumnHiding","setShowColumnHiding","layoutAnchorEl","setLayoutAnchorEl","setSelectedLayout","columnAnchorEl","setColumnAnchorEl","leftSideComponent","rightSideComponent","showColumnToggle","showChangeLayoutToggle","viewMoreToggle","showSortingToggle","showFilterToggle","showSearch","searchValue","onSearchChange","dropdownRef","handleExternalLayoutTrigger","detail","handleExternalFilterTrigger","handleExternalViewMoreTrigger","setViewMoreAnchorEl","handleExternalSearchTrigger","window","viewMoreAnchorEl","isViewMoreOpen","overflowX","whiteSpace","title","customEvent","CustomEvent","dispatchEvent","_Fragment","currentTarget","mt","meta","sortingRules","setSorting","transformOrigin","onGroupByChange","DefaultPagination","rowsPerPageArray","paginationOptions","pageIndex","getState","pagination","pageCount","getPageCount","pageSize","rowCount","getRowCount","recordsRangeFirst","recordsRangeLast","Math","min","paginationView","Fragment","defaultValue","page","Number","setPageIndex","textAlign","max","setPageSize","disabled","getCanPreviousPage","previousPage","TablePreviousPageIcon","getCanNextPage","nextPage","TableNextPageIcon","getColumnPinningStyles","isPinned","getIsPinned","isLastLeftPinnedColumn","getIsLastColumn","isFirstRightPinnedColumn","getIsFirstColumn","background","left","getStart","right","getAfter","getSize","getColumnPinningStylesBody","environments","adm_dev","crm_dev","uat","DragAlongCell","cell","isDragging","Translate","wordBreak","align","getIsPlaceholder","flexRender","getContext","axios","create","baseURL","timeout","headers","interceptors","request","use","config","token","localStorage","getItem","Authorization","error","Promise","reject","Checkbox","indeterminate","uuidv4","check","setCheck","React","isChecked","TableBody","featureOptions","NestedComponent","enableColumnReordering","enableRowSelection","getRowModel","rows","row","renderedRow","getIsSelected","getIsSomeSelected","getToggleSelectedHandler","getVisibleCells","tdProps","horizontalListSortingStrategy","getIsExpanded","renderRow","TableHeadPin","pin","TableHeadPopover","dense","ListItemButton","toggleSorting","ListItemIcon","ListItemText","primary","toggleWrapForColumn","DraggableTableHeader","enableColumnPinning","setAnchorEl","handleClose","styles","minSize","maxSize","onMouseLeave","colSpan","isPlaceholder","getCanSort","asc","getIsSorted","getCanResize","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","getIsResizing","TableHead","stickyHeader","handleHover","getHeaderGroups","headerGroup","getIsAllRowsSelected","getIsSomeRowsSelected","toggleAllRowsSelected","striped","TableDND","modifiers","restrictToHorizontalAxis","tableTabsStyles","tabs","minHeight","tab","padding","textTransform","tabCount","ConfirmModal","description","buttons","input","inputValue","setInputValue","setError","Dialog","reason","DialogTitle","marginX","paddingBottom","borderBottom","component","DialogContent","marginBottom","marginTop","labelClassName","required","multiline","DialogActions","button","index","handleButtonClick","CustomTabPanel","hidden","CustomTabs","tabItems","activeFilterIndex","handleCrossClick","tabsProps","hoveredTab","setHoveredTab","Tabs","idx","isActive","isHovered","Tab","onMouseEnter","TextFieldStyles","bgcolor","borderColor","FormTextfield","control","isLoading","onValueChange","Controller","name","filter_value","render","data_type","FormDatePicker","views","isRange","filter_operator","isRelativeToToday","LocalizationProvider","dateAdapter","AdapterDateFns","moment","format","toDate","todayDate","fromDate","Array","isArray","DatePicker","date","formatted","slotProps","textField","FormDropdown","setValue","dropdownList","FormControl","disableUnderline","newOperator","oldOperator","shouldDirty","FormMultiSelect","dropdownData","options","filter_attribute","cleanedValue","multiple","filtered","renderValue","selected","val","join","includes","CustomSearch","search","setSearch","filterStyles","scrollbarCustom","overflowY","pr","filterContainer","filterMainHeader","mx","filterMainComponentWrapper","filterFormStyles","formEditModeStyle","formFlexContainer","formListItem","formListItemHeader","formListItemHeaderName","formListItemHeaderDropdown","FilterCriteria","columnsData","setSelectedFilters","searchTerm","setSearchTerm","FilterButton","styled","theme","palette","main","dark","filters","setFilters","showFilterOptions","setShowFilterOption","filterButtonRef","filterButtonWidth","setWidth","resizeObserver","ResizeObserver","clientWidth","observe","disconnect","useElementWidth","Paper","maxHeight","my","column_list","toLowerCase","isAlreadySelected","some","attribute_key","ListItem","dropdownOptions","operation_list","defaultOperator","matchingDropdownList","newFilter","newSelectedFilter","dropdown_list","handleAddFilter","FilterForm","criteriaSearchTerm","setCriteriaSearchTerm","selectedFilters","handleRemoveFilter","editMode","setSavedFilterModalOpen","setDeleteFilterModalOpen","filterMaster","setFilterMaster","setPagination","filterName","saved_filters","selectedName","defaultValues","useMemo","filterValues","reduce","acc","curr","operator","dummyChange","watch","reset","unregister","useForm","mode","resetOptions","keepDirtyValues","keepErrors","formValues","debouncedUpdateFilters","updatedFilters","updateFiltersFromForm","filterValue","onSubmit","preventDefault","inputRef","stopPropagation","reverse","marginLeft","dummy","MainFilter","activeFilterTabIndex","mainBoxStyles","SavedFilterEditComponent","setEditMode","selectedId","BackArrow","SavedFilter","tabValue","setFilterToDelete","saved_filter","visibility","handleAppyFilter","rounded","handleListItemClick","AttributesFilter","selectedAttribute","currentFilterValue","matchingColumn","datasource_list","existingFilter","selectedAttributeOptions","attributeKey","radio","displayEmpty","overflow","option","FormControlLabel","Radio","selectedAttr","prevFilters","f","handleSingleRadioSelect","verticalTabStyles","mainTabsContainer","mainTabContainer","mainTabLabel","horizontalTabStyles","CustomVerticalTabs","orientation","DraggableListItem","containerId","data","DragIndicator","mr","dialogStyles","dialogTitle","dialogContent","paddingTop","dialogActionsButton","listingValuesStyles","wrapper","heading","draggableContainer","draggableCover","headerContainer","TabsStyles","mainTabsHeader","mainTabDropdown","mainTabSelect","selectDropdownSeparator","checkboxStyle","Loader","loaderText","CircularProgress","ListingValuesContent","onItemToggle","flex","ListingValues","filteredValues","buttonText","headerText","tabsApiDataLoading","enableDragAndDrop","AlertComponenet","useDroppable","InfoAlert","message","Alert","severity","QuickTab","filterSettingStates","tabsApiData","settingsData","setSettingsData","saveButtonError","setSaveButtonError","currentQuickAttribute","setCurrentQuickAttribute","quick_tab","attribute","quickTabStates","entries","sorting","hide_list","show_list","showList","isValidShowList","ERROR_CODE","messages","showListValues","charAt","slice","hideListValues","filteredListValues","handleItemToggle","itemId","fromContainerId","toShowList","toHideList","splice","push","enableDND","currentContainer","overContainer","newShowList","newHideList","String","removed","currentShowList","currentHideList","availableSlots","limitedHideList","isAllSelected","isCombineOther","ColumnTab","selectedTabIndex","setSelectedTabIndex","settingsColumnState","isColumnDefault","isDefault","isStateEmpty","isDefaultEmpty","isTabWiseEmpty","mappedColumns","mappedTabs","tab_name","hasOtherMessages","hasError","hideList","currentTab","getCurrentLists","visible","moved","updatedTabs","hasShowListQuickTabs","_","activeItem","list","Sorting","activeTab","setActiveTab","columnTabState","sortingTabState","isSortingDefault","isEmptyDefault","sortby","emptySortBy","order","columnItem","PointerSensor","activeTabIndex","tabSortedList","updateSortList","handleDNDDropdownChange","showAddSortButton","stateLength","isAddSortDisabled","hasEmptyColumn","i","reordered","columnKey","CustomDialog","DialogTransition","forwardRef","Slide","CustomButton","customSx","SETTINGS_TABS","KANBAN_SETTINGS_TABS","LANE_SELECTS","Lane","sortingOptions","lane","opt","showSubLane","showColorColumns","GroupBy","kanbanStyles","syncingStyle","topHeader","pt","laneHeader","badge","swimlaneWrapperStyle","columnStyle","stageStyle","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","subSectionAccordion","subSectionCountContainer","cardsContainer","settingStyle","swimLaneAccordionStyle","subSectionHeaderContainer","COLOR_CONSTANTS","darkColor","onDeleteFilter","onSaveFilter","onUpdateFilter","setTabValue","saveFilterModalOpen","setSaveFilterModalOpen","deleteFilterModalOpen","filterToDelete","commonStateReset","indexMapper","view","show","columnsDataLoading","onSaveSettingsData","showListViewSettings","hasAPIData","slots","Column","copyColumnTabState","copySortingTabState","loading","tabsData","settingsOptions","normalizedTabs","tab_value","defaultTab","t","selectedTab","showIcon","scrollButtons","indicator","tab_value_count","padStart","metaData","KanbanCardComponent","showSettings","onOpenSettings","expandedPanels","setExpandedPanels","Active","subLaneExpanded","setSubLaneExpanded","swim_lanes","initial","swim_lane","sub_lanes","sub_lane","lane_id","expanded","getLeadCount","laneId","seenLeadIds","Set","count","swimLane","subLane","lead","stage_id","has","add","SettingsOutlinedIcon","lanes","Accordion","panel","isExpanded","AccordionSummary","expandIcon","ArrowDropDownIcon","ml","AccordionDetails","pl","sub_section","subLaneKey","lead_status_id","toggleSubLane","subLaneId","borderLeft","ExpandMoreIcon","stage_group_id","card","cardData","nestedComponent","loadingOptions","customRenderFn","shouldHideColumn","emptyListComponent","filterOptions","Error","metaColumns","setMetaColumns","updatedColumns","accessorKey","ctx","propName","customFn","getValue","where","defaultPinned","columnPinning","c","compactTable","tableRef","craftPaginationOptions","showPagination","paginationPosition","totalRows","craftTopbarOptions","showCompactTableToggle","craftFeatureOptions","enableTopbar","enableSorting","enableServerSidePagination","enableServerSideSorting","enableColumnResizing","enableMultiColumnSorting","enableWordBreakAll","rowSelection","setRowSelection","setExpanded","useReactTable","state","getCoreRowModel","onSortingChange","getSortedRowModel","manualSorting","getPaginationRowModel","onPaginationChange","manualPagination","onRowSelectionChange","columnResizeDirection","columnResizeMode","onColumnOrderChange","getExpandedRowModel","onExpandedChange","getSubRows","subRows","loadingComponent","showFilterCondition","exitFullscreen","requestFullscreen","catch","err","console","paginationPageSize","savedFilterEditValue","setSavedFilterEditValue","filterSelectedAttributeValue","setFilterSelectedAttributeValue","showTableFilter","setShowTableFilter","setColumnPinning","setShowListViewSettings","setQuickTabStates","setColumnTabState","setSortingTabState"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/assets/svg.tsx","../src/listing/components/table-change-layout.tsx","../src/listing/libs/hooks/useOutsideClick.tsx","../src/listing/libs/hooks/useFullScreen.tsx","../src/listing/components/viewmore/index.tsx","../src/listing/components/sorting-modal.tsx/sorting-item.tsx","../src/listing/components/sorting-modal.tsx/index.tsx","../src/listing/components/column-visibility-modal/column-list-item.tsx","../src/listing/types/common.ts","../src/listing/components/column-visibility-modal/index.tsx","../src/listing/libs/utils/debounce.ts","../src/listing/components/search/style.ts","../src/listing/components/search/index.tsx","../src/listing/components/topbar/index.tsx","../src/listing/components/pagination/default/index.tsx","../src/listing/libs/utils/common.ts","../src/listing/components/table-body-dnd-cell.tsx","../src/listing/components/inputs/checkbox/index.tsx","../src/listing/components/table-body.tsx","../src/listing/components/table-head-pin.tsx","../src/listing/components/table-head-popover.tsx","../src/listing/components/table-head-dnd-cell.tsx","../src/listing/components/table-head.tsx","../src/listing/components/table.tsx","../src/listing/components/table-dnd.tsx","../src/listing/components/tabs/styles.ts","../src/listing/components/common/confirm-modal/index.tsx","../src/listing/components/filter/components/tabs/custom-tab-panel.tsx","../src/listing/components/filter/components/tabs/index.tsx","../src/listing/components/filter/components/forms/components/styles.tsx","../src/listing/components/filter/components/forms/components/Textfield.tsx","../src/listing/components/filter/components/forms/components/Date.tsx","../src/listing/components/filter/components/forms/components/Dropdown.tsx","../src/listing/components/filter/components/forms/components/Multi-Select.tsx","../src/listing/components/filter/components/search/index.tsx","../src/listing/components/filter/style.ts","../src/listing/components/filter/components/forms/components/Filter-criteria.tsx","../src/listing/libs/hooks/useElementWidth.tsx","../src/listing/components/filter/components/forms/index.tsx","../src/listing/components/filter/components/main-filter.tsx","../src/listing/components/filter/components/saved-edit-filter.tsx","../src/listing/components/filter/components/saved-filter.tsx","../src/listing/components/filter/components/attributes-filter.tsx","../src/listing/components/table-settings/tabs/styles.ts","../src/listing/components/table-settings/tabs/vertical/index.tsx","../src/listing/components/table-settings/tabs/vertical/custom-tab-panel.tsx","../src/listing/components/table-settings/common/draggable-listitem.tsx","../src/listing/components/table-settings/style.ts","../src/listing/components/common/loader/loader.tsx","../src/listing/components/table-settings/common/listing-values.tsx","../src/listing/components/table-settings/common/info-alert.tsx","../src/listing/components/table-settings/components/quick-tab.tsx","../src/listing/components/table-settings/tabs/horizontal/index.tsx","../src/listing/components/table-settings/components/column.tsx","../src/listing/components/table-settings/components/sorting.tsx","../src/listing/components/table-settings/components/custom-dialog.tsx","../src/listing/components/table-settings/components/custom-button.tsx","../src/listing/components/table-settings/constants.ts","../src/listing/components/table-settings/components/lane.tsx","../src/listing/components/table-settings/components/group-by.tsx","../src/kanban/styles/styles.tsx","../src/kanban/constants/kanban-constants.ts","../src/listing/components/filter/index.tsx","../src/listing/components/table-settings/index.tsx","../src/listing/components/tabs/index.tsx","../src/kanban/index.tsx","../src/listing/components/index-table.tsx","../src/listing/libs/hooks/useCraftTable.tsx","../src/listing/libs/hooks/useCraftTableFilterSettings.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React from \"react\";\r\n\r\nexport const SortIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n strokeWidth={1.5}\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const GreenDot = () => (\r\n <svg\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#5CD961\" />\r\n </svg>\r\n);\r\n\r\nexport const RedDot = () => (\r\n <svg\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#F94144\" />\r\n </svg>\r\n);\r\n\r\nexport const BlueDot = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"8\"\r\n height=\"8\"\r\n viewBox=\"0 0 8 8\"\r\n fill=\"none\"\r\n >\r\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#04769A\" />\r\n </svg>\r\n);\r\n\r\nexport const UpArrow = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <polyline points=\"19 12 12 5 5 12\"></polyline>\r\n </svg>\r\n);\r\n\r\nexport const DownArrow = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line>\r\n <polyline points=\"5 12 12 19 19 12\"></polyline>\r\n </svg>\r\n);\r\n\r\nexport const TableFirstPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"></path>\r\n <path fill=\"none\" d=\"M24 24H0V0h24v24z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TablePreviousPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TableNextPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n </svg>\r\n);\r\n\r\nexport const TableLastPageIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"></path>\r\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const VerticalThreeDots = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-three-dots-vertical\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path d=\"M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\" />\r\n </svg>\r\n);\r\n\r\nexport const ArrowDownUp = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"12\"\r\n height=\"12\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-arrow-down-up\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M11.5 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L11 2.707V14.5a.5.5 0 0 0 .5.5m-7-14a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V1.5a.5.5 0 0 1 .5-.5\"\r\n />\r\n </svg>\r\n);\r\nexport const EditIcon = () => (\r\n <svg\r\n width=\"18\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.33331 10.6663H2.17431L8.99865 3.84201L8.15765 3.00101L1.33331 9.82534V10.6663ZM0.93598 11.6663C0.765202 11.6663 0.622091 11.6086 0.506646 11.493C0.391091 11.3776 0.333313 11.2345 0.333313 11.0637V9.90867C0.333313 9.74612 0.364535 9.59118 0.42698 9.44384C0.489313 9.29651 0.575202 9.16812 0.684646 9.05868L9.12698 0.620174C9.22776 0.528619 9.33904 0.457897 9.46081 0.408008C9.5827 0.358008 9.71048 0.333008 9.84415 0.333008C9.97781 0.333008 10.1073 0.35673 10.2325 0.404175C10.3578 0.451619 10.4688 0.527063 10.5653 0.630507L11.3795 1.45484C11.4829 1.5514 11.5566 1.66251 11.6006 1.78817C11.6446 1.91384 11.6666 2.03951 11.6666 2.16517C11.6666 2.29929 11.6438 2.42723 11.598 2.54901C11.5522 2.6709 11.4794 2.78223 11.3795 2.88301L2.94098 11.315C2.83154 11.4245 2.70315 11.5103 2.55581 11.5727C2.40848 11.6351 2.25354 11.6663 2.09098 11.6663H0.93598ZM8.57081 3.42884L8.15765 3.00101L8.99865 3.84201L8.57081 3.42884Z\"\r\n fill=\"#0E0C0B\"\r\n fillOpacity={0.4}\r\n />\r\n </svg>\r\n);\r\n\r\nexport const DeleteIcon = () => (\r\n <svg\r\n width=\"18\"\r\n height=\"20\"\r\n viewBox=\"0 0 10 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.87183 11.6665C1.54039 11.6665 1.25667 11.5485 1.02067 11.3125C0.784667 11.0765 0.666667 10.7928 0.666667 10.4613V1.99982H0.5C0.358333 1.99982 0.239611 1.95188 0.143833 1.85599C0.0479445 1.7601 0 1.64132 0 1.49966C0 1.35788 0.0479445 1.23916 0.143833 1.14349C0.239611 1.04771 0.358333 0.999823 0.5 0.999823H3C3 0.836601 3.0575 0.69749 3.1725 0.58249C3.28739 0.467601 3.42644 0.410156 3.58967 0.410156H6.41033C6.57356 0.410156 6.71261 0.467601 6.8275 0.58249C6.9425 0.69749 7 0.836601 7 0.999823H9.5C9.64167 0.999823 9.76039 1.04777 9.85617 1.14366C9.95206 1.23955 10 1.35832 10 1.49999C10 1.64177 9.95206 1.76049 9.85617 1.85616C9.76039 1.95193 9.64167 1.99982 9.5 1.99982H9.33333V10.4613C9.33333 10.7928 9.21533 11.0765 8.97933 11.3125C8.74333 11.5485 8.45961 11.6665 8.12817 11.6665H1.87183ZM8.33333 1.99982H1.66667V10.4613C1.66667 10.5212 1.68589 10.5704 1.72433 10.6088C1.76278 10.6473 1.81194 10.6665 1.87183 10.6665H8.12817C8.18806 10.6665 8.23722 10.6473 8.27567 10.6088C8.31411 10.5704 8.33333 10.5212 8.33333 10.4613V1.99982ZM3.7695 9.33316C3.91117 9.33316 4.02989 9.28527 4.12567 9.18949C4.22133 9.0936 4.26917 8.97482 4.26917 8.83316V3.83316C4.26917 3.69149 4.22122 3.57271 4.12533 3.47682C4.02956 3.38104 3.91078 3.33316 3.769 3.33316C3.62733 3.33316 3.50861 3.38104 3.41283 3.47682C3.31717 3.57271 3.26933 3.69149 3.26933 3.83316V8.83316C3.26933 8.97482 3.31722 9.0936 3.413 9.18949C3.50889 9.28527 3.62772 9.33316 3.7695 9.33316ZM6.231 9.33316C6.37267 9.33316 6.49139 9.28527 6.58717 9.18949C6.68283 9.0936 6.73067 8.97482 6.73067 8.83316V3.83316C6.73067 3.69149 6.68278 3.57271 6.587 3.47682C6.49111 3.38104 6.37228 3.33316 6.2305 3.33316C6.08883 3.33316 5.97011 3.38104 5.87433 3.47682C5.77867 3.57271 5.73083 3.69149 5.73083 3.83316V8.83316C5.73083 8.97482 5.77878 9.0936 5.87467 9.18949C5.97044 9.28527 6.08922 9.33316 6.231 9.33316Z\"\r\n fill=\"#F63D68\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const CrossSearchIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-search-off\"\r\n >\r\n <path d=\"M5.039 5.062a7 7 0 0 0 9.91 9.89m1.584 -2.434a7 7 0 0 0 -9.038 -9.057\"></path>\r\n <path d=\"M3 3l18 18\"></path>\r\n </svg>\r\n);\r\n\r\nexport const FilterIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n fill=\"currentColor\"\r\n className=\"bi bi-funnel\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\" />\r\n </svg>\r\n);\r\n\r\nexport const HideColumnIcon = () => (\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 3.5H3C2.175 3.5 1.5 4.175 1.5 5V14C1.5 14.825 2.175 15.5 3 15.5H15C15.825 15.5 16.5 14.825 16.5 14V5C16.5 4.175 15.825 3.5 15 3.5ZM6 14H3V5H6V14ZM10.5 14H7.5V5H10.5V14ZM15 14H12V5H15V14Z\"\r\n fill=\"currentColor\"\r\n stroke=\"white\"\r\n strokeWidth=\"0.5\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const PaddingMD = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-medium\"\r\n >\r\n <path d=\"M4 20h16\"></path>\r\n <path d=\"M4 12h16\"></path>\r\n <path d=\"M4 4h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const PaddingSM = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-small\"\r\n >\r\n <path d=\"M4 3h16\"></path>\r\n <path d=\"M4 9h16\"></path>\r\n <path d=\"M4 15h16\"></path>\r\n <path d=\"M4 21h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const PaddingLG = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-baseline-density-large\"\r\n >\r\n <path d=\"M4 4h16\"></path>\r\n <path d=\"M4 20h16\"></path>\r\n </svg>\r\n);\r\n\r\nexport const DragHandleIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"tabler-icon tabler-icon-grip-horizontal\"\r\n transform=\"rotate(90)\"\r\n >\r\n <path d=\"M10 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M10 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M18 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n <path d=\"M18 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n </svg>\r\n);\r\n\r\nexport const IconPinOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <path d=\"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2l-2-2m-7.2 2l1.2-1.2V4h4v8.8l1.2 1.2H8.8z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const IconPinOffOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <path d=\"M8 6.2V4H7V2h10v2h-1v8l2 2v2h-.2L14 12.2V4h-4v4.2l-2-2m12 14.5L18.7 22l-5.9-5.9V22h-1.6v-6H6v-2l2-2v-.7l-6-6L3.3 4 20 20.7M8.8 14h1.8l-.9-.9-.9.9z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const IconExpand = (props: React.SVGProps<SVGSVGElement>) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 1024 1024\"\r\n fill=\"currentColor\"\r\n height=\"1rem\"\r\n width=\"1rem\"\r\n {...props}\r\n >\r\n <defs>\r\n <style />\r\n </defs>\r\n <path d=\"M342 88H120c-17.7 0-32 14.3-32 32v224c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V168h174c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zm578 576h-48c-8.8 0-16 7.2-16 16v176H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h222c17.7 0 32-14.3 32-32V680c0-8.8-7.2-16-16-16zM342 856H168V680c0-8.8-7.2-16-16-16h-48c-8.8 0-16 7.2-16 16v224c0 17.7 14.3 32 32 32h222c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zM904 88H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h174v176c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V120c0-17.7-14.3-32-32-32z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const LoaderAnimation = () => {\r\n return (\r\n <svg viewBox=\"0 0 60 60\" width={\"4rem\"}>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"6\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 15 ; 0 -15; 0 15\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.1\"\r\n />\r\n </circle>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"24\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 10 ; 0 -10; 0 10\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.2\"\r\n />\r\n </circle>\r\n <circle fill=\"currentColor\" stroke=\"none\" cx=\"42\" cy=\"30\" r=\"5\">\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"1s\"\r\n type=\"translate\"\r\n values=\"0 5 ; 0 -5; 0 5\"\r\n repeatCount=\"indefinite\"\r\n begin=\"0.3\"\r\n />\r\n </circle>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChangeLayoutIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12587\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12587)\">\r\n <path\r\n d=\"M4.42311 17.0834C4.00214 17.0834 3.64582 16.9375 3.35416 16.6459C3.06249 16.3542 2.91666 15.9979 2.91666 15.5769V4.42315C2.91666 4.00217 3.06249 3.64585 3.35416 3.35419C3.64582 3.06252 4.00214 2.91669 4.42311 2.91669H15.5769C15.9978 2.91669 16.3542 3.06252 16.6458 3.35419C16.9375 3.64585 17.0833 4.00217 17.0833 4.42315V15.5769C17.0833 15.9979 16.9375 16.3542 16.6458 16.6459C16.3542 16.9375 15.9978 17.0834 15.5769 17.0834H4.42311ZM4.42311 15.8334H9.37499V4.16669H4.42311C4.35895 4.16669 4.3002 4.19342 4.24687 4.24689C4.19339 4.30023 4.16666 4.35898 4.16666 4.42315V15.5769C4.16666 15.6411 4.19339 15.6998 4.24687 15.7531C4.3002 15.8066 4.35895 15.8334 4.42311 15.8334ZM10.625 15.8334H15.5769C15.641 15.8334 15.6998 15.8066 15.7531 15.7531C15.8066 15.6998 15.8333 15.6411 15.8333 15.5769V10H10.625V15.8334ZM10.625 8.75002H15.8333V4.42315C15.8333 4.35898 15.8066 4.30023 15.7531 4.24689C15.6998 4.19342 15.641 4.16669 15.5769 4.16669H10.625V8.75002Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const BoardIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"10\"\r\n viewBox=\"0 0 13 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.37179 9H4.05763V1H1.37179C1.3119 1 1.26274 1.01922 1.22429 1.05767C1.18585 1.09611 1.16663 1.14528 1.16663 1.20517V8.79483C1.16663 8.85472 1.18585 8.90389 1.22429 8.94233C1.26274 8.98078 1.3119 9 1.37179 9ZM5.05763 9H7.94229V1H5.05763V9ZM8.94229 9H11.6281C11.688 9 11.7372 8.98078 11.7756 8.94233C11.8141 8.90389 11.8333 8.85472 11.8333 8.79483V1.20517C11.8333 1.14528 11.8141 1.09611 11.7756 1.05767C11.7372 1.01922 11.688 1 11.6281 1H8.94229V9ZM1.37179 10C1.03501 10 0.749959 9.88333 0.516626 9.65C0.283293 9.41667 0.166626 9.13161 0.166626 8.79483V1.20517C0.166626 0.868389 0.283293 0.583333 0.516626 0.35C0.749959 0.116667 1.03501 0 1.37179 0H11.6281C11.9649 0 12.25 0.116667 12.4833 0.35C12.7166 0.583333 12.8333 0.868389 12.8333 1.20517V8.79483C12.8333 9.13161 12.7166 9.41667 12.4833 9.65C12.25 9.88333 11.9649 10 11.6281 10H1.37179Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const TableIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const TimeLineIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ListIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"12\"\r\n viewBox=\"0 0 13 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.20521 10.5C5.06354 10.5 4.94476 10.452 4.84887 10.3562C4.7531 10.2603 4.70521 10.1415 4.70521 9.99982C4.70521 9.85805 4.7531 9.73932 4.84887 9.64366C4.94476 9.54788 5.06354 9.49999 5.20521 9.49999H11.6667C11.8084 9.49999 11.9271 9.54794 12.0229 9.64382C12.1188 9.73971 12.1667 9.85849 12.1667 10.0002C12.1667 10.1419 12.1188 10.2607 12.0229 10.3563C11.9271 10.4521 11.8084 10.5 11.6667 10.5H5.20521ZM5.20521 6.49999C5.06354 6.49999 4.94476 6.45205 4.84887 6.35616C4.7531 6.26027 4.70521 6.14149 4.70521 5.99982C4.70521 5.85805 4.7531 5.73932 4.84887 5.64366C4.94476 5.54788 5.06354 5.49999 5.20521 5.49999H11.6667C11.8084 5.49999 11.9271 5.54794 12.0229 5.64382C12.1188 5.73971 12.1667 5.85849 12.1667 6.00016C12.1667 6.14194 12.1188 6.26066 12.0229 6.35632C11.9271 6.4521 11.8084 6.49999 11.6667 6.49999H5.20521ZM5.20521 2.49999C5.06354 2.49999 4.94476 2.45205 4.84887 2.35616C4.7531 2.26027 4.70521 2.14149 4.70521 1.99982C4.70521 1.85805 4.7531 1.73932 4.84887 1.64366C4.94476 1.54788 5.06354 1.49999 5.20521 1.49999H11.6667C11.8084 1.49999 11.9271 1.54794 12.0229 1.64382C12.1188 1.73971 12.1667 1.85849 12.1667 2.00016C12.1667 2.14194 12.1188 2.26066 12.0229 2.35632C11.9271 2.4521 11.8084 2.49999 11.6667 2.49999H5.20521ZM1.94237 11.109C1.63737 11.109 1.37632 11.0004 1.15921 10.7832C0.941985 10.566 0.833374 10.305 0.833374 9.99999C0.833374 9.69499 0.941985 9.43394 1.15921 9.21682C1.37632 8.9996 1.63737 8.89099 1.94237 8.89099C2.24737 8.89099 2.50843 8.9996 2.72554 9.21682C2.94276 9.43394 3.05137 9.69499 3.05137 9.99999C3.05137 10.305 2.94276 10.566 2.72554 10.7832C2.50843 11.0004 2.24737 11.109 1.94237 11.109ZM1.94237 7.10899C1.63737 7.10899 1.37632 7.00038 1.15921 6.78316C0.941985 6.56605 0.833374 6.30499 0.833374 5.99999C0.833374 5.69499 0.941985 5.43394 1.15921 5.21682C1.37632 4.9996 1.63737 4.89099 1.94237 4.89099C2.24737 4.89099 2.50843 4.9996 2.72554 5.21682C2.94276 5.43394 3.05137 5.69499 3.05137 5.99999C3.05137 6.30499 2.94276 6.56605 2.72554 6.78316C2.50843 7.00038 2.24737 7.10899 1.94237 7.10899ZM1.94237 3.10899C1.63737 3.10899 1.37632 3.00038 1.15921 2.78316C0.941985 2.56605 0.833374 2.30499 0.833374 1.99999C0.833374 1.69499 0.941985 1.43394 1.15921 1.21682C1.37632 0.999602 1.63737 0.890991 1.94237 0.890991C2.24737 0.890991 2.50843 0.999602 2.72554 1.21682C2.94276 1.43394 3.05137 1.69499 3.05137 1.99999C3.05137 2.30499 2.94276 2.56605 2.72554 2.78316C2.50843 3.00038 2.24737 3.10899 1.94237 3.10899Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const CalendarIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M2.03854 13.3333C1.70176 13.3333 1.41671 13.2167 1.18337 12.9833C0.950041 12.75 0.833374 12.465 0.833374 12.1282V3.20518C0.833374 2.8684 0.950041 2.58334 1.18337 2.35001C1.41671 2.11668 1.70176 2.00001 2.03854 2.00001H2.96154V1.10251C2.96154 0.956399 3.01049 0.834399 3.10837 0.73651C3.20626 0.638732 3.32826 0.589844 3.47437 0.589844C3.6206 0.589844 3.7426 0.638732 3.84037 0.73651C3.93826 0.834399 3.98721 0.956399 3.98721 1.10251V2.00001H9.03854V1.08984C9.03854 0.947955 9.08637 0.829121 9.18204 0.733344C9.27782 0.637677 9.39665 0.589844 9.53854 0.589844C9.68043 0.589844 9.79921 0.637677 9.89487 0.733344C9.99065 0.829121 10.0385 0.947955 10.0385 1.08984V2.00001H10.9615C11.2983 2.00001 11.5834 2.11668 11.8167 2.35001C12.05 2.58334 12.1667 2.8684 12.1667 3.20518V12.1282C12.1667 12.465 12.05 12.75 11.8167 12.9833C11.5834 13.2167 11.2983 13.3333 10.9615 13.3333H2.03854ZM2.03854 12.3333H10.9615C11.0129 12.3333 11.0599 12.312 11.1025 12.2692C11.1453 12.2265 11.1667 12.1795 11.1667 12.1282V5.87184H1.83337V12.1282C1.83337 12.1795 1.85476 12.2265 1.89754 12.2692C1.94021 12.312 1.98721 12.3333 2.03854 12.3333ZM1.83337 4.87184H11.1667V3.20518C11.1667 3.15384 11.1453 3.10684 11.1025 3.06418C11.0599 3.0214 11.0129 3.00001 10.9615 3.00001H2.03854C1.98721 3.00001 1.94021 3.0214 1.89754 3.06418C1.85476 3.10684 1.83337 3.15384 1.83337 3.20518V4.87184ZM6.50004 8.38468C6.33682 8.38468 6.19771 8.32718 6.08271 8.21218C5.96782 8.09729 5.91037 7.95818 5.91037 7.79484C5.91037 7.63162 5.96782 7.49251 6.08271 7.37751C6.19771 7.26262 6.33682 7.20518 6.50004 7.20518C6.66326 7.20518 6.80237 7.26262 6.91737 7.37751C7.03226 7.49251 7.08971 7.63162 7.08971 7.79484C7.08971 7.95818 7.03226 8.09729 6.91737 8.21218C6.80237 8.32718 6.66326 8.38468 6.50004 8.38468ZM3.83337 8.38468C3.67015 8.38468 3.53104 8.32718 3.41604 8.21218C3.30115 8.09729 3.24371 7.95818 3.24371 7.79484C3.24371 7.63162 3.30115 7.49251 3.41604 7.37751C3.53104 7.26262 3.67015 7.20518 3.83337 7.20518C3.9966 7.20518 4.13571 7.26262 4.25071 7.37751C4.3656 7.49251 4.42304 7.63162 4.42304 7.79484C4.42304 7.95818 4.3656 8.09729 4.25071 8.21218C4.13571 8.32718 3.9966 8.38468 3.83337 8.38468ZM9.16671 8.38468C9.00348 8.38468 8.86437 8.32718 8.74937 8.21218C8.63449 8.09729 8.57704 7.95818 8.57704 7.79484C8.57704 7.63162 8.63449 7.49251 8.74937 7.37751C8.86437 7.26262 9.00348 7.20518 9.16671 7.20518C9.32993 7.20518 9.46904 7.26262 9.58404 7.37751C9.69893 7.49251 9.75637 7.63162 9.75637 7.79484C9.75637 7.95818 9.69893 8.09729 9.58404 8.21218C9.46904 8.32718 9.32993 8.38468 9.16671 8.38468ZM6.50004 11C6.33682 11 6.19771 10.9425 6.08271 10.8275C5.96782 10.7126 5.91037 10.5736 5.91037 10.4103C5.91037 10.247 5.96782 10.1079 6.08271 9.99301C6.19771 9.87801 6.33682 9.82051 6.50004 9.82051C6.66326 9.82051 6.80237 9.87801 6.91737 9.99301C7.03226 10.1079 7.08971 10.247 7.08971 10.4103C7.08971 10.5736 7.03226 10.7126 6.91737 10.8275C6.80237 10.9425 6.66326 11 6.50004 11ZM3.83337 11C3.67015 11 3.53104 10.9425 3.41604 10.8275C3.30115 10.7126 3.24371 10.5736 3.24371 10.4103C3.24371 10.247 3.30115 10.1079 3.41604 9.99301C3.53104 9.87801 3.67015 9.82051 3.83337 9.82051C3.9966 9.82051 4.13571 9.87801 4.25071 9.99301C4.3656 10.1079 4.42304 10.247 4.42304 10.4103C4.42304 10.5736 4.3656 10.7126 4.25071 10.8275C4.13571 10.9425 3.9966 11 3.83337 11ZM9.16671 11C9.00348 11 8.86437 10.9425 8.74937 10.8275C8.63449 10.7126 8.57704 10.5736 8.57704 10.4103C8.57704 10.247 8.63449 10.1079 8.74937 9.99301C8.86437 9.87801 9.00348 9.82051 9.16671 9.82051C9.32993 9.82051 9.46904 9.87801 9.58404 9.99301C9.69893 10.1079 9.75637 10.247 9.75637 10.4103C9.75637 10.5736 9.69893 10.7126 9.58404 10.8275C9.46904 10.9425 9.32993 11 9.16671 11Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const GalleryIcon = () => {\r\n return (\r\n <svg\r\n width=\"15\"\r\n height=\"10\"\r\n viewBox=\"0 0 15 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1.87179 9.33329C1.54035 9.33329 1.25663 9.21529 1.02063 8.97929C0.784626 8.74329 0.666626 8.45957 0.666626 8.12813V1.87179C0.666626 1.54035 0.784626 1.25663 1.02063 1.02063C1.25663 0.784626 1.54035 0.666626 1.87179 0.666626H8.12813C8.45957 0.666626 8.74329 0.784626 8.97929 1.02063C9.21529 1.25663 9.33329 1.54035 9.33329 1.87179V8.12813C9.33329 8.45957 9.21529 8.74329 8.97929 8.97929C8.74329 9.21529 8.45957 9.33329 8.12813 9.33329H1.87179ZM11.2723 4.33329C11.0984 4.33329 10.954 4.27579 10.8391 4.16079C10.7241 4.0459 10.6666 3.90151 10.6666 3.72763V1.27246C10.6666 1.09846 10.7241 0.954014 10.8391 0.839126C10.954 0.724126 11.0984 0.666626 11.2723 0.666626H13.7275C13.9015 0.666626 14.0459 0.724126 14.1608 0.839126C14.2758 0.954014 14.3333 1.09846 14.3333 1.27246V3.72763C14.3333 3.90151 14.2758 4.0459 14.1608 4.16079C14.0459 4.27579 13.9015 4.33329 13.7275 4.33329H11.2723ZM11.6666 3.33329H13.3333V1.66663H11.6666V3.33329ZM1.87179 8.33329H8.12813C8.18802 8.33329 8.23718 8.31407 8.27563 8.27563C8.31407 8.23718 8.33329 8.18802 8.33329 8.12813V1.87179C8.33329 1.8119 8.31407 1.76274 8.27563 1.72429C8.23718 1.68585 8.18802 1.66663 8.12813 1.66663H1.87179C1.8119 1.66663 1.76274 1.68585 1.72429 1.72429C1.68585 1.76274 1.66663 1.8119 1.66663 1.87179V8.12813C1.66663 8.18802 1.68585 8.23718 1.72429 8.27563C1.76274 8.31407 1.8119 8.33329 1.87179 8.33329ZM2.99996 6.96796H6.99996C7.11829 6.96796 7.20707 6.91324 7.26629 6.80379C7.32552 6.69435 7.31707 6.58835 7.24096 6.48579L6.15763 5.03579C6.09529 4.95546 6.01496 4.91529 5.91663 4.91529C5.81829 4.91529 5.73796 4.95546 5.67563 5.03579L4.66663 6.38463L3.99096 5.48579C3.92863 5.40546 3.84829 5.36529 3.74996 5.36529C3.65163 5.36529 3.57129 5.40546 3.50896 5.48579L2.75896 6.48579C2.68285 6.58835 2.6744 6.69435 2.73363 6.80379C2.79285 6.91324 2.88163 6.96796 2.99996 6.96796ZM11.2723 9.33329C11.0984 9.33329 10.954 9.27579 10.8391 9.16079C10.7241 9.0459 10.6666 8.90146 10.6666 8.72746V6.27229C10.6666 6.0984 10.7241 5.95402 10.8391 5.83913C10.954 5.72413 11.0984 5.66663 11.2723 5.66663H13.7275C13.9015 5.66663 14.0459 5.72413 14.1608 5.83913C14.2758 5.95402 14.3333 6.0984 14.3333 6.27229V8.72746C14.3333 8.90146 14.2758 9.0459 14.1608 9.16079C14.0459 9.27579 13.9015 9.33329 13.7275 9.33329H11.2723ZM11.6666 8.33329H13.3333V6.66663H11.6666V8.33329Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChartsIcon = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M7.14485 1.42317C7.14485 1.22028 7.22413 1.058 7.38268 0.936332C7.54124 0.814666 7.71879 0.777333 7.91535 0.824333C9.12135 1.07389 10.16 1.64056 11.0314 2.52433C11.9028 3.40811 12.4633 4.46328 12.7128 5.68983C12.753 5.86583 12.7148 6.02133 12.5985 6.15633C12.4822 6.29144 12.3228 6.359 12.1205 6.359H8.42435C8.38424 6.359 8.34907 6.34894 8.31885 6.32883C8.28874 6.30872 8.26363 6.27861 8.24352 6.2385C8.14352 6.01794 8.00863 5.82105 7.83885 5.64783C7.66896 5.47461 7.47779 5.34072 7.26535 5.24617C7.22524 5.22628 7.19513 5.20389 7.17502 5.179C7.1549 5.15411 7.14485 5.12178 7.14485 5.082V1.42317ZM8.14485 1.95133V4.60267C8.29274 4.70689 8.43079 4.82206 8.55902 4.94817C8.68724 5.07417 8.80135 5.21111 8.90135 5.359H11.5653C11.3158 4.54278 10.8874 3.831 10.2802 3.22367C9.67285 2.61644 8.96107 2.19233 8.14485 1.95133ZM5.10518 13.1692C3.6804 12.8462 2.5039 12.113 1.57568 10.9697C0.647461 9.82644 0.18335 8.50322 0.18335 7C0.18335 5.49367 0.647461 4.17028 1.57568 3.02983C2.5039 1.8895 3.6804 1.1565 5.10518 0.830832C5.30607 0.783832 5.48685 0.8265 5.64752 0.958833C5.80818 1.09117 5.88852 1.25917 5.88852 1.46283V5.108C5.88852 5.11867 5.85729 5.16128 5.79485 5.23583C5.43852 5.38294 5.15352 5.61672 4.93985 5.93717C4.72607 6.25772 4.61918 6.61244 4.61918 7.00133C4.61918 7.39022 4.72607 7.74 4.93985 8.05067C5.15352 8.36133 5.43852 8.58805 5.79485 8.73083C5.81285 8.73761 5.84407 8.77989 5.88852 8.85767V12.5577C5.88852 12.7643 5.80818 12.9297 5.64752 13.0537C5.48685 13.1777 5.30607 13.2162 5.10518 13.1692ZM4.88852 1.95133C3.78341 2.28033 2.88957 2.91194 2.20702 3.84617C1.52457 4.78039 1.18335 5.83167 1.18335 7C1.18335 8.16833 1.52457 9.21961 2.20702 10.1538C2.88957 11.0881 3.78341 11.7265 4.88852 12.0692V9.37183C4.50052 9.08805 4.19196 8.74122 3.96285 8.33133C3.73385 7.92156 3.61935 7.47672 3.61935 6.99683C3.61935 6.51694 3.73279 6.071 3.95968 5.659C4.18657 5.247 4.49618 4.89911 4.88852 4.61533V1.95133ZM7.89618 13.1757C7.69963 13.2183 7.52524 13.1806 7.37302 13.0625C7.2209 12.9443 7.14485 12.7867 7.14485 12.5897V8.90133C7.14485 8.86111 7.1549 8.82594 7.17502 8.79583C7.19513 8.76572 7.22524 8.74061 7.26535 8.7205C7.48335 8.62472 7.67707 8.49194 7.84652 8.32217C8.01596 8.15228 8.14829 7.96111 8.24352 7.74867C8.2504 7.735 8.30713 7.69483 8.41368 7.62817H12.1205C12.3022 7.62817 12.4536 7.70405 12.5747 7.85583C12.6958 8.0075 12.7363 8.17822 12.6962 8.368C12.4355 9.59444 11.8667 10.6417 10.9897 11.5097C10.1128 12.3776 9.08163 12.9329 7.89618 13.1757ZM8.90135 8.62817C8.79957 8.77172 8.68502 8.90656 8.55768 9.03267C8.43035 9.15878 8.29274 9.27183 8.14485 9.37183V12.0487C8.9654 11.8034 9.67824 11.3772 10.2833 10.7698C10.8885 10.1626 11.3158 9.44872 11.5653 8.62817H8.90135Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const ViewMoreIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12719\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12719)\">\r\n <path\r\n d=\"M4.99998 11.6666C4.54165 11.6666 4.14929 11.5035 3.8229 11.1771C3.49651 10.8507 3.33331 10.4583 3.33331 9.99998C3.33331 9.54165 3.49651 9.14929 3.8229 8.8229C4.14929 8.49651 4.54165 8.33331 4.99998 8.33331C5.45831 8.33331 5.85067 8.49651 6.17706 8.8229C6.50345 9.14929 6.66665 9.54165 6.66665 9.99998C6.66665 10.4583 6.50345 10.8507 6.17706 11.1771C5.85067 11.5035 5.45831 11.6666 4.99998 11.6666ZM9.99998 11.6666C9.54165 11.6666 9.14929 11.5035 8.8229 11.1771C8.49651 10.8507 8.33331 10.4583 8.33331 9.99998C8.33331 9.54165 8.49651 9.14929 8.8229 8.8229C9.14929 8.49651 9.54165 8.33331 9.99998 8.33331C10.4583 8.33331 10.8507 8.49651 11.1771 8.8229C11.5035 9.14929 11.6666 9.54165 11.6666 9.99998C11.6666 10.4583 11.5035 10.8507 11.1771 11.1771C10.8507 11.5035 10.4583 11.6666 9.99998 11.6666ZM15 11.6666C14.5416 11.6666 14.1493 11.5035 13.8229 11.1771C13.4965 10.8507 13.3333 10.4583 13.3333 9.99998C13.3333 9.54165 13.4965 9.14929 13.8229 8.8229C14.1493 8.49651 14.5416 8.33331 15 8.33331C15.4583 8.33331 15.8507 8.49651 16.1771 8.8229C16.5035 9.14929 16.6666 9.54165 16.6666 9.99998C16.6666 10.4583 16.5035 10.8507 16.1771 11.1771C15.8507 11.5035 15.4583 11.6666 15 11.6666Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const CloseIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 14 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M11.0833 3.73919L10.2608 2.91669L6.99996 6.17752L3.73913 2.91669L2.91663 3.73919L6.17746 7.00002L2.91663 10.2609L3.73913 11.0834L6.99996 7.82252L10.2608 11.0834L11.0833 10.2609L7.82246 7.00002L11.0833 3.73919Z\"\r\n fill=\"#0C2033\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SearchIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12583\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12583)\">\r\n <path\r\n d=\"M7.93274 13.0127C6.50969 13.0127 5.30455 12.5192 4.31733 11.5321C3.33024 10.5449 2.8367 9.33971 2.8367 7.91666C2.8367 6.4936 3.33024 5.28847 4.31733 4.30124C5.30455 3.31416 6.50969 2.82062 7.93274 2.82062C9.3558 2.82062 10.5609 3.31416 11.5482 4.30124C12.5352 5.28847 13.0288 6.4936 13.0288 7.91666C13.0288 8.5118 12.9289 9.0802 12.7292 9.62187C12.5293 10.1635 12.2627 10.6346 11.9294 11.0352L16.7244 15.8302C16.8398 15.9455 16.8989 16.0905 16.9015 16.2652C16.9041 16.4399 16.8451 16.5876 16.7244 16.7083C16.6037 16.829 16.4573 16.8894 16.2852 16.8894C16.1133 16.8894 15.967 16.829 15.8463 16.7083L11.0513 11.9133C10.6346 12.2574 10.1554 12.5266 9.61378 12.721C9.07212 12.9155 8.51177 13.0127 7.93274 13.0127ZM7.93274 11.7629C9.00649 11.7629 9.91594 11.3903 10.6611 10.645C11.4064 9.89985 11.779 8.99041 11.779 7.91666C11.779 6.84291 11.4064 5.93346 10.6611 5.18833C9.91594 4.44305 9.00649 4.07041 7.93274 4.07041C6.85899 4.07041 5.94955 4.44305 5.20441 5.18833C4.45913 5.93346 4.08649 6.84291 4.08649 7.91666C4.08649 8.99041 4.45913 9.89985 5.20441 10.645C5.94955 11.3903 6.85899 11.7629 7.93274 11.7629Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SortingIcon = () => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12710\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12710)\">\r\n <path\r\n d=\"M7.63605 10.5369C7.45883 10.5369 7.31036 10.477 7.19064 10.3571C7.07105 10.2374 7.01126 10.089 7.01126 9.9119V4.4696L5.08022 6.40065C4.96744 6.51606 4.82654 6.57377 4.65751 6.57377C4.48848 6.57377 4.33932 6.51398 4.21001 6.3944C4.0807 6.26398 4.01605 6.11488 4.01605 5.94711C4.01605 5.77947 4.0807 5.63099 4.21001 5.50169L7.10105 2.61065C7.17897 2.53259 7.26154 2.47759 7.34876 2.44565C7.43612 2.41356 7.52966 2.39752 7.62939 2.39752C7.72911 2.39752 7.82383 2.41363 7.91355 2.44586C8.00327 2.47822 8.08661 2.53315 8.16355 2.61065L11.0754 5.52252C11.1993 5.64641 11.2604 5.79009 11.2588 5.95356C11.2572 6.11704 11.1918 6.26398 11.0625 6.3944C10.9332 6.51398 10.7868 6.57592 10.6233 6.58023C10.4599 6.5844 10.3136 6.5219 10.1844 6.39273L8.26126 4.4696V9.91981C8.26126 10.0947 8.20133 10.2412 8.08147 10.3594C7.96161 10.4777 7.81314 10.5369 7.63605 10.5369ZM12.3706 17.5946C12.2709 17.5946 12.1762 17.5784 12.0865 17.5461C11.9967 17.5138 11.9134 17.459 11.8365 17.3815L8.92459 14.4696C8.8007 14.3456 8.73959 14.2019 8.74126 14.0386C8.74279 13.8751 8.8082 13.7281 8.93751 13.5977C9.06682 13.4781 9.2132 13.4162 9.37668 13.4119C9.54015 13.4076 9.68647 13.4701 9.81564 13.5994L11.7388 15.5225V10.0721C11.7388 9.89738 11.7987 9.75085 11.9186 9.63252C12.0384 9.51433 12.1869 9.45523 12.364 9.45523C12.5412 9.45523 12.6897 9.51509 12.8094 9.63481C12.929 9.75467 12.9888 9.90315 12.9888 10.0802V15.5225L14.9198 13.5913C15.0326 13.476 15.1735 13.4184 15.3425 13.4184C15.5115 13.4184 15.6607 13.4781 15.79 13.5977C15.9193 13.7281 15.984 13.8772 15.984 14.0448C15.984 14.2126 15.9193 14.3611 15.79 14.4904L12.899 17.3815C12.8211 17.4594 12.7385 17.5144 12.6513 17.5465C12.5639 17.5786 12.4704 17.5946 12.3706 17.5946Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const FilterationIcon = ({ color = \"#1C1B1F\", ...props }) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_811_12698\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"20\"\r\n height=\"20\"\r\n >\r\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_811_12698)\">\r\n <path\r\n d=\"M8.33333 15V13.3333H11.6667V15H8.33333ZM5 10.8333V9.16667H15V10.8333H5ZM2.5 6.66667V5H17.5V6.66667H2.5Z\"\r\n fill={color}\r\n {...props}\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const HideIcon = () => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_957_24305\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_957_24305)\">\r\n <path\r\n d=\"M9.91805 5.74863C10.1889 6.01963 10.3983 6.34891 10.5462 6.73647C10.6941 7.12413 10.75 7.51325 10.714 7.9038C10.714 8.03202 10.6679 8.14058 10.5757 8.22947C10.4834 8.31836 10.3731 8.3628 10.2449 8.3628C10.1167 8.3628 10.0081 8.31836 9.91922 8.22947C9.83033 8.14058 9.78588 8.03202 9.78588 7.9038C9.82866 7.61069 9.80455 7.33291 9.71355 7.07047C9.62255 6.80813 9.4826 6.58252 9.29372 6.39363C9.10483 6.20475 8.87705 6.06136 8.61038 5.96347C8.34372 5.86558 8.06249 5.84013 7.76672 5.88713C7.63849 5.89147 7.52783 5.84852 7.43472 5.7583C7.34149 5.66819 7.29277 5.55902 7.28855 5.4308C7.28422 5.30258 7.32544 5.19186 7.41222 5.09863C7.49899 5.00552 7.60649 4.95686 7.73472 4.95263C8.12272 4.90819 8.51266 4.9588 8.90455 5.10447C9.29644 5.25025 9.63427 5.46497 9.91805 5.74863ZM8.00005 3.99997C7.76327 3.99997 7.53099 4.01152 7.30322 4.03463C7.07544 4.05763 6.84872 4.09563 6.62305 4.14863C6.48116 4.17774 6.35338 4.15747 6.23972 4.0878C6.12605 4.01813 6.04788 3.91791 6.00522 3.78713C5.96244 3.65213 5.97655 3.52375 6.04755 3.40197C6.11844 3.28019 6.22138 3.20474 6.35638 3.17563C6.62483 3.11152 6.89599 3.06625 7.16988 3.0398C7.44388 3.01325 7.7206 2.99997 8.00005 2.99997C9.43249 2.99997 10.7483 3.37219 11.9475 4.11663C13.1467 4.86108 14.0688 5.86836 14.714 7.13847C14.7585 7.22302 14.7908 7.30825 14.8109 7.39413C14.831 7.48002 14.841 7.57086 14.841 7.66663C14.841 7.76241 14.8327 7.85325 14.816 7.93913C14.7994 8.02502 14.7688 8.11024 14.7244 8.1948C14.5202 8.62213 14.2719 9.02063 13.9796 9.3903C13.6872 9.75997 13.3654 10.0995 13.0141 10.409C12.9107 10.5013 12.7926 10.5395 12.6597 10.5236C12.5267 10.5079 12.4175 10.4414 12.332 10.3243C12.2466 10.2072 12.2112 10.0816 12.2257 9.94747C12.2403 9.81325 12.2992 9.69997 12.4026 9.60763C12.7034 9.33497 12.9778 9.03691 13.2257 8.71347C13.4736 8.38991 13.6873 8.04097 13.8667 7.66663C13.3112 6.54441 12.5084 5.65275 11.4584 4.99163C10.4084 4.33052 9.2556 3.99997 8.00005 3.99997ZM8.00005 12.3333C6.5966 12.3333 5.31027 11.9583 4.14105 11.2083C2.97183 10.4583 2.04238 9.47047 1.35272 8.2448C1.29716 8.16025 1.25655 8.06836 1.23088 7.96913C1.20522 7.87002 1.19238 7.76919 1.19238 7.66663C1.19238 7.56408 1.20349 7.46491 1.22572 7.36913C1.24794 7.27347 1.28683 7.17991 1.34238 7.08847C1.59027 6.63547 1.87105 6.20402 2.18472 5.79413C2.49838 5.38436 2.85905 5.01708 3.26672 4.6923L1.76155 3.1768C1.66933 3.07769 1.62383 2.95997 1.62505 2.82363C1.62638 2.6873 1.67533 2.57086 1.77188 2.4743C1.86844 2.37775 1.98555 2.32947 2.12322 2.32947C2.26077 2.32947 2.37783 2.37775 2.47438 2.4743L13.5257 13.5256C13.618 13.618 13.667 13.7322 13.6725 13.8685C13.6781 14.0048 13.6292 14.1247 13.5257 14.2281C13.4292 14.3247 13.312 14.373 13.1744 14.373C13.0368 14.373 12.9198 14.3247 12.8232 14.2281L10.477 11.9025C10.0838 12.0546 9.67972 12.1644 9.26472 12.232C8.84983 12.2995 8.42827 12.3333 8.00005 12.3333ZM3.96938 5.3948C3.57872 5.69658 3.22761 6.0378 2.91605 6.41847C2.60449 6.79924 2.3436 7.2153 2.13338 7.66663C2.68894 8.78886 3.49172 9.68052 4.54172 10.3416C5.59172 11.0027 6.74449 11.3333 8.00005 11.3333C8.28638 11.3333 8.56822 11.3141 8.84555 11.2756C9.12288 11.2372 9.39833 11.1778 9.67188 11.0975L8.82822 10.2333C8.69322 10.2923 8.55838 10.3322 8.42372 10.3531C8.28916 10.3741 8.14794 10.3846 8.00005 10.3846C7.2436 10.3846 6.60149 10.1207 6.07372 9.59297C5.54594 9.06519 5.28205 8.42308 5.28205 7.66663C5.28205 7.51874 5.2936 7.37752 5.31672 7.24297C5.33983 7.1083 5.37872 6.97347 5.43338 6.83847L3.96938 5.3948Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const PinIcon = () => {\r\n return (\r\n <svg\r\n width=\"8\"\r\n height=\"13\"\r\n viewBox=\"0 0 8 13\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6.33337 1.33337V6.14104L7.37686 7.18471C7.42642 7.23426 7.46364 7.29004 7.48853 7.35204C7.51331 7.41393 7.5257 7.47793 7.5257 7.54404V7.82904C7.5257 7.96949 7.47714 8.08865 7.38003 8.18654C7.28303 8.28443 7.16275 8.33337 7.0192 8.33337H4.50003V11.9257C4.50003 12.0674 4.45209 12.1861 4.3562 12.2819C4.26031 12.3777 4.14153 12.4255 3.99987 12.4255C3.85809 12.4255 3.73937 12.3777 3.6437 12.2819C3.54792 12.1861 3.50003 12.0674 3.50003 11.9257V8.33337H0.980865C0.83731 8.33337 0.717032 8.28443 0.620032 8.18654C0.522921 8.08865 0.474365 7.96949 0.474365 7.82904V7.54404C0.474365 7.47793 0.486754 7.41393 0.511532 7.35204C0.536421 7.29004 0.573643 7.23426 0.623199 7.18471L1.6667 6.14104V1.33337H1.50003C1.35837 1.33337 1.23964 1.28543 1.14387 1.18954C1.04798 1.09365 1.00003 0.974874 1.00003 0.833207C1.00003 0.691429 1.04798 0.572707 1.14387 0.477041C1.23964 0.381263 1.35837 0.333374 1.50003 0.333374H6.50003C6.6417 0.333374 6.76042 0.381319 6.8562 0.477207C6.95209 0.573096 7.00003 0.691874 7.00003 0.833541C7.00003 0.975319 6.95209 1.09404 6.8562 1.18971C6.76042 1.28549 6.6417 1.33337 6.50003 1.33337H6.33337ZM1.90003 7.33337H6.10003L5.33336 6.56671V1.33337H2.6667V6.56671L1.90003 7.33337Z\"\r\n fill=\"#1C1B1F\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const VisibilityIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"10\"\r\n viewBox=\"0 0 14 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M7.00147 7.38467C7.75692 7.38467 8.39853 7.12028 8.92631 6.5915C9.45408 6.06272 9.71797 5.42061 9.71797 4.66517C9.71797 3.90972 9.45358 3.26811 8.9248 2.74033C8.39603 2.21256 7.75392 1.94867 6.99847 1.94867C6.24303 1.94867 5.60142 2.21306 5.07364 2.74183C4.54586 3.27061 4.28197 3.91272 4.28197 4.66817C4.28197 5.42361 4.54636 6.06522 5.07514 6.593C5.60392 7.12078 6.24603 7.38467 7.00147 7.38467ZM6.99997 6.46667C6.49997 6.46667 6.07497 6.29167 5.72497 5.94167C5.37497 5.59167 5.19997 5.16667 5.19997 4.66667C5.19997 4.16667 5.37497 3.74167 5.72497 3.39167C6.07497 3.04167 6.49997 2.86667 6.99997 2.86667C7.49997 2.86667 7.92497 3.04167 8.27497 3.39167C8.62497 3.74167 8.79997 4.16667 8.79997 4.66667C8.79997 5.16667 8.62497 5.59167 8.27497 5.94167C7.92497 6.29167 7.49997 6.46667 6.99997 6.46667ZM6.99997 9.33333C5.59653 9.33333 4.31297 8.95894 3.1493 8.21017C1.98564 7.4615 1.0568 6.4765 0.362803 5.25517C0.307248 5.15939 0.266637 5.06289 0.24097 4.96567C0.215414 4.86844 0.202637 4.76867 0.202637 4.66633C0.202637 4.564 0.215414 4.46433 0.24097 4.36733C0.266637 4.27033 0.307248 4.17394 0.362803 4.07817C1.0568 2.85683 1.98564 1.87183 3.1493 1.12317C4.31297 0.374389 5.59653 0 6.99997 0C8.40342 0 9.68697 0.374389 10.8506 1.12317C12.0143 1.87183 12.9431 2.85683 13.6371 4.07817C13.6927 4.17394 13.7333 4.27044 13.759 4.36767C13.7845 4.46489 13.7973 4.56467 13.7973 4.667C13.7973 4.76933 13.7845 4.869 13.759 4.966C13.7333 5.063 13.6927 5.15939 13.6371 5.25517C12.9431 6.4765 12.0143 7.4615 10.8506 8.21017C9.68697 8.95894 8.40342 9.33333 6.99997 9.33333ZM6.99997 8.33333C8.25553 8.33333 9.4083 8.00278 10.4583 7.34167C11.5083 6.68055 12.3111 5.78889 12.8666 4.66667C12.3111 3.54444 11.5083 2.65278 10.4583 1.99167C9.4083 1.33056 8.25553 1 6.99997 1C5.74442 1 4.59164 1.33056 3.54164 1.99167C2.49164 2.65278 1.68886 3.54444 1.1333 4.66667C1.68886 5.78889 2.49164 6.68055 3.54164 7.34167C4.59164 8.00278 5.74442 8.33333 6.99997 8.33333Z\"\r\n fill=\"#505050\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const VisibilityOffIcon = () => {\r\n return (\r\n <svg\r\n width=\"14\"\r\n height=\"13\"\r\n viewBox=\"0 0 14 13\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M8.91793 3.74863C9.18882 4.01963 9.39821 4.34891 9.54609 4.73647C9.69398 5.12413 9.74993 5.51325 9.71393 5.9038C9.71393 6.03202 9.66782 6.14058 9.57559 6.22947C9.48326 6.31836 9.37298 6.3628 9.24476 6.3628C9.11654 6.3628 9.00798 6.31836 8.9191 6.22947C8.83021 6.14058 8.78576 6.03202 8.78576 5.9038C8.82854 5.61069 8.80443 5.33291 8.71343 5.07047C8.62243 4.80813 8.48248 4.58252 8.29359 4.39363C8.1047 4.20475 7.87693 4.06136 7.61026 3.96347C7.34359 3.86558 7.06237 3.84013 6.76659 3.88713C6.63837 3.89147 6.52771 3.84852 6.43459 3.7583C6.34137 3.66819 6.29265 3.55902 6.28843 3.4308C6.28409 3.30258 6.32532 3.19186 6.41209 3.09863C6.49887 3.00552 6.60637 2.95686 6.73459 2.95263C7.12259 2.90819 7.51254 2.9588 7.90443 3.10447C8.29632 3.25025 8.63415 3.46497 8.91793 3.74863ZM6.99993 1.99997C6.76315 1.99997 6.53087 2.01152 6.30309 2.03463C6.07532 2.05763 5.84859 2.09563 5.62293 2.14863C5.48104 2.17774 5.35326 2.15747 5.23959 2.0878C5.12593 2.01813 5.04776 1.91791 5.00509 1.78713C4.96232 1.65213 4.97643 1.52375 5.04743 1.40197C5.11832 1.28019 5.22126 1.20474 5.35626 1.17563C5.62471 1.11152 5.89587 1.06625 6.16976 1.0398C6.44376 1.01325 6.72048 0.999967 6.99993 0.999967C8.43237 0.999967 9.74821 1.37219 10.9474 2.11663C12.1465 2.86108 13.0687 3.86836 13.7139 5.13847C13.7584 5.22302 13.7907 5.30825 13.8108 5.39413C13.8309 5.48002 13.8409 5.57086 13.8409 5.66663C13.8409 5.76241 13.8326 5.85325 13.8159 5.93913C13.7993 6.02502 13.7687 6.11024 13.7243 6.1948C13.52 6.62213 13.2718 7.02063 12.9794 7.3903C12.6871 7.75997 12.3653 8.09952 12.0139 8.40897C11.9106 8.5013 11.7925 8.53952 11.6596 8.52363C11.5266 8.50786 11.4174 8.44141 11.3319 8.3243C11.2465 8.20719 11.211 8.08158 11.2256 7.94747C11.2402 7.81325 11.2991 7.69997 11.4024 7.60763C11.7033 7.33497 11.9777 7.03691 12.2256 6.71347C12.4735 6.38991 12.6872 6.04097 12.8666 5.66663C12.311 4.54441 11.5083 3.65275 10.4583 2.99163C9.40826 2.33052 8.25548 1.99997 6.99993 1.99997ZM6.99993 10.3333C5.59648 10.3333 4.31015 9.9583 3.14093 9.2083C1.97171 8.4583 1.04226 7.47047 0.352594 6.2448C0.297039 6.16025 0.256427 6.06836 0.230761 5.96913C0.205094 5.87002 0.192261 5.76919 0.192261 5.66663C0.192261 5.56408 0.203372 5.46491 0.225594 5.36913C0.247816 5.27347 0.286705 5.17991 0.342261 5.08847C0.59015 4.63547 0.870927 4.20402 1.18459 3.79413C1.49826 3.38436 1.85893 3.01708 2.26659 2.6923L0.761427 1.1768C0.669205 1.07769 0.623705 0.959967 0.624927 0.823634C0.626261 0.6873 0.675205 0.570857 0.771761 0.474301C0.868316 0.377746 0.985427 0.329468 1.12309 0.329468C1.26065 0.329468 1.37771 0.377746 1.47426 0.474301L12.5256 11.5256C12.6179 11.618 12.6669 11.7322 12.6724 11.8685C12.678 12.0048 12.629 12.1247 12.5256 12.2281C12.429 12.3247 12.3119 12.373 12.1743 12.373C12.0367 12.373 11.9197 12.3247 11.8231 12.2281L9.47693 9.90247C9.08371 10.0546 8.67959 10.1644 8.2646 10.232C7.84971 10.2995 7.42815 10.3333 6.99993 10.3333ZM2.96926 3.3948C2.57859 3.69658 2.22748 4.0378 1.91593 4.41847C1.60437 4.79924 1.34348 5.2153 1.13326 5.66663C1.68882 6.78886 2.49159 7.68052 3.54159 8.34163C4.59159 9.00274 5.74437 9.3333 6.99993 9.3333C7.28626 9.3333 7.56809 9.31408 7.84543 9.27563C8.12276 9.23719 8.3982 9.1778 8.67176 9.09747L7.82809 8.2333C7.69309 8.2923 7.55826 8.33224 7.42359 8.35313C7.28904 8.37413 7.14782 8.38463 6.99993 8.38463C6.24348 8.38463 5.60137 8.12074 5.07359 7.59297C4.54582 7.06519 4.28193 6.42308 4.28193 5.66663C4.28193 5.51874 4.29348 5.37752 4.31659 5.24297C4.33971 5.1083 4.37859 4.97347 4.43326 4.83847L2.96926 3.3948Z\"\r\n fill=\"#C5C5C5\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const DragandDrogIcon = () => {\r\n return (\r\n <svg\r\n width=\"8\"\r\n height=\"12\"\r\n viewBox=\"0 0 8 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M2.00005 11.0768C1.70394 11.0768 1.45044 10.9714 1.23955 10.7605C1.02866 10.5496 0.923218 10.2961 0.923218 9.99999C0.923218 9.70388 1.02866 9.45038 1.23955 9.23949C1.45044 9.0286 1.70394 8.92316 2.00005 8.92316C2.29616 8.92316 2.54966 9.0286 2.76055 9.23949C2.97144 9.45038 3.07688 9.70388 3.07688 9.99999C3.07688 10.2961 2.97144 10.5496 2.76055 10.7605C2.54966 10.9714 2.29616 11.0768 2.00005 11.0768ZM6.00005 11.0768C5.70394 11.0768 5.45044 10.9714 5.23955 10.7605C5.02866 10.5496 4.92322 10.2961 4.92322 9.99999C4.92322 9.70388 5.02866 9.45038 5.23955 9.23949C5.45044 9.0286 5.70394 8.92316 6.00005 8.92316C6.29616 8.92316 6.54966 9.0286 6.76055 9.23949C6.97144 9.45038 7.07688 9.70388 7.07688 9.99999C7.07688 10.2961 6.97144 10.5496 6.76055 10.7605C6.54966 10.9714 6.29616 11.0768 6.00005 11.0768ZM2.00005 7.07682C1.70394 7.07682 1.45044 6.97138 1.23955 6.76049C1.02866 6.5496 0.923218 6.2961 0.923218 5.99999C0.923218 5.70388 1.02866 5.45038 1.23955 5.23949C1.45044 5.0286 1.70394 4.92316 2.00005 4.92316C2.29616 4.92316 2.54966 5.0286 2.76055 5.23949C2.97144 5.45038 3.07688 5.70388 3.07688 5.99999C3.07688 6.2961 2.97144 6.5496 2.76055 6.76049C2.54966 6.97138 2.29616 7.07682 2.00005 7.07682ZM6.00005 7.07682C5.70394 7.07682 5.45044 6.97138 5.23955 6.76049C5.02866 6.5496 4.92322 6.2961 4.92322 5.99999C4.92322 5.70388 5.02866 5.45038 5.23955 5.23949C5.45044 5.0286 5.70394 4.92316 6.00005 4.92316C6.29616 4.92316 6.54966 5.0286 6.76055 5.23949C6.97144 5.45038 7.07688 5.70388 7.07688 5.99999C7.07688 6.2961 6.97144 6.5496 6.76055 6.76049C6.54966 6.97138 6.29616 7.07682 6.00005 7.07682ZM2.00005 3.07682C1.70394 3.07682 1.45044 2.97138 1.23955 2.76049C1.02866 2.5496 0.923218 2.2961 0.923218 1.99999C0.923218 1.70388 1.02866 1.45038 1.23955 1.23949C1.45044 1.0286 1.70394 0.923157 2.00005 0.923157C2.29616 0.923157 2.54966 1.0286 2.76055 1.23949C2.97144 1.45038 3.07688 1.70388 3.07688 1.99999C3.07688 2.2961 2.97144 2.5496 2.76055 2.76049C2.54966 2.97138 2.29616 3.07682 2.00005 3.07682ZM6.00005 3.07682C5.70394 3.07682 5.45044 2.97138 5.23955 2.76049C5.02866 2.5496 4.92322 2.2961 4.92322 1.99999C4.92322 1.70388 5.02866 1.45038 5.23955 1.23949C5.45044 1.0286 5.70394 0.923157 6.00005 0.923157C6.29616 0.923157 6.54966 1.0286 6.76055 1.23949C6.97144 1.45038 7.07688 1.70388 7.07688 1.99999C7.07688 2.2961 6.97144 2.5496 6.76055 2.76049C6.54966 2.97138 6.29616 3.07682 6.00005 3.07682Z\"\r\n fill=\"#A6A6A6\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\n// export const SettingIcon = () => {\r\n// return (\r\n// <svg\r\n// width=\"18\"\r\n// height=\"17\"\r\n// viewBox=\"0 0 18 17\"\r\n// fill=\"none\"\r\n// xmlns=\"http://www.w3.org/2000/svg\"\r\n// >\r\n// <path\r\n// d=\"M15.1935 9.31669C15.2269 9.05002 15.2519 8.78335 15.2519 8.50002C15.2519 8.21669 15.2269 7.95002 15.1935 7.68335L16.9519 6.30835C17.1102 6.18335 17.1518 5.95835 17.0518 5.77502L15.3852 2.89169C15.3102 2.75835 15.1685 2.68335 15.0185 2.68335C14.9685 2.68335 14.9185 2.69169 14.8768 2.70835L12.8018 3.54169C12.3685 3.20835 11.9018 2.93335 11.3935 2.72502L11.0768 0.516687C11.0518 0.316687 10.8769 0.166687 10.6685 0.166687H7.33518C7.12685 0.166687 6.95185 0.316687 6.92685 0.516687L6.61018 2.72502C6.10185 2.93335 5.63518 3.21669 5.20185 3.54169L3.12685 2.70835C3.07685 2.69169 3.02685 2.68335 2.97685 2.68335C2.83518 2.68335 2.69352 2.75835 2.61852 2.89169L0.95185 5.77502C0.843516 5.95835 0.893517 6.18335 1.05185 6.30835L2.81018 7.68335C2.77685 7.95002 2.75185 8.22502 2.75185 8.50002C2.75185 8.77502 2.77685 9.05002 2.81018 9.31669L1.05185 10.6917C0.893517 10.8167 0.85185 11.0417 0.95185 11.225L2.61852 14.1084C2.69352 14.2417 2.83518 14.3167 2.98518 14.3167C3.03518 14.3167 3.08518 14.3084 3.12685 14.2917L5.20185 13.4584C5.63518 13.7917 6.10185 14.0667 6.61018 14.275L6.92685 16.4834C6.95185 16.6834 7.12685 16.8334 7.33518 16.8334H10.6685C10.8769 16.8334 11.0518 16.6834 11.0768 16.4834L11.3935 14.275C11.9018 14.0667 12.3685 13.7834 12.8018 13.4584L14.8768 14.2917C14.9268 14.3084 14.9768 14.3167 15.0268 14.3167C15.1685 14.3167 15.3102 14.2417 15.3852 14.1084L17.0518 11.225C17.1518 11.0417 17.1102 10.8167 16.9519 10.6917L15.1935 9.31669ZM13.5435 7.89169C13.5769 8.15002 13.5852 8.32502 13.5852 8.50002C13.5852 8.67502 13.5685 8.85835 13.5435 9.10835L13.4268 10.05L14.1685 10.6334L15.0685 11.3334L14.4852 12.3417L13.4268 11.9167L12.5602 11.5667L11.8102 12.1334C11.4518 12.4 11.1102 12.6 10.7685 12.7417L9.88518 13.1L9.75185 14.0417L9.58518 15.1667H8.41852L8.12685 13.1L7.24352 12.7417C6.88518 12.5917 6.55185 12.4 6.21852 12.15L5.46018 11.5667L4.57685 11.925L3.51852 12.35L2.93518 11.3417L3.83518 10.6417L4.57685 10.0584L4.46018 9.11669C4.43518 8.85835 4.41852 8.66669 4.41852 8.50002C4.41852 8.33335 4.43518 8.14169 4.46018 7.89169L4.57685 6.95002L3.83518 6.36669L2.93518 5.66669L3.51852 4.65835L4.57685 5.08335L5.44352 5.43335L6.19352 4.86669C6.55185 4.60002 6.89352 4.40002 7.23518 4.25835L8.11852 3.90002L8.25185 2.95835L8.41852 1.83335H9.57685L9.86852 3.90002L10.7519 4.25835C11.1102 4.40835 11.4435 4.60002 11.7768 4.85002L12.5352 5.43335L13.4185 5.07502L14.4768 4.65002L15.0602 5.65835L14.1685 6.36669L13.4268 6.95002L13.5435 7.89169ZM9.00185 5.16669C7.16018 5.16669 5.66852 6.65835 5.66852 8.50002C5.66852 10.3417 7.16018 11.8334 9.00185 11.8334C10.8435 11.8334 12.3352 10.3417 12.3352 8.50002C12.3352 6.65835 10.8435 5.16669 9.00185 5.16669ZM9.00185 10.1667C8.08518 10.1667 7.33518 9.41669 7.33518 8.50002C7.33518 7.58335 8.08518 6.83335 9.00185 6.83335C9.91852 6.83335 10.6685 7.58335 10.6685 8.50002C10.6685 9.41669 9.91852 10.1667 9.00185 10.1667Z\"\r\n// fill=\"#1E1E1E\"\r\n// />\r\n// </svg>\r\n// );\r\n// };\r\n\r\nexport const DropDownIcon = () => {\r\n return (\r\n <svg\r\n width=\"10\"\r\n height=\"7\"\r\n viewBox=\"0 0 10 7\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M8.825 0.412476L5 4.22914L1.175 0.412476L0 1.58748L5 6.58748L10 1.58748L8.825 0.412476Z\"\r\n fill=\"#1E1E1E\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const AddIcon = ({ ...props }) => {\r\n return (\r\n <svg\r\n width=\"10\"\r\n height=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M4.50002 5.50002H1.16669C1.02502 5.50002 0.906298 5.45208 0.81052 5.35619C0.714632 5.2603 0.666687 5.14152 0.666687 4.99985C0.666687 4.85808 0.714632 4.73935 0.81052 4.64369C0.906298 4.54791 1.02502 4.50002 1.16669 4.50002H4.50002V1.16669C4.50002 1.02502 4.54797 0.906298 4.64385 0.81052C4.73974 0.714632 4.85852 0.666687 5.00019 0.666687C5.14197 0.666687 5.26069 0.714632 5.35635 0.81052C5.45213 0.906298 5.50002 1.02502 5.50002 1.16669V4.50002H8.83335C8.97502 4.50002 9.09374 4.54797 9.18952 4.64385C9.28541 4.73974 9.33335 4.85852 9.33335 5.00019C9.33335 5.14197 9.28541 5.26069 9.18952 5.35635C9.09374 5.45213 8.97502 5.50002 8.83335 5.50002H5.50002V8.83335C5.50002 8.97502 5.45208 9.09374 5.35619 9.18952C5.2603 9.28541 5.14152 9.33335 4.99985 9.33335C4.85808 9.33335 4.73935 9.28541 4.64369 9.18952C4.54791 9.09374 4.50002 8.97502 4.50002 8.83335V5.50002Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ChevronDownIcon = () => {\r\n return (\r\n <svg\r\n width=\"12\"\r\n height=\"6\"\r\n viewBox=\"0 0 12 6\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1 0.5L6 5.5L11 0.5\"\r\n stroke=\"#181D27\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const CheckBox = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.72054 8.43116L4.17187 6.88233C4.07954 6.7901 3.96349 6.74288 3.82371 6.74066C3.68404 6.73855 3.56587 6.78577 3.46921 6.88233C3.37265 6.97899 3.32437 7.0961 3.32437 7.23366C3.32437 7.37121 3.37265 7.48833 3.46921 7.58499L5.29871 9.41449C5.41926 9.53494 5.55987 9.59516 5.72054 9.59516C5.88121 9.59516 6.02182 9.53494 6.14237 9.41449L9.85137 5.70549C9.9436 5.61316 9.99082 5.4971 9.99304 5.35733C9.99515 5.21766 9.94793 5.09949 9.85137 5.00283C9.75471 4.90627 9.6376 4.85799 9.50004 4.85799C9.36249 4.85799 9.24537 4.90627 9.14871 5.00283L5.72054 8.43116ZM6.66787 13.3337C5.79187 13.3337 4.96848 13.1674 4.19771 12.835C3.42693 12.5025 2.75648 12.0514 2.18637 11.4815C1.61626 10.9116 1.16487 10.2414 0.832207 9.47099C0.499652 8.70055 0.333374 7.87738 0.333374 7.00149C0.333374 6.12549 0.499596 5.3021 0.832041 4.53133C1.16449 3.76055 1.61565 3.0901 2.18554 2.51999C2.75543 1.94988 3.4256 1.49849 4.19604 1.16583C4.96649 0.83327 5.78965 0.666992 6.66554 0.666992C7.54154 0.666992 8.36493 0.833214 9.13571 1.16566C9.90649 1.4981 10.5769 1.94927 11.147 2.51916C11.7172 3.08905 12.1685 3.75921 12.5012 4.52966C12.8338 5.3001 13 6.12327 13 6.99916C13 7.87516 12.8338 8.69855 12.5014 9.46933C12.1689 10.2401 11.7178 10.9105 11.1479 11.4807C10.578 12.0508 9.90782 12.5022 9.13737 12.8348C8.36693 13.1674 7.54376 13.3337 6.66787 13.3337Z\"\r\n fill=\"#16B364\"\r\n />\r\n </svg>\r\n );\r\n};\r\nexport const CrossBox = () => {\r\n return (\r\n <svg\r\n width=\"13\"\r\n height=\"14\"\r\n viewBox=\"0 0 13 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6.66659 7.70283L8.71525 9.75166C8.80759 9.84388 8.92364 9.8911 9.06342 9.89333C9.20309 9.89544 9.32125 9.84821 9.41792 9.75166C9.51447 9.65499 9.56275 9.53788 9.56275 9.40033C9.56275 9.26277 9.51447 9.14566 9.41792 9.04899L7.36909 7.00033L9.41792 4.95166C9.51014 4.85933 9.55736 4.74327 9.55959 4.60349C9.5617 4.46383 9.51447 4.34566 9.41792 4.24899C9.32125 4.15244 9.20414 4.10416 9.06659 4.10416C8.92903 4.10416 8.81192 4.15244 8.71525 4.24899L6.66659 6.29783L4.61792 4.24899C4.52559 4.15677 4.40953 4.10955 4.26975 4.10733C4.13009 4.10521 4.01192 4.15244 3.91525 4.24899C3.8187 4.34566 3.77042 4.46277 3.77042 4.60033C3.77042 4.73788 3.8187 4.85499 3.91525 4.95166L5.96409 7.00033L3.91525 9.04899C3.82303 9.14133 3.77581 9.25738 3.77359 9.39716C3.77147 9.53683 3.8187 9.65499 3.91525 9.75166C4.01192 9.84821 4.12903 9.89649 4.26659 9.89649C4.40414 9.89649 4.52125 9.84821 4.61792 9.75166L6.66659 7.70283ZM6.66775 13.3337C5.79175 13.3337 4.96836 13.1674 4.19759 12.835C3.42681 12.5025 2.75636 12.0514 2.18625 11.4815C1.61614 10.9116 1.16475 10.2414 0.832085 9.47099C0.49953 8.70055 0.333252 7.87738 0.333252 7.00149C0.333252 6.12549 0.499474 5.3021 0.831919 4.53133C1.16436 3.76055 1.61553 3.0901 2.18542 2.51999C2.75531 1.94988 3.42547 1.49849 4.19592 1.16583C4.96636 0.83327 5.78953 0.666992 6.66542 0.666992C7.54142 0.666992 8.36481 0.833214 9.13559 1.16566C9.90636 1.4981 10.5768 1.94927 11.1469 2.51916C11.717 3.08905 12.1684 3.75921 12.5011 4.52966C12.8336 5.3001 12.9999 6.12327 12.9999 6.99916C12.9999 7.87516 12.8337 8.69855 12.5013 9.46933C12.1688 10.2401 11.7176 10.9105 11.1478 11.4807C10.5779 12.0508 9.9077 12.5022 9.13725 12.8348C8.36681 13.1674 7.54364 13.3337 6.66775 13.3337Z\"\r\n fill=\"#F63D68\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport const EyeIcon = () => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_6673_82208\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6673_82208)\">\r\n <path\r\n d=\"M8.00147 10.3847C8.75692 10.3847 9.39853 10.1203 9.92631 9.5915C10.4541 9.06272 10.718 8.42061 10.718 7.66517C10.718 6.90972 10.4536 6.26811 9.9248 5.74033C9.39603 5.21256 8.75392 4.94867 7.99847 4.94867C7.24303 4.94867 6.60142 5.21306 6.07364 5.74183C5.54586 6.27061 5.28197 6.91272 5.28197 7.66817C5.28197 8.42361 5.54636 9.06522 6.07514 9.593C6.60392 10.1208 7.24603 10.3847 8.00147 10.3847ZM7.99997 9.46667C7.49997 9.46667 7.07497 9.29167 6.72497 8.94167C6.37497 8.59167 6.19997 8.16667 6.19997 7.66667C6.19997 7.16667 6.37497 6.74167 6.72497 6.39167C7.07497 6.04167 7.49997 5.86667 7.99997 5.86667C8.49997 5.86667 8.92497 6.04167 9.27497 6.39167C9.62497 6.74167 9.79997 7.16667 9.79997 7.66667C9.79997 8.16667 9.62497 8.59167 9.27497 8.94167C8.92497 9.29167 8.49997 9.46667 7.99997 9.46667ZM7.99997 12.3333C6.59653 12.3333 5.31297 11.9589 4.1493 11.2102C2.98564 10.4615 2.0568 9.4765 1.3628 8.25517C1.30725 8.15939 1.26664 8.06289 1.24097 7.96567C1.21541 7.86844 1.20264 7.76867 1.20264 7.66633C1.20264 7.564 1.21541 7.46433 1.24097 7.36733C1.26664 7.27033 1.30725 7.17394 1.3628 7.07817C2.0568 5.85683 2.98564 4.87183 4.1493 4.12317C5.31297 3.37439 6.59653 3 7.99997 3C9.40342 3 10.687 3.37439 11.8506 4.12317C13.0143 4.87183 13.9431 5.85683 14.6371 7.07817C14.6927 7.17394 14.7333 7.27044 14.759 7.36767C14.7845 7.46489 14.7973 7.56467 14.7973 7.667C14.7973 7.76933 14.7845 7.869 14.759 7.966C14.7333 8.063 14.6927 8.15939 14.6371 8.25517C13.9431 9.4765 13.0143 10.4615 11.8506 11.2102C10.687 11.9589 9.40342 12.3333 7.99997 12.3333ZM7.99997 11.3333C9.25553 11.3333 10.4083 11.0028 11.4583 10.3417C12.5083 9.68055 13.3111 8.78889 13.8666 7.66667C13.3111 6.54444 12.5083 5.65278 11.4583 4.99167C10.4083 4.33056 9.25553 4 7.99997 4C6.74442 4 5.59164 4.33056 4.54164 4.99167C3.49164 5.65278 2.68886 6.54444 2.1333 7.66667C2.68886 8.78889 3.49164 9.68055 4.54164 10.3417C5.59164 11.0028 6.74442 11.3333 7.99997 11.3333Z\"\r\n fill=\"#505050\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const ClosedEyeIcon = () => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <mask\r\n id=\"mask0_6673_82183\"\r\n style={{ maskType: \"alpha\" }}\r\n maskUnits=\"userSpaceOnUse\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"16\"\r\n height=\"16\"\r\n >\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6673_82183)\">\r\n <path\r\n d=\"M9.91793 5.74876C10.1888 6.01976 10.3982 6.34903 10.5461 6.73659C10.694 7.12426 10.7499 7.51337 10.7139 7.90392C10.7139 8.03215 10.6678 8.1407 10.5756 8.22959C10.4833 8.31848 10.373 8.36292 10.2448 8.36292C10.1165 8.36292 10.008 8.31848 9.9191 8.22959C9.83021 8.1407 9.78576 8.03215 9.78576 7.90392C9.82854 7.61081 9.80443 7.33303 9.71343 7.07059C9.62243 6.80826 9.48248 6.58264 9.29359 6.39376C9.1047 6.20487 8.87693 6.06148 8.61026 5.96359C8.34359 5.8657 8.06237 5.84026 7.76659 5.88726C7.63837 5.89159 7.52771 5.84864 7.43459 5.75842C7.34137 5.66831 7.29265 5.55914 7.28843 5.43092C7.28409 5.3027 7.32532 5.19198 7.41209 5.09876C7.49887 5.00564 7.60637 4.95698 7.73459 4.95276C8.12259 4.90831 8.51254 4.95892 8.90443 5.10459C9.29632 5.25037 9.63415 5.46509 9.91793 5.74876ZM7.99993 4.00009C7.76315 4.00009 7.53087 4.01165 7.30309 4.03476C7.07532 4.05776 6.84859 4.09576 6.62293 4.14876C6.48104 4.17787 6.35326 4.15759 6.23959 4.08792C6.12593 4.01826 6.04776 3.91803 6.00509 3.78726C5.96232 3.65226 5.97643 3.52387 6.04743 3.40209C6.11832 3.28031 6.22126 3.20487 6.35626 3.17576C6.62471 3.11164 6.89587 3.06637 7.16976 3.03992C7.44376 3.01337 7.72048 3.00009 7.99993 3.00009C9.43237 3.00009 10.7482 3.37231 11.9474 4.11676C13.1465 4.8612 14.0687 5.86848 14.7139 7.13859C14.7584 7.22315 14.7907 7.30837 14.8108 7.39426C14.8309 7.48014 14.8409 7.57098 14.8409 7.66676C14.8409 7.76253 14.8326 7.85337 14.8159 7.93926C14.7993 8.02515 14.7687 8.11037 14.7243 8.19492C14.52 8.62226 14.2718 9.02076 13.9794 9.39042C13.6871 9.76009 13.3653 10.0996 13.0139 10.4091C12.9106 10.5014 12.7925 10.5396 12.6596 10.5238C12.5266 10.508 12.4174 10.4415 12.3319 10.3244C12.2465 10.2073 12.211 10.0817 12.2256 9.94759C12.2402 9.81337 12.2991 9.70009 12.4024 9.60776C12.7033 9.33509 12.9777 9.03703 13.2256 8.71359C13.4735 8.39003 13.6872 8.04109 13.8666 7.66676C13.311 6.54453 12.5083 5.65287 11.4583 4.99176C10.4083 4.33065 9.25548 4.00009 7.99993 4.00009ZM7.99993 12.3334C6.59648 12.3334 5.31015 11.9584 4.14093 11.2084C2.97171 10.4584 2.04226 9.47059 1.35259 8.24492C1.29704 8.16037 1.25643 8.06848 1.23076 7.96926C1.20509 7.87014 1.19226 7.76931 1.19226 7.66676C1.19226 7.5642 1.20337 7.46503 1.22559 7.36926C1.24782 7.27359 1.28671 7.18003 1.34226 7.08859C1.59015 6.63559 1.87093 6.20415 2.18459 5.79426C2.49826 5.38448 2.85893 5.0172 3.26659 4.69242L1.76143 3.17692C1.66921 3.07781 1.62371 2.96009 1.62493 2.82376C1.62626 2.68742 1.67521 2.57098 1.77176 2.47442C1.86832 2.37787 1.98543 2.32959 2.12309 2.32959C2.26065 2.32959 2.37771 2.37787 2.47426 2.47442L13.5256 13.5258C13.6179 13.6181 13.6669 13.7324 13.6724 13.8686C13.678 14.0049 13.629 14.1248 13.5256 14.2283C13.429 14.3248 13.3119 14.3731 13.1743 14.3731C13.0367 14.3731 12.9197 14.3248 12.8231 14.2283L10.4769 11.9026C10.0837 12.0547 9.67959 12.1645 9.2646 12.2321C8.84971 12.2996 8.42815 12.3334 7.99993 12.3334ZM3.96926 5.39492C3.57859 5.6967 3.22748 6.03792 2.91593 6.41859C2.60437 6.79937 2.34348 7.21542 2.13326 7.66676C2.68882 8.78898 3.49159 9.68064 4.54159 10.3418C5.59159 11.0029 6.74437 11.3334 7.99993 11.3334C8.28626 11.3334 8.56809 11.3142 8.84543 11.2758C9.12276 11.2373 9.3982 11.1779 9.67176 11.0976L8.82809 10.2334C8.69309 10.2924 8.55826 10.3324 8.42359 10.3533C8.28904 10.3743 8.14782 10.3848 7.99993 10.3848C7.24348 10.3848 6.60137 10.1209 6.07359 9.59309C5.54582 9.06531 5.28193 8.4232 5.28193 7.66676C5.28193 7.51887 5.29348 7.37765 5.31659 7.24309C5.33971 7.10842 5.37859 6.97359 5.43326 6.83859L3.96926 5.39492Z\"\r\n fill=\"#C5C5C5\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport const SettingIcon: React.FC = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"21\"\r\n viewBox=\"0 0 20 21\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M11.3748 18.8346H8.62484C8.47206 18.8346 8.33664 18.786 8.21859 18.6888C8.10053 18.5916 8.02762 18.4666 7.99984 18.3138L7.6665 16.2096C7.40262 16.1124 7.12484 15.9805 6.83317 15.8138C6.5415 15.6471 6.28456 15.4735 6.06234 15.293L4.12484 16.1888C3.97206 16.2582 3.81928 16.2687 3.6665 16.2201C3.51373 16.1714 3.39567 16.0707 3.31234 15.918L1.93734 13.4805C1.854 13.3416 1.83317 13.1957 1.87484 13.043C1.9165 12.8902 1.99984 12.7652 2.12484 12.668L3.9165 11.3555C3.88873 11.2305 3.87137 11.0881 3.86442 10.9284C3.85748 10.7687 3.854 10.6263 3.854 10.5013C3.854 10.3763 3.85748 10.2339 3.86442 10.0742C3.87137 9.9145 3.88873 9.77214 3.9165 9.64714L2.12484 8.33464C1.99984 8.23741 1.9165 8.11241 1.87484 7.95964C1.83317 7.80686 1.854 7.66102 1.93734 7.52214L3.31234 5.08464C3.39567 4.93186 3.51373 4.83116 3.6665 4.78255C3.81928 4.73394 3.97206 4.74436 4.12484 4.8138L6.06234 5.70964C6.28456 5.52908 6.5415 5.35547 6.83317 5.1888C7.12484 5.02214 7.40262 4.89714 7.6665 4.8138L7.99984 2.6888C8.02762 2.53602 8.10053 2.41102 8.21859 2.3138C8.33664 2.21658 8.47206 2.16797 8.62484 2.16797H11.3748C11.5276 2.16797 11.663 2.21658 11.7811 2.3138C11.8991 2.41102 11.9721 2.53602 11.9998 2.6888L12.3332 4.79297C12.5971 4.89019 12.8783 5.01866 13.1769 5.17839C13.4755 5.33811 13.729 5.51519 13.9373 5.70964L15.8748 4.8138C16.0276 4.74436 16.1804 4.73394 16.3332 4.78255C16.4859 4.83116 16.604 4.93186 16.6873 5.08464L18.0623 7.5013C18.1457 7.64019 18.17 7.7895 18.1353 7.94922C18.1005 8.10894 18.0137 8.23741 17.8748 8.33464L16.0832 9.60547C16.1109 9.74436 16.1283 9.89366 16.1353 10.0534C16.1422 10.2131 16.1457 10.3624 16.1457 10.5013C16.1457 10.6402 16.1422 10.786 16.1353 10.9388C16.1283 11.0916 16.1109 11.2374 16.0832 11.3763L17.8748 12.668C17.9998 12.7652 18.0832 12.8902 18.1248 13.043C18.1665 13.1957 18.1457 13.3416 18.0623 13.4805L16.6873 15.918C16.604 16.0707 16.4859 16.1714 16.3332 16.2201C16.1804 16.2687 16.0276 16.2582 15.8748 16.1888L13.9373 15.293C13.7151 15.4735 13.4616 15.6506 13.1769 15.8242C12.8922 15.9978 12.6109 16.1263 12.3332 16.2096L11.9998 18.3138C11.9721 18.4666 11.8991 18.5916 11.7811 18.6888C11.663 18.786 11.5276 18.8346 11.3748 18.8346ZM9.99984 13.2096C10.7498 13.2096 11.3887 12.9457 11.9165 12.418C12.4443 11.8902 12.7082 11.2513 12.7082 10.5013C12.7082 9.7513 12.4443 9.11241 11.9165 8.58464C11.3887 8.05686 10.7498 7.79297 9.99984 7.79297C9.24984 7.79297 8.61095 8.05686 8.08317 8.58464C7.55539 9.11241 7.2915 9.7513 7.2915 10.5013C7.2915 11.2513 7.55539 11.8902 8.08317 12.418C8.61095 12.9457 9.24984 13.2096 9.99984 13.2096ZM9.99984 11.9596C9.59706 11.9596 9.25331 11.8173 8.96859 11.5326C8.68387 11.2478 8.5415 10.9041 8.5415 10.5013C8.5415 10.0985 8.68387 9.75477 8.96859 9.47005C9.25331 9.18533 9.59706 9.04297 9.99984 9.04297C10.4026 9.04297 10.7464 9.18533 11.0311 9.47005C11.3158 9.75477 11.4582 10.0985 11.4582 10.5013C11.4582 10.9041 11.3158 11.2478 11.0311 11.5326C10.7464 11.8173 10.4026 11.9596 9.99984 11.9596ZM9.08317 17.5846H10.9165L11.2082 15.2513C11.6665 15.1402 12.1005 14.9666 12.5103 14.7305C12.92 14.4944 13.2915 14.2096 13.6248 13.8763L15.8332 14.8346L16.6665 13.3346L14.7082 11.8971C14.7637 11.661 14.8089 11.4284 14.8436 11.1992C14.8783 10.9701 14.8957 10.7374 14.8957 10.5013C14.8957 10.2652 14.8818 10.0326 14.854 9.80339C14.8262 9.57422 14.7776 9.34158 14.7082 9.10547L16.6665 7.66797L15.8332 6.16797L13.6248 7.1263C13.3054 6.76519 12.9443 6.46311 12.5415 6.22005C12.1387 5.977 11.6943 5.82075 11.2082 5.7513L10.9165 3.41797H9.08317L8.7915 5.7513C8.31928 5.84852 7.87831 6.01519 7.46859 6.2513C7.05887 6.48741 6.69428 6.77908 6.37484 7.1263L4.1665 6.16797L3.33317 7.66797L5.2915 9.10547C5.23595 9.34158 5.19081 9.57422 5.15609 9.80339C5.12137 10.0326 5.104 10.2652 5.104 10.5013C5.104 10.7374 5.12137 10.9701 5.15609 11.1992C5.19081 11.4284 5.23595 11.661 5.2915 11.8971L3.33317 13.3346L4.1665 14.8346L6.37484 13.8763C6.70817 14.2096 7.0797 14.4944 7.48942 14.7305C7.89914 14.9666 8.33317 15.1402 8.7915 15.2513L9.08317 17.5846Z\"\r\n fill=\"#0E0C0B\"\r\n fill-opacity=\"0.7\"\r\n />\r\n </svg>\r\n);\r\n","import {\r\n BoardIcon,\r\n CalendarIcon,\r\n ChartsIcon,\r\n CloseIcon,\r\n GalleryIcon,\r\n ListIcon,\r\n TableIcon,\r\n TimeLineIcon,\r\n} from \"../../assets/svg\";\r\nimport { Box, Typography, ButtonBase, Grid, IconButton } from \"@mui/material\";\r\n\r\ninterface LayoutSelectorProps {\r\n onSelect: (layout: string) => void;\r\n selectedLayout?: string;\r\n}\r\n\r\nconst layoutIcons: Record<string, JSX.Element> = {\r\n Board: <BoardIcon />,\r\n Table: <TableIcon />,\r\n Timeline: <TimeLineIcon />,\r\n List: <ListIcon />,\r\n Calendar: <CalendarIcon />,\r\n Gallery: <GalleryIcon />,\r\n Charts: <ChartsIcon />,\r\n};\r\n\r\nconst LayoutSelector = ({ onSelect, selectedLayout }: LayoutSelectorProps) => {\r\n return (\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n maxWidth: \"500px\",\r\n height: \"330px\",\r\n // backgroundColor: \"#fff\",\r\n // borderRadius: 2,\r\n // overflow: \"hidden\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n px: 3,\r\n py: 2,\r\n // borderBottom: \"1px solid #eee\",\r\n backgroundColor: \"#FBFBFC\",\r\n }}\r\n >\r\n <Typography\r\n variant=\"h5\"\r\n sx={{ fontWeight: 400, fontSize: 18, color: \"#0C2033\" }}\r\n >\r\n Layouts\r\n </Typography>\r\n <IconButton onClick={() => onSelect(\"close\")}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Layout Grid */}\r\n <Grid container spacing={2} sx={{ p: 3 }}>\r\n {Object.keys(layoutIcons).map((layout) => {\r\n const isSelected = layout === selectedLayout;\r\n return (\r\n <Grid size={3} key={layout}>\r\n <ButtonBase\r\n onClick={() => onSelect(layout)}\r\n sx={{\r\n border: isSelected\r\n ? \"1.5px solid #1E1E1E\"\r\n : \"1.5px solid #E5E7EB\",\r\n borderRadius: 2,\r\n p: 2,\r\n width: \"100%\",\r\n height: \"100%\",\r\n flexDirection: \"column\",\r\n backgroundColor: isSelected ? \"#fff\" : \"\",\r\n transition: \"0.3s\",\r\n boxShadow: isSelected\r\n ? \"0px 2px 6px rgba(0,0,0,0.06)\"\r\n : \"none\",\r\n }}\r\n >\r\n <Box mb={1}>{layoutIcons[layout]}</Box>\r\n <Typography\r\n variant=\"subtitle1\"\r\n sx={{\r\n color: \"#1E1E1E\",\r\n fontWeight: isSelected ? 400 : 200,\r\n opacity: isSelected ? 1 : 0.5,\r\n }}\r\n >\r\n {layout}\r\n </Typography>\r\n </ButtonBase>\r\n </Grid>\r\n );\r\n })}\r\n </Grid>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LayoutSelector;\r\n","import React, { useEffect } from \"react\";\r\n\r\ninterface OutsideClickHandlerProps {\r\n ref: React.RefObject<HTMLElement>;\r\n handler: () => void;\r\n}\r\n\r\nconst useOutsideClick = ({ ref, handler }: OutsideClickHandlerProps) => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n handler();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [ref, handler]);\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport function useFullscreenPopoverContainer() {\r\n const [isFullscreen, setIsFullscreen] = useState<boolean>(\r\n !!document.fullscreenElement\r\n );\r\n const [container, setContainer] = useState<Element | undefined>(\r\n document.fullscreenElement ?? undefined\r\n );\r\n\r\n useEffect(() => {\r\n const handleFullscreenChange = () => {\r\n const el = document.fullscreenElement ?? undefined;\r\n setIsFullscreen(!!el);\r\n setContainer(el);\r\n };\r\n\r\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n return () => {\r\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n };\r\n }, []);\r\n\r\n return { isFullscreen, container };\r\n}\r\n","import React from \"react\";\r\nimport {\r\n Popover,\r\n Typography,\r\n Box,\r\n MenuItem,\r\n Select,\r\n IconButton,\r\n Switch as MUISwitch,\r\n} from \"@mui/material\";\r\nimport { CloseIcon, ViewMoreIcon } from \"../../../assets/svg\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\n\r\n// interface ViewMorePopoverProps {\r\n// compactMode: boolean;\r\n// onCompactToggle: (value: string) => void;\r\n// isFullscreen: boolean;\r\n// onFullscreenToggle: () => void;\r\n// groupBy: string;\r\n// onGroupByChange: (value: string) => void;\r\n// tableStates: CraftTableOptionsProps;\r\n// }\r\n\r\n// const ViewMore = ({\r\n// compactMode,\r\n// onCompactToggle,\r\n// isFullscreen,\r\n// onFullscreenToggle,\r\n// // groupBy,\r\n// // onGroupByChange,\r\n// tableStates,\r\n// }: ViewMorePopoverProps) => {\r\n// const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n\r\n// const open = Boolean(anchorEl);\r\n// const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n// const handleClick = (event: React.MouseEvent<HTMLElement>) => {\r\n// setAnchorEl(event.currentTarget);\r\n// };\r\n\r\n// const handleClose = () => {\r\n// setAnchorEl(null);\r\n// };\r\n\r\n// const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n// const onWrapCellToggle = () => {\r\n// setWrapColumns((prev: Record<string, boolean>) => ({\r\n// all_wrap: !prev[\"all_wrap\"],\r\n// }));\r\n// };\r\n\r\n// return (\r\n// <>\r\n// <div onClick={handleClick}>\r\n// <ViewMoreIcon />\r\n// </div>\r\n\r\n// <Popover\r\n// open={open}\r\n// anchorEl={anchorEl}\r\n// onClose={handleClose}\r\n// container={fullscreenContainer}\r\n// anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n// transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n// PaperProps={{\r\n// sx: {\r\n// mt: 2,\r\n// padding: 3,\r\n// width: 380,\r\n// borderRadius: 1,\r\n// boxShadow: 4,\r\n// },\r\n// }}\r\n// >\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// px={2}\r\n// py={2}\r\n// sx={{\r\n// backgroundColor: \"#F9FAFB\",\r\n// // borderBottom: \"1px solid #E0E0E0\",\r\n// // borderTopLeftRadius: 4,\r\n// // borderTopRightRadius: 4,\r\n// margin: \"-24px -24px 24px -24px\",\r\n// }}\r\n// >\r\n// <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n// View\r\n// </Typography>\r\n// <IconButton size=\"small\" onClick={handleClose}>\r\n// <CloseIcon />\r\n// </IconButton>\r\n// </Box>\r\n\r\n// {/* Wrap Cell */}\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Wrap Cell\r\n// </Typography>\r\n// <MUISwitch\r\n// checked={wrapColumns?.all_wrap || false}\r\n// onChange={onWrapCellToggle}\r\n// />\r\n// </Box>\r\n\r\n// {/* List View */}\r\n// <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// List View\r\n// </Typography>\r\n// <Select\r\n// size=\"small\"\r\n// value={compactMode ? \"Compact\" : \"Comfy\"}\r\n// onChange={(e) => onCompactToggle(e.target.value)}\r\n// sx={{\r\n// minWidth: 120,\r\n// fontWeight: 400,\r\n// color: \"#000\",\r\n// fontSize: \"13px\",\r\n// }}\r\n// MenuProps={{\r\n// container: fullscreenContainer,\r\n// disablePortal: false,\r\n// PaperProps: {\r\n// style: {\r\n// zIndex: 1500,\r\n// },\r\n// },\r\n// }}\r\n// >\r\n// <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n// <MenuItem value=\"Compact\">Compact</MenuItem>\r\n// </Select>\r\n// </Box>\r\n\r\n// {/* Group By */}\r\n// {/* <Box\r\n// display=\"flex\"\r\n// justifyContent=\"space-between\"\r\n// alignItems=\"center\"\r\n// mb={2}\r\n// >\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Group By\r\n// </Typography>\r\n// <Select\r\n// size=\"small\"\r\n// value={groupBy}\r\n// onChange={(e) => onGroupByChange(e.target.value)}\r\n// sx={{\r\n// minWidth: 120,\r\n// fontWeight: 400,\r\n// color: \"#000\",\r\n// fontSize: \"13px\",\r\n// }}\r\n// MenuProps={{\r\n// container: fullscreenContainer,\r\n// disablePortal: false,\r\n// PaperProps: {\r\n// style: {\r\n// zIndex: 1500,\r\n// },\r\n// },\r\n// }}\r\n// >\r\n// <MenuItem value=\"None\">None</MenuItem>\r\n// <MenuItem value=\"Status\">Status</MenuItem>\r\n// <MenuItem value=\"Owner\">Owner</MenuItem>\r\n// </Select>\r\n// </Box> */}\r\n\r\n// {/* Fullscreen */}\r\n// <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n// <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n// Fullscreen\r\n// </Typography>\r\n// <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n// </Box>\r\n// </Popover>\r\n// </>\r\n// );\r\n// };\r\n\r\n// export default ViewMore;\r\n\r\ninterface ViewMoreProps {\r\n compactMode: boolean;\r\n onCompactToggle: (value: string) => void;\r\n isFullscreen: boolean;\r\n onFullscreenToggle: () => void;\r\n groupBy?: string;\r\n onGroupByChange?: (value: string) => void;\r\n tableStates: CraftTableOptionsProps;\r\n onClose?: () => void;\r\n}\r\n\r\nconst ViewMore = ({\r\n compactMode,\r\n onCompactToggle,\r\n isFullscreen,\r\n onFullscreenToggle,\r\n // groupBy,\r\n // onGroupByChange,\r\n tableStates,\r\n onClose,\r\n}: ViewMoreProps) => {\r\n const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n const onWrapCellToggle = () => {\r\n setWrapColumns((prev: Record<string, boolean>) => ({\r\n all_wrap: !prev[\"all_wrap\"],\r\n }));\r\n };\r\n\r\n return (\r\n <Box sx={{ p: 3, width: 380 }}>\r\n {/* Header */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={3}\r\n >\r\n <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n View\r\n </Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Wrap Cell */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={2}\r\n >\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n Wrap Cell\r\n </Typography>\r\n <MUISwitch\r\n checked={wrapColumns?.all_wrap || false}\r\n onChange={onWrapCellToggle}\r\n />\r\n </Box>\r\n\r\n {/* List View */}\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n mb={2}\r\n >\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n List View\r\n </Typography>\r\n <Select\r\n size=\"small\"\r\n value={compactMode ? \"Compact\" : \"Comfy\"}\r\n onChange={(e) => onCompactToggle(e.target.value)}\r\n sx={{\r\n minWidth: 120,\r\n fontWeight: 400,\r\n color: \"#000\",\r\n fontSize: \"13px\",\r\n }}\r\n MenuProps={{\r\n container: fullscreenContainer,\r\n disablePortal: false,\r\n PaperProps: {\r\n style: {\r\n zIndex: 1500,\r\n },\r\n },\r\n }}\r\n >\r\n <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n <MenuItem value=\"Compact\">Compact</MenuItem>\r\n </Select>\r\n </Box>\r\n\r\n {/* Fullscreen */}\r\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n Fullscreen\r\n </Typography>\r\n <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ViewMore;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DragHandleIcon } from \"../../../assets/svg\";\r\n\r\nconst SortableItem = ({\r\n id,\r\n children,\r\n}: {\r\n id: string;\r\n children: React.ReactNode;\r\n}) => {\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({ id });\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n style={{\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n }}\r\n >\r\n <span {...attributes} {...listeners} style={{ cursor: \"grab\" }}>\r\n <DragHandleIcon />\r\n </span>\r\n <div style={{ flexGrow: 1 }}>{children}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SortableItem;\r\n","import { useState } from \"react\";\r\nimport {\r\n Popover,\r\n Box,\r\n IconButton,\r\n MenuItem,\r\n Select,\r\n Typography,\r\n Button,\r\n} from \"@mui/material\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n useSensor,\r\n useSensors,\r\n MouseSensor,\r\n TouchSensor,\r\n KeyboardSensor,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport SortableItem from \"./sorting-item\";\r\nimport { AddIcon, CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface SortItem {\r\n id: string;\r\n field: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\ntype SortPopoverProps = {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n columns: { id: string; label: string }[];\r\n onChange: (sorting: { id: string; desc: boolean }[]) => void;\r\n};\r\n\r\nconst SortPopover = ({\r\n anchorEl,\r\n onClose,\r\n columns,\r\n onChange,\r\n}: SortPopoverProps) => {\r\n const [sorts, setSorts] = useState<SortItem[]>([]);\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const handleDragEnd = (event: any) => {\r\n const { active, over } = event;\r\n if (active.id !== over.id) {\r\n const oldIndex = sorts.findIndex((item) => item.id === active.id);\r\n const newIndex = sorts.findIndex((item) => item.id === over.id);\r\n const updated = arrayMove(sorts, oldIndex, newIndex);\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n }\r\n };\r\n\r\n const handleChange = (id: string, field: keyof SortItem, value: any) => {\r\n const updated = sorts.map((item) =>\r\n item.id === id ? { ...item, [field]: value } : item\r\n );\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const handleAddSort = () => {\r\n const newSort: SortItem = {\r\n id: Date.now().toString(),\r\n field: columns[0]?.id ?? \"\",\r\n direction: \"asc\",\r\n };\r\n const updated = [...sorts, newSort];\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const handleRemove = (id: string) => {\r\n const updated = sorts.filter((item) => item.id !== id);\r\n setSorts(updated);\r\n triggerTableSortUpdate(updated);\r\n };\r\n\r\n const triggerTableSortUpdate = (sortItems: SortItem[]) => {\r\n const sortingPayload = sortItems.map((item) => ({\r\n id: item.field,\r\n desc: item.direction === \"desc\",\r\n }));\r\n onChange(sortingPayload);\r\n };\r\n\r\n return (\r\n <Popover\r\n open={Boolean(anchorEl)}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n >\r\n <Box p={2} minWidth={300}>\r\n <Box\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n px={2}\r\n py={1}\r\n sx={{\r\n backgroundColor: \"#F9FAFB\",\r\n // borderBottom: \"1px solid #E0E0E0\",\r\n margin: \"-16px -16px 16px -16px\",\r\n }}\r\n >\r\n <Typography fontSize=\"18px\" fontWeight={600} color=\"#0C2033\">\r\n Sort By\r\n </Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n {sorts.length > 0 && (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={sorts.map((s) => s.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {sorts.map((sort) => (\r\n <SortableItem key={sort.id} id={sort.id}>\r\n <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n <Select\r\n value={sort.field}\r\n onChange={(e) =>\r\n handleChange(sort.id, \"field\", e.target.value)\r\n }\r\n size=\"small\"\r\n fullWidth\r\n sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n >\r\n {columns.map((col) => (\r\n <MenuItem key={col.id} value={col.id}>\r\n {col.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <Select\r\n value={sort.direction}\r\n onChange={(e) =>\r\n handleChange(sort.id, \"direction\", e.target.value)\r\n }\r\n size=\"small\"\r\n sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n >\r\n <MenuItem value=\"asc\">Ascending</MenuItem>\r\n <MenuItem value=\"desc\">Descending</MenuItem>\r\n </Select>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => handleRemove(sort.id)}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </SortableItem>\r\n ))}\r\n </SortableContext>\r\n </DndContext>\r\n )}\r\n\r\n <Button\r\n onClick={handleAddSort}\r\n startIcon={\r\n <span>\r\n <AddIcon />\r\n </span>\r\n }\r\n size=\"small\"\r\n sx={{\r\n fontWeight: 400,\r\n fontSize: 12,\r\n color: \"#888888\",\r\n }}\r\n >\r\n Add Sort\r\n </Button>\r\n </Box>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport default SortPopover;\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport {\r\n DragandDrogIcon,\r\n VisibilityIcon,\r\n VisibilityOffIcon,\r\n} from \"../../../assets/svg\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { camelCaseToTitle } from \"../../types/common\";\r\n\r\nconst DraggableColumn = ({\r\n column,\r\n onToggle,\r\n}: {\r\n column: any;\r\n onToggle: () => void;\r\n}) => {\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({\r\n id: column.id,\r\n });\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n };\r\n\r\n const isVisible = column.getIsVisible();\r\n const label =\r\n typeof column.columnDef.header === \"string\"\r\n ? column.columnDef.header\r\n : column.id;\r\n\r\n return (\r\n <div ref={setNodeRef} style={style} {...attributes} className=\"column-row\">\r\n <Box {...listeners} className=\"drag-icon\">\r\n <DragandDrogIcon />\r\n </Box>\r\n <Typography>{camelCaseToTitle(label as string)}</Typography>\r\n <Box onClick={onToggle} className=\"visibility-icon\">\r\n {isVisible ? <VisibilityIcon /> : <VisibilityOffIcon />}\r\n </Box>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DraggableColumn;\r\n","import { FilterMasterStateProps, UpdatedFilterStateProps } from \"./filter\";\r\n\r\nexport interface defaultColumnsProps {\r\n id: number;\r\n name: string;\r\n department: string;\r\n position: string;\r\n email: string;\r\n location: string;\r\n phone: string;\r\n dateOfJoining: string;\r\n salary: number;\r\n performanceRating: string;\r\n subRows?: any;\r\n}\r\n\r\nexport interface amountFormatProps {\r\n amount: number;\r\n decimal?: boolean;\r\n removeFloat?: boolean;\r\n compactFormat?: \"crore\" | \"10lakh\" | \"lakh\";\r\n}\r\n\r\nexport interface formatDateProps {\r\n date: string;\r\n style: string;\r\n}\r\n\r\nexport type alignProps = \"left\" | \"center\" | \"right\";\r\nexport interface align {\r\n align: alignProps;\r\n}\r\n\r\nexport const camelCaseToTitle = (str: string): string => {\r\n if (!str) return \"\";\r\n\r\n return str\r\n .replace(/_/g, \" \") // Replace underscores with spaces\r\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // Add space between camelCase transitions\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) // Capitalize each word's first letter\r\n .trim();\r\n};\r\n\r\n//API INTEGRATION\r\nexport interface EntityTableAPIProps {\r\n entity_type?: string;\r\n page: number;\r\n size: number;\r\n tabs?: {\r\n columnName: string;\r\n sortBy: \"ASC\" | \"DSC\";\r\n value?: string;\r\n };\r\n sortby?: {\r\n sortColum: string;\r\n sortType: \"ASC\" | \"DSC\";\r\n }[];\r\n quickFilter?: {\r\n filter_attribute: string;\r\n filter_operator: string;\r\n filter_value: string[] | string;\r\n }[];\r\n attributeFilter?: {\r\n filter_attribute: string;\r\n filter_operator: string;\r\n filter_value: string[] | string;\r\n }[];\r\n}\r\n\r\nexport interface viewSettingsDropDownAPIProps {\r\n entity_type: string;\r\n column: string | undefined;\r\n sort_by: string | undefined;\r\n}\r\n\r\ninterface EntityListTab {\r\n tab_value: string | null;\r\n tab_value_count: string | number;\r\n}\r\n\r\ninterface EntityList {\r\n id: string;\r\n entity_type: string;\r\n name: string;\r\n status: string | null;\r\n parent_type: string | null;\r\n parent_id: string | null;\r\n code: string;\r\n created_by: string | null;\r\n created_date: string | null;\r\n modified_by: string | null;\r\n modified_date: string | null;\r\n enterprise_id: string | null;\r\n organization_id: number | null;\r\n app_code: string | null;\r\n is_system: number | null;\r\n description: string | null;\r\n}\r\n\r\nexport interface EntityListingResponse {\r\n data: {\r\n entity_tabs: EntityListTab[];\r\n entity_list: EntityList[];\r\n };\r\n}\r\n\r\nexport interface APIParamsProps {\r\n page?: number;\r\n size?: number;\r\n}\r\n\r\nexport type DropdownOption = {\r\n value: string | number;\r\n label: string;\r\n};\r\n\r\nexport interface onFilterChangeFunctionProps {\r\n updatedFilters?: any;\r\n filterMaster?: any;\r\n filters?: any;\r\n}\r\n","import React from \"react\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n useSensor,\r\n useSensors,\r\n MouseSensor,\r\n TouchSensor,\r\n KeyboardSensor,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n SortableContext,\r\n arrayMove,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { Popover, IconButton, Typography, Box } from \"@mui/material\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport DraggableColumn from \"./column-list-item\";\r\nimport \"./index.scss\";\r\nimport { CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface ColumnToggleProps<T> {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n table: Table<T>;\r\n columnOrder: string[];\r\n setColumnOrder: React.Dispatch<React.SetStateAction<string[]>>;\r\n}\r\n\r\nconst ColumnToggle = <T,>({\r\n anchorEl,\r\n onClose,\r\n table,\r\n columnOrder,\r\n setColumnOrder,\r\n}: ColumnToggleProps<T>) => {\r\n const open = Boolean(anchorEl);\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const allColumns = table.getAllLeafColumns();\r\n\r\n const shownColumns = columnOrder\r\n .map((id) => allColumns.find((col) => col.id === id))\r\n .filter((col) => col?.getIsVisible());\r\n\r\n const hiddenColumns = columnOrder\r\n .map((id) => allColumns.find((col) => col.id === id))\r\n .filter((col) => col && !col.getIsVisible());\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n if (!over || active.id === over.id) return;\r\n\r\n const activeCol = table.getColumn(active.id as string);\r\n const overCol = table.getColumn(over.id as string);\r\n if (!activeCol || !overCol) return;\r\n\r\n const activeVisible = activeCol.getIsVisible();\r\n const overVisible = overCol.getIsVisible();\r\n\r\n if (activeVisible !== overVisible) {\r\n activeCol.toggleVisibility();\r\n }\r\n\r\n const oldIndex = columnOrder.indexOf(active.id as string);\r\n const newIndex = columnOrder.indexOf(over.id as string);\r\n setColumnOrder(arrayMove(columnOrder, oldIndex, newIndex));\r\n };\r\n\r\n const toggleVisibility = (columnId: string) => {\r\n const col = table.getColumn(columnId);\r\n col?.toggleVisibility();\r\n };\r\n\r\n const handleHideAll = () => {\r\n allColumns.forEach((col) => col.toggleVisibility(false));\r\n };\r\n\r\n const handleShowAll = () => {\r\n allColumns.forEach((col) => col.toggleVisibility(true));\r\n };\r\n\r\n return (\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n sx={{ width: \"600px\" }}\r\n >\r\n <div className=\"column-manager\">\r\n <div className=\"header\">\r\n <Typography variant=\"h6\">Column</Typography>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </div>\r\n\r\n <div className=\"content-wrapper\">\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <div className=\"list-section\">\r\n <div className=\"list-header\">\r\n <Typography variant=\"subtitle2\">Shown in List</Typography>\r\n {/* <button onClick={handleHideAll}>Hide All</button> */}\r\n <Box\r\n onClick={handleHideAll}\r\n fontStyle={{\r\n cursor: \"pointer\",\r\n color: \"#C5C5C5\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n Hide All\r\n </Box>\r\n </div>\r\n <SortableContext\r\n items={shownColumns.map((col) => col!.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {shownColumns.map((col) => (\r\n <DraggableColumn\r\n key={col!.id}\r\n column={col!}\r\n onToggle={() => toggleVisibility(col!.id)}\r\n />\r\n ))}\r\n </SortableContext>\r\n </div>\r\n\r\n <div className=\"list-section\">\r\n <div className=\"list-header\">\r\n <Typography variant=\"subtitle2\">Hidden in List</Typography>\r\n {/* <button onClick={handleShowAll}>Show All</button> */}\r\n <Box\r\n onClick={handleShowAll}\r\n fontStyle={{\r\n cursor: \"pointer\",\r\n color: \"#C5C5C5\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n Show All\r\n </Box>\r\n </div>\r\n <SortableContext\r\n items={hiddenColumns.map((col) => col!.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {hiddenColumns.map((col) => (\r\n <DraggableColumn\r\n key={col!.id}\r\n column={col!}\r\n onToggle={() => toggleVisibility(col!.id)}\r\n />\r\n ))}\r\n </SortableContext>\r\n </div>\r\n </DndContext>\r\n </div>\r\n </div>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport default ColumnToggle;\r\n","export const customDebounce = <T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number\r\n) => {\r\n let timerId: NodeJS.Timeout;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n const context = this;\r\n\r\n clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n func.apply(context, args);\r\n }, delay);\r\n };\r\n};\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\nexport interface StyleProps {\r\n searchField: (showSearchInput: boolean) => SxProps<Theme>;\r\n}\r\n\r\nexport const searchStyles: StyleProps = {\r\n searchField: (showSearchInput: boolean): SxProps<Theme> => ({\r\n width: showSearchInput ? \"180px\" : \"40px\",\r\n transition: \"all 0.3s ease\",\r\n opacity: showSearchInput ? 1 : 0.8,\r\n marginRight: \"0.5rem\",\r\n\r\n \"& .MuiOutlinedInput-root\": {\r\n paddingRight: \"4px\",\r\n height: \"32px\",\r\n borderRadius: \"6px\",\r\n backgroundColor: \"#fff\",\r\n border: showSearchInput ? \"1px solid #ccc\" : \"none\",\r\n },\r\n\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n\r\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {},\r\n\r\n \" & .css-4bojcr-MuiInputBase-root-MuiOutlinedInput-root \": {\r\n paddingLeft: \"6px !important\",\r\n },\r\n \"& .css-1mnoz6i-MuiInputBase-root-MuiOutlinedInput-root\": {\r\n paddingLeft: \"6px !important\",\r\n },\r\n }),\r\n};\r\n","import React, { useState, useRef, useEffect, useCallback } from \"react\";\r\nimport { SearchIcon } from \"../../../assets/svg\";\r\nimport useOutsideClick from \"../../libs/hooks/useOutsideClick\";\r\nimport { customDebounce } from \"../../libs/utils/debounce\";\r\nimport { Box, IconButton, InputAdornment, TextField } from \"@mui/material\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\nimport { searchStyles } from \"./style\";\r\n\r\ninterface TableSearchProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n}\r\n\r\nexport const TableSearch = ({\r\n value,\r\n onChange,\r\n}: TableSearchProps): JSX.Element => {\r\n const [showSearchInput, setShowSearchInput] = useState(false);\r\n const [localValue, setLocalValue] = useState(value);\r\n const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n // Debounced onChange function\r\n const debouncedOnChange = useCallback(\r\n customDebounce((newValue: string) => {\r\n onChange(newValue);\r\n }, 1000),\r\n [onChange]\r\n );\r\n\r\n // Sync local state with prop value\r\n useEffect(() => {\r\n setLocalValue(value);\r\n }, [value]);\r\n\r\n useOutsideClick({\r\n ref: searchContainerRef,\r\n handler: () => {\r\n setShowSearchInput(false);\r\n },\r\n });\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n setLocalValue(newValue);\r\n debouncedOnChange(newValue);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\") {\r\n onChange(localValue);\r\n }\r\n if (e.key === \"Escape\") {\r\n setShowSearchInput(false);\r\n }\r\n };\r\n\r\n return (\r\n <Box\r\n ref={searchContainerRef}\r\n className=\"search-container\"\r\n sx={{\r\n display: \"flex\",\r\n position: \"relative\",\r\n top: \"10px\",\r\n }}\r\n >\r\n <TextField\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n value={localValue}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n className={`search-input ${showSearchInput ? \"expanded\" : \"\"}`}\r\n sx={searchStyles.searchField(showSearchInput)}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setShowSearchInput((prev) => !prev);\r\n if (!showSearchInput) {\r\n setTimeout(() => {\r\n searchContainerRef.current\r\n ?.querySelector(\"input\")\r\n ?.focus();\r\n }, 100);\r\n }\r\n }}\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n edge=\"start\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n endAdornment:\r\n showSearchInput && localValue !== \"\" ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setLocalValue(\"\");\r\n handleChange({ target: { value: \"\" } } as any);\r\n }}\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n edge=\"end\"\r\n >\r\n <CloseRoundedIcon\r\n fontSize=\"small\"\r\n sx={{ color: \"black\", fontSize: \"14px\" }}\r\n />\r\n </IconButton>\r\n </InputAdornment>\r\n ) : null,\r\n }}\r\n />\r\n </Box>\r\n );\r\n};\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport {\r\n ChangeLayoutIcon,\r\n SortingIcon,\r\n FilterationIcon,\r\n HideColumnIcon,\r\n} from \"../../../assets/svg.tsx\";\r\nimport { Popover } from \"@mui/material\";\r\nimport LayoutSelector from \"../table-change-layout.tsx\";\r\nimport useOutsideClick from \"../../libs/hooks/useOutsideClick.tsx\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport { TopbarOptionsProps } from \"../../types/table.ts\";\r\nimport \"./index.scss\";\r\nimport ViewMore from \"../viewmore/index.tsx\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen.tsx\";\r\nimport SortPopover from \"../sorting-modal.tsx/index.tsx\";\r\nimport ColumnToggle from \"../column-visibility-modal/index.tsx\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options.ts\";\r\nimport { TableSearch } from \"../search/index.tsx\";\r\n\r\ninterface TopbarProps<T> {\r\n table: Table<T>;\r\n isFullscreen: boolean;\r\n fullscreenToggle: () => void;\r\n isCompactTable: boolean;\r\n setIsCompactTable: React.Dispatch<React.SetStateAction<boolean>>;\r\n paginationComponent?: React.ReactNode;\r\n topbarOptions?: TopbarOptionsProps;\r\n columnOrder?: string[];\r\n setColumnOrder?: React.Dispatch<React.SetStateAction<string[]>>;\r\n tableStates: CraftTableOptionsProps;\r\n searchValue?: string;\r\n onSearchChange?: (val: string) => void;\r\n onFilterButtonClick?: () => void;\r\n}\r\n\r\nfunction Topbar<T>({\r\n table,\r\n isCompactTable,\r\n isFullscreen,\r\n fullscreenToggle,\r\n setIsCompactTable,\r\n paginationComponent,\r\n topbarOptions,\r\n tableStates,\r\n onFilterButtonClick,\r\n}: TopbarProps<T>) {\r\n const [sortAnchorEl, setSortAnchorEl] = useState<HTMLElement | null>(null);\r\n const [groupBy, setGroupBy] = useState<string>(\"None\");\r\n\r\n const [showColumnHiding, setShowColumnHiding] = useState(false);\r\n const [layoutAnchorEl, setLayoutAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n const [selectedLayout, setSelectedLayout] = useState(\"Table\");\r\n const [columnAnchorEl, setColumnAnchorEl] = useState<HTMLElement | null>(\r\n null\r\n );\r\n const [columnOrder, setColumnOrder] = useState<string[]>(\r\n table.getAllLeafColumns().map((col) => col.id)\r\n );\r\n\r\n const { setShowTableFilter } = tableStates;\r\n\r\n // search\r\n const [showSearchInput, setShowSearchInput] = useState(false);\r\n const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n // sync column order with table instance\r\n useEffect(() => {\r\n table.setColumnOrder(columnOrder);\r\n }, [columnOrder]);\r\n\r\n const {\r\n leftSideComponent,\r\n rightSideComponent,\r\n showColumnToggle,\r\n showChangeLayoutToggle,\r\n showSortingToggle,\r\n showFilterToggle,\r\n showSearch,\r\n searchValue,\r\n onSearchChange,\r\n } = topbarOptions ?? {};\r\n\r\n const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n useOutsideClick({\r\n ref: dropdownRef,\r\n handler: () => setShowColumnHiding(false),\r\n });\r\n\r\n const handleLayoutSelect = (layout: string) => {\r\n setSelectedLayout(layout);\r\n setLayoutAnchorEl(null);\r\n };\r\n\r\n useOutsideClick({\r\n ref: searchContainerRef,\r\n handler: () => setShowSearchInput(false),\r\n });\r\n\r\n useEffect(() => {\r\n const handleExternalLayoutTrigger = (e: Event) => {\r\n const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n setLayoutAnchorEl(target);\r\n };\r\n\r\n const handleExternalFilterTrigger = () => {\r\n onFilterButtonClick?.();\r\n };\r\n\r\n const handleExternalViewMoreTrigger = (e: Event) => {\r\n const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n if (target) setViewMoreAnchorEl(target);\r\n };\r\n\r\n const handleExternalSearchTrigger = () => {\r\n setShowSearchInput(true);\r\n setTimeout(() => {\r\n searchContainerRef.current?.querySelector(\"input\")?.focus();\r\n }, 100);\r\n };\r\n\r\n window.addEventListener(\r\n \"triggerLayoutPopover\",\r\n handleExternalLayoutTrigger\r\n );\r\n window.addEventListener(\"triggerFilterButton\", handleExternalFilterTrigger);\r\n window.addEventListener(\"triggerViewMore\", handleExternalViewMoreTrigger);\r\n window.addEventListener(\"triggerSearchInput\", handleExternalSearchTrigger); // ✅\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"triggerLayoutPopover\",\r\n handleExternalLayoutTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerFilterButton\",\r\n handleExternalFilterTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerViewMore\",\r\n handleExternalViewMoreTrigger\r\n );\r\n window.removeEventListener(\r\n \"triggerSearchInput\",\r\n handleExternalSearchTrigger\r\n ); // ✅\r\n };\r\n }, [onFilterButtonClick]);\r\n\r\n const [viewMoreAnchorEl, setViewMoreAnchorEl] = useState<HTMLElement | null>(\r\n null\r\n );\r\n\r\n const isViewMoreOpen = Boolean(viewMoreAnchorEl);\r\n\r\n return (\r\n <div className=\"ts-topbar\">\r\n <div className=\"tabs-section\">\r\n <div style={{ overflowX: \"auto\", whiteSpace: \"nowrap\" }}>\r\n {leftSideComponent}\r\n </div>\r\n </div>\r\n\r\n <div className=\"right-section\">\r\n {rightSideComponent}\r\n {paginationComponent}\r\n\r\n {showSearch && (\r\n <div\r\n title=\"Search\"\r\n className=\"external-search-trigger\"\r\n onClick={() => {\r\n const customEvent = new CustomEvent(\"triggerSearchInput\");\r\n window.dispatchEvent(customEvent);\r\n }}\r\n ref={searchContainerRef}\r\n >\r\n <TableSearch\r\n value={searchValue ?? \"\"}\r\n onChange={onSearchChange ?? (() => {})}\r\n />\r\n </div>\r\n )}\r\n\r\n {showChangeLayoutToggle && (\r\n <>\r\n <div className=\"change-layout ts--button\" title=\"Layout\">\r\n <div\r\n onClick={(e) => {\r\n const customEvent = new CustomEvent(\"triggerLayoutPopover\", {\r\n detail: { target: e.currentTarget },\r\n });\r\n window.dispatchEvent(customEvent);\r\n }}\r\n className=\"external-layout-trigger\"\r\n >\r\n <ChangeLayoutIcon />\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n <Popover\r\n open={Boolean(layoutAnchorEl)}\r\n anchorEl={layoutAnchorEl}\r\n onClose={() => setLayoutAnchorEl(null)}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n container={fullscreenContainer}\r\n sx={{\r\n mt: 2.2,\r\n }}\r\n >\r\n <LayoutSelector\r\n onSelect={handleLayoutSelect}\r\n selectedLayout={selectedLayout}\r\n />\r\n </Popover>\r\n {showColumnToggle && (\r\n <>\r\n <div\r\n className=\"hide-column ts--button\"\r\n onClick={(e) => setColumnAnchorEl(e.currentTarget)}\r\n title=\"Column\"\r\n >\r\n <HideColumnIcon />\r\n </div>\r\n <ColumnToggle\r\n anchorEl={columnAnchorEl}\r\n onClose={() => setColumnAnchorEl(null)}\r\n table={table}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n />\r\n </>\r\n )}\r\n\r\n {showSortingToggle && (\r\n <>\r\n <div\r\n className=\"filter ts--button\"\r\n title=\"Sort\"\r\n onClick={(e) => setSortAnchorEl(e.currentTarget)}\r\n >\r\n <SortingIcon />\r\n </div>\r\n <SortPopover\r\n anchorEl={sortAnchorEl}\r\n onClose={() => setSortAnchorEl(null)}\r\n columns={table.getAllLeafColumns().map((col) => ({\r\n id: col.id,\r\n label: (col.columnDef.meta as any)?.label || col.id,\r\n }))}\r\n onChange={(sortingRules) => table.setSorting(sortingRules)}\r\n />\r\n </>\r\n )}\r\n\r\n {/* {showFilterToggle && (\r\n <div\r\n className=\"filter ts--button\"\r\n title=\"Filter\"\r\n onClick={onFilterButtonClick}\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n backgroundColor:\r\n tableStates.showTableFilter || tableStates.filters.length > 0\r\n ? \"#e8e2fb\"\r\n : \"transparent\",\r\n height: \"25px\",\r\n width: \"25px\",\r\n borderRadius: \"6px\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <FilterationIcon\r\n color={\r\n tableStates.showTableFilter || tableStates.filters.length > 0\r\n ? \"#7A5AF8\"\r\n : \"#1C1B1F\"\r\n }\r\n />\r\n </div>\r\n )} */}\r\n\r\n {showFilterToggle && (\r\n <div\r\n className=\"filter ts--button\"\r\n title=\"Filter\"\r\n onClick={onFilterButtonClick}\r\n style={{\r\n position: \"relative\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n backgroundColor:\r\n tableStates.showTableFilter || tableStates.filters.length > 0\r\n ? \"#eae4fe\"\r\n : \"transparent\",\r\n height: \"25px\",\r\n width: \"25px\",\r\n borderRadius: \"6px\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <FilterationIcon\r\n color={\r\n tableStates.showTableFilter || tableStates.filters.length > 0\r\n ? \"#7A5AF8\"\r\n : \"#1C1B1F\"\r\n }\r\n />\r\n\r\n {tableStates.filters.length > 0 && !tableStates.showTableFilter && (\r\n <span\r\n style={{\r\n position: \"absolute\",\r\n top: \"1px\",\r\n right: \"1px\",\r\n width: \"6px\",\r\n height: \"6px\",\r\n borderRadius: \"50%\",\r\n backgroundColor: \"#F63D68\",\r\n }}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* {viewMoreToggle && (\r\n <div className=\"view-more ts--button\" title=\"View More\">\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n />\r\n </div>\r\n )} */}\r\n {/* {viewMoreToggle && (\r\n <div\r\n className=\"view-more ts--button view-more-trigger\"\r\n title=\"View More\"\r\n >\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n />\r\n </div>\r\n )} */}\r\n <Popover\r\n open={isViewMoreOpen}\r\n anchorEl={viewMoreAnchorEl}\r\n onClose={() => setViewMoreAnchorEl(null)}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n // PaperProps={{\r\n // sx: {\r\n // mt: 2,\r\n // padding: 0,\r\n // width: 380,\r\n // borderRadius: 1,\r\n // boxShadow: 4,\r\n // },\r\n // }}\r\n >\r\n <ViewMore\r\n compactMode={isCompactTable}\r\n onCompactToggle={(value: string) =>\r\n setIsCompactTable(value === \"Compact\")\r\n }\r\n isFullscreen={isFullscreen}\r\n onFullscreenToggle={fullscreenToggle}\r\n groupBy={groupBy}\r\n onGroupByChange={(value: string) => setGroupBy(value)}\r\n tableStates={tableStates}\r\n onClose={() => setViewMoreAnchorEl(null)}\r\n />\r\n </Popover>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Topbar;\r\n","import { Table } from \"@tanstack/react-table\";\r\nimport {\r\n TableFirstPageIcon,\r\n TableLastPageIcon,\r\n // TableNextPageIcon,\r\n // TablePreviousPageIcon,\r\n} from \"../../../../assets/svg\";\r\nimport TablePreviousPageIcon from \"@mui/icons-material/NavigateBeforeRounded\";\r\nimport TableNextPageIcon from \"@mui/icons-material/NavigateNextRounded\";\r\nimport \"./index.scss\";\r\nimport { CraftTablePaginationProps } from \"../../../types/table\";\r\n\r\ninterface DefaultPaginationProps<T> {\r\n table: Table<T>;\r\n rowsPerPageArray: number[];\r\n paginationOptions?: CraftTablePaginationProps;\r\n}\r\n\r\nfunction DefaultPagination<T>({\r\n table,\r\n rowsPerPageArray,\r\n paginationOptions,\r\n}: DefaultPaginationProps<T>) {\r\n const pageIndex = table.getState().pagination.pageIndex + 1;\r\n const pageCount = table.getPageCount();\r\n const pageSize = table.getState().pagination.pageSize;\r\n const rowCount = table.getRowCount();\r\n const recordsRangeFirst = pageIndex * pageSize - pageSize + 1;\r\n const recordsRangeLast = Math.min(pageIndex * pageSize, rowCount);\r\n\r\n return (\r\n <div className=\"pagination_container\">\r\n {paginationOptions?.paginationView === \"full\" ? (\r\n <>\r\n <span className=\"go_to_page_container\">\r\n &nbsp;&nbsp;Go to page&nbsp;:&nbsp;\r\n <input\r\n type=\"number\"\r\n defaultValue={pageIndex}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n const page = e.currentTarget.value\r\n ? Number(e.currentTarget.value) - 1\r\n : 0;\r\n table.setPageIndex(page);\r\n }\r\n }}\r\n style={{ width: \"60px\", textAlign: \"center\" }}\r\n min={1}\r\n max={table?.getPageCount()}\r\n />\r\n &nbsp;\r\n </span>\r\n\r\n <div className=\"rows_per_page_container\">\r\n <span>Rows Per Page&nbsp;:&nbsp;</span>\r\n <select\r\n value={table.getState().pagination.pageSize}\r\n onChange={(e) => {\r\n table.setPageSize(Number(e.target.value));\r\n }}\r\n >\r\n {rowsPerPageArray.map((pageSize) => (\r\n <option key={pageSize} value={pageSize}>\r\n {pageSize}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"records_range_container\">\r\n <span>Showing&nbsp;</span>\r\n <strong>\r\n {recordsRangeFirst} - {recordsRangeLast} of {rowCount}\r\n </strong>\r\n </div>\r\n\r\n <span className=\"page_range_container\">\r\n <span>&nbsp;Page&nbsp;</span>\r\n <strong>\r\n {pageIndex} of {pageCount}\r\n &nbsp;\r\n </strong>\r\n </span>\r\n\r\n <div className=\"pagination_btn_container\">\r\n <button\r\n title=\"First Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.setPageIndex(0)}\r\n >\r\n <TableFirstPageIcon />\r\n </button>\r\n <button\r\n title=\"Previous Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.previousPage()}\r\n >\r\n <TablePreviousPageIcon fontSize=\"small\" />\r\n </button>\r\n <button\r\n title=\"Next Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.nextPage()}\r\n >\r\n <TableNextPageIcon />\r\n </button>\r\n <button\r\n title=\"Last Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.setPageIndex(pageCount - 1)}\r\n >\r\n <TableLastPageIcon />\r\n </button>\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"rows_per_page_container\">\r\n {/* <span>Rows Per Page&nbsp;:&nbsp;</span> */}\r\n <select\r\n value={table.getState().pagination.pageSize}\r\n onChange={(e) => {\r\n table.setPageSize(Number(e.target.value));\r\n }}\r\n >\r\n {rowsPerPageArray.map((pageSize) => (\r\n <option key={pageSize} value={pageSize}>\r\n {pageSize}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"records_range_container\">\r\n {/* <span>Showing&nbsp;</span> */}\r\n <strong>\r\n {recordsRangeFirst} - {recordsRangeLast} of {rowCount}\r\n </strong>\r\n </div>\r\n\r\n <div className=\"pagination_btn_container\">\r\n <button\r\n title=\"Previous Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanPreviousPage()}\r\n onClick={() => table.previousPage()}\r\n >\r\n <TablePreviousPageIcon />\r\n </button>\r\n <button\r\n title=\"Next Page\"\r\n className=\"pagination_btn\"\r\n disabled={!table.getCanNextPage()}\r\n onClick={() => table.nextPage()}\r\n >\r\n <TableNextPageIcon />\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default DefaultPagination;\r\n","import { Column } from \"@tanstack/react-table\";\r\nimport { alignProps } from \"../../types/common\";\r\nimport { CSSProperties } from \"react\";\r\nimport axios from \"axios\";\r\n\r\nexport const formatClassName = (className: string): string => {\r\n return className.replace(/\\s+/g, \" \").trim();\r\n};\r\n\r\nexport const getColumnAlignment = (align: string) => {\r\n const contentAlignment = {\r\n left: \"flex-start\",\r\n center: \"center\",\r\n right: \"flex-end\",\r\n };\r\n\r\n const alignment = contentAlignment[(align as alignProps) || \"left\"];\r\n return alignment;\r\n};\r\n\r\nexport const getColumnPinningStyles = <T>(column: Column<T>): CSSProperties => {\r\n const isPinned = column.getIsPinned();\r\n const isLastLeftPinnedColumn =\r\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n const isFirstRightPinnedColumn =\r\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n return {\r\n boxShadow: isLastLeftPinnedColumn\r\n ? \"-4px 0 4px -4px gray inset\"\r\n : isFirstRightPinnedColumn\r\n ? \"4px 0 4px -4px gray inset\"\r\n : undefined,\r\n background: \"inherit\",\r\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n position: isPinned ? \"sticky\" : \"relative\",\r\n width: column.getSize(),\r\n };\r\n};\r\n\r\nexport const getColumnPinningStylesBody = <T>(\r\n column: Column<T>\r\n): CSSProperties => {\r\n const isPinned = column.getIsPinned();\r\n const isLastLeftPinnedColumn =\r\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n const isFirstRightPinnedColumn =\r\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n return {\r\n boxShadow: isLastLeftPinnedColumn\r\n ? \"-4px 0 4px -4px gray inset\"\r\n : isFirstRightPinnedColumn\r\n ? \"4px 0 4px -4px gray inset\"\r\n : undefined,\r\n background: \"inherit\",\r\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n position: isPinned ? \"sticky\" : \"relative\",\r\n width: column.getSize(),\r\n };\r\n};\r\n\r\nexport function customDebounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number\r\n): (...args: Parameters<T>) => void {\r\n let timerId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: ThisParameterType<T>, ...args: Parameters<T>): void {\r\n if (timerId) clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n func.apply(this, args);\r\n }, delay);\r\n };\r\n}\r\n\r\n//ENTITY TYPE\r\nconst ENVIRONMENT = \"crm_dev\";\r\nexport const ENTITY_TYPE = \"LEAD\";\r\nexport const MAPPED_ENTITY_TYPE = \"LAP\";\r\n\r\nconst environments = {\r\n adm_dev: \"http://localhost:4010/api\",\r\n crm_dev: \"http://localhost:4011/api\",\r\n uat: \"http://13.200.182.92:4010/api\",\r\n};\r\n\r\nconst getBaseUrl = () => environments[ENVIRONMENT];\r\n\r\n// API INTEGRATION\r\nexport const api = axios.create({\r\n baseURL: getBaseUrl(),\r\n timeout: 10000,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n});\r\n\r\napi.interceptors.request.use(\r\n (config) => {\r\n const token = localStorage.getItem(\"authToken\");\r\n if (token) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Cell, flexRender } from \"@tanstack/react-table\";\r\nimport { CSSProperties } from \"react\";\r\nimport { align } from \"../types/common\";\r\nimport { getColumnPinningStylesBody } from \"../libs/utils/common\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\n\r\ninterface DragAlongCellProps<T> {\r\n cell: Cell<T, unknown>;\r\n featureOptions: CraftTableFeatureProps;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction DragAlongCell<T>({\r\n cell,\r\n // featureOptions,\r\n tableStates,\r\n}: DragAlongCellProps<T>) {\r\n const { isDragging, setNodeRef, transform } = useSortable({\r\n id: cell.column.id,\r\n });\r\n // const { enableWordBreakAll } = featureOptions;\r\n const { wrapColumns } = tableStates;\r\n\r\n const isPinned = cell.column.getIsPinned();\r\n\r\n const style: CSSProperties = {\r\n opacity: isDragging ? 0.8 : 1,\r\n transform: CSS.Translate.toString(transform),\r\n transition: \"width transform 0.2s ease-in-out\",\r\n width: cell.column.getSize(),\r\n ...getColumnPinningStylesBody(cell.column),\r\n ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n wordBreak: \"break-all\",\r\n // whiteSpace: \"normal\",\r\n }),\r\n };\r\n\r\n return (\r\n <td\r\n ref={setNodeRef}\r\n {...{\r\n style: {\r\n ...style,\r\n zIndex: isPinned ? 2 : isDragging ? 1 : 0,\r\n },\r\n align: (cell.column.columnDef.meta as align)?.align || \"left\",\r\n className: \"ts__body__td\",\r\n }}\r\n >\r\n {cell.getIsPlaceholder()\r\n ? null\r\n : flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </td>\r\n );\r\n}\r\n\r\nexport default DragAlongCell;\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\ninterface CheckboxProps {\r\n type?: \"checkbox\";\r\n checked: boolean;\r\n disabled?: boolean;\r\n onChange: (checked: boolean) => void;\r\n indeterminate?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nconst Checkbox = ({\r\n checked = false,\r\n disabled = false,\r\n onChange = () => {},\r\n indeterminate = false,\r\n className,\r\n style,\r\n ...props\r\n}: CheckboxProps) => {\r\n const id = uuidv4();\r\n const [check, setCheck] = React.useState<boolean>(checked);\r\n const ref = useRef(null);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const isChecked = e.target.checked;\r\n setCheck(isChecked);\r\n\r\n if (onChange) onChange(isChecked);\r\n };\r\n\r\n useEffect(() => {\r\n setCheck(checked);\r\n }, [checked]);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n (ref.current as HTMLInputElement).indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return (\r\n <input\r\n id={id}\r\n ref={ref}\r\n type=\"checkbox\"\r\n checked={check}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n className={className}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport {\r\n ColumnOrderState,\r\n flexRender,\r\n Row,\r\n Table,\r\n} from \"@tanstack/react-table\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\nimport { align } from \"../types/common\";\r\nimport DragAlongCell from \"./table-body-dnd-cell\";\r\nimport {\r\n horizontalListSortingStrategy,\r\n SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport { getColumnPinningStylesBody } from \"../libs/utils/common\";\r\nimport Checkbox from \"./inputs/checkbox\";\r\n\r\ninterface TableBodyProps<T> {\r\n table: Table<T>;\r\n featureOptions: CraftTableFeatureProps;\r\n NestedComponent?: React.ComponentType<{ row: Row<T> }>;\r\n columnOrder: ColumnOrderState;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction TableBody<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n tableStates,\r\n}: TableBodyProps<T>) {\r\n const { enableColumnReordering, enableRowSelection } = featureOptions;\r\n\r\n const { wrapColumns } = tableStates;\r\n\r\n const renderRow = (row: Row<T>) => {\r\n const renderedRow = (\r\n <tr key={row.id} className=\"ts__body__tr\">\r\n {enableRowSelection && (\r\n <td\r\n className=\"ts__body__td ts__body__checkbox\"\r\n style={{\r\n position: \"sticky\",\r\n left: 0,\r\n width: \"50px\",\r\n }}\r\n >\r\n <Checkbox\r\n checked={row.getIsSelected()}\r\n indeterminate={row.getIsSomeSelected()}\r\n onChange={row.getToggleSelectedHandler()}\r\n className=\"checkbox__input\"\r\n />\r\n </td>\r\n )}\r\n\r\n {row?.getVisibleCells()?.map((cell) => {\r\n const tdProps = {\r\n className: \"ts__body__td\",\r\n style: {\r\n ...getColumnPinningStylesBody(cell.column),\r\n width: cell.column.getSize(),\r\n ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n wordBreak: \"break-all\",\r\n // whiteSpace: \"normal\",\r\n }),\r\n } as React.CSSProperties,\r\n align: (cell.column.columnDef.meta as align)?.align || \"left\",\r\n };\r\n\r\n return enableColumnReordering ? (\r\n <SortableContext\r\n key={cell.id}\r\n items={columnOrder}\r\n strategy={horizontalListSortingStrategy}\r\n >\r\n <DragAlongCell\r\n cell={cell}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n </SortableContext>\r\n ) : (\r\n <td key={cell?.id} {...tdProps}>\r\n {flexRender(cell?.column?.columnDef?.cell, cell?.getContext())}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n );\r\n\r\n if (row.getIsExpanded()) {\r\n return (\r\n <React.Fragment key={row.id}>\r\n {renderedRow}\r\n {NestedComponent && (\r\n <tr>\r\n {/* <td colSpan={table.getAllLeafColumns().length}>//commented out to remove extra line on opening of \r\n {NestedComponent && <NestedComponent {...{ row }} />}\r\n </td> */}\r\n {<NestedComponent {...{ row }} />}\r\n </tr>\r\n )}\r\n </React.Fragment>\r\n );\r\n } else {\r\n return renderedRow;\r\n }\r\n };\r\n\r\n return (\r\n <tbody className=\"ts__body\">\r\n {table?.getRowModel()?.rows?.map((row) => renderRow(row))}\r\n </tbody>\r\n );\r\n}\r\n\r\nexport default TableBody;\r\n","import { IconPinOffOutline } from \"../../assets/svg\";\r\nimport { TableHeaderProps } from \"../types/table\";\r\n\r\nfunction TableHeadPin<T>({ header }: TableHeaderProps<T>) {\r\n return header.column.getIsPinned() !== \"left\" ? (\r\n <div className=\"ts--head--button\" onClick={() => header.column.pin(\"left\")}>\r\n {/* <IconPinOutline /> */}\r\n </div>\r\n ) : (\r\n <div className=\"ts--head--button\" onClick={() => header.column.pin(false)}>\r\n <IconPinOffOutline />\r\n </div>\r\n );\r\n}\r\n\r\nexport default TableHeadPin;\r\n","import {\r\n Popover,\r\n List,\r\n ListItemButton,\r\n ListItemText,\r\n ListItemIcon,\r\n Switch,\r\n} from \"@mui/material\";\r\nimport { Header } from \"@tanstack/react-table\";\r\nimport {\r\n UpArrow,\r\n DownArrow,\r\n HideIcon,\r\n IconPinOffOutline,\r\n IconPinOutline,\r\n} from \"../../assets/svg\";\r\nimport { CraftTableOptionsProps } from \"../types/table-options\";\r\n\r\ntype Props<T> = {\r\n anchorEl: HTMLElement | null;\r\n onClose: () => void;\r\n header: Header<T, unknown>;\r\n tableStates: CraftTableOptionsProps;\r\n};\r\n\r\nfunction TableHeadPopover<T>({\r\n anchorEl,\r\n onClose,\r\n header,\r\n tableStates,\r\n}: Props<T>) {\r\n const open = Boolean(anchorEl);\r\n const column = header.column;\r\n const isPinned = column.getIsPinned() === \"left\";\r\n\r\n const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n const toggleWrapForColumn = (columnId: string) => {\r\n setWrapColumns((prev: Record<string, boolean>) => ({\r\n ...prev,\r\n [columnId]: !prev[columnId],\r\n all_wrap: false,\r\n }));\r\n };\r\n\r\n return (\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n >\r\n <List dense>\r\n <ListItemButton onClick={() => column.toggleSorting(false)}>\r\n <ListItemIcon>\r\n <UpArrow />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Sort ascending\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={() => column.toggleSorting(true)}>\r\n <ListItemIcon>\r\n <DownArrow />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Sort descending\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={() => column.toggleVisibility()}>\r\n <ListItemIcon>\r\n <HideIcon />\r\n </ListItemIcon>\r\n <ListItemText primary=\"Hide in view\" />\r\n </ListItemButton>\r\n <ListItemButton\r\n onClick={() => {\r\n column.pin(isPinned ? false : \"left\");\r\n }}\r\n >\r\n <ListItemIcon>\r\n {isPinned ? <IconPinOffOutline /> : <IconPinOutline />}\r\n </ListItemIcon>\r\n <ListItemText\r\n primary={isPinned ? \"Unfreeze column\" : \"Freeze column\"}\r\n />\r\n </ListItemButton>\r\n\r\n <ListItemButton>\r\n <ListItemText primary=\"Wrap Cell\" />\r\n <Switch\r\n checked={wrapColumns.all_wrap || wrapColumns[column.id]}\r\n onChange={() => toggleWrapForColumn(column.id)}\r\n />\r\n </ListItemButton>\r\n </List>\r\n </Popover>\r\n );\r\n}\r\n\r\nexport default TableHeadPopover;\r\n","import { flexRender } from \"@tanstack/react-table\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSSProperties, useState } from \"react\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DownArrow, DragHandleIcon, UpArrow } from \"../../assets/svg\";\r\nimport {\r\n getColumnAlignment,\r\n getColumnPinningStyles,\r\n} from \"../libs/utils/common\";\r\nimport { align } from \"../types/common\";\r\nimport { TableHeaderProps } from \"../types/table\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport TableHeadPopover from \"./table-head-popover\";\r\n\r\nfunction DraggableTableHeader<T>({\r\n header,\r\n featureOptions,\r\n tableStates,\r\n}: TableHeaderProps<T>) {\r\n const { enableColumnPinning } = featureOptions;\r\n\r\n // Popover\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n const handleHover = (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const { isDragging, transform, attributes, listeners } = useSortable({\r\n id: header.column.id,\r\n });\r\n\r\n const isPinned = header.column.getIsPinned();\r\n\r\n const styles: CSSProperties = {\r\n opacity: isDragging ? 0.8 : 1,\r\n position: \"relative\",\r\n transform: CSS.Translate.toString(transform),\r\n transition: \"width transform 0.2s ease-in-out\",\r\n width: header.column.getSize(),\r\n minWidth: `${header.column.columnDef.minSize ?? 180}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n };\r\n\r\n let sortProps: {\r\n className: string;\r\n title?: string;\r\n style?: CSSProperties;\r\n } = {\r\n className: \"ts__content\",\r\n // style: {\r\n // justifyContent: getColumnAlignment(\r\n // (header?.column?.columnDef?.meta as align)?.align\r\n // ),\r\n // },\r\n };\r\n\r\n // if (header.column.getCanSort()) {\r\n // sortProps = {\r\n // ...sortProps,\r\n // title:\r\n // header.column.getNextSortingOrder() === \"asc\"\r\n // ? \"Sort ascending\"\r\n // : header.column.getNextSortingOrder() === \"desc\"\r\n // ? \"Sort descending\"\r\n // : \"Clear sort\",\r\n // };\r\n // }\r\n\r\n return (\r\n <th\r\n onMouseLeave={handleClose}\r\n key={header?.id}\r\n className=\"ts__head__th\"\r\n colSpan={header.colSpan}\r\n onClick={handleHover}\r\n style={{\r\n width: `${header.column.getSize()}px `,\r\n minWidth: `${header.column.columnDef.minSize}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n ...styles,\r\n ...getColumnPinningStyles(header.column),\r\n zIndex: isPinned ? 3 : isDragging ? 1 : 0,\r\n }}\r\n >\r\n {header.isPlaceholder ? null : (\r\n <div {...sortProps}>\r\n <div\r\n className={`${\r\n header.column.getCanSort() ? \"ts__content__sort\" : \"\"\r\n }`.trim()}\r\n // onClick={header.column.getToggleSortingHandler()}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n\r\n {{\r\n asc: <UpArrow />,\r\n desc: <DownArrow />,\r\n }[header.column.getIsSorted() as \"asc\" | \"desc\"] ?? null}\r\n </div>\r\n\r\n {enableColumnPinning && (\r\n <TableHeadPin\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n\r\n <div {...attributes} {...listeners} className=\"ts__dnd__button\">\r\n <DragHandleIcon />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* column resizing */}\r\n {header.column.getCanResize() ? (\r\n <div\r\n onDoubleClick={() => header.column.resetSize()}\r\n onMouseDown={header.getResizeHandler()}\r\n onTouchStart={header.getResizeHandler()}\r\n className={`column__resize ${\r\n header.column.getIsResizing() ? \"is__resizing\" : \"\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {/* Popover */}\r\n <TableHeadPopover\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n header={header}\r\n tableStates={tableStates}\r\n />\r\n </th>\r\n );\r\n}\r\n\r\nexport default DraggableTableHeader;\r\n","import { ColumnOrderState, flexRender, Table } from \"@tanstack/react-table\";\r\nimport {\r\n CraftTableFeatureProps,\r\n CraftTableOptionsProps,\r\n} from \"../types/table-options\";\r\nimport { DownArrow, UpArrow } from \"../../assets/svg\";\r\nimport { CSSProperties, useState } from \"react\";\r\nimport { getColumnPinningStyles } from \"../libs/utils/common\";\r\nimport {\r\n horizontalListSortingStrategy,\r\n SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport DraggableTableHeader from \"./table-head-dnd-cell\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport Checkbox from \"./inputs/checkbox\";\r\n\r\ninterface TableHeadProps<T> {\r\n table: Table<T>;\r\n featureOptions: CraftTableFeatureProps;\r\n columnOrder: ColumnOrderState;\r\n tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction TableHead<T>({\r\n table,\r\n featureOptions,\r\n columnOrder,\r\n tableStates,\r\n}: TableHeadProps<T>) {\r\n const {\r\n stickyHeader,\r\n enableColumnReordering,\r\n enableColumnPinning,\r\n enableRowSelection,\r\n } = featureOptions;\r\n\r\n // Popover\r\n const [, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n const handleHover = (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n };\r\n\r\n return (\r\n <thead className={`ts__head ${stickyHeader ? \"ts--sticky\" : \"\"}`.trim()}>\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <tr className=\"ts__head__tr\" key={headerGroup?.id}>\r\n {enableRowSelection && (\r\n <th\r\n className=\"ts__head__th ts__head__checkbox\"\r\n style={{\r\n position: \"sticky\",\r\n left: 0,\r\n width: \"50px\",\r\n }}\r\n >\r\n <div className=\"ts__content\">\r\n <Checkbox\r\n checked={table.getIsAllRowsSelected()}\r\n indeterminate={table.getIsSomeRowsSelected()}\r\n onChange={() => table.toggleAllRowsSelected()}\r\n />\r\n </div>\r\n </th>\r\n )}\r\n\r\n {headerGroup.headers.map((header) => {\r\n let sortProps: {\r\n className: string;\r\n title?: string;\r\n style?: CSSProperties;\r\n } = {\r\n className: \"ts__content\",\r\n // style: {\r\n // justifyContent: getColumnAlignment(\r\n // (header?.column?.columnDef?.meta as align)?.align\r\n // ),\r\n // },\r\n };\r\n\r\n // if (header.column.getCanSort()) {\r\n // sortProps = {\r\n // ...sortProps,\r\n // title:\r\n // header.column.getNextSortingOrder() === \"asc\"\r\n // ? \"Sort ascending\"\r\n // : header.column.getNextSortingOrder() === \"desc\"\r\n // ? \"Sort descending\"\r\n // : \"Clear sort\",\r\n // };\r\n // }\r\n\r\n return enableColumnReordering ? (\r\n <SortableContext\r\n key={header?.id}\r\n items={columnOrder}\r\n strategy={horizontalListSortingStrategy}\r\n >\r\n <DraggableTableHeader\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n </SortableContext>\r\n ) : (\r\n <th\r\n key={header?.id}\r\n className=\"ts__head__th\"\r\n colSpan={header.colSpan}\r\n style={{\r\n ...getColumnPinningStyles(header.column),\r\n width: `${header.column.getSize()}px`,\r\n minWidth: `${header.column.columnDef.minSize}px`,\r\n maxWidth: `${header.column.columnDef.maxSize}px`,\r\n }}\r\n onClick={handleHover}\r\n >\r\n {header.isPlaceholder ? null : (\r\n <div {...sortProps}>\r\n <div\r\n className={`${\r\n header.column.getCanSort() ? \"ts__content__sort\" : \"\"\r\n }`.trim()}\r\n // onClick={header.column.getToggleSortingHandler()}\r\n >\r\n {flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )}\r\n\r\n {{\r\n asc: <UpArrow />,\r\n desc: <DownArrow />,\r\n }[header.column.getIsSorted() as \"asc\" | \"desc\"] ?? null}\r\n </div>\r\n\r\n {enableColumnPinning && (\r\n <TableHeadPin\r\n header={header}\r\n featureOptions={featureOptions}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* column resizing */}\r\n {header.column.getCanResize() ? (\r\n <div\r\n onDoubleClick={() => header.column.resetSize()}\r\n onMouseDown={header.getResizeHandler()}\r\n onTouchStart={header.getResizeHandler()}\r\n className={`column__resize ${\r\n header.column.getIsResizing() ? \"is__resizing\" : \"\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {/* Popover */}\r\n {/* <TableHeadPopover\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n header={header}\r\n wrap={wrap}\r\n tableStates={tableStates}\r\n /> */}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </thead>\r\n );\r\n}\r\n\r\nexport default TableHead;\r\n","import { formatClassName } from \"../libs/utils/common\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport TableBody from \"./table-body\";\r\nimport TableHead from \"./table-head\";\r\n\r\nfunction Table<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n isCompactTable,\r\n tableStates,\r\n}: CraftTableComponentProps<T>) {\r\n const { striped } = featureOptions;\r\n\r\n return (\r\n <table\r\n className={formatClassName(\r\n `ts__table ${striped ? \"ts--striped\" : \"\"} ${\r\n isCompactTable ? \"ts--compact\" : \"\"\r\n }`\r\n )}\r\n >\r\n <TableHead\r\n table={table}\r\n featureOptions={featureOptions}\r\n columnOrder={columnOrder}\r\n tableStates={tableStates}\r\n />\r\n <TableBody\r\n table={table}\r\n featureOptions={featureOptions}\r\n NestedComponent={NestedComponent}\r\n columnOrder={columnOrder}\r\n tableStates={tableStates}\r\n />\r\n </table>\r\n );\r\n}\r\n\r\nexport default Table;\r\n","import {\r\n closestCenter,\r\n DndContext,\r\n DragEndEvent,\r\n KeyboardSensor,\r\n MouseSensor,\r\n SensorDescriptor,\r\n SensorOptions,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport Table from \"./table\";\r\nimport { restrictToHorizontalAxis } from \"@dnd-kit/modifiers\";\r\nimport { arrayMove } from \"@dnd-kit/sortable\";\r\n\r\nfunction TableDND<T>({\r\n table,\r\n featureOptions,\r\n NestedComponent,\r\n columnOrder,\r\n setColumnOrder,\r\n isCompactTable,\r\n tableStates,\r\n}: CraftTableComponentProps<T>) {\r\n const sensors: SensorDescriptor<SensorOptions>[] = useSensors(\r\n useSensor(MouseSensor, {}),\r\n useSensor(TouchSensor, {}),\r\n useSensor(KeyboardSensor, {})\r\n );\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (active && over && active.id !== over.id) {\r\n setColumnOrder((columnOrder) => {\r\n const oldIndex = columnOrder.indexOf(active.id as string);\r\n const newIndex = columnOrder.indexOf(over.id as string);\r\n return arrayMove(columnOrder, oldIndex, newIndex);\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <DndContext\r\n collisionDetection={closestCenter}\r\n modifiers={[restrictToHorizontalAxis]}\r\n onDragEnd={handleDragEnd}\r\n sensors={sensors}\r\n >\r\n <Table\r\n table={table}\r\n featureOptions={featureOptions}\r\n NestedComponent={NestedComponent}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n </DndContext>\r\n );\r\n}\r\n\r\nexport default TableDND;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface TabStylesProps {\r\n tabs: SxProps<Theme>;\r\n tab: SxProps<Theme>;\r\n tabCount: SxProps<Theme>;\r\n}\r\n\r\nexport const tableTabsStyles: TabStylesProps = {\r\n tabs: {\r\n minHeight: \"38px\",\r\n },\r\n\r\n tab: {\r\n color: \"#888888\",\r\n padding: \"8px 12px\",\r\n minHeight: \"38px\",\r\n textTransform: \"none\",\r\n minWidth: \"unset\",\r\n whiteSpace: \"nowrap\",\r\n\r\n \"&.Mui-selected\": {\r\n color: \"#0e0c0b\",\r\n fontWeight: 700,\r\n },\r\n },\r\n\r\n tabCount: {\r\n padding: \"2px 3px\",\r\n borderRadius: \"6px\",\r\n border: \"1px solid #0E0C0BE6\",\r\n color: \"#0E0C0B\",\r\n },\r\n};\r\n","import React, { useState } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Typography,\r\n TextField,\r\n Button,\r\n IconButton,\r\n Box,\r\n SxProps,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Theme } from \"@emotion/react\";\r\n\r\n// Types for the component props\r\nexport interface ModalButton {\r\n label: string;\r\n onClick: (inputValue?: string, error?: string, setError?: any) => void;\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n color?: \"primary\" | \"secondary\" | \"error\" | \"info\" | \"success\" | \"warning\";\r\n disabled?: boolean;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport interface InputField {\r\n label: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n type?: \"text\" | \"email\" | \"password\" | \"number\";\r\n multiline?: boolean;\r\n rows?: number;\r\n defaultValue?: string;\r\n labelClassName?: string;\r\n}\r\n\r\nexport interface ConfirmModalProps {\r\n open: boolean;\r\n onClose: () => void;\r\n title: string;\r\n description?: string;\r\n buttons: ModalButton[];\r\n input?: InputField;\r\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n fullWidth?: boolean;\r\n className?: string;\r\n}\r\n\r\nconst ConfirmModal: React.FC<ConfirmModalProps> = ({\r\n open,\r\n onClose,\r\n title,\r\n description,\r\n buttons,\r\n input,\r\n maxWidth = \"sm\",\r\n fullWidth = true,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(input?.defaultValue || \"\");\r\n const [error, setError] = useState(\"\");\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const handleButtonClick = (button: ModalButton) => {\r\n if (input) {\r\n button.onClick(inputValue, error, setError);\r\n } else {\r\n button.onClick();\r\n }\r\n setInputValue(\"\");\r\n };\r\n\r\n const handleClose = () => {\r\n setInputValue(input?.defaultValue || \"\");\r\n onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={(event, reason) => {\r\n if (reason !== \"backdropClick\" && reason !== \"escapeKeyDown\") {\r\n handleClose();\r\n }\r\n }}\r\n maxWidth={maxWidth}\r\n fullWidth={fullWidth}\r\n PaperProps={{\r\n sx: {\r\n borderRadius: 2,\r\n padding: 1,\r\n },\r\n }}\r\n >\r\n <DialogTitle\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n // padding: \"16px 0px\",\r\n px: \"0px\",\r\n marginX: \"24px\",\r\n paddingBottom: description ? \"18px\" : \"20px\",\r\n borderBottom: \"1px solid #eeeeee\",\r\n }}\r\n >\r\n <Typography variant=\"h6\" component=\"h2\" fontWeight=\"bold\">\r\n {title}\r\n </Typography>\r\n <IconButton\r\n onClick={handleClose}\r\n size=\"small\"\r\n sx={{\r\n color: \"text.secondary\",\r\n }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ padding: \"0 24px 16px 24px\", mt: 2 }}>\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n color=\"text.secondary\"\r\n sx={{ marginBottom: input ? 3 : 0 }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n\r\n {input && (\r\n <Box sx={{ marginTop: description ? 0 : 2 }}>\r\n <Typography\r\n variant=\"body2\"\r\n component=\"label\"\r\n className={input.labelClassName}\r\n sx={{\r\n display: \"block\",\r\n marginBottom: 1,\r\n fontWeight: 500,\r\n color: \"text.primary\",\r\n }}\r\n >\r\n {input.label}\r\n {input.required && (\r\n <Typography component=\"span\" color=\"error.main\">\r\n {\" \"}\r\n *\r\n </Typography>\r\n )}\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n value={inputValue}\r\n onChange={handleInputChange}\r\n placeholder={input.placeholder}\r\n type={input.type || \"text\"}\r\n multiline={input.multiline}\r\n rows={input.rows}\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n maxWidth: 280,\r\n borderRadius: 1,\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n border: \"2px solid #7A5AF8\",\r\n },\r\n },\r\n }}\r\n />\r\n {error && (\r\n <Typography variant=\"body2\" color=\"error.main\">\r\n {error}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </DialogContent>\r\n\r\n <DialogActions\r\n sx={{\r\n padding: \"16px 24px 24px 24px\",\r\n gap: 1,\r\n }}\r\n >\r\n {buttons.map((button, index) => (\r\n <Button\r\n key={index}\r\n variant={button.variant || \"outlined\"}\r\n color={button.color || \"primary\"}\r\n className=\"confirm-modal-button\"\r\n sx={button.sx}\r\n onClick={() => handleButtonClick(button)}\r\n disabled={\r\n button.disabled ||\r\n (input?.required &&\r\n !inputValue.trim() &&\r\n button.variant === \"contained\")\r\n }\r\n >\r\n {button.label}\r\n </Button>\r\n ))}\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default ConfirmModal;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n children,\r\n value,\r\n index,\r\n sx,\r\n ...props\r\n}: TabPanelProps) => {\r\n return (\r\n <div\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`simple-tabpanel-${index}`}\r\n aria-labelledby={`simple-tab-${index}`}\r\n style={{ height: \"100%\" }}\r\n {...props}\r\n >\r\n {value === index && <Box sx={{ height: \"100%\", ...sx }}>{children}</Box>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import { useState } from \"react\";\r\nimport { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { CheckBox, CrossBox } from \"../../../../../assets/svg\";\r\n\r\nexport interface TabItem {\r\n label: string;\r\n}\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n tabItems: TabItem[];\r\n activeFilterIndex: number;\r\n handleCrossClick: (index: number) => void;\r\n}\r\n\r\nconst CustomTabs = ({\r\n tabItems,\r\n activeFilterIndex = -1,\r\n handleCrossClick,\r\n value,\r\n onChange,\r\n ...tabsProps\r\n}: StyledTabsProps) => {\r\n const [hoveredTab, setHoveredTab] = useState<number | null>(null);\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n variant=\"fullWidth\"\r\n sx={{\r\n px: \"12px\",\r\n borderBottom: `1px solid #ccc`,\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"black\",\r\n },\r\n }}\r\n {...tabsProps}\r\n >\r\n {tabItems.map((tab, idx) => {\r\n const isActive = activeFilterIndex === idx;\r\n const isHovered = hoveredTab === idx;\r\n\r\n return (\r\n <Tab\r\n key={idx}\r\n label={\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <span>{tab.label}</span>\r\n {isActive && (\r\n <Box\r\n onMouseEnter={() => setHoveredTab(idx)}\r\n onMouseLeave={() => setHoveredTab(null)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: isHovered ? \"pointer\" : \"default\",\r\n }}\r\n onClick={\r\n isHovered ? () => handleCrossClick(idx) : undefined\r\n }\r\n >\r\n {isHovered ? <CrossBox /> : <CheckBox />}\r\n </Box>\r\n )}\r\n </Box>\r\n }\r\n sx={{\r\n fontSize: \"14px\",\r\n textTransform: \"capitalize\",\r\n color: \"#888888\",\r\n fontWeight: \"normal\",\r\n whiteSpace: \"nowrap\",\r\n \"&.Mui-selected\": {\r\n color: \"black\",\r\n fontWeight: \"bold\",\r\n },\r\n }}\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomTabs;\r\n","export const TextFieldStyles = {\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport { TextFieldStyles } from \"./styles\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\n\r\ninterface FormTextfieldProps {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n isLoading?: boolean;\r\n onValueChange?: () => void;\r\n}\r\n\r\nconst FormTextfield = ({\r\n filter,\r\n control,\r\n isLoading = false,\r\n onValueChange,\r\n}: FormTextfieldProps) => {\r\n return (\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={filter.filter_value || \"\"}\r\n render={({ field }) => (\r\n <TextField\r\n {...field}\r\n fullWidth\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{\r\n ...TextFieldStyles,\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n }}\r\n type={filter.data_type || \"text\"}\r\n placeholder={\"Enter value\"}\r\n disabled={isLoading}\r\n onChange={(e) => {\r\n field.onChange(e);\r\n onValueChange?.();\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default FormTextfield;\r\n","import { Controller } from \"react-hook-form\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport moment from \"moment\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport { SxProps, Theme, Box } from \"@mui/material\";\r\n\r\ntype FormDatePickerProps = {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n sx?: SxProps<Theme>;\r\n views?: Array<\"year\" | \"month\" | \"day\">;\r\n onValueChange?: () => void;\r\n};\r\n\r\nconst FormDatePicker = ({\r\n filter,\r\n control,\r\n sx,\r\n views = [\"day\", \"month\", \"year\"],\r\n onValueChange,\r\n}: FormDatePickerProps) => {\r\n const isRange = filter.filter_operator === \"between\";\r\n const isRelativeToToday = filter.filter_operator === \"today\";\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <Box display=\"flex\" gap={1}>\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={\r\n isRange\r\n ? [\"\", \"\"]\r\n : isRelativeToToday\r\n ? moment().format(\"YYYY-MM-DD\")\r\n : filter.filter_value\r\n ? moment(filter.filter_value, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n render={({ field }) => {\r\n const value = field.value;\r\n const todayDate = moment().toDate();\r\n if (isRange) {\r\n const fromDate = Array.isArray(value) ? value[0] : \"\";\r\n const toDate = Array.isArray(value) ? value[1] : \"\";\r\n\r\n return (\r\n <>\r\n <DatePicker\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : fromDate\r\n ? moment(fromDate, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n const updated: [string, string] = [\r\n formatted,\r\n toDate || \"\",\r\n ];\r\n field.onChange(updated);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"From Date\",\r\n },\r\n }}\r\n />\r\n\r\n <DatePicker\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : toDate\r\n ? moment(toDate, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n const updated: [string, string] = [\r\n fromDate || \"\",\r\n formatted,\r\n ];\r\n field.onChange(updated);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"To Date\",\r\n },\r\n }}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n // Single DatePicker\r\n return (\r\n <DatePicker\r\n {...field}\r\n views={views}\r\n value={\r\n isRelativeToToday\r\n ? todayDate\r\n : field.value\r\n ? moment(field.value, \"YYYY-MM-DD\").toDate()\r\n : null\r\n }\r\n onChange={(date) => {\r\n if (isRelativeToToday) return;\r\n let formatted = \"\";\r\n if (date) {\r\n formatted =\r\n views?.length === 1 && views[0] === \"year\"\r\n ? moment(date).format(\"YYYY\")\r\n : moment(date).format(\"YYYY-MM-DD\");\r\n }\r\n field.onChange(formatted);\r\n onValueChange?.();\r\n }}\r\n disabled={isRelativeToToday}\r\n format={\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"yyyy\"\r\n : \"dd-MM-yyyy\"\r\n }\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n ...sx,\r\n }}\r\n slotProps={{\r\n textField: {\r\n size: \"small\",\r\n fullWidth: true,\r\n placeholder:\r\n views?.length === 1 && views[0] === \"year\"\r\n ? \"YYYY\"\r\n : \"DD-MM-YYYY\",\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n </Box>\r\n </LocalizationProvider>\r\n );\r\n};\r\n\r\nexport default FormDatePicker;\r\n","import { FormControl, MenuItem, Select, SxProps, Theme } from \"@mui/material\";\r\nimport { Controller, UseFormSetValue } from \"react-hook-form\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport moment from \"moment\";\r\n\r\ninterface FormDropdownProps {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n setValue: UseFormSetValue<any>;\r\n dropdownList: {\r\n label?: string;\r\n value?: string;\r\n }[];\r\n isLoading?: boolean;\r\n sx?: SxProps<Theme>;\r\n onValueChange?: () => void;\r\n}\r\n\r\nconst FormDropdown = ({\r\n filter,\r\n control,\r\n setValue,\r\n dropdownList,\r\n isLoading = false,\r\n sx,\r\n onValueChange,\r\n}: FormDropdownProps) => {\r\n return (\r\n <Controller\r\n name={`${filter?.name}.operator`}\r\n control={control}\r\n defaultValue={filter.filter_operator || dropdownList?.[0]?.value || \"\"}\r\n render={({ field }) => (\r\n <FormControl sx={sx} size=\"small\">\r\n <Select\r\n {...field}\r\n variant=\"standard\"\r\n sx={{\r\n fontSize: \"0.875rem\",\r\n minWidth: 50,\r\n border: \"none\",\r\n boxShadow: \"none\",\r\n \"& .MuiSelect-icon\": {\r\n top: \"45%\",\r\n transform: \"translateY(-50%)\",\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"12px 20px\",\r\n },\r\n },\r\n }}\r\n disabled={isLoading}\r\n disableUnderline\r\n onChange={(e) => {\r\n const newOperator = e.target.value;\r\n const oldOperator = field.value;\r\n\r\n field.onChange(e);\r\n\r\n if (\r\n (filter.data_type === \"date\" || filter.data_type === \"year\") &&\r\n newOperator !== oldOperator\r\n ) {\r\n if (newOperator === \"today\") {\r\n setValue(\r\n `${filter.name}.value`,\r\n moment().format(\"YYYY-MM-DD\"),\r\n {\r\n shouldDirty: true,\r\n }\r\n );\r\n } else if (newOperator === \"between\") {\r\n setValue(`${filter.name}.value`, [\"\", \"\"], {\r\n shouldDirty: true,\r\n });\r\n } else if (\r\n oldOperator === \"between\" ||\r\n oldOperator === \"today\"\r\n ) {\r\n setValue(`${filter.name}.value`, \"\", {\r\n shouldDirty: true,\r\n });\r\n }\r\n }\r\n\r\n onValueChange?.();\r\n }}\r\n >\r\n {dropdownList?.map((item, idx) => (\r\n <MenuItem key={idx} value={item.value}>\r\n {item.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default FormDropdown;\r\n","import { Controller } from \"react-hook-form\";\r\nimport {\r\n FormControl,\r\n Select,\r\n MenuItem,\r\n Theme,\r\n SxProps,\r\n Checkbox,\r\n} from \"@mui/material\";\r\nimport { UpdatedFilterStateProps } from \"../../../../../types/filter\";\r\nimport { DropdownOption } from \"../../../../../types/common\";\r\n\r\nconst FormMultiSelect = ({\r\n filter,\r\n control,\r\n dropdownData,\r\n sx,\r\n onValueChange,\r\n}: {\r\n filter: UpdatedFilterStateProps;\r\n control: any;\r\n dropdownData: Record<string, DropdownOption[]>;\r\n sx?: SxProps<Theme>;\r\n onValueChange?: () => void;\r\n}) => {\r\n const options = dropdownData[filter.filter_attribute] || [];\r\n\r\n return (\r\n <Controller\r\n name={`${filter?.name}.value`}\r\n control={control}\r\n defaultValue={\r\n Array.isArray(filter.filter_value)\r\n ? filter.filter_value.filter(Boolean)\r\n : []\r\n }\r\n render={({ field }) => {\r\n const cleanedValue = Array.isArray(field.value)\r\n ? field.value.filter(Boolean)\r\n : [];\r\n\r\n return (\r\n <FormControl sx={sx} fullWidth size=\"small\">\r\n <Select\r\n {...field}\r\n sx={{\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"10px 20px\",\r\n height: \"21px\",\r\n },\r\n }}\r\n multiple\r\n value={cleanedValue}\r\n onChange={(e) => {\r\n const value = e.target.value;\r\n const filtered = Array.isArray(value)\r\n ? value.filter(Boolean)\r\n : [];\r\n field.onChange(filtered);\r\n onValueChange?.();\r\n }}\r\n renderValue={(selected) => {\r\n const filtered = Array.isArray(selected)\r\n ? selected.filter(Boolean)\r\n : [];\r\n return filtered\r\n .map(\r\n (val) =>\r\n options.find((item) => item.value === val)?.label || val\r\n )\r\n .join(\", \");\r\n }}\r\n >\r\n {options.map((item, idx) => (\r\n <MenuItem key={idx} value={item.value}>\r\n <Checkbox\r\n checked={cleanedValue.includes(item.value)}\r\n sx={{ marginRight: 1 }}\r\n />\r\n {item.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default FormMultiSelect;\r\n","import React, { useState } from \"react\";\r\nimport { TextField, InputAdornment, IconButton } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport { CloseIcon } from \"../../../../../assets/svg\";\r\n\r\ninterface SearchInputProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nconst CustomSearch = ({\r\n value = \"\",\r\n onChange,\r\n placeholder = \"Search...\",\r\n}: SearchInputProps) => {\r\n const [search, setSearch] = useState(value);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n setSearch(val);\r\n onChange?.(val);\r\n };\r\n\r\n const handleClear = () => {\r\n setSearch(\"\"); // Clear the search value\r\n onChange?.(\"\"); // Propagate the cleared value\r\n };\r\n\r\n return (\r\n <TextField\r\n fullWidth\r\n size=\"small\"\r\n value={search}\r\n onChange={handleChange}\r\n placeholder={placeholder}\r\n className={\"search-input\"}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon\r\n sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n className=\"search-icon-svg\"\r\n />\r\n </InputAdornment>\r\n ),\r\n endAdornment: search && ( // Show the clear icon only when there's a value\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n edge=\"end\"\r\n onClick={handleClear}\r\n sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#c1c1c1\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default CustomSearch;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface StyleProps {\r\n filterContainer: SxProps<Theme>;\r\n filterMainHeader: SxProps<Theme>;\r\n filterMainComponentWrapper: SxProps<Theme>;\r\n filterAttributeMainSelect: SxProps<Theme>;\r\n scrollbarCustom: SxProps<Theme>;\r\n}\r\n\r\ninterface filterFormStyleType {\r\n formEditModeStyle: SxProps<Theme>;\r\n formFlexContainer: SxProps<Theme>;\r\n formListItem: SxProps<Theme>;\r\n formListItemHeader: SxProps<Theme>;\r\n formListItemHeaderName: SxProps<Theme>;\r\n formListItemHeaderDropdown: SxProps<Theme>;\r\n}\r\n\r\nexport const filterStyles: StyleProps = {\r\n scrollbarCustom: {\r\n overflowY: \"auto\",\r\n pr: 1,\r\n\r\n \"&::-webkit-scrollbar\": {\r\n width: \"4px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb\": {\r\n backgroundColor: \"#999\",\r\n borderRadius: \"4px\",\r\n },\r\n \"&::-webkit-scrollbar-track\": {\r\n backgroundColor: \"#f0f0f0\",\r\n },\r\n },\r\n\r\n filterContainer: {\r\n backgroundColor: \"#fff\",\r\n height: \"100%\",\r\n overflowY: \"hidden\",\r\n boxShadow: \"0px 3px 8px 0px rgba(34, 48, 62, 0.10)\",\r\n borderRadius: \"0.5rem\",\r\n },\r\n\r\n filterMainHeader: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n bgcolor: \"#EEEEEE\",\r\n height: \"50px\",\r\n px: 2,\r\n borderBottom: \"1px solid #ccc\",\r\n mx: \"auto\",\r\n },\r\n\r\n filterMainComponentWrapper: {\r\n height: \"calc(100% - 90px)\",\r\n overflowY: \"auto\",\r\n },\r\n\r\n filterAttributeMainSelect: {\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n \"& .MuiSelect-select\": {\r\n padding: \"8px 14px\",\r\n },\r\n },\r\n};\r\n\r\nexport const filterFormStyles: filterFormStyleType = {\r\n formEditModeStyle: {\r\n border: \"1px solid #c5c5c5\",\r\n borderRadius: \"6px\",\r\n padding: \"5px 10px 10px 10px\",\r\n },\r\n\r\n formFlexContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"0.75rem\",\r\n },\r\n\r\n formListItem: {\r\n p: 1,\r\n borderRadius: 2,\r\n backgroundColor: \"#FAFAFA\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 0.5,\r\n },\r\n\r\n formListItemHeader: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n alignItems: \"center\",\r\n gap: 2,\r\n },\r\n\r\n formListItemHeaderName: {\r\n fontWeight: 500,\r\n fontSize: \"13px\",\r\n color: \"#797877\",\r\n },\r\n\r\n formListItemHeaderDropdown: {\r\n fontSize: \"13px\",\r\n minWidth: 50,\r\n border: \"none\",\r\n boxShadow: \"none\",\r\n },\r\n};\r\n","import {\r\n Box,\r\n Button,\r\n styled,\r\n List,\r\n ListItem,\r\n Paper,\r\n ListItemText,\r\n} from \"@mui/material\";\r\nimport { useRef } from \"react\";\r\nimport { AddIcon } from \"../../../../../../assets/svg\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterColumnsListProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../../../types/table-options\";\r\nimport CustomSearch from \"../../search\";\r\nimport { filterStyles } from \"../../../style\";\r\nimport useElementWidth from \"../../../../../libs/hooks/useElementWidth\";\r\nimport { onFilterChangeFunctionProps } from \"../../../../../types/common\";\r\n\r\nconst FilterCriteria = ({\r\n columnsData,\r\n tableStates,\r\n setSelectedFilters,\r\n searchTerm,\r\n setSearchTerm,\r\n onChangeFunction,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n tableStates: CraftTableOptionsProps;\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n searchTerm: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n onChangeFunction: ({\r\n updatedFilters,\r\n filterMaster,\r\n }: onFilterChangeFunctionProps) => void;\r\n}) => {\r\n const FilterButton = styled(Button)(({ theme }) => ({\r\n borderRadius: 20,\r\n borderColor: theme.palette.primary.main,\r\n color: theme.palette.primary.main,\r\n textTransform: \"none\",\r\n padding: \"8px 16px\",\r\n \"&:hover\": {\r\n borderColor: theme.palette.primary.dark,\r\n },\r\n }));\r\n\r\n const {\r\n filters,\r\n setFilters,\r\n showFilterOptions,\r\n setShowFilterOption,\r\n filterMaster,\r\n } = tableStates;\r\n\r\n const filterButtonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const filterButtonWidth = useElementWidth(filterButtonRef);\r\n\r\n const handleAddFilter = (column: FilterColumnsListProps) => {\r\n const dropdownOptions = columnsData.operation_list[column.data_type];\r\n\r\n const defaultValue = column.data_type === \"multiselect\" ? [] : \"\";\r\n\r\n const defaultOperator = dropdownOptions?.[0]?.value || \"\";\r\n\r\n const matchingDropdownList =\r\n columnsData.operation_list[column.data_type] || [];\r\n\r\n const newFilter = {\r\n filter_attribute: column.attribute_key,\r\n filter_operator: defaultOperator,\r\n filter_value: defaultValue,\r\n };\r\n\r\n const newSelectedFilter = {\r\n ...newFilter,\r\n id: column.id,\r\n name: column.name,\r\n data_type: column.data_type,\r\n dropdown_list: matchingDropdownList,\r\n };\r\n\r\n setFilters((prev) => [...prev, newFilter]);\r\n setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // if (editMode) {\r\n // setEditFilters((prev) => [...prev, newFilter]);\r\n // setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // } else {\r\n // setFilters((prev) => [...prev, newFilter]);\r\n // setSelectedFilters((prev) => [...prev, newSelectedFilter]);\r\n // }\r\n\r\n const newFilterState = [...filters, newFilter];\r\n const newState = {\r\n filterMaster: filterMaster,\r\n filters: newFilterState,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n\r\n setShowFilterOption(false);\r\n };\r\n\r\n const toggleFilterOptions = () => {\r\n setShowFilterOption((prev) => !prev);\r\n };\r\n\r\n return (\r\n <Box>\r\n <FilterButton\r\n fullWidth\r\n startIcon={<AddIcon />}\r\n onClick={toggleFilterOptions}\r\n sx={{\r\n bgcolor: \"#eae4fe\",\r\n borderRadius: \"6px\",\r\n color: \"#7a5af8\",\r\n fontSize: \"13px\",\r\n fontWeight: 500,\r\n }}\r\n ref={filterButtonRef}\r\n >\r\n Filter Criteria\r\n </FilterButton>\r\n\r\n {showFilterOptions && (\r\n <Paper\r\n sx={{\r\n width: filterButtonWidth || 360, // Dynamic width based on button\r\n p: 1,\r\n mt: 2,\r\n cursor: \"pointer\",\r\n position: \"absolute\",\r\n zIndex: 1300,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n maxHeight: `calc(100vh - 440px)`,\r\n overflowY: \"auto\",\r\n width: \"100%\",\r\n ...filterStyles.scrollbarCustom,\r\n }}\r\n >\r\n <List>\r\n <CustomSearch\r\n placeholder=\"Filter by...\"\r\n value={searchTerm}\r\n onChange={setSearchTerm}\r\n />\r\n\r\n <Box\r\n sx={{\r\n my: 2,\r\n overflowY: \"auto\",\r\n transition: \"all 0.4s ease-in-out\",\r\n }}\r\n >\r\n {columnsData?.column_list\r\n ?.filter(\r\n (column) =>\r\n column.name.toLowerCase() !== \"action\" && // Exclude Action column in filter criteria options\r\n column.name\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase())\r\n )\r\n .map((column, index) => {\r\n const isAlreadySelected = filters?.some(\r\n (filter) =>\r\n filter.filter_attribute === column.attribute_key\r\n );\r\n\r\n return (\r\n <ListItem\r\n key={index}\r\n onClick={() =>\r\n !isAlreadySelected && handleAddFilter(column)\r\n } // Prevent click if already selected\r\n sx={{\r\n opacity: isAlreadySelected ? 0.5 : 1,\r\n cursor: isAlreadySelected ? \"not-allowed\" : \"pointer\",\r\n }}\r\n >\r\n <ListItemText primary={column.name} />\r\n </ListItem>\r\n );\r\n })}\r\n </Box>\r\n </List>\r\n </Box>\r\n </Paper>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default FilterCriteria;\r\n","import { useState, useEffect } from \"react\";\r\n\r\n// Custom hook to track the width of an element\r\nconst useElementWidth = (ref: React.RefObject<HTMLElement>) => {\r\n const [width, setWidth] = useState<number>(0);\r\n\r\n useEffect(() => {\r\n // If there's no element to observe, just return early\r\n if (!ref.current) return;\r\n\r\n // ResizeObserver callback function\r\n const resizeObserver = new ResizeObserver(() => {\r\n if (ref.current) {\r\n setWidth(ref.current.clientWidth); // Update width state\r\n }\r\n });\r\n\r\n // Start observing the element's size changes\r\n resizeObserver.observe(ref.current);\r\n\r\n // Clean up observer on component unmount\r\n return () => resizeObserver.disconnect();\r\n }, [ref, ref.current?.clientWidth]);\r\n\r\n return width; // Return the current width\r\n};\r\n\r\nexport default useElementWidth;\r\n","import {\r\n Box,\r\n Button,\r\n FormControl,\r\n IconButton,\r\n TextField,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { CloseIcon, DeleteIcon } from \"../../../../../assets/svg\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterDropdownDataProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../../types/filter\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport FormTextfield from \"./components/Textfield\";\r\nimport React, { useEffect, useMemo, useCallback } from \"react\";\r\nimport FormDatePicker from \"./components/Date\";\r\nimport FormDropdown from \"./components/Dropdown\";\r\nimport FormMultiSelect from \"./components/Multi-Select\";\r\nimport { CraftTableOptionsProps } from \"../../../../types/table-options\";\r\nimport FilterCriteria from \"./components/Filter-criteria\";\r\nimport CustomSearch from \"../search\";\r\nimport { customDebounce } from \"../../../../libs/utils/debounce\";\r\nimport { filterFormStyles } from \"../../style\";\r\nimport { onFilterChangeFunctionProps } from \"../../../../types/common\";\r\n\r\ninterface FormValues {\r\n filterName: string;\r\n [key: string]:\r\n | {\r\n value: string | string[];\r\n operator: string;\r\n }\r\n | string;\r\n}\r\n\r\nconst FilterForm = ({\r\n columnsData,\r\n dropdownData,\r\n searchTerm = \"\",\r\n setSearchTerm,\r\n criteriaSearchTerm = \"\",\r\n setCriteriaSearchTerm,\r\n selectedFilters,\r\n setSelectedFilters,\r\n handleRemoveFilter,\r\n editMode = false,\r\n tableStates,\r\n setSavedFilterModalOpen,\r\n setDeleteFilterModalOpen,\r\n onChangeFunction,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n dropdownData: FilterDropdownDataProps;\r\n searchTerm?: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n criteriaSearchTerm?: string;\r\n setCriteriaSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n selectedFilters: UpdatedFilterStateProps[];\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n handleRemoveFilter: (filter_attribute: string) => void;\r\n editMode?: boolean;\r\n tableStates: CraftTableOptionsProps;\r\n setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n onChangeFunction: ({\r\n updatedFilters,\r\n filterMaster,\r\n }: onFilterChangeFunctionProps) => void;\r\n}) => {\r\n const { filterMaster, setFilters, setFilterMaster, setPagination } =\r\n tableStates;\r\n\r\n const filterName = filterMaster?.saved_filters?.selectedName || \"\";\r\n\r\n const defaultValues = useMemo(() => {\r\n const filterValues = selectedFilters.reduce((acc, curr) => {\r\n if (curr.name) {\r\n acc[curr.name] = {\r\n value: curr.filter_value ?? \"\",\r\n operator:\r\n curr.filter_operator ?? curr.dropdown_list?.[0]?.value ?? \"\",\r\n };\r\n }\r\n return acc;\r\n }, {} as Record<string, { value: string | string[]; operator: string }>);\r\n\r\n return {\r\n filterName: filterName ?? \"\",\r\n dummyChange: \"\",\r\n ...filterValues,\r\n };\r\n }, [selectedFilters, filterName]);\r\n\r\n const { control, watch, reset, setValue, unregister } = useForm<\r\n FormValues & { dummyChange: string }\r\n >({\r\n mode: \"onChange\",\r\n defaultValues,\r\n resetOptions: {\r\n keepDirtyValues: false,\r\n keepErrors: false,\r\n },\r\n });\r\n\r\n const formValues = watch();\r\n\r\n useEffect(() => {\r\n reset(defaultValues);\r\n }, [selectedFilters]);\r\n\r\n const debouncedUpdateFilters = useCallback(\r\n customDebounce((updatedFilters: UpdatedFilterStateProps[]) => {\r\n setSelectedFilters(updatedFilters);\r\n setFilters(updatedFilters);\r\n\r\n const newState = {\r\n filterMaster: filterMaster,\r\n filters: updatedFilters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n }, 1000),\r\n [setSelectedFilters, setFilters]\r\n );\r\n\r\n const updateFiltersFromForm = useCallback(() => {\r\n const updatedFilters = selectedFilters.map((filter) => {\r\n if (filter.name && typeof formValues[filter.name] === \"object\") {\r\n const filterValue = formValues[filter.name] as {\r\n value: string | string[];\r\n operator: string;\r\n };\r\n\r\n return {\r\n ...filter,\r\n filter_value: filterValue.value,\r\n filter_operator: filterValue.operator,\r\n };\r\n }\r\n return filter;\r\n });\r\n\r\n setPagination((prev) => ({ ...prev, pageIndex: 0 }));\r\n debouncedUpdateFilters(updatedFilters);\r\n }, [formValues, selectedFilters, debouncedUpdateFilters]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n reset();\r\n selectedFilters.forEach((filter) => {\r\n if (filter.name) {\r\n unregister(filter.name);\r\n }\r\n });\r\n };\r\n }, []);\r\n\r\n return (\r\n <form\r\n onSubmit={(e) => {\r\n e.preventDefault(); // 🔥 This prevents the page from reloading\r\n }}\r\n >\r\n <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>\r\n {editMode && (\r\n <Box\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: \"0.5rem 0 1rem 0\",\r\n gap: 1,\r\n }}\r\n >\r\n <Controller\r\n name=\"filterName\"\r\n control={control}\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n size=\"small\"\r\n placeholder=\"Filter Name\"\r\n value={filterName || field.value}\r\n onChange={(e) => {\r\n field.onChange(e);\r\n if (editMode) {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.saved_filters,\r\n selectedName: e.target.value,\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n }\r\n }}\r\n inputRef={field.ref}\r\n sx={{\r\n maxWidth: 400,\r\n\r\n \"& .MuiOutlinedInput-root\": {\r\n bgcolor: \"white\",\r\n borderRadius: \"0px\",\r\n fontSize: \"14px\",\r\n color: \"#272524\",\r\n fontWeight: \"500\",\r\n \"& fieldset\": { borderColor: \"#c5c5c5\" },\r\n \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n },\r\n }}\r\n />\r\n )}\r\n />\r\n <Box onClick={(e) => e.stopPropagation()}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() =>\r\n setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)\r\n }\r\n >\r\n <DeleteIcon />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n <Box\r\n className=\"filter-criteria-form\"\r\n sx={filterFormStyles.formFlexContainer}\r\n >\r\n <FilterCriteria\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n setSelectedFilters={setSelectedFilters}\r\n searchTerm={criteriaSearchTerm}\r\n setSearchTerm={setCriteriaSearchTerm}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n\r\n {!editMode && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n <Box\r\n className=\"filter-form-inputs\"\r\n sx={filterFormStyles.formFlexContainer}\r\n >\r\n {selectedFilters\r\n .filter(\r\n (filter) =>\r\n filter.name\r\n ?.toLowerCase()\r\n .includes(searchTerm.toLowerCase()) ||\r\n filter.filter_value\r\n ?.toString()\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase())\r\n )\r\n .reverse()\r\n .map((filter) => {\r\n const { dropdown_list = [] } = filter;\r\n return (\r\n <Box\r\n key={filter.filter_attribute}\r\n sx={filterFormStyles.formListItem}\r\n >\r\n <Box sx={filterFormStyles.formListItemHeader}>\r\n <Typography sx={filterFormStyles.formListItemHeaderName}>\r\n {filter.name}\r\n </Typography>\r\n <FormDropdown\r\n filter={filter}\r\n control={control}\r\n setValue={setValue}\r\n dropdownList={dropdown_list}\r\n sx={filterFormStyles.formListItemHeaderDropdown}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n <IconButton\r\n sx={{ marginLeft: \"auto\" }}\r\n onClick={() => {\r\n unregister(`${filter.name}.value`);\r\n unregister(`${filter.name}.operator`);\r\n\r\n // ✅ Toggle dummy field to force form dirty\r\n const dummy = watch(\"dummyChange\");\r\n setValue(\r\n \"dummyChange\",\r\n dummy === \"changed\" ? \"reset\" : \"changed\",\r\n {\r\n shouldDirty: true,\r\n }\r\n );\r\n\r\n handleRemoveFilter(filter.filter_attribute);\r\n }}\r\n size=\"small\"\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n\r\n <Box>\r\n {filter.data_type === \"text\" ||\r\n filter.data_type === \"number\" ? (\r\n <FormTextfield\r\n filter={filter}\r\n control={control}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"year\" ? (\r\n <FormDatePicker\r\n filter={filter}\r\n control={control}\r\n views={[\"year\"]}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"date\" ? (\r\n <FormDatePicker\r\n filter={filter}\r\n control={control}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"select\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"multiselect\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"radio\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : filter.data_type === \"checkbox\" ? (\r\n <FormMultiSelect\r\n filter={filter}\r\n control={control}\r\n dropdownData={dropdownData}\r\n onValueChange={updateFiltersFromForm}\r\n />\r\n ) : (\r\n <FormControl fullWidth size=\"small\" />\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {selectedFilters.length > 0 && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", gap: 1, mt: 3 }}>\r\n <Button\r\n variant=\"outlined\"\r\n sx={{\r\n color: \"#7A5AF8\",\r\n border: `1px solid #7A5AF8`,\r\n borderRadius: \"6px\",\r\n textTransform: \"none\",\r\n fontSize: \"14px\",\r\n }}\r\n fullWidth\r\n onClick={() => {\r\n setFilters([]);\r\n setSelectedFilters([]);\r\n\r\n const filterMaster = {\r\n ...tableStates.filterMaster,\r\n activeFilterTabIndex: -1,\r\n };\r\n\r\n const newState = {\r\n filterMaster: filterMaster,\r\n filters: [],\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n }}\r\n >\r\n Clear All\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n fullWidth\r\n sx={{\r\n color: \"white\",\r\n backgroundColor: \"#7A5AF8\",\r\n \"&.Mui-disabled\": {\r\n backgroundColor: \"#d7cefd\",\r\n color: \"rgba(255, 255, 255, 0.7)\",\r\n },\r\n }}\r\n onClick={() => {\r\n setSavedFilterModalOpen && setSavedFilterModalOpen(true);\r\n }}\r\n >\r\n Save Filter\r\n </Button>\r\n </Box>\r\n )}\r\n </form>\r\n );\r\n};\r\n\r\nexport default FilterForm;\r\n","import { Box } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport FilterForm from \"./forms\";\r\nimport {\r\n FilterFormComponentProps,\r\n FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { filterStyles } from \"../style\";\r\n\r\nconst MainFilter = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n setSavedFilterModalOpen,\r\n onChangeFunction,\r\n}: FilterFormComponentProps) => {\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [criteriaSearchTerm, setCriteriaSearchTerm] = useState<string>(\"\");\r\n\r\n const { setFilters, setFilterMaster, filterMaster } = tableStates;\r\n\r\n useEffect(() => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n activeFilterTabIndex: 0,\r\n } as FilterMasterStateProps)\r\n );\r\n }, []);\r\n\r\n const handleRemoveFilter = (filter_attribute: string) => {\r\n setFilters((prev) =>\r\n prev.filter((filter) => filter.filter_attribute !== filter_attribute)\r\n );\r\n setSelectedFilters((prev) =>\r\n prev.filter((filter) => filter.filter_attribute !== filter_attribute)\r\n );\r\n setFilters((prev) => {\r\n const next = prev.filter((f) => f.filter_attribute !== filter_attribute);\r\n setSelectedFilters((prevSel) =>\r\n prevSel.filter((f) => f.filter_attribute !== filter_attribute)\r\n );\r\n\r\n onChangeFunction &&\r\n onChangeFunction({\r\n filterMaster: filterMaster,\r\n filters: next,\r\n });\r\n return next;\r\n });\r\n };\r\n\r\n const mainBoxStyles = {\r\n ...filterStyles.filterMainComponentWrapper,\r\n ...filterStyles.scrollbarCustom,\r\n };\r\n\r\n return (\r\n <Box sx={mainBoxStyles} className=\"main-filter-component-wrapper\">\r\n {/* Set selectedFilters state */}\r\n\r\n {/* Render selectedFilters state */}\r\n <FilterForm\r\n columnsData={columnsData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n handleRemoveFilter={handleRemoveFilter}\r\n tableStates={tableStates}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n dropdownData={dropdownData}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MainFilter;\r\n","import { Box, Typography } from \"@mui/material\";\r\nimport FilterForm from \"./forms\";\r\nimport BackArrow from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport {\r\n FilterColumnsDataProps,\r\n FilterDropdownDataProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../types/table-options\";\r\nimport { onFilterChangeFunctionProps } from \"../../../types/common\";\r\n\r\nconst SavedFilterEditComponent = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n editMode,\r\n setEditMode,\r\n searchTerm,\r\n setSearchTerm,\r\n criteriaSearchTerm,\r\n setCriteriaSearchTerm,\r\n setSavedFilterModalOpen,\r\n setDeleteFilterModalOpen,\r\n onChangeFunction,\r\n}: {\r\n columnsData: FilterColumnsDataProps;\r\n dropdownData: FilterDropdownDataProps;\r\n tableStates: CraftTableOptionsProps;\r\n selectedFilters: UpdatedFilterStateProps[];\r\n setSelectedFilters: React.Dispatch<\r\n React.SetStateAction<UpdatedFilterStateProps[]>\r\n >;\r\n editMode?: boolean;\r\n setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;\r\n searchTerm?: string;\r\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n criteriaSearchTerm?: string;\r\n setCriteriaSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n onChangeFunction: ({\r\n updatedFilters,\r\n filterMaster,\r\n }: onFilterChangeFunctionProps) => void;\r\n}) => {\r\n const { setFilters, setFilterMaster } = tableStates;\r\n\r\n const handleRemoveFilter = (filter_attribute: string) => {\r\n setFilters((prev) =>\r\n prev.filter((filter) => filter?.filter_attribute !== filter_attribute)\r\n );\r\n setSelectedFilters((prev) =>\r\n prev.filter((filter) => filter?.filter_attribute !== filter_attribute)\r\n );\r\n };\r\n\r\n const handleBackButtonClick = () => {\r\n setEditMode && setEditMode(false);\r\n setFilters([]);\r\n\r\n // const newFilterMasterState = {\r\n // ...filterMaster,\r\n // saved_filters: {\r\n // ...filterMaster?.saved_filters,\r\n // selectedId: \"\",\r\n // selectedName: \"\",\r\n // },\r\n // activeFilterTabIndex: -1,\r\n // } as FilterMasterStateProps;\r\n\r\n // setFilterMaster(newFilterMasterState);\r\n\r\n // const newState = {\r\n // filterMaster: newFilterMasterState,\r\n // filters: filters,\r\n // };\r\n\r\n // onChangeFunction && onChangeFunction(newState);\r\n\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.saved_filters,\r\n selectedId: \"\",\r\n selectedName: \"\",\r\n },\r\n activeFilterTabIndex: -1,\r\n } as FilterMasterStateProps)\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n cursor: \"pointer\",\r\n mb: 2,\r\n }}\r\n onClick={handleBackButtonClick}\r\n >\r\n <BackArrow sx={{ width: \"13px\", height: \"13px\" }} />\r\n <Typography variant=\"body2\" sx={{ color: \"#8592A3\" }}>\r\n Back To Saved Filters\r\n </Typography>\r\n </Box>\r\n </Box>\r\n\r\n {/* Render selectedFilters state */}\r\n <FilterForm\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n handleRemoveFilter={handleRemoveFilter}\r\n editMode={editMode}\r\n tableStates={tableStates}\r\n columnsData={columnsData}\r\n dropdownData={dropdownData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default SavedFilterEditComponent;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n FilterFormComponentProps,\r\n FilterMasterStateProps,\r\n FilterOperationListProps,\r\n} from \"../../../types/filter\";\r\nimport {\r\n Box,\r\n IconButton,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"./search\";\r\nimport { DeleteIcon, EditIcon } from \"../../../../assets/svg\";\r\nimport SavedFilterEditComponent from \"./saved-edit-filter\";\r\nimport { filterStyles } from \"../style\";\r\nimport { CheckBox } from \"../../../../assets/svg\";\r\n\r\nconst SavedFilter = ({\r\n columnsData,\r\n dropdownData,\r\n tableStates,\r\n selectedFilters,\r\n setSelectedFilters,\r\n editMode,\r\n setEditMode,\r\n setDeleteFilterModalOpen,\r\n setSavedFilterModalOpen,\r\n tabValue,\r\n onChangeFunction,\r\n}: FilterFormComponentProps) => {\r\n const { filters, filterMaster, setFilterMaster, setFilterToDelete } =\r\n tableStates;\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [criteriaSearchTerm, setCriteriaSearchTerm] = useState<string>(\"\");\r\n\r\n // reset savedFilterEditValue when component unmounts\r\n useEffect(() => {\r\n return () => {\r\n setFilterMaster(\r\n (prev) =>\r\n ({\r\n ...prev,\r\n saved_filters: {\r\n ...prev?.attributes,\r\n selectedId: \"\",\r\n selectedName: \"\",\r\n },\r\n } as FilterMasterStateProps)\r\n );\r\n\r\n setSelectedFilters([]);\r\n setEditMode && setEditMode(false);\r\n };\r\n }, []);\r\n\r\n const handleListItemClick = (filter: FilterOperationListProps) => {\r\n // setFilterMaster(\r\n // (prev) =>\r\n // ({\r\n // ...prev,\r\n // saved_filters: {\r\n // ...prev?.attributes,\r\n // selectedId: filter?.value,\r\n // selectedName: filter?.label,\r\n // },\r\n // attributes: {\r\n // ...filterMaster?.attributes,\r\n // radio: [],\r\n // },\r\n // activeFilterTabIndex: tabValue,\r\n // } as FilterMasterStateProps)\r\n // );\r\n\r\n const newFilterMasterState = {\r\n ...filterMaster,\r\n saved_filters: {\r\n ...filterMaster?.attributes,\r\n selectedId: filter?.value,\r\n selectedName: filter?.label,\r\n },\r\n attributes: {\r\n ...filterMaster?.attributes,\r\n radio: [],\r\n },\r\n activeFilterTabIndex: tabValue,\r\n } as FilterMasterStateProps;\r\n\r\n setFilterMaster(newFilterMasterState);\r\n\r\n const newState = {\r\n filterMaster: newFilterMasterState,\r\n filters: filters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n\r\n // setEditfilter state on edit icon click\r\n setEditMode && setEditMode(true);\r\n setFilterToDelete(filter);\r\n };\r\n\r\n const handleAppyFilter = (filter: FilterOperationListProps) => {\r\n const newFilterMasterState = {\r\n ...filterMaster,\r\n saved_filters: {\r\n ...filterMaster?.attributes,\r\n selectedId: filter?.value,\r\n selectedName: filter?.label,\r\n },\r\n attributes: {\r\n ...filterMaster?.attributes,\r\n radio: [],\r\n },\r\n activeFilterTabIndex: tabValue,\r\n } as FilterMasterStateProps;\r\n\r\n setFilterMaster(newFilterMasterState);\r\n\r\n const newState = {\r\n filterMaster: newFilterMasterState,\r\n filters: filters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n };\r\n\r\n const renderList = () => (\r\n <>\r\n <CustomSearch\r\n value={searchTerm}\r\n onChange={setSearchTerm}\r\n className=\"search-input\"\r\n />\r\n\r\n {columnsData?.saved_filter?.length === 0 ? (\r\n <Typography sx={{ mt: 2 }}>No saved filters yet.</Typography>\r\n ) : (\r\n <List\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 1,\r\n mt: 2,\r\n }}\r\n >\r\n {columnsData?.saved_filter\r\n ?.filter((filter) =>\r\n filter.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n )\r\n ?.map((filter) => (\r\n <ListItem\r\n key={filter?.value}\r\n sx={{\r\n cursor: \"pointer\",\r\n border:\r\n filter?.value ===\r\n tableStates?.filterMaster?.saved_filters?.selectedId\r\n ? `3px solid #7a5af8`\r\n : \"1px solid #C5C5C5\",\r\n borderRadius: \"8px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n alignItems: \"center\",\r\n \"&:hover .action-icons\": {\r\n opacity: 1,\r\n visibility: \"visible\",\r\n },\r\n }}\r\n onClick={() => handleAppyFilter(filter)}\r\n >\r\n {filter?.value ===\r\n tableStates?.filterMaster?.saved_filters?.selectedId && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n color: \"green\",\r\n rounded: \"full\",\r\n }}\r\n >\r\n <CheckBox />\r\n </Box>\r\n )}\r\n <ListItemText primary={filter?.label} />\r\n\r\n <Box\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"action-icons\"\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n opacity: 0,\r\n visibility: \"hidden\",\r\n transition: \"opacity 0.2s ease, visibility 0.2s ease\",\r\n }}\r\n >\r\n <IconButton\r\n size=\"large\"\r\n onClick={() => handleListItemClick(filter)}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setFilterToDelete(filter);\r\n setDeleteFilterModalOpen?.(true);\r\n }}\r\n >\r\n <DeleteIcon />\r\n </IconButton>\r\n </Box>\r\n </ListItem>\r\n ))}\r\n </List>\r\n )}\r\n </>\r\n );\r\n\r\n const mainBoxStyles = {\r\n ...filterStyles.filterMainComponentWrapper,\r\n ...filterStyles.scrollbarCustom,\r\n };\r\n\r\n return (\r\n <Box sx={mainBoxStyles} className=\"saved-filter-component-wrapper\">\r\n {/* Render search input and list */}\r\n {!editMode && renderList()}\r\n\r\n {editMode ? (\r\n <SavedFilterEditComponent\r\n columnsData={columnsData}\r\n dropdownData={dropdownData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n editMode={editMode}\r\n setEditMode={setEditMode}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n criteriaSearchTerm={criteriaSearchTerm}\r\n setCriteriaSearchTerm={setCriteriaSearchTerm}\r\n setSavedFilterModalOpen={setSavedFilterModalOpen}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n ) : null}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SavedFilter;\r\n","import {\r\n Box,\r\n FormControl,\r\n FormControlLabel,\r\n MenuItem,\r\n Radio,\r\n Select,\r\n SelectChangeEvent,\r\n} from \"@mui/material\";\r\nimport {\r\n AttributesFilterProps,\r\n FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport CustomSearch from \"./search\";\r\nimport { useMemo } from \"react\";\r\n\r\nconst AttributesFilter = ({\r\n columnsData,\r\n tableStates,\r\n dropdownData,\r\n searchTerm,\r\n setSearchTerm,\r\n tabValue,\r\n onChangeFunction,\r\n}: AttributesFilterProps) => {\r\n const { filterMaster, setFilterMaster, filters, setFilters } = tableStates;\r\n\r\n const selectedAttribute = filterMaster?.attributes?.selected;\r\n\r\n // Get the current filter value (single selection)\r\n // const currentFilterValue = useMemo(() => {\r\n // if (!selectedAttribute) return [];\r\n\r\n // const matchingColumn = columnsData?.column_list?.find(\r\n // (column) => column.datasource_list === selectedAttribute\r\n // );\r\n\r\n // if (!matchingColumn) return [];\r\n\r\n // const existingFilter = filters.find(\r\n // (filter) => filter.filter_attribute === matchingColumn.attribute_key\r\n // );\r\n\r\n // return Array.isArray(existingFilter?.filter_value)\r\n // ? existingFilter?.filter_value\r\n // : [];\r\n // }, [selectedAttribute, filters, columnsData]);\r\n\r\n const currentRadio = useMemo(() => {\r\n return Array.isArray(filterMaster?.attributes?.radio)\r\n ? (filterMaster!.attributes!.radio as string[])\r\n : [];\r\n }, [filterMaster?.attributes?.radio]);\r\n\r\n const handleSelectChange = (event: SelectChangeEvent) => {\r\n const attributeKey = event.target.value as string;\r\n\r\n const newFilterMasterState = {\r\n ...filterMaster,\r\n attributes: {\r\n ...filterMaster?.attributes,\r\n selected: attributeKey,\r\n radio: [],\r\n },\r\n };\r\n\r\n setFilterMaster(newFilterMasterState as FilterMasterStateProps);\r\n\r\n const newState = {\r\n filterMaster: newFilterMasterState,\r\n filters: filters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n };\r\n\r\n // const setFiltersForRadio = (\r\n // value: string,\r\n // columnsData: FilterColumnsDataProps,\r\n // prevFilters: FilterStateProps[]\r\n // ) => {\r\n // const selectedAttr = filterMaster?.attributes.selected;\r\n // if (!selectedAttr) return;\r\n\r\n // const matchingColumn = columnsData?.column_list?.find(\r\n // (column) => column.datasource_list === selectedAttr\r\n // );\r\n // if (!matchingColumn) return;\r\n\r\n // const defaultOperator =\r\n // columnsData.operation_list[matchingColumn.data_type]?.[0]?.value || \"in\";\r\n\r\n // const newFilter = {\r\n // filter_attribute: matchingColumn.attribute_key,\r\n // filter_operator: defaultOperator,\r\n // filter_value: [value], // single selection\r\n // };\r\n\r\n // const exists = prevFilters.some(\r\n // (f) => f.filter_attribute === matchingColumn.attribute_key\r\n // );\r\n // if (exists) {\r\n // return prevFilters.map((f) =>\r\n // f.filter_attribute === matchingColumn.attribute_key ? newFilter : f\r\n // );\r\n // } else {\r\n // return [...prevFilters, newFilter];\r\n // }\r\n // };\r\n\r\n // const setFilterMasterForRadio = (\r\n // value: string,\r\n // prevFilterMaster: FilterMasterStateProps | null\r\n // ) => {\r\n // /**\r\n // * If no attribute is selected, return the previous state without changes\r\n // * This prevents errors when trying to access properties of undefined\r\n // */\r\n // if (!prevFilterMaster || !prevFilterMaster.attributes.selected)\r\n // return prevFilterMaster;\r\n\r\n // return {\r\n // ...prevFilterMaster,\r\n // attributes: {\r\n // ...prevFilterMaster.attributes,\r\n // radio: [value],\r\n // },\r\n // activeFilterTabIndex: tabValue as number,\r\n // };\r\n // };\r\n\r\n // const handleSingleRadioSelect = (value: string) => {\r\n // const newFiltersState = setFiltersForRadio(value, columnsData, filters);\r\n // setFilters(newFiltersState || []);\r\n\r\n // const newFilterMasterState = setFilterMasterForRadio(value, filterMaster);\r\n // setFilterMaster(newFilterMasterState as FilterMasterStateProps);\r\n\r\n // const newState = {\r\n // filterMaster: newFilterMasterState,\r\n // filters: newFiltersState,\r\n // };\r\n\r\n // onChangeFunction && onChangeFunction(newState);\r\n // };\r\n\r\n const handleSingleRadioSelect = (value: string) => {\r\n const selectedAttr = filterMaster?.attributes.selected;\r\n if (!selectedAttr) return;\r\n\r\n const matchingColumn = columnsData?.column_list?.find(\r\n (column) => column.datasource_list === selectedAttr\r\n );\r\n if (!matchingColumn) return;\r\n\r\n let updatedFilters = [...filters];\r\n let updatedRadio: string[] = [];\r\n\r\n if (value === \"\") {\r\n // If deselecting, remove the filter\r\n updatedFilters = filters.filter(\r\n (f) => f.filter_attribute !== matchingColumn.attribute_key\r\n );\r\n } else {\r\n // Else, replace with new single selection\r\n const defaultOperator =\r\n columnsData.operation_list[matchingColumn.data_type]?.[0]?.value ||\r\n \"in\";\r\n\r\n const newFilter = {\r\n filter_attribute: matchingColumn.attribute_key,\r\n filter_operator: defaultOperator,\r\n filter_value: [value],\r\n };\r\n\r\n const exists = filters.some(\r\n (f) => f.filter_attribute === matchingColumn.attribute_key\r\n );\r\n if (exists) {\r\n updatedFilters = filters.map((f) =>\r\n f.filter_attribute === matchingColumn.attribute_key ? newFilter : f\r\n );\r\n } else {\r\n updatedFilters = [...filters, newFilter];\r\n }\r\n\r\n updatedRadio = [value];\r\n }\r\n\r\n setFilters(updatedFilters);\r\n\r\n const updatedFilterMaster = {\r\n ...filterMaster,\r\n attributes: {\r\n ...filterMaster.attributes,\r\n radio: updatedRadio,\r\n },\r\n activeFilterTabIndex: tabValue as number,\r\n };\r\n\r\n setFilterMaster(updatedFilterMaster);\r\n\r\n onChangeFunction &&\r\n onChangeFunction({\r\n filters: updatedFilters,\r\n filterMaster: updatedFilterMaster,\r\n });\r\n };\r\n\r\n const selectedAttributeOptions = useMemo(() => {\r\n const selected = columnsData?.column_list?.find(\r\n (col) => col.datasource_list === selectedAttribute\r\n )?.attribute_key;\r\n\r\n return selected ? dropdownData[selected] : [];\r\n }, [selectedAttribute, dropdownData]);\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"1.25rem\",\r\n }}\r\n className=\"attributes-filter-component-wrapper\"\r\n >\r\n {/* Attribute Select Dropdown */}\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={selectedAttribute || \"\"}\r\n onChange={handleSelectChange}\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <span>Select Attribute</span>;\r\n }\r\n return columnsData?.column_list?.find(\r\n (col) => col.datasource_list === selected\r\n )?.name;\r\n }}\r\n sx={{\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: \"6px\",\r\n fontSize: \"14px\",\r\n bgcolor: \"#fafafa\",\r\n \"& fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#7a5af8 !important\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n \"& .MuiSelect-select\": {\r\n padding: \"8px 14px\",\r\n },\r\n }}\r\n >\r\n {columnsData?.column_list\r\n ?.filter((column) => column.data_type.includes(\"select\"))\r\n .map((column, index) => (\r\n <MenuItem\r\n key={index}\r\n value={column.datasource_list}\r\n disabled={column.datasource_list === selectedAttribute}\r\n >\r\n {column.name}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n\r\n {/* Search and Single Radio Options */}\r\n <Box>\r\n {selectedAttribute && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n {dropdownData && (\r\n <Box\r\n className=\"attributes-filter-list\"\r\n sx={{ mt: 2, overflow: \"auto\", maxHeight: \"calc(100dvh - 300px)\" }}\r\n >\r\n <FormControl>\r\n {selectedAttributeOptions\r\n ?.filter((option) => {\r\n if (!searchTerm) return true;\r\n return option.label\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase());\r\n })\r\n .map((option) => {\r\n const isSelected = currentRadio.includes(option.value);\r\n // const isSelected = currentFilterValue.includes(option.value);\r\n\r\n return (\r\n <FormControlLabel\r\n key={option.value}\r\n control={\r\n <Radio\r\n checked={isSelected}\r\n onClick={() =>\r\n isSelected\r\n ? handleSingleRadioSelect(\"\")\r\n : handleSingleRadioSelect(option.value)\r\n }\r\n />\r\n }\r\n label={option.label}\r\n />\r\n );\r\n })}\r\n </FormControl>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default AttributesFilter;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface VerticalTabStyleProps {\r\n mainTabsContainer: SxProps<Theme>;\r\n mainTabContainer: SxProps<Theme>;\r\n mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const verticalTabStyles: VerticalTabStyleProps = {\r\n mainTabsContainer: {\r\n backgroundColor: \"#FAFAF9\",\r\n height: \"100%\",\r\n minWidth: \"6.75rem\",\r\n position: \"sticky\",\r\n top: \"0\",\r\n left: \"0\",\r\n\r\n \"& .MuiTabs-indicator\": {\r\n display: \"none\",\r\n },\r\n },\r\n\r\n mainTabContainer: {\r\n borderRadius: \"0.375rem\",\r\n padding: \"0.5rem 1.25rem\",\r\n alignItems: \"flex-start\",\r\n color: \"rgba(14, 12, 11, 0.9)\",\r\n textTransform: \"initial\",\r\n minHeight: \"38px\",\r\n\r\n \"&.Mui-selected\": {\r\n backgroundColor: \"rgba(122, 90, 248, 0.16)\",\r\n color: \"#7A5AF8\",\r\n borderRadius: \"0.375rem\",\r\n },\r\n },\r\n\r\n mainTabLabel: {},\r\n};\r\n\r\ninterface HorizontalTabStyleProps {\r\n mainTabsContainer: SxProps<Theme>;\r\n mainTabContainer: SxProps<Theme>;\r\n mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const horizontalTabStyles: HorizontalTabStyleProps = {\r\n mainTabsContainer: {\r\n mb: 2,\r\n \"& .MuiTab-root\": {\r\n color: \"#0E0C0BE5\",\r\n textTransform: \"none\",\r\n fontWeight: 500,\r\n },\r\n \"& .Mui-selected\": {\r\n color: \"#7A5AF8\",\r\n },\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"#7A5AF8\",\r\n height: 3,\r\n },\r\n },\r\n\r\n mainTabContainer: {},\r\n\r\n mainTabLabel: {},\r\n};\r\n","import { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { verticalTabStyles } from \"../styles\";\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n tabItems: { label: string }[];\r\n}\r\n\r\nconst CustomVerticalTabs = ({ tabItems, ...props }: StyledTabsProps) => {\r\n const { value, onChange } = props;\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n aria-label=\"vertical-tabs\"\r\n orientation=\"vertical\"\r\n variant=\"scrollable\"\r\n sx={verticalTabStyles.mainTabsContainer}\r\n {...props}\r\n >\r\n {tabItems.map((tab, idx) => {\r\n return (\r\n <Tab\r\n key={idx}\r\n sx={verticalTabStyles.mainTabContainer}\r\n label={\r\n <Box sx={verticalTabStyles.mainTabLabel}>\r\n <span>{tab.label}</span>\r\n </Box>\r\n }\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomVerticalTabs;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n children,\r\n value,\r\n index,\r\n ...props\r\n}: TabPanelProps) => {\r\n return (\r\n <Box\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`simple-tabpanel-${index}`}\r\n aria-labelledby={`simple-tab-${index}`}\r\n {...props}\r\n sx={{ height: \"100%\" }}\r\n >\r\n {value === index && children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Box } from \"@mui/material\";\r\nimport { DragIndicator } from \"@mui/icons-material\";\r\n\r\nexport interface SortableFilterItemProps {\r\n id: string;\r\n containerId: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst DraggableListItem = ({\r\n id,\r\n containerId,\r\n children,\r\n}: SortableFilterItemProps) => {\r\n const {\r\n attributes,\r\n listeners,\r\n setNodeRef,\r\n transform,\r\n transition,\r\n isDragging,\r\n } = useSortable({\r\n id,\r\n data: {\r\n type: \"filter-item\",\r\n containerId,\r\n id,\r\n },\r\n });\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n opacity: isDragging ? 0.8 : 1,\r\n };\r\n\r\n return (\r\n <Box\r\n ref={setNodeRef}\r\n style={style}\r\n {...attributes}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n \"&:hover\": { bgcolor: \"#f5f5f5\" },\r\n borderRadius: 1,\r\n marginBottom: 1,\r\n cursor: isDragging ? \"grabbing\" : \"default\",\r\n boxShadow: isDragging ? \"0 2px 8px rgba(0,0,0,0.1)\" : \"none\",\r\n }}\r\n >\r\n <Box\r\n {...listeners}\r\n sx={{ cursor: \"grab\", display: \"flex\", alignItems: \"center\" }}\r\n >\r\n <DragIndicator sx={{ mr: 1, color: \"#ccc\" }} />\r\n </Box>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DraggableListItem;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface DialogStyleProps {\r\n dialogTitle: SxProps<Theme>;\r\n dialogContent: SxProps<Theme>;\r\n dialogActionsButton: SxProps<Theme>;\r\n}\r\n\r\ninterface ListingValuesStyleProps {\r\n wrapper: SxProps<Theme>;\r\n heading: SxProps<Theme>;\r\n button: SxProps<Theme>;\r\n draggableContainer: SxProps<Theme>;\r\n draggableCover: SxProps<Theme>;\r\n itemLabel: SxProps<Theme>;\r\n headerContainer: SxProps<Theme>;\r\n}\r\ninterface TabStyleProps {\r\n mainTabsHeader: SxProps<Theme>;\r\n mainTabSelect: SxProps<Theme>;\r\n mainTabDropdown: SxProps<Theme>;\r\n selectDropdownSeparator: SxProps<Theme>;\r\n checkboxStyle: SxProps<Theme>;\r\n}\r\n\r\nexport const dialogStyles: DialogStyleProps = {\r\n dialogTitle: {\r\n backgroundColor: \"#FBFBFC\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"0.75rem\",\r\n },\r\n\r\n dialogContent: {\r\n display: \"flex\",\r\n gap: \"1rem\",\r\n paddingTop: \"1rem !important\",\r\n },\r\n\r\n dialogActionsButton: {\r\n backgroundColor: \"#7A5AF8\",\r\n color: \"#fff\",\r\n },\r\n};\r\n\r\nexport const listingValuesStyles: ListingValuesStyleProps = {\r\n wrapper: {\r\n border: \"0.5px solid #0E0C0B1F\",\r\n borderRadius: \"8px\",\r\n minHeight: \"10rem\",\r\n backgroundColor: \"#fdfdfc\",\r\n zIndex: 1,\r\n },\r\n heading: { fontWeight: 400, color: \"#0E0C0BB2\", fontSize: \"16px\" },\r\n button: { fontSize: \"13px\", textTransform: \"none\", color: \"#0E0C0BB2\" },\r\n draggableContainer: {\r\n maxHeight: 200,\r\n borderRadius: 1,\r\n mt: 2,\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n draggableCover: {\r\n minHeight: \"200px\",\r\n maxHeight: \"200px\",\r\n overflowY: \"auto\",\r\n },\r\n itemLabel: { display: \"flex\", alignItems: \"center\", flex: 1 },\r\n headerContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n mb: 2,\r\n },\r\n};\r\n\r\nexport const TabsStyles: TabStyleProps = {\r\n mainTabsHeader: {\r\n fontStyle: \"italic\",\r\n fontWeight: 400,\r\n fontSize: \"12px\",\r\n color: \"#0E0C0BB2\",\r\n },\r\n mainTabDropdown: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n width: \"50%\",\r\n paddingRight: 1,\r\n },\r\n mainTabSelect: {\r\n width: \"65%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n },\r\n\r\n selectDropdownSeparator: {\r\n width: \"30%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: \"#7A5AF8\",\r\n },\r\n },\r\n },\r\n\r\n checkboxStyle: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n};\r\n","import { Box, CircularProgress, Typography } from \"@mui/material\";\r\n\r\nconst Loader = ({ loaderText }: { loaderText?: string }) => {\r\n return (\r\n <Box\r\n display={\"flex\"}\r\n justifyContent=\"center\"\r\n alignItems={\"center\"}\r\n flexDirection={\"column\"}\r\n gap={2}\r\n height={\"100%\"}\r\n width={\"100%\"}\r\n >\r\n <CircularProgress />\r\n {loaderText && <Typography variant=\"h6\">{loaderText}</Typography>}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import {\r\n Alert,\r\n Box,\r\n Button,\r\n Grid,\r\n IconButton,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"../../filter/components/search/index.tsx\";\r\nimport {\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { useDroppable } from \"@dnd-kit/core\";\r\nimport DraggableListItem from \"./draggable-listitem.tsx\";\r\nimport { listingValuesStyles } from \"../style.ts\";\r\nimport Loader from \"../../common/loader/loader.tsx\";\r\nimport { ClosedEyeIcon, EyeIcon } from \"../../../../assets/svg.tsx\";\r\nimport InfoAlert from \"./info-alert.tsx\";\r\nimport React from \"react\";\r\n``;\r\n\r\ninterface FilterValue {\r\n id: string;\r\n label: string;\r\n}\r\n\r\ninterface ListingValuesProps {\r\n filteredValues: FilterValue[];\r\n buttonText: string;\r\n onClick: () => void;\r\n headerText: string;\r\n searchTerm?: string;\r\n setSearchTerm?: React.Dispatch<React.SetStateAction<string>>;\r\n containerId: string;\r\n tabsApiDataLoading?: boolean;\r\n onItemToggle: (itemId: string, fromContainerId: string) => void;\r\n enableDragAndDrop?: boolean;\r\n isQuickTabActive?: boolean;\r\n AlertComponenet?: React.ReactNode;\r\n}\r\n\r\nconst ListingValuesContent = ({\r\n item,\r\n containerId,\r\n onItemToggle,\r\n}: {\r\n item: FilterValue;\r\n containerId: string;\r\n onItemToggle: (itemId: string, fromContainerId: string) => void;\r\n}) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n flex: 1,\r\n color: containerId === \"tabs\" ? \"black\" : \"#9e9d9b\",\r\n }}\r\n >\r\n <Typography>{item.label}</Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => onItemToggle(item.id, containerId)}\r\n >\r\n {containerId === \"tabs\" ? <EyeIcon /> : <ClosedEyeIcon />}\r\n </IconButton>\r\n </Box>\r\n );\r\n};\r\n\r\nconst ListingValues = ({\r\n filteredValues,\r\n buttonText,\r\n onClick,\r\n headerText,\r\n searchTerm,\r\n setSearchTerm,\r\n containerId,\r\n tabsApiDataLoading,\r\n onItemToggle,\r\n enableDragAndDrop = true,\r\n AlertComponenet,\r\n}: ListingValuesProps) => {\r\n const { setNodeRef } = useDroppable({\r\n id: containerId,\r\n data: {\r\n type: \"container\",\r\n containerId: containerId,\r\n },\r\n });\r\n\r\n return (\r\n <Grid size={6} sx={listingValuesStyles.wrapper}>\r\n {tabsApiDataLoading ? (\r\n <Loader />\r\n ) : (\r\n <>\r\n <Box sx={{ p: 2, zIndex: 10 }}>\r\n <Box sx={listingValuesStyles.headerContainer}>\r\n <Typography variant=\"h6\" sx={listingValuesStyles.heading}>\r\n {headerText}\r\n </Typography>\r\n <Button\r\n onClick={onClick}\r\n variant=\"text\"\r\n size=\"small\"\r\n sx={listingValuesStyles.button}\r\n disabled={filteredValues.length === 0}\r\n >\r\n {buttonText}\r\n </Button>\r\n </Box>\r\n\r\n {searchTerm !== undefined && setSearchTerm !== undefined && (\r\n <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n )}\r\n\r\n <Box ref={setNodeRef} sx={listingValuesStyles.draggableContainer}>\r\n {enableDragAndDrop ? (\r\n <SortableContext\r\n items={filteredValues.map((item) => item.id)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n <Box sx={listingValuesStyles.draggableCover}>\r\n {filteredValues.map((item) => (\r\n <DraggableListItem\r\n key={item.id}\r\n id={item.id}\r\n containerId={containerId}\r\n >\r\n <ListingValuesContent\r\n item={item}\r\n containerId={containerId}\r\n onItemToggle={onItemToggle}\r\n />\r\n </DraggableListItem>\r\n ))}\r\n </Box>\r\n </SortableContext>\r\n ) : (\r\n <Box sx={listingValuesStyles.draggableCover}>\r\n {filteredValues.map((item) => (\r\n <ListingValuesContent\r\n key={item.id}\r\n item={item}\r\n containerId={containerId}\r\n onItemToggle={onItemToggle}\r\n />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n {AlertComponenet && AlertComponenet}\r\n </>\r\n )}\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default ListingValues;\r\n","import { Alert, Box } from \"@mui/material\";\r\n\r\ninterface InfoAlertProps {\r\n message: string;\r\n width?: string | number;\r\n top?: number | string;\r\n color?: string;\r\n zIndex?: number;\r\n position?: \"absolute\" | \"relative\" | \"fixed\" | \"sticky\";\r\n}\r\n\r\nconst InfoAlert = ({\r\n message,\r\n width = \"100%\",\r\n top = 10,\r\n color = \"#088AB2\",\r\n zIndex = 0,\r\n position = \"absolute\",\r\n}: InfoAlertProps) => {\r\n return (\r\n <Box\r\n sx={{\r\n fontSize: \"12px\",\r\n color,\r\n width,\r\n height: \"fit-content\",\r\n position,\r\n zIndex,\r\n top,\r\n }}\r\n >\r\n <Alert severity=\"info\">{message}</Alert>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default InfoAlert;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\n\r\nconst QuickTab = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: SettingsQuickTabProps) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as QuickTabConfigProps;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: columnsData?.column_list?.filter(\r\n (item) => item.datasource_list\r\n )[0]?.attribute_key,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Tab: Please select at least one item\"\r\n : \"Quick Tab: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || []).map((id) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowAllTabChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n isAllSelected: e.target.checked,\r\n },\r\n }));\r\n };\r\n const handleCombineOtherTabChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n isCombineOther: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"tabs\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in horizontal tabs\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n >\r\n {columnsData?.column_list\r\n ?.filter((col) => col.datasource_list != null)\r\n .map((column) => (\r\n <MenuItem\r\n key={column?.attribute_key}\r\n value={column?.attribute_key}\r\n >\r\n {column?.name}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n >\r\n {sortingOptions.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as tabs.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Tabs\"\r\n filteredValues={showListValues}\r\n containerId=\"tabs\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n AlertComponenet={\r\n <InfoAlert\r\n message=\"Please select at least 1 and at most 5 values to display as\r\n tabs.\"\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={10}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.isAllSelected || false}\r\n onChange={handleShowAllTabChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label='Show \"All\" tab'\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.isCombineOther || false}\r\n onChange={handleCombineOtherTabChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label='Combine remaining values under \"Other\" tab'\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default QuickTab;\r\n","import { Tabs, TabsProps } from \"@mui/material\";\r\nimport { horizontalTabStyles } from \"../styles\";\r\n\r\nconst CustomTabs = ({ children, ...props }: TabsProps) => {\r\n const { value, onChange } = props;\r\n\r\n return (\r\n <Tabs\r\n value={value}\r\n onChange={onChange}\r\n aria-label=\"horizontal-tabs\"\r\n variant=\"scrollable\"\r\n sx={horizontalTabStyles.mainTabsContainer}\r\n {...props}\r\n >\r\n {children}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default CustomTabs;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, Typography, Tab, Grid } from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport CustomToggleSwitchButton from \"./toggle-button-switch\";\r\nimport { FilterColumnsDataProps } from \"../../../types/filter\";\r\nimport { TOGGLE_BUTTON_TABS } from \"../constants\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport { ColumnTabConfigProps } from \"../../../types/filter-settings\";\r\nimport InfoAlert from \"../common/info-alert\";\r\n\r\nexport interface ColumnItem {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface TabData {\r\n tab_name: string;\r\n show_list: ColumnItem[];\r\n hide_list: ColumnItem[];\r\n}\r\n\r\ninterface ColumnTabProps {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: FilterColumnsDataProps;\r\n}\r\n\r\nconst ColumnTab = ({ filterSettingStates, columnsData }: ColumnTabProps) => {\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [selectedTabIndex, setSelectedTabIndex] = useState<number>(0);\r\n\r\n const {\r\n quickTabStates,\r\n settingsData,\r\n setSettingsData,\r\n saveButtonError,\r\n setSaveButtonError,\r\n } = filterSettingStates;\r\n const settingsColumnState = (settingsData?.column ||\r\n {}) as ColumnTabConfigProps;\r\n const isColumnDefault = settingsColumnState?.isDefault || false;\r\n const ERROR_CODE = \"column_error\";\r\n\r\n /**\r\n * ? What is this for?\r\n *\r\n * Three main conditions are checked here:\r\n * - If the state is empty, then set the state to default and add all columns in show_list\r\n * - if Default is selected and Default is empty, then add all columns in show_list\r\n * - If Default is not selected and tabs is empty, then add all columns in show_list\r\n * of their respective tabs\r\n */\r\n useEffect(() => {\r\n const stateToArray = Object.entries(settingsColumnState) || [];\r\n const isStateEmpty = stateToArray.length ? false : true;\r\n const isDefaultEmpty =\r\n settingsColumnState?.show_list?.length ||\r\n settingsColumnState?.hide_list?.length\r\n ? false\r\n : true;\r\n const isTabWiseEmpty = settingsColumnState?.tabs?.length ? false : true;\r\n\r\n const mappedColumns: ColumnItem[] =\r\n columnsData?.column_list?.map((column) => ({\r\n label: column?.name,\r\n value: column?.attribute_key,\r\n })) || [];\r\n\r\n if (isStateEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n isDefault: true,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n },\r\n }));\r\n } else if (isColumnDefault && isDefaultEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n },\r\n }));\r\n } else if (!isColumnDefault && isTabWiseEmpty) {\r\n const mappedTabs: TabData[] =\r\n quickTabStates?.show_list?.map((tab) => ({\r\n tab_name: tab,\r\n show_list: mappedColumns,\r\n hide_list: [],\r\n })) || [];\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: mappedTabs,\r\n },\r\n }));\r\n }\r\n }, [isColumnDefault]);\r\n\r\n useEffect(() => {\r\n const showList = settingsColumnState?.show_list || [];\r\n const hideList = settingsColumnState?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n const isValidShowList = showList?.length > 0;\r\n\r\n if (!isValidShowList) {\r\n const hasColumnError = saveButtonError.messages.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n if (!hasColumnError) {\r\n setSaveButtonError((prev) => ({\r\n ...prev,\r\n hasError: true,\r\n messages: [\r\n ...prev.messages,\r\n {\r\n type: ERROR_CODE,\r\n message: \"Column: Please select at least one column\",\r\n },\r\n ],\r\n }));\r\n }\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n\r\n // Reset error state if the list is valid\r\n setSaveButtonError((prev) => ({\r\n ...prev,\r\n hasError: hasOtherMessages,\r\n messages:\r\n prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n [],\r\n }));\r\n }\r\n }\r\n }, [settingsColumnState?.show_list, settingsColumnState?.hide_list]);\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n const handleToggleChange = (\r\n _: React.MouseEvent<HTMLElement>,\r\n newValue: boolean\r\n ) => {\r\n if (newValue !== null) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n isDefault: newValue,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const getCurrentLists = () => {\r\n if (settingsColumnState?.isDefault) {\r\n return {\r\n showList: settingsColumnState.show_list || [],\r\n hideList: settingsColumnState.hide_list || [],\r\n };\r\n } else {\r\n const currentTab = settingsColumnState?.tabs?.[selectedTabIndex];\r\n return {\r\n showList: currentTab?.show_list || [],\r\n hideList: currentTab?.hide_list || [],\r\n };\r\n }\r\n };\r\n\r\n const { showList, hideList } = getCurrentLists();\r\n\r\n const showListValues = showList.map((item) => ({\r\n id: item.value,\r\n label: item.label,\r\n visible: true,\r\n }));\r\n\r\n const hideListValues = hideList.map((item) => ({\r\n id: item.value,\r\n label: item.label,\r\n visible: false,\r\n }));\r\n\r\n const filteredListValues = hideListValues.filter((value) =>\r\n value.label.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n let newShowList = [...showList];\r\n let newHideList = [...hideList];\r\n\r\n if (fromContainerId === \"tabs\") {\r\n const idx = newShowList.findIndex((item) => item.value === itemId);\r\n if (idx > -1) {\r\n const [moved] = newShowList.splice(idx, 1);\r\n newHideList.push(moved);\r\n }\r\n } else if (fromContainerId === \"list\") {\r\n const idx = newHideList.findIndex((item) => item.value === itemId);\r\n if (idx > -1) {\r\n const [moved] = newHideList.splice(idx, 1);\r\n newShowList.push(moved);\r\n }\r\n }\r\n\r\n if (isColumnDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n const updatedTabs = [...(settingsColumnState?.tabs || [])];\r\n updatedTabs[selectedTabIndex] = {\r\n ...updatedTabs[selectedTabIndex],\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n };\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: updatedTabs,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) return;\r\n\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n\r\n const activeItem = [...showList, ...hideList].find(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (!activeItem) return;\r\n\r\n let newShowList = [...showList];\r\n let newHideList = [...hideList];\r\n\r\n if (currentContainer === overContainer) {\r\n const list = currentContainer === \"list\" ? newHideList : newShowList;\r\n const oldIndex = list.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n const newIndex = list.findIndex((item) => item.value === String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = list.splice(oldIndex, 1);\r\n list.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n const idx = newHideList.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(activeItem);\r\n }\r\n } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n const idx = newShowList.findIndex(\r\n (item) => item.value === String(active.id)\r\n );\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(activeItem);\r\n }\r\n }\r\n }\r\n\r\n if (isColumnDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n const updatedTabs = [...(settingsColumnState?.tabs || [])];\r\n updatedTabs[selectedTabIndex] = {\r\n ...updatedTabs[selectedTabIndex],\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n };\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n tabs: updatedTabs,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleShowAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: [...showList, ...hideList],\r\n hide_list: [],\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n column: {\r\n ...prev.column,\r\n show_list: [],\r\n hide_list: [...hideList, ...showList],\r\n },\r\n }));\r\n };\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n setSelectedTabIndex(newValue);\r\n };\r\n\r\n const hasShowListQuickTabs =\r\n quickTabStates?.show_list?.length !== 0 || isColumnDefault;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"0.75rem\",\r\n height: \"100%\",\r\n position: \"relative\",\r\n }}\r\n >\r\n <Box>\r\n <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\r\n Customize column by\r\n </Typography>\r\n {/* <CustomToggleSwitchButton\r\n buttons={TOGGLE_BUTTON_TABS}\r\n value={isColumnDefault}\r\n onChange={handleToggleChange}\r\n /> */}\r\n </Box>\r\n\r\n <Box sx={{ flex: 1 }}>\r\n {!isColumnDefault && hasShowListQuickTabs && (\r\n <CustomTabs value={selectedTabIndex} onChange={handleTabChange}>\r\n {quickTabStates?.show_list?.map((tab) => (\r\n <Tab key={tab} label={tab} />\r\n ))}\r\n </CustomTabs>\r\n )}\r\n\r\n {hasShowListQuickTabs ? (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid container spacing={2}>\r\n <ListingValues\r\n containerId=\"list\"\r\n headerText=\"Hidden In List\"\r\n filteredValues={filteredListValues}\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n onItemToggle={handleItemToggle}\r\n />\r\n <ListingValues\r\n containerId=\"tabs\"\r\n headerText=\"Show In List\"\r\n filteredValues={showListValues}\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n onItemToggle={handleItemToggle}\r\n AlertComponenet={\r\n <InfoAlert\r\n message={\r\n \"Please select at least 1 value to display as tabs.\"\r\n }\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={2}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n ) : (\r\n <Typography>View as Tabs empty in Quick Tab</Typography>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ColumnTab;\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n Box,\r\n Button,\r\n IconButton,\r\n MenuItem,\r\n Select,\r\n Tab,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport {\r\n ColumnTabConfigProps,\r\n SettingsSortingProps,\r\n SortingConfigProps,\r\n SortingConfigSortByProps,\r\n} from \"../../../types/filter-settings\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport {\r\n closestCenter,\r\n DndContext,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport SortableItem from \"../../sorting-modal.tsx/sorting-item\";\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { AddIcon, CloseIcon } from \"../../../../assets/svg\";\r\n\r\nconst Sorting = ({\r\n filterSettingStates,\r\n columnsData,\r\n}: SettingsSortingProps) => {\r\n const { quickTabStates, saveButtonError, settingsData, setSettingsData } =\r\n filterSettingStates;\r\n\r\n const [activeTab, setActiveTab] = useState<string | undefined>(\r\n quickTabStates?.show_list?.[0]\r\n );\r\n\r\n const columnTabState = settingsData?.column as ColumnTabConfigProps;\r\n const sortingTabState = settingsData?.sorting as SortingConfigProps;\r\n const isSortingDefault = sortingTabState?.isDefault;\r\n\r\n const isStateEmpty = useMemo(() => {\r\n return !sortingTabState || Object.entries(sortingTabState).length === 0;\r\n }, [sortingTabState]);\r\n\r\n const isEmptyDefault = useMemo(() => {\r\n return !isStateEmpty && !sortingTabState?.sortby?.length;\r\n }, [isStateEmpty, sortingTabState]);\r\n\r\n const ERROR_CODE = \"sorting_error\";\r\n\r\n useEffect(() => {\r\n const emptySortBy: SortingConfigSortByProps[] = [\r\n { column: \"\", order: \"asc\" },\r\n ];\r\n\r\n if (isStateEmpty) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n isDefault: true,\r\n sortby: emptySortBy,\r\n },\r\n }));\r\n } else if (isEmptyDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n isDefault: true,\r\n },\r\n }));\r\n\r\n if (!sortingTabState?.isDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n sortby: emptySortBy,\r\n },\r\n }));\r\n }\r\n }\r\n }, [\r\n isStateEmpty,\r\n isEmptyDefault,\r\n sortingTabState,\r\n quickTabStates,\r\n setSettingsData,\r\n ]);\r\n\r\n // sortingTabState.sortby is filtered based on columnTabState.show_list\r\n useEffect(() => {\r\n // filter sorting sortby based on column show list\r\n if (columnTabState?.isDefault) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n // remove sortby items that are not in column show list\r\n sortby: prev.sorting?.sortby?.filter((item) =>\r\n columnTabState?.show_list?.some(\r\n (columnItem) => columnItem.value === item.column\r\n )\r\n ),\r\n },\r\n }));\r\n }\r\n }, [columnTabState?.show_list]);\r\n\r\n const sensors = useSensors(useSensor(PointerSensor));\r\n\r\n const activeTabIndex = sortingTabState?.tabs?.findIndex(\r\n (tab) => tab?.tab_name === activeTab\r\n );\r\n\r\n /**\r\n * * What is happening here?\r\n *\r\n * * If isDefault is true\r\n * * - Return the sortby array from the state\r\n *\r\n * * If isDefault is false\r\n * * - Filter tabs array from sortingTabState according to activeTab index\r\n *\r\n * * If activeTab is undefined\r\n * * - Return an empty array\r\n */\r\n const tabSortedList = useMemo(() => {\r\n return isSortingDefault\r\n ? sortingTabState?.sortby\r\n : activeTab !== undefined\r\n ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n : []\r\n : [];\r\n }, [sortingTabState, activeTab]);\r\n\r\n const updateSortList = (updated: SortingConfigSortByProps[]) => {\r\n setSettingsData((prev) => {\r\n if (prev?.sorting?.isDefault) {\r\n return { ...prev, sorting: { ...prev?.sorting, sortby: updated } };\r\n } else {\r\n const tabs = [...(prev?.sorting?.tabs || [])];\r\n tabs[activeTabIndex || 0] = {\r\n ...tabs[activeTabIndex || 0],\r\n sortby: updated,\r\n };\r\n return { ...prev, sorting: { ...prev?.sorting, tabs } };\r\n }\r\n });\r\n };\r\n\r\n const handleDNDDropdownChange = (\r\n key: \"column\" | \"order\",\r\n value: string,\r\n index: number\r\n ) => {\r\n if (!tabSortedList) return;\r\n\r\n const updated = [...tabSortedList];\r\n updated[index] = { ...updated[index], [key]: value };\r\n updateSortList(updated);\r\n };\r\n\r\n const handleAddSort = () => {\r\n if (!tabSortedList) return;\r\n\r\n const newItem: SortingConfigSortByProps = {\r\n column: \"\",\r\n order: \"asc\",\r\n };\r\n\r\n updateSortList([...tabSortedList, newItem]);\r\n };\r\n\r\n const handleRemove = (columnKey: string) => {\r\n if (!tabSortedList) return;\r\n\r\n const updated = tabSortedList.filter((item) => item.column !== columnKey);\r\n updateSortList(updated);\r\n };\r\n\r\n const handleModeChange = (\r\n _: React.MouseEvent<HTMLElement>,\r\n value: boolean\r\n ) => {\r\n if (value !== null) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n sorting: {\r\n ...prev.sorting,\r\n isDefault: value,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: any) => {\r\n if (!tabSortedList) return;\r\n\r\n const { active, over } = event;\r\n if (!over || active.id === over.id) return;\r\n\r\n const oldIndex = tabSortedList.findIndex((i) => i.column === active.id);\r\n const newIndex = tabSortedList.findIndex((i) => i.column === over.id);\r\n\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const reordered = arrayMove(tabSortedList, oldIndex, newIndex);\r\n updateSortList(reordered);\r\n }\r\n };\r\n\r\n const hasShowListQuickTabs =\r\n quickTabStates?.show_list?.length !== 0 || isSortingDefault ? true : false;\r\n\r\n /**\r\n * ? What is happening here?\r\n *\r\n * If column show list is present then takes it's length\r\n * else it takes columnsData.column_list length\r\n *\r\n * compare it with sortingTabState.sortby.length\r\n *\r\n * if both are equal then showAddSortButton is false\r\n */\r\n const showAddSortButton = useMemo(() => {\r\n const stateLength =\r\n columnTabState?.show_list?.length ??\r\n columnsData?.column_list?.length ??\r\n 0;\r\n const sortLength = sortingTabState?.sortby?.length ?? 0;\r\n\r\n return sortLength !== stateLength;\r\n }, [columnTabState, columnsData, sortingTabState]);\r\n\r\n /**\r\n * ? What is happening here?\r\n *\r\n * Check if sorting_error exists in saveButtonError state\r\n * Check if sortingTabState sortby column is empty\r\n */\r\n const isAddSortDisabled = useMemo(() => {\r\n const hasEmptyColumn = sortingTabState?.sortby?.some(\r\n (item) => item.column === \"\"\r\n );\r\n\r\n return hasEmptyColumn;\r\n }, [saveButtonError, sortingTabState]);\r\n\r\n const getCurrentLists = () => {\r\n if (sortingTabState?.isDefault) {\r\n return {\r\n showList:\r\n columnTabState?.show_list ||\r\n // if columns isDefault and show_list is empty, show all columns\r\n columnsData?.column_list?.map((column) => ({\r\n label: column.name,\r\n value: column.attribute_key,\r\n })) ||\r\n [],\r\n hideList: columnTabState?.hide_list || [],\r\n };\r\n } else {\r\n const currentTab = columnTabState?.tabs?.[activeTabIndex || 0];\r\n return {\r\n showList: currentTab?.show_list || [],\r\n hideList: currentTab?.hide_list || [],\r\n };\r\n }\r\n };\r\n\r\n const { showList } = getCurrentLists();\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\r\n <Typography>Select attribute(s) you want to sort by</Typography>\r\n\r\n {/* <CustomToggleSwitchButton\r\n buttons={TOGGLE_BUTTON_TABS}\r\n value={isSortingDefault}\r\n onChange={handleModeChange}\r\n /> */}\r\n\r\n {hasShowListQuickTabs ? (\r\n <>\r\n <Box>\r\n {!isSortingDefault && (\r\n <CustomTabs\r\n value={activeTab}\r\n onChange={(_, tab) => setActiveTab(tab)}\r\n >\r\n {quickTabStates?.show_list?.map((tab) => (\r\n <Tab key={tab} label={tab} value={tab} />\r\n ))}\r\n </CustomTabs>\r\n )}\r\n\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={tabSortedList?.map((s) => s.column) || []}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n {tabSortedList?.map((sort, index) => (\r\n <SortableItem key={sort.column} id={sort.column}>\r\n <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n <Select\r\n value={sort.column}\r\n onChange={(e) =>\r\n handleDNDDropdownChange(\r\n \"column\",\r\n e.target.value,\r\n index\r\n )\r\n }\r\n size=\"small\"\r\n fullWidth\r\n >\r\n {showList\r\n ?.filter((column) => column.value != \"action\")\r\n .map((column, index) => (\r\n <MenuItem\r\n key={index}\r\n value={column.value}\r\n disabled={tabSortedList.some(\r\n (s) => s.column === column?.value\r\n )}\r\n >\r\n {column?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <Select\r\n value={sort.order}\r\n onChange={(e) =>\r\n handleDNDDropdownChange(\r\n \"order\",\r\n e.target.value,\r\n index\r\n )\r\n }\r\n size=\"small\"\r\n fullWidth\r\n >\r\n <MenuItem value=\"asc\">Ascending</MenuItem>\r\n <MenuItem value=\"dsc\">Descending</MenuItem>\r\n </Select>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => handleRemove(sort.column)}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </SortableItem>\r\n ))}\r\n </SortableContext>\r\n </DndContext>\r\n\r\n {showAddSortButton && (\r\n <Box>\r\n <Button\r\n onClick={handleAddSort}\r\n startIcon={<AddIcon />}\r\n variant=\"text\"\r\n sx={{\r\n fontSize: 13,\r\n color: \"#7A5AF8\",\r\n }}\r\n disabled={isAddSortDisabled}\r\n >\r\n Add Sort\r\n </Button>\r\n </Box>\r\n )}\r\n </Box>\r\n </>\r\n ) : (\r\n <Typography>View as Tabs empty in Quick Tab</Typography>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Sorting;\r\n","import { Dialog, Slide, styled } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\nimport React from \"react\";\r\nimport { TransitionProps } from \"@mui/material/transitions\";\r\n\r\nexport const CustomDialog = styled(Dialog)(({ theme }) => ({\r\n \"& .MuiPaper-root\": {\r\n borderRadius: 0,\r\n height: \"100%\",\r\n },\r\n \"& .MuiDialogContent-root\": {\r\n ...dialogStyles.dialogContent,\r\n padding: theme.spacing(2),\r\n },\r\n \"& .MuiDialogActions-root\": {\r\n padding: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport const DialogTransition = React.forwardRef(function Transition(\r\n props: TransitionProps & {\r\n children: React.ReactElement<any, any>;\r\n },\r\n ref: React.Ref<unknown>\r\n) {\r\n return <Slide direction=\"down\" ref={ref} {...props} />;\r\n});\r\n","import { Button, ButtonProps } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\ninterface CustomButtonProps extends ButtonProps {}\r\n\r\nconst CustomButton = ({ ...props }: CustomButtonProps) => {\r\n const customSx = { ...dialogStyles.dialogActionsButton, ...props.sx };\r\n\r\n return (\r\n <Button variant=\"contained\" {...props} sx={customSx}>\r\n {props.children}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default CustomButton;\r\n","import { ToggleButtonTabsProps } from \"../../types/filter-settings\";\r\n\r\nexport const SETTINGS_TABS: { label: string }[] = [\r\n { label: \"Quick Tab\" },\r\n { label: \"Column\" },\r\n { label: \"Sorting\" },\r\n];\r\n\r\nexport const KANBAN_SETTINGS_TABS: { label: string }[] = [\r\n { label: \"Lane\" },\r\n { label: \"Group By\" },\r\n];\r\n\r\nexport const LANE_SELECTS = [\r\n { key: \"stage_group\", value: \"Stage Group\" },\r\n { key: \"stage\", value: \"Stage\" },\r\n { key: \"source\", value: \"Source\" },\r\n { key: \"status\", value: \"Status\" },\r\n];\r\n\r\nexport const TOGGLE_BUTTON_TABS: ToggleButtonTabsProps[] = [\r\n { label: \"Default\", value: true, isDisabled: false },\r\n { label: \"Tab Wise\", value: false, isDisabled: false },\r\n];\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport { LANE_SELECTS } from \"../constants\";\r\n\r\nconst Lane = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: any;\r\n tabsApiData?: string[];\r\n tabsApiDataLoading?: boolean;\r\n}) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as any;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: LANE_SELECTS[0].value,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Lane: Please select at least one item\"\r\n : \"Quick Lane: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"lanes\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"lanes\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value: any) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item: string) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowSubLaneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showSubLane: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleShowColorColumnsChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showColorColumns: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"lanes\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in vertical lanes\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Select Attribute</em>;\r\n }\r\n return selected;\r\n }}\r\n >\r\n {LANE_SELECTS?.map((lane: any) => (\r\n <MenuItem key={lane?.key} value={lane?.value}>\r\n {lane?.value}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Sort by</em>;\r\n }\r\n const option = sortingOptions.find(\r\n (opt) => opt.value === selected\r\n );\r\n return option?.label || selected;\r\n }}\r\n >\r\n {sortingOptions.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as lanes.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Lanes\"\r\n filteredValues={showListValues}\r\n containerId=\"lanes\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n AlertComponenet={\r\n <InfoAlert\r\n message=\"Please select at least 1 and at most 5 values to display as\r\n lanes.\"\r\n width={\"49%\"}\r\n position=\"absolute\"\r\n color=\"#088AB2\"\r\n top={10}\r\n zIndex={1}\r\n />\r\n }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showSubLane || false}\r\n onChange={handleShowSubLaneChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Sublane\"\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showColorColumns || false}\r\n onChange={handleShowColorColumnsChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Color columns\"\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Lane;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Select,\r\n MenuItem,\r\n FormControl,\r\n Typography,\r\n Checkbox,\r\n FormControlLabel,\r\n Grid,\r\n Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n MouseSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n QuickTabConfigProps,\r\n SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport { LANE_SELECTS } from \"../constants\";\r\nimport { Group } from \"@mui/icons-material\";\r\n\r\nconst GroupBy = ({\r\n filterSettingStates,\r\n columnsData,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n}: {\r\n filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n columnsData: any;\r\n tabsApiData?: string[];\r\n tabsApiDataLoading?: boolean;\r\n}) => {\r\n const { settingsData, setSettingsData, saveButtonError, setSaveButtonError } =\r\n filterSettingStates;\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n settingsData?.quick_tab?.attribute || \"\"\r\n );\r\n\r\n const quickTabStates = settingsData?.quick_tab as any;\r\n\r\n // In case there is no quick tab state from API\r\n useEffect(() => {\r\n const stateToArray =\r\n (quickTabStates && Object.entries(quickTabStates)) || [];\r\n const isEmptyState = stateToArray.length ? false : true;\r\n\r\n if (isEmptyState) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: LANE_SELECTS[0].value,\r\n sorting: \"asc\",\r\n },\r\n }));\r\n }\r\n }, [columnsData]);\r\n\r\n // When user changes attribute\r\n useEffect(() => {\r\n if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n if (tabsApiData?.length) {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: tabsApiData,\r\n show_list: [],\r\n },\r\n }));\r\n\r\n setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n }\r\n }, [tabsApiData]);\r\n\r\n // Validation when user changes show list or hide list\r\n useEffect(() => {\r\n const showList = quickTabStates?.show_list || [];\r\n const hideList = quickTabStates?.hide_list || [];\r\n\r\n if (showList || hideList) {\r\n // Check if showList is valid (between 1 and 5 items)\r\n const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n const ERROR_CODE = \"quick_tab_error\";\r\n\r\n if (!isValidShowList) {\r\n const errorMessage = {\r\n type: ERROR_CODE,\r\n message:\r\n showList.length === 0\r\n ? \"Quick Lane: Please select at least one item\"\r\n : \"Quick Lane: Please select no more than 5 items\",\r\n };\r\n\r\n // Check if the error is already present in the messages array\r\n const hasQuickTabError = saveButtonError?.messages?.some(\r\n (message) => message.type === ERROR_CODE\r\n );\r\n\r\n // Update the error state\r\n\r\n // Later we can use this to show error message when we will make error logic more simple\r\n // setSaveButtonError((prev) => {\r\n // const otherMessages =\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [];\r\n\r\n // return {\r\n // ...prev,\r\n // hasError: true,\r\n // messages: hasQuickTabError\r\n // ? [...prev?.messages]\r\n // : [...otherMessages, errorMessage],\r\n // };\r\n // });\r\n } else {\r\n const hasOtherMessages = saveButtonError?.messages?.some(\r\n (message) => message.type !== ERROR_CODE\r\n );\r\n // Reset error state if the list is valid\r\n // setSaveButtonError((prev) => ({\r\n // ...prev,\r\n // hasError: hasOtherMessages,\r\n // messages:\r\n // prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n // [],\r\n // }));\r\n }\r\n }\r\n }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n const sortingOptions = [\r\n { label: \"A-Z\", value: \"asc\" },\r\n { label: \"Z-A\", value: \"dsc\" },\r\n { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n { label: \"Custom\", value: \"custom\" },\r\n ];\r\n\r\n // Convert show_list/hide_list to FilterValue[] for rendering only\r\n const showListValues = (quickTabStates?.show_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n const hideListValues = (quickTabStates?.hide_list || [])?.map((id: any) => ({\r\n id,\r\n label: id?.charAt(0)?.toUpperCase() + id?.slice(1),\r\n }));\r\n\r\n const sensors = useSensors(\r\n useSensor(MouseSensor),\r\n useSensor(TouchSensor),\r\n useSensor(KeyboardSensor)\r\n );\r\n\r\n // Drag and drop logic, update only local state\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n if (!over) {\r\n return;\r\n }\r\n const currentContainer = active.data.current?.containerId;\r\n const overContainer = over.data.current?.containerId;\r\n if (!currentContainer || !overContainer) return;\r\n if (currentContainer === overContainer) {\r\n // Reorder within the same list\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\") {\r\n const oldIndex = newHideList.indexOf(String(active.id));\r\n const newIndex = newHideList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newHideList.splice(oldIndex, 1);\r\n newHideList.splice(newIndex, 0, removed);\r\n }\r\n } else {\r\n const oldIndex = newShowList.indexOf(String(active.id));\r\n const newIndex = newShowList.indexOf(String(over.id));\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n const [removed] = newShowList.splice(oldIndex, 1);\r\n newShowList.splice(newIndex, 0, removed);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n } else {\r\n // Move between lists\r\n let newShowList = [...(quickTabStates.show_list ?? [])];\r\n let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n if (currentContainer === \"list\" && overContainer === \"lanes\") {\r\n if (newShowList.length >= 5) return; // prevent overflow\r\n // Move from hide to show\r\n\r\n const idx = newHideList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newHideList.splice(idx, 1);\r\n newShowList.push(String(active.id));\r\n }\r\n } else if (currentContainer === \"lanes\" && overContainer === \"list\") {\r\n // Move from show to hide\r\n const idx = newShowList.indexOf(String(active.id));\r\n if (idx !== -1) {\r\n newShowList.splice(idx, 1);\r\n newHideList.push(String(active.id));\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: newShowList,\r\n hide_list: newHideList,\r\n },\r\n }));\r\n }\r\n };\r\n\r\n const filteredListValues = hideListValues.filter((value: any) =>\r\n value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n // Show All/Hide All logic (local only)\r\n const handleShowAll = () => {\r\n const currentShowList = quickTabStates.show_list || [];\r\n const currentHideList = quickTabStates.hide_list || [];\r\n\r\n const availableSlots = 5 - currentShowList.length;\r\n\r\n if (availableSlots <= 0) return; // Already at limit\r\n\r\n const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: [...currentShowList, ...limitedHideList],\r\n hide_list: currentHideList.filter(\r\n (item: string) => !limitedHideList.includes(item)\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n const handleHideAll = () => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n hide_list: [\r\n ...(prev?.quick_tab?.hide_list || []),\r\n ...(prev?.quick_tab?.show_list || []),\r\n ],\r\n show_list: [],\r\n },\r\n }));\r\n };\r\n\r\n // Checkbox logic (local only)\r\n const handleShowSubLaneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showSubLane: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleShowColorColumnsChange = (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n showColorColumns: e.target.checked,\r\n },\r\n }));\r\n };\r\n\r\n const handleItemToggle = (itemId: string, fromContainerId: string) => {\r\n const toShowList = [...(quickTabStates.show_list ?? [])];\r\n const toHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n if (fromContainerId === \"list\") {\r\n if (toShowList.length >= 5) return; // prevent overflow\r\n // Move from hide_list to show_list\r\n const index = toHideList.indexOf(itemId);\r\n if (index > -1) {\r\n toHideList.splice(index, 1);\r\n toShowList.push(itemId);\r\n }\r\n } else if (fromContainerId === \"lanes\") {\r\n // Move from show_list to hide_list\r\n const index = toShowList.indexOf(itemId);\r\n if (index > -1) {\r\n toShowList.splice(index, 1);\r\n toHideList.push(itemId);\r\n }\r\n }\r\n\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n show_list: toShowList,\r\n hide_list: toHideList,\r\n },\r\n }));\r\n };\r\n\r\n const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // gap: \"0.5rem\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n *Quick filter settings will be reflected in vertical lanes\r\n </Typography>\r\n <Box>\r\n <Grid sx={{ position: \"relative\" }} container>\r\n <Grid size={12}>\r\n <Box>\r\n <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n <Select\r\n value={quickTabStates?.attribute || \"\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n attribute: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Select Attribute</em>;\r\n }\r\n return selected;\r\n }}\r\n >\r\n {LANE_SELECTS?.map((lane: any) => (\r\n <MenuItem key={lane?.key} value={lane?.value}>\r\n {lane?.value}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n sx={TabsStyles.selectDropdownSeparator}\r\n size=\"small\"\r\n >\r\n <Select\r\n value={quickTabStates?.sorting || \"asc\"}\r\n onChange={(e) =>\r\n setSettingsData((prev) => ({\r\n ...prev,\r\n quick_tab: {\r\n ...prev?.quick_tab,\r\n sorting: e.target.value,\r\n },\r\n }))\r\n }\r\n displayEmpty\r\n renderValue={(selected) => {\r\n if (!selected) {\r\n return <em>Sort by</em>;\r\n }\r\n const option = sortingOptions.find(\r\n (opt) => opt.value === selected\r\n );\r\n return option?.label || selected;\r\n }}\r\n >\r\n {sortingOptions?.map((option) => (\r\n <MenuItem key={option?.value} value={option?.value}>\r\n {option?.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n <Grid>\r\n {/* <Alert\r\n severity=\"info\"\r\n sx={{\r\n fontSize: \"12px\",\r\n color: \"#088AB2\",\r\n }}\r\n >\r\n Please select at least 1 and at most 5 values to display as lanes.\r\n </Alert> */}\r\n </Grid>\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n <ListingValues\r\n buttonText=\"Show All\"\r\n onClick={handleShowAll}\r\n headerText=\"List of Values\"\r\n filteredValues={filteredListValues}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n containerId=\"list\"\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n />\r\n <ListingValues\r\n buttonText=\"Hide All\"\r\n onClick={handleHideAll}\r\n headerText=\"View as Lanes\"\r\n filteredValues={showListValues}\r\n containerId=\"lanes\"\r\n // tabsApiDataLoading={tabsApiDataLoading}\r\n onItemToggle={handleItemToggle}\r\n enableDragAndDrop={enableDND}\r\n // AlertComponenet={\r\n // <InfoAlert\r\n // message=\"Please select at least 1 and at most 5 values to display as\r\n // lanes.\"\r\n // width={\"49%\"}\r\n // position=\"absolute\"\r\n // color=\"#088AB2\"\r\n // top={10}\r\n // zIndex={1}\r\n // />\r\n // }\r\n />\r\n </Grid>\r\n </DndContext>\r\n <Grid size={12}>\r\n <Box sx={TabsStyles.checkboxStyle}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showSubLane || false}\r\n onChange={handleShowSubLaneChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Sublane\"\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={quickTabStates?.showColorColumns || false}\r\n onChange={handleShowColorColumnsChange}\r\n size=\"small\"\r\n sx={{\r\n \"&.Mui-checked\": {\r\n color: \"#7A5AF8\",\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Show Color columns\"\r\n />\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default GroupBy;\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\ninterface KanbanStyles {\r\n syncingStyle: SxProps<Theme>;\r\n topHeader: SxProps<Theme>;\r\n laneHeader: SxProps<Theme>;\r\n badge: SxProps<Theme>;\r\n swimlaneWrapperStyle: SxProps<Theme>;\r\n columnStyle: SxProps<Theme>;\r\n stageStyle: SxProps<Theme>;\r\n stageBadge: SxProps<Theme>;\r\n cardContainer: SxProps<Theme>;\r\n cardContent: SxProps<Theme>;\r\n cardHeaderStyle: SxProps<Theme>;\r\n cardAvatar: SxProps<Theme>;\r\n statusStyle: SxProps<Theme>;\r\n codeStyle: SxProps<Theme>;\r\n nameIconContainer: SxProps<Theme>;\r\n leadName: SxProps<Theme>;\r\n iconStyle: SxProps<Theme>;\r\n leadOwnerStyle: SxProps<Theme>;\r\n calendarIcon: SxProps<Theme>;\r\n dateStyle: SxProps<Theme>;\r\n subSectionAccordion: SxProps<Theme>;\r\n subSectionCountContainer: SxProps<Theme>;\r\n cardsContainer: SxProps<Theme>;\r\n settingStyle: SxProps<Theme>;\r\n swimLaneAccordionStyle: SxProps<Theme>;\r\n subSectionHeaderContainer: SxProps<Theme>;\r\n}\r\n\r\nexport const kanbanStyles: KanbanStyles = {\r\n syncingStyle: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n gap: \"8px\",\r\n width: \"100%\",\r\n },\r\n topHeader: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n px: 1,\r\n pt: 2,\r\n bgcolor: \"white\",\r\n width: \"fit-content\",\r\n position: \"sticky\", // Add sticky positioning\r\n top: 0, // Stick to the top of the viewport\r\n right: 0,\r\n zIndex: 1100, // Ensure it stays above other content\r\n },\r\n laneHeader: {\r\n flex: 1, // Equal width distribution\r\n minWidth: \"263px\",\r\n maxWidth: \"263px\",\r\n display: \"flex\",\r\n fontWeight: 700,\r\n fontSize: \"16px\",\r\n borderRadius: \"6px\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n py: \"8px\",\r\n px: \"12px\",\r\n position: \"relative\",\r\n },\r\n badge: {\r\n position: \"absolute\",\r\n top: \"-12px\",\r\n left: \"8px\",\r\n px: 1,\r\n color: \"white\",\r\n borderRadius: \"8px\",\r\n },\r\n swimlaneWrapperStyle: {\r\n flexDirection: \"row-reverse\",\r\n bgcolor: \"white\",\r\n minHeight: 44, // overall height\r\n px: 2,\r\n py: 0, // remove vertical padding\r\n \"&.Mui-expanded\": {\r\n minHeight: 44,\r\n },\r\n \"& .MuiAccordionSummary-content\": {\r\n margin: \"8px 0\", // reduced vertical spacing\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n gap: 5,\r\n \"&.Mui-expanded\": {\r\n margin: \"8px 0\", // maintain same margin when expanded\r\n },\r\n },\r\n \"& .MuiAccordionSummary-expandIconWrapper\": {\r\n mr: 0, // reduce gap between icon and content\r\n },\r\n },\r\n columnStyle: {\r\n flex: 1, // Equal width distribution\r\n p: \"12px\",\r\n // px: \"2px\",\r\n minHeight: \"500px\",\r\n // borderRight: \"1px solid #e0e0e0\",\r\n\r\n borderRadius: \"6px\",\r\n minWidth: \"263px\",\r\n maxWidth: \"263px\",\r\n },\r\n stageStyle: {\r\n mb: 2,\r\n bgcolor: \"#f9fafb\",\r\n borderTopLeftRadius: \"8px !important\",\r\n borderBottomLeftRadius: \"8px !important\",\r\n borderTopRightRadius: \"8px !important\",\r\n // borderRadius: 2,\r\n overflow: \"hidden\",\r\n boxShadow: \"none\",\r\n \"&:before\": { display: \"none\" }, // remove default divider line\r\n },\r\n stageBadge: {\r\n \"& .MuiBadge-badge\": {\r\n color: \"black\",\r\n fontWeight: \"bold\",\r\n fontSize: \"0.75rem\",\r\n },\r\n },\r\n cardContainer: {\r\n borderRadius: 2,\r\n bgcolor: \"#fff\",\r\n position: \"relative\",\r\n\r\n boxShadow:\r\n \"0px 1.36px 2.72px rgba(23, 23, 23, 0.06), 0px 2.72px 5.44px rgba(23, 23, 23, 0.1)\",\r\n border: \"none\", // explicitly remove border\r\n },\r\n cardContent: {\r\n p: \"12px !important\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"4px\",\r\n },\r\n cardHeaderStyle: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-start\",\r\n // mb: 1,\r\n },\r\n cardAvatar: {\r\n width: \"18px\",\r\n height: \"18px\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n bgcolor: \"#e5e7eb\",\r\n color: \"#374151\",\r\n mr: 1,\r\n },\r\n statusStyle: {\r\n height: 20,\r\n fontSize: \"0.6875rem\",\r\n\r\n fontWeight: 500,\r\n },\r\n codeStyle: {\r\n fontSize: \"12px\",\r\n color: \"#6b7280\",\r\n fontWeight: 500,\r\n mb: 0.5,\r\n cursor: \"pointer\",\r\n },\r\n nameIconContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-start\",\r\n borderBottom: \"1px solid #e5e7eb\",\r\n pb: 2,\r\n },\r\n leadName: {\r\n fontSize: \"15px\",\r\n fontWeight: 500,\r\n color: \"#1f2937\",\r\n lineHeight: 1.3,\r\n },\r\n iconStyle: {\r\n color: \"#6b7280\",\r\n bgcolor: \"#f3f4f6\",\r\n borderRadius: \"50%\",\r\n width: \"20px\",\r\n height: \"20px\",\r\n p: 0.6,\r\n },\r\n leadOwnerStyle: {\r\n fontSize: \"12px\",\r\n color: \"#374151\",\r\n fontWeight: 500,\r\n },\r\n calendarIcon: {\r\n width: \"14px\",\r\n height: \"14px\",\r\n color: \"#7b7a79\",\r\n mr: 0.5,\r\n },\r\n dateStyle: {\r\n fontSize: \"12px\",\r\n color: \"#7b7a79\",\r\n\r\n fontWeight: 500,\r\n },\r\n subSectionAccordion: {\r\n height: \"52px\", // fixed height\r\n minHeight: \"52px\", // prevent auto-expansion\r\n \"&.Mui-expanded\": {\r\n minHeight: \"52px\", // fix expanded state height\r\n height: \"52px\",\r\n },\r\n border: \"1px solid #e2e8f0\",\r\n borderTopRightRadius: \"8px\",\r\n px: 2,\r\n },\r\n subSectionCountContainer: {\r\n // px: 1,\r\n color: \"white\",\r\n height: \"26px\",\r\n width: \"26px !important\",\r\n fontSize: \"10px\",\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: \"50%\",\r\n },\r\n cardsContainer: {\r\n px: 1,\r\n gap: \"12px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n p: \"8px\",\r\n },\r\n settingStyle: {\r\n bgcolor: \"#f8fafc\",\r\n width: \"56px\",\r\n height: \"41px\",\r\n borderRadius: \"6px\",\r\n border: \"1px solid #e2e8f0\",\r\n },\r\n swimLaneAccordionStyle: {\r\n mb: 1,\r\n \"&:before\": { display: \"none\" },\r\n py: 0,\r\n boxShadow: \"none\",\r\n },\r\n subSectionHeaderContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n },\r\n};\r\n","export const rawData = {\r\n lanes: [\r\n { id: 1, name: \"Enquiry\", color: \"#fff0f3\", darkColor: \"#fea3b4\" },\r\n { id: 2, name: \"Qualified Lead\", color: \"#fffbed\", darkColor: \"#fde272\" },\r\n { id: 3, name: \"Application\", color: \"#ebf9fc\", darkColor: \"#67e3f9\" },\r\n { id: 4, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n { id: 5, name: \"Documents\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n { id: 6, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n ],\r\n swim_lanes: [\r\n {\r\n id: 12,\r\n name: \"Active\",\r\n sub_lanes: [\r\n {\r\n id: 1,\r\n name: \"Lead Assignment\",\r\n color: \"red\",\r\n lane_id: 1,\r\n expanded: true,\r\n },\r\n {\r\n id: 2,\r\n name: \"Initial Outreach\",\r\n color: \"green\",\r\n lane_id: 1,\r\n expanded: true,\r\n },\r\n {\r\n id: 3,\r\n name: \"Lead Assessment\",\r\n color: \"yellow\",\r\n lane_id: 2,\r\n expanded: true,\r\n },\r\n {\r\n id: 4,\r\n name: \"Campus Visit\",\r\n color: \"#FFE885\",\r\n lane_id: 2,\r\n expanded: true,\r\n },\r\n {\r\n id: 5,\r\n name: \"Application Collection\",\r\n color: \"#90E0F3\",\r\n lane_id: 3,\r\n expanded: true,\r\n },\r\n {\r\n id: 6,\r\n name: \"Student Assessment\",\r\n color: \"#90E0F3\",\r\n lane_id: 3,\r\n expanded: true,\r\n },\r\n {\r\n id: 7,\r\n name: \"Fee Collection\",\r\n color: \"#90EE90\",\r\n lane_id: 4,\r\n expanded: true,\r\n },\r\n {\r\n id: 8,\r\n name: \"System Integration\",\r\n color: \"#90EE90\",\r\n lane_id: 4,\r\n expanded: true,\r\n },\r\n ],\r\n },\r\n {\r\n id: 13,\r\n name: \"Dormant\",\r\n sub_lanes: [],\r\n },\r\n {\r\n id: 14,\r\n name: \"Disqualify\",\r\n sub_lanes: [],\r\n },\r\n {\r\n id: 15,\r\n name: \"Lost\",\r\n sub_lanes: [],\r\n },\r\n ],\r\n data: [\r\n // Lead Assignment\r\n {\r\n id: 1,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 1,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n {\r\n id: 2,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 1,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Initial Outreach\r\n {\r\n id: 3,\r\n name: \"Rashmi Desai\",\r\n sub_lane_id: 2,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9765874320\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Lead Assessment\r\n {\r\n id: 4,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 3,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Campus Visit\r\n {\r\n id: 5,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 4,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Lost\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"2DQ2024XY\",\r\n priority: null,\r\n lost: true,\r\n },\r\n {\r\n id: 6,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 4,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846213495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Application Collection\r\n {\r\n id: 7,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 5,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n {\r\n id: 8,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 5,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Student Assessment\r\n {\r\n id: 9,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 6,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9452013495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"10 Days\",\r\n reference_id: \"INQ2024XY\",\r\n priority: null,\r\n lost: false,\r\n },\r\n // Fee Collection\r\n {\r\n id: 10,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 7,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846015495\",\r\n status: \"Active\",\r\n progress: 0,\r\n days: \"You\",\r\n reference_id: \"INQ2024XY\",\r\n priority: \"High\",\r\n lost: false,\r\n },\r\n // System Integration\r\n {\r\n id: 11,\r\n name: \"Aditi Sharma\",\r\n sub_lane_id: 8,\r\n email: \"aditisharma@gmail.com\",\r\n phone: \"+91 9846015495\",\r\n status: \"Lost\",\r\n progress: 0,\r\n days: \"You\",\r\n reference_id: \"INQ2024XY\",\r\n priority: \"Low\",\r\n lost: true,\r\n },\r\n ],\r\n};\r\n\r\nexport const COLOR_CONSTANTS = [\r\n { color: \"#fff0f3\", darkColor: \"#fea3b4\" },\r\n { color: \"#fffbed\", darkColor: \"#fde272\" },\r\n { color: \"#ebf9fc\", darkColor: \"#67e3f9\" },\r\n { color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n];\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, IconButton, Typography } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport {\r\n FilterDrawerProps,\r\n FilterMasterStateProps,\r\n UpdatedFilterStateProps,\r\n} from \"../../types/filter\";\r\n\r\nimport ConfirmModal, { InputField } from \"../common/confirm-modal\";\r\nimport CustomTabPanel from \"./components/tabs/custom-tab-panel\";\r\nimport CustomTabs, { TabItem } from \"./components/tabs/index\";\r\nimport MainFilter from \"./components/main-filter\";\r\nimport SavedFilter from \"./components/saved-filter\";\r\nimport AttributesFilter from \"./components/attributes-filter\";\r\nimport { filterStyles } from \"./style\";\r\n\r\nexport function TableFilter({\r\n onClose,\r\n columnsData,\r\n tableStates,\r\n onDeleteFilter,\r\n onSaveFilter,\r\n onUpdateFilter,\r\n dropdownData,\r\n onChangeFunction,\r\n}: FilterDrawerProps) {\r\n const [tabValue, setTabValue] = useState(0);\r\n const [editMode, setEditMode] = useState(false);\r\n const [selectedFilters, setSelectedFilters] = useState<\r\n UpdatedFilterStateProps[]\r\n >([]);\r\n\r\n // tabs\r\n const FILTER_TAB = 0;\r\n const SAVED_TAB = 1;\r\n const ATTR_TAB = 2;\r\n\r\n // remove this\r\n const [saveFilterModalOpen, setSaveFilterModalOpen] = useState(false);\r\n const [deleteFilterModalOpen, setDeleteFilterModalOpen] = useState(false);\r\n\r\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n\r\n const {\r\n filters,\r\n setFilters,\r\n filterToDelete,\r\n filterMaster,\r\n setFilterMaster,\r\n setShowFilterOption,\r\n } = tableStates;\r\n\r\n const clearAttributeRadio = () => {\r\n const newFilterMaster = {\r\n ...filterMaster,\r\n attributes: {\r\n ...filterMaster?.attributes,\r\n radio: [],\r\n },\r\n activeFilterTabIndex: FILTER_TAB,\r\n };\r\n\r\n setFilterMaster(newFilterMaster as FilterMasterStateProps);\r\n\r\n // const newState = {\r\n // filterMaster: newFilterMaster,\r\n // filters: filters,\r\n // };\r\n\r\n // onChangeFunction && onChangeFunction(newState);\r\n };\r\n\r\n const filterNameInput: InputField = {\r\n label: \"Filter Name\",\r\n placeholder: 'e.g., \"Website Leads - This Week\"',\r\n required: true,\r\n type: \"text\",\r\n };\r\n\r\n useEffect(() => {\r\n if (!columnsData || !columnsData?.column_list) {\r\n setSelectedFilters([]);\r\n return;\r\n }\r\n\r\n const updated = filters?.map((filter) => {\r\n const matchingColumn = columnsData?.column_list.find(\r\n (column) => column.attribute_key === filter.filter_attribute\r\n );\r\n const matchingDropdownList =\r\n columnsData.operation_list[matchingColumn?.data_type || \"text\"];\r\n\r\n return {\r\n ...filter,\r\n id: matchingColumn?.id ?? \"\",\r\n name: matchingColumn?.name,\r\n data_type: matchingColumn?.data_type,\r\n dropdown_list: matchingDropdownList,\r\n };\r\n });\r\n\r\n setSelectedFilters(updated || []);\r\n }, [filters, columnsData, tabValue]);\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n if (tabValue === ATTR_TAB && newValue === FILTER_TAB) {\r\n clearAttributeRadio();\r\n }\r\n\r\n setTabValue(newValue);\r\n if (newValue === 0) {\r\n setEditMode(false);\r\n setSelectedFilters([]);\r\n }\r\n };\r\n\r\n //FOR TABS\r\n const tabItems: TabItem[] = [\r\n { label: \"Filter\" },\r\n { label: \"Saved Filter\" },\r\n { label: \"Attributes\" },\r\n ];\r\n\r\n const handleTabCrossClick = (index: number) => {\r\n // always-clear bits\r\n setFilters([]);\r\n setSelectedFilters([]);\r\n\r\n // only tab 1 needs this\r\n if (index === 1) setEditMode(false);\r\n\r\n const patches: Record<number, Partial<FilterMasterStateProps>> = {\r\n 0: {}, // no extra fields\r\n 1: { saved_filters: { selectedId: \"\", selectedName: \"\" } },\r\n 2: { attributes: { radio: [], selected: \"\" } },\r\n };\r\n\r\n const newFilterMasterState = {\r\n ...filterMaster,\r\n activeFilterTabIndex: -1,\r\n ...(patches[index] ?? {}),\r\n } as FilterMasterStateProps;\r\n\r\n setFilterMaster(newFilterMasterState);\r\n\r\n const newState = {\r\n filterMaster: newFilterMasterState,\r\n filters: filters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n };\r\n\r\n return (\r\n <Box sx={filterStyles.filterContainer}>\r\n <Box sx={filterStyles.filterMainHeader}>\r\n <Typography variant=\"h6\" fontWeight=\"bold\" fontSize=\"18px\">\r\n Filter\r\n </Typography>\r\n <IconButton\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose && onClose();\r\n setShowFilterOption(false);\r\n }}\r\n aria-label=\"close\"\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n <CustomTabs\r\n value={tabValue}\r\n onChange={handleTabChange}\r\n tabItems={tabItems}\r\n activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}\r\n handleCrossClick={handleTabCrossClick}\r\n />\r\n\r\n <CustomTabPanel value={tabValue} index={0} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <MainFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n setSavedFilterModalOpen={setSaveFilterModalOpen}\r\n dropdownData={dropdownData}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n </CustomTabPanel>\r\n\r\n <CustomTabPanel value={tabValue} index={1} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <SavedFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n selectedFilters={selectedFilters}\r\n setSelectedFilters={setSelectedFilters}\r\n editMode={editMode}\r\n setEditMode={setEditMode}\r\n setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n setSavedFilterModalOpen={setSaveFilterModalOpen}\r\n dropdownData={dropdownData}\r\n tabValue={tabValue}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n </CustomTabPanel>\r\n\r\n <CustomTabPanel value={tabValue} index={2} sx={{ p: \"1.5rem 0.75rem\" }}>\r\n <AttributesFilter\r\n columnsData={columnsData}\r\n tableStates={tableStates}\r\n dropdownData={dropdownData}\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n tabValue={tabValue}\r\n onChangeFunction={onChangeFunction}\r\n />\r\n </CustomTabPanel>\r\n\r\n <ConfirmModal\r\n open={saveFilterModalOpen}\r\n onClose={() => setSaveFilterModalOpen(false)}\r\n title={editMode ? \"Replace Existing Filter ?\" : \"Save Filter\"}\r\n description={\r\n editMode\r\n ? \"You already have a filter applied. Applying a new filter will replace the current one. Do you want to continue?\"\r\n : \"Give a name to this filter so you can easily reuse it later.\"\r\n }\r\n buttons={[\r\n {\r\n label: \"Cancel\",\r\n onClick: () => {\r\n setSaveFilterModalOpen(false);\r\n },\r\n variant: \"outlined\",\r\n color: \"primary\",\r\n sx: {\r\n color: \"#7A5AF8\",\r\n border: `1px solid #7A5AF8`,\r\n },\r\n },\r\n {\r\n label: editMode ? \"Replace Filter\" : \"Save\",\r\n onClick: (inputValue) => {\r\n if (editMode) {\r\n const selectedId = filterMaster?.saved_filters?.selectedId;\r\n const selectedName =\r\n inputValue || filterMaster?.saved_filters?.selectedName;\r\n\r\n const newFilterMasterState = {\r\n ...filterMaster,\r\n saved_filters: {\r\n ...filterMaster?.attributes,\r\n selectedId,\r\n selectedName,\r\n },\r\n } as FilterMasterStateProps;\r\n\r\n setFilterMaster(newFilterMasterState);\r\n\r\n const newState = {\r\n filterMaster: newFilterMasterState,\r\n filters: filters,\r\n };\r\n\r\n onChangeFunction && onChangeFunction(newState);\r\n\r\n onUpdateFilter && onUpdateFilter(inputValue || \"\");\r\n setSaveFilterModalOpen(false);\r\n setEditMode(false);\r\n return;\r\n }\r\n\r\n onSaveFilter && onSaveFilter(inputValue || \"\");\r\n setSaveFilterModalOpen(false);\r\n setTabValue(1);\r\n },\r\n variant: \"contained\",\r\n color: \"primary\",\r\n sx: {\r\n color: \"white\",\r\n backgroundColor: editMode ? \"#7A5AF8\" : \"#7A5AF8\",\r\n },\r\n },\r\n ]}\r\n input={editMode ? undefined : filterNameInput}\r\n />\r\n\r\n <ConfirmModal\r\n open={deleteFilterModalOpen}\r\n onClose={() => setDeleteFilterModalOpen(false)}\r\n title=\"Delete Saved Filter?\"\r\n description={`You're about to delete the saved filter: \"${\r\n filterToDelete?.label || \"[Filter Name]\"\r\n }\". This action cannot be undone. Are you sure you want to continue?`}\r\n buttons={[\r\n {\r\n label: \"Cancel\",\r\n onClick: () => {\r\n setDeleteFilterModalOpen(false);\r\n },\r\n variant: \"outlined\",\r\n color: \"primary\",\r\n sx: { color: \"#7A5AF8\", border: `1px solid #7A5AF8` },\r\n },\r\n {\r\n label: \"Delete\",\r\n onClick: () => {\r\n onDeleteFilter && onDeleteFilter();\r\n setDeleteFilterModalOpen(false);\r\n setEditMode && setEditMode(false);\r\n },\r\n variant: \"contained\",\r\n sx: {\r\n color: \"white\",\r\n backgroundColor: \"#f63d68\",\r\n \"&:hover\": { backgroundColor: \"#f63d68\" },\r\n },\r\n },\r\n ]}\r\n maxWidth=\"xs\"\r\n />\r\n </Box>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport {\r\n DialogTitle,\r\n IconButton,\r\n Box,\r\n Typography,\r\n DialogContent,\r\n DialogActions,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport CustomVerticalTabs from \"./tabs/vertical\";\r\nimport CustomTabPanel from \"./tabs/vertical/custom-tab-panel\";\r\nimport QuickTab from \"./components/quick-tab\";\r\nimport Column from \"./components/column\";\r\nimport Sorting from \"./components/sorting\";\r\nimport { QuickFilterModalProps } from \"../../types/filter-settings\";\r\nimport { CustomDialog, DialogTransition } from \"./components/custom-dialog\";\r\nimport { dialogStyles } from \"./style\";\r\nimport CustomButton from \"./components/custom-button\";\r\nimport { KANBAN_SETTINGS_TABS, SETTINGS_TABS } from \"./constants\";\r\nimport Loader from \"../common/loader/loader\";\r\nimport Lane from \"./components/lane\";\r\nimport GroupBy from \"./components/group-by\";\r\n\r\nexport function QuickFilterSettings({\r\n view = \"listing\",\r\n show,\r\n filterSettingStates,\r\n onClose,\r\n columnsData,\r\n columnsDataLoading,\r\n tabsApiData,\r\n tabsApiDataLoading,\r\n onSaveSettingsData,\r\n}: QuickFilterModalProps) {\r\n const [tabValue, setTabValue] = useState(0);\r\n\r\n const {\r\n showListViewSettings,\r\n quickTabStates,\r\n columnTabState,\r\n sortingTabState,\r\n saveButtonError,\r\n } = filterSettingStates;\r\n\r\n const hasAPIData = Boolean(Object.entries(columnsData).length);\r\n\r\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n const handleSaveSetSettingsData = () => {\r\n const copyColumnTabState = columnTabState?.isDefault\r\n ? {\r\n isDefault: true,\r\n show_list: columnTabState?.show_list || [],\r\n hide_list: columnTabState?.hide_list || [],\r\n }\r\n : {\r\n isDefault: false,\r\n tabs: columnTabState?.tabs || [],\r\n };\r\n\r\n const copySortingTabState = sortingTabState?.isDefault\r\n ? {\r\n isDefault: true,\r\n sortby:\r\n sortingTabState?.sortby?.filter((item) => item.column !== \"\") || [],\r\n }\r\n : null;\r\n\r\n const modifiedSettingsData = {\r\n quick_tab: quickTabStates,\r\n column: copyColumnTabState,\r\n sorting: copySortingTabState,\r\n };\r\n\r\n onSaveSettingsData && onSaveSettingsData(modifiedSettingsData);\r\n onClose && onClose();\r\n };\r\n\r\n return (\r\n <CustomDialog\r\n open={show || showListViewSettings}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n slots={{\r\n transition: DialogTransition,\r\n }}\r\n >\r\n <DialogTitle sx={dialogStyles.dialogTitle}>\r\n <Typography sx={{ fontSize: \"1.125rem\" }}>List View Setting</Typography>\r\n <IconButton\r\n size=\"small\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n onClose && onClose();\r\n }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent>\r\n {columnsDataLoading ? (\r\n <Loader loaderText=\"Loading settings...\" />\r\n ) : !hasAPIData ? ( // check if columns data is available\r\n <Typography>Please pass meta data in component</Typography>\r\n ) : (\r\n <>\r\n <CustomVerticalTabs\r\n value={tabValue}\r\n onChange={handleTabChange}\r\n tabItems={\r\n view === \"listing\" ? SETTINGS_TABS : KANBAN_SETTINGS_TABS\r\n }\r\n />\r\n\r\n <Box sx={{ flex: \"1\" }}>\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={0}>\r\n {tabValue === 0 && (\r\n <QuickTab\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n tabsApiData={tabsApiData}\r\n tabsApiDataLoading={tabsApiDataLoading}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={1}>\r\n {tabValue === 1 && (\r\n <Column\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"listing\" && (\r\n <CustomTabPanel value={tabValue} index={2}>\r\n {tabValue === 2 && (\r\n <Sorting\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n {view.toLowerCase() === \"kanban\" && (\r\n <CustomTabPanel value={tabValue} index={0}>\r\n {tabValue === 0 && (\r\n <Lane\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n\r\n {view.toLowerCase() === \"kanban\" && (\r\n <CustomTabPanel value={tabValue} index={1}>\r\n {tabValue === 1 && (\r\n <GroupBy\r\n filterSettingStates={filterSettingStates}\r\n columnsData={columnsData}\r\n />\r\n )}\r\n </CustomTabPanel>\r\n )}\r\n </Box>\r\n </>\r\n )}\r\n </DialogContent>\r\n\r\n {!columnsDataLoading && hasAPIData && (\r\n <DialogActions>\r\n <CustomButton\r\n // disabled={saveButtonError?.hasError}\r\n disabled={saveButtonError?.hasError}\r\n onClick={handleSaveSetSettingsData}\r\n >\r\n {view === \"listing\" ? \"Save Quick Filter\" : \"Save Kanban Layout\"}\r\n </CustomButton>\r\n </DialogActions>\r\n )}\r\n </CustomDialog>\r\n );\r\n}\r\n","import \"./index.scss\";\r\nimport { Box, CircularProgress, IconButton, Tab, Tabs } from \"@mui/material\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\r\nimport { settingsOptionsProps } from \"../../types/table\";\r\nimport { tableTabsStyles } from \"./styles\";\r\nimport { useMemo } from \"react\";\r\nimport { SettingIcon } from \"../../../assets/svg\";\r\n\r\ninterface TabDataProps {\r\n tab_value: string | null;\r\n tab_value_count: string | number;\r\n}\r\n\r\ninterface TableTabsProps {\r\n loading?: boolean;\r\n tabsData?: TabDataProps[];\r\n activeTab?: string;\r\n tableStates: CraftTableOptionsProps;\r\n onClick: (state: string) => void;\r\n columns?: any[];\r\n settingsOptions?: settingsOptionsProps;\r\n}\r\n\r\nexport function TableTabs({\r\n loading = false,\r\n tabsData = [],\r\n activeTab = \"All\",\r\n onClick,\r\n tableStates,\r\n settingsOptions,\r\n}: TableTabsProps) {\r\n if (loading) return <CircularProgress size={24} />;\r\n\r\n const handleTabClick = (tab: string) => {\r\n onClick(tab);\r\n tableStates.setPagination((prev) => ({ ...prev, pageIndex: 0 }));\r\n };\r\n\r\n // Normalize tab_value to uppercase for display + logic\r\n const normalizedTabs = useMemo(() => {\r\n return tabsData\r\n ?.filter((tab) => tab.tab_value !== null)\r\n ?.map((tab) => ({\r\n ...tab,\r\n tab_value: tab.tab_value,\r\n }));\r\n }, [tabsData]);\r\n\r\n const defaultTab = useMemo(() => {\r\n return (\r\n normalizedTabs.find((t) => t.tab_value === \"All\")?.tab_value ||\r\n normalizedTabs[0]?.tab_value ||\r\n \"\"\r\n );\r\n }, [normalizedTabs]);\r\n\r\n const selectedTab = activeTab || defaultTab;\r\n\r\n return (\r\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"flex-start\">\r\n {/* Layout settings icon */}\r\n {settingsOptions?.showIcon && (\r\n <IconButton\r\n onClick={settingsOptions?.onClick}\r\n sx={{ zIndex: 1000, mx: 0 }}\r\n >\r\n <SettingIcon />\r\n </IconButton>\r\n )}\r\n\r\n {/* Tabs */}\r\n <Tabs\r\n value={selectedTab}\r\n onChange={(_, newValue) => handleTabClick(newValue)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n slotProps={{ indicator: { sx: { display: \"none\" } } }}\r\n sx={tableTabsStyles.tabs}\r\n >\r\n {normalizedTabs.map(({ tab_value, tab_value_count }) => {\r\n const isSelected = activeTab === tab_value;\r\n\r\n return (\r\n <Tab\r\n key={tab_value}\r\n value={tab_value}\r\n label={\r\n <Box display=\"flex\" alignItems=\"center\" gap={1}>\r\n <Box>{tab_value}</Box>\r\n <Box\r\n sx={{\r\n ...tableTabsStyles.tabCount,\r\n ...(isSelected && {\r\n // backgroundColor: \"#ced3da\",\r\n // borderColor: \"#ced3da\",\r\n backgroundColor: \"#000\",\r\n color: \"#fff\",\r\n fontWeight: \"500\",\r\n }),\r\n }}\r\n >\r\n {tab_value_count == 0\r\n ? \"0\"\r\n : String(tab_value_count).padStart(2, \"0\")}\r\n </Box>\r\n </Box>\r\n }\r\n sx={tableTabsStyles.tab}\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n </Box>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\r\nimport {\r\n ExpandMore as ExpandMoreIcon,\r\n Settings as SettingsIcon,\r\n} from \"@mui/icons-material\";\r\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\r\nimport { kanbanStyles } from \"./styles/styles\";\r\nimport { Lane, SubLane, SwimLane } from \"./types/types\";\r\nimport { COLOR_CONSTANTS } from \"./constants/kanban-constants\";\r\nimport Loader from \"../listing/components/common/loader/loader\";\r\n\r\nconst Kanban = ({\r\n metaData,\r\n data,\r\n isLoading,\r\n KanbanCardComponent,\r\n showSettings,\r\n onOpenSettings,\r\n}: {\r\n metaData: any;\r\n data: any;\r\n isLoading?: boolean;\r\n KanbanCardComponent: React.ComponentType<{\r\n key: string | number;\r\n cardData: any;\r\n }>;\r\n showSettings: boolean;\r\n onOpenSettings?: () => void;\r\n}) => {\r\n const [expandedPanels, setExpandedPanels] = useState<{\r\n [key: string]: boolean;\r\n }>({\r\n Active: true,\r\n });\r\n\r\n const [subLaneExpanded, setSubLaneExpanded] = useState<{\r\n [key: string]: boolean;\r\n }>({});\r\n\r\n useEffect(() => {\r\n if (metaData?.swim_lanes?.length) {\r\n const initial: { [key: string]: boolean } = {};\r\n metaData?.swim_lanes.forEach((swim_lane: SwimLane) => {\r\n swim_lane?.sub_lanes?.forEach((sub_lane) => {\r\n const key = `${swim_lane.id}-${sub_lane.lane_id}-${sub_lane.id}`;\r\n initial[key] = sub_lane.expanded || false;\r\n });\r\n });\r\n setSubLaneExpanded(initial);\r\n }\r\n }, [metaData]);\r\n\r\n const handleAccordionChange =\r\n (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\r\n setExpandedPanels((prev) => ({\r\n ...prev,\r\n [panel]: isExpanded,\r\n }));\r\n };\r\n\r\n const toggleSubLane = (subLaneId: number | string) => {\r\n setSubLaneExpanded((prev) => ({\r\n ...prev,\r\n [subLaneId]: !prev[subLaneId],\r\n }));\r\n };\r\n\r\n const getLeadCount = (laneId: number): number => {\r\n if (!metaData?.swim_lanes || !data) return 0;\r\n\r\n const seenLeadIds = new Set<number | string>();\r\n let count = 0;\r\n\r\n metaData?.swim_lanes.forEach((swimLane: SwimLane) => {\r\n swimLane.sub_lanes\r\n ?.filter((subLane) => subLane.lane_id === laneId)\r\n ?.forEach((subLane) => {\r\n data.forEach((lead: any) => {\r\n if (lead?.stage_id === subLane?.id && !seenLeadIds.has(lead?.id)) {\r\n seenLeadIds.add(lead.id);\r\n count++;\r\n }\r\n });\r\n });\r\n });\r\n\r\n return count;\r\n };\r\n\r\n return (\r\n <>\r\n {isLoading ? (\r\n <Loader />\r\n ) : (\r\n <Box>\r\n <Box\r\n className=\"kanban-container\"\r\n sx={{ width: \"100%\", bgcolor: \"white\", overflowX: \"auto\" }}\r\n >\r\n {/* Header */}\r\n <Box sx={kanbanStyles.topHeader}>\r\n <IconButton\r\n onClick={onOpenSettings}\r\n sx={{\r\n ...kanbanStyles.settingStyle,\r\n visibility: showSettings ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <SettingsOutlinedIcon />\r\n </IconButton>\r\n\r\n {/* Lane Headers - Replaced Grid with Flex */}\r\n <Box\r\n sx={{\r\n ...kanbanStyles.syncingStyle,\r\n flex: 1,\r\n }}\r\n >\r\n {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n <Box\r\n className=\"lane-header\"\r\n sx={{\r\n ...kanbanStyles.laneHeader,\r\n\r\n bgcolor: lane.color || COLOR_CONSTANTS[index % 4].color,\r\n }}\r\n key={lane.id}\r\n >\r\n <Box\r\n sx={{\r\n ...kanbanStyles.badge,\r\n\r\n bgcolor:\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4].darkColor,\r\n }}\r\n >\r\n {getLeadCount(Number(lane.id))}\r\n </Box>\r\n\r\n <Typography variant=\"h6\" fontWeight=\"bold\" sx={{ px: 2 }}>\r\n {lane.name}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n\r\n {/* Content */}\r\n <Box\r\n className=\"kanban-content\"\r\n id=\"kanban-content\"\r\n sx={{\r\n maxHeight: \"calc(100vh - 186px)\",\r\n // minWidth: \"100%\",\r\n\r\n width: \"fit-content\",\r\n }}\r\n >\r\n {/* Swim Lanes */}\r\n {metaData?.swim_lanes?.map((swim_lane: SwimLane) => (\r\n <Accordion\r\n key={swim_lane.id}\r\n expanded={!!expandedPanels[swim_lane.name]}\r\n onChange={handleAccordionChange(swim_lane.name)}\r\n sx={kanbanStyles.swimLaneAccordionStyle}\r\n // disabled={getSwimLaneCount(swim_lane.id) === 0 ? true : false}\r\n >\r\n <AccordionSummary\r\n disabled={swim_lane?.sub_lanes?.length > 0 ? false : true}\r\n expandIcon={\r\n <ArrowDropDownIcon\r\n sx={{\r\n color: \"black\",\r\n }}\r\n />\r\n }\r\n sx={kanbanStyles.swimlaneWrapperStyle}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n fontWeight=\"medium\"\r\n sx={{ ml: 1.5 }}\r\n >\r\n {swim_lane?.name} (\r\n {\r\n data.filter(\r\n (lead: any) => lead?.lead_status_id == swim_lane?.id\r\n ).length\r\n }\r\n )\r\n </Typography>\r\n </AccordionSummary>\r\n\r\n <AccordionDetails\r\n sx={{ pl: \"16px\", pr: \"8px\", width: \"fit-content\", py: 0 }}\r\n >\r\n {/* Replaced Grid with Flex */}\r\n <Box sx={{ ...kanbanStyles.syncingStyle, pl: 7 }}>\r\n {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n <Box\r\n className=\"column\"\r\n sx={{\r\n ...kanbanStyles.columnStyle,\r\n bgcolor:\r\n lane.color || COLOR_CONSTANTS[index % 4].color,\r\n }}\r\n key={lane.id}\r\n >\r\n {/* Sub-lanes for this lane */}\r\n {swim_lane?.sub_lanes\r\n ?.filter(\r\n (sub_lane: SubLane) =>\r\n sub_lane.lane_id.toString() === lane.id\r\n )\r\n ?.map((sub_section: SubLane) => {\r\n const subLaneKey = `${swim_lane.id}-${lane.id}-${sub_section.id}`;\r\n return (\r\n <Accordion\r\n key={sub_section.id}\r\n expanded={\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id == swim_lane.id\r\n )?.length === 0\r\n ? false\r\n : subLaneExpanded[subLaneKey] || false\r\n }\r\n onChange={() => toggleSubLane(subLaneKey)}\r\n sx={{\r\n ...kanbanStyles.stageStyle,\r\n borderLeft: `4px solid ${\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4].darkColor\r\n }`,\r\n }}\r\n // disabled={\r\n // metaData?.data?.filter(\r\n // (lead: LeadData) =>\r\n // lead.sub_lane_id === sub_section.id &&\r\n // !usedLeadIds.has(lead.id)\r\n // )?.length === 0\r\n // ? true\r\n // : false\r\n // }\r\n >\r\n <AccordionSummary\r\n expandIcon={\r\n <ExpandMoreIcon\r\n sx={{\r\n display:\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id ===\r\n sub_section.id &&\r\n lead.lead_status_id ==\r\n swim_lane.id\r\n )?.length === 0\r\n ? \"none\"\r\n : \"block\",\r\n }}\r\n />\r\n }\r\n sx={kanbanStyles.subSectionAccordion}\r\n >\r\n <Box\r\n sx={\r\n kanbanStyles.subSectionHeaderContainer\r\n }\r\n >\r\n <Box\r\n className=\"sub-section-count\"\r\n sx={{\r\n ...kanbanStyles.subSectionCountContainer,\r\n bgcolor:\r\n lane.darkColor ||\r\n COLOR_CONSTANTS[index % 4]\r\n .darkColor,\r\n }}\r\n >\r\n {data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id === swim_lane.id\r\n )?.length || 0}\r\n </Box>\r\n <Typography\r\n fontWeight=\"700\"\r\n color=\"#555354\"\r\n fontSize=\"12px\"\r\n >\r\n {sub_section.name}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n\r\n <AccordionDetails\r\n sx={kanbanStyles.cardsContainer}\r\n >\r\n {(() => {\r\n const leadsForThisSubLane =\r\n data?.filter(\r\n (lead: any) =>\r\n lead.stage_id === sub_section.id &&\r\n lead.lead_status_id ==\r\n swim_lane.id &&\r\n lead.stage_group_id == lane.id\r\n ) || [];\r\n\r\n return leadsForThisSubLane.map(\r\n (card: any) =>\r\n (KanbanCardComponent && (\r\n <KanbanCardComponent\r\n key={card.id}\r\n cardData={card}\r\n />\r\n )) ||\r\n null\r\n );\r\n })()}\r\n </AccordionDetails>\r\n </Accordion>\r\n );\r\n })}\r\n </Box>\r\n ))}\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Kanban;\r\n","import {\r\n ColumnDef,\r\n ColumnMeta,\r\n getCoreRowModel,\r\n getExpandedRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from \"@tanstack/react-table\";\r\nimport \"./index.scss\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport {\r\n CraftTablePaginationProps,\r\n CraftTableProps,\r\n TopbarOptionsProps,\r\n} from \"../types/table\";\r\nimport { CraftTableFeatureProps } from \"../types/table-options\";\r\nimport { LoaderAnimation } from \"../../assets/svg\";\r\nimport Topbar from \"./topbar\";\r\nimport DefaultPagination from \"./pagination/default\";\r\nimport TableDND from \"./table-dnd\";\r\nimport Table from \"./table\";\r\nimport { useFullscreenPopoverContainer } from \"../libs/hooks/useFullScreen\";\r\n\r\ninterface CustomColumnMeta<T> extends ColumnMeta<T, unknown> {\r\n defaultPinned?: \"left\" | \"right\" | undefined;\r\n}\r\n\r\nfunction TableWrapper<T>({\r\n data = [],\r\n columns = [],\r\n tableStates,\r\n paginationOptions,\r\n featureOptions,\r\n topbarOptions,\r\n nestedComponent,\r\n loadingOptions = { isLoading: false },\r\n customRenderFn = {},\r\n // styleOptions,\r\n shouldHideColumn,\r\n emptyListComponent,\r\n filterOptions,\r\n}: CraftTableProps<T>) {\r\n if (!Array.isArray(data)) {\r\n throw new Error(\"data must be an array of objects.\");\r\n }\r\n const [metaColumns, setMetaColumns] = useState<ColumnDef<T>[]>([]);\r\n\r\n useEffect(() => {\r\n if (columns?.length > 0) {\r\n const updatedColumns = columns\r\n ?.filter((col) => {\r\n const accessorKey =\r\n \"accessorKey\" in col\r\n ? (col as { accessorKey: string })?.accessorKey\r\n : undefined;\r\n return typeof shouldHideColumn === \"function\"\r\n ? !shouldHideColumn(accessorKey)\r\n : true;\r\n })\r\n ?.map((col, index) => {\r\n const id =\r\n \"accessorKey\" in col\r\n ? (col as { accessorKey: string })?.accessorKey\r\n : `col_${index}`;\r\n\r\n const cell = (ctx: any) => {\r\n if (col?.meta?.type === \"custom\" && col?.meta?.propName) {\r\n const customFn = customRenderFn?.[col?.meta?.propName];\r\n return typeof customFn === \"function\"\r\n ? customFn({\r\n value: ctx?.getValue(),\r\n row: ctx?.row,\r\n table: ctx?.table?.getRowModel()?.rows,\r\n })\r\n : ctx?.getValue();\r\n }\r\n\r\n if (typeof col?.cell === \"function\") {\r\n return col?.cell(ctx);\r\n }\r\n\r\n return ctx?.getValue();\r\n };\r\n\r\n return { ...col, id, cell };\r\n });\r\n\r\n setMetaColumns(updatedColumns);\r\n }\r\n }, [columns]);\r\n\r\n //For Default Column Pinning to work\r\n useEffect(() => {\r\n table.getAllLeafColumns().forEach((col) => {\r\n const where = (col.columnDef.meta as CustomColumnMeta<T>)\r\n ?.defaultPinned as \"left\" | \"right\" | undefined;\r\n if (where && !col.getIsPinned()) {\r\n col.pin(where);\r\n }\r\n });\r\n }, [tableStates?.columnPinning?.left, metaColumns]);\r\n\r\n const [columnOrder, setColumnOrder] = useState<string[]>(() =>\r\n metaColumns.map((c) => c.id!)\r\n );\r\n\r\n useEffect(() => {\r\n if (metaColumns.length > 0) {\r\n setColumnOrder(metaColumns.map((c) => c.id!));\r\n }\r\n }, [metaColumns]);\r\n\r\n const [isCompactTable, setIsCompactTable] = useState<boolean>(\r\n featureOptions?.compactTable ?? false\r\n );\r\n\r\n const tableRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n setIsCompactTable(featureOptions?.compactTable ?? false);\r\n }, [featureOptions?.compactTable]);\r\n\r\n const craftPaginationOptions: CraftTablePaginationProps = {\r\n showPagination: true,\r\n paginationPosition: \"bottom\",\r\n paginationView: \"full\",\r\n\r\n ...paginationOptions,\r\n };\r\n\r\n const totalRows = craftPaginationOptions?.totalRows ?? data.length;\r\n const rowsPerPageArray = craftPaginationOptions?.rowsPerPageArray ?? [\r\n 25, 50, 100, 150,\r\n ];\r\n const craftTopbarOptions: TopbarOptionsProps = {\r\n showColumnToggle: true,\r\n showCompactTableToggle: true,\r\n showChangeLayoutToggle: true,\r\n viewMoreToggle: true,\r\n showSearch: true,\r\n showSortingToggle: false,\r\n showFilterToggle: true,\r\n tableStates,\r\n\r\n // Add other conditions above topbarOptions\r\n ...topbarOptions,\r\n };\r\n\r\n const craftFeatureOptions: CraftTableFeatureProps = {\r\n enableTopbar: true,\r\n enableSorting: true,\r\n enableServerSidePagination: false,\r\n enableServerSideSorting: false,\r\n enableRowSelection: false,\r\n enableColumnResizing: true,\r\n enableColumnReordering: true,\r\n enableColumnPinning: true,\r\n enableMultiColumnSorting: true,\r\n compactTable: false,\r\n stickyHeader: true,\r\n enableWordBreakAll: false,\r\n striped: false,\r\n\r\n // Add other conditions above featureOptions\r\n ...featureOptions,\r\n };\r\n\r\n const {\r\n enableTopbar,\r\n enableRowSelection,\r\n enableServerSidePagination,\r\n enableServerSideSorting,\r\n enableSorting,\r\n enableColumnResizing,\r\n enableColumnReordering,\r\n enableColumnPinning,\r\n // enableMultiColumnSorting,\r\n } = craftFeatureOptions;\r\n\r\n const {\r\n sorting,\r\n setSorting,\r\n pagination,\r\n setPagination,\r\n rowSelection,\r\n setRowSelection,\r\n expanded,\r\n setExpanded,\r\n } = tableStates;\r\n\r\n const table = useReactTable({\r\n data,\r\n columns: metaColumns,\r\n state: {\r\n sorting,\r\n pagination,\r\n rowSelection,\r\n columnOrder,\r\n expanded,\r\n },\r\n\r\n getCoreRowModel: getCoreRowModel(),\r\n\r\n /** Sorting options start here */\r\n enableSorting: enableSorting,\r\n onSortingChange: setSorting,\r\n getSortedRowModel: getSortedRowModel(),\r\n manualSorting: enableServerSideSorting,\r\n // isMultiSortEvent: () => enableMultiColumnSorting || false,\r\n /** Sorting options end here */\r\n\r\n /** Pagination options start here */\r\n getPaginationRowModel: getPaginationRowModel(),\r\n onPaginationChange: setPagination,\r\n rowCount: totalRows,\r\n manualPagination: enableServerSidePagination,\r\n /** Pagination options end here */\r\n\r\n /** Row selection options start here */\r\n enableRowSelection: enableRowSelection,\r\n onRowSelectionChange: setRowSelection,\r\n /** Row selection options end here */\r\n\r\n /** Column Sizing options start here */\r\n enableColumnResizing: enableColumnResizing,\r\n columnResizeDirection: \"ltr\",\r\n columnResizeMode: \"onChange\",\r\n /** Column Sizing options end here */\r\n\r\n /** Column Ordering options start here */\r\n onColumnOrderChange: setColumnOrder,\r\n /** Column Ordering options end here */\r\n\r\n /** Column Pinning options end here */\r\n enableColumnPinning: enableColumnPinning,\r\n /** Column Pinning options end here */\r\n\r\n /** Row expanding options start here */\r\n getExpandedRowModel: getExpandedRowModel(),\r\n onExpandedChange: setExpanded,\r\n getSubRows: (row) => (row as { subRows?: T[] }).subRows ?? [],\r\n /** Row expanding options end here */\r\n });\r\n\r\n const { isLoading, loadingComponent, loaderText } = loadingOptions;\r\n const { isFullscreen } = useFullscreenPopoverContainer();\r\n\r\n const handleFullscreenToggle = () => {\r\n if (!document.fullscreenElement) {\r\n tableRef.current?.requestFullscreen().catch((err) => {\r\n console.error(\"Error attempting to enable fullscreen mode:\", err);\r\n });\r\n } else {\r\n document.exitFullscreen();\r\n }\r\n };\r\n\r\n // const tableWrapperProps = {\r\n // ...(styleOptions?.wrapperStyle && { style: styleOptions.wrapperStyle }),\r\n // className: \"ts__table__wrapper\",\r\n // };\r\n // const emptyListComponentCondition = () => {\r\n // if(isLoading) {}\r\n // }\r\n\r\n const showFilterCondition = filterOptions?.show;\r\n\r\n return (\r\n <div className=\"ts__table__container\">\r\n <div\r\n className={`ts__table__layout ${\r\n showFilterCondition ? \"has-filter\" : \"\"\r\n }`}\r\n >\r\n {/* Main Table Area */}\r\n <div\r\n className={`ts__table__main ${isFullscreen ? \"is-fullscreen\" : \"\"}`}\r\n ref={tableRef}\r\n >\r\n {enableTopbar && (\r\n <Topbar\r\n table={table}\r\n topbarOptions={craftTopbarOptions}\r\n isCompactTable={isCompactTable}\r\n setIsCompactTable={setIsCompactTable}\r\n isFullscreen={isFullscreen}\r\n fullscreenToggle={handleFullscreenToggle}\r\n paginationComponent={\r\n craftPaginationOptions?.showPagination === true &&\r\n craftPaginationOptions?.paginationPosition === \"top\" ? (\r\n <DefaultPagination\r\n table={table}\r\n rowsPerPageArray={rowsPerPageArray}\r\n paginationOptions={craftPaginationOptions}\r\n />\r\n ) : null\r\n }\r\n searchValue={craftTopbarOptions.searchValue}\r\n onSearchChange={craftTopbarOptions.onSearchChange}\r\n tableStates={tableStates}\r\n onFilterButtonClick={topbarOptions?.onFilterButtonClick}\r\n />\r\n )}\r\n\r\n {isLoading ? (\r\n loadingComponent ?? (\r\n <div className=\"ts__loader\">\r\n <LoaderAnimation />\r\n {loaderText && <p>{loaderText}</p>}\r\n </div>\r\n )\r\n ) : !isLoading && data.length === 0 && emptyListComponent ? (\r\n emptyListComponent\r\n ) : (\r\n <div\r\n // {...tableWrapperProps}\r\n className={`ts__table__wrapper ${\r\n isFullscreen ? \"is-fullscreen\" : \"\"\r\n }`}\r\n >\r\n {enableColumnReordering ? (\r\n <TableDND\r\n table={table}\r\n columnOrder={columnOrder}\r\n featureOptions={craftFeatureOptions}\r\n NestedComponent={nestedComponent}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n ) : (\r\n <Table\r\n table={table}\r\n featureOptions={craftFeatureOptions}\r\n NestedComponent={nestedComponent}\r\n columnOrder={columnOrder}\r\n setColumnOrder={setColumnOrder}\r\n isCompactTable={isCompactTable}\r\n tableStates={tableStates}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {craftPaginationOptions?.showPagination === true &&\r\n craftPaginationOptions?.paginationPosition === \"bottom\" ? (\r\n <DefaultPagination\r\n table={table}\r\n rowsPerPageArray={rowsPerPageArray}\r\n paginationOptions={craftPaginationOptions}\r\n />\r\n ) : null}\r\n </div>\r\n\r\n <div\r\n className={`ts__table__filter ${\r\n showFilterCondition ? \"show\" : \"\"\r\n }`.trim()}\r\n >\r\n {filterOptions?.component && filterOptions?.component}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TableWrapper;\r\n","import {\r\n ColumnPinningState,\r\n ExpandedState,\r\n PaginationState,\r\n RowSelectionState,\r\n SortingState,\r\n} from \"@tanstack/react-table\";\r\nimport { useState } from \"react\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n FilterMasterStateProps,\r\n FilterOperationListProps,\r\n FilterStateProps,\r\n} from \"../../types/filter\";\r\n\r\nexport function useCraftTable(paginationPageSize: number = 25) {\r\n const [pagination, setPagination] = useState<PaginationState>({\r\n pageIndex: 0,\r\n pageSize: paginationPageSize,\r\n });\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\r\n const [expanded, setExpanded] = useState<ExpandedState>({});\r\n const [wrapColumns, setWrapColumns] = useState<Record<string, boolean>>({\r\n all_wrap: true,\r\n });\r\n\r\n // Filters to be rendered in form\r\n const [filters, setFilters] = useState<FilterStateProps[]>([]);\r\n // Saved filter Component - savedFilterEditValue is set on list click\r\n const [savedFilterEditValue, setSavedFilterEditValue] = useState<\r\n string | number\r\n >(\"\");\r\n const [filterToDelete, setFilterToDelete] =\r\n useState<FilterOperationListProps | null>(null);\r\n const [filterSelectedAttributeValue, setFilterSelectedAttributeValue] =\r\n useState<string>(\"\");\r\n\r\n const [filterMaster, setFilterMaster] =\r\n useState<FilterMasterStateProps | null>(null);\r\n\r\n const [showTableFilter, setShowTableFilter] = useState<boolean>(false);\r\n\r\n //For filter criteria paper\r\n const [showFilterOptions, setShowFilterOption] = useState<boolean>(false);\r\n\r\n if (pagination.pageIndex < 0 || pagination.pageSize <= 0) {\r\n throw new Error(\r\n \"Invalid pagination values: pageIndex and pageSize must be positive.\"\r\n );\r\n }\r\n\r\n // For Default Column Pinning\r\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\r\n left: [],\r\n right: [],\r\n });\r\n\r\n const craftTableOptions: CraftTableOptionsProps = {\r\n sorting: sorting,\r\n setSorting: setSorting,\r\n pagination: pagination,\r\n setPagination: setPagination,\r\n rowSelection: rowSelection,\r\n setRowSelection: setRowSelection,\r\n expanded: expanded,\r\n setExpanded: setExpanded,\r\n wrapColumns: wrapColumns,\r\n setWrapColumns: setWrapColumns,\r\n filters: filters,\r\n setFilters: setFilters,\r\n savedFilterEditValue: savedFilterEditValue,\r\n setSavedFilterEditValue: setSavedFilterEditValue,\r\n filterToDelete: filterToDelete,\r\n setFilterToDelete: setFilterToDelete,\r\n filterSelectedAttributeValue: filterSelectedAttributeValue,\r\n setFilterSelectedAttributeValue: setFilterSelectedAttributeValue,\r\n filterMaster: filterMaster,\r\n setFilterMaster: setFilterMaster,\r\n showTableFilter: showTableFilter,\r\n setShowTableFilter: setShowTableFilter,\r\n showFilterOptions: showFilterOptions,\r\n setShowFilterOption: setShowFilterOption,\r\n columnPinning: columnPinning,\r\n setColumnPinning: setColumnPinning,\r\n };\r\n\r\n return craftTableOptions;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n ColumnTabConfigProps,\r\n QuickTabConfigProps,\r\n SavedButtonErrorProps,\r\n SettingsDataProps,\r\n SortingConfigProps,\r\n} from \"../../types/filter-settings\";\r\n\r\nexport function useCraftTableFilterSettings() {\r\n //states for the quick filter layout\r\n const [showListViewSettings, setShowListViewSettings] =\r\n useState<boolean>(false);\r\n\r\n const [settingsData, setSettingsData] = useState<SettingsDataProps>({});\r\n\r\n // Quick FIlter settings local states\r\n\r\n const [quickTabStates, setQuickTabStates] = useState<QuickTabConfigProps>({});\r\n const [columnTabState, setColumnTabState] = useState<ColumnTabConfigProps>(\r\n {}\r\n );\r\n const [sortingTabState, setSortingTabState] = useState<SortingConfigProps>(\r\n {}\r\n );\r\n\r\n // This state will be used for settings validation\r\n const [saveButtonError, setSaveButtonError] = useState<SavedButtonErrorProps>(\r\n { hasError: false, messages: [] }\r\n );\r\n\r\n useEffect(() => {\r\n if (settingsData?.quick_tab) {\r\n setQuickTabStates(settingsData?.quick_tab);\r\n }\r\n if (settingsData?.column) {\r\n setColumnTabState(settingsData?.column);\r\n }\r\n if (settingsData?.sorting) {\r\n setSortingTabState(settingsData?.sorting);\r\n }\r\n }, [settingsData]);\r\n\r\n const craftTableFilterSettingsOptions: craftTableFilterSettingsOptionsProps =\r\n {\r\n settingsData: settingsData,\r\n setSettingsData: setSettingsData,\r\n showListViewSettings: showListViewSettings,\r\n setShowListViewSettings: setShowListViewSettings,\r\n quickTabStates: quickTabStates,\r\n setQuickTabStates: setQuickTabStates,\r\n columnTabState: columnTabState,\r\n setColumnTabState: setColumnTabState,\r\n sortingTabState: sortingTabState,\r\n setSortingTabState: setSortingTabState,\r\n saveButtonError: saveButtonError,\r\n setSaveButtonError: setSaveButtonError,\r\n };\r\n\r\n return craftTableFilterSettingsOptions;\r\n}\r\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","UpArrow","_jsxs","jsxs","xmlns","viewBox","width","height","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","children","_jsx","jsx","x1","y1","x2","y2","points","DownArrow","TableFirstPageIcon","role","d","TableLastPageIcon","EditIcon","fillOpacity","DeleteIcon","HideColumnIcon","DragHandleIcon","className","transform","IconPinOutline","props","IconPinOffOutline","LoaderAnimation","cx","cy","r","attributeName","dur","values","repeatCount","begin","ChangeLayoutIcon","id","maskType","maskUnits","x","y","mask","CloseIcon","SearchIcon","SortingIcon","FilterationIcon","color","HideIcon","VisibilityIcon","VisibilityOffIcon","DragandDrogIcon","AddIcon","CheckBox","CrossBox","EyeIcon","ClosedEyeIcon","SettingIcon","layoutIcons","Board","Table","Timeline","List","Calendar","Gallery","Charts","LayoutSelector","onSelect","selectedLayout","Box","sx","maxWidth","display","justifyContent","alignItems","px","py","backgroundColor","Typography","variant","fontWeight","fontSize","IconButton","onClick","Grid","container","spacing","p","Object","keys","map","layout","isSelected","size","ButtonBase","border","borderRadius","flexDirection","transition","boxShadow","mb","opacity","useOutsideClick","handler","useEffect","handleClickOutside","event","current","contains","target","addEventListener","removeEventListener","useFullscreenPopoverContainer","isFullscreen","setIsFullscreen","useState","fullscreenElement","setContainer","undefined","handleFullscreenChange","el","ViewMore","compactMode","onCompactToggle","onFullscreenToggle","tableStates","onClose","fullscreenContainer","wrapColumns","setWrapColumns","MUISwitch","Switch","checked","all_wrap","onChange","prev","Select","value","e","minWidth","MenuProps","disablePortal","PaperProps","zIndex","MenuItem","SortableItem","attributes","listeners","setNodeRef","useSortable","CSS","Transform","toString","gap","cursor","flexGrow","SortPopover","anchorEl","columns","sorts","setSorts","sensors","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","handleChange","field","updated","item","triggerTableSortUpdate","sortItems","sortingPayload","desc","direction","Popover","open","Boolean","anchorOrigin","vertical","horizontal","margin","length","DndContext","collisionDetection","closestCenter","onDragEnd","active","over","oldIndex","findIndex","newIndex","arrayMove","SortableContext","items","s","strategy","verticalListSortingStrategy","sort","fullWidth","col","label","filter","handleRemove","Button","newSort","Date","now","startIcon","DraggableColumn","column","onToggle","isVisible","getIsVisible","columnDef","header","str","replace","char","toUpperCase","trim","ColumnToggle","table","columnOrder","setColumnOrder","allColumns","getAllLeafColumns","shownColumns","find","hiddenColumns","toggleVisibility","columnId","getColumn","activeCol","overCol","indexOf","forEach","fontStyle","customDebounce","func","delay","timerId","args","context","this","clearTimeout","setTimeout","apply","searchStyles","showSearchInput","marginRight","paddingRight","paddingLeft","TableSearch","setShowSearchInput","localValue","setLocalValue","searchContainerRef","useRef","debouncedOnChange","useCallback","newValue","position","top","TextField","placeholder","onKeyDown","key","InputProps","startAdornment","InputAdornment","querySelector","focus","edge","endAdornment","CloseRoundedIcon","Topbar","isCompactTable","fullscreenToggle","setIsCompactTable","paginationComponent","topbarOptions","onFilterButtonClick","sortAnchorEl","setSortAnchorEl","groupBy","setGroupBy","showColumnHiding","setShowColumnHiding","layoutAnchorEl","setLayoutAnchorEl","setSelectedLayout","columnAnchorEl","setColumnAnchorEl","setShowTableFilter","leftSideComponent","rightSideComponent","showColumnToggle","showChangeLayoutToggle","showSortingToggle","showFilterToggle","showSearch","searchValue","onSearchChange","dropdownRef","handleExternalLayoutTrigger","detail","handleExternalFilterTrigger","handleExternalViewMoreTrigger","setViewMoreAnchorEl","handleExternalSearchTrigger","window","viewMoreAnchorEl","isViewMoreOpen","overflowX","whiteSpace","title","customEvent","CustomEvent","dispatchEvent","_Fragment","currentTarget","mt","meta","sortingRules","setSorting","showTableFilter","filters","right","transformOrigin","onGroupByChange","DefaultPagination","rowsPerPageArray","paginationOptions","pageIndex","getState","pagination","pageCount","getPageCount","pageSize","rowCount","getRowCount","recordsRangeFirst","recordsRangeLast","Math","min","paginationView","Fragment","defaultValue","page","Number","setPageIndex","textAlign","max","setPageSize","disabled","getCanPreviousPage","previousPage","TablePreviousPageIcon","getCanNextPage","nextPage","TableNextPageIcon","getColumnPinningStyles","isPinned","getIsPinned","isLastLeftPinnedColumn","getIsLastColumn","isFirstRightPinnedColumn","getIsFirstColumn","background","left","getStart","getAfter","getSize","getColumnPinningStylesBody","environments","adm_dev","crm_dev","uat","DragAlongCell","cell","isDragging","Translate","wordBreak","align","getIsPlaceholder","flexRender","getContext","axios","create","baseURL","timeout","headers","interceptors","request","use","config","token","localStorage","getItem","Authorization","error","Promise","reject","Checkbox","indeterminate","uuidv4","check","setCheck","React","isChecked","TableBody","featureOptions","NestedComponent","enableColumnReordering","enableRowSelection","getRowModel","rows","row","renderedRow","getIsSelected","getIsSomeSelected","getToggleSelectedHandler","getVisibleCells","tdProps","horizontalListSortingStrategy","getIsExpanded","renderRow","TableHeadPin","pin","TableHeadPopover","dense","ListItemButton","toggleSorting","ListItemIcon","ListItemText","primary","toggleWrapForColumn","DraggableTableHeader","enableColumnPinning","setAnchorEl","handleClose","styles","minSize","maxSize","onMouseLeave","colSpan","isPlaceholder","getCanSort","asc","getIsSorted","getCanResize","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","getIsResizing","TableHead","stickyHeader","handleHover","getHeaderGroups","headerGroup","getIsAllRowsSelected","getIsSomeRowsSelected","toggleAllRowsSelected","striped","TableDND","modifiers","restrictToHorizontalAxis","tableTabsStyles","tabs","minHeight","tab","padding","textTransform","tabCount","ConfirmModal","description","buttons","input","inputValue","setInputValue","setError","Dialog","reason","DialogTitle","marginX","paddingBottom","borderBottom","component","DialogContent","marginBottom","marginTop","labelClassName","required","multiline","DialogActions","button","index","handleButtonClick","CustomTabPanel","hidden","CustomTabs","tabItems","activeFilterIndex","handleCrossClick","tabsProps","hoveredTab","setHoveredTab","Tabs","idx","isActive","isHovered","Tab","onMouseEnter","TextFieldStyles","bgcolor","borderColor","FormTextfield","control","isLoading","onValueChange","Controller","name","filter_value","render","data_type","FormDatePicker","views","isRange","filter_operator","isRelativeToToday","LocalizationProvider","dateAdapter","AdapterDateFns","moment","format","toDate","todayDate","fromDate","Array","isArray","DatePicker","date","formatted","slotProps","textField","FormDropdown","setValue","dropdownList","FormControl","disableUnderline","newOperator","oldOperator","shouldDirty","FormMultiSelect","dropdownData","options","filter_attribute","cleanedValue","multiple","filtered","renderValue","selected","val","join","includes","CustomSearch","search","setSearch","filterStyles","scrollbarCustom","overflowY","pr","filterContainer","filterMainHeader","mx","filterMainComponentWrapper","filterFormStyles","formEditModeStyle","formFlexContainer","formListItem","formListItemHeader","formListItemHeaderName","formListItemHeaderDropdown","FilterCriteria","columnsData","setSelectedFilters","searchTerm","setSearchTerm","onChangeFunction","FilterButton","styled","theme","palette","main","dark","setFilters","showFilterOptions","setShowFilterOption","filterMaster","filterButtonRef","filterButtonWidth","setWidth","resizeObserver","ResizeObserver","clientWidth","observe","disconnect","useElementWidth","Paper","maxHeight","my","column_list","toLowerCase","isAlreadySelected","some","attribute_key","ListItem","dropdownOptions","operation_list","defaultOperator","matchingDropdownList","newFilter","newSelectedFilter","dropdown_list","newFilterState","handleAddFilter","FilterForm","criteriaSearchTerm","setCriteriaSearchTerm","selectedFilters","handleRemoveFilter","editMode","setSavedFilterModalOpen","setDeleteFilterModalOpen","setFilterMaster","setPagination","filterName","saved_filters","selectedName","defaultValues","useMemo","filterValues","reduce","acc","curr","operator","dummyChange","watch","reset","unregister","useForm","mode","resetOptions","keepDirtyValues","keepErrors","formValues","debouncedUpdateFilters","updatedFilters","updateFiltersFromForm","filterValue","onSubmit","preventDefault","inputRef","stopPropagation","reverse","marginLeft","dummy","activeFilterTabIndex","MainFilter","mainBoxStyles","next","f","prevSel","SavedFilterEditComponent","setEditMode","selectedId","BackArrow","SavedFilter","tabValue","setFilterToDelete","saved_filter","visibility","newFilterMasterState","radio","handleAppyFilter","rounded","handleListItemClick","AttributesFilter","selectedAttribute","currentRadio","handleSingleRadioSelect","selectedAttr","matchingColumn","datasource_list","updatedRadio","updatedFilterMaster","selectedAttributeOptions","attributeKey","displayEmpty","overflow","option","FormControlLabel","Radio","verticalTabStyles","mainTabsContainer","mainTabContainer","mainTabLabel","horizontalTabStyles","CustomVerticalTabs","orientation","DraggableListItem","containerId","data","DragIndicator","mr","dialogStyles","dialogTitle","dialogContent","paddingTop","dialogActionsButton","listingValuesStyles","wrapper","heading","draggableContainer","draggableCover","headerContainer","TabsStyles","mainTabsHeader","mainTabDropdown","mainTabSelect","selectDropdownSeparator","checkboxStyle","Loader","loaderText","CircularProgress","ListingValuesContent","onItemToggle","flex","ListingValues","filteredValues","buttonText","headerText","tabsApiDataLoading","enableDragAndDrop","AlertComponenet","useDroppable","InfoAlert","message","Alert","severity","QuickTab","filterSettingStates","tabsApiData","settingsData","setSettingsData","saveButtonError","setSaveButtonError","currentQuickAttribute","setCurrentQuickAttribute","quick_tab","attribute","quickTabStates","entries","sorting","hide_list","show_list","showList","isValidShowList","ERROR_CODE","messages","showListValues","charAt","slice","hideListValues","filteredListValues","handleItemToggle","itemId","fromContainerId","toShowList","toHideList","splice","push","enableDND","currentContainer","overContainer","newShowList","newHideList","String","removed","currentShowList","currentHideList","availableSlots","limitedHideList","isAllSelected","isCombineOther","ColumnTab","selectedTabIndex","setSelectedTabIndex","settingsColumnState","isColumnDefault","isDefault","isStateEmpty","isDefaultEmpty","isTabWiseEmpty","mappedColumns","mappedTabs","tab_name","hasOtherMessages","hasError","hideList","currentTab","getCurrentLists","visible","moved","updatedTabs","hasShowListQuickTabs","_","activeItem","list","Sorting","activeTab","setActiveTab","columnTabState","sortingTabState","isSortingDefault","isEmptyDefault","sortby","emptySortBy","order","columnItem","PointerSensor","activeTabIndex","tabSortedList","updateSortList","handleDNDDropdownChange","showAddSortButton","stateLength","isAddSortDisabled","hasEmptyColumn","i","reordered","columnKey","CustomDialog","DialogTransition","forwardRef","Slide","CustomButton","customSx","SETTINGS_TABS","KANBAN_SETTINGS_TABS","LANE_SELECTS","Lane","sortingOptions","lane","opt","showSubLane","showColorColumns","GroupBy","kanbanStyles","syncingStyle","topHeader","pt","laneHeader","badge","swimlaneWrapperStyle","columnStyle","stageStyle","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","subSectionAccordion","subSectionCountContainer","cardsContainer","settingStyle","swimLaneAccordionStyle","subSectionHeaderContainer","COLOR_CONSTANTS","darkColor","onDeleteFilter","onSaveFilter","onUpdateFilter","setTabValue","saveFilterModalOpen","setSaveFilterModalOpen","deleteFilterModalOpen","filterToDelete","newFilterMaster","clearAttributeRadio","view","show","columnsDataLoading","onSaveSettingsData","showListViewSettings","hasAPIData","slots","Column","copyColumnTabState","copySortingTabState","loading","tabsData","settingsOptions","normalizedTabs","tab_value","defaultTab","t","selectedTab","showIcon","scrollButtons","indicator","tab_value_count","padStart","metaData","KanbanCardComponent","showSettings","onOpenSettings","expandedPanels","setExpandedPanels","Active","subLaneExpanded","setSubLaneExpanded","swim_lanes","initial","swim_lane","sub_lanes","sub_lane","lane_id","expanded","getLeadCount","laneId","seenLeadIds","Set","count","swimLane","subLane","lead","stage_id","has","add","SettingsOutlinedIcon","lanes","Accordion","panel","isExpanded","AccordionSummary","expandIcon","ArrowDropDownIcon","ml","lead_status_id","AccordionDetails","pl","sub_section","subLaneKey","toggleSubLane","subLaneId","borderLeft","ExpandMoreIcon","stage_group_id","card","cardData","nestedComponent","loadingOptions","customRenderFn","shouldHideColumn","emptyListComponent","filterOptions","Error","metaColumns","setMetaColumns","updatedColumns","accessorKey","ctx","propName","customFn","getValue","where","defaultPinned","columnPinning","c","compactTable","tableRef","craftPaginationOptions","showPagination","paginationPosition","totalRows","craftTopbarOptions","showCompactTableToggle","viewMoreToggle","craftFeatureOptions","enableTopbar","enableSorting","enableServerSidePagination","enableServerSideSorting","enableColumnResizing","enableMultiColumnSorting","enableWordBreakAll","rowSelection","setRowSelection","setExpanded","useReactTable","state","getCoreRowModel","onSortingChange","getSortedRowModel","manualSorting","getPaginationRowModel","onPaginationChange","manualPagination","onRowSelectionChange","columnResizeDirection","columnResizeMode","onColumnOrderChange","getExpandedRowModel","onExpandedChange","getSubRows","subRows","loadingComponent","showFilterCondition","exitFullscreen","requestFullscreen","catch","err","console","paginationPageSize","savedFilterEditValue","setSavedFilterEditValue","filterSelectedAttributeValue","setFilterSelectedAttributeValue","setColumnPinning","setShowListViewSettings","setQuickTabStates","setColumnTabState","setSortingTabState"],"mappings":"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","x_google_ignoreList":[0]}