@erpsquad/common 1.0.0 → 1.0.2
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/README.md +65 -57
- package/dist/common-BRx8CJLZ.js.map +1 -1
- package/dist/common-DjkB08j1.esm.js.map +1 -1
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/navigation-utils-93uihT3j.esm.js.map +1 -1
- package/dist/navigation-utils-DJjak6jv.js.map +1 -1
- package/dist/translations-A_1jDwOn.esm.js.map +1 -1
- package/dist/translations-DAx8u6R5.js.map +1 -1
- package/dist/utils/common-utility.d.ts +4 -5
- package/dist/utils/common.d.ts +6 -7
- package/dist/utils/date-range.d.ts +2 -3
- package/dist/utils/dateValidation.d.ts +1 -1
- package/dist/utils/form-builder-deconversion.d.ts +42 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.esm.js +2 -0
- package/dist/utils/index.esm.js.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-utils-DJjak6jv.js","sources":["../src/components/icons/document.tsx","../src/components/chip/chip.tsx","../src/components/menu/menu.tsx","../src/components/material-table/aggregation-fns/index.ts","../src/components/material-table/components/default-aggregation.tsx","../src/components/value-field/value-field.tsx","../src/utils/common-utility.tsx","../src/utils/date-range.ts","../src/utils/form-builder-deconversion.ts","../src/utils/calculation.ts","../src/utils/navigation-utils.ts"],"sourcesContent":["import { createSvgIcon } from '@mui/material';\nimport Styled from './custom-styled-icon';\n\nexport const Document = Styled(\n\tcreateSvgIcon(\n\t\t<svg\n\t\t\twidth='20'\n\t\t\theight='20'\n\t\t\tviewBox='0 0 20 20'\n\t\t\tfill='none'\n\t\t\txmlns='http://www.w3.org/2000/svg'>\n\t\t\t<path\n\t\t\t\td='M18.3333 8.33332V12.5C18.3333 16.6667 16.6667 18.3333 12.5 18.3333H7.5C3.33333 18.3333 1.66666 16.6667 1.66666 12.5V7.49999C1.66666 3.33332 3.33333 1.66666 7.5 1.66666H11.6667'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M18.3333 8.33332H15C12.5 8.33332 11.6667 7.49999 11.6667 4.99999V1.66666L18.3333 8.33332Z'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M5.83334 10.8333H10.8333'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M5.83334 14.1667H9.16667'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t</svg>,\n\t\t'Document'\n\t)\n);\n\nexport default Document;\n","import { Chip as MUIChip, ChipProps, styled } from \"@mui/material\";\n\ninterface IChip extends ChipProps {\n type?: \"rounded\" | \"normal\";\n active?: boolean;\n inActive?: boolean;\n label?: string | React.ReactNode | number | JSX.Element;\n}\n\nconst StyledChip = styled(MUIChip)<IChip>(\n ({ theme: { palette }, active, type, inActive }) => ({\n cursor: \"pointer\",\n fontSize: \".75rem\",\n color: palette.theme?.secondary[800],\n borderRadius: type === \"rounded\" ? \"1.5rem\" : \"0.25rem\",\n backgroundColor: palette.theme?.secondary[200],\n ...(active && {\n \"&.MuiChip-filled\": {\n color: palette.theme?.primary[700],\n backgroundColor: palette.theme?.primary[200],\n \"&:hover\": {\n backgroundColor: palette.theme?.primary[200]\n },\n },\n \"&.MuiChip-outlined\": {\n color: palette.theme?.primary[800],\n borderColor: palette.theme?.primary[300],\n \"&:hover\": {\n backgroundColor: palette.theme?.primary[200]\n },\n },\n }),\n ...(inActive && {\n \"&.MuiChip-filled\": {\n color: palette.theme?.error[700],\n backgroundColor: palette.theme?.error[200],\n \"&:hover\": {\n backgroundColor: palette.theme?.error[200]\n },\n },\n \"&.MuiChip-outlined\": {\n color: palette.theme?.error[800],\n borderColor: palette.theme?.error[300],\n \"&:hover\": {\n backgroundColor: palette.theme?.error[200]\n },\n },\n }),\n\n \"& .MuiChip-icon\": {\n marginRight: \"0.125rem\",\n marginLeft: \"0rem\",\n color: \"inherit\",\n },\n \"& .MuiChip-deleteIcon\": {\n marginLeft: \"0.25rem\",\n fontSize: \".875rem\",\n color: \"inherit\",\n marginRight: \"0rem\",\n },\n \"&.MuiChip-root\": {\n height: \"fit-content\",\n padding: \"0.25rem 0.5rem\",\n \".MuiChip-label\": {\n padding: \"0rem\",\n },\n },\n }),\n);\n\nconst Chip = (props: IChip) => {\n const {\n label,\n type = \"rounded\",\n variant = \"filled\",\n active = false,\n inActive = false,\n ...rest\n } = props;\n\n return (\n <StyledChip\n label={label}\n variant={variant}\n active={active}\n inActive={inActive}\n type={type}\n {...rest}\n />\n );\n};\n\nexport default Chip;\n","import { Menu as MUIMenu, MenuProps, styled } from \"@mui/material\";\n\nconst StyledMenu = styled(MUIMenu)(() => ({\n \".MuiPaper-rounded\": {\n borderRadius: \"0.5rem\",\n minWidth: \"10rem\",\n },\n}));\n\nconst Menu = ({ children, anchorEl, onClose, open, ...rest }: MenuProps) => {\n return (\n <>\n <StyledMenu\n id=\"basic-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n MenuListProps={{\n \"aria-labelledby\": \"basic-button\",\n }}\n {...rest}\n >\n {children}\n </StyledMenu>\n </>\n );\n};\n\nexport default Menu;\n","import _ from 'lodash';\nimport { MRT_RowData } from 'material-react-table';\n\nconst average = (data: MRT_RowData[], column: string) => {\n\tconst sum = data.reduce(\n\t\t(acc: number, row) => acc + Number(extractNumber(row[column])),\n\t\t0\n\t);\n\tconst count = data.length;\n\treturn !isNaN(sum) ? `${_.round(sum / count,2)}` : '-';\n};\n\nconst extractNumber = (inputString: any) => {\n\t// Use a regular expression to match the numeric part, including decimals\n\tif (typeof inputString === 'string') {\n\t\tconst match = inputString.match(/[\\d,]+(\\.\\d{1,2})?/);\n\t\treturn match ? match[0] : 0;\n\t}\n\treturn inputString;\n};\nconst sum = (data: MRT_RowData[], column: string) => {\n\tconst sum = data.reduce(\n\t\t(acc: number, row) => acc + Number(extractNumber(row[column])),\n\t\t0\n\t);\n\treturn !isNaN(sum) ? `${_.round(sum,2)}` : '-';\n};\n\nconst max = (data: MRT_RowData[], column: string) => {\n\tconst maxVal = Math.max(...data.map((row) => Number(row[column])));\n\treturn `${maxVal}`;\n};\n\nconst countEmpty = (data: MRT_RowData[], column: string) => {\n\tconst empty = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value)) \n\t\t\t? Boolean(!_.size(value)) \n\t\t\t: Boolean(!Number(value))\n\t}\n\t);\n\treturn `${empty.length}`;\n};\n\nconst percentageEmpty = (data: MRT_RowData[], column: string) => {\n\tconst empty = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(!_.size(value))\n\t\t\t: Boolean(!Number(value))\n\t}\n\t);\n\tconst percentage = (empty.length / data.length) * 100;\n\n\treturn `${_.round(percentage,2)}%`;\n};\n\nconst percentageFull = (data: MRT_RowData[], column: string) => {\n\tconst full = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(_.size(value))\n\t\t\t: Boolean(Number(value))\n\t}\n\t);\n\tconst percentage = (full.length / data.length) * 100;\n\n\treturn `${_.round(percentage,2)}%`;\n};\n\nconst countFull = (data: MRT_RowData[], column: string) => {\n\tconst full = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(_.size(value))\n\t\t\t: Boolean(Number(value))\n\t}\n\t);\n\treturn `${full.length}`;\n};\n\nconst none = () => {\n\treturn null;\n};\n\nconst min = (data: MRT_RowData[], column: string) => {\n\tconst minValue = Math.min(...data.map((row) => Number(row[column])));\n\treturn `${minValue}`;\n};\n\nexport const aggregationFns = {\n\tnone,\n\tmin,\n\tmax,\n\tsum,\n\taverage,\n\tcountEmpty,\n\tcountFull,\n\tpercentageEmpty,\n\tpercentageFull\n};\n","import React, { useEffect } from 'react';\nimport Typography from '../../typography/typography';\nimport { MenuItem } from '@mui/material';\nimport Menu from '../../menu/menu';\nimport { aggregationFns } from '../aggregation-fns';\nimport { MRT_RowData } from 'material-react-table';\n\ntype aggregationType =\n\t| 'none'\n\t| 'count_empty'\n\t| 'count_full'\n\t| 'percentage_empty'\n\t| 'percentage_full'\n\t| 'average'\n\t| 'sum';\n\ninterface IAggregation {\n\tlabel: string;\n\tvalue: aggregationType;\n}\n\nconst aggregations: IAggregation[] = [\n\t{\n\t\tlabel: 'Count Empty',\n\t\tvalue: 'count_empty'\n\t},\n\t{\n\t\tlabel: 'Count Full',\n\t\tvalue: 'count_full'\n\t},\n\t{\n\t\tlabel: 'Percentage Full',\n\t\tvalue: 'percentage_full'\n\t},\n\t{\n\t\tlabel: 'Percentage Empty',\n\t\tvalue: 'percentage_empty'\n\t},\n\t{\n\t\tlabel: 'Average',\n\t\tvalue: 'average'\n\t},\n\t{\n\t\tlabel: 'Sum',\n\t\tvalue: 'sum'\n\t},\n\t{\n\t\tlabel: 'None',\n\t\tvalue: 'none'\n\t}\n];\n\nconst aggregationFnsLookup = {\n\tcount_empty: aggregationFns.countEmpty,\n\tcount_full: aggregationFns.countFull,\n\tpercentage_empty: aggregationFns.percentageEmpty,\n\tpercentage_full: aggregationFns.percentageFull,\n\taverage: aggregationFns.average,\n\tsum: aggregationFns.sum,\n\tnone: aggregationFns.none\n};\n\ninterface IDefaultAggregation {\n\tdata: MRT_RowData[];\n\tcolumn: string;\n\tcolumnDef?: any;\n}\n\nconst DefaultAggregation = ({\n\tdata,\n\tcolumn,\n\t// columnDef\n}: IDefaultAggregation) => {\n\tconst [selectedType, setSelectedType] =\n\t\tReact.useState<aggregationType>('none');\n\tconst [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\tconst [calculatedValue, setCalculatedValue] = React.useState<string | null>();\n\tconst open = Boolean(anchorEl);\n\n\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n\t\tsetAnchorEl(event.currentTarget);\n\t};\n\n\tconst handleClose = () => {\n\t\tsetAnchorEl(null);\n\t};\n\n\tconst handleAggregationType = (val: aggregationType) => {\n\t\tsetSelectedType(val);\n\t\thandleClose();\n\t};\n\n\tuseEffect(() => {\n\t\tconst func = aggregationFnsLookup[selectedType];\n\t\tsetCalculatedValue(func(data, column));\n\t}, [selectedType, column, data]);\n\n\treturn (\n\t\t<>\n\t\t\t<Typography\n\t\t\t\tonClick={handleClick}\n\t\t\t\tsx={{ cursor: 'pointer', width:\"100%\", height:\"100%\" }}\n\t\t\t\ttype='s4'\n\t\t\t\tweight='normal'\n\t\t\t\tcolor={\n\t\t\t\t\tcalculatedValue ? 'theme.secondary.1000' : 'theme.secondary.500'\n\t\t\t\t}>\n\t\t\t\t{calculatedValue || '+ Add Calculation'}\n\t\t\t</Typography>\n\t\t\t<Menu\n\t\t\t\tid='basic-menu'\n\t\t\t\tanchorEl={anchorEl}\n\t\t\t\topen={open}\n\t\t\t\tonClose={handleClose}>\n\t\t\t\t{aggregations?.map((aggr) => (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tkey={aggr.value}\n\t\t\t\t\t\tselected={selectedType == aggr?.value}\n\t\t\t\t\t\tonClick={() => handleAggregationType(aggr?.value)}\n\t\t\t\t\t\t// disabled={\n\t\t\t\t\t\t// \t(!columnDef || columnDef?.type !== 'number') &&\n\t\t\t\t\t\t// \t(aggr.value === 'sum' || aggr.value === 'average')\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s4'>\n\t\t\t\t\t\t\t{aggr?.label}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t))}\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nexport default DefaultAggregation;\n","import { Box } from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport \"./value-field.scss\";\n\ninterface ValueFieldProps {\n label: string;\n children: React.ReactNode;\n childrenTypoProps?:any\n}\n\nconst ValueField = (props: ValueFieldProps) => {\n const { label, children, childrenTypoProps } = props;\n\n return (\n <Box className=\"valueField--Container\" >\n <Typography weight={\"medium\"} type=\"s5\" color={\"theme.secondary.700\"}>\n {label}\n </Typography>\n <Typography weight={\"medium\"} type=\"s3\" color={\"theme.secondary.1000\"} sx={{ wordBreak:'break-all', pr: 1 }} {...childrenTypoProps}>\n {children}\n </Typography>\n </Box>\n );\n};\n\nexport default ValueField;\n","\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n/* eslint-disable no-mixed-spaces-and-tabs */\nimport Typography from '../components/typography/typography';\nimport { Document } from '../components/icons';\nimport { MaterialTableColumnProps, TypeBooleanLabels } from '../components/material-table/material-table';\nimport { TFunction } from 'i18next';\nimport { formatDate } from './dateFormat';\nimport { MRT_Row, MRT_RowData } from 'material-react-table';\nimport { Link } from 'react-router-dom';\nimport DefaultAggregation from '../components/material-table/components/default-aggregation';\nimport Chip from '../components/chip/chip';\nimport _ from 'lodash';\nimport images from '../assets/images';\nimport { formatAmount } from \"./common\";\nimport { defaultCurrencyFormat } from './common';\n\nimport { defaultCurrencySymbol } from './common';\nimport ValueField from '../components/value-field/value-field';\nimport { formatLabel } from './format-text';\nimport { generateRouteWithId } from './route-utils';\nconst downloadFile = async (url, fileName) => {\n\ttry {\n\t\t\t// Fetch the file from the provided URL\n\t\t\tconst response = await fetch(url);\n\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`Failed to fetch file: ${response.statusText}`);\n\t\t\t}\n\n\t\t\t// Convert the response to a blob\n\t\t\tconst blob = await response.blob();\n\n\t\t\t// Create a temporary URL for the blob\n\t\t\tconst blobUrl = window.URL.createObjectURL(blob);\n\n\t\t\t// Create a link element\n\t\t\tconst link = document.createElement('a');\n\t\t\tlink.href = blobUrl;\n\t\t\tlink.download = fileName || 'downloaded-file'; // Fallback filename if none provided\n\n\t\t\t// Append link to the body, trigger click, and remove it\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\n\t\t\t// Revoke the blob URL to free up memory\n\t\t\twindow.URL.revokeObjectURL(blobUrl);\n\t} catch (error) {\n\t\t\tconsole.error('Error downloading file:', error);\n\t\t\tthrow error; // Re-throw to allow caller to handle the error\n\t}\n};\n\nexport const getFileNamesFromUrlsAsLink = (fileUrls: string | string[], mode?: string) => {\n\tconst fUrls = fileUrls\n\t\t? Array.isArray(fileUrls)\n\t\t\t? fileUrls\n\t\t\t: [fileUrls]\n\t\t: [];\n\n\tif (fUrls && fUrls.length) {\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdisplay='flex'\n\t\t\t\tgap={1}\n\t\t\t\tmb={1}\n\t\t\t\talignItems='center'\n\t\t\t\tflexDirection='column'>\n\t\t\t\t{fUrls.map((url) => {\n\t\t\t\t\tconst fileName = url.substring(url.lastIndexOf('/') + 1);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='#246DFF'\n\t\t\t\t\t\t\tsx={{ textDecoration: 'underline', textUnderlineOffset: '3px', cursor:'pointer' }}\n\t\t\t\t\t\t\tnoWrap \n\t\t\t\t\t\t\tonClick={() => mode === 'add' ? undefined : downloadFile(url, fileName)}>\n\t\t\t\t\t\t\t{fileName}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn null;\n};\n\nexport const getFileNamesFromUrls = (fileUrls: string[]) => {\n\tif (!fileUrls) return null;\n\n\tif (!fileUrls?.filter(Boolean)?.length) return null;\n\n\treturn fileUrls?.filter(Boolean)?.map((url) => {\n\t\tconst fileName = url?.substring(url?.lastIndexOf('/') + 1) || '';\n\t\treturn (\n\t\t\t<Box display='flex' gap={1} mb={1} alignItems='center'>\n\t\t\t\t<Document fontSize='small' />\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tweight='medium'\n\t\t\t\t\tcolor={'theme.secondary.1000'}\n\t\t\t\t\tsx={{cursor: 'pointer'}}\n\t\t\t\t\tnoWrap onClick={() => downloadFile(url, fileName)}>\n\t\t\t\t\t{fileName}\n\t\t\t\t</Typography>\n\t\t\t</Box>\n\t\t);\n\t});\n};\n\ntype CurrencySymbolFn = (row: MRT_Row<MRT_RowData>) => string;\ntype StatusClassesFn = (row: MRT_Row<MRT_RowData>) => string;\ntype RedirectionLinkFn = (row: MRT_Row<MRT_RowData>) => string;\n\ninterface ITransformTableColumns {\n\tcolumns: MaterialTableColumnProps[];\n\tcurrencySymbol?: string | CurrencySymbolFn;\n\ttranslationFn?: TFunction<'translation', undefined>;\n\tenableFooter?: boolean;\n\tredirectionLink?: string | RedirectionLinkFn;\n\tredirectionLinkState?: (row: MRT_Row<MRT_RowData>) => void;\n\tredirectionPathWithId?: string;\n\tidField?: string;\n\tcustomizeValue?: (row: MRT_Row<MRT_RowData>, columnAccessorKey?: string, value?: any) => any;\n\tstatusClasses?: string | StatusClassesFn;\n\trows: any[];\n\tcurrencyFormat?: boolean\n}\n\nconst jsonArrayToString = (json: any) => {\n\tif (!json) return '';\n\n\ttry {\n\t\treturn JSON.parse(json)?.join(', ');\n\t} catch (error) {\n\t\treturn '';\n\t}\n};\nconst getStatusClass = (status: any) => {\n\tif (typeof status === 'string') {\n\t\treturn status?.toLowerCase()?.replace(' ', '');\n\t} else if (typeof status === 'number') {\n\t\treturn status ? 'enabled' : 'disabled';\n\t}\n};\n\nexport const transformTableColumns = ({\n\tcolumns = [],\n\tcurrencySymbol,\n\ttranslationFn = undefined,\n\tenableFooter = false,\n\tredirectionLink = '',\n\tredirectionLinkState = undefined,\n\tredirectionPathWithId = '',\n\tidField = 'id',\n\tstatusClasses = '',\n\trows = [],\n\tcustomizeValue = undefined,\n\tcurrencyFormat\n}: ITransformTableColumns) => {\n\tconst currencyFormatData = currencyFormat ? currencyFormat : defaultCurrencyFormat()\n\n\treturn columns.map((column) => ({\n\t\t...column,\n\t\theader: translationFn ? translationFn(column.header) : column.header,\n\t\tCell: ({ renderedCellValue, row }: any) => {\n\t\t\tlet v = renderedCellValue;\n\t\t\tconst columnType = column.type || (column.header === \"Amount\" || column.header === \"Rate\" ? \"currency\" : undefined);\n\t\t\tswitch (columnType) {\n\t\t\t\tcase 'formattedString':\n\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tv = formatDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tv = formatDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY hh:mm A'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\tcase 'amount':{\n\t\t\t\t\tconst cs =column?.showDefaultCurrency? defaultCurrencySymbol(): currencySymbol instanceof Function ? currencySymbol(row) : (currencySymbol || defaultCurrencySymbol());\n\t\t\t\t\tv = renderedCellValue || renderedCellValue == 0\n\t\t\t\t\t\t? `${formatAmount(renderedCellValue,currencyFormatData,'before',cs)||'-'}`\n\t\t\t\t\t\t: null;\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\tcase 'status':\n\t\t\t\tcase 'enum':\n\t\t\t\tcase 'array':\n\t\t\t\t\t{\n\t\t\t\t\t\tv = renderedCellValue || renderedCellValue === 0 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{Array.isArray(renderedCellValue) ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{renderedCellValue?.length ? <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n\t\t\t\t\t\t\t\t\t{renderedCellValue.map((rcv) => (\n\t\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\t\tclassName={column.custom_class?column?.custom_class:(typeof rcv === 'string' ? rcv : '')}\n\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof rcv === 'object' ? _.get(rcv, column?.typeArrayAccessorKey||'', '') : rcv}\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t}\n\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\t</Box> : '-'}\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\t<Chip\n\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcolumn.custom_class?column?.custom_class:\n\t\t\t\t\t\t\t\t\t\t(statusClasses instanceof Function\n\t\t\t\t\t\t\t\t\t\t\t? statusClasses(row)\n\t\t\t\t\t\t\t\t\t\t\t: `${statusClasses}${getStatusClass(renderedCellValue)}`)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue}\n\t\t\t\t\t\t\t\t\t\t</Typography>\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</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'-'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tv = (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t// active={Boolean(renderedCellValue)}\n\t\t\t\t\t\t\t// inActive={Boolean(!renderedCellValue)}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\t\t...(renderedCellValue ? \n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary4[200],\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary4[900]\n\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\t\t\tbackgroundColor: theme.palette?.theme.tertiary6[200],\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary6[900]\n\t\t\t\t\t\t\t\t\t\t\t}\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\t)}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t{column?.typeBooleanLabels?.[renderedCellValue as keyof TypeBooleanLabels] || '-'}\n\t\t\t\t\t\t\t\t</Typography>\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\t\tbreak;\n\t\t\t\tcase 'jsonArray':\n\t\t\t\t\tv = jsonArrayToString(renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\tcase 'custom_link':\n\t\t\t\t\tv = customizeValue?.(row, column.accessorKey, renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// If redirectionPathWithId is provided, use it for URL parameter-based navigation\n\t\t\tif (redirectionPathWithId && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField||'id'];\n\t\t\t\tif (id) {\n\t\t\t\t\tconst path = redirectionPathWithId instanceof Function ? generateRouteWithId(redirectionPathWithId(row),id?.toString()) : generateRouteWithId(redirectionPathWithId,id?.toString());\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Link to={path}>\n\t\t\t\t\t\t\t{v}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fall back to the existing redirection logic\n\t\t\telse if (redirectionLink && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField||'id'];\n\t\t\t\tconst path = redirectionLink instanceof Function ? generateRouteWithId(redirectionLink(row),id?.toString()) : generateRouteWithId(redirectionLink,id?.toString());\n\t\t\t\treturn (\n\t\t\t\t\t<Link to={path} \n\t\t\t\t\t\tstate={redirectionLinkState?.(row)}>\n\t\t\t\t\t\t{v}\n\t\t\t\t\t</Link>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn v;\n\t\t},\n\t\t...(Boolean(enableFooter) && {\n\t\t\tFooter: ({ column }) => (\n\t\t\t\t<DefaultAggregation data={rows} column={String(column.id)} />\n\t\t\t)\n\t\t})\n\t}));\n};\n\nexport const renderEmptyRowsFallback = (text:string) => (\n\t<Box className='no-data'>\n\t\t<img src={images.common.tableNoData} />\n\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t{text}\n\t\t</Typography>\n\t</Box>\n)\n\n/* eslint-disable no-mixed-spaces-and-tabs */\nexport const renderValueField = (label: string, value: any, t: any, formatFn?: (val: any) => string) => {\n\treturn (\n\t <ValueField key={label} label={t?.(label)}>\n\t\t{formatFn ? formatFn(value) : value ?? '-'}\n\t </ValueField>\n\t);\n };\n","import dayjs from 'dayjs';\r\n\r\n/**\r\n * Date range constants\r\n */\r\nexport const RANGE = {\r\n TODAY: 'Today',\r\n YESTERDAY: 'Yesterday',\r\n THIS_WEEK: 'This Week',\r\n PREVIOUS_WEEK: 'Previous Week',\r\n THIS_MONTH: 'This Month',\r\n PREVIOUS_MONTH: 'Previous Month',\r\n THIS_QUARTER: 'This Quarter',\r\n PREVIOUS_QUARTER: 'Previous Quarter',\r\n THIS_YEAR: 'This Year',\r\n PREVIOUS_YEAR: 'Previous Year',\r\n CUSTOM: 'Custom',\r\n} as const;\r\n\r\nexport type DateRangeType = keyof typeof RANGE;\r\n\r\ninterface HandleCompareDateRangeParams {\r\n range: string;\r\n from?: string;\r\n to?: string;\r\n}\r\n\r\ninterface DateRangeResult {\r\n from: string;\r\n to: string;\r\n}\r\n\r\n/**\r\n * Calculate date range based on the range type\r\n */\r\nexport const handleCompareDateRange = async (\r\n params: HandleCompareDateRangeParams\r\n): Promise<DateRangeResult> => {\r\n const { range, from = '', to = '' } = params;\r\n const today = dayjs();\r\n let startDate: dayjs.Dayjs;\r\n let endDate: dayjs.Dayjs;\r\n\r\n switch (range) {\r\n case RANGE.TODAY:\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n break;\r\n\r\n case RANGE.YESTERDAY:\r\n startDate = today.subtract(1, 'day').startOf('day');\r\n endDate = today.subtract(1, 'day').endOf('day');\r\n break;\r\n\r\n case RANGE.THIS_WEEK:\r\n startDate = today.startOf('week');\r\n endDate = today.endOf('week');\r\n break;\r\n\r\n case RANGE.PREVIOUS_WEEK:\r\n startDate = today.subtract(1, 'week').startOf('week');\r\n endDate = today.subtract(1, 'week').endOf('week');\r\n break;\r\n\r\n case RANGE.THIS_MONTH:\r\n startDate = today.startOf('month');\r\n endDate = today.endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_MONTH:\r\n startDate = today.subtract(1, 'month').startOf('month');\r\n endDate = today.subtract(1, 'month').endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_QUARTER:\r\n const currentQuarter = Math.floor(today.month() / 3);\r\n startDate = today.month(currentQuarter * 3).startOf('month');\r\n endDate = today.month(currentQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_QUARTER:\r\n const prevQuarter = Math.floor(today.month() / 3) - 1;\r\n startDate = today.month(prevQuarter * 3).startOf('month');\r\n endDate = today.month(prevQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_YEAR:\r\n startDate = today.startOf('year');\r\n endDate = today.endOf('year');\r\n break;\r\n\r\n case RANGE.PREVIOUS_YEAR:\r\n startDate = today.subtract(1, 'year').startOf('year');\r\n endDate = today.subtract(1, 'year').endOf('year');\r\n break;\r\n\r\n case RANGE.CUSTOM:\r\n // For custom range, use the provided from/to dates or today\r\n startDate = from ? dayjs(from) : today.startOf('day');\r\n endDate = to ? dayjs(to) : today.endOf('day');\r\n break;\r\n\r\n default:\r\n // Default to today if range is not recognized\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n }\r\n\r\n return {\r\n from: startDate.format('YYYY-MM-DD'),\r\n to: endDate.format('YYYY-MM-DD'),\r\n };\r\n};\r\n\r\n// Synchronous version (for compatibility)\r\nexport const handleCompareDateRangeSync = (\r\n params: HandleCompareDateRangeParams\r\n): DateRangeResult => {\r\n const { range, from = '', to = '' } = params;\r\n const today = dayjs();\r\n let startDate: dayjs.Dayjs;\r\n let endDate: dayjs.Dayjs;\r\n\r\n switch (range) {\r\n case RANGE.TODAY:\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n break;\r\n\r\n case RANGE.YESTERDAY:\r\n startDate = today.subtract(1, 'day').startOf('day');\r\n endDate = today.subtract(1, 'day').endOf('day');\r\n break;\r\n\r\n case RANGE.THIS_WEEK:\r\n startDate = today.startOf('week');\r\n endDate = today.endOf('week');\r\n break;\r\n\r\n case RANGE.PREVIOUS_WEEK:\r\n startDate = today.subtract(1, 'week').startOf('week');\r\n endDate = today.subtract(1, 'week').endOf('week');\r\n break;\r\n\r\n case RANGE.THIS_MONTH:\r\n startDate = today.startOf('month');\r\n endDate = today.endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_MONTH:\r\n startDate = today.subtract(1, 'month').startOf('month');\r\n endDate = today.subtract(1, 'month').endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_QUARTER:\r\n const currentQuarter = Math.floor(today.month() / 3);\r\n startDate = today.month(currentQuarter * 3).startOf('month');\r\n endDate = today.month(currentQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_QUARTER:\r\n const prevQuarter = Math.floor(today.month() / 3) - 1;\r\n startDate = today.month(prevQuarter * 3).startOf('month');\r\n endDate = today.month(prevQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_YEAR:\r\n startDate = today.startOf('year');\r\n endDate = today.endOf('year');\r\n break;\r\n\r\n case RANGE.PREVIOUS_YEAR:\r\n startDate = today.subtract(1, 'year').startOf('year');\r\n endDate = today.subtract(1, 'year').endOf('year');\r\n break;\r\n\r\n case RANGE.CUSTOM:\r\n // For custom range, use the provided from/to dates or today\r\n startDate = from ? dayjs(from) : today.startOf('day');\r\n endDate = to ? dayjs(to) : today.endOf('day');\r\n break;\r\n\r\n default:\r\n // Default to today if range is not recognized\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n }\r\n\r\n return {\r\n from: startDate.format('YYYY-MM-DD'),\r\n to: endDate.format('YYYY-MM-DD'),\r\n };\r\n};\r\n\r\n","type ItemType = {\n section_name: any;\n is_system_field: boolean;\n field_type: string;\n label: string;\n name?: string;\n placeholder: string;\n default_value: any;\n validation: any[];\n is_multiline: any;\n section_order: any;\n option?: any;\n time_format?: string;\n currency?: string;\n field_properties: {\n is_accordion?: boolean;\n float_step?: any;\n options: any;\n is_multiselect: any;\n title: string;\n title_position: \"start\" | \"end\";\n is_multiline: boolean\n is_checked: boolean\n table: string,\n table_columns: string[]\n table_rows?: any\n is_multiple: boolean\n enable_footer?: boolean\n footer_action?: 'add'\n other_buttons?:React.ReactNode[]\n };\n is_section_field?: true;\n section_type?: \"default\" | \"Form switcher section\";\n form_switcher_label?: string;\n form_switcher_name?: string;\n switcher_forms?: {\n value?: string;\n name?: string;\n id?: number;\n }[];\n is_accordion?: boolean;\n}\n\nconst getFirstNonSectionField = (formData: any[]) => {\n const firstField = formData?.find((field) => !field.is_section_field)\n return firstField\n}\n\nconst formBuilderDeConversion = (formData: any) => {\n const outputData: any = {};\n if (formData.length === 0) {\n return outputData;\n }\n\n const firstItem = getFirstNonSectionField(formData);\n\n if (firstItem?.tab_name) {\n outputData.tab = <any>[];\n let currentTab: {\n title: string;\n data: any;\n remove_tab?: any;\n tab_order?: any;\n } | null = null;\n let currentSection: {\n label: string;\n members: any;\n remove_section: any;\n field_type?: string;\n is_accordion?: boolean;\n } | null = null;\n let otherSectionDetails: any = {}\n let sectionOrder: any = null\n\n formData.forEach((item: any) => {\n if (item?.is_section_field) {\n otherSectionDetails = {\n field_type: item?.field_type,\n label: item?.label,\n is_accordion: item?.is_accordion,\n is_section_field: item?.is_section_field,\n section_type: item?.section_type,\n form_switcher_label: item?.form_switcher_label,\n form_switcher_name: item?.form_switcher_name,\n switcher_forms: item?.switcher_forms,\n disabled: Boolean(item?.disabled)\n }\n currentSection = null\n sectionOrder = sectionOrder++\n } else {\n if (!currentTab || currentTab.title !== item.tab_name) {\n\n currentTab = {\n tab_order: item.tab_order || 1,\n title: item.tab_name,\n data: [],\n };\n const checkIfTabExist = outputData.tab.find(tab => tab.title === currentTab?.title)\n\n if (!checkIfTabExist) {\n outputData.tab.push(currentTab);\n } else {\n currentTab = checkIfTabExist\n }\n currentSection = null;\n }\n\n if (!currentSection || currentSection.label !== item.section_name || sectionOrder !== item.section_order) {\n currentSection = {\n field_type: \"section\",\n label: item.section_name || \"\",\n is_accordion: item.field_properties?.is_accordion,\n members: [],\n remove_section: item.is_system_field === true ? true : false,\n };\n\n const checkIfSectionExist = currentTab.data.find(section => section.label === currentSection?.label)\n if (!checkIfSectionExist) {\n currentTab.data.push({ ...otherSectionDetails, ...currentSection });\n } else {\n currentSection = checkIfSectionExist\n }\n otherSectionDetails = null\n }\n sectionOrder = item.section_order\n\n const thenValidations = item?.validation?.find((v: { type: string }) => v.type === \"when\")?.thenValidations || []\n\n const member = {\n ...item,\n id: `${Date.now()}-${Math.random()}`,\n field_type:\n item.field_type === \"media\" ? \"file\" : item.field_type || \"text\",\n type: item.is_system_field ? \"system\" : \"custom\",\n label: item.label || \"\",\n placeholder: item.placeholder || \"\",\n default_value: item.default_value || \"\",\n ...(item?.time_format &&\n item?.field_type === \"time\" && { option: item?.time_format }),\n ...(item?.currency &&\n item?.field_type === \"currency\" && { option: item?.currency }),\n ...(item.field_type === \"text\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"text\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n min_length:\n item.validation.find((v: { type: string }) => v.type === \"min_val\")\n ?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n max_length:\n item.validation.find((v: { type: string }) => v.type === \"max_val\")\n ?.value || null,\n }),\n ...((item.is_multiline !== undefined || item.field_properties.is_multiline !== undefined) && {\n is_multiline: item.is_multiline || item.field_properties.is_multiline,\n }),\n is_required:\n item.validation.find((v: { type: string }) => v.type === \"required\")?.value ||\n thenValidations?.find((v: { type: string }) => v.type === \"required\")?.value ||\n false,\n is_unique:\n item.validation.find((v: { type: string }) => v.type === \"unique\")\n ?.value || false,\n section_order: item.section_order || 0,\n ...(item.field_properties.float_step && {\n float_step: item.field_properties.float_step.toString(),\n }),\n ...(item.field_properties.options && {\n options: item.field_properties.options,\n }),\n ...(item.field_properties.is_multiselect !== undefined && {\n is_multiselect: item.field_properties.is_multiselect,\n }),\n ...(item.field_properties?.enable_footer !== undefined && {\n enable_footer: Boolean(item.field_properties.enable_footer),\n }),\n ...(item.field_properties?.footer_action !== undefined && {\n footer_action: item.field_properties.footer_action || 'add',\n }),\n ...(item.field_type === \"date\" && {\n is_future_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_future_dates_allowed\",\n )?.value || null,\n }),\n ...(item.field_type === \"date\" && {\n is_past_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_past_dates_allowed\",\n )?.value || null,\n }),\n ...((item.field_type === \"image\" || item.field_type === \"media\" || item.field_type === \"file\") && {\n max_size:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_file_size\",\n )?.value || undefined,\n is_multiple: item.field_properties?.is_multiple\n }),\n ...((item.field_type === \"toggleButton\" || item.field_type === \"checkbox\" || item.field_type === \"radioButton\") && {\n title: item.field_properties?.title ? item.field_properties?.title : '',\n title_position: item.field_properties?.title_position ?? \"end\",\n is_checked: item.field_properties?.is_checked\n }),\n ...((item.field_type === \"table\") && {\n table: item.field_properties?.table,\n table_columns: convertTableColumns(item.field_properties?.table_columns),\n table_rows: item.field_properties?.table_rows,\n otherButtons: item.field_properties?.other_buttons || []\n }),\n };\n if (currentSection) {\n currentSection.members.push(member);\n if (\n currentSection.members.some((member: any) => member.type === \"system\")\n ) {\n currentSection.remove_section = true;\n } else {\n currentSection.remove_section = false;\n }\n currentTab.remove_tab = currentTab.data.some(\n (section: { members: any[] }) =>\n section.members.some(\n (member: { type: string }) => member.type === \"system\",\n ),\n );\n }\n }\n });\n } else {\n // Convert to sections format\n outputData.section = [];\n let currentSection: {\n label: any;\n members: any;\n remove_section: any;\n field_type?: string;\n is_accordion?: boolean;\n } | null = null;\n let otherSectionDetails: any = {}\n let sectionOrder: any = null\n\n formData.forEach(\n (item: ItemType) => {\n if (item.is_section_field) {\n otherSectionDetails = {\n field_type: item?.field_type,\n label: item?.label,\n is_accordion: item?.is_accordion,\n is_section_field: item?.is_section_field,\n section_type: item?.section_type,\n form_switcher_label: item?.form_switcher_label,\n form_switcher_name: item?.form_switcher_name,\n switcher_forms: item?.switcher_forms,\n disabled: Boolean(item?.disabled)\n }\n sectionOrder = sectionOrder++\n currentSection = null\n } else {\n if (!currentSection || currentSection.label !== item.section_name || sectionOrder !== item.section_order) {\n currentSection = {\n field_type: \"section\",\n label: item.section_name || \"\",\n is_accordion: item.field_properties?.is_accordion,\n members: [],\n remove_section: item.is_system_field === true ? true : false,\n };\n\n const checkIfSectionExist = outputData?.section?.find(section => section.label === currentSection?.label)\n if (!checkIfSectionExist) {\n outputData.section.push({ ...otherSectionDetails, ...currentSection });\n } else {\n currentSection = checkIfSectionExist\n }\n\n // outputData.section.push({ ...otherSectionDetails, ...currentSection });\n\n otherSectionDetails = null\n }\n sectionOrder = item.section_order\n\n const thenValidations = item?.validation?.find((v: { type: string }) => v.type === \"when\")?.thenValidations || []\n\n const member = {\n ...item,\n id: `${Date.now()}-${Math.random()}`,\n field_type:\n item.field_type === \"media\" ? \"file\" : item.field_type || \"text\",\n type: item.is_system_field ? \"system\" : \"custom\",\n label: item.label,\n placeholder: item.placeholder || \"\",\n default_value: item.default_value || \"\",\n ...(item?.time_format &&\n item?.field_type === \"time\" && { option: item?.time_format }),\n ...(item?.currency &&\n item?.field_type === \"currency\" && { option: item?.currency }),\n ...(item.field_type === \"text\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"text\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_val\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_val\",\n )?.value || null,\n }),\n ...((item.is_multiline !== undefined || item.field_properties?.is_multiline !== undefined) && {\n is_multiline: item.is_multiline || item.field_properties.is_multiline,\n }),\n is_required:\n item.validation.find((v: { type: string }) => v.type === \"required\")?.value ||\n thenValidations?.find((v: { type: string }) => v.type === \"required\")?.value ||\n false,\n is_unique:\n item.validation.find((v: { type: string }) => v.type === \"unique\")\n ?.value || false,\n section_order: item.section_order || 0,\n ...(item.field_properties?.float_step && {\n float_step: Number(item.field_properties.float_step),\n }),\n ...(item.field_properties?.options && {\n options: item.field_properties.options,\n }),\n ...(item.field_properties?.is_multiselect !== undefined && {\n is_multiselect: item.field_properties.is_multiselect,\n }),\n ...(item.field_properties?.enable_footer !== undefined && {\n enable_footer: Boolean(item.field_properties.enable_footer),\n }),\n ...(item.field_properties?.footer_action !== undefined && {\n footer_action: item.field_properties.footer_action || 'add',\n }),\n ...(item.field_type === \"date\" && {\n is_future_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_future_dates_allowed\",\n )?.value || null,\n }),\n ...(item.field_type === \"date\" && {\n is_past_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_past_dates_allowed\",\n )?.value || null,\n }),\n ...((item.field_type === \"image\" || item.field_type === \"media\" || item.field_type === \"file\") && {\n max_size:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_file_size\",\n )?.value || undefined,\n is_multiple: item.field_properties?.is_multiple\n }),\n ...((item.field_type === \"toggleButton\" || item.field_type === \"checkbox\") && {\n title: item.field_properties?.title ? item.field_properties?.title : item.label,\n title_position: item.field_properties?.title_position ?? \"end\",\n is_checked: item.field_properties?.is_checked\n }),\n ...((item.field_type === \"table\") && {\n table: item.field_properties?.table,\n table_columns: convertTableColumns(item.field_properties?.table_columns),\n table_rows: item.field_properties?.table_rows,\n otherButtons: item.field_properties?.other_buttons || []\n }),\n };\n\n currentSection.members.push(member);\n if (\n currentSection.members.some((member: any) => member.type === \"system\")\n ) {\n currentSection.remove_section = true;\n } else {\n currentSection.remove_section = false;\n }\n }\n }\n );\n }\n\n return outputData;\n};\n\n\n\nfunction formatText(key: string): string {\n return key ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \") : key;\n}\n\nexport const convertTableColumns = (columns: string[]) => {\n if (!Array.isArray(columns)) return [];\n\n return columns.map(column => {\n if (typeof column === 'object') {\n return { ...column }\n } else {\n const colArr = column.split(\".\").filter(str => str)\n const header = colArr.length ? (colArr.length > 1 ? formatText(colArr[colArr.length - 1]) : formatText(colArr[0])) : \"-\"\n\n return {\n header,\n accessorKey: column,\n visible: true,\n }\n }\n })\n}\n\nexport default formBuilderDeConversion;\n","export const calculateEntries = (\n\titems: any[],\n\texpenses?: any[],\n\tadditionalDiscountOn?: string,\n\tadditionalDiscountPercentage?: number,\n\tprovidedAdditionalDiscountAmount?: number,\n\troundOff?: boolean,\n\troundOffAmount?: number,\n promotionAmount?: number\n) => {\n\tlet totalQuantity = 0,\n\t\ttotalDiscount = 0,\n\t\ttotalTaxAmount = 0,\n\t\ttotalAmountExcludingAll = 0,\n\t\ttotalAmountIncludingAll = 0,\n\t\tadditionalDiscountAmount = 0,\n\t\ttotalGrossAmount = 0;\n\n\tif (items.length) {\n\t\titems.forEach((item) => {\n\t\t\ttotalQuantity += Number(item?.quantity || 0);\n\t\t\ttotalDiscount += Number(item?.discount_amount || 0);\n\t\t\ttotalAmountIncludingAll += Number(\n\t\t\t\titem.total_amount || 0\n\t\t\t);\n\t\t\ttotalTaxAmount += Number(item.tax_amount);\n\t\t\ttotalAmountExcludingAll +=\n\t\t\t\tNumber(item.quantity || 0) *\n\t\t\t\tNumber(item.rate || 0);\n\t\t\ttotalGrossAmount += Number(item.gross_amount || 0);\n\t\t});\n\t}\n\tif (expenses?.length) {\n\t\texpenses.forEach((item) => {\n\t\t\ttotalQuantity += 1;\n\t\t\ttotalDiscount += Number(item.discount_amount || 0);\n\t\t\ttotalAmountIncludingAll += Number(\n\t\t\t\titem.total_amount || 0\n\t\t\t);\n\t\t\ttotalTaxAmount += Number(item.tax_amount);\n\t\t\ttotalAmountExcludingAll += 1 * Number(item.rate);\n\t\t\ttotalGrossAmount += Number(item.gross_amount || 0);\n\t\t});\n\t}\n\n\tlet finalAmount = totalAmountIncludingAll;\n\n\tif (additionalDiscountOn) {\n\t\tif (additionalDiscountOn === 'Net Amount') {\n\t\t\tif (\n\t\t\t\tadditionalDiscountPercentage &&\n\t\t\t\tNumber(additionalDiscountPercentage) !== 0\n\t\t\t) {\n\t\t\t\tadditionalDiscountAmount =\n\t\t\t\t\ttotalAmountIncludingAll * (additionalDiscountPercentage / 100);\n\t\t\t} else {\n\t\t\t\tadditionalDiscountAmount = providedAdditionalDiscountAmount || 0;\n\t\t\t}\n\t\t} else if (additionalDiscountOn === 'Gross Amount') {\n\t\t\tif (\n\t\t\t\tadditionalDiscountPercentage &&\n\t\t\t\tNumber(additionalDiscountPercentage) !== 0\n\t\t\t) {\n\t\t\t\tadditionalDiscountAmount =\n\t\t\t\t\ttotalGrossAmount * (additionalDiscountPercentage / 100);\n\t\t\t} else {\n\t\t\t\tadditionalDiscountAmount = providedAdditionalDiscountAmount || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tfinalAmount =\n\t\tadditionalDiscountOn === 'Gross Amount'\n\t\t\t? Number(totalAmountIncludingAll) - Number(additionalDiscountAmount)\n\t\t\t: Number(totalAmountIncludingAll) - Number(additionalDiscountAmount);\n \n if(Number(promotionAmount)) {\n finalAmount = finalAmount - Number(promotionAmount)\n }\n\n\tconst actualTotalAmount = finalAmount;\n\tif (roundOff && roundOffAmount && Number(roundOffAmount)) {\n\t\tfinalAmount = Math.round(finalAmount / roundOffAmount) * roundOffAmount;\n\t}\n\tconst roundOffDifference = Number(finalAmount) - Number(actualTotalAmount);\n\tconst totalItemsExpenseDiscount = totalDiscount;\n\ttotalDiscount += Number(additionalDiscountAmount);\n\treturn {\n\t\ttotalQuantity,\n\t\ttotalDiscount,\n\t\ttotalItemsExpenseDiscount,\n\t\ttotalTaxAmount,\n\t\ttotalAmountExludingAll: totalAmountExcludingAll,\n\t\ttotalAmountIncludingAll,\n\t\tadditinoalDiscountAmount: additionalDiscountAmount,\n\t\ttotalGrossAmount,\n\t\tactualTotalAmount,\n\t\troundOffDifference,\n\t\tfinalAmount\n\t};\n};","import { NavigateFunction } from 'react-router-dom';\n\n/**\n * Navigates to a route with an ID parameter, replacing the :id placeholder in the route path\n * This is a more RESTful approach than using location state\n * \n * @param navigate - The navigate function from useNavigate hook\n * @param routePath - The route path with :id placeholder\n * @param id - The ID to replace the placeholder with\n * @param fallbackState - Optional state to pass to the navigate function as fallback\n */\nexport const navigateWithId = (\n navigate: NavigateFunction,\n routePath: string,\n id: string | number,\n fallbackState?: any\n) => {\n // Replace :id in the route path with the actual ID\n const path = routePath.replace(':id', id.toString());\n \n // Navigate to the path, optionally with state as fallback for backward compatibility\n navigate(path, fallbackState ? { state: fallbackState } : undefined);\n};\n\n/**\n * Extracts the ID from the URL parameters and returns it\n * If the ID is not found in the URL, falls back to using location.state\n * \n * @param params - The params object from useParams hook\n * @param location - The location object from useLocation hook\n * @param idField - The field name in the location.state object that contains the ID (default: 'id')\n * @returns The ID from params or location.state\n */\nexport const getEntityId = (\n params: Record<string, string | undefined>,\n location: { state: any },\n idField: string = 'id'\n): string | undefined => {\n // First try to get the ID from URL params\n if (params.id) {\n return params.id;\n }\n \n // Fall back to location.state if params.id is not available\n if (location.state && location.state[idField]) {\n return location.state[idField].toString();\n }\n \n return undefined;\n}; "],"names":["Document","Styled","createSvgIcon","jsxs","width","height","viewBox","fill","xmlns","children","jsx","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","StyledChip","styled","MUIChip","theme","palette","active","type","inActive","cursor","fontSize","color","_a","secondary","borderRadius","backgroundColor","_b","_c","primary","_d","_e","_f","borderColor","_g","_h","_i","error","_j","_k","_l","_m","_n","marginRight","marginLeft","padding","Chip","props","label","variant","rest","StyledMenu","MUIMenu","minWidth","Menu","anchorEl","onClose","open","Fragment","id","MenuListProps","extractNumber","inputString","match","aggregationFns","none","sum","data","column","reduce","acc","row","Number","isNaN","_","round","average","count","length","countEmpty","filter","value","get","Boolean","size","countFull","percentageEmpty","percentage","percentageFull","aggregations","aggregationFnsLookup","count_empty","count_full","percentage_empty","percentage_full","DefaultAggregation","selectedType","setSelectedType","React","useState","setAnchorEl","calculatedValue","setCalculatedValue","handleClose","useEffect","func","Typography","onClick","event","currentTarget","sx","weight","map","aggr","MenuItem","selected","handleAggregationType","val","ValueField","childrenTypoProps","Box","className","wordBreak","pr","downloadFile","async","url","fileName","response","fetch","ok","Error","statusText","blob","blobUrl","window","URL","createObjectURL","link","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","getStatusClass","status","toLowerCase","replace","RANGE","TODAY","YESTERDAY","THIS_WEEK","PREVIOUS_WEEK","THIS_MONTH","PREVIOUS_MONTH","THIS_QUARTER","PREVIOUS_QUARTER","THIS_YEAR","PREVIOUS_YEAR","CUSTOM","formatText","key","split","word","charAt","toUpperCase","slice","join","convertTableColumns","columns","Array","isArray","colArr","str","header","accessorKey","visible","items","expenses","additionalDiscountOn","additionalDiscountPercentage","providedAdditionalDiscountAmount","roundOff","roundOffAmount","promotionAmount","totalQuantity","totalDiscount","totalTaxAmount","totalAmountExcludingAll","totalAmountIncludingAll","additionalDiscountAmount","totalGrossAmount","forEach","item","quantity","discount_amount","total_amount","tax_amount","rate","gross_amount","finalAmount","actualTotalAmount","Math","roundOffDifference","totalItemsExpenseDiscount","totalAmountExludingAll","additinoalDiscountAmount","formData","outputData","firstItem","find","field","is_section_field","getFirstNonSectionField","tab_name","tab","currentTab","currentSection","otherSectionDetails","sectionOrder","field_type","is_accordion","section_type","form_switcher_label","form_switcher_name","switcher_forms","disabled","title","tab_order","checkIfTabExist","push","section_name","section_order","field_properties","members","remove_section","is_system_field","checkIfSectionExist","section","thenValidations","validation","v","member","Date","now","random","placeholder","default_value","time_format","option","currency","min_length","max_length","is_multiline","is_required","is_unique","float_step","toString","options","is_multiselect","enable_footer","footer_action","is_future_dates_allowed","is_past_dates_allowed","max_size","_o","is_multiple","_p","_q","_r","title_position","_s","is_checked","_t","table","_u","table_columns","_v","table_rows","_w","otherButtons","_x","other_buttons","some","remove_tab","_y","_z","_A","_B","_C","params","location","idField","state","fileUrls","substring","lastIndexOf","display","gap","mb","alignItems","noWrap","mode","fUrls","flexDirection","textDecoration","textUnderlineOffset","range","from","to","today","dayjs","startDate","endDate","startOf","endOf","subtract","currentQuarter","floor","month","prevQuarter","format","navigate","routePath","fallbackState","text","src","images","common","tableNoData","t","formatFn","currencySymbol","translationFn","enableFooter","redirectionLink","redirectionLinkState","redirectionPathWithId","statusClasses","rows","customizeValue","currencyFormat","currencyFormatData","defaultCurrencyFormat","Cell","renderedCellValue","formatLabel","formatDate","editProperties","dateFormat","cs","showDefaultCurrency","defaultCurrencySymbol","Function","formatAmount","flexWrap","rcv","custom_class","typeArrayAccessorKey","tertiary4","tertiary6","typeBooleanLabels","json","JSON","parse","jsonArrayToString","original","path","generateRouteWithId","Link","Footer","String"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navigation-utils-DJjak6jv.js","sources":["../src/components/icons/document.tsx","../src/components/chip/chip.tsx","../src/components/menu/menu.tsx","../src/components/material-table/aggregation-fns/index.ts","../src/components/material-table/components/default-aggregation.tsx","../src/components/value-field/value-field.tsx","../src/utils/common-utility.tsx","../src/utils/date-range.ts","../src/utils/form-builder-deconversion.ts","../src/utils/calculation.ts","../src/utils/navigation-utils.ts"],"sourcesContent":["import { createSvgIcon } from '@mui/material';\nimport Styled from './custom-styled-icon';\n\nexport const Document = Styled(\n\tcreateSvgIcon(\n\t\t<svg\n\t\t\twidth='20'\n\t\t\theight='20'\n\t\t\tviewBox='0 0 20 20'\n\t\t\tfill='none'\n\t\t\txmlns='http://www.w3.org/2000/svg'>\n\t\t\t<path\n\t\t\t\td='M18.3333 8.33332V12.5C18.3333 16.6667 16.6667 18.3333 12.5 18.3333H7.5C3.33333 18.3333 1.66666 16.6667 1.66666 12.5V7.49999C1.66666 3.33332 3.33333 1.66666 7.5 1.66666H11.6667'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M18.3333 8.33332H15C12.5 8.33332 11.6667 7.49999 11.6667 4.99999V1.66666L18.3333 8.33332Z'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M5.83334 10.8333H10.8333'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td='M5.83334 14.1667H9.16667'\n\t\t\t\tstroke='currentColor'\n\t\t\t\tstrokeWidth='1.5'\n\t\t\t\tstrokeLinecap='round'\n\t\t\t\tstrokeLinejoin='round'\n\t\t\t/>\n\t\t</svg>,\n\t\t'Document'\n\t)\n);\n\nexport default Document;\n","import { Chip as MUIChip, ChipProps, styled } from \"@mui/material\";\n\ninterface IChip extends ChipProps {\n type?: \"rounded\" | \"normal\";\n active?: boolean;\n inActive?: boolean;\n label?: string | React.ReactNode | number | JSX.Element;\n}\n\nconst StyledChip = styled(MUIChip)<IChip>(\n ({ theme: { palette }, active, type, inActive }) => ({\n cursor: \"pointer\",\n fontSize: \".75rem\",\n color: palette.theme?.secondary[800],\n borderRadius: type === \"rounded\" ? \"1.5rem\" : \"0.25rem\",\n backgroundColor: palette.theme?.secondary[200],\n ...(active && {\n \"&.MuiChip-filled\": {\n color: palette.theme?.primary[700],\n backgroundColor: palette.theme?.primary[200],\n \"&:hover\": {\n backgroundColor: palette.theme?.primary[200]\n },\n },\n \"&.MuiChip-outlined\": {\n color: palette.theme?.primary[800],\n borderColor: palette.theme?.primary[300],\n \"&:hover\": {\n backgroundColor: palette.theme?.primary[200]\n },\n },\n }),\n ...(inActive && {\n \"&.MuiChip-filled\": {\n color: palette.theme?.error[700],\n backgroundColor: palette.theme?.error[200],\n \"&:hover\": {\n backgroundColor: palette.theme?.error[200]\n },\n },\n \"&.MuiChip-outlined\": {\n color: palette.theme?.error[800],\n borderColor: palette.theme?.error[300],\n \"&:hover\": {\n backgroundColor: palette.theme?.error[200]\n },\n },\n }),\n\n \"& .MuiChip-icon\": {\n marginRight: \"0.125rem\",\n marginLeft: \"0rem\",\n color: \"inherit\",\n },\n \"& .MuiChip-deleteIcon\": {\n marginLeft: \"0.25rem\",\n fontSize: \".875rem\",\n color: \"inherit\",\n marginRight: \"0rem\",\n },\n \"&.MuiChip-root\": {\n height: \"fit-content\",\n padding: \"0.25rem 0.5rem\",\n \".MuiChip-label\": {\n padding: \"0rem\",\n },\n },\n }),\n);\n\nconst Chip = (props: IChip) => {\n const {\n label,\n type = \"rounded\",\n variant = \"filled\",\n active = false,\n inActive = false,\n ...rest\n } = props;\n\n return (\n <StyledChip\n label={label}\n variant={variant}\n active={active}\n inActive={inActive}\n type={type}\n {...rest}\n />\n );\n};\n\nexport default Chip;\n","import { Menu as MUIMenu, MenuProps, styled } from \"@mui/material\";\n\nconst StyledMenu = styled(MUIMenu)(() => ({\n \".MuiPaper-rounded\": {\n borderRadius: \"0.5rem\",\n minWidth: \"10rem\",\n },\n}));\n\nconst Menu = ({ children, anchorEl, onClose, open, ...rest }: MenuProps) => {\n return (\n <>\n <StyledMenu\n id=\"basic-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n MenuListProps={{\n \"aria-labelledby\": \"basic-button\",\n }}\n {...rest}\n >\n {children}\n </StyledMenu>\n </>\n );\n};\n\nexport default Menu;\n","import _ from 'lodash';\nimport { MRT_RowData } from 'material-react-table';\n\nconst average = (data: MRT_RowData[], column: string) => {\n\tconst sum = data.reduce(\n\t\t(acc: number, row) => acc + Number(extractNumber(row[column])),\n\t\t0\n\t);\n\tconst count = data.length;\n\treturn !isNaN(sum) ? `${_.round(sum / count,2)}` : '-';\n};\n\nconst extractNumber = (inputString: any) => {\n\t// Use a regular expression to match the numeric part, including decimals\n\tif (typeof inputString === 'string') {\n\t\tconst match = inputString.match(/[\\d,]+(\\.\\d{1,2})?/);\n\t\treturn match ? match[0] : 0;\n\t}\n\treturn inputString;\n};\nconst sum = (data: MRT_RowData[], column: string) => {\n\tconst sum = data.reduce(\n\t\t(acc: number, row) => acc + Number(extractNumber(row[column])),\n\t\t0\n\t);\n\treturn !isNaN(sum) ? `${_.round(sum,2)}` : '-';\n};\n\nconst max = (data: MRT_RowData[], column: string) => {\n\tconst maxVal = Math.max(...data.map((row) => Number(row[column])));\n\treturn `${maxVal}`;\n};\n\nconst countEmpty = (data: MRT_RowData[], column: string) => {\n\tconst empty = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value)) \n\t\t\t? Boolean(!_.size(value)) \n\t\t\t: Boolean(!Number(value))\n\t}\n\t);\n\treturn `${empty.length}`;\n};\n\nconst percentageEmpty = (data: MRT_RowData[], column: string) => {\n\tconst empty = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(!_.size(value))\n\t\t\t: Boolean(!Number(value))\n\t}\n\t);\n\tconst percentage = (empty.length / data.length) * 100;\n\n\treturn `${_.round(percentage,2)}%`;\n};\n\nconst percentageFull = (data: MRT_RowData[], column: string) => {\n\tconst full = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(_.size(value))\n\t\t\t: Boolean(Number(value))\n\t}\n\t);\n\tconst percentage = (full.length / data.length) * 100;\n\n\treturn `${_.round(percentage,2)}%`;\n};\n\nconst countFull = (data: MRT_RowData[], column: string) => {\n\tconst full = data?.filter((d) => {\n\t\tconst value = _.get(d, column); \n\t\treturn isNaN(Number(value))\n\t\t\t? Boolean(_.size(value))\n\t\t\t: Boolean(Number(value))\n\t}\n\t);\n\treturn `${full.length}`;\n};\n\nconst none = () => {\n\treturn null;\n};\n\nconst min = (data: MRT_RowData[], column: string) => {\n\tconst minValue = Math.min(...data.map((row) => Number(row[column])));\n\treturn `${minValue}`;\n};\n\nexport const aggregationFns = {\n\tnone,\n\tmin,\n\tmax,\n\tsum,\n\taverage,\n\tcountEmpty,\n\tcountFull,\n\tpercentageEmpty,\n\tpercentageFull\n};\n","import React, { useEffect } from 'react';\nimport Typography from '../../typography/typography';\nimport { MenuItem } from '@mui/material';\nimport Menu from '../../menu/menu';\nimport { aggregationFns } from '../aggregation-fns';\nimport { MRT_RowData } from 'material-react-table';\n\ntype aggregationType =\n\t| 'none'\n\t| 'count_empty'\n\t| 'count_full'\n\t| 'percentage_empty'\n\t| 'percentage_full'\n\t| 'average'\n\t| 'sum';\n\ninterface IAggregation {\n\tlabel: string;\n\tvalue: aggregationType;\n}\n\nconst aggregations: IAggregation[] = [\n\t{\n\t\tlabel: 'Count Empty',\n\t\tvalue: 'count_empty'\n\t},\n\t{\n\t\tlabel: 'Count Full',\n\t\tvalue: 'count_full'\n\t},\n\t{\n\t\tlabel: 'Percentage Full',\n\t\tvalue: 'percentage_full'\n\t},\n\t{\n\t\tlabel: 'Percentage Empty',\n\t\tvalue: 'percentage_empty'\n\t},\n\t{\n\t\tlabel: 'Average',\n\t\tvalue: 'average'\n\t},\n\t{\n\t\tlabel: 'Sum',\n\t\tvalue: 'sum'\n\t},\n\t{\n\t\tlabel: 'None',\n\t\tvalue: 'none'\n\t}\n];\n\nconst aggregationFnsLookup = {\n\tcount_empty: aggregationFns.countEmpty,\n\tcount_full: aggregationFns.countFull,\n\tpercentage_empty: aggregationFns.percentageEmpty,\n\tpercentage_full: aggregationFns.percentageFull,\n\taverage: aggregationFns.average,\n\tsum: aggregationFns.sum,\n\tnone: aggregationFns.none\n};\n\ninterface IDefaultAggregation {\n\tdata: MRT_RowData[];\n\tcolumn: string;\n\tcolumnDef?: any;\n}\n\nconst DefaultAggregation = ({\n\tdata,\n\tcolumn,\n\t// columnDef\n}: IDefaultAggregation) => {\n\tconst [selectedType, setSelectedType] =\n\t\tReact.useState<aggregationType>('none');\n\tconst [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\tconst [calculatedValue, setCalculatedValue] = React.useState<string | null>();\n\tconst open = Boolean(anchorEl);\n\n\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n\t\tsetAnchorEl(event.currentTarget);\n\t};\n\n\tconst handleClose = () => {\n\t\tsetAnchorEl(null);\n\t};\n\n\tconst handleAggregationType = (val: aggregationType) => {\n\t\tsetSelectedType(val);\n\t\thandleClose();\n\t};\n\n\tuseEffect(() => {\n\t\tconst func = aggregationFnsLookup[selectedType];\n\t\tsetCalculatedValue(func(data, column));\n\t}, [selectedType, column, data]);\n\n\treturn (\n\t\t<>\n\t\t\t<Typography\n\t\t\t\tonClick={handleClick}\n\t\t\t\tsx={{ cursor: 'pointer', width:\"100%\", height:\"100%\" }}\n\t\t\t\ttype='s4'\n\t\t\t\tweight='normal'\n\t\t\t\tcolor={\n\t\t\t\t\tcalculatedValue ? 'theme.secondary.1000' : 'theme.secondary.500'\n\t\t\t\t}>\n\t\t\t\t{calculatedValue || '+ Add Calculation'}\n\t\t\t</Typography>\n\t\t\t<Menu\n\t\t\t\tid='basic-menu'\n\t\t\t\tanchorEl={anchorEl}\n\t\t\t\topen={open}\n\t\t\t\tonClose={handleClose}>\n\t\t\t\t{aggregations?.map((aggr) => (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tkey={aggr.value}\n\t\t\t\t\t\tselected={selectedType == aggr?.value}\n\t\t\t\t\t\tonClick={() => handleAggregationType(aggr?.value)}\n\t\t\t\t\t\t// disabled={\n\t\t\t\t\t\t// \t(!columnDef || columnDef?.type !== 'number') &&\n\t\t\t\t\t\t// \t(aggr.value === 'sum' || aggr.value === 'average')\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s4'>\n\t\t\t\t\t\t\t{aggr?.label}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t))}\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nexport default DefaultAggregation;\n","import { Box } from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport \"./value-field.scss\";\n\ninterface ValueFieldProps {\n label: string;\n children: React.ReactNode;\n childrenTypoProps?:any\n}\n\nconst ValueField = (props: ValueFieldProps) => {\n const { label, children, childrenTypoProps } = props;\n\n return (\n <Box className=\"valueField--Container\" >\n <Typography weight={\"medium\"} type=\"s5\" color={\"theme.secondary.700\"}>\n {label}\n </Typography>\n <Typography weight={\"medium\"} type=\"s3\" color={\"theme.secondary.1000\"} sx={{ wordBreak:'break-all', pr: 1 }} {...childrenTypoProps}>\n {children}\n </Typography>\n </Box>\n );\n};\n\nexport default ValueField;\n","\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n/* eslint-disable no-mixed-spaces-and-tabs */\nimport Typography from '../components/typography/typography';\nimport { Document } from '../components/icons';\nimport { MaterialTableColumnProps, TypeBooleanLabels } from '../components/material-table/material-table';\nimport { TFunction } from 'i18next';\nimport { formatDate } from './dateFormat';\nimport { MRT_Row, MRT_RowData } from 'material-react-table';\nimport { Link } from 'react-router-dom';\nimport DefaultAggregation from '../components/material-table/components/default-aggregation';\nimport Chip from '../components/chip/chip';\nimport _ from 'lodash';\nimport images from '../assets/images';\nimport { formatAmount } from \"./common\";\nimport { defaultCurrencyFormat } from './common';\n\nimport { defaultCurrencySymbol } from './common';\nimport ValueField from '../components/value-field/value-field';\nimport { formatLabel } from './format-text';\nimport { generateRouteWithId } from './route-utils';\nconst downloadFile = async (url, fileName) => {\n\ttry {\n\t\t\t// Fetch the file from the provided URL\n\t\t\tconst response = await fetch(url);\n\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`Failed to fetch file: ${response.statusText}`);\n\t\t\t}\n\n\t\t\t// Convert the response to a blob\n\t\t\tconst blob = await response.blob();\n\n\t\t\t// Create a temporary URL for the blob\n\t\t\tconst blobUrl = window.URL.createObjectURL(blob);\n\n\t\t\t// Create a link element\n\t\t\tconst link = document.createElement('a');\n\t\t\tlink.href = blobUrl;\n\t\t\tlink.download = fileName || 'downloaded-file'; // Fallback filename if none provided\n\n\t\t\t// Append link to the body, trigger click, and remove it\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\n\t\t\t// Revoke the blob URL to free up memory\n\t\t\twindow.URL.revokeObjectURL(blobUrl);\n\t} catch (error) {\n\t\t\tconsole.error('Error downloading file:', error);\n\t\t\tthrow error; // Re-throw to allow caller to handle the error\n\t}\n};\n\nexport const getFileNamesFromUrlsAsLink = (fileUrls: string | string[], mode?: string) => {\n\tconst fUrls = fileUrls\n\t\t? Array.isArray(fileUrls)\n\t\t\t? fileUrls\n\t\t\t: [fileUrls]\n\t\t: [];\n\n\tif (fUrls && fUrls.length) {\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdisplay='flex'\n\t\t\t\tgap={1}\n\t\t\t\tmb={1}\n\t\t\t\talignItems='center'\n\t\t\t\tflexDirection='column'>\n\t\t\t\t{fUrls.map((url) => {\n\t\t\t\t\tconst fileName = url.substring(url.lastIndexOf('/') + 1);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='#246DFF'\n\t\t\t\t\t\t\tsx={{ textDecoration: 'underline', textUnderlineOffset: '3px', cursor:'pointer' }}\n\t\t\t\t\t\t\tnoWrap \n\t\t\t\t\t\t\tonClick={() => mode === 'add' ? undefined : downloadFile(url, fileName)}>\n\t\t\t\t\t\t\t{fileName}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn null;\n};\n\nexport const getFileNamesFromUrls = (fileUrls: string[]) => {\n\tif (!fileUrls) return null;\n\n\tif (!fileUrls?.filter(Boolean)?.length) return null;\n\n\treturn fileUrls?.filter(Boolean)?.map((url) => {\n\t\tconst fileName = url?.substring(url?.lastIndexOf('/') + 1) || '';\n\t\treturn (\n\t\t\t<Box display='flex' gap={1} mb={1} alignItems='center'>\n\t\t\t\t<Document fontSize='small' />\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tweight='medium'\n\t\t\t\t\tcolor={'theme.secondary.1000'}\n\t\t\t\t\tsx={{cursor: 'pointer'}}\n\t\t\t\t\tnoWrap onClick={() => downloadFile(url, fileName)}>\n\t\t\t\t\t{fileName}\n\t\t\t\t</Typography>\n\t\t\t</Box>\n\t\t);\n\t});\n};\n\nexport type CurrencySymbolFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type StatusClassesFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type RedirectionLinkFn = (row: MRT_Row<MRT_RowData>) => string;\n\nexport interface ITransformTableColumns {\n\tcolumns: MaterialTableColumnProps[];\n\tcurrencySymbol?: string | CurrencySymbolFn;\n\ttranslationFn?: TFunction<'translation', undefined>;\n\tenableFooter?: boolean;\n\tredirectionLink?: string | RedirectionLinkFn;\n\tredirectionLinkState?: (row: MRT_Row<MRT_RowData>) => void;\n\tredirectionPathWithId?: string;\n\tidField?: string;\n\tcustomizeValue?: (row: MRT_Row<MRT_RowData>, columnAccessorKey?: string, value?: any) => any;\n\tstatusClasses?: string | StatusClassesFn;\n\trows: any[];\n\tcurrencyFormat?: boolean\n}\n\nconst jsonArrayToString = (json: any) => {\n\tif (!json) return '';\n\n\ttry {\n\t\treturn JSON.parse(json)?.join(', ');\n\t} catch (error) {\n\t\treturn '';\n\t}\n};\nconst getStatusClass = (status: any) => {\n\tif (typeof status === 'string') {\n\t\treturn status?.toLowerCase()?.replace(' ', '');\n\t} else if (typeof status === 'number') {\n\t\treturn status ? 'enabled' : 'disabled';\n\t}\n};\n\nexport const transformTableColumns = ({\n\tcolumns = [],\n\tcurrencySymbol,\n\ttranslationFn = undefined,\n\tenableFooter = false,\n\tredirectionLink = '',\n\tredirectionLinkState = undefined,\n\tredirectionPathWithId = '',\n\tidField = 'id',\n\tstatusClasses = '',\n\trows = [],\n\tcustomizeValue = undefined,\n\tcurrencyFormat\n}: ITransformTableColumns) => {\n\tconst currencyFormatData = currencyFormat ? currencyFormat : defaultCurrencyFormat()\n\n\treturn columns.map((column) => ({\n\t\t...column,\n\t\theader: translationFn ? translationFn(column.header) : column.header,\n\t\tCell: ({ renderedCellValue, row }: any) => {\n\t\t\tlet v = renderedCellValue;\n\t\t\tconst columnType = column.type || (column.header === \"Amount\" || column.header === \"Rate\" ? \"currency\" : undefined);\n\t\t\tswitch (columnType) {\n\t\t\t\tcase 'formattedString':\n\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tv = formatDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tv = formatDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY hh:mm A'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\tcase 'amount':{\n\t\t\t\t\tconst cs =column?.showDefaultCurrency? defaultCurrencySymbol(): currencySymbol instanceof Function ? currencySymbol(row) : (currencySymbol || defaultCurrencySymbol());\n\t\t\t\t\tv = renderedCellValue || renderedCellValue == 0\n\t\t\t\t\t\t? `${formatAmount(renderedCellValue,currencyFormatData,'before',cs)||'-'}`\n\t\t\t\t\t\t: null;\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\tcase 'status':\n\t\t\t\tcase 'enum':\n\t\t\t\tcase 'array':\n\t\t\t\t\t{\n\t\t\t\t\t\tv = renderedCellValue || renderedCellValue === 0 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{Array.isArray(renderedCellValue) ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{renderedCellValue?.length ? <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n\t\t\t\t\t\t\t\t\t{renderedCellValue.map((rcv) => (\n\t\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\t\tclassName={column.custom_class?column?.custom_class:(typeof rcv === 'string' ? rcv : '')}\n\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof rcv === 'object' ? _.get(rcv, column?.typeArrayAccessorKey||'', '') : rcv}\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t}\n\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\t</Box> : '-'}\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\t<Chip\n\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcolumn.custom_class?column?.custom_class:\n\t\t\t\t\t\t\t\t\t\t(statusClasses instanceof Function\n\t\t\t\t\t\t\t\t\t\t\t? statusClasses(row)\n\t\t\t\t\t\t\t\t\t\t\t: `${statusClasses}${getStatusClass(renderedCellValue)}`)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue}\n\t\t\t\t\t\t\t\t\t\t</Typography>\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</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'-'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tv = (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t// active={Boolean(renderedCellValue)}\n\t\t\t\t\t\t\t// inActive={Boolean(!renderedCellValue)}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\t\t...(renderedCellValue ? \n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary4[200],\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary4[900]\n\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\t\t\tbackgroundColor: theme.palette?.theme.tertiary6[200],\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary6[900]\n\t\t\t\t\t\t\t\t\t\t\t}\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\t)}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t{column?.typeBooleanLabels?.[renderedCellValue as keyof TypeBooleanLabels] || '-'}\n\t\t\t\t\t\t\t\t</Typography>\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\t\tbreak;\n\t\t\t\tcase 'jsonArray':\n\t\t\t\t\tv = jsonArrayToString(renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\tcase 'custom_link':\n\t\t\t\t\tv = customizeValue?.(row, column.accessorKey, renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// If redirectionPathWithId is provided, use it for URL parameter-based navigation\n\t\t\tif (redirectionPathWithId && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField||'id'];\n\t\t\t\tif (id) {\n\t\t\t\t\tconst path = redirectionPathWithId instanceof Function ? generateRouteWithId(redirectionPathWithId(row),id?.toString()) : generateRouteWithId(redirectionPathWithId,id?.toString());\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Link to={path}>\n\t\t\t\t\t\t\t{v}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fall back to the existing redirection logic\n\t\t\telse if (redirectionLink && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField||'id'];\n\t\t\t\tconst path = redirectionLink instanceof Function ? generateRouteWithId(redirectionLink(row),id?.toString()) : generateRouteWithId(redirectionLink,id?.toString());\n\t\t\t\treturn (\n\t\t\t\t\t<Link to={path} \n\t\t\t\t\t\tstate={redirectionLinkState?.(row)}>\n\t\t\t\t\t\t{v}\n\t\t\t\t\t</Link>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn v;\n\t\t},\n\t\t...(Boolean(enableFooter) && {\n\t\t\tFooter: ({ column }) => (\n\t\t\t\t<DefaultAggregation data={rows} column={String(column.id)} />\n\t\t\t)\n\t\t})\n\t}));\n};\n\nexport const renderEmptyRowsFallback = (text:string) => (\n\t<Box className='no-data'>\n\t\t<img src={images.common.tableNoData} />\n\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t{text}\n\t\t</Typography>\n\t</Box>\n)\n\n/* eslint-disable no-mixed-spaces-and-tabs */\nexport const renderValueField = (label: string, value: any, t: any, formatFn?: (val: any) => string) => {\n\treturn (\n\t <ValueField key={label} label={t?.(label)}>\n\t\t{formatFn ? formatFn(value) : value ?? '-'}\n\t </ValueField>\n\t);\n };\n","import dayjs from 'dayjs';\r\n\r\n/**\r\n * Date range constants\r\n */\r\nexport const RANGE = {\r\n TODAY: 'Today',\r\n YESTERDAY: 'Yesterday',\r\n THIS_WEEK: 'This Week',\r\n PREVIOUS_WEEK: 'Previous Week',\r\n THIS_MONTH: 'This Month',\r\n PREVIOUS_MONTH: 'Previous Month',\r\n THIS_QUARTER: 'This Quarter',\r\n PREVIOUS_QUARTER: 'Previous Quarter',\r\n THIS_YEAR: 'This Year',\r\n PREVIOUS_YEAR: 'Previous Year',\r\n CUSTOM: 'Custom',\r\n} as const;\r\n\r\nexport type DateRangeType = keyof typeof RANGE;\r\n\r\nexport interface HandleCompareDateRangeParams {\r\n range: string;\r\n from?: string;\r\n to?: string;\r\n}\r\n\r\nexport interface DateRangeResult {\r\n from: string;\r\n to: string;\r\n}\r\n\r\n/**\r\n * Calculate date range based on the range type\r\n */\r\nexport const handleCompareDateRange = async (\r\n params: HandleCompareDateRangeParams\r\n): Promise<DateRangeResult> => {\r\n const { range, from = '', to = '' } = params;\r\n const today = dayjs();\r\n let startDate: dayjs.Dayjs;\r\n let endDate: dayjs.Dayjs;\r\n\r\n switch (range) {\r\n case RANGE.TODAY:\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n break;\r\n\r\n case RANGE.YESTERDAY:\r\n startDate = today.subtract(1, 'day').startOf('day');\r\n endDate = today.subtract(1, 'day').endOf('day');\r\n break;\r\n\r\n case RANGE.THIS_WEEK:\r\n startDate = today.startOf('week');\r\n endDate = today.endOf('week');\r\n break;\r\n\r\n case RANGE.PREVIOUS_WEEK:\r\n startDate = today.subtract(1, 'week').startOf('week');\r\n endDate = today.subtract(1, 'week').endOf('week');\r\n break;\r\n\r\n case RANGE.THIS_MONTH:\r\n startDate = today.startOf('month');\r\n endDate = today.endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_MONTH:\r\n startDate = today.subtract(1, 'month').startOf('month');\r\n endDate = today.subtract(1, 'month').endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_QUARTER:\r\n const currentQuarter = Math.floor(today.month() / 3);\r\n startDate = today.month(currentQuarter * 3).startOf('month');\r\n endDate = today.month(currentQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_QUARTER:\r\n const prevQuarter = Math.floor(today.month() / 3) - 1;\r\n startDate = today.month(prevQuarter * 3).startOf('month');\r\n endDate = today.month(prevQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_YEAR:\r\n startDate = today.startOf('year');\r\n endDate = today.endOf('year');\r\n break;\r\n\r\n case RANGE.PREVIOUS_YEAR:\r\n startDate = today.subtract(1, 'year').startOf('year');\r\n endDate = today.subtract(1, 'year').endOf('year');\r\n break;\r\n\r\n case RANGE.CUSTOM:\r\n // For custom range, use the provided from/to dates or today\r\n startDate = from ? dayjs(from) : today.startOf('day');\r\n endDate = to ? dayjs(to) : today.endOf('day');\r\n break;\r\n\r\n default:\r\n // Default to today if range is not recognized\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n }\r\n\r\n return {\r\n from: startDate.format('YYYY-MM-DD'),\r\n to: endDate.format('YYYY-MM-DD'),\r\n };\r\n};\r\n\r\n// Synchronous version (for compatibility)\r\nexport const handleCompareDateRangeSync = (\r\n params: HandleCompareDateRangeParams\r\n): DateRangeResult => {\r\n const { range, from = '', to = '' } = params;\r\n const today = dayjs();\r\n let startDate: dayjs.Dayjs;\r\n let endDate: dayjs.Dayjs;\r\n\r\n switch (range) {\r\n case RANGE.TODAY:\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n break;\r\n\r\n case RANGE.YESTERDAY:\r\n startDate = today.subtract(1, 'day').startOf('day');\r\n endDate = today.subtract(1, 'day').endOf('day');\r\n break;\r\n\r\n case RANGE.THIS_WEEK:\r\n startDate = today.startOf('week');\r\n endDate = today.endOf('week');\r\n break;\r\n\r\n case RANGE.PREVIOUS_WEEK:\r\n startDate = today.subtract(1, 'week').startOf('week');\r\n endDate = today.subtract(1, 'week').endOf('week');\r\n break;\r\n\r\n case RANGE.THIS_MONTH:\r\n startDate = today.startOf('month');\r\n endDate = today.endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_MONTH:\r\n startDate = today.subtract(1, 'month').startOf('month');\r\n endDate = today.subtract(1, 'month').endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_QUARTER:\r\n const currentQuarter = Math.floor(today.month() / 3);\r\n startDate = today.month(currentQuarter * 3).startOf('month');\r\n endDate = today.month(currentQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.PREVIOUS_QUARTER:\r\n const prevQuarter = Math.floor(today.month() / 3) - 1;\r\n startDate = today.month(prevQuarter * 3).startOf('month');\r\n endDate = today.month(prevQuarter * 3 + 2).endOf('month');\r\n break;\r\n\r\n case RANGE.THIS_YEAR:\r\n startDate = today.startOf('year');\r\n endDate = today.endOf('year');\r\n break;\r\n\r\n case RANGE.PREVIOUS_YEAR:\r\n startDate = today.subtract(1, 'year').startOf('year');\r\n endDate = today.subtract(1, 'year').endOf('year');\r\n break;\r\n\r\n case RANGE.CUSTOM:\r\n // For custom range, use the provided from/to dates or today\r\n startDate = from ? dayjs(from) : today.startOf('day');\r\n endDate = to ? dayjs(to) : today.endOf('day');\r\n break;\r\n\r\n default:\r\n // Default to today if range is not recognized\r\n startDate = today.startOf('day');\r\n endDate = today.endOf('day');\r\n }\r\n\r\n return {\r\n from: startDate.format('YYYY-MM-DD'),\r\n to: endDate.format('YYYY-MM-DD'),\r\n };\r\n};\r\n\r\n","export type ItemType = {\n section_name: any;\n is_system_field: boolean;\n field_type: string;\n label: string;\n name?: string;\n placeholder: string;\n default_value: any;\n validation: any[];\n is_multiline: any;\n section_order: any;\n option?: any;\n time_format?: string;\n currency?: string;\n field_properties: {\n is_accordion?: boolean;\n float_step?: any;\n options: any;\n is_multiselect: any;\n title: string;\n title_position: \"start\" | \"end\";\n is_multiline: boolean\n is_checked: boolean\n table: string,\n table_columns: string[]\n table_rows?: any\n is_multiple: boolean\n enable_footer?: boolean\n footer_action?: 'add'\n other_buttons?:React.ReactNode[]\n };\n is_section_field?: true;\n section_type?: \"default\" | \"Form switcher section\";\n form_switcher_label?: string;\n form_switcher_name?: string;\n switcher_forms?: {\n value?: string;\n name?: string;\n id?: number;\n }[];\n is_accordion?: boolean;\n}\n\nconst getFirstNonSectionField = (formData: any[]) => {\n const firstField = formData?.find((field) => !field.is_section_field)\n return firstField\n}\n\nconst formBuilderDeConversion = (formData: any) => {\n const outputData: any = {};\n if (formData.length === 0) {\n return outputData;\n }\n\n const firstItem = getFirstNonSectionField(formData);\n\n if (firstItem?.tab_name) {\n outputData.tab = <any>[];\n let currentTab: {\n title: string;\n data: any;\n remove_tab?: any;\n tab_order?: any;\n } | null = null;\n let currentSection: {\n label: string;\n members: any;\n remove_section: any;\n field_type?: string;\n is_accordion?: boolean;\n } | null = null;\n let otherSectionDetails: any = {}\n let sectionOrder: any = null\n\n formData.forEach((item: any) => {\n if (item?.is_section_field) {\n otherSectionDetails = {\n field_type: item?.field_type,\n label: item?.label,\n is_accordion: item?.is_accordion,\n is_section_field: item?.is_section_field,\n section_type: item?.section_type,\n form_switcher_label: item?.form_switcher_label,\n form_switcher_name: item?.form_switcher_name,\n switcher_forms: item?.switcher_forms,\n disabled: Boolean(item?.disabled)\n }\n currentSection = null\n sectionOrder = sectionOrder++\n } else {\n if (!currentTab || currentTab.title !== item.tab_name) {\n\n currentTab = {\n tab_order: item.tab_order || 1,\n title: item.tab_name,\n data: [],\n };\n const checkIfTabExist = outputData.tab.find(tab => tab.title === currentTab?.title)\n\n if (!checkIfTabExist) {\n outputData.tab.push(currentTab);\n } else {\n currentTab = checkIfTabExist\n }\n currentSection = null;\n }\n\n if (!currentSection || currentSection.label !== item.section_name || sectionOrder !== item.section_order) {\n currentSection = {\n field_type: \"section\",\n label: item.section_name || \"\",\n is_accordion: item.field_properties?.is_accordion,\n members: [],\n remove_section: item.is_system_field === true ? true : false,\n };\n\n const checkIfSectionExist = currentTab.data.find(section => section.label === currentSection?.label)\n if (!checkIfSectionExist) {\n currentTab.data.push({ ...otherSectionDetails, ...currentSection });\n } else {\n currentSection = checkIfSectionExist\n }\n otherSectionDetails = null\n }\n sectionOrder = item.section_order\n\n const thenValidations = item?.validation?.find((v: { type: string }) => v.type === \"when\")?.thenValidations || []\n\n const member = {\n ...item,\n id: `${Date.now()}-${Math.random()}`,\n field_type:\n item.field_type === \"media\" ? \"file\" : item.field_type || \"text\",\n type: item.is_system_field ? \"system\" : \"custom\",\n label: item.label || \"\",\n placeholder: item.placeholder || \"\",\n default_value: item.default_value || \"\",\n ...(item?.time_format &&\n item?.field_type === \"time\" && { option: item?.time_format }),\n ...(item?.currency &&\n item?.field_type === \"currency\" && { option: item?.currency }),\n ...(item.field_type === \"text\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"text\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n min_length:\n item.validation.find((v: { type: string }) => v.type === \"min_val\")\n ?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n max_length:\n item.validation.find((v: { type: string }) => v.type === \"max_val\")\n ?.value || null,\n }),\n ...((item.is_multiline !== undefined || item.field_properties.is_multiline !== undefined) && {\n is_multiline: item.is_multiline || item.field_properties.is_multiline,\n }),\n is_required:\n item.validation.find((v: { type: string }) => v.type === \"required\")?.value ||\n thenValidations?.find((v: { type: string }) => v.type === \"required\")?.value ||\n false,\n is_unique:\n item.validation.find((v: { type: string }) => v.type === \"unique\")\n ?.value || false,\n section_order: item.section_order || 0,\n ...(item.field_properties.float_step && {\n float_step: item.field_properties.float_step.toString(),\n }),\n ...(item.field_properties.options && {\n options: item.field_properties.options,\n }),\n ...(item.field_properties.is_multiselect !== undefined && {\n is_multiselect: item.field_properties.is_multiselect,\n }),\n ...(item.field_properties?.enable_footer !== undefined && {\n enable_footer: Boolean(item.field_properties.enable_footer),\n }),\n ...(item.field_properties?.footer_action !== undefined && {\n footer_action: item.field_properties.footer_action || 'add',\n }),\n ...(item.field_type === \"date\" && {\n is_future_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_future_dates_allowed\",\n )?.value || null,\n }),\n ...(item.field_type === \"date\" && {\n is_past_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_past_dates_allowed\",\n )?.value || null,\n }),\n ...((item.field_type === \"image\" || item.field_type === \"media\" || item.field_type === \"file\") && {\n max_size:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_file_size\",\n )?.value || undefined,\n is_multiple: item.field_properties?.is_multiple\n }),\n ...((item.field_type === \"toggleButton\" || item.field_type === \"checkbox\" || item.field_type === \"radioButton\") && {\n title: item.field_properties?.title ? item.field_properties?.title : '',\n title_position: item.field_properties?.title_position ?? \"end\",\n is_checked: item.field_properties?.is_checked\n }),\n ...((item.field_type === \"table\") && {\n table: item.field_properties?.table,\n table_columns: convertTableColumns(item.field_properties?.table_columns),\n table_rows: item.field_properties?.table_rows,\n otherButtons: item.field_properties?.other_buttons || []\n }),\n };\n if (currentSection) {\n currentSection.members.push(member);\n if (\n currentSection.members.some((member: any) => member.type === \"system\")\n ) {\n currentSection.remove_section = true;\n } else {\n currentSection.remove_section = false;\n }\n currentTab.remove_tab = currentTab.data.some(\n (section: { members: any[] }) =>\n section.members.some(\n (member: { type: string }) => member.type === \"system\",\n ),\n );\n }\n }\n });\n } else {\n // Convert to sections format\n outputData.section = [];\n let currentSection: {\n label: any;\n members: any;\n remove_section: any;\n field_type?: string;\n is_accordion?: boolean;\n } | null = null;\n let otherSectionDetails: any = {}\n let sectionOrder: any = null\n\n formData.forEach(\n (item: ItemType) => {\n if (item.is_section_field) {\n otherSectionDetails = {\n field_type: item?.field_type,\n label: item?.label,\n is_accordion: item?.is_accordion,\n is_section_field: item?.is_section_field,\n section_type: item?.section_type,\n form_switcher_label: item?.form_switcher_label,\n form_switcher_name: item?.form_switcher_name,\n switcher_forms: item?.switcher_forms,\n disabled: Boolean(item?.disabled)\n }\n sectionOrder = sectionOrder++\n currentSection = null\n } else {\n if (!currentSection || currentSection.label !== item.section_name || sectionOrder !== item.section_order) {\n currentSection = {\n field_type: \"section\",\n label: item.section_name || \"\",\n is_accordion: item.field_properties?.is_accordion,\n members: [],\n remove_section: item.is_system_field === true ? true : false,\n };\n\n const checkIfSectionExist = outputData?.section?.find(section => section.label === currentSection?.label)\n if (!checkIfSectionExist) {\n outputData.section.push({ ...otherSectionDetails, ...currentSection });\n } else {\n currentSection = checkIfSectionExist\n }\n\n // outputData.section.push({ ...otherSectionDetails, ...currentSection });\n\n otherSectionDetails = null\n }\n sectionOrder = item.section_order\n\n const thenValidations = item?.validation?.find((v: { type: string }) => v.type === \"when\")?.thenValidations || []\n\n const member = {\n ...item,\n id: `${Date.now()}-${Math.random()}`,\n field_type:\n item.field_type === \"media\" ? \"file\" : item.field_type || \"text\",\n type: item.is_system_field ? \"system\" : \"custom\",\n label: item.label,\n placeholder: item.placeholder || \"\",\n default_value: item.default_value || \"\",\n ...(item?.time_format &&\n item?.field_type === \"time\" && { option: item?.time_format }),\n ...(item?.currency &&\n item?.field_type === \"currency\" && { option: item?.currency }),\n ...(item.field_type === \"text\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"text\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_length\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n min_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"min_val\",\n )?.value || null,\n }),\n ...(item.field_type === \"number\" && {\n max_length:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_val\",\n )?.value || null,\n }),\n ...((item.is_multiline !== undefined || item.field_properties?.is_multiline !== undefined) && {\n is_multiline: item.is_multiline || item.field_properties.is_multiline,\n }),\n is_required:\n item.validation.find((v: { type: string }) => v.type === \"required\")?.value ||\n thenValidations?.find((v: { type: string }) => v.type === \"required\")?.value ||\n false,\n is_unique:\n item.validation.find((v: { type: string }) => v.type === \"unique\")\n ?.value || false,\n section_order: item.section_order || 0,\n ...(item.field_properties?.float_step && {\n float_step: Number(item.field_properties.float_step),\n }),\n ...(item.field_properties?.options && {\n options: item.field_properties.options,\n }),\n ...(item.field_properties?.is_multiselect !== undefined && {\n is_multiselect: item.field_properties.is_multiselect,\n }),\n ...(item.field_properties?.enable_footer !== undefined && {\n enable_footer: Boolean(item.field_properties.enable_footer),\n }),\n ...(item.field_properties?.footer_action !== undefined && {\n footer_action: item.field_properties.footer_action || 'add',\n }),\n ...(item.field_type === \"date\" && {\n is_future_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_future_dates_allowed\",\n )?.value || null,\n }),\n ...(item.field_type === \"date\" && {\n is_past_dates_allowed:\n item.validation.find(\n (v: { type: string }) => v.type === \"is_past_dates_allowed\",\n )?.value || null,\n }),\n ...((item.field_type === \"image\" || item.field_type === \"media\" || item.field_type === \"file\") && {\n max_size:\n item.validation.find(\n (v: { type: string }) => v.type === \"max_file_size\",\n )?.value || undefined,\n is_multiple: item.field_properties?.is_multiple\n }),\n ...((item.field_type === \"toggleButton\" || item.field_type === \"checkbox\") && {\n title: item.field_properties?.title ? item.field_properties?.title : item.label,\n title_position: item.field_properties?.title_position ?? \"end\",\n is_checked: item.field_properties?.is_checked\n }),\n ...((item.field_type === \"table\") && {\n table: item.field_properties?.table,\n table_columns: convertTableColumns(item.field_properties?.table_columns),\n table_rows: item.field_properties?.table_rows,\n otherButtons: item.field_properties?.other_buttons || []\n }),\n };\n\n currentSection.members.push(member);\n if (\n currentSection.members.some((member: any) => member.type === \"system\")\n ) {\n currentSection.remove_section = true;\n } else {\n currentSection.remove_section = false;\n }\n }\n }\n );\n }\n\n return outputData;\n};\n\n\n\nfunction formatText(key: string): string {\n return key ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \") : key;\n}\n\nexport const convertTableColumns = (columns: string[]) => {\n if (!Array.isArray(columns)) return [];\n\n return columns.map(column => {\n if (typeof column === 'object') {\n return { ...column }\n } else {\n const colArr = column.split(\".\").filter(str => str)\n const header = colArr.length ? (colArr.length > 1 ? formatText(colArr[colArr.length - 1]) : formatText(colArr[0])) : \"-\"\n\n return {\n header,\n accessorKey: column,\n visible: true,\n }\n }\n })\n}\n\nexport default formBuilderDeConversion;\n","export const calculateEntries = (\n\titems: any[],\n\texpenses?: any[],\n\tadditionalDiscountOn?: string,\n\tadditionalDiscountPercentage?: number,\n\tprovidedAdditionalDiscountAmount?: number,\n\troundOff?: boolean,\n\troundOffAmount?: number,\n promotionAmount?: number\n) => {\n\tlet totalQuantity = 0,\n\t\ttotalDiscount = 0,\n\t\ttotalTaxAmount = 0,\n\t\ttotalAmountExcludingAll = 0,\n\t\ttotalAmountIncludingAll = 0,\n\t\tadditionalDiscountAmount = 0,\n\t\ttotalGrossAmount = 0;\n\n\tif (items.length) {\n\t\titems.forEach((item) => {\n\t\t\ttotalQuantity += Number(item?.quantity || 0);\n\t\t\ttotalDiscount += Number(item?.discount_amount || 0);\n\t\t\ttotalAmountIncludingAll += Number(\n\t\t\t\titem.total_amount || 0\n\t\t\t);\n\t\t\ttotalTaxAmount += Number(item.tax_amount);\n\t\t\ttotalAmountExcludingAll +=\n\t\t\t\tNumber(item.quantity || 0) *\n\t\t\t\tNumber(item.rate || 0);\n\t\t\ttotalGrossAmount += Number(item.gross_amount || 0);\n\t\t});\n\t}\n\tif (expenses?.length) {\n\t\texpenses.forEach((item) => {\n\t\t\ttotalQuantity += 1;\n\t\t\ttotalDiscount += Number(item.discount_amount || 0);\n\t\t\ttotalAmountIncludingAll += Number(\n\t\t\t\titem.total_amount || 0\n\t\t\t);\n\t\t\ttotalTaxAmount += Number(item.tax_amount);\n\t\t\ttotalAmountExcludingAll += 1 * Number(item.rate);\n\t\t\ttotalGrossAmount += Number(item.gross_amount || 0);\n\t\t});\n\t}\n\n\tlet finalAmount = totalAmountIncludingAll;\n\n\tif (additionalDiscountOn) {\n\t\tif (additionalDiscountOn === 'Net Amount') {\n\t\t\tif (\n\t\t\t\tadditionalDiscountPercentage &&\n\t\t\t\tNumber(additionalDiscountPercentage) !== 0\n\t\t\t) {\n\t\t\t\tadditionalDiscountAmount =\n\t\t\t\t\ttotalAmountIncludingAll * (additionalDiscountPercentage / 100);\n\t\t\t} else {\n\t\t\t\tadditionalDiscountAmount = providedAdditionalDiscountAmount || 0;\n\t\t\t}\n\t\t} else if (additionalDiscountOn === 'Gross Amount') {\n\t\t\tif (\n\t\t\t\tadditionalDiscountPercentage &&\n\t\t\t\tNumber(additionalDiscountPercentage) !== 0\n\t\t\t) {\n\t\t\t\tadditionalDiscountAmount =\n\t\t\t\t\ttotalGrossAmount * (additionalDiscountPercentage / 100);\n\t\t\t} else {\n\t\t\t\tadditionalDiscountAmount = providedAdditionalDiscountAmount || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tfinalAmount =\n\t\tadditionalDiscountOn === 'Gross Amount'\n\t\t\t? Number(totalAmountIncludingAll) - Number(additionalDiscountAmount)\n\t\t\t: Number(totalAmountIncludingAll) - Number(additionalDiscountAmount);\n \n if(Number(promotionAmount)) {\n finalAmount = finalAmount - Number(promotionAmount)\n }\n\n\tconst actualTotalAmount = finalAmount;\n\tif (roundOff && roundOffAmount && Number(roundOffAmount)) {\n\t\tfinalAmount = Math.round(finalAmount / roundOffAmount) * roundOffAmount;\n\t}\n\tconst roundOffDifference = Number(finalAmount) - Number(actualTotalAmount);\n\tconst totalItemsExpenseDiscount = totalDiscount;\n\ttotalDiscount += Number(additionalDiscountAmount);\n\treturn {\n\t\ttotalQuantity,\n\t\ttotalDiscount,\n\t\ttotalItemsExpenseDiscount,\n\t\ttotalTaxAmount,\n\t\ttotalAmountExludingAll: totalAmountExcludingAll,\n\t\ttotalAmountIncludingAll,\n\t\tadditinoalDiscountAmount: additionalDiscountAmount,\n\t\ttotalGrossAmount,\n\t\tactualTotalAmount,\n\t\troundOffDifference,\n\t\tfinalAmount\n\t};\n};","import { NavigateFunction } from 'react-router-dom';\n\n/**\n * Navigates to a route with an ID parameter, replacing the :id placeholder in the route path\n * This is a more RESTful approach than using location state\n * \n * @param navigate - The navigate function from useNavigate hook\n * @param routePath - The route path with :id placeholder\n * @param id - The ID to replace the placeholder with\n * @param fallbackState - Optional state to pass to the navigate function as fallback\n */\nexport const navigateWithId = (\n navigate: NavigateFunction,\n routePath: string,\n id: string | number,\n fallbackState?: any\n) => {\n // Replace :id in the route path with the actual ID\n const path = routePath.replace(':id', id.toString());\n \n // Navigate to the path, optionally with state as fallback for backward compatibility\n navigate(path, fallbackState ? { state: fallbackState } : undefined);\n};\n\n/**\n * Extracts the ID from the URL parameters and returns it\n * If the ID is not found in the URL, falls back to using location.state\n * \n * @param params - The params object from useParams hook\n * @param location - The location object from useLocation hook\n * @param idField - The field name in the location.state object that contains the ID (default: 'id')\n * @returns The ID from params or location.state\n */\nexport const getEntityId = (\n params: Record<string, string | undefined>,\n location: { state: any },\n idField: string = 'id'\n): string | undefined => {\n // First try to get the ID from URL params\n if (params.id) {\n return params.id;\n }\n \n // Fall back to location.state if params.id is not available\n if (location.state && location.state[idField]) {\n return location.state[idField].toString();\n }\n \n return undefined;\n}; "],"names":["Document","Styled","createSvgIcon","jsxs","width","height","viewBox","fill","xmlns","children","jsx","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","StyledChip","styled","MUIChip","theme","palette","active","type","inActive","cursor","fontSize","color","_a","secondary","borderRadius","backgroundColor","_b","_c","primary","_d","_e","_f","borderColor","_g","_h","_i","error","_j","_k","_l","_m","_n","marginRight","marginLeft","padding","Chip","props","label","variant","rest","StyledMenu","MUIMenu","minWidth","Menu","anchorEl","onClose","open","Fragment","id","MenuListProps","extractNumber","inputString","match","aggregationFns","none","sum","data","column","reduce","acc","row","Number","isNaN","_","round","average","count","length","countEmpty","filter","value","get","Boolean","size","countFull","percentageEmpty","percentage","percentageFull","aggregations","aggregationFnsLookup","count_empty","count_full","percentage_empty","percentage_full","DefaultAggregation","selectedType","setSelectedType","React","useState","setAnchorEl","calculatedValue","setCalculatedValue","handleClose","useEffect","func","Typography","onClick","event","currentTarget","sx","weight","map","aggr","MenuItem","selected","handleAggregationType","val","ValueField","childrenTypoProps","Box","className","wordBreak","pr","downloadFile","async","url","fileName","response","fetch","ok","Error","statusText","blob","blobUrl","window","URL","createObjectURL","link","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","getStatusClass","status","toLowerCase","replace","RANGE","TODAY","YESTERDAY","THIS_WEEK","PREVIOUS_WEEK","THIS_MONTH","PREVIOUS_MONTH","THIS_QUARTER","PREVIOUS_QUARTER","THIS_YEAR","PREVIOUS_YEAR","CUSTOM","formatText","key","split","word","charAt","toUpperCase","slice","join","convertTableColumns","columns","Array","isArray","colArr","str","header","accessorKey","visible","items","expenses","additionalDiscountOn","additionalDiscountPercentage","providedAdditionalDiscountAmount","roundOff","roundOffAmount","promotionAmount","totalQuantity","totalDiscount","totalTaxAmount","totalAmountExcludingAll","totalAmountIncludingAll","additionalDiscountAmount","totalGrossAmount","forEach","item","quantity","discount_amount","total_amount","tax_amount","rate","gross_amount","finalAmount","actualTotalAmount","Math","roundOffDifference","totalItemsExpenseDiscount","totalAmountExludingAll","additinoalDiscountAmount","formData","outputData","firstItem","find","field","is_section_field","getFirstNonSectionField","tab_name","tab","currentTab","currentSection","otherSectionDetails","sectionOrder","field_type","is_accordion","section_type","form_switcher_label","form_switcher_name","switcher_forms","disabled","title","tab_order","checkIfTabExist","push","section_name","section_order","field_properties","members","remove_section","is_system_field","checkIfSectionExist","section","thenValidations","validation","v","member","Date","now","random","placeholder","default_value","time_format","option","currency","min_length","max_length","is_multiline","is_required","is_unique","float_step","toString","options","is_multiselect","enable_footer","footer_action","is_future_dates_allowed","is_past_dates_allowed","max_size","_o","is_multiple","_p","_q","_r","title_position","_s","is_checked","_t","table","_u","table_columns","_v","table_rows","_w","otherButtons","_x","other_buttons","some","remove_tab","_y","_z","_A","_B","_C","params","location","idField","state","fileUrls","substring","lastIndexOf","display","gap","mb","alignItems","noWrap","mode","fUrls","flexDirection","textDecoration","textUnderlineOffset","range","from","to","today","dayjs","startDate","endDate","startOf","endOf","subtract","currentQuarter","floor","month","prevQuarter","format","navigate","routePath","fallbackState","text","src","images","common","tableNoData","t","formatFn","currencySymbol","translationFn","enableFooter","redirectionLink","redirectionLinkState","redirectionPathWithId","statusClasses","rows","customizeValue","currencyFormat","currencyFormatData","defaultCurrencyFormat","Cell","renderedCellValue","formatLabel","formatDate","editProperties","dateFormat","cs","showDefaultCurrency","defaultCurrencySymbol","Function","formatAmount","flexWrap","rcv","custom_class","typeArrayAccessorKey","tertiary4","tertiary6","typeBooleanLabels","json","JSON","parse","jsonArrayToString","original","path","generateRouteWithId","Link","Footer","String"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations-A_1jDwOn.esm.js","sources":["../src/utils/country.ts","../src/utils/dateValidation.tsx","../src/utils/migration-utils.ts","../src/utils/translations.ts"],"sourcesContent":["export const getCountry = (code: string) => {\n const regionNames = new Intl.DisplayNames([\"en\"], { type: \"region\" });\n return regionNames.of(code);\n};\n","//eslint-disable @typescript-eslint/no-explicit-any\nimport * as Yup from 'yup';\nimport dayjs from 'dayjs';\n\n// Types for configuration\ninterface DateValidationOptions {\n allowPast?: boolean;\n allowToday?: boolean;\n allowFuture?: boolean;\n requiredMessage?: string;\n pastDateMessage?: string;\n futureDateMessage?: string;\n todayNotAllowedMessage?: string;\n invalidDateMessage?: string;\n checkTime?: boolean;\n pastTimeMessage?: string;\n}\n\n// Default messages\nconst DEFAULT_MESSAGES = {\n required: 'Date is required',\n invalidDate: 'Date must be a valid date',\n pastDate: 'Date cannot be in the past',\n futureDate: 'Future dates are not allowed',\n todayNotAllowed: \"Today's date is not allowed\",\n pastTime: 'Time cannot be in the past for today\\'s date'\n};\n\n/**\n * Core date transformation function\n * Handles dayjs objects, Date objects, and string dates\n */\nconst transformDate = (value: any, originalValue: any) => {\n if (dayjs.isDayjs(originalValue)) {\n return originalValue.toDate();\n }\n if (originalValue instanceof Date) {\n return originalValue;\n }\n if (typeof originalValue === 'string' && originalValue) {\n return dayjs(originalValue).toDate();\n }\n return null;\n};\n\n/**\n * Global date validation function with full customization\n * @param options Configuration options for date validation\n * @returns Yup validation schema\n */\nexport const createDateValidation = (options: DateValidationOptions = {}) => {\n const {\n allowPast = false,\n allowToday = true,\n allowFuture = true,\n requiredMessage = DEFAULT_MESSAGES.required,\n pastDateMessage = DEFAULT_MESSAGES.pastDate,\n futureDateMessage = DEFAULT_MESSAGES.futureDate,\n todayNotAllowedMessage = DEFAULT_MESSAGES.todayNotAllowed,\n invalidDateMessage = DEFAULT_MESSAGES.invalidDate,\n checkTime = false,\n pastTimeMessage = DEFAULT_MESSAGES.pastTime\n } = options;\n\n return Yup.mixed()\n .transform(transformDate)\n .typeError(invalidDateMessage)\n .required(requiredMessage)\n .test('date-validation', function(value) {\n if (!value) return false;\n \n const now = dayjs();\n const selectedDateTime = dayjs(value);\n const today = dayjs().startOf('day');\n const selectedDate = dayjs(value).startOf('day');\n \n // Past date validation\n if (selectedDate.isBefore(today) && !allowPast) {\n return this.createError({ message: pastDateMessage });\n }\n \n // Today validation\n if (selectedDate.isSame(today)) {\n if (!allowToday) {\n return this.createError({ message: todayNotAllowedMessage });\n }\n \n // Time validation for today\n if (checkTime && selectedDateTime.isBefore(now)) {\n return this.createError({ message: pastTimeMessage });\n }\n }\n \n // Future date validation\n if (selectedDate.isAfter(today) && !allowFuture) {\n return this.createError({ message: futureDateMessage });\n }\n \n return true;\n });\n};\n\n/**\n * Quick preset validation functions for common use cases\n */\n\n// 1. Standard date validation (today + future allowed)\nexport const dateValidation = (requiredMessage?: string, options: DateValidationOptions = {}) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n ...options,\n requiredMessage\n });\n\n// 2. Future dates only (excluding today)\nexport const futureDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: false,\n allowFuture: true,\n requiredMessage,\n pastDateMessage: 'Please select a future date'\n });\n\n// 3. Any date allowed (for historical records)\nexport const anyDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n });\n\n// 4. Past dates only (for completed events)\nexport const pastDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: false,\n requiredMessage,\n futureDateMessage: 'Future dates are not allowed'\n });\n\n// 5. Date with time validation\nexport const dateTimeValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n checkTime: true,\n requiredMessage\n });\n\n// 6. Business days only (Monday to Friday, future dates)\nexport const businessDateValidation = (requiredMessage?: string) => {\n return createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n }).test('business-day', 'Please select a business day (Monday to Friday)', function(value) {\n if (!value) return false;\n \n const dayOfWeek = dayjs(value).day();\n return dayOfWeek >= 1 && dayOfWeek <= 5; // Monday = 1, Friday = 5\n });\n};\n\n// 7. Date range validation (between two dates)\nexport const dateRangeValidation = (\n minDate: dayjs.Dayjs | Date | string,\n maxDate: dayjs.Dayjs | Date | string,\n requiredMessage?: string\n) => {\n return Yup.mixed()\n .transform(transformDate)\n .typeError(DEFAULT_MESSAGES.invalidDate)\n .required(requiredMessage || DEFAULT_MESSAGES.required)\n .test('date-range', function(value) {\n if (!value) return false;\n \n const selected = dayjs(value);\n const min = dayjs(minDate);\n const max = dayjs(maxDate);\n \n if (selected.isBefore(min)) {\n return this.createError({\n message: `Date must be after ${min.format('MMM DD, YYYY')}`\n });\n }\n \n if (selected.isAfter(max)) {\n return this.createError({\n message: `Date must be before ${max.format('MMM DD, YYYY')}`\n });\n }\n \n return true;\n });\n};\n\n/**\n * Utility function to create custom validation messages\n */\nexport const createCustomMessages = (overrides: Partial<typeof DEFAULT_MESSAGES>) => ({\n ...DEFAULT_MESSAGES,\n ...overrides\n});\n\n/**\n * Helper function for conditional date validation\n * Example: Date required only if another field has a specific value\n */\nexport const conditionalDateValidation = (\n condition: (formValues: any) => boolean,\n validationSchema: any,\n) => {\n return Yup.mixed().when('$root', {\n is: condition,\n then: validationSchema,\n otherwise: Yup.mixed().notRequired()\n });\n};\n\n// Export commonly used validation presets\nexport const COMMON_DATE_VALIDATIONS = {\n // Rental/Order dates\n rental: (msg?: string) => dateValidation(msg || 'Rental date is required'),\n\n};\n\n/**\n * Usage Examples:\n * \n * // Basic usage with custom required message\n * date: dateValidation('Please select a valid date')\n * \n * // Full customization\n * date: createDateValidation({\n * allowPast: false,\n * allowToday: true,\n * allowFuture: true,\n * requiredMessage: 'Date is required',\n * pastDateMessage: 'Cannot select past dates'\n * })\n * \n * // Preset validations\n * rentalDate: COMMON_DATE_VALIDATIONS.rental('Rental date is required')\n * bookingDate: COMMON_DATE_VALIDATIONS.booking()\n * \n * // Date range\n * eventDate: dateRangeValidation(\n * dayjs().add(1, 'day'),\n * dayjs().add(1, 'year'),\n * 'Event date is required'\n * )\n */","\n\nimport { generateRouteWithId } from \"./route-utils\";\n\n\nexport const migrateToPathWithId = (redirectionLink: string, idField: string = 'id') => {\n return {\n redirectionPathWithId: `${redirectionLink}/:id`,\n idField\n };\n};\n\n\nexport const migrateRoutesToUseParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n Object.keys(updatedRoutes).forEach(key => {\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\nexport const createParameterizedNavigationHandler = (\n navigate: (path: string) => void,\n basePath: string,\n idExtractor: (row: any) => string | number = (row) => row.id\n) => {\n return (row: any) => {\n const id = idExtractor(row);\n navigate(generateRouteWithId(basePath, id));\n };\n};\n\n\nexport const updateTableConfigForParameterizedNavigation = (\n tableConfig: any,\n pathWithIdField: string,\n idField: string = 'id'\n) => {\n const { ...rest } = tableConfig;\n \n return {\n ...rest,\n redirectionPathWithId: pathWithIdField,\n idField\n };\n}; ","import _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { getV1LanguagesTranslations } from \"../api-client/api.system-feature/api\";\nimport { getToken } from \"./common\";\n\nconst loadedModules = new Set<string>();\n\nfunction nestTranslation(flatObject: any) {\n const nested = {};\n \n _.forEach(flatObject, (value, key) => {\n _.set(nested, key, value);\n });\n\n return nested;\n}\n\nexport async function loadModuleTranslations(moduleNames: string[], i18nInstance?: any) {\n const modulesToLoad = moduleNames?.filter(m => !loadedModules.has(m)) || [];\n\n if(!modulesToLoad.length) return;\n\n const filters = `(module.in=[${modulesToLoad?.join(',')}])`;\n\n const response = await getV1LanguagesTranslations({\n filters,\n limit: 9999,\n ...getToken(),\n });\n\n const data = response?.data?.translations || [];\n\n const resources: Record<string, Record<string, string>> = {};\n\n data.forEach((module: any) => {\n module?.fields?.forEach((item: any) => {\n for (const lang in item.translation) {\n if (!resources[lang]) {\n resources[lang] = {};\n }\n resources[lang][item.slug] = item.translation[lang];\n }\n })\n });\n\n \n if (i18nInstance) {\n Object.keys(resources).forEach((lang) => {\n const nested = nestTranslation(resources[lang]);\n i18nInstance.addResourceBundle(lang, 'translation', nested, true, true);\n });\n }\n\n modulesToLoad.forEach((module) => {\n loadedModules.add(module);\n });\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translations-A_1jDwOn.esm.js","sources":["../src/utils/country.ts","../src/utils/dateValidation.tsx","../src/utils/migration-utils.ts","../src/utils/translations.ts"],"sourcesContent":["export const getCountry = (code: string) => {\n const regionNames = new Intl.DisplayNames([\"en\"], { type: \"region\" });\n return regionNames.of(code);\n};\n","//eslint-disable @typescript-eslint/no-explicit-any\nimport * as Yup from 'yup';\nimport dayjs from 'dayjs';\n\n// Types for configuration\nexport interface DateValidationOptions {\n allowPast?: boolean;\n allowToday?: boolean;\n allowFuture?: boolean;\n requiredMessage?: string;\n pastDateMessage?: string;\n futureDateMessage?: string;\n todayNotAllowedMessage?: string;\n invalidDateMessage?: string;\n checkTime?: boolean;\n pastTimeMessage?: string;\n}\n\n// Default messages\nconst DEFAULT_MESSAGES = {\n required: 'Date is required',\n invalidDate: 'Date must be a valid date',\n pastDate: 'Date cannot be in the past',\n futureDate: 'Future dates are not allowed',\n todayNotAllowed: \"Today's date is not allowed\",\n pastTime: 'Time cannot be in the past for today\\'s date'\n};\n\n/**\n * Core date transformation function\n * Handles dayjs objects, Date objects, and string dates\n */\nconst transformDate = (value: any, originalValue: any) => {\n if (dayjs.isDayjs(originalValue)) {\n return originalValue.toDate();\n }\n if (originalValue instanceof Date) {\n return originalValue;\n }\n if (typeof originalValue === 'string' && originalValue) {\n return dayjs(originalValue).toDate();\n }\n return null;\n};\n\n/**\n * Global date validation function with full customization\n * @param options Configuration options for date validation\n * @returns Yup validation schema\n */\nexport const createDateValidation = (options: DateValidationOptions = {}) => {\n const {\n allowPast = false,\n allowToday = true,\n allowFuture = true,\n requiredMessage = DEFAULT_MESSAGES.required,\n pastDateMessage = DEFAULT_MESSAGES.pastDate,\n futureDateMessage = DEFAULT_MESSAGES.futureDate,\n todayNotAllowedMessage = DEFAULT_MESSAGES.todayNotAllowed,\n invalidDateMessage = DEFAULT_MESSAGES.invalidDate,\n checkTime = false,\n pastTimeMessage = DEFAULT_MESSAGES.pastTime\n } = options;\n\n return Yup.mixed()\n .transform(transformDate)\n .typeError(invalidDateMessage)\n .required(requiredMessage)\n .test('date-validation', function(value) {\n if (!value) return false;\n \n const now = dayjs();\n const selectedDateTime = dayjs(value);\n const today = dayjs().startOf('day');\n const selectedDate = dayjs(value).startOf('day');\n \n // Past date validation\n if (selectedDate.isBefore(today) && !allowPast) {\n return this.createError({ message: pastDateMessage });\n }\n \n // Today validation\n if (selectedDate.isSame(today)) {\n if (!allowToday) {\n return this.createError({ message: todayNotAllowedMessage });\n }\n \n // Time validation for today\n if (checkTime && selectedDateTime.isBefore(now)) {\n return this.createError({ message: pastTimeMessage });\n }\n }\n \n // Future date validation\n if (selectedDate.isAfter(today) && !allowFuture) {\n return this.createError({ message: futureDateMessage });\n }\n \n return true;\n });\n};\n\n/**\n * Quick preset validation functions for common use cases\n */\n\n// 1. Standard date validation (today + future allowed)\nexport const dateValidation = (requiredMessage?: string, options: DateValidationOptions = {}) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n ...options,\n requiredMessage\n });\n\n// 2. Future dates only (excluding today)\nexport const futureDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: false,\n allowFuture: true,\n requiredMessage,\n pastDateMessage: 'Please select a future date'\n });\n\n// 3. Any date allowed (for historical records)\nexport const anyDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n });\n\n// 4. Past dates only (for completed events)\nexport const pastDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: false,\n requiredMessage,\n futureDateMessage: 'Future dates are not allowed'\n });\n\n// 5. Date with time validation\nexport const dateTimeValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n checkTime: true,\n requiredMessage\n });\n\n// 6. Business days only (Monday to Friday, future dates)\nexport const businessDateValidation = (requiredMessage?: string) => {\n return createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n }).test('business-day', 'Please select a business day (Monday to Friday)', function(value) {\n if (!value) return false;\n \n const dayOfWeek = dayjs(value).day();\n return dayOfWeek >= 1 && dayOfWeek <= 5; // Monday = 1, Friday = 5\n });\n};\n\n// 7. Date range validation (between two dates)\nexport const dateRangeValidation = (\n minDate: dayjs.Dayjs | Date | string,\n maxDate: dayjs.Dayjs | Date | string,\n requiredMessage?: string\n) => {\n return Yup.mixed()\n .transform(transformDate)\n .typeError(DEFAULT_MESSAGES.invalidDate)\n .required(requiredMessage || DEFAULT_MESSAGES.required)\n .test('date-range', function(value) {\n if (!value) return false;\n \n const selected = dayjs(value);\n const min = dayjs(minDate);\n const max = dayjs(maxDate);\n \n if (selected.isBefore(min)) {\n return this.createError({\n message: `Date must be after ${min.format('MMM DD, YYYY')}`\n });\n }\n \n if (selected.isAfter(max)) {\n return this.createError({\n message: `Date must be before ${max.format('MMM DD, YYYY')}`\n });\n }\n \n return true;\n });\n};\n\n/**\n * Utility function to create custom validation messages\n */\nexport const createCustomMessages = (overrides: Partial<typeof DEFAULT_MESSAGES>) => ({\n ...DEFAULT_MESSAGES,\n ...overrides\n});\n\n/**\n * Helper function for conditional date validation\n * Example: Date required only if another field has a specific value\n */\nexport const conditionalDateValidation = (\n condition: (formValues: any) => boolean,\n validationSchema: any,\n) => {\n return Yup.mixed().when('$root', {\n is: condition,\n then: validationSchema,\n otherwise: Yup.mixed().notRequired()\n });\n};\n\n// Export commonly used validation presets\nexport const COMMON_DATE_VALIDATIONS = {\n // Rental/Order dates\n rental: (msg?: string) => dateValidation(msg || 'Rental date is required'),\n\n};\n\n/**\n * Usage Examples:\n * \n * // Basic usage with custom required message\n * date: dateValidation('Please select a valid date')\n * \n * // Full customization\n * date: createDateValidation({\n * allowPast: false,\n * allowToday: true,\n * allowFuture: true,\n * requiredMessage: 'Date is required',\n * pastDateMessage: 'Cannot select past dates'\n * })\n * \n * // Preset validations\n * rentalDate: COMMON_DATE_VALIDATIONS.rental('Rental date is required')\n * bookingDate: COMMON_DATE_VALIDATIONS.booking()\n * \n * // Date range\n * eventDate: dateRangeValidation(\n * dayjs().add(1, 'day'),\n * dayjs().add(1, 'year'),\n * 'Event date is required'\n * )\n */","\n\nimport { generateRouteWithId } from \"./route-utils\";\n\n\nexport const migrateToPathWithId = (redirectionLink: string, idField: string = 'id') => {\n return {\n redirectionPathWithId: `${redirectionLink}/:id`,\n idField\n };\n};\n\n\nexport const migrateRoutesToUseParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n Object.keys(updatedRoutes).forEach(key => {\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\nexport const createParameterizedNavigationHandler = (\n navigate: (path: string) => void,\n basePath: string,\n idExtractor: (row: any) => string | number = (row) => row.id\n) => {\n return (row: any) => {\n const id = idExtractor(row);\n navigate(generateRouteWithId(basePath, id));\n };\n};\n\n\nexport const updateTableConfigForParameterizedNavigation = (\n tableConfig: any,\n pathWithIdField: string,\n idField: string = 'id'\n) => {\n const { ...rest } = tableConfig;\n \n return {\n ...rest,\n redirectionPathWithId: pathWithIdField,\n idField\n };\n}; ","import _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { getV1LanguagesTranslations } from \"../api-client/api.system-feature/api\";\nimport { getToken } from \"./common\";\n\nconst loadedModules = new Set<string>();\n\nfunction nestTranslation(flatObject: any) {\n const nested = {};\n \n _.forEach(flatObject, (value, key) => {\n _.set(nested, key, value);\n });\n\n return nested;\n}\n\nexport async function loadModuleTranslations(moduleNames: string[], i18nInstance?: any) {\n const modulesToLoad = moduleNames?.filter(m => !loadedModules.has(m)) || [];\n\n if(!modulesToLoad.length) return;\n\n const filters = `(module.in=[${modulesToLoad?.join(',')}])`;\n\n const response = await getV1LanguagesTranslations({\n filters,\n limit: 9999,\n ...getToken(),\n });\n\n const data = response?.data?.translations || [];\n\n const resources: Record<string, Record<string, string>> = {};\n\n data.forEach((module: any) => {\n module?.fields?.forEach((item: any) => {\n for (const lang in item.translation) {\n if (!resources[lang]) {\n resources[lang] = {};\n }\n resources[lang][item.slug] = item.translation[lang];\n }\n })\n });\n\n \n if (i18nInstance) {\n Object.keys(resources).forEach((lang) => {\n const nested = nestTranslation(resources[lang]);\n i18nInstance.addResourceBundle(lang, 'translation', nested, true, true);\n });\n }\n\n modulesToLoad.forEach((module) => {\n loadedModules.add(module);\n });\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations-DAx8u6R5.js","sources":["../src/utils/country.ts","../src/utils/dateValidation.tsx","../src/utils/translations.ts","../src/utils/migration-utils.ts"],"sourcesContent":["export const getCountry = (code: string) => {\n const regionNames = new Intl.DisplayNames([\"en\"], { type: \"region\" });\n return regionNames.of(code);\n};\n","//eslint-disable @typescript-eslint/no-explicit-any\nimport * as Yup from 'yup';\nimport dayjs from 'dayjs';\n\n// Types for configuration\ninterface DateValidationOptions {\n allowPast?: boolean;\n allowToday?: boolean;\n allowFuture?: boolean;\n requiredMessage?: string;\n pastDateMessage?: string;\n futureDateMessage?: string;\n todayNotAllowedMessage?: string;\n invalidDateMessage?: string;\n checkTime?: boolean;\n pastTimeMessage?: string;\n}\n\n// Default messages\nconst DEFAULT_MESSAGES = {\n required: 'Date is required',\n invalidDate: 'Date must be a valid date',\n pastDate: 'Date cannot be in the past',\n futureDate: 'Future dates are not allowed',\n todayNotAllowed: \"Today's date is not allowed\",\n pastTime: 'Time cannot be in the past for today\\'s date'\n};\n\n/**\n * Core date transformation function\n * Handles dayjs objects, Date objects, and string dates\n */\nconst transformDate = (value: any, originalValue: any) => {\n if (dayjs.isDayjs(originalValue)) {\n return originalValue.toDate();\n }\n if (originalValue instanceof Date) {\n return originalValue;\n }\n if (typeof originalValue === 'string' && originalValue) {\n return dayjs(originalValue).toDate();\n }\n return null;\n};\n\n/**\n * Global date validation function with full customization\n * @param options Configuration options for date validation\n * @returns Yup validation schema\n */\nexport const createDateValidation = (options: DateValidationOptions = {}) => {\n const {\n allowPast = false,\n allowToday = true,\n allowFuture = true,\n requiredMessage = DEFAULT_MESSAGES.required,\n pastDateMessage = DEFAULT_MESSAGES.pastDate,\n futureDateMessage = DEFAULT_MESSAGES.futureDate,\n todayNotAllowedMessage = DEFAULT_MESSAGES.todayNotAllowed,\n invalidDateMessage = DEFAULT_MESSAGES.invalidDate,\n checkTime = false,\n pastTimeMessage = DEFAULT_MESSAGES.pastTime\n } = options;\n\n return Yup.mixed()\n .transform(transformDate)\n .typeError(invalidDateMessage)\n .required(requiredMessage)\n .test('date-validation', function(value) {\n if (!value) return false;\n \n const now = dayjs();\n const selectedDateTime = dayjs(value);\n const today = dayjs().startOf('day');\n const selectedDate = dayjs(value).startOf('day');\n \n // Past date validation\n if (selectedDate.isBefore(today) && !allowPast) {\n return this.createError({ message: pastDateMessage });\n }\n \n // Today validation\n if (selectedDate.isSame(today)) {\n if (!allowToday) {\n return this.createError({ message: todayNotAllowedMessage });\n }\n \n // Time validation for today\n if (checkTime && selectedDateTime.isBefore(now)) {\n return this.createError({ message: pastTimeMessage });\n }\n }\n \n // Future date validation\n if (selectedDate.isAfter(today) && !allowFuture) {\n return this.createError({ message: futureDateMessage });\n }\n \n return true;\n });\n};\n\n/**\n * Quick preset validation functions for common use cases\n */\n\n// 1. Standard date validation (today + future allowed)\nexport const dateValidation = (requiredMessage?: string, options: DateValidationOptions = {}) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n ...options,\n requiredMessage\n });\n\n// 2. Future dates only (excluding today)\nexport const futureDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: false,\n allowFuture: true,\n requiredMessage,\n pastDateMessage: 'Please select a future date'\n });\n\n// 3. Any date allowed (for historical records)\nexport const anyDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n });\n\n// 4. Past dates only (for completed events)\nexport const pastDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: false,\n requiredMessage,\n futureDateMessage: 'Future dates are not allowed'\n });\n\n// 5. Date with time validation\nexport const dateTimeValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n checkTime: true,\n requiredMessage\n });\n\n// 6. Business days only (Monday to Friday, future dates)\nexport const businessDateValidation = (requiredMessage?: string) => {\n return createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n }).test('business-day', 'Please select a business day (Monday to Friday)', function(value) {\n if (!value) return false;\n \n const dayOfWeek = dayjs(value).day();\n return dayOfWeek >= 1 && dayOfWeek <= 5; // Monday = 1, Friday = 5\n });\n};\n\n// 7. Date range validation (between two dates)\nexport const dateRangeValidation = (\n minDate: dayjs.Dayjs | Date | string,\n maxDate: dayjs.Dayjs | Date | string,\n requiredMessage?: string\n) => {\n return Yup.mixed()\n .transform(transformDate)\n .typeError(DEFAULT_MESSAGES.invalidDate)\n .required(requiredMessage || DEFAULT_MESSAGES.required)\n .test('date-range', function(value) {\n if (!value) return false;\n \n const selected = dayjs(value);\n const min = dayjs(minDate);\n const max = dayjs(maxDate);\n \n if (selected.isBefore(min)) {\n return this.createError({\n message: `Date must be after ${min.format('MMM DD, YYYY')}`\n });\n }\n \n if (selected.isAfter(max)) {\n return this.createError({\n message: `Date must be before ${max.format('MMM DD, YYYY')}`\n });\n }\n \n return true;\n });\n};\n\n/**\n * Utility function to create custom validation messages\n */\nexport const createCustomMessages = (overrides: Partial<typeof DEFAULT_MESSAGES>) => ({\n ...DEFAULT_MESSAGES,\n ...overrides\n});\n\n/**\n * Helper function for conditional date validation\n * Example: Date required only if another field has a specific value\n */\nexport const conditionalDateValidation = (\n condition: (formValues: any) => boolean,\n validationSchema: any,\n) => {\n return Yup.mixed().when('$root', {\n is: condition,\n then: validationSchema,\n otherwise: Yup.mixed().notRequired()\n });\n};\n\n// Export commonly used validation presets\nexport const COMMON_DATE_VALIDATIONS = {\n // Rental/Order dates\n rental: (msg?: string) => dateValidation(msg || 'Rental date is required'),\n\n};\n\n/**\n * Usage Examples:\n * \n * // Basic usage with custom required message\n * date: dateValidation('Please select a valid date')\n * \n * // Full customization\n * date: createDateValidation({\n * allowPast: false,\n * allowToday: true,\n * allowFuture: true,\n * requiredMessage: 'Date is required',\n * pastDateMessage: 'Cannot select past dates'\n * })\n * \n * // Preset validations\n * rentalDate: COMMON_DATE_VALIDATIONS.rental('Rental date is required')\n * bookingDate: COMMON_DATE_VALIDATIONS.booking()\n * \n * // Date range\n * eventDate: dateRangeValidation(\n * dayjs().add(1, 'day'),\n * dayjs().add(1, 'year'),\n * 'Event date is required'\n * )\n */","import _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { getV1LanguagesTranslations } from \"../api-client/api.system-feature/api\";\nimport { getToken } from \"./common\";\n\nconst loadedModules = new Set<string>();\n\nfunction nestTranslation(flatObject: any) {\n const nested = {};\n \n _.forEach(flatObject, (value, key) => {\n _.set(nested, key, value);\n });\n\n return nested;\n}\n\nexport async function loadModuleTranslations(moduleNames: string[], i18nInstance?: any) {\n const modulesToLoad = moduleNames?.filter(m => !loadedModules.has(m)) || [];\n\n if(!modulesToLoad.length) return;\n\n const filters = `(module.in=[${modulesToLoad?.join(',')}])`;\n\n const response = await getV1LanguagesTranslations({\n filters,\n limit: 9999,\n ...getToken(),\n });\n\n const data = response?.data?.translations || [];\n\n const resources: Record<string, Record<string, string>> = {};\n\n data.forEach((module: any) => {\n module?.fields?.forEach((item: any) => {\n for (const lang in item.translation) {\n if (!resources[lang]) {\n resources[lang] = {};\n }\n resources[lang][item.slug] = item.translation[lang];\n }\n })\n });\n\n \n if (i18nInstance) {\n Object.keys(resources).forEach((lang) => {\n const nested = nestTranslation(resources[lang]);\n i18nInstance.addResourceBundle(lang, 'translation', nested, true, true);\n });\n }\n\n modulesToLoad.forEach((module) => {\n loadedModules.add(module);\n });\n}\n","\n\nimport { generateRouteWithId } from \"./route-utils\";\n\n\nexport const migrateToPathWithId = (redirectionLink: string, idField: string = 'id') => {\n return {\n redirectionPathWithId: `${redirectionLink}/:id`,\n idField\n };\n};\n\n\nexport const migrateRoutesToUseParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n Object.keys(updatedRoutes).forEach(key => {\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\nexport const createParameterizedNavigationHandler = (\n navigate: (path: string) => void,\n basePath: string,\n idExtractor: (row: any) => string | number = (row) => row.id\n) => {\n return (row: any) => {\n const id = idExtractor(row);\n navigate(generateRouteWithId(basePath, id));\n };\n};\n\n\nexport const updateTableConfigForParameterizedNavigation = (\n tableConfig: any,\n pathWithIdField: string,\n idField: string = 'id'\n) => {\n const { ...rest } = tableConfig;\n \n return {\n ...rest,\n redirectionPathWithId: pathWithIdField,\n idField\n };\n}; "],"names":["DEFAULT_MESSAGES","required","invalidDate","pastDate","futureDate","todayNotAllowed","pastTime","transformDate","value","originalValue","dayjs","isDayjs","toDate","Date","createDateValidation","options","allowPast","allowToday","allowFuture","requiredMessage","pastDateMessage","futureDateMessage","todayNotAllowedMessage","invalidDateMessage","checkTime","pastTimeMessage","Yup","mixed","transform","typeError","test","now","selectedDateTime","today","startOf","selectedDate","isBefore","this","createError","message","isSame","isAfter","dateValidation","COMMON_DATE_VALIDATIONS","rental","msg","loadedModules","Set","dayOfWeek","day","condition","validationSchema","when","is","then","otherwise","notRequired","overrides","navigate","basePath","idExtractor","row","id","generateRouteWithId","minDate","maxDate","selected","min","max","format","code","Intl","DisplayNames","type","of","async","moduleNames","i18nInstance","modulesToLoad","filter","m","has","length","filters","join","response","getV1LanguagesTranslations","limit","getToken","data","_a","translations","resources","forEach","module","fields","item","lang","translation","slug","Object","keys","nested","flatObject","_","key","set","nestTranslation","addResourceBundle","add","routes","updatedRoutes","startsWith","includes","redirectionLink","idField","redirectionPathWithId","tableConfig","pathWithIdField","rest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translations-DAx8u6R5.js","sources":["../src/utils/country.ts","../src/utils/dateValidation.tsx","../src/utils/translations.ts","../src/utils/migration-utils.ts"],"sourcesContent":["export const getCountry = (code: string) => {\n const regionNames = new Intl.DisplayNames([\"en\"], { type: \"region\" });\n return regionNames.of(code);\n};\n","//eslint-disable @typescript-eslint/no-explicit-any\nimport * as Yup from 'yup';\nimport dayjs from 'dayjs';\n\n// Types for configuration\nexport interface DateValidationOptions {\n allowPast?: boolean;\n allowToday?: boolean;\n allowFuture?: boolean;\n requiredMessage?: string;\n pastDateMessage?: string;\n futureDateMessage?: string;\n todayNotAllowedMessage?: string;\n invalidDateMessage?: string;\n checkTime?: boolean;\n pastTimeMessage?: string;\n}\n\n// Default messages\nconst DEFAULT_MESSAGES = {\n required: 'Date is required',\n invalidDate: 'Date must be a valid date',\n pastDate: 'Date cannot be in the past',\n futureDate: 'Future dates are not allowed',\n todayNotAllowed: \"Today's date is not allowed\",\n pastTime: 'Time cannot be in the past for today\\'s date'\n};\n\n/**\n * Core date transformation function\n * Handles dayjs objects, Date objects, and string dates\n */\nconst transformDate = (value: any, originalValue: any) => {\n if (dayjs.isDayjs(originalValue)) {\n return originalValue.toDate();\n }\n if (originalValue instanceof Date) {\n return originalValue;\n }\n if (typeof originalValue === 'string' && originalValue) {\n return dayjs(originalValue).toDate();\n }\n return null;\n};\n\n/**\n * Global date validation function with full customization\n * @param options Configuration options for date validation\n * @returns Yup validation schema\n */\nexport const createDateValidation = (options: DateValidationOptions = {}) => {\n const {\n allowPast = false,\n allowToday = true,\n allowFuture = true,\n requiredMessage = DEFAULT_MESSAGES.required,\n pastDateMessage = DEFAULT_MESSAGES.pastDate,\n futureDateMessage = DEFAULT_MESSAGES.futureDate,\n todayNotAllowedMessage = DEFAULT_MESSAGES.todayNotAllowed,\n invalidDateMessage = DEFAULT_MESSAGES.invalidDate,\n checkTime = false,\n pastTimeMessage = DEFAULT_MESSAGES.pastTime\n } = options;\n\n return Yup.mixed()\n .transform(transformDate)\n .typeError(invalidDateMessage)\n .required(requiredMessage)\n .test('date-validation', function(value) {\n if (!value) return false;\n \n const now = dayjs();\n const selectedDateTime = dayjs(value);\n const today = dayjs().startOf('day');\n const selectedDate = dayjs(value).startOf('day');\n \n // Past date validation\n if (selectedDate.isBefore(today) && !allowPast) {\n return this.createError({ message: pastDateMessage });\n }\n \n // Today validation\n if (selectedDate.isSame(today)) {\n if (!allowToday) {\n return this.createError({ message: todayNotAllowedMessage });\n }\n \n // Time validation for today\n if (checkTime && selectedDateTime.isBefore(now)) {\n return this.createError({ message: pastTimeMessage });\n }\n }\n \n // Future date validation\n if (selectedDate.isAfter(today) && !allowFuture) {\n return this.createError({ message: futureDateMessage });\n }\n \n return true;\n });\n};\n\n/**\n * Quick preset validation functions for common use cases\n */\n\n// 1. Standard date validation (today + future allowed)\nexport const dateValidation = (requiredMessage?: string, options: DateValidationOptions = {}) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n ...options,\n requiredMessage\n });\n\n// 2. Future dates only (excluding today)\nexport const futureDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: false,\n allowFuture: true,\n requiredMessage,\n pastDateMessage: 'Please select a future date'\n });\n\n// 3. Any date allowed (for historical records)\nexport const anyDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n });\n\n// 4. Past dates only (for completed events)\nexport const pastDateValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: true,\n allowToday: true,\n allowFuture: false,\n requiredMessage,\n futureDateMessage: 'Future dates are not allowed'\n });\n\n// 5. Date with time validation\nexport const dateTimeValidation = (requiredMessage?: string) => \n createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n checkTime: true,\n requiredMessage\n });\n\n// 6. Business days only (Monday to Friday, future dates)\nexport const businessDateValidation = (requiredMessage?: string) => {\n return createDateValidation({\n allowPast: false,\n allowToday: true,\n allowFuture: true,\n requiredMessage\n }).test('business-day', 'Please select a business day (Monday to Friday)', function(value) {\n if (!value) return false;\n \n const dayOfWeek = dayjs(value).day();\n return dayOfWeek >= 1 && dayOfWeek <= 5; // Monday = 1, Friday = 5\n });\n};\n\n// 7. Date range validation (between two dates)\nexport const dateRangeValidation = (\n minDate: dayjs.Dayjs | Date | string,\n maxDate: dayjs.Dayjs | Date | string,\n requiredMessage?: string\n) => {\n return Yup.mixed()\n .transform(transformDate)\n .typeError(DEFAULT_MESSAGES.invalidDate)\n .required(requiredMessage || DEFAULT_MESSAGES.required)\n .test('date-range', function(value) {\n if (!value) return false;\n \n const selected = dayjs(value);\n const min = dayjs(minDate);\n const max = dayjs(maxDate);\n \n if (selected.isBefore(min)) {\n return this.createError({\n message: `Date must be after ${min.format('MMM DD, YYYY')}`\n });\n }\n \n if (selected.isAfter(max)) {\n return this.createError({\n message: `Date must be before ${max.format('MMM DD, YYYY')}`\n });\n }\n \n return true;\n });\n};\n\n/**\n * Utility function to create custom validation messages\n */\nexport const createCustomMessages = (overrides: Partial<typeof DEFAULT_MESSAGES>) => ({\n ...DEFAULT_MESSAGES,\n ...overrides\n});\n\n/**\n * Helper function for conditional date validation\n * Example: Date required only if another field has a specific value\n */\nexport const conditionalDateValidation = (\n condition: (formValues: any) => boolean,\n validationSchema: any,\n) => {\n return Yup.mixed().when('$root', {\n is: condition,\n then: validationSchema,\n otherwise: Yup.mixed().notRequired()\n });\n};\n\n// Export commonly used validation presets\nexport const COMMON_DATE_VALIDATIONS = {\n // Rental/Order dates\n rental: (msg?: string) => dateValidation(msg || 'Rental date is required'),\n\n};\n\n/**\n * Usage Examples:\n * \n * // Basic usage with custom required message\n * date: dateValidation('Please select a valid date')\n * \n * // Full customization\n * date: createDateValidation({\n * allowPast: false,\n * allowToday: true,\n * allowFuture: true,\n * requiredMessage: 'Date is required',\n * pastDateMessage: 'Cannot select past dates'\n * })\n * \n * // Preset validations\n * rentalDate: COMMON_DATE_VALIDATIONS.rental('Rental date is required')\n * bookingDate: COMMON_DATE_VALIDATIONS.booking()\n * \n * // Date range\n * eventDate: dateRangeValidation(\n * dayjs().add(1, 'day'),\n * dayjs().add(1, 'year'),\n * 'Event date is required'\n * )\n */","import _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { getV1LanguagesTranslations } from \"../api-client/api.system-feature/api\";\nimport { getToken } from \"./common\";\n\nconst loadedModules = new Set<string>();\n\nfunction nestTranslation(flatObject: any) {\n const nested = {};\n \n _.forEach(flatObject, (value, key) => {\n _.set(nested, key, value);\n });\n\n return nested;\n}\n\nexport async function loadModuleTranslations(moduleNames: string[], i18nInstance?: any) {\n const modulesToLoad = moduleNames?.filter(m => !loadedModules.has(m)) || [];\n\n if(!modulesToLoad.length) return;\n\n const filters = `(module.in=[${modulesToLoad?.join(',')}])`;\n\n const response = await getV1LanguagesTranslations({\n filters,\n limit: 9999,\n ...getToken(),\n });\n\n const data = response?.data?.translations || [];\n\n const resources: Record<string, Record<string, string>> = {};\n\n data.forEach((module: any) => {\n module?.fields?.forEach((item: any) => {\n for (const lang in item.translation) {\n if (!resources[lang]) {\n resources[lang] = {};\n }\n resources[lang][item.slug] = item.translation[lang];\n }\n })\n });\n\n \n if (i18nInstance) {\n Object.keys(resources).forEach((lang) => {\n const nested = nestTranslation(resources[lang]);\n i18nInstance.addResourceBundle(lang, 'translation', nested, true, true);\n });\n }\n\n modulesToLoad.forEach((module) => {\n loadedModules.add(module);\n });\n}\n","\n\nimport { generateRouteWithId } from \"./route-utils\";\n\n\nexport const migrateToPathWithId = (redirectionLink: string, idField: string = 'id') => {\n return {\n redirectionPathWithId: `${redirectionLink}/:id`,\n idField\n };\n};\n\n\nexport const migrateRoutesToUseParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n Object.keys(updatedRoutes).forEach(key => {\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\nexport const createParameterizedNavigationHandler = (\n navigate: (path: string) => void,\n basePath: string,\n idExtractor: (row: any) => string | number = (row) => row.id\n) => {\n return (row: any) => {\n const id = idExtractor(row);\n navigate(generateRouteWithId(basePath, id));\n };\n};\n\n\nexport const updateTableConfigForParameterizedNavigation = (\n tableConfig: any,\n pathWithIdField: string,\n idField: string = 'id'\n) => {\n const { ...rest } = tableConfig;\n \n return {\n ...rest,\n redirectionPathWithId: pathWithIdField,\n idField\n };\n}; "],"names":["DEFAULT_MESSAGES","required","invalidDate","pastDate","futureDate","todayNotAllowed","pastTime","transformDate","value","originalValue","dayjs","isDayjs","toDate","Date","createDateValidation","options","allowPast","allowToday","allowFuture","requiredMessage","pastDateMessage","futureDateMessage","todayNotAllowedMessage","invalidDateMessage","checkTime","pastTimeMessage","Yup","mixed","transform","typeError","test","now","selectedDateTime","today","startOf","selectedDate","isBefore","this","createError","message","isSame","isAfter","dateValidation","COMMON_DATE_VALIDATIONS","rental","msg","loadedModules","Set","dayOfWeek","day","condition","validationSchema","when","is","then","otherwise","notRequired","overrides","navigate","basePath","idExtractor","row","id","generateRouteWithId","minDate","maxDate","selected","min","max","format","code","Intl","DisplayNames","type","of","async","moduleNames","i18nInstance","modulesToLoad","filter","m","has","length","filters","join","response","getV1LanguagesTranslations","limit","getToken","data","_a","translations","resources","forEach","module","fields","item","lang","translation","slug","Object","keys","nested","flatObject","_","key","set","nestTranslation","addResourceBundle","add","routes","updatedRoutes","startsWith","includes","redirectionLink","idField","redirectionPathWithId","tableConfig","pathWithIdField","rest"],"mappings":"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"}
|