@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.
- package/dist/chunks/{ai-summary-D9QajB4_.js → ai-summary-4NVNEHfi.js} +2 -2
- package/dist/chunks/{ai-summary-D9QajB4_.js.map → ai-summary-4NVNEHfi.js.map} +1 -1
- package/dist/chunks/{ai-summary-FqAUpafL.esm.js → ai-summary-f8clWLbW.esm.js} +65 -44
- package/dist/chunks/{ai-summary-FqAUpafL.esm.js.map → ai-summary-f8clWLbW.esm.js.map} +1 -1
- package/dist/chunks/{android-12-switch-BVabRCje.esm.js → android-12-switch-BUbQYnRQ.esm.js} +53 -35
- package/dist/chunks/{android-12-switch-BVabRCje.esm.js.map → android-12-switch-BUbQYnRQ.esm.js.map} +1 -1
- package/dist/chunks/android-12-switch-CphTHRb8.js +2 -0
- package/dist/chunks/{android-12-switch-DMaoWQwq.js.map → android-12-switch-CphTHRb8.js.map} +1 -1
- package/dist/chunks/{appbar-6Ucw59ku.js → appbar-C6Es9HGk.js} +2 -2
- package/dist/chunks/{appbar-6Ucw59ku.js.map → appbar-C6Es9HGk.js.map} +1 -1
- package/dist/chunks/{appbar-mDf1LZ0u.esm.js → appbar-CKrHdx9n.esm.js} +2 -2
- package/dist/chunks/{appbar-mDf1LZ0u.esm.js.map → appbar-CKrHdx9n.esm.js.map} +1 -1
- package/dist/chunks/{default-data-CwLgBvlI.esm.js → default-data-BsZWgQGR.esm.js} +3 -3
- package/dist/chunks/{default-data-CwLgBvlI.esm.js.map → default-data-BsZWgQGR.esm.js.map} +1 -1
- package/dist/chunks/{default-data-D2cqOmp4.js → default-data-Dsjlvwev.js} +2 -2
- package/dist/chunks/{default-data-D2cqOmp4.js.map → default-data-Dsjlvwev.js.map} +1 -1
- package/dist/chunks/{fullScreen-VlXxoepU.js → fullScreen-BBpaDn-A.js} +2 -2
- package/dist/chunks/{fullScreen-VlXxoepU.js.map → fullScreen-BBpaDn-A.js.map} +1 -1
- package/dist/chunks/{fullScreen-B9d2_kak.esm.js → fullScreen-Dn-3Tkwm.esm.js} +2 -2
- package/dist/chunks/{fullScreen-B9d2_kak.esm.js.map → fullScreen-Dn-3Tkwm.esm.js.map} +1 -1
- package/dist/chunks/index-B9CFxEZ9.js +2 -0
- package/dist/chunks/index-B9CFxEZ9.js.map +1 -0
- package/dist/chunks/{index-iPYNYnNP.esm.js → index-wf5q5BST.esm.js} +73 -66
- package/dist/chunks/{index-iPYNYnNP.esm.js.map → index-wf5q5BST.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-TYitNMC7.js → migration-utils-9IXhe_fj.js} +2 -2
- package/dist/chunks/{migration-utils-TYitNMC7.js.map → migration-utils-9IXhe_fj.js.map} +1 -1
- package/dist/chunks/{migration-utils-BRjncD-b.esm.js → migration-utils-DGoEzQUj.esm.js} +2 -2
- package/dist/chunks/{migration-utils-BRjncD-b.esm.js.map → migration-utils-DGoEzQUj.esm.js.map} +1 -1
- package/dist/chunks/{sidebar-DJREtRnK.js → sidebar-B3SExDRU.js} +2 -2
- package/dist/chunks/{sidebar-DJREtRnK.js.map → sidebar-B3SExDRU.js.map} +1 -1
- package/dist/chunks/{sidebar-D_3INLNa.esm.js → sidebar-n9Y25HU-.esm.js} +2 -2
- package/dist/chunks/{sidebar-D_3INLNa.esm.js.map → sidebar-n9Y25HU-.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-CUf5Onkp.js → sidebarScreen-Dxb_e58p.js} +2 -2
- package/dist/chunks/{sidebarScreen-CUf5Onkp.js.map → sidebarScreen-Dxb_e58p.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js → sidebarScreen-_Zt2pSOx.esm.js} +3 -3
- package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js.map → sidebarScreen-_Zt2pSOx.esm.js.map} +1 -1
- package/dist/components/index.esm.js +121 -103
- package/dist/components/index.js +1 -1
- package/dist/index.esm.js +218 -200
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/index.esm.js +2 -2
- package/dist/layout/index.js +1 -1
- package/dist/src/components/index.d.ts +18 -1
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/views/index.esm.js +5 -5
- package/dist/views/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/android-12-switch-DMaoWQwq.js +0 -2
- package/dist/chunks/index-BQ2NBHDS.js +0 -2
- package/dist/chunks/index-BQ2NBHDS.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-summary-FqAUpafL.esm.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/en-US/_lib/localize/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../node_modules/date-fns/esm/locale/en-US/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/activityLog/activity-log.tsx","../../src/components/quick-approval-modal/quick-approval-modal.tsx","../../src/components/approval-wrapper/approval-wrapper.tsx","../../src/components/board/columnHeader.tsx","../../src/components/board/board.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/calculation-summary/calculation-summary.tsx","../../src/components/calendar/calendar.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/Dashboard/dashboard-card.tsx","../../src/components/Dashboard/dashboard-header.tsx","../../src/components/expandable-summary-wrapper/expandable-summary-wrapper.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/grid-fallback/grid-fallback.tsx","../../src/components/hr-line/hr-line.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/list/list.tsx","../../src/components/mulitline/multiline.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/reports-title-bar/reports-title-bar.tsx","../../src/components/rfq-response/item-response-details.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/schedule-report/schedule-report.tsx","../../src/components/snackbar/snackbar.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/upload/file-confirmation.tsx","../../src/components/upload/upload.tsx","../../src/components/user-dropdown/user-dropdown.tsx","../../src/components/select/controller/chip-or-placeholder.tsx","../../src/components/select/controller/controller-select.tsx","../../src/components/label-value/label-value.tsx","../../src/components/listing/listing.tsx","../../src/components/material-editable-table/components/inline-edit-fields.tsx","../../src/components/material-editable-table/material-editable-table.tsx","../../src/components/charts/areaLinerChart.tsx","../../src/components/charts/ChartLegends.tsx","../../src/components/charts/bar-chart/bar-chart.tsx","../../src/components/charts/barChart/barChart.tsx","../../src/components/charts/barLineChart/barLinechart.tsx","../../src/components/charts/donut-chart/donut-chart.tsx","../../src/components/charts/donutChart/DonutChart.tsx","../../src/components/charts/groupBarChart/GroupBarChart.tsx","../../src/components/charts/line-chart/line-chart.tsx","../../src/components/charts/multiLineChart/multi-line-chart.tsx","../../src/components/grid/custom-grid-card/custom-grid-card.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/components/reports/dynamic-report/dynamic-report.tsx","../../src/hooks/useUomFieldUpdater.tsx","../../src/components/uom-field-wrapper/uom-field-wrapper.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"],"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}","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;","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}","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 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;","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 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 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 { 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 { 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 { 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 { 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","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","/* 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 \"./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 { 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","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","/* 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 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 \"./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 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 { 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 } 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, { 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 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 { 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 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 { 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 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 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","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 { 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","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 { 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, { 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, { 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 { 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 { 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 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, 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, 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 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 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 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 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 { 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/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 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 { 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","/* 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 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}"],"names":["CloseIcon","o","formatDistance","formatRelative","ordinalNumber","valueCallback","start","end","React","DatePicker","MUITextField","ActivityTag","validationSchema","yupResolver","SelectedItems","data","users","error","Close","ChipOrPlaceholder","styled","Box","Checkbox","logo","theme","location","useTheme","task","ReportButtons","handleCompareDateRange","Menu","FilterIcon","MuiButton","columns","Accordion","Typography","Chip","_","MenuItem","generateMenuItems","_a","customStyle","dateFilter","filters","options","handleClose","ExportIcon","CalendarIcon","IconButton","TextField","MUITextArea","formatDate","type","authToken","value","List","fields","useDataFetcher","col","row","yup","_b","valueKey","_c","path","table","isCreatingRow","isEditingRow","Tooltip","Add","rows","ListItemText","formatNumber","setContainerWidth","BarChart","line","g","month","getSingleNumberFromString","match","DonutChart","GroupedBarChart","Card","CardContent","GridCard","formatText","getNestedValue","tableHeaders","name","Loader","formatAxisValue","formatBarLabel","formatHover","truncateLabel","d","PIE_COLORS"],"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-f8clWLbW.esm.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/en-US/_lib/localize/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../node_modules/date-fns/esm/locale/en-US/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/activityLog/activity-log.tsx","../../src/components/quick-approval-modal/quick-approval-modal.tsx","../../src/components/approval-wrapper/approval-wrapper.tsx","../../src/components/board/columnHeader.tsx","../../src/components/board/board.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/calculation-summary/calculation-summary.tsx","../../src/components/calendar/calendar.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/Dashboard/dashboard-card.tsx","../../src/components/Dashboard/dashboard-header.tsx","../../src/components/expandable-summary-wrapper/expandable-summary-wrapper.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/grid-fallback/grid-fallback.tsx","../../src/components/hr-line/hr-line.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/list/list.tsx","../../src/components/mulitline/multiline.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/reports-title-bar/reports-title-bar.tsx","../../src/components/rfq-response/item-response-details.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/schedule-report/schedule-report.tsx","../../src/components/snackbar/snackbar.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/upload/file-confirmation.tsx","../../src/components/upload/upload.tsx","../../src/components/user-dropdown/user-dropdown.tsx","../../src/components/select/controller/chip-or-placeholder.tsx","../../src/components/select/controller/controller-select.tsx","../../src/components/label-value/label-value.tsx","../../src/components/listing/listing.tsx","../../src/components/material-editable-table/components/inline-edit-fields.tsx","../../src/components/material-editable-table/material-editable-table.tsx","../../src/components/charts/areaLinerChart.tsx","../../src/components/charts/ChartLegends.tsx","../../src/components/charts/bar-chart/bar-chart.tsx","../../src/components/charts/barChart/barChart.tsx","../../src/components/charts/barLineChart/barLinechart.tsx","../../src/components/charts/donut-chart/donut-chart.tsx","../../src/components/charts/donutChart/DonutChart.tsx","../../src/components/charts/groupBarChart/GroupBarChart.tsx","../../src/components/charts/line-chart/line-chart.tsx","../../src/components/charts/multiLineChart/multi-line-chart.tsx","../../src/components/grid/custom-grid-card/custom-grid-card.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/components/reports/dynamic-report/dynamic-report.tsx","../../src/hooks/useUomFieldUpdater.tsx","../../src/components/uom-field-wrapper/uom-field-wrapper.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"],"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}","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;","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}","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 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;","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 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 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 { 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 { 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 { 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 { 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","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","/* 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 \"./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 { 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","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","/* 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 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 \"./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 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 { 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 } 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, { 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 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 { 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 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 { 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 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 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","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 { 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","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 { 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, { 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, { 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 { 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 { 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 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, 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, 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 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 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 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 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 { 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/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 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 { 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","/* 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 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}"],"names":["CloseIcon","o","formatDistance","formatRelative","ordinalNumber","valueCallback","start","end","React","DatePicker","MUITextField","ActivityTag","validationSchema","yupResolver","SelectedItems","data","users","error","Close","ChipOrPlaceholder","styled","Box","Checkbox","logo","theme","location","useTheme","task","ReportButtons","handleCompareDateRange","Menu","FilterIcon","MuiButton","columns","Accordion","Typography","Chip","_","MenuItem","generateMenuItems","_a","customStyle","dateFilter","filters","options","handleClose","ExportIcon","CalendarIcon","IconButton","TextField","MUITextArea","formatDate","type","authToken","value","List","fields","useDataFetcher","col","row","yup","_b","valueKey","_c","path","table","isCreatingRow","isEditingRow","Tooltip","Add","rows","ListItemText","formatNumber","setContainerWidth","BarChart","line","g","month","getSingleNumberFromString","match","DonutChart","GroupedBarChart","Card","CardContent","GridCard","formatText","getNestedValue","tableHeaders","name","Loader","formatAxisValue","formatBarLabel","formatHover","truncateLabel","d","PIE_COLORS"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}
|