@erpsquad/common 1.10.8-test → 1.10.9-test

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 (52) hide show
  1. package/dist/chunks/{ai-summary-D9QajB4_.js → ai-summary-4NVNEHfi.js} +2 -2
  2. package/dist/chunks/{ai-summary-D9QajB4_.js.map → ai-summary-4NVNEHfi.js.map} +1 -1
  3. package/dist/chunks/{ai-summary-FqAUpafL.esm.js → ai-summary-f8clWLbW.esm.js} +65 -44
  4. package/dist/chunks/{ai-summary-FqAUpafL.esm.js.map → ai-summary-f8clWLbW.esm.js.map} +1 -1
  5. package/dist/chunks/{android-12-switch-BVabRCje.esm.js → android-12-switch-BUbQYnRQ.esm.js} +53 -35
  6. package/dist/chunks/{android-12-switch-BVabRCje.esm.js.map → android-12-switch-BUbQYnRQ.esm.js.map} +1 -1
  7. package/dist/chunks/android-12-switch-CphTHRb8.js +2 -0
  8. package/dist/chunks/{android-12-switch-DMaoWQwq.js.map → android-12-switch-CphTHRb8.js.map} +1 -1
  9. package/dist/chunks/{appbar-6Ucw59ku.js → appbar-C6Es9HGk.js} +2 -2
  10. package/dist/chunks/{appbar-6Ucw59ku.js.map → appbar-C6Es9HGk.js.map} +1 -1
  11. package/dist/chunks/{appbar-mDf1LZ0u.esm.js → appbar-CKrHdx9n.esm.js} +2 -2
  12. package/dist/chunks/{appbar-mDf1LZ0u.esm.js.map → appbar-CKrHdx9n.esm.js.map} +1 -1
  13. package/dist/chunks/{default-data-CwLgBvlI.esm.js → default-data-BsZWgQGR.esm.js} +3 -3
  14. package/dist/chunks/{default-data-CwLgBvlI.esm.js.map → default-data-BsZWgQGR.esm.js.map} +1 -1
  15. package/dist/chunks/{default-data-D2cqOmp4.js → default-data-Dsjlvwev.js} +2 -2
  16. package/dist/chunks/{default-data-D2cqOmp4.js.map → default-data-Dsjlvwev.js.map} +1 -1
  17. package/dist/chunks/{fullScreen-VlXxoepU.js → fullScreen-BBpaDn-A.js} +2 -2
  18. package/dist/chunks/{fullScreen-VlXxoepU.js.map → fullScreen-BBpaDn-A.js.map} +1 -1
  19. package/dist/chunks/{fullScreen-B9d2_kak.esm.js → fullScreen-Dn-3Tkwm.esm.js} +2 -2
  20. package/dist/chunks/{fullScreen-B9d2_kak.esm.js.map → fullScreen-Dn-3Tkwm.esm.js.map} +1 -1
  21. package/dist/chunks/index-B9CFxEZ9.js +2 -0
  22. package/dist/chunks/index-B9CFxEZ9.js.map +1 -0
  23. package/dist/chunks/{index-iPYNYnNP.esm.js → index-wf5q5BST.esm.js} +73 -66
  24. package/dist/chunks/{index-iPYNYnNP.esm.js.map → index-wf5q5BST.esm.js.map} +1 -1
  25. package/dist/chunks/{migration-utils-TYitNMC7.js → migration-utils-9IXhe_fj.js} +2 -2
  26. package/dist/chunks/{migration-utils-TYitNMC7.js.map → migration-utils-9IXhe_fj.js.map} +1 -1
  27. package/dist/chunks/{migration-utils-BRjncD-b.esm.js → migration-utils-DGoEzQUj.esm.js} +2 -2
  28. package/dist/chunks/{migration-utils-BRjncD-b.esm.js.map → migration-utils-DGoEzQUj.esm.js.map} +1 -1
  29. package/dist/chunks/{sidebar-DJREtRnK.js → sidebar-B3SExDRU.js} +2 -2
  30. package/dist/chunks/{sidebar-DJREtRnK.js.map → sidebar-B3SExDRU.js.map} +1 -1
  31. package/dist/chunks/{sidebar-D_3INLNa.esm.js → sidebar-n9Y25HU-.esm.js} +2 -2
  32. package/dist/chunks/{sidebar-D_3INLNa.esm.js.map → sidebar-n9Y25HU-.esm.js.map} +1 -1
  33. package/dist/chunks/{sidebarScreen-CUf5Onkp.js → sidebarScreen-Dxb_e58p.js} +2 -2
  34. package/dist/chunks/{sidebarScreen-CUf5Onkp.js.map → sidebarScreen-Dxb_e58p.js.map} +1 -1
  35. package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js → sidebarScreen-_Zt2pSOx.esm.js} +3 -3
  36. package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js.map → sidebarScreen-_Zt2pSOx.esm.js.map} +1 -1
  37. package/dist/components/index.esm.js +121 -103
  38. package/dist/components/index.js +1 -1
  39. package/dist/index.esm.js +218 -200
  40. package/dist/index.js +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/layout/index.esm.js +2 -2
  43. package/dist/layout/index.js +1 -1
  44. package/dist/src/components/index.d.ts +18 -1
  45. package/dist/utils/index.esm.js +1 -1
  46. package/dist/utils/index.js +1 -1
  47. package/dist/views/index.esm.js +5 -5
  48. package/dist/views/index.js +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunks/android-12-switch-DMaoWQwq.js +0 -2
  51. package/dist/chunks/index-BQ2NBHDS.js +0 -2
  52. package/dist/chunks/index-BQ2NBHDS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-summary-D9QajB4_.js","sources":["../../src/components/form-control/form-builder/element-controller.tsx","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../node_modules/date-fns/esm/toDate/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../node_modules/date-fns/esm/locale/en-US/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../node_modules/date-fns/esm/getMonth/index.js","../../node_modules/date-fns/esm/getYear/index.js","../../src/components/date-range-picker/date-range-picker.tsx","../../src/components/form-control/form-builder/form-builder-element/date-range-picker.tsx","../../src/components/form-control/form-builder/form-builder-element/date-time.tsx","../../src/components/form-control/form-builder/form-builder-element/dynamic-text-editor.tsx","../../src/components/form-control/form-builder/form-builder-element/custom-date-picker.tsx","../../src/components/form-control/form-parser/data.ts","../../src/components/activity-tag/activity-tag.tsx","../../src/components/quick-approval-modal/quick-approval-modal.tsx","../../src/components/board/columnHeader.tsx","../../src/components/calculation-summary/components/items-summary.tsx","../../src/components/calculation-summary/components/discount-summary.tsx","../../src/components/calculation-summary/components/subtotal-summary.tsx","../../src/components/calculation-summary/components/taxes-and-charges-summary.tsx","../../src/components/calculation-summary/components/total-summary.tsx","../../src/components/card-wrapper/card-wrapper.tsx","../../src/components/change-user-password-modal/change-user-password-modal.tsx","../../src/components/country-select/country-select.tsx","../../src/components/custom-toggle-switch/custom-toggle-switch.tsx","../../src/components/expandable-summary-wrapper/expandable-summary-wrapper.tsx","../../src/components/inventory-reports-title-bar/report-buttons/report-buttons.tsx","../../src/components/inventory-reports-title-bar/inventory-reports-title-bar.tsx","../../src/components/multi-select/multi-select.tsx","../../src/components/protected-route.tsx","../../src/components/reports-title-bar/report-buttons/report-buttons.tsx","../../src/components/schedule-report/utils/constant.ts","../../src/components/schedule-report/validator.ts","../../src/components/schedule-report/utils/common.ts","../../src/components/schedule-report/schedule-report-modal.tsx","../../src/components/snackbar/snackbar.tsx","../../src/components/upload/file-confirmation.tsx","../../src/components/upload/upload.tsx","../../src/components/select/controller/chip-or-placeholder.tsx","../../src/components/select/controller/controller-select.tsx","../../src/components/material-editable-table/components/inline-edit-fields.tsx","../../src/components/material-editable-table/material-editable-table.tsx","../../src/components/charts/barChart/barChart.tsx","../../src/components/charts/donut-chart/donut-chart.tsx","../../src/components/charts/donutChart/DonutChart.tsx","../../src/components/grid/grid-card/grid-card.tsx","../../src/components/grid/grid-wrapper/grid-wrapper.tsx","../../src/components/custom-forms/grid-view/grid-view.tsx","../../src/components/custom-forms/FORMS.tsx","../../src/components/reports/dynamic-report/dynamic-rows.tsx","../../src/utils/text-measurement.ts","../../src/hooks/useUomFieldUpdater.tsx","../../src/components/loaders/form-loader.tsx","../../src/components/loaders/page-loader.tsx","../../src/components/filter/fields.ts","../../src/components/ai-summary/chart/horizontal-bar-chart.tsx","../../src/components/ai-summary/chart/simple-bar-chart.tsx","../../src/components/ai-summary/chart/donut-chart.tsx","../../src/components/ai-summary/chart/grouped-bar-chart.tsx","../../src/components/ai-summary/ai-summary.tsx","../../src/components/activityLog/activity-log.tsx","../../src/components/approval-wrapper/approval-wrapper.tsx","../../src/components/charts/areaLinerChart.tsx","../../src/components/charts/bar-chart/bar-chart.tsx","../../src/components/charts/barLineChart/barLinechart.tsx","../../src/components/board/board.tsx","../../src/components/calculation-summary/calculation-summary.tsx","../../src/components/calendar/calendar.tsx","../../src/components/charts/ChartLegends.tsx","../../src/components/grid/custom-grid-card/custom-grid-card.tsx","../../src/components/Dashboard/dashboard-card.tsx","../../src/components/Dashboard/dashboard-header.tsx","../../src/components/dynamic-layout-wrapper/dynamic-layout-wrapper.tsx","../../src/components/dynamic-modal.tsx","../../src/components/entity-view-wrapper/entity-view-wrapper.tsx","../../src/components/gantt/gantt.tsx","../../src/components/schedule-report/schedule-report.tsx","../../src/components/grid-fallback/grid-fallback.tsx","../../src/components/charts/groupBarChart/GroupBarChart.tsx","../../src/components/hr-line/hr-line.tsx","../../src/components/rfq-response/item-response-details.tsx","../../src/components/label-value/label-value.tsx","../../src/components/charts/line-chart/line-chart.tsx","../../src/components/list/list.tsx","../../src/components/listing/listing.tsx","../../src/components/mulitline/multiline.tsx","../../src/components/charts/multiLineChart/multi-line-chart.tsx","../../src/components/reports/dynamic-report/dynamic-report.tsx","../../src/components/reports-title-bar/reports-title-bar.tsx","../../src/components/sub-header-doc/sub-header-doc.tsx","../../src/components/tab-bar-ui/tab-bar-ui.tsx","../../src/components/text-area/text-area.tsx","../../src/components/time-range-picker/time-range-picker.tsx","../../src/components/uom-field-wrapper/uom-field-wrapper.tsx","../../src/components/user-dropdown/user-dropdown.tsx"],"sourcesContent":["import { Controller, useFieldArray } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport AddIcon from \"@mui/icons-material/Add\";\n\nimport DynamicSelect from \"./form-builder-element/select\";\nimport DynamicInput from \"./form-builder-element/text\";\n\nexport const ElementController = (props: any) => {\n const { fields: abjMember, append } = useFieldArray({\n control: props.control,\n name: \"abjMember\",\n });\n\n const addAdjMember = (type: string, elementName: string) => {\n switch (type) {\n case \"input\":\n append({ type: \"input\", appendAfter: elementName });\n break;\n case \"select\":\n append({ type: \"select\", appendAfter: elementName });\n break;\n\n default:\n break;\n }\n };\n\n return (\n <>\n <Controller\n control={props.control}\n name={props.name}\n defaultValue={props.defaultValue || \"\"}\n render={({ field }) => {\n if (\n Object.keys(props.field1).length &&\n Object.keys(props.field1) !== Object.keys(field)\n ) {\n props.updateField({ ...field });\n }\n return props.children;\n }}\n />\n <CloseIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => addAdjMember(\"input\", props.name)}\n />\n <AddIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => addAdjMember(\"select\", props.name)}\n />\n {abjMember.map((field: any) => {\n if (field.appendAfter === props.name) {\n return (\n <>\n {field.type === \"input\" && (\n <DynamicInput\n placeholder=\"Enter value\"\n label=\"Message\"\n formControl={props.control}\n name=\"message\"\n fieldArrayName=\"abjMember\"\n />\n )}\n {field.type === \"select\" && (\n <DynamicSelect\n placeholder=\"Select value\"\n label=\"Is True\"\n options={[\n { value: \"option1\", label: \"Option 1\" },\n { value: \"option2\", label: \"Option 2\" },\n ]}\n formControl={props.control}\n name=\"is_true\"\n fieldArrayName=\"abjMember\"\n />\n )}\n </>\n );\n }\n })}\n </>\n );\n};\n\nElementController.propTypes = {\n name: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n field1: PropTypes.object,\n children: PropTypes.node.isRequired,\n updateField: PropTypes.func.isRequired,\n control: PropTypes.object.isRequired,\n};\n\nexport default ElementController;\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n // eslint-disable-next-line no-console\n console.warn(new Error().stack);\n }\n return new Date(NaN);\n }\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n return result;\n};\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n if (!matchResult) {\n return null;\n }\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n return undefined;\n}\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n case 2:\n return number + 'nd';\n case 3:\n return number + 'rd';\n }\n }\n return number + 'th';\n};\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\n}","import React, { useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"./date-range-picker.scss\";\n\nimport { getMonth, getYear } from \"date-fns\";\nimport CalenderIcon from \"../../assets/view-modal/calendar-icon\";\nimport { KeyboardArrowLeft, KeyboardArrowRight } from \"@mui/icons-material\";\nimport { Box } from \"@mui/material\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\ninterface CustomDatePickerInputProps {\n value: string;\n onClick: () => void;\n placeholderText: string; // Define placeholderText prop\n width?: number; // Make width prop optional\n}\n\nconst months: string[] = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst CustomDatePickerInput: React.FC<CustomDatePickerInputProps> = ({\n value,\n onClick,\n placeholderText,\n isRtl\n}) => (\n \n <div className=\"calender-container\">\n <input\n type=\"text\"\n value={value}\n onClick={onClick}\n placeholder={placeholderText}\n className=\"open-selected-calender\"\n />\n <div className={isRtl?\"icon-box_rtl\":\"icon-box\"}>\n <CalenderIcon />\n </div>\n </div>\n);\n\ninterface CustomHeaderProps {\n date: Date;\n decreaseMonth: () => void;\n increaseMonth: () => void;\n decreaseYear: () => void;\n increaseYear: () => void;\n prevMonthButtonDisabled: boolean;\n nextMonthButtonDisabled: boolean;\n prevYearButtonDisabled: boolean;\n nextYearButtonDisabled: boolean;\n}\n\nfunction DateRangePicker(props: any) {\n const {\n start = null,\n end = null,\n startYear = 1980,\n onDateRangeChange,\n ...rest\n } = props;\n const [startDate, setStartDate] = useState(start);\n const [endDate, setEndDate] = useState(end);\n const {isRtl}=useLanguage()\n const onChange = (dates: any) => {\n const [start, end] = dates;\n setStartDate(start);\n setEndDate(end);\n onDateRangeChange(dates);\n };\n\n const years: any = [];\n const currentYear = getYear(new Date());\n for (let i = startYear; i <= currentYear + 10; i++) {\n years.push(i);\n }\n\n return (\n <Box className=\"DateRangePicker\">\n <DatePicker\n dateFormat=\"dd-MM-yyyy\"\n {...rest}\n customInput={\n <CustomDatePickerInput\n placeholderText=\"DD-MM-YYYY\"\n value=\"\"\n isRtl={isRtl}\n onClick={() => { }}\n />\n }\n startDate={startDate}\n endDate={endDate}\n onChange={onChange}\n selectsRange={true}\n isClearable={true}\n renderCustomHeader={({\n date,\n decreaseMonth,\n increaseMonth,\n decreaseYear,\n increaseYear,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n prevYearButtonDisabled,\n nextYearButtonDisabled,\n }: CustomHeaderProps) => (\n <div className=\"date-picker-container\">\n <div className=\"d-flex\">\n <button\n onClick={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowLeft />\n </button>\n <div className=\"month-view\">{months[getMonth(date)]}</div>\n <button\n onClick={increaseMonth}\n disabled={nextMonthButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowRight />\n </button>\n </div>\n <div className=\"d-flex\">\n <button\n onClick={decreaseYear}\n disabled={prevYearButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowLeft />\n </button>\n <select\n className=\"select-year\"\n value={getYear(date)}\n onChange={(e) => {\n decreaseYear();\n setStartDate(new Date(+e.target.value, getMonth(date)));\n }}\n >\n {years.map((year: any) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <button\n onClick={increaseYear}\n disabled={nextYearButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowRight />\n </button>\n </div>\n </div>\n )}\n />\n </Box>\n );\n}\n\nexport { DateRangePicker };\nexport default DateRangePicker;\n","import React from 'react';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport DateRangePicker from '../../../date-range-picker/date-range-picker';\nimport dayjs from 'dayjs';\nimport Typography from '../../../typography/typography';\n\nconst DynamicDateRange = (props: any) => {\n const minDate = dayjs(props.min_date || null).isValid()\n ? dayjs(props.min_date).toDate()\n : null;\n\n const maxDate = dayjs(props.max_date || null).isValid()\n ? dayjs(props.max_date).toDate()\n : null;\n\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <>\n {props?.label &&\n <Typography\n type='s5'\n weight='medium'\n mb={0.5}\n color={props.error ? 'theme.error.600' : 'theme.secondary.800'}\n\n >\n {props.label}\n {props.required && <span className='requiredStar'>*</span>}\n </Typography>}\n\n <DateRangePicker\n start={field.value?.[0]}\n end={field.value?.[1]}\n startYear={props.startYear || 1980}\n onDateRangeChange={(dates: [Date | null, Date | null]) => {\n field.onChange(dates);\n if (props.onChange) {\n props.onChange(dates);\n }\n }}\n placeholderText={props.placeholder || \"MM-DD-YYYY - MM-DD-YYYY\"}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === 'builder' ? false : props.required}\n minDate={minDate}\n maxDate={maxDate}\n disabled={props.disabled}\n error={Boolean(fieldState.error)}\n helperText={fieldState.error?.message}\n />\n </>\n )}\n />\n );\n};\n\nDynamicDateRange.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n startYear: PropTypes.number,\n disabled: PropTypes.bool,\n min_date: PropTypes.any,\n max_date: PropTypes.any,\n onChange: PropTypes.func\n};\n\nexport { DynamicDateRange };\nexport default DynamicDateRange;","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport DateTimePicker from \"../../../date-time-picker/date-time-picker\";\nimport dayjs from \"dayjs\";\n\nconst DynamicDateTime = (props: any) => {\n const {readOnly=false} = props\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <DateTimePicker\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n placeholder={props.placeholder}\n required={props.formType === \"builder\" ? false : props.required}\n defaultValue={props.defaultValue}\n disableFutureDates={props.is_future_dates_allowed}\n disablePastDates={props.is_past_dates_allowed}\n helperText={fieldState.error?.message}\n error={Boolean(fieldState.error)}\n disabled={props.disabled}\n minDate={props.min_date}\n maxDate={props.max_date}\n minDateTime={props.min_date_time}\n maxDateTime={props.max_date_time}\n textFieldProps={readOnly? {readOnly: true} : {readOnly: false}}\n onChange={(newValue) => {\n if (props.min_date_time && newValue && dayjs(newValue).isSame(props.min_date_time, 'day')) {\n const selected = dayjs(newValue);\n // if time is earlier than min allowed time on same day, adjust it\n if (selected.isBefore(props.min_date_time)) {\n const adjusted = selected.hour(props.min_date_time.hour()).minute(props.min_date_time.minute());\n field.onChange(adjusted);\n return;\n }\n }\n \n field.onChange(newValue);\n }}\n />\n )}\n />\n );\n};\n\nDynamicDateTime.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n defaultValue: PropTypes.any,\n is_future_dates_allowed: PropTypes.bool,\n is_past_dates_allowed: PropTypes.bool,\n typeOfField: PropTypes.string,\n disable: PropTypes.bool,\n min_date: PropTypes.any,\n max_date: PropTypes.any,\n};\n\nexport { DynamicDateTime };\nexport default DynamicDateTime;\n","import React, { lazy } from 'react';\r\n\r\nimport { Control, Controller, FieldValues } from 'react-hook-form';\r\nimport Typography from '../../../typography/typography';\r\nconst CustomEditor = lazy(() => import('../../../editor/custom-editor'));\r\n\r\nimport \"./element.scss\";\r\n\r\nexport interface DynamicTextEditorProps {\r\n\tformControl: Control<FieldValues, any>;\r\n\tname: string;\r\n\tplaceholder: string;\r\n\tfieldArrayName: string;\r\n}\r\n\r\nconst DyanmicTextEditor: React.FC<DynamicTextEditorProps> = ({\r\n\tformControl,\r\n\tname,\r\n\tfieldArrayName,\r\n\tplaceholder\r\n}) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Controller\r\n\t\t\t\tname={`${fieldArrayName}.${name}`}\r\n\t\t\t\tcontrol={formControl}\r\n\t\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className='editor-container'>\r\n\t\t\t\t\t\t\t<CustomEditor\r\n\t\t\t\t\t\t\t\thandleEditorReady={() => {\r\n\t\t\t\t\t\t\t\t\tif (field.value) field.onChange(field.value);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdata={field.value}\r\n\t\t\t\t\t\t\t\tonEditorChange={(content: string) => {\r\n\t\t\t\t\t\t\t\t\tfield.onChange(content);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tconfig={{\r\n\t\t\t\t\t\t\t\t\tplaceholder: placeholder\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{fieldState.error?.message && (\r\n\t\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t\t{fieldState.error?.message}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default DyanmicTextEditor;\r\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { Controller/* , useFormContext */ } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport './element.scss';\r\nimport DatePicker from '../../../date-picker/date-picker';\r\n\r\ninterface CustomDatePickerProps {\r\n formControl: any;\r\n name: string;\r\n label: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n position?: number;\r\n formType?: string;\r\n placeholder?: string;\r\n defaultValue?: any;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n min_date?: any;\r\n max_date?: any;\r\n views?: any;\r\n}\r\n\r\nconst CustomDatePicker = React.memo<CustomDatePickerProps>((props) => {\r\n // const formContext = useFormContext();\r\n\r\n // Memoize field name to prevent unnecessary recalculations\r\n const fieldName = useMemo(() =>\r\n `${props.fieldArrayName}.${props.name}`,\r\n [props.fieldArrayName, props.name]\r\n );\r\n\r\n // Memoize date calculations to prevent recalculation on every render\r\n const { minDate, maxDate } = useMemo(() => {\r\n const min = dayjs(props.min_date || null).isValid()\r\n ? dayjs(props.min_date)\r\n : null;\r\n\r\n const max = dayjs(props.max_date || null).isValid()\r\n ? dayjs(props.max_date)\r\n : null;\r\n\r\n return { minDate: min, maxDate: max };\r\n }, [props.min_date, props.max_date]);\r\n\r\n // Memoize required prop calculation\r\n const isRequired = useMemo(() =>\r\n props.formType === 'builder' ? false : props.required,\r\n [props.formType, props.required]\r\n );\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={fieldName}\r\n render={({ field, fieldState }) => (\r\n <DatePicker\r\n {...field}\r\n {...props}\r\n dataPosition={props.position}\r\n dataName={fieldName}\r\n label={props.label}\r\n placeholder={props.placeholder}\r\n required={isRequired}\r\n defaultValue={props.defaultValue}\r\n disableFutureDates={props.is_future_dates_allowed}\r\n disablePastDates={props.is_past_dates_allowed}\r\n helperText={fieldState.error?.message}\r\n error={Boolean(fieldState.error)}\r\n disabled={props.disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nCustomDatePicker.displayName = 'CustomDatePicker';\r\n\r\nCustomDatePicker.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n required: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n defaultValue: PropTypes.any,\r\n is_future_dates_allowed: PropTypes.bool,\r\n is_past_dates_allowed: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n min_date: PropTypes.any,\r\n max_date: PropTypes.any\r\n};\r\n\r\nexport { CustomDatePicker };\r\nexport default CustomDatePicker;\r\n","// const FormData = [\n// {\n// \"field_type\": \"text\",\n// \"label\": \"Name\",\n// \"placeholder\": \"Enter name\",\n// \"default_value\": \"\",\n// \"min_length\": 2,\n// \"max_length\": 30,\n// \"is_multiline\": false,\n// \"is_required\": true,\n// \"is_unique\": false,\n// \"id\": \"a796bc38-9f6d-418b-a48d-a562e64ed990\"\n// },\n// {\n// \"field_type\": \"email\",\n// \"label\": \"Email\",\n// \"placeholder\": \"Enter email address\",\n// \"default_value\": \"\",\n// \"is_required\": false,\n// \"is_unique\": false,\n// \"id\": \"a8e34772-beb0-443c-86f4-cd0f79e4e546\"\n// },\n// {\n// \"field_type\": \"select\",\n// \"label\": \"Gender\",\n// \"placeholder\": \"Choose Gender\",\n// \"default_value\": \"option1\",\n// \"options\": [\n// {\n// \"text\": \"Male\",\n// \"value\": \"1\"\n// },\n// {\n// \"text\": \"Female\",\n// \"value\": \"2\"\n// },\n// {\n// \"text\": \"No\",\n// \"value\": \"3\"\n// },\n// {\n// \"text\": \"Yes\",\n// \"value\": \"4\"\n// }\n// ],\n// \"is_multiselect\": true,\n// \"is_required\": true,\n// \"is_unique\": false,\n// \"id\": \"cb4b4423-c072-4e02-a22a-86fb1e0dba3e\"\n// },\n// ]\n\nconst FormData = [\n {\n field_type: \"text\",\n label: \"Name\",\n placeholder: \"Enter name\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"35356fb9-9007-495a-ba9e-925449cb3eb2\",\n },\n {\n field_type: \"email\",\n label: \"Email\",\n placeholder: \"Enter email address\",\n default_value: \"\",\n is_required: false,\n is_unique: false,\n id: \"4f4ac646-bf48-4ed3-ae5b-910071e19b59\",\n },\n {\n field_type: \"phone\",\n label: \"Phone\",\n placeholder: \"Enter phone number\",\n default_value: \"\",\n is_required: false,\n is_unique: false,\n id: \"500d8a78-e389-474d-831b-43190da011a6\",\n },\n {\n field_type: \"select\",\n label: \"Status\",\n placeholder: \"Choose option\",\n default_value: \"option1\",\n options: [\n {\n text: \"Active\",\n value: \"1\",\n },\n {\n text: \"Inactive\",\n value: \"0\",\n },\n ],\n is_multiselect: false,\n is_required: true,\n is_unique: false,\n id: \"fa44f220-0d82-4569-a28c-997de8e66d5a\",\n },\n {\n field_type: \"text\",\n label: \"Address\",\n placeholder: \"Enter address\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"d25f2f1b-811f-4c3d-a53b-5162f766ad47\",\n },\n {\n field_type: \"text\",\n label: \"Message\",\n placeholder: \"Enter message\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"22de0b1b-080a-4a0b-9d5f-e6f4916d8b07\",\n },\n];\n\nexport { FormData };\nexport default FormData;\n","import { useRef, useEffect } from \"react\";\r\nimport { TextField as MUITextField, styled } from \"@mui/material\";\r\nimport Timeline from \"@mui/lab/Timeline\";\r\nimport TimelineItem from \"@mui/lab/TimelineItem\";\r\nimport TimelineSeparator from \"@mui/lab/TimelineSeparator\";\r\nimport TimelineConnector from \"@mui/lab/TimelineConnector\";\r\nimport TimelineContent from \"@mui/lab/TimelineContent\";\r\nimport TimelineDot from \"@mui/lab/TimelineDot\";\r\nimport \"./activity-tag.scss\";\r\nimport images from \"../../assets/images\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport Accordion from \"../accordion/accordion\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport formatText from \"../../utils/format-text\";\r\nimport Typography from \"../typography/typography\";\r\n\r\nconst StyledTextField = styled(MUITextField)(({ theme: { palette } }) => ({\r\n width: \"100%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n height: '2rem',\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[300],\r\n borderWidth: 2\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[300],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n // borderWidth: \"0.0625rem\",\r\n // borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n },\r\n}));\r\n\r\nexport const ActivityTag = (props: any) => {\r\n const {\r\n type,\r\n data,\r\n placeholder,\r\n error = false,\r\n textfield,\r\n textfieldTitle,\r\n onCommentSubmit,\r\n onChange,\r\n containerProps,\r\n accordion = true,\r\n ...rest\r\n } = props;\r\n const { user } = useAuth()\r\n\r\n const chatRef = useRef<HTMLDivElement>(null);\r\n\r\n const scrollToBottom = () => {\r\n if (chatRef.current) {\r\n chatRef.current.scrollTop = chatRef.current.scrollHeight;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n scrollToBottom();\r\n }, [data]);\r\n\r\n const formatDateTime = (dateTime: string) => {\r\n const currentDate = new Date();\r\n const commentDate = new Date(dateTime);\r\n const timeDifference = currentDate.getTime() - commentDate.getTime();\r\n const secondsDifference = Math.floor(timeDifference / 1000);\r\n const minutesDifference = Math.floor(secondsDifference / 60);\r\n const hoursDifference = Math.floor(minutesDifference / 60);\r\n\r\n if (secondsDifference < 60) {\r\n return `${secondsDifference} second${secondsDifference !== 1 ? 's' : ''\r\n } ago`;\r\n } else if (minutesDifference < 60) {\r\n return `${minutesDifference} minute${minutesDifference !== 1 ? 's' : ''\r\n } ago`;\r\n } else if (hoursDifference < 24) {\r\n return `${hoursDifference} hour${hoursDifference !== 1 ? 's' : ''} ago`;\r\n } else {\r\n // Format the date in the desired format\r\n const optionsDate: Intl.DateTimeFormatOptions = {\r\n day: 'numeric',\r\n month: 'short',\r\n year: 'numeric'\r\n };\r\n\r\n const optionsTime: Intl.DateTimeFormatOptions = {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n hour12: false\r\n };\r\n\r\n const formattedDate = commentDate.toLocaleString('en-US', optionsDate);\r\n const formattedTime = commentDate.toLocaleString('en-US', optionsTime);\r\n\r\n return `${formattedDate} • ${formattedTime}`;\r\n }\r\n };\r\n\r\n const handleKeyPress = (event: any) => {\r\n if (event.key === 'Enter') {\r\n const commentValue = (event.target as HTMLInputElement).value;\r\n if (commentValue.trim() !== '') {\r\n onCommentSubmit(commentValue);\r\n scrollToBottom();\r\n }\r\n }\r\n };\r\n\r\n const timelineItems =\r\n type === \"activity\" ? (\r\n data?.map((item: any, index: number) => (\r\n <div className=\"Timeline--Activity\">\r\n <TimelineItem key={index}>\r\n <TimelineSeparator>\r\n <TimelineDot />\r\n {data.length - 1 !== index && <TimelineConnector />}\r\n </TimelineSeparator>\r\n <TimelineContent className=\"Timeline--Content\">\r\n <Typography type=\"s4\" color=\"theme.secondary.800\" className=\"Timeline--ActivityLogItem\">\r\n {item.message} · {formatDateTime(item.created_at)}\r\n </Typography>\r\n </TimelineContent>\r\n </TimelineItem>\r\n </div>\r\n ))\r\n ) : (\r\n <>\r\n <div className=\"Timeline--Chat\" ref={chatRef}>\r\n {data.map((item: any, index: number) => (\r\n <TimelineItem key={index}>\r\n <TimelineSeparator>\r\n <Avatar src={images.chat} size={17} />\r\n <TimelineConnector />\r\n </TimelineSeparator>\r\n <TimelineContent>\r\n {item.name} commented this · {formatDateTime(item.created_at)}\r\n <div className=\"Timeline--CommentWrap\">\r\n <p className=\"Timeline--Comment\">{item.message}</p>\r\n </div>\r\n </TimelineContent>\r\n </TimelineItem>\r\n ))}\r\n </div>\r\n </>\r\n );\r\n\r\n // const avatarStyle = {\r\n // borderRadius: '0.5rem',\r\n // padding: '0.875rem 1.28125rem',\r\n // textAlign: 'center',\r\n // backgroundColor: `${randomColor}.200`,\r\n // color: `${randomColor}.1000`\r\n // };\r\n\r\n return (\r\n // <Box position='relative'>\r\n <div className=\"ActivityContainer\" {...containerProps}>\r\n <Timeline className=\"Timeline\">\r\n {accordion ? \r\n <Accordion title='Activities' accordionProps={{ defaultExpanded: true }}>\r\n {timelineItems}\r\n </Accordion> : \r\n <div className=\"Timeline--ActivityBox\">\r\n {timelineItems}\r\n </div>\r\n }\r\n {textfield && (\r\n <div className=\"Timeline--CommentBox\">\r\n {textfieldTitle}\r\n <div className=\"Timeline--CommentText\">\r\n <Avatar size={32} alt={formatText(user?.full_name)} className=\"avatar-class\" />\r\n <StyledTextField\r\n error={error}\r\n placeholder={placeholder}\r\n className=\"textfield\"\r\n onKeyDown={handleKeyPress}\r\n onChange={onChange}\r\n {...rest}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </Timeline>\r\n </div>\r\n // </Box>\r\n );\r\n};\r\n\r\nexport default ActivityTag;\r\n","import { Close } from '@mui/icons-material';\r\nimport {\r\n\tBox,\r\n\tCircularProgress,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Modal from '../modal/modal';\r\nimport Typography from '../typography/typography';\r\n\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport Select from '../select/select';\r\nimport { Controller, useForm } from 'react-hook-form';\r\n\r\nimport './quick-approval-modal.scss';\r\nimport { useEffect, useState } from 'react';\r\nimport Avatar from '../avatar/avatar';\r\nimport { formatLabel } from '../../utils/format-text';\r\nimport Checkbox from '../checkbox/checkbox';\r\nimport Button from '../button/button';\r\nimport ChipOrPlaceholder from '../form-control/form-builder/form-builder-element/chip-or-placeholder';\r\nimport Chip from '../chip/chip';\r\nimport { MoreIcon } from '../icons';\r\nimport { getV1User } from '../../api-client/api.rbac/api';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nimport React from 'react';\r\nimport { getToken } from '../../utils/common';\r\n\r\ninterface QuickApprovalModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: () => void;\r\n\tmodalProps?: DialogProps;\r\n\ttitle?: string;\r\n\tonConfirm: (approverIds: number[]) => void;\r\n isProcessing?: boolean\r\n}\r\n\r\ninterface IFormInput {\r\n\tapprover_id: number[];\r\n}\r\ninterface IUsersData {\r\n\tisLoading: boolean\r\n\tisError: boolean\r\n error: string | null\r\n data: Array<Record<string, any>>\r\n}\r\n\r\nconst validationSchema = Yup.object().shape({\r\n\tapprover_id: Yup.array()\r\n\t\t.required('Please select the approvers')\r\n\t\t.min(1, 'Please select the approvers')\r\n});\r\n\r\nconst QuickApprovalModal: React.FC<QuickApprovalModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\ttitle,\r\n\tonConfirm,\r\n isProcessing\r\n}) => {\r\n\tconst [users, setUsers] = useState<IUsersData>({\r\n\t\tisLoading: true,\r\n\t\tisError: false,\r\n\t\terror: 'null',\r\n\t\tdata: []\r\n\t});\r\n\tconst { isLoading, isError, error, data } = users;\r\n\r\n\tconst { control, handleSubmit, reset, setValue, getValues, watch, trigger } =\r\n\t\tuseForm<IFormInput>({\r\n\t\t\tresolver: yupResolver(validationSchema),\r\n\t\t\tmode: 'all'\r\n\t\t});\r\n\r\n\twatch('approver_id');\r\n\tconst formValues = getValues('approver_id');\r\n\r\n\tconst onSubmit = async (values: IFormInput) => {\r\n\t\tconst isValid = await trigger();\r\n\t\tif (!isValid) return;\r\n\t\tonConfirm(values.approver_id);\r\n\t\thandleModalClose();\r\n\t};\r\n\r\n\tconst handleModalClose = () => {\r\n\t\treset({approver_id: []});\r\n\t\tsetIsOpen();\r\n\t};\r\n\r\n\tconst SelectedItems = ({\r\n\t\tdata,\r\n\t\toptions\r\n\t}: {\r\n\t\tdata: number[];\r\n\t\toptions: any[];\r\n\t}) => {\r\n\t\tconst displayTitle = data.map((selectedItem) => {\r\n\t\t\tconst user = options.find((option: any) => option.id === selectedItem);\r\n\t\t\tif (user) {\r\n\t\t\t\treturn getLabel(user);\r\n\t\t\t}\r\n\t\t\treturn selectedItem;\r\n\t\t});\r\n\r\n\t\treturn (\r\n\t\t\t<Box display='flex' justifyContent='space-between' alignItems='center'>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tcolor='inherit'\r\n\t\t\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\r\n\t\t\t\t\t{displayTitle.slice(0, 3).join(', ')}\r\n\t\t\t\t\t{data.length > 4 && (\r\n\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\t\t\ttype='normal'\r\n\t\t\t\t\t\t\tclassName='quickApprovalModal--DisplayNameChip'\r\n\t\t\t\t\t\t\tlabel={<MoreIcon fontSize='small' />}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Button variant='text' onClick={() => setValue('approver_id', [])}>\r\n\t\t\t\t\t<Typography type='s5' color='inherit'>\r\n\t\t\t\t\t\tRemove\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Button>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getAndSetFetchUsers = async () => {\r\n\t\ttry {\r\n\t\t\tconst filters = { skip: 0, limit: 99, filters: `(is_active.eq=true)` };\r\n\t\t\tconst response = await getV1User({ ...filters, ...getToken() });\r\n\t\r\n\t\t\tconst users: any[] = response?.data?.users || [];\r\n\t\t\tsetUsers({\r\n\t\t\t\tisLoading: false,\r\n\t\t\t\tisError: false,\r\n\t\t\t\terror: null,\r\n\t\t\t\tdata: users\r\n\t\t\t});\t\r\n\t\t} catch (error) {\r\n\t\t\tsetUsers({\r\n\t\t\t\tisLoading: false,\r\n\t\t\t\tisError: true,\r\n\t\t\t\terror: 'Failed to fetch Approvers',\r\n\t\t\t\tdata: []\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isOpen) {\r\n\t\t\tgetAndSetFetchUsers()\r\n\t\t}\r\n\t}, [isOpen]);\r\n\tuseEffect(() => {\r\n\t\tif (isError) {\r\n\t\t\tenqueueSnackbar(error ?? 'Something went wrong', { variant: 'error'});\r\n\t\t}\r\n\t}, [error, isError]);\r\n\r\n\tconst getLabel = (obj: Record<any, any>) => {\r\n\t\tconst {first_name = '', last_name=''} = obj || {}\r\n\r\n\t\treturn formatLabel(`${first_name} ${last_name}`)\r\n\t}\r\n\r\n useEffect(() => {\r\n return () => {\r\n handleModalClose()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[])\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='sm'\r\n\t\t\tfullWidth\r\n\t\t\tdisableEscapeKeyDown\r\n\t\t\t{...modalProps}>\r\n\t\t\t<form onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t<DialogTitle className='quickApprovalModal--Title'>\r\n\t\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\t\t{title || 'Quick Approval'}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton onClick={handleModalClose}>\r\n\t\t\t\t\t\t<Close fontSize='small' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</DialogTitle>\r\n\t\t\t\t<DialogContent className='quickApprovalModal--ModalContentContainer'>\r\n\t\t\t\t\t<Controller\r\n\t\t\t\t\t\tname='approver_id'\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tname='approver_id'\r\n\t\t\t\t\t\t\t\t\tvalue={field.value || []}\r\n\t\t\t\t\t\t\t\t\tonChange={field.onChange}\r\n\t\t\t\t\t\t\t\t\terror={Boolean(fieldState.error?.message)}\r\n\t\t\t\t\t\t\t\t\thelperText={fieldState.error?.message || ''}\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\trenderValue={(selected: string[]) => (\r\n\t\t\t\t\t\t\t\t\t\t<ChipOrPlaceholder\r\n\t\t\t\t\t\t\t\t\t\t\tdata={selected}\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder='Select'\r\n\t\t\t\t\t\t\t\t\t\t\tonDelete={() => setValue('approver_id', [])}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\t\t\tfullWidth>\r\n\t\t\t\t\t\t\t\t\t{data.map((user) => {\r\n\t\t\t\t\t\t\t\t\t\tconst colors = [\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary1',\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary2',\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary3'\r\n\t\t\t\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\t\t\t\tconst randomIndex = Math.floor(\r\n\t\t\t\t\t\t\t\t\t\t\tMath.random() * colors.length\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\tconst randomColor = colors[randomIndex];\r\n\t\t\t\t\t\t\t\t\t\tconst avatarStyle = {\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: '0.25rem !important',\r\n\t\t\t\t\t\t\t\t\t\t\ttextAlign: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: `${randomColor}.200`,\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: `${randomColor}.1000`\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={user.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={user.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\tselected={Boolean(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfield.value && field.value.includes(user.id)\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box className='quickApprovalModal--UserListingContainer'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box className='quickApprovalModal--UserContent'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={user.profile_image}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talt={getLabel(user)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={avatarStyle}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize={24}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getLabel(user)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={Boolean(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfield.value && field.value.includes(user.id)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t{Array.isArray(field?.value) && field?.value?.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t<SelectedItems data={field.value} options={data} />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</DialogContent>\r\n\t\t\t\t<DialogActions className='quickApprovalModal--DialogActions'>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tclassName='quickApprovalModal--DialogActions--Cancel'\r\n\t\t\t\t\t\tonClick={handleModalClose}\r\n\t\t\t\t\t\tdisabled={isLoading || isProcessing}>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype='button'\r\n\t\t\t\t\t\tonClick={handleSubmit(onSubmit)}\r\n\t\t\t\t\t\tendIcon={\r\n\t\t\t\t\t\t\tisProcessing ? (\r\n\t\t\t\t\t\t\t\t<CircularProgress size={15} color='inherit' />\r\n\t\t\t\t\t\t\t) : undefined\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdisabled={isProcessing || isLoading || Boolean(!formValues?.length)}>\r\n\t\t\t\t\t\tSend Request\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default QuickApprovalModal;","import { useState } from \"react\";\nimport { IconButton } from \"@mui/material\";\nimport images from \"../../assets/images\";\n\nconst ColumnHeader = ({ column }: any) => {\n const [isRenameColumn, setIsRenameColumn] = useState(false);\n const [newColumnTitle, setNewColumnTitle] = useState(column.title);\n\n const handleRenameColumn = () => {\n column.title = newColumnTitle;\n setIsRenameColumn(false);\n };\n\n return (\n <div className=\"kanban-column lead-card\">\n {isRenameColumn ? (\n <div className=\"create-status-box\">\n <input\n type=\"text\"\n placeholder=\"Enter new status title\"\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n />\n <div className=\"add-btns\">\n <button onClick={() => handleRenameColumn()}>Rename</button>\n <button onClick={() => setIsRenameColumn(false)}>Cancel</button>\n </div>\n </div>\n ) : (\n <h2\n className=\"kanban-column-title\"\n onDoubleClick={() => setIsRenameColumn(true)}\n >\n {column.title}\n </h2>\n )}\n\n <span className=\"count-length-text\">{column.cards.length}</span>\n\n <IconButton color=\"inherit\" size=\"small\" className=\"more-menu-btn\">\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n </div>\n );\n};\n\nexport { ColumnHeader };\nexport default ColumnHeader;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface IItemsSummary {\n\ttotalQuantity: number | string;\n\ttotal: number | string;\n\tcurrencySymbol: string;\n}\ninterface IItemsSummaryProps {\n\tdata: IItemsSummary;\n}\n\nconst ItemsSummary: React.FC<IItemsSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tItems\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Quantity\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.totalQuantity}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default ItemsSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface IDiscountSummary {\n\titemDiscount: number | string;\n\tadditionalDiscount?: number | string;\n\ttotalDiscount?: number | string;\n\tpromotionAmount?: number | string;\n\tcurrencySymbol: string;\n}\ninterface IDiscountSummaryProps {\n\tdata: IDiscountSummary;\n\tenalblePromotions?: boolean;\n}\n\nconst DiscountSummary: React.FC<IDiscountSummaryProps> = ({\n\tdata,\n\tenalblePromotions\n}) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tDiscounts\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tItem Discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.itemDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Number(data.additionalDiscount) > 0 &&\n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tAdditional Discount\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.additionalDiscount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t\t{Boolean(enalblePromotions) && (\n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tPromotion Amount\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.promotionAmount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.totalDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default DiscountSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ISubtotalSummary {\n\tsubtotalExTax: number | string;\n\tsubtotalExDiscount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ISubtotalSummaryProps {\n\tdata: ISubtotalSummary;\n}\n\nconst SubtotalSummary: React.FC<ISubtotalSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tSubtotal\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tSubtotal Excluding Taxes\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.subtotalExTax}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tSubtotal Excluding discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.subtotalExDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default SubtotalSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ITaxesAndChargesSummary {\n\ttaxes: number | string;\n\tdeductedTax: number | string;\n\ttotal: number | string;\n\tshippingAmount: number | string;\n\thandlingAmount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ITaxesAndChargesSummaryProps {\n\tdata: ITaxesAndChargesSummary;\n\tenableShippings?: boolean;\n}\n\nconst TaxesAndChargesSummary: React.FC<ITaxesAndChargesSummaryProps> = ({\n\tdata,\n\tenableShippings\n}) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tTaxes and Charges\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTaxes and Charges Added\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.taxes}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTaxes and Charges deducted\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.deductedTax}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Taxes and Charges Added\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Boolean(enableShippings) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\t\tShipping Amount\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{data.currencySymbol} {data.shippingAmount}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\t\tHandling Amount\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{data.currencySymbol} {data.handlingAmount}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default TaxesAndChargesSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ITotalSummary {\n\ttotal: string | number;\n\troundOffDifferenceAmount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ITotalSummaryProps {\n\tdata: ITotalSummary;\n}\n\nconst TotalSummary: React.FC<ITotalSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tTotal\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tGrand Total\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Number(data.roundOffDifferenceAmount) > 0 && \n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tRound Off Difference\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.roundOffDifferenceAmount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default TotalSummary;\n","import { Box } from \"@mui/material\";\nimport \"./card-wrapper.scss\";\nimport React from \"react\";\n\ninterface CardWrapperPropsType {\n children: React.ReactNode;\n}\n\nconst CardWrapper = ({ children, ...rest }: CardWrapperPropsType) => {\n return (\n <Box className=\"card-wrapper\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport { CardWrapper };\nexport default CardWrapper;\n","import { useState } from \"react\";\r\nimport Modal from \"../modal/modal\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoginFormValues } from \"../../contexts/AuthContext\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as Yup from \"yup\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport { Eye, EyeOff } from \"../icons\";\r\nimport Button from \"../button/button\";\r\nimport Toast from \"../toast/toast\";\r\nimport { Checkbox, FormControlLabel } from \"@mui/material\";\r\n\r\n\r\nconst validationSchema = Yup.object({\r\n login: Yup.object({\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n }),\r\n});\r\n\r\n\r\n\r\nconst ChangeUserPasswordModal = ({showModal, setShowModal, userId}) => {\r\n const { changeUserPasswordByAdmin } = useAuth();\r\n const [isNotify, setIsNotify] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n values.login.id = userId;\r\n values.login.isNotify = isNotify;\r\n await changeUserPasswordByAdmin(values.login, (message, type) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setShowModal(false);\r\n reset({\r\n login: {\r\n password: \"\",\r\n id: \"\",\r\n isNotify: false\r\n },\r\n });\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n });\r\n return values; \r\n };\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n return (\r\n <>\r\n <Modal \r\n open={showModal}\r\n onClose={() => setShowModal(false)} \r\n children={\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4} className=\"popup-change-pass\">\r\n <FlexBox gap={2}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Enter New Password\"\r\n name=\"password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter New Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel control={<Checkbox size=\"small\" onChange={(e) => setIsNotify(e.target.checked)} sx={{\r\n '&.Mui-checked': {\r\n color: '#2EB273',\r\n },\r\n }} />} label=\"Notify User of Password Change\" sx={{ \r\n '& .MuiFormControlLabel-label': {\r\n fontSize: '14px',\r\n },\r\n }}/>\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)} size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form> \r\n </>\r\n }\r\n />\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport { ChangeUserPasswordModal };\r\nexport default ChangeUserPasswordModal;","import { styled } from '@mui/material/styles';\r\nimport ReactFlagsSelect from \"react-flags-select\";\r\nimport Typography from \"../typography/typography\";\r\nimport images from \"../../assets/images\";\r\n\r\ninterface ICountrySelect {\r\n country: string;\r\n handleCountry: (country: string) => void;\r\n}\r\n\r\nconst StyledFlagsSelect = styled(ReactFlagsSelect)(\r\n ({ theme: { palette } }) => ({\r\n \".country-button\": {\r\n span: {\r\n fontSize: \"0.875rem\",\r\n },\r\n svg: {\r\n fontSize: \"1.25rem\",\r\n },\r\n padding: \"0.2rem 0.5rem 0.2rem 0rem\",\r\n borderRadius: \".25rem\",\r\n border: \"1px solid #D3D3D4\",\r\n },\r\n\r\n ul: {\r\n input: {\r\n padding: \"0.5rem\",\r\n borderRadius: \"0.5rem\",\r\n fontSize: \"0.8125rem\",\r\n margin: \"0px 0.75rem\",\r\n border: `1px solid ${palette.theme?.secondary[200]}`,\r\n background: `url(${images.search}) no-repeat scroll 0.5rem 0.5rem`,\r\n paddingLeft: \"2rem\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundColor: `${palette.theme?.secondary[100]}`,\r\n },\r\n li: {\r\n fontSize: \"0.8125rem\",\r\n padding: \"0.5rem 1rem\",\r\n },\r\n boxShadow:\r\n \"0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)\",\r\n borderRadius: \"0.5rem\",\r\n marginTop: \"0.25rem\",\r\n border: \"none\",\r\n\r\n div: {\r\n borderBottom: `1px solid ${palette.theme?.secondary[200]}`,\r\n paddingBottom: \"0.5rem\",\r\n },\r\n },\r\n }),\r\n);\r\n\r\nconst CountrySelect = ({ country, handleCountry }: ICountrySelect) => {\r\n return (\r\n <>\r\n <Typography type=\"s4\" fontWeight={\"medium\"} mb={0.5}>\r\n Country\r\n </Typography>\r\n <StyledFlagsSelect\r\n fullWidth\r\n searchable={true}\r\n searchPlaceholder=\"Search Country\"\r\n selected={country || \"IN\"}\r\n selectButtonClassName=\"country-button\"\r\n onSelect={handleCountry}\r\n showSelectedLabel={true}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { CountrySelect };\r\nexport default CountrySelect;\r\n","import React, { useState } from 'react';\nimport {\n Box,\n styled,\n ButtonBase,\n} from '@mui/material';\n\n// Styled container for the toggle switch\nconst ToggleContainer = styled(Box)(({ theme }) => ({\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n // backgroundColor: theme.palette.grey[300],\n borderRadius: theme.spacing(3),\n padding: theme.spacing(0.5),\n cursor: 'pointer',\n transition: 'all 0.3s ease-in-out',\n minWidth: 'max-content',\n backgroundColor: theme.palette.common.white,\n border: '1px solid',\n borderColor: theme.palette.grey[200],\n '&.disabled': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n}));\n\n// Styled sliding background\nconst SlidingBackground = styled(Box)(({ theme }) => ({\n position: 'absolute',\n // top: theme.spacing(0.5),\n // bottom: theme.spacing(0.5),\n backgroundColor: theme.palette.theme.primary[100],\n borderRadius: theme.spacing(2.5),\n transition: 'all 0.3s ease-in-out',\n top:0,\n bottom: 0,\n zIndex: 1,\n}));\n\n// Styled text label\nconst ToggleLabel = styled(ButtonBase)(({ theme, active }) => ({\n position: 'relative',\n zIndex: 2,\n padding: theme.spacing(1, 1.5),\n borderRadius: theme.spacing(2.5),\n fontSize: '0.75rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n userSelect: 'none',\n transition: 'color 0.3s ease-in-out',\n color: active ? theme.palette.primary.main : theme.palette.grey[600],\n '&:hover:not(.disabled)': {\n color: active ? theme.palette.primary.main : theme.palette.grey[800],\n },\n '&.disabled': {\n cursor: 'not-allowed',\n },\n}));\n\n// Main dynamic toggle switch component\nconst CustomToggleSwitch = ({\n leftLabel = \"Collapse All\",\n rightLabel = \"Expand All\",\n defaultChecked = false,\n onChange,\n disabled = false,\n sx = {},\n ...props\n}) => {\n const [checked, setChecked] = useState(defaultChecked);\n\n const handleChange = (newValue) => {\n if (disabled) return;\n setChecked(newValue);\n if (onChange) {\n onChange(newValue, newValue ? rightLabel : leftLabel);\n }\n };\n\n const handleTextClick = (isRightLabel) => {\n if (disabled) return;\n const newValue = isRightLabel;\n handleChange(newValue);\n };\n\n return (\n <ToggleContainer\n className={disabled ? 'disabled' : ''}\n sx={sx}\n {...props}\n >\n {/* Sliding background */}\n <SlidingBackground\n sx={{\n left: checked ? '50%' : 0,\n right: checked ? 0 : '50%',\n }}\n />\n \n {/* Left label */}\n <ToggleLabel\n active={!checked}\n className={disabled ? 'disabled' : ''}\n onClick={() => handleTextClick(false)}\n disableRipple={true}\n disabled={disabled}\n >\n {leftLabel}\n </ToggleLabel>\n \n {/* Right label */}\n <ToggleLabel\n active={checked}\n className={disabled ? 'disabled' : ''}\n onClick={() => handleTextClick(true)}\n disableRipple={true}\n disabled={disabled}\n >\n {rightLabel}\n </ToggleLabel>\n </ToggleContainer>\n );\n};\n\nexport { CustomToggleSwitch };\nexport default CustomToggleSwitch","import React, { useState, ReactNode, useEffect, useMemo } from 'react';\r\nimport { \r\n Grid, \r\n IconButton, \r\n Collapse, \r\n useTheme, \r\n useMediaQuery,\r\n Tooltip,\r\n Box,\r\n Drawer\r\n} from '@mui/material';\r\nimport { \r\n ChevronLeft, \r\n ChevronRight,\r\n Close,\r\n // Close\r\n} from '@mui/icons-material';\r\nimport { useLanguage } from '../../hooks/useLangauge';\r\n\r\nexport interface ExpandableSummaryWrapperProps {\r\n children: ReactNode;\r\n defaultExpanded?: boolean;\r\n expandedGridSize?: number; // Grid size when expanded (1-12)\r\n collapsedGridSize?: number; // Grid size when collapsed (0-2)\r\n className?: string;\r\n ariaLabel?: string;\r\n onToggle?: (isExpanded: boolean, newGridSize: number) => void;\r\n persistState?: boolean;\r\n storageKey?: string;\r\n showToggleButton?: boolean;\r\n mobileDrawer?: boolean; // Use drawer on mobile instead of grid\r\n showCollapseIcon?: boolean; // Show collapse icon at top of summary\r\n}\r\n\r\nconst ExpandableSummaryWrapper: React.FC<ExpandableSummaryWrapperProps> = ({\r\n children,\r\n defaultExpanded = true,\r\n expandedGridSize = 3,\r\n collapsedGridSize = 0,\r\n className = '',\r\n ariaLabel = 'Toggle summary panel',\r\n onToggle,\r\n persistState = false,\r\n storageKey = 'grid-summary-panel-state',\r\n showToggleButton = true,\r\n mobileDrawer = true,\r\n showCollapseIcon = true\r\n}) => {\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\nconst {currentLanguage}=useLanguage();\r\n const isRtl=useMemo(()=>currentLanguage?.direction===\"rtl\",[currentLanguage])\r\n // Initialize state with localStorage if persistState is enabled\r\n const getInitialState = () => {\r\n if (persistState && typeof window !== 'undefined') {\r\n const stored = localStorage.getItem(storageKey);\r\n return stored ? JSON.parse(stored) : defaultExpanded;\r\n }\r\n return defaultExpanded;\r\n };\r\n\r\n const [isExpanded, setIsExpanded] = useState<boolean>(getInitialState);\r\n // Add this state to your component\r\n const [showAfterDelay, setShowAfterDelay] = useState(false);\r\n\r\n // Add this useEffect\r\n useEffect(() => {\r\n if(!isExpanded) {\r\n setShowAfterDelay(false)\r\n return\r\n }\r\n const timer = setTimeout(() => {\r\n setShowAfterDelay(true);\r\n }, 250);\r\n\r\n return () => clearTimeout(timer);\r\n }, [isExpanded]);\r\n\r\n const handleToggle = () => {\r\n const newState = !isExpanded;\r\n const newGridSize = newState ? expandedGridSize : collapsedGridSize;\r\n setIsExpanded(newState);\r\n \r\n // Persist state if enabled\r\n if (persistState && typeof window !== 'undefined') {\r\n localStorage.setItem(storageKey, JSON.stringify(newState));\r\n }\r\n \r\n // Call external toggle handler with new grid size\r\n onToggle?.(newState, newGridSize);\r\n };\r\n\r\n const currentGridSize = isExpanded ? expandedGridSize : collapsedGridSize;\r\n\r\n // Mobile drawer implementation\r\n if (isMobile && mobileDrawer) {\r\n return (\r\n <>\r\n {/* Mobile Toggle Button */}\r\n {showToggleButton && (\r\n <IconButton\r\n onClick={handleToggle}\r\n sx={{\r\n position: 'fixed',\r\n top: '50%',\r\n [isRtl ? 'left' : 'right']: 0,\r\n zIndex: theme.zIndex.fab,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n '&:hover': {\r\n bgcolor: theme.palette.action.hover,\r\n },\r\n }}\r\n aria-label={ariaLabel}\r\n >\r\n <ChevronLeft />\r\n </IconButton>\r\n )}\r\n\r\n {/* Mobile Drawer */}\r\n <Drawer\r\n anchor=\"right\"\r\n open={isExpanded}\r\n onClose={handleToggle}\r\n sx={(theme) => ({\r\n '& .MuiDrawer-paper': {\r\n width: '90vw',\r\n [theme.breakpoints.up('md')]: {\r\n maxWidth: '400px',\r\n marginTop: '65px',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: '300px',\r\n marginTop: '65px',\r\n },\r\n [theme.breakpoints.up('xs')]: {\r\n maxWidth: '200px',\r\n marginTop: '56px',\r\n }\r\n },\r\n })}\r\n >\r\n {children}\r\n </Drawer>\r\n </>\r\n );\r\n }\r\n\r\n // Desktop/Tablet Grid implementation\r\n return (\r\n <Grid \r\n item \r\n xs={currentGridSize} \r\n sx={{\r\n position: 'relative',\r\n transition: theme.transitions.create(['flex-basis', 'max-width'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n overflow: 'visible', // Changed from 'hidden' to allow button outside\r\n minHeight: '100%',\r\n // Ensure grid item is visible even when size is 0\r\n display: currentGridSize === 0 ? 'block' : 'block',\r\n minWidth: currentGridSize === 0 ? 0 : 'auto',\r\n }}\r\n className={className}\r\n >\r\n {/* Alternative toggle button for completely collapsed state */}\r\n {(showToggleButton && !isExpanded) && (\r\n <Tooltip title=\"Expand summary\" placement=\"left\">\r\n <IconButton\r\n onClick={handleToggle}\r\n sx={{\r\n position: 'fixed',\r\n top: '20%',\r\n [isRtl ? 'left' : 'right']: 0,\r\n width:'30px',\r\n zIndex: theme.zIndex.fab,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n '&:hover': {\r\n bgcolor: theme.palette.action.hover,\r\n },\r\n }}\r\n aria-label=\"Expand summary panel\"\r\n >\r\n {!isExpanded ? <ChevronLeft /> : <ChevronRight />}\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n\r\n {/* Content Container */}\r\n {(currentGridSize > 0 && showAfterDelay) && (\r\n <Box\r\n sx={{\r\n height: '100%',\r\n width: '100%',\r\n overflow: 'visible',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n bgcolor: theme.palette.background.paper,\r\n borderLeft: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n position: 'relative',\r\n }}\r\n >\r\n {/* Fixed Collapse Icon at Top of Summary */}\r\n {showCollapseIcon && isExpanded && (\r\n <Tooltip title=\"Close summary\" placement=\"left\">\r\n <IconButton\r\n onClick={handleToggle}\r\n size='small'\r\n sx={{\r\n position: 'absolute',\r\n top: '-15px',\r\n [isRtl ? 'right' : 'left']: '-15px',\r\n zIndex: 1200,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n bgcolor: '#fff',\r\n },\r\n boxShadow: 'none',\r\n }}\r\n >\r\n <Close sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n\r\n <Collapse \r\n in={isExpanded} \r\n orientation=\"horizontal\" \r\n sx={{ \r\n height: '100%',\r\n '& .MuiCollapse-wrapperInner': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n width: '100%',\r\n }}\r\n >\r\n <Box sx={{ \r\n width: '100%', \r\n height: '100%', \r\n overflow: 'auto',\r\n minWidth: 0,\r\n // pt: showCollapseIcon ? 6 : 0, // Add padding top when collapse icon is shown\r\n }}>\r\n {children}\r\n </Box>\r\n </Collapse>\r\n\r\n {/* Collapsed State Indicator for partial collapse */}\r\n {!isExpanded && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n width: '100%',\r\n color: theme.palette.text.secondary,\r\n cursor: 'pointer',\r\n }}\r\n onClick={handleToggle}\r\n >\r\n <Box\r\n sx={{\r\n writingMode: 'vertical-lr',\r\n textOrientation: 'mixed',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n letterSpacing: '0.1em',\r\n }}\r\n >\r\n SUMMARY\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default ExpandableSummaryWrapper;\r\n","import React from \"react\";\r\nimport Button from \"../../button/button\";\r\nimport DropdownButton, {\r\n IDropdownMenuOption,\r\n} from \"../../dropdown-button/dropdown-button\";\r\n\r\nimport './report-buttons.scss'\r\nimport { ButtonProps, SxProps } from \"@mui/material\";\r\n\r\nexport interface IActionButtons {\r\n title?: string;\r\n icon?: React.ReactNode;\r\n btnStyle?: \"WhiteBtn\";\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n action?: () => void;\r\n class?: string;\r\n}\r\n\r\nexport interface IReportButtons extends ButtonProps { \r\n className?: string;\r\n buttons?: IActionButtons[];\r\n dropdownMenuButtonData?: {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n options: IDropdownMenuOption[];\r\n sx?: SxProps;\r\n } | null;\r\n toggleCallback?: (e?: boolean) => void;\r\n zIndex?: number;\r\n iconPosition: 'start' | 'end';\r\n}\r\n\r\nconst ReportButtons = ({ buttons, dropdownMenuButtonData = null, toggleCallback, className, zIndex = 999, iconPosition = 'start', ...rest }: IReportButtons) => {\r\n return (\r\n <div className={className}>\r\n {buttons?.map((ele) => (\r\n <Button\r\n className={\r\n ele.class\r\n ? ele.class\r\n : `wrapper--${ele?.btnStyle}`\r\n }\r\n key={ele.title}\r\n variant={ele.variant ? ele.variant : \"contained\"}\r\n startIcon={ele.icon ? ele.icon : \"\"}\r\n onClick={ele.action}\r\n >\r\n {ele.title ?? \"\"}\r\n </Button>\r\n ))}\r\n {dropdownMenuButtonData && (\r\n <div style={{ zIndex }}>\r\n <DropdownButton\r\n options={dropdownMenuButtonData.options || []}\r\n {...(iconPosition === 'start' ? { startIcon: dropdownMenuButtonData.icon } : { endIcon: dropdownMenuButtonData.icon })}\r\n isMenuThirdItemDisabled={true}\r\n isOnlyDropDownButton={true}\r\n variant={\"text\"}\r\n buttonGroupProps={{\r\n variant: \"text\",\r\n }}\r\n onlyDropDownButtonProps={{\r\n style: {\r\n backgroundColor: \"white !important\",\r\n color: \"black !important\",\r\n ...dropdownMenuButtonData.sx\r\n },\r\n }}\r\n toggleCallback={toggleCallback}\r\n {...rest}\r\n >\r\n {dropdownMenuButtonData.children}\r\n </DropdownButton>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport { ReportButtons };\r\nexport default ReportButtons;\r\n","import Button from \"../button/button\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./inventory-reports-title-bar.scss\";\r\n\r\nimport TitleDropdownButton from \"../title-dropdown-button/title-dropdown-button\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport { generateFields } from \"../../utils/common\";\r\nimport ReportButtons, { IReportButtons } from \"./report-buttons/report-buttons\";\r\nimport TabBar, { TabProps } from \"../tabs/tabs\";\r\nimport { Box, ButtonGroup, ClickAwayListener, Divider, Grow, Menu, MenuItem, Paper, Popper, Button as MuiButton } from \"@mui/material\";\r\nimport images from \"../../assets/images\";\r\nimport { enUS } from 'date-fns/locale'; // Import the desired locale\r\n// import ReportFilter from './component/reportFilter'\r\nimport {\r\n handleCompareDateRangeSync as handleCompareDateRange,\r\n RANGE,\r\n} from \"../../utils/date-range\";\r\nimport { DateRange, Calendar } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\"; // main css file\r\nimport \"react-date-range/dist/theme/default.css\"; // theme css file\r\nimport dayjs from \"dayjs\";\r\n// import { fetchOptions } from \"./redux/actionCreator\";\r\nimport React from \"react\";\r\nimport HeaderCard from \"../header-card/header-card\";\r\nimport viewTypes from \"../../constants/action-bar\";\r\nimport SearchBar from \"../search-bar/search-bar\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport SearchableSelect from \"../searchable-select\";\r\nimport { Filter as FilterIcon } from \"../icons\";\r\n\r\ninterface IReportFilters {\r\n company: number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n item_id: string | number;\r\n warehouse_id: string | number;\r\n assembly_item_id: number | string;\r\n bom_id: number | string\r\n}\r\n\r\n/** Descriptor for a custom component injected into the filter row. */\r\ninterface ICustomFilterComponent {\r\n /** Unique key used for React reconciliation. */\r\n key: string;\r\n /** The ReactNode to render inside the filter bar. */\r\n component: React.ReactNode;\r\n}\r\n\r\ninterface ActionBarPropsType extends Partial<TabProps>, IReportButtons {\r\n title: string;\r\n handleAddButton?: (e?: any) => void;\r\n isTitleMenu?: boolean;\r\n titleMenus?: any;\r\n reportFilterFields?: any[];\r\n isDateFilterEnabled?: boolean;\r\n onDateFilterChange?: (data: Partial<IReportFilters>) => void;\r\n filters?: Partial<IReportFilters>;\r\n isDateRange?: boolean;\r\n activeView?: string;\r\n setActiveView?: (string: string) => void;\r\n handleSearch?: (string: string) => void;\r\n showLevelBtn?: boolean;\r\n handleRowsExpand: () => void;\r\n handleRowsCollapse: () => void;\r\n customElement?: React.ReactNode;\r\n showLeftContent: boolean;\r\n showAssembluItemsFilter?: boolean;\r\n showBomFilter: boolean;\r\n isViewButton?: boolean;\r\n handleRedirect?: () => void;\r\n buttonText?: string;\r\n dataLength: number,\r\n filterDropDown: any[],\r\n filterKeys?: any,\r\n customSelectedFilter?: any[],\r\n customFilterConfig?: any[],\r\n /**\r\n * When `false` the Date chip and the date-range dropdown button are hidden\r\n * and date-related keys (`start_date`, `end_date`, `as_of_date`) are stripped\r\n * from every filter payload so they cannot reach the API.\r\n * Defaults to `true` (backward-compatible).\r\n */\r\n showDateFilter?: boolean;\r\n /**\r\n * Optional list of custom components to render inside the filter row.\r\n * Each entry must have a unique `key` and a `component` (ReactNode).\r\n * They are appended after the standard SearchableSelect filters.\r\n */\r\n customFilterComponents?: ICustomFilterComponent[];\r\n}\r\n\r\ntype TDatePickerVal = {\r\n startDate?: Date;\r\n endDate?: Date;\r\n key?: string;\r\n};\r\n\r\nconst customStyle =\r\n{\r\n\r\n '& .MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n border: 'none',\r\n },\r\n '&:hover fieldset': {\r\n border: 'none',\r\n },\r\n\r\n '&.Mui-focused fieldset': {\r\n border: 'none',\r\n },\r\n\r\n },\r\n}\r\nconst InventoryReportsTitleBar = (props: ActionBarPropsType) => {\r\n const {\r\n title,\r\n handleAddButton,\r\n buttons = [],\r\n dropdownMenuButtonData,\r\n isTitleMenu = false,\r\n titleMenus = [],\r\n reportFilterFields = [],\r\n toggleCallback,\r\n tabs,\r\n activeValue,\r\n setActiveValue,\r\n isDateFilterEnabled,\r\n onDateFilterChange,\r\n filters = {},\r\n isDateRange = true,\r\n activeView = \"\",\r\n setActiveView,\r\n handleSearch,\r\n showLevelBtn = false,\r\n handleRowsExpand,\r\n handleRowsCollapse,\r\n customElement,\r\n showLeftContent = true,\r\n // showAssembluItemsFilter = false,\r\n // showBomFilter = false,\r\n isViewButton = false,\r\n handleRedirect,\r\n buttonText = '',\r\n dataLength,\r\n filterDropDown = [],\r\n filterKeys,\r\n customFilterConfig = [],\r\n customSelectedFilter = [],\r\n /** Hide the date chip and date-range dropdown when false. Defaults to true. */\r\n showDateFilter = true,\r\n /** Custom ReactNode components rendered after the standard filters. */\r\n customFilterComponents = [],\r\n } = props;\r\n\r\n // When `showDateFilter` is false, exclude the 'date' entry from the\r\n // default selection so the date chip is never active.\r\n const defaultSelectedFilter = [\r\n // Only include 'date' when the date field is enabled.\r\n ...(showDateFilter ? [{ value: 'date' }] : []),\r\n {\r\n value: 'location',\r\n },\r\n {\r\n value: 'company',\r\n },\r\n ]\r\n\r\n const defaultConfig = [\r\n {\r\n key: 'company',\r\n label: 'Search Company',\r\n placeholder: 'Company',\r\n apiType: 'company',\r\n valueKey: filterKeys?.['company'] ? filterKeys['company'] : 'company',\r\n customFilter: null,\r\n },\r\n {\r\n key: 'assembly_item',\r\n label: 'Search Assembaly Items',\r\n placeholder: 'Assembaly Items',\r\n apiType: 'assemblyItems',\r\n valueKey: filterKeys?.['assembly_item'] ? filterKeys['assembly_item'] : 'assembly_item_id',\r\n },\r\n {\r\n key: 'item',\r\n label: 'Search Items',\r\n placeholder: 'Items',\r\n apiType: 'reportItems',\r\n valueKey: filterKeys?.['item'] ? filterKeys['item'] : 'item_id',\r\n multiple: true\r\n },\r\n {\r\n key: 'location',\r\n label: 'Search Warehouse Location',\r\n placeholder: 'Warehouse Location',\r\n apiType: 'location',\r\n valueKey: filterKeys?.['location'] ? filterKeys['location'] : 'warehouse_id',\r\n customFilter: null,\r\n multiple: true\r\n\r\n },\r\n {\r\n key: 'bom',\r\n label: 'Search Bill of Materials',\r\n placeholder: 'Filter Bill of Materials',\r\n apiType: 'bom',\r\n valueKey: filterKeys?.['bom'] ? filterKeys['bom'] : 'bom_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'work_order',\r\n label: 'Search Work Order',\r\n placeholder: ' Work Order',\r\n apiType: 'workOrder',\r\n valueKey: filterKeys?.['work_order'] ? filterKeys['work_order'] : 'work_order_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'routing',\r\n label: 'Search Routing',\r\n placeholder: ' Routing',\r\n apiType: 'routing',\r\n valueKey: filterKeys?.['routing'] ? filterKeys['routing'] : 'routing_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'operation',\r\n label: 'Search Operation',\r\n placeholder: ' Operation',\r\n apiType: 'operations',\r\n valueKey: filterKeys?.['operation'] ? filterKeys['operation'] : 'operation_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'equipment',\r\n label: 'Search Equipment',\r\n placeholder: ' Equipment',\r\n apiType: 'equipment',\r\n valueKey: filterKeys?.['equipment'] ? filterKeys['equipment'] : 'equipment_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'work_center',\r\n label: 'Search Work Center',\r\n placeholder: ' Work Center',\r\n apiType: 'workCenter',\r\n valueKey: filterKeys?.['work_center'] ? filterKeys['work_center'] : 'work_center_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n\r\n ]\r\n const filtersConfig = useMemo(() => {\r\n return [...defaultConfig, ...customFilterConfig]\r\n }, []);\r\n const inputStyle =\r\n {\r\n border: \"none\",\r\n \"&.Mui-focused\": {\r\n borderColor: \"transparent\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"0px\",\r\n fontSize: \"14px\",\r\n color: '#289b64'\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n '& .MuiSelect-icon': {\r\n color: 'green',\r\n },\r\n }\r\n\r\n\r\n /**\r\n * Wraps `onDateFilterChange` to strip date-related keys when\r\n * `showDateFilter` is false, guaranteeing they never reach the API.\r\n * Defined before `renderFilter` to avoid temporal dead zone errors.\r\n */\r\n const safeOnDateFilterChange = (data: Partial<IReportFilters>) => {\r\n if (!onDateFilterChange) return;\r\n if (showDateFilter) {\r\n onDateFilterChange(data);\r\n } else {\r\n // Strip all date fields so they cannot pollute the request payload.\r\n const { start_date, end_date, as_of_date, ...rest } = data;\r\n onDateFilterChange(rest as Partial<IReportFilters>);\r\n }\r\n };\r\n\r\n const renderFilter = ({\r\n key,\r\n label,\r\n placeholder,\r\n apiType,\r\n valueKey,\r\n customFilter,\r\n multiple = false\r\n }: any) => {\r\n if (!showFilter(key)) return null;\r\n\r\n return (\r\n <div className=\"search-filter\" key={key}>\r\n <SearchableSelect\r\n labelId={`${key}-label`}\r\n searchPlaceholder={label}\r\n value={filters?.[valueKey]}\r\n onChange={(e) => safeOnDateFilterChange({ [valueKey]: e.target.value } as Partial<IReportFilters>)}\r\n apiType={apiType}\r\n multiple={multiple}\r\n placeholder={placeholder}\r\n customeFilter={customFilter}\r\n // CustomDropDownIcon={FilterAltIcon}\r\n customStyle={customStyle}\r\n inputStyle={inputStyle}\r\n />\r\n </div>\r\n );\r\n };\r\n // const dispatch = useAppDispatch();\r\n\r\n const FilterContainer = () => (\r\n <>\r\n {filtersConfig.map(renderFilter)}\r\n {/* Render any custom components injected by the consumer */}\r\n {customFilterComponents.map(({ key, component }) => (\r\n <React.Fragment key={key}>{component}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n\r\n\r\n\r\n\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [allFields, setAllFields] = useState<any[]>([]);\r\n const [dateRange, setDateRange] = useState<keyof typeof RANGE>(\"TODAY\");\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [customDate, setCustomDate] = useState<Date>(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n\r\n const defaultSelected = useMemo(() => {\r\n return [...defaultSelectedFilter, ...customSelectedFilter]\r\n }, [])\r\n const [selectedItems, setSelectedItems] = useState<string[]>(defaultSelected);\r\n\r\n const [level, setLevel] = useState<number>(1)\r\n const [customDateRange, setCustomDateRange] = useState<TDatePickerVal>({\r\n startDate: new Date(dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")),\r\n endDate: new Date(dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")),\r\n key: \"selection\",\r\n });\r\n const anchorRef = useRef<HTMLDivElement | null>(null);\r\n const [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n\r\n const dateSelectRef = useRef<HTMLDivElement>(null);\r\n const chipDateSelectRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleCloseDatePopper = () => {\r\n anchorRef.current = null;\r\n setOpen(false);\r\n };\r\n\r\n const handleDateChange = (range: keyof typeof RANGE) => {\r\n // Do nothing if the date filter is hidden — guard against programmatic calls.\r\n if (!showDateFilter) return;\r\n setDateRange(range);\r\n if (range === \"CUSTOM\") {\r\n anchorRef.current = dateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n const data = handleCompareDateRange({\r\n range: RANGE[range],\r\n from: \"\",\r\n to: \"\",\r\n });\r\n safeOnDateFilterChange({\r\n start_date: data?.from ? data?.from : \"\",\r\n end_date: data?.to ? data?.to : \"\",\r\n });\r\n handleCloseDatePopper();\r\n }\r\n };\r\n\r\n\r\n const handleClose = (event: Event) => {\r\n if (\r\n anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n handleCloseDatePopper();\r\n };\r\n\r\n const options = [\r\n {\r\n label: RANGE.TODAY,\r\n callback: () => {\r\n handleDateChange(\"TODAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"THIS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"THIS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"THIS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"THIS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.YESTERDAY,\r\n callback: () => {\r\n handleDateChange(\"YESTERDAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.CUSTOM,\r\n callback: () => {\r\n handleDateChange(\"CUSTOM\");\r\n },\r\n },\r\n ];\r\n\r\n const isChecked = (value: any) => {\r\n return selectedItems.some(item => item?.value == value?.value)\r\n }\r\n\r\n const handleFilterPopperSubmit = () => {\r\n const dateRangeFilter = {\r\n start_date: dayjs(customDateRange.startDate).format(\"YYYY-MM-DD\"),\r\n end_date: dayjs(customDateRange.endDate).format(\"YYYY-MM-DD\"),\r\n };\r\n const dateFilter = {\r\n as_of_date: dayjs(customDate).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n // Use safeOnDateFilterChange so date keys are stripped when showDateFilter is false.\r\n safeOnDateFilterChange({\r\n ...(isDateRange ? dateRangeFilter : dateFilter),\r\n });\r\n handleCloseDatePopper();\r\n };\r\n const handleFilterClose = () => {\r\n setActionAnchorEl(null);\r\n };\r\n const handleSelectChange = (value: any) => {\r\n if (selectedItems.some((item) => item.value == value.value)) {\r\n setSelectedItems(selectedItems.filter((item) => item?.value != value.value));\r\n return;\r\n }\r\n setSelectedItems([...selectedItems, value]);\r\n };\r\n function showFilter(val) {\r\n return selectedItems.some(item => item?.value == val)\r\n }\r\n const filterDropDownFunc = () => {\r\n return (\r\n <Menu\r\n anchorEl={actionAnchorEl}\r\n open={Boolean(actionAnchorEl)}\r\n onClose={handleFilterClose}\r\n >\r\n {/* <MenuItem className=\"inventoryReportsTitleBar--report-filter\"> */}\r\n {/* Add your options here */}\r\n {filterDropDown?.map((item) => (\r\n <MenuItem onClick={() => handleSelectChange(item)} key={item} value={item?.value}>\r\n <Checkbox checked={isChecked(item)} />\r\n <Typography sx={{ marginLeft: '10px' }} color='theme.neutral.800' type='s3'>{item?.name}</Typography>\r\n </MenuItem>\r\n ))}\r\n {/* </MenuItem> */}\r\n </Menu>\r\n );\r\n };\r\n useEffect(() => {\r\n setCustomDate(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n }, [filters?.as_of_date]);\r\n\r\n useEffect(() => {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n startDate: new Date(\r\n dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n endDate: new Date(dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")),\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filters?.end_date, filters?.start_date]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n if (isDateRange) {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n startDate: new Date(\r\n dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n endDate: new Date(\r\n dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n });\r\n } else {\r\n setCustomDate(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, isDateRange]);\r\n\r\n // useEffect(() => {\r\n // // dispatch(fetchOptions());\r\n // if (showBomFilter) {\r\n // dispatch(fetchBom())\r\n // }\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, []);\r\n\r\n useEffect(() => {\r\n setAllFields(generateFields(reportFilterFields));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [reportFilterFields]);\r\n\r\n return (\r\n <div>\r\n <div className=\"inventoryReportsTitleBar\">\r\n {showLeftContent && <div className=\"inventoryReportsTitleBar--LeftContent\">\r\n {isTitleMenu ? (\r\n <div style={{ zIndex: 999 }}>\r\n <TitleDropdownButton\r\n onClick={handleAddButton}\r\n options={titleMenus}\r\n isMenuThirdItemDisabled={true}\r\n >\r\n {title}\r\n </TitleDropdownButton>\r\n </div>\r\n ) : (\r\n <Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {title}\r\n </Typography>\r\n )}\r\n {[\r\n { label: viewTypes.TABLE, position: 1 },\r\n { label: viewTypes.CHART, position: 2 },\r\n ]\r\n .map((ele) => ele)\r\n .sort((a, b) => a.position - b.position)\r\n .map((item) => (\r\n <HeaderCard\r\n key={item?.position}\r\n title={item?.label}\r\n active={activeView}\r\n onClick={() => setActiveView?.(item.label)}\r\n />\r\n ))}\r\n\r\n </div>}\r\n {isViewButton &&\r\n <div className=\"inventoryReportsTitleBar--ExtraButtonUi\">\r\n <Button onClick={handleRedirect} >{buttonText}</Button>\r\n </div>\r\n }\r\n <ReportButtons\r\n zIndex={999}\r\n className=\"inventoryReportsTitleBar--RightContent\"\r\n buttons={buttons}\r\n dropdownMenuButtonData={dropdownMenuButtonData}\r\n toggleCallback={toggleCallback}\r\n variant={\"contained\"}\r\n iconPosition=\"end\"\r\n />\r\n {customElement && <Box >\r\n {customElement}\r\n </Box>}\r\n\r\n </div>\r\n <Divider sx={{ mb: 2, mx: 1, borderColor: 'grey.200' }} />\r\n\r\n {tabs?.length ? (\r\n <div>\r\n <TabBar\r\n tabs={tabs || []}\r\n activeValue={activeValue}\r\n setActiveValue={setActiveValue}\r\n />\r\n </div>\r\n ) : null}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n flexWrap: 'wrap',\r\n mx: 1\r\n }}\r\n >\r\n <div className=\"inventoryReportsTitleBar--FilterWrapper\">\r\n\r\n {/* Date range chip — hidden when showDateFilter is false */}\r\n {showDateFilter && showFilter('date') && isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.start_date).format(\"DD/MM/YYYY\")} - ${dayjs(filters?.end_date).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n Date Range:\r\n </Typography>\r\n <Typography\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.start_date).format(\"DD/MM/YYYY\")} -{\" \"}\r\n {dayjs(filters?.end_date).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* As-of-date chip — hidden when showDateFilter is false */}\r\n {showDateFilter && showFilter('date') && filters?.as_of_date && !isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.as_of_date).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n Date:\r\n </Typography>\r\n <Typography\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.as_of_date).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {FilterContainer()}\r\n </div>\r\n\r\n\r\n {/* Date-range dropdown button — only shown when both isDateFilterEnabled AND showDateFilter are true */}\r\n {isDateFilterEnabled && showDateFilter && <div className=\"inventoryReportsTitleBar--FilterAction\">\r\n (\r\n <>\r\n <ReportButtons\r\n zIndex={997}\r\n className=\"inventoryReportsTitleBar--RightContent\"\r\n dropdownMenuButtonData={{\r\n icon: <img src={images.sidebar.calendar2} />,\r\n children: (\r\n <>\r\n {RANGE[dateRange]}\r\n <KeyboardArrowDownIcon />\r\n </>\r\n ),\r\n options: options,\r\n }}\r\n toggleCallback={toggleCallback}\r\n />\r\n <div ref={dateSelectRef}></div>\r\n </>\r\n )\r\n </div>\r\n }\r\n <div className=\"inventoryReportsTitleBar--FilterAction\">\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<FilterIcon fontSize=\"small\" />}\r\n onClick={(event) => setActionAnchorEl(event.currentTarget)}\r\n >\r\n Filter\r\n </Button>\r\n {showLevelBtn && <Divider flexItem orientation=\"vertical\" sx={{ alignSelf: 'auto' }} />}\r\n {filterDropDownFunc()}\r\n {showLevelBtn && (\r\n <>\r\n <Box className=\"inventoryReportsTitleBar--FilterAction--lvWrapper\">\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'> Level {level} of {dataLength}</Typography>\r\n <ButtonGroup variant=\"outlined\" disableElevation sx={({ palette }) => ({\r\n '& .MuiButton-root': {\r\n borderColor: `${palette.grey[200]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n },\r\n '& .MuiButtonGroup-firstButton': {\r\n borderTopLeftRadius: 20,\r\n borderBottomLeftRadius: 20\r\n },\r\n '& .MuiButtonGroup-lastButton': {\r\n borderTopRightRadius: 20,\r\n borderBottomRightRadius: 20\r\n }\r\n })}>\r\n <MuiButton onClick={() => {\r\n setLevel(level == dataLength ? level : level + 1)\r\n handleRowsCollapse?.(level)\r\n }}>\r\n <img src={images.common.expand} />\r\n </MuiButton>\r\n <MuiButton onClick={() => {\r\n setLevel(level != 1 ? level - 1 : 1)\r\n handleRowsExpand?.(level)\r\n }}>\r\n <img src={images.common.collapse} />\r\n </MuiButton>\r\n </ButtonGroup>\r\n </Box>\r\n </>\r\n )}\r\n <SearchBar\r\n placeholder=\"Search\"\r\n handleSearch={(val) => handleSearch?.(val)}\r\n sx={{\r\n width: \"250px\",\r\n background: \"#fff !important\",\r\n border: \"1px solid #F3F2F2 !important\",\r\n }}\r\n />\r\n </div>\r\n </Box>\r\n\r\n <Divider sx={{ my: 2, mx: 1, borderColor: 'grey.200' }} />\r\n\r\n <Popper\r\n sx={{\r\n zIndex: 9999,\r\n }}\r\n open={open}\r\n anchorEl={anchorRef.current}\r\n role={undefined}\r\n transition\r\n disablePortal\r\n >\r\n {({ TransitionProps, placement }) => (\r\n <Grow\r\n {...TransitionProps}\r\n style={{\r\n margin: \"0 20px 0 20px\",\r\n transformOrigin:\r\n placement === \"bottom\" ? \"center top\" : \"center bottom\",\r\n }}\r\n >\r\n <Paper>\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n }}\r\n >\r\n <div>\r\n {isDateRange ? (\r\n <DateRange\r\n editableDateInputs={true}\r\n onChange={(item) => setCustomDateRange(item.selection)}\r\n moveRangeOnFirstSelection={false}\r\n ranges={[customDateRange]}\r\n locale={enUS}\r\n />\r\n ) : (\r\n <Calendar\r\n onChange={(item) => setCustomDate(item)}\r\n date={customDate}\r\n locale={enUS}\r\n />\r\n )}\r\n </div>\r\n <Box sx={{ padding: \"0 12px 12px 0\" }}>\r\n <Button\r\n variant=\"contained\"\r\n sx={{ width: \"fit-content\" }}\r\n onClick={handleFilterPopperSubmit}\r\n >\r\n Apply\r\n </Button>\r\n </Box>\r\n </Box>\r\n </ClickAwayListener>\r\n </Paper>\r\n </Grow>\r\n )}\r\n </Popper>\r\n\r\n </div>\r\n );\r\n};\r\n\r\nexport { InventoryReportsTitleBar };\r\nexport default InventoryReportsTitleBar;\r\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tMenuItem,\n\tMenuItemProps,\n OutlinedInput,\n\n \n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport Select from '../select/select';\nimport Checkbox from '../checkbox/checkbox';\nimport Typography from '../typography/typography';\n// import Chip from '../chip/chip'\nimport ChipOrPlaceholder from '../form-control/form-builder/form-builder-element/chip-or-placeholder';\n\nimport './multi-select.scss';\nimport { Add, Close } from '@mui/icons-material';\n// import { MoreIcon } from '../icons';\nimport _ from 'lodash';\nimport { useTranslation } from \"react-i18next\";\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: any[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n\tvalues: string | string[];\n\tfield: any;\n}\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n\tvalues,\n\tfield,\n}: IMenuItems) => {\n\n\tconst items: React.ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value=''>\n\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t<em>{placeholder}</em>\n\t\t\t\t</Typography>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\toptions?.forEach((option) => {\n\t\t\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tkey={option.value}\n\t\t\t\tdisabled={Boolean(option.disabled)}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={_.some(values, option.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\tdisabled={Boolean(opt.disabled)}\n\t\t\t\t\t\tsx={{ pl: 5 }}\n\t\t\t\t\t\tkey={`${option.value}-${opt.value}`}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(opt.value) > -1)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\tif (field.enable_footer) {\n\t\titems.push(\n\t\t\t<Box>\n\t\t\t\t<Divider flexItem />\n\t\t\t\t<MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\n\t\t\t\t\t<Add fontSize='small' />\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\n\t\t\t\t\t\tCreate New {field.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuItem>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn items;\n};\n\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: any[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions?.find((option: any) => (option.value?.id || option.value?.name || option.value) === (selectedItem?.id || selectedItem?.name || selectedItem))?.label ||\n\t\t\tselectedItem\n\t);\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5, position:'absolute' }}>\n\t\t\t{displayTitle.slice(0, 4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t// <Chip variant='outlined' type='normal' label={<MoreIcon fontSize='small'/>} />\n\t\t\t\t'...'\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst MultiSelect = (props: any) => {\n\tconst [options, setOptions] = useState([]);\n\tconst [selectedValue, setSelectedValue] = useState(props.defaultValue || props.value || (props.is_multiselect ? [] : ''));\n\n\tconst removeUndefine = (selectOptions: any[]) => {\n\t\treturn selectOptions?.filter((option) => option);\n\t};\n\n\tconst handleSetOptions = useCallback(() => {\n\t\tsetOptions(props.options);\n\t}, [props.options]);\n\n\tuseEffect(() => {\n\t\thandleSetOptions();\n\t}, [handleSetOptions]);\n\n\tconst handleChange = (e: any, child) => {\n let value = e?.target?.value\n\t\t\t\tif(props.is_multiselect) {\n\t\t\t\t\tconst sValue = child?.props?.value\n\t\t\t\t\tconst ev = selectedValue.find(v => v?.name == sValue?.name)\n\t\t\t\t\tif(ev){\n\t\t\t\t\t\tvalue = selectedValue.filter(v => v?.name != sValue?.name)\n\t\t\t\t\t}\n\t\t\t\t\tvalue = value?.filter(Boolean)\n\t\t\t\t}\n\t\t\t\tsetSelectedValue(value);\n\t\t\t\tif (props.onChange) {\n\t\t\t\t\tprops.onChange(value);\n\t\t\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tsetSelectedValue(props.defaultValue || props.value || (props.is_multiselect ? [] : ''));\n\t}, [props.defaultValue, props.value, props.is_multiselect]);\n\n\t\tconst { t } = useTranslation();\n\n\treturn (\n\t\t<>\n\t\t\t<Select\n\t\t\t\tfullWidth\n\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\tlabel={props.label}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tdefaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\n\t\t\t\trequired={props.required}\n\t\t\t\tsize={props.size || 'small'}\n\t\t\t\tmultiple={Boolean(props?.is_multiselect)}\n\t\t\t\tdisabled={Boolean(props?.disabled)}\n\t\t\t\tvariant='outlined'\n // sx={{minWidth: '165px'}}\n\t\t\t\tsx={(Boolean(props?.is_multiselect) && selectedValue?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important', minWidth: '165px' }} : { minWidth: '165px' }}\n\t\t\t\tclassName={\n\t\t\t\t\tprops.is_multiselect && removeUndefine(selectedValue)?.length\n\t\t\t\t\t\t? 'MultiSelect'\n\t\t\t\t\t\t: ''\n\t\t\t\t}\n\t\t\t\tinput={\n\t\t\t\t\t\t!props?.is_multiselect && !props.disabled ? (\n\t\t\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\t\t\t\tlabel=''\n\t\t\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t\t\t\t<InputAdornment position='end'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{props.value && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label='clear selection'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => props.onChange(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tedge='end'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize='small'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: '1rem' }} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t}\n\t\t\t\trenderValue={(selected: string | string[]) => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{Array.isArray(selected) ? (\n\t\t\t\t\t\t\t<ChipOrPlaceholder\n\t\t\t\t\t\t\t\tselectedLabel={props.selectedLabel}\n\t\t\t\t\t\t\t\tdata={removeUndefine(selected)}\n\t\t\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\t\t\tonDelete={props?.onChipRemove}\n\t\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t\t\tchipProps={{\n\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'theme.primary.100',\n\t\t\t\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\t\t\t\t// borderRadius: '15px',\n\t\t\t\t\t\t\t\t\t\t\t'& .MuiTypography-body1': {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t'& .MuiChip-deleteIcon': {\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\t\t\t\t\t\t\t'&:hover':{\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\toptions?.find(\n\t\t\t\t\t\t\t\t(option: any) =>\n\t\t\t\t\t\t\t\t\t(option.value?.id || option.value?.name || option.value) === (selected?.id || selected?.name || selected)\n\t\t\t\t\t\t\t)?.label ||\n\t\t\t\t\t\t\tselected ||\n\t\t\t\t\t\t\tprops.placeholder\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\tsearchPlaceholder={`${t('common.search')} ${props.label}`}\n\t\t\t\thandleSearch={props.handleSearch}\n\t\t\t\tsearchValue={props.searchValue || ''}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tloading={props?.is_loading}>\n\t\t\t\t{generateMenuItems({\n\t\t\t\t\toptions,\n\t\t\t\t\tmultiple: Boolean(props.is_multiselect),\n\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\tvalues: selectedValue,\n\t\t\t\t\twith_checkboxes: true,\n\t\t\t\t\tfield: props\n\t\t\t\t})}\n\t\t\t</Select>\n\t\t\t{props.is_multiselect && Array.isArray(selectedValue) && (\n\t\t\t\t<SelectedItems data={selectedValue} options={options} />\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nMultiSelect.propTypes = {\n\tname: PropTypes.string.isRequired,\n\tplaceholder: PropTypes.string.isRequired,\n\tlabel: PropTypes.string.isRequired,\n\tsize: PropTypes.string,\n\toptions: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tlabel: PropTypes.string,\n\t\t\tvalue: PropTypes.string\n\t\t})\n\t).isRequired,\n\tdefaultValue: PropTypes.string,\n\tfieldArrayName: PropTypes.string,\n\tid: PropTypes.string,\n\trequired: PropTypes.bool,\n\tis_multiselect: PropTypes.bool,\n\tposition: PropTypes.number,\n\tdisabled: PropTypes.bool,\n\tonChipRemove: PropTypes.func,\n\tenable_footer: PropTypes.bool,\n\tfooter_action: PropTypes.string,\n\tonFooterClick: PropTypes.any,\n\tis_loading: PropTypes.bool,\n\tselectedLabel: PropTypes.string,\n\tonChange: PropTypes.func,\n};\n\nexport { MultiSelect };\nexport default MultiSelect;\n","/* eslint-disable react-refresh/only-export-components */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useMemo } from \"react\";\r\nimport { Navigate } from \"react-router-dom\";\r\nimport { usePermissions } from \"../hooks/use-permissions\";\r\nimport { Box, Divider } from \"@mui/material\";\r\nimport Typography from \"./typography/typography\";\r\nimport _ from \"lodash\";\r\n\r\ntype PermissionAction = \"canEdit\" | \"canView\" | \"canAdd\" | \"canDelete\";\r\n\r\ninterface SingleModulePermission {\r\n module: string;\r\n action: PermissionAction;\r\n}\r\n\r\ninterface MultiModulePermission {\r\n modules: string[];\r\n action: PermissionAction;\r\n operator?: \"AND\" | \"OR\"; // Default: \"OR\"\r\n}\r\n\r\ninterface ComplexPermission {\r\n permissions: Array<{\r\n module: string;\r\n action: PermissionAction;\r\n }>;\r\n operator?: \"AND\" | \"OR\"; // Default: \"AND\"\r\n}\r\n\r\ninterface ProtectedRouteProps {\r\n // Single module (backward compatibility)\r\n module?: string;\r\n action?: PermissionAction;\r\n \r\n // Multiple modules with same action\r\n multiModule?: MultiModulePermission;\r\n \r\n // Complex permissions with different actions\r\n complexPermissions?: ComplexPermission;\r\n \r\n // Custom permission checker function\r\n customPermissionCheck?: (permissions: any) => boolean;\r\n \r\n // Redirect path for unauthorized access\r\n redirectTo?: string;\r\n \r\n // Show custom error component instead of redirect\r\n showError?: boolean;\r\n \r\n children: React.ReactNode;\r\n}\r\n\r\nconst ProtectedRoute: React.FC<ProtectedRouteProps> = ({\r\n module,\r\n action,\r\n multiModule,\r\n complexPermissions,\r\n customPermissionCheck,\r\n redirectTo = \"/403\",\r\n showError = true,\r\n children\r\n}) => {\r\n const permissions = usePermissions();\r\n\r\n // Memoize permission check for performance\r\n const hasPermission = useMemo(() => {\r\n if (!permissions) {\r\n return false;\r\n }\r\n\r\n // Custom permission check takes precedence\r\n if (customPermissionCheck) {\r\n return customPermissionCheck(permissions);\r\n }\r\n\r\n // Complex permissions check\r\n if (complexPermissions) {\r\n const { permissions: permList, operator = \"AND\" } = complexPermissions;\r\n \r\n const results = permList.map(({ module: mod, action: act }) => {\r\n const modulePerms = _.get(permissions, mod, {});\r\n return modulePerms[act] ?? false;\r\n });\r\n\r\n return operator === \"AND\" \r\n ? results.every(Boolean)\r\n : results.some(Boolean);\r\n }\r\n\r\n // Multi-module with same action check\r\n if (multiModule) {\r\n const { modules, action: act, operator = \"OR\" } = multiModule;\r\n \r\n const results = modules.map(mod => {\r\n const modulePerms = _.get(permissions, mod, {});\r\n return modulePerms[act] ?? false;\r\n });\r\n\r\n return operator === \"AND\" \r\n ? results.every(Boolean)\r\n : results.some(Boolean);\r\n }\r\n\r\n // Single module check (backward compatibility)\r\n if (module && action) {\r\n const modulePerms = _.get(permissions, module, {});\r\n return modulePerms[action] ?? false;\r\n }\r\n\r\n // No permission config provided - deny access\r\n return false;\r\n }, [permissions, module, action, multiModule, complexPermissions, customPermissionCheck]);\r\n\r\n // Enhanced error component\r\n const ErrorComponent = () => (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n transform: \"translate(-50%, -50%)\", // Fixed transform values\r\n gap: 2,\r\n textAlign: \"center\",\r\n p: 3\r\n }}\r\n >\r\n <Typography \r\n type=\"h1\" \r\n color=\"theme.secondary.900\" \r\n weight=\"bold\"\r\n sx={{ fontSize: { xs: '4rem', sm: '6rem' } }}\r\n >\r\n 403\r\n </Typography>\r\n <Divider \r\n flexItem \r\n // sx={{ \r\n // borderColor: '#898f9a',\r\n // width: '100%',\r\n // maxWidth: '200px'\r\n // }}\r\n />\r\n <Typography \r\n type=\"s3\" \r\n color=\"theme.secondary.900\" \r\n weight=\"medium\"\r\n >\r\n Access Denied\r\n </Typography>\r\n <Typography \r\n type=\"body2\" \r\n color=\"theme.secondary.700\" \r\n weight=\"regular\"\r\n sx={{ mt: 1, maxWidth: '300px' }}\r\n >\r\n You don't have the required permissions to access this resource.\r\n </Typography>\r\n </Box>\r\n );\r\n\r\n // Handle loading state - permissions not yet available or still empty (e.g. right after login)\r\n if (!permissions || Object.keys(permissions).length === 0) {\r\n return null; // Wait silently until permissions are loaded\r\n }\r\n\r\n // Render based on permission check\r\n if (hasPermission) {\r\n return <>{children}</>;\r\n }\r\n\r\n return showError ? <ErrorComponent /> : <Navigate to={redirectTo} replace />;\r\n};\r\n\r\nexport default ProtectedRoute;\r\n\r\n// Helper function to create permission configurations\r\nexport const createPermissionConfig = {\r\n // Single module\r\n single: (module: string, action: PermissionAction) => ({\r\n module,\r\n action\r\n }),\r\n\r\n // Multiple modules with same action\r\n multiModule: (\r\n modules: string[], \r\n action: PermissionAction, \r\n operator: \"AND\" | \"OR\" = \"OR\"\r\n ) => ({\r\n multiModule: { modules, action, operator }\r\n }),\r\n\r\n // Complex permissions\r\n complex: (\r\n permissions: Array<{ module: string; action: PermissionAction }>,\r\n operator: \"AND\" | \"OR\" = \"AND\"\r\n ) => ({\r\n complexPermissions: { permissions, operator }\r\n }),\r\n\r\n // Custom function\r\n custom: (checkFn: (permissions: any) => boolean) => ({\r\n customPermissionCheck: checkFn\r\n })\r\n};\r\n\r\n// Example usage types for better developer experience\r\nexport type PermissionConfig = \r\n | ReturnType<typeof createPermissionConfig.single>\r\n | ReturnType<typeof createPermissionConfig.multiModule>\r\n | ReturnType<typeof createPermissionConfig.complex>\r\n | ReturnType<typeof createPermissionConfig.custom>;","import React from \"react\";\r\nimport Button from \"../../button/button\";\r\nimport DropdownButton, {\r\n IDropdownMenuOption,\r\n} from \"../../dropdown-button/dropdown-button\";\r\n\r\nimport './report-buttons.scss'\r\nimport { SxProps } from \"@mui/material\";\r\n\r\nexport interface IActionButtons {\r\n title?: string;\r\n icon?: React.ReactNode;\r\n btnStyle?: \"WhiteBtn\";\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n action?: () => void;\r\n class?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface IReportButtons {\r\n className?: string;\r\n buttons?: IActionButtons[];\r\n dropdownMenuButtonData?: {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n options: IDropdownMenuOption[];\r\n sx?: SxProps;\r\n } | null;\r\n toggleCallback?: (e?: boolean) => void;\r\n zIndex?: number;\r\n}\r\n\r\nconst ReportButtons = ({ buttons, dropdownMenuButtonData = null, toggleCallback, className, zIndex = 999 }: IReportButtons) => {\r\n return (\r\n <div className={className}>\r\n {buttons?.map((ele) => (\r\n <Button\r\n className={\r\n ele.class\r\n ? ele.class\r\n : `wrapper--${ele?.btnStyle}`\r\n }\r\n key={ele.title}\r\n variant={ele.variant ? ele.variant : \"contained\"}\r\n startIcon={ele.icon ? ele.icon : \"\"}\r\n disabled={Boolean(ele.disabled)}\r\n onClick={ele.action}\r\n >\r\n {ele.title ?? \"\"}\r\n </Button>\r\n ))}\r\n {dropdownMenuButtonData && (\r\n <div style={{ zIndex }}>\r\n <DropdownButton\r\n options={dropdownMenuButtonData.options || []}\r\n startIcon={dropdownMenuButtonData.icon}\r\n isMenuThirdItemDisabled={true}\r\n isOnlyDropDownButton={true}\r\n variant={\"text\"}\r\n buttonGroupProps={{\r\n variant: \"text\",\r\n sx: ({palette}) => ({\r\n \"& .MuiButton-root\": {\r\n border: \"1px solid !important\",\r\n borderColor: `${palette.grey[200]} !important`,\r\n borderRadius: \"20px\",\r\n pt: 0.25,\r\n pb: 0.25,\r\n pr: 0.75,\r\n color: `${palette.grey[800]} !important`,\r\n ':hover': {\r\n bgcolor: `${palette.grey[200]} !important`\r\n }\r\n },\r\n }),\r\n }}\r\n onlyDropDownButtonProps={{\r\n style: {\r\n backgroundColor: \"white !important\",\r\n color: \"black !important\",\r\n ...dropdownMenuButtonData.sx\r\n },\r\n }}\r\n toggleCallback={toggleCallback}\r\n >\r\n {dropdownMenuButtonData.children}\r\n </DropdownButton>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport { ReportButtons };\r\nexport default ReportButtons;\r\n","import dayjs from \"dayjs\";\r\n\r\nexport const columns = [\r\n\t{\r\n\t\theader: 'Report name',\r\n\t\taccessorKey: 'name',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Email ID',\r\n\t\taccessorKey: 'emails',\r\n\t\tvisible: true,\r\n\t\ttype: 'custom'\r\n\t},\r\n\t{\r\n\t\theader: 'Date',\r\n\t\taccessorKey: 'schedule_date',\r\n\t\tvisible: true,\r\n\t\ttype: 'date'\r\n\t},\r\n\t{\r\n\t\theader: 'Time',\r\n\t\taccessorKey: 'schedule_time',\r\n\t\tvisible: true,\r\n\t\ttype: 'time'\r\n\t},\r\n\t{\r\n\t\theader: 'Recurring',\r\n\t\taccessorKey: 'autopost',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Report Page',\r\n\t\taccessorKey: 'report_data.name',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Main Page',\r\n\t\taccessorKey: 'main_page',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Status',\r\n\t\taccessorKey: 'status',\r\n\t\tvisible: true,\r\n\t\ttype: 'status'\r\n\t},\r\n];\r\nexport const formArrayName = 'schedule_report';\r\n\r\nexport const defaultValues = {\r\n\tschedule_report: {\r\n\t\tschedule_date: dayjs(),\r\n\t\tschedule_time: dayjs(),\r\n\t}\r\n}\r\n\r\nexport const apiPayload = {\r\n\ttype: 'type',\r\n\tautopost: (val: any) => val?.is_recurring ? val?.autopost : undefined,\r\n\temails: 'emails',\r\n\tid: (value: any) => value?.id || undefined,\r\n\tis_recurring: (val: any) => Boolean(val?.is_recurring),\r\n\tname: 'name',\r\n\tnext_schedule_date: 'next_schedule_date',\r\n\tschedule_date: 'schedule_date',\r\n\tschedule_time: 'schedule_time',\r\n\tsubject: 'subject',\r\n\treport_id: 'report_id',\r\n\tfilters: (item) => item?.filters || undefined\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { formArrayName } from \"./utils/constant\";\r\n\r\nexport const scheduleReportValidationSchema = (report_id?: boolean) => yupResolver(Yup.object().shape({\r\n [formArrayName]: Yup.object().shape({\r\n report_id: report_id ? Yup.string().required(\"Report is required\") : Yup.string(),\r\n name: Yup.string().required(\"Report name is required\"),\r\n subject: Yup.string(),\r\n schedule_date: Yup.mixed()\r\n .required(\"Date is required\")\r\n .test(\"is-future-date\", \"Date cannot be in the past\", (value) => {\r\n if (!value) return false;\r\n const selectedDate = dayjs(value).startOf(\"day\");\r\n const today = dayjs().startOf(\"day\");\r\n return selectedDate.isSame(today) || selectedDate.isAfter(today);\r\n }),\r\n schedule_time: Yup.mixed()\r\n .required(\"Time is required\")\r\n .test(\"is-future-time\", \"Time cannot be in the past\", function (value) {\r\n const { schedule_date } = this.parent;\r\n if (!value || !schedule_date) return false;\r\n\r\n const selectedDate = dayjs(schedule_date).startOf(\"day\");\r\n const today = dayjs().startOf(\"day\");\r\n\r\n // If the date is in the future, any time is valid\r\n if (selectedDate.isAfter(today)) {\r\n return true;\r\n }\r\n\r\n // If the date is today, check if the time is in the future\r\n const now = dayjs();\r\n const selectedTime = dayjs(value);\r\n const selectedDateTime = dayjs(schedule_date)\r\n .hour(selectedTime.hour())\r\n .minute(selectedTime.minute())\r\n .second(0);\r\n\r\n return selectedDateTime.isAfter(now);\r\n }),\r\n email: Yup.array(),\r\n emails: Yup.string()\r\n .test('emails-required', 'Email is required', function(value) {\r\n const { email } = this.parent;\r\n if (!email?.length && !value) {\r\n return false;\r\n }\r\n return true;\r\n }),\r\n is_recurring: Yup.boolean(),\r\n autopost: Yup.string().when(\"is_recurring\", {\r\n is: true,\r\n then: (schema) => schema.required(\"Auto post is required\"),\r\n otherwise: (schema) => schema.optional().nullable()\r\n })\r\n })\r\n}));\r\n\r\n// export const validationSchema = Yup.object().shape({\r\n// name: Yup.string().required(\"Report name is required\"),\r\n// subject: Yup.string(),\r\n// schedule_date: Yup.string().required(\"Date is required\"),\r\n// schedule_time: Yup.string().required(\"Time is required\"),\r\n// email: Yup.array(),\r\n// emails: Yup.string().when(\"email\", ([email], schema) => {\r\n// if (!email?.length)\r\n// return schema.email(\"Invalid email\").required(\"Email are required\");\r\n// return schema.email(\"Invalid email\").nullable();\r\n// }),\r\n// is_recurring: Yup.boolean(),\r\n// autopost: Yup.string().when(\"is_recurring\", (is_recurring, schema) => {\r\n// if (is_recurring[0]) return schema.required(\"Auto post is required\");\r\n// return schema;\r\n// }),\r\n// });\r\n","import { postV1ReportsScheduleReport, getV1ReportsScheduleReport ,putV1ReportsUpdateScheduleReportId,deleteV1ReportsScheduleReportId, getV1ReportsReportList} from \"../../../api-client/api.system-feature/api\";\n\nexport const AUTO_POST_OPTIONS = [\n {\n label: \"Day\",\n value: \"Day\",\n },\n {\n label: \"Week\",\n value: \"Week\",\n },\n {\n label: \"Month\",\n value: \"Month\",\n },\n {\n label: \"3 month\",\n value: \"3 month\",\n },\n {\n label: \"6 month\",\n value: \"6 month\",\n },\n {\n label: \"1 Year\",\n value: \"1 Year\",\n },\n ];\n\n export const updateScheduleReportType = async(payload:any) => putV1ReportsUpdateScheduleReportId(payload)\n\n export const createScheduleReportType = async(payload:any)=> postV1ReportsScheduleReport(payload)\n\n export const getScheduleReportType=async(payload:any)=>{\n try{\n const response=await getV1ReportsScheduleReport(payload)\n return response\n }catch(error){\n console.log(\"error\",error)\n }\n }\n export const getScheduleReportById=async(payload:any)=>{\n try{\n const response=await getV1ReportsReportList(payload)\n return response\n }catch(error){\n console.log(\"error\",error)\n }\n }\n\n export const deleteScheduleReportType=async(payload:any)=>{\n try{\n const {data={}}=await deleteV1ReportsScheduleReportId(payload)\n return data\n }catch(error){\n console.log(\"error\",error)\n }\n }","import \"./schedule-report-modal.scss\";\r\n\r\nimport { Close } from \"@mui/icons-material\";\r\nimport {\r\n Box,\r\n CircularProgress,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n DialogProps,\r\n Grid,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport Modal from \"../modal/modal\";\r\nimport Typography from \"../typography/typography\";\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport Button from \"../button/button\";\r\n\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport DynamicDate from \"../form-control/form-builder/form-builder-element/date\";\r\nimport DynamicTime from \"../form-control/form-builder/form-builder-element/time\";\r\nimport DynamicCheckBox from \"../form-control/form-builder/form-builder-element/checkbox\";\r\nimport dayjs from \"dayjs\";\r\nimport { scheduleReportValidationSchema } from \"./validator\";\r\nimport DynamicSearchSelect from '../form-control/form-builder/form-builder-element/dynamic-select';\r\nimport React from \"react\";\r\nimport ChipGenerator from \"../chip-generator/chip-generator\";\r\nimport { formatDateForPayload, formatTimeForPayload, getErrorMessage, getToken, mapApiPayload } from \"../../utils/common\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { AUTO_POST_OPTIONS, createScheduleReportType, getScheduleReportById, updateScheduleReportType } from \"./utils/common\";\r\nimport ModalLoader from \"../loaders/modal-loader\";\r\nimport { apiPayload, defaultValues, formArrayName } from \"./utils/constant\";\r\ninterface ScheduleReportModalProps {\r\n isOpen?: boolean;\r\n isNewScheduleReport?: boolean;\r\n modalProps?: DialogProps;\r\n itemData?: any;\r\n onSubmit?: () => void;\r\n onClose: () => void;\r\n label?: string;\r\n module?: string;\r\n filters?: any;\r\n report?: string;\r\n}\r\n\r\nconst ScheduleReportModal: React.FC<ScheduleReportModalProps> = ({\r\n label,\r\n isOpen=false,\r\n modalProps,\r\n itemData,\r\n onSubmit,\r\n onClose,\r\n module='accounting',\r\n filters,\r\n report=null\r\n}) => {\r\n//Local States\r\n const [submitLoading, setSubmitLoading] = useState<boolean>(false);\r\n\r\n//Form Instance\r\n const {\r\n control,\r\n handleSubmit,\r\n reset,\r\n setValue,\r\n watch,\r\n trigger\r\n } = useForm({\r\n resolver: scheduleReportValidationSchema(!itemData?.id),\r\n mode: \"all\",\r\n shouldUnregister: true,\r\n defaultValues:defaultValues\r\n });\r\n\r\n const isRecurring = watch(`${formArrayName}.is_recurring`)\r\n\r\n const disableReport = useMemo(() => {\r\n return (itemData?.id || report) ? true : false;\r\n }, [itemData?.id, report]);\r\n\r\n const handleFormSubmit = async (vals) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n const values = vals?.[formArrayName];\r\n // setSubmitLoading(true);\r\n const valuesPayload = {\r\n ...values,\r\n type:module,\r\n filters,\r\n schedule_date: formatDateForPayload(values.schedule_date),\r\n schedule_time: formatTimeForPayload(values.schedule_time),\r\n ...(itemData && itemData?.id\r\n ? { id: String(itemData.id) || \"\" }\r\n : {}),\r\n };\r\n delete valuesPayload?.email;\r\n\r\n const updatedPayload=mapApiPayload(apiPayload,valuesPayload)\r\n const apiFunc=itemData?.id?updateScheduleReportType:createScheduleReportType\r\n try{\r\n await apiFunc({\r\n ...updatedPayload,\r\n ...getToken(),\r\n })\r\n onSubmit?.()\r\n enqueueSnackbar(\"Report scheduled successfully\", {});\r\n handleModalClose()\r\n \r\n } catch(error){\r\n const errorMessage=getErrorMessage(error?.message)\r\n enqueueSnackbar(errorMessage, {\r\n variant: \"error\",\r\n });\r\n } finally{\r\n setSubmitLoading(false);\r\n }\r\n //eslint-disable-next-line\r\n };\r\n\r\n\r\n const handleModalClose = () => {\r\n onClose();\r\n setTimeout(() => {\r\n reset({\r\n [formArrayName]:{}\r\n });\r\n }, 300);\r\n };\r\n\r\n const fetchReportByName=useCallback(async()=>{\r\n console.log(\"report\",report)\r\n if(!isOpen || !report){\r\n return\r\n }\r\n try{\r\n const {data={}}=await getScheduleReportById({\r\n ...getToken(),\r\n filters:`(name.like=%${report}%)`\r\n })\r\n setValue(`${formArrayName}.report_id`,data?.reports?.[0]?.id)\r\n }catch(error){\r\n console.log(\"error\",error)\r\n }\r\n //eslint-disable-next-line\r\n },[report,isOpen,setValue]) \r\n//Effects\r\n useEffect(() => {\r\n\r\n const time = itemData?.schedule_time?.split(\":\")?.map(Number);\r\n if (itemData?.id) {\r\n reset({\r\n [formArrayName]:{\r\n ...itemData,\r\n schedule_date: itemData?.schedule_date\r\n ? dayjs(itemData?.schedule_date)\r\n : \"\",\r\n schedule_time:\r\n time?.length === 3\r\n ? dayjs()\r\n .set(\"hour\", time[0])\r\n .set(\"minute\", time[1])\r\n .set(\"second\", time[2])\r\n .set(\"millisecond\", 0)\r\n : \"\",\r\n }\r\n });\r\n }else{\r\n reset(defaultValues)\r\n }\r\n //eslint-disable-next-line\r\n }, [isOpen, itemData?.id, module]);\r\n\r\n\r\n const scheduleDate = watch(`${formArrayName}.schedule_date`);\r\n\r\n useEffect(() => {\r\n if (scheduleDate) {\r\n trigger(`${formArrayName}.schedule_time`);\r\n }\r\n }, [scheduleDate, trigger]);\r\n\r\n const isToday = useMemo(() => {\r\n return scheduleDate && dayjs(scheduleDate).startOf(\"day\").isSame(dayjs().startOf(\"day\"));\r\n }, [scheduleDate]);\r\n\r\n useEffect(() => {\r\n fetchReportByName()\r\n }, [fetchReportByName]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={onClose}\r\n maxWidth=\"md\"\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <form onSubmit={handleSubmit(handleFormSubmit)} id=\"scheduleReportModal\">\r\n {(submitLoading )&& <ModalLoader />}\r\n <DialogTitle className=\"scheduleReportModal--Title\">\r\n <Typography type=\"s3\" color=\"inherit\" weight=\"medium\">\r\n {label || 'Schedule'}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize=\"small\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n disabled={Boolean(itemData?.id)||disableReport}\r\n label=\"Report\"\r\n apiType=\"reports\"\r\n name=\"report_id\"\r\n placeholder=\"Select report\"\r\n fieldArrayName={formArrayName}\r\n formControl={control}\r\n required\r\n customeFilter={{\r\n '&type.eq':module,\r\n '&allow_scheduling.eq':1\r\n }}\r\n />\r\n </Grid>\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type=\"text\"\r\n formControl={control}\r\n label=\"Report name\"\r\n name=\"name\"\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Report Name\"\r\n required\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type=\"text\"\r\n formControl={control}\r\n label=\"Subject\"\r\n name=\"subject\"\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Subject\"\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicDate\r\n formControl={control}\r\n name=\"schedule_date\"\r\n placeholder=\"DD-MM-YYYY\"\r\n label=\"Date\"\r\n fieldArrayName={formArrayName}\r\n required\r\n min_date={dayjs()}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicTime\r\n formControl={control}\r\n placeholder=\"hh:mm\"\r\n label=\"Time\"\r\n option={\"24hr\"}\r\n name=\"schedule_time\"\r\n fieldArrayName={formArrayName}\r\n required\r\n rest={{\r\n timeSteps: { minutes: 1 },\r\n ampm: false,\r\n ...(isToday && { minTime: dayjs() }),\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={12}>\r\n <ChipGenerator\r\n control={control}\r\n name=\"emails\"\r\n label=\"Email\"\r\n required\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Emails: example1@mail.com, example2@mail.com\"\r\n validation={[{\r\n type: 'email',\r\n message: 'Please enter a valid email address',\r\n pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\r\n }]}\r\n />\r\n </Grid>\r\n <Grid item sm={12}>\r\n <DynamicCheckBox\r\n formControl={control}\r\n name=\"is_recurring\"\r\n title=\"Recurring\"\r\n fieldArrayName={formArrayName}\r\n titlePosition=\"end\"\r\n />\r\n </Grid>\r\n {isRecurring ? (\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label=\"Auto Post\"\r\n options={AUTO_POST_OPTIONS||[]}\r\n name=\"autopost\"\r\n placeholder=\"Select Auto Post\"\r\n fieldArrayName={formArrayName}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n ) : null}\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className=\"scheduleReportModal--ActionContainer\">\r\n <Box display=\"flex\" gap={1.5}>\r\n <Button\r\n className=\"scheduleReportModal--ActionContainer--WhiteBtn\"\r\n onClick={handleModalClose}\r\n disabled={submitLoading}\r\n >\r\n Discard\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n onClick={handleSubmit(handleFormSubmit)}\r\n endIcon={\r\n submitLoading ? (\r\n <CircularProgress size={20} color=\"inherit\" />\r\n ) : undefined\r\n }\r\n disabled={submitLoading}\r\n >\r\n Schedule\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default ScheduleReportModal;\r\n","import React from 'react';\n\nimport {\n\tSnackbarProvider,\n\tSnackbarProviderProps,\n\tuseSnackbar\n} from 'notistack';\n\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { Box } from '@mui/material';\n\nfunction SnackbarCloseButton({\n\tsnackbarKey\n}: {\n\tsnackbarKey: string | number;\n}) {\n\tconst { closeSnackbar } = useSnackbar();\n\n\treturn (\n\t\t<Box>\n\t\t\t<IconButton\n\t\t\t\tonClick={() => closeSnackbar(snackbarKey)}\n\t\t\t\tsx={{ width: 20, height: 20 }}>\n\t\t\t\t<CloseIcon sx={{ color: '#fff', width: 16, height: 16 }} />\n\t\t\t</IconButton>\n\t\t</Box>\n\t);\n}\n\nconst Snackbar = (props: SnackbarProviderProps) => {\n\tconst { children, ...rest } = props;\n\treturn (\n\t\t<SnackbarProvider\n\t\t\taction={(snackbarKey) => (\n\t\t\t\t<SnackbarCloseButton snackbarKey={snackbarKey} />\n\t\t\t)}\n\t\t\tstyle={{ flexWrap: 'unset' }}\n\t\t\t// iconVariant={}\n\t\t\tanchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n\t\t\t{...rest}>\n\t\t\t{children}\n\t\t</SnackbarProvider>\n\t);\n};\n\nexport { Snackbar };\nexport default Snackbar;\n","import React, { useEffect } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n IconButton,\n} from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport \"../filter/filter.scss\"; \nimport Button from \"../button/button\";\nimport { Close } from \"@mui/icons-material\";\n\ninterface FileConfirmationDialogProps {\n open: boolean;\n onClose: () => void;\n onReplace: () => void;\n onKeepBoth: () => void;\n title?: string;\n isFile : boolean ; \n}\n\nconst FileConfirmationDialog: React.FC<FileConfirmationDialogProps> = ({\n open,\n onClose,\n onReplace,\n onKeepBoth,\n title , \n isFile\n}) => {\n\n useEffect(() => {\n }, [open])\n\n return (\n <Dialog open={open} className=\"filter-container\" onClose={onClose}>\n <DialogTitle className=\"filter-header\" sx={{padding: \"20px\"}}> <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Confirmation\n </Typography>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </DialogTitle>\n <DialogContent sx={{marginTop: \"20px\"}}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n {isFile ? `The destination already has a file named ${title}` : \"The destination already has a folder name \"}\n \n </Typography>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Button className=\"cancel-filter-btn\" onClick={onKeepBoth} >\n Keep Both\n </Button>\n <Button onClick={onReplace} >\n Replace\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default FileConfirmationDialog;\n","import { useEffect, useRef, useState } from \"react\";\r\n\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport Typography from \"../typography/typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport \"./upload.scss\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport Toast from '../toast/toast';\r\nimport {\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Divider,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport Button from \"../button/button\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport images from \"../../assets/images\";\r\nimport Chip from \"../chip/chip\";\r\nimport { auth } from \"../../constants/auth\";\r\nimport { KeyboardArrowDown, KeyboardArrowUp, Clear } from \"@mui/icons-material\";\r\nimport FileConfirmationDialog from \"./file-confirmation\"\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\ninterface UploadProps {\r\n open: boolean;\r\n title: string;\r\n multiple?: boolean;\r\n accept?: string;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n onSubmit: (files: any[]) => void;\r\n existingDriveData?: any;\r\n fileUploaded?: (value: boolean) => void | undefined;\r\n type: any\r\n\r\n\r\n}\r\ninterface CustomNavigator extends Navigator {\r\n connection?: {\r\n downlink?: number;\r\n };\r\n}\r\nconst formatBytes = (bytes: number, decimals = 2) => {\r\n if (bytes === 0) return \"0 Bytes\";\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\r\n};\r\n\r\nconst Upload = (props: UploadProps) => {\r\n const {\r\n open,\r\n title,\r\n onClose,\r\n onConfirm,\r\n accept = \"*\",\r\n onSubmit,\r\n multiple = true,\r\n existingDriveData,\r\n fileUploaded,\r\n type\r\n\r\n } = props;\r\n\r\n const [files, setFiles] = useState<\r\n {\r\n file: File;\r\n isPrivate: boolean;\r\n checkboxDisabled: boolean;\r\n status: string;\r\n uploadProgress: number;\r\n fileSize: number;\r\n fileName: string;\r\n fileType: string;\r\n location: string;\r\n message: string;\r\n }[]\r\n >([]);\r\n\r\n interface IToast {\r\n type: 'normal' | 'alert';\r\n message: string;\r\n }\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [isCollapsed, setIsCollapsed] = useState(false);\r\n const [isDialogMinimized, setIsDialogMinimized] = useState(false);\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n const [abortController, setAbortController] = useState(new AbortController());\r\n const authToken = localStorage.getItem(auth.storageTokenKeyName);\r\n const [allDriveData, setAllDriveData] = useState();\r\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\r\n const [selectedFileTitle, setSelectedFileTitle] = useState();\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDropAccepted: (newFiles) => {\r\n setFiles([\r\n ...files,\r\n ...newFiles.map((file) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n })),\r\n ]);\r\n setIsDragOver(false);\r\n },\r\n onDragEnter: () => {\r\n setIsDragOver(true);\r\n },\r\n onDragLeave: () => {\r\n setIsDragOver(false);\r\n },\r\n noClick: true,\r\n noKeyboard: true,\r\n multiple: multiple,\r\n accept: accept ? convertAcceptObject(accept) : accept,\r\n });\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n const driveTitles = existingDriveData?.map(item => item['title'])\r\n setAllDriveData(driveTitles);\r\n }, [existingDriveData]);\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = (event: any) => {\r\n if (isUploading) {\r\n const message =\r\n \"Are you sure you want to leave? Your uploads are not complete.\";\r\n event.returnValue = message; // Standard for most browsers\r\n return message; // For some older browsers\r\n }\r\n };\r\n if (fileInputRef.current) {\r\n fileInputRef.current.multiple = multiple;\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n return () => {\r\n // Clean up the event listener when the component unmounts\r\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n };\r\n }, [isUploading, multiple]);\r\n\r\n const getInternetSpeed = () => {\r\n const customNavigator = navigator as CustomNavigator;\r\n if (\"connection\" in customNavigator && customNavigator.connection) {\r\n return customNavigator.connection.downlink;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n function convertAcceptObject(types: string) {\r\n const accepts = types.split(\",\").map((item) => item.trim());\r\n const acceptObject = accepts.reduce((acc: any, type: string) => {\r\n acc[type] = [];\r\n return acc;\r\n }, {});\r\n return acceptObject;\r\n }\r\n\r\n const renderFileIcon = (file: any) => {\r\n const fileType = file?.type.split(\"/\")[0];\r\n switch (fileType) {\r\n case \"image\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"application\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"text\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n default:\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n const BASE_URL = `${getApiConfig().backendBaseUrl}/document/v1/file-upload/`;\r\n\r\n const handleConfirm = async () => {\r\n setIsUploading(true);\r\n // Create a new AbortController for each confirmation\r\n const controller = new AbortController();\r\n setAbortController(controller);\r\n\r\n const filteredFiles = files.filter((file: any) => file.status !== \"canceled\").length;\r\n for (let i = 0; i < files.length; i++) {\r\n if (files[i].uploadProgress === 100 || files[i].status !== \"pending\") {\r\n continue;\r\n }\r\n\r\n const file = files[i];\r\n\r\n const fileSize = file?.fileSize;\r\n try {\r\n if (fileSize > 10 * 1024 * 1024) {\r\n const uploadResponse = await handleMultipartUpload(file, i, controller);\r\n if (uploadResponse) {\r\n setTimeout(() => { fileUploaded(true) }, 1000);\r\n }\r\n } else {\r\n await handleRegularUpload(file, i, controller, filteredFiles);\r\n }\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[i] = {\r\n ...updatedFiles[i],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n } finally {\r\n setIsUploading(false);\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n let tempCount = 0;\r\n const handleRegularUpload = async (\r\n file: any,\r\n index: number,\r\n controller: any,\r\n fileCount: number\r\n ) => {\r\n try {\r\n const format = ['docx', 'doc', 'csv', 'pdf', 'xls', 'xlsx', 'vnd.ms-excel', 'excel', 'txt'];\r\n const mimeType = file?.mimeType || file?.fileType || '';\r\n const isValid = format.some(f => mimeType.includes(f));\r\n\r\n if (isValid && file?.fileSize && file?.fileSize >= 5242880) {\r\n return setToast({\r\n type: 'alert',\r\n message: 'File size must be within 5 MB!'\r\n });\r\n }\r\n const preSignedUrlsResponse = await fetch(\r\n `${BASE_URL}?key=${file?.fileName}&partCount=1&mimeType=${file?.fileType}&is_private=${!file?.isPrivate}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"file-size\": file?.fileSize,\r\n \"x-token\": authToken,\r\n },\r\n signal: controller.signal\r\n },\r\n );\r\n const preSignedUrlsData = await preSignedUrlsResponse.json();\r\n if (preSignedUrlsData?.status_code == 400) {\r\n // alert(preSignedUrlsData?.message);\r\n setToast({\r\n type: 'alert',\r\n message: preSignedUrlsData?.message\r\n });\r\n return;\r\n }\r\n const preSignedUrl = preSignedUrlsData.data?.preSignedData?.presignedUrl;\r\n const location = preSignedUrlsData.data?.preSignedData?.location;\r\n const partParams = {\r\n Body: file?.file.slice(0, file?.fileSize),\r\n url: preSignedUrl,\r\n };\r\n const contentLength = file.fileSize;\r\n // const maxChunkSize = 1024 * 1024 * 1024; // 10 MB maximum chunk size\r\n // const chunkSize = Math.min(contentLength * 0.1, maxChunkSize);\r\n const chunkSize = 1024 * 1024 * 1024 * 1024 // 1MB chunk size\r\n let bytesUploaded = 0;\r\n\r\n while (bytesUploaded < contentLength) {\r\n const start = bytesUploaded;\r\n const end = Math.min(bytesUploaded + chunkSize, contentLength);\r\n\r\n // Send chunk of the file\r\n await fetch(partParams.url, {\r\n method: \"PUT\",\r\n body: file.file.slice(start, end),\r\n headers: {\r\n \"Content-Type\": \"application/octet-stream\",\r\n },\r\n });\r\n\r\n // Update progress\r\n bytesUploaded = end;\r\n const progress = Math.round((bytesUploaded / contentLength) * 100);\r\n\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n checkboxDisabled: true,\r\n status: \"uploading\",\r\n uploadProgress: progress,\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"completed\",\r\n location,\r\n message: \"Uploaded Successfully\",\r\n };\r\n tempCount = tempCount + 1;\r\n\r\n if (fileCount == tempCount) {\r\n onSubmit(updatedFiles);\r\n tempCount = 0;\r\n\r\n }\r\n return updatedFiles;\r\n });\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n\r\n };\r\n\r\n const handleMultipartUpload = async (\r\n file: any,\r\n index: number,\r\n controller: any,\r\n ) => {\r\n\r\n try {\r\n const partSize =\r\n (getInternetSpeed() || 10) * 1024 * 1024 < 5 * 1024 * 1024\r\n ? 5 * 1024 * 1024\r\n : (getInternetSpeed() || 10) * 1024 * 1024;\r\n const parts = Math.ceil(file?.fileSize / partSize);\r\n const preSignedUrlsResponse = await fetch(\r\n `${BASE_URL}?key=${file?.fileName}&partCount=${parts}&mimeType=${file?.fileType}&is_private=${!file?.isPrivate}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"file-size\": file?.fileSize,\r\n \"x-token\": authToken,\r\n },\r\n signal: controller.signal,\r\n },\r\n );\r\n const preSignedUrlsData = await preSignedUrlsResponse.json();\r\n\r\n if (preSignedUrlsData && preSignedUrlsData?.status_code && preSignedUrlsData?.status_code == 400) {\r\n setToast({ message: preSignedUrlsData?.message || \"Internal Server Error\", type: \"error\" });\r\n return null;\r\n }\r\n\r\n const preSignedUrls = preSignedUrlsData.data.preSignedData?.preSignedUrls;\r\n if (preSignedUrls.length > 0) {\r\n const uploadId =\r\n preSignedUrls[0].presignedUrl.match(/uploadId=([^&]+)/)[1];\r\n for (let i = 0; i < preSignedUrls.length; i++) {\r\n const partNum = preSignedUrls[i].partNumber;\r\n const preSignedUrl = preSignedUrls[i].presignedUrl;\r\n const start = (partNum - 1) * partSize;\r\n const end = Math.min(start + partSize, file?.fileSize);\r\n const partParams = {\r\n Body: file?.file?.slice(start, end),\r\n url: preSignedUrl,\r\n };\r\n await fetch(partParams.url, {\r\n method: \"PUT\",\r\n body: partParams.Body,\r\n headers: {\r\n \"Content-Type\": \"application/octet-stream\",\r\n },\r\n });\r\n const progress = Math.round(((i + 1) * 100) / parts);\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n checkboxDisabled: true,\r\n status: \"uploading\",\r\n uploadProgress: progress,\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n const markCompleteResponse = await fetch(`${BASE_URL}mark-complete`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-token\": authToken,\r\n },\r\n body: JSON.stringify({\r\n fileName: file?.fileName,\r\n uploadId: uploadId,\r\n }),\r\n });\r\n const markCompleteData = await markCompleteResponse.json();\r\n const location = markCompleteData?.data?.location;\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"completed\",\r\n location: location,\r\n message: \"Uploaded Successfully\",\r\n };\r\n\r\n onSubmit(updatedFiles);\r\n return updatedFiles;\r\n });\r\n } else {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: \"Did not get pre-signed URLs\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n };\r\n\r\n const handleChipClick = () => {\r\n if (fileInputRef.current) {\r\n // If multiple is true, set input for multiple files\r\n if (props.multiple) {\r\n fileInputRef.current.setAttribute(\"multiple\", \"true\");\r\n } else {\r\n // If multiple is false, set input for a single file\r\n fileInputRef.current.removeAttribute(\"multiple\");\r\n }\r\n fileInputRef.current.click();\r\n }\r\n };\r\n\r\n //checking if the file already exists or not in the drive \r\n const handleFileChange = (e: any) => {\r\n\r\n const selectedFiles = e.target.files;\r\n\r\n const fileTitles = Array.from(selectedFiles).map(file => {\r\n const fileName = file.name;\r\n const nameWithoutExtension = fileName.substring(0, fileName.lastIndexOf('.')) || fileName;\r\n return nameWithoutExtension;\r\n })[0];\r\n\r\n setSelectedFileTitle(fileTitles);\r\n\r\n setIsConfirmDialogOpen(allDriveData?.includes(fileTitles));\r\n const newFiles = Array.from(selectedFiles).map((file: any) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file?.size,\r\n fileName: file?.name,\r\n fileType: file?.type,\r\n location: \"\",\r\n message: \"\",\r\n }));\r\n setFiles((prevFiles: any) => [...prevFiles, ...newFiles]);\r\n setIsUploading(false);\r\n\r\n\r\n };\r\n\r\n const removeFile = (indexToRemove: number) => {\r\n\r\n setFiles((prevFiles) =>\r\n prevFiles.map((file, index) =>\r\n index === indexToRemove ? { ...file, status: \"canceled\" } : file,\r\n ),\r\n );\r\n\r\n };\r\n\r\n\r\n\r\n const toggleIsPrivate = (index: number) => {\r\n setFiles((prevFiles) =>\r\n prevFiles.map((item, i) =>\r\n i === index ? { ...item, isPrivate: !item.isPrivate } : item,\r\n ),\r\n );\r\n };\r\n\r\n const toggleCollapse = () => {\r\n setIsCollapsed((prevIsCollapsed) => !prevIsCollapsed);\r\n };\r\n\r\n const handleMinimizeClick = () => {\r\n setIsDialogMinimized(!isDialogMinimized);\r\n isDialogMinimized ? onConfirm() : onClose();\r\n };\r\n\r\n const handleDialogClose = () => {\r\n if (files.length > 0) {\r\n if (\r\n confirm(\r\n \"Your uploads are not complete. Would you like to cancel all ongoing uploads?\",\r\n )\r\n ) {\r\n // Abort the ongoing requests when the dialog is closed\r\n abortController.abort();\r\n if (abortController?.signal?.aborted) {\r\n onClose();\r\n }\r\n setFiles([]);\r\n }\r\n } else {\r\n onClose();\r\n }\r\n };\r\n useEffect(() => {\r\n open && setFiles([]);\r\n }, [open]);\r\n\r\n const onCloseConfirmPopup = () => {\r\n setIsConfirmDialogOpen(false);\r\n }\r\n\r\n const onReplace = async () => {\r\n const baseUrl = `${getApiConfig().backendBaseUrl}`;\r\n const fileId = existingDriveData?.filter(file => file.title === selectedFileTitle)[0].id;\r\n const headers = {\r\n \"Content-type\": \"application/json; charset=utf-8\",\r\n };\r\n const authToken = localStorage.getItem(auth.storageTokenKeyName) || '';\r\n headers[\"x-token\"] = authToken;\r\n await fetch(`${baseUrl}/document/v1/drive/${fileId}`, {\r\n method: \"DELETE\",\r\n headers,\r\n });\r\n\r\n onCloseConfirmPopup();\r\n }\r\n\r\n const onKeepBoth = () => {\r\n onCloseConfirmPopup();\r\n }\r\n return (\r\n <>\r\n <Dialog open={open} onClose={onClose} className=\"upload\">\r\n <DialogTitle className=\"upload--head\">\r\n <Box className=\"upload--title\">\r\n <Typography\r\n type=\"s3\"\r\n ml={1}\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n {title}\r\n </Typography>\r\n </Box>\r\n <div>\r\n <IconButton disableRipple onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </IconButton>\r\n <IconButton disableRipple onClick={handleDialogClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </div>\r\n </DialogTitle>\r\n <Divider />\r\n <DialogContent className=\"upload--content\">\r\n {files.length === 0 ? (\r\n <div\r\n className={`upload--fileContent ${isDragActive ? \"drag-active\" : \"\"\r\n }`}\r\n >\r\n <div {...getRootProps()} className=\"drop-view\">\r\n {!isDragOver ? (\r\n <>\r\n <input {...getInputProps()} ref={fileInputRef} />\r\n <p className=\"upload--text\">\r\n Drag and Drop files here or upload from\r\n </p>\r\n\r\n <div className=\"device-wrap\">\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.monitor} />\r\n <Typography type=\"s5\">My Device</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={async () => {\r\n // handleFileChange(e) ; \r\n handleConfirm();\r\n }}\r\n accept={accept}\r\n />\r\n </div>\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.camera} />\r\n <Typography type=\"s5\">Camera</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"after-drop\">\r\n <img src={images.upload.documentUpload} />\r\n <Typography type=\"s3\">\r\n Drag & Drop your files here\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"main-container\">\r\n <div className=\"body-section\">\r\n <div className=\"document-section\">\r\n <div className=\"document-body\">\r\n {files.map((file: any, index: number) => (\r\n <div className=\"upload-list\" key={index}>\r\n <div className=\"document-cover\" key={file?.file?.name}>\r\n <div className=\"document-name\">\r\n {renderFileIcon(file?.file)}\r\n <div className=\"document-title\">\r\n <div className=\"document-box\">\r\n <div className=\"document-desc\">\r\n {file?.file?.name}\r\n </div>\r\n <div className=\"document-size\">\r\n {formatBytes(file?.file?.size)}\r\n <span\r\n className={\r\n file?.status === \"completed\" &&\r\n file?.message.length > 0\r\n ? \"success-file\"\r\n : \"fail-file\"\r\n }\r\n >\r\n {file?.message}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"document-choices\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n <div className=\"checkbox\">\r\n <Checkbox\r\n checked={file?.isPrivate || type == 'public'}\r\n onChange={() => toggleIsPrivate(index)}\r\n disabled={file?.checkboxDisabled || type == 'public'}\r\n />\r\n <div className=\"checkbox-text\">Public</div>\r\n </div>\r\n <div\r\n className=\"delete-icon\"\r\n onClick={() => removeFile(index)}\r\n >\r\n <Avatar\r\n size={24}\r\n src={images.upload.trash}\r\n ></Avatar>\r\n </div>\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"document-progress\">\r\n {file?.uploadProgress > 0 && (\r\n <LinearProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n {multiple && (\r\n <>\r\n <Chip\r\n className=\"add-file\"\r\n variant=\"outlined\"\r\n type=\"normal\"\r\n label={\"Add File\"}\r\n icon={<Add />}\r\n onClick={handleChipClick}\r\n />\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </DialogContent>\r\n <Divider />\r\n <DialogActions className=\"upload--actions\">\r\n <Button variant=\"text\" onClick={handleDialogClose}>\r\n Cancel\r\n </Button>\r\n <Button\r\n color=\"secondary\"\r\n onClick={handleConfirm}\r\n disabled={!files.length || isUploading}\r\n >\r\n Upload\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n {isDialogMinimized && (\r\n <div className=\"bottom-corner-box\">\r\n <div className=\"top-section\">\r\n <div className=\"top-text\">\r\n Uploading {files.length} Item{files.length !== 1 ? \"s\" : \"\"}\r\n </div>\r\n <div className=\"top-options\">\r\n <div className=\"btn\" onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </div>\r\n <div className=\"btn\" onClick={toggleCollapse}>\r\n <div className=\"arrow-btn\">\r\n {isCollapsed ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\r\n </div>\r\n </div>\r\n <div className=\"btn\" onClick={handleDialogClose}>\r\n <Clear />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"box-list\">\r\n {!isCollapsed &&\r\n files.map((file: any, index: number) => (\r\n <div className=\"bottom-section\">\r\n <div className=\"doc-icon\">{renderFileIcon(file?.file)}</div>\r\n <div className=\"file-detail\">\r\n <div className=\"file-name\">\r\n <div className=\"file-text\">\r\n {file?.file?.name}\r\n {index}\r\n </div>\r\n </div>\r\n <div className=\"file-status\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n {file.uploadProgress === 0 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.empty}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n onClick={() => removeFile(index)}\r\n src={images.upload.close}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n {file?.uploadProgress > 0 &&\r\n file?.uploadProgress < 100 && (\r\n <CircularProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n {file?.uploadProgress === 100 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.tick}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n src={images.upload.folder}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {isConfirmDialogOpen && <FileConfirmationDialog title={selectedFileTitle} open={isConfirmDialogOpen} onClose={onCloseConfirmPopup} onReplace={onReplace} onKeepBoth={onKeepBoth} isFile={true} />}\r\n\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { Upload };\r\nexport default Upload;\r\n","import { Close } from \"@mui/icons-material\";\r\nimport { ChipProps } from \"@mui/material\";\r\nimport Chip from \"../../chip/chip\";\r\nimport Typography from \"../../typography/typography\";\r\n\r\ninterface ChipOrPlaceholderProps {\r\n data: string[];\r\n placeholder: string;\r\n onDelete?: () => void;\r\n chipProps?: Omit<ChipProps, \"label\">;\r\n}\r\n\r\nconst ChipOrPlaceholder: React.FC<ChipOrPlaceholderProps> = ({\r\n data,\r\n placeholder,\r\n onDelete,\r\n chipProps,\r\n}) => (\r\n <>\r\n {data.length ? (\r\n <Chip\r\n variant=\"outlined\"\r\n type=\"normal\"\r\n label={`${data.length} Selected`}\r\n deleteIcon={<Close fontSize=\"large\" />}\r\n onDelete={onDelete}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n {...chipProps}\r\n />\r\n ) : (\r\n <Typography color=\"inherit\" type=\"s3\">\r\n {placeholder}\r\n </Typography>\r\n )}\r\n </>\r\n);\r\n\r\nexport default ChipOrPlaceholder;\r\n","import { Control, Controller, FieldValue } from \"react-hook-form\";\nimport { Box, FormHelperText, MenuItem, SelectProps } from \"@mui/material\";\n\nimport Select from '../select';\nimport Checkbox from '../../checkbox/checkbox';\nimport Typography from '../../typography/typography';\nimport Chip from '../../chip/chip';\nimport MoreIcon from '../../icons/more';\nimport { MenuItemProps } from '@mui/material';\nimport { ReactElement } from 'react';\nimport ChipOrPlaceholder from './chip-or-placeholder';\nimport './controller-select.scss';\n\ninterface IControllerSelect {\n name: string;\n label: string;\n options: any;\n placeholder: string;\n formControl: Control<FieldValue<any>, any>;\n fieldArrayName?: string;\n position?: string;\n required?: boolean;\n size?: SelectProps[\"size\"];\n multiple?: boolean;\n disabled?: boolean;\n searchPlaceholder?: string;\n handleSearch?: () => void;\n classes?: string;\n with_checkboxes?: boolean;\n onChipRemove?: () => void;\n}\n\nexport interface IOption {\n\ttext: string;\n\tvalue: string | number;\n\tisGroup?: boolean;\n\tparent?: string;\n\toptions?: { text: string; value: string }[];\n}\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: IOption[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n onChange: (value: string[]) => void\n\tvalues: string | string[];\n}\n\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: IOption[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions.find((option: any) => option.value === selectedItem)?.text ||\n\t\t\tselectedItem\n\t);\n\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\n\t\t\t{displayTitle.slice(0.4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t<Chip variant='outlined' type='normal' label={<MoreIcon />} />\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n onChange,\n\tvalues\n}: IMenuItems) => {\n\tconst items: ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value=''>\n\t\t\t\t<em>{placeholder}</em>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\n const childValues = childOptions.map((child) => child.value);\n\n const isParentSelected = values.includes(parentValue);\n const updatedValues = isParentSelected\n ? values.filter((value) => value !== parentValue && !childValues.includes(value))\n : [...values, parentValue, ...childValues];\n\n onChange(updatedValues);\n };\n\n\toptions.forEach((option) => {\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t// <Checkbox checked={values?.indexOf((option.value)) > -1} />\n <Checkbox checked={values?.indexOf((option.value)) > -1}\n onChange={() => handleParentChange(option.value, option.options || [])}\n />\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t{option.text}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem value={opt.value} sx={{ pl: 5 }}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox checked={values?.indexOf(opt.value) > -1} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{opt.text}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\treturn items;\n};\n\nconst ControllerSelect: React.FC<IControllerSelect> = ({\n name,\n fieldArrayName,\n options,\n label,\n placeholder,\n formControl,\n position,\n required,\n size = \"small\",\n multiple,\n disabled,\n searchPlaceholder,\n handleSearch,\n classes,\n with_checkboxes,\n onChipRemove,\n}) => {\n return (\n <Controller\n control={formControl}\n name={`${fieldArrayName}.${name}`}\n render={({ field, fieldState: { error } }) => (\n <>\n <Select\n fullWidth\n name={name}\n dataPosition={position}\n dataName={`${fieldArrayName}.${name}`}\n placeholder={placeholder}\n label={label}\n value={field.value || (multiple ? [] : \"\")}\n defaultValue=\"\"\n onChange={(e:any)=>(multiple&&e.target?.value.filter((i:any)=>i)?.length>0||!multiple&&(e.target?.value))?field.onChange(e.target.value):field.onChange(\"\")}\n required={Boolean(required)}\n size={size}\n multiple={Boolean(multiple)}\n disabled={Boolean(disabled)}\n searchPlaceholder={searchPlaceholder}\n handleSearch={handleSearch}\n className={classes}\n variant=\"outlined\"\n error={Boolean(error)}\n renderValue={(selected: string | string[]) => (\n <>\n {Array.isArray(selected) ? (\n <ChipOrPlaceholder\n data={selected}\n placeholder={placeholder}\n onDelete={onChipRemove}\n />\n ) : (\n selected || placeholder\n )}\n </>\n )}\n >\n {generateMenuItems({\n options,\n multiple: Boolean(multiple),\n placeholder: placeholder,\n values: field.value,\n with_checkboxes: Boolean(with_checkboxes),\n onChange: field.onChange\n })}\n </Select>\n {error &&\n <FormHelperText error>{error.message}</FormHelperText>\n }\n {multiple && Array.isArray(field?.value) && (\n <SelectedItems data={field.value} options={options} />\n )}\n </>\n )}\n />\n );\n};\n\nexport default ControllerSelect;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { Box } from '@mui/material';\r\n\r\nimport Typography from '../../typography/typography';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport DateTimePicker from '../../date-time-picker/date-time-picker';\r\nimport TextField from '../../text-field/text-field';\r\nimport UploadMedia from '../../upload-media/upload-media';\r\n\r\nimport * as yup from 'yup';\r\nimport _ from 'lodash';\r\nimport dayjs from 'dayjs';\r\nimport PhoneInput from '../../phone-input/phone-input';\r\nimport Checkbox from '../../checkbox/checkbox';\r\nimport SearchableSelect from '../../searchable-select';\r\nimport TimePicker from '../../time-picker/time-picker';\r\n\r\ninterface IInlineEditFields {\r\n\tcell: any;\r\n\tcolumn: any;\r\n\trow: any;\r\n\ttable: any;\r\n\tcol: any;\r\n\tcallback: (value: any, column: any, rowId: any) => any;\r\n\terrors: any;\r\n\tvalidationSchema: any;\r\n\tsetValidationErrors: any;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => any;\r\n\tgetSelectedData:any\r\n}\r\nconst InlineEditFields: React.FC<IInlineEditFields> = ({\r\n\t// cell,\r\n\tcolumn,\r\n\trow,\r\n\t// table,\r\n\tcol,\r\n\t// callback,\r\n\terrors,\r\n\tvalidationSchema,\r\n\tsetValidationErrors,\r\n\tonChangeRowField,\r\n\tgetSelectedData,\r\n\tsyncFieldValue\r\n}) => {\r\n\r\n\tconst [inputValue, setInputValue] = useState<any>();\r\n\tconst [isInitialSet, setIsInitialSet] = useState<any>(false);\r\n const customFilter=useRef(null)\r\n\t// ** Getting only editing enabled fields.\r\n\tconst editCols = row\r\n\t\t.getAllCells()\r\n\t\t.map((col: any) => col.column.columnDef)\r\n\t\t.filter(\r\n\t\t\t(col: any) =>\r\n\t\t\t\tcol?.enableEditing === undefined || col?.enableEditing === true\r\n\t\t);\r\n\r\n\tconst editVariant = col.editVariant;\r\n\tconst fieldProperties = column.columnDef?.editProperties || {};\r\n\r\n\t// ** Default and Dynamic disbaling a field with row data\r\n\tlet fieldDisbled = false;\r\n\tif (fieldProperties?.disable) {\r\n\t\tif (typeof fieldProperties.disable === 'function') {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties?.disable(row, row._valuesCache));\r\n\t\t} else {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties.disable);\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleCustomFilter = useCallback(async (row, values) => {\r\n\t\t\r\n\t\ttry {\r\n\t\t\tif (typeof fieldProperties.customeFilter === 'function') {\r\n\t\t\t\tconst filter = await fieldProperties.customeFilter(row, values);\r\n\t\t\t\tcustomFilter.current = filter;\r\n\t\t\t\treturn filter;\r\n\t\t\t} else {\r\n\t\t\t\tcustomFilter.current = fieldProperties?.customeFilter;\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [fieldProperties, row, row._valuesCache]);\r\n\r\n\t\r\n\tuseEffect(()=>{\r\n\t\thandleCustomFilter(row, row._valuesCache)\r\n\t},[handleCustomFilter,row,row._valuesCache]);\r\n\t// ** Setting a default value for edit mode.\r\n\tconst valueKey = fieldProperties?.valueKey;\r\n\tlet defaultValue: any = '';\r\n\r\n\tif (editVariant === 'select' && fieldProperties?.is_multiple) {\r\n\t\tdefaultValue = valueKey ? _.get(row.original, valueKey, []) : [];\r\n\t} else {\r\n\t\tdefaultValue = valueKey\r\n\t\t\t? _.get(row.original, valueKey, row.original[column.id])\r\n\t\t\t: row.original[column.id];\r\n\t\t\r\n\t\t// For select fields, if we have a string or numeric value but need an object, try to find the matching option\r\n\t\tif (editVariant === 'select' && (typeof defaultValue === 'string' || typeof defaultValue === 'number') && col?.editSelectOptions) {\r\n\t\t\tconst matchingOption = col.editSelectOptions.find((option: any) => \r\n\t\t\t\toption.value === defaultValue || option.id === defaultValue || option.name === defaultValue || String(option.id) === String(defaultValue)\r\n\t\t\t);\r\n\t\t\tif (matchingOption) {\r\n\t\t\t\tdefaultValue = matchingOption;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// ** Validate a field with Material Table Validation Schema.\r\n\tconst validate = async (value: any) => {\r\n\t\ttry {\r\n\t\t\t// const v = await validationSchema.validateAt( // * * This line has commented for rerendering purpose\r\n\t\t\tawait validationSchema.validateAt(\r\n\t\t\t\tcolumn.id,\r\n\t\t\t\t{\r\n\t\t\t\t\t[column.id]: value\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\t// if (v) { // * * The if condition has commented for rerendering purpose\r\n\t\t\t\tconst fe: any = {}; // field error\r\n\t\t\t\tfor (const e in errors) {\r\n\t\t\t\t\tif (e != column.id) {\r\n\t\t\t\t\t\tfe[e] = errors[e];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsetValidationErrors(fe);\r\n\t\t\t// }\r\n\t\t} catch (err) {\r\n\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\tconst e: Record<string, string> = {};\r\n\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\te[error.path] = error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tconst em = { ...errors, ...e };\r\n\t\t\t\tsetValidationErrors(em);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t\r\n\r\n\t// ** Detect onChnage to perform the action on an input change.\r\n\tconst onChange = async (e: any, type: string,selectedData:any) => {\r\n\t\tconst data = selectedData\r\n\t\tlet value;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'file':\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'phone':\r\n\t\t\tcase 'time':\r\n\t\t\t\tvalue = e;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: e });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text':\r\n\t\t\tcase 'number':\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'checkbox':\r\n\t\t\t\tvalue = e.target.checked;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\r\n\t\tif (onChangeRowField) {\r\n\t\t\tconst v = await onChangeRowField(e, type, row, col, data);\r\n\t\t\tif (v) {\r\n\t\t\t\trow._valuesCache = { ...row._valuesCache, ...v };\r\n\t\t\t\tsetInputValue({ ...inputValue, ...v });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\trow._valuesCache = { ...row._valuesCache, [column.id]: value };\r\n\t\tsyncFieldValue(row.id, column.id, value);\r\n\t\t\r\n\t\tawait validate(value);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputValue({ ...inputValue, ...row._valuesCache });\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [row._valuesCache]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialSet) {\r\n\t\t\tconst editFields = Object.keys(row._valuesCache || {});\r\n\t\t\tconst dValues: any = {};\r\n\r\n\t\t\trow.getAllCells().forEach((cell) => {\r\n\t\t\t\tif (\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === undefined ||\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === true\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst { is_multiple, valueKey } =\r\n\t\t\t\t\t\tcell.column.columnDef?.editProperties || {};\r\n\t\t\t\t\tif (editFields.includes(cell.column.id)) {\r\n\t\t\t\t\t\tconst vl = _.get(row.original, valueKey);\r\n\t\t\t\t\t\tif (editVariant === 'select' && is_multiple) {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? Array.isArray(vl)\r\n\t\t\t\t\t\t\t\t\t? vl\r\n\t\t\t\t\t\t\t\t\t: [vl]\r\n\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t} else if (editVariant === 'date' || editVariant === 'date_time' || editVariant === 'time') {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? dayjs(vl).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(vl)\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t: dayjs(row.original[cell.column.id]).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(row.original[cell.column.id])\r\n\t\t\t\t\t\t\t\t\t: undefined;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = _.get(\r\n\t\t\t\t\t\t\t\trow.original,\r\n\t\t\t\t\t\t\t\tvalueKey,\r\n\t\t\t\t\t\t\t\trow.original[cell.column.id]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// setFieldsValues(dValues);\r\n\t\t\trow._valuesCache = dValues;\r\n\t\t\tsetInputValue(dValues);\r\n\t\t\tsetIsInitialSet(true);\r\n\t\t}\r\n\t}, [row, editVariant, isInitialSet]);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{(!editVariant || editVariant === 'number') && (\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t// onBlur={(e) => onBlur(e)}\r\n\t\t\t\t\t// onKeyDown={onKeyDown}\r\n\t\t\t\t\tonChange={(e) => onChange(e, editVariant)}\r\n\t\t\t\t\tvalue={inputValue?.[column.id]}\r\n\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\ttype={editVariant || 'text'}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'select' && (\r\n\t\t\t\t<Box display='flex' flexDirection='column' width='100%'>\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\t\tsearchPlaceholder={`Search ${col.header}`}\r\n\t\t\t\t\t\tonChange={(e, row) => onChange(e, 'select', row)}\r\n\t\t\t\t\t\tapiType={fieldProperties?.apiType}\r\n\t\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\t\toptions={col?.editSelectOptions}\r\n\t\t\t\t\t\tcustomeFilter={customFilter.current}\r\n\t\t\t\t\t\tfilterKey={fieldProperties?.filterKey}\r\n\t\t\t\t\t\tlabelKey={fieldProperties?.labelKey}\r\n\t\t\t\t\t\tvalueKey={fieldProperties?.bindingKey}\r\n\t\t\t\t\t\tattributes={fieldProperties.attributes}\r\n\t\t\t\t\t\tisInternal={fieldProperties?.isInternal || !fieldProperties?.apiType}\r\n\t\t\t\t\t\tmultiple={fieldProperties?.is_multiple}\r\n\t\t\t\t\t\tvalue={\r\n\t\t\t\t\t\t\tfieldProperties?.is_multiple\r\n\t\t\t\t\t\t\t\t? Array.isArray(inputValue?.[column.id])\r\n\t\t\t\t\t\t\t\t\t? inputValue?.[column.id]\r\n\t\t\t\t\t\t\t\t\t: []\r\n\t\t\t\t\t\t\t\t: inputValue?.[column.id]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgetSelectedData={(row)=>getSelectedData(fieldProperties?.field_name,row)}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date' && (\r\n\t\t\t\t<DatePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tminDate={fieldProperties?.min_date}\r\n\t\t\t\t\tmaxDate={fieldProperties?.max_date}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date_time' && (\r\n\t\t\t\t<DateTimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'time' && (\r\n\t\t\t\t<TimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tlabel=''\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'time')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || 'HH:mm A'}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tis24hrFormat={fieldProperties?.is24hrFormat}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{(editVariant === 'file' || editVariant === 'image') && (\r\n\t\t\t\t<Box display='flex' flexDirection='column'>\r\n\t\t\t\t\t<UploadMedia\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || 'table_file'}\r\n\t\t\t\t\t\tdataPosition={0}\r\n\t\t\t\t\t\tdataName='table_file'\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\ttype={editVariant}\r\n\t\t\t\t\t\tmax_size={10}\r\n\t\t\t\t\t\tonChange={(v) => onChange(v, 'file')}\r\n\t\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\t\tmultiple={Boolean(column?.is_multiple)}\r\n\t\t\t\t\t\tvalue={row._valuesCache[column.id]}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'phone' && (\r\n\t\t\t\t<PhoneInput\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefault_value={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'phone')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tisInlineEditing={true}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'checkbox' && (\r\n\t\t\t\t<Checkbox\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultChecked={Boolean(defaultValue)}\r\n\t\t\t\t\t// checked={Boolean(defaultValue)}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'checkbox')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default InlineEditFields;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport React, { cloneElement, useCallback, useEffect, useRef, useState } from 'react';\r\nimport {\r\n\tMRT_ColumnDef,\r\n\tMRT_ColumnSizingInfoState,\r\n\tMRT_ColumnSizingState,\r\n\tMRT_Header,\r\n\tMRT_Row,\r\n\tMRT_RowData,\r\n\tMRT_RowSelectionState,\r\n\tMRT_SortingState,\r\n\tMRT_TableInstance,\r\n\tMRT_TableState,\r\n\tMaterialReactTable,\r\n\tMaterialReactTableProps,\r\n\tuseMaterialReactTable,\r\n\t// Cell\r\n} from 'material-react-table';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport {\r\n\tBox,\r\n\tstyled,\r\n\tMenuItem,\r\n\tIconButton,\r\n\tListItemIcon,\r\n\tListItemText,\r\n\tSvgIconProps,\r\n\tDivider\r\n} from '@mui/material';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport Menu from '../menu/menu';\r\nimport Typography from '../typography/typography';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport images from '../../assets/images';\r\n// import DeleteIcon from \"@mui/icons-material/Delete\";\r\n// import UpdateIcon from \"@mui/icons-material/Update\";\r\n// import PlayIcon from \"@mui/icons-material/PlayArrow\";\r\n\r\nimport './material-editable-table.scss';\r\nimport {\r\n\tArrowUpDown,\r\n\tCheckBoxIcon,\r\n\tClose,\r\n\tRecgtangleIcon,\r\n\tTrash,\r\n\tSave\r\n} from '../icons';\r\n// import {\r\n// \tArrowDropDown /* , SaveOutlined */,\r\n// \tArrowDropUp\r\n// } from '@mui/icons-material';\r\nimport InlineEditFields from './components/inline-edit-fields';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport Button from '../button/button';\r\nimport Add from '@mui/icons-material/Add';\r\nimport dayjs from 'dayjs';\r\nimport * as yup from 'yup';\r\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { useNavigate } from 'react-router-dom';\r\n// import { PathnameAccounting } from 'accounting/src/pathname.accounting';\r\n// import { PathnameInventory } from 'inventory/src/pathname.inventory';\r\n// import { PathnameManufacturing } from 'manufacturing/src/pathname.manufacturing';\r\n// import { PathnamePurchase } from 'procurement/src/pathname.procurement';\r\n// import { PathnameCrm } from 'crm/src/pathname.crm';\r\n// import { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\n// import { PathnameRental } from '../../../../rental/src/pathname.rental';\r\n// import { PathnameDocument } from 'document/src/pathname.document';\r\nimport { PathnameDocument } from '../../constants/pathnames/pathname.document';\r\nimport { PathnameAccounting } from '../../constants/pathnames/pathname.accounting';\r\nimport { PathnameInventory } from '../../constants/pathnames/pathname.inventory';\r\nimport { PathnameManufacturing } from '../../constants/pathnames/pathname.manufacturing';\r\nimport { PathnamePurchase } from '../../constants/pathnames/pathname.procurement';\r\nimport { PathnameCrm } from '../../constants/pathnames/pathname.crm';\r\nimport { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\nimport { PathnameRental } from '../../constants/pathnames/pathname.rental';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\n\r\ntype ExtraEditVariants =\r\n\t| 'file'\r\n\t| 'image'\r\n\t| 'date'\r\n\t| 'number'\r\n\t| 'time'\r\n\t| 'date_time'\r\n\t| 'phone'\r\n\t| 'checkbox';\r\n\r\ntype DisableFunction = (row: any, virtualRow?: any) => boolean;\r\n\r\nexport type TypeBooleanLabels = { 1: string; 0: string; true: string; false: string }\r\n\r\nexport interface MaterialEditableTableColumnProps\r\n\textends Omit<MRT_ColumnDef<MRT_RowData>, 'editVariant'> {\r\n\tvisible?: boolean;\r\n\ttype?: string;\r\n\tshowDefaultCurrency?: boolean,\r\n\tvalueGet?: string;\r\n\tcustom_class?: string;\r\n\ttypeArrayAccessorKey?: string; //when type is an array of object\r\n\ttypeBooleanLabels?: TypeBooleanLabels; //when type is an boolean\r\n\teditVariant?: MRT_ColumnDef<MRT_RowData>['editVariant'] | ExtraEditVariants;\r\n\teditProperties?: {\r\n\t\tfield_name?: string;\r\n\t\tvalueKey?: string;\r\n\t\tplaceholder?: string;\r\n\t\tdateFormat?: string;\r\n\t\tvalidations?: any[];\r\n\t\tis_multiple?: boolean;\r\n\t\tis_multiline?: boolean;\r\n\t\tdisable?: boolean | DisableFunction;\r\n\t\tmin_date?: any;\r\n\t\tmax_date?: any;\r\n\t};\r\n\tredirectionPathWithId?: string;\r\n\tidField?: string;\r\n\tisOnClickEditable?: boolean; // Controls whether clicking this column triggers row edit mode (default: true)\r\n}\r\n\r\n\r\n\r\nexport interface MaterialEditableTableColumnHeaderProps {\r\n\tcolumn: MRT_ColumnDef<any, any>;\r\n\theader: MRT_Header<any>;\r\n\ttable: MRT_TableInstance<any>;\r\n}\r\n\r\ntype rowSelectionCallback = (row: MRT_Row) => boolean\r\n\r\ninterface MaterialEditableTablePropsType {\r\n\tenablePagination?: boolean;\r\n\trows: any;\r\n\ttotalPages: number;\r\n\tcolumns: any;\r\n\tpaginationModel: IPaginationModel;\r\n\tcolumnOrder?: string[];\r\n\tupdateData?: any;\r\n\thandleColumnOrdering?: (colOrder: any) => void;\r\n\tenableEditing?: boolean;\r\n\tenableColumnDragging?: boolean;\r\n\trowActionMenu?: any;\r\n\tdestructiveActionMenu?: any;\r\n\tgetRowId?: any;\r\n\tstates?: Partial<MRT_TableState<any>>;\r\n\tonSortingChange?: any;\r\n\tdisableDefaultActionColumn?: boolean;\r\n\tenableRowSelection?: boolean | rowSelectionCallback;\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tenableBottomToolbar?: boolean;\r\n\tSetSelectedRowId?: any;\r\n\tisResetRow?: boolean;\r\n\tonCreateRow?: (data: any) => Promise<unknown>;\r\n\tonEditRow?: (data: any) => Promise<unknown>;\r\n\tonDeleteRow?: (data: any) => Promise<unknown>;\r\n\teditDisplayMode?: MaterialReactTableProps<any>['editDisplayMode'];\r\n\tenableRowCreate?: boolean;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => void;\r\n\tonSelectRow?: (rows: any, prevSelected?: any) => any;\r\n\tenableColumnResizing?: boolean;\r\n\tselectedRowIds?: any[];\r\n\tonColumnVisibility?: (columns: MaterialTableColumnProps[]) => void\r\n\tgetSelectedData: any;\r\n\tenableAddCustomField?: boolean;\r\n\tdisabledDefaultActionColumnIcon?: boolean\r\n\tenableRowDragging?: boolean\r\n\thandleColumnResizing?: (sizes: MRT_ColumnSizingState) => void,\r\n\tcolumnSizes?: MRT_ColumnSizingState,\r\n\thideSaveButton?: boolean;\r\n\thideDeleteButton?: (row: any) => boolean;\r\n\tenableFirstRowEdit?: boolean;\r\n}\r\n\r\nconst TableWrapper = styled(Box)(({ theme: { palette } }) => ({\r\n\t'.MuiTableCell-root': {\r\n\t\tborder: '1px solid #efefef',\r\n\t\tborderBottom: 0,\r\n\t\tborderLeft: 0,\r\n\t\tpadding: '0 0.5rem',\r\n\t\tlineHeight: '19px',\r\n\t\tfontSize: '14px',\r\n\t\tminHeight: 32,\r\n\t\t// '&:first-child': {\r\n\t\t// \tborderLeft: '1px solid #efefef'\r\n\t\t// },\r\n\t\t// '&:last-child': {\r\n\t\t// \tborderBottom: '1px solid #efefef'\r\n\t\t// }\r\n\r\n\t},\r\n\t'.MuiTableCell-head': {\r\n\t\tbackgroundColor: palette.theme?.secondary[100]\r\n\t},\r\n\t'.MuiTableContainer-root': {\r\n\t\tmaxHeight: 'clamp(350px, 100vh - 200px, 9999px) !important',\r\n\t},\r\n\r\n\t'.MuiPaper-root': {\r\n\t\tboxShadow: 'none',\r\n\r\n\t},\r\n\t'.MuiPaginationItem-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: palette?.theme?.primary[700],\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiTableRow-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: `${palette?.theme?.primary[100]} !important`,\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiCheckbox-indeterminate': {\r\n\t\tcolor: `${palette?.theme?.primary[700]} !important`,\r\n\t\t\"& svg\": {\r\n\t\t\theight: `20px !important`,\r\n\t\t\twidth: `20px !important`,\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type RowValues = Record<string, unknown>;\r\n\r\nconst MaterialEditableTable = React.memo(({\r\n\tenablePagination = false,\r\n\trows,\r\n\tcolumns,\r\n\ttotalPages,\r\n\tpaginationModel,\r\n\tcolumnOrder,\r\n\tupdateData,\r\n\thandleColumnOrdering,\r\n\tenableEditing,\r\n\tenableColumnDragging,\r\n\tstates,\r\n\trowActionMenu,\r\n\tdestructiveActionMenu,\r\n\tdisableDefaultActionColumn,\r\n\tenableRowSelection,\r\n\tdefaultActionColumnItems = [],\r\n\tenableBottomToolbar,\r\n\tSetSelectedRowId,\r\n\tisResetRow,\r\n\tonCreateRow,\r\n\tonEditRow,\r\n\tonDeleteRow,\r\n\teditDisplayMode,\r\n\tenableRowCreate,\r\n\tonChangeRowField,\r\n\tonSelectRow,\r\n\tenableColumnResizing = true,\r\n\tselectedRowIds = [],\r\n\tonColumnVisibility,\r\n\tonSortingChange,\r\n\tgetSelectedData,\r\n\tdisabledDefaultActionColumnIcon = false,\r\n\tenableAddCustomField = true,\r\n\tenableRowDragging = false,\r\n\thandleColumnResizing = () => { },\r\n\tcolumnSizes = {},\r\n\thideSaveButton = false,\r\n\thideDeleteButton,\r\n\tenableFirstRowEdit = false,\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\t// getRowId,\r\n\t// onDelete,\r\n\t// onUpdate,\r\n\t...rest\r\n}: MaterialTablePropsType) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { formData = null, updatePageInfo, activePage: aPage } = usePages()\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\tconst { pageNo } = paginationModel;\r\n\tconst [row, setRow] = useState({});\r\n\tconst [tableColumns, setTableColumns] = useState(columns);\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [popUpShow, setPopupShow] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst visibleColumns = tableColumns.filter((column: any) => column.visible);\r\n\tconst hiddenColumns = tableColumns.filter((column: any) => !column.visible);\r\n\tconst [filteredOptions, setFilteredOptions] = useState(hiddenColumns);\r\n\tconst [selectedRow, setSelectedRow] = useState<number | null>(null);\r\n\tconst [validationErrors, setValidationErrors] = useState<any>({});\r\n\tconst [validationSchema, setValidationSchema] = useState<any>([]);\r\n\tconst [isCreatingRow, setIsCreatingRow] = useState<boolean>(false);\r\n\tconst [isEditingRow, setIsEditingRow] = useState<boolean>(false);\r\n\tconst [isDeletingRow, setIsDeletingRow] = useState<boolean>(false);\r\n\tconst [rowToDelete, setRowToDelete] = useState<any>(null);\r\n\tconst [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\r\n\tconst [isChecked, setIsChecked] = useState(false)\r\n\tconst [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\tconst [disableNextEdit, setDisableNextEdit] = useState(false);\r\n\tconst [columnSizing, setColumnSizing] = useState<MRT_ColumnSizingState>(activePage.column_sizes);\r\n\tconst [columnSizingInfo, setColumnSizingInfo] = useState<MRT_ColumnSizingInfoState>({\r\n\t\tcolumnSizingStart: [],\r\n\t\tdeltaOffset: null,\r\n\t\tdeltaPercentage: null,\r\n\t\tisResizingColumn: false,\r\n\t\tstartOffset: null,\r\n\t\tstartSize: null\r\n\t});\r\n\tconst [clickStartTime, setClickStartTime] = useState<number>(0);\r\n\r\n\tconst navigate = useNavigate();\r\n\tconst currentModule = location.pathname.split('/')[2]\r\n\r\n\tlet redirectionPath = ''\r\n\tswitch (currentModule) {\r\n\t\tcase 'accounting':\r\n\t\t\tredirectionPath = PathnameAccounting.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'inventory':\r\n\t\t\tredirectionPath = PathnameInventory.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'manufacturing':\r\n\r\n\t\t\tredirectionPath = PathnameManufacturing.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'procurement':\r\n\t\t\tredirectionPath = PathnamePurchase.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'crm':\r\n\t\t\tredirectionPath = PathnameCrm.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'user':\r\n\t\t\tredirectionPath = PathnameUsers.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'rental':\r\n\t\t\tredirectionPath = PathnameRental.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'drive':\r\n\t\t\tredirectionPath = PathnameDocument.ADD_CUSTOM_FIELDS\r\n\t\t\tbreak;\r\n\t}\r\n\tconst path = `/dashboard/${currentModule}${redirectionPath}`\r\n\tconst getValidationType = (column: any) => {\r\n\t\tswitch (column.editVariant) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn column?.editProperties?.is_multiple ? yup.array() : yup.string();\r\n\r\n\t\t\tcase 'number':\r\n\t\t\t\treturn yup.number().nullable().transform((value, originalValue) => (originalValue === \"\" ? null : value));\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\treturn yup\r\n\t\t\t\t\t.string()\r\n\t\t\t\t\t.matches(\r\n\t\t\t\t\t\t/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/,\r\n\t\t\t\t\t\t{ excludeEmptyString: true, message: 'Please enter valid URL.' }\r\n\t\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn yup.string()\r\n\t\t}\r\n\t};\r\n\r\n\tconst validationReducer = (\r\n\t\tschema: any,\r\n\t\tvalidation: any,\r\n\t\tcolumn: any\r\n\t) => {\r\n\t\tlet vld = schema;\r\n\r\n\t\tswitch (validation.type) {\r\n\t\t\t/* =====================================================\r\n\t\t\t COMMON (mixed)\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'required':\r\n\t\t\t\tif (validation.value) {\r\n\t\t\t\t\tvld = vld.required(validation.msg_en).typeError(validation.msg_en);\r\n\r\n\t\t\t\t\t// Prevent blank-only string\r\n\t\t\t\t\tif (!column?.editVariant || column?.editVariant === 'text') {\r\n\t\t\t\t\t\tvld = vld.test(\r\n\t\t\t\t\t\t\t'no-blank-spaces',\r\n\t\t\t\t\t\t\t'Blank space is not allowed',\r\n\t\t\t\t\t\t\t(value: any) =>\r\n\t\t\t\t\t\t\t\ttypeof value === 'string'\r\n\t\t\t\t\t\t\t\t\t? value.trim().length > 0\r\n\t\t\t\t\t\t\t\t\t: true\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (column?.editProperties?.is_multiple) {\r\n\t\t\t\t\tvld = vld.min(1, validation.msg_en);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'notRequired':\r\n\t\t\t\tvld = vld.notRequired();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'nullable':\r\n\t\t\t\tvld = vld.nullable(validation.value ?? true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'defined':\r\n\t\t\t\tvld = vld.defined(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'optional':\r\n\t\t\t\tvld = vld.optional();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'strict':\r\n\t\t\t\tvld = vld.strict(validation.value ?? true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'typeError':\r\n\t\t\t\tvld = vld.typeError(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'oneOf':\r\n\t\t\t\tvld = vld.oneOf(validation.values, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'notOneOf':\r\n\t\t\t\tvld = vld.notOneOf(validation.values, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'default':\r\n\t\t\t\tvld = vld.default(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'transform':\r\n\t\t\t\tvld = vld.transform(validation.fn);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'label':\r\n\t\t\t\tvld = vld.label(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'meta':\r\n\t\t\t\tvld = vld.meta(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t STRING\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'trim':\r\n\t\t\t\tvld = vld.trim();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'lowercase':\r\n\t\t\t\tvld = vld.lowercase();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'uppercase':\r\n\t\t\t\tvld = vld.uppercase();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'email':\r\n\t\t\t\tvld = vld.email(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\tvld = vld.url(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'uuid':\r\n\t\t\t\tvld = vld.uuid(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'length':\r\n\t\t\t\tvld = vld.length(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'min':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'max':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'matches':\r\n\t\t\t\tvld = vld.matches(validation.regex, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'startsWith':\r\n\t\t\t\tvld = vld.matches(\r\n\t\t\t\t\tnew RegExp(`^${validation.value}`),\r\n\t\t\t\t\tvalidation.msg_en\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'endsWith':\r\n\t\t\t\tvld = vld.matches(\r\n\t\t\t\t\tnew RegExp(`${validation.value}$`),\r\n\t\t\t\t\tvalidation.msg_en\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t NUMBER\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'lessThan':\r\n\t\t\t\tvld = vld.lessThan(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'moreThan':\r\n\t\t\t\tvld = vld.moreThan(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'positive':\r\n\t\t\t\tvld = vld.positive(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'negative':\r\n\t\t\t\tvld = vld.negative(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'integer':\r\n\t\t\t\tvld = vld.integer(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'round':\r\n\t\t\t\tvld = vld.round(validation.method || 'round');\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'truncate':\r\n\t\t\t\tvld = vld.truncate();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t ARRAY\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'minItems':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'maxItems':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ensure':\r\n\t\t\t\tvld = vld.ensure();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'compact':\r\n\t\t\t\tvld = vld.compact(validation.rejector);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'of':\r\n\t\t\t\tvld = vld.of(validation.schema);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t DATE\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'minDate':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'maxDate':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t OBJECT\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'shape':\r\n\t\t\t\tvld = vld.shape(validation.fields);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'noUnknown':\r\n\t\t\t\tvld = vld.noUnknown(validation.value ?? true, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t CUSTOM\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'test':\r\n\t\t\t\tvld = vld.test(\r\n\t\t\t\t\tvalidation.name || 'custom-test',\r\n\t\t\t\t\tvalidation.msg_en,\r\n\t\t\t\t\tvalidation.testFn\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t CONDITIONAL\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'when':\r\n\t\t\t\treturn vld.when(validation.relation, {\r\n\t\t\t\t\tis: (val: any) =>\r\n\t\t\t\t\t\ttypeof validation.is === 'function'\r\n\t\t\t\t\t\t\t? validation.is(val)\r\n\t\t\t\t\t\t\t: Array.isArray(validation.values)\r\n\t\t\t\t\t\t\t\t? validation.values.includes(val)\r\n\t\t\t\t\t\t\t\t: val === validation.values,\r\n\r\n\t\t\t\t\tthen: (s: any) =>\r\n\t\t\t\t\t\tvalidation?.thenValidations?.reduce(\r\n\t\t\t\t\t\t\t(acc: any, v: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(acc, v, column),\r\n\t\t\t\t\t\t\ts\r\n\t\t\t\t\t\t) || s,\r\n\r\n\t\t\t\t\totherwise: (s: any) =>\r\n\t\t\t\t\t\tvalidation?.otherWiseValidations?.reduce(\r\n\t\t\t\t\t\t\t(acc: any, v: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(acc, v, column),\r\n\t\t\t\t\t\t\ts\r\n\t\t\t\t\t\t) || s,\r\n\t\t\t\t});\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn vld;\r\n\t};\r\n\r\n\r\n\r\n\tconst generateValidationSchema = (columns: any[]) => {\r\n\t\treturn columns.reduce((acc: any, clm: any) => {\r\n\t\t\tconst validations = clm?.editProperties?.validations;\r\n\r\n\t\t\tif (!validations?.length) return acc;\r\n\r\n\t\t\tconst baseSchema = getValidationType(clm);\r\n\r\n\t\t\tacc[clm.accessorKey] = validations.reduce(\r\n\t\t\t\t(schema: any, validation: any) =>\r\n\t\t\t\t\tvalidationReducer(schema, validation, clm),\r\n\t\t\t\tbaseSchema\r\n\t\t\t);\r\n\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t};\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tsetTableColumns(columns);\r\n\r\n\t\tconst schema: any = generateValidationSchema(columns);\r\n\t\tsetValidationSchema(yup.object().shape(schema));\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!columnSizingInfo?.isResizingColumn) {\r\n\t\t\tupdatePageInfo({ column_sizes: { ...activePage.column_sizes, ...columnSizing } })\r\n\t\t\thandleColumnResizing?.(columnSizing)\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columnSizingInfo?.isResizingColumn, columnSizing])\r\n\r\n\tconst handleHeaderClick = (event: any) => {\r\n\t\tsetAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleHeaderClose = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleVisibleColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? false : col.visible\r\n\t\t}));\r\n\t\tsetTableColumns(updatedColumns);\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetFilteredOptions([...filteredOptions, column]);\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAddButtonClick = () => {\r\n\t\tsetPopupShow(true);\r\n\t};\r\n\r\n\tconst handleBackButtonClick = () => {\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleAddColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? true : col.visible\r\n\t\t}));\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetTableColumns(updatedColumns);\r\n\r\n\t\tconst updatedFilteredOptions = filteredOptions.filter(\r\n\t\t\t(option: any) => option.accessorKey !== column.accessorKey\r\n\t\t);\r\n\t\tsetFilteredOptions(updatedFilteredOptions);\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleSearchEvent = (searchQuery: string) => {\r\n\t\tconst filteredColumns = hiddenColumns.filter((option: any) =>\r\n\t\t\toption.header.toLowerCase().includes(searchQuery.toLowerCase())\r\n\t\t);\r\n\t\tsetFilteredOptions(filteredColumns);\r\n\t};\r\n\r\n\tconst handleCustomAddColumn = () => {\r\n\t\tnavigate(path, { state: formData })\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleRowClick = (rowId: number) => {\r\n\t\tsetSelectedRow(rowId); // Update selected row ID when a row is clicked\r\n\t};\r\n\r\n\t// const handleDeleteClick = (event: any, data: any) => {\r\n\t// onDelete?.(data.id);\r\n\t// };\r\n\t// const handleUpdateClick = (event: any, data: any) => {\r\n\t// onUpdate?.(data.id);\r\n\t// };\r\n\r\n\tconst handleActionsClick = (event: any, data: any) => {\r\n\t\tsetRow(data);\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst formtValues = useCallback((values: any, cells: any[]) => {\r\n\t\tconst v: any = {};\r\n\t\tif (values?.['mrt-row-actions']) {\r\n\t\t\tdelete values['mrt-row-actions']\r\n\t\t}\r\n\t\tObject.keys(values).forEach((vl) => {\r\n\t\t\tconst val = values[vl];\r\n\t\t\tconst cell = cells.find((c) => c.accessorKey == vl);\r\n\r\n\t\t\tif (val) {\r\n\t\t\t\tif (val instanceof File) {\r\n\t\t\t\t\tv[vl] = val.name;\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'date') {\r\n\t\t\t\t\tv[vl] = dayjs(val).format(cell?.dateFormat || 'DD-MM-YYYY');\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'select' && typeof val === 'object' && val !== null) {\r\n\t\t\t\t\t// For select fields, extract the display name from the object\r\n\t\t\t\t\t// Try multiple possible display properties in order of preference\r\n\t\t\t\t\tv[vl] = val.name || val.label || val.display_name || val.title || val.value || val.id || val;\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'select' && typeof val === 'string') {\r\n\t\t\t\t\t// For select fields that are already strings, keep them as is\r\n\t\t\t\t\tv[vl] = val;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tv[vl] = val;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tv[vl] = val;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn v;\r\n\t}, []); // No dependencies needed as this function doesn't rely on external values\r\n\r\n\tconst handleRowDelete = async () => {\r\n\t\tsetIsDeletingRow(true);\r\n\t\tif (rowToDelete) {\r\n\t\t\tawait onDeleteRow?.(rowToDelete);\r\n\t\t\tsetRowToDelete(null);\r\n\t\t}\r\n\t\tsetIsDeletingRow(false);\r\n\t};\r\n\r\n\tconst checkRequired = useCallback((editProperties: any) => {\r\n\t\treturn editProperties?.validations?.some((validation: any) => validation.type === 'required')\r\n\t}, [])\r\n\tuseEffect(() => {\r\n\t\tconst selectedRows = {};\r\n\t\t// Build the selectedRows object\r\n\t\tif (!isChecked && selectedRowIds.length) {\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif (selectedRowIds.includes(row.id)) {\r\n\t\t\t\t\tselectedRows[row.id] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tsetRowSelection(selectedRows);\r\n\t\t\tsetIsChecked(true)\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rows, selectedRowIds]); // Dependency only on rows and selectedRowIds\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSortingChange instanceof Function) {\r\n\t\t\tconst sortingArray = Array.isArray(sorting) ? sorting : [];\r\n\t\t\tonSortingChange(sortingArray[0] || null)\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [sorting])\r\n\r\n\r\n\tconst resetRowSelection = () => {\r\n\t\tsetRowSelection({});\r\n\t\tsetDisableNextEdit(false)\r\n\t}\r\n\tconst getTextWidth = (text: string) => {\r\n\t\tconst canvas = document.createElement(\"canvas\");\r\n\t\tconst ctx = canvas.getContext(\"2d\");\r\n\t\tif (!ctx) return 50;\r\n\t\treturn ctx.measureText(text).width + 5; // padding\r\n\t}\r\n\r\n\t// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\n\ttype RowMode = 'edit' | 'create';\r\n\r\n\tinterface SaveRowParams {\r\n\t\trow: MRT_Row<TData>;\r\n\t\tvalues: Record<string, unknown>;\r\n\t\ttable: MRT_TableInstance<TData>;\r\n\t}\r\n\r\n\t// ─── Shared validation error extractor ───────────────────────────────────────\r\n\r\n\tconst extractValidationErrors = (err: yup.ValidationError): Record<string, string> =>\r\n\t\terr.inner.reduce<Record<string, string>>((acc, { path, message }) => {\r\n\t\t\tif (path) acc[path] = message;\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\r\n\t// ─── Unified save handler ─────────────────────────────────────────────────────\r\n\r\n\tconst handleSaveRow = useCallback(\r\n\t\tasync ({ row, values, table }: SaveRowParams, mode: RowMode): Promise<void> => {\r\n\t\t\tconst isEditMode = mode === 'edit';\r\n\t\t\tconst setLoadingState = isEditMode ? setIsEditingRow : setIsCreatingRow;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(values, { abortEarly: false });\r\n\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetLoadingState(true);\r\n\t\t\t\tsetDisableNextEdit(false);\r\n\r\n\t\t\t\tconst cells = row.getAllCells().map((c) => c.column.columnDef);\r\n\t\t\t\trow._valuesCache = formtValues(values, cells);\r\n\r\n\t\t\t\tconst data = { row, values, table };\r\n\r\n\t\t\t\tif (isEditMode) {\r\n\t\t\t\t\tawait onEditRow?.(data, 'edit');\r\n\t\t\t\t\ttable.setEditingRow(null);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tawait onCreateRow?.(data);\r\n\t\t\t\t\ttable.setCreatingRow(null);\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tsetValidationErrors(extractValidationErrors(err));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tenqueueSnackbar(\r\n\t\t\t\t\t\terr instanceof Error ? err.message : 'Something went wrong',\r\n\t\t\t\t\t\t{ variant: 'error' },\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tsetLoadingState(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[validationSchema, onEditRow, onCreateRow, formtValues],\r\n\t);\r\n\r\n\tconst validate = useCallback(async (values: any) => {\r\n\t\ttry {\r\n\t\t\tawait validationSchema.validate(values, { abortEarly: false });\r\n\t\t\tsetValidationErrors({});\r\n\t\t\treturn true;\r\n\t\t} catch (err) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t}, [validationSchema]);\r\n\r\n\tconst valuesRef = useRef<Record<string, RowValues>>({});\r\n\r\n\t// ─── Public API: sync one field ────────────────────────────────────────────\r\n\tconst syncFieldValue = useCallback(\r\n\t\t(rowId: string, columnId: string, value: unknown) => {\r\n\t\t\tvaluesRef.current[rowId] = {\r\n\t\t\t\t...(valuesRef.current[rowId] ?? {}),\r\n\t\t\t\t[columnId]: value,\r\n\t\t\t};\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\tconst clearRow = useCallback((rowId: string) => {\r\n\t\tdelete valuesRef.current[rowId];\r\n\t}, []);\r\n\r\n\t// ─── Merge our cache on top of MRT's cache then the original row ───────────\r\n\tconst getRowValues = useCallback(\r\n\t\t(row: MRT_Row<TData>): RowValues => ({\r\n\t\t\t// 1. original row data — baseline\r\n\t\t\t...(row.original as RowValues),\r\n\t\t\t// 2. MRT's internal cache — contains what MRT-controlled fields wrote\r\n\t\t\t...(row._valuesCache as RowValues | undefined),\r\n\t\t\t// 3. Our own cache — authoritative for custom fields\r\n\t\t\t...(valuesRef.current[row.id] ?? {}),\r\n\t\t}),\r\n\t\t[],\r\n\t);\r\n\r\n\t// ─── Save helpers (kept stable across renders) ─────────────────────────────\r\n\tconst saveEditingRow = useCallback(\r\n\t\tasync (table: MRT_TableInstance<TData>) => {\r\n\t\t\tconst editingRow = table.getState().editingRow;\r\n\t\t\tconst creatingRow = table.getState().creatingRow;\r\n\t\t\tif (!editingRow) return;\r\n\t\t\tconst values = getRowValues(editingRow);\r\n\t\t\tconst isValid = await validate(values);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\t// Let handleSaveRow set the validation errors for display\r\n\t\t\t\tawait handleSaveRow({ row: editingRow, values, table }, 'edit');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tawait handleSaveRow({ row: editingRow, values, table }, 'edit');\r\n\t\t\tclearRow(editingRow.id);\r\n\t\t\tif (!creatingRow && enableRowCreate) {\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tsetTimeout(() => table.setCreatingRow(true), 200);\r\n\t\t\t} else {\r\n\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[getRowValues, handleSaveRow, clearRow, validate, enableRowCreate],\r\n\t);\r\n\r\n\tconst saveCreatingRow = useCallback(\r\n\t\tasync (table: MRT_TableInstance<TData>) => {\r\n\t\t\tconst creatingRow = table.getState().creatingRow;\r\n\t\t\tif (!creatingRow) return;\r\n\t\t\tconst values = getRowValues(creatingRow);\r\n\t\t\tif (values?.['mrt-row-actions']) {\r\n\t\t\t\tdelete values['mrt-row-actions']\r\n\t\t\t}\r\n\t\t\tconst isValid = await validate(values);\r\n\t\t\tawait handleSaveRow({ row: creatingRow, values, table }, 'create');\r\n\t\t\tif (!isValid) return;\r\n\t\t\tif (isValid) {\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\tsetTimeout(() => table.setCreatingRow(true), 200);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[getRowValues, clearRow, validate],\r\n\t);\r\n\r\n\tconst table = useMaterialReactTable({\r\n\t\t// options:{\r\n\t\t// \ttableLayout: \"auto\", // 👈 important\r\n\t\t// \tpadding: \"dense\",\r\n\t\t// },\r\n\t\t// columns: visibleColumns,\r\n\t\tdefaultColumn: {\r\n\t\t\tminSize: 0, // 👈 remove default min width\r\n\t\t\tsize: undefined, // 👈 optional, default size\r\n\t\t},\r\n\t\tcolumns: [\r\n\t\t\t...visibleColumns.map((c: any) => {\r\n\t\t\t\tconst headerWidth = getTextWidth(c.header || '');\r\n\t\t\t\tconst maxCellWidth = Math.max(\r\n\t\t\t\t\t...rows.map(row => getTextWidth(String(row[c.accessorKey] ?? '')))\r\n\t\t\t\t);\r\n\t\t\t\tconst finalWidth = Math.max(headerWidth, maxCellWidth);\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...c,\r\n\t\t\t\t\t...(editDisplayMode === 'row'\r\n\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\tEdit: ({ cell, row, table, column }) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<InlineEditFields\r\n\t\t\t\t\t\t\t\t\t\tcell={cell}\r\n\t\t\t\t\t\t\t\t\t\tcolumn={column}\r\n\t\t\t\t\t\t\t\t\t\tcol={c}\r\n\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\ttable={table}\r\n\t\t\t\t\t\t\t\t\t\tcallback={(s) => console.log('Save', s)}\r\n\t\t\t\t\t\t\t\t\t\terrors={validationErrors}\r\n\t\t\t\t\t\t\t\t\t\tvalidationSchema={validationSchema}\r\n\t\t\t\t\t\t\t\t\t\tsetValidationErrors={setValidationErrors}\r\n\t\t\t\t\t\t\t\t\t\tonChangeRowField={onChangeRowField}\r\n\t\t\t\t\t\t\t\t\t\tgetSelectedData={(name, row) => getSelectedData?.(name, row)}\r\n\t\t\t\t\t\t\t\t\t\tsyncFieldValue={syncFieldValue}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t: {}),\r\n\t\t\t\t\tHeader: (\r\n\t\t\t\t\t\t<Box display='flex' alignItems='center'>\r\n\t\t\t\t\t\t\t{c.header}\r\n\t\t\t\t\t\t\t{c?.required || checkRequired(c?.editProperties) && (\r\n\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t*\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: c.id !== 'actions',\r\n\t\t\t\t\t// cellStyle: { ...c.cellStyle, width: finalWidth },\r\n\t\t\t\t\t// headerStyle: { ...c.headerStyle, width: finalWidth },\r\n\t\t\t\t\t// size: finalWidth\r\n\t\t\t\t\tsize: undefined,\r\n\t\t\t\t\t// minSize: 40,\r\n\t\t\t\t\tmaxSize: 800,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\t...(!disableDefaultActionColumn\r\n\t\t\t\t? [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: 'actions',\r\n\t\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\t\tsize: defaultActionColumnItems?.length > 1 ? 80 : 50,\r\n\t\t\t\t\t\theader: (\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" sx={{ p: 0.5, '&:hover': { backgroundColor: 'transparent' } }} onClick={handleHeaderClick}>\r\n\t\t\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\t\tvisible: true,\r\n\t\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column',\r\n\t\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t\tdefaultActionColumnItems?.length ? (\r\n\t\t\t\t\t\t\t\tdefaultActionColumnItems.map((item) => {\r\n\t\t\t\t\t\t\t\t\tconst updatedProps = {\r\n\t\t\t\t\t\t\t\t\t\t...item.props,\r\n\t\t\t\t\t\t\t\t\t\tonClick: () => item.props.onClick(props)\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\treturn cloneElement(item, updatedProps);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t) : !disabledDefaultActionColumnIcon && (\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleActionsClick(e, props.row.original)} disabled={!rowActionMenu?.length && !destructiveActionMenu?.length}>\r\n\t\t\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t\t: [])\r\n\t\t],\r\n\t\tdata: rows,\r\n\t\tmuiTablePaperProps: {\r\n\t\t\tsx: {\r\n\t\t\t\ttableLayout: 'auto', // lets columns shrink to fit content\r\n\t\t\t},\r\n\t\t},\r\n\t\tcolumnResizeMode: 'onChange',\r\n\t\tonEditingRowSave: async (data) => {\r\n\t\t\tawait handleSaveRow(data, 'edit');\r\n\t\t},\r\n\t\tonCreatingRowSave: async (data) => {\r\n\t\t\tawait handleSaveRow(data, 'create');\r\n\t\t},\r\n\t\tonCreatingRowCancel: () => resetRowSelection(),\r\n\t\tonEditingRowCancel: () => {\r\n\t\t\tsetDisableNextEdit(false);\r\n\t\t},\r\n\t\tonSortingChange: states?.sorting ? onSortingChange : setSorting,\r\n\r\n\t\tdisplayColumnDefOptions: {\r\n\t\t\t'mrt-row-actions': {\r\n\t\t\t\t// size: onDeleteRow ? 80 : 50,\r\n\r\n\t\t\t\tHeader: (\r\n\t\t\t\t\t<IconButton onClick={handleHeaderClick} size='small'>\r\n\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t),\r\n\t\t\t\tmuiTableBodyCellProps: ({ row, table }) => {\r\n\t\t\t\t\tconst isCreatingRow = table.getState().creatingRow?.id === row.id;\r\n\t\t\t\t\tconst isEditingRow = table.getState().editingRow?.id === row.id;\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\t\t\t\tgap: 0\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tbackgroundColor: '#fff',\r\n\t\t\t\t\t\t\twhiteSpace: 'pre-wrap',\r\n\t\t\t\t\t\t\t// Hide save button only when editing existing row (not in create mode or non-editable mode)\r\n\t\t\t\t\t\t\t...((hideSaveButton && (isEditingRow || isCreatingRow))\r\n\t\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\t'& .MuiBox-root > .MuiIconButton-root:first-of-type': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t// Also hide any save icon buttons by aria-label or title\r\n\t\t\t\t\t\t\t\t\t'& button[aria-label*=\"Save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t'& button[title*=\"Save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t// Hide save icon by class or data attributes\r\n\t\t\t\t\t\t\t\t\t'& .MuiIconButton-root[class*=\"save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t'& .MuiIconButton-root[data-testid*=\"save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t: {})\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'mrt-row-expand': {\r\n\t\t\t\tsize: 70, // Set the size of the expand-collapse arrow column here\r\n\t\t\t},\r\n\t\t\t'mrt-row-select': {\r\n\t\t\t\tsize: 50, // Set the width of the checkbox column here\r\n\t\t\t},\r\n\t\t},\r\n\t\trenderRowActions: ({ row, table }) => (\r\n\t\t\t<>\r\n\t\t\t\t{rest?.enableExpanding ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{row?.parentId && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t\t\t{onDeleteRow && !hideDeleteButton?.(row.original) && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} size='small' className='delete-row'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t{onDeleteRow && !hideDeleteButton?.(row.original) && (\r\n\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} className='delete-row'>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t),\r\n\r\n\t\t...(Boolean(enableRowCreate) && {\r\n\t\t\trenderBottomToolbarCustomActions: ({ table }) => (\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\tclassName='add-row-btn'\r\n\t\t\t\t\tdisabled={disableNextEdit}\r\n\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\ttable.setCreatingRow(true); //simplest way to open the create row modal with no default values\r\n\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t</Button>\r\n\t\t\t)\r\n\t\t}),\r\n\t\tonRowSelectionChange: setRowSelection,\r\n\t\tenableColumnOrdering: true,\r\n\t\tenableRowSelection: enableRowSelection ?? true,\r\n\t\tenableEditing: (row) => enableEditing instanceof Function ? enableEditing(row) : enableEditing ?? true,\r\n\t\teditDisplayMode: editDisplayMode ?? 'row',\r\n\t\tcreateDisplayMode: 'row',\r\n\t\tpositionCreatingRow: 'bottom',\r\n\t\tenableColumnResizing: enableColumnResizing,\r\n\t\tenableRowDragging: enableRowDragging,\r\n\t\tenableTopToolbar: false,\r\n\t\tenableColumnActions: false,\r\n\t\tenableSorting: true,\r\n\t\tenableGrouping: true,\r\n\t\tenableBottomToolbar: enableBottomToolbar ?? false,\r\n\t\tenableColumnDragging: enableColumnDragging ?? true,\r\n\t\tenableStickyHeader: true,\r\n\t\tenableSortingRemoval: false,\r\n\t\t// column ordering\r\n\t\tstate: {\r\n\t\t\t// columnOrder: (!columnOrder || columnOrder.length <= 1) \r\n\t\t\t// ? [...internalColumnOrder] \r\n\t\t\t// : [...columnOrder],\r\n\t\t\tcolumnOrder: columnOrder,\r\n\t\t\tcolumnPinning: { left: ['actions', 'mrt-row-actions'] },\r\n\t\t\tisSaving: isCreatingRow || isEditingRow,\r\n\t\t\tshowProgressBars: false,\r\n\t\t\trowSelection,\r\n\t\t\t...states,\r\n\t\t\tsorting: Array.isArray(states?.sorting) ? states?.sorting :\r\n\t\t\t\tArray.isArray(sorting) ? sorting : [],\r\n\t\t\tcolumnSizing\r\n\r\n\t\t},\r\n\t\tgetRowId: (row) => row?.id,\r\n\t\t// table.getState().editingRow\r\n\t\tmuiTableBodyRowProps: ({ row, table }) => {\r\n\t\t\tconst editingRowId =\r\n\t\t\t\ttable.getState()?.editingRow?.id ||\r\n\t\t\t\ttable.getState()?.creatingRow?.id ||\r\n\t\t\t\tnull;\r\n\t\t\tconst creatingRowId = table.getState()?.creatingRow?.id || null;\r\n\t\t\tconst isErrorRow = Boolean(row?.original?.has_error)\r\n\t\t\tconst isCurrentlyEditing = editingRowId === row.id;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tonClick: () => {\r\n\t\t\t\t\tsetSelectedRow(row.id);\r\n\t\t\t\t\t// Edit triggering is now handled at cell level in muiTableBodyCellProps\r\n\t\t\t\t\t// to support isOnClickEditable column prop\r\n\t\t\t\t},\r\n\t\t\t\tsx: {\r\n\t\t\t\t\tcursor: 'pointer',\r\n\t\t\t\t\t// backgroundColor: !editingRowId\r\n\t\t\t\t\t// \t? (selectedRow === row.id\r\n\t\t\t\t\t// \t\t? '#e8e8e8'\r\n\t\t\t\t\t// \t\t: (isErrorRow ? 'theme.error.100' : 'inherit'))\r\n\t\t\t\t\t// \t: 'inherit',\r\n\t\t\t\t\tbackgroundColor: !editingRowId\r\n\t\t\t\t\t\t? (isErrorRow ? 'theme.error.100' : 'inherit')\r\n\t\t\t\t\t\t: 'inherit',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: editingRowId\r\n\t\t\t\t\t\t\t? (editingRowId === row.id ? 'transparent' : 'inherit')\r\n\t\t\t\t\t\t\t: (isErrorRow ? 'theme.error.200' : '#e8e8e8')\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:hover td:after': {\r\n\t\t\t\t\t\tbackgroundColor: 'transparent' // Removes the grey background applied via :after\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tonColumnOrderChange: (colOrder: any) => {\r\n\t\t\tif (handleColumnOrdering) handleColumnOrdering(colOrder);\r\n\t\t},\r\n\t\tonColumnSizingChange: setColumnSizing,\r\n\t\tonColumnSizingInfoChange: setColumnSizingInfo,\r\n\r\n\t\trenderEmptyRowsFallback: () => (\r\n\t\t\t<Box className='no-data'>\r\n\t\t\t\t<img src={images.common.tableNoData} />\r\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t{/* sx={{ textAlign: 'center', pb: 4.75, pt: 4.75 }}> */}\r\n\t\t\t\t\t{t('common.noData')}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t),\r\n\r\n\t\t// pagination\r\n\t\tenablePagination: enablePagination,\r\n\t\tpaginationDisplayMode: 'pages',\r\n\t\tmuiPaginationProps: {\r\n\t\t\tshape: 'rounded',\r\n\t\t\tpage: pageNo, // current page number\r\n\t\t\tcount: totalPages, // total pages\r\n\t\t\tshowRowsPerPage: false, // Hide rows per page options\r\n\t\t\tboundaryCount: 3\r\n\t\t},\r\n\r\n\t\tmuiEditTextFieldProps: ({ row, column }) => ({\r\n\t\t\tInputProps: {\r\n\t\t\t\tdisableUnderline: true\r\n\t\t\t},\r\n\t\t\tonBlur: (e) => {\r\n\t\t\t\tupdateData(e.target.value, column, row.id);\r\n\t\t\t},\r\n\t\t\t// onChange: (e) => {\r\n\t\t\t// \tupdateData(e.target.value, column, row.id);\r\n\t\t\t// },\r\n\t\t\tvariant: 'outlined',\r\n\t\t\tsx: ({ palette }) => ({\r\n\t\t\t\t'& .MuiOutlinedInput-root': {\r\n\t\t\t\t\t'& fieldset': {\r\n\t\t\t\t\t\tborderColor: `${palette.theme?.primary[700]} !important`\r\n\t\t\t\t\t\t// backgroundColor: palette.theme?.primary[700]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}),\r\n\r\n\t\t/* Table loader style */\r\n\t\tmuiCircularProgressProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: '#289B64'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table header cell default styles\r\n\t\tmuiTableHeadCellProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.28px',\r\n\t\t\t\tfontWeight: '500',\r\n\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t'& .Mui-TableHeadCell-Content': {\r\n\t\t\t\t\theight: '100%'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-Content-Labels': {\r\n\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t},\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-ResizeHandle-Wrapper': {\r\n\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\tright: '-5px',\r\n\t\t\t\t\topacity: 0\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table body cell default styles\r\n\t\tmuiTableBodyProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tzIndex: 500\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableHeadProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tzIndex: 600\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableBodyCellProps: ({ cell, column, table, row }) => ({\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.26px',\r\n\t\t\t\tfontWeight: '400',\r\n\t\t\t\tfontSize: '0.8125rem',\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'&:hover': {\r\n\t\t\t\t\tbackgroundColor: 'transparent' // Removes hover effect globally\r\n\t\t\t\t},\r\n\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t},\r\n\t\t\tonClick: (e: React.MouseEvent) => {\r\n\t\t\t\tconst target = e.target as HTMLElement;\r\n\r\n\t\t\t\t// Check if click is inside table\r\n\t\t\t\t// const isInsideTable = target.closest('.MuiTableContainer-root, .MuiPaper-root, .MRT_Table');\r\n\t\t\t\tconst tableCell = target.closest('.MuiTableCell-body');\r\n\r\n\t\t\t\tconst isInsideTable = tableCell && !tableCell.querySelector('.delete-row');\r\n\r\n\t\t\t\tif (!isInsideTable) return; // Ignore clicks outside table or on delete button\r\n\r\n\t\t\t\tconst columnDef = column.columnDef as MaterialEditableTableColumnProps;\r\n\t\t\t\tconst isOnClickEditable = columnDef.isOnClickEditable !== false; // Default to true\r\n\r\n\t\t\t\tif (!isOnClickEditable) {\r\n\t\t\t\t\treturn; // Don't trigger edit mode for this column\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst editingRowId = table.getState()?.editingRow?.id || table.getState()?.creatingRow?.id || null;\r\n\t\t\t\tconst isCurrentlyEditing = editingRowId === row.id;\r\n\r\n\t\t\t\t// If another row is already in edit/create mode, block editing this row\r\n\t\t\t\tif (editingRowId && editingRowId !== row.id) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set the row as editable when clicked if not already editing and no other row is being edited\r\n\t\t\t\tif (!disableNextEdit && !isCurrentlyEditing && !editingRowId) {\r\n\t\t\t\t\ttable.setEditingRow(row);\r\n\t\t\t\t\tsetDisableNextEdit(true);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonKeyUp: (e: React.KeyboardEvent) => {\r\n\t\t\t\tconst creatingRowId =\r\n\t\t\t\t\ttable.getState().creatingRow?.id ?? null;\r\n\r\n\t\t\t\t// ── Escape ──────────────────────────────────────────────────────────\r\n\t\t\t\tif (e.key === 'Escape') {\r\n\t\t\t\t\tif (creatingRowId === row.id) {\r\n\t\t\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\t\t\ttable.setCreatingRow(null);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst editingRow = table.getState().editingRow;\r\n\t\t\t\t\t\tif (editingRow) {\r\n\t\t\t\t\t\t\thandleSaveRow({ row: editingRow, values: editingRow.original, table }, 'edit');\r\n\t\t\t\t\t\t\tclearRow(editingRow.id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\tsetValidationErrors({});\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// ── Enter ───────────────────────────────────────────────────────────\r\n\t\t\t\tif (e.key === 'Enter') {\r\n\t\t\t\t\t// Minimal timeout: let the last field onChange flush its state.\r\n\t\t\t\t\t// Our valuesRef is already written, so 0ms is safe.\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tconst currentCreatingRow = table.getState().creatingRow;\r\n\t\t\t\t\t\tconst currentEditingRow = table.getState().editingRow;\r\n\r\n\t\t\t\t\t\tif (currentCreatingRow) {\r\n\t\t\t\t\t\t\tsaveCreatingRow(table);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (currentEditingRow) {\r\n\t\t\t\t\t\t\tsaveEditingRow(table);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 0); // 0 ms is enough — values are already in valuesRef\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}),\r\n\r\n\t\t// Checkbox styling\r\n\t\tmuiSelectCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.200'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiSelectAllCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.600'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiBottomToolbarProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\tpaddingLeft: 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlayoutMode: 'grid',\r\n\t\ticons: {\r\n\t\t\tDragHandleIcon: () => <RecgtangleIcon fontSize='medium' />,\r\n\t\t\tSortIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tArrowDownwardIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tArrowUpwardIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tExpandMoreIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tExpandLessIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tSyncAltIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tCancelIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Close fontSize='small' {...props} color='theme.secondary.1000' />\r\n\t\t\t)\r\n\t\t},\r\n\r\n\t\t...rest\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tif (enableRowSelection) {\r\n\t\t\tif (table?.getSelectedRowModel()?.rows) {\r\n\t\t\t\tSetSelectedRowId?.(table?.getSelectedRowModel()?.rows);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableRowSelection]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectRow) {\r\n\t\t\tif (rest?.enableExpanding) {\r\n\t\t\t\tconst selectedRowModels: any[] = [];\r\n\t\t\t\tconst selection = table.getState().rowSelection; // e.g., { 0.0: true }\r\n\t\t\t\tconst traverseRows = (rows, parentKey = '') => {\r\n\t\t\t\t\trows.forEach((row: any, index: number) => {\r\n\t\t\t\t\t\tconst rowKey = parentKey ? `${parentKey}.${index}` : `${row.id}`;\r\n\t\t\t\t\t\tif (selection[rowKey]) {\r\n\t\t\t\t\t\t\tselectedRowModels.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Check for sub-rows and traverse further\r\n\t\t\t\t\t\tif (row.subRows?.length) {\r\n\t\t\t\t\t\t\ttraverseRows(row.subRows, rowKey);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\ttraverseRows(table.getRowModel().rows);\r\n\t\t\t\tonSelectRow(selectedRowModels, rowSelection);\r\n\t\t\t} else {\r\n\t\t\t\tonSelectRow(table.getSelectedRowModel().rows, rowSelection);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rowSelection, table]);\r\n\r\n\t// useEffect(() => {\r\n\t// \tconst relativeContainer = document.getElementsByClassName(\r\n\t// \t\t'MuiTableContainer-root'\r\n\t// \t)[0];\r\n\t// \tconst fixedElement = document.getElementsByClassName('no-data')[0];\r\n\t// \trelativeContainer.addEventListener('scroll', () => {\r\n\t// \t\tconst scrollLeft = relativeContainer.scrollLeft;\r\n\t// \t\tfixedElement.style.left = `${scrollLeft + 100}px`;\r\n\t// \t});\r\n\t// }, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isResetRow) {\r\n\t\t\ttable?.resetRowSelection();\r\n\t\t}\r\n\t}, [isResetRow, table]);\r\n\r\n\t// Auto-open first row in edit mode when enableFirstRowEdit is true\r\n\tconst hasAutoEditedFirstRow = useRef(false);\r\n\tuseEffect(() => {\r\n\t\tif (\r\n\t\t\tenableFirstRowEdit &&\r\n\t\t\t!hasAutoEditedFirstRow.current &&\r\n\t\t\trows?.length > 0\r\n\t\t) {\r\n\t\t\t// Get a fresh row reference from the current table model\r\n\t\t\tconst tableRows = table.getRowModel().rows;\r\n\t\t\tconst firstRow = tableRows[0];\r\n\t\t\tif (firstRow) {\r\n\t\t\t\thasAutoEditedFirstRow.current = true;\r\n\t\t\t\t// Pre-initialize _valuesCache from original data so InlineEditFields\r\n\t\t\t\t// has a populated cache from the start\r\n\t\t\t\tif (!firstRow._valuesCache || Object.keys(firstRow._valuesCache).length === 0) {\r\n\t\t\t\t\tfirstRow._valuesCache = { ...firstRow.original };\r\n\t\t\t\t}\r\n\t\t\t\ttable.setEditingRow(firstRow);\r\n\t\t\t\tsetDisableNextEdit(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableFirstRowEdit, rows, table]);\r\n\r\n\t// Handle clicks outside the table to save and exit edit mode - ADVANCED EVENT DELEGATION\r\n\tuseEffect(() => {\r\n\t\tif (!table) return;\r\n\r\n\t\tlet dropdownOpenTimer: NodeJS.Timeout;\r\n\t\tlet saveTimer: NodeJS.Timeout;\r\n\t\tlet lastDropdownClick = 0;\r\n\t\tlet isDropdownInteraction = false;\r\n\r\n\t\t// Track dropdown interactions with precise timing\r\n\t\tconst handleMouseDown = (e: MouseEvent) => {\r\n\t\t\tconst target = e.target as HTMLElement;\r\n\t\t\tconst isDropdownElement = target.closest(\r\n\t\t\t\t'.MuiSelect-root, .MuiMenuItem-root, .MuiPopover-root, .MuiList-root, ' +\r\n\t\t\t\t'.MuiMenu-list, .MuiButtonBase-root, ' +\r\n\t\t\t\t'.MuiFormControl-root, .MuiInputBase-root, .MuiTextField-root, ' +\r\n\t\t\t\t'.MuiOutlinedInput-root, .MuiFilledInput-root, .MuiAutocomplete-popper, ' +\r\n\t\t\t\t'.MuiPickersPopper-root, [role=\"option\"], [role=\"listbox\"], [role=\"combobox\"]'\r\n\t\t\t);\r\n\r\n\t\t\tif (isDropdownElement) {\r\n\t\t\t\tisDropdownInteraction = true;\r\n\t\t\t\tlastDropdownClick = Date.now();\r\n\t\t\t\t// Clear any pending save when dropdown interaction starts\r\n\t\t\t\tif (saveTimer) {\r\n\t\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t\t}\r\n\t\t\t\t// Set a timer to reset dropdown interaction flag\r\n\t\t\t\tif (dropdownOpenTimer) {\r\n\t\t\t\t\tclearTimeout(dropdownOpenTimer);\r\n\t\t\t\t}\r\n\t\t\t\tdropdownOpenTimer = setTimeout(() => {\r\n\t\t\t\t\tisDropdownInteraction = false;\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle clicks with sophisticated logic\r\n\t\tconst handleClick = (e: MouseEvent) => {\r\n\t\t\tconst editingRow = table.getState()?.editingRow;\r\n\t\t\tconst creatingRow = table.getState()?.creatingRow;\r\n\t\t\tif (!editingRow && !creatingRow) return;\r\n\r\n\t\t\tconst target = e.target as HTMLElement;\r\n\t\t\tconst now = Date.now();\r\n\r\n\t\t\t// Don't process if we recently had a dropdown interaction\r\n\t\t\tif (isDropdownInteraction || (now - lastDropdownClick) < 300) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if click is inside table\r\n\t\t\t// const isInsideTable = target.closest('.MuiTableContainer-root, .MuiPaper-root, .MRT_Table');\r\n\t\t\tconst isInsideTable = target.closest('.MRT-TableWrapper');\r\n\r\n\t\t\t// Only save if clicking outside table and no recent dropdown interaction\r\n\t\t\tif (!isInsideTable) {\r\n\t\t\t\t// Clear any existing save timer\r\n\t\t\t\tif (saveTimer) {\r\n\t\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Schedule save with additional delay for safety\r\n\t\t\t\tsaveTimer = setTimeout(async () => {\r\n\t\t\t\t\tconst currentEditingRow = table.getState()?.editingRow;\r\n\t\t\t\t\tconst currentCreatingRow = table.getState()?.creatingRow;\r\n\t\t\t\t\tif (isDropdownInteraction) return;\r\n\t\t\t\t\tif (currentCreatingRow) {\r\n\t\t\t\t\t\tconst values = getRowValues(currentCreatingRow);\r\n\t\t\t\t\t\tawait handleSaveRow({ row: currentCreatingRow, values, table }, 'create');\r\n\t\t\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (currentEditingRow) {\r\n\t\t\t\t\t\tconst values = getRowValues(currentEditingRow);\r\n\t\t\t\t\t\tawait handleSaveRow({ row: currentEditingRow, values, table }, 'edit');\r\n\t\t\t\t\t\tclearRow(currentEditingRow.id);\r\n\t\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 200);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Use both mousedown and click for comprehensive tracking\r\n\t\tdocument.addEventListener('mousedown', handleMouseDown, true);\r\n\t\tdocument.addEventListener('click', handleClick, true);\r\n\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('mousedown', handleMouseDown, true);\r\n\t\t\tdocument.removeEventListener('click', handleClick, true);\r\n\t\t\tif (dropdownOpenTimer) {\r\n\t\t\t\tclearTimeout(dropdownOpenTimer);\r\n\t\t\t}\r\n\t\t\tif (saveTimer) {\r\n\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t}\r\n\t\t};\r\n\t}, [table, handleSaveRow, getRowValues, clearRow]);\r\n\treturn (\r\n\t\t<TableWrapper className='MRT-TableWrapper custom-table'>\r\n\t\t\t<MaterialReactTable table={table} />\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleHeaderClose}\r\n\t\t\t\tclassName='add-role-drp'>\r\n\t\t\t\t{popUpShow ? (\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={handleBackButtonClick}\r\n\t\t\t\t\t\t\tclassName='role-drp-list add-column-title'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<div className='searchbar-box-list'>\r\n\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\tplaceholder={'Search User'}\r\n\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearchEvent(e)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className='all-attribute-title'>\r\n\t\t\t\t\t\t\t<Typography variant='body2' color='text.secondary'>\r\n\t\t\t\t\t\t\t\t{t('common.allAttributes_label')}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{filteredOptions.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleAddColumn(column)}>\r\n\t\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s3'>\r\n\t\t\t\t\t\t\t\t\t{column.header}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tenableAddCustomField && <MenuItem onClick={handleCustomAddColumn} className='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t\t{t('common.addCustomField_label')}\r\n\t\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{visibleColumns.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleVisibleColumn(column)}\r\n\t\t\t\t\t\t\t\tclassName='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.dotsIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>{column.header}</ListItemText>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='eye-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<MenuItem onClick={handleAddButtonClick} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tvariant='body2'\r\n\t\t\t\t\t\t\t\tcolor='text.secondary'\r\n\t\t\t\t\t\t\t\tclassName='eye-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon sx={{ fontSize: '1.25rem !important' }} />\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(option.label === 'Move' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true || row?.is_directory === 1)) ||\r\n\t\t\t\t\t\t(option.label === 'Download' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.is_directory === 1 ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === 1))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// return null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={async () => {\r\n\t\t\t\t\t\t\t\tawait option.handleAction(row);\r\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 0.5 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function' ? option.label(row) : option.label}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t{destructiveActionMenu?.length > 0 &&\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<div className='dropdown-inner--DestructiveHeader'>\r\n\t\t\t\t\t\t\t{destructiveActionMenu?.map((option: any) => (\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\toption.handleAction(row);\r\n\t\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t\t\t{typeof option.label === 'function' ? option.label(row) : option.label}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t</Menu>\r\n\t\t\t<ConfirmPopUp\r\n\t\t\t\topen={Boolean(rowToDelete)}\r\n\t\t\t\tonClose={() => setRowToDelete(null)}\r\n\t\t\t\tonConfirm={() => handleRowDelete()}\r\n\t\t\t\ttitle='Delete Item'\r\n\t\t\t\tdescription={`Are you sure you want to delete entry ?`}\r\n\t\t\t\tloading={isDeletingRow}\r\n\t\t\t/>\r\n\t\t</TableWrapper>\r\n\t);\r\n});\r\n\r\nexport { MaterialEditableTable };\r\nexport default MaterialEditableTable;","import React, { useRef, useEffect, useMemo, useState } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface BarChartProps {\n data: DataPoint[];\n numOfLines?: number;\n initialWidth?: number;\n height?: any;\n line?: boolean;\n chartBarWidth?: number;\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\n customLabelFormatter?: (value: number) => string;\n currency: string\n}\n\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\n if (labelType === 'inPercent') {\n return `${d3.format(\".0%\")(num / 100)}`;\n } else if (labelType === 'inValue') {\n return `${symbol || ''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n }\n return num.toString();\n};\n\nfunction wrapText(textSelection: any, width: number) {\n textSelection.each(function (this: any) {\n const text = d3.select(this);\n const originalText = text.text();\n \n if (originalText.length <= 8) {\n return;\n }\n \n if (originalText.length > 12) {\n text.text(originalText.substring(0, 10) + '...');\n return;\n }\n \n const words = originalText.split(/\\s+/).reverse();\n let word;\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr(\"y\");\n const dy = parseFloat(text.attr(\"dy\")) || 0;\n \n let tspan = text\n .text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", y)\n .attr(\"dy\", `${dy}em`);\n \n while ((word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (tspan.node() && tspan.node()!.getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", y)\n .attr(\"dy\", `${++lineNumber * lineHeight + dy}em`)\n .text(word);\n }\n }\n });\n }\n \nconst BarChart: React.FC<BarChartProps> = ({\n data,\n numOfLines = 5,\n initialWidth = 500,\n height = 400,\n line = false,\n yAxisLabelType = 'inValue',\n currency,\n customLabelFormatter,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState(initialWidth);\n\n const maxValue = useMemo(() => Math.max(...data.map((d) => d.value)), [data]);\n\n const yAxisMaxValue = useMemo(() => maxValue * 1.25, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n\n const needsHorizontalScroll = data.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n // ResizeObserver to make the chart responsive\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n \n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n useEffect(() => {\n if (containerWidth === 0) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n // Calculate dynamic left margin based on label length (accounting for wrapping)\n // const sampleLabel = customLabelFormatter \n // ? customLabelFormatter(yAxisMaxValue)\n // : formatNumber(yAxisMaxValue, currency, yAxisLabelType);\n const maxLabelWidth = 80; // Maximum width for wrapped labels\n const dynamicLeftMargin = Math.max(60, maxLabelWidth + 30);\n \n const margin = { top: 20, right: 20, bottom: 25, left: dynamicLeftMargin };\n const barWidth = calculatedChartWidth - margin.left - margin.right;\n const barHeight = maxValue ? height - margin.top - margin.bottom : 0;\n\n const x = d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, barWidth])\n .padding(0.5);\n\n const y = d3.scaleLinear().domain([0, yAxisMaxValue]).range([barHeight, 0]);\n\n \n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${maxValue?margin.top:height-50})`);\n \n if (line) {\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", barWidth)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"#D3D3D4\")\n .style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", 1);\n });\n }\n\n chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"rect\")\n .attr(\"rx\", 5)\n .attr(\"ry\", 5)\n .attr(\"class\", \"bar\")\n .attr(\"x\", (d: any) => x(d.label))\n .attr(\"y\", (d: any) => y(d.value))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d: any) => barHeight - y(d.value))\n .style(\"fill\", (d: any) => d.color);\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisTop(x).tickPadding(10) as any)\n .call(d3.axisBottom(x).tickPadding(5) as any)\n // .call(d3.axisLeft(x).tickPadding(5) as any)\n\n xAxis.selectAll(\".tick line\").remove();\n xAxis.selectAll(\".tick text\").call(wrapText,80); \n\n // Calculate optimal number of ticks to prevent overlap\n const availableHeight = barHeight;\n const minTickSpacing = 30; // Minimum pixels between ticks\n const maxOptimalTicks = Math.floor(availableHeight / minTickSpacing);\n const optimalNumTicks = Math.min(numOfLines, maxOptimalTicks, 8);\n \n // Generate optimal tick values\n const optimalTicks = [];\n const optimalInterval = yAxisMaxValue / optimalNumTicks;\n for (let i = 0; i <= optimalNumTicks; i++) {\n optimalTicks.push(optimalInterval * i);\n }\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3.axisLeft(y)\n .tickValues(optimalTicks)\n .tickFormat((d: any) =>\n customLabelFormatter\n ? customLabelFormatter(d)\n : formatNumber(d, currency, yAxisLabelType)\n )\n .tickSizeOuter(0)\n .tickPadding(8) as any, // Add padding between ticks and labels\n );\n\n yAxis.selectAll(\".tick line\").remove();\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n // Style y-axis labels for better readability and apply text wrapping\n yAxis.selectAll(\".tick text\")\n .style(\"font-size\", \"11px\")\n .style(\"fill\", \"#666\")\n .style(\"font-family\", \"Inter, system-ui, Avenir, Helvetica, Arial, sans-serif\")\n .style(\"text-anchor\", \"end\")\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, containerWidth, height, line, yAxisMaxValue, yAxisTicks, currency, yAxisLabelType, customLabelFormatter, calculatedChartWidth]);\n\n return (\n <div ref={wrapperRef} \n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}>\n <svg ref={svgRef} width={calculatedChartWidth} height={height} viewBox={`0 0 ${calculatedChartWidth} ${height}`} />\n </div>\n );\n};\n\nexport { BarChart };\nexport default BarChart;\n","import React, { useRef, useEffect } from \"react\";\r\nimport * as d3 from \"d3\";\r\nimport \"./donut-chart.scss\";\r\nimport Typography from \"../../typography/typography\";\r\n\r\ninterface DataPoint {\r\n label: string;\r\n value: number;\r\n}\r\n\r\ninterface DonutChartProps {\r\n data: DataPoint[];\r\n width?: number;\r\n height?: number;\r\n legend?: boolean;\r\n direction?: \"vertical\" | \"horizontal\";\r\n total?: string;\r\n colors ?:Array<string>;\r\n titleProps?:any\r\n valueProps?:any \r\n isUserDashbord ?: boolean \r\n totalUsers ? : any \r\n}\r\n\r\nconst defaultColors = [\r\n \"#5BCE97\",\r\n \"#B3D8E2\",\r\n \"#F5F6F5\",\r\n \"#AE6B9E\",\r\n \"#CBD49A\",\r\n \"#EEE0B3\",\r\n];\r\n\r\nconst getSingleNumberFromString = (str) => {\r\n if (typeof str === \"number\") {\r\n return str;\r\n }\r\n const match = str?.match(/\\d.+/) || null;\r\n return match ? Number(match[0]) : 0;\r\n};\r\n\r\nexport const DonutChart: React.FC<DonutChartProps> = ({\r\n\tdata,\r\n\theight = 140,\r\n\twidth = 140,\r\n isUserDashbord , \r\n\tlegend = true,\r\n\tdirection = 'horizontal' ,\r\n totalUsers , \r\n\ttotal = isUserDashbord ? totalUsers : \"2.4 GB\",\r\n colors = defaultColors,\r\n titleProps={},\r\n valueProps={}, \r\n\r\n}) => {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n\r\n useEffect(() => {\r\n if (!svgRef.current) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n\r\n svg.selectAll(\"*\").remove();\r\n\r\n const margin = 6;\r\n\r\n const outerRadius = Math.min(width, height) / 2 - margin;\r\n const innerRadius = Math.min(width, height) / 2 - margin * 2;\r\n\r\n const g = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\r\n //@ts-expect-error not applicable\r\n const pie = d3\r\n .pie()\r\n .value((d: DataPoint) => getSingleNumberFromString(d.value));\r\n\r\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius);\r\n\r\n const pies = g\r\n .selectAll(\".arc\")\r\n //@ts-expect-error not applicable\r\n .data(pie(data))\r\n .enter()\r\n .append(\"g\")\r\n .attr(\"class\", \"arc\");\r\n\r\n pies\r\n .append(\"path\")\r\n //@ts-expect-error not applicable\r\n .attr(\"d\", path)\r\n //@ts-expect-error not applicable\r\n .attr(\"fill\", (d: DataPoint, i: number) => {\r\n return colors[i % colors.length]});\r\n\r\n\r\n // const words = total.split(' '); // Split the text into words\r\n // const lineHeight = 22; // Define the line height\r\n // const maxCharsPerLine = 15; // Define the maximum number of characters per line\r\n\r\n // let currentLine = '';\r\n // let lineNumber = 0;\r\n\r\n // const textElement =\r\n g.append(\"text\")\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"18px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"alignment-baseline\", `central`)\r\n .html(total);\r\n // .text(total);\r\n\r\n // words.forEach((word) => {\r\n // \tconst tempLine = currentLine + word + ' ';\r\n\r\n // \t// Check if the line exceeds the max character count\r\n // \tif (tempLine.length > maxCharsPerLine && currentLine.length > 0) {\r\n // \t\ttextElement\r\n // \t\t\t.append('tspan')\r\n // \t\t\t.attr('x', 0)\r\n // \t\t\t.attr('y', lineHeight * lineNumber)\r\n // \t\t\t.text(currentLine.trim());\r\n\r\n // \t\tcurrentLine = word + ' ';\r\n // \t\tlineNumber++;\r\n // \t} else {\r\n // \t\tcurrentLine = tempLine;\r\n // \t}\r\n // });\r\n\r\n // // Add the last line\r\n // textElement\r\n // \t.append('tspan')\r\n // \t.attr('x', 0)\r\n // \t.attr('y', lineHeight * lineNumber)\r\n // \t.text(currentLine.trim());\r\n }, [colors, data, height, total, width]);\r\n\r\n if (!legend) {\r\n return <svg ref={svgRef} width={width} height={height}></svg>;\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`donut-chart-container ${direction}`}>\r\n <div>\r\n <svg ref={svgRef} width={width} height={height}></svg>\r\n </div>\r\n <div className=\"donut-chart-legend\">\r\n {data && data.map((d: DataPoint, i: number) => {\r\n return (\r\n <div\r\n className=\"legend\"\r\n key={d.label}\r\n style={{ borderLeft: `0.188rem solid ${colors[i]}` }}\r\n >\r\n <div className=\"legend-title\">\r\n <Typography type=\"s5\" color=\"theme.secondary.800\" {...titleProps}>\r\n {d.label}\r\n </Typography>\r\n </div>\r\n <div className=\"legend-value\">\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\" weight=\"bold\" {...valueProps}>\r\n {d.value}\r\n </Typography>\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default DonutChart;\r\n","import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\nimport { useAuth } from \"../../../hooks/useAuth\";\n\ninterface DataPoint {\n label: string;\n value: number;\n\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n donutThickerValue?: number\n CustomLegends?: React.FC<{ data: DataPoint[] }>;\n title: string\n}\n\nconst formatNumber = (num: number, defaultCurrencySymbol: string = ''): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n data,\n height = 140,\n width = 140,\n legend = true,\n direction = \"vertical\",\n total = \"300\",\n donutThickerValue,\n CustomLegends,\n title = ''\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n let innerRadius = Math.min(width, height) / 2 - margin * 2;\n if (donutThickerValue) {\n innerRadius = outerRadius - donutThickerValue;\n }\n\n\n\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value)).padAngle(0);\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius)\n\n const pies = g\n .selectAll(\".arc\")\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n\n pies\n .append(\"path\")\n .attr(\"d\", path)\n .attr(\"fill\", (d: DataPoint) => d?.data?.color).attr(\"stroke\", \"none\");\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr('maring-top', \"20px\")\n .attr(\"font-size\", \"13px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"dy\", \"2em\")\n .attr(\"color\", \"#7B7C7F\")\n .html(title);\n\n }, [data, height, total, width, defaultCurrencySymbol, donutThickerValue, CustomLegends, title]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n\n\n {CustomLegends ? (\n <CustomLegends data={data} /> // Render the custom component\n ) : (\n <div className='donut-legend'>\n <div className={`donut-chart-legend ${direction}`}>\n {data.map((d: DataPoint) => (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${d.color}` }}\n >\n <div className=\"legend-title\" style={{ color: `${d.labelColor}` }}>{d.label}</div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={d.valueColor}\n style={{\n whiteSpace: 'nowrap'\n }}\n >\n {formatNumber(d.value, defaultCurrencySymbol)}\n </Typography>\n </div>\n </div>\n ))\n }\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { DonutChart };\nexport default DonutChart;\n","import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\n// import CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\n// import Button from '@mui/material/Button';\nimport Typography from '../../typography/typography';\n\nexport interface IGridCard {\n\tname: string;\n\tcompany: string;\n\tstatus: string;\n\temail: string;\n\tamount: string;\n}\n\nexport const GridCardMarkup = (props: any) => {\n\treturn (\n\t\t<Card\n\t\t\tsx={{\n\t\t\t\twidth: '16.625rem',\n\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\tborder: '0.5px solid theme.secondary.200, #F5F6F5',\n\t\t\t\tbackgroundColor: 'theme.secondary.100',\n\t\t\t\tboxShadow: `\n 0px 0px 2px 0px #E0E0E0, \n 0px 1px 4px - 2px rgba(24, 39, 75, 0.02), \n 0px 4px 4px - 2px rgba(24, 39, 75, 0.06)`,\n\t\t\t\tm: 3\n\t\t\t}}>\n\t\t\t<CardContent\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tpadding: '1rem 1rem 1.25rem 1rem',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\tflexShrink: 0\n\t\t\t\t}}>\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\tmarginBottom: 1\n\t\t\t\t\t}}>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography type='s3' weight='medium'>\n\t\t\t\t\t\t\t{props.data.name || 'Kristin Watson'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.800'>\n\t\t\t\t\t\t\t{props.data.company || 'Barone LLC.'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tpadding: '0.25rem 0.375rem',\n\t\t\t\t\t\t\t\tgap: '0.5rem',\n\t\t\t\t\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\t\t\t\t\tbackgroundColor: 'theme.secondary.200'\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tcolor='theme.secondary.900'>\n\t\t\t\t\t\t\t{props.data.status || 'Lost'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tsx={{\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tcolor: 'theme.secondary.900',\n\t\t\t\t\t\ttextDecorationLine: 'underline'\n\t\t\t\t\t}}>\n\t\t\t\t\t{props.data.email || 'kristen.watson@example.com'}\n\t\t\t\t</Typography>\n\t\t\t\t<Box sx={{ mt: '1.25rem', display: 'flex', alignItems: 'center' }}>\n\t\t\t\t\t<Typography\n\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\tsx={{ mr: '.2rem' }}\n\t\t\t\t\t\tcolor='theme.secondary.900'>\n\t\t\t\t\t\t{props.data.amount || '$10,000,000'}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\test value\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</CardContent>\n\t\t\t{/* <CardActions>\n <Button size=\"small\">Learn More</Button>\n </CardActions> */}\n\t\t</Card>\n\t);\n};\n\nexport const GridCard = (props: any) => {\n\treturn (\n\t\t<>\n\t\t\t{props.data.map((cardData: IGridCard) => {\n\t\t\t\treturn <GridCardMarkup data={cardData} />;\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nexport default GridCard;\n","import { Box } from \"@mui/material\";\nimport \"./grid-wrapper.scss\";\nimport Typography from \"../../typography/typography\";\nimport images from \"../../../assets/images\"\nimport ErpLoader from \"../../loaders/erp-loader\";\n\ninterface GridWrapperProps {\n children: React.ReactNode;\n data?: any[]\n isLoading?: boolean\n}\n\nconst GridWrapper = (props: GridWrapperProps) => {\n const { children, data, isLoading } = props;\n return (\n <>\n {isLoading \n ? \n <ErpLoader/> \n :\n <>\n {data?.length \n ? \n <div className=\"grid-wrapper\">{children}</div>\n : \n <Box position=\"fixed\" left='50%' top=\"50%\" transform=\"translate(-50%, -50%)\">\n <img src={images.common.tableNoData} />\n <Typography color='theme.secondary.1000' weight=\"medium\" align=\"center\">No data</Typography>\n </Box>\n }\n </>\n }\n </>\n );\n};\n\nexport { GridWrapper };\nexport default GridWrapper;\n","import { GridWrapper } from '../../grid/grid-wrapper';\r\nimport { CardWrapper } from '../../card-wrapper';\r\nimport { Typography } from '../../typography';\r\nimport './grid-view.scss';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { createdOnAndBy } from '../../../utils/common';\r\n\r\ninterface IGridCard {\r\n\tdata: any[];\r\n\tconfig?: any;\r\n}\r\n\r\nconst GridCard: React.FC<IGridCard> = ({ data, config }) => {\r\n\tconst navigate = useNavigate();\r\n\tconst currentModule = location.pathname.split('/')[2];\r\n\t\r\n\tconst moduleConfig = config?.[currentModule] || { filterName: '', redirectionPath: '' };\r\n\tconst path = `/dashboard/${currentModule}${moduleConfig.redirectionPath}`;\r\n\r\n\tconst handleRedirection = (form: any) => {\r\n\t\tnavigate(path, {\r\n\t\t\tstate: { form }\r\n\t\t});\r\n\t};\r\n\r\n\tconst formatText = (text: string) => {\r\n\t\treturn text?.split('_')?.map(i => i?.charAt(0).toUpperCase() + i?.slice(1).toLowerCase())?.join(' ');\r\n\t};\r\n\r\n\treturn (\r\n\t\t<GridWrapper data={data}>\r\n\t\t\t{data.map((form, index) => (\r\n\t\t\t\t<CardWrapper key={form?._id || index}>\r\n\t\t\t\t\t<div className='gridView--CardHeader'>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName='gridView--redirection'\r\n\t\t\t\t\t\t\tonClick={() => handleRedirection(form)}>\r\n\t\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.900'>\r\n\t\t\t\t\t\t\t\t{formatText(form?.name)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName='gridView--redirection'\r\n\t\t\t\t\t\tonClick={() => handleRedirection(form)}>\r\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.900'>\r\n\t\t\t\t\t\t\t{form?.fields?.filter(\r\n\t\t\t\t\t\t\t\t(field: { is_system_field: boolean }) => !field.is_system_field,\r\n\t\t\t\t\t\t\t).length || 0}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{form?.description && (\r\n\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\r\n\t\t\t\t\t\t\t\t{formatText(form?.description)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<div className='gridView--CardBottom'>\r\n\t\t\t\t\t\t\t<Typography type='s5' color='theme.secondary.600'>\r\n\t\t\t\t\t\t\t\t{createdOnAndBy(form)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</CardWrapper>\r\n\t\t\t))}\r\n\t\t</GridWrapper>\r\n\t);\r\n};\r\n\r\nexport default GridCard;\r\n","import { ActionBar } from '../action-bar';\r\nimport { MaterialTable } from '../material-table';\r\nimport { Typography } from '../typography';\r\nimport { viewTypes } from '../../constants';\r\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\r\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport \"./custom-forms.scss\";\r\nimport { useAuth } from '../../hooks/useAuth';\r\nimport { Footer } from '../footer/footer';\r\nimport { IPaginationModel } from '../../types';\r\nimport { Box } from \"@mui/material\";\r\nimport GridCard from \"./grid-view/grid-view.js\";\r\nimport { useAppTranslations } from \"../../hooks/use-translations\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport useApi from '../../hooks/useApi';\r\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\r\nimport { getToken } from '../../utils/common';\r\n\r\ninterface ActionData {\r\n label: string;\r\n position: number;\r\n}\r\n\r\ninterface ModuleConfig {\r\n filterName: string;\r\n redirectionPath: string;\r\n}\r\n\r\n\r\n\r\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\r\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\r\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\r\n\r\ninterface FormBuilderState {\r\n rows: any[];\r\n isLoading: boolean;\r\n paginationModel: {\r\n pageNo: number;\r\n limit: number;\r\n totalCount: number;\r\n };\r\n}\r\n\r\nconst Forms = ({ config }: { config?: any }) => {\r\n const { t } = useTranslation();\r\n useAppTranslations(); // Load translations for current module\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const { user } = useAuth();\r\n console.log(\"user.........\", user)\r\n const { callApi } = useApi();\r\n\r\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\r\n rows: [],\r\n isLoading: false,\r\n paginationModel: {\r\n pageNo: 1,\r\n limit: 10,\r\n totalCount: 0\r\n }\r\n });\r\n\r\n // Initialize state with proper defaults and memoization\r\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\r\n const formView = localStorage.getItem(\"form-view\");\r\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\r\n });\r\n\r\n const [search, setSearch] = useState<string>(\"\");\r\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\r\n actionBarData?.[0]?.label || viewTypes.TABLE\r\n );\r\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\r\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\r\n // Memoized computed values to prevent unnecessary recalculations\r\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\r\n\r\n const modulesConfig = useMemo(() => ({\r\n ...config\r\n }), [config]);\r\n\r\n const moduleConfig = useMemo(() =>\r\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\r\n [currentModule, modulesConfig]\r\n );\r\n\r\n console.log(\"external moduleConfig..........\", moduleConfig)\r\n const navigationPath = useMemo(() =>\r\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\r\n [currentModule, moduleConfig.redirectionPath]\r\n );\r\n\r\n const filters = useMemo(() =>\r\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\r\n [user?.company_id, moduleConfig.filterName]\r\n );\r\n\r\n const paginationData = useMemo(() => {\r\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\r\n const total = limit ? Math.ceil(totalCount / limit) : 0;\r\n const skip = limit * (pageNo - 1);\r\n return { total, skip, pageNo, limit };\r\n }, [formBuilder.paginationModel]);\r\n\r\n // Utility function moved outside render to prevent recreation\r\n const formatText = useCallback((key: string): string => {\r\n return key\r\n ? key\r\n .split(/[:_-]/)\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(' ')\r\n : key;\r\n }, []);\r\n\r\n // Memoized event handlers to prevent child re-renders\r\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\r\n setColumnOrder(colOrder.slice(1));\r\n }, []);\r\n\r\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\r\n setFormBuilder(prev => ({\r\n ...prev,\r\n paginationModel: {\r\n ...model,\r\n totalCount: prev.paginationModel.totalCount\r\n }\r\n }));\r\n }, []);\r\n\r\n const handleSearch = useCallback((searchValue: string) => {\r\n setSearch(searchValue);\r\n }, []);\r\n\r\n const handleRowClick = useCallback((rowData: any) => {\r\n navigate(navigationPath, {\r\n state: rowData,\r\n });\r\n }, [navigate, navigationPath]);\r\n\r\n // Memoized columns definition to prevent recreation on each render\r\n const columns = useMemo(() => [\r\n {\r\n accessorKey: \"name\",\r\n header: \"Form Name\",\r\n visible: true,\r\n Cell: ({ row }: any) =>\r\n row?.original?.name ? (\r\n <div\r\n onClick={() => handleRowClick(row.original)}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n {formatText(row.original.name)}\r\n </div>\r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n {\r\n accessorKey: \"fields.length\",\r\n header: \"No. of Fields\",\r\n visible: true,\r\n size: 150\r\n },\r\n {\r\n accessorKey: \"fields\",\r\n header: \"No. of custom fields\",\r\n visible: true,\r\n size: 80,\r\n Cell: ({ row }: any) =>\r\n row?.original?.fields ? (\r\n <div>\r\n {\r\n row.original.fields.filter(\r\n (field: { is_system_field: boolean }) => !field.is_system_field,\r\n ).length\r\n }\r\n </div>\r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n {\r\n accessorKey: \"fields\",\r\n header: \"Custom Fields\",\r\n visible: true,\r\n Cell: ({ row }: any) => {\r\n const fields = row?.original?.fields?.filter(\r\n (field: { is_system_field: boolean; label: string }) =>\r\n !field?.is_system_field && field?.label,\r\n ) || [];\r\n\r\n if (!fields.length) return '-';\r\n\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\r\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\r\n <Typography\r\n key={`${item.label}-${index}`}\r\n type=\"s5\"\r\n weight=\"medium\"\r\n className=\"forms--CustomField\"\r\n >\r\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\r\n </Typography>\r\n ))}\r\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n className=\"forms--CustomField\"\r\n >\r\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\r\n </Typography>\r\n )}\r\n </Box>\r\n );\r\n }\r\n },\r\n ], [formatText, handleRowClick, t]);\r\n\r\n // Memoized footer pages to prevent recreation\r\n const footerPages = useMemo(() => [\r\n {\r\n name: 'Default',\r\n _id: 1,\r\n data: []\r\n }\r\n ], []);\r\n\r\n\r\n const fetchForms = useCallback(async() => {\r\n console.log(\"moduleConfig.............\", moduleConfig)\r\n if (!moduleConfig.filterName || !user?.company_id) return;\r\n\r\n const sort = sorting?.[0];\r\n const params = {\r\n skip: paginationData.skip,\r\n limit: paginationData.limit,\r\n search,\r\n filters,\r\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\r\n ...getToken(),\r\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\r\n };\r\n console.log(\"params..............\", params)\r\n\r\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\r\n const response = await getV1FormBuilder({\r\n ...params,\r\n ...getToken\r\n })\r\n console.log(\"response........\", response)\r\n setFormBuilder({\r\n rows: response?.data?.form,\r\n isLoading: false,\r\n paginationModel: {\r\n ...formBuilder.paginationModel,\r\n ...response?.data?.pagination\r\n }\r\n });\r\n\r\n\r\n }, [filters,\r\n paginationData.skip,\r\n paginationData.limit,\r\n sorting,\r\n search,\r\n moduleConfig.filterName,\r\n user?.company_id,\r\n ])\r\n // Effect for fetching data - optimized with proper dependencies\r\n useEffect(() => {\r\n fetchForms()\r\n }, [\r\n fetchForms\r\n ]);\r\n\r\n // Effect for setting active tab - only run when actionBarData changes\r\n useEffect(() => {\r\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\r\n setActionBarActiveTab(actionBarData[0].label);\r\n }\r\n }, [actionBarData]);\r\n\r\n // Effect for localStorage - debounced to prevent excessive writes\r\n useEffect(() => {\r\n if (actionBarData?.length) {\r\n const timeoutId = setTimeout(() => {\r\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\r\n }, 300);\r\n\r\n return () => clearTimeout(timeoutId);\r\n }\r\n }, [actionBarData]);\r\n\r\n return (\r\n <section className=\"forms\">\r\n <ActionBar\r\n title=\"Form\"\r\n button={false}\r\n data={actionBarData}\r\n setData={setActionBarData}\r\n active={actionBarActiveTab}\r\n setActive={(tab) => {\r\n setActionBarActiveTab(tab);\r\n }}\r\n handleSearch={handleSearch}\r\n showFilter={false}\r\n />\r\n\r\n {actionBarActiveTab === viewTypes.TABLE && (\r\n <MaterialTable\r\n enablePagination={false}\r\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\r\n handleColumnOrdering={handleColumnOrdering}\r\n rows={formBuilder.rows}\r\n columns={columns}\r\n totalPages={1}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n enableEditing={false}\r\n states={{ sorting: sorting || [] }}\r\n onSortingChange={setSorting}\r\n disableDefaultActionColumn\r\n getSelectedData={() => { }}\r\n />\r\n )}\r\n\r\n {actionBarActiveTab === viewTypes.GRID && (\r\n <GridCard data={formBuilder.rows} config={config} />\r\n )}\r\n\r\n <Footer\r\n pages={footerPages}\r\n setPages={() => { }}\r\n currentPage={1}\r\n setCurrentPage={() => { }}\r\n total={paginationData.total}\r\n paginationModel={{\r\n pageNo: formBuilder.paginationModel.pageNo,\r\n limit: formBuilder.paginationModel.limit\r\n }}\r\n handlePaginationModel={handlePaginationModel}\r\n sharedPages={[]}\r\n resource=\"\"\r\n savePageConfiguration={() => { }}\r\n handlePageDelete={() => { }}\r\n enablePages={false}\r\n isPaginationDisplayed={true}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport default Forms;","import { Box, Collapse, IconButton, TableCell, TableRow } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport Typography from \"../../typography/typography\";\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\nimport ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { formateValueByType } from \"../../../utils/common-utility\";\r\n\r\ninterface IRowProps {\r\n rowData: any;\r\n level: number;\r\n tableHeaders: any[];\r\n totalHeaders: any[];\r\n headers: any[];\r\n collapsAll: boolean;\r\n collapsLevel: number;\r\n isIncrese: boolean,\r\n data: any,\r\n rowPath: number[],\r\n selectedRowPaths: number[][],\r\n onCheckboxChange: (rowPath: number[], checked: boolean) => void;\r\n dataSlice: any[];\r\n dataIndex: number;\r\n enableCheckBox: boolean\r\n rowHeight?: string\r\n columnWidths?: { [key: string]: number }\r\n}\r\n\r\nexport function DynamicRow({\r\n rowData,\r\n level = 0,\r\n tableHeaders,\r\n totalHeaders,\r\n headers,\r\n collapsAll = false,\r\n collapsLevel = 0,\r\n isIncrese,\r\n data,\r\n rowPath,\r\n selectedRowPaths,\r\n onCheckboxChange,\r\n // dataSlice,\r\n enableCheckBox,\r\n rowHeight,\r\n columnWidths = {},\r\n}: IRowProps) {\r\n const [open, setOpen] = useState<boolean>(false);\r\n const {t}=useTranslation()\r\n\r\n useEffect(() => {\r\n if (isIncrese && collapsLevel > level) {\r\n setOpen(true);\r\n }\r\n if (!isIncrese && collapsLevel <= level + 2) {\r\n setOpen(false);\r\n }\r\n }, [collapsLevel, level, isIncrese]);\r\n\r\n const handleToggle = () => {\r\n setOpen(prevOpen => !prevOpen);\r\n };\r\n\r\n function getNestedValue(obj: any, path: any) {\r\n if (path?.name == '') {\r\n return ''\r\n }\r\n\r\n const formattedValue=path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) || (path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) == '0' ? '0' : '-');\r\n return formateValueByType({\r\n value: formattedValue,\r\n ...path\r\n })\r\n }\r\n\r\n const isChecked = selectedRowPaths.some(path => path.length === rowPath.length && path.every((v, i) => v === rowPath[i]));\r\n\r\n return (\r\n <>\r\n <TableRow sx={{ cursor: 'pointer', \r\n height: rowHeight,\r\n overflow: 'hidden',\r\n '&:not(:last-child) td': {\r\n // borderBottom: (data?.length > 1)? 'none' : '1px solid #E5E7EB',\r\n },\r\n // Ensure last row has bottom border\r\n '&:last-child td': {\r\n borderBottom: 'none' ,\r\n borderBottomColor: 'divider',\r\n borderTop: \"0\",\r\n },\r\n // '&:first-child td': {\r\n // borderTop: 'none !important' ,\r\n // }\r\n }}>\r\n {tableHeaders[level]?.enableCheckbox && (\r\n <TableCell\r\n className=\"dynamic-report-row\"\r\n sx={{\r\n paddingLeft: `8px`,\r\n wordWrap: 'break-word',\r\n width: '60px',\r\n minWidth: '60px',\r\n maxWidth: '60px',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <Checkbox\r\n checked={isChecked}\r\n onChange={e => onCheckboxChange(rowPath, e.target.checked)}\r\n onClick={e => e.stopPropagation()}\r\n />\r\n </TableCell>\r\n )}\r\n\r\n {tableHeaders[level].headers.map((header: any, index: number) => {\r\n if (header.joinWithLeft) return null;\r\n\r\n const cellIndex = tableHeaders[level].headers.slice(index + 1).findIndex((h: any) => !h.joinWithLeft);\r\n const cellsToMerge = cellIndex === -1\r\n ? tableHeaders[level].headers.slice(index + 1).length + 1\r\n : cellIndex + 1;\r\n const colSpan = header.mergeCells ? cellsToMerge : 1;\r\n\r\n // Calculate total width for merged cells\r\n let totalWidth = 0;\r\n const defaultWidth = 100;\r\n\r\n for (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n const cellWidth = columnWidths[t(headers[i].label)] > 100 ? columnWidths[t(headers[i].label)] : 100;\r\n totalWidth += cellWidth || defaultWidth;\r\n }\r\n const showData=header?.showData ? header?.showData(open) : true;\r\n \r\n return (\r\n <TableCell\r\n key={index}\r\n className=\"dynamic-report-row\"\r\n colSpan={colSpan}\r\n sx={{\r\n paddingLeft: index === 0 ? `8px` : '16px',\r\n wordWrap: 'break-word',\r\n width: `${totalWidth}px`,\r\n minWidth: `${totalWidth}px`,\r\n maxWidth: `${totalWidth}px`,\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {showData && header?.isCollaps ? (\r\n <Box\r\n onClick={handleToggle}\r\n sx={{\r\n paddingLeft: (level > index && index === 0) ? level * 2 : 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: header?.position ? header?.position : 'start',\r\n width: '100%',\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <IconButton size=\"small\" sx={{p:0}}>\r\n {open ? <ArrowDropUpIcon sx={{ fontSize: '20px' }} /> : <ArrowDropDownIcon sx={{ fontSize: '20px' }} />}\r\n </IconButton>\r\n {header?.render ? header.render(getNestedValue(rowData, header), rowData, data) : (\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color='theme.neutral.1000'\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}\r\n >\r\n {getNestedValue(rowData, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n ) : (\r\n showData && <Box sx={{\r\n paddingLeft: (level > index && index === 0) ? level * 2 : 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: header?.position ? header?.position : 'start',\r\n width: '100%',\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}>\r\n \r\n {header?.render ? header.render(getNestedValue(rowData, header), rowData, data) : (\r\n <Typography\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color='theme.neutral.800'\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}\r\n >\r\n {getNestedValue(rowData, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n\r\n {Array.isArray(rowData[tableHeaders[level + 1]?.rowKey]) && (\r\n <TableRow sx={{}}>\r\n <TableCell\r\n sx={{\r\n // border:level>0?'none':'none',\r\n border: '0 !important',\r\n borderBottom: \"0 !important\"\r\n }}\r\n style={{ padding: 0 }}\r\n colSpan={tableHeaders[level].headers.filter((h: any) => !h.joinWithLeft).length + (enableCheckBox ? 1 : 0)}\r\n >\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n {rowData[tableHeaders[level + 1]?.rowKey]?.map((itemData: any, idx: number, arr: any[]) => (\r\n <DynamicRow\r\n key={itemData.id || [...rowPath, idx].join('-')}\r\n rowData={itemData}\r\n level={level + 1}\r\n tableHeaders={tableHeaders}\r\n headers={headers}\r\n collapsAll={collapsAll}\r\n collapsLevel={collapsLevel}\r\n isIncrese={isIncrese}\r\n totalHeaders={totalHeaders}\r\n data={data}\r\n rowPath={[...rowPath, idx]}\r\n selectedRowPaths={selectedRowPaths}\r\n onCheckboxChange={onCheckboxChange}\r\n dataSlice={arr}\r\n dataIndex={idx}\r\n enableCheckBox={enableCheckBox}\r\n rowHeight={rowHeight}\r\n columnWidths={columnWidths}\r\n />\r\n ))}\r\n\r\n {rowData?.total && Object.keys(rowData?.total).length > 0 && totalHeaders && (\r\n <TableRow sx={{ backgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA', }}>\r\n {enableCheckBox && (\r\n <TableCell sx={{\r\n width: '60px',\r\n minWidth: '60px',\r\n maxWidth: '60px'\r\n }} />\r\n )}\r\n\r\n {totalHeaders.map((header: any, index: number) => {\r\n if (header.joinWithLeft) return null;\r\n\r\n const cellsToMerge = totalHeaders.slice(index + 1).findIndex((h: any) => !h.joinWithLeft && h !== header) === -1\r\n ? totalHeaders.slice(index + 1)?.length + 1\r\n : totalHeaders.slice(index + 1).findIndex((h: any) => !h.joinWithLeft && h !== header) + 1;\r\n const colSpan = header.mergeCells ? cellsToMerge : 1;\r\n\r\n // Calculate merged width for totals\r\n let totalWidth = 0;\r\n for (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n totalWidth += columnWidths[t(headers[i].label)] || 100;\r\n }\r\n\r\n return (\r\n <TableCell\r\n key={index}\r\n className=\"dynamic-report-row\"\r\n colSpan={colSpan}\r\n sx={{\r\n paddingLeft: index === 0 ? `${level * 24}px` : '16px',\r\n width: `${totalWidth}px`,\r\n minWidth: `${totalWidth}px`,\r\n maxWidth: `${totalWidth}px`,\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: header?.position || 'start', width: '100%' }}>\r\n {header?.render ? header?.render(getNestedValue(rowData, header), rowData) : (\r\n <Typography type=\"s4\" weight=\"bold\" color='theme.neutral.1000'>\r\n {getNestedValue(rowData?.total, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n )}\r\n </Collapse>\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </>\r\n );\r\n}","import { primaryFont } from '../theme/typography';\r\nimport { toFixedWithNumbers } from './common';\r\nimport { formatDate } from './dateFormat';\r\n\r\nexport interface MeasurementConfig {\r\n fontSize: string;\r\n fontFamily: string;\r\n fontWeight: string | number;\r\n}\r\n\r\nexport const DEFAULT_MEASUREMENT_CONFIG: MeasurementConfig = {\r\n fontSize: '14px',\r\n fontFamily: primaryFont,\r\n fontWeight: '500'\r\n};\r\n\r\nlet canvasContext: CanvasRenderingContext2D | null = null;\r\n\r\nfunction getCanvasContext(): CanvasRenderingContext2D | null {\r\n if (canvasContext) {\r\n return canvasContext;\r\n }\r\n\r\n try {\r\n const canvas = document.createElement('canvas');\r\n canvasContext = canvas.getContext('2d');\r\n return canvasContext;\r\n } catch (error) {\r\n console.warn('Canvas context creation failed, falling back to DOM measurement:', error);\r\n return null;\r\n }\r\n}\r\n\r\nfunction measureTextWidthCanvas(text: string, config: MeasurementConfig): number {\r\n const context = getCanvasContext();\r\n\r\n if (!context) {\r\n console.warn('Canvas context not available, returning 0');\r\n return 0;\r\n }\r\n\r\n context.font = `${config.fontWeight} ${config.fontSize} ${config.fontFamily}`;\r\n\r\n const metrics = context.measureText(text);\r\n return metrics.width;\r\n}\r\n\r\nfunction measureTextWidthDOM(text: string, config: MeasurementConfig): number {\r\n try {\r\n const element = document.createElement('span');\r\n element.style.position = 'absolute';\r\n element.style.visibility = 'hidden';\r\n element.style.whiteSpace = 'nowrap';\r\n element.style.fontSize = config.fontSize;\r\n element.style.fontFamily = config.fontFamily;\r\n element.style.fontWeight = String(config.fontWeight);\r\n element.textContent = text;\r\n\r\n document.body.appendChild(element);\r\n const width = element.offsetWidth;\r\n document.body.removeChild(element);\r\n\r\n return width;\r\n } catch (error) {\r\n console.warn('DOM measurement failed:', error);\r\n return text.length * 8;\r\n }\r\n}\r\n\r\nexport function measureTextWidth(\r\n text: string,\r\n config: MeasurementConfig = DEFAULT_MEASUREMENT_CONFIG\r\n): number {\r\n if (!text || text.length === 0) {\r\n return 0;\r\n }\r\n\r\n const textStr = String(text);\r\n\r\n const context = getCanvasContext();\r\n if (context) {\r\n return measureTextWidthCanvas(textStr, config);\r\n }\r\n\r\n return measureTextWidthDOM(textStr, config);\r\n}\r\n\r\nexport function getFontConfig(element?: HTMLElement): MeasurementConfig {\r\n if (!element) {\r\n return DEFAULT_MEASUREMENT_CONFIG;\r\n }\r\n\r\n try {\r\n const computedStyle = window.getComputedStyle(element);\r\n\r\n return {\r\n fontSize: computedStyle.fontSize || DEFAULT_MEASUREMENT_CONFIG.fontSize,\r\n fontFamily: computedStyle.fontFamily || DEFAULT_MEASUREMENT_CONFIG.fontFamily,\r\n fontWeight: computedStyle.fontWeight || DEFAULT_MEASUREMENT_CONFIG.fontWeight\r\n };\r\n } catch (error) {\r\n console.warn('Failed to extract font config from element:', error);\r\n return DEFAULT_MEASUREMENT_CONFIG;\r\n }\r\n}\r\n\r\nexport function formatValueForMeasurement(value: any, type?: string): string {\r\n if (value === null || value === undefined) {\r\n return '-';\r\n }\r\n\r\n if (type === 'date' || value instanceof Date) {\r\n try {\r\n return new Date(value).toLocaleDateString();\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n if (type === 'number' || typeof value === 'number') {\r\n return String(value);\r\n }\r\n\r\n if (typeof value === 'object') {\r\n try {\r\n return JSON.stringify(value);\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nexport function cleanupMeasurementContext(): void {\r\n canvasContext = null;\r\n}\r\n\r\nexport interface SampleConfig {\r\n maxRows: number;\r\n headers: any[];\r\n data: any[];\r\n tableHeaders: any[];\r\n}\r\n\r\nexport interface WidthConstraints {\r\n min: number;\r\n max?: number;\r\n padding: number;\r\n}\r\n\r\nexport interface WidthCalculationResult {\r\n [columnName: string]: number;\r\n}\r\n\r\nexport interface HeaderConfig {\r\n name: string;\r\n label: string;\r\n width?: number | string;\r\n enableSorting?: boolean;\r\n type?: 'date' | 'number' | 'string';\r\n render?: (value: any, row: any, data: any) => React.ReactNode;\r\n}\r\n\r\nexport function calculateColumnWidths(\r\n headers: HeaderConfig[],\r\n rowContentSamples: { [columnName: string]: string[] },\r\n measurementConfig: MeasurementConfig = DEFAULT_MEASUREMENT_CONFIG,\r\n constraints: WidthConstraints = { min: 80, padding: 24 },\r\n t: any\r\n): WidthCalculationResult {\r\n\r\n const calculatedWidths: WidthCalculationResult = {};\r\n\r\n headers.forEach((header) => {\r\n const label = t(header.label)\r\n if (header.width) {\r\n const numericWidth = typeof header.width === 'string'\r\n ? parseInt(header.width.replace(/[^\\d]/g, ''), 10)\r\n : header.width;\r\n\r\n calculatedWidths[label] = numericWidth;\r\n return;\r\n }\r\n\r\n const headerText = label;\r\n let headerWidth = measureTextWidth(headerText, measurementConfig);\r\n\r\n if (header.enableSorting) {\r\n headerWidth += 48;\r\n }\r\n\r\n let maxRowContentWidth = 0;\r\n const samples = rowContentSamples[label] || [];\r\n\r\n samples.forEach((content) => {\r\n const contentWidth = measureTextWidth(content, measurementConfig);\r\n maxRowContentWidth = Math.max(maxRowContentWidth, contentWidth);\r\n });\r\n // console.log(\"🚀 ~ calculateColumnWidths ~ maxRowContentWidth:\", maxRowContentWidth,headerWidth,label)\r\n // const isHeaderWidth=(headerWidth < 100 ? headerWidth + 24 : headerWidth >maxRowContentWidth)\r\n\r\n let calculatedWidth = Math.max(headerWidth < 100 ? headerWidth + 24 : headerWidth, maxRowContentWidth);\r\n\r\n const dynamicPadding = constraints.padding \r\n\r\n calculatedWidth += dynamicPadding;\r\n\r\n if (maxRowContentWidth > 10) {\r\n calculatedWidth = Math.max(constraints.min, calculatedWidth);\r\n } else {\r\n calculatedWidth = Math.max(60, calculatedWidth);\r\n }\r\n\r\n if (constraints.max) {\r\n calculatedWidth = Math.min(constraints.max, calculatedWidth);\r\n }\r\n\r\n calculatedWidths[label] = Math.round(calculatedWidth) > 100 ? Math.round(calculatedWidth) : 100;\r\n });\r\n\r\n return calculatedWidths\r\n}\r\n\r\nconst valueMapper = {\r\n 'amount': {\r\n format: toFixedWithNumbers\r\n },\r\n 'date': {\r\n format: formatDate\r\n },\r\n 'string': {\r\n format: (value: any) => value\r\n },\r\n 'toFixed':{\r\n format:(value:any)=>toFixedWithNumbers(value)\r\n }\r\n}\r\n\r\nfunction getNestedValue(obj: any, path: any): any {\r\n const type = path?.type || 'string';\r\n if (!path?.name || path?.name === '') {\r\n return '';\r\n }\r\n\r\n const value = path?.name.split('.').reduce(\r\n (acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined),\r\n obj\r\n );\r\n\r\n if (value === 0 || value === '0') {\r\n return '0';\r\n }\r\n\r\n return value !== undefined ? valueMapper[type]?.format(value) : '-';\r\n}\r\nexport function sampleRowContent(config: SampleConfig): { [columnName: string]: string[] } {\r\n const { maxRows, headers, data, tableHeaders, t } = config;\r\n const samples: { [columnName: string]: string[] } = {};\r\n\r\n headers.forEach((header) => {\r\n samples[t(header.label)] = [];\r\n });\r\n\r\n if (!data || !Array.isArray(data) || data.length === 0) {\r\n return samples;\r\n }\r\n\r\n let sampledCount = 0;\r\n const maxSamples = maxRows;\r\n\r\n function sampleRows(rows: any[], level: number = 0, /* parentRow?: any */) {\r\n if (!Array.isArray(rows) || sampledCount >= maxSamples) {\r\n return;\r\n }\r\n\r\n const levelHeaders = tableHeaders && tableHeaders[level] && tableHeaders[level].headers\r\n ? tableHeaders[level].headers\r\n : headers;\r\n\r\n for (let i = 0; i < rows.length && sampledCount < maxSamples; i++) {\r\n const row = rows[i];\r\n\r\n // Process all headers in the original headers array\r\n headers.forEach((header: any) => {\r\n const columnLabel = t(header.label);\r\n if (!samples[columnLabel]) {\r\n return;\r\n }\r\n\r\n // Check if this header belongs to the current level\r\n const headerInCurrentLevel = levelHeaders.find((lh: any) =>\r\n t(lh.label) === columnLabel\r\n );\r\n\r\n let content: string;\r\n\r\n if (headerInCurrentLevel) {\r\n // This header belongs to current level - get value from current row\r\n if (header.render && typeof header.render === 'function') {\r\n try {\r\n const rendered = header.render(getNestedValue(row, header), row, data);\r\n\r\n if (typeof rendered === 'string') {\r\n content = rendered;\r\n } else if (typeof rendered === 'number') {\r\n content = String(rendered);\r\n } else if (rendered && typeof rendered === 'object' && 'props' in rendered) {\r\n const props = (rendered as any).props;\r\n if (props && props.children) {\r\n content = String(props.children);\r\n } else {\r\n content = String(rendered);\r\n }\r\n } else {\r\n content = String(rendered);\r\n }\r\n } catch (error) {\r\n content = formatValueForMeasurement(getNestedValue(row, header), header.type);\r\n }\r\n } else {\r\n const value = getNestedValue(row, header);\r\n content = formatValueForMeasurement(value, header.type);\r\n }\r\n } else {\r\n // This header belongs to a parent level - use placeholder\r\n content = \"-\";\r\n }\r\n\r\n samples[columnLabel].push(content);\r\n });\r\n\r\n sampledCount++;\r\n\r\n // Recurse into nested data\r\n if (tableHeaders && tableHeaders[level + 1]) {\r\n const nextRowKey = tableHeaders[level + 1]?.rowKey;\r\n if (nextRowKey && row[nextRowKey] && Array.isArray(row[nextRowKey])) {\r\n sampleRows(row[nextRowKey], level + 1, row);\r\n }\r\n }\r\n }\r\n }\r\n\r\n sampleRows(data, 0);\r\n\r\n return samples;\r\n}\r\n\r\nexport function getCheckboxColumnWidth(): number {\r\n return 60;\r\n}","import { useCallback } from \"react\";\r\n\r\nexport const useUomFieldUpdater = ({\r\n fieldMapping,\r\n sourceData,\r\n conversation_factor,\r\n fieldPrefix = 'item_entries',\r\n setValue,\r\n shouldUpdate = true,\r\n active_location,\r\n}: {\r\n fieldMapping: Record<string, string>;\r\n sourceData: any;\r\n conversation_factor?: number | string;\r\n fieldPrefix: string;\r\n setValue: any;\r\n shouldUpdate: boolean;\r\n active_location?: any;\r\n}) => {\r\n\r\n return useCallback(() => {\r\n if (!shouldUpdate || !sourceData) return;\r\n\r\n Object.entries(fieldMapping).forEach(([sourceKey, targetKey]) => {\r\n \r\n const sourceValue = sourceData[sourceKey];\r\n const factor = Number(conversation_factor) || 1;\r\n\r\n const fieldPath = fieldPrefix\r\n ? `${fieldPrefix}.${targetKey}`\r\n : targetKey;\r\n \r\n let convertedValue;\r\n\r\n // If active_location is null, set value to 0\r\n if (active_location === null) {\r\n convertedValue = 0;\r\n } else if (active_location && typeof active_location === 'object' && sourceData?.location_wise_quantity) {\r\n // Find location from array where active_location.id = location_id\r\n const location_quantity = sourceData.location_wise_quantity.find((item: any) => item.location_id === active_location.id);\r\n if (location_quantity) {\r\n // Use location-specific values\r\n switch(sourceKey) {\r\n case 'total_on_hand_quantity':\r\n convertedValue = (location_quantity.total_available_quantity - location_quantity.total_reserved_quantity) / factor;\r\n break;\r\n case 'total_available_quantity':\r\n convertedValue = location_quantity.total_available_quantity / factor;\r\n break;\r\n case 'total_committed_quantity':\r\n convertedValue = location_quantity.total_committed_quantity / factor;\r\n break;\r\n default:\r\n convertedValue = (sourceKey == 'sales_price' || sourceKey == 'rental_base_price' || sourceKey == 'cost') \r\n ? factor !== 0 ? (Number(sourceValue) * factor) || 0 : 0 \r\n : factor !== 0 ? (Number(location_quantity[sourceKey]) / factor) || 0 : 0;\r\n }\r\n } else {\r\n // Location not found, use 0\r\n convertedValue = 0;\r\n }\r\n } else {\r\n // Default conversion logic\r\n convertedValue = (sourceKey == 'sales_price' || sourceKey == 'rental_base_price' || sourceKey == 'cost') \r\n ? factor !== 0 ? (Number(sourceValue) * factor) || 0 : 0 \r\n : factor !== 0 ? (Number(sourceValue) / factor) || 0 : 0;\r\n }\r\n\r\n setValue(fieldPath, convertedValue);\r\n });\r\n }, [fieldMapping, sourceData, conversation_factor, fieldPrefix, setValue, shouldUpdate, active_location]);\r\n};\r\n\r\n","import React from 'react';\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({ theme }) => ({\r\n\tcolor: theme.palette?.theme.primary[500]\r\n}));\r\n\r\nconst LoaderContainer = styled(Box)(() => ({\r\n\tposition: 'fixed',\r\n\tdisplay: 'flex',\r\n\twidth: '100%',\r\n\theight: '100%',\r\n\tjustifyContent: 'center',\r\n\talignItems: 'center',\r\n\tbackgroundColor: '#ffffff96',\r\n\tzIndex: 1,\r\n\tleft: 0,\r\n\ttop: 0\r\n}));\r\n\r\nconst FormLoader = (props: CircularProgressProps) => {\r\n\treturn (\r\n\t\t<LoaderContainer>\r\n\t\t\t<Loader size={50} {...props} />\r\n\t\t</LoaderContainer>\r\n\t);\r\n};\r\n\r\nexport { FormLoader };\r\nexport default FormLoader;\r\n","import React from \"react\"\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({theme})=>({\r\n color: theme.palette?.theme.primary[500]\r\n}))\r\n\r\nconst PageLoader = (props:CircularProgressProps) => {\r\n\treturn <Box position=\"absolute\" left='50%' top=\"50%\">\r\n <Loader size={50} {...props}/>\r\n </Box>\r\n};\r\n\r\nexport { PageLoader };\r\nexport default PageLoader;\r\n","import { Operator, type Field, type RuleType } from \"react-querybuilder\";\n\nexport const validator = (r: RuleType) => !!r.value;\n\nconst defaultOperators: Operator[] = [\n { name: \"null\", label: \"is null\" },\n { name: \"notNull\", label: \"is not null\" },\n];\n\nconst textOperators: Operator[] = [\n { name: \"contains\", label: \"contains\" },\n { name: \"beginsWith\", label: \"begins with\" },\n { name: \"endsWith\", label: \"ends with\" },\n { name: \"doesNotContain\", label: \"does not contain\" },\n { name: \"doesNotBeginWith\", label: \"does not begin with\" },\n { name: \"doesNotEndWith\", label: \"does not end with\" },\n ...defaultOperators,\n];\n\nconst numberOperators: Operator[] = [\n { name: \"=\", label: \"equal to\" },\n { name: \"<\", label: \"less than\" },\n { name: \"<=\", label: \"less than or equal to\" },\n { name: \">\", label: \"greater than\" },\n { name: \">=\", label: \"greater than or equal to\" },\n ...defaultOperators,\n];\n\nconst selectOperators: Operator[] = [\n { name: \"in\", label: \"in\" },\n { name: \"notIn\", label: \"not in\" },\n ...defaultOperators,\n];\n\nconst dateOperators: Operator[] = [\n { name: \"=\", label: \"on\" },\n { name: \"!=\", label: \"not on\" },\n { name: \"<\", label: \"before\" },\n { name: \"<=\", label: \"on or before\" },\n { name: \">\", label: \"after\" },\n { name: \">=\", label: \"on or after\" },\n ...defaultOperators,\n];\n\nexport const fields: Field[] = [\n {\n name: \"Select\",\n label: \"Select\",\n valueEditorType: \"select\",\n operators: selectOperators,\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n ],\n },\n {\n name: \"role\",\n label: \"Role\",\n inputType: \"text\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"status\",\n label: \"Status\",\n valueEditorType: \"select\",\n operators: selectOperators,\n comparator: \"datatype\",\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n {\n name: \"enable\",\n label: \"Enable\",\n },\n {\n name: \"disabled\",\n label: \"Disabled\",\n },\n ],\n },\n {\n name: \"roleType\",\n label: \"Role Type\",\n valueEditorType: \"select\",\n operators: selectOperators,\n comparator: \"datatype\",\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n {\n name: \"admin\",\n label: \"Admin\",\n },\n {\n name: \"manager\",\n label: \"Manager\",\n },\n {\n name: \"executive\",\n label: \"Executive\",\n },\n {\n name: \"support\",\n label: \"Support\",\n },\n ],\n },\n {\n name: \"roleLevel\",\n label: \"Role level\",\n valueEditorType: \"text\",\n operators: numberOperators,\n comparator: \"datatype\",\n },\n {\n name: \"dateCreated\",\n label: \"Date Created\",\n operators: dateOperators,\n datatype: \"date\",\n inputType: \"date\",\n },\n {\n name: \"companyName\",\n label: \"Company Name\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"location\",\n label: \"Location\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"email\",\n label: \"Email\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n];\n\nexport const dynamicFields: Field[] = [\n {\n name: \"document\",\n label: \"Document\",\n inputType: \"text\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"filesize\",\n label: \"File size\",\n valueEditorType: \"text\",\n operators: numberOperators,\n comparator: \"datatype\",\n },\n // {\n // name: \"dateCreated\",\n // label: \"Date Created\",\n // operators: dateOperators,\n // datatype: \"date\",\n // inputType: \"date\",\n // },\n {\n name: \"owner\",\n label: \"Owner\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n }\n];\n\n","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface HorizontalBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(Math.abs(num));\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function HorizontalBarChart({ chart, currency }: HorizontalBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const data = useMemo(() => {\r\n if (!chart?.labels) return [];\r\n return chart.labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: chart.datasets?.[0]?.values?.[i] || 0,\r\n }));\r\n }, [chart]);\r\n\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n const maxAbsValue = useMemo(() => Math.max(...data.map(d => Math.abs(d.value))), [data]);\r\n const hasNegative = useMemo(() => data.some(d => d.value < 0), [data]);\r\n \r\n const yAxisWidth = hasNegative ? 100 : 90;\r\n const rightPadding = 90;\r\n const chartHeight = Math.max(data.length * 42 + 70, 230);\r\n const margin = { top: 15, right: rightPadding, bottom: 20, left: yAxisWidth };\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const xMax = maxAbsValue * 1.15;\r\n const x = d3.scaleLinear().domain([hasNegative ? -xMax : 0, xMax]).range([0, barWidth]);\r\n\r\n const y = d3.scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, barHeight])\r\n .padding(0.35);\r\n\r\n const chartGroup = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n if (hasNegative) {\r\n chartGroup\r\n .append(\"line\")\r\n .attr(\"x1\", x(0))\r\n .attr(\"x2\", x(0))\r\n .attr(\"y1\", 0)\r\n .attr(\"y2\", barHeight)\r\n .attr(\"stroke\", \"#9CA3AF\")\r\n .attr(\"stroke-width\", 1);\r\n }\r\n\r\n const xTicks = x.ticks(5).filter(t => t !== 0);\r\n chartGroup\r\n .selectAll(\".grid-line\")\r\n .data(xTicks)\r\n .enter()\r\n .append(\"line\")\r\n .attr(\"x1\", d => x(d))\r\n .attr(\"x2\", d => x(d))\r\n .attr(\"y1\", 0)\r\n .attr(\"y2\", barHeight)\r\n .attr(\"stroke\", \"#E5E7EB\")\r\n .attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup\r\n .selectAll(\".x-tick\")\r\n .data(xTicks)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => x(d))\r\n .attr(\"y\", barHeight + 16)\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"10px\")\r\n .attr(\"fill\", \"#6B7280\")\r\n .text(d => formatAxisValue(d, chartCurrency));\r\n\r\n chartGroup\r\n .selectAll(\".bar\")\r\n .data(data)\r\n .enter()\r\n .append(\"rect\")\r\n .attr(\"x\", d => d.value >= 0 ? x(0) : x(d.value))\r\n .attr(\"y\", d => y(d.name) || 0)\r\n .attr(\"width\", d => Math.abs(x(d.value) - x(0)))\r\n .attr(\"height\", y.bandwidth())\r\n .attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\")\r\n .attr(\"rx\", 3)\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"fill\", d => d.value >= 0 ? \"#3AA87A\" : \"#D14529\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${d.name}</strong><br/>${formatHover(d.value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function (event, d) {\r\n d3.select(this).attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"0\";\r\n }\r\n });\r\n\r\n chartGroup\r\n .selectAll(\".value-label\")\r\n .data(data)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => {\r\n if (d.value >= 0) {\r\n return x(d.value) + 6;\r\n } else {\r\n return x(0) + 6;\r\n }\r\n })\r\n .attr(\"y\", d => (y(d.name) || 0) + y.bandwidth() / 2)\r\n .attr(\"dy\", \"0.35em\")\r\n .attr(\"text-anchor\", \"start\")\r\n .attr(\"font-size\", \"9px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"fill\", \"#374151\")\r\n .text(d => formatBarLabel(d.value, chartCurrency));\r\n\r\n const yAxis = chartGroup\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(0,0)`)\r\n .call(d3.axisLeft(y).tickSize(0).tickFormat(d => truncateLabel(String(d), 15)));\r\n\r\n yAxis.selectAll(\"text\").attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\");\r\n yAxis.selectAll(\".domain\").remove();\r\n }, [data, chartCurrency, maxAbsValue, hasNegative, rightPadding, yAxisWidth, chartHeight, margin]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div\r\n ref={tooltipRef}\r\n style={{\r\n position: \"absolute\",\r\n backgroundColor: \"white\",\r\n padding: \"8px 12px\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\",\r\n fontSize: \"11px\",\r\n color: \"#374151\",\r\n opacity: 0,\r\n transition: \"opacity 0.15s\",\r\n pointerEvents: \"none\",\r\n zIndex: 10,\r\n border: \"1px solid #E5E7EB\",\r\n lineHeight: 1.4,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HorizontalBarChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface SimpleBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function SimpleBarChart({ chart, currency }: SimpleBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const data = useMemo(() => {\r\n if (!chart?.labels) return [];\r\n return chart.labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: chart.datasets?.[0]?.values?.[i] || 0,\r\n }));\r\n }, [chart]);\r\n\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n const showValueLabels = useMemo(() => data.length <= 6, [data]);\r\n const chartHeight = Math.max(data.length * 40 + 120, 220);\r\n const maxValue = useMemo(() => Math.max(...data.map((d) => Math.abs(d.value))), [data]);\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const margin = { top: 25, right: 12, bottom: 45, left: 50 };\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const hasNegative = data.some(d => d.value < 0);\r\n \r\n const padding = data.length > 5 ? 0.15 : 0.25;\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, barWidth])\r\n .padding(padding);\r\n\r\n const yMin = hasNegative ? Math.min(0, d3.min(data, d => d.value) || 0) : 0;\r\n const yMax = Math.max(0, d3.max(data, d => d.value) || 0);\r\n const y = d3.scaleLinear()\r\n .domain([yMin * 1.15, yMax * 1.15])\r\n .range([barHeight, 0]);\r\n\r\n const chartGroup = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n const yTicks = y.ticks(4).filter(t => t !== 0);\r\n chartGroup\r\n .selectAll(\".grid-line\")\r\n .data(yTicks)\r\n .enter()\r\n .append(\"line\")\r\n .attr(\"x1\", 0)\r\n .attr(\"x2\", barWidth)\r\n .attr(\"y1\", d => y(d))\r\n .attr(\"y2\", d => y(d))\r\n .attr(\"stroke\", \"#E5E7EB\")\r\n .attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup\r\n .selectAll(\".y-tick\")\r\n .data(yTicks)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", -6)\r\n .attr(\"y\", d => y(d))\r\n .attr(\"dy\", \"0.35em\")\r\n .attr(\"text-anchor\", \"end\")\r\n .attr(\"font-size\", \"9px\")\r\n .attr(\"fill\", \"#6B7280\")\r\n .text(d => formatAxisValue(d, chartCurrency));\r\n\r\n if (hasNegative) {\r\n chartGroup\r\n .append(\"line\")\r\n .attr(\"x1\", 0)\r\n .attr(\"x2\", barWidth)\r\n .attr(\"y1\", y(0))\r\n .attr(\"y2\", y(0))\r\n .attr(\"stroke\", \"#9CA3AF\")\r\n .attr(\"stroke-width\", 1);\r\n }\r\n\r\n chartGroup\r\n .selectAll(\".bar\")\r\n .data(data)\r\n .enter()\r\n .append(\"rect\")\r\n .attr(\"x\", d => x(d.name) || 0)\r\n .attr(\"y\", d => d.value >= 0 ? y(d.value) : y(0))\r\n .attr(\"width\", x.bandwidth())\r\n .attr(\"height\", d => Math.abs(y(d.value) - y(0)))\r\n .attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\")\r\n .attr(\"rx\", 3)\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${d.name}</strong><br/>${formatHover(d.value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"0\";\r\n }\r\n });\r\n\r\n if (showValueLabels) {\r\n chartGroup\r\n .selectAll(\".value-label\")\r\n .data(data)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => (x(d.name) || 0) + x.bandwidth() / 2)\r\n .attr(\"y\", d => d.value >= 0 ? y(d.value) - 5 : y(d.value) + 12)\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"8px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"fill\", \"#374151\")\r\n .text(d => formatBarLabel(d.value, chartCurrency));\r\n }\r\n\r\n const xAxis = chartGroup\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(0,${barHeight})`)\r\n .call(d3.axisBottom(x).tickSize(0));\r\n\r\n xAxis.selectAll(\"text\").attr(\"font-size\", \"9px\").attr(\"fill\", \"#6B7280\");\r\n xAxis.selectAll(\".domain\").remove();\r\n\r\n if (data.length > 5) {\r\n xAxis.selectAll(\"text\").each(function () {\r\n const text = d3.select(this);\r\n text.text(truncateLabel(text.text(), 8));\r\n });\r\n }\r\n }, [data, chartCurrency, showValueLabels, chartHeight, maxValue]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div\r\n ref={tooltipRef}\r\n style={{\r\n position: \"absolute\",\r\n backgroundColor: \"white\",\r\n padding: \"8px 12px\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\",\r\n fontSize: \"11px\",\r\n color: \"#374151\",\r\n opacity: 0,\r\n transition: \"opacity 0.15s\",\r\n pointerEvents: \"none\",\r\n zIndex: 10,\r\n border: \"1px solid #E5E7EB\",\r\n lineHeight: 1.4,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SimpleBarChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n unit?: string;\r\n center_text?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface DonutChartProps {\r\n chart: ChartData;\r\n}\r\n\r\nconst PIE_COLORS = [\"#4AC08C\", \"#3AA87A\", \"#2E8E68\", \"#247457\", \"#7FD3AE\", \"#C9EFE0\", \"#6BBF8A\", \"#5AAF7C\"];\r\n\r\nconst formatValue = (num: number, currency?: string, unit?: string) => {\r\n if (unit) return `${num} ${unit}`;\r\n if (currency) {\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${currency} ${(absNum / 1_000_000).toFixed(2)}M`;\r\n if (absNum >= 1_000) return `${currency} ${(absNum / 1_000).toFixed(1)}K`;\r\n return `${currency} ${num}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst formatHoverValue = (num: number, currency?: string, unit?: string) => {\r\n if (unit) return `${num} ${unit}`;\r\n if (currency) {\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${currency} ${(absNum / 1_000_000).toFixed(2)}M`;\r\n if (absNum >= 1_000) return `${currency} ${(absNum / 1_000).toFixed(1)}K`;\r\n return `${currency} ${num}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst formatCenterNumber = (num: number) => {\r\n if (num >= 1_000_000) return (num / 1_000_000).toFixed(1) + \"M\";\r\n if (num >= 1_000) return (num / 1_000).toFixed(1) + \"K\";\r\n return String(num);\r\n};\r\n\r\nexport function DonutChart({ chart }: DonutChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const labels = chart?.labels || [];\r\n const dataset = chart?.datasets?.[0] || {};\r\n const values = dataset?.values || [];\r\n const chartCurrency = chart?.currency || \"\";\r\n const unit = chart?.unit || \"\";\r\n\r\n const total = useMemo(() => values.reduce((sum, v) => sum + (v || 0), 0), [values]);\r\n\r\n const data = useMemo(() => labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: values[i] || 0,\r\n pct: total > 0 ? (values[i] || 0) / total * 100 : 0,\r\n })), [labels, values, total]);\r\n\r\n const sortedData = useMemo(() => [...data].sort((a, b) => b.value - a.value), [data]);\r\n\r\n const chartHeight = 200;\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const parentWidth = containerRef.current?.clientWidth || 300;\r\n const chartSize = Math.min(parentWidth * 0.6, 170);\r\n const margin = 4;\r\n const outerRadius = chartSize / 2 - margin;\r\n const innerRadius = outerRadius - 16;\r\n\r\n const g = svg.append(\"g\").attr(\"transform\", `translate(${chartSize / 2},${chartSize / 2})`);\r\n\r\n const pie = d3.pie<{ name: string; value: number; pct: number }>().value((d) => d.value).sort(null).padAngle(0.02);\r\n const arc = d3.arc<d3.PieArcDatum<{ name: string; value: number; pct: number }>>()\r\n .innerRadius(innerRadius).outerRadius(outerRadius).cornerRadius(3);\r\n\r\n g.selectAll(\"path\").data(pie(data)).enter().append(\"path\")\r\n .attr(\"d\", arc).attr(\"fill\", (_, i) => PIE_COLORS[i % PIE_COLORS.length]).style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n const hoverValue = formatHoverValue(d.data.value, chartCurrency, unit);\r\n const formatForHover = (num: number, curr?: string) => {\r\n if (!curr) return String(num);\r\n if (Math.abs(num) >= 1_000_000) return `${(Math.abs(num) / 1_000_000).toFixed(2)}M ${curr}`;\r\n if (Math.abs(num) >= 1_000) return `${(Math.abs(num) / 1_000).toFixed(1)}K ${curr}`;\r\n return `${num} ${curr}`;\r\n };\r\n tooltipRef.current.innerHTML = `<strong>${d.data.name}</strong><br/>${formatForHover(d.data.value, chartCurrency)}<br/>(${d.data.pct.toFixed(1)}%)`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) tooltipRef.current.style.opacity = \"0\";\r\n });\r\n\r\n const formattedCenter = formatCenterNumber(total);\r\n\r\n g.append(\"text\").attr(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\")\r\n .attr(\"font-size\", formattedCenter.length > 8 ? \"10px\" : \"12px\").attr(\"font-weight\", \"600\").attr(\"fill\", \"#1F2125\")\r\n .text(formattedCenter);\r\n }, [data, chartCurrency, unit, chart, total]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\" >{chart?.title || \"\"}</p>\r\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"50px\", width: \"100%\" }}>\r\n <div style={{ position: \"relative\", display: \"flex\", justifyContent: \"center\", width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={180} style={{ maxWidth: \"180px\" }}></svg>\r\n <div ref={tooltipRef} style={{\r\n position: \"absolute\", backgroundColor: \"white\", padding: \"8px 12px\", borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\", fontSize: \"11px\", color: \"#374151\", opacity: 0,\r\n transition: \"opacity 0.15s\", pointerEvents: \"none\", zIndex: 10, border: \"1px solid #E5E7EB\", lineHeight: 1.4,\r\n }} />\r\n </div>\r\n <div style={{ display: \"flex\", flexWrap: \"wrap\", justifyContent: \"center\", gap: \"6px 12px\", maxWidth: \"100%\" }}>\r\n {sortedData.map((item, i) => (\r\n <div key={item.name} style={{ display: \"flex\", alignItems: \"center\", gap: \"5px\", padding: \"4px 8px\", borderRadius: \"4px\", cursor: \"pointer\" }}>\r\n <div style={{ width: \"9px\", height: \"9px\", borderRadius: \"2px\", backgroundColor: PIE_COLORS[i % PIE_COLORS.length], flexShrink: 0 }} />\r\n <span style={{ fontSize: \"10px\", color: \"#374151\", maxWidth: \"85px\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }} title={item.name}>{item.name}</span>\r\n <span style={{ fontSize: \"10px\", color: \"#6B7280\", fontWeight: \"500\", flexShrink: 0 }}>{item.pct.toFixed(0)}%</span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default DonutChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ label?: string; values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface GroupedBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst PIE_COLORS = [\"#4AC08C\", \"#3AA87A\", \"#2E8E68\", \"#247457\", \"#7FD3AE\", \"#C9EFE0\", \"#6BBF8A\", \"#5AAF7C\"];\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function GroupedBarChart({ chart, currency }: GroupedBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const labels = chart?.labels || [];\r\n const datasets = chart?.datasets || [];\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n\r\n const data = useMemo(() => {\r\n return labels.map((label: string, i: number) => {\r\n const obj: Record<string, number | string> = { name: label };\r\n datasets.forEach((ds, idx) => { obj[ds.label || `dataset_${idx}`] = ds.values?.[i] ?? 0; });\r\n return obj;\r\n });\r\n }, [labels, datasets]);\r\n\r\n const dataKeys = useMemo(() => datasets.map((ds) => ds.label || `dataset_${datasets.indexOf(ds)}`), [datasets]);\r\n const showValueLabels = useMemo(() => data.length * datasets.length <= 12, [data, datasets]);\r\n const needRotate = useMemo(() => labels.some((l) => l.length > 6), [labels]);\r\n \r\n const chartHeight = Math.max(data.length * 48 + datasets.length * 35 + 150, 300);\r\n const margin = { top: 25, right: 15, bottom: needRotate ? 100 : 80, left: 60 };\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const x0 = d3.scaleBand().domain(data.map((d) => d.name as string)).range([0, barWidth]).padding(0.2);\r\n const x1 = d3.scaleBand().domain(dataKeys).range([0, x0.bandwidth()]).padding(0.1);\r\n\r\n const maxValue = d3.max(data, (d) => Math.max(...dataKeys.map((key) => Math.abs(Number(d[key])) || 0)) || 0);\r\n const y = d3.scaleLinear().domain([0, maxValue * 1.25]).range([barHeight, 0]);\r\n\r\n const chartGroup = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n const yTicks = y.ticks(4).filter(t => t > 0);\r\n chartGroup.selectAll(\".grid-line\").data(yTicks).enter()\r\n .append(\"line\").attr(\"x1\", 0).attr(\"x2\", barWidth).attr(\"y1\", d => y(d)).attr(\"y2\", d => y(d))\r\n .attr(\"stroke\", \"#E5E7EB\").attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup.selectAll(\".y-tick\").data(yTicks).enter()\r\n .append(\"text\").attr(\"x\", -6).attr(\"y\", d => y(d)).attr(\"dy\", \"0.35em\").attr(\"text-anchor\", \"end\")\r\n .attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\").text(d => formatAxisValue(d, chartCurrency));\r\n\r\n data.forEach((d) => {\r\n const g = chartGroup.append(\"g\").attr(\"transform\", `translate(${x0(d.name as string)},0)`);\r\n dataKeys.forEach((key, i) => {\r\n const value = Number(d[key]) || 0;\r\n const absValue = Math.abs(value);\r\n const barY = y(absValue);\r\n g.append(\"rect\").attr(\"x\", x1(key) || 0).attr(\"y\", barY).attr(\"width\", x1.bandwidth())\r\n .attr(\"height\", barHeight - barY).attr(\"fill\", PIE_COLORS[i % PIE_COLORS.length]).attr(\"rx\", 3).style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${key}</strong> - ${d.name}<br/>${formatHover(value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) tooltipRef.current.style.opacity = \"0\";\r\n });\r\n\r\n if (showValueLabels && x1.bandwidth() > 28 && absValue > 0) {\r\n g.append(\"text\").attr(\"x\", (x1(key) || 0) + x1.bandwidth() / 2).attr(\"y\", barY - 5)\r\n .attr(\"text-anchor\", \"middle\").attr(\"font-size\", \"8px\").attr(\"font-weight\", \"600\").attr(\"fill\", \"#374151\")\r\n .text(formatBarLabel(value, chartCurrency));\r\n }\r\n });\r\n });\r\n\r\n const xAxis = chartGroup.append(\"g\").attr(\"transform\", `translate(0,${barHeight})`)\r\n .call(d3.axisBottom(x0).tickSize(0).tickFormat((d) => needRotate ? truncateLabel(String(d), 12) : truncateLabel(String(d), 14)));\r\n xAxis.selectAll(\"text\").attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\");\r\n if (needRotate) xAxis.selectAll(\"text\").attr(\"transform\", \"rotate(-30)\").attr(\"text-anchor\", \"end\");\r\n xAxis.selectAll(\".domain\").remove();\r\n }, [data, dataKeys, chartCurrency, showValueLabels, needRotate, chartHeight, margin]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ display: \"flex\", gap: \"12px\", flexWrap: \"wrap\", marginBottom: \"10px\" }}>\r\n {dataKeys.map((key, i) => (\r\n <div key={key} style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n <div style={{ width: \"10px\", height: \"10px\", borderRadius: \"2px\", backgroundColor: PIE_COLORS[i % PIE_COLORS.length] }} />\r\n <span style={{ fontSize: \"10px\", color: \"#6B7280\" }}>{key}</span>\r\n </div>\r\n ))}\r\n </div>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div ref={tooltipRef} style={{\r\n position: \"absolute\", backgroundColor: \"white\", padding: \"8px 12px\", borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\", fontSize: \"11px\", color: \"#374151\", opacity: 0,\r\n transition: \"opacity 0.15s\", pointerEvents: \"none\", zIndex: 10, border: \"1px solid #E5E7EB\", lineHeight: 1.4,\r\n }} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default GroupedBarChart;","import { useState, useEffect, useMemo } from \"react\";\r\nimport {\r\n Sparkles,\r\n ChevronDown,\r\n ChevronUp,\r\n Copy,\r\n Check,\r\n AlertTriangle,\r\n TrendingUp,\r\n Clock,\r\n} from \"lucide-react\";\r\n\r\nimport { HorizontalBarChart } from \"./chart/horizontal-bar-chart\";\r\nimport { SimpleBarChart } from \"./chart/simple-bar-chart\";\r\nimport { DonutChart } from \"./chart/donut-chart\";\r\nimport { GroupedBarChart } from \"./chart/grouped-bar-chart\";\r\n\r\nimport \"./ai-summary.scss\";\r\n\r\nexport interface AISummaryPanelProps {\r\n aiSummaryData?: any;\r\n isLoading?: boolean;\r\n onExpand?: () => void;\r\n}\r\n\r\nfunction ApiChartsRenderer({ charts, currency = \"AED\" }: { charts: any[]; currency?: string }) {\r\n const chartMap: Record<string, any> = {\r\n bar: SimpleBarChart,\r\n horizontal_bar: HorizontalBarChart,\r\n donut: DonutChart,\r\n grouped_bar: GroupedBarChart,\r\n };\r\n\r\n return (\r\n <div className=\"ai-summary-panel__visuals\">\r\n {charts.map((chart: any, i: number) => {\r\n const Component = chartMap[chart.chart_type];\r\n return Component ? (\r\n <Component key={i} chart={chart} currency={currency} />\r\n ) : null;\r\n })}\r\n </div>\r\n );\r\n}\r\n\r\nfunction useTypingEffect(text: string, speed = 18) {\r\n const [displayed, setDisplayed] = useState(\"\");\r\n const [done, setDone] = useState(false);\r\n\r\n useEffect(() => {\r\n let i = 0;\r\n const interval = setInterval(() => {\r\n i++;\r\n setDisplayed(text.slice(0, i));\r\n\r\n if (i >= text.length) {\r\n clearInterval(interval);\r\n setDone(true);\r\n }\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, [text, speed]);\r\n\r\n return { displayed, done };\r\n}\r\n\r\nexport function AISummaryPanel(props: AISummaryPanelProps = {}) {\r\n const { aiSummaryData, isLoading, onExpand } = props;\r\n\r\n const dynamicData = useMemo(() => {\r\n if (!aiSummaryData) return { summaryText: \"\", insights: [], charts: [] };\r\n\r\n const insights = (aiSummaryData.flags || []).map((flag: any) => ({\r\n icon:\r\n flag.severity === \"critical\"\r\n ? AlertTriangle\r\n : flag.severity === \"warning\"\r\n ? Clock\r\n : TrendingUp,\r\n text: flag.message,\r\n title:\r\n flag.severity === \"critical\"\r\n ? \"Critical\"\r\n : flag.severity === \"warning\"\r\n ? \"Warning\"\r\n : \"Info\",\r\n color:\r\n flag.severity === \"critical\"\r\n ? \"#E85D3A\"\r\n : flag.severity === \"warning\"\r\n ? \"#D97706\"\r\n : \"#059669\",\r\n }));\r\n\r\n return {\r\n summaryText: aiSummaryData.summary || \"\",\r\n insights,\r\n charts: aiSummaryData.charts || [],\r\n currency: aiSummaryData?.charts?.[0]?.currency || \"AED\",\r\n };\r\n }, [aiSummaryData]);\r\n\r\n const [expanded, setExpanded] = useState(false);\r\n const [copied, setCopied] = useState(false);\r\n const [insightsVisible, setInsightsVisible] = useState(false);\r\n\r\n const { displayed, done } = useTypingEffect(dynamicData.summaryText, 12);\r\n\r\n useEffect(() => {\r\n if (done) {\r\n setTimeout(() => setInsightsVisible(true), 200);\r\n }\r\n }, [done]);\r\n\r\n function handleCopy() {\r\n navigator.clipboard.writeText(dynamicData.summaryText);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n\r\n return (\r\n <div className=\"ai-summary-panel\">\r\n {!expanded && (\r\n <button\r\n onClick={() => {\r\n setExpanded(true);\r\n onExpand?.();\r\n }}\r\n className=\"ai-summary-panel__collapsed-toggle\"\r\n disabled={isLoading}\r\n >\r\n <div className=\"ai-summary-panel__collapsed-toggle-icon\">\r\n {isLoading ? (\r\n <div className=\"ai-summary-panel__loading-spinner\" />\r\n ) : (\r\n <Sparkles />\r\n )}\r\n </div>\r\n\r\n <span className=\"ai-summary-panel__collapsed-toggle-title\">\r\n AI Summary\r\n </span>\r\n\r\n <span className=\"ai-summary-panel__collapsed-toggle-subtitle\">\r\n {isLoading ? \"Generating insights...\" : \"Click to expand insights\"}\r\n </span>\r\n\r\n {!isLoading && (\r\n <ChevronDown className=\"ai-summary-panel__collapsed-toggle-chevron\" />\r\n )}\r\n </button>\r\n )}\r\n\r\n {expanded && (\r\n <div className=\"ai-summary-panel__expanded\">\r\n <div className=\"ai-summary-panel__header\">\r\n <div className=\"ai-summary-panel__header-left\">\r\n <div className=\"ai-summary-panel__header-icon\">\r\n <Sparkles />\r\n </div>\r\n <span className=\"ai-summary-panel__header-title\">\r\n AI Summary\r\n </span>\r\n <span className=\"ai-summary-panel__header-badge\">Beta</span>\r\n </div>\r\n\r\n <div className=\"ai-summary-panel__header-actions\">\r\n <button\r\n onClick={handleCopy}\r\n className={`ai-summary-panel__header-btn ${\r\n copied ? \"copied\" : \"\"\r\n }`}\r\n >\r\n {copied ? <Check /> : <Copy />}\r\n </button>\r\n\r\n <button\r\n onClick={() => setExpanded(false)}\r\n className=\"ai-summary-panel__header-btn\"\r\n >\r\n <ChevronUp />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"ai-summary-panel__body\">\r\n {isLoading && (\r\n <div className=\"ai-summary-panel__loading\">\r\n <div className=\"ai-summary-panel__loading-spinner-large\" />\r\n <span className=\"ai-summary-panel__loading-text\">\r\n Generating AI insights...\r\n </span>\r\n </div>\r\n )}\r\n\r\n {!isLoading && (\r\n <p className=\"ai-summary-panel__summary\">\r\n {displayed}\r\n {!done && (\r\n <span className=\"ai-summary-panel__summary-cursor\" />\r\n )}\r\n </p>\r\n )}\r\n\r\n {dynamicData.charts.length > 0 && insightsVisible && (\r\n <ApiChartsRenderer\r\n charts={dynamicData.charts}\r\n currency={dynamicData.currency}\r\n />\r\n )}\r\n\r\n {insightsVisible && (\r\n <div className=\"ai-summary-panel__insights\">\r\n {dynamicData.insights.map((insight: any, i: number) => (\r\n <div\r\n key={i}\r\n className={`ai-summary-panel__insight-chip ai-summary-panel__insight-chip--${insight.title?.toLowerCase() || 'info'}`}\r\n >\r\n <insight.icon style={{ color: insight.color }} />\r\n <span className=\"ai-summary-panel__insight-chip-title\">\r\n {insight.title}\r\n </span>\r\n <span className=\"ai-summary-panel__insight-chip-text\">\r\n — {insight.text}\r\n </span>\r\n <svg className=\"ai-summary-panel__insight-chip-arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 18l6-6-6-6\" />\r\n </svg>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}","import React from 'react';\n\nimport { Box } from '@mui/material';\nimport Timeline from '@mui/lab/Timeline';\nimport TimelineItem from '@mui/lab/TimelineItem';\nimport TimelineSeparator from '@mui/lab/TimelineSeparator';\nimport TimelineConnector from '@mui/lab/TimelineConnector';\nimport TimelineContent from '@mui/lab/TimelineContent';\nimport TimelineDot from '@mui/lab/TimelineDot';\nimport './activity-log.scss';\nimport Typography from '../typography/typography';\nimport dayjs from 'dayjs';\nimport formatText from '../../utils/format-text';\nimport { useTranslation } from 'react-i18next';\n\nexport const ActivityTag = (props: any) => {\n\tconst { t } = useTranslation();\n\tconst { data } = props;\n\n\tconst formatDateTime = (date: Date): string => {\n\t\tconst formattedDate = dayjs(date).format('DD MMM, YYYY');\n\t\tconst formattedTime = dayjs(date).format('HH:mm');\n\t\treturn `${formattedDate} • ${formattedTime}`;\n\t};\n\n\tconst actions = {\n\t\tview: t('common.viewed_text'),\n\t\tdelete: t('common.deleted_text'),\n\t\tcreate: t('common.created_text'),\n\t\tupdate: t('common.updated_text')\n\t};\n\treturn (\n\t\t// <Box position='relative'>\n\t\t<Box>\n\t\t\t<Timeline className='Timeline'>\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\tpadding: '16px'\n\t\t\t\t\t}}\n\t\t\t\t\tclassName='box-class'>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t{t('common.activities_label')}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\theight: 400,\n\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\tgap: 1.5,\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\tflexDirection: 'column'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t{data?.map((item: any, index: number) => (\n\t\t\t\t\t\t\t<div className='Timeline--Activity'>\n\t\t\t\t\t\t\t\t<TimelineItem key={index}>\n\t\t\t\t\t\t\t\t\t<TimelineSeparator>\n\t\t\t\t\t\t\t\t\t\t<TimelineDot\n\t\t\t\t\t\t\t\t\t\t\tcolor='primary'\n\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: '#D3D3D4' }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{data.length - 1 !== index && <TimelineConnector />}\n\t\t\t\t\t\t\t\t\t</TimelineSeparator>\n\t\t\t\t\t\t\t\t\t<TimelineContent className='Timeline--Content'>\n\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\t\t\t\t\tclassName='Timeline--ActivityLogItem'>\n\t\t\t\t\t\t\t\t\t\t\t<b>{formatText(item.username)}</b> {actions[item.action]}{' '}\n\t\t\t\t\t\t\t\t\t\t\t<b>{formatText(item.resource?.replace('_', ' '))}</b>\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\t\t\t\t\tclassName='Timeline--ActivityLogItem'>\n\t\t\t\t\t\t\t\t\t\t\t{formatDateTime(item?.created_at)}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t</TimelineContent>\n\t\t\t\t\t\t\t\t</TimelineItem>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t</Timeline>\n\t\t</Box>\n\t\t// </Box>\n\t);\n};\n\nexport default ActivityTag;\n","import { useTranslation } from 'react-i18next';\nimport DropdownButton from '../dropdown-button/dropdown-button';\nimport QuickApprovalModal from '../quick-approval-modal/quick-approval-modal';\nimport { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { enqueueSnackbar } from 'notistack';\nimport {apiHelper} from '../../hooks/apiHelper';\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\nexport const ApprovalWrapper = ({\n\tdata,\n\taddApprover,\n\tfetchApi,\n\tshowAcceptOrReject,\n\tmoduleIdKey,\n\tmoduleId,\n\tsuccessMessage,\n\tshowSubmitBtn,\n\tupdateApi,\n\tapprovalDetails,\n\ttitle\n}: any) => {\n\t//Translations\n\tconst { t } = useTranslation();\n\n\t//Redux\n\tconst dispatch = useDispatch();\n\n\t//Local State\n\tconst [isUpdatingApproval, setIsUpdatingApproval] = useState(false);\n\tconst [openQuickApprovalModal, setOpenQuickApprovalModal] = useState(false);\n\tconst [approvalToAcceptOrReject, setApprovalToAcceptOrReject] =\n\t\tuseState<string>('');\n\n\t//Handlers\n\n\tconst FetchApprovalDetails = () => {\n\t\tenqueueSnackbar(t(successMessage));\n\t\tfetchApi();\n\t};\n\tconst handleSubmitForApproval = async (\n\t\ttype: 'submit_for_approval' | 'quick_approval',\n\t\tapprovers?: number[]\n\t) => {\n\t\tif (data) {\n\t\t\tsetIsUpdatingApproval(true);\n\t\t\tconst payload = {\n\t\t\t\t[moduleIdKey]: moduleId,\n\t\t\t\ttype,\n\t\t\t\t...(approvers && approvers?.length && { approver_id: approvers })\n\t\t\t};\n\n\t\t\tconst response = await dispatch(addApprover(payload));\n\n\t\t\tsetIsUpdatingApproval(false);\n\t\t\tapiHelper(response, () => FetchApprovalDetails());\n\t\t}\n\t};\n\tconst handleApprovalAcceptOrReject = async () => {\n\t\tif (approvalDetails?.id && approvalToAcceptOrReject) {\n\t\t\tconst payload = {\n\t\t\t\tid: approvalDetails?.id,\n\t\t\t\t[moduleIdKey]: moduleId,\n\t\t\t\tstatus: approvalToAcceptOrReject\n\t\t\t};\n\t\t\tsetIsUpdatingApproval(true);\n\t\t\tconst response = await dispatch(updateApi(payload));\n\t\t\tsetIsUpdatingApproval(false);\n\t\t\tconst rStatus = approvalToAcceptOrReject;\n\t\t\tsetApprovalToAcceptOrReject('');\n\t\t\tapiHelper(response, () => fetchApi());\n\t\t\tif (response.meta.requestStatus === 'fulfilled') {\n\t\t\t\tconst msg = `${title} ${rStatus === 'Approved' ? t('common.accepted') : t('common.rejected')}`;\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t}\n\t};\n\treturn (\n\t\t<>\n\t\t\t{(showSubmitBtn || data?.status === 'Rejected') && (\n\t\t\t\t<DropdownButton\n\t\t\t\t\tisMenuThirdItemDisabled={true}\n\t\t\t\t\tonClick={() => handleSubmitForApproval('submit_for_approval')}\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.submitForApproval'),\n\t\t\t\t\t\t\tcallback: () => handleSubmitForApproval('submit_for_approval')\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.quickApproval'),\n\t\t\t\t\t\t\tcallback: () => setOpenQuickApprovalModal(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t]}\n\t\t\t\t\tloading={isUpdatingApproval}>\n\t\t\t\t\t{data?.status === 'Rejected'\n\t\t\t\t\t\t? t('common.reSubmit')\n\t\t\t\t\t\t: t('common.submit')}\n\t\t\t\t</DropdownButton>\n\t\t\t)}\n\t\t\t<QuickApprovalModal\n\t\t\t\tisOpen={openQuickApprovalModal}\n\t\t\t\tsetIsOpen={() => setOpenQuickApprovalModal(false)}\n\t\t\t\tonConfirm={(approverIds) =>\n\t\t\t\t\thandleSubmitForApproval('quick_approval', approverIds)\n\t\t\t\t}\n\t\t\t\tisProcessing={isUpdatingApproval}\n\t\t\t/>\n\t\t\t<ConfirmPopUp\n\t\t\t\topen={Boolean(approvalToAcceptOrReject)}\n\t\t\t\tonClose={() => setApprovalToAcceptOrReject('')}\n\t\t\t\tonConfirm={handleApprovalAcceptOrReject}\n\t\t\t\ttitle={`${approvalToAcceptOrReject} request`}\n\t\t\t\tdescription={`Are you sure you want to ${approvalToAcceptOrReject} ${title} : ${data?.id} ?`}\n\t\t\t\tbuttonTexts={{\n\t\t\t\t\tconfirm: t('common.submit'),\n\t\t\t\t\tcancel: t('common.cancel')\n\t\t\t\t}}\n\t\t\t\tbuttonColors={{\n\t\t\t\t\tconfirm: approvalToAcceptOrReject === 'Rejected' ? 'error' : 'info'\n\t\t\t\t}}\n\t\t\t\tmodalType='info'\n\t\t\t\tloading={isUpdatingApproval}\n\t\t\t/>\n\t\t\t{showAcceptOrReject && (\n\t\t\t\t<DropdownButton\n\t\t\t\t\tisMenuThirdItemDisabled={true}\n\t\t\t\t\tonClick={() => setApprovalToAcceptOrReject('Approved')}\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.accept'),\n\t\t\t\t\t\t\tcallback: () => setApprovalToAcceptOrReject('Approved')\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.reject'),\n\t\t\t\t\t\t\tcallback: () => setApprovalToAcceptOrReject('Rejected'),\n\t\t\t\t\t\t\tcolor: 'theme.error.500'\n\t\t\t\t\t\t}\n\t\t\t\t\t]}\n\t\t\t\t\tloading={isUpdatingApproval}>\n\t\t\t\t\t{t('common.accept')}\n\t\t\t\t</DropdownButton>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nexport default ApprovalWrapper;\n","import { Box } from '@mui/material';\r\nimport * as d3 from 'd3';\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\ninterface IChartProps {\r\n data: { name: string, values: { month: string, value: number }[], isSmooth?: boolean }[],\r\n height: number,\r\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\r\n customLabelFormatter?: (value: number) => string;\r\n currency?: string;\r\n colors?: string[];\r\n customLegend: React.ReactNode\r\n}\r\n\r\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\r\n if (labelType === 'inPercent') {\r\n return `${d3.format(\".0%\")(num / 100)}`;\r\n } else if (labelType === 'inValue') {\r\n return `${symbol || ''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst AreaLineChart = ({ data, height = 400, customLabelFormatter, yAxisLabelType = 'inValue', currency, colors, customLegend }: IChartProps) => {\r\n const svgRef = useRef<SVGSVGElement | null>(null);\r\n const wrapperRef = useRef<HTMLDivElement>(null);\r\n const [containerWidth, setContainerWidth] = useState<number>(0);\r\n const [tooltipData, setTooltipData] = useState<any>(null);\r\n useEffect(() => {\r\n const wrapper = wrapperRef.current;\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n const newWidth = entries[0].contentRect.width;\r\n setContainerWidth(newWidth);\r\n }\r\n });\r\n\r\n if (wrapper) {\r\n resizeObserver.observe(wrapper);\r\n }\r\n\r\n return () => {\r\n if (wrapper) {\r\n resizeObserver.unobserve(wrapper);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (containerWidth === 0) return; // Wait for the container width\r\n\r\n const margin = { top: 20, right: 30, bottom: 30, left: 40 };\r\n const width = containerWidth - margin.left - margin.right;\r\n const chartHeight = height - margin.top - margin.bottom;\r\n\r\n // Clear the SVG\r\n d3.select(svgRef.current).selectAll('*').remove();\r\n\r\n const svg = d3\r\n .select(svgRef.current)\r\n .attr('width', containerWidth)\r\n .attr('height', height)\r\n .append('g')\r\n .attr('transform', `translate(${margin.left},${margin.top})`);\r\n\r\n // Define scales\r\n const x = d3\r\n .scalePoint()\r\n .domain(data[0]?.values?.map(d => d.month)) // Assuming all datasets share the same x-domain\r\n .range([0, width]);\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .domain([0, d3.max(data, dataset => d3.max(dataset.values, d => d.value))!]) // Max value across all datasets\r\n .range([chartHeight, 0]);\r\n\r\n // Limit x-axis ticks dynamically based on width\r\n const numTicks = Math.floor(width / 80); // Adjust the factor (80) based on chart width\r\n const xAxis = d3.axisBottom(x).ticks(numTicks);\r\n\r\n const xAxisGroup = svg.append('g')\r\n .attr('transform', `translate(0,${chartHeight})`)\r\n .call(xAxis);\r\n\r\n xAxisGroup.selectAll(\"text\")\r\n .attr(\"transform\", \"translate(0, 10)\")\r\n .attr('color', '#8E8E93')\r\n .style(\"text-anchor\", \"middle\");\r\n\r\n // Y Axis\r\n const yAxis = svg.append('g')\r\n yAxis.append('g').attr('color', '#8E8E93').attr(\"transform\", `translate(-10,0)`)\r\n .call(d3.axisLeft(y).tickSize(-width).tickFormat((d: any) =>\r\n customLabelFormatter\r\n ? customLabelFormatter(d)\r\n : formatNumber(d, currency, yAxisLabelType)\r\n ).tickSizeOuter(0) as any)\r\n .selectAll('line')\r\n .attr('stroke-dasharray', '3,3')\r\n .attr('stroke', '#D3D3D4');\r\n\r\n xAxisGroup.selectAll(\".tick line\").remove();\r\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\r\n xAxisGroup.select(\".domain\").attr(\"stroke\", \"none\");\r\n\r\n // Define color scale for lines\r\n // const color = d3.scaleOrdinal(d3.schemeCategory10);\r\n\r\n // Line and area generators\r\n const line = (isSmooth: boolean) => d3.line<any>()\r\n .x(d => x(d.month)!)\r\n .y(d => y(d.value))\r\n .curve(isSmooth ? d3.curveMonotoneX : d3.curveLinear); // Conditionally smooth the line\r\n\r\n const area = d3.area<any>()\r\n .x(d => x(d.month)!)\r\n .y0(chartHeight)\r\n .y1(d => y(d.value));\r\n\r\n // Iterate over each dataset to create lines and areas\r\n data.forEach((dataset, i) => {\r\n // const datasetColor = color(i.toString());\r\n\r\n // Create gradient for each area\r\n const gradient = svg.append('defs')\r\n .append('linearGradient')\r\n .attr('id', `area-gradient-${i}`)\r\n .attr('x1', '0%')\r\n .attr('x2', '0%')\r\n .attr('y1', '0%')\r\n .attr('y2', '100%');\r\n\r\n gradient.append('stop')\r\n .attr('offset', '0%')\r\n .attr('stop-color', colors[i])\r\n .attr('stop-opacity', 0.4);\r\n\r\n gradient.append('stop')\r\n .attr('offset', '100%')\r\n .attr('stop-color', colors[i])\r\n .attr('stop-opacity', 0.1);\r\n\r\n // Append the area with gradient\r\n svg.append('path')\r\n .datum(dataset.values)\r\n .attr('fill', `url(#area-gradient-${i})`)\r\n .attr('d', area);\r\n\r\n // Append the line with smoothness condition\r\n svg.append('path')\r\n .datum(dataset.values)\r\n .attr('fill', 'none')\r\n .attr('stroke', colors[i])\r\n .attr('stroke-width', 2)\r\n .attr('d', line(dataset.isSmooth || false)); // Use smoothness from the dataset\r\n\r\n // Append circles for hover effect\r\n {\r\n dataset?.showCircle &&\r\n svg.selectAll(`circle-${i}`)\r\n .data(dataset.values)\r\n .enter()\r\n .append('circle')\r\n .attr('cx', d => x(d.month)!)\r\n .attr('cy', d => y(d.value))\r\n .attr('r', 5)\r\n .attr('fill', colors[i])\r\n .attr('stroke', '#fff')\r\n .style('cursor', 'pointer')\r\n .on('mouseover', function (event, d) {\r\n setTooltipData({\r\n x: `${event.pageX + 10}px`,\r\n y: `${event.pageY - 30}px`,\r\n content: `${dataset.name}: ${d.value}`\r\n });\r\n d3.select(this).transition().attr('r', 7).attr('fill', '#ff4500');\r\n })\r\n .on('mouseout', function () {\r\n setTooltipData(null);\r\n d3.select(this).transition().attr('r', 5).attr('fill', colors[i]);\r\n });\r\n }\r\n\r\n });\r\n\r\n }, [data, containerWidth, height, customLabelFormatter, yAxisLabelType, currency, colors, customLegend]);\r\n\r\n return (\r\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\r\n <div style={{ position: 'relative' }}>\r\n <svg ref={svgRef} width=\"100%\" height={height} />\r\n {\r\n customLegend &&\r\n customLegend\r\n\r\n }\r\n </div>\r\n {tooltipData &&\r\n <Box sx={{\r\n position: 'absolute',\r\n left: tooltipData.x,\r\n top: tooltipData.y,\r\n pointerEvents: 'none',\r\n backgroundColor: '#2EB273',\r\n zIndex: '99999',\r\n border: 'none',\r\n borderRadius: '3px',\r\n transform: 'translate(-50%, -100%)',\r\n padding: '2px 6px 2px 6px',\r\n gap: '10px'\r\n }}>\r\n <span style={{ fontSize: '16px', weight: '500', color: '#ffff' }}>\r\n {tooltipData.content}\r\n </span>\r\n </Box>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nexport { AreaLineChart };\r\nexport default AreaLineChart;\r\n","import React, { useRef, useEffect, useMemo } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface BarChartProps {\n data: DataPoint[];\n numOfLines?: number;\n width?: number;\n height?: number;\n line?: boolean;\n}\n\nconst formatNumber = (num: number) => {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num;\n};\n\nconst BarChart: React.FC<BarChartProps> = ({\n data,\n numOfLines = 5,\n width = 500,\n height = 300,\n line = false,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const maxValue = useMemo(() => {\n return Math.max(...data.map((d) => d.value));\n }, [data]);\n\n const yAxisMaxValue = useMemo(() => {\n return maxValue * 1.25;\n }, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = { top: 20, right: 20, bottom: 70, left: 40 };\n const barWidth = width - margin.left - margin.right;\n const barHeight = height - margin.top - margin.bottom;\n\n const mousemove = (event: MouseEvent, d: DataPoint) => {\n let xPosition = event.offsetX + margin.left - 25;\n const yPosition = event.offsetY + margin.top - 40;\n const tooltipWidth = tooltip.node()?.getBoundingClientRect()?.width;\n const rightOffset = tooltipWidth ? xPosition + tooltipWidth : xPosition;\n if (rightOffset > width) {\n xPosition = Math.floor(\n tooltipWidth ? xPosition - tooltipWidth - 20 : xPosition - 20,\n );\n }\n\n const text = `${d.label} - ${d.value}`;\n tooltip\n .attr(\"x\", xPosition)\n .attr(\"y\", yPosition)\n .style(\"opacity\", 9)\n .style(\"height\", text.length >= 16 ? 50 : 35);\n\n tooltipText.html(text);\n };\n\n const mouseleave = () => {\n tooltip.style(\"opacity\", 0);\n };\n\n const x = d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, barWidth])\n .padding(0.1);\n\n const y = d3.scaleLinear().domain([0, yAxisMaxValue]).range([barHeight, 0]);\n\n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n if (line) {\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", barWidth)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"gray\")\n .style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", 1);\n });\n }\n\n chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"rect\")\n .attr(\"class\", \"bar\")\n //@ts-expect-error not applicable\n .attr(\"x\", (d: any) => x(d.label))\n .attr(\"y\", (d: any) => y(d.value))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d: any) => barHeight - y(d.value))\n .style(\"fill\", \"#357AF6\")\n .style(\"opacity\", \"1\")\n .on(\"mousemove\", mousemove)\n .on(\"mouseleave\", mouseleave);\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisBottom(x) as any);\n\n xAxis.selectAll(\".tick line\").remove();\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3\n .axisLeft(y)\n .tickValues(yAxisTicks)\n //@ts-expect-error not applicable\n .tickFormat((d: any) => {\n return formatNumber(d);\n })\n .tickSizeOuter(0) as any,\n );\n\n yAxis.selectAll(\".tick line\").remove();\n\n const tooltip = svg\n .append(\"foreignObject\")\n .attr(\"class\", \"tooltip\")\n .attr(\"width\", 120)\n .attr(\"height\", 20)\n .style(\"opacity\", 0)\n .style(\"position\", \"absolute\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"none\")\n .style(\"box-shadow\", \"0rem 0rem 0.469rem 0rem rgba(0, 0, 0, 0.15)\")\n .style(\"border-radius\", \"0.313rem\")\n .style(\"padding\", \"0.625rem\")\n .style(\"font-size\", \"0.75rem\");\n\n const tooltipText = tooltip\n .append(\"xhtml:div\")\n .style(\"font-size\", \"0.75rem\")\n .style(\"color\", \"black\");\n }, [data, height, width, line, yAxisMaxValue, yAxisTicks]);\n\n return (\n <>\n <svg ref={svgRef} width={width} height={height}></svg>\n </>\n );\n};\n\nexport { BarChart };\nexport default BarChart;\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\nimport { Box, /* List, ListItem */ } from '@mui/material';\nimport Typography from '../../typography/typography';\nimport './barLineChart.scss';\n\ninterface DataPoint {\n [key: string]: string | number;\n}\n\ninterface ChartField {\n field: string;\n color: string;\n label: string;\n}\n\nexport interface IBarLineChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n margin?: { top: number; right: number; bottom: number; left: number };\n bars: ChartField[];\n lines: ChartField[];\n line?: boolean;\n showGrid?: boolean;\n barColors?: any[];\n lineColors?: any[];\n}\n\nconst BarLineChart: React.FC<IBarLineChartProps> = ({\n data,\n height = 400,\n margin = { top: 20, right: 30, bottom: 30, left: 50 },\n bars,\n lines,\n line = true,\n showGrid = true,\n barColors,\n lineColors\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [tooltip, setTooltip] = useState<{ x: number; y: number; content: DataPoint } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n const formatNumber = (num: number) => d3.format('.2s')(num).replace('k', 'K');\n\n const needsHorizontalScroll = data.length > bars.length;\n const minBarWidth = 60\n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minBarWidth, containerWidth)\n : containerWidth;\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, [])\n \n useEffect(() => {\n if (containerWidth === 0) return;\n const yMax = d3.max(data, d => {\n return Math.max(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n const yMin = d3.min(data, d => {\n return Math.min(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n\n const svg = d3.select(svgRef.current);\n const innerWidth = calculatedChartWidth - margin.left - margin.right;\n const innerHeight = yMax || yMin ? height - margin.top - margin.bottom : 0;\n\n const x = d3.scaleBand()\n .domain(data.map(d => d.month as string))\n .range([0, innerWidth])\n .padding(0.3);\n\n const y = d3.scaleLinear()\n .domain([yMin, yMax])\n .nice()\n .range([innerHeight, 0]);\n\n svg.selectAll('*').remove();\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`);\n\n // Y axis\n const yAxis = g.append('g')\n .call(d3.axisLeft(y).tickFormat(formatNumber))\n .call(g => g.select('.domain').remove());\n yAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // X axis\n const xAxis = g.append('g')\n .attr('transform', `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .selectAll('.tick text')\n .attr('text-anchor', 'middle');\n xAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // Render grid lines if applicable\n if (showGrid) {\n g.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1);\n }\n \n // Render grid lines if applicable\n if (line) {\n g.selectAll('.grid-line-2')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line-2')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1)\n }\n\n // Draw bars for bar chart\n bars.forEach((bar, i) => {\n g.selectAll(`.bar-${bar.field}`)\n .data(data)\n .enter()\n .append('rect')\n .attr('class', `bar bar-${bar.field}`)\n .attr('x', d => x(d.month as string) ?? 0)\n .attr('y', d => d[bar.field] >= 0 ? y(d[bar.field]) : y(0)) // Positive bars above y(0), negative bars below\n .attr(\"rx\", 5)\n .attr(\"ry\", 5)\n .attr('width', x.bandwidth() / bars.length)\n .attr('height', d => {\n return Math.abs(y(d[bar.field]) - y(0)); // Absolute height from y(0)\n })\n .attr('fill', barColors[i])\n .attr('transform', `translate(${(i * x.bandwidth()) / bars.length}, 0)`)\n .on('mouseover', function (event, d) {\n const [xPos, yPos] = d3.pointer(event, svgRef.current);\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({ \n x: xPos + margin.left - scrollLeft, \n y: yPos + margin.top, \n content: d \n });\n })\n .on('mouseout', () => setTooltip(null));\n });\n \n // Draw lines for line chart\n lines.forEach((line, index) => {\n const lineGenerator = d3.line<DataPoint>()\n .x(d => (x(d.month as string) ?? 0) + x.bandwidth() / 2) // Calculate x position for each data point\n .y(d => y(d[line.field] as number))\n .curve(d3.curveMonotoneX);\n\n g.append('path')\n .datum(data)\n .attr('fill', 'none')\n .attr('stroke', lineColors[index])\n .attr('stroke-width', 2)\n .attr('d', lineGenerator)\n .on('mouseover', function (event) {\n const [xPos] = d3.pointer(event, svgRef.current);\n const month = x.domain().find((month) => {\n const monthPosition = x(month as string) ?? 0;\n return xPos >= monthPosition && xPos <= monthPosition + x.bandwidth();\n });\n\n if (month) {\n const closestDataPoint = data.find(d => d.month === month);\n if (closestDataPoint) {\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({\n x: xPos + margin.left - scrollLeft,\n y: y(closestDataPoint[line.field]) + margin.top,\n content: closestDataPoint\n });\n }\n }\n })\n .on('mouseout', () => setTooltip(null));\n });\n }, [data, containerWidth, calculatedChartWidth, line, height, margin, bars, lines, showGrid, barColors, lineColors]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n {tooltip && (\n <div\n style={{\n position: 'absolute',\n left: tooltip.x,\n top: tooltip.y,\n pointerEvents: 'none',\n backgroundColor: 'white',\n zIndex: '99999',\n border: 'none',\n padding: '5px',\n borderRadius: '3px',\n transform: 'translate(-50%, -100%)'\n }}\n >\n <Box>\n <div style={{ background: '#F3F2F2', padding: '10px' }}>\n <Typography type='s4' style={{ whiteSpace: 'noWrap', width: '200px', color: '#232529' }}>{tooltip.content?.month}</Typography>\n </div>\n <Box sx={{ p: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n\n {bars.map((bar, index) => (\n <Box key={`bar-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: barColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {bar.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[bar.field]}</span>\n </Typography>\n </Box>\n ))}\n {lines.map((line, index) => (\n <Box key={`line-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: lineColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {line.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[line.field]}</span>\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n \n </div>\n )\n }\n </div>\n </div>\n );\n};\n\nexport default BarLineChart;","import { useState } from \"react\";\nimport Board from \"@asseinfo/react-kanban\";\nimport ColumnHeader from \"./columnHeader\";\nimport images from \"../../assets/images\";\nimport \"@asseinfo/react-kanban/dist/styles.css\";\nimport \"./board.scss\";\n\ninterface Card {\n id: number;\n title: string;\n description: string;\n}\n\ninterface Column {\n id: number;\n title: string;\n cards: Card[];\n}\n\ninterface BoardData {\n columns: Column[];\n}\n\ninterface DraftCard {\n title: string;\n description: string;\n}\n\ninterface BoardWrapperProps {\n data: BoardData;\n}\n\nexport const BoardWrapper = (props: BoardWrapperProps) => {\n const [board, setBoard] = useState(props.data);\n const [isAddingColumn, setIsAddingColumn] = useState(false);\n const [newColumnTitle, setNewColumnTitle] = useState(\"\");\n\n const handleAddColumn = (title: string) => {\n const newColumnAdded = { ...board };\n newColumnAdded.columns.push({\n id: Date.now(),\n title: title,\n cards: [],\n });\n setBoard(newColumnAdded);\n setIsAddingColumn(false);\n setNewColumnTitle(\"\");\n };\n\n return (\n <div className=\"card-board-wrap\">\n <Board\n initialBoard={board}\n allowAddCard\n allowAddColumn\n renderColumnHeader={(column: Column) => (\n <div className=\"column-header\">\n <ColumnHeader key={column.id} column={column} />\n </div>\n )}\n renderColumnAdder={() =>\n isAddingColumn ? (\n <div className=\"create-status-box\">\n <input\n type=\"text\"\n placeholder=\"Enter new status title\"\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n />\n <div className=\"add-btns\">\n <button onClick={() => handleAddColumn(newColumnTitle)}>\n Add\n </button>\n <button onClick={() => setIsAddingColumn(false)}>Cancel</button>\n </div>\n </div>\n ) : (\n <div\n className=\"create-status-box\"\n onClick={() => setIsAddingColumn(true)}\n role=\"button\"\n >\n Create new status\n <img src={images.common.addIcon} alt=\"add icon\" />\n </div>\n )\n }\n allowRemoveCard\n allowRenameColumn\n onCardNew={console.log}\n onCardRemove={console.log}\n onColumnRemove={console.log}\n onColumnRename={console.log}\n onNewCardConfirm={(draftCard: DraftCard) => ({\n id: new Date().getTime(),\n ...draftCard,\n })}\n />\n </div>\n );\n};\n\nexport default BoardWrapper;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Box } from '@mui/material';\n\nimport ItemsSummary, { IItemsSummary } from './components/items-summary';\nimport DiscountSummary, {\n\tIDiscountSummary\n} from './components/discount-summary';\nimport SubtotalSummary, {\n\tISubtotalSummary\n} from './components/subtotal-summary';\nimport TaxesAndChargesSummary, {\n\tITaxesAndChargesSummary\n} from './components/taxes-and-charges-summary';\n\nimport { useEffect, useState } from 'react';\nimport { useAuth } from '../../hooks/useAuth';\nimport TotalSummary, { ITotalSummary } from './components/total-summary';\nimport { calculateEntries } from '../../utils/calculation';\n\nimport './calculation-summary.scss';\n\ninterface ICalculationSummary {\n\titems: any;\n\texpenses?: any;\n\tformValues: any;\n\tenableShippings?: boolean;\n\tenalblePromotions?: boolean;\n\tcurrencySymbol: string;\n\t// calculationFunc: any\n}\n\nconst CalculationSummary: React.FC<ICalculationSummary> = ({\n\titems,\n\texpenses,\n\tformValues,\n\tenalblePromotions,\n\tenableShippings,\n\tcurrencySymbol\n}) => {\n\tconst { user } = useAuth();\n\tconst defaultCurrencySymbol =\n\t\tcurrencySymbol || user?.currency_data?.symbol || '';\n\n\tconst [itemsData, setItemsData] = useState<IItemsSummary>({\n\t\ttotalQuantity: 0,\n\t\ttotal: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [discountData, setDiscountData] = useState<IDiscountSummary>({\n\t\titemDiscount: 0,\n\t\tadditionalDiscount: 0,\n\t\ttotalDiscount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [subtotalData, setSubtotalData] = useState<ISubtotalSummary>({\n\t\tsubtotalExTax: 0,\n\t\tsubtotalExDiscount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [taxesData, setTaxesData] = useState<ITaxesAndChargesSummary>({\n\t\ttaxes: 0,\n\t\tdeductedTax: 0.0,\n\t\ttotal: 0,\n\t\tshippingAmount: 0,\n\t\thandlingAmount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [totalData, setTotalData] = useState<ITotalSummary>({\n\t\ttotal: 0,\n\t\troundOffDifferenceAmount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\n\tuseEffect(() => {\n\t\t// debugger;\n\t\tconst eRate = Number(formValues?.exchange_rate) || 1;\n\n\t\tlet {\n\t\t\t// eslint-disable-next-line prefer-const\n\t\t\ttotalQuantity,\n\t\t\ttotalDiscount,\n\t\t\ttotalItemsExpenseDiscount,\n\t\t\ttotalTaxAmount,\n\t\t\tadditinoalDiscountAmount,\n\t\t\tfinalAmount,\n\t\t\troundOffDifference,\n\t\t\t\n\t\t} = calculateEntries(\n\t\t\titems,\n\t\t\texpenses,\n\t\t\tformValues?.additional_discount_on,\n\t\t\tformValues?.additional_discount_percentage,\n\t\t\tformValues?.additional_discount_amount,\n\t\t\tformValues?.round_off,\n\t\t\tformValues?.round_off_option\n\t\t);\n\n\t\ttotalDiscount /= eRate;\n\t\tadditinoalDiscountAmount /= eRate;\n\t\ttotalItemsExpenseDiscount /= eRate;\n\t\ttotalTaxAmount /= eRate;\n\t\tfinalAmount /= eRate;\n\t\troundOffDifference /= eRate;\n\t\t\n\t\tconst shippingAmount =\n\t\t\t(Number(formValues?.shipping_cost) || 0) +\n\t\t\t(Number(formValues?.shipping_tax_amount) || 0);\n\t\tconst handlingAmount =\n\t\t\t(Number(formValues?.handling_cost) || 0) +\n\t\t\t(Number(formValues?.handling_tax_amount) || 0);\n\n\t\tconst shippingAmountWithERate = shippingAmount / eRate;\n\t\tconst handlingAmountWithERate = handlingAmount / eRate;\n\t\tconst promotionAmountWithERate = Number(formValues?.promotion_amount || 0) / eRate;\n\t\tfinalAmount = (finalAmount) - promotionAmountWithERate\n const grandTotal = (finalAmount + shippingAmountWithERate + handlingAmountWithERate) - promotionAmountWithERate\n\t\tsetItemsData({\n\t\t\t...itemsData,\n\t\t\ttotalQuantity,\n\t\t\ttotal: finalAmount.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetDiscountData({\n\t\t\t...discountData,\n\t\t\titemDiscount: totalItemsExpenseDiscount.toFixed(2),\n\t\t\tadditionalDiscount: Number(additinoalDiscountAmount).toFixed(2),\n\t\t\ttotalDiscount: (totalDiscount + promotionAmountWithERate).toFixed(2),\n\t\t\tpromotionAmount: promotionAmountWithERate.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetSubtotalData({\n\t\t\t...subtotalData,\n\t\t\tsubtotalExTax: (finalAmount - totalTaxAmount).toFixed(2),\n\t\t\tsubtotalExDiscount: Number(finalAmount + Number(totalDiscount)).toFixed(\n\t\t\t\t2\n\t\t\t),\n\t\t\tcurrencySymbol\n\t\t});\n\n\t\tsetTaxesData({\n\t\t\t...taxesData,\n\t\t\ttaxes: totalTaxAmount.toFixed(2),\n\t\t\ttotal: totalTaxAmount.toFixed(2),\n\t\t\tshippingAmount: shippingAmountWithERate.toFixed(2),\n\t\t\thandlingAmount: handlingAmountWithERate.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetTotalData({\n\t\t\t...totalData,\n\t\t\ttotal: grandTotal.toFixed(2),\n\t\t\troundOffDifferenceAmount: roundOffDifference.toFixed(2),\n\t\t\tcurrencySymbol,\n\t\t});\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\titems,\n\t\tformValues?.additional_discount_amount,\n\t\tformValues?.additional_discount_on,\n\t\tformValues?.additional_discount_percentage,\n\t\tformValues?.currency_id,\n\t\tformValues?.round_off,\n\t\tformValues?.round_off_option,\n\t\tformValues?.shipping_cost,\n\t\tformValues?.shipping_tax_amount,\n\t\tformValues?.handling_cost,\n\t\tformValues?.handling_tax_amount,\n\t\tformValues?.promotion_amount,\n\t\tformValues?.exchange_rate,\n\t\tformValues?.currency_data,\n\t\tdefaultCurrencySymbol\n\t]);\n\n\treturn (\n\t\t<Box className='addPurchaseInvoice--RightContainer'>\n\t\t\t<ItemsSummary data={itemsData} />\n\t\t\t<DiscountSummary\n\t\t\t\tdata={discountData}\n\t\t\t\tenalblePromotions={enalblePromotions}\n\t\t\t/>\n\t\t\t<SubtotalSummary data={subtotalData} />\n\t\t\t<TaxesAndChargesSummary\n\t\t\t\tdata={taxesData}\n\t\t\t\tenableShippings={enableShippings}\n\t\t\t/>\n\t\t\t<TotalSummary data={totalData} />\n\t\t</Box>\n\t);\n};\n\nexport default CalculationSummary;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { useState } from \"react\";\n\nimport FullCalendar from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport listPlugin from \"@fullcalendar/list\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport resourceTimeGridPlugin from \"@fullcalendar/resource-timegrid\";\nimport timelinePlugin from \"@fullcalendar/timeline\";\nimport resourceTimelinePlugin from \"@fullcalendar/resource-timeline\";\n\nimport \"./calendar.scss\";\n\n// import \"@fullcalendar/core/main.css\";\n// import \"@fullcalendar/daygrid/main.css\";\n\nexport const CalendarWrapper = (props: any) => {\n // const calendarComponentRef = React.createRef();\n\n const [data, setData] = useState(props.data);\n const handleDateClick = (arg: any) => {\n alert(arg.dateStr);\n };\n\n\n const handleSelectedDates = (info: any) => {\n alert(\"selected \" + info.startStr + \" to \" + info.endStr);\n const title = prompt(\"What's the name of the title\");\n if (title != null) {\n const newEvent = {\n title,\n start: info.startStr,\n end: info.endStr,\n };\n const events = [...data.events, newEvent];\n setData({ events: events });\n }\n };\n\n return (\n <div className=\"calendar-wrapper\">\n <FullCalendar\n eventContent={props?.renderEventContent}\n schedulerLicenseKey=\"GPL-My-Project-Is-Open-Source\"\n // ref={calendarComponentRef}\n initialView=\"dayGridMonth\" // timeGridWeek, listWeek, dayGridWeek, dayGridMonth, resourceTimeline, resourceTimeGridDay, timelineWeek\n // dateClick={handleDateClick}\n droppable={true}\n displayEventTime={true}\n headerToolbar={{\n left: \"title\",\n right: \"prev,next,today\",\n // center: \"dayGridMonth,timeGridWeek,timeGridDay,listWeek\",\n }}\n buttonText={{\n today: 'Today' // Custom label with \"T\" capitalized\n }}\n selectable={true}\n plugins={[\n dayGridPlugin,\n interactionPlugin,\n timeGridPlugin,\n resourceTimeGridPlugin,\n timelinePlugin,\n listPlugin,\n resourceTimelinePlugin,\n ]}\n eventClick={(event) => {\n }}\n events={data.events}\n select={props?.handleSelectedDates}\n // eventLimit={2}\n dayMaxEvents={2}\n showNonCurrentDates={false}\n height=\"75vh\"\n eventColor={\"#\" + Math.floor(Math.random() * 16777215).toString(16)}\n />\n </div>\n );\n};\n\nexport default CalendarWrapper;\n","import { Box } from '@mui/material';\nimport Typography from '../typography/typography';\nimport './chartLegend.scss';\ninterface IProps {\n\tlegends: string[];\n\tcolors: string[];\n}\nexport function ChartLegends({ legends, colors }: IProps) {\n\treturn (\n\t\t<Box\n\t\t\tsx={{\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\talignContent: 'space-between'\n\t\t\t}}>\n\t\t\t{legends.map((legend, index) => (\n\t\t\t\t<div style={{ marginLeft: '20px', display: 'flex' }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName='legends-circle'\n\t\t\t\t\t\tstyle={{ backgroundColor: colors[index] }}></div>\n\t\t\t\t\t<Typography type='s5' sx={{ color: '#656669' }}>\n\t\t\t\t\t\t{legend}\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</Box>\n\t);\n}\n\nexport default ChartLegends\n","import { Box, Card, CardContent, IconButton, MenuItem } from '@mui/material';\nimport React, { useState } from 'react';\nimport Typography, { ITypography } from '../../typography/typography';\nimport { MoreIcon } from '../../icons';\nimport { formatDate } from '../../../utils/dateFormat';\n// import Chip from '../../chip/chip';\nimport Menu from '../../menu/menu';\n\ninterface CustomGridCardProps {\n\ttitle: React.ReactNode | string;\n\tsubTitle?: React.ReactNode | string;\n\tchildren?: React.ReactNode | string;\n\ttitleProps?: ITypography;\n\tdata: Record<any, any>;\n\trowActionMenu: any[];\n\tdestructiveActionMenu: any[];\n}\n\nconst CustomGridCard: React.FC<CustomGridCardProps> = ({\n\ttitle,\n\tsubTitle,\n\tchildren,\n\tdata,\n\trowActionMenu,\n\tdestructiveActionMenu\n}) => {\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<HTMLElement | null>(null);\n\tconst [row, setRow] = useState<[] | null>(null);\n\n\tconst handleMenuOpen = (\n\t\te: React.MouseEvent<HTMLButtonElement>,\n\t\tcurrencyRow: []\n\t) => {\n\t\tsetRow(currencyRow);\n\t\tsetRowAnchorEl(e.currentTarget);\n\t};\n\n\treturn (\n\t\t<Card\n\t\t\tsx={{\n\t\t\t\twidth: '16.625rem',\n\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\tborder: '0.5px solid #eeeff1',\n\t\t\t\t// backgroundColor: 'theme.secondary.100',\n\t\t\t\tboxShadow: `\n 0px 0px 2px 0px #e0e0e0,\n 0px 1px 4px -2px rgba(24, 39, 75, 0.02),\n 0px 4px 4px -2px rgba(24, 39, 75, 0.06);`\n\t\t\t\t// m: 3\n\t\t\t}}>\n\t\t\t<CardContent\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tpadding: '1rem 1rem 1.25rem 1rem',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\tflexShrink: 0\n\t\t\t\t}}>\n\t\t\t\t{/* Title & More Button */}\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\talignItems: 'flex-start'\n\t\t\t\t\t\t// marginBottom: 1\n\t\t\t\t\t}}>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tcolor='inherit'\n\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\tonClick={(e) => handleMenuOpen(e, data)}>\n\t\t\t\t\t\t<MoreIcon\n\t\t\t\t\t\t\tsx={{ transform: 'rotate(90deg)' }}\n\t\t\t\t\t\t\torient='vertical'\n\t\t\t\t\t\t\tfontSize='small'\n\t\t\t\t\t\t/>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t{/* Sub Title */}\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\t{subTitle}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{children}\n\t\t\t\t{data?.created_at && (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\t\tCreated On {formatDate(data?.created_at, 'DD MMM, YYYY')}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{/* Action Menu */}\n\t\t\t<Menu\n\t\t\t\tanchorEl={rowAnchorEl}\n\t\t\t\topen={Boolean(rowAnchorEl)}\n\t\t\t\tonClose={() => setRowAnchorEl(null)}>\n\t\t\t\t<Box>\n\t\t\t\t\t{rowActionMenu.map((item) => (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\trow && item.handleAction(row);\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\n\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t\t<Box className='dropdown-inner--DestructiveHeader'>\n\t\t\t\t\t{destructiveActionMenu.map((item) => (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\trow && item.handleAction(row);\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'>\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</Menu>\n\t\t</Card>\n\t);\n};\n\nexport default CustomGridCard;\n","import { Box } from \"@mui/material\"\nimport './dashboard.scss'\nimport Typography from \"../typography/typography\"\nimport logo from '../../assets/images'\ninterface Iprops {\n title?: string,\n value?: string | number\n}\nfunction DashBoardCard(props: Iprops) {\n const { title, value } = props\n return (\n <>\n <Box className='card-class'>\n <Box p={2} sx={{ display: 'flex', flexDirection: 'column', border: '1px solid', borderRadius: '8px', gap: 1, borderColor: '#EEEFF1' }}>\n <Box className='dashboard-card-icon'>\n <img src={logo.ArrowCircleUpIcon} />\n\n </Box>\n <Typography type=\"s5\" weight=\"normal\" color=\"theme.neutral.800\">{title}</Typography>\n <Typography type=\"h2\" weight=\"bold\" color=\"theme.neutral.1000\">{value}</Typography>\n </Box>\n </Box>\n </>\n )\n}\n\n\nexport { DashBoardCard };\nexport default DashBoardCard","\nimport Typography from \"../typography/typography\";\nimport Chip from \"../chip/chip\";\nimport images from '../../assets/images';\nimport { useState } from \"react\";\nimport { IconButton, MenuItem } from '@mui/material';\nimport Menu from '../menu/menu';\nimport { useTranslation } from 'react-i18next';\nconst DashBoardHeader = ({ title, customElement, showEdit = true, showDropDowan = true }) => {\n const { t } = useTranslation();\n //Local State\n const [isEditingMode, setIsEditingMode] = useState<boolean>(false);\n const [anchorMoreEl, setAnchorMoreEl] = useState<\n null | (EventTarget & HTMLButtonElement)\n >(null);\n\n\n\n\n const handleMoreIconClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorMoreEl(event.currentTarget);\n };\n\n const handleMoreIconClose = () => {\n setAnchorMoreEl(null);\n };\n\n // const handleConfirm = () => {\n // setIsDiscardModalOpen(false);\n // setIsEditingMode(false);\n // };\n\n // const handleSaveChange = (event: SelectChangeEvent<unknown>) => {\n // setIsEditingMode(false);\n // };\n return (\n <div>\n <div className='header-title'>\n <Typography type='h3' weight={'medium'} color={'theme.secondary.1000'}>\n {title}\n </Typography>\n <div className='header-right-wrap'>\n\n {customElement}\n {showEdit && <Chip\n type='normal'\n label={isEditingMode ? t('manufacturing.dashboard.editing_dashboard_mode_label') : t('manufacturing.dashboard.edit_layout_mode_label')}\n className={`${isEditingMode ? 'edit-box' : 'edit-box edit-box--InActive'\n }`}\n icon={\n <img\n src={isEditingMode ? images.common.editIcon : images.edit}\n alt={t('common.edit')}\n />\n }\n onClick={() => setIsEditingMode(true)}\n active={isEditingMode}\n />\n }\n {\n showDropDowan && <div>\n <IconButton\n color='inherit'\n size='small'\n onClick={handleMoreIconClick}>\n <img src={images.more} alt={t('manufacturing.dashboard.more_icon_label')} />\n </IconButton>\n <Menu\n anchorEl={anchorMoreEl}\n open={Boolean(anchorMoreEl)}\n onClose={handleMoreIconClose}\n className='dropdown-inner calender-drp'>\n <MenuItem onClick={handleMoreIconClose}>{t('common.export')}</MenuItem>\n </Menu>\n </div>\n }\n </div>\n </div>\n </div>\n );\n};\n\nexport { DashBoardHeader };\nexport default DashBoardHeader;\n","/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { Grid, GridProps, useMediaQuery, useTheme } from '@mui/material';\nimport ExpandableSummaryWrapper, { ExpandableSummaryWrapperProps } from '../expandable-summary-wrapper/expandable-summary-wrapper';\n// import { ExpandableSummaryWrapper, ExpandableSummaryWrapperProps } from './ExpandableSummaryWrapper';\n\ninterface DynamicLayoutWrapperProps {\n // Main content props\n children: React.ReactNode;\n mainContentProps?: Omit<GridProps, 'item' | 'xs'>;\n \n // Summary wrapper props\n summaryContent: React.ReactNode;\n summaryProps?: Omit<ExpandableSummaryWrapperProps, 'children' | 'onToggle'>;\n \n // Layout configuration\n maxGridSize?: number;\n defaultSummaryExpanded?: boolean;\n expandedSummarySize?: number;\n collapsedSummarySize?: number;\n \n // Container props\n containerProps?: Omit<GridProps, 'container'>;\n \n // Callbacks\n onLayoutChange?: (mainSize: number, summarySize: number, isExpanded: boolean) => void;\n \n // Animation configuration\n enableTransitions?: boolean;\n transitionDuration?: number | string;\n transitionEasing?: string;\n\n storageKey?: string\n}\n\nexport const DynamicLayoutWrapper: React.FC<DynamicLayoutWrapperProps> = ({\n children,\n mainContentProps = {},\n summaryContent,\n summaryProps = {},\n maxGridSize = 12,\n defaultSummaryExpanded = true,\n expandedSummarySize = 3,\n collapsedSummarySize = 0,\n containerProps = {},\n onLayoutChange,\n enableTransitions = true,\n transitionDuration,\n transitionEasing,\n storageKey = 'grid-summary-panel-state',\n}) => {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n const getInitialState = useCallback(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n return stored ? JSON.parse(stored) : defaultSummaryExpanded;\n }\n return defaultSummaryExpanded;\n }, [defaultSummaryExpanded, storageKey]);\n \n // Calculate initial main content size\n const initialMainSize = useMemo(() => {\n return (isMobile || !getInitialState()) ? maxGridSize :(defaultSummaryExpanded \n ? maxGridSize - expandedSummarySize \n : maxGridSize - collapsedSummarySize);\n }, [isMobile, getInitialState, maxGridSize, defaultSummaryExpanded, expandedSummarySize, collapsedSummarySize]);\n \n const [mainContentSize, setMainContentSize] = useState<number>(initialMainSize);\n \n // Handle summary toggle with enhanced logic\n const handleSummaryToggle = useCallback((isExpanded: boolean, summaryGridSize: number) => {\n if(isMobile) {\n setMainContentSize(maxGridSize);\n return \n }\n const newMainContentSize = Math.max(1, Math.min(maxGridSize - summaryGridSize, maxGridSize));\n \n setMainContentSize(newMainContentSize);\n \n // Notify parent component of layout changes\n onLayoutChange?.(newMainContentSize, summaryGridSize, isExpanded);\n }, [isMobile, maxGridSize, onLayoutChange]);\n \n // Create transition styles\n const transitionStyles = useMemo(() => {\n if (!enableTransitions) return {};\n \n const duration = transitionDuration || theme.transitions.duration.enteringScreen;\n const easing = transitionEasing || theme.transitions.easing.sharp;\n \n return {\n transition: theme.transitions.create(['flex-basis', 'max-width'], {\n easing,\n duration,\n }),\n };\n }, [enableTransitions, theme, transitionDuration, transitionEasing]);\n \n // Merge summary props with defaults\n const mergedSummaryProps: ExpandableSummaryWrapperProps = {\n defaultExpanded: defaultSummaryExpanded,\n expandedGridSize: expandedSummarySize,\n collapsedGridSize: collapsedSummarySize,\n persistState: true,\n ariaLabel: 'Toggle summary panel',\n ...summaryProps,\n onToggle: handleSummaryToggle,\n children: summaryContent,\n storageKey: storageKey\n };\n \n return (\n <Grid container {...containerProps}>\n <Grid\n item\n xs={mainContentSize}\n sx={{\n ...transitionStyles,\n ...mainContentProps.sx,\n }}\n {...mainContentProps}\n >\n {children}\n </Grid>\n \n <ExpandableSummaryWrapper {...mergedSummaryProps} />\n </Grid>\n );\n};\n\n// Enhanced version with additional features\ninterface AdvancedDynamicLayoutWrapperProps extends DynamicLayoutWrapperProps {\n // Responsive breakpoints\n responsiveConfig?: {\n xs?: { expandedSize: number; collapsedSize: number };\n sm?: { expandedSize: number; collapsedSize: number };\n md?: { expandedSize: number; collapsedSize: number };\n lg?: { expandedSize: number; collapsedSize: number };\n xl?: { expandedSize: number; collapsedSize: number };\n };\n \n // Multiple summary panels support\n multipleSummaries?: Array<{\n content: React.ReactNode;\n props?: Omit<ExpandableSummaryWrapperProps, 'children' | 'onToggle'>;\n id: string;\n }>;\n \n // Layout modes\n layoutMode?: 'horizontal' | 'vertical' | 'adaptive';\n \n // Minimum sizes\n minMainContentSize?: number;\n minSummarySize?: number;\n}\n\nexport const AdvancedDynamicLayoutWrapper: React.FC<AdvancedDynamicLayoutWrapperProps> = ({\n multipleSummaries = [],\n layoutMode = 'horizontal',\n minMainContentSize = 4,\n minSummarySize = 2,\n responsiveConfig,\n ...baseProps\n}) => {\n const [summaryStates, setSummaryStates] = useState<Record<string, { size: number; expanded: boolean }>>({});\n \n // Calculate total summary size\n const totalSummarySize = useMemo(() => {\n return Object.values(summaryStates).reduce((total, state) => total + state.size, 0);\n }, [summaryStates]);\n \n // Enhanced toggle handler for multiple summaries\n const handleMultipleSummaryToggle = useCallback((\n summaryId: string,\n isExpanded: boolean,\n summaryGridSize: number\n ) => {\n setSummaryStates(prev => {\n const newStates = {\n ...prev,\n [summaryId]: { size: summaryGridSize, expanded: isExpanded }\n };\n \n const newTotalSize = Object.values(newStates).reduce((total, state) => total + state.size, 0);\n const newMainSize = Math.max(\n minMainContentSize,\n Math.min(baseProps.maxGridSize! - newTotalSize, baseProps.maxGridSize!)\n );\n \n baseProps.onLayoutChange?.(newMainSize, newTotalSize, isExpanded);\n \n return newStates;\n });\n }, [baseProps, minMainContentSize]);\n \n // If multiple summaries are provided, render advanced layout\n if (multipleSummaries.length > 0) {\n const mainSize = Math.max(\n minMainContentSize,\n (baseProps.maxGridSize || 12) - totalSummarySize\n );\n \n return (\n <Grid container {...baseProps.containerProps}>\n <Grid\n item\n xs={mainSize}\n sx={{\n transition: baseProps.enableTransitions ? \n `all ${baseProps.transitionDuration || 300}ms ${baseProps.transitionEasing || 'ease-in-out'}` : \n undefined,\n ...baseProps.mainContentProps?.sx,\n }}\n {...baseProps.mainContentProps}\n >\n {baseProps.children}\n </Grid>\n \n {multipleSummaries.map((summary) => (\n <ExpandableSummaryWrapper\n key={summary.id}\n {...summary.props}\n onToggle={(isExpanded, size) => \n handleMultipleSummaryToggle(summary.id, isExpanded, size)\n }\n >\n {summary.content}\n </ExpandableSummaryWrapper>\n ))}\n </Grid>\n );\n }\n \n // Fallback to basic layout\n return <DynamicLayoutWrapper {...baseProps} />;\n};\n\n// Hook for managing layout state externally\nexport const useDynamicLayout = (\n maxGridSize: number = 12,\n defaultSummaryExpanded: boolean = true,\n expandedSize: number = 3,\n collapsedSize: number = 0\n) => {\n const [isExpanded, setIsExpanded] = useState(defaultSummaryExpanded);\n const [summarySize, setSummarySize] = useState(\n defaultSummaryExpanded ? expandedSize : collapsedSize\n );\n const [mainSize, setMainSize] = useState(\n maxGridSize - (defaultSummaryExpanded ? expandedSize : collapsedSize)\n );\n \n const toggleSummary = useCallback(() => {\n const newExpanded = !isExpanded;\n const newSummarySize = newExpanded ? expandedSize : collapsedSize;\n const newMainSize = maxGridSize - newSummarySize;\n \n setIsExpanded(newExpanded);\n setSummarySize(newSummarySize);\n setMainSize(newMainSize);\n }, [isExpanded, expandedSize, collapsedSize, maxGridSize]);\n \n const setSummaryState = useCallback((expanded: boolean) => {\n const newSummarySize = expanded ? expandedSize : collapsedSize;\n const newMainSize = maxGridSize - newSummarySize;\n \n setIsExpanded(expanded);\n setSummarySize(newSummarySize);\n setMainSize(newMainSize);\n }, [expandedSize, collapsedSize, maxGridSize]);\n \n return {\n isExpanded,\n summarySize,\n mainSize,\n toggleSummary,\n setSummaryState,\n };\n};\n\n// Utility function for calculating optimal sizes\nexport const calculateOptimalSizes = (\n totalSize: number,\n contentRatio: number = 0.75,\n minContentSize: number = 4,\n minSummarySize: number = 2\n) => {\n const idealContentSize = Math.floor(totalSize * contentRatio);\n const idealSummarySize = totalSize - idealContentSize;\n \n const contentSize = Math.max(minContentSize, idealContentSize);\n const summarySize = Math.max(minSummarySize, Math.min(idealSummarySize, totalSize - contentSize));\n \n return {\n contentSize: Math.min(contentSize, totalSize - summarySize),\n summarySize,\n totalUsed: contentSize + summarySize,\n };\n};\n\nexport default DynamicLayoutWrapper;","import {\n\tDialogActions,\n\tDialogContent,\n\tDialogTitle,\n\tIconButton\n} from '@mui/material';\nimport Modal from './modal/modal';\nimport Button from './button/button';\nimport Close from '@mui/icons-material/Close';\nimport Typography from './typography/typography';\nimport { useTranslation } from 'react-i18next';\n\nexport const DynamicModal = ({\n\topen,\n\tonClose,\n\ttitle,\n\tchildren,\n\thandleSaveAction,\n\tbuttons = [],\n\t...rest\n}: {\n\topen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren?: React.ReactNode;\n\tbuttons?: any[];\n\thandleSaveAction?: () => void;\n}) => {\n\tconst { t } = useTranslation();\n\tconst actionButtons = buttons.length\n\t\t? [...buttons]\n\t\t: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('common.cancel'),\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t\tvariant: 'outlined',\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tcolor: 'black !important'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t...(handleSaveAction\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: t('common.save'),\n\t\t\t\t\t\t\t\tonClick: handleSaveAction,\n\t\t\t\t\t\t\t\tvariant: 'contained',\n\t\t\t\t\t\t\t\tcolor: 'primary'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: [])\n\t\t\t];\n\treturn (\n\t\t<Modal\n\t\t\topen={open}\n\t\t\tonClose={onClose}\n\t\t\taria-labelledby='alert-dialog-title'\n\t\t\taria-describedby='alert-dialog-description'\n\t\t\tfullWidth\n\t\t\t{...rest}>\n\t\t\t<DialogTitle\n\t\t\t\tid='alert-dialog-title'\n\t\t\t\tclassName='itemEntryModal--DialogTitle'>\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\n\t\t\t\t\t{t(title)}\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton onClick={onClose}>\n\t\t\t\t\t<Close fontSize='small' />\n\t\t\t\t</IconButton>\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>{children}</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t{actionButtons.map((button, index) => (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t...button.sx\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tonClick={button.onClick}\n\t\t\t\t\t\tvariant={button.variant}\n\t\t\t\t\t\tcolor={button.color}>\n\t\t\t\t\t\t{button.label}\n\t\t\t\t\t</Button>\n\t\t\t\t))}\n\t\t\t</DialogActions>\n\t\t</Modal>\n\t);\n};\n\nexport default DynamicModal\n","import React, { useEffect, useState } from 'react';\nimport { useParams, useLocation, useNavigate } from 'react-router-dom';\nimport { getEntityId } from '../../utils/navigation-utils';\nimport ErpLoader from '../loaders/erp-loader';\n\ninterface EntityViewWrapperProps<T> {\n /**\n * Function to fetch entity data by ID\n */\n fetchEntity: (id: string) => Promise<T>;\n \n /**\n * Route to navigate to if entity is not found\n */\n fallbackRoute: string;\n \n /**\n * Component to render with entity data\n */\n children: (entity: T) => React.ReactNode;\n \n /**\n * Optional ID field name in location.state (default: 'id')\n */\n idField?: string;\n}\n\n/**\n * A wrapper component that handles fetching entity data using either URL parameters or location state\n * This provides backward compatibility during migration from state-based to URL parameter-based routing\n */\nfunction EntityViewWrapper<T>({\n fetchEntity,\n fallbackRoute,\n children,\n idField = 'id'\n}: EntityViewWrapperProps<T>) {\n const params = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n \n const [entity, setEntity] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n \n useEffect(() => {\n const loadEntity = async () => {\n setLoading(true);\n \n // Get entity ID from URL params or location state\n const entityId = getEntityId(params, location, idField);\n \n if (!entityId) {\n // If no ID is found, navigate to fallback route\n navigate(fallbackRoute);\n return;\n }\n \n try {\n // Fetch entity data\n const data = await fetchEntity(entityId);\n setEntity(data);\n } catch (error) {\n console.error('Error fetching entity:', error);\n // If entity is not found, navigate to fallback route\n navigate(fallbackRoute);\n } finally {\n setLoading(false);\n }\n };\n \n loadEntity();\n }, [fetchEntity, params, location, navigate, fallbackRoute, idField]);\n \n if (loading) {\n return <ErpLoader />;\n }\n \n if (!entity) {\n return null;\n }\n \n return <>{children(entity)}</>;\n}\n\nexport default EntityViewWrapper; ","import { Gantt, Task, ViewMode } from \"gantt-task-react\";\nimport \"gantt-task-react/dist/index.css\";\nimport \"./gantt.scss\";\nimport { useState } from \"react\";\nimport useTheme from \"@mui/material/styles/useTheme\";\n\ninterface GanttDataProps {\n data: Task[];\n showList?: boolean;\n progressChange?: boolean;\n dateChange?: boolean;\n}\n\nconst GanttChart = (props: GanttDataProps) => {\n const { data, showList, progressChange, dateChange } = props;\n const theme = useTheme();\n const tasks: Task[] = data;\n const [task, setTask] = useState<Task[]>(tasks);\n\n const taskProgressColor = theme?.palette?.theme?.tertiary6[300];\n const taskBackgroundColor = theme?.palette?.theme?.tertiary6[200];\n const milestoneColor = theme?.palette?.theme?.tertiary4[700];\n const projectProgressColor = theme?.palette?.theme?.tertiary3[400];\n const projectBackgroundColor = theme?.palette?.theme?.tertiary3[300];\n const todayColor = theme?.palette?.theme?.tertiary5[400];\n\n const handleProgressChange = (updatedTask: Task) => {\n if (progressChange) {\n const taskIndex = tasks.findIndex((task) => task.id === updatedTask.id);\n\n const updatedTasks = [...tasks];\n updatedTasks[taskIndex] = updatedTask;\n\n setTask(updatedTasks);\n }\n };\n\n const handleDateChange = (updatedTask: Task) => {\n if (dateChange) {\n const taskIndex = tasks.findIndex((task) => task.id === updatedTask.id);\n\n const updatedTasks = [...tasks];\n updatedTasks[taskIndex] = updatedTask;\n\n setTask(updatedTasks);\n }\n };\n\n const handleExpanderClick = (clickedTask: Task) => {\n setTask((prevTasks: Task[]) =>\n prevTasks.map((task) =>\n task.id === clickedTask.id ? clickedTask : task,\n ),\n );\n };\n\n return (\n <Gantt\n tasks={task}\n viewMode={ViewMode.Day}\n listCellWidth={showList ? \"190px\" : \"\"}\n columnWidth={80}\n barCornerRadius={8}\n fontSize=\"12\"\n fontFamily=\"Inter\"\n onProgressChange={progressChange ? handleProgressChange : undefined}\n onDateChange={dateChange ? handleDateChange : undefined}\n barProgressColor={taskProgressColor}\n barProgressSelectedColor={taskProgressColor}\n barBackgroundColor={taskBackgroundColor}\n barBackgroundSelectedColor={taskBackgroundColor}\n milestoneBackgroundColor={milestoneColor}\n milestoneBackgroundSelectedColor={milestoneColor}\n projectBackgroundColor={projectBackgroundColor}\n projectBackgroundSelectedColor={projectBackgroundColor}\n projectProgressColor={projectProgressColor}\n projectProgressSelectedColor={projectProgressColor}\n todayColor={todayColor}\n onExpanderClick={handleExpanderClick}\n />\n );\n};\n\nexport { GanttChart };\nexport default GanttChart;\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport \"./schedule-report.scss\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\nimport Fallback from \"../fallback/fallback\";\r\nimport Button from \"../button/button\";\r\nimport MaterialTable from \"../material-table/material-table\";\r\nimport Toast from \"../toast/toast\";\r\n\r\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\r\nimport logo from \"../../assets/images\";\r\nimport { Box, IconButton } from \"@mui/material\";\r\nimport { Edit, Trash } from \"../icons\";\r\n\r\nimport ScheduleReportModal from \"../schedule-report/schedule-report-modal\";\r\nimport { getErrorMessage, getToken } from \"../../utils/common\";\r\nimport { ScheduleReportRow } from \"./utils/type\"\r\nimport { columns } from \"./utils/constant\"\r\nimport ErpLoader from \"../loaders/erp-loader\";\r\nimport Typography from \"../typography/typography\";\r\nimport Footer from \"../footer/footer\";\r\nimport { transformTableColumns } from \"../../utils/common-utility\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Chip from \"../chip/chip\";\r\nimport { deleteScheduleReportType, getScheduleReportType } from \"./utils/common\";\r\ninterface IToast {\r\n type: \"normal\" | \"alert\";\r\n message: string;\r\n}\r\n\r\nconst GeneralScheduleReport = ({ module = 'accounting', title = 'Schedule report' }: { module: string, title: string }) => {\r\n\r\n //states\r\n const [pagination, setPagination] = useState<any>({\r\n pageNo: 1,\r\n limit: 10,\r\n totalCount: 0\r\n })\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [initialLoading, setInitialLoading] = useState<boolean>(true);\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n const [openScheduleModal, setOpenScheduleModal] =\r\n useState<ScheduleReportRow | null>(null);\r\n console.log(\"🚀 ~ GeneralScheduleReport ~ openScheduleModal:\", openScheduleModal)\r\n\r\n const [isDeleting, setIsDeleting] = useState<boolean>(false)\r\n const [scheduleReportToDelete, setScheduleReportToDelete] =\r\n useState<ScheduleReportRow | null>(null);\r\n\r\n const [tableRows, setRows] = useState<ScheduleReportRow[]>([])\r\n const limit = pagination?.limit;\r\n const total = limit ? Math.ceil(pagination?.totalCount / limit) : 0;\r\n const skip = limit * (pagination?.pageNo - 1) || 0\r\n const { t } = useTranslation()\r\n\r\n //transform table columns\r\n const renderEmails = (value: string | undefined | null) => {\r\n const emails = value?.split(',');\r\n return emails ? (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\r\n {emails.map((item: string) => (\r\n <Chip\r\n key={item}\r\n type='normal'\r\n label={\r\n <Typography type='s4' weight='medium' color={'inherit'}>\r\n {item}\r\n </Typography>\r\n }\r\n />\r\n ))}\r\n </Box>\r\n ) : '-';\r\n };\r\n\r\n const tableColumns = useMemo(\r\n () =>\r\n transformTableColumns({\r\n columns: columns,\r\n currencySymbol: undefined,\r\n translationFn: t,\r\n enableFooter: true,\r\n redirectionLink: undefined,\r\n redirectionLinkState: undefined,\r\n rows: tableRows,\r\n statusClasses: `scheduleReport--StatusChip--`,\r\n customizeValue: (row, columnAccessorKey, value) => {\r\n switch (columnAccessorKey) {\r\n case 'emails':\r\n return renderEmails(value);\r\n // Add other cases here if needed\r\n default:\r\n return value;\r\n }\r\n },\r\n }),\r\n //eslint-disable-next-line\r\n [columns, tableRows, t]\r\n );\r\n\r\n const getScheduleReport = useCallback(\r\n async () => {\r\n try {\r\n setIsLoading(true)\r\n const { data = {}, pagination: paginationData } = await getScheduleReportType({\r\n ...getToken(),\r\n skip,\r\n limit,\r\n filters: `(type.eq=${module})`,\r\n })\r\n setRows(data?.schedulers)\r\n setPagination(prev => ({ ...prev, ...paginationData }))\r\n\r\n } catch (error) {\r\n const errorMessage = getErrorMessage(error?.message)\r\n setToast({\r\n type: \"alert\",\r\n message: errorMessage,\r\n })\r\n } finally {\r\n setIsLoading(false)\r\n setInitialLoading(false)\r\n }\r\n //eslint-disable-next-line\r\n },\r\n [limit, skip, module, setPagination]\r\n );\r\n\r\n const handleScheduleReportDelete = async () => {\r\n try {\r\n if (scheduleReportToDelete) {\r\n setIsDeleting(true)\r\n await deleteScheduleReportType({\r\n ...getToken(),\r\n id: scheduleReportToDelete.id\r\n })\r\n setToast({\r\n type: \"normal\",\r\n message: \"Report schedule deleted successfully\",\r\n });\r\n getScheduleReport();\r\n setScheduleReportToDelete(null);\r\n }\r\n } catch (error) {\r\n const errorMessage = getErrorMessage(error?.message)\r\n setToast({\r\n type: \"alert\",\r\n message: errorMessage,\r\n })\r\n } finally {\r\n setIsDeleting(false)\r\n }\r\n };\r\n\r\n const handleUpdate = useCallback(async () => {\r\n getScheduleReport();\r\n //eslint-disable-next-line\r\n }, []);\r\n\r\n\r\n\r\n useEffect(() => {\r\n getScheduleReport();\r\n }, [getScheduleReport]);\r\n\r\n\r\n\r\n const handleAddButton = () => setOpenScheduleModal(true);\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n setPagination(model)\r\n }\r\n\r\n return (\r\n <section className=\"scheduleReport\">\r\n\r\n <Box p={2} display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\r\n <Typography type=\"h3\" weight=\"bold\" color={'inherit'}>{title}</Typography>\r\n {/* <Button\r\n variant=\"outlined\"\r\n className=\"scheduleReport__addBtn\"\r\n startIcon={<Add />}\r\n onClick={handleAddButton}\r\n >Schedule Report</Button> */}\r\n </Box>\r\n\r\n {initialLoading ? (\r\n <ErpLoader />\r\n ) : (\r\n <>\r\n {tableRows?.length > 0 ? (\r\n <>\r\n <MaterialTable\r\n rows={tableRows || []}\r\n columns={tableColumns}\r\n totalPages={0}\r\n columnOrder={[\"mrt-row-select\"]}\r\n states={{ isLoading }}\r\n enableColumnDragging={true}\r\n enableEditing={false}\r\n isResetRow={false}\r\n enableRowSelection={false}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n defaultActionColumnItems={[\r\n <IconButton\r\n onClick={({ row }: any) =>\r\n setOpenScheduleModal(row?.original)\r\n }\r\n >\r\n <Edit fontSize=\"small\" htmlColor=\"#292D32\" />\r\n </IconButton>,\r\n <IconButton\r\n onClick={({ row }: any) =>\r\n setScheduleReportToDelete(row?.original)\r\n }\r\n >\r\n <Trash fontSize=\"small\" htmlColor=\"#292D32\" />\r\n </IconButton>,\r\n ]}\r\n />\r\n <Footer\r\n total={total}\r\n paginationModel={{\r\n ...pagination,\r\n limit: pagination?.limit\r\n }}\r\n handlePaginationModel={handlePaginationModel}\r\n resource='purchase-request'\r\n enablePages={false}\r\n />\r\n </>\r\n ) : (\r\n <>\r\n {!tableRows.length && (\r\n <Fallback\r\n heading=\"No schedule report\"\r\n subHeading=\"Add schedule report\"\r\n icon={<img src={logo.reportsFallback} />}\r\n >\r\n <Button\r\n variant=\"contained\"\r\n startIcon={<Add />}\r\n onClick={handleAddButton}\r\n >\r\n Add\r\n </Button>\r\n </Fallback>\r\n )}\r\n </>\r\n )}\r\n </>\r\n )}\r\n\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n />\r\n\r\n <ScheduleReportModal\r\n isOpen={Boolean(openScheduleModal)}\r\n onClose={() => setOpenScheduleModal(null)}\r\n itemData={openScheduleModal}\r\n onSubmit={handleUpdate}\r\n module={module}\r\n />\r\n\r\n\r\n\r\n <ConfirmPopUp\r\n open={Boolean(scheduleReportToDelete)}\r\n onClose={() => setScheduleReportToDelete(null)}\r\n onConfirm={handleScheduleReportDelete}\r\n title=\"Delete schedule report\"\r\n loading={isDeleting}\r\n description={`Are you sure you want to delete schedule report: ${scheduleReportToDelete?.name} ?`}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport { GeneralScheduleReport };\r\nexport default GeneralScheduleReport;\r\n","import Typography from \"../typography/typography\";\nimport { Box } from \"@mui/material\";\nimport \"./grid-fallback.scss\";\nimport logo from '../../assets/images';\n\ninterface GridFallbackProps {\n heading?: string;\n subHeading?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst GridFallback = (props: GridFallbackProps) => {\n const { heading = '', subHeading = 'No data available', icon = <img src={logo.invoiceFallback} />, children, ...rest } = props;\n return (\n <Box className=\"fallback\" {...rest}>\n {icon}\n <Typography\n type=\"h5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n className=\"fallback--Text\"\n >\n {heading}\n </Typography>\n <Typography\n type=\"s3\"\n weight=\"medium\"\n color=\"theme.secondary.800\"\n className=\"fallback--Text\"\n >\n {subHeading}\n </Typography>\n <div>{children}</div>\n </Box>\n );\n};\n\nexport { GridFallback };\nexport default GridFallback;\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport { useAuth } from '../../../hooks/useAuth';\n\nexport interface IGroupChartProps {\n chartData: any[],\n height?: number,\n margin?: any,\n barWidth?: number,\n line?: boolean\n}\n\nconst formatNumber = (num: number, symbol) => {\n return `${symbol} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n};\n\nconst GroupedBarChart = ({ \n chartData, \n height = 500, \n barWidth = 40, \n margin = { top: 40, right: 20, bottom: 40, left: 50 }, \n line = false \n}: IGroupChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const maxValue = useMemo(() => Math.max(...chartData.map((d) => d.data.map(v=>v.value)).flat()), [chartData]);\n\n const needsHorizontalScroll = chartData.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(chartData.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n if (containerWidth === 0) return; \n \n const chartWidth = calculatedChartWidth - margin.left - margin.right;\n const chartHeight = maxValue ? height - margin.top - margin.bottom : 0;\n \n d3.select(svgRef.current).selectAll('*').remove();\n \n const svg = d3.select(svgRef.current)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${margin.left}, ${maxValue ? margin.top : height-50})`);\n\n const x0 = d3.scaleBand()\n .domain(chartData.map(d => d.month))\n .range([0, chartWidth])\n .padding(0.2);\n\n const x1 = d3.scaleBand()\n .domain(['Total Transaction', 'Total Value', 'Average Value'])\n .range([0, x0.bandwidth()])\n .padding(0.1);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(chartData, d => d3.max(d.data, data => data.value))])\n .nice()\n .range([chartHeight, 0]);\n\n const xAxis = svg.append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(0, ${chartHeight})`)\n .call(d3.axisBottom(x0).tickPadding(20));\n \n const yAxis = svg.append('g')\n .attr('class', 'y-axis')\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) => formatNumber(d, defaultCurrencySymbol)));\n\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n if (line) {\n svg.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '3,3') // Dotted line\n .style('stroke-width', 1);\n }\n\n const monthGroups = svg.selectAll('.month-group')\n .data(chartData)\n .enter()\n .append('g')\n .attr('class', 'month-group')\n .attr('transform', d => `translate(${x0(d.month)}, 0)`);\n\n monthGroups.selectAll('rect')\n .data(d => d.data)\n .enter()\n .append('rect')\n .attr('x', d => x1(d.type) + (x1.bandwidth() - barWidth) / 2)\n .attr('y', d => y(d.value))\n .attr('width', barWidth)\n .attr('height', d => chartHeight - y(d.value))\n .attr('fill', d => d.color)\n .attr('rx', 5)\n .attr('ry', 5);\n\n }, [chartData, barWidth, height, calculatedChartWidth, containerWidth, line, margin, defaultCurrencySymbol, maxValue]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport { GroupedBarChart };\nexport default GroupedBarChart;","import \"./hr-line.scss\";\n\nconst HrLine = (props: any) => {\n const { title } = props;\n\n return (\n <div className=\"HrLine\">\n <hr className=\"HrLine--Length\" />\n {title}\n <hr className=\"HrLine--Length\" />\n </div>\n );\n};\n\nexport { HrLine };\nexport default HrLine;\n","import { Close } from '@mui/icons-material';\nimport { Box, DialogTitle, Grid, IconButton } from '@mui/material';\nimport MaterialTable from '../material-table/material-table';\nimport Modal from '../modal/modal';\nimport Typography from '../typography/typography';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { enqueueSnackbar } from 'notistack';\nimport ModalLoader from '../loaders/modal-loader';\nimport { responseItemDetailsColumns } from '../../utils/constant';\nimport {\n\tfetchRentalResponseItems,\n\tfetchRfqItemsByIdForResponse,\n\tgetErrorMessage\n} from '../../utils/common';\nimport { transformTableColumns } from '../../utils/common-utility';\nexport const ItemResponseDetails = (props: any) => {\n\tconst { isOpen, onClose, data, isRental = false } = props;\n\tconst [responseItems, setResponseItems] = useState<any[]>([]);\n\tconst [isLoading, setIsLoading] = useState<boolean>(false);\n\tconst { t } = useTranslation();\n\n\tconst getResponseItems = useCallback(async () => {\n\t\tif (!isOpen) return;\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst filters = `(rfq_line_item_id.in=${[data?.id]})`;\n\t\t\tconst rfqResponseItems = isRental\n\t\t\t\t? await fetchRentalResponseItems(filters)\n\t\t\t\t: await fetchRfqItemsByIdForResponse(filters);\n\t\t\tsetResponseItems(rfqResponseItems);\n\t\t} catch (error) {\n\t\t\tconst errorMsg = getErrorMessage(error?.message);\n\t\t\tenqueueSnackbar(errorMsg, { variant: 'error' });\n\t\t} finally {\n\t\t\tsetTimeout(() => setIsLoading(false), 300);\n\t\t}\n\t}, [isOpen, data?.id, isRental]);\n\tuseEffect(() => {\n\t\tgetResponseItems();\n\t}, [getResponseItems]);\n\treturn (\n\t\t<Modal open={isOpen} onClose={onClose} maxWidth='md' fullWidth>\n\t\t\t{isLoading && <ModalLoader />}\n\t\t\t<DialogTitle className='itemEntryModal--DialogTitle'>\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\n\t\t\t\t\tResponse Details\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton onClick={onClose}>\n\t\t\t\t\t<Close fontSize='small' />\n\t\t\t\t</IconButton>\n\t\t\t</DialogTitle>\n\t\t\t<Grid container>\n\t\t\t\t<Grid item xs={4}>\n\t\t\t\t\t<Box sx={{ display: 'flex', padding: 2, flexDirection: 'column' }}>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tItem\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.neutral.1000'>\n\t\t\t\t\t\t\t{data?.item_data?.name}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\n\t\t\t<Grid container p={2} spacing={3}>\n\t\t\t\t<Grid item xs={12}>\n\t\t\t\t\t<Box sx={{ paddingTop: '1.2rem' }}>\n\t\t\t\t\t\t<MaterialTable\n\t\t\t\t\t\t\trows={responseItems || []}\n\t\t\t\t\t\t\tcolumns={transformTableColumns({\n\t\t\t\t\t\t\t\tcolumns: responseItemDetailsColumns,\n\t\t\t\t\t\t\t\tcurrencySymbol: undefined,\n\t\t\t\t\t\t\t\ttranslationFn: t,\n\t\t\t\t\t\t\t\tcustomizeValue: (row, columnAccessorKey, value) => {\n\t\t\t\t\t\t\t\t\tswitch (columnAccessorKey) {\n\t\t\t\t\t\t\t\t\t\tcase 'item_data.vendor_info.vendor_name':\n\t\t\t\t\t\t\t\t\t\t\treturn value || row?.original?.item_data?.name;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tpaginationModel={{ pageNo: 1, limit: 10 }}\n\t\t\t\t\t\t\ttotalPages={20}\n\t\t\t\t\t\t\tenableColumnDragging={true}\n\t\t\t\t\t\t\tisResetRow={false}\n\t\t\t\t\t\t\tenableEditing={false}\n\t\t\t\t\t\t\tcolumnOrder={['mrt-row-select']}\n\t\t\t\t\t\t\tenableRowSelection={false}\n\t\t\t\t\t\t\tdisabledDefaultActionColumnIcon\n\t\t\t\t\t\t\tenableBottomToolbar={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Modal>\n\t);\n};\n\nexport default ItemResponseDetails;\n","import { Typography } from \"../../components\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst LabelValue = ({\r\n key,\r\n label,\r\n children\r\n}: {\r\n key: string;\r\n label: string;\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <Box key={key} gap={1} flexDirection=\"column\" display=\"flex\">\r\n <Typography type=\"s3\" weight=\"bold\" color=\"theme.secondary.1000\">{label}</Typography>\r\n {children}\r\n </Box>\r\n )\r\n}\r\n\r\nexport { LabelValue };\nexport default LabelValue","import React, { useRef, useEffect, useMemo } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface LineChartProps {\n data: DataPoint[];\n numOfLines?: number;\n width?: number;\n height?: number;\n}\n\nconst formatNumber = (num: number) => {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num;\n};\n\nconst LineChart: React.FC<LineChartProps> = ({\n data,\n numOfLines = 5,\n width = 500,\n height = 300,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const maxValue = useMemo(() => {\n return Math.max(...data.map((d) => d.value));\n }, [data]);\n\n const yAxisMaxValue = useMemo(() => {\n return maxValue * 1.25;\n }, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n const needsHorizontalScroll = data.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minGroupWidth, width)\n : width;\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n useEffect(() => {\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = { top: 20, right: 20, bottom: 70, left: 40 };\n const barWidth = calculatedChartWidth - margin.left - margin.right;\n const barHeight = height - margin.top - margin.bottom;\n\n const mousemove = (event: any, d: any) => {\n\n const xPosition = event.offsetX + margin.left - 25;\n const yPosition = event.offsetY + margin.top - 40;\n const text = `${d.label} - ${d.value}`;\n tooltip\n .attr(\"x\", xPosition)\n .attr(\"y\", yPosition)\n .style(\"opacity\", 9)\n .style(\"height\", text.length >= 16 ? 50 : 35);\n\n tooltipText.html(text);\n };\n\n const mouseleave = () => {\n tooltip.style(\"opacity\", 0);\n };\n\n const x = d3\n .scaleBand()\n .domain(data.map((d: any) => d.label))\n .range([0, barWidth])\n .padding(0.1);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(data, (d: any) => d.value)])\n .range([barHeight, 0]);\n\n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const line = d3\n .line<DataPoint>()\n //@ts-expect-error not applicable\n .x((d: any) => x(d.label) + x.bandwidth() / 2)\n .y((d: any) => y(d.value));\n\n chart\n .append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line)\n .style(\"fill\", \"none\")\n .style(\"stroke\", \"#357AF6\")\n .style(\"stroke-width\", 2);\n\n chart\n .selectAll(\".point\")\n .data(data)\n .enter()\n .append(\"circle\")\n .attr(\"class\", \"point\")\n //@ts-expect-error not applicable\n .attr(\"cx\", (d: any) => x(d.label) + x.bandwidth() / 2)\n .attr(\"cy\", (d: any) => y(d.value))\n .attr(\"r\", 4)\n .style(\"fill\", \"#357AF6\")\n .on(\"mousemove\", mousemove)\n .on(\"mouseleave\", mouseleave);\n\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", width)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"gray\")\n .style(\"stroke-dasharray\", \"3,3\");\n });\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisBottom(x));\n\n xAxis.selectAll(\".tick line\").remove();\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3\n .axisLeft(y)\n .tickValues(yAxisTicks)\n //@ts-expect-error not applicable\n .tickFormat((d: any) => {\n return formatNumber(d);\n })\n .tickSizeOuter(0),\n 0,\n );\n\n yAxis.selectAll(\".domain\").remove();\n yAxis.selectAll(\".tick line\").remove();\n\n const tooltip = svg\n .append(\"foreignObject\")\n .attr(\"class\", \"tooltip\")\n .attr(\"width\", 120)\n .attr(\"height\", 20)\n .style(\"opacity\", 0)\n .style(\"position\", \"absolute\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"none\")\n .style(\"box-shadow\", \"0rem 0rem 0.469rem 0rem rgba(0, 0, 0, 0.15)\")\n .style(\"border-radius\", \"0.313rem\")\n .style(\"padding\", \"0.625rem\")\n .style(\"font-size\", \"0.75rem\");\n\n const tooltipText = tooltip\n .append(\"xhtml:div\")\n .style(\"font-size\", \"0.75rem\")\n .style(\"color\", \"black\");\n }, [data, height, width, yAxisMaxValue, yAxisTicks, calculatedChartWidth]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <svg \n ref={svgRef}\n width={calculatedChartWidth}\n height={height}\n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n />\n </div>\n );\n};\n\nexport default LineChart;\n","import { useState, useCallback } from \"react\";\n\nimport Accordion from \"@mui/material/Accordion\";\nimport Chip from \"@mui/material/Chip\";\nimport AccordionSummary from \"@mui/material/AccordionSummary\";\nimport AccordionDetails from \"@mui/material/AccordionDetails\";\nimport Typography from \"@mui/material/Typography\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport RadioButtonCheckedIcon from \"@mui/icons-material/RadioButtonChecked\";\n\nimport DataEditor, {\n // DataEditorProps,\n GridCellKind,\n Item,\n GridCell,\n // GridColumn,\n // GridColumnIcon\n} from \"@glideapps/glide-data-grid\";\nimport { useExtraCells } from \"@glideapps/glide-data-grid-cells\";\nimport { useLayer } from \"react-laag\";\n\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\";\nimport \"@glideapps/glide-data-grid/dist/index.css\";\n\nexport const List = (props: any) => {\n const [showSearch, setShowSearch] = useState(false);\n const [columns, setColumns] = useState(props.header);\n const [data, setData] = useState(props.tableData);\n const [showMenu, setShowMenu] = useState<any>();\n const [isSubMenuOpen, setIsSubMenuOpen] = useState(true);\n\n const onSearchClose = useCallback(() => setShowSearch(false), []);\n const cellProps = useExtraCells();\n\n const onColumnResize = useCallback(\n (column: any, newSize: any) => {\n setColumns((prevColsMap: any) => {\n const index = columns.findIndex((ci: any) => ci.title === column.title);\n const newArray = [...prevColsMap];\n newArray.splice(index, 1, {\n ...prevColsMap[index],\n width: newSize,\n });\n return newArray;\n });\n },\n [columns],\n );\n\n const getContent = useCallback(\n ([col, row]: Item): GridCell => {\n // console.log(\"cell\", cell)\n // const [col, row]: Item = cell;\n const dataRow = data[row];\n const d = dataRow[columns[col].id];\n\n const { dataType } = columns[col];\n\n if (dataType === \"Number\") {\n return {\n allowOverlay: true,\n kind: GridCellKind.Number,\n data: d,\n displayData: d.toString(),\n };\n } else if (dataType === \"Image\") {\n return {\n kind: GridCellKind.Image,\n data: [d],\n allowOverlay: true,\n allowAdd: true,\n };\n } else if (dataType === \"Bubble\") {\n return {\n kind: GridCellKind.Bubble,\n data: [\"sss\", \"ss\"],\n allowOverlay: true,\n };\n } else if (dataType === \"SingleDropdown\") {\n return {\n kind: GridCellKind.Custom,\n allowOverlay: true,\n copyData: \"4\",\n data: {\n kind: \"dropdown-cell\",\n allowedValues: [\"Good\", \"Better\", \"Best\"],\n value: \"Good\",\n },\n };\n } else if (dataType === \"DatePicker\") {\n return {\n kind: GridCellKind.Custom,\n allowOverlay: true,\n copyData: \"4\",\n data: {\n kind: \"date-picker-cell\",\n date: new Date(),\n displayDate: new Date().toISOString(),\n format: \"date\",\n },\n };\n } else {\n return {\n kind: GridCellKind.Text,\n allowOverlay: true,\n readonly: false,\n displayData: d,\n data: d,\n };\n }\n },\n [data, columns],\n );\n\n const onCellEdited = useCallback(\n (cell: any, newValue: any) => {\n if (newValue.kind !== GridCellKind.Text) {\n // we only have text cells, might as well just die here.\n return;\n }\n\n const [col, row] = cell;\n const key = columns[col].id;\n data[row][key] = newValue.data;\n\n setData(data);\n },\n [data, columns],\n );\n\n const onDragOverCell = (cell: any) => {\n console.log(cell);\n };\n\n const onRowAppended = useCallback(() => {\n const newRowObj: any = {};\n console.log(Object.entries(data[0]));\n for (const [key] of Object.entries(data[0])) {\n newRowObj[key] = \"\";\n }\n setData([...data, newRowObj]);\n }, [data]);\n\n const onHeaderClicked = useCallback(() => {\n console.log(\"Header clicked\");\n }, []);\n\n const onOutsideClick = () => {\n if (isSubMenuOpen) {\n setShowMenu(undefined);\n setIsSubMenuOpen((cv) => !cv);\n }\n setIsSubMenuOpen((cv) => !cv);\n };\n\n const { renderLayer, layerProps } = useLayer({\n isOpen: showMenu !== undefined,\n triggerOffset: 2,\n onOutsideClick,\n trigger: {\n getBounds: () => ({\n bottom: (showMenu?.bounds.y ?? 0) + (showMenu?.bounds.height ?? 0),\n height: showMenu?.bounds.height ?? 0,\n left: showMenu?.bounds.x ?? 0,\n right: (showMenu?.bounds.x ?? 0) + (showMenu?.bounds.width ?? 0),\n top: showMenu?.bounds.y ?? 0,\n width: showMenu?.bounds.width ?? 0,\n }),\n },\n placement: \"bottom-end\",\n auto: true,\n });\n\n const onHeaderMenuClick = useCallback((col: any, bounds: any) => {\n setIsSubMenuOpen((cv) => !cv);\n setShowMenu({ col, bounds });\n }, []);\n\n const onAddCol = useCallback(() => {\n const newData = data.map((row: any) => {\n return { ...row, new: \"\" };\n });\n setData(newData);\n // setIndexes([...Object.keys(data[0]), \"new\"]);\n setColumns([\n ...columns,\n {\n title: \"New\",\n id: \"new\",\n hasMenu: true,\n },\n ]);\n }, [data, columns]);\n\n const onColMoved = useCallback((startIndex: any, endIndex: any) => {\n setColumns((old: any) => {\n const newCols = [...old];\n const [toMove] = newCols.splice(startIndex, 1);\n newCols.splice(endIndex, 0, toMove);\n return newCols;\n });\n }, []);\n\n return (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>\n <Chip\n size=\"small\"\n color=\"primary\"\n icon={<RadioButtonCheckedIcon />}\n label=\"Accordion 1\"\n />\n </Typography>\n </AccordionSummary>\n <AccordionDetails></AccordionDetails>\n {/* <button onClick={() => setShowSearch(true)}>\n Show Search\n </button> */}\n <DataEditor\n {...cellProps}\n getCellContent={getContent}\n columns={columns}\n onCellEdited={onCellEdited}\n onHeaderMenuClick={onHeaderMenuClick}\n onHeaderClicked={onHeaderClicked}\n onCellContextMenu={(_, e) => e.preventDefault()}\n rows={data.length}\n rowMarkers={\"both\"}\n showSearch={showSearch}\n getCellsForSelection={true}\n onSearchClose={onSearchClose}\n onRowAppended={onRowAppended}\n onDragOverCell={onDragOverCell}\n onRowMoved={(s, e) => window.alert(`Moved row ${s} to ${e}`)}\n // height={\"100px\"}\n onColumnMoved={onColMoved}\n trailingRowOptions={{\n // How to get the trailing row to look right\n sticky: true,\n tint: false,\n hint: \"New row...\",\n // themeOverride: true\n }}\n smoothScrollX={true}\n smoothScrollY={true}\n verticalBorder={(c) => c > 0}\n // freezeColumns={1}\n onDragStart={(e) => {\n e.setData(\"text/plain\", \"Drag data here!\");\n }}\n rightElement={\n <div className=\"addCol\">\n <button onClick={() => onAddCol()}>+</button>\n </div>\n }\n rightElementProps={{\n fill: false,\n sticky: true,\n }}\n onColumnResize={onColumnResize}\n />\n <div id=\"portal\" />\n {showMenu !== undefined &&\n renderLayer(\n <div\n {...layerProps}\n style={{\n ...layerProps.style,\n width: 300,\n padding: 4,\n borderRadius: 8,\n backgroundColor: \"white\",\n border: \"1px solid black\",\n }}\n >\n <ul>\n <li>Action 1</li>\n <li>Action 2</li>\n <li>Action 3</li>\n </ul>\n </div>,\n )}\n </Accordion>\n );\n};\n\nexport default List;\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport { MaterialTable, ActionBar, Fallback, Footer, Button, ConfirmModal as ConfirmPopUp } from '../../components';\r\nimport { viewTypes } from '../../constants';\r\n\r\nimport { IListingComponentProps, IListingState } from './types'\r\nimport logo from '../../assets/images';\r\n\r\nimport './listing.scss';\r\nimport { useDataFetcher, apiHelper } from '../../hooks';\r\nimport { useDispatch } from 'react-redux';\r\nimport { usePages } from '../../hooks';\r\nimport { useAppSelector } from '../../redux';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nconst ListingComponent: React.FC<IListingComponentProps> = ({\r\n title,\r\n tableColumns,\r\n columnOrder = ['mrt-row-select'],\r\n rowActionMenu,\r\n destructiveActionMenu,\r\n handleAddButton,\r\n searchText,\r\n handleSearch,\r\n disabledViews = ['Kanban', 'Calendar', 'Gantt'],\r\n fields,\r\n selectedIds = [],\r\n pageName,\r\n importModuleName,\r\n showAddButton = true,\r\n actionButtons,\r\n paginationResource,\r\n enablePages = false,\r\n GridComponent,\r\n onSelectRow,\r\n onColumnOrdering,\r\n onColumnVisibility,\r\n onSortingChange,\r\n fallbackIcon,\r\n className = '',\r\n onDeleteConfirm,\r\n deleteTitle,\r\n deleteDescription,\r\n fetchApi,\r\n resetState,\r\n setPaginationModel,\r\n deleteApi,\r\n storeName,\r\n isUseFields,\r\n customeFilter,\r\n customFields,\r\n isLoading: loadinState,\r\n customRows = [],\r\n ...rest\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n //dispatch\r\n const dispatch = useDispatch()\r\n\r\n //Page Context\r\n const { activePage, updatePageInfo } = usePages();\r\n //Store \r\n const {\r\n paginationModel,\r\n rows,\r\n isLoading,\r\n } = useAppSelector((store) => store?.[storeName]);\r\n\r\n\r\n const { pageNo, limit: pLimit, totalCount } = paginationModel;\r\n const limit = activePage.page_size || pLimit;\r\n const skip = limit * (pageNo - 1);\r\n\r\n\r\n // Local state\r\n const [listingState, setListingState] = useState<IListingState>({\r\n selectedRows: selectedIds,\r\n itemToDelete: null,\r\n isDeleting: false\r\n });\r\n\r\n // Calculate pagination values\r\n const total = Math.ceil(totalCount / limit);\r\n\r\n // Memoized table data\r\n const tableRows = useMemo(() => customRows?.length ? customRows : rows, [rows, customRows]);\r\n\r\n // Handle row selection\r\n const handleRowSelection = (selectedRows: any[]) => {\r\n const selectedRowIds = selectedRows.map((row) => row.original.id);\r\n setListingState(prev => ({ ...prev, selectedRows: selectedRowIds }));\r\n onSelectRow?.(selectedRows);\r\n };\r\n\r\n // Handle pagination changes\r\n const handlePaginationChange = (model: any) => {\r\n if (activePage.page_size !== model?.limit) {\r\n updatePageInfo({ page_size: model.limit });\r\n }\r\n handlePaginationModel(model);\r\n };\r\n\r\n // Handle search\r\n const handleSearchChange = (search: string) => {\r\n updatePageInfo({ search });\r\n handlePaginationModel({ pageNo: 1 });\r\n handleSearch?.(search);\r\n };\r\n\r\n // Handle delete confirmation\r\n const handleDeleteClick = (item: any) => {\r\n setListingState(prev => ({ ...prev, itemToDelete: item }));\r\n };\r\n\r\n const handleDeleteConfirm = async () => {\r\n if (!listingState.itemToDelete) return;\r\n\r\n setListingState(prev => ({ ...prev, isDeleting: true }));\r\n\r\n try {\r\n onDeleteConfirm ? await onDeleteConfirm(listingState.itemToDelete) : await deleteRecord(listingState.itemToDelete);\r\n setListingState(prev => ({ ...prev, itemToDelete: null, isDeleting: false }));\r\n } catch (error) {\r\n setListingState(prev => ({ ...prev, isDeleting: false }));\r\n }\r\n };\r\n\r\n const handleDeleteCancel = () => {\r\n setListingState(prev => ({ ...prev, itemToDelete: null }));\r\n };\r\n\r\n // Enhance destructive actions to include delete confirmation\r\n const enhancedDestructiveActions = useMemo(() => {\r\n if (!destructiveActionMenu) return undefined;\r\n\r\n return destructiveActionMenu.map(action => ({\r\n ...action,\r\n handleAction: action.label.toLowerCase().includes('delete')\r\n ? handleDeleteClick\r\n : action.handleAction\r\n }));\r\n }, [destructiveActionMenu]);\r\n\r\n //Handle pagination model\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n if (activePage.page_size != model?.limit) {\r\n updatePageInfo({ page_size: model.limit });\r\n }\r\n dispatch(setPaginationModel(model));\r\n }\r\n\r\n //Delete\r\n const deleteRecord = async (requestToDelete: any) => {\r\n const response: any = await dispatch(deleteApi(String(requestToDelete.id)));\r\n apiHelper(response, () => {\r\n enqueueSnackbar(\r\n ` ${title}: ${requestToDelete?.id} ${t('common.msg.deleted')}`,\r\n )\r\n getData()\r\n })\r\n };\r\n\r\n\r\n\r\n\r\n //clean up\r\n const cleanUp = useCallback(() => {\r\n dispatch(resetState())\r\n }, [dispatch, resetState]);\r\n\r\n // Data fetching\r\n const getData = useDataFetcher(\r\n tableColumns?.length ? tableColumns : activePage,\r\n { skip, limit },\r\n fetchApi,\r\n customeFilter,\r\n [],\r\n true,\r\n customFields\r\n\r\n )\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [getData])\r\n\r\n useEffect(() => {\r\n return cleanUp;\r\n }, [cleanUp]);\r\n\r\n useEffect(() => {\r\n if (activePage?.views?.length) return;\r\n updatePageInfo({\r\n active_view: viewTypes.TABLE,\r\n views: [\r\n {\r\n label: 'Table',\r\n position: 0\r\n }\r\n ]\r\n })\r\n }, [activePage?.views])\r\n\r\n return (\r\n <section className={`listing-component ${className}`}>\r\n <ActionBar\r\n title={title}\r\n data={activePage?.views || [\r\n {\r\n label: 'Table',\r\n position: 0\r\n }\r\n ]}\r\n setData={(views) => updatePageInfo({ views })}\r\n active={activePage.active_view}\r\n setActive={(tab) => updatePageInfo({ active_view: tab })}\r\n handleAddButton={handleAddButton}\r\n searchText={searchText || activePage.search || ''}\r\n handleSearch={handleSearchChange}\r\n disabledViews={disabledViews}\r\n fields={fields}\r\n isUseFields={isUseFields}\r\n selectedIds={listingState.selectedRows}\r\n pageName={pageName}\r\n importModuleName={importModuleName}\r\n button={showAddButton}\r\n actionBtn={actionButtons}\r\n {...rest}\r\n />\r\n\r\n\r\n <>\r\n {activePage?.active_view === viewTypes.TABLE && (\r\n <MaterialTable\r\n rows={tableRows || []}\r\n columns={tableColumns}\r\n paginationModel={paginationModel}\r\n totalPages={total}\r\n columnOrder={[...columnOrder, ...activePage.column_order]}\r\n states={{ isLoading: loadinState || isLoading }}\r\n onSortingChange={onSortingChange ? (sort) => {\r\n updatePageInfo({ sort });\r\n onSortingChange(sort);\r\n } : undefined}\r\n enableColumnDragging={false}\r\n enableEditing={false}\r\n rowActionMenu={rowActionMenu}\r\n destructiveActionMenu={enhancedDestructiveActions}\r\n isResetRow={false}\r\n onSelectRow={handleRowSelection}\r\n handleColumnOrdering={onColumnOrdering ? (colOrder) => {\r\n const newOrder = colOrder.slice(1);\r\n updatePageInfo({ column_order: newOrder });\r\n onColumnOrdering(newOrder);\r\n } : undefined}\r\n onColumnVisibility={onColumnVisibility ? (columns) => {\r\n updatePageInfo({ visible_columns: columns });\r\n onColumnVisibility(columns);\r\n } : undefined}\r\n />\r\n )}\r\n\r\n {activePage?.active_view === viewTypes.GRID && GridComponent && (\r\n <GridComponent\r\n data={tableRows}\r\n rowActionMenu={rowActionMenu}\r\n destructiveActionMenu={enhancedDestructiveActions}\r\n />\r\n )}\r\n\r\n {!activePage?.active_view && !isLoading && (\r\n <Fallback\r\n heading={title}\r\n icon={fallbackIcon || <img src={logo.shippmentFallback} alt=\"fallback\" />}\r\n >\r\n {showAddButton && handleAddButton && (\r\n <Button\r\n variant='contained'\r\n startIcon={<AddIcon />}\r\n onClick={handleAddButton}\r\n >\r\n {`${t('common.add')} ${t('common.new')}`}\r\n </Button>\r\n )}\r\n </Fallback>\r\n )}\r\n\r\n <Footer\r\n total={total}\r\n paginationModel={{\r\n ...paginationModel,\r\n limit: activePage.page_size\r\n }}\r\n handlePaginationModel={handlePaginationChange}\r\n resource={paginationResource}\r\n enablePages={enablePages}\r\n />\r\n\r\n <ConfirmPopUp\r\n open={Boolean(listingState.itemToDelete)}\r\n onClose={handleDeleteCancel}\r\n onConfirm={handleDeleteConfirm}\r\n loading={listingState.isDeleting}\r\n title={deleteTitle || `${t('common.delete')} ${title}`}\r\n description={\r\n deleteDescription\r\n ? deleteDescription(listingState.itemToDelete)\r\n : `${t('common.deleteMsg')} ${title}: ${listingState.itemToDelete?.id || listingState.itemToDelete?.name || ''} ?`\r\n }\r\n />\r\n </>\r\n </section>\r\n );\r\n};\r\n\r\nexport default ListingComponent;\r\n","import React, { useState } from \"react\";\nimport { IconButton } from \"@mui/material\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport Menu from \"@mui/material/Menu\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport CardWrapper from \"../../components/card-wrapper/card-wrapper\";\nimport Typography from \"../typography/typography\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport images from \"../../assets/images\";\n\nimport \"./multiline.scss\";\n\ninterface Option {\n id: number;\n name: string;\n role: string;\n}\ninterface MultiProps {\n options: Option[];\n}\n\nexport const MultiLine = (props: MultiProps) => {\n const { options } = props;\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSearchEvent = (searchQuery: string) => {\n const lowerCaseQuery = searchQuery.toLowerCase();\n const filtered = options.filter((option: Option) => {\n return (\n option.name.toLowerCase().includes(lowerCaseQuery) ||\n option.role.toLowerCase().includes(lowerCaseQuery)\n );\n });\n setFilteredOptions(filtered);\n };\n\n const handleCreateClick = () => {\n alert(\"Clicked \");\n };\n\n return (\n <div className=\"main-card-nodal\">\n <CardWrapper>\n <div className=\"payable-header\">\n <Typography className=\"payable-title\">Payable Account</Typography>\n <IconButton color=\"inherit\" size=\"small\" onClick={handleClick}>\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>\n <MenuItem onClick={handleClose}>View</MenuItem>\n </Menu>\n </div>\n <SearchBar\n placeholder=\"Search Companies\"\n handleSearch={(e) => {\n handleSearchEvent(e);\n }}\n debounceTime={1}\n />\n {filteredOptions.map((option: Option) => (\n <div key={option.id} className=\"list-items\">\n <Typography className=\"title\">{option.name}</Typography>\n <Typography className=\"description\">{option.role}</Typography>\n </div>\n ))}\n\n <div className=\"bottom-footer\" onClick={handleCreateClick}>\n <AddIcon />\n <Typography>Create a Cost Center</Typography>\n </div>\n </CardWrapper>\n </div>\n );\n};\n\nexport default MultiLine;\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\n\nexport interface IMultiLineChartProps {\n data: any;\n width?: number;\n height?: number;\n margin?: { top: number, right: number, bottom: number, left: number };\n yAxisData: any;\n xAxisData: any;\n colors?: string[];\n line?: boolean;\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\n customLabelFormatter?: (value: number) => string;\n currency?: string\n}\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\n if (labelType === 'inPercent') {\n return `${d3.format(\".0%\")(num / 100)}`;\n } else if (labelType === 'inValue') {\n return `${symbol||''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n }\n return num.toString();\n};\n\n\n\nconst MultiLineChart = ({\n data,\n yAxisData,\n xAxisData,\n colors = ['steelblue', 'orange', 'green', 'red'], // Default colors\n height = 400,\n margin = { top: 20, right: 50, bottom: 30, left: 50 },\n line = false,\n yAxisLabelType = 'inValue',\n currency,\n customLabelFormatter,\n}: IMultiLineChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n useEffect(() => {\n }, [yAxisLabelType]);\n // ResizeObserver to adjust the chart size dynamically\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n \n if (containerWidth === 0) return; \n\n const svg = d3.select(svgRef.current);\n svg.selectAll(\"*\").remove(); \n\n const innerWidth = containerWidth-margin.left- margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n // Scales\n const x = d3.scaleLinear()\n .domain([0, xAxisData.length]) // Linear scale based on index of xAxisData\n .range([0, innerWidth]);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(yAxisData) as number])\n .nice()\n .range([innerHeight, 0]);\n\n\n // Append x-axis\n const xAxis = svg.append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(${margin.left},${height - margin.bottom})`)\n .call(d3.axisBottom(x)\n .ticks(xAxisData.length - 1)\n .tickFormat((d, i) => xAxisData[i])\n );\n\n xAxis.selectAll(\"text\")\n .attr(\"transform\", \"translate(20, 10)\") // Push labels down by 10px\n .style(\"text-anchor\", \"middle\"); // Keep the labels centered\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n\n // Append y-axis\n const yAxis = svg.append(\"g\")\n .attr(\"class\", \"y-axis\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`)\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) =>\n customLabelFormatter\n ? customLabelFormatter(d)\n : formatNumber(d, currency, yAxisLabelType)\n )\n .tickSizeOuter(0) as any,);\n\n if (line) {\n yAxis.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '6,3') // Dotted line\n .style('stroke-width', 1);\n }\n xAxis.selectAll(\".tick line\").remove();\n yAxis.selectAll(\".tick line\").remove();\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n\n // Plot the lines for each dataset\n\n Object.keys(data).forEach((key, index) => {\n if (key !== 'months') {\n const chartLine = d3.line()\n .x((d, i) => x(i)) // Use index-based positioning for x-axis\n .y((d: any) => y(d)).curve(data[key].isSmooth ? d3.curveMonotoneX : d3.curveLinear);\n // Append the line\n svg.append(\"path\")\n .datum(data[key]?.data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", colors[index % colors.length])\n .attr(\"stroke-width\", 2)\n .attr(\"transform\", `translate(${margin.left},${margin.top})`)\n .attr(\"d\", chartLine)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"stroke-width\", 4);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"stroke-width\", 2);\n });\n\n\n\n // Append circles for each data point\n if (data[key]?.displayDot) {\n svg.selectAll(`.circle-${key}`)\n .data(data[key]?.data)\n .enter()\n .append(\"circle\")\n .attr(\"class\", `circle-${key}`)\n .attr(\"cx\", (d, i) => x(i) + margin.left) // Adjust for margin.left\n .attr(\"cy\", (d: any) => y(d) + margin.top) // Adjust for margin.top\n .attr(\"r\", 4) // Circle radius\n .attr(\"fill\", colors[index % colors.length])\n .attr(\"stroke\", \"white\") // Optional: adds a border for contrast\n .attr(\"stroke-width\", 1.5)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"r\", 6); // Increase size on hover\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"r\", 4); // Return to normal size\n });\n }\n\n }\n });\n }, [data, yAxisData, xAxisData, height, containerWidth, colors, margin, line, yAxisLabelType, currency, customLabelFormatter]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <svg ref={svgRef} width=\"100%\" height={height} viewBox={`0 0 ${containerWidth} ${height}`} />\n </div>\n </div>\n );\n};\n\nexport { MultiLineChart };\nexport default MultiLineChart;\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport {\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTableRow,\r\n\tIconButton,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport Typography from '../../typography/typography';\r\nimport './dynamic-report.scss'\r\nimport { DynamicRow } from \"./dynamic-rows\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { formateValueByType, renderEmptyRowsFallback } from \"../../../utils/common-utility\";\r\nimport SearchBar from \"../../search-bar/search-bar\";\r\nimport dayjs from \"dayjs\";\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { ArrowDown } from \"../../icons\";\r\nimport { ArrowUp } from \"../../icons\";\r\nimport {\r\n\tcalculateColumnWidths,\r\n\tsampleRowContent,\r\n\tDEFAULT_MEASUREMENT_CONFIG,\r\n\tgetCheckboxColumnWidth\r\n} from \"../../../utils/text-measurement\";\r\n\r\ninterface IReportTableProps {\r\n\tdata: any[];\r\n\theaders: any[];\r\n\ttableHeaders: any[];\r\n\ttotalHeaders?: any[];\r\n\thandleSort?: (data: string, direction: string) => void;\r\n\tcollapsLevel?: number,\r\n\tenableSearch?: boolean,\r\n\theaderHeight?: string,\r\n\tisIncrese?: boolean,\r\n\tonSelectionChange?: (selectedData: any[]) => void;\r\n\tenableCheckbox?: boolean;\r\n\tafterHeader?: React.ReactNode | (() => React.ReactNode);\r\n\ttotalKey?: string\r\n\trowHeight?: string\r\n}\r\n\r\n// Updated DynamicRow interface and component in separate file\r\nexport interface IDynamicRowProps {\r\n\trowData: any;\r\n\tlevel: number;\r\n\ttableHeaders: any[];\r\n\ttotalHeaders: any[];\r\n\theaders: any[];\r\n\tcollapsAll: boolean;\r\n\tcollapsLevel: number;\r\n\tisIncrese: boolean,\r\n\tdata: any,\r\n\trowPath: number[],\r\n\tselectedRowPaths: number[][],\r\n\tonCheckboxChange: (rowPath: number[], checked: boolean) => void;\r\n\tdataSlice: any[];\r\n\tdataIndex: number;\r\n\tenableCheckBox: boolean\r\n\trowHeight?: string\r\n\tcolumnWidths?: { [key: string]: number }\r\n}\r\n\r\nexport function ReportTable({\r\n\theaders,\r\n\tdata,\r\n\ttableHeaders,\r\n\ttotalHeaders = [],\r\n\thandleSort,\r\n\tcollapsLevel = 0,\r\n\tisIncrese,\r\n\tenableSearch = true,\r\n\theaderHeight = '16px',\r\n\tonSelectionChange,\r\n\tenableCheckbox = false,\r\n\tafterHeader,\r\n\ttotalKey = 'total',\r\n\trowHeight = 'auto'\r\n}: IReportTableProps) {\r\n\r\n\ttype HeaderType = {\r\n\t\ttype?: string;\r\n\t\t[key: string]: any;\r\n\t};\r\n\tconst [filter, setFilter] = useState(null)\r\n\tconst [baseData, setBaseData] = useState<any>(null);\r\n\tconst [formatedData, setFormatedData] = useState<any>(null);\r\n\tconst [searchQueries, setSearchQueries] = useState<any>({});\r\n\tconst { t } = useTranslation()\r\n\tconst [selectedRowPaths, setSelectedRowPaths] = useState<number[][]>([]);\r\n\tconst [columnWidths, setColumnWidths] = useState<{ [key: string]: number }>({});\r\n\tconst [resizingColumn, setResizingColumn] = useState<string | null>(null);\r\n\tconst resizeStartX = useRef<number>(0);\r\n\tconst resizeStartWidth = useRef<number>(0);\r\n\tconst headerRefs = useRef<{ [key: string]: HTMLElement | null }>({});\r\n\tconst [isInitialized, setIsInitialized] = useState(false);\r\n\tconst [isSorting, setIsSorting] = useState(false);\r\n\r\n\tfunction getNestedValue(obj: any, path: any) {\r\n\t\tif (path?.name == '') {\r\n\t\t\treturn ''\r\n\t\t}\r\n\r\n\t\tconst formattedValue = path?.name?.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) || (path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) == '0' ? '0' : '-');\r\n\t\treturn formateValueByType({\r\n\t\t\tvalue: formattedValue,\r\n\t\t\t...path\r\n\t\t})\r\n\t}\r\n\t// Initialize column widths based on content\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialized && data && headers.length > 0 && !isSorting) {\r\n\t\t\t// Sample row content for width calculation\r\n\t\t\tconst rowContentSamples = sampleRowContent({\r\n\t\t\t\tmaxRows: 9999,\r\n\t\t\t\theaders,\r\n\t\t\t\tdata: Array.isArray(data) ? data : data?.[tableHeaders[0]?.rowKey] || [],\r\n\t\t\t\ttableHeaders,\r\n\t\t\t\tt,\r\n\t\t\t});\r\n\r\n\t\t\t// Calculate optimal widths based on header and content\r\n\t\t\tconst calculatedWidths = calculateColumnWidths(\r\n\t\t\t\theaders,\r\n\t\t\t\trowContentSamples,\r\n\t\t\t\tDEFAULT_MEASUREMENT_CONFIG,\r\n\t\t\t\t{ min: 100, padding: 32, max: 400 },\r\n\t\t\t\tt\r\n\t\t\t);\r\n\t\t\tsetColumnWidths(calculatedWidths);\r\n\t\t\tsetIsInitialized(true);\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [data, headers, isInitialized, isSorting, tableHeaders]);\r\n\t// useEffect(() => {\r\n\t// if (!isInitialized && data && headers.length > 0) {\r\n\t// const initialWidths: { [key: string]: number } = {};\r\n\r\n\t// headers.forEach((header) => {\r\n\t// // Check if width is already specified in header config\r\n\t// if (header.width) {\r\n\t// const numericWidth = typeof header.width === 'string'\r\n\t// ? parseInt(header.width.replace(/[^\\d]/g, ''))\r\n\t// : header.width;\r\n\t// initialWidths[header.name] = numericWidth;\r\n\t// } else {\r\n\t// // Calculate width based on header ref if available\r\n\t// const headerElement = headerRefs.current[header.name];\r\n\t// if (headerElement) {\r\n\t// const contentWidth = headerElement.scrollWidth;\r\n\t// // Add some padding (e.g., 48px for icons and padding)\r\n\t// initialWidths[header.name] = Math.max(100, contentWidth + 48);\r\n\t// } else {\r\n\t// // Default width\r\n\t// initialWidths[header.name] = 100;\r\n\t// }\r\n\t// }\r\n\t// });\r\n\t// setColumnWidths(initialWidths);\r\n\t// setIsInitialized(true);\r\n\t// }\r\n\t// }, [data, headers, isInitialized]);\r\n\r\n\tfunction getAllRowPaths(data: any, tableHeaders: any[], rowKey: string, currentPath: number[] = [], level: number = 0): number[][] {\r\n\t\tif (!Array.isArray(data)) return [];\r\n\t\tlet paths: number[][] = [];\r\n\t\tdata.forEach((row: any, idx: number) => {\r\n\t\t\tconst path = [...currentPath, idx];\r\n\t\t\tif (tableHeaders[level]?.enableCheckbox) {\r\n\t\t\t\tpaths.push(path);\r\n\t\t\t}\r\n\t\t\tconst nextLevel = level + 1;\r\n\t\t\tconst nextRowKey = tableHeaders[nextLevel]?.rowKey;\r\n\t\t\tif (nextRowKey && Array.isArray(row[nextRowKey])) {\r\n\t\t\t\tpaths = paths.concat(getAllRowPaths(row[nextRowKey], tableHeaders, nextRowKey, path, nextLevel));\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn paths;\r\n\t}\r\n\r\n\tconst handleCheckboxChange = (rowPath: number[], checked: boolean) => {\r\n\t\tsetSelectedRowPaths(prev => {\r\n\t\t\tconst next = checked\r\n\t\t\t\t? [...prev, rowPath]\r\n\t\t\t\t: prev.filter(path => !(path.length === rowPath.length && path.every((v, i) => v === rowPath[i])));\r\n\t\t\treturn next;\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleHeaderCheckboxChange = (checked: boolean) => {\r\n\t\tconst allPaths = getAllRowPaths(\r\n\t\t\tArray.isArray(formatedData) ? formatedData : formatedData?.[tableHeaders[0]?.rowKey],\r\n\t\t\ttableHeaders,\r\n\t\t\ttableHeaders[0]?.rowKey\r\n\t\t);\r\n\t\tif (checked) {\r\n\t\t\tsetSelectedRowPaths(allPaths);\r\n\t\t} else {\r\n\t\t\tsetSelectedRowPaths([]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst allRowPaths = getAllRowPaths(\r\n\t\tArray.isArray(formatedData) ? formatedData : formatedData?.[tableHeaders[0]?.rowKey],\r\n\t\ttableHeaders,\r\n\t\ttableHeaders[0]?.rowKey\r\n\t);\r\n\tconst allSelected = allRowPaths.length > 0 && allRowPaths.every(path =>\r\n\t\tselectedRowPaths.some(sel => sel.length === path.length && sel.every((v, i) => v === path[i]))\r\n\t);\r\n\tconst someSelected = allRowPaths.some(path =>\r\n\t\tselectedRowPaths.some(sel => sel.length === path.length && sel.every((v, i) => v === path[i]))\r\n\t);\r\n\r\n\tfunction searchReportNestedByKey(\r\n\t\tobj: any,\r\n\t\tquery: string,\r\n\t\tkeysToSearch: string | string[] | null,\r\n\t\theader: HeaderType\r\n\t): boolean {\r\n\t\tif (obj == null) return false;\r\n\t\tconst queryLower = query.toLowerCase();\r\n\t\tif (typeof keysToSearch === 'string') {\r\n\t\t\tkeysToSearch = [keysToSearch];\r\n\t\t}\r\n\t\tif (header?.type == 'date') {\r\n\t\t\treturn dayjs(obj).format('DD-MM-YYYY').includes(queryLower);\r\n\t\t}\r\n\r\n\t\tif (typeof obj === 'string') {\r\n\t\t\treturn obj.toLowerCase().includes(queryLower);\r\n\t\t}\r\n\r\n\t\tif (typeof obj === 'object') {\r\n\t\t\tif (Array.isArray(obj)) {\r\n\t\t\t\treturn obj.some(item => searchReportNestedByKey(item, queryLower, keysToSearch, header));\r\n\t\t\t}\r\n\t\t\tif (keysToSearch) {\r\n\t\t\t\treturn keysToSearch.some(key => {\r\n\t\t\t\t\tconst val = obj[key];\r\n\t\t\t\t\tif (val != null) {\r\n\t\t\t\t\t\treturn typeof val === 'string' ? val.toLowerCase().includes(queryLower) : searchReportNestedByKey(val, queryLower, null, header);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst nestedObj = Object.keys(obj).filter(k => typeof obj[k] === 'object' && obj[k] !== null);\r\n\t\t\t\t\tif (nestedObj.length > 0) {\r\n\t\t\t\t\t\treturn nestedObj.some(n => searchReportNestedByKey(obj[n], queryLower, null, header));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn Object.values(obj).some(val => searchReportNestedByKey(val, queryLower, null, header));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn String(obj).toLowerCase().includes(queryLower);\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tlet filteredData = Array.isArray(baseData) ? baseData : baseData?.[tableHeaders[0]?.rowKey];\r\n\t\tObject.keys(searchQueries)?.forEach(key => {\r\n\t\t\tconst query = searchQueries?.[key]?.query?.toLowerCase();\r\n\t\t\tif (query) {\r\n\t\t\t\tfilteredData = filteredData?.filter((item: any) => searchReportNestedByKey(item, query, key, searchQueries?.[key]?.header));\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetFormatedData(Array.isArray(baseData) ? filteredData : { ...baseData, [tableHeaders[0]?.rowKey]: filteredData });\r\n\t\t//eslint-disable-next-line\r\n\t}, [searchQueries, baseData]);\r\n\r\n\tconst handleSearch = (searchQuery: string, key: string, header: any) => {\r\n\t\tsetSearchQueries((prev: any) => ({\r\n\t\t\t...prev,\r\n\t\t\t[key]: {\r\n\t\t\t\tquery: searchQuery,\r\n\t\t\t\theader\r\n\t\t\t},\r\n\t\t}));\r\n\t};\r\n\r\n\t// Column resize handlers\r\n\tconst handleMouseDown = (e: React.MouseEvent, columnName: string) => {\r\n\t\tconsole.log(\"columnName\", columnName)\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tsetResizingColumn(columnName);\r\n\t\tresizeStartX.current = e.clientX;\r\n\t\tresizeStartWidth.current = columnWidths[columnName] || 100;\r\n\t};\r\n\r\n\tconst handleMouseMove = (e: MouseEvent) => {\r\n\t\tif (!resizingColumn) return;\r\n\t\tconst diff = e.clientX - resizeStartX.current;\r\n\t\tconst newWidth = Math.max(100, resizeStartWidth.current + diff);\r\n\t\tsetColumnWidths(prev => ({\r\n\t\t\t...prev,\r\n\t\t\t[resizingColumn]: newWidth\r\n\t\t}));\r\n\t};\r\n\r\n\tconst handleMouseUp = () => {\r\n\t\tsetResizingColumn(null);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (resizingColumn) {\r\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove);\r\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp);\r\n\t\t\treturn () => {\r\n\t\t\t\tdocument.removeEventListener('mousemove', handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\r\n\t\t\t};\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [resizingColumn]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetBaseData(data);\r\n\t\tsetFormatedData(data);\r\n\t\tsetIsInitialized(false)\r\n\t\t// setIsSorting(false)\r\n\t}, [data]);\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => setIsInitialized(false)\r\n\t}, [])\r\n\r\n\tfunction getDataByPath(data: any, tableHeaders: any[], path: number[]): any {\r\n\t\tlet current = Array.isArray(data) ? data : data?.[tableHeaders[0]?.rowKey];\r\n\t\tlet obj = null;\r\n\t\tfor (let i = 0; i < path.length; i++) {\r\n\t\t\tif (!current || !Array.isArray(current)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tobj = current[path[i]];\r\n\t\t\tif (i < path.length - 1) {\r\n\t\t\t\tconst nextLevel = i + 1;\r\n\t\t\t\tconst nextRowKey = tableHeaders[nextLevel]?.rowKey;\r\n\t\t\t\tcurrent = obj?.[nextRowKey];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectionChange) {\r\n\t\t\tconst filteredPaths = selectedRowPaths.filter(path => {\r\n\t\t\t\tconst level = path.length - 1;\r\n\t\t\t\treturn tableHeaders[level]?.enableCheckbox;\r\n\t\t\t});\r\n\t\t\tconst selectedData = filteredPaths\r\n\t\t\t\t.map(path => getDataByPath(formatedData, tableHeaders, path))\r\n\t\t\t\t.filter(Boolean);\r\n\t\t\tonSelectionChange(selectedData);\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [selectedRowPaths, formatedData]);\r\n\r\n\t// Check if we should show totals\r\n\tconst showTotals = formatedData?.[totalKey] &&\r\n\t\t!(formatedData?.length === 0 || formatedData[tableHeaders[0]?.rowKey]?.length === 0);\r\n\r\n\treturn (\r\n\t\t<TableContainer sx={{\r\n\t\t\twidth: '100%',\r\n\t\t\tmaxHeight: '600px',\r\n\t\t\toverflowX: 'auto',\r\n\t\t\tbackgroundColor: 'white',\r\n\t\t\tdisplay: 'block',\r\n\t\t\tposition: 'relative'\r\n\t\t}}\r\n\t\t\tclassName=\"dynamic-reports\"\r\n\t\t>\r\n\t\t\t<Table\r\n\t\t\t\taria-label=\"collapsible table\"\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborderCollapse: \"collapse\",\r\n\t\t\t\t\twidth: \"max-content\",\r\n\t\t\t\t\ttableLayout: 'fixed',\r\n\t\t\t\t\tmarginBottom: showTotals ? '0px' : '10px'\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TableHead sx={{ position: 'sticky', top: 0, zIndex: 10, backgroundColor: 'white' }}>\r\n\t\t\t\t\t<TableRow sx={{ zIndex: 11, backgroundColor: 'white' }}>\r\n\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\tzIndex: 9999\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tchecked={allSelected}\r\n\t\t\t\t\t\t\t\t\tindeterminate={!allSelected && someSelected}\r\n\t\t\t\t\t\t\t\t\tonChange={e => handleHeaderCheckboxChange(e.target.checked)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{headers.map((obj, index) => {\r\n\t\t\t\t\t\t\tconst enableSorting = obj?.enableSorting ?? true;\r\n\t\t\t\t\t\t\tconst width = columnWidths[t(obj.label)] || 100;\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-header\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\twidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\tminWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\tmaxWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\t\tposition: 'relative',\r\n\t\t\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\t\t\toverflow: 'hidden'\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tref={(el) => headerRefs.current[obj.name] = el}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 'calc(100% - 8px)',\r\n\t\t\t\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\t\t\t\tpaddingRight: '0px'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"s3\"\r\n\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.primary'\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\r\n\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: 'nowrap',\r\n\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 'unset'\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{typeof obj?.label === 'string' ? t(obj?.label) : obj?.label}\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{enableSorting && (\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '4px 0px'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(/* e */) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// e.preventDefault();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsSorting(true)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetFilter(filter == obj.name ? null : obj.name)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleSort && handleSort(obj.name, filter == obj.name ? 'asc' : 'desc');\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{filter == obj.name ? <ArrowUp fontSize='small' /> : <ArrowDown fontSize='small' />}\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t{/* Resize Handle */}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-resize-handle\"\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, t(obj.label))}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: '16px',\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: 'col-resize',\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\t'&::before, &::after': {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t'&::before': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\t\tleft: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'background-color 0.2s ease'\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t'&::after': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\t\tright: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'background-color 0.2s ease'\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 2,\r\n\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t{enableSearch && (\r\n\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\tpadding: '0px',\r\n\t\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\t\tzIndex: 9999\r\n\t\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{headers.map((obj, index) => {\r\n\t\t\t\t\t\t\t\tconst width = columnWidths[t(obj.label)] || 50;\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\tkey={obj?.label}\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-search\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tminWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: '8px'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SearchBar sx={{\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: '4px !important',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tInputProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '0.5rem !important',\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearch(e, obj.name, headers[index])} />\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{/* Move afterHeader inside TableHead */}\r\n\t\t\t\t\t{afterHeader && (\r\n\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\tcolSpan={headers.length + (enableCheckbox ? 1 : 0)}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\t\t\t\t\tborderBottom: 'none',\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{React.createElement(afterHeader, {\r\n\t\t\t\t\t\t\t\t\tcolumnWidths,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TableHead>\r\n\r\n\r\n\r\n\t\t\t\t{formatedData && (\r\n\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t{Array.isArray(formatedData) ? formatedData?.map((row, index, arr) => (\r\n\t\t\t\t\t\t\t<DynamicRow\r\n\t\t\t\t\t\t\t\tkey={row.id || index}\r\n\t\t\t\t\t\t\t\tlevel={0}\r\n\t\t\t\t\t\t\t\trowPath={[index]}\r\n\t\t\t\t\t\t\t\trowData={row}\r\n\t\t\t\t\t\t\t\ttableHeaders={tableHeaders}\r\n\t\t\t\t\t\t\t\ttotalHeaders={totalHeaders}\r\n\t\t\t\t\t\t\t\theaders={headers}\r\n\t\t\t\t\t\t\t\tcollapsAll={collapsLevel >= index + 1}\r\n\t\t\t\t\t\t\t\tcollapsLevel={collapsLevel}\r\n\t\t\t\t\t\t\t\tisIncrese={!!isIncrese}\r\n\t\t\t\t\t\t\t\tdata={formatedData}\r\n\t\t\t\t\t\t\t\tselectedRowPaths={selectedRowPaths}\r\n\t\t\t\t\t\t\t\tonCheckboxChange={handleCheckboxChange}\r\n\t\t\t\t\t\t\t\tdataSlice={arr}\r\n\t\t\t\t\t\t\t\tdataIndex={index}\r\n\t\t\t\t\t\t\t\tenableCheckBox={enableCheckbox}\r\n\t\t\t\t\t\t\t\trowHeight={rowHeight}\r\n\t\t\t\t\t\t\t\tcolumnWidths={columnWidths}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)) :\r\n\t\t\t\t\t\t\ttableHeaders[0]?.rowKey && (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{formatedData[tableHeaders[0]?.rowKey]?.map((row: any, index: number, arr: any[]) => (\r\n\t\t\t\t\t\t\t\t\t\t<DynamicRow\r\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id || index}\r\n\t\t\t\t\t\t\t\t\t\t\tlevel={0}\r\n\t\t\t\t\t\t\t\t\t\t\trowPath={[index]}\r\n\t\t\t\t\t\t\t\t\t\t\trowData={row}\r\n\t\t\t\t\t\t\t\t\t\t\ttableHeaders={tableHeaders}\r\n\t\t\t\t\t\t\t\t\t\t\ttotalHeaders={totalHeaders}\r\n\t\t\t\t\t\t\t\t\t\t\theaders={headers}\r\n\t\t\t\t\t\t\t\t\t\t\tcollapsAll={collapsLevel >= index + 1}\r\n\t\t\t\t\t\t\t\t\t\t\tcollapsLevel={collapsLevel}\r\n\t\t\t\t\t\t\t\t\t\t\tisIncrese={!!isIncrese}\r\n\t\t\t\t\t\t\t\t\t\t\tdata={formatedData}\r\n\t\t\t\t\t\t\t\t\t\t\tselectedRowPaths={selectedRowPaths}\r\n\t\t\t\t\t\t\t\t\t\t\tonCheckboxChange={handleCheckboxChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdataSlice={arr}\r\n\t\t\t\t\t\t\t\t\t\t\tdataIndex={index}\r\n\t\t\t\t\t\t\t\t\t\t\tenableCheckBox={enableCheckbox}\r\n\t\t\t\t\t\t\t\t\t\t\trowHeight={rowHeight}\r\n\t\t\t\t\t\t\t\t\t\t\tcolumnWidths={columnWidths}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</TableBody>\r\n\t\t\t\t)}\r\n\t\t\t</Table>\r\n\r\n\t\t\t{/* Fixed Totals Row */}\r\n\t\t\t{showTotals && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t// position: 'sticky',\r\n\t\t\t\t\t\tbottom: '-2px',\r\n\t\t\t\t\t\t// left: 0,\r\n\t\t\t\t\t\twidth: 'max-content',\r\n\t\t\t\t\t\tbackgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA',\r\n\t\t\t\t\t\tborderTop: '1px solid #e0e0e0',\r\n\t\t\t\t\t\t// zIndex: 9\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Table\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\twidth: \"max-content\",\r\n\t\t\t\t\t\t\ttableLayout: 'fixed',\r\n\t\t\t\t\t\t\tmarginBottom: 0\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA',\r\n\t\t\t\t\t\t\t\t\t\tzIndex: 10,\r\n\t\t\t\t\t\t\t\t\t\tborderBottom: 'none'\r\n\t\t\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{totalHeaders?.map((header, index) => {\r\n\t\t\t\t\t\t\t\t\tif (header.joinWithLeft) return null;\r\n\t\t\t\t\t\t\t\t\tconst cellsToMerge = totalHeaders.slice(index).findIndex((h: any) => !h.joinWithLeft && h !== header) == -1 ? totalHeaders.slice(index)?.length : totalHeaders.slice(index).findIndex((h: any) => !h.joinWithLeft && h !== header);\r\n\t\t\t\t\t\t\t\t\tconst colSpan = header.mergeCells ? cellsToMerge || 1 : 1;\r\n\r\n\t\t\t\t\t\t\t\t\t// Calculate merged width\r\n\t\t\t\t\t\t\t\t\tlet totalWidth = 0;\r\n\t\t\t\t\t\t\t\t\tfor (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\ttotalWidth += columnWidths[t(headers[i].label)] || 100;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-row\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolSpan={colSpan}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: 'none'\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: `${header?.position ? header?.position : 'start'}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '100%'\r\n\t\t\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{header?.render ? header.render(formatedData?.[totalKey][header.name], formatedData) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" weight=\"bold\" color='theme.neutral.1000'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getNestedValue(formatedData?.[totalKey], header)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\r\n\t\t\t{(data?.length === 0 || data?.[tableHeaders[0]?.rowKey]?.length === 0) && renderEmptyRowsFallback(t('common.noData'))}\r\n\t\t</TableContainer>\r\n\t);\r\n}\r\n\r\nexport default ReportTable","import Button from \"../button/button\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./reports-title-bar.scss\";\r\n\r\nimport TitleDropdownButton from \"../title-dropdown-button/title-dropdown-button\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport { generateFields } from \"../../utils/common\";\r\nimport ReportButtons, { IReportButtons } from \"./report-buttons/report-buttons\";\r\nimport TabBar, { TabProps } from \"../tabs/tabs\";\r\nimport { Box, ButtonGroup, ClickAwayListener, Grow, Menu, MenuItem, Paper, Popper, Button as MuiButton, Divider } from \"@mui/material\";\r\nimport images from \"../../assets/images\";\r\nimport {\r\n handleCompareDateRange,\r\n RANGE,\r\n} from \"../../utils/date-range\";\r\nimport { DateRange, Calendar } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\"; // main css file\r\nimport \"react-date-range/dist/theme/default.css\"; // theme css file\r\nimport dayjs from \"dayjs\";\r\nimport { useAppDispatch } from \"../../redux/hooks\";\r\nimport { fetchCompanies } from \"./redux/actionCreator\";\r\nimport SearchableSelect from \"../searchable-select\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport React from \"react\";\r\nimport { Calendar as CalendarIcon, Export as ExportIcon, Filter as FilterIcon } from \"../icons\";\r\nimport { enUS } from 'date-fns/locale';\r\n\r\ninterface IReportFilters {\r\n company: number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n}\r\n\r\n/** Descriptor for a custom component injected into the filter row. */\r\ninterface ICustomFilterComponent {\r\n /** Unique key used for React reconciliation. */\r\n key: string;\r\n /** The ReactNode to render inside the filter bar. */\r\n component: React.ReactNode;\r\n}\r\n\r\ninterface ActionBarPropsType extends Partial<TabProps>, IReportButtons {\r\n title: string;\r\n handleAddButton?: (e?: any) => void;\r\n isTitleMenu?: boolean;\r\n titleMenus?: any;\r\n reportFilterFields?: any[];\r\n isDateFilterEnabled?: boolean;\r\n onDateFilterChange?: (\r\n data: Partial<{\r\n company: string | number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n }>\r\n ) => void;\r\n filters?: Partial<IReportFilters>;\r\n isDateRange?: boolean;\r\n /**\r\n * When `false` the Date chip and the date-range dropdown button are hidden\r\n * and date-related keys (`start_date`, `end_date`, `as_of_date`) are stripped\r\n * from every filter payload so they cannot reach the API.\r\n * Defaults to `true` (backward-compatible).\r\n */\r\n showDateFilter?: boolean;\r\n dateFilter?: string;\r\n showCancelButton?: boolean;\r\n searchBar?: React.ReactNode;\r\n /**\r\n * Optional list of custom components to render inside the filter row.\r\n * Each entry must have a unique `key` and a `component` (ReactNode).\r\n * They are appended after the standard SearchableSelect filters.\r\n */\r\n customFilterComponents?: ICustomFilterComponent[];\r\n}\r\n\r\ntype TDatePickerVal = {\r\n startDate?: Date;\r\n endDate?: Date;\r\n key?: string;\r\n};\r\n\r\nconst ReportsTitleBar = (props: ActionBarPropsType) => {\r\n const {\r\n title,\r\n handleAddButton,\r\n buttons = [],\r\n dropdownMenuButtonData,\r\n isTitleMenu = false,\r\n titleMenus = [],\r\n reportFilterFields = [],\r\n toggleCallback,\r\n tabs,\r\n activeValue,\r\n setActiveValue,\r\n isDateFilterEnabled = true,\r\n onDateFilterChange,\r\n // showCancelButton,\r\n filters = {},\r\n isDateRange = false,\r\n /** Hide the date chip and date-range dropdown when false. Defaults to true. */\r\n showDateFilter = true,\r\n dateFilter = 'TODAY',\r\n filterDropDown,\r\n handleRowsCollapse,\r\n handleRowsExpand,\r\n showLevelBtn = false,\r\n dataLength = 0,\r\n filterKeys = {},\r\n searchBar,\r\n /** Custom ReactNode components rendered after the standard filters. */\r\n customFilterComponents = [],\r\n } = props;\r\n\r\n const startDateKey = filterKeys?.start_date || 'start_date';\r\n const endDateKey = filterKeys?.end_date || 'end_date';\r\n const asOfDateKey = filterKeys?.as_of_date || 'as_of_date';\r\n\r\n // const { companies } = useAppSelector((store) => store.reportsTitleBar);\r\n\r\n const dispatch = useAppDispatch();\r\n const customStyle =\r\n {\r\n\r\n '&.MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n border: 'none',\r\n borderColor: `#ade7cb`,\r\n borderRadius: `25px`\r\n },\r\n '& .MuiSelect-outlined': {\r\n padding: `4.5px 14px !important`\r\n },\r\n // '&:hover fieldset': {\r\n // border: 'none',\r\n // },\r\n\r\n // '&.Mui-focused fieldset': {\r\n // border: 'none',\r\n // },\r\n display: `flex`,\r\n gap: `4px`,\r\n width: `220px`,\r\n // height: 30px,\r\n border: `1px solid #ade7cb`,\r\n borderRadius: `50px`,\r\n backgroundColor: `#ebf9f2`,\r\n color: `#289b64`,\r\n alignItems: `center`,\r\n cursor: `pointer`,\r\n height: `32px`\r\n\r\n },\r\n }\r\n const inputStyle =\r\n {\r\n border: \"none\",\r\n \"&.Mui-focused\": {\r\n borderColor: \"transparent\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n // padding: \"0px\",\r\n fontSize: \"14px\",\r\n color: '#289b64'\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n '& .MuiSelect-icon': {\r\n color: 'green',\r\n },\r\n }\r\n\r\n // When `showDateFilter` is false, exclude the 'date' entry from the\r\n // default selection so the date chip is never active.\r\n const defaultSelected = [\r\n // Only include 'date' when the date field matches legacy 'date' value if needed, \r\n // but here we follow inventory-reports-title-bar pattern.\r\n ...(showDateFilter ? [{ value: 'date' }] : []),\r\n {\r\n value: 'company',\r\n },\r\n ]\r\n const [selectedItems, setSelectedItems] = useState<string[]>(defaultSelected);\r\n const [level, setLevel] = useState<number>(1)\r\n\r\n // const selectedCompany = useMemo(\r\n // () =>\r\n // companies?.find((company) => filters?.company === company.id)\r\n // ?.company_name || \"\",\r\n // [companies, filters?.company]\r\n // );\r\n\r\n\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [allFields, setAllFields] = useState<any[]>([]);\r\n const [dateRange, setDateRange] = useState<keyof typeof RANGE>();\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [exportAnchorEl, setExportAnchorEl] = useState<null | HTMLElement>(null);\r\n const [customDate, setCustomDate] = useState<Date>(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n const { t } = useTranslation();\r\n const [customDateRange, setCustomDateRange] = useState<TDatePickerVal>({\r\n startDate: dayjs(filters?.[startDateKey]).isValid() \r\n ? dayjs(filters?.[startDateKey]).toDate() \r\n : new Date(),\r\n endDate: dayjs(filters?.[endDateKey]).isValid() \r\n ? dayjs(filters?.[endDateKey]).toDate() \r\n : new Date(),\r\n key: \"selection\",\r\n });\r\n\r\n const anchorRef = useRef<HTMLDivElement | null>(null);\r\n const dateSelectRef = useRef<HTMLDivElement>(null);\r\n const chipDateSelectRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleCloseDatePopper = () => {\r\n anchorRef.current = null;\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * Wraps `onDateFilterChange` to strip date-related keys when\r\n * `showDateFilter` is false, guaranteeing they never reach the API.\r\n * Defined before `renderFilter` to avoid temporal dead zone errors.\r\n */\r\n const safeOnDateFilterChange = (data: any) => {\r\n if (!onDateFilterChange) return;\r\n\r\n let processedData = { ...data };\r\n\r\n // Map internal keys to filterKeys if they exist and are different\r\n if (data.hasOwnProperty('start_date') && filterKeys?.start_date) {\r\n processedData[filterKeys.start_date] = data.start_date;\r\n if (filterKeys.start_date !== 'start_date') delete processedData.start_date;\r\n }\r\n if (data.hasOwnProperty('end_date') && filterKeys?.end_date) {\r\n processedData[filterKeys.end_date] = data.end_date;\r\n if (filterKeys.end_date !== 'end_date') delete processedData.end_date;\r\n }\r\n if (data.hasOwnProperty('as_of_date') && filterKeys?.as_of_date) {\r\n processedData[filterKeys.as_of_date] = data.as_of_date;\r\n if (filterKeys.as_of_date !== 'as_of_date') delete processedData.as_of_date;\r\n }\r\n\r\n if (showDateFilter) {\r\n onDateFilterChange(processedData);\r\n } else {\r\n // Strip all date fields (including mapped ones) so they cannot pollute the request payload.\r\n const keysToStrip = [\r\n 'start_date', 'end_date', 'as_of_date',\r\n filterKeys?.start_date, filterKeys?.end_date, filterKeys?.as_of_date\r\n ].filter(Boolean);\r\n\r\n const rest = { ...processedData };\r\n keysToStrip.forEach(key => delete rest[key]);\r\n\r\n onDateFilterChange(rest);\r\n }\r\n };\r\n\r\n const handleDateChange = async (range: keyof typeof RANGE) => {\r\n // Do nothing if the date filter is hidden — guard against programmatic calls.\r\n if (!showDateFilter) return;\r\n setDateRange(range);\r\n if (range === \"CUSTOM\") {\r\n anchorRef.current = dateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n const data = await handleCompareDateRange({\r\n range: RANGE[range],\r\n from: \"\",\r\n to: \"\",\r\n });\r\n safeOnDateFilterChange({\r\n start_date: data?.from ? data?.from : \"\",\r\n end_date: data?.to ? data?.to : \"\",\r\n });\r\n handleCloseDatePopper();\r\n }\r\n };\r\n\r\n const handleClose = (event: Event) => {\r\n if (\r\n anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n handleCloseDatePopper();\r\n };\r\n const handleSelectChange = (value: any) => {\r\n if (selectedItems.some((item) => item.value == value.value)) {\r\n setSelectedItems(selectedItems.filter((item) => item?.value != value.value));\r\n const filterKey = value.value || value.key;\r\n const valueKey = filterKeys?.[filterKey] || filterKey;\r\n safeOnDateFilterChange({ [valueKey]: value.multiple ? [] : null })\r\n return;\r\n }\r\n setSelectedItems([...selectedItems, value]);\r\n };\r\n // Create filters config from filterDropDown and filterKeys\r\n // If reportFilters is needed, it should be provided by the consuming application\r\n const filtersConfig = filterDropDown?.map((filter: any) => ({\r\n key: filter.value || filter.key,\r\n label: filter.name || filter.label || `Search ${filter.value || filter.key}`,\r\n placeholder: filter.placeholder || filter.name || filter.label,\r\n apiType: filter.options ? undefined : (filter.apiType || filter.value || filter.key),\r\n valueKey: filterKeys?.[filter.value || filter.key] || filter.value || filter.key,\r\n customFilter: filter.customFilter || null,\r\n multiple: filter.multiple || false,\r\n options: filter.options || undefined,\r\n })) || []\r\n\r\n const options = [\r\n {\r\n label: RANGE.TODAY,\r\n callback: () => {\r\n handleDateChange(\"TODAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"THIS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"THIS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"THIS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"THIS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.YESTERDAY,\r\n callback: () => {\r\n handleDateChange(\"YESTERDAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.CUSTOM,\r\n callback: () => {\r\n handleDateChange(\"CUSTOM\");\r\n },\r\n },\r\n ];\r\n\r\n const isChecked = (value: any) => {\r\n return selectedItems.some(item => item?.value == value?.value)\r\n }\r\n\r\n const handleFilterPopperSubmit = () => {\r\n const dateRangeFilter = {\r\n start_date: dayjs(customDateRange.startDate).format(\"YYYY-MM-DD\"),\r\n end_date: dayjs(customDateRange.endDate).format(\"YYYY-MM-DD\"),\r\n };\r\n const dateFilter = {\r\n as_of_date: dayjs(customDate).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n // Use safeOnDateFilterChange so date keys are stripped when showDateFilter is false.\r\n safeOnDateFilterChange({\r\n ...(isDateRange ? dateRangeFilter : dateFilter),\r\n });\r\n handleCloseDatePopper();\r\n };\r\n function showFilter(val) {\r\n return selectedItems.some(item => item?.value == val)\r\n }\r\n\r\n const getStartAndEndDate = (filters: any) => {\r\n const startDate = dayjs(filters?.[startDateKey]).isValid() ? dayjs(filters[startDateKey]).toDate() : new Date();\r\n const endDate = dayjs(filters?.[endDateKey]).isValid() ? dayjs(filters[endDateKey]).toDate() : new Date();\r\n return { startDate, endDate };\r\n };\r\n\r\n useEffect(() => {\r\n if (filters?.[asOfDateKey]) {\r\n setCustomDate(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n }\r\n }, [filters?.[asOfDateKey], asOfDateKey]);\r\n\r\n useEffect(() => {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n ...getStartAndEndDate(filters)\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filters?.[endDateKey], filters?.[startDateKey]]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n if (isDateRange) {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n ...getStartAndEndDate(filters)\r\n });\r\n } else {\r\n setCustomDate(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, isDateRange]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchCompanies());\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n setAllFields(generateFields(reportFilterFields));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n useEffect(() => {\r\n handleDateChange(dateFilter)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dateFilter]);\r\n\r\n const filterDropDownFunc = () => {\r\n return (\r\n <Menu\r\n anchorEl={actionAnchorEl}\r\n open={Boolean(actionAnchorEl)}\r\n onClose={handleFilterClose}\r\n >\r\n {/* <MenuItem className=\"inventoryReportsTitleBar--report-filter\"> */}\r\n {/* Add your options here */}\r\n {filterDropDown?.map((item) => (\r\n <MenuItem onClick={() => handleSelectChange(item)} key={item} value={item?.value}>\r\n <Checkbox checked={isChecked(item)} />\r\n <Typography sx={{ marginLeft: '10px' }} color='theme.neutral.800' type='s3'>{t(item?.name)}</Typography>\r\n </MenuItem>\r\n ))}\r\n {/* </MenuItem> */}\r\n </Menu>\r\n );\r\n };\r\n\r\n const renderFilter = ({\r\n key,\r\n label,\r\n placeholder,\r\n apiType,\r\n valueKey,\r\n customFilter,\r\n multiple = false,\r\n options,\r\n show = true,\r\n showCancelButton = true\r\n }: any) => {\r\n if (!showFilter(key) || !show) return null;\r\n\r\n const companyKey = filterKeys?.company || 'company';\r\n const companyId = filters?.[companyKey];\r\n const hasCompany = Array.isArray(companyId) ? companyId.length > 0 : !!companyId;\r\n\r\n let finalCustomFilter = customFilter;\r\n if (['department', 'designation', 'location'].includes(apiType) ) {\r\n finalCustomFilter = {\r\n ...(typeof customFilter === 'object' ? customFilter : {}),\r\n '&company_id.in': hasCompany?(Array.isArray(companyId) ? companyId.join(',') : companyId):0\r\n };\r\n }\r\n\r\n return (\r\n // <div className=\"search-filter\" key={key}>\r\n <SearchableSelect\r\n labelId={`${key}-label`}\r\n searchPlaceholder={label}\r\n value={filters?.[valueKey]}\r\n onChange={(e) => safeOnDateFilterChange({ [valueKey]: e.target.value })}\r\n showCancelButton={showCancelButton}\r\n apiType={apiType}\r\n isInternal={!apiType && !!options}\r\n options={options}\r\n multiple={multiple}\r\n placeholder={placeholder}\r\n customeFilter={finalCustomFilter}\r\n // CustomDropDownIcon={FilterAltIcon}\r\n customStyle={customStyle}\r\n inputStyle={inputStyle}\r\n />\r\n // </div>\r\n );\r\n };\r\n const FilterContainer = () => (\r\n <>\r\n {filtersConfig.map(renderFilter)}\r\n {customFilterComponents.map(({ key, component }) => (\r\n <React.Fragment key={key}>{component}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n const handleFilterClose = () => {\r\n setActionAnchorEl(null);\r\n };\r\n\r\n const ExportContainer = React.memo(() => {\r\n const handleClose = () => setExportAnchorEl(null);\r\n return (\r\n <Menu\r\n open={Boolean(exportAnchorEl)}\r\n anchorEl={exportAnchorEl}\r\n onClose={handleClose}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"right\",\r\n }}\r\n >\r\n {dropdownMenuButtonData?.options?.map((option, index) => (\r\n <MenuItem\r\n key={index}\r\n onClick={() => {\r\n option.callback();\r\n setExportAnchorEl(null);\r\n }}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\" color={'inherit'}> {option.label}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n )\r\n })\r\n\r\n return (\r\n <div>\r\n <div className=\"reportsTitleBar\">\r\n <div className=\"reportsTitleBar--LeftContent\">\r\n {isTitleMenu ? (\r\n <div style={{ zIndex: 999 }}>\r\n <TitleDropdownButton\r\n onClick={handleAddButton}\r\n options={titleMenus}\r\n isMenuThirdItemDisabled={true}\r\n >\r\n {title}\r\n </TitleDropdownButton>\r\n </div>\r\n ) : (\r\n <Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {title}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {searchBar && (\r\n <div className=\"reportsTitleBar--SearchBar\">\r\n {searchBar}\r\n </div>\r\n )}\r\n <ReportButtons\r\n zIndex={999}\r\n className=\"reportsTitleBar--RightContent\"\r\n buttons={buttons}\r\n />\r\n </div>\r\n {tabs?.length ? (\r\n <div>\r\n <TabBar\r\n tabs={tabs || []}\r\n activeValue={activeValue}\r\n setActiveValue={setActiveValue}\r\n isTabViewOnly={true}\r\n />\r\n </div>\r\n ) : null}\r\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", my: 2.5, alignItems: \"center\", flexWrap: \"wrap\", gap: 1 }}>\r\n <div className=\"reportsTitleBar--FilterWrapper\">\r\n {FilterContainer()}\r\n {/* Date range chip — hidden when showDateFilter is false */}\r\n {/* Date range chip — only shown when isDateRange is true */}\r\n {showDateFilter && isDateRange && (filters?.[endDateKey]) && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.[startDateKey]).format(\"DD/MM/YYYY\")} - ${dayjs(filters?.[endDateKey]).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.dateRange\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.[startDateKey]).format(\"DD/MM/YYYY\")} -{\" \"}\r\n {dayjs(filters?.[endDateKey]).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* Individual Start/End chips — Only show if consolidated range chip is NOT showing and they are specifically enabled */}\r\n {showDateFilter && !isDateRange && isDateFilterEnabled && !['TODAY', 'YESTERDAY'].includes(dateRange) && (\r\n <>\r\n {customDateRange?.startDate && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n style={{ padding: ' 5px 12px' }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(customDateRange?.startDate).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.startDate\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(customDateRange?.startDate).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {customDateRange?.endDate && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n style={{ padding: ' 5px 12px' }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(customDateRange?.endDate).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.endDate\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(customDateRange?.endDate).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n {/* As-of-date chip — hidden when showDateFilter is false */}\r\n {/* As-of-date chip — only shown when isDateRange is false */}\r\n {showDateFilter && filters?.[asOfDateKey] && !isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.[asOfDateKey]).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.date\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.[asOfDateKey]).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* {((filters?.company && selectedCompany) ||\r\n (filters?.[startDateKey] && filters?.[endDateKey]) ||\r\n filters?.[asOfDateKey]) &&\r\n reportFilterFields?.length\r\n ? \"|\"\r\n : \"\"} */}\r\n </div>\r\n <div className=\"report-display\">\r\n {dropdownMenuButtonData?.options?.length > 0 &&\r\n <Box>\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<ExportIcon fontSize=\"small\" />}\r\n onClick={(event) => setExportAnchorEl(event.currentTarget)}\r\n >\r\n {t(\"common.export\")}\r\n </Button>\r\n {exportAnchorEl && (\r\n <ExportContainer />\r\n )}\r\n </Box>\r\n }\r\n\r\n {filterDropDown?.length &&\r\n <>\r\n <Box>\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<FilterIcon fontSize=\"small\" />}\r\n onClick={(event) => setActionAnchorEl(event.currentTarget)}\r\n >\r\n {t(\"common.filter\")}\r\n </Button>\r\n </Box>\r\n {showLevelBtn && <Divider flexItem orientation=\"vertical\" sx={{ height: '50%', alignSelf: 'auto' }} />}\r\n </>\r\n }\r\n\r\n {filterDropDownFunc()}\r\n {showLevelBtn && (\r\n <>\r\n <Box className=\"reportsTitleBar--FilterAction--lvWrapper\" >\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'> Level {level} of {dataLength}</Typography>\r\n <ButtonGroup variant=\"outlined\" disableElevation sx={({ palette }) => ({\r\n '& .MuiButton-root': {\r\n borderColor: `${palette.grey[200]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n },\r\n '& .MuiButtonGroup-firstButton': {\r\n borderTopLeftRadius: 20,\r\n borderBottomLeftRadius: 20\r\n },\r\n '& .MuiButtonGroup-lastButton': {\r\n borderTopRightRadius: 20,\r\n borderBottomRightRadius: 20\r\n }\r\n })}>\r\n <MuiButton onClick={() => {\r\n setLevel(level == dataLength ? level : level + 1)\r\n handleRowsCollapse?.(level)\r\n }}>\r\n <img src={images.common.expand} />\r\n </MuiButton>\r\n <MuiButton onClick={() => {\r\n setLevel(level != 1 ? level - 1 : 1)\r\n handleRowsExpand?.(level)\r\n }}>\r\n <img src={images.common.collapse} />\r\n </MuiButton>\r\n </ButtonGroup>\r\n </Box>\r\n {isDateFilterEnabled && <Divider flexItem orientation=\"vertical\" sx={{ height: '50%', alignSelf: 'auto' }} />}\r\n </>\r\n )}\r\n {/* Date-range dropdown button — only shown when both isDateFilterEnabled AND showDateFilter are true */}\r\n {isDateFilterEnabled && showDateFilter && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'>As of: </Typography>\r\n <ReportButtons\r\n zIndex={997}\r\n className=\"reportsTitleBar--RightContent\"\r\n dropdownMenuButtonData={{\r\n icon: <CalendarIcon fontSize=\"small\" />,\r\n children: (\r\n <>\r\n {RANGE[dateRange]}\r\n <KeyboardArrowDownIcon />\r\n </>\r\n ),\r\n options: options,\r\n }}\r\n toggleCallback={toggleCallback}\r\n />\r\n <div ref={dateSelectRef}></div>\r\n </Box>\r\n )}\r\n </div>\r\n </Box>\r\n {/* <Filter\r\n open={openFilterPopup}\r\n onClose={() => setOpenFilterPopup(false)}\r\n fields={allFields}\r\n onSelectedFilter={(filterName: string) => console.log(filterName)}\r\n // getFilterStatesOnApply={() => {}}\r\n applyFilter={(val: any) => console.log('val', val)}\r\n /> */}\r\n <Popper\r\n sx={{\r\n zIndex: 9999,\r\n }}\r\n open={open}\r\n anchorEl={anchorRef.current}\r\n role={undefined}\r\n transition\r\n disablePortal\r\n >\r\n {({ TransitionProps, placement }) => (\r\n <Grow\r\n {...TransitionProps}\r\n style={{\r\n margin: \"0 20px 0 20px\",\r\n transformOrigin:\r\n placement === \"bottom\" ? \"center top\" : \"center bottom\",\r\n }}\r\n >\r\n <Paper>\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n }}\r\n >\r\n <div>\r\n {isDateRange ? (\r\n <DateRange\r\n editableDateInputs={true}\r\n onChange={(item) => setCustomDateRange(item.selection)}\r\n moveRangeOnFirstSelection={false}\r\n ranges={[customDateRange]}\r\n locale={enUS}\r\n />\r\n ) : (\r\n <Calendar\r\n onChange={(item) => setCustomDate(item)}\r\n date={customDate}\r\n locale={enUS}\r\n />\r\n )}\r\n </div>\r\n <Box sx={{ padding: \"0 12px 12px 0\" }}>\r\n <Button\r\n variant=\"contained\"\r\n sx={{ width: \"fit-content\" }}\r\n onClick={handleFilterPopperSubmit}\r\n >\r\n {t(\"common.apply\")}\r\n </Button>\r\n </Box>\r\n </Box>\r\n </ClickAwayListener>\r\n </Paper>\r\n </Grow>\r\n )}\r\n </Popper>\r\n </div>\r\n );\r\n};\r\n\r\nexport { ReportsTitleBar };\r\nexport default ReportsTitleBar;\r\n","import Button from '../button/button';\r\nimport './sub-header-doc.scss';\r\n\r\nconst SubHeaderDoc = () => {\r\n return (\r\n <section>\r\n <div className=\"top-content\">\r\n <div className=\"left-content\"><a href=\"#\">Forms / </a>Add Custom Field</div>\r\n <div className=\"right-content\">\r\n <div className=\"actions\">\r\n <Button className='' variant='middle'>Action</Button>\r\n </div>\r\n <div className=\"show-preview\">\r\n <Button className='' variant='middle'>Show Preview</Button>\r\n </div>\r\n <div className=\"update\"><Button className='' variant='contained'>Update</Button></div> \r\n </div> \r\n </div>\r\n </section>\r\n );\r\n}\r\n\r\nexport { SubHeaderDoc };\nexport default SubHeaderDoc;","import React, { ReactNode, useEffect, useState } from \"react\";\nimport { Box } from \"@mui/material\";\nimport Tab from \"@mui/material/Tab\";\n\nimport TabContext from \"@mui/lab/TabContext\";\nimport TabList from \"@mui/lab/TabList\";\nimport TabPanel from \"@mui/lab/TabPanel\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nimport \"./tab-bar-ui.scss\";\nimport TextField from \"../text-field/text-field\";\nimport images from \"../../assets/images\";\n\ninterface TabItem {\n tab_order: number;\n title: string;\n content?: string | ReactNode;\n data?: any;\n remove_tab?: boolean;\n tabIcon?: string;\n}\nexport interface ITabProps {\n tabs: TabItem[];\n activeTabValue?: number;\n setActiveTabValue?: React.Dispatch<React.SetStateAction<number | undefined>>;\n onEditTabTitle?: (tabId: number, newTitle: string) => void;\n handleTabChange?: () => void;\n handleRemoveTab?: (tabId: number) => void;\n}\n\nexport const TabBarUi = (props: TabProps) => {\n const { tabs, onEditTabTitle, activeTabValue, setActiveTabValue, handleTabChange, handleRemoveTab } = props;\n const [value, setValue] = useState(0);\n const [editableTabId, setEditableTabId] = useState<number | null>(null);\n const handleChange = (event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue);\n setActiveTabValue && setActiveTabValue(newValue);\n handleTabChange && handleTabChange();\n };\n\n const handleTabDoubleClick = (tabId: number) => {\n setEditableTabId(tabId);\n };\n\n const handleEditTabTitle = (\n event: React.ChangeEvent<HTMLInputElement>,\n tabId: number,\n ) => {\n onEditTabTitle && onEditTabTitle(tabId, event.target.value);\n };\n\n useEffect(() => {\n if (setActiveTabValue && Boolean(tabs?.length)) setActiveTabValue(value);\n // eslint-disable-next-line\n }, [tabs]);\n\n return (\n <Box>\n <TabContext value={activeTabValue ?? value}>\n <Box>\n <TabList\n className=\"account-payble-tabsui-wrap\"\n onChange={handleChange}\n >\n {tabs.map((tab: TabItem) => (\n <Tab\n className=\"account-payble-tab-items\"\n key={tab.tab_order}\n label={\n onEditTabTitle && editableTabId === tab.tab_order ? (\n <TextField\n value={tab.title}\n autoFocus\n onBlur={() => setEditableTabId(null)}\n onChange={(e: any) =>\n handleEditTabTitle(e, tab.tab_order)\n }\n />\n ) : handleRemoveTab ? (\n <div className=\"Tabs--Title\">\n <div>{tab.title}</div>\n {!tab.remove_tab && (\n <CloseIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => {\n handleRemoveTab(tab.tab_order);\n }}\n />\n )}\n </div>\n ) : (\n <div className=\"text-display\">\n <img src={images.common[tab.tabIcon]} />\n {tab.title}\n </div>\n )\n }\n wrapped\n onDoubleClick={() => handleTabDoubleClick(tab.tab_order)}\n />\n ))}\n </TabList>\n </Box>\n {tabs.map(\n (tab: TabItem, index: number) =>\n tab.content && (\n <TabPanel value={index} key={tab.tab_order}>\n {value === index && tab.content}\n </TabPanel>\n ),\n )}\n </TabContext>\n </Box>\n );\n};\n\nexport default TabBarUi;\n","import {\r\n TextareaAutosize as MUITextArea,\r\n TextareaAutosizeProps,\r\n} from \"@mui/base\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Typography from \"../typography/typography\";\r\n\r\ninterface TextAreaProps extends TextareaAutosizeProps {\r\n label?: string;\r\n error?: boolean;\r\n helperText?: string;\r\n}\r\n\r\nconst TextArea = (props: TextAreaProps) => {\r\n const { placeholder, minRows = 3, label, helperText, error, ...rest } = props;\r\n\r\n const StyledTextArea = styled(MUITextArea)(({ theme: { palette } }) => ({\r\n \"&\": {\r\n padding: \"0.4375rem 0.5rem\",\r\n borderRadius: \"0.25rem\",\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.secondary[400],\r\n outline: \"none\",\r\n color: palette.theme?.secondary[800],\r\n fontSize: \"0.875rem\",\r\n \"&::placeholder\": {\r\n opacity: 1,\r\n },\r\n \"&:hover\": {\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.secondary[500],\r\n },\r\n \"&:focus-visible\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.primary[700],\r\n },\r\n \"&:disabled\": {\r\n background: palette.theme?.secondary[200],\r\n },\r\n },\r\n }));\r\n\r\n return (\r\n <>\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {label}\r\n </Typography>\r\n <StyledTextArea\r\n aria-label=\"minimum height\"\r\n minRows={minRows}\r\n placeholder={placeholder}\r\n {...rest}\r\n />\r\n\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mt={-0.25}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {helperText}\r\n </Typography>\r\n </>\r\n );\r\n};\r\nexport { TextArea };\r\nexport default TextArea;\r\n","import React, { useEffect, useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"./time-range-picker.scss\";\nimport { AccessTimeRounded, Close } from \"@mui/icons-material\";\nimport { Box, IconButton, InputAdornment } from \"@mui/material\";\nimport TextField from \"../text-field/text-field\";\n\ninterface TimeRangePickerProps {\n hour12?: boolean;\n startTime?: string;\n endTime?: string;\n onTimeRangeChange: (timeRanges: any[]) => void;\n}\nconst TimeRangePicker: React.FC<TimeRangePickerProps> = (props: any) => {\n const [timeRange, setTimeRange] = useState<string[]>([]);\n const [differenceInMinutes, setDifferenceInMinutes] = useState(0);\n const [cnt, setCnt] = useState(0);\n const [isOpenTimePicker, setIsOpenTimePicker] = useState(undefined);\n const { hour12 = false, startTime, endTime, onTimeRangeChange } = props;\n\n useEffect(() => {\n setTimeRange([]);\n\n const formatDate = (time: string) => {\n if (!time) return null;\n\n const [timePart, meridiem] = time.split(\" \");\n const [hours, minutes] = timePart.split(\":\").map(Number);\n\n let formattedHours = hours;\n\n if (meridiem) {\n if (meridiem === \"PM\") {\n if (hours !== 12) {\n formattedHours += 12;\n }\n } else if (meridiem === \"AM\" && hours === 12) {\n formattedHours -= 12;\n }\n }\n\n const date = new Date();\n date.setHours(formattedHours, minutes, 0, 0);\n\n const formattedTime = date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: hour12,\n });\n let finalFormattedTime = formattedTime;\n\n if (date.getHours() === 0) {\n finalFormattedTime = \"00\" + formattedTime.slice(2); // Replace hours with 00\n } else if (date.getHours() === 12) {\n finalFormattedTime = \"12\" + formattedTime.slice(2); // Replace hours with 12\n }\n return finalFormattedTime;\n };\n\n setTimeRange((prevTimeRange: any) => {\n if (startTime && endTime) {\n const formattedStartTime = formatDate(startTime);\n const formattedEndTime = formatDate(endTime);\n return [...prevTimeRange, formattedStartTime, formattedEndTime];\n }\n return prevTimeRange;\n });\n }, [hour12, startTime, endTime]);\n\n const handleChange = (dates: any) => {\n const formattedTime: any = dates.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: hour12,\n });\n\n let finalFormattedTime = formattedTime;\n\n if (dates.getHours() === 0) {\n finalFormattedTime = \"00\" + formattedTime.slice(2); // Replace hours with 00\n } else if (dates.getHours() === 12) {\n finalFormattedTime = \"12\" + formattedTime.slice(2); // Replace hours with 12\n }\n\n if (timeRange.length < 2) {\n setTimeRange([...timeRange, finalFormattedTime]);\n } else if (cnt === 0) {\n setTimeRange((prevTimeRange) => {\n const updatedTimeRange: any = [...prevTimeRange];\n updatedTimeRange[0] = finalFormattedTime;\n return updatedTimeRange;\n });\n } else if (cnt === 1) {\n setTimeRange((prevTimeRange) => {\n const updatedTimeRange: any = [...prevTimeRange];\n updatedTimeRange[1] = finalFormattedTime;\n return updatedTimeRange;\n });\n }\n setCnt(cnt + 1);\n };\n\n useEffect(() => {\n if (cnt === 2) {\n setCnt(0);\n }\n\n // Calculate the difference between two time ranges\n if (timeRange.length === 2) {\n const startTimeString = timeRange[0];\n const endTimeString = timeRange[1];\n\n // Parsing start time\n const startTotalMinutes = parseTimeToMinutes(startTimeString);\n\n // Parsing end time\n const endTotalMinutes = parseTimeToMinutes(endTimeString);\n\n // Calculating difference\n let difference = endTotalMinutes - startTotalMinutes;\n if (difference < 0) {\n difference += 24 * 60; // Adding 24 hours if end time is smaller than start time\n }\n setDifferenceInMinutes(difference);\n } else {\n setDifferenceInMinutes(0);\n }\n }, [cnt, timeRange]);\n\n const parseTimeToMinutes = (timeString: string) => {\n const [hoursStr, minutesStr, meridiem] = timeString.split(/:| /);\n let hours = parseInt(hoursStr);\n const minutes = parseInt(minutesStr);\n\n if (meridiem && meridiem.toLowerCase() === \"pm\" && hours !== 12) {\n hours += 12;\n } else if (meridiem && meridiem.toLowerCase() === \"am\" && hours === 12) {\n hours = 0;\n }\n\n return hours * 60 + minutes;\n };\n\n useEffect(() => {\n onTimeRangeChange({\n timeRange: timeRange,\n differenceInMinutes: differenceInMinutes,\n });\n }, [differenceInMinutes, onTimeRangeChange, timeRange]);\n\n const handleClick = () => {\n const isOpen: any = isOpenTimePicker === true ? undefined : true;\n setIsOpenTimePicker(isOpen);\n };\n\n const handleCloseClick = (event: any) => {\n setTimeRange([]);\n setCnt(0);\n event.stopPropagation();\n };\n\n const customInput = (\n <TextField\n className=\"time-input\"\n type=\"text\"\n value={\n timeRange.length === 1\n ? `${timeRange[0]} - `\n : timeRange.length === 2\n ? `${timeRange[0]} - ${timeRange[1]}`\n : \"\"\n }\n InputProps={{\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n {timeRange.length > 0 && (\n <IconButton onClick={handleCloseClick}>\n <Close />\n </IconButton>\n )}\n <IconButton onClick={handleClick}>\n <AccessTimeRounded />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n );\n\n return (\n <>\n <Box className=\"DateRangePicker\">\n <DatePicker\n className=\"DatePickerWrapper\"\n onChange={(date: any) => {\n handleChange(date), handleClick();\n }}\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={15}\n selectsRange\n customInput={customInput}\n open={isOpenTimePicker}\n value={\n timeRange && timeRange.length === 1\n ? `${timeRange[0]}-`\n : timeRange && timeRange.length === 2\n ? `${timeRange[0]}-${timeRange[1]}`\n : undefined\n }\n />\n <Box\n className=\"box-icon\"\n style={\n timeRange.length > 0 ? { right: \"2.5rem\" } : { right: \"1.563rem\" }\n }\n >\n {timeRange.length > 0 && <Close onClick={handleCloseClick} />}\n </Box>\n </Box>\n </>\n );\n};\n\nexport default TimeRangePicker;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useEffect, useState, useMemo } from 'react';\r\nimport DynamicSearchSelect from '../form-control/form-builder/form-builder-element/dynamic-select';\r\nimport { useUomFieldUpdater } from '../../hooks/useUomFieldUpdater';\r\nimport { useFormContext } from 'react-hook-form';\r\n\r\ninterface UomFieldWrapperProps {\r\n label: string;\r\n name?: string;\r\n placeholder?: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n is_loading?: boolean;\r\n disabled?: boolean;\r\n selectedItem: any;\r\n selectedUom?: any;\r\n fieldMapping?: Record<string, string>;\r\n customeFilter?: Record<string, any>;\r\n getSelectedData?: (data: any, name: string) => void;\r\n fieldPrefix?: string;\r\n setValue?: any;\r\n control?: any;\r\n isConversationFactor?: boolean;\r\n active_location?: any;\r\n}\r\n\r\nconst UomFieldWrapper: React.FC<UomFieldWrapperProps> = ({\r\n label,\r\n name = 'uom_id',\r\n placeholder,\r\n fieldArrayName,\r\n required = false,\r\n is_loading = false,\r\n disabled = false,\r\n selectedItem,\r\n fieldMapping = {\r\n 'total_on_hand_quantity': 'on_hand_quantity',\r\n 'total_available_quantity': 'available_quantity',\r\n 'total_committed_quantity': 'committed_quantity',\r\n },\r\n customeFilter,\r\n getSelectedData,\r\n fieldPrefix,\r\n setValue,\r\n control,\r\n isConversationFactor = true,\r\n active_location\r\n}) => {\r\n // const selectedUom = useMemo(() => getValues(`${fieldArrayName}.${name}`), [getValues(`${fieldArrayName}.${name}`)])\r\n\r\n const [uomDetails, setUomDetails] = useState<any>(null);\r\n const formContext = useFormContext()\r\n const {\r\n control: contextControl,\r\n setValue: contextSetValue,\r\n } = formContext || {};\r\n\r\n const effectiveFieldPrefix = fieldPrefix !== undefined ? fieldPrefix : fieldArrayName || '';\r\n const finalFieldMapping = useMemo(() => fieldMapping,\r\n //eslint-disable-next-line\r\n [JSON.stringify(fieldMapping)]);\r\n\r\n const handleUomChange = useUomFieldUpdater({\r\n fieldMapping: finalFieldMapping,\r\n sourceData: selectedItem,\r\n conversation_factor: uomDetails?.conversation_factor,\r\n fieldPrefix: effectiveFieldPrefix,\r\n setValue: setValue || contextSetValue,\r\n control: control || contextControl,\r\n active_location: active_location,\r\n // shouldUpdate: !!selectedUom\r\n });\r\n\r\n useEffect(() => {\r\n if (!isConversationFactor) return;\r\n handleUomChange();\r\n // eslint-disable-next-line\r\n }, [handleUomChange, isConversationFactor]);\r\n\r\n const handleUomSelect = (data: any, name: string) => {\r\n setUomDetails(data);\r\n getSelectedData?.(data, name);\r\n };\r\n\r\n const effectiveCustomeFilter = customeFilter || {\r\n '&template_id.eq': selectedItem?.unit_of_measurement || 0\r\n };\r\n\r\n return (\r\n <DynamicSearchSelect\r\n label={label}\r\n name={name}\r\n placeholder={placeholder || ''}\r\n fieldArrayName={fieldArrayName || ''}\r\n formControl={control}\r\n required={required}\r\n is_loading={is_loading}\r\n disabled={disabled}\r\n apiType='uom'\r\n customeFilter={effectiveCustomeFilter}\r\n getSelectedData={handleUomSelect}\r\n />\r\n );\r\n};\r\n\r\nexport default UomFieldWrapper;\r\n","import { useEffect, useState } from \"react\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport \"./user-dropdown.scss\";\nimport Checkbox from \"../checkbox/checkbox\";\n// import Toggle from \"../toggle/toggle\";\nimport Typography from \"../typography/typography\";\n// import FormControlLabel from \"@mui/material/FormControlLabel\";\n\ninterface UserDropdownProps {\n value: {\n isRoleVisible: boolean;\n selectedUsers: number[];\n };\n data: any;\n onToggleChange: () => void;\n onCheckboxChange: (values: number[]) => void;\n}\n\nexport const UserDropdown = (props: UserDropdownProps) => {\n const { value, data, onCheckboxChange, ...rest } = props;\n const { isRoleVisible, selectedUsers } = value;\n const [checked, setChecked] = useState(selectedUsers);\n const [dropdownData, setDropdownData] = useState([]);\n\n // const handleToggle = () => {\n // onToggleChange();\n // setDropdownData([]);\n // };\n\n const handleCheckbox = (value: number, item: any) => () => {\n const currentIndex = checked.findIndex(\n (user: any) => (isRoleVisible ? user.id : user.id) === value,\n );\n const newChecked = [...checked];\n\n if (currentIndex === -1) {\n newChecked.push(item);\n } else {\n newChecked.splice(currentIndex, 1);\n }\n\n setChecked(newChecked);\n onCheckboxChange(newChecked);\n };\n\n useEffect(() => {\n if (isRoleVisible) {\n setDropdownData(data?.departments ?? []);\n } else {\n setDropdownData(data?.users ?? []);\n }\n // eslint-disable-next-line\n }, [isRoleVisible, data]);\n\n return (\n <div className=\"SwitchList\" {...rest}>\n \n <List>\n {dropdownData &&\n dropdownData?.map((item: any) => {\n const labelId = `checkbox-list-secondary-label-${item.id}`;\n\n return (\n <ListItem key={item.id} sx={{cursor:'pointer'}} onClick={handleCheckbox(\n isRoleVisible ? item.id : item.id,\n item, // Pass the entire item to the handleCheckbox function\n )}>\n <ListItemText id={labelId}>\n <Typography\n dangerouslySetInnerHTML={{\n __html: `${\n isRoleVisible\n ? item?.name\n : `${item?.first_name} ${item?.last_name}`\n } <span>${\n isRoleVisible\n ? item.count + \" Users\"\n : item?.department?.name\n }</span>`,\n }}\n />\n </ListItemText>\n <div className=\"list-secondary-content\">\n <Checkbox\n edge=\"end\"\n \n checked={checked.some(\n (user: any) =>\n (isRoleVisible ? user.id : user.id) ===\n (isRoleVisible ? item.id : item.id),\n )}\n inputProps={{ \"aria-labelledby\": labelId }}\n />\n </div>\n </ListItem>\n );\n })}\n </List>\n </div>\n );\n};\n\nexport default UserDropdown;\n"],"names":["ElementController","props","fields","abjMember","append","useFieldArray","control","name","addAdjMember","type","elementName","appendAfter","jsxs","Fragment","children","jsx","Controller","defaultValue","render","field","Object","keys","field1","length","updateField","CloseIcon","style","fontSize","cursor","onClick","AddIcon","map","DynamicInput","placeholder","label","formControl","fieldArrayName","DynamicSelect","options","value","_typeof","o","Symbol","iterator","constructor","prototype","requiredArgs","required","args","TypeError","toDate","argument","arguments","argStr","toString","call","Date","getTime","console","warn","Error","stack","NaN","propTypes","PropTypes","string","isRequired","object","node","func","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","width","String","defaultWidth","formats","formatLong","date","full","long","medium","short","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","valuesArray","context","formattingValues","defaultFormattingWidth","_defaultWidth","_width","values","argumentCallback","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","match","matchedString","parsePatterns","defaultParseWidth","key","Array","isArray","array","predicate","findIndex","pattern","test","hasOwnProperty","findKey","valueCallback","rest","slice","locale","code","formatDistance","token","count","result","tokenValue","replace","addSuffix","comparison","formatRelative","_date","_baseDate","_options","localize","ordinalNumber","dirtyNumber","number","Number","rem100","era","narrow","abbreviated","wide","quarter","month","day","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","parseInt","parseResult","any","index","weekStartsOn","firstWeekContainsDate","getMonth","dirtyDate","getYear","getFullYear","months","CustomDatePickerInput","placeholderText","isRtl","className","CalenderIcon","DateRangePicker","start","end","startYear","onDateRangeChange","startDate","setStartDate","useState","endDate","setEndDate","useLanguage","years","currentYear","i","push","Box","DatePicker","dateFormat","customInput","onChange","dates","selectsRange","isClearable","renderCustomHeader","decreaseMonth","increaseMonth","decreaseYear","increaseYear","prevMonthButtonDisabled","nextMonthButtonDisabled","prevYearButtonDisabled","nextYearButtonDisabled","disabled","KeyboardArrowLeft","KeyboardArrowRight","e","target","year","DynamicDateRange","minDate","dayjs","min_date","isValid","maxDate","max_date","fieldState","Typography","weight","mb","color","error","_a","_b","dataPosition","position","dataName","formType","Boolean","helperText","_c","message","shape","register","setValue","bool","DynamicDateTime","readOnly","DateTimePicker","disableFutureDates","is_future_dates_allowed","disablePastDates","is_past_dates_allowed","minDateTime","min_date_time","maxDateTime","max_date_time","textFieldProps","newValue","isSame","selected","isBefore","adjusted","hour","minute","typeOfField","disable","CustomEditor","lazy","Promise","resolve","then","require","CustomDatePicker","React","memo","fieldName","useMemo","displayName","StyledTextField","styled","MUITextField","theme","palette","height","borderColor","secondary","borderWidth","primary","_d","validationSchema","Yup","approver_id","min","QuickApprovalModal","isOpen","setIsOpen","modalProps","title","onConfirm","isProcessing","users","setUsers","isLoading","isError","data","handleSubmit","reset","getValues","watch","trigger","useForm","resolver","yupResolver","mode","formValues","onSubmit","async","handleModalClose","SelectedItems","displayTitle","selectedItem","user","find","option","id","getLabel","display","justifyContent","alignItems","sx","gap","mt","join","Chip","variant","MoreIcon","Button","useEffect","filters","skip","limit","response","getV1User","getToken","getAndSetFetchUsers","enqueueSnackbar","obj","first_name","last_name","formatLabel","Modal","open","onClose","maxWidth","fullWidth","disableEscapeKeyDown","DialogTitle","IconButton","Close","DialogContent","Select","size","renderValue","ChipOrPlaceholder","onDelete","multiple","colors","randomColor","Math","floor","random","avatarStyle","borderRadius","textAlign","backgroundColor","MenuItem","includes","Avatar","src","profile_image","alt","Checkbox","checked","DialogActions","endIcon","CircularProgress","ColumnHeader","column","isRenameColumn","setIsRenameColumn","newColumnTitle","setNewColumnTitle","onDoubleClick","cards","images","more","ItemsSummary","Accordion","accordionProps","defaultExpanded","borderBottomWidth","totalQuantity","currencySymbol","total","DiscountSummary","enalblePromotions","itemDiscount","additionalDiscount","promotionAmount","totalDiscount","SubtotalSummary","subtotalExTax","subtotalExDiscount","TaxesAndChargesSummary","enableShippings","taxes","deductedTax","shippingAmount","handlingAmount","TotalSummary","roundOffDifferenceAmount","CardWrapper","login","password","matches","StyledFlagsSelect","ReactFlagsSelect","span","svg","padding","border","ul","input","margin","background","search","paddingLeft","backgroundRepeat","li","boxShadow","marginTop","div","borderBottom","paddingBottom","ToggleContainer","spacing","transition","minWidth","common","white","grey","opacity","SlidingBackground","top","bottom","zIndex","ToggleLabel","ButtonBase","active","fontWeight","whiteSpace","userSelect","main","ExpandableSummaryWrapper","expandedGridSize","collapsedGridSize","ariaLabel","onToggle","persistState","storageKey","showToggleButton","mobileDrawer","showCollapseIcon","useTheme","isMobile","useMediaQuery","breakpoints","down","currentLanguage","direction","isExpanded","setIsExpanded","window","stored","localStorage","getItem","JSON","parse","showAfterDelay","setShowAfterDelay","timer","setTimeout","clearTimeout","handleToggle","newState","newGridSize","setItem","stringify","currentGridSize","fab","bgcolor","paper","divider","action","hover","ChevronLeft","Drawer","anchor","up","Grid","item","xs","transitions","create","easing","sharp","duration","enteringScreen","overflow","minHeight","Tooltip","placement","ChevronRight","flexDirection","borderLeft","Collapse","in","orientation","text","writingMode","textOrientation","letterSpacing","ReportButtons","buttons","dropdownMenuButtonData","toggleCallback","iconPosition","ele","class","btnStyle","startIcon","icon","DropdownButton","isMenuThirdItemDisabled","isOnlyDropDownButton","buttonGroupProps","onlyDropDownButtonProps","customStyle","generateMenuItems","with_checkboxes","items","forEach","isGroup","_","some","opt","pl","indexOf","enable_footer","Divider","flexItem","onFooterClick","Add","MultiSelect","setOptions","selectedValue","setSelectedValue","is_multiselect","removeUndefine","selectOptions","filter","handleSetOptions","useCallback","t","useTranslation","OutlinedInput","endAdornment","InputAdornment","edge","mr","selectedLabel","onChipRemove","chipProps","searchPlaceholder","handleSearch","searchValue","child","sValue","v","loading","is_loading","arrayOf","footer_action","pt","pb","pr","columns","header","accessorKey","visible","formArrayName","defaultValues","schedule_report","schedule_date","schedule_time","apiPayload","autopost","val","is_recurring","emails","next_schedule_date","subject","report_id","scheduleReportValidationSchema","mixed","selectedDate","startOf","isAfter","this","parent","now","selectedTime","second","email","boolean","when","is","schema","otherwise","optional","nullable","AUTO_POST_OPTIONS","updateScheduleReportType","payload","putV1ReportsUpdateScheduleReportId","createScheduleReportType","postV1ReportsScheduleReport","ScheduleReportModal","itemData","module","report","submitLoading","setSubmitLoading","shouldUnregister","isRecurring","disableReport","handleFormSubmit","vals","valuesPayload","formatDateForPayload","formatTimeForPayload","updatedPayload","mapApiPayload","apiFunc","errorMessage","getErrorMessage","fetchReportByName","log","getV1ReportsReportList","getScheduleReportById","reports","split","set","scheduleDate","isToday","ModalLoader","container","rowGap","columnSpacing","sm","DynamicSearchSelect","apiType","customeFilter","DynamicDate","DynamicTime","timeSteps","minutes","ampm","minTime","ChipGenerator","validation","DynamicCheckBox","titlePosition","SnackbarCloseButton","snackbarKey","closeSnackbar","useSnackbar","FileConfirmationDialog","onReplace","onKeepBoth","isFile","Dialog","formatBytes","bytes","decimals","dm","parseFloat","pow","toFixed","deleteIcon","onMouseDown","event","stopPropagation","parentValue","childOptions","childValues","updatedValues","handleParentChange","InlineEditFields","row","col","errors","setValidationErrors","onChangeRowField","getSelectedData","syncFieldValue","inputValue","setInputValue","isInitialSet","setIsInitialSet","customFilter","useRef","editCols","getAllCells","columnDef","enableEditing","editVariant","fieldProperties","editProperties","fieldDisbled","_valuesCache","handleCustomFilter","current","valueKey","is_multiple","get","original","editSelectOptions","matchingOption","selectedData","validateAt","abortEarly","fe","err","yup","ValidationError","inner","path","em","validate","editFields","dValues","cell","vl","TextField","autoFocus","field_name","SearchableSelect","filterKey","labelKey","bindingKey","attributes","isInternal","format","_e","TimePicker","is24hrFormat","UploadMedia","max_size","PhoneInput","default_value","_f","_g","isInlineEditing","defaultChecked","_h","TableWrapper","lineHeight","maxHeight","MaterialEditableTable","enablePagination","rows","totalPages","paginationModel","columnOrder","updateData","handleColumnOrdering","enableColumnDragging","states","rowActionMenu","destructiveActionMenu","disableDefaultActionColumn","enableRowSelection","defaultActionColumnItems","enableBottomToolbar","SetSelectedRowId","isResetRow","onCreateRow","onEditRow","onDeleteRow","editDisplayMode","enableRowCreate","onSelectRow","enableColumnResizing","selectedRowIds","onColumnVisibility","onSortingChange","disabledDefaultActionColumnIcon","enableAddCustomField","enableRowDragging","handleColumnResizing","columnSizes","hideSaveButton","hideDeleteButton","enableFirstRowEdit","formData","updatePageInfo","activePage","aPage","usePages","useDeepMemo","pageNo","setRow","tableColumns","setTableColumns","anchorEl","setAnchorEl","popUpShow","setPopupShow","rowAnchorEl","setRowAnchorEl","visibleColumns","hiddenColumns","filteredOptions","setFilteredOptions","selectedRow","setSelectedRow","validationErrors","setValidationSchema","isCreatingRow","setIsCreatingRow","isEditingRow","setIsEditingRow","isDeletingRow","setIsDeletingRow","rowToDelete","setRowToDelete","rowSelection","setRowSelection","isChecked","setIsChecked","sorting","setSorting","disableNextEdit","setDisableNextEdit","columnSizing","setColumnSizing","column_sizes","columnSizingInfo","setColumnSizingInfo","columnSizingStart","deltaOffset","deltaPercentage","isResizingColumn","startOffset","startSize","navigate","useNavigate","currentModule","location","pathname","redirectionPath","PathnameAccounting","CUSTOM_FORM","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameUsers","PathnameRental","PathnameDocument","ADD_CUSTOM_FIELDS","validationReducer","vld","msg_en","typeError","trim","notRequired","defined","strict","oneOf","notOneOf","default","transform","fn","meta","lowercase","uppercase","url","uuid","max","regex","RegExp","lessThan","moreThan","positive","negative","integer","round","method","truncate","ensure","compact","rejector","of","noUnknown","testFn","relation","s","thenValidations","reduce","acc","otherWiseValidations","clm","validations","baseSchema","originalValue","excludeEmptyString","getValidationType","handleHeaderClick","currentTarget","formtValues","cells","c","File","display_name","checkRequired","selectedRows","Function","sortingArray","getTextWidth","ctx","document","createElement","getContext","measureText","handleSaveRow","table","isEditMode","setLoadingState","setEditingRow","setCreatingRow","extractValidationErrors","valuesRef","rowId","columnId","clearRow","getRowValues","saveEditingRow","editingRow","getState","creatingRow","saveCreatingRow","useMaterialReactTable","defaultColumn","minSize","Edit","callback","Header","maxSize","p","arrowIcon","muiTableHeadCellProps","muiTableBodyCellProps","Cell","updatedProps","cloneElement","handleActionsClick","muiTablePaperProps","tableLayout","columnResizeMode","onEditingRowSave","onCreatingRowSave","onCreatingRowCancel","onEditingRowCancel","displayColumnDefOptions","renderRowActions","enableExpanding","parentId","Trash","renderBottomToolbarCustomActions","onRowSelectionChange","enableColumnOrdering","createDisplayMode","positionCreatingRow","enableTopToolbar","enableColumnActions","enableSorting","enableGrouping","enableStickyHeader","enableSortingRemoval","state","columnPinning","left","isSaving","showProgressBars","getRowId","muiTableBodyRowProps","editingRowId","isErrorRow","has_error","onColumnOrderChange","colOrder","onColumnSizingChange","onColumnSizingInfoChange","renderEmptyRowsFallback","tableNoData","paginationDisplayMode","muiPaginationProps","page","showRowsPerPage","boundaryCount","muiEditTextFieldProps","InputProps","disableUnderline","onBlur","muiCircularProgressProps","right","muiTableBodyProps","muiTableHeadProps","tableCell","closest","querySelector","isOnClickEditable","isCurrentlyEditing","onKeyUp","creatingRowId","preventDefault","currentCreatingRow","currentEditingRow","muiSelectCheckboxProps","RecgtangleIcon","checkedIcon","CheckBoxIcon","muiSelectAllCheckboxProps","muiBottomToolbarProps","layoutMode","icons","DragHandleIcon","SortIcon","ArrowUpDown","ArrowDownwardIcon","ArrowUpwardIcon","ExpandMoreIcon","ExpandLessIcon","SyncAltIcon","CancelIcon","getSelectedRowModel","selectedRowModels","selection","traverseRows","parentKey","rowKey","subRows","getRowModel","resetRowSelection","hasAutoEditedFirstRow","firstRow","dropdownOpenTimer","saveTimer","lastDropdownClick","isDropdownInteraction","handleMouseDown","handleClick","addEventListener","removeEventListener","MaterialReactTable","Menu","ListItemIcon","ChevronLeftIcon","ListItemText","SearchBar","searchQuery","filteredColumns","toLowerCase","handleSearchEvent","updatedColumns","updatedFilteredOptions","handleAddColumn","addIcon","handleVisibleColumn","dotsIcon","eyeIcon","ChevronRightIcon","handleAction","ConfirmPopUp","handleRowDelete","description","wrapText","textSelection","each","d3","select","originalText","substring","words","reverse","word","line","lineNumber","y","attr","dy","tspan","pop","getComputedTextLength","defaultColors","formatNumber","num","defaultCurrencySymbol","GridCardMarkup","Card","m","CardContent","flexShrink","marginBottom","company","status","textDecorationLine","amount","GridWrapper","ErpLoader","align","GridCard","config","handleRedirection","form","formatText","charAt","toUpperCase","is_system_field","createdOnAndBy","_id","INITIAL_ORDER","DEFAULT_ACTION_BAR_DATA","DynamicRow","rowData","level","tableHeaders","totalHeaders","headers","collapsAll","collapsLevel","isIncrese","rowPath","selectedRowPaths","onCheckboxChange","enableCheckBox","rowHeight","columnWidths","setOpen","prevOpen","getNestedValue","formattedValue","formateValueByType","every","TableRow","borderBottomColor","borderTop","enableCheckbox","TableCell","wordWrap","joinWithLeft","cellIndex","h","cellsToMerge","colSpan","mergeCells","totalWidth","showData","isCollaps","ArrowDropUpIcon","ArrowDropDownIcon","textOverflow","timeout","unmountOnExit","idx","arr","dataSlice","dataIndex","bgColor","DEFAULT_MEASUREMENT_CONFIG","fontFamily","primaryFont","canvasContext","getCanvasContext","canvas","measureTextWidth","textStr","font","measureTextWidthCanvas","element","visibility","textContent","body","appendChild","offsetWidth","removeChild","measureTextWidthDOM","formatValueForMeasurement","toLocaleDateString","valueMapper","toFixedWithNumbers","formatDate","Loader","LoaderContainer","defaultOperators","textOperators","numberOperators","selectOperators","valueEditorType","operators","inputType","comparator","datatype","dynamicFields","HorizontalBarChart","chart","currency","svgRef","containerRef","tooltipRef","labels","datasets","chartCurrency","maxAbsValue","d","abs","hasNegative","yAxisWidth","chartHeight","selectAll","remove","containerWidth","parentElement","clientWidth","barWidth","barHeight","xMax","x","scaleLinear","domain","range","scaleBand","chartGroup","xTicks","ticks","enter","absNum","formatAxisValue","bandwidth","on","innerHTML","suffix","shortNum","formatHover","offsetX","offsetY","formatBarLabel","yAxis","axisLeft","tickSize","tickFormat","truncateLabel","str","maxLen","ref","pointerEvents","SimpleBarChart","showValueLabels","maxValue","yMin","yMax","yTicks","xAxis","axisBottom","PIE_COLORS","DonutChart","dataset","unit","sum","pct","sortedData","sort","a","b","parentWidth","chartSize","outerRadius","innerRadius","g","pie","padAngle","arc","cornerRadius","formatHoverValue","formatForHover","curr","formattedCenter","flexWrap","GroupedBarChart","ds","dataKeys","needRotate","l","x0","x1","absValue","barY","ApiChartsRenderer","charts","chartMap","bar","horizontal_bar","donut","grouped_bar","Component","chart_type","aiSummaryData","onExpand","dynamicData","summaryText","insights","flags","flag","severity","AlertTriangle","Clock","TrendingUp","summary","expanded","setExpanded","copied","setCopied","insightsVisible","setInsightsVisible","displayed","done","speed","setDisplayed","setDone","interval","setInterval","clearInterval","useTypingEffect","Sparkles","ChevronDown","navigator","clipboard","writeText","Check","Copy","ChevronUp","insight","viewBox","fill","stroke","strokeWidth","actions","view","delete","update","Timeline","overflowY","TimelineItem","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","username","resource","created_at","textfield","textfieldTitle","onCommentSubmit","containerProps","accordion","useAuth","chatRef","scrollToBottom","scrollTop","scrollHeight","formatDateTime","currentDate","commentDate","timeDifference","secondsDifference","minutesDifference","hoursDifference","optionsDate","optionsTime","hour12","toLocaleString","timelineItems","chat","full_name","onKeyDown","commentValue","addApprover","fetchApi","showAcceptOrReject","moduleIdKey","moduleId","successMessage","showSubmitBtn","updateApi","approvalDetails","dispatch","useDispatch","isUpdatingApproval","setIsUpdatingApproval","openQuickApprovalModal","setOpenQuickApprovalModal","approvalToAcceptOrReject","setApprovalToAcceptOrReject","handleSubmitForApproval","approvers","apiHelper","approverIds","rStatus","requestStatus","msg","buttonTexts","confirm","cancel","buttonColors","modalType","customLabelFormatter","yAxisLabelType","customLegend","wrapperRef","setContainerWidth","tooltipData","setTooltipData","wrapper","resizeObserver","ResizeObserver","entries","newWidth","contentRect","observe","unobserve","scalePoint","numTicks","xAxisGroup","symbol","labelType","tickSizeOuter","area","y0","y1","gradient","isSmooth","datum","curve","curveMonotoneX","curveLinear","showCircle","pageX","pageY","content","numOfLines","initialWidth","yAxisMaxValue","yAxisTicks","needsHorizontalScroll","calculatedChartWidth","maxLabelWidth","tick","axisTop","tickPadding","availableHeight","maxOptimalTicks","optimalNumTicks","optimalTicks","optimalInterval","tickValues","overflowX","xPosition","yPosition","tooltipWidth","tooltip","getBoundingClientRect","tooltipText","html","bars","lines","showGrid","barColors","lineColors","scrollContainerRef","setTooltip","innerWidth","innerHeight","nice","xPos","yPos","pointer","scrollLeft","lineGenerator","monthPosition","closestDataPoint","board","setBoard","isAddingColumn","setIsAddingColumn","Board","initialBoard","allowAddCard","allowAddColumn","renderColumnHeader","renderColumnAdder","newColumnAdded","role","allowRemoveCard","allowRenameColumn","onCardNew","onCardRemove","onColumnRemove","onColumnRename","onNewCardConfirm","draftCard","expenses","currency_data","itemsData","setItemsData","discountData","setDiscountData","subtotalData","setSubtotalData","taxesData","setTaxesData","totalData","setTotalData","eRate","exchange_rate","totalItemsExpenseDiscount","totalTaxAmount","additinoalDiscountAmount","finalAmount","roundOffDifference","calculateEntries","additional_discount_on","additional_discount_percentage","additional_discount_amount","round_off","round_off_option","shippingAmountWithERate","shipping_cost","shipping_tax_amount","handlingAmountWithERate","handling_cost","handling_tax_amount","promotionAmountWithERate","promotion_amount","grandTotal","currency_id","FullCalendar","eventContent","renderEventContent","schedulerLicenseKey","initialView","droppable","displayEventTime","headerToolbar","buttonText","selectable","plugins","dayGridPlugin","interactionPlugin","timeGridPlugin","resourceTimeGridPlugin","timelinePlugin","listPlugin","resourceTimelinePlugin","eventClick","events","handleSelectedDates","dayMaxEvents","showNonCurrentDates","eventColor","showModal","setShowModal","userId","changeUserPasswordByAdmin","isNotify","setIsNotify","toast","setToast","showPassword","setShowPassword","FlexBox","Eye","htmlColor","EyeOff","onIconClick","FormControlLabel","Toast","handleClose","anchorOrigin","horizontal","vertical","autoHideDuration","legends","alignContent","legend","marginLeft","classes","FormHelperText","country","handleCountry","searchable","selectButtonClassName","onSelect","showSelectedLabel","subTitle","currencyRow","handleMenuOpen","orient","leftLabel","rightLabel","setChecked","handleTextClick","isRightLabel","disableRipple","logo","ArrowCircleUpIcon","customElement","showEdit","showDropDowan","isEditingMode","setIsEditingMode","anchorMoreEl","setAnchorMoreEl","handleMoreIconClose","editIcon","edit","donutThickerValue","CustomLegends","getSingleNumberFromString","labelColor","valueColor","isUserDashbord","totalUsers","titleProps","valueProps","handleEditorReady","onEditorChange","mainContentProps","summaryContent","summaryProps","maxGridSize","defaultSummaryExpanded","expandedSummarySize","collapsedSummarySize","onLayoutChange","enableTransitions","transitionDuration","transitionEasing","getInitialState","initialMainSize","mainContentSize","setMainContentSize","handleSummaryToggle","summaryGridSize","newMainContentSize","transitionStyles","mergedSummaryProps","handleSaveAction","actionButtons","button","fetchEntity","fallbackRoute","idField","params","useParams","useLocation","entity","setEntity","setLoading","entityId","getEntityId","loadEntity","field_type","min_length","max_length","is_multiline","is_required","is_unique","useAppTranslations","useApi","formBuilder","setFormBuilder","totalCount","actionBarData","setActionBarData","formView","setSearch","actionBarActiveTab","setActionBarActiveTab","viewTypes","TABLE","setColumnOrder","modulesConfig","moduleConfig","filterName","navigationPath","company_id","paginationData","ceil","handlePaginationModel","model","prev","handleRowClick","footerPages","fetchForms","order","desc","getV1FormBuilder","pagination","timeoutId","ActionBar","setData","setActive","tab","showFilter","MaterialTable","GRID","Footer","pages","setPages","currentPage","setCurrentPage","sharedPages","savePageConfiguration","handlePageDelete","enablePages","isPaginationDisplayed","showList","progressChange","dateChange","tasks","task","setTask","taskProgressColor","tertiary6","taskBackgroundColor","milestoneColor","tertiary4","projectProgressColor","tertiary3","projectBackgroundColor","_j","_i","todayColor","_l","_k","tertiary5","Gantt","viewMode","ViewMode","Day","listCellWidth","columnWidth","barCornerRadius","onProgressChange","updatedTask","taskIndex","updatedTasks","onDateChange","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","projectBackgroundSelectedColor","projectProgressSelectedColor","onExpanderClick","clickedTask","prevTasks","setPagination","initialLoading","setInitialLoading","setIsLoading","openScheduleModal","setOpenScheduleModal","isDeleting","setIsDeleting","scheduleReportToDelete","setScheduleReportToDelete","tableRows","setRows","transformTableColumns","translationFn","enableFooter","redirectionLink","redirectionLinkState","statusClasses","customizeValue","columnAccessorKey","renderEmails","getScheduleReport","getV1ReportsScheduleReport","getScheduleReportType","schedulers","handleUpdate","Fallback","heading","subHeading","reportsFallback","deleteV1ReportsScheduleReportId","deleteScheduleReportType","cardData","invoiceFallback","chartData","flat","chartWidth","handleAddButton","isTitleMenu","titleMenus","reportFilterFields","tabs","activeValue","setActiveValue","isDateFilterEnabled","onDateFilterChange","isDateRange","activeView","setActiveView","showLevelBtn","handleRowsExpand","handleRowsCollapse","showLeftContent","isViewButton","handleRedirect","dataLength","filterDropDown","filterKeys","customFilterConfig","customSelectedFilter","showDateFilter","customFilterComponents","defaultSelectedFilter","defaultConfig","filtersConfig","inputStyle","safeOnDateFilterChange","start_date","end_date","as_of_date","allFields","setAllFields","dateRange","setDateRange","customDate","setCustomDate","defaultSelected","selectedItems","setSelectedItems","setLevel","customDateRange","setCustomDateRange","anchorRef","actionAnchorEl","setActionAnchorEl","dateSelectRef","chipDateSelectRef","handleCloseDatePopper","handleDateChange","handleCompareDateRange","RANGE","from","to","contains","TODAY","THIS_WEEK","THIS_MONTH","THIS_QUARTER","THIS_YEAR","YESTERDAY","PREVIOUS_WEEK","PREVIOUS_MONTH","PREVIOUS_QUARTER","PREVIOUS_YEAR","CUSTOM","handleFilterPopperSubmit","dateRangeFilter","dateFilter","generateFields","TitleDropdownButton","CHART","HeaderCard","mx","TabBar","KeyboardArrowDownIcon","labelId","component","sidebar","calendar2","FilterIcon","alignSelf","handleSelectChange","ButtonGroup","disableElevation","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","MuiButton","expand","collapse","my","Popper","disablePortal","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","DateRange","editableDateInputs","moveRangeOnFirstSelection","ranges","Calendar","isRental","responseItems","setResponseItems","getResponseItems","rfqResponseItems","fetchRentalResponseItems","fetchRfqItemsByIdForResponse","errorMsg","item_data","paddingTop","responseItemDetailsColumns","showSearch","setShowSearch","setColumns","tableData","showMenu","setShowMenu","isSubMenuOpen","setIsSubMenuOpen","onSearchClose","cellProps","useExtraCells","onColumnResize","newSize","prevColsMap","ci","newArray","splice","getContent","dataType","allowOverlay","kind","GridCellKind","displayData","Image","allowAdd","Bubble","Custom","copyData","allowedValues","displayDate","toISOString","Text","readonly","onCellEdited","onRowAppended","newRowObj","onHeaderClicked","renderLayer","layerProps","useLayer","triggerOffset","onOutsideClick","cv","getBounds","bounds","auto","onHeaderMenuClick","onAddCol","newData","new","hasMenu","onColMoved","startIndex","endIndex","old","newCols","toMove","AccordionSummary","expandIcon","RadioButtonCheckedIcon","AccordionDetails","DataEditor","getCellContent","onCellContextMenu","rowMarkers","getCellsForSelection","onDragOverCell","onRowMoved","alert","onColumnMoved","trailingRowOptions","sticky","tint","hint","smoothScrollX","smoothScrollY","verticalBorder","onDragStart","rightElement","rightElementProps","searchText","disabledViews","selectedIds","pageName","importModuleName","showAddButton","paginationResource","GridComponent","onColumnOrdering","fallbackIcon","onDeleteConfirm","deleteTitle","deleteDescription","resetState","setPaginationModel","deleteApi","storeName","isUseFields","customFields","loadinState","customRows","useAppSelector","store","pLimit","page_size","listingState","setListingState","itemToDelete","handleDeleteClick","enhancedDestructiveActions","cleanUp","getData","useDataFetcher","views","active_view","actionBtn","column_order","newOrder","visible_columns","shippmentFallback","requestToDelete","deleteRecord","lowerCaseQuery","filtered","debounceTime","yAxisData","xAxisData","chartLine","displayDot","multiModule","complexPermissions","customPermissionCheck","redirectTo","showError","permissions","usePermissions","hasPermission","permList","operator","results","mod","act","modules","ErrorComponent","Navigate","handleSort","enableSearch","headerHeight","onSelectionChange","afterHeader","totalKey","setFilter","baseData","setBaseData","formatedData","setFormatedData","searchQueries","setSearchQueries","setSelectedRowPaths","setColumnWidths","resizingColumn","setResizingColumn","resizeStartX","resizeStartWidth","headerRefs","isInitialized","setIsInitialized","isSorting","setIsSorting","getAllRowPaths","currentPath","paths","nextLevel","nextRowKey","concat","rowContentSamples","maxRows","samples","sampledCount","maxSamples","sampleRows","levelHeaders","columnLabel","lh","rendered","sampleRowContent","calculatedWidths","measurementConfig","constraints","numericWidth","headerWidth","maxRowContentWidth","contentWidth","calculatedWidth","calculateColumnWidths","handleCheckboxChange","allRowPaths","allSelected","sel","someSelected","searchReportNestedByKey","query","keysToSearch","queryLower","nestedObj","k","n","filteredData","handleMouseMove","diff","clientX","handleMouseUp","getDataByPath","showTotals","TableContainer","Table","borderCollapse","TableHead","indeterminate","allPaths","handleHeaderCheckboxChange","el","paddingRight","flex","ArrowUp","ArrowDown","columnName","TableBody","searchBar","startDateKey","endDateKey","asOfDateKey","useAppDispatch","exportAnchorEl","setExportAnchorEl","processedData","keysToStrip","getStartAndEndDate","fetchCompanies","ExportContainer","isTabViewOnly","show","showCancelButton","companyKey","companyId","hasCompany","finalCustomFilter","ExportIcon","CalendarIcon","SnackbarProvider","href","onEditTabTitle","activeTabValue","setActiveTabValue","handleTabChange","handleRemoveTab","editableTabId","setEditableTabId","TabContext","TabList","Tab","tab_order","handleEditTabTitle","tabId","remove_tab","tabIcon","wrapped","handleTabDoubleClick","TabPanel","minRows","StyledTextArea","MUITextArea","outline","borderStyle","timeRange","setTimeRange","differenceInMinutes","setDifferenceInMinutes","cnt","setCnt","isOpenTimePicker","setIsOpenTimePicker","startTime","endTime","onTimeRangeChange","timePart","meridiem","hours","formattedHours","setHours","formattedTime","toLocaleTimeString","finalFormattedTime","getHours","prevTimeRange","formattedStartTime","formattedEndTime","startTimeString","endTimeString","startTotalMinutes","parseTimeToMinutes","difference","timeString","hoursStr","minutesStr","handleCloseClick","AccessTimeRounded","updatedTimeRange","handleChange","showTimeSelect","showTimeSelectOnly","timeIntervals","fieldMapping","total_on_hand_quantity","total_available_quantity","total_committed_quantity","fieldPrefix","isConversationFactor","active_location","uomDetails","setUomDetails","formContext","useFormContext","contextSetValue","effectiveFieldPrefix","handleUomChange","sourceData","conversation_factor","shouldUpdate","sourceKey","targetKey","sourceValue","factor","fieldPath","convertedValue","location_wise_quantity","location_quantity","location_id","total_reserved_quantity","useUomFieldUpdater","effectiveCustomeFilter","unit_of_measurement","accept","existingDriveData","fileUploaded","files","setFiles","isUploading","setIsUploading","isCollapsed","setIsCollapsed","isDialogMinimized","setIsDialogMinimized","isDragOver","setIsDragOver","abortController","setAbortController","AbortController","authToken","auth","storageTokenKeyName","allDriveData","setAllDriveData","isConfirmDialogOpen","setIsConfirmDialogOpen","selectedFileTitle","setSelectedFileTitle","getRootProps","getInputProps","isDragActive","useDropzone","onDropAccepted","newFiles","file","isPrivate","checkboxDisabled","uploadProgress","fileSize","fileName","fileType","onDragEnter","onDragLeave","noClick","noKeyboard","types","fileInputRef","driveTitles","handleBeforeUnload","returnValue","getInternetSpeed","customNavigator","connection","downlink","renderFileIcon","upload","documentPDF","docFile","BASE_URL","getApiConfig","backendBaseUrl","handleConfirm","controller","filteredFiles","handleMultipartUpload","handleRegularUpload","prevFiles","updatedFiles","tempCount","fileCount","mimeType","f","preSignedUrlsResponse","fetch","signal","preSignedUrlsData","json","status_code","preSignedUrl","preSignedData","presignedUrl","partParams","Body","contentLength","chunkSize","bytesUploaded","progress","partSize","parts","preSignedUrls","uploadId","partNum","partNumber","markCompleteResponse","markCompleteData","handleChipClick","setAttribute","removeAttribute","click","handleFileChange","selectedFiles","fileTitles","lastIndexOf","removeFile","indexToRemove","handleMinimizeClick","handleDialogClose","abort","aborted","onCloseConfirmPopup","ml","RemoveIcon","documentUpload","monitor","camera","toggleIsPrivate","trash","LinearProgress","prevIsCollapsed","KeyboardArrowUp","KeyboardArrowDown","Clear","empty","close","folder","baseUrl","fileId","isRoleVisible","selectedUsers","dropdownData","setDropdownData","handleCheckbox","currentIndex","newChecked","departments","List","ListItem","dangerouslySetInnerHTML","__html","department","inputProps","r"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}
1
+ {"version":3,"file":"ai-summary-4NVNEHfi.js","sources":["../../src/components/form-control/form-builder/element-controller.tsx","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../node_modules/date-fns/esm/toDate/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../node_modules/date-fns/esm/locale/en-US/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../node_modules/date-fns/esm/getMonth/index.js","../../node_modules/date-fns/esm/getYear/index.js","../../src/components/date-range-picker/date-range-picker.tsx","../../src/components/form-control/form-builder/form-builder-element/date-range-picker.tsx","../../src/components/form-control/form-builder/form-builder-element/date-time.tsx","../../src/components/form-control/form-builder/form-builder-element/dynamic-text-editor.tsx","../../src/components/form-control/form-builder/form-builder-element/custom-date-picker.tsx","../../src/components/form-control/form-parser/data.ts","../../src/components/activity-tag/activity-tag.tsx","../../src/components/quick-approval-modal/quick-approval-modal.tsx","../../src/components/board/columnHeader.tsx","../../src/components/calculation-summary/components/items-summary.tsx","../../src/components/calculation-summary/components/discount-summary.tsx","../../src/components/calculation-summary/components/subtotal-summary.tsx","../../src/components/calculation-summary/components/taxes-and-charges-summary.tsx","../../src/components/calculation-summary/components/total-summary.tsx","../../src/components/card-wrapper/card-wrapper.tsx","../../src/components/change-user-password-modal/change-user-password-modal.tsx","../../src/components/country-select/country-select.tsx","../../src/components/custom-toggle-switch/custom-toggle-switch.tsx","../../src/components/expandable-summary-wrapper/expandable-summary-wrapper.tsx","../../src/components/inventory-reports-title-bar/report-buttons/report-buttons.tsx","../../src/components/inventory-reports-title-bar/inventory-reports-title-bar.tsx","../../src/components/multi-select/multi-select.tsx","../../src/components/protected-route.tsx","../../src/components/reports-title-bar/report-buttons/report-buttons.tsx","../../src/components/schedule-report/utils/constant.ts","../../src/components/schedule-report/validator.ts","../../src/components/schedule-report/utils/common.ts","../../src/components/schedule-report/schedule-report-modal.tsx","../../src/components/snackbar/snackbar.tsx","../../src/components/upload/file-confirmation.tsx","../../src/components/upload/upload.tsx","../../src/components/select/controller/chip-or-placeholder.tsx","../../src/components/select/controller/controller-select.tsx","../../src/components/material-editable-table/components/inline-edit-fields.tsx","../../src/components/material-editable-table/material-editable-table.tsx","../../src/components/charts/barChart/barChart.tsx","../../src/components/charts/donut-chart/donut-chart.tsx","../../src/components/charts/donutChart/DonutChart.tsx","../../src/components/grid/grid-card/grid-card.tsx","../../src/components/grid/grid-wrapper/grid-wrapper.tsx","../../src/components/custom-forms/grid-view/grid-view.tsx","../../src/components/custom-forms/FORMS.tsx","../../src/components/reports/dynamic-report/dynamic-rows.tsx","../../src/utils/text-measurement.ts","../../src/hooks/useUomFieldUpdater.tsx","../../src/components/loaders/form-loader.tsx","../../src/components/loaders/page-loader.tsx","../../src/components/filter/fields.ts","../../src/components/ai-summary/chart/horizontal-bar-chart.tsx","../../src/components/ai-summary/chart/simple-bar-chart.tsx","../../src/components/ai-summary/chart/donut-chart.tsx","../../src/components/ai-summary/chart/grouped-bar-chart.tsx","../../src/components/ai-summary/ai-summary.tsx","../../src/components/activityLog/activity-log.tsx","../../src/components/approval-wrapper/approval-wrapper.tsx","../../src/components/charts/areaLinerChart.tsx","../../src/components/charts/bar-chart/bar-chart.tsx","../../src/components/charts/barLineChart/barLinechart.tsx","../../src/components/board/board.tsx","../../src/components/calculation-summary/calculation-summary.tsx","../../src/components/calendar/calendar.tsx","../../src/components/charts/ChartLegends.tsx","../../src/components/grid/custom-grid-card/custom-grid-card.tsx","../../src/components/Dashboard/dashboard-card.tsx","../../src/components/Dashboard/dashboard-header.tsx","../../src/components/dynamic-layout-wrapper/dynamic-layout-wrapper.tsx","../../src/components/dynamic-modal.tsx","../../src/components/entity-view-wrapper/entity-view-wrapper.tsx","../../src/components/gantt/gantt.tsx","../../src/components/schedule-report/schedule-report.tsx","../../src/components/grid-fallback/grid-fallback.tsx","../../src/components/charts/groupBarChart/GroupBarChart.tsx","../../src/components/hr-line/hr-line.tsx","../../src/components/rfq-response/item-response-details.tsx","../../src/components/label-value/label-value.tsx","../../src/components/charts/line-chart/line-chart.tsx","../../src/components/list/list.tsx","../../src/components/listing/listing.tsx","../../src/components/mulitline/multiline.tsx","../../src/components/charts/multiLineChart/multi-line-chart.tsx","../../src/components/reports/dynamic-report/dynamic-report.tsx","../../src/components/reports-title-bar/reports-title-bar.tsx","../../src/components/sub-header-doc/sub-header-doc.tsx","../../src/components/tab-bar-ui/tab-bar-ui.tsx","../../src/components/text-area/text-area.tsx","../../src/components/time-range-picker/time-range-picker.tsx","../../src/components/uom-field-wrapper/uom-field-wrapper.tsx","../../src/components/user-dropdown/user-dropdown.tsx"],"sourcesContent":["import { Controller, useFieldArray } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport AddIcon from \"@mui/icons-material/Add\";\n\nimport DynamicSelect from \"./form-builder-element/select\";\nimport DynamicInput from \"./form-builder-element/text\";\n\nexport const ElementController = (props: any) => {\n const { fields: abjMember, append } = useFieldArray({\n control: props.control,\n name: \"abjMember\",\n });\n\n const addAdjMember = (type: string, elementName: string) => {\n switch (type) {\n case \"input\":\n append({ type: \"input\", appendAfter: elementName });\n break;\n case \"select\":\n append({ type: \"select\", appendAfter: elementName });\n break;\n\n default:\n break;\n }\n };\n\n return (\n <>\n <Controller\n control={props.control}\n name={props.name}\n defaultValue={props.defaultValue || \"\"}\n render={({ field }) => {\n if (\n Object.keys(props.field1).length &&\n Object.keys(props.field1) !== Object.keys(field)\n ) {\n props.updateField({ ...field });\n }\n return props.children;\n }}\n />\n <CloseIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => addAdjMember(\"input\", props.name)}\n />\n <AddIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => addAdjMember(\"select\", props.name)}\n />\n {abjMember.map((field: any) => {\n if (field.appendAfter === props.name) {\n return (\n <>\n {field.type === \"input\" && (\n <DynamicInput\n placeholder=\"Enter value\"\n label=\"Message\"\n formControl={props.control}\n name=\"message\"\n fieldArrayName=\"abjMember\"\n />\n )}\n {field.type === \"select\" && (\n <DynamicSelect\n placeholder=\"Select value\"\n label=\"Is True\"\n options={[\n { value: \"option1\", label: \"Option 1\" },\n { value: \"option2\", label: \"Option 2\" },\n ]}\n formControl={props.control}\n name=\"is_true\"\n fieldArrayName=\"abjMember\"\n />\n )}\n </>\n );\n }\n })}\n </>\n );\n};\n\nElementController.propTypes = {\n name: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n field1: PropTypes.object,\n children: PropTypes.node.isRequired,\n updateField: PropTypes.func.isRequired,\n control: PropTypes.object.isRequired,\n};\n\nexport default ElementController;\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n // eslint-disable-next-line no-console\n console.warn(new Error().stack);\n }\n return new Date(NaN);\n }\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n return result;\n};\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n if (!matchResult) {\n return null;\n }\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n return undefined;\n}\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n case 2:\n return number + 'nd';\n case 3:\n return number + 'rd';\n }\n }\n return number + 'th';\n};\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\n}","import React, { useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"./date-range-picker.scss\";\n\nimport { getMonth, getYear } from \"date-fns\";\nimport CalenderIcon from \"../../assets/view-modal/calendar-icon\";\nimport { KeyboardArrowLeft, KeyboardArrowRight } from \"@mui/icons-material\";\nimport { Box } from \"@mui/material\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\ninterface CustomDatePickerInputProps {\n value: string;\n onClick: () => void;\n placeholderText: string; // Define placeholderText prop\n width?: number; // Make width prop optional\n}\n\nconst months: string[] = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst CustomDatePickerInput: React.FC<CustomDatePickerInputProps> = ({\n value,\n onClick,\n placeholderText,\n isRtl\n}) => (\n \n <div className=\"calender-container\">\n <input\n type=\"text\"\n value={value}\n onClick={onClick}\n placeholder={placeholderText}\n className=\"open-selected-calender\"\n />\n <div className={isRtl?\"icon-box_rtl\":\"icon-box\"}>\n <CalenderIcon />\n </div>\n </div>\n);\n\ninterface CustomHeaderProps {\n date: Date;\n decreaseMonth: () => void;\n increaseMonth: () => void;\n decreaseYear: () => void;\n increaseYear: () => void;\n prevMonthButtonDisabled: boolean;\n nextMonthButtonDisabled: boolean;\n prevYearButtonDisabled: boolean;\n nextYearButtonDisabled: boolean;\n}\n\nfunction DateRangePicker(props: any) {\n const {\n start = null,\n end = null,\n startYear = 1980,\n onDateRangeChange,\n ...rest\n } = props;\n const [startDate, setStartDate] = useState(start);\n const [endDate, setEndDate] = useState(end);\n const {isRtl}=useLanguage()\n const onChange = (dates: any) => {\n const [start, end] = dates;\n setStartDate(start);\n setEndDate(end);\n onDateRangeChange(dates);\n };\n\n const years: any = [];\n const currentYear = getYear(new Date());\n for (let i = startYear; i <= currentYear + 10; i++) {\n years.push(i);\n }\n\n return (\n <Box className=\"DateRangePicker\">\n <DatePicker\n dateFormat=\"dd-MM-yyyy\"\n {...rest}\n customInput={\n <CustomDatePickerInput\n placeholderText=\"DD-MM-YYYY\"\n value=\"\"\n isRtl={isRtl}\n onClick={() => { }}\n />\n }\n startDate={startDate}\n endDate={endDate}\n onChange={onChange}\n selectsRange={true}\n isClearable={true}\n renderCustomHeader={({\n date,\n decreaseMonth,\n increaseMonth,\n decreaseYear,\n increaseYear,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n prevYearButtonDisabled,\n nextYearButtonDisabled,\n }: CustomHeaderProps) => (\n <div className=\"date-picker-container\">\n <div className=\"d-flex\">\n <button\n onClick={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowLeft />\n </button>\n <div className=\"month-view\">{months[getMonth(date)]}</div>\n <button\n onClick={increaseMonth}\n disabled={nextMonthButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowRight />\n </button>\n </div>\n <div className=\"d-flex\">\n <button\n onClick={decreaseYear}\n disabled={prevYearButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowLeft />\n </button>\n <select\n className=\"select-year\"\n value={getYear(date)}\n onChange={(e) => {\n decreaseYear();\n setStartDate(new Date(+e.target.value, getMonth(date)));\n }}\n >\n {years.map((year: any) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <button\n onClick={increaseYear}\n disabled={nextYearButtonDisabled}\n className=\"btn-transparent\"\n type=\"button\"\n >\n <KeyboardArrowRight />\n </button>\n </div>\n </div>\n )}\n />\n </Box>\n );\n}\n\nexport { DateRangePicker };\nexport default DateRangePicker;\n","import React from 'react';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport DateRangePicker from '../../../date-range-picker/date-range-picker';\nimport dayjs from 'dayjs';\nimport Typography from '../../../typography/typography';\n\nconst DynamicDateRange = (props: any) => {\n const minDate = dayjs(props.min_date || null).isValid()\n ? dayjs(props.min_date).toDate()\n : null;\n\n const maxDate = dayjs(props.max_date || null).isValid()\n ? dayjs(props.max_date).toDate()\n : null;\n\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <>\n {props?.label &&\n <Typography\n type='s5'\n weight='medium'\n mb={0.5}\n color={props.error ? 'theme.error.600' : 'theme.secondary.800'}\n\n >\n {props.label}\n {props.required && <span className='requiredStar'>*</span>}\n </Typography>}\n\n <DateRangePicker\n start={field.value?.[0]}\n end={field.value?.[1]}\n startYear={props.startYear || 1980}\n onDateRangeChange={(dates: [Date | null, Date | null]) => {\n field.onChange(dates);\n if (props.onChange) {\n props.onChange(dates);\n }\n }}\n placeholderText={props.placeholder || \"MM-DD-YYYY - MM-DD-YYYY\"}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === 'builder' ? false : props.required}\n minDate={minDate}\n maxDate={maxDate}\n disabled={props.disabled}\n error={Boolean(fieldState.error)}\n helperText={fieldState.error?.message}\n />\n </>\n )}\n />\n );\n};\n\nDynamicDateRange.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n startYear: PropTypes.number,\n disabled: PropTypes.bool,\n min_date: PropTypes.any,\n max_date: PropTypes.any,\n onChange: PropTypes.func\n};\n\nexport { DynamicDateRange };\nexport default DynamicDateRange;","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport DateTimePicker from \"../../../date-time-picker/date-time-picker\";\nimport dayjs from \"dayjs\";\n\nconst DynamicDateTime = (props: any) => {\n const {readOnly=false} = props\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <DateTimePicker\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n placeholder={props.placeholder}\n required={props.formType === \"builder\" ? false : props.required}\n defaultValue={props.defaultValue}\n disableFutureDates={props.is_future_dates_allowed}\n disablePastDates={props.is_past_dates_allowed}\n helperText={fieldState.error?.message}\n error={Boolean(fieldState.error)}\n disabled={props.disabled}\n minDate={props.min_date}\n maxDate={props.max_date}\n minDateTime={props.min_date_time}\n maxDateTime={props.max_date_time}\n textFieldProps={readOnly? {readOnly: true} : {readOnly: false}}\n onChange={(newValue) => {\n if (props.min_date_time && newValue && dayjs(newValue).isSame(props.min_date_time, 'day')) {\n const selected = dayjs(newValue);\n // if time is earlier than min allowed time on same day, adjust it\n if (selected.isBefore(props.min_date_time)) {\n const adjusted = selected.hour(props.min_date_time.hour()).minute(props.min_date_time.minute());\n field.onChange(adjusted);\n return;\n }\n }\n \n field.onChange(newValue);\n }}\n />\n )}\n />\n );\n};\n\nDynamicDateTime.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n defaultValue: PropTypes.any,\n is_future_dates_allowed: PropTypes.bool,\n is_past_dates_allowed: PropTypes.bool,\n typeOfField: PropTypes.string,\n disable: PropTypes.bool,\n min_date: PropTypes.any,\n max_date: PropTypes.any,\n};\n\nexport { DynamicDateTime };\nexport default DynamicDateTime;\n","import React, { lazy } from 'react';\r\n\r\nimport { Control, Controller, FieldValues } from 'react-hook-form';\r\nimport Typography from '../../../typography/typography';\r\nconst CustomEditor = lazy(() => import('../../../editor/custom-editor'));\r\n\r\nimport \"./element.scss\";\r\n\r\nexport interface DynamicTextEditorProps {\r\n\tformControl: Control<FieldValues, any>;\r\n\tname: string;\r\n\tplaceholder: string;\r\n\tfieldArrayName: string;\r\n}\r\n\r\nconst DyanmicTextEditor: React.FC<DynamicTextEditorProps> = ({\r\n\tformControl,\r\n\tname,\r\n\tfieldArrayName,\r\n\tplaceholder\r\n}) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Controller\r\n\t\t\t\tname={`${fieldArrayName}.${name}`}\r\n\t\t\t\tcontrol={formControl}\r\n\t\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className='editor-container'>\r\n\t\t\t\t\t\t\t<CustomEditor\r\n\t\t\t\t\t\t\t\thandleEditorReady={() => {\r\n\t\t\t\t\t\t\t\t\tif (field.value) field.onChange(field.value);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdata={field.value}\r\n\t\t\t\t\t\t\t\tonEditorChange={(content: string) => {\r\n\t\t\t\t\t\t\t\t\tfield.onChange(content);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tconfig={{\r\n\t\t\t\t\t\t\t\t\tplaceholder: placeholder\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{fieldState.error?.message && (\r\n\t\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t\t{fieldState.error?.message}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default DyanmicTextEditor;\r\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { Controller/* , useFormContext */ } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport './element.scss';\r\nimport DatePicker from '../../../date-picker/date-picker';\r\n\r\ninterface CustomDatePickerProps {\r\n formControl: any;\r\n name: string;\r\n label: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n position?: number;\r\n formType?: string;\r\n placeholder?: string;\r\n defaultValue?: any;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n min_date?: any;\r\n max_date?: any;\r\n views?: any;\r\n}\r\n\r\nconst CustomDatePicker = React.memo<CustomDatePickerProps>((props) => {\r\n // const formContext = useFormContext();\r\n\r\n // Memoize field name to prevent unnecessary recalculations\r\n const fieldName = useMemo(() =>\r\n `${props.fieldArrayName}.${props.name}`,\r\n [props.fieldArrayName, props.name]\r\n );\r\n\r\n // Memoize date calculations to prevent recalculation on every render\r\n const { minDate, maxDate } = useMemo(() => {\r\n const min = dayjs(props.min_date || null).isValid()\r\n ? dayjs(props.min_date)\r\n : null;\r\n\r\n const max = dayjs(props.max_date || null).isValid()\r\n ? dayjs(props.max_date)\r\n : null;\r\n\r\n return { minDate: min, maxDate: max };\r\n }, [props.min_date, props.max_date]);\r\n\r\n // Memoize required prop calculation\r\n const isRequired = useMemo(() =>\r\n props.formType === 'builder' ? false : props.required,\r\n [props.formType, props.required]\r\n );\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={fieldName}\r\n render={({ field, fieldState }) => (\r\n <DatePicker\r\n {...field}\r\n {...props}\r\n dataPosition={props.position}\r\n dataName={fieldName}\r\n label={props.label}\r\n placeholder={props.placeholder}\r\n required={isRequired}\r\n defaultValue={props.defaultValue}\r\n disableFutureDates={props.is_future_dates_allowed}\r\n disablePastDates={props.is_past_dates_allowed}\r\n helperText={fieldState.error?.message}\r\n error={Boolean(fieldState.error)}\r\n disabled={props.disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nCustomDatePicker.displayName = 'CustomDatePicker';\r\n\r\nCustomDatePicker.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n required: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n defaultValue: PropTypes.any,\r\n is_future_dates_allowed: PropTypes.bool,\r\n is_past_dates_allowed: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n min_date: PropTypes.any,\r\n max_date: PropTypes.any\r\n};\r\n\r\nexport { CustomDatePicker };\r\nexport default CustomDatePicker;\r\n","// const FormData = [\n// {\n// \"field_type\": \"text\",\n// \"label\": \"Name\",\n// \"placeholder\": \"Enter name\",\n// \"default_value\": \"\",\n// \"min_length\": 2,\n// \"max_length\": 30,\n// \"is_multiline\": false,\n// \"is_required\": true,\n// \"is_unique\": false,\n// \"id\": \"a796bc38-9f6d-418b-a48d-a562e64ed990\"\n// },\n// {\n// \"field_type\": \"email\",\n// \"label\": \"Email\",\n// \"placeholder\": \"Enter email address\",\n// \"default_value\": \"\",\n// \"is_required\": false,\n// \"is_unique\": false,\n// \"id\": \"a8e34772-beb0-443c-86f4-cd0f79e4e546\"\n// },\n// {\n// \"field_type\": \"select\",\n// \"label\": \"Gender\",\n// \"placeholder\": \"Choose Gender\",\n// \"default_value\": \"option1\",\n// \"options\": [\n// {\n// \"text\": \"Male\",\n// \"value\": \"1\"\n// },\n// {\n// \"text\": \"Female\",\n// \"value\": \"2\"\n// },\n// {\n// \"text\": \"No\",\n// \"value\": \"3\"\n// },\n// {\n// \"text\": \"Yes\",\n// \"value\": \"4\"\n// }\n// ],\n// \"is_multiselect\": true,\n// \"is_required\": true,\n// \"is_unique\": false,\n// \"id\": \"cb4b4423-c072-4e02-a22a-86fb1e0dba3e\"\n// },\n// ]\n\nconst FormData = [\n {\n field_type: \"text\",\n label: \"Name\",\n placeholder: \"Enter name\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"35356fb9-9007-495a-ba9e-925449cb3eb2\",\n },\n {\n field_type: \"email\",\n label: \"Email\",\n placeholder: \"Enter email address\",\n default_value: \"\",\n is_required: false,\n is_unique: false,\n id: \"4f4ac646-bf48-4ed3-ae5b-910071e19b59\",\n },\n {\n field_type: \"phone\",\n label: \"Phone\",\n placeholder: \"Enter phone number\",\n default_value: \"\",\n is_required: false,\n is_unique: false,\n id: \"500d8a78-e389-474d-831b-43190da011a6\",\n },\n {\n field_type: \"select\",\n label: \"Status\",\n placeholder: \"Choose option\",\n default_value: \"option1\",\n options: [\n {\n text: \"Active\",\n value: \"1\",\n },\n {\n text: \"Inactive\",\n value: \"0\",\n },\n ],\n is_multiselect: false,\n is_required: true,\n is_unique: false,\n id: \"fa44f220-0d82-4569-a28c-997de8e66d5a\",\n },\n {\n field_type: \"text\",\n label: \"Address\",\n placeholder: \"Enter address\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"d25f2f1b-811f-4c3d-a53b-5162f766ad47\",\n },\n {\n field_type: \"text\",\n label: \"Message\",\n placeholder: \"Enter message\",\n default_value: \"\",\n min_length: 2,\n max_length: 30,\n is_multiline: false,\n is_required: true,\n is_unique: false,\n id: \"22de0b1b-080a-4a0b-9d5f-e6f4916d8b07\",\n },\n];\n\nexport { FormData };\nexport default FormData;\n","import { useRef, useEffect } from \"react\";\r\nimport { TextField as MUITextField, styled } from \"@mui/material\";\r\nimport Timeline from \"@mui/lab/Timeline\";\r\nimport TimelineItem from \"@mui/lab/TimelineItem\";\r\nimport TimelineSeparator from \"@mui/lab/TimelineSeparator\";\r\nimport TimelineConnector from \"@mui/lab/TimelineConnector\";\r\nimport TimelineContent from \"@mui/lab/TimelineContent\";\r\nimport TimelineDot from \"@mui/lab/TimelineDot\";\r\nimport \"./activity-tag.scss\";\r\nimport images from \"../../assets/images\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport Accordion from \"../accordion/accordion\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport formatText from \"../../utils/format-text\";\r\nimport Typography from \"../typography/typography\";\r\n\r\nconst StyledTextField = styled(MUITextField)(({ theme: { palette } }) => ({\r\n width: \"100%\",\r\n \"& .MuiOutlinedInput-root\": {\r\n height: '2rem',\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[300],\r\n borderWidth: 2\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[300],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n // borderWidth: \"0.0625rem\",\r\n // borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n },\r\n}));\r\n\r\nexport const ActivityTag = (props: any) => {\r\n const {\r\n type,\r\n data,\r\n placeholder,\r\n error = false,\r\n textfield,\r\n textfieldTitle,\r\n onCommentSubmit,\r\n onChange,\r\n containerProps,\r\n accordion = true,\r\n ...rest\r\n } = props;\r\n const { user } = useAuth()\r\n\r\n const chatRef = useRef<HTMLDivElement>(null);\r\n\r\n const scrollToBottom = () => {\r\n if (chatRef.current) {\r\n chatRef.current.scrollTop = chatRef.current.scrollHeight;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n scrollToBottom();\r\n }, [data]);\r\n\r\n const formatDateTime = (dateTime: string) => {\r\n const currentDate = new Date();\r\n const commentDate = new Date(dateTime);\r\n const timeDifference = currentDate.getTime() - commentDate.getTime();\r\n const secondsDifference = Math.floor(timeDifference / 1000);\r\n const minutesDifference = Math.floor(secondsDifference / 60);\r\n const hoursDifference = Math.floor(minutesDifference / 60);\r\n\r\n if (secondsDifference < 60) {\r\n return `${secondsDifference} second${secondsDifference !== 1 ? 's' : ''\r\n } ago`;\r\n } else if (minutesDifference < 60) {\r\n return `${minutesDifference} minute${minutesDifference !== 1 ? 's' : ''\r\n } ago`;\r\n } else if (hoursDifference < 24) {\r\n return `${hoursDifference} hour${hoursDifference !== 1 ? 's' : ''} ago`;\r\n } else {\r\n // Format the date in the desired format\r\n const optionsDate: Intl.DateTimeFormatOptions = {\r\n day: 'numeric',\r\n month: 'short',\r\n year: 'numeric'\r\n };\r\n\r\n const optionsTime: Intl.DateTimeFormatOptions = {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n hour12: false\r\n };\r\n\r\n const formattedDate = commentDate.toLocaleString('en-US', optionsDate);\r\n const formattedTime = commentDate.toLocaleString('en-US', optionsTime);\r\n\r\n return `${formattedDate} • ${formattedTime}`;\r\n }\r\n };\r\n\r\n const handleKeyPress = (event: any) => {\r\n if (event.key === 'Enter') {\r\n const commentValue = (event.target as HTMLInputElement).value;\r\n if (commentValue.trim() !== '') {\r\n onCommentSubmit(commentValue);\r\n scrollToBottom();\r\n }\r\n }\r\n };\r\n\r\n const timelineItems =\r\n type === \"activity\" ? (\r\n data?.map((item: any, index: number) => (\r\n <div className=\"Timeline--Activity\">\r\n <TimelineItem key={index}>\r\n <TimelineSeparator>\r\n <TimelineDot />\r\n {data.length - 1 !== index && <TimelineConnector />}\r\n </TimelineSeparator>\r\n <TimelineContent className=\"Timeline--Content\">\r\n <Typography type=\"s4\" color=\"theme.secondary.800\" className=\"Timeline--ActivityLogItem\">\r\n {item.message} · {formatDateTime(item.created_at)}\r\n </Typography>\r\n </TimelineContent>\r\n </TimelineItem>\r\n </div>\r\n ))\r\n ) : (\r\n <>\r\n <div className=\"Timeline--Chat\" ref={chatRef}>\r\n {data.map((item: any, index: number) => (\r\n <TimelineItem key={index}>\r\n <TimelineSeparator>\r\n <Avatar src={images.chat} size={17} />\r\n <TimelineConnector />\r\n </TimelineSeparator>\r\n <TimelineContent>\r\n {item.name} commented this · {formatDateTime(item.created_at)}\r\n <div className=\"Timeline--CommentWrap\">\r\n <p className=\"Timeline--Comment\">{item.message}</p>\r\n </div>\r\n </TimelineContent>\r\n </TimelineItem>\r\n ))}\r\n </div>\r\n </>\r\n );\r\n\r\n // const avatarStyle = {\r\n // borderRadius: '0.5rem',\r\n // padding: '0.875rem 1.28125rem',\r\n // textAlign: 'center',\r\n // backgroundColor: `${randomColor}.200`,\r\n // color: `${randomColor}.1000`\r\n // };\r\n\r\n return (\r\n // <Box position='relative'>\r\n <div className=\"ActivityContainer\" {...containerProps}>\r\n <Timeline className=\"Timeline\">\r\n {accordion ? \r\n <Accordion title='Activities' accordionProps={{ defaultExpanded: true }}>\r\n {timelineItems}\r\n </Accordion> : \r\n <div className=\"Timeline--ActivityBox\">\r\n {timelineItems}\r\n </div>\r\n }\r\n {textfield && (\r\n <div className=\"Timeline--CommentBox\">\r\n {textfieldTitle}\r\n <div className=\"Timeline--CommentText\">\r\n <Avatar size={32} alt={formatText(user?.full_name)} className=\"avatar-class\" />\r\n <StyledTextField\r\n error={error}\r\n placeholder={placeholder}\r\n className=\"textfield\"\r\n onKeyDown={handleKeyPress}\r\n onChange={onChange}\r\n {...rest}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </Timeline>\r\n </div>\r\n // </Box>\r\n );\r\n};\r\n\r\nexport default ActivityTag;\r\n","import { Close } from '@mui/icons-material';\r\nimport {\r\n\tBox,\r\n\tCircularProgress,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Modal from '../modal/modal';\r\nimport Typography from '../typography/typography';\r\n\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport Select from '../select/select';\r\nimport { Controller, useForm } from 'react-hook-form';\r\n\r\nimport './quick-approval-modal.scss';\r\nimport { useEffect, useState } from 'react';\r\nimport Avatar from '../avatar/avatar';\r\nimport { formatLabel } from '../../utils/format-text';\r\nimport Checkbox from '../checkbox/checkbox';\r\nimport Button from '../button/button';\r\nimport ChipOrPlaceholder from '../form-control/form-builder/form-builder-element/chip-or-placeholder';\r\nimport Chip from '../chip/chip';\r\nimport { MoreIcon } from '../icons';\r\nimport { getV1User } from '../../api-client/api.rbac/api';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nimport React from 'react';\r\nimport { getToken } from '../../utils/common';\r\n\r\ninterface QuickApprovalModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: () => void;\r\n\tmodalProps?: DialogProps;\r\n\ttitle?: string;\r\n\tonConfirm: (approverIds: number[]) => void;\r\n isProcessing?: boolean\r\n}\r\n\r\ninterface IFormInput {\r\n\tapprover_id: number[];\r\n}\r\ninterface IUsersData {\r\n\tisLoading: boolean\r\n\tisError: boolean\r\n error: string | null\r\n data: Array<Record<string, any>>\r\n}\r\n\r\nconst validationSchema = Yup.object().shape({\r\n\tapprover_id: Yup.array()\r\n\t\t.required('Please select the approvers')\r\n\t\t.min(1, 'Please select the approvers')\r\n});\r\n\r\nconst QuickApprovalModal: React.FC<QuickApprovalModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\ttitle,\r\n\tonConfirm,\r\n isProcessing\r\n}) => {\r\n\tconst [users, setUsers] = useState<IUsersData>({\r\n\t\tisLoading: true,\r\n\t\tisError: false,\r\n\t\terror: 'null',\r\n\t\tdata: []\r\n\t});\r\n\tconst { isLoading, isError, error, data } = users;\r\n\r\n\tconst { control, handleSubmit, reset, setValue, getValues, watch, trigger } =\r\n\t\tuseForm<IFormInput>({\r\n\t\t\tresolver: yupResolver(validationSchema),\r\n\t\t\tmode: 'all'\r\n\t\t});\r\n\r\n\twatch('approver_id');\r\n\tconst formValues = getValues('approver_id');\r\n\r\n\tconst onSubmit = async (values: IFormInput) => {\r\n\t\tconst isValid = await trigger();\r\n\t\tif (!isValid) return;\r\n\t\tonConfirm(values.approver_id);\r\n\t\thandleModalClose();\r\n\t};\r\n\r\n\tconst handleModalClose = () => {\r\n\t\treset({approver_id: []});\r\n\t\tsetIsOpen();\r\n\t};\r\n\r\n\tconst SelectedItems = ({\r\n\t\tdata,\r\n\t\toptions\r\n\t}: {\r\n\t\tdata: number[];\r\n\t\toptions: any[];\r\n\t}) => {\r\n\t\tconst displayTitle = data.map((selectedItem) => {\r\n\t\t\tconst user = options.find((option: any) => option.id === selectedItem);\r\n\t\t\tif (user) {\r\n\t\t\t\treturn getLabel(user);\r\n\t\t\t}\r\n\t\t\treturn selectedItem;\r\n\t\t});\r\n\r\n\t\treturn (\r\n\t\t\t<Box display='flex' justifyContent='space-between' alignItems='center'>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tcolor='inherit'\r\n\t\t\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\r\n\t\t\t\t\t{displayTitle.slice(0, 3).join(', ')}\r\n\t\t\t\t\t{data.length > 4 && (\r\n\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\t\t\ttype='normal'\r\n\t\t\t\t\t\t\tclassName='quickApprovalModal--DisplayNameChip'\r\n\t\t\t\t\t\t\tlabel={<MoreIcon fontSize='small' />}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Button variant='text' onClick={() => setValue('approver_id', [])}>\r\n\t\t\t\t\t<Typography type='s5' color='inherit'>\r\n\t\t\t\t\t\tRemove\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Button>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getAndSetFetchUsers = async () => {\r\n\t\ttry {\r\n\t\t\tconst filters = { skip: 0, limit: 99, filters: `(is_active.eq=true)` };\r\n\t\t\tconst response = await getV1User({ ...filters, ...getToken() });\r\n\t\r\n\t\t\tconst users: any[] = response?.data?.users || [];\r\n\t\t\tsetUsers({\r\n\t\t\t\tisLoading: false,\r\n\t\t\t\tisError: false,\r\n\t\t\t\terror: null,\r\n\t\t\t\tdata: users\r\n\t\t\t});\t\r\n\t\t} catch (error) {\r\n\t\t\tsetUsers({\r\n\t\t\t\tisLoading: false,\r\n\t\t\t\tisError: true,\r\n\t\t\t\terror: 'Failed to fetch Approvers',\r\n\t\t\t\tdata: []\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isOpen) {\r\n\t\t\tgetAndSetFetchUsers()\r\n\t\t}\r\n\t}, [isOpen]);\r\n\tuseEffect(() => {\r\n\t\tif (isError) {\r\n\t\t\tenqueueSnackbar(error ?? 'Something went wrong', { variant: 'error'});\r\n\t\t}\r\n\t}, [error, isError]);\r\n\r\n\tconst getLabel = (obj: Record<any, any>) => {\r\n\t\tconst {first_name = '', last_name=''} = obj || {}\r\n\r\n\t\treturn formatLabel(`${first_name} ${last_name}`)\r\n\t}\r\n\r\n useEffect(() => {\r\n return () => {\r\n handleModalClose()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[])\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='sm'\r\n\t\t\tfullWidth\r\n\t\t\tdisableEscapeKeyDown\r\n\t\t\t{...modalProps}>\r\n\t\t\t<form onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t<DialogTitle className='quickApprovalModal--Title'>\r\n\t\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\t\t{title || 'Quick Approval'}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton onClick={handleModalClose}>\r\n\t\t\t\t\t\t<Close fontSize='small' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</DialogTitle>\r\n\t\t\t\t<DialogContent className='quickApprovalModal--ModalContentContainer'>\r\n\t\t\t\t\t<Controller\r\n\t\t\t\t\t\tname='approver_id'\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tname='approver_id'\r\n\t\t\t\t\t\t\t\t\tvalue={field.value || []}\r\n\t\t\t\t\t\t\t\t\tonChange={field.onChange}\r\n\t\t\t\t\t\t\t\t\terror={Boolean(fieldState.error?.message)}\r\n\t\t\t\t\t\t\t\t\thelperText={fieldState.error?.message || ''}\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\trenderValue={(selected: string[]) => (\r\n\t\t\t\t\t\t\t\t\t\t<ChipOrPlaceholder\r\n\t\t\t\t\t\t\t\t\t\t\tdata={selected}\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder='Select'\r\n\t\t\t\t\t\t\t\t\t\t\tonDelete={() => setValue('approver_id', [])}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\t\t\tfullWidth>\r\n\t\t\t\t\t\t\t\t\t{data.map((user) => {\r\n\t\t\t\t\t\t\t\t\t\tconst colors = [\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary1',\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary2',\r\n\t\t\t\t\t\t\t\t\t\t\t'theme.tertiary3'\r\n\t\t\t\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\t\t\t\tconst randomIndex = Math.floor(\r\n\t\t\t\t\t\t\t\t\t\t\tMath.random() * colors.length\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\tconst randomColor = colors[randomIndex];\r\n\t\t\t\t\t\t\t\t\t\tconst avatarStyle = {\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: '0.25rem !important',\r\n\t\t\t\t\t\t\t\t\t\t\ttextAlign: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: `${randomColor}.200`,\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: `${randomColor}.1000`\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={user.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={user.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\tselected={Boolean(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfield.value && field.value.includes(user.id)\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box className='quickApprovalModal--UserListingContainer'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box className='quickApprovalModal--UserContent'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={user.profile_image}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talt={getLabel(user)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={avatarStyle}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize={24}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getLabel(user)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={Boolean(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfield.value && field.value.includes(user.id)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t{Array.isArray(field?.value) && field?.value?.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t<SelectedItems data={field.value} options={data} />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</DialogContent>\r\n\t\t\t\t<DialogActions className='quickApprovalModal--DialogActions'>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tclassName='quickApprovalModal--DialogActions--Cancel'\r\n\t\t\t\t\t\tonClick={handleModalClose}\r\n\t\t\t\t\t\tdisabled={isLoading || isProcessing}>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype='button'\r\n\t\t\t\t\t\tonClick={handleSubmit(onSubmit)}\r\n\t\t\t\t\t\tendIcon={\r\n\t\t\t\t\t\t\tisProcessing ? (\r\n\t\t\t\t\t\t\t\t<CircularProgress size={15} color='inherit' />\r\n\t\t\t\t\t\t\t) : undefined\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdisabled={isProcessing || isLoading || Boolean(!formValues?.length)}>\r\n\t\t\t\t\t\tSend Request\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default QuickApprovalModal;","import { useState } from \"react\";\nimport { IconButton } from \"@mui/material\";\nimport images from \"../../assets/images\";\n\nconst ColumnHeader = ({ column }: any) => {\n const [isRenameColumn, setIsRenameColumn] = useState(false);\n const [newColumnTitle, setNewColumnTitle] = useState(column.title);\n\n const handleRenameColumn = () => {\n column.title = newColumnTitle;\n setIsRenameColumn(false);\n };\n\n return (\n <div className=\"kanban-column lead-card\">\n {isRenameColumn ? (\n <div className=\"create-status-box\">\n <input\n type=\"text\"\n placeholder=\"Enter new status title\"\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n />\n <div className=\"add-btns\">\n <button onClick={() => handleRenameColumn()}>Rename</button>\n <button onClick={() => setIsRenameColumn(false)}>Cancel</button>\n </div>\n </div>\n ) : (\n <h2\n className=\"kanban-column-title\"\n onDoubleClick={() => setIsRenameColumn(true)}\n >\n {column.title}\n </h2>\n )}\n\n <span className=\"count-length-text\">{column.cards.length}</span>\n\n <IconButton color=\"inherit\" size=\"small\" className=\"more-menu-btn\">\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n </div>\n );\n};\n\nexport { ColumnHeader };\nexport default ColumnHeader;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface IItemsSummary {\n\ttotalQuantity: number | string;\n\ttotal: number | string;\n\tcurrencySymbol: string;\n}\ninterface IItemsSummaryProps {\n\tdata: IItemsSummary;\n}\n\nconst ItemsSummary: React.FC<IItemsSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tItems\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Quantity\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.totalQuantity}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default ItemsSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface IDiscountSummary {\n\titemDiscount: number | string;\n\tadditionalDiscount?: number | string;\n\ttotalDiscount?: number | string;\n\tpromotionAmount?: number | string;\n\tcurrencySymbol: string;\n}\ninterface IDiscountSummaryProps {\n\tdata: IDiscountSummary;\n\tenalblePromotions?: boolean;\n}\n\nconst DiscountSummary: React.FC<IDiscountSummaryProps> = ({\n\tdata,\n\tenalblePromotions\n}) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tDiscounts\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tItem Discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.itemDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Number(data.additionalDiscount) > 0 &&\n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tAdditional Discount\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.additionalDiscount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t\t{Boolean(enalblePromotions) && (\n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tPromotion Amount\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.promotionAmount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.totalDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default DiscountSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ISubtotalSummary {\n\tsubtotalExTax: number | string;\n\tsubtotalExDiscount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ISubtotalSummaryProps {\n\tdata: ISubtotalSummary;\n}\n\nconst SubtotalSummary: React.FC<ISubtotalSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tSubtotal\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tSubtotal Excluding Taxes\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.subtotalExTax}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tSubtotal Excluding discount\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.subtotalExDiscount}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default SubtotalSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ITaxesAndChargesSummary {\n\ttaxes: number | string;\n\tdeductedTax: number | string;\n\ttotal: number | string;\n\tshippingAmount: number | string;\n\thandlingAmount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ITaxesAndChargesSummaryProps {\n\tdata: ITaxesAndChargesSummary;\n\tenableShippings?: boolean;\n}\n\nconst TaxesAndChargesSummary: React.FC<ITaxesAndChargesSummaryProps> = ({\n\tdata,\n\tenableShippings\n}) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tTaxes and Charges\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTaxes and Charges Added\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.taxes}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTaxes and Charges deducted\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.deductedTax}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tTotal Taxes and Charges Added\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Boolean(enableShippings) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\t\tShipping Amount\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{data.currencySymbol} {data.shippingAmount}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\t\tHandling Amount\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{data.currencySymbol} {data.handlingAmount}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default TaxesAndChargesSummary;\n","import { Box } from '@mui/material';\n\nimport Accordion from '../../accordion/accordion';\nimport Typography from '../../typography/typography';\n\nexport interface ITotalSummary {\n\ttotal: string | number;\n\troundOffDifferenceAmount: number | string;\n\tcurrencySymbol: string;\n}\ninterface ITotalSummaryProps {\n\tdata: ITotalSummary;\n}\n\nconst TotalSummary: React.FC<ITotalSummaryProps> = ({ data }) => {\n\treturn (\n\t\t<Accordion\n\t\t\ttitle={\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\tTotal\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t\taccordionProps={{\n\t\t\t\tdefaultExpanded: true,\n\t\t\t\tsx: {\n\t\t\t\t\tborderBottomWidth: 1,\n\t\t\t\t\t'& .MuiAccordionSummary-root': { borderBottomWidth: 1 }\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<Box className='calculationSummary--SummaryContainer'>\n\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\tGrand Total\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{data.currencySymbol} {data.total}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{Number(data.roundOffDifferenceAmount) > 0 && \n\t\t\t\t\t<Box className='calculationSummary--SummaryItem'>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tRound Off Difference\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t{data.currencySymbol} {data.roundOffDifferenceAmount}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t</Box>\n\t\t</Accordion>\n\t);\n};\n\nexport default TotalSummary;\n","import { Box } from \"@mui/material\";\nimport \"./card-wrapper.scss\";\nimport React from \"react\";\n\ninterface CardWrapperPropsType {\n children: React.ReactNode;\n}\n\nconst CardWrapper = ({ children, ...rest }: CardWrapperPropsType) => {\n return (\n <Box className=\"card-wrapper\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport { CardWrapper };\nexport default CardWrapper;\n","import { useState } from \"react\";\r\nimport Modal from \"../modal/modal\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoginFormValues } from \"../../contexts/AuthContext\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as Yup from \"yup\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport { Eye, EyeOff } from \"../icons\";\r\nimport Button from \"../button/button\";\r\nimport Toast from \"../toast/toast\";\r\nimport { Checkbox, FormControlLabel } from \"@mui/material\";\r\n\r\n\r\nconst validationSchema = Yup.object({\r\n login: Yup.object({\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n }),\r\n});\r\n\r\n\r\n\r\nconst ChangeUserPasswordModal = ({showModal, setShowModal, userId}) => {\r\n const { changeUserPasswordByAdmin } = useAuth();\r\n const [isNotify, setIsNotify] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n values.login.id = userId;\r\n values.login.isNotify = isNotify;\r\n await changeUserPasswordByAdmin(values.login, (message, type) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setShowModal(false);\r\n reset({\r\n login: {\r\n password: \"\",\r\n id: \"\",\r\n isNotify: false\r\n },\r\n });\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n });\r\n return values; \r\n };\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n return (\r\n <>\r\n <Modal \r\n open={showModal}\r\n onClose={() => setShowModal(false)} \r\n children={\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4} className=\"popup-change-pass\">\r\n <FlexBox gap={2}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Enter New Password\"\r\n name=\"password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter New Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel control={<Checkbox size=\"small\" onChange={(e) => setIsNotify(e.target.checked)} sx={{\r\n '&.Mui-checked': {\r\n color: '#2EB273',\r\n },\r\n }} />} label=\"Notify User of Password Change\" sx={{ \r\n '& .MuiFormControlLabel-label': {\r\n fontSize: '14px',\r\n },\r\n }}/>\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)} size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form> \r\n </>\r\n }\r\n />\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport { ChangeUserPasswordModal };\r\nexport default ChangeUserPasswordModal;","import { styled } from '@mui/material/styles';\r\nimport ReactFlagsSelect from \"react-flags-select\";\r\nimport Typography from \"../typography/typography\";\r\nimport images from \"../../assets/images\";\r\n\r\ninterface ICountrySelect {\r\n country: string;\r\n handleCountry: (country: string) => void;\r\n}\r\n\r\nconst StyledFlagsSelect = styled(ReactFlagsSelect)(\r\n ({ theme: { palette } }) => ({\r\n \".country-button\": {\r\n span: {\r\n fontSize: \"0.875rem\",\r\n },\r\n svg: {\r\n fontSize: \"1.25rem\",\r\n },\r\n padding: \"0.2rem 0.5rem 0.2rem 0rem\",\r\n borderRadius: \".25rem\",\r\n border: \"1px solid #D3D3D4\",\r\n },\r\n\r\n ul: {\r\n input: {\r\n padding: \"0.5rem\",\r\n borderRadius: \"0.5rem\",\r\n fontSize: \"0.8125rem\",\r\n margin: \"0px 0.75rem\",\r\n border: `1px solid ${palette.theme?.secondary[200]}`,\r\n background: `url(${images.search}) no-repeat scroll 0.5rem 0.5rem`,\r\n paddingLeft: \"2rem\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundColor: `${palette.theme?.secondary[100]}`,\r\n },\r\n li: {\r\n fontSize: \"0.8125rem\",\r\n padding: \"0.5rem 1rem\",\r\n },\r\n boxShadow:\r\n \"0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)\",\r\n borderRadius: \"0.5rem\",\r\n marginTop: \"0.25rem\",\r\n border: \"none\",\r\n\r\n div: {\r\n borderBottom: `1px solid ${palette.theme?.secondary[200]}`,\r\n paddingBottom: \"0.5rem\",\r\n },\r\n },\r\n }),\r\n);\r\n\r\nconst CountrySelect = ({ country, handleCountry }: ICountrySelect) => {\r\n return (\r\n <>\r\n <Typography type=\"s4\" fontWeight={\"medium\"} mb={0.5}>\r\n Country\r\n </Typography>\r\n <StyledFlagsSelect\r\n fullWidth\r\n searchable={true}\r\n searchPlaceholder=\"Search Country\"\r\n selected={country || \"IN\"}\r\n selectButtonClassName=\"country-button\"\r\n onSelect={handleCountry}\r\n showSelectedLabel={true}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { CountrySelect };\r\nexport default CountrySelect;\r\n","import React, { useState } from 'react';\nimport {\n Box,\n styled,\n ButtonBase,\n} from '@mui/material';\n\n// Styled container for the toggle switch\nconst ToggleContainer = styled(Box)(({ theme }) => ({\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n // backgroundColor: theme.palette.grey[300],\n borderRadius: theme.spacing(3),\n padding: theme.spacing(0.5),\n cursor: 'pointer',\n transition: 'all 0.3s ease-in-out',\n minWidth: 'max-content',\n backgroundColor: theme.palette.common.white,\n border: '1px solid',\n borderColor: theme.palette.grey[200],\n '&.disabled': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n}));\n\n// Styled sliding background\nconst SlidingBackground = styled(Box)(({ theme }) => ({\n position: 'absolute',\n // top: theme.spacing(0.5),\n // bottom: theme.spacing(0.5),\n backgroundColor: theme.palette.theme.primary[100],\n borderRadius: theme.spacing(2.5),\n transition: 'all 0.3s ease-in-out',\n top:0,\n bottom: 0,\n zIndex: 1,\n}));\n\n// Styled text label\nconst ToggleLabel = styled(ButtonBase)(({ theme, active }) => ({\n position: 'relative',\n zIndex: 2,\n padding: theme.spacing(1, 1.5),\n borderRadius: theme.spacing(2.5),\n fontSize: '0.75rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n userSelect: 'none',\n transition: 'color 0.3s ease-in-out',\n color: active ? theme.palette.primary.main : theme.palette.grey[600],\n '&:hover:not(.disabled)': {\n color: active ? theme.palette.primary.main : theme.palette.grey[800],\n },\n '&.disabled': {\n cursor: 'not-allowed',\n },\n}));\n\n// Main dynamic toggle switch component\nconst CustomToggleSwitch = ({\n leftLabel = \"Collapse All\",\n rightLabel = \"Expand All\",\n defaultChecked = false,\n onChange,\n disabled = false,\n sx = {},\n ...props\n}) => {\n const [checked, setChecked] = useState(defaultChecked);\n\n const handleChange = (newValue) => {\n if (disabled) return;\n setChecked(newValue);\n if (onChange) {\n onChange(newValue, newValue ? rightLabel : leftLabel);\n }\n };\n\n const handleTextClick = (isRightLabel) => {\n if (disabled) return;\n const newValue = isRightLabel;\n handleChange(newValue);\n };\n\n return (\n <ToggleContainer\n className={disabled ? 'disabled' : ''}\n sx={sx}\n {...props}\n >\n {/* Sliding background */}\n <SlidingBackground\n sx={{\n left: checked ? '50%' : 0,\n right: checked ? 0 : '50%',\n }}\n />\n \n {/* Left label */}\n <ToggleLabel\n active={!checked}\n className={disabled ? 'disabled' : ''}\n onClick={() => handleTextClick(false)}\n disableRipple={true}\n disabled={disabled}\n >\n {leftLabel}\n </ToggleLabel>\n \n {/* Right label */}\n <ToggleLabel\n active={checked}\n className={disabled ? 'disabled' : ''}\n onClick={() => handleTextClick(true)}\n disableRipple={true}\n disabled={disabled}\n >\n {rightLabel}\n </ToggleLabel>\n </ToggleContainer>\n );\n};\n\nexport { CustomToggleSwitch };\nexport default CustomToggleSwitch","import React, { useState, ReactNode, useEffect, useMemo } from 'react';\r\nimport { \r\n Grid, \r\n IconButton, \r\n Collapse, \r\n useTheme, \r\n useMediaQuery,\r\n Tooltip,\r\n Box,\r\n Drawer\r\n} from '@mui/material';\r\nimport { \r\n ChevronLeft, \r\n ChevronRight,\r\n Close,\r\n // Close\r\n} from '@mui/icons-material';\r\nimport { useLanguage } from '../../hooks/useLangauge';\r\n\r\nexport interface ExpandableSummaryWrapperProps {\r\n children: ReactNode;\r\n defaultExpanded?: boolean;\r\n expandedGridSize?: number; // Grid size when expanded (1-12)\r\n collapsedGridSize?: number; // Grid size when collapsed (0-2)\r\n className?: string;\r\n ariaLabel?: string;\r\n onToggle?: (isExpanded: boolean, newGridSize: number) => void;\r\n persistState?: boolean;\r\n storageKey?: string;\r\n showToggleButton?: boolean;\r\n mobileDrawer?: boolean; // Use drawer on mobile instead of grid\r\n showCollapseIcon?: boolean; // Show collapse icon at top of summary\r\n}\r\n\r\nconst ExpandableSummaryWrapper: React.FC<ExpandableSummaryWrapperProps> = ({\r\n children,\r\n defaultExpanded = true,\r\n expandedGridSize = 3,\r\n collapsedGridSize = 0,\r\n className = '',\r\n ariaLabel = 'Toggle summary panel',\r\n onToggle,\r\n persistState = false,\r\n storageKey = 'grid-summary-panel-state',\r\n showToggleButton = true,\r\n mobileDrawer = true,\r\n showCollapseIcon = true\r\n}) => {\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\nconst {currentLanguage}=useLanguage();\r\n const isRtl=useMemo(()=>currentLanguage?.direction===\"rtl\",[currentLanguage])\r\n // Initialize state with localStorage if persistState is enabled\r\n const getInitialState = () => {\r\n if (persistState && typeof window !== 'undefined') {\r\n const stored = localStorage.getItem(storageKey);\r\n return stored ? JSON.parse(stored) : defaultExpanded;\r\n }\r\n return defaultExpanded;\r\n };\r\n\r\n const [isExpanded, setIsExpanded] = useState<boolean>(getInitialState);\r\n // Add this state to your component\r\n const [showAfterDelay, setShowAfterDelay] = useState(false);\r\n\r\n // Add this useEffect\r\n useEffect(() => {\r\n if(!isExpanded) {\r\n setShowAfterDelay(false)\r\n return\r\n }\r\n const timer = setTimeout(() => {\r\n setShowAfterDelay(true);\r\n }, 250);\r\n\r\n return () => clearTimeout(timer);\r\n }, [isExpanded]);\r\n\r\n const handleToggle = () => {\r\n const newState = !isExpanded;\r\n const newGridSize = newState ? expandedGridSize : collapsedGridSize;\r\n setIsExpanded(newState);\r\n \r\n // Persist state if enabled\r\n if (persistState && typeof window !== 'undefined') {\r\n localStorage.setItem(storageKey, JSON.stringify(newState));\r\n }\r\n \r\n // Call external toggle handler with new grid size\r\n onToggle?.(newState, newGridSize);\r\n };\r\n\r\n const currentGridSize = isExpanded ? expandedGridSize : collapsedGridSize;\r\n\r\n // Mobile drawer implementation\r\n if (isMobile && mobileDrawer) {\r\n return (\r\n <>\r\n {/* Mobile Toggle Button */}\r\n {showToggleButton && (\r\n <IconButton\r\n onClick={handleToggle}\r\n sx={{\r\n position: 'fixed',\r\n top: '50%',\r\n [isRtl ? 'left' : 'right']: 0,\r\n zIndex: theme.zIndex.fab,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n '&:hover': {\r\n bgcolor: theme.palette.action.hover,\r\n },\r\n }}\r\n aria-label={ariaLabel}\r\n >\r\n <ChevronLeft />\r\n </IconButton>\r\n )}\r\n\r\n {/* Mobile Drawer */}\r\n <Drawer\r\n anchor=\"right\"\r\n open={isExpanded}\r\n onClose={handleToggle}\r\n sx={(theme) => ({\r\n '& .MuiDrawer-paper': {\r\n width: '90vw',\r\n [theme.breakpoints.up('md')]: {\r\n maxWidth: '400px',\r\n marginTop: '65px',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: '300px',\r\n marginTop: '65px',\r\n },\r\n [theme.breakpoints.up('xs')]: {\r\n maxWidth: '200px',\r\n marginTop: '56px',\r\n }\r\n },\r\n })}\r\n >\r\n {children}\r\n </Drawer>\r\n </>\r\n );\r\n }\r\n\r\n // Desktop/Tablet Grid implementation\r\n return (\r\n <Grid \r\n item \r\n xs={currentGridSize} \r\n sx={{\r\n position: 'relative',\r\n transition: theme.transitions.create(['flex-basis', 'max-width'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n overflow: 'visible', // Changed from 'hidden' to allow button outside\r\n minHeight: '100%',\r\n // Ensure grid item is visible even when size is 0\r\n display: currentGridSize === 0 ? 'block' : 'block',\r\n minWidth: currentGridSize === 0 ? 0 : 'auto',\r\n }}\r\n className={className}\r\n >\r\n {/* Alternative toggle button for completely collapsed state */}\r\n {(showToggleButton && !isExpanded) && (\r\n <Tooltip title=\"Expand summary\" placement=\"left\">\r\n <IconButton\r\n onClick={handleToggle}\r\n sx={{\r\n position: 'fixed',\r\n top: '20%',\r\n [isRtl ? 'left' : 'right']: 0,\r\n width:'30px',\r\n zIndex: theme.zIndex.fab,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n '&:hover': {\r\n bgcolor: theme.palette.action.hover,\r\n },\r\n }}\r\n aria-label=\"Expand summary panel\"\r\n >\r\n {!isExpanded ? <ChevronLeft /> : <ChevronRight />}\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n\r\n {/* Content Container */}\r\n {(currentGridSize > 0 && showAfterDelay) && (\r\n <Box\r\n sx={{\r\n height: '100%',\r\n width: '100%',\r\n overflow: 'visible',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n bgcolor: theme.palette.background.paper,\r\n borderLeft: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '8px 0 0 8px',\r\n position: 'relative',\r\n }}\r\n >\r\n {/* Fixed Collapse Icon at Top of Summary */}\r\n {showCollapseIcon && isExpanded && (\r\n <Tooltip title=\"Close summary\" placement=\"left\">\r\n <IconButton\r\n onClick={handleToggle}\r\n size='small'\r\n sx={{\r\n position: 'absolute',\r\n top: '-15px',\r\n [isRtl ? 'right' : 'left']: '-15px',\r\n zIndex: 1200,\r\n bgcolor: theme.palette.background.paper,\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n bgcolor: '#fff',\r\n },\r\n boxShadow: 'none',\r\n }}\r\n >\r\n <Close sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n\r\n <Collapse \r\n in={isExpanded} \r\n orientation=\"horizontal\" \r\n sx={{ \r\n height: '100%',\r\n '& .MuiCollapse-wrapperInner': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n width: '100%',\r\n }}\r\n >\r\n <Box sx={{ \r\n width: '100%', \r\n height: '100%', \r\n overflow: 'auto',\r\n minWidth: 0,\r\n // pt: showCollapseIcon ? 6 : 0, // Add padding top when collapse icon is shown\r\n }}>\r\n {children}\r\n </Box>\r\n </Collapse>\r\n\r\n {/* Collapsed State Indicator for partial collapse */}\r\n {!isExpanded && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n width: '100%',\r\n color: theme.palette.text.secondary,\r\n cursor: 'pointer',\r\n }}\r\n onClick={handleToggle}\r\n >\r\n <Box\r\n sx={{\r\n writingMode: 'vertical-lr',\r\n textOrientation: 'mixed',\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n letterSpacing: '0.1em',\r\n }}\r\n >\r\n SUMMARY\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default ExpandableSummaryWrapper;\r\n","import React from \"react\";\r\nimport Button from \"../../button/button\";\r\nimport DropdownButton, {\r\n IDropdownMenuOption,\r\n} from \"../../dropdown-button/dropdown-button\";\r\n\r\nimport './report-buttons.scss'\r\nimport { ButtonProps, SxProps } from \"@mui/material\";\r\n\r\nexport interface IActionButtons {\r\n title?: string;\r\n icon?: React.ReactNode;\r\n btnStyle?: \"WhiteBtn\";\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n action?: () => void;\r\n class?: string;\r\n}\r\n\r\nexport interface IReportButtons extends ButtonProps { \r\n className?: string;\r\n buttons?: IActionButtons[];\r\n dropdownMenuButtonData?: {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n options: IDropdownMenuOption[];\r\n sx?: SxProps;\r\n } | null;\r\n toggleCallback?: (e?: boolean) => void;\r\n zIndex?: number;\r\n iconPosition: 'start' | 'end';\r\n}\r\n\r\nconst ReportButtons = ({ buttons, dropdownMenuButtonData = null, toggleCallback, className, zIndex = 999, iconPosition = 'start', ...rest }: IReportButtons) => {\r\n return (\r\n <div className={className}>\r\n {buttons?.map((ele) => (\r\n <Button\r\n className={\r\n ele.class\r\n ? ele.class\r\n : `wrapper--${ele?.btnStyle}`\r\n }\r\n key={ele.title}\r\n variant={ele.variant ? ele.variant : \"contained\"}\r\n startIcon={ele.icon ? ele.icon : \"\"}\r\n onClick={ele.action}\r\n >\r\n {ele.title ?? \"\"}\r\n </Button>\r\n ))}\r\n {dropdownMenuButtonData && (\r\n <div style={{ zIndex }}>\r\n <DropdownButton\r\n options={dropdownMenuButtonData.options || []}\r\n {...(iconPosition === 'start' ? { startIcon: dropdownMenuButtonData.icon } : { endIcon: dropdownMenuButtonData.icon })}\r\n isMenuThirdItemDisabled={true}\r\n isOnlyDropDownButton={true}\r\n variant={\"text\"}\r\n buttonGroupProps={{\r\n variant: \"text\",\r\n }}\r\n onlyDropDownButtonProps={{\r\n style: {\r\n backgroundColor: \"white !important\",\r\n color: \"black !important\",\r\n ...dropdownMenuButtonData.sx\r\n },\r\n }}\r\n toggleCallback={toggleCallback}\r\n {...rest}\r\n >\r\n {dropdownMenuButtonData.children}\r\n </DropdownButton>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport { ReportButtons };\r\nexport default ReportButtons;\r\n","import Button from \"../button/button\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./inventory-reports-title-bar.scss\";\r\n\r\nimport TitleDropdownButton from \"../title-dropdown-button/title-dropdown-button\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport { generateFields } from \"../../utils/common\";\r\nimport ReportButtons, { IReportButtons } from \"./report-buttons/report-buttons\";\r\nimport TabBar, { TabProps } from \"../tabs/tabs\";\r\nimport { Box, ButtonGroup, ClickAwayListener, Divider, Grow, Menu, MenuItem, Paper, Popper, Button as MuiButton } from \"@mui/material\";\r\nimport images from \"../../assets/images\";\r\nimport { enUS } from 'date-fns/locale'; // Import the desired locale\r\n// import ReportFilter from './component/reportFilter'\r\nimport {\r\n handleCompareDateRangeSync as handleCompareDateRange,\r\n RANGE,\r\n} from \"../../utils/date-range\";\r\nimport { DateRange, Calendar } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\"; // main css file\r\nimport \"react-date-range/dist/theme/default.css\"; // theme css file\r\nimport dayjs from \"dayjs\";\r\n// import { fetchOptions } from \"./redux/actionCreator\";\r\nimport React from \"react\";\r\nimport HeaderCard from \"../header-card/header-card\";\r\nimport viewTypes from \"../../constants/action-bar\";\r\nimport SearchBar from \"../search-bar/search-bar\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport SearchableSelect from \"../searchable-select\";\r\nimport { Filter as FilterIcon } from \"../icons\";\r\n\r\ninterface IReportFilters {\r\n company: number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n item_id: string | number;\r\n warehouse_id: string | number;\r\n assembly_item_id: number | string;\r\n bom_id: number | string\r\n}\r\n\r\n/** Descriptor for a custom component injected into the filter row. */\r\ninterface ICustomFilterComponent {\r\n /** Unique key used for React reconciliation. */\r\n key: string;\r\n /** The ReactNode to render inside the filter bar. */\r\n component: React.ReactNode;\r\n}\r\n\r\ninterface ActionBarPropsType extends Partial<TabProps>, IReportButtons {\r\n title: string;\r\n handleAddButton?: (e?: any) => void;\r\n isTitleMenu?: boolean;\r\n titleMenus?: any;\r\n reportFilterFields?: any[];\r\n isDateFilterEnabled?: boolean;\r\n onDateFilterChange?: (data: Partial<IReportFilters>) => void;\r\n filters?: Partial<IReportFilters>;\r\n isDateRange?: boolean;\r\n activeView?: string;\r\n setActiveView?: (string: string) => void;\r\n handleSearch?: (string: string) => void;\r\n showLevelBtn?: boolean;\r\n handleRowsExpand: () => void;\r\n handleRowsCollapse: () => void;\r\n customElement?: React.ReactNode;\r\n showLeftContent: boolean;\r\n showAssembluItemsFilter?: boolean;\r\n showBomFilter: boolean;\r\n isViewButton?: boolean;\r\n handleRedirect?: () => void;\r\n buttonText?: string;\r\n dataLength: number,\r\n filterDropDown: any[],\r\n filterKeys?: any,\r\n customSelectedFilter?: any[],\r\n customFilterConfig?: any[],\r\n /**\r\n * When `false` the Date chip and the date-range dropdown button are hidden\r\n * and date-related keys (`start_date`, `end_date`, `as_of_date`) are stripped\r\n * from every filter payload so they cannot reach the API.\r\n * Defaults to `true` (backward-compatible).\r\n */\r\n showDateFilter?: boolean;\r\n /**\r\n * Optional list of custom components to render inside the filter row.\r\n * Each entry must have a unique `key` and a `component` (ReactNode).\r\n * They are appended after the standard SearchableSelect filters.\r\n */\r\n customFilterComponents?: ICustomFilterComponent[];\r\n}\r\n\r\ntype TDatePickerVal = {\r\n startDate?: Date;\r\n endDate?: Date;\r\n key?: string;\r\n};\r\n\r\nconst customStyle =\r\n{\r\n\r\n '& .MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n border: 'none',\r\n },\r\n '&:hover fieldset': {\r\n border: 'none',\r\n },\r\n\r\n '&.Mui-focused fieldset': {\r\n border: 'none',\r\n },\r\n\r\n },\r\n}\r\nconst InventoryReportsTitleBar = (props: ActionBarPropsType) => {\r\n const {\r\n title,\r\n handleAddButton,\r\n buttons = [],\r\n dropdownMenuButtonData,\r\n isTitleMenu = false,\r\n titleMenus = [],\r\n reportFilterFields = [],\r\n toggleCallback,\r\n tabs,\r\n activeValue,\r\n setActiveValue,\r\n isDateFilterEnabled,\r\n onDateFilterChange,\r\n filters = {},\r\n isDateRange = true,\r\n activeView = \"\",\r\n setActiveView,\r\n handleSearch,\r\n showLevelBtn = false,\r\n handleRowsExpand,\r\n handleRowsCollapse,\r\n customElement,\r\n showLeftContent = true,\r\n // showAssembluItemsFilter = false,\r\n // showBomFilter = false,\r\n isViewButton = false,\r\n handleRedirect,\r\n buttonText = '',\r\n dataLength,\r\n filterDropDown = [],\r\n filterKeys,\r\n customFilterConfig = [],\r\n customSelectedFilter = [],\r\n /** Hide the date chip and date-range dropdown when false. Defaults to true. */\r\n showDateFilter = true,\r\n /** Custom ReactNode components rendered after the standard filters. */\r\n customFilterComponents = [],\r\n } = props;\r\n\r\n // When `showDateFilter` is false, exclude the 'date' entry from the\r\n // default selection so the date chip is never active.\r\n const defaultSelectedFilter = [\r\n // Only include 'date' when the date field is enabled.\r\n ...(showDateFilter ? [{ value: 'date' }] : []),\r\n {\r\n value: 'location',\r\n },\r\n {\r\n value: 'company',\r\n },\r\n ]\r\n\r\n const defaultConfig = [\r\n {\r\n key: 'company',\r\n label: 'Search Company',\r\n placeholder: 'Company',\r\n apiType: 'company',\r\n valueKey: filterKeys?.['company'] ? filterKeys['company'] : 'company',\r\n customFilter: null,\r\n },\r\n {\r\n key: 'assembly_item',\r\n label: 'Search Assembaly Items',\r\n placeholder: 'Assembaly Items',\r\n apiType: 'assemblyItems',\r\n valueKey: filterKeys?.['assembly_item'] ? filterKeys['assembly_item'] : 'assembly_item_id',\r\n },\r\n {\r\n key: 'item',\r\n label: 'Search Items',\r\n placeholder: 'Items',\r\n apiType: 'reportItems',\r\n valueKey: filterKeys?.['item'] ? filterKeys['item'] : 'item_id',\r\n multiple: true\r\n },\r\n {\r\n key: 'location',\r\n label: 'Search Warehouse Location',\r\n placeholder: 'Warehouse Location',\r\n apiType: 'location',\r\n valueKey: filterKeys?.['location'] ? filterKeys['location'] : 'warehouse_id',\r\n customFilter: null,\r\n multiple: true\r\n\r\n },\r\n {\r\n key: 'bom',\r\n label: 'Search Bill of Materials',\r\n placeholder: 'Filter Bill of Materials',\r\n apiType: 'bom',\r\n valueKey: filterKeys?.['bom'] ? filterKeys['bom'] : 'bom_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'work_order',\r\n label: 'Search Work Order',\r\n placeholder: ' Work Order',\r\n apiType: 'workOrder',\r\n valueKey: filterKeys?.['work_order'] ? filterKeys['work_order'] : 'work_order_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'routing',\r\n label: 'Search Routing',\r\n placeholder: ' Routing',\r\n apiType: 'routing',\r\n valueKey: filterKeys?.['routing'] ? filterKeys['routing'] : 'routing_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'operation',\r\n label: 'Search Operation',\r\n placeholder: ' Operation',\r\n apiType: 'operations',\r\n valueKey: filterKeys?.['operation'] ? filterKeys['operation'] : 'operation_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'equipment',\r\n label: 'Search Equipment',\r\n placeholder: ' Equipment',\r\n apiType: 'equipment',\r\n valueKey: filterKeys?.['equipment'] ? filterKeys['equipment'] : 'equipment_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n {\r\n key: 'work_center',\r\n label: 'Search Work Center',\r\n placeholder: ' Work Center',\r\n apiType: 'workCenter',\r\n valueKey: filterKeys?.['work_center'] ? filterKeys['work_center'] : 'work_center_id',\r\n customFilter: null,\r\n multiple: true\r\n },\r\n\r\n ]\r\n const filtersConfig = useMemo(() => {\r\n return [...defaultConfig, ...customFilterConfig]\r\n }, []);\r\n const inputStyle =\r\n {\r\n border: \"none\",\r\n \"&.Mui-focused\": {\r\n borderColor: \"transparent\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n padding: \"0px\",\r\n fontSize: \"14px\",\r\n color: '#289b64'\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n '& .MuiSelect-icon': {\r\n color: 'green',\r\n },\r\n }\r\n\r\n\r\n /**\r\n * Wraps `onDateFilterChange` to strip date-related keys when\r\n * `showDateFilter` is false, guaranteeing they never reach the API.\r\n * Defined before `renderFilter` to avoid temporal dead zone errors.\r\n */\r\n const safeOnDateFilterChange = (data: Partial<IReportFilters>) => {\r\n if (!onDateFilterChange) return;\r\n if (showDateFilter) {\r\n onDateFilterChange(data);\r\n } else {\r\n // Strip all date fields so they cannot pollute the request payload.\r\n const { start_date, end_date, as_of_date, ...rest } = data;\r\n onDateFilterChange(rest as Partial<IReportFilters>);\r\n }\r\n };\r\n\r\n const renderFilter = ({\r\n key,\r\n label,\r\n placeholder,\r\n apiType,\r\n valueKey,\r\n customFilter,\r\n multiple = false\r\n }: any) => {\r\n if (!showFilter(key)) return null;\r\n\r\n return (\r\n <div className=\"search-filter\" key={key}>\r\n <SearchableSelect\r\n labelId={`${key}-label`}\r\n searchPlaceholder={label}\r\n value={filters?.[valueKey]}\r\n onChange={(e) => safeOnDateFilterChange({ [valueKey]: e.target.value } as Partial<IReportFilters>)}\r\n apiType={apiType}\r\n multiple={multiple}\r\n placeholder={placeholder}\r\n customeFilter={customFilter}\r\n // CustomDropDownIcon={FilterAltIcon}\r\n customStyle={customStyle}\r\n inputStyle={inputStyle}\r\n />\r\n </div>\r\n );\r\n };\r\n // const dispatch = useAppDispatch();\r\n\r\n const FilterContainer = () => (\r\n <>\r\n {filtersConfig.map(renderFilter)}\r\n {/* Render any custom components injected by the consumer */}\r\n {customFilterComponents.map(({ key, component }) => (\r\n <React.Fragment key={key}>{component}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n\r\n\r\n\r\n\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [allFields, setAllFields] = useState<any[]>([]);\r\n const [dateRange, setDateRange] = useState<keyof typeof RANGE>(\"TODAY\");\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [customDate, setCustomDate] = useState<Date>(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n\r\n const defaultSelected = useMemo(() => {\r\n return [...defaultSelectedFilter, ...customSelectedFilter]\r\n }, [])\r\n const [selectedItems, setSelectedItems] = useState<string[]>(defaultSelected);\r\n\r\n const [level, setLevel] = useState<number>(1)\r\n const [customDateRange, setCustomDateRange] = useState<TDatePickerVal>({\r\n startDate: new Date(dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")),\r\n endDate: new Date(dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")),\r\n key: \"selection\",\r\n });\r\n const anchorRef = useRef<HTMLDivElement | null>(null);\r\n const [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n\r\n const dateSelectRef = useRef<HTMLDivElement>(null);\r\n const chipDateSelectRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleCloseDatePopper = () => {\r\n anchorRef.current = null;\r\n setOpen(false);\r\n };\r\n\r\n const handleDateChange = (range: keyof typeof RANGE) => {\r\n // Do nothing if the date filter is hidden — guard against programmatic calls.\r\n if (!showDateFilter) return;\r\n setDateRange(range);\r\n if (range === \"CUSTOM\") {\r\n anchorRef.current = dateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n const data = handleCompareDateRange({\r\n range: RANGE[range],\r\n from: \"\",\r\n to: \"\",\r\n });\r\n safeOnDateFilterChange({\r\n start_date: data?.from ? data?.from : \"\",\r\n end_date: data?.to ? data?.to : \"\",\r\n });\r\n handleCloseDatePopper();\r\n }\r\n };\r\n\r\n\r\n const handleClose = (event: Event) => {\r\n if (\r\n anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n handleCloseDatePopper();\r\n };\r\n\r\n const options = [\r\n {\r\n label: RANGE.TODAY,\r\n callback: () => {\r\n handleDateChange(\"TODAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"THIS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"THIS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"THIS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"THIS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.YESTERDAY,\r\n callback: () => {\r\n handleDateChange(\"YESTERDAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.CUSTOM,\r\n callback: () => {\r\n handleDateChange(\"CUSTOM\");\r\n },\r\n },\r\n ];\r\n\r\n const isChecked = (value: any) => {\r\n return selectedItems.some(item => item?.value == value?.value)\r\n }\r\n\r\n const handleFilterPopperSubmit = () => {\r\n const dateRangeFilter = {\r\n start_date: dayjs(customDateRange.startDate).format(\"YYYY-MM-DD\"),\r\n end_date: dayjs(customDateRange.endDate).format(\"YYYY-MM-DD\"),\r\n };\r\n const dateFilter = {\r\n as_of_date: dayjs(customDate).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n // Use safeOnDateFilterChange so date keys are stripped when showDateFilter is false.\r\n safeOnDateFilterChange({\r\n ...(isDateRange ? dateRangeFilter : dateFilter),\r\n });\r\n handleCloseDatePopper();\r\n };\r\n const handleFilterClose = () => {\r\n setActionAnchorEl(null);\r\n };\r\n const handleSelectChange = (value: any) => {\r\n if (selectedItems.some((item) => item.value == value.value)) {\r\n setSelectedItems(selectedItems.filter((item) => item?.value != value.value));\r\n return;\r\n }\r\n setSelectedItems([...selectedItems, value]);\r\n };\r\n function showFilter(val) {\r\n return selectedItems.some(item => item?.value == val)\r\n }\r\n const filterDropDownFunc = () => {\r\n return (\r\n <Menu\r\n anchorEl={actionAnchorEl}\r\n open={Boolean(actionAnchorEl)}\r\n onClose={handleFilterClose}\r\n >\r\n {/* <MenuItem className=\"inventoryReportsTitleBar--report-filter\"> */}\r\n {/* Add your options here */}\r\n {filterDropDown?.map((item) => (\r\n <MenuItem onClick={() => handleSelectChange(item)} key={item} value={item?.value}>\r\n <Checkbox checked={isChecked(item)} />\r\n <Typography sx={{ marginLeft: '10px' }} color='theme.neutral.800' type='s3'>{item?.name}</Typography>\r\n </MenuItem>\r\n ))}\r\n {/* </MenuItem> */}\r\n </Menu>\r\n );\r\n };\r\n useEffect(() => {\r\n setCustomDate(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n }, [filters?.as_of_date]);\r\n\r\n useEffect(() => {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n startDate: new Date(\r\n dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n endDate: new Date(dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")),\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filters?.end_date, filters?.start_date]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n if (isDateRange) {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n startDate: new Date(\r\n dayjs(filters?.start_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n endDate: new Date(\r\n dayjs(filters?.end_date || \"\").format(\"YYYY-MM-DD\")\r\n ),\r\n });\r\n } else {\r\n setCustomDate(\r\n new Date(dayjs(filters?.as_of_date || \"\").format(\"YYYY-MM-DD\"))\r\n );\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, isDateRange]);\r\n\r\n // useEffect(() => {\r\n // // dispatch(fetchOptions());\r\n // if (showBomFilter) {\r\n // dispatch(fetchBom())\r\n // }\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, []);\r\n\r\n useEffect(() => {\r\n setAllFields(generateFields(reportFilterFields));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [reportFilterFields]);\r\n\r\n return (\r\n <div>\r\n <div className=\"inventoryReportsTitleBar\">\r\n {showLeftContent && <div className=\"inventoryReportsTitleBar--LeftContent\">\r\n {isTitleMenu ? (\r\n <div style={{ zIndex: 999 }}>\r\n <TitleDropdownButton\r\n onClick={handleAddButton}\r\n options={titleMenus}\r\n isMenuThirdItemDisabled={true}\r\n >\r\n {title}\r\n </TitleDropdownButton>\r\n </div>\r\n ) : (\r\n <Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {title}\r\n </Typography>\r\n )}\r\n {[\r\n { label: viewTypes.TABLE, position: 1 },\r\n { label: viewTypes.CHART, position: 2 },\r\n ]\r\n .map((ele) => ele)\r\n .sort((a, b) => a.position - b.position)\r\n .map((item) => (\r\n <HeaderCard\r\n key={item?.position}\r\n title={item?.label}\r\n active={activeView}\r\n onClick={() => setActiveView?.(item.label)}\r\n />\r\n ))}\r\n\r\n </div>}\r\n {isViewButton &&\r\n <div className=\"inventoryReportsTitleBar--ExtraButtonUi\">\r\n <Button onClick={handleRedirect} >{buttonText}</Button>\r\n </div>\r\n }\r\n <ReportButtons\r\n zIndex={999}\r\n className=\"inventoryReportsTitleBar--RightContent\"\r\n buttons={buttons}\r\n dropdownMenuButtonData={dropdownMenuButtonData}\r\n toggleCallback={toggleCallback}\r\n variant={\"contained\"}\r\n iconPosition=\"end\"\r\n />\r\n {customElement && <Box >\r\n {customElement}\r\n </Box>}\r\n\r\n </div>\r\n <Divider sx={{ mb: 2, mx: 1, borderColor: 'grey.200' }} />\r\n\r\n {tabs?.length ? (\r\n <div>\r\n <TabBar\r\n tabs={tabs || []}\r\n activeValue={activeValue}\r\n setActiveValue={setActiveValue}\r\n />\r\n </div>\r\n ) : null}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n flexWrap: 'wrap',\r\n mx: 1\r\n }}\r\n >\r\n <div className=\"inventoryReportsTitleBar--FilterWrapper\">\r\n\r\n {/* Date range chip — hidden when showDateFilter is false */}\r\n {showDateFilter && showFilter('date') && isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.start_date).format(\"DD/MM/YYYY\")} - ${dayjs(filters?.end_date).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n Date Range:\r\n </Typography>\r\n <Typography\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.start_date).format(\"DD/MM/YYYY\")} -{\" \"}\r\n {dayjs(filters?.end_date).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* As-of-date chip — hidden when showDateFilter is false */}\r\n {showDateFilter && showFilter('date') && filters?.as_of_date && !isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.as_of_date).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n Date:\r\n </Typography>\r\n <Typography\r\n className=\"inventoryReportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.as_of_date).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {FilterContainer()}\r\n </div>\r\n\r\n\r\n {/* Date-range dropdown button — only shown when both isDateFilterEnabled AND showDateFilter are true */}\r\n {isDateFilterEnabled && showDateFilter && <div className=\"inventoryReportsTitleBar--FilterAction\">\r\n (\r\n <>\r\n <ReportButtons\r\n zIndex={997}\r\n className=\"inventoryReportsTitleBar--RightContent\"\r\n dropdownMenuButtonData={{\r\n icon: <img src={images.sidebar.calendar2} />,\r\n children: (\r\n <>\r\n {RANGE[dateRange]}\r\n <KeyboardArrowDownIcon />\r\n </>\r\n ),\r\n options: options,\r\n }}\r\n toggleCallback={toggleCallback}\r\n />\r\n <div ref={dateSelectRef}></div>\r\n </>\r\n )\r\n </div>\r\n }\r\n <div className=\"inventoryReportsTitleBar--FilterAction\">\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<FilterIcon fontSize=\"small\" />}\r\n onClick={(event) => setActionAnchorEl(event.currentTarget)}\r\n >\r\n Filter\r\n </Button>\r\n {showLevelBtn && <Divider flexItem orientation=\"vertical\" sx={{ alignSelf: 'auto' }} />}\r\n {filterDropDownFunc()}\r\n {showLevelBtn && (\r\n <>\r\n <Box className=\"inventoryReportsTitleBar--FilterAction--lvWrapper\">\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'> Level {level} of {dataLength}</Typography>\r\n <ButtonGroup variant=\"outlined\" disableElevation sx={({ palette }) => ({\r\n '& .MuiButton-root': {\r\n borderColor: `${palette.grey[200]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n },\r\n '& .MuiButtonGroup-firstButton': {\r\n borderTopLeftRadius: 20,\r\n borderBottomLeftRadius: 20\r\n },\r\n '& .MuiButtonGroup-lastButton': {\r\n borderTopRightRadius: 20,\r\n borderBottomRightRadius: 20\r\n }\r\n })}>\r\n <MuiButton onClick={() => {\r\n setLevel(level == dataLength ? level : level + 1)\r\n handleRowsCollapse?.(level)\r\n }}>\r\n <img src={images.common.expand} />\r\n </MuiButton>\r\n <MuiButton onClick={() => {\r\n setLevel(level != 1 ? level - 1 : 1)\r\n handleRowsExpand?.(level)\r\n }}>\r\n <img src={images.common.collapse} />\r\n </MuiButton>\r\n </ButtonGroup>\r\n </Box>\r\n </>\r\n )}\r\n <SearchBar\r\n placeholder=\"Search\"\r\n handleSearch={(val) => handleSearch?.(val)}\r\n sx={{\r\n width: \"250px\",\r\n background: \"#fff !important\",\r\n border: \"1px solid #F3F2F2 !important\",\r\n }}\r\n />\r\n </div>\r\n </Box>\r\n\r\n <Divider sx={{ my: 2, mx: 1, borderColor: 'grey.200' }} />\r\n\r\n <Popper\r\n sx={{\r\n zIndex: 9999,\r\n }}\r\n open={open}\r\n anchorEl={anchorRef.current}\r\n role={undefined}\r\n transition\r\n disablePortal\r\n >\r\n {({ TransitionProps, placement }) => (\r\n <Grow\r\n {...TransitionProps}\r\n style={{\r\n margin: \"0 20px 0 20px\",\r\n transformOrigin:\r\n placement === \"bottom\" ? \"center top\" : \"center bottom\",\r\n }}\r\n >\r\n <Paper>\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n }}\r\n >\r\n <div>\r\n {isDateRange ? (\r\n <DateRange\r\n editableDateInputs={true}\r\n onChange={(item) => setCustomDateRange(item.selection)}\r\n moveRangeOnFirstSelection={false}\r\n ranges={[customDateRange]}\r\n locale={enUS}\r\n />\r\n ) : (\r\n <Calendar\r\n onChange={(item) => setCustomDate(item)}\r\n date={customDate}\r\n locale={enUS}\r\n />\r\n )}\r\n </div>\r\n <Box sx={{ padding: \"0 12px 12px 0\" }}>\r\n <Button\r\n variant=\"contained\"\r\n sx={{ width: \"fit-content\" }}\r\n onClick={handleFilterPopperSubmit}\r\n >\r\n Apply\r\n </Button>\r\n </Box>\r\n </Box>\r\n </ClickAwayListener>\r\n </Paper>\r\n </Grow>\r\n )}\r\n </Popper>\r\n\r\n </div>\r\n );\r\n};\r\n\r\nexport { InventoryReportsTitleBar };\r\nexport default InventoryReportsTitleBar;\r\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tMenuItem,\n\tMenuItemProps,\n OutlinedInput,\n\n \n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport Select from '../select/select';\nimport Checkbox from '../checkbox/checkbox';\nimport Typography from '../typography/typography';\n// import Chip from '../chip/chip'\nimport ChipOrPlaceholder from '../form-control/form-builder/form-builder-element/chip-or-placeholder';\n\nimport './multi-select.scss';\nimport { Add, Close } from '@mui/icons-material';\n// import { MoreIcon } from '../icons';\nimport _ from 'lodash';\nimport { useTranslation } from \"react-i18next\";\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: any[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n\tvalues: string | string[];\n\tfield: any;\n}\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n\tvalues,\n\tfield,\n}: IMenuItems) => {\n\n\tconst items: React.ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value=''>\n\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t<em>{placeholder}</em>\n\t\t\t\t</Typography>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\toptions?.forEach((option) => {\n\t\t\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tkey={option.value}\n\t\t\t\tdisabled={Boolean(option.disabled)}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={_.some(values, option.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\tdisabled={Boolean(opt.disabled)}\n\t\t\t\t\t\tsx={{ pl: 5 }}\n\t\t\t\t\t\tkey={`${option.value}-${opt.value}`}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(opt.value) > -1)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\tif (field.enable_footer) {\n\t\titems.push(\n\t\t\t<Box>\n\t\t\t\t<Divider flexItem />\n\t\t\t\t<MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\n\t\t\t\t\t<Add fontSize='small' />\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\n\t\t\t\t\t\tCreate New {field.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuItem>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn items;\n};\n\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: any[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions?.find((option: any) => (option.value?.id || option.value?.name || option.value) === (selectedItem?.id || selectedItem?.name || selectedItem))?.label ||\n\t\t\tselectedItem\n\t);\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5, position:'absolute' }}>\n\t\t\t{displayTitle.slice(0, 4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t// <Chip variant='outlined' type='normal' label={<MoreIcon fontSize='small'/>} />\n\t\t\t\t'...'\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst MultiSelect = (props: any) => {\n\tconst [options, setOptions] = useState([]);\n\tconst [selectedValue, setSelectedValue] = useState(props.defaultValue || props.value || (props.is_multiselect ? [] : ''));\n\n\tconst removeUndefine = (selectOptions: any[]) => {\n\t\treturn selectOptions?.filter((option) => option);\n\t};\n\n\tconst handleSetOptions = useCallback(() => {\n\t\tsetOptions(props.options);\n\t}, [props.options]);\n\n\tuseEffect(() => {\n\t\thandleSetOptions();\n\t}, [handleSetOptions]);\n\n\tconst handleChange = (e: any, child) => {\n let value = e?.target?.value\n\t\t\t\tif(props.is_multiselect) {\n\t\t\t\t\tconst sValue = child?.props?.value\n\t\t\t\t\tconst ev = selectedValue.find(v => v?.name == sValue?.name)\n\t\t\t\t\tif(ev){\n\t\t\t\t\t\tvalue = selectedValue.filter(v => v?.name != sValue?.name)\n\t\t\t\t\t}\n\t\t\t\t\tvalue = value?.filter(Boolean)\n\t\t\t\t}\n\t\t\t\tsetSelectedValue(value);\n\t\t\t\tif (props.onChange) {\n\t\t\t\t\tprops.onChange(value);\n\t\t\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tsetSelectedValue(props.defaultValue || props.value || (props.is_multiselect ? [] : ''));\n\t}, [props.defaultValue, props.value, props.is_multiselect]);\n\n\t\tconst { t } = useTranslation();\n\n\treturn (\n\t\t<>\n\t\t\t<Select\n\t\t\t\tfullWidth\n\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\tlabel={props.label}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tdefaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\n\t\t\t\trequired={props.required}\n\t\t\t\tsize={props.size || 'small'}\n\t\t\t\tmultiple={Boolean(props?.is_multiselect)}\n\t\t\t\tdisabled={Boolean(props?.disabled)}\n\t\t\t\tvariant='outlined'\n // sx={{minWidth: '165px'}}\n\t\t\t\tsx={(Boolean(props?.is_multiselect) && selectedValue?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important', minWidth: '165px' }} : { minWidth: '165px' }}\n\t\t\t\tclassName={\n\t\t\t\t\tprops.is_multiselect && removeUndefine(selectedValue)?.length\n\t\t\t\t\t\t? 'MultiSelect'\n\t\t\t\t\t\t: ''\n\t\t\t\t}\n\t\t\t\tinput={\n\t\t\t\t\t\t!props?.is_multiselect && !props.disabled ? (\n\t\t\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\t\t\t\tlabel=''\n\t\t\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t\t\t\t<InputAdornment position='end'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{props.value && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label='clear selection'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => props.onChange(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tedge='end'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize='small'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: '1rem' }} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t}\n\t\t\t\trenderValue={(selected: string | string[]) => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{Array.isArray(selected) ? (\n\t\t\t\t\t\t\t<ChipOrPlaceholder\n\t\t\t\t\t\t\t\tselectedLabel={props.selectedLabel}\n\t\t\t\t\t\t\t\tdata={removeUndefine(selected)}\n\t\t\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\t\t\tonDelete={props?.onChipRemove}\n\t\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t\t\tchipProps={{\n\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'theme.primary.100',\n\t\t\t\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\t\t\t\t// borderRadius: '15px',\n\t\t\t\t\t\t\t\t\t\t\t'& .MuiTypography-body1': {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t'& .MuiChip-deleteIcon': {\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\t\t\t\t\t\t\t'&:hover':{\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\toptions?.find(\n\t\t\t\t\t\t\t\t(option: any) =>\n\t\t\t\t\t\t\t\t\t(option.value?.id || option.value?.name || option.value) === (selected?.id || selected?.name || selected)\n\t\t\t\t\t\t\t)?.label ||\n\t\t\t\t\t\t\tselected ||\n\t\t\t\t\t\t\tprops.placeholder\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\tsearchPlaceholder={`${t('common.search')} ${props.label}`}\n\t\t\t\thandleSearch={props.handleSearch}\n\t\t\t\tsearchValue={props.searchValue || ''}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tloading={props?.is_loading}>\n\t\t\t\t{generateMenuItems({\n\t\t\t\t\toptions,\n\t\t\t\t\tmultiple: Boolean(props.is_multiselect),\n\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\tvalues: selectedValue,\n\t\t\t\t\twith_checkboxes: true,\n\t\t\t\t\tfield: props\n\t\t\t\t})}\n\t\t\t</Select>\n\t\t\t{props.is_multiselect && Array.isArray(selectedValue) && (\n\t\t\t\t<SelectedItems data={selectedValue} options={options} />\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nMultiSelect.propTypes = {\n\tname: PropTypes.string.isRequired,\n\tplaceholder: PropTypes.string.isRequired,\n\tlabel: PropTypes.string.isRequired,\n\tsize: PropTypes.string,\n\toptions: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tlabel: PropTypes.string,\n\t\t\tvalue: PropTypes.string\n\t\t})\n\t).isRequired,\n\tdefaultValue: PropTypes.string,\n\tfieldArrayName: PropTypes.string,\n\tid: PropTypes.string,\n\trequired: PropTypes.bool,\n\tis_multiselect: PropTypes.bool,\n\tposition: PropTypes.number,\n\tdisabled: PropTypes.bool,\n\tonChipRemove: PropTypes.func,\n\tenable_footer: PropTypes.bool,\n\tfooter_action: PropTypes.string,\n\tonFooterClick: PropTypes.any,\n\tis_loading: PropTypes.bool,\n\tselectedLabel: PropTypes.string,\n\tonChange: PropTypes.func,\n};\n\nexport { MultiSelect };\nexport default MultiSelect;\n","/* eslint-disable react-refresh/only-export-components */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useMemo } from \"react\";\r\nimport { Navigate } from \"react-router-dom\";\r\nimport { usePermissions } from \"../hooks/use-permissions\";\r\nimport { Box, Divider } from \"@mui/material\";\r\nimport Typography from \"./typography/typography\";\r\nimport _ from \"lodash\";\r\n\r\ntype PermissionAction = \"canEdit\" | \"canView\" | \"canAdd\" | \"canDelete\";\r\n\r\ninterface SingleModulePermission {\r\n module: string;\r\n action: PermissionAction;\r\n}\r\n\r\ninterface MultiModulePermission {\r\n modules: string[];\r\n action: PermissionAction;\r\n operator?: \"AND\" | \"OR\"; // Default: \"OR\"\r\n}\r\n\r\ninterface ComplexPermission {\r\n permissions: Array<{\r\n module: string;\r\n action: PermissionAction;\r\n }>;\r\n operator?: \"AND\" | \"OR\"; // Default: \"AND\"\r\n}\r\n\r\ninterface ProtectedRouteProps {\r\n // Single module (backward compatibility)\r\n module?: string;\r\n action?: PermissionAction;\r\n \r\n // Multiple modules with same action\r\n multiModule?: MultiModulePermission;\r\n \r\n // Complex permissions with different actions\r\n complexPermissions?: ComplexPermission;\r\n \r\n // Custom permission checker function\r\n customPermissionCheck?: (permissions: any) => boolean;\r\n \r\n // Redirect path for unauthorized access\r\n redirectTo?: string;\r\n \r\n // Show custom error component instead of redirect\r\n showError?: boolean;\r\n \r\n children: React.ReactNode;\r\n}\r\n\r\nconst ProtectedRoute: React.FC<ProtectedRouteProps> = ({\r\n module,\r\n action,\r\n multiModule,\r\n complexPermissions,\r\n customPermissionCheck,\r\n redirectTo = \"/403\",\r\n showError = true,\r\n children\r\n}) => {\r\n const permissions = usePermissions();\r\n\r\n // Memoize permission check for performance\r\n const hasPermission = useMemo(() => {\r\n if (!permissions) {\r\n return false;\r\n }\r\n\r\n // Custom permission check takes precedence\r\n if (customPermissionCheck) {\r\n return customPermissionCheck(permissions);\r\n }\r\n\r\n // Complex permissions check\r\n if (complexPermissions) {\r\n const { permissions: permList, operator = \"AND\" } = complexPermissions;\r\n \r\n const results = permList.map(({ module: mod, action: act }) => {\r\n const modulePerms = _.get(permissions, mod, {});\r\n return modulePerms[act] ?? false;\r\n });\r\n\r\n return operator === \"AND\" \r\n ? results.every(Boolean)\r\n : results.some(Boolean);\r\n }\r\n\r\n // Multi-module with same action check\r\n if (multiModule) {\r\n const { modules, action: act, operator = \"OR\" } = multiModule;\r\n \r\n const results = modules.map(mod => {\r\n const modulePerms = _.get(permissions, mod, {});\r\n return modulePerms[act] ?? false;\r\n });\r\n\r\n return operator === \"AND\" \r\n ? results.every(Boolean)\r\n : results.some(Boolean);\r\n }\r\n\r\n // Single module check (backward compatibility)\r\n if (module && action) {\r\n const modulePerms = _.get(permissions, module, {});\r\n return modulePerms[action] ?? false;\r\n }\r\n\r\n // No permission config provided - deny access\r\n return false;\r\n }, [permissions, module, action, multiModule, complexPermissions, customPermissionCheck]);\r\n\r\n // Enhanced error component\r\n const ErrorComponent = () => (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n transform: \"translate(-50%, -50%)\", // Fixed transform values\r\n gap: 2,\r\n textAlign: \"center\",\r\n p: 3\r\n }}\r\n >\r\n <Typography \r\n type=\"h1\" \r\n color=\"theme.secondary.900\" \r\n weight=\"bold\"\r\n sx={{ fontSize: { xs: '4rem', sm: '6rem' } }}\r\n >\r\n 403\r\n </Typography>\r\n <Divider \r\n flexItem \r\n // sx={{ \r\n // borderColor: '#898f9a',\r\n // width: '100%',\r\n // maxWidth: '200px'\r\n // }}\r\n />\r\n <Typography \r\n type=\"s3\" \r\n color=\"theme.secondary.900\" \r\n weight=\"medium\"\r\n >\r\n Access Denied\r\n </Typography>\r\n <Typography \r\n type=\"body2\" \r\n color=\"theme.secondary.700\" \r\n weight=\"regular\"\r\n sx={{ mt: 1, maxWidth: '300px' }}\r\n >\r\n You don't have the required permissions to access this resource.\r\n </Typography>\r\n </Box>\r\n );\r\n\r\n // Handle loading state - permissions not yet available or still empty (e.g. right after login)\r\n if (!permissions || Object.keys(permissions).length === 0) {\r\n return null; // Wait silently until permissions are loaded\r\n }\r\n\r\n // Render based on permission check\r\n if (hasPermission) {\r\n return <>{children}</>;\r\n }\r\n\r\n return showError ? <ErrorComponent /> : <Navigate to={redirectTo} replace />;\r\n};\r\n\r\nexport default ProtectedRoute;\r\n\r\n// Helper function to create permission configurations\r\nexport const createPermissionConfig = {\r\n // Single module\r\n single: (module: string, action: PermissionAction) => ({\r\n module,\r\n action\r\n }),\r\n\r\n // Multiple modules with same action\r\n multiModule: (\r\n modules: string[], \r\n action: PermissionAction, \r\n operator: \"AND\" | \"OR\" = \"OR\"\r\n ) => ({\r\n multiModule: { modules, action, operator }\r\n }),\r\n\r\n // Complex permissions\r\n complex: (\r\n permissions: Array<{ module: string; action: PermissionAction }>,\r\n operator: \"AND\" | \"OR\" = \"AND\"\r\n ) => ({\r\n complexPermissions: { permissions, operator }\r\n }),\r\n\r\n // Custom function\r\n custom: (checkFn: (permissions: any) => boolean) => ({\r\n customPermissionCheck: checkFn\r\n })\r\n};\r\n\r\n// Example usage types for better developer experience\r\nexport type PermissionConfig = \r\n | ReturnType<typeof createPermissionConfig.single>\r\n | ReturnType<typeof createPermissionConfig.multiModule>\r\n | ReturnType<typeof createPermissionConfig.complex>\r\n | ReturnType<typeof createPermissionConfig.custom>;","import React from \"react\";\r\nimport Button from \"../../button/button\";\r\nimport DropdownButton, {\r\n IDropdownMenuOption,\r\n} from \"../../dropdown-button/dropdown-button\";\r\n\r\nimport './report-buttons.scss'\r\nimport { SxProps } from \"@mui/material\";\r\n\r\nexport interface IActionButtons {\r\n title?: string;\r\n icon?: React.ReactNode;\r\n btnStyle?: \"WhiteBtn\";\r\n variant?: \"text\" | \"outlined\" | \"contained\";\r\n action?: () => void;\r\n class?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface IReportButtons {\r\n className?: string;\r\n buttons?: IActionButtons[];\r\n dropdownMenuButtonData?: {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n options: IDropdownMenuOption[];\r\n sx?: SxProps;\r\n } | null;\r\n toggleCallback?: (e?: boolean) => void;\r\n zIndex?: number;\r\n}\r\n\r\nconst ReportButtons = ({ buttons, dropdownMenuButtonData = null, toggleCallback, className, zIndex = 999 }: IReportButtons) => {\r\n return (\r\n <div className={className}>\r\n {buttons?.map((ele) => (\r\n <Button\r\n className={\r\n ele.class\r\n ? ele.class\r\n : `wrapper--${ele?.btnStyle}`\r\n }\r\n key={ele.title}\r\n variant={ele.variant ? ele.variant : \"contained\"}\r\n startIcon={ele.icon ? ele.icon : \"\"}\r\n disabled={Boolean(ele.disabled)}\r\n onClick={ele.action}\r\n >\r\n {ele.title ?? \"\"}\r\n </Button>\r\n ))}\r\n {dropdownMenuButtonData && (\r\n <div style={{ zIndex }}>\r\n <DropdownButton\r\n options={dropdownMenuButtonData.options || []}\r\n startIcon={dropdownMenuButtonData.icon}\r\n isMenuThirdItemDisabled={true}\r\n isOnlyDropDownButton={true}\r\n variant={\"text\"}\r\n buttonGroupProps={{\r\n variant: \"text\",\r\n sx: ({palette}) => ({\r\n \"& .MuiButton-root\": {\r\n border: \"1px solid !important\",\r\n borderColor: `${palette.grey[200]} !important`,\r\n borderRadius: \"20px\",\r\n pt: 0.25,\r\n pb: 0.25,\r\n pr: 0.75,\r\n color: `${palette.grey[800]} !important`,\r\n ':hover': {\r\n bgcolor: `${palette.grey[200]} !important`\r\n }\r\n },\r\n }),\r\n }}\r\n onlyDropDownButtonProps={{\r\n style: {\r\n backgroundColor: \"white !important\",\r\n color: \"black !important\",\r\n ...dropdownMenuButtonData.sx\r\n },\r\n }}\r\n toggleCallback={toggleCallback}\r\n >\r\n {dropdownMenuButtonData.children}\r\n </DropdownButton>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport { ReportButtons };\r\nexport default ReportButtons;\r\n","import dayjs from \"dayjs\";\r\n\r\nexport const columns = [\r\n\t{\r\n\t\theader: 'Report name',\r\n\t\taccessorKey: 'name',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Email ID',\r\n\t\taccessorKey: 'emails',\r\n\t\tvisible: true,\r\n\t\ttype: 'custom'\r\n\t},\r\n\t{\r\n\t\theader: 'Date',\r\n\t\taccessorKey: 'schedule_date',\r\n\t\tvisible: true,\r\n\t\ttype: 'date'\r\n\t},\r\n\t{\r\n\t\theader: 'Time',\r\n\t\taccessorKey: 'schedule_time',\r\n\t\tvisible: true,\r\n\t\ttype: 'time'\r\n\t},\r\n\t{\r\n\t\theader: 'Recurring',\r\n\t\taccessorKey: 'autopost',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Report Page',\r\n\t\taccessorKey: 'report_data.name',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Main Page',\r\n\t\taccessorKey: 'main_page',\r\n\t\tvisible: true,\r\n\t\ttype: 'string'\r\n\t},\r\n\t{\r\n\t\theader: 'Status',\r\n\t\taccessorKey: 'status',\r\n\t\tvisible: true,\r\n\t\ttype: 'status'\r\n\t},\r\n];\r\nexport const formArrayName = 'schedule_report';\r\n\r\nexport const defaultValues = {\r\n\tschedule_report: {\r\n\t\tschedule_date: dayjs(),\r\n\t\tschedule_time: dayjs(),\r\n\t}\r\n}\r\n\r\nexport const apiPayload = {\r\n\ttype: 'type',\r\n\tautopost: (val: any) => val?.is_recurring ? val?.autopost : undefined,\r\n\temails: 'emails',\r\n\tid: (value: any) => value?.id || undefined,\r\n\tis_recurring: (val: any) => Boolean(val?.is_recurring),\r\n\tname: 'name',\r\n\tnext_schedule_date: 'next_schedule_date',\r\n\tschedule_date: 'schedule_date',\r\n\tschedule_time: 'schedule_time',\r\n\tsubject: 'subject',\r\n\treport_id: 'report_id',\r\n\tfilters: (item) => item?.filters || undefined\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { formArrayName } from \"./utils/constant\";\r\n\r\nexport const scheduleReportValidationSchema = (report_id?: boolean) => yupResolver(Yup.object().shape({\r\n [formArrayName]: Yup.object().shape({\r\n report_id: report_id ? Yup.string().required(\"Report is required\") : Yup.string(),\r\n name: Yup.string().required(\"Report name is required\"),\r\n subject: Yup.string(),\r\n schedule_date: Yup.mixed()\r\n .required(\"Date is required\")\r\n .test(\"is-future-date\", \"Date cannot be in the past\", (value) => {\r\n if (!value) return false;\r\n const selectedDate = dayjs(value).startOf(\"day\");\r\n const today = dayjs().startOf(\"day\");\r\n return selectedDate.isSame(today) || selectedDate.isAfter(today);\r\n }),\r\n schedule_time: Yup.mixed()\r\n .required(\"Time is required\")\r\n .test(\"is-future-time\", \"Time cannot be in the past\", function (value) {\r\n const { schedule_date } = this.parent;\r\n if (!value || !schedule_date) return false;\r\n\r\n const selectedDate = dayjs(schedule_date).startOf(\"day\");\r\n const today = dayjs().startOf(\"day\");\r\n\r\n // If the date is in the future, any time is valid\r\n if (selectedDate.isAfter(today)) {\r\n return true;\r\n }\r\n\r\n // If the date is today, check if the time is in the future\r\n const now = dayjs();\r\n const selectedTime = dayjs(value);\r\n const selectedDateTime = dayjs(schedule_date)\r\n .hour(selectedTime.hour())\r\n .minute(selectedTime.minute())\r\n .second(0);\r\n\r\n return selectedDateTime.isAfter(now);\r\n }),\r\n email: Yup.array(),\r\n emails: Yup.string()\r\n .test('emails-required', 'Email is required', function(value) {\r\n const { email } = this.parent;\r\n if (!email?.length && !value) {\r\n return false;\r\n }\r\n return true;\r\n }),\r\n is_recurring: Yup.boolean(),\r\n autopost: Yup.string().when(\"is_recurring\", {\r\n is: true,\r\n then: (schema) => schema.required(\"Auto post is required\"),\r\n otherwise: (schema) => schema.optional().nullable()\r\n })\r\n })\r\n}));\r\n\r\n// export const validationSchema = Yup.object().shape({\r\n// name: Yup.string().required(\"Report name is required\"),\r\n// subject: Yup.string(),\r\n// schedule_date: Yup.string().required(\"Date is required\"),\r\n// schedule_time: Yup.string().required(\"Time is required\"),\r\n// email: Yup.array(),\r\n// emails: Yup.string().when(\"email\", ([email], schema) => {\r\n// if (!email?.length)\r\n// return schema.email(\"Invalid email\").required(\"Email are required\");\r\n// return schema.email(\"Invalid email\").nullable();\r\n// }),\r\n// is_recurring: Yup.boolean(),\r\n// autopost: Yup.string().when(\"is_recurring\", (is_recurring, schema) => {\r\n// if (is_recurring[0]) return schema.required(\"Auto post is required\");\r\n// return schema;\r\n// }),\r\n// });\r\n","import { postV1ReportsScheduleReport, getV1ReportsScheduleReport ,putV1ReportsUpdateScheduleReportId,deleteV1ReportsScheduleReportId, getV1ReportsReportList} from \"../../../api-client/api.system-feature/api\";\n\nexport const AUTO_POST_OPTIONS = [\n {\n label: \"Day\",\n value: \"Day\",\n },\n {\n label: \"Week\",\n value: \"Week\",\n },\n {\n label: \"Month\",\n value: \"Month\",\n },\n {\n label: \"3 month\",\n value: \"3 month\",\n },\n {\n label: \"6 month\",\n value: \"6 month\",\n },\n {\n label: \"1 Year\",\n value: \"1 Year\",\n },\n ];\n\n export const updateScheduleReportType = async(payload:any) => putV1ReportsUpdateScheduleReportId(payload)\n\n export const createScheduleReportType = async(payload:any)=> postV1ReportsScheduleReport(payload)\n\n export const getScheduleReportType=async(payload:any)=>{\n try{\n const response=await getV1ReportsScheduleReport(payload)\n return response\n }catch(error){\n console.log(\"error\",error)\n }\n }\n export const getScheduleReportById=async(payload:any)=>{\n try{\n const response=await getV1ReportsReportList(payload)\n return response\n }catch(error){\n console.log(\"error\",error)\n }\n }\n\n export const deleteScheduleReportType=async(payload:any)=>{\n try{\n const {data={}}=await deleteV1ReportsScheduleReportId(payload)\n return data\n }catch(error){\n console.log(\"error\",error)\n }\n }","import \"./schedule-report-modal.scss\";\r\n\r\nimport { Close } from \"@mui/icons-material\";\r\nimport {\r\n Box,\r\n CircularProgress,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n DialogProps,\r\n Grid,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport Modal from \"../modal/modal\";\r\nimport Typography from \"../typography/typography\";\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport Button from \"../button/button\";\r\n\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport DynamicDate from \"../form-control/form-builder/form-builder-element/date\";\r\nimport DynamicTime from \"../form-control/form-builder/form-builder-element/time\";\r\nimport DynamicCheckBox from \"../form-control/form-builder/form-builder-element/checkbox\";\r\nimport dayjs from \"dayjs\";\r\nimport { scheduleReportValidationSchema } from \"./validator\";\r\nimport DynamicSearchSelect from '../form-control/form-builder/form-builder-element/dynamic-select';\r\nimport React from \"react\";\r\nimport ChipGenerator from \"../chip-generator/chip-generator\";\r\nimport { formatDateForPayload, formatTimeForPayload, getErrorMessage, getToken, mapApiPayload } from \"../../utils/common\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { AUTO_POST_OPTIONS, createScheduleReportType, getScheduleReportById, updateScheduleReportType } from \"./utils/common\";\r\nimport ModalLoader from \"../loaders/modal-loader\";\r\nimport { apiPayload, defaultValues, formArrayName } from \"./utils/constant\";\r\ninterface ScheduleReportModalProps {\r\n isOpen?: boolean;\r\n isNewScheduleReport?: boolean;\r\n modalProps?: DialogProps;\r\n itemData?: any;\r\n onSubmit?: () => void;\r\n onClose: () => void;\r\n label?: string;\r\n module?: string;\r\n filters?: any;\r\n report?: string;\r\n}\r\n\r\nconst ScheduleReportModal: React.FC<ScheduleReportModalProps> = ({\r\n label,\r\n isOpen=false,\r\n modalProps,\r\n itemData,\r\n onSubmit,\r\n onClose,\r\n module='accounting',\r\n filters,\r\n report=null\r\n}) => {\r\n//Local States\r\n const [submitLoading, setSubmitLoading] = useState<boolean>(false);\r\n\r\n//Form Instance\r\n const {\r\n control,\r\n handleSubmit,\r\n reset,\r\n setValue,\r\n watch,\r\n trigger\r\n } = useForm({\r\n resolver: scheduleReportValidationSchema(!itemData?.id),\r\n mode: \"all\",\r\n shouldUnregister: true,\r\n defaultValues:defaultValues\r\n });\r\n\r\n const isRecurring = watch(`${formArrayName}.is_recurring`)\r\n\r\n const disableReport = useMemo(() => {\r\n return (itemData?.id || report) ? true : false;\r\n }, [itemData?.id, report]);\r\n\r\n const handleFormSubmit = async (vals) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n const values = vals?.[formArrayName];\r\n // setSubmitLoading(true);\r\n const valuesPayload = {\r\n ...values,\r\n type:module,\r\n filters,\r\n schedule_date: formatDateForPayload(values.schedule_date),\r\n schedule_time: formatTimeForPayload(values.schedule_time),\r\n ...(itemData && itemData?.id\r\n ? { id: String(itemData.id) || \"\" }\r\n : {}),\r\n };\r\n delete valuesPayload?.email;\r\n\r\n const updatedPayload=mapApiPayload(apiPayload,valuesPayload)\r\n const apiFunc=itemData?.id?updateScheduleReportType:createScheduleReportType\r\n try{\r\n await apiFunc({\r\n ...updatedPayload,\r\n ...getToken(),\r\n })\r\n onSubmit?.()\r\n enqueueSnackbar(\"Report scheduled successfully\", {});\r\n handleModalClose()\r\n \r\n } catch(error){\r\n const errorMessage=getErrorMessage(error?.message)\r\n enqueueSnackbar(errorMessage, {\r\n variant: \"error\",\r\n });\r\n } finally{\r\n setSubmitLoading(false);\r\n }\r\n //eslint-disable-next-line\r\n };\r\n\r\n\r\n const handleModalClose = () => {\r\n onClose();\r\n setTimeout(() => {\r\n reset({\r\n [formArrayName]:{}\r\n });\r\n }, 300);\r\n };\r\n\r\n const fetchReportByName=useCallback(async()=>{\r\n console.log(\"report\",report)\r\n if(!isOpen || !report){\r\n return\r\n }\r\n try{\r\n const {data={}}=await getScheduleReportById({\r\n ...getToken(),\r\n filters:`(name.like=%${report}%)`\r\n })\r\n setValue(`${formArrayName}.report_id`,data?.reports?.[0]?.id)\r\n }catch(error){\r\n console.log(\"error\",error)\r\n }\r\n //eslint-disable-next-line\r\n },[report,isOpen,setValue]) \r\n//Effects\r\n useEffect(() => {\r\n\r\n const time = itemData?.schedule_time?.split(\":\")?.map(Number);\r\n if (itemData?.id) {\r\n reset({\r\n [formArrayName]:{\r\n ...itemData,\r\n schedule_date: itemData?.schedule_date\r\n ? dayjs(itemData?.schedule_date)\r\n : \"\",\r\n schedule_time:\r\n time?.length === 3\r\n ? dayjs()\r\n .set(\"hour\", time[0])\r\n .set(\"minute\", time[1])\r\n .set(\"second\", time[2])\r\n .set(\"millisecond\", 0)\r\n : \"\",\r\n }\r\n });\r\n }else{\r\n reset(defaultValues)\r\n }\r\n //eslint-disable-next-line\r\n }, [isOpen, itemData?.id, module]);\r\n\r\n\r\n const scheduleDate = watch(`${formArrayName}.schedule_date`);\r\n\r\n useEffect(() => {\r\n if (scheduleDate) {\r\n trigger(`${formArrayName}.schedule_time`);\r\n }\r\n }, [scheduleDate, trigger]);\r\n\r\n const isToday = useMemo(() => {\r\n return scheduleDate && dayjs(scheduleDate).startOf(\"day\").isSame(dayjs().startOf(\"day\"));\r\n }, [scheduleDate]);\r\n\r\n useEffect(() => {\r\n fetchReportByName()\r\n }, [fetchReportByName]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={onClose}\r\n maxWidth=\"md\"\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <form onSubmit={handleSubmit(handleFormSubmit)} id=\"scheduleReportModal\">\r\n {(submitLoading )&& <ModalLoader />}\r\n <DialogTitle className=\"scheduleReportModal--Title\">\r\n <Typography type=\"s3\" color=\"inherit\" weight=\"medium\">\r\n {label || 'Schedule'}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize=\"small\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n disabled={Boolean(itemData?.id)||disableReport}\r\n label=\"Report\"\r\n apiType=\"reports\"\r\n name=\"report_id\"\r\n placeholder=\"Select report\"\r\n fieldArrayName={formArrayName}\r\n formControl={control}\r\n required\r\n customeFilter={{\r\n '&type.eq':module,\r\n '&allow_scheduling.eq':1\r\n }}\r\n />\r\n </Grid>\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type=\"text\"\r\n formControl={control}\r\n label=\"Report name\"\r\n name=\"name\"\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Report Name\"\r\n required\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type=\"text\"\r\n formControl={control}\r\n label=\"Subject\"\r\n name=\"subject\"\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Subject\"\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicDate\r\n formControl={control}\r\n name=\"schedule_date\"\r\n placeholder=\"DD-MM-YYYY\"\r\n label=\"Date\"\r\n fieldArrayName={formArrayName}\r\n required\r\n min_date={dayjs()}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicTime\r\n formControl={control}\r\n placeholder=\"hh:mm\"\r\n label=\"Time\"\r\n option={\"24hr\"}\r\n name=\"schedule_time\"\r\n fieldArrayName={formArrayName}\r\n required\r\n rest={{\r\n timeSteps: { minutes: 1 },\r\n ampm: false,\r\n ...(isToday && { minTime: dayjs() }),\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={12}>\r\n <ChipGenerator\r\n control={control}\r\n name=\"emails\"\r\n label=\"Email\"\r\n required\r\n fieldArrayName={formArrayName}\r\n placeholder=\"Enter Emails: example1@mail.com, example2@mail.com\"\r\n validation={[{\r\n type: 'email',\r\n message: 'Please enter a valid email address',\r\n pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\r\n }]}\r\n />\r\n </Grid>\r\n <Grid item sm={12}>\r\n <DynamicCheckBox\r\n formControl={control}\r\n name=\"is_recurring\"\r\n title=\"Recurring\"\r\n fieldArrayName={formArrayName}\r\n titlePosition=\"end\"\r\n />\r\n </Grid>\r\n {isRecurring ? (\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label=\"Auto Post\"\r\n options={AUTO_POST_OPTIONS||[]}\r\n name=\"autopost\"\r\n placeholder=\"Select Auto Post\"\r\n fieldArrayName={formArrayName}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n ) : null}\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className=\"scheduleReportModal--ActionContainer\">\r\n <Box display=\"flex\" gap={1.5}>\r\n <Button\r\n className=\"scheduleReportModal--ActionContainer--WhiteBtn\"\r\n onClick={handleModalClose}\r\n disabled={submitLoading}\r\n >\r\n Discard\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n onClick={handleSubmit(handleFormSubmit)}\r\n endIcon={\r\n submitLoading ? (\r\n <CircularProgress size={20} color=\"inherit\" />\r\n ) : undefined\r\n }\r\n disabled={submitLoading}\r\n >\r\n Schedule\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default ScheduleReportModal;\r\n","import React from 'react';\n\nimport {\n\tSnackbarProvider,\n\tSnackbarProviderProps,\n\tuseSnackbar\n} from 'notistack';\n\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { Box } from '@mui/material';\n\nfunction SnackbarCloseButton({\n\tsnackbarKey\n}: {\n\tsnackbarKey: string | number;\n}) {\n\tconst { closeSnackbar } = useSnackbar();\n\n\treturn (\n\t\t<Box>\n\t\t\t<IconButton\n\t\t\t\tonClick={() => closeSnackbar(snackbarKey)}\n\t\t\t\tsx={{ width: 20, height: 20 }}>\n\t\t\t\t<CloseIcon sx={{ color: '#fff', width: 16, height: 16 }} />\n\t\t\t</IconButton>\n\t\t</Box>\n\t);\n}\n\nconst Snackbar = (props: SnackbarProviderProps) => {\n\tconst { children, ...rest } = props;\n\treturn (\n\t\t<SnackbarProvider\n\t\t\taction={(snackbarKey) => (\n\t\t\t\t<SnackbarCloseButton snackbarKey={snackbarKey} />\n\t\t\t)}\n\t\t\tstyle={{ flexWrap: 'unset' }}\n\t\t\t// iconVariant={}\n\t\t\tanchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n\t\t\t{...rest}>\n\t\t\t{children}\n\t\t</SnackbarProvider>\n\t);\n};\n\nexport { Snackbar };\nexport default Snackbar;\n","import React, { useEffect } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n IconButton,\n} from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport \"../filter/filter.scss\"; \nimport Button from \"../button/button\";\nimport { Close } from \"@mui/icons-material\";\n\ninterface FileConfirmationDialogProps {\n open: boolean;\n onClose: () => void;\n onReplace: () => void;\n onKeepBoth: () => void;\n title?: string;\n isFile : boolean ; \n}\n\nconst FileConfirmationDialog: React.FC<FileConfirmationDialogProps> = ({\n open,\n onClose,\n onReplace,\n onKeepBoth,\n title , \n isFile\n}) => {\n\n useEffect(() => {\n }, [open])\n\n return (\n <Dialog open={open} className=\"filter-container\" onClose={onClose}>\n <DialogTitle className=\"filter-header\" sx={{padding: \"20px\"}}> <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Confirmation\n </Typography>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </DialogTitle>\n <DialogContent sx={{marginTop: \"20px\"}}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n {isFile ? `The destination already has a file named ${title}` : \"The destination already has a folder name \"}\n \n </Typography>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Button className=\"cancel-filter-btn\" onClick={onKeepBoth} >\n Keep Both\n </Button>\n <Button onClick={onReplace} >\n Replace\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default FileConfirmationDialog;\n","import { useEffect, useRef, useState } from \"react\";\r\n\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport Typography from \"../typography/typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport \"./upload.scss\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport Toast from '../toast/toast';\r\nimport {\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Divider,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport Button from \"../button/button\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport images from \"../../assets/images\";\r\nimport Chip from \"../chip/chip\";\r\nimport { auth } from \"../../constants/auth\";\r\nimport { KeyboardArrowDown, KeyboardArrowUp, Clear } from \"@mui/icons-material\";\r\nimport FileConfirmationDialog from \"./file-confirmation\"\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\ninterface UploadProps {\r\n open: boolean;\r\n title: string;\r\n multiple?: boolean;\r\n accept?: string;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n onSubmit: (files: any[]) => void;\r\n existingDriveData?: any;\r\n fileUploaded?: (value: boolean) => void | undefined;\r\n type: any\r\n\r\n\r\n}\r\ninterface CustomNavigator extends Navigator {\r\n connection?: {\r\n downlink?: number;\r\n };\r\n}\r\nconst formatBytes = (bytes: number, decimals = 2) => {\r\n if (bytes === 0) return \"0 Bytes\";\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\r\n};\r\n\r\nconst Upload = (props: UploadProps) => {\r\n const {\r\n open,\r\n title,\r\n onClose,\r\n onConfirm,\r\n accept = \"*\",\r\n onSubmit,\r\n multiple = true,\r\n existingDriveData,\r\n fileUploaded,\r\n type\r\n\r\n } = props;\r\n\r\n const [files, setFiles] = useState<\r\n {\r\n file: File;\r\n isPrivate: boolean;\r\n checkboxDisabled: boolean;\r\n status: string;\r\n uploadProgress: number;\r\n fileSize: number;\r\n fileName: string;\r\n fileType: string;\r\n location: string;\r\n message: string;\r\n }[]\r\n >([]);\r\n\r\n interface IToast {\r\n type: 'normal' | 'alert';\r\n message: string;\r\n }\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [isCollapsed, setIsCollapsed] = useState(false);\r\n const [isDialogMinimized, setIsDialogMinimized] = useState(false);\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n const [abortController, setAbortController] = useState(new AbortController());\r\n const authToken = localStorage.getItem(auth.storageTokenKeyName);\r\n const [allDriveData, setAllDriveData] = useState();\r\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\r\n const [selectedFileTitle, setSelectedFileTitle] = useState();\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDropAccepted: (newFiles) => {\r\n setFiles([\r\n ...files,\r\n ...newFiles.map((file) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n })),\r\n ]);\r\n setIsDragOver(false);\r\n },\r\n onDragEnter: () => {\r\n setIsDragOver(true);\r\n },\r\n onDragLeave: () => {\r\n setIsDragOver(false);\r\n },\r\n noClick: true,\r\n noKeyboard: true,\r\n multiple: multiple,\r\n accept: accept ? convertAcceptObject(accept) : accept,\r\n });\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n const driveTitles = existingDriveData?.map(item => item['title'])\r\n setAllDriveData(driveTitles);\r\n }, [existingDriveData]);\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = (event: any) => {\r\n if (isUploading) {\r\n const message =\r\n \"Are you sure you want to leave? Your uploads are not complete.\";\r\n event.returnValue = message; // Standard for most browsers\r\n return message; // For some older browsers\r\n }\r\n };\r\n if (fileInputRef.current) {\r\n fileInputRef.current.multiple = multiple;\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n return () => {\r\n // Clean up the event listener when the component unmounts\r\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n };\r\n }, [isUploading, multiple]);\r\n\r\n const getInternetSpeed = () => {\r\n const customNavigator = navigator as CustomNavigator;\r\n if (\"connection\" in customNavigator && customNavigator.connection) {\r\n return customNavigator.connection.downlink;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n function convertAcceptObject(types: string) {\r\n const accepts = types.split(\",\").map((item) => item.trim());\r\n const acceptObject = accepts.reduce((acc: any, type: string) => {\r\n acc[type] = [];\r\n return acc;\r\n }, {});\r\n return acceptObject;\r\n }\r\n\r\n const renderFileIcon = (file: any) => {\r\n const fileType = file?.type.split(\"/\")[0];\r\n switch (fileType) {\r\n case \"image\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"application\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"text\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n default:\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n const BASE_URL = `${getApiConfig().backendBaseUrl}/document/v1/file-upload/`;\r\n\r\n const handleConfirm = async () => {\r\n setIsUploading(true);\r\n // Create a new AbortController for each confirmation\r\n const controller = new AbortController();\r\n setAbortController(controller);\r\n\r\n const filteredFiles = files.filter((file: any) => file.status !== \"canceled\").length;\r\n for (let i = 0; i < files.length; i++) {\r\n if (files[i].uploadProgress === 100 || files[i].status !== \"pending\") {\r\n continue;\r\n }\r\n\r\n const file = files[i];\r\n\r\n const fileSize = file?.fileSize;\r\n try {\r\n if (fileSize > 10 * 1024 * 1024) {\r\n const uploadResponse = await handleMultipartUpload(file, i, controller);\r\n if (uploadResponse) {\r\n setTimeout(() => { fileUploaded(true) }, 1000);\r\n }\r\n } else {\r\n await handleRegularUpload(file, i, controller, filteredFiles);\r\n }\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[i] = {\r\n ...updatedFiles[i],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n } finally {\r\n setIsUploading(false);\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n let tempCount = 0;\r\n const handleRegularUpload = async (\r\n file: any,\r\n index: number,\r\n controller: any,\r\n fileCount: number\r\n ) => {\r\n try {\r\n const format = ['docx', 'doc', 'csv', 'pdf', 'xls', 'xlsx', 'vnd.ms-excel', 'excel', 'txt'];\r\n const mimeType = file?.mimeType || file?.fileType || '';\r\n const isValid = format.some(f => mimeType.includes(f));\r\n\r\n if (isValid && file?.fileSize && file?.fileSize >= 5242880) {\r\n return setToast({\r\n type: 'alert',\r\n message: 'File size must be within 5 MB!'\r\n });\r\n }\r\n const preSignedUrlsResponse = await fetch(\r\n `${BASE_URL}?key=${file?.fileName}&partCount=1&mimeType=${file?.fileType}&is_private=${!file?.isPrivate}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"file-size\": file?.fileSize,\r\n \"x-token\": authToken,\r\n },\r\n signal: controller.signal\r\n },\r\n );\r\n const preSignedUrlsData = await preSignedUrlsResponse.json();\r\n if (preSignedUrlsData?.status_code == 400) {\r\n // alert(preSignedUrlsData?.message);\r\n setToast({\r\n type: 'alert',\r\n message: preSignedUrlsData?.message\r\n });\r\n return;\r\n }\r\n const preSignedUrl = preSignedUrlsData.data?.preSignedData?.presignedUrl;\r\n const location = preSignedUrlsData.data?.preSignedData?.location;\r\n const partParams = {\r\n Body: file?.file.slice(0, file?.fileSize),\r\n url: preSignedUrl,\r\n };\r\n const contentLength = file.fileSize;\r\n // const maxChunkSize = 1024 * 1024 * 1024; // 10 MB maximum chunk size\r\n // const chunkSize = Math.min(contentLength * 0.1, maxChunkSize);\r\n const chunkSize = 1024 * 1024 * 1024 * 1024 // 1MB chunk size\r\n let bytesUploaded = 0;\r\n\r\n while (bytesUploaded < contentLength) {\r\n const start = bytesUploaded;\r\n const end = Math.min(bytesUploaded + chunkSize, contentLength);\r\n\r\n // Send chunk of the file\r\n await fetch(partParams.url, {\r\n method: \"PUT\",\r\n body: file.file.slice(start, end),\r\n headers: {\r\n \"Content-Type\": \"application/octet-stream\",\r\n },\r\n });\r\n\r\n // Update progress\r\n bytesUploaded = end;\r\n const progress = Math.round((bytesUploaded / contentLength) * 100);\r\n\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n checkboxDisabled: true,\r\n status: \"uploading\",\r\n uploadProgress: progress,\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"completed\",\r\n location,\r\n message: \"Uploaded Successfully\",\r\n };\r\n tempCount = tempCount + 1;\r\n\r\n if (fileCount == tempCount) {\r\n onSubmit(updatedFiles);\r\n tempCount = 0;\r\n\r\n }\r\n return updatedFiles;\r\n });\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n\r\n };\r\n\r\n const handleMultipartUpload = async (\r\n file: any,\r\n index: number,\r\n controller: any,\r\n ) => {\r\n\r\n try {\r\n const partSize =\r\n (getInternetSpeed() || 10) * 1024 * 1024 < 5 * 1024 * 1024\r\n ? 5 * 1024 * 1024\r\n : (getInternetSpeed() || 10) * 1024 * 1024;\r\n const parts = Math.ceil(file?.fileSize / partSize);\r\n const preSignedUrlsResponse = await fetch(\r\n `${BASE_URL}?key=${file?.fileName}&partCount=${parts}&mimeType=${file?.fileType}&is_private=${!file?.isPrivate}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"file-size\": file?.fileSize,\r\n \"x-token\": authToken,\r\n },\r\n signal: controller.signal,\r\n },\r\n );\r\n const preSignedUrlsData = await preSignedUrlsResponse.json();\r\n\r\n if (preSignedUrlsData && preSignedUrlsData?.status_code && preSignedUrlsData?.status_code == 400) {\r\n setToast({ message: preSignedUrlsData?.message || \"Internal Server Error\", type: \"error\" });\r\n return null;\r\n }\r\n\r\n const preSignedUrls = preSignedUrlsData.data.preSignedData?.preSignedUrls;\r\n if (preSignedUrls.length > 0) {\r\n const uploadId =\r\n preSignedUrls[0].presignedUrl.match(/uploadId=([^&]+)/)[1];\r\n for (let i = 0; i < preSignedUrls.length; i++) {\r\n const partNum = preSignedUrls[i].partNumber;\r\n const preSignedUrl = preSignedUrls[i].presignedUrl;\r\n const start = (partNum - 1) * partSize;\r\n const end = Math.min(start + partSize, file?.fileSize);\r\n const partParams = {\r\n Body: file?.file?.slice(start, end),\r\n url: preSignedUrl,\r\n };\r\n await fetch(partParams.url, {\r\n method: \"PUT\",\r\n body: partParams.Body,\r\n headers: {\r\n \"Content-Type\": \"application/octet-stream\",\r\n },\r\n });\r\n const progress = Math.round(((i + 1) * 100) / parts);\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n checkboxDisabled: true,\r\n status: \"uploading\",\r\n uploadProgress: progress,\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n const markCompleteResponse = await fetch(`${BASE_URL}mark-complete`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-token\": authToken,\r\n },\r\n body: JSON.stringify({\r\n fileName: file?.fileName,\r\n uploadId: uploadId,\r\n }),\r\n });\r\n const markCompleteData = await markCompleteResponse.json();\r\n const location = markCompleteData?.data?.location;\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"completed\",\r\n location: location,\r\n message: \"Uploaded Successfully\",\r\n };\r\n\r\n onSubmit(updatedFiles);\r\n return updatedFiles;\r\n });\r\n } else {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: \"Did not get pre-signed URLs\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n } catch (error: any) {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = [...prevFiles];\r\n updatedFiles[index] = {\r\n ...updatedFiles[index],\r\n status: \"failed\",\r\n message: error.message || \"Internal Server Error\",\r\n };\r\n return updatedFiles;\r\n });\r\n }\r\n };\r\n\r\n const handleChipClick = () => {\r\n if (fileInputRef.current) {\r\n // If multiple is true, set input for multiple files\r\n if (props.multiple) {\r\n fileInputRef.current.setAttribute(\"multiple\", \"true\");\r\n } else {\r\n // If multiple is false, set input for a single file\r\n fileInputRef.current.removeAttribute(\"multiple\");\r\n }\r\n fileInputRef.current.click();\r\n }\r\n };\r\n\r\n //checking if the file already exists or not in the drive \r\n const handleFileChange = (e: any) => {\r\n\r\n const selectedFiles = e.target.files;\r\n\r\n const fileTitles = Array.from(selectedFiles).map(file => {\r\n const fileName = file.name;\r\n const nameWithoutExtension = fileName.substring(0, fileName.lastIndexOf('.')) || fileName;\r\n return nameWithoutExtension;\r\n })[0];\r\n\r\n setSelectedFileTitle(fileTitles);\r\n\r\n setIsConfirmDialogOpen(allDriveData?.includes(fileTitles));\r\n const newFiles = Array.from(selectedFiles).map((file: any) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file?.size,\r\n fileName: file?.name,\r\n fileType: file?.type,\r\n location: \"\",\r\n message: \"\",\r\n }));\r\n setFiles((prevFiles: any) => [...prevFiles, ...newFiles]);\r\n setIsUploading(false);\r\n\r\n\r\n };\r\n\r\n const removeFile = (indexToRemove: number) => {\r\n\r\n setFiles((prevFiles) =>\r\n prevFiles.map((file, index) =>\r\n index === indexToRemove ? { ...file, status: \"canceled\" } : file,\r\n ),\r\n );\r\n\r\n };\r\n\r\n\r\n\r\n const toggleIsPrivate = (index: number) => {\r\n setFiles((prevFiles) =>\r\n prevFiles.map((item, i) =>\r\n i === index ? { ...item, isPrivate: !item.isPrivate } : item,\r\n ),\r\n );\r\n };\r\n\r\n const toggleCollapse = () => {\r\n setIsCollapsed((prevIsCollapsed) => !prevIsCollapsed);\r\n };\r\n\r\n const handleMinimizeClick = () => {\r\n setIsDialogMinimized(!isDialogMinimized);\r\n isDialogMinimized ? onConfirm() : onClose();\r\n };\r\n\r\n const handleDialogClose = () => {\r\n if (files.length > 0) {\r\n if (\r\n confirm(\r\n \"Your uploads are not complete. Would you like to cancel all ongoing uploads?\",\r\n )\r\n ) {\r\n // Abort the ongoing requests when the dialog is closed\r\n abortController.abort();\r\n if (abortController?.signal?.aborted) {\r\n onClose();\r\n }\r\n setFiles([]);\r\n }\r\n } else {\r\n onClose();\r\n }\r\n };\r\n useEffect(() => {\r\n open && setFiles([]);\r\n }, [open]);\r\n\r\n const onCloseConfirmPopup = () => {\r\n setIsConfirmDialogOpen(false);\r\n }\r\n\r\n const onReplace = async () => {\r\n const baseUrl = `${getApiConfig().backendBaseUrl}`;\r\n const fileId = existingDriveData?.filter(file => file.title === selectedFileTitle)[0].id;\r\n const headers = {\r\n \"Content-type\": \"application/json; charset=utf-8\",\r\n };\r\n const authToken = localStorage.getItem(auth.storageTokenKeyName) || '';\r\n headers[\"x-token\"] = authToken;\r\n await fetch(`${baseUrl}/document/v1/drive/${fileId}`, {\r\n method: \"DELETE\",\r\n headers,\r\n });\r\n\r\n onCloseConfirmPopup();\r\n }\r\n\r\n const onKeepBoth = () => {\r\n onCloseConfirmPopup();\r\n }\r\n return (\r\n <>\r\n <Dialog open={open} onClose={onClose} className=\"upload\">\r\n <DialogTitle className=\"upload--head\">\r\n <Box className=\"upload--title\">\r\n <Typography\r\n type=\"s3\"\r\n ml={1}\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n {title}\r\n </Typography>\r\n </Box>\r\n <div>\r\n <IconButton disableRipple onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </IconButton>\r\n <IconButton disableRipple onClick={handleDialogClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n </div>\r\n </DialogTitle>\r\n <Divider />\r\n <DialogContent className=\"upload--content\">\r\n {files.length === 0 ? (\r\n <div\r\n className={`upload--fileContent ${isDragActive ? \"drag-active\" : \"\"\r\n }`}\r\n >\r\n <div {...getRootProps()} className=\"drop-view\">\r\n {!isDragOver ? (\r\n <>\r\n <input {...getInputProps()} ref={fileInputRef} />\r\n <p className=\"upload--text\">\r\n Drag and Drop files here or upload from\r\n </p>\r\n\r\n <div className=\"device-wrap\">\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.monitor} />\r\n <Typography type=\"s5\">My Device</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={async () => {\r\n // handleFileChange(e) ; \r\n handleConfirm();\r\n }}\r\n accept={accept}\r\n />\r\n </div>\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.camera} />\r\n <Typography type=\"s5\">Camera</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"after-drop\">\r\n <img src={images.upload.documentUpload} />\r\n <Typography type=\"s3\">\r\n Drag & Drop your files here\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"main-container\">\r\n <div className=\"body-section\">\r\n <div className=\"document-section\">\r\n <div className=\"document-body\">\r\n {files.map((file: any, index: number) => (\r\n <div className=\"upload-list\" key={index}>\r\n <div className=\"document-cover\" key={file?.file?.name}>\r\n <div className=\"document-name\">\r\n {renderFileIcon(file?.file)}\r\n <div className=\"document-title\">\r\n <div className=\"document-box\">\r\n <div className=\"document-desc\">\r\n {file?.file?.name}\r\n </div>\r\n <div className=\"document-size\">\r\n {formatBytes(file?.file?.size)}\r\n <span\r\n className={\r\n file?.status === \"completed\" &&\r\n file?.message.length > 0\r\n ? \"success-file\"\r\n : \"fail-file\"\r\n }\r\n >\r\n {file?.message}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"document-choices\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n <div className=\"checkbox\">\r\n <Checkbox\r\n checked={file?.isPrivate || type == 'public'}\r\n onChange={() => toggleIsPrivate(index)}\r\n disabled={file?.checkboxDisabled || type == 'public'}\r\n />\r\n <div className=\"checkbox-text\">Public</div>\r\n </div>\r\n <div\r\n className=\"delete-icon\"\r\n onClick={() => removeFile(index)}\r\n >\r\n <Avatar\r\n size={24}\r\n src={images.upload.trash}\r\n ></Avatar>\r\n </div>\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"document-progress\">\r\n {file?.uploadProgress > 0 && (\r\n <LinearProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n {multiple && (\r\n <>\r\n <Chip\r\n className=\"add-file\"\r\n variant=\"outlined\"\r\n type=\"normal\"\r\n label={\"Add File\"}\r\n icon={<Add />}\r\n onClick={handleChipClick}\r\n />\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </DialogContent>\r\n <Divider />\r\n <DialogActions className=\"upload--actions\">\r\n <Button variant=\"text\" onClick={handleDialogClose}>\r\n Cancel\r\n </Button>\r\n <Button\r\n color=\"secondary\"\r\n onClick={handleConfirm}\r\n disabled={!files.length || isUploading}\r\n >\r\n Upload\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n {isDialogMinimized && (\r\n <div className=\"bottom-corner-box\">\r\n <div className=\"top-section\">\r\n <div className=\"top-text\">\r\n Uploading {files.length} Item{files.length !== 1 ? \"s\" : \"\"}\r\n </div>\r\n <div className=\"top-options\">\r\n <div className=\"btn\" onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </div>\r\n <div className=\"btn\" onClick={toggleCollapse}>\r\n <div className=\"arrow-btn\">\r\n {isCollapsed ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\r\n </div>\r\n </div>\r\n <div className=\"btn\" onClick={handleDialogClose}>\r\n <Clear />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"box-list\">\r\n {!isCollapsed &&\r\n files.map((file: any, index: number) => (\r\n <div className=\"bottom-section\">\r\n <div className=\"doc-icon\">{renderFileIcon(file?.file)}</div>\r\n <div className=\"file-detail\">\r\n <div className=\"file-name\">\r\n <div className=\"file-text\">\r\n {file?.file?.name}\r\n {index}\r\n </div>\r\n </div>\r\n <div className=\"file-status\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n {file.uploadProgress === 0 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.empty}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n onClick={() => removeFile(index)}\r\n src={images.upload.close}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n {file?.uploadProgress > 0 &&\r\n file?.uploadProgress < 100 && (\r\n <CircularProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n {file?.uploadProgress === 100 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.tick}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n src={images.upload.folder}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {isConfirmDialogOpen && <FileConfirmationDialog title={selectedFileTitle} open={isConfirmDialogOpen} onClose={onCloseConfirmPopup} onReplace={onReplace} onKeepBoth={onKeepBoth} isFile={true} />}\r\n\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { Upload };\r\nexport default Upload;\r\n","import { Close } from \"@mui/icons-material\";\r\nimport { ChipProps } from \"@mui/material\";\r\nimport Chip from \"../../chip/chip\";\r\nimport Typography from \"../../typography/typography\";\r\n\r\ninterface ChipOrPlaceholderProps {\r\n data: string[];\r\n placeholder: string;\r\n onDelete?: () => void;\r\n chipProps?: Omit<ChipProps, \"label\">;\r\n}\r\n\r\nconst ChipOrPlaceholder: React.FC<ChipOrPlaceholderProps> = ({\r\n data,\r\n placeholder,\r\n onDelete,\r\n chipProps,\r\n}) => (\r\n <>\r\n {data.length ? (\r\n <Chip\r\n variant=\"outlined\"\r\n type=\"normal\"\r\n label={`${data.length} Selected`}\r\n deleteIcon={<Close fontSize=\"large\" />}\r\n onDelete={onDelete}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n {...chipProps}\r\n />\r\n ) : (\r\n <Typography color=\"inherit\" type=\"s3\">\r\n {placeholder}\r\n </Typography>\r\n )}\r\n </>\r\n);\r\n\r\nexport default ChipOrPlaceholder;\r\n","import { Control, Controller, FieldValue } from \"react-hook-form\";\nimport { Box, FormHelperText, MenuItem, SelectProps } from \"@mui/material\";\n\nimport Select from '../select';\nimport Checkbox from '../../checkbox/checkbox';\nimport Typography from '../../typography/typography';\nimport Chip from '../../chip/chip';\nimport MoreIcon from '../../icons/more';\nimport { MenuItemProps } from '@mui/material';\nimport { ReactElement } from 'react';\nimport ChipOrPlaceholder from './chip-or-placeholder';\nimport './controller-select.scss';\n\ninterface IControllerSelect {\n name: string;\n label: string;\n options: any;\n placeholder: string;\n formControl: Control<FieldValue<any>, any>;\n fieldArrayName?: string;\n position?: string;\n required?: boolean;\n size?: SelectProps[\"size\"];\n multiple?: boolean;\n disabled?: boolean;\n searchPlaceholder?: string;\n handleSearch?: () => void;\n classes?: string;\n with_checkboxes?: boolean;\n onChipRemove?: () => void;\n}\n\nexport interface IOption {\n\ttext: string;\n\tvalue: string | number;\n\tisGroup?: boolean;\n\tparent?: string;\n\toptions?: { text: string; value: string }[];\n}\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: IOption[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n onChange: (value: string[]) => void\n\tvalues: string | string[];\n}\n\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: IOption[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions.find((option: any) => option.value === selectedItem)?.text ||\n\t\t\tselectedItem\n\t);\n\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\n\t\t\t{displayTitle.slice(0.4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t<Chip variant='outlined' type='normal' label={<MoreIcon />} />\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n onChange,\n\tvalues\n}: IMenuItems) => {\n\tconst items: ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value=''>\n\t\t\t\t<em>{placeholder}</em>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\n const childValues = childOptions.map((child) => child.value);\n\n const isParentSelected = values.includes(parentValue);\n const updatedValues = isParentSelected\n ? values.filter((value) => value !== parentValue && !childValues.includes(value))\n : [...values, parentValue, ...childValues];\n\n onChange(updatedValues);\n };\n\n\toptions.forEach((option) => {\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t// <Checkbox checked={values?.indexOf((option.value)) > -1} />\n <Checkbox checked={values?.indexOf((option.value)) > -1}\n onChange={() => handleParentChange(option.value, option.options || [])}\n />\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t{option.text}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem value={opt.value} sx={{ pl: 5 }}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox checked={values?.indexOf(opt.value) > -1} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{opt.text}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\treturn items;\n};\n\nconst ControllerSelect: React.FC<IControllerSelect> = ({\n name,\n fieldArrayName,\n options,\n label,\n placeholder,\n formControl,\n position,\n required,\n size = \"small\",\n multiple,\n disabled,\n searchPlaceholder,\n handleSearch,\n classes,\n with_checkboxes,\n onChipRemove,\n}) => {\n return (\n <Controller\n control={formControl}\n name={`${fieldArrayName}.${name}`}\n render={({ field, fieldState: { error } }) => (\n <>\n <Select\n fullWidth\n name={name}\n dataPosition={position}\n dataName={`${fieldArrayName}.${name}`}\n placeholder={placeholder}\n label={label}\n value={field.value || (multiple ? [] : \"\")}\n defaultValue=\"\"\n onChange={(e:any)=>(multiple&&e.target?.value.filter((i:any)=>i)?.length>0||!multiple&&(e.target?.value))?field.onChange(e.target.value):field.onChange(\"\")}\n required={Boolean(required)}\n size={size}\n multiple={Boolean(multiple)}\n disabled={Boolean(disabled)}\n searchPlaceholder={searchPlaceholder}\n handleSearch={handleSearch}\n className={classes}\n variant=\"outlined\"\n error={Boolean(error)}\n renderValue={(selected: string | string[]) => (\n <>\n {Array.isArray(selected) ? (\n <ChipOrPlaceholder\n data={selected}\n placeholder={placeholder}\n onDelete={onChipRemove}\n />\n ) : (\n selected || placeholder\n )}\n </>\n )}\n >\n {generateMenuItems({\n options,\n multiple: Boolean(multiple),\n placeholder: placeholder,\n values: field.value,\n with_checkboxes: Boolean(with_checkboxes),\n onChange: field.onChange\n })}\n </Select>\n {error &&\n <FormHelperText error>{error.message}</FormHelperText>\n }\n {multiple && Array.isArray(field?.value) && (\n <SelectedItems data={field.value} options={options} />\n )}\n </>\n )}\n />\n );\n};\n\nexport default ControllerSelect;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { Box } from '@mui/material';\r\n\r\nimport Typography from '../../typography/typography';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport DateTimePicker from '../../date-time-picker/date-time-picker';\r\nimport TextField from '../../text-field/text-field';\r\nimport UploadMedia from '../../upload-media/upload-media';\r\n\r\nimport * as yup from 'yup';\r\nimport _ from 'lodash';\r\nimport dayjs from 'dayjs';\r\nimport PhoneInput from '../../phone-input/phone-input';\r\nimport Checkbox from '../../checkbox/checkbox';\r\nimport SearchableSelect from '../../searchable-select';\r\nimport TimePicker from '../../time-picker/time-picker';\r\n\r\ninterface IInlineEditFields {\r\n\tcell: any;\r\n\tcolumn: any;\r\n\trow: any;\r\n\ttable: any;\r\n\tcol: any;\r\n\tcallback: (value: any, column: any, rowId: any) => any;\r\n\terrors: any;\r\n\tvalidationSchema: any;\r\n\tsetValidationErrors: any;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => any;\r\n\tgetSelectedData:any\r\n}\r\nconst InlineEditFields: React.FC<IInlineEditFields> = ({\r\n\t// cell,\r\n\tcolumn,\r\n\trow,\r\n\t// table,\r\n\tcol,\r\n\t// callback,\r\n\terrors,\r\n\tvalidationSchema,\r\n\tsetValidationErrors,\r\n\tonChangeRowField,\r\n\tgetSelectedData,\r\n\tsyncFieldValue\r\n}) => {\r\n\r\n\tconst [inputValue, setInputValue] = useState<any>();\r\n\tconst [isInitialSet, setIsInitialSet] = useState<any>(false);\r\n const customFilter=useRef(null)\r\n\t// ** Getting only editing enabled fields.\r\n\tconst editCols = row\r\n\t\t.getAllCells()\r\n\t\t.map((col: any) => col.column.columnDef)\r\n\t\t.filter(\r\n\t\t\t(col: any) =>\r\n\t\t\t\tcol?.enableEditing === undefined || col?.enableEditing === true\r\n\t\t);\r\n\r\n\tconst editVariant = col.editVariant;\r\n\tconst fieldProperties = column.columnDef?.editProperties || {};\r\n\r\n\t// ** Default and Dynamic disbaling a field with row data\r\n\tlet fieldDisbled = false;\r\n\tif (fieldProperties?.disable) {\r\n\t\tif (typeof fieldProperties.disable === 'function') {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties?.disable(row, row._valuesCache));\r\n\t\t} else {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties.disable);\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleCustomFilter = useCallback(async (row, values) => {\r\n\t\t\r\n\t\ttry {\r\n\t\t\tif (typeof fieldProperties.customeFilter === 'function') {\r\n\t\t\t\tconst filter = await fieldProperties.customeFilter(row, values);\r\n\t\t\t\tcustomFilter.current = filter;\r\n\t\t\t\treturn filter;\r\n\t\t\t} else {\r\n\t\t\t\tcustomFilter.current = fieldProperties?.customeFilter;\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [fieldProperties, row, row._valuesCache]);\r\n\r\n\t\r\n\tuseEffect(()=>{\r\n\t\thandleCustomFilter(row, row._valuesCache)\r\n\t},[handleCustomFilter,row,row._valuesCache]);\r\n\t// ** Setting a default value for edit mode.\r\n\tconst valueKey = fieldProperties?.valueKey;\r\n\tlet defaultValue: any = '';\r\n\r\n\tif (editVariant === 'select' && fieldProperties?.is_multiple) {\r\n\t\tdefaultValue = valueKey ? _.get(row.original, valueKey, []) : [];\r\n\t} else {\r\n\t\tdefaultValue = valueKey\r\n\t\t\t? _.get(row.original, valueKey, row.original[column.id])\r\n\t\t\t: row.original[column.id];\r\n\t\t\r\n\t\t// For select fields, if we have a string or numeric value but need an object, try to find the matching option\r\n\t\tif (editVariant === 'select' && (typeof defaultValue === 'string' || typeof defaultValue === 'number') && col?.editSelectOptions) {\r\n\t\t\tconst matchingOption = col.editSelectOptions.find((option: any) => \r\n\t\t\t\toption.value === defaultValue || option.id === defaultValue || option.name === defaultValue || String(option.id) === String(defaultValue)\r\n\t\t\t);\r\n\t\t\tif (matchingOption) {\r\n\t\t\t\tdefaultValue = matchingOption;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// ** Validate a field with Material Table Validation Schema.\r\n\tconst validate = async (value: any) => {\r\n\t\ttry {\r\n\t\t\t// const v = await validationSchema.validateAt( // * * This line has commented for rerendering purpose\r\n\t\t\tawait validationSchema.validateAt(\r\n\t\t\t\tcolumn.id,\r\n\t\t\t\t{\r\n\t\t\t\t\t[column.id]: value\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\t// if (v) { // * * The if condition has commented for rerendering purpose\r\n\t\t\t\tconst fe: any = {}; // field error\r\n\t\t\t\tfor (const e in errors) {\r\n\t\t\t\t\tif (e != column.id) {\r\n\t\t\t\t\t\tfe[e] = errors[e];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsetValidationErrors(fe);\r\n\t\t\t// }\r\n\t\t} catch (err) {\r\n\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\tconst e: Record<string, string> = {};\r\n\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\te[error.path] = error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tconst em = { ...errors, ...e };\r\n\t\t\t\tsetValidationErrors(em);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t\r\n\r\n\t// ** Detect onChnage to perform the action on an input change.\r\n\tconst onChange = async (e: any, type: string,selectedData:any) => {\r\n\t\tconst data = selectedData\r\n\t\tlet value;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'file':\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'phone':\r\n\t\t\tcase 'time':\r\n\t\t\t\tvalue = e;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: e });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text':\r\n\t\t\tcase 'number':\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'checkbox':\r\n\t\t\t\tvalue = e.target.checked;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\r\n\t\tif (onChangeRowField) {\r\n\t\t\tconst v = await onChangeRowField(e, type, row, col, data);\r\n\t\t\tif (v) {\r\n\t\t\t\trow._valuesCache = { ...row._valuesCache, ...v };\r\n\t\t\t\tsetInputValue({ ...inputValue, ...v });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\trow._valuesCache = { ...row._valuesCache, [column.id]: value };\r\n\t\tsyncFieldValue(row.id, column.id, value);\r\n\t\t\r\n\t\tawait validate(value);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputValue({ ...inputValue, ...row._valuesCache });\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [row._valuesCache]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialSet) {\r\n\t\t\tconst editFields = Object.keys(row._valuesCache || {});\r\n\t\t\tconst dValues: any = {};\r\n\r\n\t\t\trow.getAllCells().forEach((cell) => {\r\n\t\t\t\tif (\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === undefined ||\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === true\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst { is_multiple, valueKey } =\r\n\t\t\t\t\t\tcell.column.columnDef?.editProperties || {};\r\n\t\t\t\t\tif (editFields.includes(cell.column.id)) {\r\n\t\t\t\t\t\tconst vl = _.get(row.original, valueKey);\r\n\t\t\t\t\t\tif (editVariant === 'select' && is_multiple) {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? Array.isArray(vl)\r\n\t\t\t\t\t\t\t\t\t? vl\r\n\t\t\t\t\t\t\t\t\t: [vl]\r\n\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t} else if (editVariant === 'date' || editVariant === 'date_time' || editVariant === 'time') {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? dayjs(vl).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(vl)\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t: dayjs(row.original[cell.column.id]).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(row.original[cell.column.id])\r\n\t\t\t\t\t\t\t\t\t: undefined;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = _.get(\r\n\t\t\t\t\t\t\t\trow.original,\r\n\t\t\t\t\t\t\t\tvalueKey,\r\n\t\t\t\t\t\t\t\trow.original[cell.column.id]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// setFieldsValues(dValues);\r\n\t\t\trow._valuesCache = dValues;\r\n\t\t\tsetInputValue(dValues);\r\n\t\t\tsetIsInitialSet(true);\r\n\t\t}\r\n\t}, [row, editVariant, isInitialSet]);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{(!editVariant || editVariant === 'number') && (\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t// onBlur={(e) => onBlur(e)}\r\n\t\t\t\t\t// onKeyDown={onKeyDown}\r\n\t\t\t\t\tonChange={(e) => onChange(e, editVariant)}\r\n\t\t\t\t\tvalue={inputValue?.[column.id]}\r\n\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\ttype={editVariant || 'text'}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'select' && (\r\n\t\t\t\t<Box display='flex' flexDirection='column' width='100%'>\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\t\tsearchPlaceholder={`Search ${col.header}`}\r\n\t\t\t\t\t\tonChange={(e, row) => onChange(e, 'select', row)}\r\n\t\t\t\t\t\tapiType={fieldProperties?.apiType}\r\n\t\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\t\toptions={col?.editSelectOptions}\r\n\t\t\t\t\t\tcustomeFilter={customFilter.current}\r\n\t\t\t\t\t\tfilterKey={fieldProperties?.filterKey}\r\n\t\t\t\t\t\tlabelKey={fieldProperties?.labelKey}\r\n\t\t\t\t\t\tvalueKey={fieldProperties?.bindingKey}\r\n\t\t\t\t\t\tattributes={fieldProperties.attributes}\r\n\t\t\t\t\t\tisInternal={fieldProperties?.isInternal || !fieldProperties?.apiType}\r\n\t\t\t\t\t\tmultiple={fieldProperties?.is_multiple}\r\n\t\t\t\t\t\tvalue={\r\n\t\t\t\t\t\t\tfieldProperties?.is_multiple\r\n\t\t\t\t\t\t\t\t? Array.isArray(inputValue?.[column.id])\r\n\t\t\t\t\t\t\t\t\t? inputValue?.[column.id]\r\n\t\t\t\t\t\t\t\t\t: []\r\n\t\t\t\t\t\t\t\t: inputValue?.[column.id]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgetSelectedData={(row)=>getSelectedData(fieldProperties?.field_name,row)}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date' && (\r\n\t\t\t\t<DatePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tminDate={fieldProperties?.min_date}\r\n\t\t\t\t\tmaxDate={fieldProperties?.max_date}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date_time' && (\r\n\t\t\t\t<DateTimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'time' && (\r\n\t\t\t\t<TimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tlabel=''\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'time')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || 'HH:mm A'}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tis24hrFormat={fieldProperties?.is24hrFormat}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{(editVariant === 'file' || editVariant === 'image') && (\r\n\t\t\t\t<Box display='flex' flexDirection='column'>\r\n\t\t\t\t\t<UploadMedia\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || 'table_file'}\r\n\t\t\t\t\t\tdataPosition={0}\r\n\t\t\t\t\t\tdataName='table_file'\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\ttype={editVariant}\r\n\t\t\t\t\t\tmax_size={10}\r\n\t\t\t\t\t\tonChange={(v) => onChange(v, 'file')}\r\n\t\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\t\tmultiple={Boolean(column?.is_multiple)}\r\n\t\t\t\t\t\tvalue={row._valuesCache[column.id]}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'phone' && (\r\n\t\t\t\t<PhoneInput\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefault_value={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'phone')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tisInlineEditing={true}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'checkbox' && (\r\n\t\t\t\t<Checkbox\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultChecked={Boolean(defaultValue)}\r\n\t\t\t\t\t// checked={Boolean(defaultValue)}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'checkbox')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default InlineEditFields;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport React, { cloneElement, useCallback, useEffect, useRef, useState } from 'react';\r\nimport {\r\n\tMRT_ColumnDef,\r\n\tMRT_ColumnSizingInfoState,\r\n\tMRT_ColumnSizingState,\r\n\tMRT_Header,\r\n\tMRT_Row,\r\n\tMRT_RowData,\r\n\tMRT_RowSelectionState,\r\n\tMRT_SortingState,\r\n\tMRT_TableInstance,\r\n\tMRT_TableState,\r\n\tMaterialReactTable,\r\n\tMaterialReactTableProps,\r\n\tuseMaterialReactTable,\r\n\t// Cell\r\n} from 'material-react-table';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport {\r\n\tBox,\r\n\tstyled,\r\n\tMenuItem,\r\n\tIconButton,\r\n\tListItemIcon,\r\n\tListItemText,\r\n\tSvgIconProps,\r\n\tDivider\r\n} from '@mui/material';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport Menu from '../menu/menu';\r\nimport Typography from '../typography/typography';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport images from '../../assets/images';\r\n// import DeleteIcon from \"@mui/icons-material/Delete\";\r\n// import UpdateIcon from \"@mui/icons-material/Update\";\r\n// import PlayIcon from \"@mui/icons-material/PlayArrow\";\r\n\r\nimport './material-editable-table.scss';\r\nimport {\r\n\tArrowUpDown,\r\n\tCheckBoxIcon,\r\n\tClose,\r\n\tRecgtangleIcon,\r\n\tTrash,\r\n\tSave\r\n} from '../icons';\r\n// import {\r\n// \tArrowDropDown /* , SaveOutlined */,\r\n// \tArrowDropUp\r\n// } from '@mui/icons-material';\r\nimport InlineEditFields from './components/inline-edit-fields';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport Button from '../button/button';\r\nimport Add from '@mui/icons-material/Add';\r\nimport dayjs from 'dayjs';\r\nimport * as yup from 'yup';\r\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { useNavigate } from 'react-router-dom';\r\n// import { PathnameAccounting } from 'accounting/src/pathname.accounting';\r\n// import { PathnameInventory } from 'inventory/src/pathname.inventory';\r\n// import { PathnameManufacturing } from 'manufacturing/src/pathname.manufacturing';\r\n// import { PathnamePurchase } from 'procurement/src/pathname.procurement';\r\n// import { PathnameCrm } from 'crm/src/pathname.crm';\r\n// import { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\n// import { PathnameRental } from '../../../../rental/src/pathname.rental';\r\n// import { PathnameDocument } from 'document/src/pathname.document';\r\nimport { PathnameDocument } from '../../constants/pathnames/pathname.document';\r\nimport { PathnameAccounting } from '../../constants/pathnames/pathname.accounting';\r\nimport { PathnameInventory } from '../../constants/pathnames/pathname.inventory';\r\nimport { PathnameManufacturing } from '../../constants/pathnames/pathname.manufacturing';\r\nimport { PathnamePurchase } from '../../constants/pathnames/pathname.procurement';\r\nimport { PathnameCrm } from '../../constants/pathnames/pathname.crm';\r\nimport { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\nimport { PathnameRental } from '../../constants/pathnames/pathname.rental';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\n\r\ntype ExtraEditVariants =\r\n\t| 'file'\r\n\t| 'image'\r\n\t| 'date'\r\n\t| 'number'\r\n\t| 'time'\r\n\t| 'date_time'\r\n\t| 'phone'\r\n\t| 'checkbox';\r\n\r\ntype DisableFunction = (row: any, virtualRow?: any) => boolean;\r\n\r\nexport type TypeBooleanLabels = { 1: string; 0: string; true: string; false: string }\r\n\r\nexport interface MaterialEditableTableColumnProps\r\n\textends Omit<MRT_ColumnDef<MRT_RowData>, 'editVariant'> {\r\n\tvisible?: boolean;\r\n\ttype?: string;\r\n\tshowDefaultCurrency?: boolean,\r\n\tvalueGet?: string;\r\n\tcustom_class?: string;\r\n\ttypeArrayAccessorKey?: string; //when type is an array of object\r\n\ttypeBooleanLabels?: TypeBooleanLabels; //when type is an boolean\r\n\teditVariant?: MRT_ColumnDef<MRT_RowData>['editVariant'] | ExtraEditVariants;\r\n\teditProperties?: {\r\n\t\tfield_name?: string;\r\n\t\tvalueKey?: string;\r\n\t\tplaceholder?: string;\r\n\t\tdateFormat?: string;\r\n\t\tvalidations?: any[];\r\n\t\tis_multiple?: boolean;\r\n\t\tis_multiline?: boolean;\r\n\t\tdisable?: boolean | DisableFunction;\r\n\t\tmin_date?: any;\r\n\t\tmax_date?: any;\r\n\t};\r\n\tredirectionPathWithId?: string;\r\n\tidField?: string;\r\n\tisOnClickEditable?: boolean; // Controls whether clicking this column triggers row edit mode (default: true)\r\n}\r\n\r\n\r\n\r\nexport interface MaterialEditableTableColumnHeaderProps {\r\n\tcolumn: MRT_ColumnDef<any, any>;\r\n\theader: MRT_Header<any>;\r\n\ttable: MRT_TableInstance<any>;\r\n}\r\n\r\ntype rowSelectionCallback = (row: MRT_Row) => boolean\r\n\r\ninterface MaterialEditableTablePropsType {\r\n\tenablePagination?: boolean;\r\n\trows: any;\r\n\ttotalPages: number;\r\n\tcolumns: any;\r\n\tpaginationModel: IPaginationModel;\r\n\tcolumnOrder?: string[];\r\n\tupdateData?: any;\r\n\thandleColumnOrdering?: (colOrder: any) => void;\r\n\tenableEditing?: boolean;\r\n\tenableColumnDragging?: boolean;\r\n\trowActionMenu?: any;\r\n\tdestructiveActionMenu?: any;\r\n\tgetRowId?: any;\r\n\tstates?: Partial<MRT_TableState<any>>;\r\n\tonSortingChange?: any;\r\n\tdisableDefaultActionColumn?: boolean;\r\n\tenableRowSelection?: boolean | rowSelectionCallback;\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tenableBottomToolbar?: boolean;\r\n\tSetSelectedRowId?: any;\r\n\tisResetRow?: boolean;\r\n\tonCreateRow?: (data: any) => Promise<unknown>;\r\n\tonEditRow?: (data: any) => Promise<unknown>;\r\n\tonDeleteRow?: (data: any) => Promise<unknown>;\r\n\teditDisplayMode?: MaterialReactTableProps<any>['editDisplayMode'];\r\n\tenableRowCreate?: boolean;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => void;\r\n\tonSelectRow?: (rows: any, prevSelected?: any) => any;\r\n\tenableColumnResizing?: boolean;\r\n\tselectedRowIds?: any[];\r\n\tonColumnVisibility?: (columns: MaterialTableColumnProps[]) => void\r\n\tgetSelectedData: any;\r\n\tenableAddCustomField?: boolean;\r\n\tdisabledDefaultActionColumnIcon?: boolean\r\n\tenableRowDragging?: boolean\r\n\thandleColumnResizing?: (sizes: MRT_ColumnSizingState) => void,\r\n\tcolumnSizes?: MRT_ColumnSizingState,\r\n\thideSaveButton?: boolean;\r\n\thideDeleteButton?: (row: any) => boolean;\r\n\tenableFirstRowEdit?: boolean;\r\n}\r\n\r\nconst TableWrapper = styled(Box)(({ theme: { palette } }) => ({\r\n\t'.MuiTableCell-root': {\r\n\t\tborder: '1px solid #efefef',\r\n\t\tborderBottom: 0,\r\n\t\tborderLeft: 0,\r\n\t\tpadding: '0 0.5rem',\r\n\t\tlineHeight: '19px',\r\n\t\tfontSize: '14px',\r\n\t\tminHeight: 32,\r\n\t\t// '&:first-child': {\r\n\t\t// \tborderLeft: '1px solid #efefef'\r\n\t\t// },\r\n\t\t// '&:last-child': {\r\n\t\t// \tborderBottom: '1px solid #efefef'\r\n\t\t// }\r\n\r\n\t},\r\n\t'.MuiTableCell-head': {\r\n\t\tbackgroundColor: palette.theme?.secondary[100]\r\n\t},\r\n\t'.MuiTableContainer-root': {\r\n\t\tmaxHeight: 'clamp(350px, 100vh - 200px, 9999px) !important',\r\n\t},\r\n\r\n\t'.MuiPaper-root': {\r\n\t\tboxShadow: 'none',\r\n\r\n\t},\r\n\t'.MuiPaginationItem-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: palette?.theme?.primary[700],\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiTableRow-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: `${palette?.theme?.primary[100]} !important`,\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiCheckbox-indeterminate': {\r\n\t\tcolor: `${palette?.theme?.primary[700]} !important`,\r\n\t\t\"& svg\": {\r\n\t\t\theight: `20px !important`,\r\n\t\t\twidth: `20px !important`,\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type RowValues = Record<string, unknown>;\r\n\r\nconst MaterialEditableTable = React.memo(({\r\n\tenablePagination = false,\r\n\trows,\r\n\tcolumns,\r\n\ttotalPages,\r\n\tpaginationModel,\r\n\tcolumnOrder,\r\n\tupdateData,\r\n\thandleColumnOrdering,\r\n\tenableEditing,\r\n\tenableColumnDragging,\r\n\tstates,\r\n\trowActionMenu,\r\n\tdestructiveActionMenu,\r\n\tdisableDefaultActionColumn,\r\n\tenableRowSelection,\r\n\tdefaultActionColumnItems = [],\r\n\tenableBottomToolbar,\r\n\tSetSelectedRowId,\r\n\tisResetRow,\r\n\tonCreateRow,\r\n\tonEditRow,\r\n\tonDeleteRow,\r\n\teditDisplayMode,\r\n\tenableRowCreate,\r\n\tonChangeRowField,\r\n\tonSelectRow,\r\n\tenableColumnResizing = true,\r\n\tselectedRowIds = [],\r\n\tonColumnVisibility,\r\n\tonSortingChange,\r\n\tgetSelectedData,\r\n\tdisabledDefaultActionColumnIcon = false,\r\n\tenableAddCustomField = true,\r\n\tenableRowDragging = false,\r\n\thandleColumnResizing = () => { },\r\n\tcolumnSizes = {},\r\n\thideSaveButton = false,\r\n\thideDeleteButton,\r\n\tenableFirstRowEdit = false,\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\t// getRowId,\r\n\t// onDelete,\r\n\t// onUpdate,\r\n\t...rest\r\n}: MaterialTablePropsType) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { formData = null, updatePageInfo, activePage: aPage } = usePages()\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\tconst { pageNo } = paginationModel;\r\n\tconst [row, setRow] = useState({});\r\n\tconst [tableColumns, setTableColumns] = useState(columns);\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [popUpShow, setPopupShow] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst visibleColumns = tableColumns.filter((column: any) => column.visible);\r\n\tconst hiddenColumns = tableColumns.filter((column: any) => !column.visible);\r\n\tconst [filteredOptions, setFilteredOptions] = useState(hiddenColumns);\r\n\tconst [selectedRow, setSelectedRow] = useState<number | null>(null);\r\n\tconst [validationErrors, setValidationErrors] = useState<any>({});\r\n\tconst [validationSchema, setValidationSchema] = useState<any>([]);\r\n\tconst [isCreatingRow, setIsCreatingRow] = useState<boolean>(false);\r\n\tconst [isEditingRow, setIsEditingRow] = useState<boolean>(false);\r\n\tconst [isDeletingRow, setIsDeletingRow] = useState<boolean>(false);\r\n\tconst [rowToDelete, setRowToDelete] = useState<any>(null);\r\n\tconst [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\r\n\tconst [isChecked, setIsChecked] = useState(false)\r\n\tconst [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\tconst [disableNextEdit, setDisableNextEdit] = useState(false);\r\n\tconst [columnSizing, setColumnSizing] = useState<MRT_ColumnSizingState>(activePage.column_sizes);\r\n\tconst [columnSizingInfo, setColumnSizingInfo] = useState<MRT_ColumnSizingInfoState>({\r\n\t\tcolumnSizingStart: [],\r\n\t\tdeltaOffset: null,\r\n\t\tdeltaPercentage: null,\r\n\t\tisResizingColumn: false,\r\n\t\tstartOffset: null,\r\n\t\tstartSize: null\r\n\t});\r\n\tconst [clickStartTime, setClickStartTime] = useState<number>(0);\r\n\r\n\tconst navigate = useNavigate();\r\n\tconst currentModule = location.pathname.split('/')[2]\r\n\r\n\tlet redirectionPath = ''\r\n\tswitch (currentModule) {\r\n\t\tcase 'accounting':\r\n\t\t\tredirectionPath = PathnameAccounting.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'inventory':\r\n\t\t\tredirectionPath = PathnameInventory.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'manufacturing':\r\n\r\n\t\t\tredirectionPath = PathnameManufacturing.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'procurement':\r\n\t\t\tredirectionPath = PathnamePurchase.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'crm':\r\n\t\t\tredirectionPath = PathnameCrm.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'user':\r\n\t\t\tredirectionPath = PathnameUsers.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'rental':\r\n\t\t\tredirectionPath = PathnameRental.CUSTOM_FORM\r\n\t\t\tbreak;\r\n\t\tcase 'drive':\r\n\t\t\tredirectionPath = PathnameDocument.ADD_CUSTOM_FIELDS\r\n\t\t\tbreak;\r\n\t}\r\n\tconst path = `/dashboard/${currentModule}${redirectionPath}`\r\n\tconst getValidationType = (column: any) => {\r\n\t\tswitch (column.editVariant) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn column?.editProperties?.is_multiple ? yup.array() : yup.string();\r\n\r\n\t\t\tcase 'number':\r\n\t\t\t\treturn yup.number().nullable().transform((value, originalValue) => (originalValue === \"\" ? null : value));\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\treturn yup\r\n\t\t\t\t\t.string()\r\n\t\t\t\t\t.matches(\r\n\t\t\t\t\t\t/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/,\r\n\t\t\t\t\t\t{ excludeEmptyString: true, message: 'Please enter valid URL.' }\r\n\t\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn yup.string()\r\n\t\t}\r\n\t};\r\n\r\n\tconst validationReducer = (\r\n\t\tschema: any,\r\n\t\tvalidation: any,\r\n\t\tcolumn: any\r\n\t) => {\r\n\t\tlet vld = schema;\r\n\r\n\t\tswitch (validation.type) {\r\n\t\t\t/* =====================================================\r\n\t\t\t COMMON (mixed)\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'required':\r\n\t\t\t\tif (validation.value) {\r\n\t\t\t\t\tvld = vld.required(validation.msg_en).typeError(validation.msg_en);\r\n\r\n\t\t\t\t\t// Prevent blank-only string\r\n\t\t\t\t\tif (!column?.editVariant || column?.editVariant === 'text') {\r\n\t\t\t\t\t\tvld = vld.test(\r\n\t\t\t\t\t\t\t'no-blank-spaces',\r\n\t\t\t\t\t\t\t'Blank space is not allowed',\r\n\t\t\t\t\t\t\t(value: any) =>\r\n\t\t\t\t\t\t\t\ttypeof value === 'string'\r\n\t\t\t\t\t\t\t\t\t? value.trim().length > 0\r\n\t\t\t\t\t\t\t\t\t: true\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (column?.editProperties?.is_multiple) {\r\n\t\t\t\t\tvld = vld.min(1, validation.msg_en);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'notRequired':\r\n\t\t\t\tvld = vld.notRequired();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'nullable':\r\n\t\t\t\tvld = vld.nullable(validation.value ?? true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'defined':\r\n\t\t\t\tvld = vld.defined(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'optional':\r\n\t\t\t\tvld = vld.optional();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'strict':\r\n\t\t\t\tvld = vld.strict(validation.value ?? true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'typeError':\r\n\t\t\t\tvld = vld.typeError(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'oneOf':\r\n\t\t\t\tvld = vld.oneOf(validation.values, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'notOneOf':\r\n\t\t\t\tvld = vld.notOneOf(validation.values, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'default':\r\n\t\t\t\tvld = vld.default(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'transform':\r\n\t\t\t\tvld = vld.transform(validation.fn);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'label':\r\n\t\t\t\tvld = vld.label(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'meta':\r\n\t\t\t\tvld = vld.meta(validation.value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t STRING\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'trim':\r\n\t\t\t\tvld = vld.trim();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'lowercase':\r\n\t\t\t\tvld = vld.lowercase();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'uppercase':\r\n\t\t\t\tvld = vld.uppercase();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'email':\r\n\t\t\t\tvld = vld.email(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\tvld = vld.url(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'uuid':\r\n\t\t\t\tvld = vld.uuid(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'length':\r\n\t\t\t\tvld = vld.length(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'min':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'max':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'matches':\r\n\t\t\t\tvld = vld.matches(validation.regex, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'startsWith':\r\n\t\t\t\tvld = vld.matches(\r\n\t\t\t\t\tnew RegExp(`^${validation.value}`),\r\n\t\t\t\t\tvalidation.msg_en\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'endsWith':\r\n\t\t\t\tvld = vld.matches(\r\n\t\t\t\t\tnew RegExp(`${validation.value}$`),\r\n\t\t\t\t\tvalidation.msg_en\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t NUMBER\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'lessThan':\r\n\t\t\t\tvld = vld.lessThan(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'moreThan':\r\n\t\t\t\tvld = vld.moreThan(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'positive':\r\n\t\t\t\tvld = vld.positive(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'negative':\r\n\t\t\t\tvld = vld.negative(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'integer':\r\n\t\t\t\tvld = vld.integer(validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'round':\r\n\t\t\t\tvld = vld.round(validation.method || 'round');\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'truncate':\r\n\t\t\t\tvld = vld.truncate();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t ARRAY\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'minItems':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'maxItems':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ensure':\r\n\t\t\t\tvld = vld.ensure();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'compact':\r\n\t\t\t\tvld = vld.compact(validation.rejector);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'of':\r\n\t\t\t\tvld = vld.of(validation.schema);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t DATE\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'minDate':\r\n\t\t\t\tvld = vld.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'maxDate':\r\n\t\t\t\tvld = vld.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t OBJECT\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'shape':\r\n\t\t\t\tvld = vld.shape(validation.fields);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'noUnknown':\r\n\t\t\t\tvld = vld.noUnknown(validation.value ?? true, validation.msg_en);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t CUSTOM\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'test':\r\n\t\t\t\tvld = vld.test(\r\n\t\t\t\t\tvalidation.name || 'custom-test',\r\n\t\t\t\t\tvalidation.msg_en,\r\n\t\t\t\t\tvalidation.testFn\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t/* =====================================================\r\n\t\t\t CONDITIONAL\r\n\t\t\t===================================================== */\r\n\r\n\t\t\tcase 'when':\r\n\t\t\t\treturn vld.when(validation.relation, {\r\n\t\t\t\t\tis: (val: any) =>\r\n\t\t\t\t\t\ttypeof validation.is === 'function'\r\n\t\t\t\t\t\t\t? validation.is(val)\r\n\t\t\t\t\t\t\t: Array.isArray(validation.values)\r\n\t\t\t\t\t\t\t\t? validation.values.includes(val)\r\n\t\t\t\t\t\t\t\t: val === validation.values,\r\n\r\n\t\t\t\t\tthen: (s: any) =>\r\n\t\t\t\t\t\tvalidation?.thenValidations?.reduce(\r\n\t\t\t\t\t\t\t(acc: any, v: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(acc, v, column),\r\n\t\t\t\t\t\t\ts\r\n\t\t\t\t\t\t) || s,\r\n\r\n\t\t\t\t\totherwise: (s: any) =>\r\n\t\t\t\t\t\tvalidation?.otherWiseValidations?.reduce(\r\n\t\t\t\t\t\t\t(acc: any, v: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(acc, v, column),\r\n\t\t\t\t\t\t\ts\r\n\t\t\t\t\t\t) || s,\r\n\t\t\t\t});\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn vld;\r\n\t};\r\n\r\n\r\n\r\n\tconst generateValidationSchema = (columns: any[]) => {\r\n\t\treturn columns.reduce((acc: any, clm: any) => {\r\n\t\t\tconst validations = clm?.editProperties?.validations;\r\n\r\n\t\t\tif (!validations?.length) return acc;\r\n\r\n\t\t\tconst baseSchema = getValidationType(clm);\r\n\r\n\t\t\tacc[clm.accessorKey] = validations.reduce(\r\n\t\t\t\t(schema: any, validation: any) =>\r\n\t\t\t\t\tvalidationReducer(schema, validation, clm),\r\n\t\t\t\tbaseSchema\r\n\t\t\t);\r\n\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t};\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tsetTableColumns(columns);\r\n\r\n\t\tconst schema: any = generateValidationSchema(columns);\r\n\t\tsetValidationSchema(yup.object().shape(schema));\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!columnSizingInfo?.isResizingColumn) {\r\n\t\t\tupdatePageInfo({ column_sizes: { ...activePage.column_sizes, ...columnSizing } })\r\n\t\t\thandleColumnResizing?.(columnSizing)\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columnSizingInfo?.isResizingColumn, columnSizing])\r\n\r\n\tconst handleHeaderClick = (event: any) => {\r\n\t\tsetAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleHeaderClose = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleVisibleColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? false : col.visible\r\n\t\t}));\r\n\t\tsetTableColumns(updatedColumns);\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetFilteredOptions([...filteredOptions, column]);\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAddButtonClick = () => {\r\n\t\tsetPopupShow(true);\r\n\t};\r\n\r\n\tconst handleBackButtonClick = () => {\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleAddColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? true : col.visible\r\n\t\t}));\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetTableColumns(updatedColumns);\r\n\r\n\t\tconst updatedFilteredOptions = filteredOptions.filter(\r\n\t\t\t(option: any) => option.accessorKey !== column.accessorKey\r\n\t\t);\r\n\t\tsetFilteredOptions(updatedFilteredOptions);\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleSearchEvent = (searchQuery: string) => {\r\n\t\tconst filteredColumns = hiddenColumns.filter((option: any) =>\r\n\t\t\toption.header.toLowerCase().includes(searchQuery.toLowerCase())\r\n\t\t);\r\n\t\tsetFilteredOptions(filteredColumns);\r\n\t};\r\n\r\n\tconst handleCustomAddColumn = () => {\r\n\t\tnavigate(path, { state: formData })\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleRowClick = (rowId: number) => {\r\n\t\tsetSelectedRow(rowId); // Update selected row ID when a row is clicked\r\n\t};\r\n\r\n\t// const handleDeleteClick = (event: any, data: any) => {\r\n\t// onDelete?.(data.id);\r\n\t// };\r\n\t// const handleUpdateClick = (event: any, data: any) => {\r\n\t// onUpdate?.(data.id);\r\n\t// };\r\n\r\n\tconst handleActionsClick = (event: any, data: any) => {\r\n\t\tsetRow(data);\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst formtValues = useCallback((values: any, cells: any[]) => {\r\n\t\tconst v: any = {};\r\n\t\tif (values?.['mrt-row-actions']) {\r\n\t\t\tdelete values['mrt-row-actions']\r\n\t\t}\r\n\t\tObject.keys(values).forEach((vl) => {\r\n\t\t\tconst val = values[vl];\r\n\t\t\tconst cell = cells.find((c) => c.accessorKey == vl);\r\n\r\n\t\t\tif (val) {\r\n\t\t\t\tif (val instanceof File) {\r\n\t\t\t\t\tv[vl] = val.name;\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'date') {\r\n\t\t\t\t\tv[vl] = dayjs(val).format(cell?.dateFormat || 'DD-MM-YYYY');\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'select' && typeof val === 'object' && val !== null) {\r\n\t\t\t\t\t// For select fields, extract the display name from the object\r\n\t\t\t\t\t// Try multiple possible display properties in order of preference\r\n\t\t\t\t\tv[vl] = val.name || val.label || val.display_name || val.title || val.value || val.id || val;\r\n\t\t\t\t} else if (cell && cell?.editVariant == 'select' && typeof val === 'string') {\r\n\t\t\t\t\t// For select fields that are already strings, keep them as is\r\n\t\t\t\t\tv[vl] = val;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tv[vl] = val;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tv[vl] = val;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn v;\r\n\t}, []); // No dependencies needed as this function doesn't rely on external values\r\n\r\n\tconst handleRowDelete = async () => {\r\n\t\tsetIsDeletingRow(true);\r\n\t\tif (rowToDelete) {\r\n\t\t\tawait onDeleteRow?.(rowToDelete);\r\n\t\t\tsetRowToDelete(null);\r\n\t\t}\r\n\t\tsetIsDeletingRow(false);\r\n\t};\r\n\r\n\tconst checkRequired = useCallback((editProperties: any) => {\r\n\t\treturn editProperties?.validations?.some((validation: any) => validation.type === 'required')\r\n\t}, [])\r\n\tuseEffect(() => {\r\n\t\tconst selectedRows = {};\r\n\t\t// Build the selectedRows object\r\n\t\tif (!isChecked && selectedRowIds.length) {\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif (selectedRowIds.includes(row.id)) {\r\n\t\t\t\t\tselectedRows[row.id] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tsetRowSelection(selectedRows);\r\n\t\t\tsetIsChecked(true)\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rows, selectedRowIds]); // Dependency only on rows and selectedRowIds\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSortingChange instanceof Function) {\r\n\t\t\tconst sortingArray = Array.isArray(sorting) ? sorting : [];\r\n\t\t\tonSortingChange(sortingArray[0] || null)\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [sorting])\r\n\r\n\r\n\tconst resetRowSelection = () => {\r\n\t\tsetRowSelection({});\r\n\t\tsetDisableNextEdit(false)\r\n\t}\r\n\tconst getTextWidth = (text: string) => {\r\n\t\tconst canvas = document.createElement(\"canvas\");\r\n\t\tconst ctx = canvas.getContext(\"2d\");\r\n\t\tif (!ctx) return 50;\r\n\t\treturn ctx.measureText(text).width + 5; // padding\r\n\t}\r\n\r\n\t// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\n\ttype RowMode = 'edit' | 'create';\r\n\r\n\tinterface SaveRowParams {\r\n\t\trow: MRT_Row<TData>;\r\n\t\tvalues: Record<string, unknown>;\r\n\t\ttable: MRT_TableInstance<TData>;\r\n\t}\r\n\r\n\t// ─── Shared validation error extractor ───────────────────────────────────────\r\n\r\n\tconst extractValidationErrors = (err: yup.ValidationError): Record<string, string> =>\r\n\t\terr.inner.reduce<Record<string, string>>((acc, { path, message }) => {\r\n\t\t\tif (path) acc[path] = message;\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\r\n\t// ─── Unified save handler ─────────────────────────────────────────────────────\r\n\r\n\tconst handleSaveRow = useCallback(\r\n\t\tasync ({ row, values, table }: SaveRowParams, mode: RowMode): Promise<void> => {\r\n\t\t\tconst isEditMode = mode === 'edit';\r\n\t\t\tconst setLoadingState = isEditMode ? setIsEditingRow : setIsCreatingRow;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(values, { abortEarly: false });\r\n\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetLoadingState(true);\r\n\t\t\t\tsetDisableNextEdit(false);\r\n\r\n\t\t\t\tconst cells = row.getAllCells().map((c) => c.column.columnDef);\r\n\t\t\t\trow._valuesCache = formtValues(values, cells);\r\n\r\n\t\t\t\tconst data = { row, values, table };\r\n\r\n\t\t\t\tif (isEditMode) {\r\n\t\t\t\t\tawait onEditRow?.(data, 'edit');\r\n\t\t\t\t\ttable.setEditingRow(null);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tawait onCreateRow?.(data);\r\n\t\t\t\t\ttable.setCreatingRow(null);\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tsetValidationErrors(extractValidationErrors(err));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tenqueueSnackbar(\r\n\t\t\t\t\t\terr instanceof Error ? err.message : 'Something went wrong',\r\n\t\t\t\t\t\t{ variant: 'error' },\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tsetLoadingState(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[validationSchema, onEditRow, onCreateRow, formtValues],\r\n\t);\r\n\r\n\tconst validate = useCallback(async (values: any) => {\r\n\t\ttry {\r\n\t\t\tawait validationSchema.validate(values, { abortEarly: false });\r\n\t\t\tsetValidationErrors({});\r\n\t\t\treturn true;\r\n\t\t} catch (err) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t}, [validationSchema]);\r\n\r\n\tconst valuesRef = useRef<Record<string, RowValues>>({});\r\n\r\n\t// ─── Public API: sync one field ────────────────────────────────────────────\r\n\tconst syncFieldValue = useCallback(\r\n\t\t(rowId: string, columnId: string, value: unknown) => {\r\n\t\t\tvaluesRef.current[rowId] = {\r\n\t\t\t\t...(valuesRef.current[rowId] ?? {}),\r\n\t\t\t\t[columnId]: value,\r\n\t\t\t};\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\tconst clearRow = useCallback((rowId: string) => {\r\n\t\tdelete valuesRef.current[rowId];\r\n\t}, []);\r\n\r\n\t// ─── Merge our cache on top of MRT's cache then the original row ───────────\r\n\tconst getRowValues = useCallback(\r\n\t\t(row: MRT_Row<TData>): RowValues => ({\r\n\t\t\t// 1. original row data — baseline\r\n\t\t\t...(row.original as RowValues),\r\n\t\t\t// 2. MRT's internal cache — contains what MRT-controlled fields wrote\r\n\t\t\t...(row._valuesCache as RowValues | undefined),\r\n\t\t\t// 3. Our own cache — authoritative for custom fields\r\n\t\t\t...(valuesRef.current[row.id] ?? {}),\r\n\t\t}),\r\n\t\t[],\r\n\t);\r\n\r\n\t// ─── Save helpers (kept stable across renders) ─────────────────────────────\r\n\tconst saveEditingRow = useCallback(\r\n\t\tasync (table: MRT_TableInstance<TData>) => {\r\n\t\t\tconst editingRow = table.getState().editingRow;\r\n\t\t\tconst creatingRow = table.getState().creatingRow;\r\n\t\t\tif (!editingRow) return;\r\n\t\t\tconst values = getRowValues(editingRow);\r\n\t\t\tconst isValid = await validate(values);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\t// Let handleSaveRow set the validation errors for display\r\n\t\t\t\tawait handleSaveRow({ row: editingRow, values, table }, 'edit');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tawait handleSaveRow({ row: editingRow, values, table }, 'edit');\r\n\t\t\tclearRow(editingRow.id);\r\n\t\t\tif (!creatingRow && enableRowCreate) {\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tsetTimeout(() => table.setCreatingRow(true), 200);\r\n\t\t\t} else {\r\n\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[getRowValues, handleSaveRow, clearRow, validate, enableRowCreate],\r\n\t);\r\n\r\n\tconst saveCreatingRow = useCallback(\r\n\t\tasync (table: MRT_TableInstance<TData>) => {\r\n\t\t\tconst creatingRow = table.getState().creatingRow;\r\n\t\t\tif (!creatingRow) return;\r\n\t\t\tconst values = getRowValues(creatingRow);\r\n\t\t\tif (values?.['mrt-row-actions']) {\r\n\t\t\t\tdelete values['mrt-row-actions']\r\n\t\t\t}\r\n\t\t\tconst isValid = await validate(values);\r\n\t\t\tawait handleSaveRow({ row: creatingRow, values, table }, 'create');\r\n\t\t\tif (!isValid) return;\r\n\t\t\tif (isValid) {\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\tsetTimeout(() => table.setCreatingRow(true), 200);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[getRowValues, clearRow, validate],\r\n\t);\r\n\r\n\tconst table = useMaterialReactTable({\r\n\t\t// options:{\r\n\t\t// \ttableLayout: \"auto\", // 👈 important\r\n\t\t// \tpadding: \"dense\",\r\n\t\t// },\r\n\t\t// columns: visibleColumns,\r\n\t\tdefaultColumn: {\r\n\t\t\tminSize: 0, // 👈 remove default min width\r\n\t\t\tsize: undefined, // 👈 optional, default size\r\n\t\t},\r\n\t\tcolumns: [\r\n\t\t\t...visibleColumns.map((c: any) => {\r\n\t\t\t\tconst headerWidth = getTextWidth(c.header || '');\r\n\t\t\t\tconst maxCellWidth = Math.max(\r\n\t\t\t\t\t...rows.map(row => getTextWidth(String(row[c.accessorKey] ?? '')))\r\n\t\t\t\t);\r\n\t\t\t\tconst finalWidth = Math.max(headerWidth, maxCellWidth);\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...c,\r\n\t\t\t\t\t...(editDisplayMode === 'row'\r\n\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\tEdit: ({ cell, row, table, column }) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<InlineEditFields\r\n\t\t\t\t\t\t\t\t\t\tcell={cell}\r\n\t\t\t\t\t\t\t\t\t\tcolumn={column}\r\n\t\t\t\t\t\t\t\t\t\tcol={c}\r\n\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\ttable={table}\r\n\t\t\t\t\t\t\t\t\t\tcallback={(s) => console.log('Save', s)}\r\n\t\t\t\t\t\t\t\t\t\terrors={validationErrors}\r\n\t\t\t\t\t\t\t\t\t\tvalidationSchema={validationSchema}\r\n\t\t\t\t\t\t\t\t\t\tsetValidationErrors={setValidationErrors}\r\n\t\t\t\t\t\t\t\t\t\tonChangeRowField={onChangeRowField}\r\n\t\t\t\t\t\t\t\t\t\tgetSelectedData={(name, row) => getSelectedData?.(name, row)}\r\n\t\t\t\t\t\t\t\t\t\tsyncFieldValue={syncFieldValue}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t: {}),\r\n\t\t\t\t\tHeader: (\r\n\t\t\t\t\t\t<Box display='flex' alignItems='center'>\r\n\t\t\t\t\t\t\t{c.header}\r\n\t\t\t\t\t\t\t{c?.required || checkRequired(c?.editProperties) && (\r\n\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t*\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: c.id !== 'actions',\r\n\t\t\t\t\t// cellStyle: { ...c.cellStyle, width: finalWidth },\r\n\t\t\t\t\t// headerStyle: { ...c.headerStyle, width: finalWidth },\r\n\t\t\t\t\t// size: finalWidth\r\n\t\t\t\t\tsize: undefined,\r\n\t\t\t\t\t// minSize: 40,\r\n\t\t\t\t\tmaxSize: 800,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\t...(!disableDefaultActionColumn\r\n\t\t\t\t? [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: 'actions',\r\n\t\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\t\tsize: defaultActionColumnItems?.length > 1 ? 80 : 50,\r\n\t\t\t\t\t\theader: (\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" sx={{ p: 0.5, '&:hover': { backgroundColor: 'transparent' } }} onClick={handleHeaderClick}>\r\n\t\t\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\t\tvisible: true,\r\n\t\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column',\r\n\t\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t\tdefaultActionColumnItems?.length ? (\r\n\t\t\t\t\t\t\t\tdefaultActionColumnItems.map((item) => {\r\n\t\t\t\t\t\t\t\t\tconst updatedProps = {\r\n\t\t\t\t\t\t\t\t\t\t...item.props,\r\n\t\t\t\t\t\t\t\t\t\tonClick: () => item.props.onClick(props)\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\treturn cloneElement(item, updatedProps);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t) : !disabledDefaultActionColumnIcon && (\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleActionsClick(e, props.row.original)} disabled={!rowActionMenu?.length && !destructiveActionMenu?.length}>\r\n\t\t\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t\t: [])\r\n\t\t],\r\n\t\tdata: rows,\r\n\t\tmuiTablePaperProps: {\r\n\t\t\tsx: {\r\n\t\t\t\ttableLayout: 'auto', // lets columns shrink to fit content\r\n\t\t\t},\r\n\t\t},\r\n\t\tcolumnResizeMode: 'onChange',\r\n\t\tonEditingRowSave: async (data) => {\r\n\t\t\tawait handleSaveRow(data, 'edit');\r\n\t\t},\r\n\t\tonCreatingRowSave: async (data) => {\r\n\t\t\tawait handleSaveRow(data, 'create');\r\n\t\t},\r\n\t\tonCreatingRowCancel: () => resetRowSelection(),\r\n\t\tonEditingRowCancel: () => {\r\n\t\t\tsetDisableNextEdit(false);\r\n\t\t},\r\n\t\tonSortingChange: states?.sorting ? onSortingChange : setSorting,\r\n\r\n\t\tdisplayColumnDefOptions: {\r\n\t\t\t'mrt-row-actions': {\r\n\t\t\t\t// size: onDeleteRow ? 80 : 50,\r\n\r\n\t\t\t\tHeader: (\r\n\t\t\t\t\t<IconButton onClick={handleHeaderClick} size='small'>\r\n\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t),\r\n\t\t\t\tmuiTableBodyCellProps: ({ row, table }) => {\r\n\t\t\t\t\tconst isCreatingRow = table.getState().creatingRow?.id === row.id;\r\n\t\t\t\t\tconst isEditingRow = table.getState().editingRow?.id === row.id;\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\t\t\t\tgap: 0\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tbackgroundColor: '#fff',\r\n\t\t\t\t\t\t\twhiteSpace: 'pre-wrap',\r\n\t\t\t\t\t\t\t// Hide save button only when editing existing row (not in create mode or non-editable mode)\r\n\t\t\t\t\t\t\t...((hideSaveButton && (isEditingRow || isCreatingRow))\r\n\t\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\t'& .MuiBox-root > .MuiIconButton-root:first-of-type': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t// Also hide any save icon buttons by aria-label or title\r\n\t\t\t\t\t\t\t\t\t'& button[aria-label*=\"Save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t'& button[title*=\"Save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t// Hide save icon by class or data attributes\r\n\t\t\t\t\t\t\t\t\t'& .MuiIconButton-root[class*=\"save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t'& .MuiIconButton-root[data-testid*=\"save\"]': {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: 'none !important'\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t: {})\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'mrt-row-expand': {\r\n\t\t\t\tsize: 70, // Set the size of the expand-collapse arrow column here\r\n\t\t\t},\r\n\t\t\t'mrt-row-select': {\r\n\t\t\t\tsize: 50, // Set the width of the checkbox column here\r\n\t\t\t},\r\n\t\t},\r\n\t\trenderRowActions: ({ row, table }) => (\r\n\t\t\t<>\r\n\t\t\t\t{rest?.enableExpanding ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{row?.parentId && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t\t\t{onDeleteRow && !hideDeleteButton?.(row.original) && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} size='small' className='delete-row'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t{onDeleteRow && !hideDeleteButton?.(row.original) && (\r\n\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} className='delete-row'>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t),\r\n\r\n\t\t...(Boolean(enableRowCreate) && {\r\n\t\t\trenderBottomToolbarCustomActions: ({ table }) => (\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\tclassName='add-row-btn'\r\n\t\t\t\t\tdisabled={disableNextEdit}\r\n\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\ttable.setCreatingRow(true); //simplest way to open the create row modal with no default values\r\n\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t</Button>\r\n\t\t\t)\r\n\t\t}),\r\n\t\tonRowSelectionChange: setRowSelection,\r\n\t\tenableColumnOrdering: true,\r\n\t\tenableRowSelection: enableRowSelection ?? true,\r\n\t\tenableEditing: (row) => enableEditing instanceof Function ? enableEditing(row) : enableEditing ?? true,\r\n\t\teditDisplayMode: editDisplayMode ?? 'row',\r\n\t\tcreateDisplayMode: 'row',\r\n\t\tpositionCreatingRow: 'bottom',\r\n\t\tenableColumnResizing: enableColumnResizing,\r\n\t\tenableRowDragging: enableRowDragging,\r\n\t\tenableTopToolbar: false,\r\n\t\tenableColumnActions: false,\r\n\t\tenableSorting: true,\r\n\t\tenableGrouping: true,\r\n\t\tenableBottomToolbar: enableBottomToolbar ?? false,\r\n\t\tenableColumnDragging: enableColumnDragging ?? true,\r\n\t\tenableStickyHeader: true,\r\n\t\tenableSortingRemoval: false,\r\n\t\t// column ordering\r\n\t\tstate: {\r\n\t\t\t// columnOrder: (!columnOrder || columnOrder.length <= 1) \r\n\t\t\t// ? [...internalColumnOrder] \r\n\t\t\t// : [...columnOrder],\r\n\t\t\tcolumnOrder: columnOrder,\r\n\t\t\tcolumnPinning: { left: ['actions', 'mrt-row-actions'] },\r\n\t\t\tisSaving: isCreatingRow || isEditingRow,\r\n\t\t\tshowProgressBars: false,\r\n\t\t\trowSelection,\r\n\t\t\t...states,\r\n\t\t\tsorting: Array.isArray(states?.sorting) ? states?.sorting :\r\n\t\t\t\tArray.isArray(sorting) ? sorting : [],\r\n\t\t\tcolumnSizing\r\n\r\n\t\t},\r\n\t\tgetRowId: (row) => row?.id,\r\n\t\t// table.getState().editingRow\r\n\t\tmuiTableBodyRowProps: ({ row, table }) => {\r\n\t\t\tconst editingRowId =\r\n\t\t\t\ttable.getState()?.editingRow?.id ||\r\n\t\t\t\ttable.getState()?.creatingRow?.id ||\r\n\t\t\t\tnull;\r\n\t\t\tconst creatingRowId = table.getState()?.creatingRow?.id || null;\r\n\t\t\tconst isErrorRow = Boolean(row?.original?.has_error)\r\n\t\t\tconst isCurrentlyEditing = editingRowId === row.id;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tonClick: () => {\r\n\t\t\t\t\tsetSelectedRow(row.id);\r\n\t\t\t\t\t// Edit triggering is now handled at cell level in muiTableBodyCellProps\r\n\t\t\t\t\t// to support isOnClickEditable column prop\r\n\t\t\t\t},\r\n\t\t\t\tsx: {\r\n\t\t\t\t\tcursor: 'pointer',\r\n\t\t\t\t\t// backgroundColor: !editingRowId\r\n\t\t\t\t\t// \t? (selectedRow === row.id\r\n\t\t\t\t\t// \t\t? '#e8e8e8'\r\n\t\t\t\t\t// \t\t: (isErrorRow ? 'theme.error.100' : 'inherit'))\r\n\t\t\t\t\t// \t: 'inherit',\r\n\t\t\t\t\tbackgroundColor: !editingRowId\r\n\t\t\t\t\t\t? (isErrorRow ? 'theme.error.100' : 'inherit')\r\n\t\t\t\t\t\t: 'inherit',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: editingRowId\r\n\t\t\t\t\t\t\t? (editingRowId === row.id ? 'transparent' : 'inherit')\r\n\t\t\t\t\t\t\t: (isErrorRow ? 'theme.error.200' : '#e8e8e8')\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:hover td:after': {\r\n\t\t\t\t\t\tbackgroundColor: 'transparent' // Removes the grey background applied via :after\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tonColumnOrderChange: (colOrder: any) => {\r\n\t\t\tif (handleColumnOrdering) handleColumnOrdering(colOrder);\r\n\t\t},\r\n\t\tonColumnSizingChange: setColumnSizing,\r\n\t\tonColumnSizingInfoChange: setColumnSizingInfo,\r\n\r\n\t\trenderEmptyRowsFallback: () => (\r\n\t\t\t<Box className='no-data'>\r\n\t\t\t\t<img src={images.common.tableNoData} />\r\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t{/* sx={{ textAlign: 'center', pb: 4.75, pt: 4.75 }}> */}\r\n\t\t\t\t\t{t('common.noData')}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t),\r\n\r\n\t\t// pagination\r\n\t\tenablePagination: enablePagination,\r\n\t\tpaginationDisplayMode: 'pages',\r\n\t\tmuiPaginationProps: {\r\n\t\t\tshape: 'rounded',\r\n\t\t\tpage: pageNo, // current page number\r\n\t\t\tcount: totalPages, // total pages\r\n\t\t\tshowRowsPerPage: false, // Hide rows per page options\r\n\t\t\tboundaryCount: 3\r\n\t\t},\r\n\r\n\t\tmuiEditTextFieldProps: ({ row, column }) => ({\r\n\t\t\tInputProps: {\r\n\t\t\t\tdisableUnderline: true\r\n\t\t\t},\r\n\t\t\tonBlur: (e) => {\r\n\t\t\t\tupdateData(e.target.value, column, row.id);\r\n\t\t\t},\r\n\t\t\t// onChange: (e) => {\r\n\t\t\t// \tupdateData(e.target.value, column, row.id);\r\n\t\t\t// },\r\n\t\t\tvariant: 'outlined',\r\n\t\t\tsx: ({ palette }) => ({\r\n\t\t\t\t'& .MuiOutlinedInput-root': {\r\n\t\t\t\t\t'& fieldset': {\r\n\t\t\t\t\t\tborderColor: `${palette.theme?.primary[700]} !important`\r\n\t\t\t\t\t\t// backgroundColor: palette.theme?.primary[700]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}),\r\n\r\n\t\t/* Table loader style */\r\n\t\tmuiCircularProgressProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: '#289B64'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table header cell default styles\r\n\t\tmuiTableHeadCellProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.28px',\r\n\t\t\t\tfontWeight: '500',\r\n\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t'& .Mui-TableHeadCell-Content': {\r\n\t\t\t\t\theight: '100%'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-Content-Labels': {\r\n\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t},\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-ResizeHandle-Wrapper': {\r\n\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\tright: '-5px',\r\n\t\t\t\t\topacity: 0\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table body cell default styles\r\n\t\tmuiTableBodyProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tzIndex: 500\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableHeadProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tzIndex: 600\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableBodyCellProps: ({ cell, column, table, row }) => ({\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.26px',\r\n\t\t\t\tfontWeight: '400',\r\n\t\t\t\tfontSize: '0.8125rem',\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'&:hover': {\r\n\t\t\t\t\tbackgroundColor: 'transparent' // Removes hover effect globally\r\n\t\t\t\t},\r\n\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t},\r\n\t\t\tonClick: (e: React.MouseEvent) => {\r\n\t\t\t\tconst target = e.target as HTMLElement;\r\n\r\n\t\t\t\t// Check if click is inside table\r\n\t\t\t\t// const isInsideTable = target.closest('.MuiTableContainer-root, .MuiPaper-root, .MRT_Table');\r\n\t\t\t\tconst tableCell = target.closest('.MuiTableCell-body');\r\n\r\n\t\t\t\tconst isInsideTable = tableCell && !tableCell.querySelector('.delete-row');\r\n\r\n\t\t\t\tif (!isInsideTable) return; // Ignore clicks outside table or on delete button\r\n\r\n\t\t\t\tconst columnDef = column.columnDef as MaterialEditableTableColumnProps;\r\n\t\t\t\tconst isOnClickEditable = columnDef.isOnClickEditable !== false; // Default to true\r\n\r\n\t\t\t\tif (!isOnClickEditable) {\r\n\t\t\t\t\treturn; // Don't trigger edit mode for this column\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst editingRowId = table.getState()?.editingRow?.id || table.getState()?.creatingRow?.id || null;\r\n\t\t\t\tconst isCurrentlyEditing = editingRowId === row.id;\r\n\r\n\t\t\t\t// If another row is already in edit/create mode, block editing this row\r\n\t\t\t\tif (editingRowId && editingRowId !== row.id) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set the row as editable when clicked if not already editing and no other row is being edited\r\n\t\t\t\tif (!disableNextEdit && !isCurrentlyEditing && !editingRowId) {\r\n\t\t\t\t\ttable.setEditingRow(row);\r\n\t\t\t\t\tsetDisableNextEdit(true);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonKeyUp: (e: React.KeyboardEvent) => {\r\n\t\t\t\tconst creatingRowId =\r\n\t\t\t\t\ttable.getState().creatingRow?.id ?? null;\r\n\r\n\t\t\t\t// ── Escape ──────────────────────────────────────────────────────────\r\n\t\t\t\tif (e.key === 'Escape') {\r\n\t\t\t\t\tif (creatingRowId === row.id) {\r\n\t\t\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\t\t\ttable.setCreatingRow(null);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst editingRow = table.getState().editingRow;\r\n\t\t\t\t\t\tif (editingRow) {\r\n\t\t\t\t\t\t\thandleSaveRow({ row: editingRow, values: editingRow.original, table }, 'edit');\r\n\t\t\t\t\t\t\tclearRow(editingRow.id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\tsetValidationErrors({});\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// ── Enter ───────────────────────────────────────────────────────────\r\n\t\t\t\tif (e.key === 'Enter') {\r\n\t\t\t\t\t// Minimal timeout: let the last field onChange flush its state.\r\n\t\t\t\t\t// Our valuesRef is already written, so 0ms is safe.\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tconst currentCreatingRow = table.getState().creatingRow;\r\n\t\t\t\t\t\tconst currentEditingRow = table.getState().editingRow;\r\n\r\n\t\t\t\t\t\tif (currentCreatingRow) {\r\n\t\t\t\t\t\t\tsaveCreatingRow(table);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (currentEditingRow) {\r\n\t\t\t\t\t\t\tsaveEditingRow(table);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 0); // 0 ms is enough — values are already in valuesRef\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}),\r\n\r\n\t\t// Checkbox styling\r\n\t\tmuiSelectCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.200'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiSelectAllCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.600'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiBottomToolbarProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\tpaddingLeft: 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlayoutMode: 'grid',\r\n\t\ticons: {\r\n\t\t\tDragHandleIcon: () => <RecgtangleIcon fontSize='medium' />,\r\n\t\t\tSortIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tArrowDownwardIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tArrowUpwardIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tExpandMoreIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tExpandLessIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tSyncAltIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tCancelIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Close fontSize='small' {...props} color='theme.secondary.1000' />\r\n\t\t\t)\r\n\t\t},\r\n\r\n\t\t...rest\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tif (enableRowSelection) {\r\n\t\t\tif (table?.getSelectedRowModel()?.rows) {\r\n\t\t\t\tSetSelectedRowId?.(table?.getSelectedRowModel()?.rows);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableRowSelection]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectRow) {\r\n\t\t\tif (rest?.enableExpanding) {\r\n\t\t\t\tconst selectedRowModels: any[] = [];\r\n\t\t\t\tconst selection = table.getState().rowSelection; // e.g., { 0.0: true }\r\n\t\t\t\tconst traverseRows = (rows, parentKey = '') => {\r\n\t\t\t\t\trows.forEach((row: any, index: number) => {\r\n\t\t\t\t\t\tconst rowKey = parentKey ? `${parentKey}.${index}` : `${row.id}`;\r\n\t\t\t\t\t\tif (selection[rowKey]) {\r\n\t\t\t\t\t\t\tselectedRowModels.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Check for sub-rows and traverse further\r\n\t\t\t\t\t\tif (row.subRows?.length) {\r\n\t\t\t\t\t\t\ttraverseRows(row.subRows, rowKey);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\ttraverseRows(table.getRowModel().rows);\r\n\t\t\t\tonSelectRow(selectedRowModels, rowSelection);\r\n\t\t\t} else {\r\n\t\t\t\tonSelectRow(table.getSelectedRowModel().rows, rowSelection);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rowSelection, table]);\r\n\r\n\t// useEffect(() => {\r\n\t// \tconst relativeContainer = document.getElementsByClassName(\r\n\t// \t\t'MuiTableContainer-root'\r\n\t// \t)[0];\r\n\t// \tconst fixedElement = document.getElementsByClassName('no-data')[0];\r\n\t// \trelativeContainer.addEventListener('scroll', () => {\r\n\t// \t\tconst scrollLeft = relativeContainer.scrollLeft;\r\n\t// \t\tfixedElement.style.left = `${scrollLeft + 100}px`;\r\n\t// \t});\r\n\t// }, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isResetRow) {\r\n\t\t\ttable?.resetRowSelection();\r\n\t\t}\r\n\t}, [isResetRow, table]);\r\n\r\n\t// Auto-open first row in edit mode when enableFirstRowEdit is true\r\n\tconst hasAutoEditedFirstRow = useRef(false);\r\n\tuseEffect(() => {\r\n\t\tif (\r\n\t\t\tenableFirstRowEdit &&\r\n\t\t\t!hasAutoEditedFirstRow.current &&\r\n\t\t\trows?.length > 0\r\n\t\t) {\r\n\t\t\t// Get a fresh row reference from the current table model\r\n\t\t\tconst tableRows = table.getRowModel().rows;\r\n\t\t\tconst firstRow = tableRows[0];\r\n\t\t\tif (firstRow) {\r\n\t\t\t\thasAutoEditedFirstRow.current = true;\r\n\t\t\t\t// Pre-initialize _valuesCache from original data so InlineEditFields\r\n\t\t\t\t// has a populated cache from the start\r\n\t\t\t\tif (!firstRow._valuesCache || Object.keys(firstRow._valuesCache).length === 0) {\r\n\t\t\t\t\tfirstRow._valuesCache = { ...firstRow.original };\r\n\t\t\t\t}\r\n\t\t\t\ttable.setEditingRow(firstRow);\r\n\t\t\t\tsetDisableNextEdit(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableFirstRowEdit, rows, table]);\r\n\r\n\t// Handle clicks outside the table to save and exit edit mode - ADVANCED EVENT DELEGATION\r\n\tuseEffect(() => {\r\n\t\tif (!table) return;\r\n\r\n\t\tlet dropdownOpenTimer: NodeJS.Timeout;\r\n\t\tlet saveTimer: NodeJS.Timeout;\r\n\t\tlet lastDropdownClick = 0;\r\n\t\tlet isDropdownInteraction = false;\r\n\r\n\t\t// Track dropdown interactions with precise timing\r\n\t\tconst handleMouseDown = (e: MouseEvent) => {\r\n\t\t\tconst target = e.target as HTMLElement;\r\n\t\t\tconst isDropdownElement = target.closest(\r\n\t\t\t\t'.MuiSelect-root, .MuiMenuItem-root, .MuiPopover-root, .MuiList-root, ' +\r\n\t\t\t\t'.MuiMenu-list, .MuiButtonBase-root, ' +\r\n\t\t\t\t'.MuiFormControl-root, .MuiInputBase-root, .MuiTextField-root, ' +\r\n\t\t\t\t'.MuiOutlinedInput-root, .MuiFilledInput-root, .MuiAutocomplete-popper, ' +\r\n\t\t\t\t'.MuiPickersPopper-root, [role=\"option\"], [role=\"listbox\"], [role=\"combobox\"]'\r\n\t\t\t);\r\n\r\n\t\t\tif (isDropdownElement) {\r\n\t\t\t\tisDropdownInteraction = true;\r\n\t\t\t\tlastDropdownClick = Date.now();\r\n\t\t\t\t// Clear any pending save when dropdown interaction starts\r\n\t\t\t\tif (saveTimer) {\r\n\t\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t\t}\r\n\t\t\t\t// Set a timer to reset dropdown interaction flag\r\n\t\t\t\tif (dropdownOpenTimer) {\r\n\t\t\t\t\tclearTimeout(dropdownOpenTimer);\r\n\t\t\t\t}\r\n\t\t\t\tdropdownOpenTimer = setTimeout(() => {\r\n\t\t\t\t\tisDropdownInteraction = false;\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle clicks with sophisticated logic\r\n\t\tconst handleClick = (e: MouseEvent) => {\r\n\t\t\tconst editingRow = table.getState()?.editingRow;\r\n\t\t\tconst creatingRow = table.getState()?.creatingRow;\r\n\t\t\tif (!editingRow && !creatingRow) return;\r\n\r\n\t\t\tconst target = e.target as HTMLElement;\r\n\t\t\tconst now = Date.now();\r\n\r\n\t\t\t// Don't process if we recently had a dropdown interaction\r\n\t\t\tif (isDropdownInteraction || (now - lastDropdownClick) < 300) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if click is inside table\r\n\t\t\t// const isInsideTable = target.closest('.MuiTableContainer-root, .MuiPaper-root, .MRT_Table');\r\n\t\t\tconst isInsideTable = target.closest('.MRT-TableWrapper');\r\n\r\n\t\t\t// Only save if clicking outside table and no recent dropdown interaction\r\n\t\t\tif (!isInsideTable) {\r\n\t\t\t\t// Clear any existing save timer\r\n\t\t\t\tif (saveTimer) {\r\n\t\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Schedule save with additional delay for safety\r\n\t\t\t\tsaveTimer = setTimeout(async () => {\r\n\t\t\t\t\tconst currentEditingRow = table.getState()?.editingRow;\r\n\t\t\t\t\tconst currentCreatingRow = table.getState()?.creatingRow;\r\n\t\t\t\t\tif (isDropdownInteraction) return;\r\n\t\t\t\t\tif (currentCreatingRow) {\r\n\t\t\t\t\t\tconst values = getRowValues(currentCreatingRow);\r\n\t\t\t\t\t\tawait handleSaveRow({ row: currentCreatingRow, values, table }, 'create');\r\n\t\t\t\t\t\tclearRow('mrt-row-create');\r\n\t\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (currentEditingRow) {\r\n\t\t\t\t\t\tconst values = getRowValues(currentEditingRow);\r\n\t\t\t\t\t\tawait handleSaveRow({ row: currentEditingRow, values, table }, 'edit');\r\n\t\t\t\t\t\tclearRow(currentEditingRow.id);\r\n\t\t\t\t\t\tsetDisableNextEdit(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 200);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Use both mousedown and click for comprehensive tracking\r\n\t\tdocument.addEventListener('mousedown', handleMouseDown, true);\r\n\t\tdocument.addEventListener('click', handleClick, true);\r\n\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('mousedown', handleMouseDown, true);\r\n\t\t\tdocument.removeEventListener('click', handleClick, true);\r\n\t\t\tif (dropdownOpenTimer) {\r\n\t\t\t\tclearTimeout(dropdownOpenTimer);\r\n\t\t\t}\r\n\t\t\tif (saveTimer) {\r\n\t\t\t\tclearTimeout(saveTimer);\r\n\t\t\t}\r\n\t\t};\r\n\t}, [table, handleSaveRow, getRowValues, clearRow]);\r\n\treturn (\r\n\t\t<TableWrapper className='MRT-TableWrapper custom-table'>\r\n\t\t\t<MaterialReactTable table={table} />\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleHeaderClose}\r\n\t\t\t\tclassName='add-role-drp'>\r\n\t\t\t\t{popUpShow ? (\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={handleBackButtonClick}\r\n\t\t\t\t\t\t\tclassName='role-drp-list add-column-title'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<div className='searchbar-box-list'>\r\n\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\tplaceholder={'Search User'}\r\n\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearchEvent(e)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className='all-attribute-title'>\r\n\t\t\t\t\t\t\t<Typography variant='body2' color='text.secondary'>\r\n\t\t\t\t\t\t\t\t{t('common.allAttributes_label')}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{filteredOptions.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleAddColumn(column)}>\r\n\t\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s3'>\r\n\t\t\t\t\t\t\t\t\t{column.header}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tenableAddCustomField && <MenuItem onClick={handleCustomAddColumn} className='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t\t{t('common.addCustomField_label')}\r\n\t\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{visibleColumns.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleVisibleColumn(column)}\r\n\t\t\t\t\t\t\t\tclassName='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.dotsIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>{column.header}</ListItemText>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='eye-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<MenuItem onClick={handleAddButtonClick} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tvariant='body2'\r\n\t\t\t\t\t\t\t\tcolor='text.secondary'\r\n\t\t\t\t\t\t\t\tclassName='eye-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon sx={{ fontSize: '1.25rem !important' }} />\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(option.label === 'Move' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true || row?.is_directory === 1)) ||\r\n\t\t\t\t\t\t(option.label === 'Download' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.is_directory === 1 ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === 1))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// return null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={async () => {\r\n\t\t\t\t\t\t\t\tawait option.handleAction(row);\r\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 0.5 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function' ? option.label(row) : option.label}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t{destructiveActionMenu?.length > 0 &&\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n\t\t\t\t\t\t<div className='dropdown-inner--DestructiveHeader'>\r\n\t\t\t\t\t\t\t{destructiveActionMenu?.map((option: any) => (\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\toption.handleAction(row);\r\n\t\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t\t\t{typeof option.label === 'function' ? option.label(row) : option.label}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t</Menu>\r\n\t\t\t<ConfirmPopUp\r\n\t\t\t\topen={Boolean(rowToDelete)}\r\n\t\t\t\tonClose={() => setRowToDelete(null)}\r\n\t\t\t\tonConfirm={() => handleRowDelete()}\r\n\t\t\t\ttitle='Delete Item'\r\n\t\t\t\tdescription={`Are you sure you want to delete entry ?`}\r\n\t\t\t\tloading={isDeletingRow}\r\n\t\t\t/>\r\n\t\t</TableWrapper>\r\n\t);\r\n});\r\n\r\nexport { MaterialEditableTable };\r\nexport default MaterialEditableTable;","import React, { useRef, useEffect, useMemo, useState } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface BarChartProps {\n data: DataPoint[];\n numOfLines?: number;\n initialWidth?: number;\n height?: any;\n line?: boolean;\n chartBarWidth?: number;\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\n customLabelFormatter?: (value: number) => string;\n currency: string\n}\n\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\n if (labelType === 'inPercent') {\n return `${d3.format(\".0%\")(num / 100)}`;\n } else if (labelType === 'inValue') {\n return `${symbol || ''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n }\n return num.toString();\n};\n\nfunction wrapText(textSelection: any, width: number) {\n textSelection.each(function (this: any) {\n const text = d3.select(this);\n const originalText = text.text();\n \n if (originalText.length <= 8) {\n return;\n }\n \n if (originalText.length > 12) {\n text.text(originalText.substring(0, 10) + '...');\n return;\n }\n \n const words = originalText.split(/\\s+/).reverse();\n let word;\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr(\"y\");\n const dy = parseFloat(text.attr(\"dy\")) || 0;\n \n let tspan = text\n .text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", y)\n .attr(\"dy\", `${dy}em`);\n \n while ((word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (tspan.node() && tspan.node()!.getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", y)\n .attr(\"dy\", `${++lineNumber * lineHeight + dy}em`)\n .text(word);\n }\n }\n });\n }\n \nconst BarChart: React.FC<BarChartProps> = ({\n data,\n numOfLines = 5,\n initialWidth = 500,\n height = 400,\n line = false,\n yAxisLabelType = 'inValue',\n currency,\n customLabelFormatter,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState(initialWidth);\n\n const maxValue = useMemo(() => Math.max(...data.map((d) => d.value)), [data]);\n\n const yAxisMaxValue = useMemo(() => maxValue * 1.25, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n\n const needsHorizontalScroll = data.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n // ResizeObserver to make the chart responsive\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n \n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n useEffect(() => {\n if (containerWidth === 0) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n // Calculate dynamic left margin based on label length (accounting for wrapping)\n // const sampleLabel = customLabelFormatter \n // ? customLabelFormatter(yAxisMaxValue)\n // : formatNumber(yAxisMaxValue, currency, yAxisLabelType);\n const maxLabelWidth = 80; // Maximum width for wrapped labels\n const dynamicLeftMargin = Math.max(60, maxLabelWidth + 30);\n \n const margin = { top: 20, right: 20, bottom: 25, left: dynamicLeftMargin };\n const barWidth = calculatedChartWidth - margin.left - margin.right;\n const barHeight = maxValue ? height - margin.top - margin.bottom : 0;\n\n const x = d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, barWidth])\n .padding(0.5);\n\n const y = d3.scaleLinear().domain([0, yAxisMaxValue]).range([barHeight, 0]);\n\n \n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${maxValue?margin.top:height-50})`);\n \n if (line) {\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", barWidth)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"#D3D3D4\")\n .style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", 1);\n });\n }\n\n chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"rect\")\n .attr(\"rx\", 5)\n .attr(\"ry\", 5)\n .attr(\"class\", \"bar\")\n .attr(\"x\", (d: any) => x(d.label))\n .attr(\"y\", (d: any) => y(d.value))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d: any) => barHeight - y(d.value))\n .style(\"fill\", (d: any) => d.color);\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisTop(x).tickPadding(10) as any)\n .call(d3.axisBottom(x).tickPadding(5) as any)\n // .call(d3.axisLeft(x).tickPadding(5) as any)\n\n xAxis.selectAll(\".tick line\").remove();\n xAxis.selectAll(\".tick text\").call(wrapText,80); \n\n // Calculate optimal number of ticks to prevent overlap\n const availableHeight = barHeight;\n const minTickSpacing = 30; // Minimum pixels between ticks\n const maxOptimalTicks = Math.floor(availableHeight / minTickSpacing);\n const optimalNumTicks = Math.min(numOfLines, maxOptimalTicks, 8);\n \n // Generate optimal tick values\n const optimalTicks = [];\n const optimalInterval = yAxisMaxValue / optimalNumTicks;\n for (let i = 0; i <= optimalNumTicks; i++) {\n optimalTicks.push(optimalInterval * i);\n }\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3.axisLeft(y)\n .tickValues(optimalTicks)\n .tickFormat((d: any) =>\n customLabelFormatter\n ? customLabelFormatter(d)\n : formatNumber(d, currency, yAxisLabelType)\n )\n .tickSizeOuter(0)\n .tickPadding(8) as any, // Add padding between ticks and labels\n );\n\n yAxis.selectAll(\".tick line\").remove();\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n // Style y-axis labels for better readability and apply text wrapping\n yAxis.selectAll(\".tick text\")\n .style(\"font-size\", \"11px\")\n .style(\"fill\", \"#666\")\n .style(\"font-family\", \"Inter, system-ui, Avenir, Helvetica, Arial, sans-serif\")\n .style(\"text-anchor\", \"end\")\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, containerWidth, height, line, yAxisMaxValue, yAxisTicks, currency, yAxisLabelType, customLabelFormatter, calculatedChartWidth]);\n\n return (\n <div ref={wrapperRef} \n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}>\n <svg ref={svgRef} width={calculatedChartWidth} height={height} viewBox={`0 0 ${calculatedChartWidth} ${height}`} />\n </div>\n );\n};\n\nexport { BarChart };\nexport default BarChart;\n","import React, { useRef, useEffect } from \"react\";\r\nimport * as d3 from \"d3\";\r\nimport \"./donut-chart.scss\";\r\nimport Typography from \"../../typography/typography\";\r\n\r\ninterface DataPoint {\r\n label: string;\r\n value: number;\r\n}\r\n\r\ninterface DonutChartProps {\r\n data: DataPoint[];\r\n width?: number;\r\n height?: number;\r\n legend?: boolean;\r\n direction?: \"vertical\" | \"horizontal\";\r\n total?: string;\r\n colors ?:Array<string>;\r\n titleProps?:any\r\n valueProps?:any \r\n isUserDashbord ?: boolean \r\n totalUsers ? : any \r\n}\r\n\r\nconst defaultColors = [\r\n \"#5BCE97\",\r\n \"#B3D8E2\",\r\n \"#F5F6F5\",\r\n \"#AE6B9E\",\r\n \"#CBD49A\",\r\n \"#EEE0B3\",\r\n];\r\n\r\nconst getSingleNumberFromString = (str) => {\r\n if (typeof str === \"number\") {\r\n return str;\r\n }\r\n const match = str?.match(/\\d.+/) || null;\r\n return match ? Number(match[0]) : 0;\r\n};\r\n\r\nexport const DonutChart: React.FC<DonutChartProps> = ({\r\n\tdata,\r\n\theight = 140,\r\n\twidth = 140,\r\n isUserDashbord , \r\n\tlegend = true,\r\n\tdirection = 'horizontal' ,\r\n totalUsers , \r\n\ttotal = isUserDashbord ? totalUsers : \"2.4 GB\",\r\n colors = defaultColors,\r\n titleProps={},\r\n valueProps={}, \r\n\r\n}) => {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n\r\n useEffect(() => {\r\n if (!svgRef.current) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n\r\n svg.selectAll(\"*\").remove();\r\n\r\n const margin = 6;\r\n\r\n const outerRadius = Math.min(width, height) / 2 - margin;\r\n const innerRadius = Math.min(width, height) / 2 - margin * 2;\r\n\r\n const g = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\r\n //@ts-expect-error not applicable\r\n const pie = d3\r\n .pie()\r\n .value((d: DataPoint) => getSingleNumberFromString(d.value));\r\n\r\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius);\r\n\r\n const pies = g\r\n .selectAll(\".arc\")\r\n //@ts-expect-error not applicable\r\n .data(pie(data))\r\n .enter()\r\n .append(\"g\")\r\n .attr(\"class\", \"arc\");\r\n\r\n pies\r\n .append(\"path\")\r\n //@ts-expect-error not applicable\r\n .attr(\"d\", path)\r\n //@ts-expect-error not applicable\r\n .attr(\"fill\", (d: DataPoint, i: number) => {\r\n return colors[i % colors.length]});\r\n\r\n\r\n // const words = total.split(' '); // Split the text into words\r\n // const lineHeight = 22; // Define the line height\r\n // const maxCharsPerLine = 15; // Define the maximum number of characters per line\r\n\r\n // let currentLine = '';\r\n // let lineNumber = 0;\r\n\r\n // const textElement =\r\n g.append(\"text\")\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"18px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"alignment-baseline\", `central`)\r\n .html(total);\r\n // .text(total);\r\n\r\n // words.forEach((word) => {\r\n // \tconst tempLine = currentLine + word + ' ';\r\n\r\n // \t// Check if the line exceeds the max character count\r\n // \tif (tempLine.length > maxCharsPerLine && currentLine.length > 0) {\r\n // \t\ttextElement\r\n // \t\t\t.append('tspan')\r\n // \t\t\t.attr('x', 0)\r\n // \t\t\t.attr('y', lineHeight * lineNumber)\r\n // \t\t\t.text(currentLine.trim());\r\n\r\n // \t\tcurrentLine = word + ' ';\r\n // \t\tlineNumber++;\r\n // \t} else {\r\n // \t\tcurrentLine = tempLine;\r\n // \t}\r\n // });\r\n\r\n // // Add the last line\r\n // textElement\r\n // \t.append('tspan')\r\n // \t.attr('x', 0)\r\n // \t.attr('y', lineHeight * lineNumber)\r\n // \t.text(currentLine.trim());\r\n }, [colors, data, height, total, width]);\r\n\r\n if (!legend) {\r\n return <svg ref={svgRef} width={width} height={height}></svg>;\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`donut-chart-container ${direction}`}>\r\n <div>\r\n <svg ref={svgRef} width={width} height={height}></svg>\r\n </div>\r\n <div className=\"donut-chart-legend\">\r\n {data && data.map((d: DataPoint, i: number) => {\r\n return (\r\n <div\r\n className=\"legend\"\r\n key={d.label}\r\n style={{ borderLeft: `0.188rem solid ${colors[i]}` }}\r\n >\r\n <div className=\"legend-title\">\r\n <Typography type=\"s5\" color=\"theme.secondary.800\" {...titleProps}>\r\n {d.label}\r\n </Typography>\r\n </div>\r\n <div className=\"legend-value\">\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\" weight=\"bold\" {...valueProps}>\r\n {d.value}\r\n </Typography>\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default DonutChart;\r\n","import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\nimport { useAuth } from \"../../../hooks/useAuth\";\n\ninterface DataPoint {\n label: string;\n value: number;\n\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n donutThickerValue?: number\n CustomLegends?: React.FC<{ data: DataPoint[] }>;\n title: string\n}\n\nconst formatNumber = (num: number, defaultCurrencySymbol: string = ''): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n data,\n height = 140,\n width = 140,\n legend = true,\n direction = \"vertical\",\n total = \"300\",\n donutThickerValue,\n CustomLegends,\n title = ''\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n let innerRadius = Math.min(width, height) / 2 - margin * 2;\n if (donutThickerValue) {\n innerRadius = outerRadius - donutThickerValue;\n }\n\n\n\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value)).padAngle(0);\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius)\n\n const pies = g\n .selectAll(\".arc\")\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n\n pies\n .append(\"path\")\n .attr(\"d\", path)\n .attr(\"fill\", (d: DataPoint) => d?.data?.color).attr(\"stroke\", \"none\");\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr('maring-top', \"20px\")\n .attr(\"font-size\", \"13px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"dy\", \"2em\")\n .attr(\"color\", \"#7B7C7F\")\n .html(title);\n\n }, [data, height, total, width, defaultCurrencySymbol, donutThickerValue, CustomLegends, title]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n\n\n {CustomLegends ? (\n <CustomLegends data={data} /> // Render the custom component\n ) : (\n <div className='donut-legend'>\n <div className={`donut-chart-legend ${direction}`}>\n {data.map((d: DataPoint) => (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${d.color}` }}\n >\n <div className=\"legend-title\" style={{ color: `${d.labelColor}` }}>{d.label}</div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={d.valueColor}\n style={{\n whiteSpace: 'nowrap'\n }}\n >\n {formatNumber(d.value, defaultCurrencySymbol)}\n </Typography>\n </div>\n </div>\n ))\n }\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { DonutChart };\nexport default DonutChart;\n","import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\n// import CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\n// import Button from '@mui/material/Button';\nimport Typography from '../../typography/typography';\n\nexport interface IGridCard {\n\tname: string;\n\tcompany: string;\n\tstatus: string;\n\temail: string;\n\tamount: string;\n}\n\nexport const GridCardMarkup = (props: any) => {\n\treturn (\n\t\t<Card\n\t\t\tsx={{\n\t\t\t\twidth: '16.625rem',\n\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\tborder: '0.5px solid theme.secondary.200, #F5F6F5',\n\t\t\t\tbackgroundColor: 'theme.secondary.100',\n\t\t\t\tboxShadow: `\n 0px 0px 2px 0px #E0E0E0, \n 0px 1px 4px - 2px rgba(24, 39, 75, 0.02), \n 0px 4px 4px - 2px rgba(24, 39, 75, 0.06)`,\n\t\t\t\tm: 3\n\t\t\t}}>\n\t\t\t<CardContent\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tpadding: '1rem 1rem 1.25rem 1rem',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\tflexShrink: 0\n\t\t\t\t}}>\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\tmarginBottom: 1\n\t\t\t\t\t}}>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography type='s3' weight='medium'>\n\t\t\t\t\t\t\t{props.data.name || 'Kristin Watson'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.800'>\n\t\t\t\t\t\t\t{props.data.company || 'Barone LLC.'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tpadding: '0.25rem 0.375rem',\n\t\t\t\t\t\t\t\tgap: '0.5rem',\n\t\t\t\t\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\t\t\t\t\tbackgroundColor: 'theme.secondary.200'\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tcolor='theme.secondary.900'>\n\t\t\t\t\t\t\t{props.data.status || 'Lost'}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tsx={{\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tcolor: 'theme.secondary.900',\n\t\t\t\t\t\ttextDecorationLine: 'underline'\n\t\t\t\t\t}}>\n\t\t\t\t\t{props.data.email || 'kristen.watson@example.com'}\n\t\t\t\t</Typography>\n\t\t\t\t<Box sx={{ mt: '1.25rem', display: 'flex', alignItems: 'center' }}>\n\t\t\t\t\t<Typography\n\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\tsx={{ mr: '.2rem' }}\n\t\t\t\t\t\tcolor='theme.secondary.900'>\n\t\t\t\t\t\t{props.data.amount || '$10,000,000'}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\test value\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</CardContent>\n\t\t\t{/* <CardActions>\n <Button size=\"small\">Learn More</Button>\n </CardActions> */}\n\t\t</Card>\n\t);\n};\n\nexport const GridCard = (props: any) => {\n\treturn (\n\t\t<>\n\t\t\t{props.data.map((cardData: IGridCard) => {\n\t\t\t\treturn <GridCardMarkup data={cardData} />;\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nexport default GridCard;\n","import { Box } from \"@mui/material\";\nimport \"./grid-wrapper.scss\";\nimport Typography from \"../../typography/typography\";\nimport images from \"../../../assets/images\"\nimport ErpLoader from \"../../loaders/erp-loader\";\n\ninterface GridWrapperProps {\n children: React.ReactNode;\n data?: any[]\n isLoading?: boolean\n}\n\nconst GridWrapper = (props: GridWrapperProps) => {\n const { children, data, isLoading } = props;\n return (\n <>\n {isLoading \n ? \n <ErpLoader/> \n :\n <>\n {data?.length \n ? \n <div className=\"grid-wrapper\">{children}</div>\n : \n <Box position=\"fixed\" left='50%' top=\"50%\" transform=\"translate(-50%, -50%)\">\n <img src={images.common.tableNoData} />\n <Typography color='theme.secondary.1000' weight=\"medium\" align=\"center\">No data</Typography>\n </Box>\n }\n </>\n }\n </>\n );\n};\n\nexport { GridWrapper };\nexport default GridWrapper;\n","import { GridWrapper } from '../../grid/grid-wrapper';\r\nimport { CardWrapper } from '../../card-wrapper';\r\nimport { Typography } from '../../typography';\r\nimport './grid-view.scss';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { createdOnAndBy } from '../../../utils/common';\r\n\r\ninterface IGridCard {\r\n\tdata: any[];\r\n\tconfig?: any;\r\n}\r\n\r\nconst GridCard: React.FC<IGridCard> = ({ data, config }) => {\r\n\tconst navigate = useNavigate();\r\n\tconst currentModule = location.pathname.split('/')[2];\r\n\t\r\n\tconst moduleConfig = config?.[currentModule] || { filterName: '', redirectionPath: '' };\r\n\tconst path = `/dashboard/${currentModule}${moduleConfig.redirectionPath}`;\r\n\r\n\tconst handleRedirection = (form: any) => {\r\n\t\tnavigate(path, {\r\n\t\t\tstate: { form }\r\n\t\t});\r\n\t};\r\n\r\n\tconst formatText = (text: string) => {\r\n\t\treturn text?.split('_')?.map(i => i?.charAt(0).toUpperCase() + i?.slice(1).toLowerCase())?.join(' ');\r\n\t};\r\n\r\n\treturn (\r\n\t\t<GridWrapper data={data}>\r\n\t\t\t{data.map((form, index) => (\r\n\t\t\t\t<CardWrapper key={form?._id || index}>\r\n\t\t\t\t\t<div className='gridView--CardHeader'>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName='gridView--redirection'\r\n\t\t\t\t\t\t\tonClick={() => handleRedirection(form)}>\r\n\t\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.900'>\r\n\t\t\t\t\t\t\t\t{formatText(form?.name)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName='gridView--redirection'\r\n\t\t\t\t\t\tonClick={() => handleRedirection(form)}>\r\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.900'>\r\n\t\t\t\t\t\t\t{form?.fields?.filter(\r\n\t\t\t\t\t\t\t\t(field: { is_system_field: boolean }) => !field.is_system_field,\r\n\t\t\t\t\t\t\t).length || 0}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{form?.description && (\r\n\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\r\n\t\t\t\t\t\t\t\t{formatText(form?.description)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<div className='gridView--CardBottom'>\r\n\t\t\t\t\t\t\t<Typography type='s5' color='theme.secondary.600'>\r\n\t\t\t\t\t\t\t\t{createdOnAndBy(form)}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</CardWrapper>\r\n\t\t\t))}\r\n\t\t</GridWrapper>\r\n\t);\r\n};\r\n\r\nexport default GridCard;\r\n","import { ActionBar } from '../action-bar';\r\nimport { MaterialTable } from '../material-table';\r\nimport { Typography } from '../typography';\r\nimport { viewTypes } from '../../constants';\r\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\r\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport \"./custom-forms.scss\";\r\nimport { useAuth } from '../../hooks/useAuth';\r\nimport { Footer } from '../footer/footer';\r\nimport { IPaginationModel } from '../../types';\r\nimport { Box } from \"@mui/material\";\r\nimport GridCard from \"./grid-view/grid-view.js\";\r\nimport { useAppTranslations } from \"../../hooks/use-translations\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport useApi from '../../hooks/useApi';\r\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\r\nimport { getToken } from '../../utils/common';\r\n\r\ninterface ActionData {\r\n label: string;\r\n position: number;\r\n}\r\n\r\ninterface ModuleConfig {\r\n filterName: string;\r\n redirectionPath: string;\r\n}\r\n\r\n\r\n\r\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\r\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\r\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\r\n\r\ninterface FormBuilderState {\r\n rows: any[];\r\n isLoading: boolean;\r\n paginationModel: {\r\n pageNo: number;\r\n limit: number;\r\n totalCount: number;\r\n };\r\n}\r\n\r\nconst Forms = ({ config }: { config?: any }) => {\r\n const { t } = useTranslation();\r\n useAppTranslations(); // Load translations for current module\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const { user } = useAuth();\r\n console.log(\"user.........\", user)\r\n const { callApi } = useApi();\r\n\r\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\r\n rows: [],\r\n isLoading: false,\r\n paginationModel: {\r\n pageNo: 1,\r\n limit: 10,\r\n totalCount: 0\r\n }\r\n });\r\n\r\n // Initialize state with proper defaults and memoization\r\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\r\n const formView = localStorage.getItem(\"form-view\");\r\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\r\n });\r\n\r\n const [search, setSearch] = useState<string>(\"\");\r\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\r\n actionBarData?.[0]?.label || viewTypes.TABLE\r\n );\r\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\r\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\r\n // Memoized computed values to prevent unnecessary recalculations\r\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\r\n\r\n const modulesConfig = useMemo(() => ({\r\n ...config\r\n }), [config]);\r\n\r\n const moduleConfig = useMemo(() =>\r\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\r\n [currentModule, modulesConfig]\r\n );\r\n\r\n console.log(\"external moduleConfig..........\", moduleConfig)\r\n const navigationPath = useMemo(() =>\r\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\r\n [currentModule, moduleConfig.redirectionPath]\r\n );\r\n\r\n const filters = useMemo(() =>\r\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\r\n [user?.company_id, moduleConfig.filterName]\r\n );\r\n\r\n const paginationData = useMemo(() => {\r\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\r\n const total = limit ? Math.ceil(totalCount / limit) : 0;\r\n const skip = limit * (pageNo - 1);\r\n return { total, skip, pageNo, limit };\r\n }, [formBuilder.paginationModel]);\r\n\r\n // Utility function moved outside render to prevent recreation\r\n const formatText = useCallback((key: string): string => {\r\n return key\r\n ? key\r\n .split(/[:_-]/)\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(' ')\r\n : key;\r\n }, []);\r\n\r\n // Memoized event handlers to prevent child re-renders\r\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\r\n setColumnOrder(colOrder.slice(1));\r\n }, []);\r\n\r\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\r\n setFormBuilder(prev => ({\r\n ...prev,\r\n paginationModel: {\r\n ...model,\r\n totalCount: prev.paginationModel.totalCount\r\n }\r\n }));\r\n }, []);\r\n\r\n const handleSearch = useCallback((searchValue: string) => {\r\n setSearch(searchValue);\r\n }, []);\r\n\r\n const handleRowClick = useCallback((rowData: any) => {\r\n navigate(navigationPath, {\r\n state: rowData,\r\n });\r\n }, [navigate, navigationPath]);\r\n\r\n // Memoized columns definition to prevent recreation on each render\r\n const columns = useMemo(() => [\r\n {\r\n accessorKey: \"name\",\r\n header: \"Form Name\",\r\n visible: true,\r\n Cell: ({ row }: any) =>\r\n row?.original?.name ? (\r\n <div\r\n onClick={() => handleRowClick(row.original)}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n {formatText(row.original.name)}\r\n </div>\r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n {\r\n accessorKey: \"fields.length\",\r\n header: \"No. of Fields\",\r\n visible: true,\r\n size: 150\r\n },\r\n {\r\n accessorKey: \"fields\",\r\n header: \"No. of custom fields\",\r\n visible: true,\r\n size: 80,\r\n Cell: ({ row }: any) =>\r\n row?.original?.fields ? (\r\n <div>\r\n {\r\n row.original.fields.filter(\r\n (field: { is_system_field: boolean }) => !field.is_system_field,\r\n ).length\r\n }\r\n </div>\r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n {\r\n accessorKey: \"fields\",\r\n header: \"Custom Fields\",\r\n visible: true,\r\n Cell: ({ row }: any) => {\r\n const fields = row?.original?.fields?.filter(\r\n (field: { is_system_field: boolean; label: string }) =>\r\n !field?.is_system_field && field?.label,\r\n ) || [];\r\n\r\n if (!fields.length) return '-';\r\n\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\r\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\r\n <Typography\r\n key={`${item.label}-${index}`}\r\n type=\"s5\"\r\n weight=\"medium\"\r\n className=\"forms--CustomField\"\r\n >\r\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\r\n </Typography>\r\n ))}\r\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n className=\"forms--CustomField\"\r\n >\r\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\r\n </Typography>\r\n )}\r\n </Box>\r\n );\r\n }\r\n },\r\n ], [formatText, handleRowClick, t]);\r\n\r\n // Memoized footer pages to prevent recreation\r\n const footerPages = useMemo(() => [\r\n {\r\n name: 'Default',\r\n _id: 1,\r\n data: []\r\n }\r\n ], []);\r\n\r\n\r\n const fetchForms = useCallback(async() => {\r\n console.log(\"moduleConfig.............\", moduleConfig)\r\n if (!moduleConfig.filterName || !user?.company_id) return;\r\n\r\n const sort = sorting?.[0];\r\n const params = {\r\n skip: paginationData.skip,\r\n limit: paginationData.limit,\r\n search,\r\n filters,\r\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\r\n ...getToken(),\r\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\r\n };\r\n console.log(\"params..............\", params)\r\n\r\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\r\n const response = await getV1FormBuilder({\r\n ...params,\r\n ...getToken\r\n })\r\n console.log(\"response........\", response)\r\n setFormBuilder({\r\n rows: response?.data?.form,\r\n isLoading: false,\r\n paginationModel: {\r\n ...formBuilder.paginationModel,\r\n ...response?.data?.pagination\r\n }\r\n });\r\n\r\n\r\n }, [filters,\r\n paginationData.skip,\r\n paginationData.limit,\r\n sorting,\r\n search,\r\n moduleConfig.filterName,\r\n user?.company_id,\r\n ])\r\n // Effect for fetching data - optimized with proper dependencies\r\n useEffect(() => {\r\n fetchForms()\r\n }, [\r\n fetchForms\r\n ]);\r\n\r\n // Effect for setting active tab - only run when actionBarData changes\r\n useEffect(() => {\r\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\r\n setActionBarActiveTab(actionBarData[0].label);\r\n }\r\n }, [actionBarData]);\r\n\r\n // Effect for localStorage - debounced to prevent excessive writes\r\n useEffect(() => {\r\n if (actionBarData?.length) {\r\n const timeoutId = setTimeout(() => {\r\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\r\n }, 300);\r\n\r\n return () => clearTimeout(timeoutId);\r\n }\r\n }, [actionBarData]);\r\n\r\n return (\r\n <section className=\"forms\">\r\n <ActionBar\r\n title=\"Form\"\r\n button={false}\r\n data={actionBarData}\r\n setData={setActionBarData}\r\n active={actionBarActiveTab}\r\n setActive={(tab) => {\r\n setActionBarActiveTab(tab);\r\n }}\r\n handleSearch={handleSearch}\r\n showFilter={false}\r\n />\r\n\r\n {actionBarActiveTab === viewTypes.TABLE && (\r\n <MaterialTable\r\n enablePagination={false}\r\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\r\n handleColumnOrdering={handleColumnOrdering}\r\n rows={formBuilder.rows}\r\n columns={columns}\r\n totalPages={1}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n enableEditing={false}\r\n states={{ sorting: sorting || [] }}\r\n onSortingChange={setSorting}\r\n disableDefaultActionColumn\r\n getSelectedData={() => { }}\r\n />\r\n )}\r\n\r\n {actionBarActiveTab === viewTypes.GRID && (\r\n <GridCard data={formBuilder.rows} config={config} />\r\n )}\r\n\r\n <Footer\r\n pages={footerPages}\r\n setPages={() => { }}\r\n currentPage={1}\r\n setCurrentPage={() => { }}\r\n total={paginationData.total}\r\n paginationModel={{\r\n pageNo: formBuilder.paginationModel.pageNo,\r\n limit: formBuilder.paginationModel.limit\r\n }}\r\n handlePaginationModel={handlePaginationModel}\r\n sharedPages={[]}\r\n resource=\"\"\r\n savePageConfiguration={() => { }}\r\n handlePageDelete={() => { }}\r\n enablePages={false}\r\n isPaginationDisplayed={true}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport default Forms;","import { Box, Collapse, IconButton, TableCell, TableRow } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport Typography from \"../../typography/typography\";\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\nimport ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { formateValueByType } from \"../../../utils/common-utility\";\r\n\r\ninterface IRowProps {\r\n rowData: any;\r\n level: number;\r\n tableHeaders: any[];\r\n totalHeaders: any[];\r\n headers: any[];\r\n collapsAll: boolean;\r\n collapsLevel: number;\r\n isIncrese: boolean,\r\n data: any,\r\n rowPath: number[],\r\n selectedRowPaths: number[][],\r\n onCheckboxChange: (rowPath: number[], checked: boolean) => void;\r\n dataSlice: any[];\r\n dataIndex: number;\r\n enableCheckBox: boolean\r\n rowHeight?: string\r\n columnWidths?: { [key: string]: number }\r\n}\r\n\r\nexport function DynamicRow({\r\n rowData,\r\n level = 0,\r\n tableHeaders,\r\n totalHeaders,\r\n headers,\r\n collapsAll = false,\r\n collapsLevel = 0,\r\n isIncrese,\r\n data,\r\n rowPath,\r\n selectedRowPaths,\r\n onCheckboxChange,\r\n // dataSlice,\r\n enableCheckBox,\r\n rowHeight,\r\n columnWidths = {},\r\n}: IRowProps) {\r\n const [open, setOpen] = useState<boolean>(false);\r\n const {t}=useTranslation()\r\n\r\n useEffect(() => {\r\n if (isIncrese && collapsLevel > level) {\r\n setOpen(true);\r\n }\r\n if (!isIncrese && collapsLevel <= level + 2) {\r\n setOpen(false);\r\n }\r\n }, [collapsLevel, level, isIncrese]);\r\n\r\n const handleToggle = () => {\r\n setOpen(prevOpen => !prevOpen);\r\n };\r\n\r\n function getNestedValue(obj: any, path: any) {\r\n if (path?.name == '') {\r\n return ''\r\n }\r\n\r\n const formattedValue=path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) || (path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) == '0' ? '0' : '-');\r\n return formateValueByType({\r\n value: formattedValue,\r\n ...path\r\n })\r\n }\r\n\r\n const isChecked = selectedRowPaths.some(path => path.length === rowPath.length && path.every((v, i) => v === rowPath[i]));\r\n\r\n return (\r\n <>\r\n <TableRow sx={{ cursor: 'pointer', \r\n height: rowHeight,\r\n overflow: 'hidden',\r\n '&:not(:last-child) td': {\r\n // borderBottom: (data?.length > 1)? 'none' : '1px solid #E5E7EB',\r\n },\r\n // Ensure last row has bottom border\r\n '&:last-child td': {\r\n borderBottom: 'none' ,\r\n borderBottomColor: 'divider',\r\n borderTop: \"0\",\r\n },\r\n // '&:first-child td': {\r\n // borderTop: 'none !important' ,\r\n // }\r\n }}>\r\n {tableHeaders[level]?.enableCheckbox && (\r\n <TableCell\r\n className=\"dynamic-report-row\"\r\n sx={{\r\n paddingLeft: `8px`,\r\n wordWrap: 'break-word',\r\n width: '60px',\r\n minWidth: '60px',\r\n maxWidth: '60px',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <Checkbox\r\n checked={isChecked}\r\n onChange={e => onCheckboxChange(rowPath, e.target.checked)}\r\n onClick={e => e.stopPropagation()}\r\n />\r\n </TableCell>\r\n )}\r\n\r\n {tableHeaders[level].headers.map((header: any, index: number) => {\r\n if (header.joinWithLeft) return null;\r\n\r\n const cellIndex = tableHeaders[level].headers.slice(index + 1).findIndex((h: any) => !h.joinWithLeft);\r\n const cellsToMerge = cellIndex === -1\r\n ? tableHeaders[level].headers.slice(index + 1).length + 1\r\n : cellIndex + 1;\r\n const colSpan = header.mergeCells ? cellsToMerge : 1;\r\n\r\n // Calculate total width for merged cells\r\n let totalWidth = 0;\r\n const defaultWidth = 100;\r\n\r\n for (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n const cellWidth = columnWidths[t(headers[i].label)] > 100 ? columnWidths[t(headers[i].label)] : 100;\r\n totalWidth += cellWidth || defaultWidth;\r\n }\r\n const showData=header?.showData ? header?.showData(open) : true;\r\n \r\n return (\r\n <TableCell\r\n key={index}\r\n className=\"dynamic-report-row\"\r\n colSpan={colSpan}\r\n sx={{\r\n paddingLeft: index === 0 ? `8px` : '16px',\r\n wordWrap: 'break-word',\r\n width: `${totalWidth}px`,\r\n minWidth: `${totalWidth}px`,\r\n maxWidth: `${totalWidth}px`,\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {showData && header?.isCollaps ? (\r\n <Box\r\n onClick={handleToggle}\r\n sx={{\r\n paddingLeft: (level > index && index === 0) ? level * 2 : 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: header?.position ? header?.position : 'start',\r\n width: '100%',\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <IconButton size=\"small\" sx={{p:0}}>\r\n {open ? <ArrowDropUpIcon sx={{ fontSize: '20px' }} /> : <ArrowDropDownIcon sx={{ fontSize: '20px' }} />}\r\n </IconButton>\r\n {header?.render ? header.render(getNestedValue(rowData, header), rowData, data) : (\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color='theme.neutral.1000'\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}\r\n >\r\n {getNestedValue(rowData, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n ) : (\r\n showData && <Box sx={{\r\n paddingLeft: (level > index && index === 0) ? level * 2 : 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: header?.position ? header?.position : 'start',\r\n width: '100%',\r\n height: rowHeight,\r\n overflow: 'hidden'\r\n }}>\r\n \r\n {header?.render ? header.render(getNestedValue(rowData, header), rowData, data) : (\r\n <Typography\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color='theme.neutral.800'\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}\r\n >\r\n {getNestedValue(rowData, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n\r\n {Array.isArray(rowData[tableHeaders[level + 1]?.rowKey]) && (\r\n <TableRow sx={{}}>\r\n <TableCell\r\n sx={{\r\n // border:level>0?'none':'none',\r\n border: '0 !important',\r\n borderBottom: \"0 !important\"\r\n }}\r\n style={{ padding: 0 }}\r\n colSpan={tableHeaders[level].headers.filter((h: any) => !h.joinWithLeft).length + (enableCheckBox ? 1 : 0)}\r\n >\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n {rowData[tableHeaders[level + 1]?.rowKey]?.map((itemData: any, idx: number, arr: any[]) => (\r\n <DynamicRow\r\n key={itemData.id || [...rowPath, idx].join('-')}\r\n rowData={itemData}\r\n level={level + 1}\r\n tableHeaders={tableHeaders}\r\n headers={headers}\r\n collapsAll={collapsAll}\r\n collapsLevel={collapsLevel}\r\n isIncrese={isIncrese}\r\n totalHeaders={totalHeaders}\r\n data={data}\r\n rowPath={[...rowPath, idx]}\r\n selectedRowPaths={selectedRowPaths}\r\n onCheckboxChange={onCheckboxChange}\r\n dataSlice={arr}\r\n dataIndex={idx}\r\n enableCheckBox={enableCheckBox}\r\n rowHeight={rowHeight}\r\n columnWidths={columnWidths}\r\n />\r\n ))}\r\n\r\n {rowData?.total && Object.keys(rowData?.total).length > 0 && totalHeaders && (\r\n <TableRow sx={{ backgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA', }}>\r\n {enableCheckBox && (\r\n <TableCell sx={{\r\n width: '60px',\r\n minWidth: '60px',\r\n maxWidth: '60px'\r\n }} />\r\n )}\r\n\r\n {totalHeaders.map((header: any, index: number) => {\r\n if (header.joinWithLeft) return null;\r\n\r\n const cellsToMerge = totalHeaders.slice(index + 1).findIndex((h: any) => !h.joinWithLeft && h !== header) === -1\r\n ? totalHeaders.slice(index + 1)?.length + 1\r\n : totalHeaders.slice(index + 1).findIndex((h: any) => !h.joinWithLeft && h !== header) + 1;\r\n const colSpan = header.mergeCells ? cellsToMerge : 1;\r\n\r\n // Calculate merged width for totals\r\n let totalWidth = 0;\r\n for (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n totalWidth += columnWidths[t(headers[i].label)] || 100;\r\n }\r\n\r\n return (\r\n <TableCell\r\n key={index}\r\n className=\"dynamic-report-row\"\r\n colSpan={colSpan}\r\n sx={{\r\n paddingLeft: index === 0 ? `${level * 24}px` : '16px',\r\n width: `${totalWidth}px`,\r\n minWidth: `${totalWidth}px`,\r\n maxWidth: `${totalWidth}px`,\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: header?.position || 'start', width: '100%' }}>\r\n {header?.render ? header?.render(getNestedValue(rowData, header), rowData) : (\r\n <Typography type=\"s4\" weight=\"bold\" color='theme.neutral.1000'>\r\n {getNestedValue(rowData?.total, header)}\r\n </Typography>\r\n )}\r\n </Box>\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n )}\r\n </Collapse>\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </>\r\n );\r\n}","import { primaryFont } from '../theme/typography';\r\nimport { toFixedWithNumbers } from './common';\r\nimport { formatDate } from './dateFormat';\r\n\r\nexport interface MeasurementConfig {\r\n fontSize: string;\r\n fontFamily: string;\r\n fontWeight: string | number;\r\n}\r\n\r\nexport const DEFAULT_MEASUREMENT_CONFIG: MeasurementConfig = {\r\n fontSize: '14px',\r\n fontFamily: primaryFont,\r\n fontWeight: '500'\r\n};\r\n\r\nlet canvasContext: CanvasRenderingContext2D | null = null;\r\n\r\nfunction getCanvasContext(): CanvasRenderingContext2D | null {\r\n if (canvasContext) {\r\n return canvasContext;\r\n }\r\n\r\n try {\r\n const canvas = document.createElement('canvas');\r\n canvasContext = canvas.getContext('2d');\r\n return canvasContext;\r\n } catch (error) {\r\n console.warn('Canvas context creation failed, falling back to DOM measurement:', error);\r\n return null;\r\n }\r\n}\r\n\r\nfunction measureTextWidthCanvas(text: string, config: MeasurementConfig): number {\r\n const context = getCanvasContext();\r\n\r\n if (!context) {\r\n console.warn('Canvas context not available, returning 0');\r\n return 0;\r\n }\r\n\r\n context.font = `${config.fontWeight} ${config.fontSize} ${config.fontFamily}`;\r\n\r\n const metrics = context.measureText(text);\r\n return metrics.width;\r\n}\r\n\r\nfunction measureTextWidthDOM(text: string, config: MeasurementConfig): number {\r\n try {\r\n const element = document.createElement('span');\r\n element.style.position = 'absolute';\r\n element.style.visibility = 'hidden';\r\n element.style.whiteSpace = 'nowrap';\r\n element.style.fontSize = config.fontSize;\r\n element.style.fontFamily = config.fontFamily;\r\n element.style.fontWeight = String(config.fontWeight);\r\n element.textContent = text;\r\n\r\n document.body.appendChild(element);\r\n const width = element.offsetWidth;\r\n document.body.removeChild(element);\r\n\r\n return width;\r\n } catch (error) {\r\n console.warn('DOM measurement failed:', error);\r\n return text.length * 8;\r\n }\r\n}\r\n\r\nexport function measureTextWidth(\r\n text: string,\r\n config: MeasurementConfig = DEFAULT_MEASUREMENT_CONFIG\r\n): number {\r\n if (!text || text.length === 0) {\r\n return 0;\r\n }\r\n\r\n const textStr = String(text);\r\n\r\n const context = getCanvasContext();\r\n if (context) {\r\n return measureTextWidthCanvas(textStr, config);\r\n }\r\n\r\n return measureTextWidthDOM(textStr, config);\r\n}\r\n\r\nexport function getFontConfig(element?: HTMLElement): MeasurementConfig {\r\n if (!element) {\r\n return DEFAULT_MEASUREMENT_CONFIG;\r\n }\r\n\r\n try {\r\n const computedStyle = window.getComputedStyle(element);\r\n\r\n return {\r\n fontSize: computedStyle.fontSize || DEFAULT_MEASUREMENT_CONFIG.fontSize,\r\n fontFamily: computedStyle.fontFamily || DEFAULT_MEASUREMENT_CONFIG.fontFamily,\r\n fontWeight: computedStyle.fontWeight || DEFAULT_MEASUREMENT_CONFIG.fontWeight\r\n };\r\n } catch (error) {\r\n console.warn('Failed to extract font config from element:', error);\r\n return DEFAULT_MEASUREMENT_CONFIG;\r\n }\r\n}\r\n\r\nexport function formatValueForMeasurement(value: any, type?: string): string {\r\n if (value === null || value === undefined) {\r\n return '-';\r\n }\r\n\r\n if (type === 'date' || value instanceof Date) {\r\n try {\r\n return new Date(value).toLocaleDateString();\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n if (type === 'number' || typeof value === 'number') {\r\n return String(value);\r\n }\r\n\r\n if (typeof value === 'object') {\r\n try {\r\n return JSON.stringify(value);\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nexport function cleanupMeasurementContext(): void {\r\n canvasContext = null;\r\n}\r\n\r\nexport interface SampleConfig {\r\n maxRows: number;\r\n headers: any[];\r\n data: any[];\r\n tableHeaders: any[];\r\n}\r\n\r\nexport interface WidthConstraints {\r\n min: number;\r\n max?: number;\r\n padding: number;\r\n}\r\n\r\nexport interface WidthCalculationResult {\r\n [columnName: string]: number;\r\n}\r\n\r\nexport interface HeaderConfig {\r\n name: string;\r\n label: string;\r\n width?: number | string;\r\n enableSorting?: boolean;\r\n type?: 'date' | 'number' | 'string';\r\n render?: (value: any, row: any, data: any) => React.ReactNode;\r\n}\r\n\r\nexport function calculateColumnWidths(\r\n headers: HeaderConfig[],\r\n rowContentSamples: { [columnName: string]: string[] },\r\n measurementConfig: MeasurementConfig = DEFAULT_MEASUREMENT_CONFIG,\r\n constraints: WidthConstraints = { min: 80, padding: 24 },\r\n t: any\r\n): WidthCalculationResult {\r\n\r\n const calculatedWidths: WidthCalculationResult = {};\r\n\r\n headers.forEach((header) => {\r\n const label = t(header.label)\r\n if (header.width) {\r\n const numericWidth = typeof header.width === 'string'\r\n ? parseInt(header.width.replace(/[^\\d]/g, ''), 10)\r\n : header.width;\r\n\r\n calculatedWidths[label] = numericWidth;\r\n return;\r\n }\r\n\r\n const headerText = label;\r\n let headerWidth = measureTextWidth(headerText, measurementConfig);\r\n\r\n if (header.enableSorting) {\r\n headerWidth += 48;\r\n }\r\n\r\n let maxRowContentWidth = 0;\r\n const samples = rowContentSamples[label] || [];\r\n\r\n samples.forEach((content) => {\r\n const contentWidth = measureTextWidth(content, measurementConfig);\r\n maxRowContentWidth = Math.max(maxRowContentWidth, contentWidth);\r\n });\r\n // console.log(\"🚀 ~ calculateColumnWidths ~ maxRowContentWidth:\", maxRowContentWidth,headerWidth,label)\r\n // const isHeaderWidth=(headerWidth < 100 ? headerWidth + 24 : headerWidth >maxRowContentWidth)\r\n\r\n let calculatedWidth = Math.max(headerWidth < 100 ? headerWidth + 24 : headerWidth, maxRowContentWidth);\r\n\r\n const dynamicPadding = constraints.padding \r\n\r\n calculatedWidth += dynamicPadding;\r\n\r\n if (maxRowContentWidth > 10) {\r\n calculatedWidth = Math.max(constraints.min, calculatedWidth);\r\n } else {\r\n calculatedWidth = Math.max(60, calculatedWidth);\r\n }\r\n\r\n if (constraints.max) {\r\n calculatedWidth = Math.min(constraints.max, calculatedWidth);\r\n }\r\n\r\n calculatedWidths[label] = Math.round(calculatedWidth) > 100 ? Math.round(calculatedWidth) : 100;\r\n });\r\n\r\n return calculatedWidths\r\n}\r\n\r\nconst valueMapper = {\r\n 'amount': {\r\n format: toFixedWithNumbers\r\n },\r\n 'date': {\r\n format: formatDate\r\n },\r\n 'string': {\r\n format: (value: any) => value\r\n },\r\n 'toFixed':{\r\n format:(value:any)=>toFixedWithNumbers(value)\r\n }\r\n}\r\n\r\nfunction getNestedValue(obj: any, path: any): any {\r\n const type = path?.type || 'string';\r\n if (!path?.name || path?.name === '') {\r\n return '';\r\n }\r\n\r\n const value = path?.name.split('.').reduce(\r\n (acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined),\r\n obj\r\n );\r\n\r\n if (value === 0 || value === '0') {\r\n return '0';\r\n }\r\n\r\n return value !== undefined ? valueMapper[type]?.format(value) : '-';\r\n}\r\nexport function sampleRowContent(config: SampleConfig): { [columnName: string]: string[] } {\r\n const { maxRows, headers, data, tableHeaders, t } = config;\r\n const samples: { [columnName: string]: string[] } = {};\r\n\r\n headers.forEach((header) => {\r\n samples[t(header.label)] = [];\r\n });\r\n\r\n if (!data || !Array.isArray(data) || data.length === 0) {\r\n return samples;\r\n }\r\n\r\n let sampledCount = 0;\r\n const maxSamples = maxRows;\r\n\r\n function sampleRows(rows: any[], level: number = 0, /* parentRow?: any */) {\r\n if (!Array.isArray(rows) || sampledCount >= maxSamples) {\r\n return;\r\n }\r\n\r\n const levelHeaders = tableHeaders && tableHeaders[level] && tableHeaders[level].headers\r\n ? tableHeaders[level].headers\r\n : headers;\r\n\r\n for (let i = 0; i < rows.length && sampledCount < maxSamples; i++) {\r\n const row = rows[i];\r\n\r\n // Process all headers in the original headers array\r\n headers.forEach((header: any) => {\r\n const columnLabel = t(header.label);\r\n if (!samples[columnLabel]) {\r\n return;\r\n }\r\n\r\n // Check if this header belongs to the current level\r\n const headerInCurrentLevel = levelHeaders.find((lh: any) =>\r\n t(lh.label) === columnLabel\r\n );\r\n\r\n let content: string;\r\n\r\n if (headerInCurrentLevel) {\r\n // This header belongs to current level - get value from current row\r\n if (header.render && typeof header.render === 'function') {\r\n try {\r\n const rendered = header.render(getNestedValue(row, header), row, data);\r\n\r\n if (typeof rendered === 'string') {\r\n content = rendered;\r\n } else if (typeof rendered === 'number') {\r\n content = String(rendered);\r\n } else if (rendered && typeof rendered === 'object' && 'props' in rendered) {\r\n const props = (rendered as any).props;\r\n if (props && props.children) {\r\n content = String(props.children);\r\n } else {\r\n content = String(rendered);\r\n }\r\n } else {\r\n content = String(rendered);\r\n }\r\n } catch (error) {\r\n content = formatValueForMeasurement(getNestedValue(row, header), header.type);\r\n }\r\n } else {\r\n const value = getNestedValue(row, header);\r\n content = formatValueForMeasurement(value, header.type);\r\n }\r\n } else {\r\n // This header belongs to a parent level - use placeholder\r\n content = \"-\";\r\n }\r\n\r\n samples[columnLabel].push(content);\r\n });\r\n\r\n sampledCount++;\r\n\r\n // Recurse into nested data\r\n if (tableHeaders && tableHeaders[level + 1]) {\r\n const nextRowKey = tableHeaders[level + 1]?.rowKey;\r\n if (nextRowKey && row[nextRowKey] && Array.isArray(row[nextRowKey])) {\r\n sampleRows(row[nextRowKey], level + 1, row);\r\n }\r\n }\r\n }\r\n }\r\n\r\n sampleRows(data, 0);\r\n\r\n return samples;\r\n}\r\n\r\nexport function getCheckboxColumnWidth(): number {\r\n return 60;\r\n}","import { useCallback } from \"react\";\r\n\r\nexport const useUomFieldUpdater = ({\r\n fieldMapping,\r\n sourceData,\r\n conversation_factor,\r\n fieldPrefix = 'item_entries',\r\n setValue,\r\n shouldUpdate = true,\r\n active_location,\r\n}: {\r\n fieldMapping: Record<string, string>;\r\n sourceData: any;\r\n conversation_factor?: number | string;\r\n fieldPrefix: string;\r\n setValue: any;\r\n shouldUpdate: boolean;\r\n active_location?: any;\r\n}) => {\r\n\r\n return useCallback(() => {\r\n if (!shouldUpdate || !sourceData) return;\r\n\r\n Object.entries(fieldMapping).forEach(([sourceKey, targetKey]) => {\r\n \r\n const sourceValue = sourceData[sourceKey];\r\n const factor = Number(conversation_factor) || 1;\r\n\r\n const fieldPath = fieldPrefix\r\n ? `${fieldPrefix}.${targetKey}`\r\n : targetKey;\r\n \r\n let convertedValue;\r\n\r\n // If active_location is null, set value to 0\r\n if (active_location === null) {\r\n convertedValue = 0;\r\n } else if (active_location && typeof active_location === 'object' && sourceData?.location_wise_quantity) {\r\n // Find location from array where active_location.id = location_id\r\n const location_quantity = sourceData.location_wise_quantity.find((item: any) => item.location_id === active_location.id);\r\n if (location_quantity) {\r\n // Use location-specific values\r\n switch(sourceKey) {\r\n case 'total_on_hand_quantity':\r\n convertedValue = (location_quantity.total_available_quantity - location_quantity.total_reserved_quantity) / factor;\r\n break;\r\n case 'total_available_quantity':\r\n convertedValue = location_quantity.total_available_quantity / factor;\r\n break;\r\n case 'total_committed_quantity':\r\n convertedValue = location_quantity.total_committed_quantity / factor;\r\n break;\r\n default:\r\n convertedValue = (sourceKey == 'sales_price' || sourceKey == 'rental_base_price' || sourceKey == 'cost') \r\n ? factor !== 0 ? (Number(sourceValue) * factor) || 0 : 0 \r\n : factor !== 0 ? (Number(location_quantity[sourceKey]) / factor) || 0 : 0;\r\n }\r\n } else {\r\n // Location not found, use 0\r\n convertedValue = 0;\r\n }\r\n } else {\r\n // Default conversion logic\r\n convertedValue = (sourceKey == 'sales_price' || sourceKey == 'rental_base_price' || sourceKey == 'cost') \r\n ? factor !== 0 ? (Number(sourceValue) * factor) || 0 : 0 \r\n : factor !== 0 ? (Number(sourceValue) / factor) || 0 : 0;\r\n }\r\n\r\n setValue(fieldPath, convertedValue);\r\n });\r\n }, [fieldMapping, sourceData, conversation_factor, fieldPrefix, setValue, shouldUpdate, active_location]);\r\n};\r\n\r\n","import React from 'react';\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({ theme }) => ({\r\n\tcolor: theme.palette?.theme.primary[500]\r\n}));\r\n\r\nconst LoaderContainer = styled(Box)(() => ({\r\n\tposition: 'fixed',\r\n\tdisplay: 'flex',\r\n\twidth: '100%',\r\n\theight: '100%',\r\n\tjustifyContent: 'center',\r\n\talignItems: 'center',\r\n\tbackgroundColor: '#ffffff96',\r\n\tzIndex: 1,\r\n\tleft: 0,\r\n\ttop: 0\r\n}));\r\n\r\nconst FormLoader = (props: CircularProgressProps) => {\r\n\treturn (\r\n\t\t<LoaderContainer>\r\n\t\t\t<Loader size={50} {...props} />\r\n\t\t</LoaderContainer>\r\n\t);\r\n};\r\n\r\nexport { FormLoader };\r\nexport default FormLoader;\r\n","import React from \"react\"\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({theme})=>({\r\n color: theme.palette?.theme.primary[500]\r\n}))\r\n\r\nconst PageLoader = (props:CircularProgressProps) => {\r\n\treturn <Box position=\"absolute\" left='50%' top=\"50%\">\r\n <Loader size={50} {...props}/>\r\n </Box>\r\n};\r\n\r\nexport { PageLoader };\r\nexport default PageLoader;\r\n","import { Operator, type Field, type RuleType } from \"react-querybuilder\";\n\nexport const validator = (r: RuleType) => !!r.value;\n\nconst defaultOperators: Operator[] = [\n { name: \"null\", label: \"is null\" },\n { name: \"notNull\", label: \"is not null\" },\n];\n\nconst textOperators: Operator[] = [\n { name: \"contains\", label: \"contains\" },\n { name: \"beginsWith\", label: \"begins with\" },\n { name: \"endsWith\", label: \"ends with\" },\n { name: \"doesNotContain\", label: \"does not contain\" },\n { name: \"doesNotBeginWith\", label: \"does not begin with\" },\n { name: \"doesNotEndWith\", label: \"does not end with\" },\n ...defaultOperators,\n];\n\nconst numberOperators: Operator[] = [\n { name: \"=\", label: \"equal to\" },\n { name: \"<\", label: \"less than\" },\n { name: \"<=\", label: \"less than or equal to\" },\n { name: \">\", label: \"greater than\" },\n { name: \">=\", label: \"greater than or equal to\" },\n ...defaultOperators,\n];\n\nconst selectOperators: Operator[] = [\n { name: \"in\", label: \"in\" },\n { name: \"notIn\", label: \"not in\" },\n ...defaultOperators,\n];\n\nconst dateOperators: Operator[] = [\n { name: \"=\", label: \"on\" },\n { name: \"!=\", label: \"not on\" },\n { name: \"<\", label: \"before\" },\n { name: \"<=\", label: \"on or before\" },\n { name: \">\", label: \"after\" },\n { name: \">=\", label: \"on or after\" },\n ...defaultOperators,\n];\n\nexport const fields: Field[] = [\n {\n name: \"Select\",\n label: \"Select\",\n valueEditorType: \"select\",\n operators: selectOperators,\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n ],\n },\n {\n name: \"role\",\n label: \"Role\",\n inputType: \"text\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"status\",\n label: \"Status\",\n valueEditorType: \"select\",\n operators: selectOperators,\n comparator: \"datatype\",\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n {\n name: \"enable\",\n label: \"Enable\",\n },\n {\n name: \"disabled\",\n label: \"Disabled\",\n },\n ],\n },\n {\n name: \"roleType\",\n label: \"Role Type\",\n valueEditorType: \"select\",\n operators: selectOperators,\n comparator: \"datatype\",\n values: [\n {\n name: \"Select\",\n label: \"Select\",\n },\n {\n name: \"admin\",\n label: \"Admin\",\n },\n {\n name: \"manager\",\n label: \"Manager\",\n },\n {\n name: \"executive\",\n label: \"Executive\",\n },\n {\n name: \"support\",\n label: \"Support\",\n },\n ],\n },\n {\n name: \"roleLevel\",\n label: \"Role level\",\n valueEditorType: \"text\",\n operators: numberOperators,\n comparator: \"datatype\",\n },\n {\n name: \"dateCreated\",\n label: \"Date Created\",\n operators: dateOperators,\n datatype: \"date\",\n inputType: \"date\",\n },\n {\n name: \"companyName\",\n label: \"Company Name\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"location\",\n label: \"Location\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"email\",\n label: \"Email\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n];\n\nexport const dynamicFields: Field[] = [\n {\n name: \"document\",\n label: \"Document\",\n inputType: \"text\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n },\n {\n name: \"filesize\",\n label: \"File size\",\n valueEditorType: \"text\",\n operators: numberOperators,\n comparator: \"datatype\",\n },\n // {\n // name: \"dateCreated\",\n // label: \"Date Created\",\n // operators: dateOperators,\n // datatype: \"date\",\n // inputType: \"date\",\n // },\n {\n name: \"owner\",\n label: \"Owner\",\n valueEditorType: \"text\",\n operators: textOperators,\n comparator: \"datatype\",\n }\n];\n\n","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface HorizontalBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(Math.abs(num));\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function HorizontalBarChart({ chart, currency }: HorizontalBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const data = useMemo(() => {\r\n if (!chart?.labels) return [];\r\n return chart.labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: chart.datasets?.[0]?.values?.[i] || 0,\r\n }));\r\n }, [chart]);\r\n\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n const maxAbsValue = useMemo(() => Math.max(...data.map(d => Math.abs(d.value))), [data]);\r\n const hasNegative = useMemo(() => data.some(d => d.value < 0), [data]);\r\n \r\n const yAxisWidth = hasNegative ? 100 : 90;\r\n const rightPadding = 90;\r\n const chartHeight = Math.max(data.length * 42 + 70, 230);\r\n const margin = { top: 15, right: rightPadding, bottom: 20, left: yAxisWidth };\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const xMax = maxAbsValue * 1.15;\r\n const x = d3.scaleLinear().domain([hasNegative ? -xMax : 0, xMax]).range([0, barWidth]);\r\n\r\n const y = d3.scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, barHeight])\r\n .padding(0.35);\r\n\r\n const chartGroup = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n if (hasNegative) {\r\n chartGroup\r\n .append(\"line\")\r\n .attr(\"x1\", x(0))\r\n .attr(\"x2\", x(0))\r\n .attr(\"y1\", 0)\r\n .attr(\"y2\", barHeight)\r\n .attr(\"stroke\", \"#9CA3AF\")\r\n .attr(\"stroke-width\", 1);\r\n }\r\n\r\n const xTicks = x.ticks(5).filter(t => t !== 0);\r\n chartGroup\r\n .selectAll(\".grid-line\")\r\n .data(xTicks)\r\n .enter()\r\n .append(\"line\")\r\n .attr(\"x1\", d => x(d))\r\n .attr(\"x2\", d => x(d))\r\n .attr(\"y1\", 0)\r\n .attr(\"y2\", barHeight)\r\n .attr(\"stroke\", \"#E5E7EB\")\r\n .attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup\r\n .selectAll(\".x-tick\")\r\n .data(xTicks)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => x(d))\r\n .attr(\"y\", barHeight + 16)\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"10px\")\r\n .attr(\"fill\", \"#6B7280\")\r\n .text(d => formatAxisValue(d, chartCurrency));\r\n\r\n chartGroup\r\n .selectAll(\".bar\")\r\n .data(data)\r\n .enter()\r\n .append(\"rect\")\r\n .attr(\"x\", d => d.value >= 0 ? x(0) : x(d.value))\r\n .attr(\"y\", d => y(d.name) || 0)\r\n .attr(\"width\", d => Math.abs(x(d.value) - x(0)))\r\n .attr(\"height\", y.bandwidth())\r\n .attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\")\r\n .attr(\"rx\", 3)\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"fill\", d => d.value >= 0 ? \"#3AA87A\" : \"#D14529\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${d.name}</strong><br/>${formatHover(d.value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function (event, d) {\r\n d3.select(this).attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"0\";\r\n }\r\n });\r\n\r\n chartGroup\r\n .selectAll(\".value-label\")\r\n .data(data)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => {\r\n if (d.value >= 0) {\r\n return x(d.value) + 6;\r\n } else {\r\n return x(0) + 6;\r\n }\r\n })\r\n .attr(\"y\", d => (y(d.name) || 0) + y.bandwidth() / 2)\r\n .attr(\"dy\", \"0.35em\")\r\n .attr(\"text-anchor\", \"start\")\r\n .attr(\"font-size\", \"9px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"fill\", \"#374151\")\r\n .text(d => formatBarLabel(d.value, chartCurrency));\r\n\r\n const yAxis = chartGroup\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(0,0)`)\r\n .call(d3.axisLeft(y).tickSize(0).tickFormat(d => truncateLabel(String(d), 15)));\r\n\r\n yAxis.selectAll(\"text\").attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\");\r\n yAxis.selectAll(\".domain\").remove();\r\n }, [data, chartCurrency, maxAbsValue, hasNegative, rightPadding, yAxisWidth, chartHeight, margin]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div\r\n ref={tooltipRef}\r\n style={{\r\n position: \"absolute\",\r\n backgroundColor: \"white\",\r\n padding: \"8px 12px\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\",\r\n fontSize: \"11px\",\r\n color: \"#374151\",\r\n opacity: 0,\r\n transition: \"opacity 0.15s\",\r\n pointerEvents: \"none\",\r\n zIndex: 10,\r\n border: \"1px solid #E5E7EB\",\r\n lineHeight: 1.4,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HorizontalBarChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface SimpleBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function SimpleBarChart({ chart, currency }: SimpleBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const data = useMemo(() => {\r\n if (!chart?.labels) return [];\r\n return chart.labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: chart.datasets?.[0]?.values?.[i] || 0,\r\n }));\r\n }, [chart]);\r\n\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n const showValueLabels = useMemo(() => data.length <= 6, [data]);\r\n const chartHeight = Math.max(data.length * 40 + 120, 220);\r\n const maxValue = useMemo(() => Math.max(...data.map((d) => Math.abs(d.value))), [data]);\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const margin = { top: 25, right: 12, bottom: 45, left: 50 };\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const hasNegative = data.some(d => d.value < 0);\r\n \r\n const padding = data.length > 5 ? 0.15 : 0.25;\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, barWidth])\r\n .padding(padding);\r\n\r\n const yMin = hasNegative ? Math.min(0, d3.min(data, d => d.value) || 0) : 0;\r\n const yMax = Math.max(0, d3.max(data, d => d.value) || 0);\r\n const y = d3.scaleLinear()\r\n .domain([yMin * 1.15, yMax * 1.15])\r\n .range([barHeight, 0]);\r\n\r\n const chartGroup = svg\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n const yTicks = y.ticks(4).filter(t => t !== 0);\r\n chartGroup\r\n .selectAll(\".grid-line\")\r\n .data(yTicks)\r\n .enter()\r\n .append(\"line\")\r\n .attr(\"x1\", 0)\r\n .attr(\"x2\", barWidth)\r\n .attr(\"y1\", d => y(d))\r\n .attr(\"y2\", d => y(d))\r\n .attr(\"stroke\", \"#E5E7EB\")\r\n .attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup\r\n .selectAll(\".y-tick\")\r\n .data(yTicks)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", -6)\r\n .attr(\"y\", d => y(d))\r\n .attr(\"dy\", \"0.35em\")\r\n .attr(\"text-anchor\", \"end\")\r\n .attr(\"font-size\", \"9px\")\r\n .attr(\"fill\", \"#6B7280\")\r\n .text(d => formatAxisValue(d, chartCurrency));\r\n\r\n if (hasNegative) {\r\n chartGroup\r\n .append(\"line\")\r\n .attr(\"x1\", 0)\r\n .attr(\"x2\", barWidth)\r\n .attr(\"y1\", y(0))\r\n .attr(\"y2\", y(0))\r\n .attr(\"stroke\", \"#9CA3AF\")\r\n .attr(\"stroke-width\", 1);\r\n }\r\n\r\n chartGroup\r\n .selectAll(\".bar\")\r\n .data(data)\r\n .enter()\r\n .append(\"rect\")\r\n .attr(\"x\", d => x(d.name) || 0)\r\n .attr(\"y\", d => d.value >= 0 ? y(d.value) : y(0))\r\n .attr(\"width\", x.bandwidth())\r\n .attr(\"height\", d => Math.abs(y(d.value) - y(0)))\r\n .attr(\"fill\", d => d.value >= 0 ? \"#4AC08C\" : \"#E85D3A\")\r\n .attr(\"rx\", 3)\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${d.name}</strong><br/>${formatHover(d.value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"0\";\r\n }\r\n });\r\n\r\n if (showValueLabels) {\r\n chartGroup\r\n .selectAll(\".value-label\")\r\n .data(data)\r\n .enter()\r\n .append(\"text\")\r\n .attr(\"x\", d => (x(d.name) || 0) + x.bandwidth() / 2)\r\n .attr(\"y\", d => d.value >= 0 ? y(d.value) - 5 : y(d.value) + 12)\r\n .attr(\"text-anchor\", \"middle\")\r\n .attr(\"font-size\", \"8px\")\r\n .attr(\"font-weight\", \"600\")\r\n .attr(\"fill\", \"#374151\")\r\n .text(d => formatBarLabel(d.value, chartCurrency));\r\n }\r\n\r\n const xAxis = chartGroup\r\n .append(\"g\")\r\n .attr(\"transform\", `translate(0,${barHeight})`)\r\n .call(d3.axisBottom(x).tickSize(0));\r\n\r\n xAxis.selectAll(\"text\").attr(\"font-size\", \"9px\").attr(\"fill\", \"#6B7280\");\r\n xAxis.selectAll(\".domain\").remove();\r\n\r\n if (data.length > 5) {\r\n xAxis.selectAll(\"text\").each(function () {\r\n const text = d3.select(this);\r\n text.text(truncateLabel(text.text(), 8));\r\n });\r\n }\r\n }, [data, chartCurrency, showValueLabels, chartHeight, maxValue]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div\r\n ref={tooltipRef}\r\n style={{\r\n position: \"absolute\",\r\n backgroundColor: \"white\",\r\n padding: \"8px 12px\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\",\r\n fontSize: \"11px\",\r\n color: \"#374151\",\r\n opacity: 0,\r\n transition: \"opacity 0.15s\",\r\n pointerEvents: \"none\",\r\n zIndex: 10,\r\n border: \"1px solid #E5E7EB\",\r\n lineHeight: 1.4,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SimpleBarChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ values?: number[] }>;\r\n currency?: string;\r\n unit?: string;\r\n center_text?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface DonutChartProps {\r\n chart: ChartData;\r\n}\r\n\r\nconst PIE_COLORS = [\"#4AC08C\", \"#3AA87A\", \"#2E8E68\", \"#247457\", \"#7FD3AE\", \"#C9EFE0\", \"#6BBF8A\", \"#5AAF7C\"];\r\n\r\nconst formatValue = (num: number, currency?: string, unit?: string) => {\r\n if (unit) return `${num} ${unit}`;\r\n if (currency) {\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${currency} ${(absNum / 1_000_000).toFixed(2)}M`;\r\n if (absNum >= 1_000) return `${currency} ${(absNum / 1_000).toFixed(1)}K`;\r\n return `${currency} ${num}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst formatHoverValue = (num: number, currency?: string, unit?: string) => {\r\n if (unit) return `${num} ${unit}`;\r\n if (currency) {\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${currency} ${(absNum / 1_000_000).toFixed(2)}M`;\r\n if (absNum >= 1_000) return `${currency} ${(absNum / 1_000).toFixed(1)}K`;\r\n return `${currency} ${num}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst formatCenterNumber = (num: number) => {\r\n if (num >= 1_000_000) return (num / 1_000_000).toFixed(1) + \"M\";\r\n if (num >= 1_000) return (num / 1_000).toFixed(1) + \"K\";\r\n return String(num);\r\n};\r\n\r\nexport function DonutChart({ chart }: DonutChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const labels = chart?.labels || [];\r\n const dataset = chart?.datasets?.[0] || {};\r\n const values = dataset?.values || [];\r\n const chartCurrency = chart?.currency || \"\";\r\n const unit = chart?.unit || \"\";\r\n\r\n const total = useMemo(() => values.reduce((sum, v) => sum + (v || 0), 0), [values]);\r\n\r\n const data = useMemo(() => labels.map((label: string, i: number) => ({\r\n name: label,\r\n value: values[i] || 0,\r\n pct: total > 0 ? (values[i] || 0) / total * 100 : 0,\r\n })), [labels, values, total]);\r\n\r\n const sortedData = useMemo(() => [...data].sort((a, b) => b.value - a.value), [data]);\r\n\r\n const chartHeight = 200;\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const parentWidth = containerRef.current?.clientWidth || 300;\r\n const chartSize = Math.min(parentWidth * 0.6, 170);\r\n const margin = 4;\r\n const outerRadius = chartSize / 2 - margin;\r\n const innerRadius = outerRadius - 16;\r\n\r\n const g = svg.append(\"g\").attr(\"transform\", `translate(${chartSize / 2},${chartSize / 2})`);\r\n\r\n const pie = d3.pie<{ name: string; value: number; pct: number }>().value((d) => d.value).sort(null).padAngle(0.02);\r\n const arc = d3.arc<d3.PieArcDatum<{ name: string; value: number; pct: number }>>()\r\n .innerRadius(innerRadius).outerRadius(outerRadius).cornerRadius(3);\r\n\r\n g.selectAll(\"path\").data(pie(data)).enter().append(\"path\")\r\n .attr(\"d\", arc).attr(\"fill\", (_, i) => PIE_COLORS[i % PIE_COLORS.length]).style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event, d) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n const hoverValue = formatHoverValue(d.data.value, chartCurrency, unit);\r\n const formatForHover = (num: number, curr?: string) => {\r\n if (!curr) return String(num);\r\n if (Math.abs(num) >= 1_000_000) return `${(Math.abs(num) / 1_000_000).toFixed(2)}M ${curr}`;\r\n if (Math.abs(num) >= 1_000) return `${(Math.abs(num) / 1_000).toFixed(1)}K ${curr}`;\r\n return `${num} ${curr}`;\r\n };\r\n tooltipRef.current.innerHTML = `<strong>${d.data.name}</strong><br/>${formatForHover(d.data.value, chartCurrency)}<br/>(${d.data.pct.toFixed(1)}%)`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) tooltipRef.current.style.opacity = \"0\";\r\n });\r\n\r\n const formattedCenter = formatCenterNumber(total);\r\n\r\n g.append(\"text\").attr(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\")\r\n .attr(\"font-size\", formattedCenter.length > 8 ? \"10px\" : \"12px\").attr(\"font-weight\", \"600\").attr(\"fill\", \"#1F2125\")\r\n .text(formattedCenter);\r\n }, [data, chartCurrency, unit, chart, total]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\" >{chart?.title || \"\"}</p>\r\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"50px\", width: \"100%\" }}>\r\n <div style={{ position: \"relative\", display: \"flex\", justifyContent: \"center\", width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={180} style={{ maxWidth: \"180px\" }}></svg>\r\n <div ref={tooltipRef} style={{\r\n position: \"absolute\", backgroundColor: \"white\", padding: \"8px 12px\", borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\", fontSize: \"11px\", color: \"#374151\", opacity: 0,\r\n transition: \"opacity 0.15s\", pointerEvents: \"none\", zIndex: 10, border: \"1px solid #E5E7EB\", lineHeight: 1.4,\r\n }} />\r\n </div>\r\n <div style={{ display: \"flex\", flexWrap: \"wrap\", justifyContent: \"center\", gap: \"6px 12px\", maxWidth: \"100%\" }}>\r\n {sortedData.map((item, i) => (\r\n <div key={item.name} style={{ display: \"flex\", alignItems: \"center\", gap: \"5px\", padding: \"4px 8px\", borderRadius: \"4px\", cursor: \"pointer\" }}>\r\n <div style={{ width: \"9px\", height: \"9px\", borderRadius: \"2px\", backgroundColor: PIE_COLORS[i % PIE_COLORS.length], flexShrink: 0 }} />\r\n <span style={{ fontSize: \"10px\", color: \"#374151\", maxWidth: \"85px\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }} title={item.name}>{item.name}</span>\r\n <span style={{ fontSize: \"10px\", color: \"#6B7280\", fontWeight: \"500\", flexShrink: 0 }}>{item.pct.toFixed(0)}%</span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default DonutChart;","import React, { useRef, useEffect, useMemo } from \"react\";\r\nimport * as d3 from \"d3\";\r\n\r\ninterface ChartData {\r\n title?: string;\r\n labels?: string[];\r\n datasets?: Array<{ label?: string; values?: number[] }>;\r\n currency?: string;\r\n chart_type?: string;\r\n}\r\n\r\ninterface GroupedBarChartProps {\r\n chart: ChartData;\r\n currency?: string;\r\n}\r\n\r\nconst PIE_COLORS = [\"#4AC08C\", \"#3AA87A\", \"#2E8E68\", \"#247457\", \"#7FD3AE\", \"#C9EFE0\", \"#6BBF8A\", \"#5AAF7C\"];\r\n\r\nconst formatAxisValue = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const absNum = Math.abs(num);\r\n if (absNum >= 1_000_000) return `${(absNum / 1_000_000).toFixed(1)}M`;\r\n if (absNum >= 1_000) return `${(absNum / 1_000).toFixed(1)}K`;\r\n return String(absNum);\r\n};\r\n\r\nconst formatBarLabel = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n return num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n};\r\n\r\nconst formatHover = (num: number, currency?: string) => {\r\n if (!currency) return String(num);\r\n const suffix = Math.abs(num) >= 1_000_000 ? \"M\" : Math.abs(num) >= 1_000 ? \"K\" : \"\";\r\n const absNum = Math.abs(num);\r\n const shortNum = absNum >= 1_000_000 ? (absNum / 1_000_000).toFixed(1) : absNum >= 1_000 ? (absNum / 1_000).toFixed(1) : String(absNum);\r\n const numStr = num < 0 ? `-${shortNum}${suffix}` : `${shortNum}${suffix}`;\r\n return `${numStr} ${currency}`;\r\n};\r\n\r\nconst truncateLabel = (str: string, maxLen: number) => {\r\n if (str.length <= maxLen) return str;\r\n return str.slice(0, maxLen - 2) + \"…\";\r\n};\r\n\r\nexport function GroupedBarChart({ chart, currency }: GroupedBarChartProps) {\r\n const svgRef = useRef<SVGSVGElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n\r\n const labels = chart?.labels || [];\r\n const datasets = chart?.datasets || [];\r\n const chartCurrency = currency || chart?.currency || \"AED\";\r\n\r\n const data = useMemo(() => {\r\n return labels.map((label: string, i: number) => {\r\n const obj: Record<string, number | string> = { name: label };\r\n datasets.forEach((ds, idx) => { obj[ds.label || `dataset_${idx}`] = ds.values?.[i] ?? 0; });\r\n return obj;\r\n });\r\n }, [labels, datasets]);\r\n\r\n const dataKeys = useMemo(() => datasets.map((ds) => ds.label || `dataset_${datasets.indexOf(ds)}`), [datasets]);\r\n const showValueLabels = useMemo(() => data.length * datasets.length <= 12, [data, datasets]);\r\n const needRotate = useMemo(() => labels.some((l) => l.length > 6), [labels]);\r\n \r\n const chartHeight = Math.max(data.length * 48 + datasets.length * 35 + 150, 300);\r\n const margin = { top: 25, right: 15, bottom: needRotate ? 100 : 80, left: 60 };\r\n\r\n useEffect(() => {\r\n if (!svgRef.current || !data.length) return;\r\n\r\n const svg = d3.select(svgRef.current);\r\n svg.selectAll(\"*\").remove();\r\n\r\n const containerWidth = svgRef.current.parentElement?.clientWidth || 300;\r\n const width = Math.max(containerWidth - 20, 200);\r\n const height = chartHeight;\r\n const barWidth = width - margin.left - margin.right;\r\n const barHeight = height - margin.top - margin.bottom;\r\n\r\n const x0 = d3.scaleBand().domain(data.map((d) => d.name as string)).range([0, barWidth]).padding(0.2);\r\n const x1 = d3.scaleBand().domain(dataKeys).range([0, x0.bandwidth()]).padding(0.1);\r\n\r\n const maxValue = d3.max(data, (d) => Math.max(...dataKeys.map((key) => Math.abs(Number(d[key])) || 0)) || 0);\r\n const y = d3.scaleLinear().domain([0, maxValue * 1.25]).range([barHeight, 0]);\r\n\r\n const chartGroup = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n const yTicks = y.ticks(4).filter(t => t > 0);\r\n chartGroup.selectAll(\".grid-line\").data(yTicks).enter()\r\n .append(\"line\").attr(\"x1\", 0).attr(\"x2\", barWidth).attr(\"y1\", d => y(d)).attr(\"y2\", d => y(d))\r\n .attr(\"stroke\", \"#E5E7EB\").attr(\"stroke-dasharray\", \"3,3\");\r\n\r\n chartGroup.selectAll(\".y-tick\").data(yTicks).enter()\r\n .append(\"text\").attr(\"x\", -6).attr(\"y\", d => y(d)).attr(\"dy\", \"0.35em\").attr(\"text-anchor\", \"end\")\r\n .attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\").text(d => formatAxisValue(d, chartCurrency));\r\n\r\n data.forEach((d) => {\r\n const g = chartGroup.append(\"g\").attr(\"transform\", `translate(${x0(d.name as string)},0)`);\r\n dataKeys.forEach((key, i) => {\r\n const value = Number(d[key]) || 0;\r\n const absValue = Math.abs(value);\r\n const barY = y(absValue);\r\n g.append(\"rect\").attr(\"x\", x1(key) || 0).attr(\"y\", barY).attr(\"width\", x1.bandwidth())\r\n .attr(\"height\", barHeight - barY).attr(\"fill\", PIE_COLORS[i % PIE_COLORS.length]).attr(\"rx\", 3).style(\"cursor\", \"pointer\")\r\n .on(\"mouseenter\", function (event) {\r\n d3.select(this).attr(\"opacity\", \"0.85\");\r\n if (tooltipRef.current) {\r\n tooltipRef.current.style.opacity = \"1\";\r\n tooltipRef.current.innerHTML = `<strong>${key}</strong> - ${d.name}<br/>${formatHover(value, chartCurrency)}`;\r\n tooltipRef.current.style.left = `${event.offsetX + 15}px`;\r\n tooltipRef.current.style.top = `${event.offsetY - 10}px`;\r\n }\r\n })\r\n .on(\"mouseleave\", function () {\r\n d3.select(this).attr(\"opacity\", \"1\");\r\n if (tooltipRef.current) tooltipRef.current.style.opacity = \"0\";\r\n });\r\n\r\n if (showValueLabels && x1.bandwidth() > 28 && absValue > 0) {\r\n g.append(\"text\").attr(\"x\", (x1(key) || 0) + x1.bandwidth() / 2).attr(\"y\", barY - 5)\r\n .attr(\"text-anchor\", \"middle\").attr(\"font-size\", \"8px\").attr(\"font-weight\", \"600\").attr(\"fill\", \"#374151\")\r\n .text(formatBarLabel(value, chartCurrency));\r\n }\r\n });\r\n });\r\n\r\n const xAxis = chartGroup.append(\"g\").attr(\"transform\", `translate(0,${barHeight})`)\r\n .call(d3.axisBottom(x0).tickSize(0).tickFormat((d) => needRotate ? truncateLabel(String(d), 12) : truncateLabel(String(d), 14)));\r\n xAxis.selectAll(\"text\").attr(\"font-size\", \"10px\").attr(\"fill\", \"#6B7280\");\r\n if (needRotate) xAxis.selectAll(\"text\").attr(\"transform\", \"rotate(-30)\").attr(\"text-anchor\", \"end\");\r\n xAxis.selectAll(\".domain\").remove();\r\n }, [data, dataKeys, chartCurrency, showValueLabels, needRotate, chartHeight, margin]);\r\n\r\n return (\r\n <div className=\"ai-summary-panel__card\" ref={containerRef}>\r\n <p className=\"ai-summary-panel__card-title\">{chart?.title || \"\"}</p>\r\n <div style={{ display: \"flex\", gap: \"12px\", flexWrap: \"wrap\", marginBottom: \"10px\" }}>\r\n {dataKeys.map((key, i) => (\r\n <div key={key} style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n <div style={{ width: \"10px\", height: \"10px\", borderRadius: \"2px\", backgroundColor: PIE_COLORS[i % PIE_COLORS.length] }} />\r\n <span style={{ fontSize: \"10px\", color: \"#6B7280\" }}>{key}</span>\r\n </div>\r\n ))}\r\n </div>\r\n <div style={{ position: \"relative\", overflow: \"visible\", height: chartHeight, width: \"100%\" }}>\r\n <svg ref={svgRef} width=\"100%\" height={chartHeight} style={{ display: \"block\" }}></svg>\r\n <div ref={tooltipRef} style={{\r\n position: \"absolute\", backgroundColor: \"white\", padding: \"8px 12px\", borderRadius: \"6px\",\r\n boxShadow: \"0 4px 12px rgba(0,0,0,0.12)\", fontSize: \"11px\", color: \"#374151\", opacity: 0,\r\n transition: \"opacity 0.15s\", pointerEvents: \"none\", zIndex: 10, border: \"1px solid #E5E7EB\", lineHeight: 1.4,\r\n }} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default GroupedBarChart;","import { useState, useEffect, useMemo } from \"react\";\r\nimport {\r\n Sparkles,\r\n ChevronDown,\r\n ChevronUp,\r\n Copy,\r\n Check,\r\n AlertTriangle,\r\n TrendingUp,\r\n Clock,\r\n} from \"lucide-react\";\r\n\r\nimport { HorizontalBarChart } from \"./chart/horizontal-bar-chart\";\r\nimport { SimpleBarChart } from \"./chart/simple-bar-chart\";\r\nimport { DonutChart } from \"./chart/donut-chart\";\r\nimport { GroupedBarChart } from \"./chart/grouped-bar-chart\";\r\n\r\nimport \"./ai-summary.scss\";\r\n\r\nexport interface AISummaryPanelProps {\r\n aiSummaryData?: any;\r\n isLoading?: boolean;\r\n onExpand?: () => void;\r\n}\r\n\r\nfunction ApiChartsRenderer({ charts, currency = \"AED\" }: { charts: any[]; currency?: string }) {\r\n const chartMap: Record<string, any> = {\r\n bar: SimpleBarChart,\r\n horizontal_bar: HorizontalBarChart,\r\n donut: DonutChart,\r\n grouped_bar: GroupedBarChart,\r\n };\r\n\r\n return (\r\n <div className=\"ai-summary-panel__visuals\">\r\n {charts.map((chart: any, i: number) => {\r\n const Component = chartMap[chart.chart_type];\r\n return Component ? (\r\n <Component key={i} chart={chart} currency={currency} />\r\n ) : null;\r\n })}\r\n </div>\r\n );\r\n}\r\n\r\nfunction useTypingEffect(text: string, speed = 18) {\r\n const [displayed, setDisplayed] = useState(\"\");\r\n const [done, setDone] = useState(false);\r\n\r\n useEffect(() => {\r\n let i = 0;\r\n const interval = setInterval(() => {\r\n i++;\r\n setDisplayed(text.slice(0, i));\r\n\r\n if (i >= text.length) {\r\n clearInterval(interval);\r\n setDone(true);\r\n }\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, [text, speed]);\r\n\r\n return { displayed, done };\r\n}\r\n\r\nexport function AISummaryPanel(props: AISummaryPanelProps = {}) {\r\n const { aiSummaryData, isLoading, onExpand } = props;\r\n\r\n const dynamicData = useMemo(() => {\r\n if (!aiSummaryData) return { summaryText: \"\", insights: [], charts: [] };\r\n\r\n const insights = (aiSummaryData.flags || []).map((flag: any) => ({\r\n icon:\r\n flag.severity === \"critical\"\r\n ? AlertTriangle\r\n : flag.severity === \"warning\"\r\n ? Clock\r\n : TrendingUp,\r\n text: flag.message,\r\n title:\r\n flag.severity === \"critical\"\r\n ? \"Critical\"\r\n : flag.severity === \"warning\"\r\n ? \"Warning\"\r\n : \"Info\",\r\n color:\r\n flag.severity === \"critical\"\r\n ? \"#E85D3A\"\r\n : flag.severity === \"warning\"\r\n ? \"#D97706\"\r\n : \"#059669\",\r\n }));\r\n\r\n return {\r\n summaryText: aiSummaryData.summary || \"\",\r\n insights,\r\n charts: aiSummaryData.charts || [],\r\n currency: aiSummaryData?.charts?.[0]?.currency || \"AED\",\r\n };\r\n }, [aiSummaryData]);\r\n\r\n const [expanded, setExpanded] = useState(false);\r\n const [copied, setCopied] = useState(false);\r\n const [insightsVisible, setInsightsVisible] = useState(false);\r\n\r\n const { displayed, done } = useTypingEffect(dynamicData.summaryText, 12);\r\n\r\n useEffect(() => {\r\n if (done) {\r\n setTimeout(() => setInsightsVisible(true), 200);\r\n }\r\n }, [done]);\r\n\r\n function handleCopy() {\r\n navigator.clipboard.writeText(dynamicData.summaryText);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n\r\n return (\r\n <div className=\"ai-summary-panel\">\r\n {!expanded && (\r\n <button\r\n onClick={() => {\r\n setExpanded(true);\r\n onExpand?.();\r\n }}\r\n className=\"ai-summary-panel__collapsed-toggle\"\r\n disabled={isLoading}\r\n >\r\n <div className=\"ai-summary-panel__collapsed-toggle-icon\">\r\n {isLoading ? (\r\n <div className=\"ai-summary-panel__loading-spinner\" />\r\n ) : (\r\n <Sparkles />\r\n )}\r\n </div>\r\n\r\n <span className=\"ai-summary-panel__collapsed-toggle-title\">\r\n AI Summary\r\n </span>\r\n\r\n <span className=\"ai-summary-panel__collapsed-toggle-subtitle\">\r\n {isLoading ? \"Generating insights...\" : \"Click to expand insights\"}\r\n </span>\r\n\r\n {!isLoading && (\r\n <ChevronDown className=\"ai-summary-panel__collapsed-toggle-chevron\" />\r\n )}\r\n </button>\r\n )}\r\n\r\n {expanded && (\r\n <div className=\"ai-summary-panel__expanded\">\r\n <div className=\"ai-summary-panel__header\">\r\n <div className=\"ai-summary-panel__header-left\">\r\n <div className=\"ai-summary-panel__header-icon\">\r\n <Sparkles />\r\n </div>\r\n <span className=\"ai-summary-panel__header-title\">\r\n AI Summary\r\n </span>\r\n <span className=\"ai-summary-panel__header-badge\">Beta</span>\r\n </div>\r\n\r\n <div className=\"ai-summary-panel__header-actions\">\r\n <button\r\n onClick={handleCopy}\r\n className={`ai-summary-panel__header-btn ${\r\n copied ? \"copied\" : \"\"\r\n }`}\r\n >\r\n {copied ? <Check /> : <Copy />}\r\n </button>\r\n\r\n <button\r\n onClick={() => setExpanded(false)}\r\n className=\"ai-summary-panel__header-btn\"\r\n >\r\n <ChevronUp />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"ai-summary-panel__body\">\r\n {isLoading && (\r\n <div className=\"ai-summary-panel__loading\">\r\n <div className=\"ai-summary-panel__loading-spinner-large\" />\r\n <span className=\"ai-summary-panel__loading-text\">\r\n Generating AI insights...\r\n </span>\r\n </div>\r\n )}\r\n\r\n {!isLoading && (\r\n <p className=\"ai-summary-panel__summary\">\r\n {displayed}\r\n {!done && (\r\n <span className=\"ai-summary-panel__summary-cursor\" />\r\n )}\r\n </p>\r\n )}\r\n\r\n {dynamicData.charts.length > 0 && insightsVisible && (\r\n <ApiChartsRenderer\r\n charts={dynamicData.charts}\r\n currency={dynamicData.currency}\r\n />\r\n )}\r\n\r\n {insightsVisible && (\r\n <div className=\"ai-summary-panel__insights\">\r\n {dynamicData.insights.map((insight: any, i: number) => (\r\n <div\r\n key={i}\r\n className={`ai-summary-panel__insight-chip ai-summary-panel__insight-chip--${insight.title?.toLowerCase() || 'info'}`}\r\n >\r\n <insight.icon style={{ color: insight.color }} />\r\n <span className=\"ai-summary-panel__insight-chip-title\">\r\n {insight.title}\r\n </span>\r\n <span className=\"ai-summary-panel__insight-chip-text\">\r\n — {insight.text}\r\n </span>\r\n <svg className=\"ai-summary-panel__insight-chip-arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 18l6-6-6-6\" />\r\n </svg>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}","import React from 'react';\n\nimport { Box } from '@mui/material';\nimport Timeline from '@mui/lab/Timeline';\nimport TimelineItem from '@mui/lab/TimelineItem';\nimport TimelineSeparator from '@mui/lab/TimelineSeparator';\nimport TimelineConnector from '@mui/lab/TimelineConnector';\nimport TimelineContent from '@mui/lab/TimelineContent';\nimport TimelineDot from '@mui/lab/TimelineDot';\nimport './activity-log.scss';\nimport Typography from '../typography/typography';\nimport dayjs from 'dayjs';\nimport formatText from '../../utils/format-text';\nimport { useTranslation } from 'react-i18next';\n\nexport const ActivityTag = (props: any) => {\n\tconst { t } = useTranslation();\n\tconst { data } = props;\n\n\tconst formatDateTime = (date: Date): string => {\n\t\tconst formattedDate = dayjs(date).format('DD MMM, YYYY');\n\t\tconst formattedTime = dayjs(date).format('HH:mm');\n\t\treturn `${formattedDate} • ${formattedTime}`;\n\t};\n\n\tconst actions = {\n\t\tview: t('common.viewed_text'),\n\t\tdelete: t('common.deleted_text'),\n\t\tcreate: t('common.created_text'),\n\t\tupdate: t('common.updated_text')\n\t};\n\treturn (\n\t\t// <Box position='relative'>\n\t\t<Box>\n\t\t\t<Timeline className='Timeline'>\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\tpadding: '16px'\n\t\t\t\t\t}}\n\t\t\t\t\tclassName='box-class'>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t{t('common.activities_label')}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\theight: 400,\n\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\tgap: 1.5,\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\tflexDirection: 'column'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t{data?.map((item: any, index: number) => (\n\t\t\t\t\t\t\t<div className='Timeline--Activity'>\n\t\t\t\t\t\t\t\t<TimelineItem key={index}>\n\t\t\t\t\t\t\t\t\t<TimelineSeparator>\n\t\t\t\t\t\t\t\t\t\t<TimelineDot\n\t\t\t\t\t\t\t\t\t\t\tcolor='primary'\n\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: '#D3D3D4' }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{data.length - 1 !== index && <TimelineConnector />}\n\t\t\t\t\t\t\t\t\t</TimelineSeparator>\n\t\t\t\t\t\t\t\t\t<TimelineContent className='Timeline--Content'>\n\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\t\t\t\t\tclassName='Timeline--ActivityLogItem'>\n\t\t\t\t\t\t\t\t\t\t\t<b>{formatText(item.username)}</b> {actions[item.action]}{' '}\n\t\t\t\t\t\t\t\t\t\t\t<b>{formatText(item.resource?.replace('_', ' '))}</b>\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\t\t\t\t\tclassName='Timeline--ActivityLogItem'>\n\t\t\t\t\t\t\t\t\t\t\t{formatDateTime(item?.created_at)}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t</TimelineContent>\n\t\t\t\t\t\t\t\t</TimelineItem>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t</Timeline>\n\t\t</Box>\n\t\t// </Box>\n\t);\n};\n\nexport default ActivityTag;\n","import { useTranslation } from 'react-i18next';\nimport DropdownButton from '../dropdown-button/dropdown-button';\nimport QuickApprovalModal from '../quick-approval-modal/quick-approval-modal';\nimport { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { enqueueSnackbar } from 'notistack';\nimport {apiHelper} from '../../hooks/apiHelper';\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\nexport const ApprovalWrapper = ({\n\tdata,\n\taddApprover,\n\tfetchApi,\n\tshowAcceptOrReject,\n\tmoduleIdKey,\n\tmoduleId,\n\tsuccessMessage,\n\tshowSubmitBtn,\n\tupdateApi,\n\tapprovalDetails,\n\ttitle\n}: any) => {\n\t//Translations\n\tconst { t } = useTranslation();\n\n\t//Redux\n\tconst dispatch = useDispatch();\n\n\t//Local State\n\tconst [isUpdatingApproval, setIsUpdatingApproval] = useState(false);\n\tconst [openQuickApprovalModal, setOpenQuickApprovalModal] = useState(false);\n\tconst [approvalToAcceptOrReject, setApprovalToAcceptOrReject] =\n\t\tuseState<string>('');\n\n\t//Handlers\n\n\tconst FetchApprovalDetails = () => {\n\t\tenqueueSnackbar(t(successMessage));\n\t\tfetchApi();\n\t};\n\tconst handleSubmitForApproval = async (\n\t\ttype: 'submit_for_approval' | 'quick_approval',\n\t\tapprovers?: number[]\n\t) => {\n\t\tif (data) {\n\t\t\tsetIsUpdatingApproval(true);\n\t\t\tconst payload = {\n\t\t\t\t[moduleIdKey]: moduleId,\n\t\t\t\ttype,\n\t\t\t\t...(approvers && approvers?.length && { approver_id: approvers })\n\t\t\t};\n\n\t\t\tconst response = await dispatch(addApprover(payload));\n\n\t\t\tsetIsUpdatingApproval(false);\n\t\t\tapiHelper(response, () => FetchApprovalDetails());\n\t\t}\n\t};\n\tconst handleApprovalAcceptOrReject = async () => {\n\t\tif (approvalDetails?.id && approvalToAcceptOrReject) {\n\t\t\tconst payload = {\n\t\t\t\tid: approvalDetails?.id,\n\t\t\t\t[moduleIdKey]: moduleId,\n\t\t\t\tstatus: approvalToAcceptOrReject\n\t\t\t};\n\t\t\tsetIsUpdatingApproval(true);\n\t\t\tconst response = await dispatch(updateApi(payload));\n\t\t\tsetIsUpdatingApproval(false);\n\t\t\tconst rStatus = approvalToAcceptOrReject;\n\t\t\tsetApprovalToAcceptOrReject('');\n\t\t\tapiHelper(response, () => fetchApi());\n\t\t\tif (response.meta.requestStatus === 'fulfilled') {\n\t\t\t\tconst msg = `${title} ${rStatus === 'Approved' ? t('common.accepted') : t('common.rejected')}`;\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t}\n\t};\n\treturn (\n\t\t<>\n\t\t\t{(showSubmitBtn || data?.status === 'Rejected') && (\n\t\t\t\t<DropdownButton\n\t\t\t\t\tisMenuThirdItemDisabled={true}\n\t\t\t\t\tonClick={() => handleSubmitForApproval('submit_for_approval')}\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.submitForApproval'),\n\t\t\t\t\t\t\tcallback: () => handleSubmitForApproval('submit_for_approval')\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.quickApproval'),\n\t\t\t\t\t\t\tcallback: () => setOpenQuickApprovalModal(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t]}\n\t\t\t\t\tloading={isUpdatingApproval}>\n\t\t\t\t\t{data?.status === 'Rejected'\n\t\t\t\t\t\t? t('common.reSubmit')\n\t\t\t\t\t\t: t('common.submit')}\n\t\t\t\t</DropdownButton>\n\t\t\t)}\n\t\t\t<QuickApprovalModal\n\t\t\t\tisOpen={openQuickApprovalModal}\n\t\t\t\tsetIsOpen={() => setOpenQuickApprovalModal(false)}\n\t\t\t\tonConfirm={(approverIds) =>\n\t\t\t\t\thandleSubmitForApproval('quick_approval', approverIds)\n\t\t\t\t}\n\t\t\t\tisProcessing={isUpdatingApproval}\n\t\t\t/>\n\t\t\t<ConfirmPopUp\n\t\t\t\topen={Boolean(approvalToAcceptOrReject)}\n\t\t\t\tonClose={() => setApprovalToAcceptOrReject('')}\n\t\t\t\tonConfirm={handleApprovalAcceptOrReject}\n\t\t\t\ttitle={`${approvalToAcceptOrReject} request`}\n\t\t\t\tdescription={`Are you sure you want to ${approvalToAcceptOrReject} ${title} : ${data?.id} ?`}\n\t\t\t\tbuttonTexts={{\n\t\t\t\t\tconfirm: t('common.submit'),\n\t\t\t\t\tcancel: t('common.cancel')\n\t\t\t\t}}\n\t\t\t\tbuttonColors={{\n\t\t\t\t\tconfirm: approvalToAcceptOrReject === 'Rejected' ? 'error' : 'info'\n\t\t\t\t}}\n\t\t\t\tmodalType='info'\n\t\t\t\tloading={isUpdatingApproval}\n\t\t\t/>\n\t\t\t{showAcceptOrReject && (\n\t\t\t\t<DropdownButton\n\t\t\t\t\tisMenuThirdItemDisabled={true}\n\t\t\t\t\tonClick={() => setApprovalToAcceptOrReject('Approved')}\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.accept'),\n\t\t\t\t\t\t\tcallback: () => setApprovalToAcceptOrReject('Approved')\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('common.reject'),\n\t\t\t\t\t\t\tcallback: () => setApprovalToAcceptOrReject('Rejected'),\n\t\t\t\t\t\t\tcolor: 'theme.error.500'\n\t\t\t\t\t\t}\n\t\t\t\t\t]}\n\t\t\t\t\tloading={isUpdatingApproval}>\n\t\t\t\t\t{t('common.accept')}\n\t\t\t\t</DropdownButton>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nexport default ApprovalWrapper;\n","import { Box } from '@mui/material';\r\nimport * as d3 from 'd3';\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\ninterface IChartProps {\r\n data: { name: string, values: { month: string, value: number }[], isSmooth?: boolean }[],\r\n height: number,\r\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\r\n customLabelFormatter?: (value: number) => string;\r\n currency?: string;\r\n colors?: string[];\r\n customLegend: React.ReactNode\r\n}\r\n\r\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\r\n if (labelType === 'inPercent') {\r\n return `${d3.format(\".0%\")(num / 100)}`;\r\n } else if (labelType === 'inValue') {\r\n return `${symbol || ''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\r\n }\r\n return num.toString();\r\n};\r\n\r\nconst AreaLineChart = ({ data, height = 400, customLabelFormatter, yAxisLabelType = 'inValue', currency, colors, customLegend }: IChartProps) => {\r\n const svgRef = useRef<SVGSVGElement | null>(null);\r\n const wrapperRef = useRef<HTMLDivElement>(null);\r\n const [containerWidth, setContainerWidth] = useState<number>(0);\r\n const [tooltipData, setTooltipData] = useState<any>(null);\r\n useEffect(() => {\r\n const wrapper = wrapperRef.current;\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n const newWidth = entries[0].contentRect.width;\r\n setContainerWidth(newWidth);\r\n }\r\n });\r\n\r\n if (wrapper) {\r\n resizeObserver.observe(wrapper);\r\n }\r\n\r\n return () => {\r\n if (wrapper) {\r\n resizeObserver.unobserve(wrapper);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (containerWidth === 0) return; // Wait for the container width\r\n\r\n const margin = { top: 20, right: 30, bottom: 30, left: 40 };\r\n const width = containerWidth - margin.left - margin.right;\r\n const chartHeight = height - margin.top - margin.bottom;\r\n\r\n // Clear the SVG\r\n d3.select(svgRef.current).selectAll('*').remove();\r\n\r\n const svg = d3\r\n .select(svgRef.current)\r\n .attr('width', containerWidth)\r\n .attr('height', height)\r\n .append('g')\r\n .attr('transform', `translate(${margin.left},${margin.top})`);\r\n\r\n // Define scales\r\n const x = d3\r\n .scalePoint()\r\n .domain(data[0]?.values?.map(d => d.month)) // Assuming all datasets share the same x-domain\r\n .range([0, width]);\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .domain([0, d3.max(data, dataset => d3.max(dataset.values, d => d.value))!]) // Max value across all datasets\r\n .range([chartHeight, 0]);\r\n\r\n // Limit x-axis ticks dynamically based on width\r\n const numTicks = Math.floor(width / 80); // Adjust the factor (80) based on chart width\r\n const xAxis = d3.axisBottom(x).ticks(numTicks);\r\n\r\n const xAxisGroup = svg.append('g')\r\n .attr('transform', `translate(0,${chartHeight})`)\r\n .call(xAxis);\r\n\r\n xAxisGroup.selectAll(\"text\")\r\n .attr(\"transform\", \"translate(0, 10)\")\r\n .attr('color', '#8E8E93')\r\n .style(\"text-anchor\", \"middle\");\r\n\r\n // Y Axis\r\n const yAxis = svg.append('g')\r\n yAxis.append('g').attr('color', '#8E8E93').attr(\"transform\", `translate(-10,0)`)\r\n .call(d3.axisLeft(y).tickSize(-width).tickFormat((d: any) =>\r\n customLabelFormatter\r\n ? customLabelFormatter(d)\r\n : formatNumber(d, currency, yAxisLabelType)\r\n ).tickSizeOuter(0) as any)\r\n .selectAll('line')\r\n .attr('stroke-dasharray', '3,3')\r\n .attr('stroke', '#D3D3D4');\r\n\r\n xAxisGroup.selectAll(\".tick line\").remove();\r\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\r\n xAxisGroup.select(\".domain\").attr(\"stroke\", \"none\");\r\n\r\n // Define color scale for lines\r\n // const color = d3.scaleOrdinal(d3.schemeCategory10);\r\n\r\n // Line and area generators\r\n const line = (isSmooth: boolean) => d3.line<any>()\r\n .x(d => x(d.month)!)\r\n .y(d => y(d.value))\r\n .curve(isSmooth ? d3.curveMonotoneX : d3.curveLinear); // Conditionally smooth the line\r\n\r\n const area = d3.area<any>()\r\n .x(d => x(d.month)!)\r\n .y0(chartHeight)\r\n .y1(d => y(d.value));\r\n\r\n // Iterate over each dataset to create lines and areas\r\n data.forEach((dataset, i) => {\r\n // const datasetColor = color(i.toString());\r\n\r\n // Create gradient for each area\r\n const gradient = svg.append('defs')\r\n .append('linearGradient')\r\n .attr('id', `area-gradient-${i}`)\r\n .attr('x1', '0%')\r\n .attr('x2', '0%')\r\n .attr('y1', '0%')\r\n .attr('y2', '100%');\r\n\r\n gradient.append('stop')\r\n .attr('offset', '0%')\r\n .attr('stop-color', colors[i])\r\n .attr('stop-opacity', 0.4);\r\n\r\n gradient.append('stop')\r\n .attr('offset', '100%')\r\n .attr('stop-color', colors[i])\r\n .attr('stop-opacity', 0.1);\r\n\r\n // Append the area with gradient\r\n svg.append('path')\r\n .datum(dataset.values)\r\n .attr('fill', `url(#area-gradient-${i})`)\r\n .attr('d', area);\r\n\r\n // Append the line with smoothness condition\r\n svg.append('path')\r\n .datum(dataset.values)\r\n .attr('fill', 'none')\r\n .attr('stroke', colors[i])\r\n .attr('stroke-width', 2)\r\n .attr('d', line(dataset.isSmooth || false)); // Use smoothness from the dataset\r\n\r\n // Append circles for hover effect\r\n {\r\n dataset?.showCircle &&\r\n svg.selectAll(`circle-${i}`)\r\n .data(dataset.values)\r\n .enter()\r\n .append('circle')\r\n .attr('cx', d => x(d.month)!)\r\n .attr('cy', d => y(d.value))\r\n .attr('r', 5)\r\n .attr('fill', colors[i])\r\n .attr('stroke', '#fff')\r\n .style('cursor', 'pointer')\r\n .on('mouseover', function (event, d) {\r\n setTooltipData({\r\n x: `${event.pageX + 10}px`,\r\n y: `${event.pageY - 30}px`,\r\n content: `${dataset.name}: ${d.value}`\r\n });\r\n d3.select(this).transition().attr('r', 7).attr('fill', '#ff4500');\r\n })\r\n .on('mouseout', function () {\r\n setTooltipData(null);\r\n d3.select(this).transition().attr('r', 5).attr('fill', colors[i]);\r\n });\r\n }\r\n\r\n });\r\n\r\n }, [data, containerWidth, height, customLabelFormatter, yAxisLabelType, currency, colors, customLegend]);\r\n\r\n return (\r\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\r\n <div style={{ position: 'relative' }}>\r\n <svg ref={svgRef} width=\"100%\" height={height} />\r\n {\r\n customLegend &&\r\n customLegend\r\n\r\n }\r\n </div>\r\n {tooltipData &&\r\n <Box sx={{\r\n position: 'absolute',\r\n left: tooltipData.x,\r\n top: tooltipData.y,\r\n pointerEvents: 'none',\r\n backgroundColor: '#2EB273',\r\n zIndex: '99999',\r\n border: 'none',\r\n borderRadius: '3px',\r\n transform: 'translate(-50%, -100%)',\r\n padding: '2px 6px 2px 6px',\r\n gap: '10px'\r\n }}>\r\n <span style={{ fontSize: '16px', weight: '500', color: '#ffff' }}>\r\n {tooltipData.content}\r\n </span>\r\n </Box>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nexport { AreaLineChart };\r\nexport default AreaLineChart;\r\n","import React, { useRef, useEffect, useMemo } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface BarChartProps {\n data: DataPoint[];\n numOfLines?: number;\n width?: number;\n height?: number;\n line?: boolean;\n}\n\nconst formatNumber = (num: number) => {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num;\n};\n\nconst BarChart: React.FC<BarChartProps> = ({\n data,\n numOfLines = 5,\n width = 500,\n height = 300,\n line = false,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const maxValue = useMemo(() => {\n return Math.max(...data.map((d) => d.value));\n }, [data]);\n\n const yAxisMaxValue = useMemo(() => {\n return maxValue * 1.25;\n }, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = { top: 20, right: 20, bottom: 70, left: 40 };\n const barWidth = width - margin.left - margin.right;\n const barHeight = height - margin.top - margin.bottom;\n\n const mousemove = (event: MouseEvent, d: DataPoint) => {\n let xPosition = event.offsetX + margin.left - 25;\n const yPosition = event.offsetY + margin.top - 40;\n const tooltipWidth = tooltip.node()?.getBoundingClientRect()?.width;\n const rightOffset = tooltipWidth ? xPosition + tooltipWidth : xPosition;\n if (rightOffset > width) {\n xPosition = Math.floor(\n tooltipWidth ? xPosition - tooltipWidth - 20 : xPosition - 20,\n );\n }\n\n const text = `${d.label} - ${d.value}`;\n tooltip\n .attr(\"x\", xPosition)\n .attr(\"y\", yPosition)\n .style(\"opacity\", 9)\n .style(\"height\", text.length >= 16 ? 50 : 35);\n\n tooltipText.html(text);\n };\n\n const mouseleave = () => {\n tooltip.style(\"opacity\", 0);\n };\n\n const x = d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, barWidth])\n .padding(0.1);\n\n const y = d3.scaleLinear().domain([0, yAxisMaxValue]).range([barHeight, 0]);\n\n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n if (line) {\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", barWidth)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"gray\")\n .style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", 1);\n });\n }\n\n chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"rect\")\n .attr(\"class\", \"bar\")\n //@ts-expect-error not applicable\n .attr(\"x\", (d: any) => x(d.label))\n .attr(\"y\", (d: any) => y(d.value))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d: any) => barHeight - y(d.value))\n .style(\"fill\", \"#357AF6\")\n .style(\"opacity\", \"1\")\n .on(\"mousemove\", mousemove)\n .on(\"mouseleave\", mouseleave);\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisBottom(x) as any);\n\n xAxis.selectAll(\".tick line\").remove();\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3\n .axisLeft(y)\n .tickValues(yAxisTicks)\n //@ts-expect-error not applicable\n .tickFormat((d: any) => {\n return formatNumber(d);\n })\n .tickSizeOuter(0) as any,\n );\n\n yAxis.selectAll(\".tick line\").remove();\n\n const tooltip = svg\n .append(\"foreignObject\")\n .attr(\"class\", \"tooltip\")\n .attr(\"width\", 120)\n .attr(\"height\", 20)\n .style(\"opacity\", 0)\n .style(\"position\", \"absolute\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"none\")\n .style(\"box-shadow\", \"0rem 0rem 0.469rem 0rem rgba(0, 0, 0, 0.15)\")\n .style(\"border-radius\", \"0.313rem\")\n .style(\"padding\", \"0.625rem\")\n .style(\"font-size\", \"0.75rem\");\n\n const tooltipText = tooltip\n .append(\"xhtml:div\")\n .style(\"font-size\", \"0.75rem\")\n .style(\"color\", \"black\");\n }, [data, height, width, line, yAxisMaxValue, yAxisTicks]);\n\n return (\n <>\n <svg ref={svgRef} width={width} height={height}></svg>\n </>\n );\n};\n\nexport { BarChart };\nexport default BarChart;\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\nimport { Box, /* List, ListItem */ } from '@mui/material';\nimport Typography from '../../typography/typography';\nimport './barLineChart.scss';\n\ninterface DataPoint {\n [key: string]: string | number;\n}\n\ninterface ChartField {\n field: string;\n color: string;\n label: string;\n}\n\nexport interface IBarLineChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n margin?: { top: number; right: number; bottom: number; left: number };\n bars: ChartField[];\n lines: ChartField[];\n line?: boolean;\n showGrid?: boolean;\n barColors?: any[];\n lineColors?: any[];\n}\n\nconst BarLineChart: React.FC<IBarLineChartProps> = ({\n data,\n height = 400,\n margin = { top: 20, right: 30, bottom: 30, left: 50 },\n bars,\n lines,\n line = true,\n showGrid = true,\n barColors,\n lineColors\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [tooltip, setTooltip] = useState<{ x: number; y: number; content: DataPoint } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n const formatNumber = (num: number) => d3.format('.2s')(num).replace('k', 'K');\n\n const needsHorizontalScroll = data.length > bars.length;\n const minBarWidth = 60\n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minBarWidth, containerWidth)\n : containerWidth;\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, [])\n \n useEffect(() => {\n if (containerWidth === 0) return;\n const yMax = d3.max(data, d => {\n return Math.max(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n const yMin = d3.min(data, d => {\n return Math.min(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n\n const svg = d3.select(svgRef.current);\n const innerWidth = calculatedChartWidth - margin.left - margin.right;\n const innerHeight = yMax || yMin ? height - margin.top - margin.bottom : 0;\n\n const x = d3.scaleBand()\n .domain(data.map(d => d.month as string))\n .range([0, innerWidth])\n .padding(0.3);\n\n const y = d3.scaleLinear()\n .domain([yMin, yMax])\n .nice()\n .range([innerHeight, 0]);\n\n svg.selectAll('*').remove();\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`);\n\n // Y axis\n const yAxis = g.append('g')\n .call(d3.axisLeft(y).tickFormat(formatNumber))\n .call(g => g.select('.domain').remove());\n yAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // X axis\n const xAxis = g.append('g')\n .attr('transform', `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .selectAll('.tick text')\n .attr('text-anchor', 'middle');\n xAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // Render grid lines if applicable\n if (showGrid) {\n g.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1);\n }\n \n // Render grid lines if applicable\n if (line) {\n g.selectAll('.grid-line-2')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line-2')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1)\n }\n\n // Draw bars for bar chart\n bars.forEach((bar, i) => {\n g.selectAll(`.bar-${bar.field}`)\n .data(data)\n .enter()\n .append('rect')\n .attr('class', `bar bar-${bar.field}`)\n .attr('x', d => x(d.month as string) ?? 0)\n .attr('y', d => d[bar.field] >= 0 ? y(d[bar.field]) : y(0)) // Positive bars above y(0), negative bars below\n .attr(\"rx\", 5)\n .attr(\"ry\", 5)\n .attr('width', x.bandwidth() / bars.length)\n .attr('height', d => {\n return Math.abs(y(d[bar.field]) - y(0)); // Absolute height from y(0)\n })\n .attr('fill', barColors[i])\n .attr('transform', `translate(${(i * x.bandwidth()) / bars.length}, 0)`)\n .on('mouseover', function (event, d) {\n const [xPos, yPos] = d3.pointer(event, svgRef.current);\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({ \n x: xPos + margin.left - scrollLeft, \n y: yPos + margin.top, \n content: d \n });\n })\n .on('mouseout', () => setTooltip(null));\n });\n \n // Draw lines for line chart\n lines.forEach((line, index) => {\n const lineGenerator = d3.line<DataPoint>()\n .x(d => (x(d.month as string) ?? 0) + x.bandwidth() / 2) // Calculate x position for each data point\n .y(d => y(d[line.field] as number))\n .curve(d3.curveMonotoneX);\n\n g.append('path')\n .datum(data)\n .attr('fill', 'none')\n .attr('stroke', lineColors[index])\n .attr('stroke-width', 2)\n .attr('d', lineGenerator)\n .on('mouseover', function (event) {\n const [xPos] = d3.pointer(event, svgRef.current);\n const month = x.domain().find((month) => {\n const monthPosition = x(month as string) ?? 0;\n return xPos >= monthPosition && xPos <= monthPosition + x.bandwidth();\n });\n\n if (month) {\n const closestDataPoint = data.find(d => d.month === month);\n if (closestDataPoint) {\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({\n x: xPos + margin.left - scrollLeft,\n y: y(closestDataPoint[line.field]) + margin.top,\n content: closestDataPoint\n });\n }\n }\n })\n .on('mouseout', () => setTooltip(null));\n });\n }, [data, containerWidth, calculatedChartWidth, line, height, margin, bars, lines, showGrid, barColors, lineColors]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n {tooltip && (\n <div\n style={{\n position: 'absolute',\n left: tooltip.x,\n top: tooltip.y,\n pointerEvents: 'none',\n backgroundColor: 'white',\n zIndex: '99999',\n border: 'none',\n padding: '5px',\n borderRadius: '3px',\n transform: 'translate(-50%, -100%)'\n }}\n >\n <Box>\n <div style={{ background: '#F3F2F2', padding: '10px' }}>\n <Typography type='s4' style={{ whiteSpace: 'noWrap', width: '200px', color: '#232529' }}>{tooltip.content?.month}</Typography>\n </div>\n <Box sx={{ p: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n\n {bars.map((bar, index) => (\n <Box key={`bar-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: barColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {bar.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[bar.field]}</span>\n </Typography>\n </Box>\n ))}\n {lines.map((line, index) => (\n <Box key={`line-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: lineColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {line.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[line.field]}</span>\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n \n </div>\n )\n }\n </div>\n </div>\n );\n};\n\nexport default BarLineChart;","import { useState } from \"react\";\nimport Board from \"@asseinfo/react-kanban\";\nimport ColumnHeader from \"./columnHeader\";\nimport images from \"../../assets/images\";\nimport \"@asseinfo/react-kanban/dist/styles.css\";\nimport \"./board.scss\";\n\ninterface Card {\n id: number;\n title: string;\n description: string;\n}\n\ninterface Column {\n id: number;\n title: string;\n cards: Card[];\n}\n\ninterface BoardData {\n columns: Column[];\n}\n\ninterface DraftCard {\n title: string;\n description: string;\n}\n\ninterface BoardWrapperProps {\n data: BoardData;\n}\n\nexport const BoardWrapper = (props: BoardWrapperProps) => {\n const [board, setBoard] = useState(props.data);\n const [isAddingColumn, setIsAddingColumn] = useState(false);\n const [newColumnTitle, setNewColumnTitle] = useState(\"\");\n\n const handleAddColumn = (title: string) => {\n const newColumnAdded = { ...board };\n newColumnAdded.columns.push({\n id: Date.now(),\n title: title,\n cards: [],\n });\n setBoard(newColumnAdded);\n setIsAddingColumn(false);\n setNewColumnTitle(\"\");\n };\n\n return (\n <div className=\"card-board-wrap\">\n <Board\n initialBoard={board}\n allowAddCard\n allowAddColumn\n renderColumnHeader={(column: Column) => (\n <div className=\"column-header\">\n <ColumnHeader key={column.id} column={column} />\n </div>\n )}\n renderColumnAdder={() =>\n isAddingColumn ? (\n <div className=\"create-status-box\">\n <input\n type=\"text\"\n placeholder=\"Enter new status title\"\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n />\n <div className=\"add-btns\">\n <button onClick={() => handleAddColumn(newColumnTitle)}>\n Add\n </button>\n <button onClick={() => setIsAddingColumn(false)}>Cancel</button>\n </div>\n </div>\n ) : (\n <div\n className=\"create-status-box\"\n onClick={() => setIsAddingColumn(true)}\n role=\"button\"\n >\n Create new status\n <img src={images.common.addIcon} alt=\"add icon\" />\n </div>\n )\n }\n allowRemoveCard\n allowRenameColumn\n onCardNew={console.log}\n onCardRemove={console.log}\n onColumnRemove={console.log}\n onColumnRename={console.log}\n onNewCardConfirm={(draftCard: DraftCard) => ({\n id: new Date().getTime(),\n ...draftCard,\n })}\n />\n </div>\n );\n};\n\nexport default BoardWrapper;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Box } from '@mui/material';\n\nimport ItemsSummary, { IItemsSummary } from './components/items-summary';\nimport DiscountSummary, {\n\tIDiscountSummary\n} from './components/discount-summary';\nimport SubtotalSummary, {\n\tISubtotalSummary\n} from './components/subtotal-summary';\nimport TaxesAndChargesSummary, {\n\tITaxesAndChargesSummary\n} from './components/taxes-and-charges-summary';\n\nimport { useEffect, useState } from 'react';\nimport { useAuth } from '../../hooks/useAuth';\nimport TotalSummary, { ITotalSummary } from './components/total-summary';\nimport { calculateEntries } from '../../utils/calculation';\n\nimport './calculation-summary.scss';\n\ninterface ICalculationSummary {\n\titems: any;\n\texpenses?: any;\n\tformValues: any;\n\tenableShippings?: boolean;\n\tenalblePromotions?: boolean;\n\tcurrencySymbol: string;\n\t// calculationFunc: any\n}\n\nconst CalculationSummary: React.FC<ICalculationSummary> = ({\n\titems,\n\texpenses,\n\tformValues,\n\tenalblePromotions,\n\tenableShippings,\n\tcurrencySymbol\n}) => {\n\tconst { user } = useAuth();\n\tconst defaultCurrencySymbol =\n\t\tcurrencySymbol || user?.currency_data?.symbol || '';\n\n\tconst [itemsData, setItemsData] = useState<IItemsSummary>({\n\t\ttotalQuantity: 0,\n\t\ttotal: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [discountData, setDiscountData] = useState<IDiscountSummary>({\n\t\titemDiscount: 0,\n\t\tadditionalDiscount: 0,\n\t\ttotalDiscount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [subtotalData, setSubtotalData] = useState<ISubtotalSummary>({\n\t\tsubtotalExTax: 0,\n\t\tsubtotalExDiscount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [taxesData, setTaxesData] = useState<ITaxesAndChargesSummary>({\n\t\ttaxes: 0,\n\t\tdeductedTax: 0.0,\n\t\ttotal: 0,\n\t\tshippingAmount: 0,\n\t\thandlingAmount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\tconst [totalData, setTotalData] = useState<ITotalSummary>({\n\t\ttotal: 0,\n\t\troundOffDifferenceAmount: 0,\n\t\tcurrencySymbol: defaultCurrencySymbol\n\t});\n\n\tuseEffect(() => {\n\t\t// debugger;\n\t\tconst eRate = Number(formValues?.exchange_rate) || 1;\n\n\t\tlet {\n\t\t\t// eslint-disable-next-line prefer-const\n\t\t\ttotalQuantity,\n\t\t\ttotalDiscount,\n\t\t\ttotalItemsExpenseDiscount,\n\t\t\ttotalTaxAmount,\n\t\t\tadditinoalDiscountAmount,\n\t\t\tfinalAmount,\n\t\t\troundOffDifference,\n\t\t\t\n\t\t} = calculateEntries(\n\t\t\titems,\n\t\t\texpenses,\n\t\t\tformValues?.additional_discount_on,\n\t\t\tformValues?.additional_discount_percentage,\n\t\t\tformValues?.additional_discount_amount,\n\t\t\tformValues?.round_off,\n\t\t\tformValues?.round_off_option\n\t\t);\n\n\t\ttotalDiscount /= eRate;\n\t\tadditinoalDiscountAmount /= eRate;\n\t\ttotalItemsExpenseDiscount /= eRate;\n\t\ttotalTaxAmount /= eRate;\n\t\tfinalAmount /= eRate;\n\t\troundOffDifference /= eRate;\n\t\t\n\t\tconst shippingAmount =\n\t\t\t(Number(formValues?.shipping_cost) || 0) +\n\t\t\t(Number(formValues?.shipping_tax_amount) || 0);\n\t\tconst handlingAmount =\n\t\t\t(Number(formValues?.handling_cost) || 0) +\n\t\t\t(Number(formValues?.handling_tax_amount) || 0);\n\n\t\tconst shippingAmountWithERate = shippingAmount / eRate;\n\t\tconst handlingAmountWithERate = handlingAmount / eRate;\n\t\tconst promotionAmountWithERate = Number(formValues?.promotion_amount || 0) / eRate;\n\t\tfinalAmount = (finalAmount) - promotionAmountWithERate\n const grandTotal = (finalAmount + shippingAmountWithERate + handlingAmountWithERate) - promotionAmountWithERate\n\t\tsetItemsData({\n\t\t\t...itemsData,\n\t\t\ttotalQuantity,\n\t\t\ttotal: finalAmount.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetDiscountData({\n\t\t\t...discountData,\n\t\t\titemDiscount: totalItemsExpenseDiscount.toFixed(2),\n\t\t\tadditionalDiscount: Number(additinoalDiscountAmount).toFixed(2),\n\t\t\ttotalDiscount: (totalDiscount + promotionAmountWithERate).toFixed(2),\n\t\t\tpromotionAmount: promotionAmountWithERate.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetSubtotalData({\n\t\t\t...subtotalData,\n\t\t\tsubtotalExTax: (finalAmount - totalTaxAmount).toFixed(2),\n\t\t\tsubtotalExDiscount: Number(finalAmount + Number(totalDiscount)).toFixed(\n\t\t\t\t2\n\t\t\t),\n\t\t\tcurrencySymbol\n\t\t});\n\n\t\tsetTaxesData({\n\t\t\t...taxesData,\n\t\t\ttaxes: totalTaxAmount.toFixed(2),\n\t\t\ttotal: totalTaxAmount.toFixed(2),\n\t\t\tshippingAmount: shippingAmountWithERate.toFixed(2),\n\t\t\thandlingAmount: handlingAmountWithERate.toFixed(2),\n\t\t\tcurrencySymbol\n\t\t});\n\t\tsetTotalData({\n\t\t\t...totalData,\n\t\t\ttotal: grandTotal.toFixed(2),\n\t\t\troundOffDifferenceAmount: roundOffDifference.toFixed(2),\n\t\t\tcurrencySymbol,\n\t\t});\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\titems,\n\t\tformValues?.additional_discount_amount,\n\t\tformValues?.additional_discount_on,\n\t\tformValues?.additional_discount_percentage,\n\t\tformValues?.currency_id,\n\t\tformValues?.round_off,\n\t\tformValues?.round_off_option,\n\t\tformValues?.shipping_cost,\n\t\tformValues?.shipping_tax_amount,\n\t\tformValues?.handling_cost,\n\t\tformValues?.handling_tax_amount,\n\t\tformValues?.promotion_amount,\n\t\tformValues?.exchange_rate,\n\t\tformValues?.currency_data,\n\t\tdefaultCurrencySymbol\n\t]);\n\n\treturn (\n\t\t<Box className='addPurchaseInvoice--RightContainer'>\n\t\t\t<ItemsSummary data={itemsData} />\n\t\t\t<DiscountSummary\n\t\t\t\tdata={discountData}\n\t\t\t\tenalblePromotions={enalblePromotions}\n\t\t\t/>\n\t\t\t<SubtotalSummary data={subtotalData} />\n\t\t\t<TaxesAndChargesSummary\n\t\t\t\tdata={taxesData}\n\t\t\t\tenableShippings={enableShippings}\n\t\t\t/>\n\t\t\t<TotalSummary data={totalData} />\n\t\t</Box>\n\t);\n};\n\nexport default CalculationSummary;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { useState } from \"react\";\n\nimport FullCalendar from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport listPlugin from \"@fullcalendar/list\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport resourceTimeGridPlugin from \"@fullcalendar/resource-timegrid\";\nimport timelinePlugin from \"@fullcalendar/timeline\";\nimport resourceTimelinePlugin from \"@fullcalendar/resource-timeline\";\n\nimport \"./calendar.scss\";\n\n// import \"@fullcalendar/core/main.css\";\n// import \"@fullcalendar/daygrid/main.css\";\n\nexport const CalendarWrapper = (props: any) => {\n // const calendarComponentRef = React.createRef();\n\n const [data, setData] = useState(props.data);\n const handleDateClick = (arg: any) => {\n alert(arg.dateStr);\n };\n\n\n const handleSelectedDates = (info: any) => {\n alert(\"selected \" + info.startStr + \" to \" + info.endStr);\n const title = prompt(\"What's the name of the title\");\n if (title != null) {\n const newEvent = {\n title,\n start: info.startStr,\n end: info.endStr,\n };\n const events = [...data.events, newEvent];\n setData({ events: events });\n }\n };\n\n return (\n <div className=\"calendar-wrapper\">\n <FullCalendar\n eventContent={props?.renderEventContent}\n schedulerLicenseKey=\"GPL-My-Project-Is-Open-Source\"\n // ref={calendarComponentRef}\n initialView=\"dayGridMonth\" // timeGridWeek, listWeek, dayGridWeek, dayGridMonth, resourceTimeline, resourceTimeGridDay, timelineWeek\n // dateClick={handleDateClick}\n droppable={true}\n displayEventTime={true}\n headerToolbar={{\n left: \"title\",\n right: \"prev,next,today\",\n // center: \"dayGridMonth,timeGridWeek,timeGridDay,listWeek\",\n }}\n buttonText={{\n today: 'Today' // Custom label with \"T\" capitalized\n }}\n selectable={true}\n plugins={[\n dayGridPlugin,\n interactionPlugin,\n timeGridPlugin,\n resourceTimeGridPlugin,\n timelinePlugin,\n listPlugin,\n resourceTimelinePlugin,\n ]}\n eventClick={(event) => {\n }}\n events={data.events}\n select={props?.handleSelectedDates}\n // eventLimit={2}\n dayMaxEvents={2}\n showNonCurrentDates={false}\n height=\"75vh\"\n eventColor={\"#\" + Math.floor(Math.random() * 16777215).toString(16)}\n />\n </div>\n );\n};\n\nexport default CalendarWrapper;\n","import { Box } from '@mui/material';\nimport Typography from '../typography/typography';\nimport './chartLegend.scss';\ninterface IProps {\n\tlegends: string[];\n\tcolors: string[];\n}\nexport function ChartLegends({ legends, colors }: IProps) {\n\treturn (\n\t\t<Box\n\t\t\tsx={{\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\talignContent: 'space-between'\n\t\t\t}}>\n\t\t\t{legends.map((legend, index) => (\n\t\t\t\t<div style={{ marginLeft: '20px', display: 'flex' }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName='legends-circle'\n\t\t\t\t\t\tstyle={{ backgroundColor: colors[index] }}></div>\n\t\t\t\t\t<Typography type='s5' sx={{ color: '#656669' }}>\n\t\t\t\t\t\t{legend}\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</Box>\n\t);\n}\n\nexport default ChartLegends\n","import { Box, Card, CardContent, IconButton, MenuItem } from '@mui/material';\nimport React, { useState } from 'react';\nimport Typography, { ITypography } from '../../typography/typography';\nimport { MoreIcon } from '../../icons';\nimport { formatDate } from '../../../utils/dateFormat';\n// import Chip from '../../chip/chip';\nimport Menu from '../../menu/menu';\n\ninterface CustomGridCardProps {\n\ttitle: React.ReactNode | string;\n\tsubTitle?: React.ReactNode | string;\n\tchildren?: React.ReactNode | string;\n\ttitleProps?: ITypography;\n\tdata: Record<any, any>;\n\trowActionMenu: any[];\n\tdestructiveActionMenu: any[];\n}\n\nconst CustomGridCard: React.FC<CustomGridCardProps> = ({\n\ttitle,\n\tsubTitle,\n\tchildren,\n\tdata,\n\trowActionMenu,\n\tdestructiveActionMenu\n}) => {\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<HTMLElement | null>(null);\n\tconst [row, setRow] = useState<[] | null>(null);\n\n\tconst handleMenuOpen = (\n\t\te: React.MouseEvent<HTMLButtonElement>,\n\t\tcurrencyRow: []\n\t) => {\n\t\tsetRow(currencyRow);\n\t\tsetRowAnchorEl(e.currentTarget);\n\t};\n\n\treturn (\n\t\t<Card\n\t\t\tsx={{\n\t\t\t\twidth: '16.625rem',\n\t\t\t\tborderRadius: '0.5rem',\n\t\t\t\tborder: '0.5px solid #eeeff1',\n\t\t\t\t// backgroundColor: 'theme.secondary.100',\n\t\t\t\tboxShadow: `\n 0px 0px 2px 0px #e0e0e0,\n 0px 1px 4px -2px rgba(24, 39, 75, 0.02),\n 0px 4px 4px -2px rgba(24, 39, 75, 0.06);`\n\t\t\t\t// m: 3\n\t\t\t}}>\n\t\t\t<CardContent\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tpadding: '1rem 1rem 1.25rem 1rem',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\tflexShrink: 0\n\t\t\t\t}}>\n\t\t\t\t{/* Title & More Button */}\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\talignItems: 'flex-start'\n\t\t\t\t\t\t// marginBottom: 1\n\t\t\t\t\t}}>\n\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tcolor='inherit'\n\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\tonClick={(e) => handleMenuOpen(e, data)}>\n\t\t\t\t\t\t<MoreIcon\n\t\t\t\t\t\t\tsx={{ transform: 'rotate(90deg)' }}\n\t\t\t\t\t\t\torient='vertical'\n\t\t\t\t\t\t\tfontSize='small'\n\t\t\t\t\t\t/>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Box>\n\t\t\t\t{/* Sub Title */}\n\t\t\t\t<Box>\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\t{subTitle}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t\t{children}\n\t\t\t\t{data?.created_at && (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.800'>\n\t\t\t\t\t\t\tCreated On {formatDate(data?.created_at, 'DD MMM, YYYY')}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{/* Action Menu */}\n\t\t\t<Menu\n\t\t\t\tanchorEl={rowAnchorEl}\n\t\t\t\topen={Boolean(rowAnchorEl)}\n\t\t\t\tonClose={() => setRowAnchorEl(null)}>\n\t\t\t\t<Box>\n\t\t\t\t\t{rowActionMenu.map((item) => (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\trow && item.handleAction(row);\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\n\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t\t<Box className='dropdown-inner--DestructiveHeader'>\n\t\t\t\t\t{destructiveActionMenu.map((item) => (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\trow && item.handleAction(row);\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'>\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</Menu>\n\t\t</Card>\n\t);\n};\n\nexport default CustomGridCard;\n","import { Box } from \"@mui/material\"\nimport './dashboard.scss'\nimport Typography from \"../typography/typography\"\nimport logo from '../../assets/images'\ninterface Iprops {\n title?: string,\n value?: string | number\n}\nfunction DashBoardCard(props: Iprops) {\n const { title, value } = props\n return (\n <>\n <Box className='card-class'>\n <Box p={2} sx={{ display: 'flex', flexDirection: 'column', border: '1px solid', borderRadius: '8px', gap: 1, borderColor: '#EEEFF1' }}>\n <Box className='dashboard-card-icon'>\n <img src={logo.ArrowCircleUpIcon} />\n\n </Box>\n <Typography type=\"s5\" weight=\"normal\" color=\"theme.neutral.800\">{title}</Typography>\n <Typography type=\"h2\" weight=\"bold\" color=\"theme.neutral.1000\">{value}</Typography>\n </Box>\n </Box>\n </>\n )\n}\n\n\nexport { DashBoardCard };\nexport default DashBoardCard","\nimport Typography from \"../typography/typography\";\nimport Chip from \"../chip/chip\";\nimport images from '../../assets/images';\nimport { useState } from \"react\";\nimport { IconButton, MenuItem } from '@mui/material';\nimport Menu from '../menu/menu';\nimport { useTranslation } from 'react-i18next';\nconst DashBoardHeader = ({ title, customElement, showEdit = true, showDropDowan = true }) => {\n const { t } = useTranslation();\n //Local State\n const [isEditingMode, setIsEditingMode] = useState<boolean>(false);\n const [anchorMoreEl, setAnchorMoreEl] = useState<\n null | (EventTarget & HTMLButtonElement)\n >(null);\n\n\n\n\n const handleMoreIconClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorMoreEl(event.currentTarget);\n };\n\n const handleMoreIconClose = () => {\n setAnchorMoreEl(null);\n };\n\n // const handleConfirm = () => {\n // setIsDiscardModalOpen(false);\n // setIsEditingMode(false);\n // };\n\n // const handleSaveChange = (event: SelectChangeEvent<unknown>) => {\n // setIsEditingMode(false);\n // };\n return (\n <div>\n <div className='header-title'>\n <Typography type='h3' weight={'medium'} color={'theme.secondary.1000'}>\n {title}\n </Typography>\n <div className='header-right-wrap'>\n\n {customElement}\n {showEdit && <Chip\n type='normal'\n label={isEditingMode ? t('manufacturing.dashboard.editing_dashboard_mode_label') : t('manufacturing.dashboard.edit_layout_mode_label')}\n className={`${isEditingMode ? 'edit-box' : 'edit-box edit-box--InActive'\n }`}\n icon={\n <img\n src={isEditingMode ? images.common.editIcon : images.edit}\n alt={t('common.edit')}\n />\n }\n onClick={() => setIsEditingMode(true)}\n active={isEditingMode}\n />\n }\n {\n showDropDowan && <div>\n <IconButton\n color='inherit'\n size='small'\n onClick={handleMoreIconClick}>\n <img src={images.more} alt={t('manufacturing.dashboard.more_icon_label')} />\n </IconButton>\n <Menu\n anchorEl={anchorMoreEl}\n open={Boolean(anchorMoreEl)}\n onClose={handleMoreIconClose}\n className='dropdown-inner calender-drp'>\n <MenuItem onClick={handleMoreIconClose}>{t('common.export')}</MenuItem>\n </Menu>\n </div>\n }\n </div>\n </div>\n </div>\n );\n};\n\nexport { DashBoardHeader };\nexport default DashBoardHeader;\n","/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { Grid, GridProps, useMediaQuery, useTheme } from '@mui/material';\nimport ExpandableSummaryWrapper, { ExpandableSummaryWrapperProps } from '../expandable-summary-wrapper/expandable-summary-wrapper';\n// import { ExpandableSummaryWrapper, ExpandableSummaryWrapperProps } from './ExpandableSummaryWrapper';\n\ninterface DynamicLayoutWrapperProps {\n // Main content props\n children: React.ReactNode;\n mainContentProps?: Omit<GridProps, 'item' | 'xs'>;\n \n // Summary wrapper props\n summaryContent: React.ReactNode;\n summaryProps?: Omit<ExpandableSummaryWrapperProps, 'children' | 'onToggle'>;\n \n // Layout configuration\n maxGridSize?: number;\n defaultSummaryExpanded?: boolean;\n expandedSummarySize?: number;\n collapsedSummarySize?: number;\n \n // Container props\n containerProps?: Omit<GridProps, 'container'>;\n \n // Callbacks\n onLayoutChange?: (mainSize: number, summarySize: number, isExpanded: boolean) => void;\n \n // Animation configuration\n enableTransitions?: boolean;\n transitionDuration?: number | string;\n transitionEasing?: string;\n\n storageKey?: string\n}\n\nexport const DynamicLayoutWrapper: React.FC<DynamicLayoutWrapperProps> = ({\n children,\n mainContentProps = {},\n summaryContent,\n summaryProps = {},\n maxGridSize = 12,\n defaultSummaryExpanded = true,\n expandedSummarySize = 3,\n collapsedSummarySize = 0,\n containerProps = {},\n onLayoutChange,\n enableTransitions = true,\n transitionDuration,\n transitionEasing,\n storageKey = 'grid-summary-panel-state',\n}) => {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n const getInitialState = useCallback(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n return stored ? JSON.parse(stored) : defaultSummaryExpanded;\n }\n return defaultSummaryExpanded;\n }, [defaultSummaryExpanded, storageKey]);\n \n // Calculate initial main content size\n const initialMainSize = useMemo(() => {\n return (isMobile || !getInitialState()) ? maxGridSize :(defaultSummaryExpanded \n ? maxGridSize - expandedSummarySize \n : maxGridSize - collapsedSummarySize);\n }, [isMobile, getInitialState, maxGridSize, defaultSummaryExpanded, expandedSummarySize, collapsedSummarySize]);\n \n const [mainContentSize, setMainContentSize] = useState<number>(initialMainSize);\n \n // Handle summary toggle with enhanced logic\n const handleSummaryToggle = useCallback((isExpanded: boolean, summaryGridSize: number) => {\n if(isMobile) {\n setMainContentSize(maxGridSize);\n return \n }\n const newMainContentSize = Math.max(1, Math.min(maxGridSize - summaryGridSize, maxGridSize));\n \n setMainContentSize(newMainContentSize);\n \n // Notify parent component of layout changes\n onLayoutChange?.(newMainContentSize, summaryGridSize, isExpanded);\n }, [isMobile, maxGridSize, onLayoutChange]);\n \n // Create transition styles\n const transitionStyles = useMemo(() => {\n if (!enableTransitions) return {};\n \n const duration = transitionDuration || theme.transitions.duration.enteringScreen;\n const easing = transitionEasing || theme.transitions.easing.sharp;\n \n return {\n transition: theme.transitions.create(['flex-basis', 'max-width'], {\n easing,\n duration,\n }),\n };\n }, [enableTransitions, theme, transitionDuration, transitionEasing]);\n \n // Merge summary props with defaults\n const mergedSummaryProps: ExpandableSummaryWrapperProps = {\n defaultExpanded: defaultSummaryExpanded,\n expandedGridSize: expandedSummarySize,\n collapsedGridSize: collapsedSummarySize,\n persistState: true,\n ariaLabel: 'Toggle summary panel',\n ...summaryProps,\n onToggle: handleSummaryToggle,\n children: summaryContent,\n storageKey: storageKey\n };\n \n return (\n <Grid container {...containerProps}>\n <Grid\n item\n xs={mainContentSize}\n sx={{\n ...transitionStyles,\n ...mainContentProps.sx,\n }}\n {...mainContentProps}\n >\n {children}\n </Grid>\n \n <ExpandableSummaryWrapper {...mergedSummaryProps} />\n </Grid>\n );\n};\n\n// Enhanced version with additional features\ninterface AdvancedDynamicLayoutWrapperProps extends DynamicLayoutWrapperProps {\n // Responsive breakpoints\n responsiveConfig?: {\n xs?: { expandedSize: number; collapsedSize: number };\n sm?: { expandedSize: number; collapsedSize: number };\n md?: { expandedSize: number; collapsedSize: number };\n lg?: { expandedSize: number; collapsedSize: number };\n xl?: { expandedSize: number; collapsedSize: number };\n };\n \n // Multiple summary panels support\n multipleSummaries?: Array<{\n content: React.ReactNode;\n props?: Omit<ExpandableSummaryWrapperProps, 'children' | 'onToggle'>;\n id: string;\n }>;\n \n // Layout modes\n layoutMode?: 'horizontal' | 'vertical' | 'adaptive';\n \n // Minimum sizes\n minMainContentSize?: number;\n minSummarySize?: number;\n}\n\nexport const AdvancedDynamicLayoutWrapper: React.FC<AdvancedDynamicLayoutWrapperProps> = ({\n multipleSummaries = [],\n layoutMode = 'horizontal',\n minMainContentSize = 4,\n minSummarySize = 2,\n responsiveConfig,\n ...baseProps\n}) => {\n const [summaryStates, setSummaryStates] = useState<Record<string, { size: number; expanded: boolean }>>({});\n \n // Calculate total summary size\n const totalSummarySize = useMemo(() => {\n return Object.values(summaryStates).reduce((total, state) => total + state.size, 0);\n }, [summaryStates]);\n \n // Enhanced toggle handler for multiple summaries\n const handleMultipleSummaryToggle = useCallback((\n summaryId: string,\n isExpanded: boolean,\n summaryGridSize: number\n ) => {\n setSummaryStates(prev => {\n const newStates = {\n ...prev,\n [summaryId]: { size: summaryGridSize, expanded: isExpanded }\n };\n \n const newTotalSize = Object.values(newStates).reduce((total, state) => total + state.size, 0);\n const newMainSize = Math.max(\n minMainContentSize,\n Math.min(baseProps.maxGridSize! - newTotalSize, baseProps.maxGridSize!)\n );\n \n baseProps.onLayoutChange?.(newMainSize, newTotalSize, isExpanded);\n \n return newStates;\n });\n }, [baseProps, minMainContentSize]);\n \n // If multiple summaries are provided, render advanced layout\n if (multipleSummaries.length > 0) {\n const mainSize = Math.max(\n minMainContentSize,\n (baseProps.maxGridSize || 12) - totalSummarySize\n );\n \n return (\n <Grid container {...baseProps.containerProps}>\n <Grid\n item\n xs={mainSize}\n sx={{\n transition: baseProps.enableTransitions ? \n `all ${baseProps.transitionDuration || 300}ms ${baseProps.transitionEasing || 'ease-in-out'}` : \n undefined,\n ...baseProps.mainContentProps?.sx,\n }}\n {...baseProps.mainContentProps}\n >\n {baseProps.children}\n </Grid>\n \n {multipleSummaries.map((summary) => (\n <ExpandableSummaryWrapper\n key={summary.id}\n {...summary.props}\n onToggle={(isExpanded, size) => \n handleMultipleSummaryToggle(summary.id, isExpanded, size)\n }\n >\n {summary.content}\n </ExpandableSummaryWrapper>\n ))}\n </Grid>\n );\n }\n \n // Fallback to basic layout\n return <DynamicLayoutWrapper {...baseProps} />;\n};\n\n// Hook for managing layout state externally\nexport const useDynamicLayout = (\n maxGridSize: number = 12,\n defaultSummaryExpanded: boolean = true,\n expandedSize: number = 3,\n collapsedSize: number = 0\n) => {\n const [isExpanded, setIsExpanded] = useState(defaultSummaryExpanded);\n const [summarySize, setSummarySize] = useState(\n defaultSummaryExpanded ? expandedSize : collapsedSize\n );\n const [mainSize, setMainSize] = useState(\n maxGridSize - (defaultSummaryExpanded ? expandedSize : collapsedSize)\n );\n \n const toggleSummary = useCallback(() => {\n const newExpanded = !isExpanded;\n const newSummarySize = newExpanded ? expandedSize : collapsedSize;\n const newMainSize = maxGridSize - newSummarySize;\n \n setIsExpanded(newExpanded);\n setSummarySize(newSummarySize);\n setMainSize(newMainSize);\n }, [isExpanded, expandedSize, collapsedSize, maxGridSize]);\n \n const setSummaryState = useCallback((expanded: boolean) => {\n const newSummarySize = expanded ? expandedSize : collapsedSize;\n const newMainSize = maxGridSize - newSummarySize;\n \n setIsExpanded(expanded);\n setSummarySize(newSummarySize);\n setMainSize(newMainSize);\n }, [expandedSize, collapsedSize, maxGridSize]);\n \n return {\n isExpanded,\n summarySize,\n mainSize,\n toggleSummary,\n setSummaryState,\n };\n};\n\n// Utility function for calculating optimal sizes\nexport const calculateOptimalSizes = (\n totalSize: number,\n contentRatio: number = 0.75,\n minContentSize: number = 4,\n minSummarySize: number = 2\n) => {\n const idealContentSize = Math.floor(totalSize * contentRatio);\n const idealSummarySize = totalSize - idealContentSize;\n \n const contentSize = Math.max(minContentSize, idealContentSize);\n const summarySize = Math.max(minSummarySize, Math.min(idealSummarySize, totalSize - contentSize));\n \n return {\n contentSize: Math.min(contentSize, totalSize - summarySize),\n summarySize,\n totalUsed: contentSize + summarySize,\n };\n};\n\nexport default DynamicLayoutWrapper;","import {\n\tDialogActions,\n\tDialogContent,\n\tDialogTitle,\n\tIconButton\n} from '@mui/material';\nimport Modal from './modal/modal';\nimport Button from './button/button';\nimport Close from '@mui/icons-material/Close';\nimport Typography from './typography/typography';\nimport { useTranslation } from 'react-i18next';\n\nexport const DynamicModal = ({\n\topen,\n\tonClose,\n\ttitle,\n\tchildren,\n\thandleSaveAction,\n\tbuttons = [],\n\t...rest\n}: {\n\topen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren?: React.ReactNode;\n\tbuttons?: any[];\n\thandleSaveAction?: () => void;\n}) => {\n\tconst { t } = useTranslation();\n\tconst actionButtons = buttons.length\n\t\t? [...buttons]\n\t\t: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('common.cancel'),\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t\tvariant: 'outlined',\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tcolor: 'black !important'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t...(handleSaveAction\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: t('common.save'),\n\t\t\t\t\t\t\t\tonClick: handleSaveAction,\n\t\t\t\t\t\t\t\tvariant: 'contained',\n\t\t\t\t\t\t\t\tcolor: 'primary'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: [])\n\t\t\t];\n\treturn (\n\t\t<Modal\n\t\t\topen={open}\n\t\t\tonClose={onClose}\n\t\t\taria-labelledby='alert-dialog-title'\n\t\t\taria-describedby='alert-dialog-description'\n\t\t\tfullWidth\n\t\t\t{...rest}>\n\t\t\t<DialogTitle\n\t\t\t\tid='alert-dialog-title'\n\t\t\t\tclassName='itemEntryModal--DialogTitle'>\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\n\t\t\t\t\t{t(title)}\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton onClick={onClose}>\n\t\t\t\t\t<Close fontSize='small' />\n\t\t\t\t</IconButton>\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>{children}</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t{actionButtons.map((button, index) => (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t...button.sx\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tonClick={button.onClick}\n\t\t\t\t\t\tvariant={button.variant}\n\t\t\t\t\t\tcolor={button.color}>\n\t\t\t\t\t\t{button.label}\n\t\t\t\t\t</Button>\n\t\t\t\t))}\n\t\t\t</DialogActions>\n\t\t</Modal>\n\t);\n};\n\nexport default DynamicModal\n","import React, { useEffect, useState } from 'react';\nimport { useParams, useLocation, useNavigate } from 'react-router-dom';\nimport { getEntityId } from '../../utils/navigation-utils';\nimport ErpLoader from '../loaders/erp-loader';\n\ninterface EntityViewWrapperProps<T> {\n /**\n * Function to fetch entity data by ID\n */\n fetchEntity: (id: string) => Promise<T>;\n \n /**\n * Route to navigate to if entity is not found\n */\n fallbackRoute: string;\n \n /**\n * Component to render with entity data\n */\n children: (entity: T) => React.ReactNode;\n \n /**\n * Optional ID field name in location.state (default: 'id')\n */\n idField?: string;\n}\n\n/**\n * A wrapper component that handles fetching entity data using either URL parameters or location state\n * This provides backward compatibility during migration from state-based to URL parameter-based routing\n */\nfunction EntityViewWrapper<T>({\n fetchEntity,\n fallbackRoute,\n children,\n idField = 'id'\n}: EntityViewWrapperProps<T>) {\n const params = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n \n const [entity, setEntity] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n \n useEffect(() => {\n const loadEntity = async () => {\n setLoading(true);\n \n // Get entity ID from URL params or location state\n const entityId = getEntityId(params, location, idField);\n \n if (!entityId) {\n // If no ID is found, navigate to fallback route\n navigate(fallbackRoute);\n return;\n }\n \n try {\n // Fetch entity data\n const data = await fetchEntity(entityId);\n setEntity(data);\n } catch (error) {\n console.error('Error fetching entity:', error);\n // If entity is not found, navigate to fallback route\n navigate(fallbackRoute);\n } finally {\n setLoading(false);\n }\n };\n \n loadEntity();\n }, [fetchEntity, params, location, navigate, fallbackRoute, idField]);\n \n if (loading) {\n return <ErpLoader />;\n }\n \n if (!entity) {\n return null;\n }\n \n return <>{children(entity)}</>;\n}\n\nexport default EntityViewWrapper; ","import { Gantt, Task, ViewMode } from \"gantt-task-react\";\nimport \"gantt-task-react/dist/index.css\";\nimport \"./gantt.scss\";\nimport { useState } from \"react\";\nimport useTheme from \"@mui/material/styles/useTheme\";\n\ninterface GanttDataProps {\n data: Task[];\n showList?: boolean;\n progressChange?: boolean;\n dateChange?: boolean;\n}\n\nconst GanttChart = (props: GanttDataProps) => {\n const { data, showList, progressChange, dateChange } = props;\n const theme = useTheme();\n const tasks: Task[] = data;\n const [task, setTask] = useState<Task[]>(tasks);\n\n const taskProgressColor = theme?.palette?.theme?.tertiary6[300];\n const taskBackgroundColor = theme?.palette?.theme?.tertiary6[200];\n const milestoneColor = theme?.palette?.theme?.tertiary4[700];\n const projectProgressColor = theme?.palette?.theme?.tertiary3[400];\n const projectBackgroundColor = theme?.palette?.theme?.tertiary3[300];\n const todayColor = theme?.palette?.theme?.tertiary5[400];\n\n const handleProgressChange = (updatedTask: Task) => {\n if (progressChange) {\n const taskIndex = tasks.findIndex((task) => task.id === updatedTask.id);\n\n const updatedTasks = [...tasks];\n updatedTasks[taskIndex] = updatedTask;\n\n setTask(updatedTasks);\n }\n };\n\n const handleDateChange = (updatedTask: Task) => {\n if (dateChange) {\n const taskIndex = tasks.findIndex((task) => task.id === updatedTask.id);\n\n const updatedTasks = [...tasks];\n updatedTasks[taskIndex] = updatedTask;\n\n setTask(updatedTasks);\n }\n };\n\n const handleExpanderClick = (clickedTask: Task) => {\n setTask((prevTasks: Task[]) =>\n prevTasks.map((task) =>\n task.id === clickedTask.id ? clickedTask : task,\n ),\n );\n };\n\n return (\n <Gantt\n tasks={task}\n viewMode={ViewMode.Day}\n listCellWidth={showList ? \"190px\" : \"\"}\n columnWidth={80}\n barCornerRadius={8}\n fontSize=\"12\"\n fontFamily=\"Inter\"\n onProgressChange={progressChange ? handleProgressChange : undefined}\n onDateChange={dateChange ? handleDateChange : undefined}\n barProgressColor={taskProgressColor}\n barProgressSelectedColor={taskProgressColor}\n barBackgroundColor={taskBackgroundColor}\n barBackgroundSelectedColor={taskBackgroundColor}\n milestoneBackgroundColor={milestoneColor}\n milestoneBackgroundSelectedColor={milestoneColor}\n projectBackgroundColor={projectBackgroundColor}\n projectBackgroundSelectedColor={projectBackgroundColor}\n projectProgressColor={projectProgressColor}\n projectProgressSelectedColor={projectProgressColor}\n todayColor={todayColor}\n onExpanderClick={handleExpanderClick}\n />\n );\n};\n\nexport { GanttChart };\nexport default GanttChart;\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport \"./schedule-report.scss\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\nimport Fallback from \"../fallback/fallback\";\r\nimport Button from \"../button/button\";\r\nimport MaterialTable from \"../material-table/material-table\";\r\nimport Toast from \"../toast/toast\";\r\n\r\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\r\nimport logo from \"../../assets/images\";\r\nimport { Box, IconButton } from \"@mui/material\";\r\nimport { Edit, Trash } from \"../icons\";\r\n\r\nimport ScheduleReportModal from \"../schedule-report/schedule-report-modal\";\r\nimport { getErrorMessage, getToken } from \"../../utils/common\";\r\nimport { ScheduleReportRow } from \"./utils/type\"\r\nimport { columns } from \"./utils/constant\"\r\nimport ErpLoader from \"../loaders/erp-loader\";\r\nimport Typography from \"../typography/typography\";\r\nimport Footer from \"../footer/footer\";\r\nimport { transformTableColumns } from \"../../utils/common-utility\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Chip from \"../chip/chip\";\r\nimport { deleteScheduleReportType, getScheduleReportType } from \"./utils/common\";\r\ninterface IToast {\r\n type: \"normal\" | \"alert\";\r\n message: string;\r\n}\r\n\r\nconst GeneralScheduleReport = ({ module = 'accounting', title = 'Schedule report' }: { module: string, title: string }) => {\r\n\r\n //states\r\n const [pagination, setPagination] = useState<any>({\r\n pageNo: 1,\r\n limit: 10,\r\n totalCount: 0\r\n })\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [initialLoading, setInitialLoading] = useState<boolean>(true);\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n const [openScheduleModal, setOpenScheduleModal] =\r\n useState<ScheduleReportRow | null>(null);\r\n console.log(\"🚀 ~ GeneralScheduleReport ~ openScheduleModal:\", openScheduleModal)\r\n\r\n const [isDeleting, setIsDeleting] = useState<boolean>(false)\r\n const [scheduleReportToDelete, setScheduleReportToDelete] =\r\n useState<ScheduleReportRow | null>(null);\r\n\r\n const [tableRows, setRows] = useState<ScheduleReportRow[]>([])\r\n const limit = pagination?.limit;\r\n const total = limit ? Math.ceil(pagination?.totalCount / limit) : 0;\r\n const skip = limit * (pagination?.pageNo - 1) || 0\r\n const { t } = useTranslation()\r\n\r\n //transform table columns\r\n const renderEmails = (value: string | undefined | null) => {\r\n const emails = value?.split(',');\r\n return emails ? (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\r\n {emails.map((item: string) => (\r\n <Chip\r\n key={item}\r\n type='normal'\r\n label={\r\n <Typography type='s4' weight='medium' color={'inherit'}>\r\n {item}\r\n </Typography>\r\n }\r\n />\r\n ))}\r\n </Box>\r\n ) : '-';\r\n };\r\n\r\n const tableColumns = useMemo(\r\n () =>\r\n transformTableColumns({\r\n columns: columns,\r\n currencySymbol: undefined,\r\n translationFn: t,\r\n enableFooter: true,\r\n redirectionLink: undefined,\r\n redirectionLinkState: undefined,\r\n rows: tableRows,\r\n statusClasses: `scheduleReport--StatusChip--`,\r\n customizeValue: (row, columnAccessorKey, value) => {\r\n switch (columnAccessorKey) {\r\n case 'emails':\r\n return renderEmails(value);\r\n // Add other cases here if needed\r\n default:\r\n return value;\r\n }\r\n },\r\n }),\r\n //eslint-disable-next-line\r\n [columns, tableRows, t]\r\n );\r\n\r\n const getScheduleReport = useCallback(\r\n async () => {\r\n try {\r\n setIsLoading(true)\r\n const { data = {}, pagination: paginationData } = await getScheduleReportType({\r\n ...getToken(),\r\n skip,\r\n limit,\r\n filters: `(type.eq=${module})`,\r\n })\r\n setRows(data?.schedulers)\r\n setPagination(prev => ({ ...prev, ...paginationData }))\r\n\r\n } catch (error) {\r\n const errorMessage = getErrorMessage(error?.message)\r\n setToast({\r\n type: \"alert\",\r\n message: errorMessage,\r\n })\r\n } finally {\r\n setIsLoading(false)\r\n setInitialLoading(false)\r\n }\r\n //eslint-disable-next-line\r\n },\r\n [limit, skip, module, setPagination]\r\n );\r\n\r\n const handleScheduleReportDelete = async () => {\r\n try {\r\n if (scheduleReportToDelete) {\r\n setIsDeleting(true)\r\n await deleteScheduleReportType({\r\n ...getToken(),\r\n id: scheduleReportToDelete.id\r\n })\r\n setToast({\r\n type: \"normal\",\r\n message: \"Report schedule deleted successfully\",\r\n });\r\n getScheduleReport();\r\n setScheduleReportToDelete(null);\r\n }\r\n } catch (error) {\r\n const errorMessage = getErrorMessage(error?.message)\r\n setToast({\r\n type: \"alert\",\r\n message: errorMessage,\r\n })\r\n } finally {\r\n setIsDeleting(false)\r\n }\r\n };\r\n\r\n const handleUpdate = useCallback(async () => {\r\n getScheduleReport();\r\n //eslint-disable-next-line\r\n }, []);\r\n\r\n\r\n\r\n useEffect(() => {\r\n getScheduleReport();\r\n }, [getScheduleReport]);\r\n\r\n\r\n\r\n const handleAddButton = () => setOpenScheduleModal(true);\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n setPagination(model)\r\n }\r\n\r\n return (\r\n <section className=\"scheduleReport\">\r\n\r\n <Box p={2} display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\r\n <Typography type=\"h3\" weight=\"bold\" color={'inherit'}>{title}</Typography>\r\n {/* <Button\r\n variant=\"outlined\"\r\n className=\"scheduleReport__addBtn\"\r\n startIcon={<Add />}\r\n onClick={handleAddButton}\r\n >Schedule Report</Button> */}\r\n </Box>\r\n\r\n {initialLoading ? (\r\n <ErpLoader />\r\n ) : (\r\n <>\r\n {tableRows?.length > 0 ? (\r\n <>\r\n <MaterialTable\r\n rows={tableRows || []}\r\n columns={tableColumns}\r\n totalPages={0}\r\n columnOrder={[\"mrt-row-select\"]}\r\n states={{ isLoading }}\r\n enableColumnDragging={true}\r\n enableEditing={false}\r\n isResetRow={false}\r\n enableRowSelection={false}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n defaultActionColumnItems={[\r\n <IconButton\r\n onClick={({ row }: any) =>\r\n setOpenScheduleModal(row?.original)\r\n }\r\n >\r\n <Edit fontSize=\"small\" htmlColor=\"#292D32\" />\r\n </IconButton>,\r\n <IconButton\r\n onClick={({ row }: any) =>\r\n setScheduleReportToDelete(row?.original)\r\n }\r\n >\r\n <Trash fontSize=\"small\" htmlColor=\"#292D32\" />\r\n </IconButton>,\r\n ]}\r\n />\r\n <Footer\r\n total={total}\r\n paginationModel={{\r\n ...pagination,\r\n limit: pagination?.limit\r\n }}\r\n handlePaginationModel={handlePaginationModel}\r\n resource='purchase-request'\r\n enablePages={false}\r\n />\r\n </>\r\n ) : (\r\n <>\r\n {!tableRows.length && (\r\n <Fallback\r\n heading=\"No schedule report\"\r\n subHeading=\"Add schedule report\"\r\n icon={<img src={logo.reportsFallback} />}\r\n >\r\n <Button\r\n variant=\"contained\"\r\n startIcon={<Add />}\r\n onClick={handleAddButton}\r\n >\r\n Add\r\n </Button>\r\n </Fallback>\r\n )}\r\n </>\r\n )}\r\n </>\r\n )}\r\n\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n />\r\n\r\n <ScheduleReportModal\r\n isOpen={Boolean(openScheduleModal)}\r\n onClose={() => setOpenScheduleModal(null)}\r\n itemData={openScheduleModal}\r\n onSubmit={handleUpdate}\r\n module={module}\r\n />\r\n\r\n\r\n\r\n <ConfirmPopUp\r\n open={Boolean(scheduleReportToDelete)}\r\n onClose={() => setScheduleReportToDelete(null)}\r\n onConfirm={handleScheduleReportDelete}\r\n title=\"Delete schedule report\"\r\n loading={isDeleting}\r\n description={`Are you sure you want to delete schedule report: ${scheduleReportToDelete?.name} ?`}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nexport { GeneralScheduleReport };\r\nexport default GeneralScheduleReport;\r\n","import Typography from \"../typography/typography\";\nimport { Box } from \"@mui/material\";\nimport \"./grid-fallback.scss\";\nimport logo from '../../assets/images';\n\ninterface GridFallbackProps {\n heading?: string;\n subHeading?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst GridFallback = (props: GridFallbackProps) => {\n const { heading = '', subHeading = 'No data available', icon = <img src={logo.invoiceFallback} />, children, ...rest } = props;\n return (\n <Box className=\"fallback\" {...rest}>\n {icon}\n <Typography\n type=\"h5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n className=\"fallback--Text\"\n >\n {heading}\n </Typography>\n <Typography\n type=\"s3\"\n weight=\"medium\"\n color=\"theme.secondary.800\"\n className=\"fallback--Text\"\n >\n {subHeading}\n </Typography>\n <div>{children}</div>\n </Box>\n );\n};\n\nexport { GridFallback };\nexport default GridFallback;\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport { useAuth } from '../../../hooks/useAuth';\n\nexport interface IGroupChartProps {\n chartData: any[],\n height?: number,\n margin?: any,\n barWidth?: number,\n line?: boolean\n}\n\nconst formatNumber = (num: number, symbol) => {\n return `${symbol} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n};\n\nconst GroupedBarChart = ({ \n chartData, \n height = 500, \n barWidth = 40, \n margin = { top: 40, right: 20, bottom: 40, left: 50 }, \n line = false \n}: IGroupChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const maxValue = useMemo(() => Math.max(...chartData.map((d) => d.data.map(v=>v.value)).flat()), [chartData]);\n\n const needsHorizontalScroll = chartData.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(chartData.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n if (containerWidth === 0) return; \n \n const chartWidth = calculatedChartWidth - margin.left - margin.right;\n const chartHeight = maxValue ? height - margin.top - margin.bottom : 0;\n \n d3.select(svgRef.current).selectAll('*').remove();\n \n const svg = d3.select(svgRef.current)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${margin.left}, ${maxValue ? margin.top : height-50})`);\n\n const x0 = d3.scaleBand()\n .domain(chartData.map(d => d.month))\n .range([0, chartWidth])\n .padding(0.2);\n\n const x1 = d3.scaleBand()\n .domain(['Total Transaction', 'Total Value', 'Average Value'])\n .range([0, x0.bandwidth()])\n .padding(0.1);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(chartData, d => d3.max(d.data, data => data.value))])\n .nice()\n .range([chartHeight, 0]);\n\n const xAxis = svg.append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(0, ${chartHeight})`)\n .call(d3.axisBottom(x0).tickPadding(20));\n \n const yAxis = svg.append('g')\n .attr('class', 'y-axis')\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) => formatNumber(d, defaultCurrencySymbol)));\n\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n if (line) {\n svg.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '3,3') // Dotted line\n .style('stroke-width', 1);\n }\n\n const monthGroups = svg.selectAll('.month-group')\n .data(chartData)\n .enter()\n .append('g')\n .attr('class', 'month-group')\n .attr('transform', d => `translate(${x0(d.month)}, 0)`);\n\n monthGroups.selectAll('rect')\n .data(d => d.data)\n .enter()\n .append('rect')\n .attr('x', d => x1(d.type) + (x1.bandwidth() - barWidth) / 2)\n .attr('y', d => y(d.value))\n .attr('width', barWidth)\n .attr('height', d => chartHeight - y(d.value))\n .attr('fill', d => d.color)\n .attr('rx', 5)\n .attr('ry', 5);\n\n }, [chartData, barWidth, height, calculatedChartWidth, containerWidth, line, margin, defaultCurrencySymbol, maxValue]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport { GroupedBarChart };\nexport default GroupedBarChart;","import \"./hr-line.scss\";\n\nconst HrLine = (props: any) => {\n const { title } = props;\n\n return (\n <div className=\"HrLine\">\n <hr className=\"HrLine--Length\" />\n {title}\n <hr className=\"HrLine--Length\" />\n </div>\n );\n};\n\nexport { HrLine };\nexport default HrLine;\n","import { Close } from '@mui/icons-material';\nimport { Box, DialogTitle, Grid, IconButton } from '@mui/material';\nimport MaterialTable from '../material-table/material-table';\nimport Modal from '../modal/modal';\nimport Typography from '../typography/typography';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { enqueueSnackbar } from 'notistack';\nimport ModalLoader from '../loaders/modal-loader';\nimport { responseItemDetailsColumns } from '../../utils/constant';\nimport {\n\tfetchRentalResponseItems,\n\tfetchRfqItemsByIdForResponse,\n\tgetErrorMessage\n} from '../../utils/common';\nimport { transformTableColumns } from '../../utils/common-utility';\nexport const ItemResponseDetails = (props: any) => {\n\tconst { isOpen, onClose, data, isRental = false } = props;\n\tconst [responseItems, setResponseItems] = useState<any[]>([]);\n\tconst [isLoading, setIsLoading] = useState<boolean>(false);\n\tconst { t } = useTranslation();\n\n\tconst getResponseItems = useCallback(async () => {\n\t\tif (!isOpen) return;\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst filters = `(rfq_line_item_id.in=${[data?.id]})`;\n\t\t\tconst rfqResponseItems = isRental\n\t\t\t\t? await fetchRentalResponseItems(filters)\n\t\t\t\t: await fetchRfqItemsByIdForResponse(filters);\n\t\t\tsetResponseItems(rfqResponseItems);\n\t\t} catch (error) {\n\t\t\tconst errorMsg = getErrorMessage(error?.message);\n\t\t\tenqueueSnackbar(errorMsg, { variant: 'error' });\n\t\t} finally {\n\t\t\tsetTimeout(() => setIsLoading(false), 300);\n\t\t}\n\t}, [isOpen, data?.id, isRental]);\n\tuseEffect(() => {\n\t\tgetResponseItems();\n\t}, [getResponseItems]);\n\treturn (\n\t\t<Modal open={isOpen} onClose={onClose} maxWidth='md' fullWidth>\n\t\t\t{isLoading && <ModalLoader />}\n\t\t\t<DialogTitle className='itemEntryModal--DialogTitle'>\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\n\t\t\t\t\tResponse Details\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton onClick={onClose}>\n\t\t\t\t\t<Close fontSize='small' />\n\t\t\t\t</IconButton>\n\t\t\t</DialogTitle>\n\t\t\t<Grid container>\n\t\t\t\t<Grid item xs={4}>\n\t\t\t\t\t<Box sx={{ display: 'flex', padding: 2, flexDirection: 'column' }}>\n\t\t\t\t\t\t<Typography type='s5' weight='medium' color='theme.secondary.800'>\n\t\t\t\t\t\t\tItem\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.neutral.1000'>\n\t\t\t\t\t\t\t{data?.item_data?.name}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\n\t\t\t<Grid container p={2} spacing={3}>\n\t\t\t\t<Grid item xs={12}>\n\t\t\t\t\t<Box sx={{ paddingTop: '1.2rem' }}>\n\t\t\t\t\t\t<MaterialTable\n\t\t\t\t\t\t\trows={responseItems || []}\n\t\t\t\t\t\t\tcolumns={transformTableColumns({\n\t\t\t\t\t\t\t\tcolumns: responseItemDetailsColumns,\n\t\t\t\t\t\t\t\tcurrencySymbol: undefined,\n\t\t\t\t\t\t\t\ttranslationFn: t,\n\t\t\t\t\t\t\t\tcustomizeValue: (row, columnAccessorKey, value) => {\n\t\t\t\t\t\t\t\t\tswitch (columnAccessorKey) {\n\t\t\t\t\t\t\t\t\t\tcase 'item_data.vendor_info.vendor_name':\n\t\t\t\t\t\t\t\t\t\t\treturn value || row?.original?.item_data?.name;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tpaginationModel={{ pageNo: 1, limit: 10 }}\n\t\t\t\t\t\t\ttotalPages={20}\n\t\t\t\t\t\t\tenableColumnDragging={true}\n\t\t\t\t\t\t\tisResetRow={false}\n\t\t\t\t\t\t\tenableEditing={false}\n\t\t\t\t\t\t\tcolumnOrder={['mrt-row-select']}\n\t\t\t\t\t\t\tenableRowSelection={false}\n\t\t\t\t\t\t\tdisabledDefaultActionColumnIcon\n\t\t\t\t\t\t\tenableBottomToolbar={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Modal>\n\t);\n};\n\nexport default ItemResponseDetails;\n","import { Typography } from \"../../components\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst LabelValue = ({\r\n key,\r\n label,\r\n children\r\n}: {\r\n key: string;\r\n label: string;\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <Box key={key} gap={1} flexDirection=\"column\" display=\"flex\">\r\n <Typography type=\"s3\" weight=\"bold\" color=\"theme.secondary.1000\">{label}</Typography>\r\n {children}\r\n </Box>\r\n )\r\n}\r\n\r\nexport { LabelValue };\nexport default LabelValue","import React, { useRef, useEffect, useMemo } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface LineChartProps {\n data: DataPoint[];\n numOfLines?: number;\n width?: number;\n height?: number;\n}\n\nconst formatNumber = (num: number) => {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num;\n};\n\nconst LineChart: React.FC<LineChartProps> = ({\n data,\n numOfLines = 5,\n width = 500,\n height = 300,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const maxValue = useMemo(() => {\n return Math.max(...data.map((d) => d.value));\n }, [data]);\n\n const yAxisMaxValue = useMemo(() => {\n return maxValue * 1.25;\n }, [maxValue]);\n\n const yAxisTicks = useMemo(() => {\n const ticks = [];\n const interval = yAxisMaxValue / numOfLines;\n for (let i = 0; i <= numOfLines; i++) {\n ticks.push(interval * i);\n }\n return ticks;\n }, [yAxisMaxValue, numOfLines]);\n\n const needsHorizontalScroll = data.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minGroupWidth, width)\n : width;\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n useEffect(() => {\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = { top: 20, right: 20, bottom: 70, left: 40 };\n const barWidth = calculatedChartWidth - margin.left - margin.right;\n const barHeight = height - margin.top - margin.bottom;\n\n const mousemove = (event: any, d: any) => {\n\n const xPosition = event.offsetX + margin.left - 25;\n const yPosition = event.offsetY + margin.top - 40;\n const text = `${d.label} - ${d.value}`;\n tooltip\n .attr(\"x\", xPosition)\n .attr(\"y\", yPosition)\n .style(\"opacity\", 9)\n .style(\"height\", text.length >= 16 ? 50 : 35);\n\n tooltipText.html(text);\n };\n\n const mouseleave = () => {\n tooltip.style(\"opacity\", 0);\n };\n\n const x = d3\n .scaleBand()\n .domain(data.map((d: any) => d.label))\n .range([0, barWidth])\n .padding(0.1);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(data, (d: any) => d.value)])\n .range([barHeight, 0]);\n\n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const line = d3\n .line<DataPoint>()\n //@ts-expect-error not applicable\n .x((d: any) => x(d.label) + x.bandwidth() / 2)\n .y((d: any) => y(d.value));\n\n chart\n .append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line)\n .style(\"fill\", \"none\")\n .style(\"stroke\", \"#357AF6\")\n .style(\"stroke-width\", 2);\n\n chart\n .selectAll(\".point\")\n .data(data)\n .enter()\n .append(\"circle\")\n .attr(\"class\", \"point\")\n //@ts-expect-error not applicable\n .attr(\"cx\", (d: any) => x(d.label) + x.bandwidth() / 2)\n .attr(\"cy\", (d: any) => y(d.value))\n .attr(\"r\", 4)\n .style(\"fill\", \"#357AF6\")\n .on(\"mousemove\", mousemove)\n .on(\"mouseleave\", mouseleave);\n\n yAxisTicks.slice(1).forEach((tick) => {\n chart\n .append(\"line\")\n .attr(\"class\", \"dotted-line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", y(tick))\n .attr(\"x2\", width)\n .attr(\"y2\", y(tick))\n .style(\"stroke\", \"gray\")\n .style(\"stroke-dasharray\", \"3,3\");\n });\n\n const xAxis = chart\n .append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(0, ${barHeight})`)\n .call(d3.axisBottom(x));\n\n xAxis.selectAll(\".tick line\").remove();\n\n const yAxis = chart\n .append(\"g\")\n .attr(\"class\", \"y-axis\")\n .call(\n d3\n .axisLeft(y)\n .tickValues(yAxisTicks)\n //@ts-expect-error not applicable\n .tickFormat((d: any) => {\n return formatNumber(d);\n })\n .tickSizeOuter(0),\n 0,\n );\n\n yAxis.selectAll(\".domain\").remove();\n yAxis.selectAll(\".tick line\").remove();\n\n const tooltip = svg\n .append(\"foreignObject\")\n .attr(\"class\", \"tooltip\")\n .attr(\"width\", 120)\n .attr(\"height\", 20)\n .style(\"opacity\", 0)\n .style(\"position\", \"absolute\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"none\")\n .style(\"box-shadow\", \"0rem 0rem 0.469rem 0rem rgba(0, 0, 0, 0.15)\")\n .style(\"border-radius\", \"0.313rem\")\n .style(\"padding\", \"0.625rem\")\n .style(\"font-size\", \"0.75rem\");\n\n const tooltipText = tooltip\n .append(\"xhtml:div\")\n .style(\"font-size\", \"0.75rem\")\n .style(\"color\", \"black\");\n }, [data, height, width, yAxisMaxValue, yAxisTicks, calculatedChartWidth]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <svg \n ref={svgRef}\n width={calculatedChartWidth}\n height={height}\n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n />\n </div>\n );\n};\n\nexport default LineChart;\n","import { useState, useCallback } from \"react\";\n\nimport Accordion from \"@mui/material/Accordion\";\nimport Chip from \"@mui/material/Chip\";\nimport AccordionSummary from \"@mui/material/AccordionSummary\";\nimport AccordionDetails from \"@mui/material/AccordionDetails\";\nimport Typography from \"@mui/material/Typography\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport RadioButtonCheckedIcon from \"@mui/icons-material/RadioButtonChecked\";\n\nimport DataEditor, {\n // DataEditorProps,\n GridCellKind,\n Item,\n GridCell,\n // GridColumn,\n // GridColumnIcon\n} from \"@glideapps/glide-data-grid\";\nimport { useExtraCells } from \"@glideapps/glide-data-grid-cells\";\nimport { useLayer } from \"react-laag\";\n\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\";\nimport \"@glideapps/glide-data-grid/dist/index.css\";\n\nexport const List = (props: any) => {\n const [showSearch, setShowSearch] = useState(false);\n const [columns, setColumns] = useState(props.header);\n const [data, setData] = useState(props.tableData);\n const [showMenu, setShowMenu] = useState<any>();\n const [isSubMenuOpen, setIsSubMenuOpen] = useState(true);\n\n const onSearchClose = useCallback(() => setShowSearch(false), []);\n const cellProps = useExtraCells();\n\n const onColumnResize = useCallback(\n (column: any, newSize: any) => {\n setColumns((prevColsMap: any) => {\n const index = columns.findIndex((ci: any) => ci.title === column.title);\n const newArray = [...prevColsMap];\n newArray.splice(index, 1, {\n ...prevColsMap[index],\n width: newSize,\n });\n return newArray;\n });\n },\n [columns],\n );\n\n const getContent = useCallback(\n ([col, row]: Item): GridCell => {\n // console.log(\"cell\", cell)\n // const [col, row]: Item = cell;\n const dataRow = data[row];\n const d = dataRow[columns[col].id];\n\n const { dataType } = columns[col];\n\n if (dataType === \"Number\") {\n return {\n allowOverlay: true,\n kind: GridCellKind.Number,\n data: d,\n displayData: d.toString(),\n };\n } else if (dataType === \"Image\") {\n return {\n kind: GridCellKind.Image,\n data: [d],\n allowOverlay: true,\n allowAdd: true,\n };\n } else if (dataType === \"Bubble\") {\n return {\n kind: GridCellKind.Bubble,\n data: [\"sss\", \"ss\"],\n allowOverlay: true,\n };\n } else if (dataType === \"SingleDropdown\") {\n return {\n kind: GridCellKind.Custom,\n allowOverlay: true,\n copyData: \"4\",\n data: {\n kind: \"dropdown-cell\",\n allowedValues: [\"Good\", \"Better\", \"Best\"],\n value: \"Good\",\n },\n };\n } else if (dataType === \"DatePicker\") {\n return {\n kind: GridCellKind.Custom,\n allowOverlay: true,\n copyData: \"4\",\n data: {\n kind: \"date-picker-cell\",\n date: new Date(),\n displayDate: new Date().toISOString(),\n format: \"date\",\n },\n };\n } else {\n return {\n kind: GridCellKind.Text,\n allowOverlay: true,\n readonly: false,\n displayData: d,\n data: d,\n };\n }\n },\n [data, columns],\n );\n\n const onCellEdited = useCallback(\n (cell: any, newValue: any) => {\n if (newValue.kind !== GridCellKind.Text) {\n // we only have text cells, might as well just die here.\n return;\n }\n\n const [col, row] = cell;\n const key = columns[col].id;\n data[row][key] = newValue.data;\n\n setData(data);\n },\n [data, columns],\n );\n\n const onDragOverCell = (cell: any) => {\n console.log(cell);\n };\n\n const onRowAppended = useCallback(() => {\n const newRowObj: any = {};\n console.log(Object.entries(data[0]));\n for (const [key] of Object.entries(data[0])) {\n newRowObj[key] = \"\";\n }\n setData([...data, newRowObj]);\n }, [data]);\n\n const onHeaderClicked = useCallback(() => {\n console.log(\"Header clicked\");\n }, []);\n\n const onOutsideClick = () => {\n if (isSubMenuOpen) {\n setShowMenu(undefined);\n setIsSubMenuOpen((cv) => !cv);\n }\n setIsSubMenuOpen((cv) => !cv);\n };\n\n const { renderLayer, layerProps } = useLayer({\n isOpen: showMenu !== undefined,\n triggerOffset: 2,\n onOutsideClick,\n trigger: {\n getBounds: () => ({\n bottom: (showMenu?.bounds.y ?? 0) + (showMenu?.bounds.height ?? 0),\n height: showMenu?.bounds.height ?? 0,\n left: showMenu?.bounds.x ?? 0,\n right: (showMenu?.bounds.x ?? 0) + (showMenu?.bounds.width ?? 0),\n top: showMenu?.bounds.y ?? 0,\n width: showMenu?.bounds.width ?? 0,\n }),\n },\n placement: \"bottom-end\",\n auto: true,\n });\n\n const onHeaderMenuClick = useCallback((col: any, bounds: any) => {\n setIsSubMenuOpen((cv) => !cv);\n setShowMenu({ col, bounds });\n }, []);\n\n const onAddCol = useCallback(() => {\n const newData = data.map((row: any) => {\n return { ...row, new: \"\" };\n });\n setData(newData);\n // setIndexes([...Object.keys(data[0]), \"new\"]);\n setColumns([\n ...columns,\n {\n title: \"New\",\n id: \"new\",\n hasMenu: true,\n },\n ]);\n }, [data, columns]);\n\n const onColMoved = useCallback((startIndex: any, endIndex: any) => {\n setColumns((old: any) => {\n const newCols = [...old];\n const [toMove] = newCols.splice(startIndex, 1);\n newCols.splice(endIndex, 0, toMove);\n return newCols;\n });\n }, []);\n\n return (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>\n <Chip\n size=\"small\"\n color=\"primary\"\n icon={<RadioButtonCheckedIcon />}\n label=\"Accordion 1\"\n />\n </Typography>\n </AccordionSummary>\n <AccordionDetails></AccordionDetails>\n {/* <button onClick={() => setShowSearch(true)}>\n Show Search\n </button> */}\n <DataEditor\n {...cellProps}\n getCellContent={getContent}\n columns={columns}\n onCellEdited={onCellEdited}\n onHeaderMenuClick={onHeaderMenuClick}\n onHeaderClicked={onHeaderClicked}\n onCellContextMenu={(_, e) => e.preventDefault()}\n rows={data.length}\n rowMarkers={\"both\"}\n showSearch={showSearch}\n getCellsForSelection={true}\n onSearchClose={onSearchClose}\n onRowAppended={onRowAppended}\n onDragOverCell={onDragOverCell}\n onRowMoved={(s, e) => window.alert(`Moved row ${s} to ${e}`)}\n // height={\"100px\"}\n onColumnMoved={onColMoved}\n trailingRowOptions={{\n // How to get the trailing row to look right\n sticky: true,\n tint: false,\n hint: \"New row...\",\n // themeOverride: true\n }}\n smoothScrollX={true}\n smoothScrollY={true}\n verticalBorder={(c) => c > 0}\n // freezeColumns={1}\n onDragStart={(e) => {\n e.setData(\"text/plain\", \"Drag data here!\");\n }}\n rightElement={\n <div className=\"addCol\">\n <button onClick={() => onAddCol()}>+</button>\n </div>\n }\n rightElementProps={{\n fill: false,\n sticky: true,\n }}\n onColumnResize={onColumnResize}\n />\n <div id=\"portal\" />\n {showMenu !== undefined &&\n renderLayer(\n <div\n {...layerProps}\n style={{\n ...layerProps.style,\n width: 300,\n padding: 4,\n borderRadius: 8,\n backgroundColor: \"white\",\n border: \"1px solid black\",\n }}\n >\n <ul>\n <li>Action 1</li>\n <li>Action 2</li>\n <li>Action 3</li>\n </ul>\n </div>,\n )}\n </Accordion>\n );\n};\n\nexport default List;\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport { MaterialTable, ActionBar, Fallback, Footer, Button, ConfirmModal as ConfirmPopUp } from '../../components';\r\nimport { viewTypes } from '../../constants';\r\n\r\nimport { IListingComponentProps, IListingState } from './types'\r\nimport logo from '../../assets/images';\r\n\r\nimport './listing.scss';\r\nimport { useDataFetcher, apiHelper } from '../../hooks';\r\nimport { useDispatch } from 'react-redux';\r\nimport { usePages } from '../../hooks';\r\nimport { useAppSelector } from '../../redux';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nconst ListingComponent: React.FC<IListingComponentProps> = ({\r\n title,\r\n tableColumns,\r\n columnOrder = ['mrt-row-select'],\r\n rowActionMenu,\r\n destructiveActionMenu,\r\n handleAddButton,\r\n searchText,\r\n handleSearch,\r\n disabledViews = ['Kanban', 'Calendar', 'Gantt'],\r\n fields,\r\n selectedIds = [],\r\n pageName,\r\n importModuleName,\r\n showAddButton = true,\r\n actionButtons,\r\n paginationResource,\r\n enablePages = false,\r\n GridComponent,\r\n onSelectRow,\r\n onColumnOrdering,\r\n onColumnVisibility,\r\n onSortingChange,\r\n fallbackIcon,\r\n className = '',\r\n onDeleteConfirm,\r\n deleteTitle,\r\n deleteDescription,\r\n fetchApi,\r\n resetState,\r\n setPaginationModel,\r\n deleteApi,\r\n storeName,\r\n isUseFields,\r\n customeFilter,\r\n customFields,\r\n isLoading: loadinState,\r\n customRows = [],\r\n ...rest\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n //dispatch\r\n const dispatch = useDispatch()\r\n\r\n //Page Context\r\n const { activePage, updatePageInfo } = usePages();\r\n //Store \r\n const {\r\n paginationModel,\r\n rows,\r\n isLoading,\r\n } = useAppSelector((store) => store?.[storeName]);\r\n\r\n\r\n const { pageNo, limit: pLimit, totalCount } = paginationModel;\r\n const limit = activePage.page_size || pLimit;\r\n const skip = limit * (pageNo - 1);\r\n\r\n\r\n // Local state\r\n const [listingState, setListingState] = useState<IListingState>({\r\n selectedRows: selectedIds,\r\n itemToDelete: null,\r\n isDeleting: false\r\n });\r\n\r\n // Calculate pagination values\r\n const total = Math.ceil(totalCount / limit);\r\n\r\n // Memoized table data\r\n const tableRows = useMemo(() => customRows?.length ? customRows : rows, [rows, customRows]);\r\n\r\n // Handle row selection\r\n const handleRowSelection = (selectedRows: any[]) => {\r\n const selectedRowIds = selectedRows.map((row) => row.original.id);\r\n setListingState(prev => ({ ...prev, selectedRows: selectedRowIds }));\r\n onSelectRow?.(selectedRows);\r\n };\r\n\r\n // Handle pagination changes\r\n const handlePaginationChange = (model: any) => {\r\n if (activePage.page_size !== model?.limit) {\r\n updatePageInfo({ page_size: model.limit });\r\n }\r\n handlePaginationModel(model);\r\n };\r\n\r\n // Handle search\r\n const handleSearchChange = (search: string) => {\r\n updatePageInfo({ search });\r\n handlePaginationModel({ pageNo: 1 });\r\n handleSearch?.(search);\r\n };\r\n\r\n // Handle delete confirmation\r\n const handleDeleteClick = (item: any) => {\r\n setListingState(prev => ({ ...prev, itemToDelete: item }));\r\n };\r\n\r\n const handleDeleteConfirm = async () => {\r\n if (!listingState.itemToDelete) return;\r\n\r\n setListingState(prev => ({ ...prev, isDeleting: true }));\r\n\r\n try {\r\n onDeleteConfirm ? await onDeleteConfirm(listingState.itemToDelete) : await deleteRecord(listingState.itemToDelete);\r\n setListingState(prev => ({ ...prev, itemToDelete: null, isDeleting: false }));\r\n } catch (error) {\r\n setListingState(prev => ({ ...prev, isDeleting: false }));\r\n }\r\n };\r\n\r\n const handleDeleteCancel = () => {\r\n setListingState(prev => ({ ...prev, itemToDelete: null }));\r\n };\r\n\r\n // Enhance destructive actions to include delete confirmation\r\n const enhancedDestructiveActions = useMemo(() => {\r\n if (!destructiveActionMenu) return undefined;\r\n\r\n return destructiveActionMenu.map(action => ({\r\n ...action,\r\n handleAction: action.label.toLowerCase().includes('delete')\r\n ? handleDeleteClick\r\n : action.handleAction\r\n }));\r\n }, [destructiveActionMenu]);\r\n\r\n //Handle pagination model\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n if (activePage.page_size != model?.limit) {\r\n updatePageInfo({ page_size: model.limit });\r\n }\r\n dispatch(setPaginationModel(model));\r\n }\r\n\r\n //Delete\r\n const deleteRecord = async (requestToDelete: any) => {\r\n const response: any = await dispatch(deleteApi(String(requestToDelete.id)));\r\n apiHelper(response, () => {\r\n enqueueSnackbar(\r\n ` ${title}: ${requestToDelete?.id} ${t('common.msg.deleted')}`,\r\n )\r\n getData()\r\n })\r\n };\r\n\r\n\r\n\r\n\r\n //clean up\r\n const cleanUp = useCallback(() => {\r\n dispatch(resetState())\r\n }, [dispatch, resetState]);\r\n\r\n // Data fetching\r\n const getData = useDataFetcher(\r\n tableColumns?.length ? tableColumns : activePage,\r\n { skip, limit },\r\n fetchApi,\r\n customeFilter,\r\n [],\r\n true,\r\n customFields\r\n\r\n )\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [getData])\r\n\r\n useEffect(() => {\r\n return cleanUp;\r\n }, [cleanUp]);\r\n\r\n useEffect(() => {\r\n if (activePage?.views?.length) return;\r\n updatePageInfo({\r\n active_view: viewTypes.TABLE,\r\n views: [\r\n {\r\n label: 'Table',\r\n position: 0\r\n }\r\n ]\r\n })\r\n }, [activePage?.views])\r\n\r\n return (\r\n <section className={`listing-component ${className}`}>\r\n <ActionBar\r\n title={title}\r\n data={activePage?.views || [\r\n {\r\n label: 'Table',\r\n position: 0\r\n }\r\n ]}\r\n setData={(views) => updatePageInfo({ views })}\r\n active={activePage.active_view}\r\n setActive={(tab) => updatePageInfo({ active_view: tab })}\r\n handleAddButton={handleAddButton}\r\n searchText={searchText || activePage.search || ''}\r\n handleSearch={handleSearchChange}\r\n disabledViews={disabledViews}\r\n fields={fields}\r\n isUseFields={isUseFields}\r\n selectedIds={listingState.selectedRows}\r\n pageName={pageName}\r\n importModuleName={importModuleName}\r\n button={showAddButton}\r\n actionBtn={actionButtons}\r\n {...rest}\r\n />\r\n\r\n\r\n <>\r\n {activePage?.active_view === viewTypes.TABLE && (\r\n <MaterialTable\r\n rows={tableRows || []}\r\n columns={tableColumns}\r\n paginationModel={paginationModel}\r\n totalPages={total}\r\n columnOrder={[...columnOrder, ...activePage.column_order]}\r\n states={{ isLoading: loadinState || isLoading }}\r\n onSortingChange={onSortingChange ? (sort) => {\r\n updatePageInfo({ sort });\r\n onSortingChange(sort);\r\n } : undefined}\r\n enableColumnDragging={false}\r\n enableEditing={false}\r\n rowActionMenu={rowActionMenu}\r\n destructiveActionMenu={enhancedDestructiveActions}\r\n isResetRow={false}\r\n onSelectRow={handleRowSelection}\r\n handleColumnOrdering={onColumnOrdering ? (colOrder) => {\r\n const newOrder = colOrder.slice(1);\r\n updatePageInfo({ column_order: newOrder });\r\n onColumnOrdering(newOrder);\r\n } : undefined}\r\n onColumnVisibility={onColumnVisibility ? (columns) => {\r\n updatePageInfo({ visible_columns: columns });\r\n onColumnVisibility(columns);\r\n } : undefined}\r\n />\r\n )}\r\n\r\n {activePage?.active_view === viewTypes.GRID && GridComponent && (\r\n <GridComponent\r\n data={tableRows}\r\n rowActionMenu={rowActionMenu}\r\n destructiveActionMenu={enhancedDestructiveActions}\r\n />\r\n )}\r\n\r\n {!activePage?.active_view && !isLoading && (\r\n <Fallback\r\n heading={title}\r\n icon={fallbackIcon || <img src={logo.shippmentFallback} alt=\"fallback\" />}\r\n >\r\n {showAddButton && handleAddButton && (\r\n <Button\r\n variant='contained'\r\n startIcon={<AddIcon />}\r\n onClick={handleAddButton}\r\n >\r\n {`${t('common.add')} ${t('common.new')}`}\r\n </Button>\r\n )}\r\n </Fallback>\r\n )}\r\n\r\n <Footer\r\n total={total}\r\n paginationModel={{\r\n ...paginationModel,\r\n limit: activePage.page_size\r\n }}\r\n handlePaginationModel={handlePaginationChange}\r\n resource={paginationResource}\r\n enablePages={enablePages}\r\n />\r\n\r\n <ConfirmPopUp\r\n open={Boolean(listingState.itemToDelete)}\r\n onClose={handleDeleteCancel}\r\n onConfirm={handleDeleteConfirm}\r\n loading={listingState.isDeleting}\r\n title={deleteTitle || `${t('common.delete')} ${title}`}\r\n description={\r\n deleteDescription\r\n ? deleteDescription(listingState.itemToDelete)\r\n : `${t('common.deleteMsg')} ${title}: ${listingState.itemToDelete?.id || listingState.itemToDelete?.name || ''} ?`\r\n }\r\n />\r\n </>\r\n </section>\r\n );\r\n};\r\n\r\nexport default ListingComponent;\r\n","import React, { useState } from \"react\";\nimport { IconButton } from \"@mui/material\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport Menu from \"@mui/material/Menu\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport CardWrapper from \"../../components/card-wrapper/card-wrapper\";\nimport Typography from \"../typography/typography\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport images from \"../../assets/images\";\n\nimport \"./multiline.scss\";\n\ninterface Option {\n id: number;\n name: string;\n role: string;\n}\ninterface MultiProps {\n options: Option[];\n}\n\nexport const MultiLine = (props: MultiProps) => {\n const { options } = props;\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSearchEvent = (searchQuery: string) => {\n const lowerCaseQuery = searchQuery.toLowerCase();\n const filtered = options.filter((option: Option) => {\n return (\n option.name.toLowerCase().includes(lowerCaseQuery) ||\n option.role.toLowerCase().includes(lowerCaseQuery)\n );\n });\n setFilteredOptions(filtered);\n };\n\n const handleCreateClick = () => {\n alert(\"Clicked \");\n };\n\n return (\n <div className=\"main-card-nodal\">\n <CardWrapper>\n <div className=\"payable-header\">\n <Typography className=\"payable-title\">Payable Account</Typography>\n <IconButton color=\"inherit\" size=\"small\" onClick={handleClick}>\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>\n <MenuItem onClick={handleClose}>View</MenuItem>\n </Menu>\n </div>\n <SearchBar\n placeholder=\"Search Companies\"\n handleSearch={(e) => {\n handleSearchEvent(e);\n }}\n debounceTime={1}\n />\n {filteredOptions.map((option: Option) => (\n <div key={option.id} className=\"list-items\">\n <Typography className=\"title\">{option.name}</Typography>\n <Typography className=\"description\">{option.role}</Typography>\n </div>\n ))}\n\n <div className=\"bottom-footer\" onClick={handleCreateClick}>\n <AddIcon />\n <Typography>Create a Cost Center</Typography>\n </div>\n </CardWrapper>\n </div>\n );\n};\n\nexport default MultiLine;\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\n\nexport interface IMultiLineChartProps {\n data: any;\n width?: number;\n height?: number;\n margin?: { top: number, right: number, bottom: number, left: number };\n yAxisData: any;\n xAxisData: any;\n colors?: string[];\n line?: boolean;\n yAxisLabelType?: 'inPercent' | 'inValue' | 'custom';\n customLabelFormatter?: (value: number) => string;\n currency?: string\n}\nconst formatNumber = (num: number, symbol: string, labelType: string) => {\n if (labelType === 'inPercent') {\n return `${d3.format(\".0%\")(num / 100)}`;\n } else if (labelType === 'inValue') {\n return `${symbol||''} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n }\n return num.toString();\n};\n\n\n\nconst MultiLineChart = ({\n data,\n yAxisData,\n xAxisData,\n colors = ['steelblue', 'orange', 'green', 'red'], // Default colors\n height = 400,\n margin = { top: 20, right: 50, bottom: 30, left: 50 },\n line = false,\n yAxisLabelType = 'inValue',\n currency,\n customLabelFormatter,\n}: IMultiLineChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n useEffect(() => {\n }, [yAxisLabelType]);\n // ResizeObserver to adjust the chart size dynamically\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n \n if (containerWidth === 0) return; \n\n const svg = d3.select(svgRef.current);\n svg.selectAll(\"*\").remove(); \n\n const innerWidth = containerWidth-margin.left- margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n // Scales\n const x = d3.scaleLinear()\n .domain([0, xAxisData.length]) // Linear scale based on index of xAxisData\n .range([0, innerWidth]);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(yAxisData) as number])\n .nice()\n .range([innerHeight, 0]);\n\n\n // Append x-axis\n const xAxis = svg.append(\"g\")\n .attr(\"class\", \"x-axis\")\n .attr(\"transform\", `translate(${margin.left},${height - margin.bottom})`)\n .call(d3.axisBottom(x)\n .ticks(xAxisData.length - 1)\n .tickFormat((d, i) => xAxisData[i])\n );\n\n xAxis.selectAll(\"text\")\n .attr(\"transform\", \"translate(20, 10)\") // Push labels down by 10px\n .style(\"text-anchor\", \"middle\"); // Keep the labels centered\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n\n // Append y-axis\n const yAxis = svg.append(\"g\")\n .attr(\"class\", \"y-axis\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`)\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) =>\n customLabelFormatter\n ? customLabelFormatter(d)\n : formatNumber(d, currency, yAxisLabelType)\n )\n .tickSizeOuter(0) as any,);\n\n if (line) {\n yAxis.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '6,3') // Dotted line\n .style('stroke-width', 1);\n }\n xAxis.selectAll(\".tick line\").remove();\n yAxis.selectAll(\".tick line\").remove();\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n\n // Plot the lines for each dataset\n\n Object.keys(data).forEach((key, index) => {\n if (key !== 'months') {\n const chartLine = d3.line()\n .x((d, i) => x(i)) // Use index-based positioning for x-axis\n .y((d: any) => y(d)).curve(data[key].isSmooth ? d3.curveMonotoneX : d3.curveLinear);\n // Append the line\n svg.append(\"path\")\n .datum(data[key]?.data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", colors[index % colors.length])\n .attr(\"stroke-width\", 2)\n .attr(\"transform\", `translate(${margin.left},${margin.top})`)\n .attr(\"d\", chartLine)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"stroke-width\", 4);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"stroke-width\", 2);\n });\n\n\n\n // Append circles for each data point\n if (data[key]?.displayDot) {\n svg.selectAll(`.circle-${key}`)\n .data(data[key]?.data)\n .enter()\n .append(\"circle\")\n .attr(\"class\", `circle-${key}`)\n .attr(\"cx\", (d, i) => x(i) + margin.left) // Adjust for margin.left\n .attr(\"cy\", (d: any) => y(d) + margin.top) // Adjust for margin.top\n .attr(\"r\", 4) // Circle radius\n .attr(\"fill\", colors[index % colors.length])\n .attr(\"stroke\", \"white\") // Optional: adds a border for contrast\n .attr(\"stroke-width\", 1.5)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"r\", 6); // Increase size on hover\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"r\", 4); // Return to normal size\n });\n }\n\n }\n });\n }, [data, yAxisData, xAxisData, height, containerWidth, colors, margin, line, yAxisLabelType, currency, customLabelFormatter]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <svg ref={svgRef} width=\"100%\" height={height} viewBox={`0 0 ${containerWidth} ${height}`} />\n </div>\n </div>\n );\n};\n\nexport { MultiLineChart };\nexport default MultiLineChart;\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport {\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTableRow,\r\n\tIconButton,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport Typography from '../../typography/typography';\r\nimport './dynamic-report.scss'\r\nimport { DynamicRow } from \"./dynamic-rows\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { formateValueByType, renderEmptyRowsFallback } from \"../../../utils/common-utility\";\r\nimport SearchBar from \"../../search-bar/search-bar\";\r\nimport dayjs from \"dayjs\";\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { ArrowDown } from \"../../icons\";\r\nimport { ArrowUp } from \"../../icons\";\r\nimport {\r\n\tcalculateColumnWidths,\r\n\tsampleRowContent,\r\n\tDEFAULT_MEASUREMENT_CONFIG,\r\n\tgetCheckboxColumnWidth\r\n} from \"../../../utils/text-measurement\";\r\n\r\ninterface IReportTableProps {\r\n\tdata: any[];\r\n\theaders: any[];\r\n\ttableHeaders: any[];\r\n\ttotalHeaders?: any[];\r\n\thandleSort?: (data: string, direction: string) => void;\r\n\tcollapsLevel?: number,\r\n\tenableSearch?: boolean,\r\n\theaderHeight?: string,\r\n\tisIncrese?: boolean,\r\n\tonSelectionChange?: (selectedData: any[]) => void;\r\n\tenableCheckbox?: boolean;\r\n\tafterHeader?: React.ReactNode | (() => React.ReactNode);\r\n\ttotalKey?: string\r\n\trowHeight?: string\r\n}\r\n\r\n// Updated DynamicRow interface and component in separate file\r\nexport interface IDynamicRowProps {\r\n\trowData: any;\r\n\tlevel: number;\r\n\ttableHeaders: any[];\r\n\ttotalHeaders: any[];\r\n\theaders: any[];\r\n\tcollapsAll: boolean;\r\n\tcollapsLevel: number;\r\n\tisIncrese: boolean,\r\n\tdata: any,\r\n\trowPath: number[],\r\n\tselectedRowPaths: number[][],\r\n\tonCheckboxChange: (rowPath: number[], checked: boolean) => void;\r\n\tdataSlice: any[];\r\n\tdataIndex: number;\r\n\tenableCheckBox: boolean\r\n\trowHeight?: string\r\n\tcolumnWidths?: { [key: string]: number }\r\n}\r\n\r\nexport function ReportTable({\r\n\theaders,\r\n\tdata,\r\n\ttableHeaders,\r\n\ttotalHeaders = [],\r\n\thandleSort,\r\n\tcollapsLevel = 0,\r\n\tisIncrese,\r\n\tenableSearch = true,\r\n\theaderHeight = '16px',\r\n\tonSelectionChange,\r\n\tenableCheckbox = false,\r\n\tafterHeader,\r\n\ttotalKey = 'total',\r\n\trowHeight = 'auto'\r\n}: IReportTableProps) {\r\n\r\n\ttype HeaderType = {\r\n\t\ttype?: string;\r\n\t\t[key: string]: any;\r\n\t};\r\n\tconst [filter, setFilter] = useState(null)\r\n\tconst [baseData, setBaseData] = useState<any>(null);\r\n\tconst [formatedData, setFormatedData] = useState<any>(null);\r\n\tconst [searchQueries, setSearchQueries] = useState<any>({});\r\n\tconst { t } = useTranslation()\r\n\tconst [selectedRowPaths, setSelectedRowPaths] = useState<number[][]>([]);\r\n\tconst [columnWidths, setColumnWidths] = useState<{ [key: string]: number }>({});\r\n\tconst [resizingColumn, setResizingColumn] = useState<string | null>(null);\r\n\tconst resizeStartX = useRef<number>(0);\r\n\tconst resizeStartWidth = useRef<number>(0);\r\n\tconst headerRefs = useRef<{ [key: string]: HTMLElement | null }>({});\r\n\tconst [isInitialized, setIsInitialized] = useState(false);\r\n\tconst [isSorting, setIsSorting] = useState(false);\r\n\r\n\tfunction getNestedValue(obj: any, path: any) {\r\n\t\tif (path?.name == '') {\r\n\t\t\treturn ''\r\n\t\t}\r\n\r\n\t\tconst formattedValue = path?.name?.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) || (path?.name.split('.').reduce((acc: any, key: any) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) == '0' ? '0' : '-');\r\n\t\treturn formateValueByType({\r\n\t\t\tvalue: formattedValue,\r\n\t\t\t...path\r\n\t\t})\r\n\t}\r\n\t// Initialize column widths based on content\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialized && data && headers.length > 0 && !isSorting) {\r\n\t\t\t// Sample row content for width calculation\r\n\t\t\tconst rowContentSamples = sampleRowContent({\r\n\t\t\t\tmaxRows: 9999,\r\n\t\t\t\theaders,\r\n\t\t\t\tdata: Array.isArray(data) ? data : data?.[tableHeaders[0]?.rowKey] || [],\r\n\t\t\t\ttableHeaders,\r\n\t\t\t\tt,\r\n\t\t\t});\r\n\r\n\t\t\t// Calculate optimal widths based on header and content\r\n\t\t\tconst calculatedWidths = calculateColumnWidths(\r\n\t\t\t\theaders,\r\n\t\t\t\trowContentSamples,\r\n\t\t\t\tDEFAULT_MEASUREMENT_CONFIG,\r\n\t\t\t\t{ min: 100, padding: 32, max: 400 },\r\n\t\t\t\tt\r\n\t\t\t);\r\n\t\t\tsetColumnWidths(calculatedWidths);\r\n\t\t\tsetIsInitialized(true);\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [data, headers, isInitialized, isSorting, tableHeaders]);\r\n\t// useEffect(() => {\r\n\t// if (!isInitialized && data && headers.length > 0) {\r\n\t// const initialWidths: { [key: string]: number } = {};\r\n\r\n\t// headers.forEach((header) => {\r\n\t// // Check if width is already specified in header config\r\n\t// if (header.width) {\r\n\t// const numericWidth = typeof header.width === 'string'\r\n\t// ? parseInt(header.width.replace(/[^\\d]/g, ''))\r\n\t// : header.width;\r\n\t// initialWidths[header.name] = numericWidth;\r\n\t// } else {\r\n\t// // Calculate width based on header ref if available\r\n\t// const headerElement = headerRefs.current[header.name];\r\n\t// if (headerElement) {\r\n\t// const contentWidth = headerElement.scrollWidth;\r\n\t// // Add some padding (e.g., 48px for icons and padding)\r\n\t// initialWidths[header.name] = Math.max(100, contentWidth + 48);\r\n\t// } else {\r\n\t// // Default width\r\n\t// initialWidths[header.name] = 100;\r\n\t// }\r\n\t// }\r\n\t// });\r\n\t// setColumnWidths(initialWidths);\r\n\t// setIsInitialized(true);\r\n\t// }\r\n\t// }, [data, headers, isInitialized]);\r\n\r\n\tfunction getAllRowPaths(data: any, tableHeaders: any[], rowKey: string, currentPath: number[] = [], level: number = 0): number[][] {\r\n\t\tif (!Array.isArray(data)) return [];\r\n\t\tlet paths: number[][] = [];\r\n\t\tdata.forEach((row: any, idx: number) => {\r\n\t\t\tconst path = [...currentPath, idx];\r\n\t\t\tif (tableHeaders[level]?.enableCheckbox) {\r\n\t\t\t\tpaths.push(path);\r\n\t\t\t}\r\n\t\t\tconst nextLevel = level + 1;\r\n\t\t\tconst nextRowKey = tableHeaders[nextLevel]?.rowKey;\r\n\t\t\tif (nextRowKey && Array.isArray(row[nextRowKey])) {\r\n\t\t\t\tpaths = paths.concat(getAllRowPaths(row[nextRowKey], tableHeaders, nextRowKey, path, nextLevel));\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn paths;\r\n\t}\r\n\r\n\tconst handleCheckboxChange = (rowPath: number[], checked: boolean) => {\r\n\t\tsetSelectedRowPaths(prev => {\r\n\t\t\tconst next = checked\r\n\t\t\t\t? [...prev, rowPath]\r\n\t\t\t\t: prev.filter(path => !(path.length === rowPath.length && path.every((v, i) => v === rowPath[i])));\r\n\t\t\treturn next;\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleHeaderCheckboxChange = (checked: boolean) => {\r\n\t\tconst allPaths = getAllRowPaths(\r\n\t\t\tArray.isArray(formatedData) ? formatedData : formatedData?.[tableHeaders[0]?.rowKey],\r\n\t\t\ttableHeaders,\r\n\t\t\ttableHeaders[0]?.rowKey\r\n\t\t);\r\n\t\tif (checked) {\r\n\t\t\tsetSelectedRowPaths(allPaths);\r\n\t\t} else {\r\n\t\t\tsetSelectedRowPaths([]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst allRowPaths = getAllRowPaths(\r\n\t\tArray.isArray(formatedData) ? formatedData : formatedData?.[tableHeaders[0]?.rowKey],\r\n\t\ttableHeaders,\r\n\t\ttableHeaders[0]?.rowKey\r\n\t);\r\n\tconst allSelected = allRowPaths.length > 0 && allRowPaths.every(path =>\r\n\t\tselectedRowPaths.some(sel => sel.length === path.length && sel.every((v, i) => v === path[i]))\r\n\t);\r\n\tconst someSelected = allRowPaths.some(path =>\r\n\t\tselectedRowPaths.some(sel => sel.length === path.length && sel.every((v, i) => v === path[i]))\r\n\t);\r\n\r\n\tfunction searchReportNestedByKey(\r\n\t\tobj: any,\r\n\t\tquery: string,\r\n\t\tkeysToSearch: string | string[] | null,\r\n\t\theader: HeaderType\r\n\t): boolean {\r\n\t\tif (obj == null) return false;\r\n\t\tconst queryLower = query.toLowerCase();\r\n\t\tif (typeof keysToSearch === 'string') {\r\n\t\t\tkeysToSearch = [keysToSearch];\r\n\t\t}\r\n\t\tif (header?.type == 'date') {\r\n\t\t\treturn dayjs(obj).format('DD-MM-YYYY').includes(queryLower);\r\n\t\t}\r\n\r\n\t\tif (typeof obj === 'string') {\r\n\t\t\treturn obj.toLowerCase().includes(queryLower);\r\n\t\t}\r\n\r\n\t\tif (typeof obj === 'object') {\r\n\t\t\tif (Array.isArray(obj)) {\r\n\t\t\t\treturn obj.some(item => searchReportNestedByKey(item, queryLower, keysToSearch, header));\r\n\t\t\t}\r\n\t\t\tif (keysToSearch) {\r\n\t\t\t\treturn keysToSearch.some(key => {\r\n\t\t\t\t\tconst val = obj[key];\r\n\t\t\t\t\tif (val != null) {\r\n\t\t\t\t\t\treturn typeof val === 'string' ? val.toLowerCase().includes(queryLower) : searchReportNestedByKey(val, queryLower, null, header);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst nestedObj = Object.keys(obj).filter(k => typeof obj[k] === 'object' && obj[k] !== null);\r\n\t\t\t\t\tif (nestedObj.length > 0) {\r\n\t\t\t\t\t\treturn nestedObj.some(n => searchReportNestedByKey(obj[n], queryLower, null, header));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn Object.values(obj).some(val => searchReportNestedByKey(val, queryLower, null, header));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn String(obj).toLowerCase().includes(queryLower);\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tlet filteredData = Array.isArray(baseData) ? baseData : baseData?.[tableHeaders[0]?.rowKey];\r\n\t\tObject.keys(searchQueries)?.forEach(key => {\r\n\t\t\tconst query = searchQueries?.[key]?.query?.toLowerCase();\r\n\t\t\tif (query) {\r\n\t\t\t\tfilteredData = filteredData?.filter((item: any) => searchReportNestedByKey(item, query, key, searchQueries?.[key]?.header));\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetFormatedData(Array.isArray(baseData) ? filteredData : { ...baseData, [tableHeaders[0]?.rowKey]: filteredData });\r\n\t\t//eslint-disable-next-line\r\n\t}, [searchQueries, baseData]);\r\n\r\n\tconst handleSearch = (searchQuery: string, key: string, header: any) => {\r\n\t\tsetSearchQueries((prev: any) => ({\r\n\t\t\t...prev,\r\n\t\t\t[key]: {\r\n\t\t\t\tquery: searchQuery,\r\n\t\t\t\theader\r\n\t\t\t},\r\n\t\t}));\r\n\t};\r\n\r\n\t// Column resize handlers\r\n\tconst handleMouseDown = (e: React.MouseEvent, columnName: string) => {\r\n\t\tconsole.log(\"columnName\", columnName)\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tsetResizingColumn(columnName);\r\n\t\tresizeStartX.current = e.clientX;\r\n\t\tresizeStartWidth.current = columnWidths[columnName] || 100;\r\n\t};\r\n\r\n\tconst handleMouseMove = (e: MouseEvent) => {\r\n\t\tif (!resizingColumn) return;\r\n\t\tconst diff = e.clientX - resizeStartX.current;\r\n\t\tconst newWidth = Math.max(100, resizeStartWidth.current + diff);\r\n\t\tsetColumnWidths(prev => ({\r\n\t\t\t...prev,\r\n\t\t\t[resizingColumn]: newWidth\r\n\t\t}));\r\n\t};\r\n\r\n\tconst handleMouseUp = () => {\r\n\t\tsetResizingColumn(null);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (resizingColumn) {\r\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove);\r\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp);\r\n\t\t\treturn () => {\r\n\t\t\t\tdocument.removeEventListener('mousemove', handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\r\n\t\t\t};\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [resizingColumn]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetBaseData(data);\r\n\t\tsetFormatedData(data);\r\n\t\tsetIsInitialized(false)\r\n\t\t// setIsSorting(false)\r\n\t}, [data]);\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => setIsInitialized(false)\r\n\t}, [])\r\n\r\n\tfunction getDataByPath(data: any, tableHeaders: any[], path: number[]): any {\r\n\t\tlet current = Array.isArray(data) ? data : data?.[tableHeaders[0]?.rowKey];\r\n\t\tlet obj = null;\r\n\t\tfor (let i = 0; i < path.length; i++) {\r\n\t\t\tif (!current || !Array.isArray(current)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tobj = current[path[i]];\r\n\t\t\tif (i < path.length - 1) {\r\n\t\t\t\tconst nextLevel = i + 1;\r\n\t\t\t\tconst nextRowKey = tableHeaders[nextLevel]?.rowKey;\r\n\t\t\t\tcurrent = obj?.[nextRowKey];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectionChange) {\r\n\t\t\tconst filteredPaths = selectedRowPaths.filter(path => {\r\n\t\t\t\tconst level = path.length - 1;\r\n\t\t\t\treturn tableHeaders[level]?.enableCheckbox;\r\n\t\t\t});\r\n\t\t\tconst selectedData = filteredPaths\r\n\t\t\t\t.map(path => getDataByPath(formatedData, tableHeaders, path))\r\n\t\t\t\t.filter(Boolean);\r\n\t\t\tonSelectionChange(selectedData);\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [selectedRowPaths, formatedData]);\r\n\r\n\t// Check if we should show totals\r\n\tconst showTotals = formatedData?.[totalKey] &&\r\n\t\t!(formatedData?.length === 0 || formatedData[tableHeaders[0]?.rowKey]?.length === 0);\r\n\r\n\treturn (\r\n\t\t<TableContainer sx={{\r\n\t\t\twidth: '100%',\r\n\t\t\tmaxHeight: '600px',\r\n\t\t\toverflowX: 'auto',\r\n\t\t\tbackgroundColor: 'white',\r\n\t\t\tdisplay: 'block',\r\n\t\t\tposition: 'relative'\r\n\t\t}}\r\n\t\t\tclassName=\"dynamic-reports\"\r\n\t\t>\r\n\t\t\t<Table\r\n\t\t\t\taria-label=\"collapsible table\"\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborderCollapse: \"collapse\",\r\n\t\t\t\t\twidth: \"max-content\",\r\n\t\t\t\t\ttableLayout: 'fixed',\r\n\t\t\t\t\tmarginBottom: showTotals ? '0px' : '10px'\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TableHead sx={{ position: 'sticky', top: 0, zIndex: 10, backgroundColor: 'white' }}>\r\n\t\t\t\t\t<TableRow sx={{ zIndex: 11, backgroundColor: 'white' }}>\r\n\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\tzIndex: 9999\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tchecked={allSelected}\r\n\t\t\t\t\t\t\t\t\tindeterminate={!allSelected && someSelected}\r\n\t\t\t\t\t\t\t\t\tonChange={e => handleHeaderCheckboxChange(e.target.checked)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{headers.map((obj, index) => {\r\n\t\t\t\t\t\t\tconst enableSorting = obj?.enableSorting ?? true;\r\n\t\t\t\t\t\t\tconst width = columnWidths[t(obj.label)] || 100;\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-header\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\twidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\tminWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\tmaxWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\t\tposition: 'relative',\r\n\t\t\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\t\t\toverflow: 'hidden'\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tref={(el) => headerRefs.current[obj.name] = el}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 'calc(100% - 8px)',\r\n\t\t\t\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\t\t\t\tpaddingRight: '0px'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"s3\"\r\n\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolor='theme.primary'\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\r\n\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: 'nowrap',\r\n\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 'unset'\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{typeof obj?.label === 'string' ? t(obj?.label) : obj?.label}\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{enableSorting && (\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '4px 0px'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(/* e */) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// e.preventDefault();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsSorting(true)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetFilter(filter == obj.name ? null : obj.name)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleSort && handleSort(obj.name, filter == obj.name ? 'asc' : 'desc');\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{filter == obj.name ? <ArrowUp fontSize='small' /> : <ArrowDown fontSize='small' />}\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t{/* Resize Handle */}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-resize-handle\"\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, t(obj.label))}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: '16px',\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: 'col-resize',\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\t'&::before, &::after': {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t'&::before': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\t\tleft: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'background-color 0.2s ease'\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t'&::after': {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\t\t\t\t\tright: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '2px',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'background-color 0.2s ease'\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 2,\r\n\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t{enableSearch && (\r\n\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\theight: headerHeight,\r\n\t\t\t\t\t\t\t\t\tpadding: '0px',\r\n\t\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\t\tzIndex: 9999\r\n\t\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{headers.map((obj, index) => {\r\n\t\t\t\t\t\t\t\tconst width = columnWidths[t(obj.label)] || 50;\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\tkey={obj?.label}\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-search\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tminWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${width}px`,\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: '8px'\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SearchBar sx={{\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: '4px !important',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tInputProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '0.5rem !important',\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearch(e, obj.name, headers[index])} />\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{/* Move afterHeader inside TableHead */}\r\n\t\t\t\t\t{afterHeader && (\r\n\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\tcolSpan={headers.length + (enableCheckbox ? 1 : 0)}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\t\t\t\t\tborderBottom: 'none',\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'white',\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{React.createElement(afterHeader, {\r\n\t\t\t\t\t\t\t\t\tcolumnWidths,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TableHead>\r\n\r\n\r\n\r\n\t\t\t\t{formatedData && (\r\n\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t{Array.isArray(formatedData) ? formatedData?.map((row, index, arr) => (\r\n\t\t\t\t\t\t\t<DynamicRow\r\n\t\t\t\t\t\t\t\tkey={row.id || index}\r\n\t\t\t\t\t\t\t\tlevel={0}\r\n\t\t\t\t\t\t\t\trowPath={[index]}\r\n\t\t\t\t\t\t\t\trowData={row}\r\n\t\t\t\t\t\t\t\ttableHeaders={tableHeaders}\r\n\t\t\t\t\t\t\t\ttotalHeaders={totalHeaders}\r\n\t\t\t\t\t\t\t\theaders={headers}\r\n\t\t\t\t\t\t\t\tcollapsAll={collapsLevel >= index + 1}\r\n\t\t\t\t\t\t\t\tcollapsLevel={collapsLevel}\r\n\t\t\t\t\t\t\t\tisIncrese={!!isIncrese}\r\n\t\t\t\t\t\t\t\tdata={formatedData}\r\n\t\t\t\t\t\t\t\tselectedRowPaths={selectedRowPaths}\r\n\t\t\t\t\t\t\t\tonCheckboxChange={handleCheckboxChange}\r\n\t\t\t\t\t\t\t\tdataSlice={arr}\r\n\t\t\t\t\t\t\t\tdataIndex={index}\r\n\t\t\t\t\t\t\t\tenableCheckBox={enableCheckbox}\r\n\t\t\t\t\t\t\t\trowHeight={rowHeight}\r\n\t\t\t\t\t\t\t\tcolumnWidths={columnWidths}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)) :\r\n\t\t\t\t\t\t\ttableHeaders[0]?.rowKey && (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{formatedData[tableHeaders[0]?.rowKey]?.map((row: any, index: number, arr: any[]) => (\r\n\t\t\t\t\t\t\t\t\t\t<DynamicRow\r\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id || index}\r\n\t\t\t\t\t\t\t\t\t\t\tlevel={0}\r\n\t\t\t\t\t\t\t\t\t\t\trowPath={[index]}\r\n\t\t\t\t\t\t\t\t\t\t\trowData={row}\r\n\t\t\t\t\t\t\t\t\t\t\ttableHeaders={tableHeaders}\r\n\t\t\t\t\t\t\t\t\t\t\ttotalHeaders={totalHeaders}\r\n\t\t\t\t\t\t\t\t\t\t\theaders={headers}\r\n\t\t\t\t\t\t\t\t\t\t\tcollapsAll={collapsLevel >= index + 1}\r\n\t\t\t\t\t\t\t\t\t\t\tcollapsLevel={collapsLevel}\r\n\t\t\t\t\t\t\t\t\t\t\tisIncrese={!!isIncrese}\r\n\t\t\t\t\t\t\t\t\t\t\tdata={formatedData}\r\n\t\t\t\t\t\t\t\t\t\t\tselectedRowPaths={selectedRowPaths}\r\n\t\t\t\t\t\t\t\t\t\t\tonCheckboxChange={handleCheckboxChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdataSlice={arr}\r\n\t\t\t\t\t\t\t\t\t\t\tdataIndex={index}\r\n\t\t\t\t\t\t\t\t\t\t\tenableCheckBox={enableCheckbox}\r\n\t\t\t\t\t\t\t\t\t\t\trowHeight={rowHeight}\r\n\t\t\t\t\t\t\t\t\t\t\tcolumnWidths={columnWidths}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</TableBody>\r\n\t\t\t\t)}\r\n\t\t\t</Table>\r\n\r\n\t\t\t{/* Fixed Totals Row */}\r\n\t\t\t{showTotals && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t// position: 'sticky',\r\n\t\t\t\t\t\tbottom: '-2px',\r\n\t\t\t\t\t\t// left: 0,\r\n\t\t\t\t\t\twidth: 'max-content',\r\n\t\t\t\t\t\tbackgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA',\r\n\t\t\t\t\t\tborderTop: '1px solid #e0e0e0',\r\n\t\t\t\t\t\t// zIndex: 9\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Table\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\twidth: \"max-content\",\r\n\t\t\t\t\t\t\ttableLayout: 'fixed',\r\n\t\t\t\t\t\t\tmarginBottom: 0\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t{enableCheckbox && (\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={{\r\n\t\t\t\t\t\t\t\t\t\twidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tminWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tmaxWidth: `${getCheckboxColumnWidth()}px`,\r\n\t\t\t\t\t\t\t\t\t\tpadding: '8px',\r\n\t\t\t\t\t\t\t\t\t\tposition: 'sticky',\r\n\t\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: totalHeaders?.[0]?.bgColor || '#FAFAFA',\r\n\t\t\t\t\t\t\t\t\t\tzIndex: 10,\r\n\t\t\t\t\t\t\t\t\t\tborderBottom: 'none'\r\n\t\t\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{totalHeaders?.map((header, index) => {\r\n\t\t\t\t\t\t\t\t\tif (header.joinWithLeft) return null;\r\n\t\t\t\t\t\t\t\t\tconst cellsToMerge = totalHeaders.slice(index).findIndex((h: any) => !h.joinWithLeft && h !== header) == -1 ? totalHeaders.slice(index)?.length : totalHeaders.slice(index).findIndex((h: any) => !h.joinWithLeft && h !== header);\r\n\t\t\t\t\t\t\t\t\tconst colSpan = header.mergeCells ? cellsToMerge || 1 : 1;\r\n\r\n\t\t\t\t\t\t\t\t\t// Calculate merged width\r\n\t\t\t\t\t\t\t\t\tlet totalWidth = 0;\r\n\t\t\t\t\t\t\t\t\tfor (let i = index; i < index + colSpan && i < headers.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\ttotalWidth += columnWidths[t(headers[i].label)] || 100;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"dynamic-report-row\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolSpan={colSpan}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${totalWidth}px`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: 'none'\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: `${header?.position ? header?.position : 'start'}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '100%'\r\n\t\t\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{header?.render ? header.render(formatedData?.[totalKey][header.name], formatedData) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" weight=\"bold\" color='theme.neutral.1000'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getNestedValue(formatedData?.[totalKey], header)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\r\n\t\t\t{(data?.length === 0 || data?.[tableHeaders[0]?.rowKey]?.length === 0) && renderEmptyRowsFallback(t('common.noData'))}\r\n\t\t</TableContainer>\r\n\t);\r\n}\r\n\r\nexport default ReportTable","import Button from \"../button/button\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./reports-title-bar.scss\";\r\n\r\nimport TitleDropdownButton from \"../title-dropdown-button/title-dropdown-button\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport { generateFields } from \"../../utils/common\";\r\nimport ReportButtons, { IReportButtons } from \"./report-buttons/report-buttons\";\r\nimport TabBar, { TabProps } from \"../tabs/tabs\";\r\nimport { Box, ButtonGroup, ClickAwayListener, Grow, Menu, MenuItem, Paper, Popper, Button as MuiButton, Divider } from \"@mui/material\";\r\nimport images from \"../../assets/images\";\r\nimport {\r\n handleCompareDateRange,\r\n RANGE,\r\n} from \"../../utils/date-range\";\r\nimport { DateRange, Calendar } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\"; // main css file\r\nimport \"react-date-range/dist/theme/default.css\"; // theme css file\r\nimport dayjs from \"dayjs\";\r\nimport { useAppDispatch } from \"../../redux/hooks\";\r\nimport { fetchCompanies } from \"./redux/actionCreator\";\r\nimport SearchableSelect from \"../searchable-select\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport React from \"react\";\r\nimport { Calendar as CalendarIcon, Export as ExportIcon, Filter as FilterIcon } from \"../icons\";\r\nimport { enUS } from 'date-fns/locale';\r\n\r\ninterface IReportFilters {\r\n company: number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n}\r\n\r\n/** Descriptor for a custom component injected into the filter row. */\r\ninterface ICustomFilterComponent {\r\n /** Unique key used for React reconciliation. */\r\n key: string;\r\n /** The ReactNode to render inside the filter bar. */\r\n component: React.ReactNode;\r\n}\r\n\r\ninterface ActionBarPropsType extends Partial<TabProps>, IReportButtons {\r\n title: string;\r\n handleAddButton?: (e?: any) => void;\r\n isTitleMenu?: boolean;\r\n titleMenus?: any;\r\n reportFilterFields?: any[];\r\n isDateFilterEnabled?: boolean;\r\n onDateFilterChange?: (\r\n data: Partial<{\r\n company: string | number;\r\n start_date: string;\r\n end_date: string;\r\n as_of_date: string;\r\n }>\r\n ) => void;\r\n filters?: Partial<IReportFilters>;\r\n isDateRange?: boolean;\r\n /**\r\n * When `false` the Date chip and the date-range dropdown button are hidden\r\n * and date-related keys (`start_date`, `end_date`, `as_of_date`) are stripped\r\n * from every filter payload so they cannot reach the API.\r\n * Defaults to `true` (backward-compatible).\r\n */\r\n showDateFilter?: boolean;\r\n dateFilter?: string;\r\n showCancelButton?: boolean;\r\n searchBar?: React.ReactNode;\r\n /**\r\n * Optional list of custom components to render inside the filter row.\r\n * Each entry must have a unique `key` and a `component` (ReactNode).\r\n * They are appended after the standard SearchableSelect filters.\r\n */\r\n customFilterComponents?: ICustomFilterComponent[];\r\n}\r\n\r\ntype TDatePickerVal = {\r\n startDate?: Date;\r\n endDate?: Date;\r\n key?: string;\r\n};\r\n\r\nconst ReportsTitleBar = (props: ActionBarPropsType) => {\r\n const {\r\n title,\r\n handleAddButton,\r\n buttons = [],\r\n dropdownMenuButtonData,\r\n isTitleMenu = false,\r\n titleMenus = [],\r\n reportFilterFields = [],\r\n toggleCallback,\r\n tabs,\r\n activeValue,\r\n setActiveValue,\r\n isDateFilterEnabled = true,\r\n onDateFilterChange,\r\n // showCancelButton,\r\n filters = {},\r\n isDateRange = false,\r\n /** Hide the date chip and date-range dropdown when false. Defaults to true. */\r\n showDateFilter = true,\r\n dateFilter = 'TODAY',\r\n filterDropDown,\r\n handleRowsCollapse,\r\n handleRowsExpand,\r\n showLevelBtn = false,\r\n dataLength = 0,\r\n filterKeys = {},\r\n searchBar,\r\n /** Custom ReactNode components rendered after the standard filters. */\r\n customFilterComponents = [],\r\n } = props;\r\n\r\n const startDateKey = filterKeys?.start_date || 'start_date';\r\n const endDateKey = filterKeys?.end_date || 'end_date';\r\n const asOfDateKey = filterKeys?.as_of_date || 'as_of_date';\r\n\r\n // const { companies } = useAppSelector((store) => store.reportsTitleBar);\r\n\r\n const dispatch = useAppDispatch();\r\n const customStyle =\r\n {\r\n\r\n '&.MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n border: 'none',\r\n borderColor: `#ade7cb`,\r\n borderRadius: `25px`\r\n },\r\n '& .MuiSelect-outlined': {\r\n padding: `4.5px 14px !important`\r\n },\r\n // '&:hover fieldset': {\r\n // border: 'none',\r\n // },\r\n\r\n // '&.Mui-focused fieldset': {\r\n // border: 'none',\r\n // },\r\n display: `flex`,\r\n gap: `4px`,\r\n width: `220px`,\r\n // height: 30px,\r\n border: `1px solid #ade7cb`,\r\n borderRadius: `50px`,\r\n backgroundColor: `#ebf9f2`,\r\n color: `#289b64`,\r\n alignItems: `center`,\r\n cursor: `pointer`,\r\n height: `32px`\r\n\r\n },\r\n }\r\n const inputStyle =\r\n {\r\n border: \"none\",\r\n \"&.Mui-focused\": {\r\n borderColor: \"transparent\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n // padding: \"0px\",\r\n fontSize: \"14px\",\r\n color: '#289b64'\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n '& .MuiSelect-icon': {\r\n color: 'green',\r\n },\r\n }\r\n\r\n // When `showDateFilter` is false, exclude the 'date' entry from the\r\n // default selection so the date chip is never active.\r\n const defaultSelected = [\r\n // Only include 'date' when the date field matches legacy 'date' value if needed, \r\n // but here we follow inventory-reports-title-bar pattern.\r\n ...(showDateFilter ? [{ value: 'date' }] : []),\r\n {\r\n value: 'company',\r\n },\r\n ]\r\n const [selectedItems, setSelectedItems] = useState<string[]>(defaultSelected);\r\n const [level, setLevel] = useState<number>(1)\r\n\r\n // const selectedCompany = useMemo(\r\n // () =>\r\n // companies?.find((company) => filters?.company === company.id)\r\n // ?.company_name || \"\",\r\n // [companies, filters?.company]\r\n // );\r\n\r\n\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(\r\n null\r\n );\r\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n const [allFields, setAllFields] = useState<any[]>([]);\r\n const [dateRange, setDateRange] = useState<keyof typeof RANGE>();\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [exportAnchorEl, setExportAnchorEl] = useState<null | HTMLElement>(null);\r\n const [customDate, setCustomDate] = useState<Date>(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n const { t } = useTranslation();\r\n const [customDateRange, setCustomDateRange] = useState<TDatePickerVal>({\r\n startDate: dayjs(filters?.[startDateKey]).isValid() \r\n ? dayjs(filters?.[startDateKey]).toDate() \r\n : new Date(),\r\n endDate: dayjs(filters?.[endDateKey]).isValid() \r\n ? dayjs(filters?.[endDateKey]).toDate() \r\n : new Date(),\r\n key: \"selection\",\r\n });\r\n\r\n const anchorRef = useRef<HTMLDivElement | null>(null);\r\n const dateSelectRef = useRef<HTMLDivElement>(null);\r\n const chipDateSelectRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleCloseDatePopper = () => {\r\n anchorRef.current = null;\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * Wraps `onDateFilterChange` to strip date-related keys when\r\n * `showDateFilter` is false, guaranteeing they never reach the API.\r\n * Defined before `renderFilter` to avoid temporal dead zone errors.\r\n */\r\n const safeOnDateFilterChange = (data: any) => {\r\n if (!onDateFilterChange) return;\r\n\r\n let processedData = { ...data };\r\n\r\n // Map internal keys to filterKeys if they exist and are different\r\n if (data.hasOwnProperty('start_date') && filterKeys?.start_date) {\r\n processedData[filterKeys.start_date] = data.start_date;\r\n if (filterKeys.start_date !== 'start_date') delete processedData.start_date;\r\n }\r\n if (data.hasOwnProperty('end_date') && filterKeys?.end_date) {\r\n processedData[filterKeys.end_date] = data.end_date;\r\n if (filterKeys.end_date !== 'end_date') delete processedData.end_date;\r\n }\r\n if (data.hasOwnProperty('as_of_date') && filterKeys?.as_of_date) {\r\n processedData[filterKeys.as_of_date] = data.as_of_date;\r\n if (filterKeys.as_of_date !== 'as_of_date') delete processedData.as_of_date;\r\n }\r\n\r\n if (showDateFilter) {\r\n onDateFilterChange(processedData);\r\n } else {\r\n // Strip all date fields (including mapped ones) so they cannot pollute the request payload.\r\n const keysToStrip = [\r\n 'start_date', 'end_date', 'as_of_date',\r\n filterKeys?.start_date, filterKeys?.end_date, filterKeys?.as_of_date\r\n ].filter(Boolean);\r\n\r\n const rest = { ...processedData };\r\n keysToStrip.forEach(key => delete rest[key]);\r\n\r\n onDateFilterChange(rest);\r\n }\r\n };\r\n\r\n const handleDateChange = async (range: keyof typeof RANGE) => {\r\n // Do nothing if the date filter is hidden — guard against programmatic calls.\r\n if (!showDateFilter) return;\r\n setDateRange(range);\r\n if (range === \"CUSTOM\") {\r\n anchorRef.current = dateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n const data = await handleCompareDateRange({\r\n range: RANGE[range],\r\n from: \"\",\r\n to: \"\",\r\n });\r\n safeOnDateFilterChange({\r\n start_date: data?.from ? data?.from : \"\",\r\n end_date: data?.to ? data?.to : \"\",\r\n });\r\n handleCloseDatePopper();\r\n }\r\n };\r\n\r\n const handleClose = (event: Event) => {\r\n if (\r\n anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n handleCloseDatePopper();\r\n };\r\n const handleSelectChange = (value: any) => {\r\n if (selectedItems.some((item) => item.value == value.value)) {\r\n setSelectedItems(selectedItems.filter((item) => item?.value != value.value));\r\n const filterKey = value.value || value.key;\r\n const valueKey = filterKeys?.[filterKey] || filterKey;\r\n safeOnDateFilterChange({ [valueKey]: value.multiple ? [] : null })\r\n return;\r\n }\r\n setSelectedItems([...selectedItems, value]);\r\n };\r\n // Create filters config from filterDropDown and filterKeys\r\n // If reportFilters is needed, it should be provided by the consuming application\r\n const filtersConfig = filterDropDown?.map((filter: any) => ({\r\n key: filter.value || filter.key,\r\n label: filter.name || filter.label || `Search ${filter.value || filter.key}`,\r\n placeholder: filter.placeholder || filter.name || filter.label,\r\n apiType: filter.options ? undefined : (filter.apiType || filter.value || filter.key),\r\n valueKey: filterKeys?.[filter.value || filter.key] || filter.value || filter.key,\r\n customFilter: filter.customFilter || null,\r\n multiple: filter.multiple || false,\r\n options: filter.options || undefined,\r\n })) || []\r\n\r\n const options = [\r\n {\r\n label: RANGE.TODAY,\r\n callback: () => {\r\n handleDateChange(\"TODAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"THIS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"THIS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"THIS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.THIS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"THIS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.YESTERDAY,\r\n callback: () => {\r\n handleDateChange(\"YESTERDAY\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_WEEK,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_WEEK\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_MONTH,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_MONTH\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_QUARTER,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_QUARTER\");\r\n },\r\n },\r\n {\r\n label: RANGE.PREVIOUS_YEAR,\r\n callback: () => {\r\n handleDateChange(\"PREVIOUS_YEAR\");\r\n },\r\n },\r\n {\r\n label: RANGE.CUSTOM,\r\n callback: () => {\r\n handleDateChange(\"CUSTOM\");\r\n },\r\n },\r\n ];\r\n\r\n const isChecked = (value: any) => {\r\n return selectedItems.some(item => item?.value == value?.value)\r\n }\r\n\r\n const handleFilterPopperSubmit = () => {\r\n const dateRangeFilter = {\r\n start_date: dayjs(customDateRange.startDate).format(\"YYYY-MM-DD\"),\r\n end_date: dayjs(customDateRange.endDate).format(\"YYYY-MM-DD\"),\r\n };\r\n const dateFilter = {\r\n as_of_date: dayjs(customDate).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n // Use safeOnDateFilterChange so date keys are stripped when showDateFilter is false.\r\n safeOnDateFilterChange({\r\n ...(isDateRange ? dateRangeFilter : dateFilter),\r\n });\r\n handleCloseDatePopper();\r\n };\r\n function showFilter(val) {\r\n return selectedItems.some(item => item?.value == val)\r\n }\r\n\r\n const getStartAndEndDate = (filters: any) => {\r\n const startDate = dayjs(filters?.[startDateKey]).isValid() ? dayjs(filters[startDateKey]).toDate() : new Date();\r\n const endDate = dayjs(filters?.[endDateKey]).isValid() ? dayjs(filters[endDateKey]).toDate() : new Date();\r\n return { startDate, endDate };\r\n };\r\n\r\n useEffect(() => {\r\n if (filters?.[asOfDateKey]) {\r\n setCustomDate(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n }\r\n }, [filters?.[asOfDateKey], asOfDateKey]);\r\n\r\n useEffect(() => {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n ...getStartAndEndDate(filters)\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filters?.[endDateKey], filters?.[startDateKey]]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n if (isDateRange) {\r\n setCustomDateRange({\r\n ...customDateRange,\r\n ...getStartAndEndDate(filters)\r\n });\r\n } else {\r\n setCustomDate(\r\n dayjs(filters?.[asOfDateKey]).isValid() \r\n ? dayjs(filters?.[asOfDateKey]).toDate() \r\n : new Date()\r\n );\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, isDateRange]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchCompanies());\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n setAllFields(generateFields(reportFilterFields));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n useEffect(() => {\r\n handleDateChange(dateFilter)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dateFilter]);\r\n\r\n const filterDropDownFunc = () => {\r\n return (\r\n <Menu\r\n anchorEl={actionAnchorEl}\r\n open={Boolean(actionAnchorEl)}\r\n onClose={handleFilterClose}\r\n >\r\n {/* <MenuItem className=\"inventoryReportsTitleBar--report-filter\"> */}\r\n {/* Add your options here */}\r\n {filterDropDown?.map((item) => (\r\n <MenuItem onClick={() => handleSelectChange(item)} key={item} value={item?.value}>\r\n <Checkbox checked={isChecked(item)} />\r\n <Typography sx={{ marginLeft: '10px' }} color='theme.neutral.800' type='s3'>{t(item?.name)}</Typography>\r\n </MenuItem>\r\n ))}\r\n {/* </MenuItem> */}\r\n </Menu>\r\n );\r\n };\r\n\r\n const renderFilter = ({\r\n key,\r\n label,\r\n placeholder,\r\n apiType,\r\n valueKey,\r\n customFilter,\r\n multiple = false,\r\n options,\r\n show = true,\r\n showCancelButton = true\r\n }: any) => {\r\n if (!showFilter(key) || !show) return null;\r\n\r\n const companyKey = filterKeys?.company || 'company';\r\n const companyId = filters?.[companyKey];\r\n const hasCompany = Array.isArray(companyId) ? companyId.length > 0 : !!companyId;\r\n\r\n let finalCustomFilter = customFilter;\r\n if (['department', 'designation', 'location'].includes(apiType) ) {\r\n finalCustomFilter = {\r\n ...(typeof customFilter === 'object' ? customFilter : {}),\r\n '&company_id.in': hasCompany?(Array.isArray(companyId) ? companyId.join(',') : companyId):0\r\n };\r\n }\r\n\r\n return (\r\n // <div className=\"search-filter\" key={key}>\r\n <SearchableSelect\r\n labelId={`${key}-label`}\r\n searchPlaceholder={label}\r\n value={filters?.[valueKey]}\r\n onChange={(e) => safeOnDateFilterChange({ [valueKey]: e.target.value })}\r\n showCancelButton={showCancelButton}\r\n apiType={apiType}\r\n isInternal={!apiType && !!options}\r\n options={options}\r\n multiple={multiple}\r\n placeholder={placeholder}\r\n customeFilter={finalCustomFilter}\r\n // CustomDropDownIcon={FilterAltIcon}\r\n customStyle={customStyle}\r\n inputStyle={inputStyle}\r\n />\r\n // </div>\r\n );\r\n };\r\n const FilterContainer = () => (\r\n <>\r\n {filtersConfig.map(renderFilter)}\r\n {customFilterComponents.map(({ key, component }) => (\r\n <React.Fragment key={key}>{component}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n const handleFilterClose = () => {\r\n setActionAnchorEl(null);\r\n };\r\n\r\n const ExportContainer = React.memo(() => {\r\n const handleClose = () => setExportAnchorEl(null);\r\n return (\r\n <Menu\r\n open={Boolean(exportAnchorEl)}\r\n anchorEl={exportAnchorEl}\r\n onClose={handleClose}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"right\",\r\n }}\r\n >\r\n {dropdownMenuButtonData?.options?.map((option, index) => (\r\n <MenuItem\r\n key={index}\r\n onClick={() => {\r\n option.callback();\r\n setExportAnchorEl(null);\r\n }}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\" color={'inherit'}> {option.label}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n )\r\n })\r\n\r\n return (\r\n <div>\r\n <div className=\"reportsTitleBar\">\r\n <div className=\"reportsTitleBar--LeftContent\">\r\n {isTitleMenu ? (\r\n <div style={{ zIndex: 999 }}>\r\n <TitleDropdownButton\r\n onClick={handleAddButton}\r\n options={titleMenus}\r\n isMenuThirdItemDisabled={true}\r\n >\r\n {title}\r\n </TitleDropdownButton>\r\n </div>\r\n ) : (\r\n <Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {title}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {searchBar && (\r\n <div className=\"reportsTitleBar--SearchBar\">\r\n {searchBar}\r\n </div>\r\n )}\r\n <ReportButtons\r\n zIndex={999}\r\n className=\"reportsTitleBar--RightContent\"\r\n buttons={buttons}\r\n />\r\n </div>\r\n {tabs?.length ? (\r\n <div>\r\n <TabBar\r\n tabs={tabs || []}\r\n activeValue={activeValue}\r\n setActiveValue={setActiveValue}\r\n isTabViewOnly={true}\r\n />\r\n </div>\r\n ) : null}\r\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", my: 2.5, alignItems: \"center\", flexWrap: \"wrap\", gap: 1 }}>\r\n <div className=\"reportsTitleBar--FilterWrapper\">\r\n {FilterContainer()}\r\n {/* Date range chip — hidden when showDateFilter is false */}\r\n {/* Date range chip — only shown when isDateRange is true */}\r\n {showDateFilter && isDateRange && (filters?.[endDateKey]) && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.[startDateKey]).format(\"DD/MM/YYYY\")} - ${dayjs(filters?.[endDateKey]).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.dateRange\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.[startDateKey]).format(\"DD/MM/YYYY\")} -{\" \"}\r\n {dayjs(filters?.[endDateKey]).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* Individual Start/End chips — Only show if consolidated range chip is NOT showing and they are specifically enabled */}\r\n {showDateFilter && !isDateRange && isDateFilterEnabled && !['TODAY', 'YESTERDAY'].includes(dateRange) && (\r\n <>\r\n {customDateRange?.startDate && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n style={{ padding: ' 5px 12px' }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(customDateRange?.startDate).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.startDate\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(customDateRange?.startDate).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {customDateRange?.endDate && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n style={{ padding: ' 5px 12px' }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(customDateRange?.endDate).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.endDate\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(customDateRange?.endDate).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n {/* As-of-date chip — hidden when showDateFilter is false */}\r\n {/* As-of-date chip — only shown when isDateRange is false */}\r\n {showDateFilter && filters?.[asOfDateKey] && !isDateRange && (\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip\"\r\n ref={chipDateSelectRef}\r\n onClick={() => {\r\n if (!open) {\r\n anchorRef.current = chipDateSelectRef.current;\r\n setOpen(true);\r\n } else {\r\n handleCloseDatePopper();\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text\"\r\n title={`${dayjs(filters?.[asOfDateKey]).format(\"DD/MM/YYYY\")}`}\r\n >\r\n <Typography type=\"s4\" weight=\"medium\">\r\n {t(\"common.date\")}:\r\n </Typography>\r\n <Typography\r\n className=\"reportsTitleBar--FilterWrapper--Chip--Text--Value\"\r\n type=\"s4\"\r\n >\r\n {dayjs(filters?.[asOfDateKey]).format(\"DD/MM/YYYY\")}\r\n </Typography>\r\n </div>\r\n <KeyboardArrowDownIcon />\r\n </div>\r\n </div>\r\n )}\r\n {/* {((filters?.company && selectedCompany) ||\r\n (filters?.[startDateKey] && filters?.[endDateKey]) ||\r\n filters?.[asOfDateKey]) &&\r\n reportFilterFields?.length\r\n ? \"|\"\r\n : \"\"} */}\r\n </div>\r\n <div className=\"report-display\">\r\n {dropdownMenuButtonData?.options?.length > 0 &&\r\n <Box>\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<ExportIcon fontSize=\"small\" />}\r\n onClick={(event) => setExportAnchorEl(event.currentTarget)}\r\n >\r\n {t(\"common.export\")}\r\n </Button>\r\n {exportAnchorEl && (\r\n <ExportContainer />\r\n )}\r\n </Box>\r\n }\r\n\r\n {filterDropDown?.length &&\r\n <>\r\n <Box>\r\n <Button\r\n sx={({ palette }) => ({\r\n border: \"1px solid\",\r\n borderColor: 'grey.200',\r\n borderRadius: \"50px\",\r\n color: `${palette.grey[800]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n })}\r\n variant=\"text\"\r\n startIcon={<FilterIcon fontSize=\"small\" />}\r\n onClick={(event) => setActionAnchorEl(event.currentTarget)}\r\n >\r\n {t(\"common.filter\")}\r\n </Button>\r\n </Box>\r\n {showLevelBtn && <Divider flexItem orientation=\"vertical\" sx={{ height: '50%', alignSelf: 'auto' }} />}\r\n </>\r\n }\r\n\r\n {filterDropDownFunc()}\r\n {showLevelBtn && (\r\n <>\r\n <Box className=\"reportsTitleBar--FilterAction--lvWrapper\" >\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'> Level {level} of {dataLength}</Typography>\r\n <ButtonGroup variant=\"outlined\" disableElevation sx={({ palette }) => ({\r\n '& .MuiButton-root': {\r\n borderColor: `${palette.grey[200]} !important`,\r\n '&:hover': {\r\n bgcolor: `${palette.grey[200]} !important`,\r\n }\r\n },\r\n '& .MuiButtonGroup-firstButton': {\r\n borderTopLeftRadius: 20,\r\n borderBottomLeftRadius: 20\r\n },\r\n '& .MuiButtonGroup-lastButton': {\r\n borderTopRightRadius: 20,\r\n borderBottomRightRadius: 20\r\n }\r\n })}>\r\n <MuiButton onClick={() => {\r\n setLevel(level == dataLength ? level : level + 1)\r\n handleRowsCollapse?.(level)\r\n }}>\r\n <img src={images.common.expand} />\r\n </MuiButton>\r\n <MuiButton onClick={() => {\r\n setLevel(level != 1 ? level - 1 : 1)\r\n handleRowsExpand?.(level)\r\n }}>\r\n <img src={images.common.collapse} />\r\n </MuiButton>\r\n </ButtonGroup>\r\n </Box>\r\n {isDateFilterEnabled && <Divider flexItem orientation=\"vertical\" sx={{ height: '50%', alignSelf: 'auto' }} />}\r\n </>\r\n )}\r\n {/* Date-range dropdown button — only shown when both isDateFilterEnabled AND showDateFilter are true */}\r\n {isDateFilterEnabled && showDateFilter && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color='grey.800'>As of: </Typography>\r\n <ReportButtons\r\n zIndex={997}\r\n className=\"reportsTitleBar--RightContent\"\r\n dropdownMenuButtonData={{\r\n icon: <CalendarIcon fontSize=\"small\" />,\r\n children: (\r\n <>\r\n {RANGE[dateRange]}\r\n <KeyboardArrowDownIcon />\r\n </>\r\n ),\r\n options: options,\r\n }}\r\n toggleCallback={toggleCallback}\r\n />\r\n <div ref={dateSelectRef}></div>\r\n </Box>\r\n )}\r\n </div>\r\n </Box>\r\n {/* <Filter\r\n open={openFilterPopup}\r\n onClose={() => setOpenFilterPopup(false)}\r\n fields={allFields}\r\n onSelectedFilter={(filterName: string) => console.log(filterName)}\r\n // getFilterStatesOnApply={() => {}}\r\n applyFilter={(val: any) => console.log('val', val)}\r\n /> */}\r\n <Popper\r\n sx={{\r\n zIndex: 9999,\r\n }}\r\n open={open}\r\n anchorEl={anchorRef.current}\r\n role={undefined}\r\n transition\r\n disablePortal\r\n >\r\n {({ TransitionProps, placement }) => (\r\n <Grow\r\n {...TransitionProps}\r\n style={{\r\n margin: \"0 20px 0 20px\",\r\n transformOrigin:\r\n placement === \"bottom\" ? \"center top\" : \"center bottom\",\r\n }}\r\n >\r\n <Paper>\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n }}\r\n >\r\n <div>\r\n {isDateRange ? (\r\n <DateRange\r\n editableDateInputs={true}\r\n onChange={(item) => setCustomDateRange(item.selection)}\r\n moveRangeOnFirstSelection={false}\r\n ranges={[customDateRange]}\r\n locale={enUS}\r\n />\r\n ) : (\r\n <Calendar\r\n onChange={(item) => setCustomDate(item)}\r\n date={customDate}\r\n locale={enUS}\r\n />\r\n )}\r\n </div>\r\n <Box sx={{ padding: \"0 12px 12px 0\" }}>\r\n <Button\r\n variant=\"contained\"\r\n sx={{ width: \"fit-content\" }}\r\n onClick={handleFilterPopperSubmit}\r\n >\r\n {t(\"common.apply\")}\r\n </Button>\r\n </Box>\r\n </Box>\r\n </ClickAwayListener>\r\n </Paper>\r\n </Grow>\r\n )}\r\n </Popper>\r\n </div>\r\n );\r\n};\r\n\r\nexport { ReportsTitleBar };\r\nexport default ReportsTitleBar;\r\n","import Button from '../button/button';\r\nimport './sub-header-doc.scss';\r\n\r\nconst SubHeaderDoc = () => {\r\n return (\r\n <section>\r\n <div className=\"top-content\">\r\n <div className=\"left-content\"><a href=\"#\">Forms / </a>Add Custom Field</div>\r\n <div className=\"right-content\">\r\n <div className=\"actions\">\r\n <Button className='' variant='middle'>Action</Button>\r\n </div>\r\n <div className=\"show-preview\">\r\n <Button className='' variant='middle'>Show Preview</Button>\r\n </div>\r\n <div className=\"update\"><Button className='' variant='contained'>Update</Button></div> \r\n </div> \r\n </div>\r\n </section>\r\n );\r\n}\r\n\r\nexport { SubHeaderDoc };\nexport default SubHeaderDoc;","import React, { ReactNode, useEffect, useState } from \"react\";\nimport { Box } from \"@mui/material\";\nimport Tab from \"@mui/material/Tab\";\n\nimport TabContext from \"@mui/lab/TabContext\";\nimport TabList from \"@mui/lab/TabList\";\nimport TabPanel from \"@mui/lab/TabPanel\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nimport \"./tab-bar-ui.scss\";\nimport TextField from \"../text-field/text-field\";\nimport images from \"../../assets/images\";\n\ninterface TabItem {\n tab_order: number;\n title: string;\n content?: string | ReactNode;\n data?: any;\n remove_tab?: boolean;\n tabIcon?: string;\n}\nexport interface ITabProps {\n tabs: TabItem[];\n activeTabValue?: number;\n setActiveTabValue?: React.Dispatch<React.SetStateAction<number | undefined>>;\n onEditTabTitle?: (tabId: number, newTitle: string) => void;\n handleTabChange?: () => void;\n handleRemoveTab?: (tabId: number) => void;\n}\n\nexport const TabBarUi = (props: TabProps) => {\n const { tabs, onEditTabTitle, activeTabValue, setActiveTabValue, handleTabChange, handleRemoveTab } = props;\n const [value, setValue] = useState(0);\n const [editableTabId, setEditableTabId] = useState<number | null>(null);\n const handleChange = (event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue);\n setActiveTabValue && setActiveTabValue(newValue);\n handleTabChange && handleTabChange();\n };\n\n const handleTabDoubleClick = (tabId: number) => {\n setEditableTabId(tabId);\n };\n\n const handleEditTabTitle = (\n event: React.ChangeEvent<HTMLInputElement>,\n tabId: number,\n ) => {\n onEditTabTitle && onEditTabTitle(tabId, event.target.value);\n };\n\n useEffect(() => {\n if (setActiveTabValue && Boolean(tabs?.length)) setActiveTabValue(value);\n // eslint-disable-next-line\n }, [tabs]);\n\n return (\n <Box>\n <TabContext value={activeTabValue ?? value}>\n <Box>\n <TabList\n className=\"account-payble-tabsui-wrap\"\n onChange={handleChange}\n >\n {tabs.map((tab: TabItem) => (\n <Tab\n className=\"account-payble-tab-items\"\n key={tab.tab_order}\n label={\n onEditTabTitle && editableTabId === tab.tab_order ? (\n <TextField\n value={tab.title}\n autoFocus\n onBlur={() => setEditableTabId(null)}\n onChange={(e: any) =>\n handleEditTabTitle(e, tab.tab_order)\n }\n />\n ) : handleRemoveTab ? (\n <div className=\"Tabs--Title\">\n <div>{tab.title}</div>\n {!tab.remove_tab && (\n <CloseIcon\n style={{ fontSize: \"15px\", cursor: \"pointer\" }}\n onClick={() => {\n handleRemoveTab(tab.tab_order);\n }}\n />\n )}\n </div>\n ) : (\n <div className=\"text-display\">\n <img src={images.common[tab.tabIcon]} />\n {tab.title}\n </div>\n )\n }\n wrapped\n onDoubleClick={() => handleTabDoubleClick(tab.tab_order)}\n />\n ))}\n </TabList>\n </Box>\n {tabs.map(\n (tab: TabItem, index: number) =>\n tab.content && (\n <TabPanel value={index} key={tab.tab_order}>\n {value === index && tab.content}\n </TabPanel>\n ),\n )}\n </TabContext>\n </Box>\n );\n};\n\nexport default TabBarUi;\n","import {\r\n TextareaAutosize as MUITextArea,\r\n TextareaAutosizeProps,\r\n} from \"@mui/base\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Typography from \"../typography/typography\";\r\n\r\ninterface TextAreaProps extends TextareaAutosizeProps {\r\n label?: string;\r\n error?: boolean;\r\n helperText?: string;\r\n}\r\n\r\nconst TextArea = (props: TextAreaProps) => {\r\n const { placeholder, minRows = 3, label, helperText, error, ...rest } = props;\r\n\r\n const StyledTextArea = styled(MUITextArea)(({ theme: { palette } }) => ({\r\n \"&\": {\r\n padding: \"0.4375rem 0.5rem\",\r\n borderRadius: \"0.25rem\",\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.secondary[400],\r\n outline: \"none\",\r\n color: palette.theme?.secondary[800],\r\n fontSize: \"0.875rem\",\r\n \"&::placeholder\": {\r\n opacity: 1,\r\n },\r\n \"&:hover\": {\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.secondary[500],\r\n },\r\n \"&:focus-visible\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: error\r\n ? palette.theme?.error[600]\r\n : palette.theme?.primary[700],\r\n },\r\n \"&:disabled\": {\r\n background: palette.theme?.secondary[200],\r\n },\r\n },\r\n }));\r\n\r\n return (\r\n <>\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {label}\r\n </Typography>\r\n <StyledTextArea\r\n aria-label=\"minimum height\"\r\n minRows={minRows}\r\n placeholder={placeholder}\r\n {...rest}\r\n />\r\n\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mt={-0.25}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {helperText}\r\n </Typography>\r\n </>\r\n );\r\n};\r\nexport { TextArea };\r\nexport default TextArea;\r\n","import React, { useEffect, useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"./time-range-picker.scss\";\nimport { AccessTimeRounded, Close } from \"@mui/icons-material\";\nimport { Box, IconButton, InputAdornment } from \"@mui/material\";\nimport TextField from \"../text-field/text-field\";\n\ninterface TimeRangePickerProps {\n hour12?: boolean;\n startTime?: string;\n endTime?: string;\n onTimeRangeChange: (timeRanges: any[]) => void;\n}\nconst TimeRangePicker: React.FC<TimeRangePickerProps> = (props: any) => {\n const [timeRange, setTimeRange] = useState<string[]>([]);\n const [differenceInMinutes, setDifferenceInMinutes] = useState(0);\n const [cnt, setCnt] = useState(0);\n const [isOpenTimePicker, setIsOpenTimePicker] = useState(undefined);\n const { hour12 = false, startTime, endTime, onTimeRangeChange } = props;\n\n useEffect(() => {\n setTimeRange([]);\n\n const formatDate = (time: string) => {\n if (!time) return null;\n\n const [timePart, meridiem] = time.split(\" \");\n const [hours, minutes] = timePart.split(\":\").map(Number);\n\n let formattedHours = hours;\n\n if (meridiem) {\n if (meridiem === \"PM\") {\n if (hours !== 12) {\n formattedHours += 12;\n }\n } else if (meridiem === \"AM\" && hours === 12) {\n formattedHours -= 12;\n }\n }\n\n const date = new Date();\n date.setHours(formattedHours, minutes, 0, 0);\n\n const formattedTime = date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: hour12,\n });\n let finalFormattedTime = formattedTime;\n\n if (date.getHours() === 0) {\n finalFormattedTime = \"00\" + formattedTime.slice(2); // Replace hours with 00\n } else if (date.getHours() === 12) {\n finalFormattedTime = \"12\" + formattedTime.slice(2); // Replace hours with 12\n }\n return finalFormattedTime;\n };\n\n setTimeRange((prevTimeRange: any) => {\n if (startTime && endTime) {\n const formattedStartTime = formatDate(startTime);\n const formattedEndTime = formatDate(endTime);\n return [...prevTimeRange, formattedStartTime, formattedEndTime];\n }\n return prevTimeRange;\n });\n }, [hour12, startTime, endTime]);\n\n const handleChange = (dates: any) => {\n const formattedTime: any = dates.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: hour12,\n });\n\n let finalFormattedTime = formattedTime;\n\n if (dates.getHours() === 0) {\n finalFormattedTime = \"00\" + formattedTime.slice(2); // Replace hours with 00\n } else if (dates.getHours() === 12) {\n finalFormattedTime = \"12\" + formattedTime.slice(2); // Replace hours with 12\n }\n\n if (timeRange.length < 2) {\n setTimeRange([...timeRange, finalFormattedTime]);\n } else if (cnt === 0) {\n setTimeRange((prevTimeRange) => {\n const updatedTimeRange: any = [...prevTimeRange];\n updatedTimeRange[0] = finalFormattedTime;\n return updatedTimeRange;\n });\n } else if (cnt === 1) {\n setTimeRange((prevTimeRange) => {\n const updatedTimeRange: any = [...prevTimeRange];\n updatedTimeRange[1] = finalFormattedTime;\n return updatedTimeRange;\n });\n }\n setCnt(cnt + 1);\n };\n\n useEffect(() => {\n if (cnt === 2) {\n setCnt(0);\n }\n\n // Calculate the difference between two time ranges\n if (timeRange.length === 2) {\n const startTimeString = timeRange[0];\n const endTimeString = timeRange[1];\n\n // Parsing start time\n const startTotalMinutes = parseTimeToMinutes(startTimeString);\n\n // Parsing end time\n const endTotalMinutes = parseTimeToMinutes(endTimeString);\n\n // Calculating difference\n let difference = endTotalMinutes - startTotalMinutes;\n if (difference < 0) {\n difference += 24 * 60; // Adding 24 hours if end time is smaller than start time\n }\n setDifferenceInMinutes(difference);\n } else {\n setDifferenceInMinutes(0);\n }\n }, [cnt, timeRange]);\n\n const parseTimeToMinutes = (timeString: string) => {\n const [hoursStr, minutesStr, meridiem] = timeString.split(/:| /);\n let hours = parseInt(hoursStr);\n const minutes = parseInt(minutesStr);\n\n if (meridiem && meridiem.toLowerCase() === \"pm\" && hours !== 12) {\n hours += 12;\n } else if (meridiem && meridiem.toLowerCase() === \"am\" && hours === 12) {\n hours = 0;\n }\n\n return hours * 60 + minutes;\n };\n\n useEffect(() => {\n onTimeRangeChange({\n timeRange: timeRange,\n differenceInMinutes: differenceInMinutes,\n });\n }, [differenceInMinutes, onTimeRangeChange, timeRange]);\n\n const handleClick = () => {\n const isOpen: any = isOpenTimePicker === true ? undefined : true;\n setIsOpenTimePicker(isOpen);\n };\n\n const handleCloseClick = (event: any) => {\n setTimeRange([]);\n setCnt(0);\n event.stopPropagation();\n };\n\n const customInput = (\n <TextField\n className=\"time-input\"\n type=\"text\"\n value={\n timeRange.length === 1\n ? `${timeRange[0]} - `\n : timeRange.length === 2\n ? `${timeRange[0]} - ${timeRange[1]}`\n : \"\"\n }\n InputProps={{\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n {timeRange.length > 0 && (\n <IconButton onClick={handleCloseClick}>\n <Close />\n </IconButton>\n )}\n <IconButton onClick={handleClick}>\n <AccessTimeRounded />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n );\n\n return (\n <>\n <Box className=\"DateRangePicker\">\n <DatePicker\n className=\"DatePickerWrapper\"\n onChange={(date: any) => {\n handleChange(date), handleClick();\n }}\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={15}\n selectsRange\n customInput={customInput}\n open={isOpenTimePicker}\n value={\n timeRange && timeRange.length === 1\n ? `${timeRange[0]}-`\n : timeRange && timeRange.length === 2\n ? `${timeRange[0]}-${timeRange[1]}`\n : undefined\n }\n />\n <Box\n className=\"box-icon\"\n style={\n timeRange.length > 0 ? { right: \"2.5rem\" } : { right: \"1.563rem\" }\n }\n >\n {timeRange.length > 0 && <Close onClick={handleCloseClick} />}\n </Box>\n </Box>\n </>\n );\n};\n\nexport default TimeRangePicker;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useEffect, useState, useMemo } from 'react';\r\nimport DynamicSearchSelect from '../form-control/form-builder/form-builder-element/dynamic-select';\r\nimport { useUomFieldUpdater } from '../../hooks/useUomFieldUpdater';\r\nimport { useFormContext } from 'react-hook-form';\r\n\r\ninterface UomFieldWrapperProps {\r\n label: string;\r\n name?: string;\r\n placeholder?: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n is_loading?: boolean;\r\n disabled?: boolean;\r\n selectedItem: any;\r\n selectedUom?: any;\r\n fieldMapping?: Record<string, string>;\r\n customeFilter?: Record<string, any>;\r\n getSelectedData?: (data: any, name: string) => void;\r\n fieldPrefix?: string;\r\n setValue?: any;\r\n control?: any;\r\n isConversationFactor?: boolean;\r\n active_location?: any;\r\n}\r\n\r\nconst UomFieldWrapper: React.FC<UomFieldWrapperProps> = ({\r\n label,\r\n name = 'uom_id',\r\n placeholder,\r\n fieldArrayName,\r\n required = false,\r\n is_loading = false,\r\n disabled = false,\r\n selectedItem,\r\n fieldMapping = {\r\n 'total_on_hand_quantity': 'on_hand_quantity',\r\n 'total_available_quantity': 'available_quantity',\r\n 'total_committed_quantity': 'committed_quantity',\r\n },\r\n customeFilter,\r\n getSelectedData,\r\n fieldPrefix,\r\n setValue,\r\n control,\r\n isConversationFactor = true,\r\n active_location\r\n}) => {\r\n // const selectedUom = useMemo(() => getValues(`${fieldArrayName}.${name}`), [getValues(`${fieldArrayName}.${name}`)])\r\n\r\n const [uomDetails, setUomDetails] = useState<any>(null);\r\n const formContext = useFormContext()\r\n const {\r\n control: contextControl,\r\n setValue: contextSetValue,\r\n } = formContext || {};\r\n\r\n const effectiveFieldPrefix = fieldPrefix !== undefined ? fieldPrefix : fieldArrayName || '';\r\n const finalFieldMapping = useMemo(() => fieldMapping,\r\n //eslint-disable-next-line\r\n [JSON.stringify(fieldMapping)]);\r\n\r\n const handleUomChange = useUomFieldUpdater({\r\n fieldMapping: finalFieldMapping,\r\n sourceData: selectedItem,\r\n conversation_factor: uomDetails?.conversation_factor,\r\n fieldPrefix: effectiveFieldPrefix,\r\n setValue: setValue || contextSetValue,\r\n control: control || contextControl,\r\n active_location: active_location,\r\n // shouldUpdate: !!selectedUom\r\n });\r\n\r\n useEffect(() => {\r\n if (!isConversationFactor) return;\r\n handleUomChange();\r\n // eslint-disable-next-line\r\n }, [handleUomChange, isConversationFactor]);\r\n\r\n const handleUomSelect = (data: any, name: string) => {\r\n setUomDetails(data);\r\n getSelectedData?.(data, name);\r\n };\r\n\r\n const effectiveCustomeFilter = customeFilter || {\r\n '&template_id.eq': selectedItem?.unit_of_measurement || 0\r\n };\r\n\r\n return (\r\n <DynamicSearchSelect\r\n label={label}\r\n name={name}\r\n placeholder={placeholder || ''}\r\n fieldArrayName={fieldArrayName || ''}\r\n formControl={control}\r\n required={required}\r\n is_loading={is_loading}\r\n disabled={disabled}\r\n apiType='uom'\r\n customeFilter={effectiveCustomeFilter}\r\n getSelectedData={handleUomSelect}\r\n />\r\n );\r\n};\r\n\r\nexport default UomFieldWrapper;\r\n","import { useEffect, useState } from \"react\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport \"./user-dropdown.scss\";\nimport Checkbox from \"../checkbox/checkbox\";\n// import Toggle from \"../toggle/toggle\";\nimport Typography from \"../typography/typography\";\n// import FormControlLabel from \"@mui/material/FormControlLabel\";\n\ninterface UserDropdownProps {\n value: {\n isRoleVisible: boolean;\n selectedUsers: number[];\n };\n data: any;\n onToggleChange: () => void;\n onCheckboxChange: (values: number[]) => void;\n}\n\nexport const UserDropdown = (props: UserDropdownProps) => {\n const { value, data, onCheckboxChange, ...rest } = props;\n const { isRoleVisible, selectedUsers } = value;\n const [checked, setChecked] = useState(selectedUsers);\n const [dropdownData, setDropdownData] = useState([]);\n\n // const handleToggle = () => {\n // onToggleChange();\n // setDropdownData([]);\n // };\n\n const handleCheckbox = (value: number, item: any) => () => {\n const currentIndex = checked.findIndex(\n (user: any) => (isRoleVisible ? user.id : user.id) === value,\n );\n const newChecked = [...checked];\n\n if (currentIndex === -1) {\n newChecked.push(item);\n } else {\n newChecked.splice(currentIndex, 1);\n }\n\n setChecked(newChecked);\n onCheckboxChange(newChecked);\n };\n\n useEffect(() => {\n if (isRoleVisible) {\n setDropdownData(data?.departments ?? []);\n } else {\n setDropdownData(data?.users ?? []);\n }\n // eslint-disable-next-line\n }, [isRoleVisible, data]);\n\n return (\n <div className=\"SwitchList\" {...rest}>\n \n <List>\n {dropdownData &&\n dropdownData?.map((item: any) => {\n const labelId = `checkbox-list-secondary-label-${item.id}`;\n\n return (\n <ListItem key={item.id} sx={{cursor:'pointer'}} onClick={handleCheckbox(\n isRoleVisible ? item.id : item.id,\n item, // Pass the entire item to the handleCheckbox function\n )}>\n <ListItemText id={labelId}>\n <Typography\n dangerouslySetInnerHTML={{\n __html: `${\n isRoleVisible\n ? item?.name\n : `${item?.first_name} ${item?.last_name}`\n } <span>${\n isRoleVisible\n ? item.count + \" Users\"\n : item?.department?.name\n }</span>`,\n }}\n />\n </ListItemText>\n <div className=\"list-secondary-content\">\n <Checkbox\n edge=\"end\"\n \n checked={checked.some(\n (user: any) =>\n (isRoleVisible ? user.id : user.id) ===\n (isRoleVisible ? item.id : item.id),\n )}\n inputProps={{ \"aria-labelledby\": labelId }}\n />\n </div>\n </ListItem>\n );\n })}\n </List>\n </div>\n );\n};\n\nexport default UserDropdown;\n"],"names":["ElementController","props","fields","abjMember","append","useFieldArray","control","name","addAdjMember","type","elementName","appendAfter","jsxs","Fragment","children","jsx","Controller","defaultValue","render","field","Object","keys","field1","length","updateField","CloseIcon","style","fontSize","cursor","onClick","AddIcon","map","DynamicInput","placeholder","label","formControl","fieldArrayName","DynamicSelect","options","value","_typeof","o","Symbol","iterator","constructor","prototype","requiredArgs","required","args","TypeError","toDate","argument","arguments","argStr","toString","call","Date","getTime","console","warn","Error","stack","NaN","propTypes","PropTypes","string","isRequired","object","node","func","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","width","String","defaultWidth","formats","formatLong","date","full","long","medium","short","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","valuesArray","context","formattingValues","defaultFormattingWidth","_defaultWidth","_width","values","argumentCallback","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","match","matchedString","parsePatterns","defaultParseWidth","key","Array","isArray","array","predicate","findIndex","pattern","test","hasOwnProperty","findKey","valueCallback","rest","slice","locale","code","formatDistance","token","count","result","tokenValue","replace","addSuffix","comparison","formatRelative","_date","_baseDate","_options","localize","ordinalNumber","dirtyNumber","number","Number","rem100","era","narrow","abbreviated","wide","quarter","month","day","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","parseInt","parseResult","any","index","weekStartsOn","firstWeekContainsDate","getMonth","dirtyDate","getYear","getFullYear","months","CustomDatePickerInput","placeholderText","isRtl","className","CalenderIcon","DateRangePicker","start","end","startYear","onDateRangeChange","startDate","setStartDate","useState","endDate","setEndDate","useLanguage","years","currentYear","i","push","Box","DatePicker","dateFormat","customInput","onChange","dates","selectsRange","isClearable","renderCustomHeader","decreaseMonth","increaseMonth","decreaseYear","increaseYear","prevMonthButtonDisabled","nextMonthButtonDisabled","prevYearButtonDisabled","nextYearButtonDisabled","disabled","KeyboardArrowLeft","KeyboardArrowRight","e","target","year","DynamicDateRange","minDate","dayjs","min_date","isValid","maxDate","max_date","fieldState","Typography","weight","mb","color","error","_a","_b","dataPosition","position","dataName","formType","Boolean","helperText","_c","message","shape","register","setValue","bool","DynamicDateTime","readOnly","DateTimePicker","disableFutureDates","is_future_dates_allowed","disablePastDates","is_past_dates_allowed","minDateTime","min_date_time","maxDateTime","max_date_time","textFieldProps","newValue","isSame","selected","isBefore","adjusted","hour","minute","typeOfField","disable","CustomEditor","lazy","Promise","resolve","then","require","CustomDatePicker","React","memo","fieldName","useMemo","displayName","StyledTextField","styled","MUITextField","theme","palette","height","borderColor","secondary","borderWidth","primary","_d","validationSchema","Yup","approver_id","min","QuickApprovalModal","isOpen","setIsOpen","modalProps","title","onConfirm","isProcessing","users","setUsers","isLoading","isError","data","handleSubmit","reset","getValues","watch","trigger","useForm","resolver","yupResolver","mode","formValues","onSubmit","async","handleModalClose","SelectedItems","displayTitle","selectedItem","user","find","option","id","getLabel","display","justifyContent","alignItems","sx","gap","mt","join","Chip","variant","MoreIcon","Button","useEffect","filters","skip","limit","response","getV1User","getToken","getAndSetFetchUsers","enqueueSnackbar","obj","first_name","last_name","formatLabel","Modal","open","onClose","maxWidth","fullWidth","disableEscapeKeyDown","DialogTitle","IconButton","Close","DialogContent","Select","size","renderValue","ChipOrPlaceholder","onDelete","multiple","colors","randomColor","Math","floor","random","avatarStyle","borderRadius","textAlign","backgroundColor","MenuItem","includes","Avatar","src","profile_image","alt","Checkbox","checked","DialogActions","endIcon","CircularProgress","ColumnHeader","column","isRenameColumn","setIsRenameColumn","newColumnTitle","setNewColumnTitle","onDoubleClick","cards","images","more","ItemsSummary","Accordion","accordionProps","defaultExpanded","borderBottomWidth","totalQuantity","currencySymbol","total","DiscountSummary","enalblePromotions","itemDiscount","additionalDiscount","promotionAmount","totalDiscount","SubtotalSummary","subtotalExTax","subtotalExDiscount","TaxesAndChargesSummary","enableShippings","taxes","deductedTax","shippingAmount","handlingAmount","TotalSummary","roundOffDifferenceAmount","CardWrapper","login","password","matches","StyledFlagsSelect","ReactFlagsSelect","span","svg","padding","border","ul","input","margin","background","search","paddingLeft","backgroundRepeat","li","boxShadow","marginTop","div","borderBottom","paddingBottom","ToggleContainer","spacing","transition","minWidth","common","white","grey","opacity","SlidingBackground","top","bottom","zIndex","ToggleLabel","ButtonBase","active","fontWeight","whiteSpace","userSelect","main","ExpandableSummaryWrapper","expandedGridSize","collapsedGridSize","ariaLabel","onToggle","persistState","storageKey","showToggleButton","mobileDrawer","showCollapseIcon","useTheme","isMobile","useMediaQuery","breakpoints","down","currentLanguage","direction","isExpanded","setIsExpanded","window","stored","localStorage","getItem","JSON","parse","showAfterDelay","setShowAfterDelay","timer","setTimeout","clearTimeout","handleToggle","newState","newGridSize","setItem","stringify","currentGridSize","fab","bgcolor","paper","divider","action","hover","ChevronLeft","Drawer","anchor","up","Grid","item","xs","transitions","create","easing","sharp","duration","enteringScreen","overflow","minHeight","Tooltip","placement","ChevronRight","flexDirection","borderLeft","Collapse","in","orientation","text","writingMode","textOrientation","letterSpacing","ReportButtons","buttons","dropdownMenuButtonData","toggleCallback","iconPosition","ele","class","btnStyle","startIcon","icon","DropdownButton","isMenuThirdItemDisabled","isOnlyDropDownButton","buttonGroupProps","onlyDropDownButtonProps","customStyle","generateMenuItems","with_checkboxes","items","forEach","isGroup","_","some","opt","pl","indexOf","enable_footer","Divider","flexItem","onFooterClick","Add","MultiSelect","setOptions","selectedValue","setSelectedValue","is_multiselect","removeUndefine","selectOptions","filter","handleSetOptions","useCallback","t","useTranslation","OutlinedInput","endAdornment","InputAdornment","edge","mr","selectedLabel","onChipRemove","chipProps","searchPlaceholder","handleSearch","searchValue","child","sValue","v","loading","is_loading","arrayOf","footer_action","pt","pb","pr","columns","header","accessorKey","visible","formArrayName","defaultValues","schedule_report","schedule_date","schedule_time","apiPayload","autopost","val","is_recurring","emails","next_schedule_date","subject","report_id","scheduleReportValidationSchema","mixed","selectedDate","startOf","isAfter","this","parent","now","selectedTime","second","email","boolean","when","is","schema","otherwise","optional","nullable","AUTO_POST_OPTIONS","updateScheduleReportType","payload","putV1ReportsUpdateScheduleReportId","createScheduleReportType","postV1ReportsScheduleReport","ScheduleReportModal","itemData","module","report","submitLoading","setSubmitLoading","shouldUnregister","isRecurring","disableReport","handleFormSubmit","vals","valuesPayload","formatDateForPayload","formatTimeForPayload","updatedPayload","mapApiPayload","apiFunc","errorMessage","getErrorMessage","fetchReportByName","log","getV1ReportsReportList","getScheduleReportById","reports","split","set","scheduleDate","isToday","ModalLoader","container","rowGap","columnSpacing","sm","DynamicSearchSelect","apiType","customeFilter","DynamicDate","DynamicTime","timeSteps","minutes","ampm","minTime","ChipGenerator","validation","DynamicCheckBox","titlePosition","SnackbarCloseButton","snackbarKey","closeSnackbar","useSnackbar","FileConfirmationDialog","onReplace","onKeepBoth","isFile","Dialog","formatBytes","bytes","decimals","dm","parseFloat","pow","toFixed","deleteIcon","onMouseDown","event","stopPropagation","parentValue","childOptions","childValues","updatedValues","handleParentChange","InlineEditFields","row","col","errors","setValidationErrors","onChangeRowField","getSelectedData","syncFieldValue","inputValue","setInputValue","isInitialSet","setIsInitialSet","customFilter","useRef","editCols","getAllCells","columnDef","enableEditing","editVariant","fieldProperties","editProperties","fieldDisbled","_valuesCache","handleCustomFilter","current","valueKey","is_multiple","get","original","editSelectOptions","matchingOption","selectedData","validateAt","abortEarly","fe","err","yup","ValidationError","inner","path","em","validate","editFields","dValues","cell","vl","TextField","autoFocus","field_name","SearchableSelect","filterKey","labelKey","bindingKey","attributes","isInternal","format","_e","TimePicker","is24hrFormat","UploadMedia","max_size","PhoneInput","default_value","_f","_g","isInlineEditing","defaultChecked","_h","TableWrapper","lineHeight","maxHeight","MaterialEditableTable","enablePagination","rows","totalPages","paginationModel","columnOrder","updateData","handleColumnOrdering","enableColumnDragging","states","rowActionMenu","destructiveActionMenu","disableDefaultActionColumn","enableRowSelection","defaultActionColumnItems","enableBottomToolbar","SetSelectedRowId","isResetRow","onCreateRow","onEditRow","onDeleteRow","editDisplayMode","enableRowCreate","onSelectRow","enableColumnResizing","selectedRowIds","onColumnVisibility","onSortingChange","disabledDefaultActionColumnIcon","enableAddCustomField","enableRowDragging","handleColumnResizing","columnSizes","hideSaveButton","hideDeleteButton","enableFirstRowEdit","formData","updatePageInfo","activePage","aPage","usePages","useDeepMemo","pageNo","setRow","tableColumns","setTableColumns","anchorEl","setAnchorEl","popUpShow","setPopupShow","rowAnchorEl","setRowAnchorEl","visibleColumns","hiddenColumns","filteredOptions","setFilteredOptions","selectedRow","setSelectedRow","validationErrors","setValidationSchema","isCreatingRow","setIsCreatingRow","isEditingRow","setIsEditingRow","isDeletingRow","setIsDeletingRow","rowToDelete","setRowToDelete","rowSelection","setRowSelection","isChecked","setIsChecked","sorting","setSorting","disableNextEdit","setDisableNextEdit","columnSizing","setColumnSizing","column_sizes","columnSizingInfo","setColumnSizingInfo","columnSizingStart","deltaOffset","deltaPercentage","isResizingColumn","startOffset","startSize","navigate","useNavigate","currentModule","location","pathname","redirectionPath","PathnameAccounting","CUSTOM_FORM","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameUsers","PathnameRental","PathnameDocument","ADD_CUSTOM_FIELDS","validationReducer","vld","msg_en","typeError","trim","notRequired","defined","strict","oneOf","notOneOf","default","transform","fn","meta","lowercase","uppercase","url","uuid","max","regex","RegExp","lessThan","moreThan","positive","negative","integer","round","method","truncate","ensure","compact","rejector","of","noUnknown","testFn","relation","s","thenValidations","reduce","acc","otherWiseValidations","clm","validations","baseSchema","originalValue","excludeEmptyString","getValidationType","handleHeaderClick","currentTarget","formtValues","cells","c","File","display_name","checkRequired","selectedRows","Function","sortingArray","getTextWidth","ctx","document","createElement","getContext","measureText","handleSaveRow","table","isEditMode","setLoadingState","setEditingRow","setCreatingRow","extractValidationErrors","valuesRef","rowId","columnId","clearRow","getRowValues","saveEditingRow","editingRow","getState","creatingRow","saveCreatingRow","useMaterialReactTable","defaultColumn","minSize","Edit","callback","Header","maxSize","p","arrowIcon","muiTableHeadCellProps","muiTableBodyCellProps","Cell","updatedProps","cloneElement","handleActionsClick","muiTablePaperProps","tableLayout","columnResizeMode","onEditingRowSave","onCreatingRowSave","onCreatingRowCancel","onEditingRowCancel","displayColumnDefOptions","renderRowActions","enableExpanding","parentId","Trash","renderBottomToolbarCustomActions","onRowSelectionChange","enableColumnOrdering","createDisplayMode","positionCreatingRow","enableTopToolbar","enableColumnActions","enableSorting","enableGrouping","enableStickyHeader","enableSortingRemoval","state","columnPinning","left","isSaving","showProgressBars","getRowId","muiTableBodyRowProps","editingRowId","isErrorRow","has_error","onColumnOrderChange","colOrder","onColumnSizingChange","onColumnSizingInfoChange","renderEmptyRowsFallback","tableNoData","paginationDisplayMode","muiPaginationProps","page","showRowsPerPage","boundaryCount","muiEditTextFieldProps","InputProps","disableUnderline","onBlur","muiCircularProgressProps","right","muiTableBodyProps","muiTableHeadProps","tableCell","closest","querySelector","isOnClickEditable","isCurrentlyEditing","onKeyUp","creatingRowId","preventDefault","currentCreatingRow","currentEditingRow","muiSelectCheckboxProps","RecgtangleIcon","checkedIcon","CheckBoxIcon","muiSelectAllCheckboxProps","muiBottomToolbarProps","layoutMode","icons","DragHandleIcon","SortIcon","ArrowUpDown","ArrowDownwardIcon","ArrowUpwardIcon","ExpandMoreIcon","ExpandLessIcon","SyncAltIcon","CancelIcon","getSelectedRowModel","selectedRowModels","selection","traverseRows","parentKey","rowKey","subRows","getRowModel","resetRowSelection","hasAutoEditedFirstRow","firstRow","dropdownOpenTimer","saveTimer","lastDropdownClick","isDropdownInteraction","handleMouseDown","handleClick","addEventListener","removeEventListener","MaterialReactTable","Menu","ListItemIcon","ChevronLeftIcon","ListItemText","SearchBar","searchQuery","filteredColumns","toLowerCase","handleSearchEvent","updatedColumns","updatedFilteredOptions","handleAddColumn","addIcon","handleVisibleColumn","dotsIcon","eyeIcon","ChevronRightIcon","handleAction","ConfirmPopUp","handleRowDelete","description","wrapText","textSelection","each","d3","select","originalText","substring","words","reverse","word","line","lineNumber","y","attr","dy","tspan","pop","getComputedTextLength","defaultColors","formatNumber","num","defaultCurrencySymbol","GridCardMarkup","Card","m","CardContent","flexShrink","marginBottom","company","status","textDecorationLine","amount","GridWrapper","ErpLoader","align","GridCard","config","handleRedirection","form","formatText","charAt","toUpperCase","is_system_field","createdOnAndBy","_id","INITIAL_ORDER","DEFAULT_ACTION_BAR_DATA","DynamicRow","rowData","level","tableHeaders","totalHeaders","headers","collapsAll","collapsLevel","isIncrese","rowPath","selectedRowPaths","onCheckboxChange","enableCheckBox","rowHeight","columnWidths","setOpen","prevOpen","getNestedValue","formattedValue","formateValueByType","every","TableRow","borderBottomColor","borderTop","enableCheckbox","TableCell","wordWrap","joinWithLeft","cellIndex","h","cellsToMerge","colSpan","mergeCells","totalWidth","showData","isCollaps","ArrowDropUpIcon","ArrowDropDownIcon","textOverflow","timeout","unmountOnExit","idx","arr","dataSlice","dataIndex","bgColor","DEFAULT_MEASUREMENT_CONFIG","fontFamily","primaryFont","canvasContext","getCanvasContext","canvas","measureTextWidth","textStr","font","measureTextWidthCanvas","element","visibility","textContent","body","appendChild","offsetWidth","removeChild","measureTextWidthDOM","formatValueForMeasurement","toLocaleDateString","valueMapper","toFixedWithNumbers","formatDate","Loader","LoaderContainer","defaultOperators","textOperators","numberOperators","selectOperators","valueEditorType","operators","inputType","comparator","datatype","dynamicFields","HorizontalBarChart","chart","currency","svgRef","containerRef","tooltipRef","labels","datasets","chartCurrency","maxAbsValue","d","abs","hasNegative","yAxisWidth","chartHeight","selectAll","remove","containerWidth","parentElement","clientWidth","barWidth","barHeight","xMax","x","scaleLinear","domain","range","scaleBand","chartGroup","xTicks","ticks","enter","absNum","formatAxisValue","bandwidth","on","innerHTML","suffix","shortNum","formatHover","offsetX","offsetY","formatBarLabel","yAxis","axisLeft","tickSize","tickFormat","truncateLabel","str","maxLen","ref","pointerEvents","SimpleBarChart","showValueLabels","maxValue","yMin","yMax","yTicks","xAxis","axisBottom","PIE_COLORS","DonutChart","dataset","unit","sum","pct","sortedData","sort","a","b","parentWidth","chartSize","outerRadius","innerRadius","g","pie","padAngle","arc","cornerRadius","formatHoverValue","formatForHover","curr","formattedCenter","flexWrap","GroupedBarChart","ds","dataKeys","needRotate","l","x0","x1","absValue","barY","ApiChartsRenderer","charts","chartMap","bar","horizontal_bar","donut","grouped_bar","Component","chart_type","aiSummaryData","onExpand","dynamicData","summaryText","insights","flags","flag","severity","AlertTriangle","Clock","TrendingUp","summary","expanded","setExpanded","copied","setCopied","insightsVisible","setInsightsVisible","displayed","done","speed","setDisplayed","setDone","interval","setInterval","clearInterval","useTypingEffect","Sparkles","ChevronDown","navigator","clipboard","writeText","Check","Copy","ChevronUp","insight","viewBox","fill","stroke","strokeWidth","actions","view","delete","update","Timeline","overflowY","TimelineItem","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","username","resource","created_at","textfield","textfieldTitle","onCommentSubmit","containerProps","accordion","useAuth","chatRef","scrollToBottom","scrollTop","scrollHeight","formatDateTime","currentDate","commentDate","timeDifference","secondsDifference","minutesDifference","hoursDifference","optionsDate","optionsTime","hour12","toLocaleString","timelineItems","chat","full_name","onKeyDown","commentValue","addApprover","fetchApi","showAcceptOrReject","moduleIdKey","moduleId","successMessage","showSubmitBtn","updateApi","approvalDetails","dispatch","useDispatch","isUpdatingApproval","setIsUpdatingApproval","openQuickApprovalModal","setOpenQuickApprovalModal","approvalToAcceptOrReject","setApprovalToAcceptOrReject","handleSubmitForApproval","approvers","apiHelper","approverIds","rStatus","requestStatus","msg","buttonTexts","confirm","cancel","buttonColors","modalType","customLabelFormatter","yAxisLabelType","customLegend","wrapperRef","setContainerWidth","tooltipData","setTooltipData","wrapper","resizeObserver","ResizeObserver","entries","newWidth","contentRect","observe","unobserve","scalePoint","numTicks","xAxisGroup","symbol","labelType","tickSizeOuter","area","y0","y1","gradient","isSmooth","datum","curve","curveMonotoneX","curveLinear","showCircle","pageX","pageY","content","numOfLines","initialWidth","yAxisMaxValue","yAxisTicks","needsHorizontalScroll","calculatedChartWidth","maxLabelWidth","tick","axisTop","tickPadding","availableHeight","maxOptimalTicks","optimalNumTicks","optimalTicks","optimalInterval","tickValues","overflowX","xPosition","yPosition","tooltipWidth","tooltip","getBoundingClientRect","tooltipText","html","bars","lines","showGrid","barColors","lineColors","scrollContainerRef","setTooltip","innerWidth","innerHeight","nice","xPos","yPos","pointer","scrollLeft","lineGenerator","monthPosition","closestDataPoint","board","setBoard","isAddingColumn","setIsAddingColumn","Board","initialBoard","allowAddCard","allowAddColumn","renderColumnHeader","renderColumnAdder","newColumnAdded","role","allowRemoveCard","allowRenameColumn","onCardNew","onCardRemove","onColumnRemove","onColumnRename","onNewCardConfirm","draftCard","expenses","currency_data","itemsData","setItemsData","discountData","setDiscountData","subtotalData","setSubtotalData","taxesData","setTaxesData","totalData","setTotalData","eRate","exchange_rate","totalItemsExpenseDiscount","totalTaxAmount","additinoalDiscountAmount","finalAmount","roundOffDifference","calculateEntries","additional_discount_on","additional_discount_percentage","additional_discount_amount","round_off","round_off_option","shippingAmountWithERate","shipping_cost","shipping_tax_amount","handlingAmountWithERate","handling_cost","handling_tax_amount","promotionAmountWithERate","promotion_amount","grandTotal","currency_id","FullCalendar","eventContent","renderEventContent","schedulerLicenseKey","initialView","droppable","displayEventTime","headerToolbar","buttonText","selectable","plugins","dayGridPlugin","interactionPlugin","timeGridPlugin","resourceTimeGridPlugin","timelinePlugin","listPlugin","resourceTimelinePlugin","eventClick","events","handleSelectedDates","dayMaxEvents","showNonCurrentDates","eventColor","showModal","setShowModal","userId","changeUserPasswordByAdmin","isNotify","setIsNotify","toast","setToast","showPassword","setShowPassword","FlexBox","Eye","htmlColor","EyeOff","onIconClick","FormControlLabel","Toast","handleClose","anchorOrigin","horizontal","vertical","autoHideDuration","legends","alignContent","legend","marginLeft","classes","FormHelperText","country","handleCountry","searchable","selectButtonClassName","onSelect","showSelectedLabel","subTitle","currencyRow","handleMenuOpen","orient","leftLabel","rightLabel","setChecked","handleTextClick","isRightLabel","disableRipple","logo","ArrowCircleUpIcon","customElement","showEdit","showDropDowan","isEditingMode","setIsEditingMode","anchorMoreEl","setAnchorMoreEl","handleMoreIconClose","editIcon","edit","donutThickerValue","CustomLegends","getSingleNumberFromString","labelColor","valueColor","isUserDashbord","totalUsers","titleProps","valueProps","handleEditorReady","onEditorChange","mainContentProps","summaryContent","summaryProps","maxGridSize","defaultSummaryExpanded","expandedSummarySize","collapsedSummarySize","onLayoutChange","enableTransitions","transitionDuration","transitionEasing","getInitialState","initialMainSize","mainContentSize","setMainContentSize","handleSummaryToggle","summaryGridSize","newMainContentSize","transitionStyles","mergedSummaryProps","handleSaveAction","actionButtons","button","fetchEntity","fallbackRoute","idField","params","useParams","useLocation","entity","setEntity","setLoading","entityId","getEntityId","loadEntity","field_type","min_length","max_length","is_multiline","is_required","is_unique","useAppTranslations","useApi","formBuilder","setFormBuilder","totalCount","actionBarData","setActionBarData","formView","setSearch","actionBarActiveTab","setActionBarActiveTab","viewTypes","TABLE","setColumnOrder","modulesConfig","moduleConfig","filterName","navigationPath","company_id","paginationData","ceil","handlePaginationModel","model","prev","handleRowClick","footerPages","fetchForms","order","desc","getV1FormBuilder","pagination","timeoutId","ActionBar","setData","setActive","tab","showFilter","MaterialTable","GRID","Footer","pages","setPages","currentPage","setCurrentPage","sharedPages","savePageConfiguration","handlePageDelete","enablePages","isPaginationDisplayed","showList","progressChange","dateChange","tasks","task","setTask","taskProgressColor","tertiary6","taskBackgroundColor","milestoneColor","tertiary4","projectProgressColor","tertiary3","projectBackgroundColor","_j","_i","todayColor","_l","_k","tertiary5","Gantt","viewMode","ViewMode","Day","listCellWidth","columnWidth","barCornerRadius","onProgressChange","updatedTask","taskIndex","updatedTasks","onDateChange","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","projectBackgroundSelectedColor","projectProgressSelectedColor","onExpanderClick","clickedTask","prevTasks","setPagination","initialLoading","setInitialLoading","setIsLoading","openScheduleModal","setOpenScheduleModal","isDeleting","setIsDeleting","scheduleReportToDelete","setScheduleReportToDelete","tableRows","setRows","transformTableColumns","translationFn","enableFooter","redirectionLink","redirectionLinkState","statusClasses","customizeValue","columnAccessorKey","renderEmails","getScheduleReport","getV1ReportsScheduleReport","getScheduleReportType","schedulers","handleUpdate","Fallback","heading","subHeading","reportsFallback","deleteV1ReportsScheduleReportId","deleteScheduleReportType","cardData","invoiceFallback","chartData","flat","chartWidth","handleAddButton","isTitleMenu","titleMenus","reportFilterFields","tabs","activeValue","setActiveValue","isDateFilterEnabled","onDateFilterChange","isDateRange","activeView","setActiveView","showLevelBtn","handleRowsExpand","handleRowsCollapse","showLeftContent","isViewButton","handleRedirect","dataLength","filterDropDown","filterKeys","customFilterConfig","customSelectedFilter","showDateFilter","customFilterComponents","defaultSelectedFilter","defaultConfig","filtersConfig","inputStyle","safeOnDateFilterChange","start_date","end_date","as_of_date","allFields","setAllFields","dateRange","setDateRange","customDate","setCustomDate","defaultSelected","selectedItems","setSelectedItems","setLevel","customDateRange","setCustomDateRange","anchorRef","actionAnchorEl","setActionAnchorEl","dateSelectRef","chipDateSelectRef","handleCloseDatePopper","handleDateChange","handleCompareDateRange","RANGE","from","to","contains","TODAY","THIS_WEEK","THIS_MONTH","THIS_QUARTER","THIS_YEAR","YESTERDAY","PREVIOUS_WEEK","PREVIOUS_MONTH","PREVIOUS_QUARTER","PREVIOUS_YEAR","CUSTOM","handleFilterPopperSubmit","dateRangeFilter","dateFilter","generateFields","TitleDropdownButton","CHART","HeaderCard","mx","TabBar","KeyboardArrowDownIcon","labelId","component","sidebar","calendar2","FilterIcon","alignSelf","handleSelectChange","ButtonGroup","disableElevation","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","MuiButton","expand","collapse","my","Popper","disablePortal","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","DateRange","editableDateInputs","moveRangeOnFirstSelection","ranges","Calendar","isRental","responseItems","setResponseItems","getResponseItems","rfqResponseItems","fetchRentalResponseItems","fetchRfqItemsByIdForResponse","errorMsg","item_data","paddingTop","responseItemDetailsColumns","showSearch","setShowSearch","setColumns","tableData","showMenu","setShowMenu","isSubMenuOpen","setIsSubMenuOpen","onSearchClose","cellProps","useExtraCells","onColumnResize","newSize","prevColsMap","ci","newArray","splice","getContent","dataType","allowOverlay","kind","GridCellKind","displayData","Image","allowAdd","Bubble","Custom","copyData","allowedValues","displayDate","toISOString","Text","readonly","onCellEdited","onRowAppended","newRowObj","onHeaderClicked","renderLayer","layerProps","useLayer","triggerOffset","onOutsideClick","cv","getBounds","bounds","auto","onHeaderMenuClick","onAddCol","newData","new","hasMenu","onColMoved","startIndex","endIndex","old","newCols","toMove","AccordionSummary","expandIcon","RadioButtonCheckedIcon","AccordionDetails","DataEditor","getCellContent","onCellContextMenu","rowMarkers","getCellsForSelection","onDragOverCell","onRowMoved","alert","onColumnMoved","trailingRowOptions","sticky","tint","hint","smoothScrollX","smoothScrollY","verticalBorder","onDragStart","rightElement","rightElementProps","searchText","disabledViews","selectedIds","pageName","importModuleName","showAddButton","paginationResource","GridComponent","onColumnOrdering","fallbackIcon","onDeleteConfirm","deleteTitle","deleteDescription","resetState","setPaginationModel","deleteApi","storeName","isUseFields","customFields","loadinState","customRows","useAppSelector","store","pLimit","page_size","listingState","setListingState","itemToDelete","handleDeleteClick","enhancedDestructiveActions","cleanUp","getData","useDataFetcher","views","active_view","actionBtn","column_order","newOrder","visible_columns","shippmentFallback","requestToDelete","deleteRecord","lowerCaseQuery","filtered","debounceTime","yAxisData","xAxisData","chartLine","displayDot","multiModule","complexPermissions","customPermissionCheck","redirectTo","showError","permissions","usePermissions","hasPermission","permList","operator","results","mod","act","modules","ErrorComponent","Navigate","handleSort","enableSearch","headerHeight","onSelectionChange","afterHeader","totalKey","setFilter","baseData","setBaseData","formatedData","setFormatedData","searchQueries","setSearchQueries","setSelectedRowPaths","setColumnWidths","resizingColumn","setResizingColumn","resizeStartX","resizeStartWidth","headerRefs","isInitialized","setIsInitialized","isSorting","setIsSorting","getAllRowPaths","currentPath","paths","nextLevel","nextRowKey","concat","rowContentSamples","maxRows","samples","sampledCount","maxSamples","sampleRows","levelHeaders","columnLabel","lh","rendered","sampleRowContent","calculatedWidths","measurementConfig","constraints","numericWidth","headerWidth","maxRowContentWidth","contentWidth","calculatedWidth","calculateColumnWidths","handleCheckboxChange","allRowPaths","allSelected","sel","someSelected","searchReportNestedByKey","query","keysToSearch","queryLower","nestedObj","k","n","filteredData","handleMouseMove","diff","clientX","handleMouseUp","getDataByPath","showTotals","TableContainer","Table","borderCollapse","TableHead","indeterminate","allPaths","handleHeaderCheckboxChange","el","paddingRight","flex","ArrowUp","ArrowDown","columnName","TableBody","searchBar","startDateKey","endDateKey","asOfDateKey","useAppDispatch","exportAnchorEl","setExportAnchorEl","processedData","keysToStrip","getStartAndEndDate","fetchCompanies","ExportContainer","isTabViewOnly","show","showCancelButton","companyKey","companyId","hasCompany","finalCustomFilter","ExportIcon","CalendarIcon","SnackbarProvider","href","onEditTabTitle","activeTabValue","setActiveTabValue","handleTabChange","handleRemoveTab","editableTabId","setEditableTabId","TabContext","TabList","Tab","tab_order","handleEditTabTitle","tabId","remove_tab","tabIcon","wrapped","handleTabDoubleClick","TabPanel","minRows","StyledTextArea","MUITextArea","outline","borderStyle","timeRange","setTimeRange","differenceInMinutes","setDifferenceInMinutes","cnt","setCnt","isOpenTimePicker","setIsOpenTimePicker","startTime","endTime","onTimeRangeChange","timePart","meridiem","hours","formattedHours","setHours","formattedTime","toLocaleTimeString","finalFormattedTime","getHours","prevTimeRange","formattedStartTime","formattedEndTime","startTimeString","endTimeString","startTotalMinutes","parseTimeToMinutes","difference","timeString","hoursStr","minutesStr","handleCloseClick","AccessTimeRounded","updatedTimeRange","handleChange","showTimeSelect","showTimeSelectOnly","timeIntervals","fieldMapping","total_on_hand_quantity","total_available_quantity","total_committed_quantity","fieldPrefix","isConversationFactor","active_location","uomDetails","setUomDetails","formContext","useFormContext","contextSetValue","effectiveFieldPrefix","handleUomChange","sourceData","conversation_factor","shouldUpdate","sourceKey","targetKey","sourceValue","factor","fieldPath","convertedValue","location_wise_quantity","location_quantity","location_id","total_reserved_quantity","useUomFieldUpdater","effectiveCustomeFilter","unit_of_measurement","accept","existingDriveData","fileUploaded","files","setFiles","isUploading","setIsUploading","isCollapsed","setIsCollapsed","isDialogMinimized","setIsDialogMinimized","isDragOver","setIsDragOver","abortController","setAbortController","AbortController","authToken","auth","storageTokenKeyName","allDriveData","setAllDriveData","isConfirmDialogOpen","setIsConfirmDialogOpen","selectedFileTitle","setSelectedFileTitle","getRootProps","getInputProps","isDragActive","useDropzone","onDropAccepted","newFiles","file","isPrivate","checkboxDisabled","uploadProgress","fileSize","fileName","fileType","onDragEnter","onDragLeave","noClick","noKeyboard","types","fileInputRef","driveTitles","handleBeforeUnload","returnValue","getInternetSpeed","customNavigator","connection","downlink","renderFileIcon","upload","documentPDF","docFile","BASE_URL","getApiConfig","backendBaseUrl","handleConfirm","controller","filteredFiles","handleMultipartUpload","handleRegularUpload","prevFiles","updatedFiles","tempCount","fileCount","mimeType","f","preSignedUrlsResponse","fetch","signal","preSignedUrlsData","json","status_code","preSignedUrl","preSignedData","presignedUrl","partParams","Body","contentLength","chunkSize","bytesUploaded","progress","partSize","parts","preSignedUrls","uploadId","partNum","partNumber","markCompleteResponse","markCompleteData","handleChipClick","setAttribute","removeAttribute","click","handleFileChange","selectedFiles","fileTitles","lastIndexOf","removeFile","indexToRemove","handleMinimizeClick","handleDialogClose","abort","aborted","onCloseConfirmPopup","ml","RemoveIcon","documentUpload","monitor","camera","toggleIsPrivate","trash","LinearProgress","prevIsCollapsed","KeyboardArrowUp","KeyboardArrowDown","Clear","empty","close","folder","baseUrl","fileId","isRoleVisible","selectedUsers","dropdownData","setDropdownData","handleCheckbox","currentIndex","newChecked","departments","List","ListItem","dangerouslySetInnerHTML","__html","department","inputProps","single","complex","custom","checkFn","r"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}