@argusoft/medplat-core 1.0.18 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AccessRights-Bvd5Bm5K.js → AccessRights-CupmTG3T.js} +2 -2
- package/dist/{AccessRights-Bvd5Bm5K.js.map → AccessRights-CupmTG3T.js.map} +1 -1
- package/dist/{AddEditQueryBuilder-Bcjl5mXE.js → AddEditQueryBuilder-C8ZSkOF0.js} +60 -60
- package/dist/AddEditQueryBuilder-C8ZSkOF0.js.map +1 -0
- package/dist/{AddFeatures-CE5rBxEG.js → AddFeatures-CiZZZ0GL.js} +2 -2
- package/dist/{AddFeatures-CE5rBxEG.js.map → AddFeatures-CiZZZ0GL.js.map} +1 -1
- package/dist/{AddMenuConfiguration-QWfpcnuP.js → AddMenuConfiguration-DsnY0Rws.js} +544 -544
- package/dist/AddMenuConfiguration-DsnY0Rws.js.map +1 -0
- package/dist/{AddRoleDrawer-SvntLdRu.js → AddRoleDrawer-CQdzQZLb.js} +39 -39
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +1 -0
- package/dist/ChangePasswordModalCore-50EzprTk.js +5495 -0
- package/dist/ChangePasswordModalCore-50EzprTk.js.map +1 -0
- package/dist/{ConditionConfig-DB0FqwgG.js → ConditionConfig-C3rF2wXU.js} +2 -2
- package/dist/{ConditionConfig-DB0FqwgG.js.map → ConditionConfig-C3rF2wXU.js.map} +1 -1
- package/dist/{EntityManagement-DQKXnEzz.js → EntityManagement-D4nG7wUX.js} +2 -2
- package/dist/{EntityManagement-DQKXnEzz.js.map → EntityManagement-D4nG7wUX.js.map} +1 -1
- package/dist/{EventConfigurations-D8juDb29.js → EventConfigurations-BGffjVC7.js} +3 -3
- package/dist/{EventConfigurations-D8juDb29.js.map → EventConfigurations-BGffjVC7.js.map} +1 -1
- package/dist/{EventsExceptionModal-DsvngLi8.js → EventsExceptionModal-D4Bf1ilS.js} +2 -2
- package/dist/{EventsExceptionModal-DsvngLi8.js.map → EventsExceptionModal-D4Bf1ilS.js.map} +1 -1
- package/dist/EventsSkeleton-8iiETGcf.js +76 -0
- package/dist/EventsSkeleton-8iiETGcf.js.map +1 -0
- package/dist/{FeatureMenu-CLX8VNZ-.js → FeatureMenu-DUZL32RI.js} +3 -3
- package/dist/{FeatureMenu-CLX8VNZ-.js.map → FeatureMenu-DUZL32RI.js.map} +1 -1
- package/dist/Features-CObdzJp_.js +13 -0
- package/dist/Features-CObdzJp_.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-C5wnjI_-.js +5706 -0
- package/dist/ImmunizationConfigurationBase-C5wnjI_-.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/{ManageDynamicFeature-CsIett5x.js → ManageDynamicFeature-BhONvfC_.js} +3 -3
- package/dist/{ManageDynamicFeature-CsIett5x.js.map → ManageDynamicFeature-BhONvfC_.js.map} +1 -1
- package/dist/{ManageEventConfiguration-0YBDaxOI.js → ManageEventConfiguration-BntUc_YI.js} +93 -93
- package/dist/ManageEventConfiguration-BntUc_YI.js.map +1 -0
- package/dist/{ManageNotification-BUAvg5Ge.js → ManageNotification-CSl02Wq7.js} +2 -2
- package/dist/{ManageNotification-BUAvg5Ge.js.map → ManageNotification-CSl02Wq7.js.map} +1 -1
- package/dist/{ManageRole-Cbs9dUhc.js → ManageRole-tdzAiCOE.js} +222 -229
- package/dist/ManageRole-tdzAiCOE.js.map +1 -0
- package/dist/{ManageUser-eBS0yC5k.js → ManageUser-C6dlK-Mr.js} +3 -4
- package/dist/{ManageUser-eBS0yC5k.js.map → ManageUser-C6dlK-Mr.js.map} +1 -1
- package/dist/{MobileMenuManagement-BmrO-7MN.js → MobileMenuManagement-CV6QCeos.js} +15 -15
- package/dist/MobileMenuManagement-CV6QCeos.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-Ltm529jG.js → MobileTypeEventConfigModal-BNjZ8pnq.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-Ltm529jG.js.map → MobileTypeEventConfigModal-BNjZ8pnq.js.map} +1 -1
- package/dist/{NewServerManagement-5YcAtF-g.js → NewServerManagement-Cxe0dV0O.js} +5 -5
- package/dist/NewServerManagement-Cxe0dV0O.js.map +1 -0
- package/dist/{NotificationList-CUZSWp2J.js → NotificationList-D1U1LYnz.js} +140 -139
- package/dist/NotificationList-D1U1LYnz.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js → OtherTypeEventConfigModal-DiVhWDpG.js} +43 -43
- package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js.map → OtherTypeEventConfigModal-DiVhWDpG.js.map} +1 -1
- package/dist/{QueryBuilder-DXexUIe8.js → QueryBuilder-DI0wCJbz.js} +85 -84
- package/dist/QueryBuilder-DI0wCJbz.js.map +1 -0
- package/dist/{QueryManagement-DGHV_-d5.js → QueryManagement-CRykYGum.js} +3 -3
- package/dist/QueryManagement-CRykYGum.js.map +1 -0
- package/dist/{RoleManagement-BThAL5LO.js → RoleManagement-Cg8-EiVr.js} +83 -82
- package/dist/RoleManagement-Cg8-EiVr.js.map +1 -0
- package/dist/SecurityAuditLogList-Dod711KT.js +874 -0
- package/dist/SecurityAuditLogList-Dod711KT.js.map +1 -0
- package/dist/{ShowFlywayQuery-BkyA6QaA.js → ShowFlywayQuery-tj42YQAS.js} +33 -33
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +1 -0
- package/dist/{SubMenu-BGznOP2a.js → SubMenu-CM_4wNCR.js} +2 -2
- package/dist/{SubMenu-BGznOP2a.js.map → SubMenu-CM_4wNCR.js.map} +1 -1
- package/dist/{TableDetails-DztbjsIA.js → TableDetails-Cf_YfnY2.js} +235 -235
- package/dist/TableDetails-Cf_YfnY2.js.map +1 -0
- package/dist/{TableList-DYwotUDO.js → TableList-HGbEN4bv.js} +28 -28
- package/dist/TableList-HGbEN4bv.js.map +1 -0
- package/dist/{TypeConfiguration-DYbBG_hZ.js → TypeConfiguration-CupQxH9Y.js} +28 -28
- package/dist/TypeConfiguration-CupQxH9Y.js.map +1 -0
- package/dist/{UserList-BAeAFeXZ.js → UserList-BzHsbYel.js} +423 -423
- package/dist/UserList-BzHsbYel.js.map +1 -0
- package/dist/{WidgetList-D-fIf3N2.js → WidgetList-B7X8Awkg.js} +2 -2
- package/dist/{WidgetList-D-fIf3N2.js.map → WidgetList-B7X8Awkg.js.map} +1 -1
- package/dist/index-D9YNFPn9.js +1439 -0
- package/dist/index-D9YNFPn9.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +102 -100
- package/dist/index.js.map +1 -1
- package/dist/{index-BFznsakV.js → pdfmake-Cf-381ou.js} +13951 -15385
- package/dist/pdfmake-Cf-381ou.js.map +1 -0
- package/package.json +1 -1
- package/dist/AddEditQueryBuilder-Bcjl5mXE.js.map +0 -1
- package/dist/AddMenuConfiguration-QWfpcnuP.js.map +0 -1
- package/dist/AddRoleDrawer-SvntLdRu.js.map +0 -1
- package/dist/ChangePasswordModalCore-ClND1mel.js +0 -181
- package/dist/ChangePasswordModalCore-ClND1mel.js.map +0 -1
- package/dist/EventsSkeleton-DCXwwPbb.js +0 -76
- package/dist/EventsSkeleton-DCXwwPbb.js.map +0 -1
- package/dist/Features-Cpf1PDx0.js +0 -13
- package/dist/Features-Cpf1PDx0.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-BqPTExSk.js +0 -5653
- package/dist/ImmunizationConfigurationBase-BqPTExSk.js.map +0 -1
- package/dist/ManageEventConfiguration-0YBDaxOI.js.map +0 -1
- package/dist/ManageRole-Cbs9dUhc.js.map +0 -1
- package/dist/MobileMenuManagement-BmrO-7MN.js.map +0 -1
- package/dist/NewServerManagement-5YcAtF-g.js.map +0 -1
- package/dist/NotificationList-CUZSWp2J.js.map +0 -1
- package/dist/QueryBuilder-DXexUIe8.js.map +0 -1
- package/dist/QueryManagement-DGHV_-d5.js.map +0 -1
- package/dist/RoleManagement-BThAL5LO.js.map +0 -1
- package/dist/SecurityAuditLogList-DHTcOtbx.js +0 -748
- package/dist/SecurityAuditLogList-DHTcOtbx.js.map +0 -1
- package/dist/ShowFlywayQuery-BkyA6QaA.js.map +0 -1
- package/dist/TableDetails-DztbjsIA.js.map +0 -1
- package/dist/TableList-DYwotUDO.js.map +0 -1
- package/dist/TypeConfiguration-DYbBG_hZ.js.map +0 -1
- package/dist/UserList-BAeAFeXZ.js.map +0 -1
- package/dist/index-BFznsakV.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TableList-DYwotUDO.js","sources":["../src/views/Mobile/EntityManagement/ImportSummaryDialog.jsx","../src/views/Mobile/EntityManagement/TableList.jsx"],"sourcesContent":["import Editor from \"@monaco-editor/react\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from \"@mui/material\";\nimport PropTypes from \"prop-types\";\nimport React, { useState } from \"react\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\n\nconst STATUS_CONFIG = {\n NEW_TABLE: { label: \"New Table\", color: \"success\" },\n MODIFIED: { label: \"Modified\", color: \"warning\" },\n SYNC_REQUIRED: { label: \"Sync Required\", color: \"info\" },\n NO_CHANGES: { label: \"No Changes\", color: \"default\" },\n};\n\nfunction ChangeSummaryChips({ changes, status }) {\n const chips = [];\n if (status === \"NEW_TABLE\") {\n chips.push(\n <Chip\n key=\"new\"\n size=\"small\"\n label={`${changes.addedColumns?.length || 0} columns`}\n color=\"success\"\n variant=\"outlined\"\n />,\n );\n } else {\n if (changes.addedColumns?.length)\n chips.push(\n <Chip\n key=\"add\"\n size=\"small\"\n label={`+${changes.addedColumns.length} cols`}\n color=\"success\"\n variant=\"outlined\"\n />,\n );\n if (changes.removedColumns?.length)\n chips.push(\n <Chip\n key=\"rem\"\n size=\"small\"\n label={`-${changes.removedColumns.length} cols`}\n color=\"error\"\n variant=\"outlined\"\n />,\n );\n if (changes.typeChangedColumns?.length)\n chips.push(\n <Chip\n key=\"type\"\n size=\"small\"\n label={`${changes.typeChangedColumns.length} types`}\n color=\"warning\"\n variant=\"outlined\"\n />,\n );\n if (changes.primaryKeyChange)\n chips.push(\n <Chip\n key=\"pk\"\n size=\"small\"\n label=\"PK changed\"\n color=\"warning\"\n variant=\"outlined\"\n />,\n );\n if (changes.settingsChanges?.length)\n chips.push(\n <Chip\n key=\"set\"\n size=\"small\"\n label={`${changes.settingsChanges.length} settings`}\n color=\"info\"\n variant=\"outlined\"\n />,\n );\n if (!chips.length)\n chips.push(\n <Typography key=\"none\" variant=\"caption\" color=\"text.secondary\">\n —\n </Typography>,\n );\n }\n return (\n <Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>{chips}</Box>\n );\n}\n\nfunction TableDiffDetail({ item }) {\n const { tableName, status, changes } = item;\n\n return (\n <Box sx={{ p: 1.5 }}>\n {status === \"NEW_TABLE\" && (\n <Alert severity=\"success\" sx={{ mb: 1.5, py: 0.5 }}>\n This table does not exist in the database. A{\" \"}\n <strong>CREATE TABLE</strong> migration script will be generated.\n </Alert>\n )}\n {(changes.addedColumns?.length > 0 ||\n changes.removedColumns?.length > 0 ||\n changes.typeChangedColumns?.length > 0 ||\n changes.primaryKeyChange) &&\n status !== \"NEW_TABLE\" && (\n <Alert severity=\"warning\" sx={{ mb: 1.5, py: 0.5 }}>\n SQLite does not support all ALTER TABLE operations. A{\" \"}\n <strong>rebuild migration</strong> (dummy table copy) will be\n generated.\n </Alert>\n )}\n\n {/* Columns diff */}\n {(changes.addedColumns?.length > 0 ||\n changes.removedColumns?.length > 0 ||\n changes.typeChangedColumns?.length > 0) && (\n <TableContainer\n sx={{\n mb: 1.5,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: 1,\n }}\n >\n <Table size=\"small\">\n <TableHead>\n <TableRow sx={{ backgroundColor: \"action.hover\" }}>\n <TableCell sx={{ fontWeight: 700, fontSize: \"0.75rem\" }}>\n Column\n </TableCell>\n <TableCell sx={{ fontWeight: 700, fontSize: \"0.75rem\" }}>\n Type\n </TableCell>\n <TableCell sx={{ fontWeight: 700, fontSize: \"0.75rem\" }}>\n Change\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(changes.addedColumns || []).map((col) => (\n <TableRow\n key={`add-${col.name}`}\n sx={{ backgroundColor: \"rgba(76,175,80,0.08)\" }}\n >\n <TableCell\n sx={{ fontSize: \"0.75rem\", fontFamily: \"monospace\" }}\n >\n {col.name}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.75rem\" }}>{col.type}</TableCell>\n <TableCell>\n <Chip size=\"small\" label=\"Added\" color=\"success\" />\n </TableCell>\n </TableRow>\n ))}\n {(changes.removedColumns || []).map((col) => (\n <TableRow\n key={`rem-${col.name}`}\n sx={{ backgroundColor: \"rgba(244,67,54,0.08)\" }}\n >\n <TableCell\n sx={{\n fontSize: \"0.75rem\",\n fontFamily: \"monospace\",\n textDecoration: \"line-through\",\n color: \"error.main\",\n }}\n >\n {col.name}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"0.75rem\",\n textDecoration: \"line-through\",\n color: \"error.main\",\n }}\n >\n {col.type}\n </TableCell>\n <TableCell>\n <Chip size=\"small\" label=\"Removed\" color=\"error\" />\n </TableCell>\n </TableRow>\n ))}\n {(changes.typeChangedColumns || []).map((col) => (\n <TableRow\n key={`type-${col.name}`}\n sx={{ backgroundColor: \"rgba(255,152,0,0.08)\" }}\n >\n <TableCell\n sx={{ fontSize: \"0.75rem\", fontFamily: \"monospace\" }}\n >\n {col.name}\n </TableCell>\n <TableCell sx={{ fontSize: \"0.75rem\" }}>\n <span\n style={{\n textDecoration: \"line-through\",\n color: \"var(--mui-palette-error-main)\",\n marginRight: \"8px\",\n }}\n >\n {col.oldType}\n </span>\n <span>{col.newType}</span>\n </TableCell>\n <TableCell>\n <Chip size=\"small\" label=\"Type Changed\" color=\"warning\" />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n\n {/* PK change */}\n {changes.primaryKeyChange && (\n <Box\n sx={{\n mb: 1.5,\n p: 1,\n backgroundColor: \"warning.50\",\n borderRadius: 1,\n border: \"1px solid\",\n borderColor: \"warning.200\",\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{ fontWeight: 700, color: \"warning.dark\" }}\n >\n Primary Key Change:\n </Typography>\n <Typography variant=\"caption\" sx={{ ml: 1 }}>\n <code>{changes.primaryKeyChange.from}</code>\n {\" → \"}\n <code>{changes.primaryKeyChange.to}</code>\n </Typography>\n </Box>\n )}\n\n {/* Settings changes */}\n {changes.settingsChanges?.length > 0 && (\n <Box sx={{ mb: 1.5 }}>\n <Typography\n variant=\"caption\"\n sx={{ fontWeight: 700, display: \"block\", mb: 0.5 }}\n >\n Settings Changes:\n </Typography>\n {changes.settingsChanges.map((s, i) => (\n <Box\n key={i}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mb: 0.25 }}\n >\n <Typography\n variant=\"caption\"\n sx={{ color: \"text.secondary\", minWidth: 120 }}\n >\n {s.field}:\n </Typography>\n <Typography variant=\"caption\">\n <code>{String(s.from)}</code> → <code>{String(s.to)}</code>\n </Typography>\n </Box>\n ))}\n </Box>\n )}\n\n </Box>\n );\n}\n\nexport default function ImportSummaryDialog({\n open,\n onClose,\n summaryData,\n onApply,\n applying,\n migrationVersions,\n unifiedMigrationScript,\n onUnifiedScriptChange,\n}) {\n const [unifiedScriptExpanded, setUnifiedScriptExpanded] = useState(true);\n const affectedCount = summaryData.filter(\n (d) => d.status !== \"NO_CHANGES\",\n ).length;\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n PaperProps={{ sx: { borderRadius: 3 } }}\n >\n <DialogTitle sx={{ pb: 1, fontWeight: 700 }}>\n Import Summary\n <Typography variant=\"body2\" color=\"text.secondary\">\n {affectedCount} table(s) will be affected · {summaryData.length} total\n in file\n </Typography>\n </DialogTitle>\n <Divider />\n <DialogContent sx={{ p: 0 }}>\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow sx={{ backgroundColor: \"action.hover\" }}>\n <TableCell sx={{ fontWeight: 700, pl: 3 }}>\n Table Name\n </TableCell>\n <TableCell sx={{ fontWeight: 700 }}>Status</TableCell>\n <TableCell sx={{ fontWeight: 700 }}>Changes</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {summaryData.map((item) => {\n const cfg =\n STATUS_CONFIG[item.status] || STATUS_CONFIG.NO_CHANGES;\n return (\n <React.Fragment key={item.tableName}>\n <TableRow\n sx={{\n \"& > *\": {\n borderBottom:\n item.status !== \"NO_CHANGES\" ? \"none\" : undefined,\n },\n }}\n >\n <TableCell\n sx={{\n fontFamily: \"monospace\",\n fontSize: \"0.82rem\",\n pl: 3,\n }}\n >\n {item.tableName}\n </TableCell>\n <TableCell>\n <Chip\n label={cfg.label}\n color={cfg.color}\n size=\"small\"\n sx={{ fontWeight: 600 }}\n />\n </TableCell>\n <TableCell>\n <ChangeSummaryChips\n changes={item.changes}\n status={item.status}\n />\n </TableCell>\n </TableRow>\n {item.status !== \"NO_CHANGES\" && (\n <TableRow>\n <TableCell\n colSpan={3}\n sx={{\n pt: 0,\n pb: 0.5,\n px: 2,\n backgroundColor: \"action.hover\",\n }}\n >\n <TableDiffDetail\n item={item}\n />\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n\n {/* Unified Migration Script Preview Section */}\n {unifiedMigrationScript && (\n <Box sx={{ p: 3, borderTop: \"1px solid\", borderColor: \"divider\" }}>\n <Accordion\n expanded={unifiedScriptExpanded}\n onChange={() => setUnifiedScriptExpanded((p) => !p)}\n sx={{\n boxShadow: \"none\",\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: \"4px !important\",\n }}\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons\n iconName=\"faChevronDown\"\n className=\"text-[0.75rem]\"\n />\n }\n >\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n pr: 2,\n }}\n >\n <Typography variant=\"caption\" sx={{ fontWeight: 700 }}>\n <FontAwesomeIcons\n iconName=\"faCode\"\n className=\"mr-2 text-[0.7rem]\"\n />\n Preview Unified Migration Script\n </Typography>\n {migrationVersions && migrationVersions.from_version !== undefined && (\n <Typography\n variant=\"caption\"\n sx={{ color: \"text.secondary\", fontWeight: 600 }}\n >\n From : <strong>v{migrationVersions.from_version + 1}</strong>\n <FontAwesomeIcons\n iconName=\"faArrowRight\"\n className=\"mx-2 text-[0.6rem]\"\n />\n To : <strong>v{migrationVersions.to_version + 1}</strong>\n </Typography>\n )}\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{ p: 0 }}>\n <Editor\n height=\"300px\"\n defaultLanguage=\"sql\"\n theme=\"vs-dark\"\n options={{\n fontSize: 12,\n minimap: { enabled: false },\n readOnly: false,\n scrollBeyondLastLine: false,\n wordWrap: \"on\",\n }}\n value={unifiedMigrationScript}\n onChange={onUnifiedScriptChange}\n />\n </AccordionDetails>\n </Accordion>\n </Box>\n )}\n </DialogContent>\n <Divider />\n <DialogActions sx={{ px: 3, py: 2, gap: 1 }}>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n size=\"small\"\n sx={{ borderRadius: 2, textTransform: \"none\" }}\n disabled={applying}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n disabled={affectedCount === 0 || applying}\n onClick={onApply}\n sx={{ borderRadius: 2, textTransform: \"none\", boxShadow: \"none\" }}\n startIcon={applying ? null : <FontAwesomeIcons iconName=\"faCheck\" />}\n >\n {applying ? \"Applying…\" : `Apply Import (${affectedCount})`}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nImportSummaryDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n summaryData: PropTypes.array.isRequired,\n onApply: PropTypes.func.isRequired,\n applying: PropTypes.bool,\n migrationVersions: PropTypes.object,\n unifiedMigrationScript: PropTypes.string,\n onUnifiedScriptChange: PropTypes.func.isRequired,\n};\n\nTableDiffDetail.propTypes = {\n item: PropTypes.object,\n};\nChangeSummaryChips.propTypes = {\n changes: PropTypes.object,\n status: PropTypes.string,\n};\n","import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { execute, executeAll } from \"@/common/services/QueryBuilder\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport Editor from \"@monaco-editor/react\";\nimport ImportSummaryDialog from \"./ImportSummaryDialog\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Checkbox,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n IconButton,\n InputAdornment,\n List,\n ListItem,\n ListItemButton,\n ListItemText,\n Modal,\n Paper,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport PropTypes from \"prop-types\";\nimport React, { lazy, Suspense, useEffect, useRef, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useSelector } from \"react-redux\";\nconst TableDetails = lazy(() => import(\"./TableDetails\"));\n\nexport default function TableList({\n tableList,\n tablesInfo,\n allTableList,\n allTablesInfo,\n formSubmitted,\n reloadComponents,\n}) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedTable, setSelectedTable] = useState(\"\");\n const [syncedTableInfo, setSyncedTableInfo] = useState({});\n const [tableInfo, setTableInfo] = useState({});\n const [allTableInfo, setAllTableInfo] = useState({});\n const [tableCompleteInfo, setTableCompleteInfo] = useState({});\n const filteredList = tableList\n ? tableList.filter((tableName) =>\n tableName.toLowerCase().includes(searchQuery.toLowerCase()),\n )\n : [];\n const [editMode, setEditMode] = useState(false);\n const [modalOpen, setModalOpen] = useState(false);\n const [tableForModal, setTableForModal] = useState();\n const [isCreateTableMode, setIsCreateTableMode] = useState(false);\n const [isSyncTableMode, setIsSyncTableMode] = useState(false);\n const [openDeleteModal, setOpenDeleteModal] = useState(false);\n const { translate } = useTranslateProvider();\n const loggedInUser = useSelector((state) => state.Authenticate.user.id);\n\n // ── Export state ──────────────────────────────────────────────────────\n const [isExportMode, setIsExportMode] = useState(false);\n const [selectedForExport, setSelectedForExport] = useState(new Set());\n\n // ── Import state ──────────────────────────────────────────────────────\n const importFileRef = useRef(null);\n const [importSummaryOpen, setImportSummaryOpen] = useState(false);\n const [importSummaryData, setImportSummaryData] = useState([]);\n const [importApplying, setImportApplying] = useState(false);\n const [importMigrationVersions, setImportMigrationVersions] = useState({});\n const [unifiedMigrationScript, setUnifiedMigrationScript] = useState(\"\");\n\n const {\n formState: {},\n } = useForm({\n defaultValues: {\n field1: \"\",\n field2: \"\",\n field3: \"\",\n },\n });\n\n useEffect(() => {\n let info1 = {};\n let info2 = {};\n setSelectedTable(tableList[0]);\n info1 = createTableObject(tablesInfo);\n setSyncedTableInfo((syncedTableInfo) => ({ ...syncedTableInfo, ...info1 }));\n info2 = createTableObject(allTablesInfo);\n setAllTableInfo((allTableInfo) => ({ ...allTableInfo, ...info2 }));\n }, [tablesInfo, allTablesInfo]);\n\n useEffect(() => {\n setTableInfo(() => syncedTableInfo[tableList[0]]);\n setTableCompleteInfo(() => allTableInfo[tableList[0]]);\n }, [syncedTableInfo, allTableInfo]);\n\n const mapToSQLiteType = (sqlType) => {\n const type = sqlType.toLowerCase();\n if (\n type.includes(\"int\") ||\n type.includes(\"timestamp\") ||\n type === \"boolean\" ||\n type.includes(\"serial\") ||\n type.includes(\"date\")\n ) {\n return \"INTEGER\";\n } else if (\n type.includes(\"char\") ||\n type.includes(\"text\") ||\n type.includes(\"varchar\")\n ) {\n return \"TEXT\";\n }\n return \"TEXT\";\n };\n\n const createTableObject = (tbInfo) => {\n const info = {};\n tbInfo.forEach((item) => {\n const parsedColumns = JSON.parse(item.columnInfo);\n const columnArray = Object.keys(parsedColumns).map((columnName) => ({\n name: columnName,\n type: mapToSQLiteType(parsedColumns[columnName]),\n }));\n\n const media =\n item.mediaConfiguration \n ? JSON.parse(item.mediaConfiguration)\n : null;\n info[item.tableName] = {\n columnInfo: columnArray,\n modifiedOnQuery: item.modifiedOnQuery ? item.modifiedOnQuery : null,\n primaryKey: item.primaryKey ? item.primaryKey : null,\n selectQuery: item.selectQuery ? item.selectQuery : null,\n userData: item.userData !== undefined ? item.userData : null,\n hasMedia: item.hasMedia !== undefined ? item.hasMedia : null,\n mediaConfiguration: media,\n syncByDefault: item.syncByDefault ? item.syncByDefault : false,\n };\n });\n return info;\n };\n\n const handleAddTable = () => {\n setIsCreateTableMode(false);\n setModalOpen(true);\n setTableForModal();\n };\n\n const handleCreateTable = () => {\n setEditMode(false);\n setIsCreateTableMode(true);\n };\n\n const handleModalClose = () => {\n setModalOpen(false);\n };\n\n const handleTableSelect = () => {\n if (tableForModal) {\n const tableInfo = { ...allTableInfo[tableForModal] };\n if (tableInfo) {\n tableInfo.columnInfo = [];\n }\n setSelectedTable(tableForModal);\n setTableInfo(() => tableInfo);\n setTableCompleteInfo(() => allTableInfo[tableForModal]);\n setIsSyncTableMode(true);\n setIsCreateTableMode(false);\n setEditMode(true);\n }\n setModalOpen(false);\n setTableForModal(() => \"\");\n };\n\n const onTableChange = (tableName) => {\n setSelectedTable(tableName);\n setTableInfo(() => syncedTableInfo[tableName]);\n setTableCompleteInfo(() => allTableInfo[tableName]);\n setEditMode(false);\n setIsCreateTableMode(false);\n setIsSyncTableMode(false);\n };\n\n // ── Export helpers ──────────────────────────────────────────────────────\n const handleExportDownload = () => {\n if (selectedForExport.size === 0) return;\n const tables = {};\n selectedForExport.forEach((name) => {\n if (syncedTableInfo[name]) tables[name] = syncedTableInfo[name];\n });\n const json = JSON.stringify(\n { exportedAt: new Date().toISOString(), tables },\n null,\n 2,\n );\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `db_export_${Date.now()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n setIsExportMode(false);\n setSelectedForExport(new Set());\n showToast({\n message: `Exported ${selectedForExport.size} table(s) successfully.`,\n type: \"success\",\n });\n };\n\n // ── Migration script generators ─────────────────────────────────────────\n const generateCreateTableScript = (tableName, tableData) => {\n const cols = tableData.columnInfo || [];\n let s = `CREATE TABLE ${tableName} (\\n`;\n s += cols.map((c) => ` ${c.name} ${c.type}`).join(\",\\n\");\n if (tableData.primaryKey)\n s += `,\\n CONSTRAINT ${tableName}_pkey PRIMARY KEY (${tableData.primaryKey})`;\n s += \"\\n);\";\n return s;\n };\n\n const generateRebuildScript = (tableName, existingTable, importedTable) => {\n const newCols = importedTable.columnInfo || [];\n const existingCols = existingTable.columnInfo || [];\n const newColNames = new Set(newCols.map((c) => c.name));\n const commonCols = existingCols\n .filter((c) => newColNames.has(c.name))\n .map((c) => c.name);\n const colList = commonCols.join(\", \");\n const pk = importedTable.primaryKey;\n const colDefs = newCols.map((c) => ` ${c.name} ${c.type}`).join(\",\\n\");\n const pkLine = pk\n ? `,\\n CONSTRAINT ${tableName}_dummy_pkey PRIMARY KEY (${pk})`\n : \"\";\n const pkLine2 = pk\n ? `,\\n CONSTRAINT ${tableName}_pkey PRIMARY KEY (${pk})`\n : \"\";\n return [\n `-- Step 1: Create dummy table with new schema`,\n `CREATE TABLE ${tableName}_dummy (\\n${colDefs}${pkLine}\\n);`,\n `-- Step 2: Copy common columns from original`,\n colList\n ? `INSERT INTO ${tableName}_dummy (${colList})\\nSELECT ${colList} FROM ${tableName};`\n : `-- (no common columns to copy)`,\n `-- Step 3: Drop original table`,\n `DROP TABLE ${tableName};`,\n `-- Step 4: Recreate original table with new schema`,\n `CREATE TABLE ${tableName} (\\n${colDefs}${pkLine2}\\n);`,\n `-- Step 5: Restore data from dummy`,\n colList\n ? `INSERT INTO ${tableName} (${colList})\\nSELECT ${colList} FROM ${tableName}_dummy;`\n : `-- (no data to restore)`,\n `-- Step 6: Drop dummy table`,\n `DROP TABLE ${tableName}_dummy;`,\n ].join(\"\\n\\n\");\n };\n\n const normalizeQuery = (query) => (query || \"\").replace(/\\s+/g, \" \").trim();\n\n // ── Import diff computation ─────────────────────────────────────────────\n const computeImportDiff = (importedData) => {\n const tables = importedData.tables || {};\n return Object.entries(tables).map(([tableName, importedTable]) => {\n const existingSynced = syncedTableInfo[tableName];\n //const existsInDB = !!allTableInfo[tableName];\n const refTable = existingSynced;\n const changes = {\n addedColumns: [],\n removedColumns: [],\n typeChangedColumns: [],\n primaryKeyChange: null,\n settingsChanges: [],\n };\n let status = \"NO_CHANGES\";\n\n if (!existingSynced) {\n status = \"NEW_TABLE\";\n changes.addedColumns = importedTable.columnInfo || [];\n } else {\n const importedCols = new Map(\n (importedTable.columnInfo || []).map((c) => [c.name, c.type]),\n );\n const refCols = new Map(\n (refTable.columnInfo || []).map((c) => [c.name, c.type]),\n );\n changes.addedColumns = (importedTable.columnInfo || []).filter(\n (c) => !refCols.has(c.name),\n );\n changes.removedColumns = (refTable.columnInfo || []).filter(\n (c) => !importedCols.has(c.name),\n );\n changes.typeChangedColumns = (importedTable.columnInfo || [])\n .filter((c) => refCols.has(c.name) && refCols.get(c.name) !== c.type)\n .map((c) => ({\n name: c.name,\n oldType: refCols.get(c.name),\n newType: c.type,\n }));\n changes.primaryKeyChange =\n importedTable.primaryKey !== refTable.primaryKey\n ? {\n from: refTable.primaryKey || \"(none)\",\n to: importedTable.primaryKey || \"(none)\",\n }\n : null;\n\n if (existingSynced) {\n const sc = [];\n [\n [\"syncByDefault\", \"Sync by Default\"],\n [\"userData\", \"User Data\"],\n [\"hasMedia\", \"Has Media\"],\n ].forEach(([k, l]) => {\n if (String(importedTable[k]) !== String(existingSynced[k]))\n sc.push({\n field: l,\n from: existingSynced[k],\n to: importedTable[k],\n });\n });\n if (\n normalizeQuery(importedTable.modifiedOnQuery) !==\n normalizeQuery(existingSynced.modifiedOnQuery)\n ) {\n sc.push({\n field: \"Modified On Query\",\n from: \"(changed)\",\n to: \"(changed)\",\n });\n }\n if (\n normalizeQuery(importedTable.selectQuery) !==\n normalizeQuery(existingSynced.selectQuery)\n ) {\n sc.push({\n field: \"Data Fetch Query\",\n from: \"(changed)\",\n to: \"(changed)\",\n });\n }\n changes.settingsChanges = sc;\n }\n\n const hasSchema =\n changes.addedColumns.length > 0 ||\n changes.removedColumns.length > 0 ||\n changes.typeChangedColumns.length > 0 ||\n changes.primaryKeyChange;\n const hasMeta = changes.settingsChanges.length > 0;\n status = hasSchema || hasMeta ? \"MODIFIED\" : \"NO_CHANGES\";\n }\n\n let migrationScript = \"\";\n if (status === \"NEW_TABLE\") {\n migrationScript = generateCreateTableScript(tableName, importedTable);\n } else if (\n status !== \"NO_CHANGES\" &&\n (changes.addedColumns.length > 0 ||\n changes.removedColumns.length > 0 ||\n changes.typeChangedColumns.length > 0 ||\n changes.primaryKeyChange)\n ) {\n migrationScript = generateRebuildScript(\n tableName,\n refTable,\n importedTable,\n );\n }\n\n return {\n tableName,\n status,\n changes,\n importedTable,\n existingTable: refTable,\n migrationScript,\n };\n });\n };\n\n const generateUnifiedScript = (diffData) => {\n let combinedScript = \"\";\n const toProcess = diffData.filter((d) => d.status !== \"NO_CHANGES\");\n toProcess.forEach((item) => {\n if (item.migrationScript) {\n combinedScript += `-- ==================================================\\n`;\n combinedScript += `-- Table: ${item.tableName}\\n`;\n if (item.status === \"NEW_TABLE\") {\n combinedScript += `-- Changes: New Table\\n`;\n } else {\n combinedScript += `-- Changes:\\n`;\n if (item.changes.addedColumns?.length)\n combinedScript += `-- Added: ${item.changes.addedColumns.map((c) => c.name).join(\", \")}\\n`;\n if (item.changes.removedColumns?.length)\n combinedScript += `-- Removed: ${item.changes.removedColumns.map((c) => c.name).join(\", \")}\\n`;\n if (item.changes.typeChangedColumns?.length)\n combinedScript += `-- Modified types: ${item.changes.typeChangedColumns.map((c) => `${c.name} (${c.oldType} -> ${c.newType})`).join(\", \")}\\n`;\n if (item.changes.primaryKeyChange)\n combinedScript += `-- Primary Key Changed\\n`;\n }\n combinedScript += `-- ==================================================\\n\\n`;\n combinedScript += item.migrationScript.trim() + \"\\n\\n\";\n }\n });\n return combinedScript;\n };\n\n // ── Import file read ────────────────────────────────────────────────────\n const handleImportFileChange = (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = (ev) => {\n try {\n const parsed = JSON.parse(ev.target.result);\n if (!parsed.tables)\n throw new Error(\"Invalid format: missing 'tables' key.\");\n const diff = computeImportDiff(parsed);\n setImportSummaryData(diff);\n const unified = generateUnifiedScript(diff);\n setUnifiedMigrationScript(unified);\n\n execute({ code: \"MFA_MIGRATION_MASTER_GET_LATEST_VERSIONS\" })\n .then((res) => {\n setImportMigrationVersions(res?.data?.result?.[0] || {});\n })\n .catch(() => setImportMigrationVersions({}));\n\n setImportSummaryOpen(true);\n } catch (err) {\n showToast({ message: `Import failed: ${err.message}`, type: \"error\" });\n }\n };\n reader.readAsText(file);\n e.target.value = \"\";\n };\n\n const handleUnifiedScriptChange = (newScript) => {\n setUnifiedMigrationScript(newScript);\n };\n\n const handleApplyImport = async () => {\n const toProcess = importSummaryData.filter(\n (d) => d.status !== \"NO_CHANGES\",\n );\n if (!toProcess.length) {\n showToast({ message: \"Nothing to apply.\", type: \"info\" });\n return;\n }\n\n setImportApplying(true);\n\n const dtoList = toProcess.map((item, idx) => {\n const t = item.importedTable;\n const columns = {};\n (t.columnInfo || []).forEach((c) => {\n columns[c.name] = c.type;\n });\n\n return {\n code: \"update_mobile_entity\",\n parameters: {\n tableName: item.tableName || \"\",\n syncByDefault: !!t.syncByDefault,\n columnInfo: JSON.stringify(columns) || \"\",\n primaryKey: t.primaryKey || \"\",\n modifiedOnQuery: t.modifiedOnQuery || \"\",\n selectQuery: t.selectQuery || \"\",\n userData: !!t.userData,\n hasMedia: !!t.hasMedia,\n mediaConfiguration: t.hasMedia\n ? JSON.stringify(t.mediaConfiguration || {})\n : null,\n modifiedBy: loggedInUser || \"\",\n isUpdate: true,\n },\n sequence: idx,\n };\n });\n\n try {\n const allDataRes = (await executeAll(dtoList)).data;\n const hasError = allDataRes?.some((res) => res.status === 0);\n if (hasError) {\n const failedIndex = allDataRes.findIndex((res) => res.status === 0);\n const failedItem = toProcess[failedIndex];\n const errorMsg = allDataRes[failedIndex]?.message || \"Unknown error\";\n showToast({\n message: `Failed to save ${failedItem.tableName}: ${errorMsg}`,\n type: \"error\",\n });\n setImportApplying(false);\n return;\n }\n\n if (unifiedMigrationScript.trim()) {\n const migrationRes = (\n await execute({\n code: \"INSERT_MOBILE_MIGRATION\",\n parameters: {\n migrationScript: unifiedMigrationScript,\n modifiedBy: loggedInUser || \"\",\n generateMigration: true,\n },\n })\n ).data;\n\n if (migrationRes?.status === 0) {\n showToast({\n message: `Failed to insert migration script: ${migrationRes?.message}`,\n type: \"error\",\n });\n }\n }\n\n setImportApplying(false);\n setImportSummaryOpen(false);\n reloadComponents((p) => !p);\n showToast({ message: \"Import applied successfully!\", type: \"success\" });\n } catch (err) {\n showToast({\n message: `Failed to apply import: ${err}`,\n type: \"error\",\n });\n setImportApplying(false);\n }\n };\n\n return (\n <>\n {/* ── Main Container with Paper wrapper (matching ManageAllForms) ── */}\n <Paper\n elevation={0}\n sx={{\n p: { xs: 2.5, md: 3 },\n mt: 2,\n mb: 3,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: 3,\n backgroundColor: \"background.paper\",\n }}\n >\n {/* ── Header Section ── */}\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\",\n gap: 2,\n }}\n >\n <Box sx={{ minWidth: { xs: \"100%\", lg: \"40%\" } }}>\n <Typography\n variant=\"h5\"\n sx={{ fontWeight: 800, color: \"text.primary\", mb: 0.5 }}\n >\n {translate(\"Database Management\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Manage synced tables, create new entities, and configure mobile\n database schemas.\n </Typography>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n flexWrap: \"wrap\",\n }}\n >\n {/* Hidden file input for import */}\n <input\n type=\"file\"\n accept=\".json\"\n ref={importFileRef}\n style={{ display: \"none\" }}\n onChange={handleImportFileChange}\n />\n\n {/* Export button */}\n <Tooltip\n title={\n isExportMode\n ? \"Cancel export mode\"\n : \"Export selected tables as JSON\"\n }\n arrow\n >\n <Button\n variant={isExportMode ? \"contained\" : \"outlined\"}\n size=\"small\"\n color={isExportMode ? \"warning\" : \"inherit\"}\n sx={{\n borderRadius: 2,\n fontWeight: 600,\n px: 2,\n textTransform: \"none\",\n borderColor: \"divider\",\n color: isExportMode ? \"white\" : \"text.primary\",\n \"&:hover\": {\n backgroundColor: isExportMode\n ? \"warning.dark\"\n : \"action.hover\",\n borderColor: \"text.disabled\",\n },\n }}\n startIcon={\n <FontAwesomeIcons\n iconName={isExportMode ? \"faXmark\" : \"faFileExport\"}\n />\n }\n onClick={() => {\n setIsExportMode((p) => !p);\n setSelectedForExport(new Set());\n }}\n >\n {isExportMode ? \"Cancel Export\" : \"Export\"}\n </Button>\n </Tooltip>\n\n {/* Import button */}\n <Tooltip title=\"Import table configuration from JSON\" arrow>\n <Button\n variant=\"outlined\"\n size=\"small\"\n sx={{\n borderRadius: 2,\n fontWeight: 600,\n px: 2,\n textTransform: \"none\",\n borderColor: \"divider\",\n color: \"text.primary\",\n \"&:hover\": {\n backgroundColor: \"action.hover\",\n borderColor: \"text.disabled\",\n },\n }}\n startIcon={<FontAwesomeIcons iconName=\"faFileImport\" />}\n onClick={() => importFileRef.current?.click()}\n >\n Import\n </Button>\n </Tooltip>\n\n <Button\n variant=\"outlined\"\n size=\"small\"\n sx={{\n borderRadius: 2,\n fontWeight: 600,\n px: 2,\n textTransform: \"none\",\n borderColor: \"divider\",\n color: \"text.primary\",\n \"&:hover\": {\n backgroundColor: \"action.hover\",\n borderColor: \"text.disabled\",\n },\n }}\n startIcon={<FontAwesomeIcons iconName={\"faRotate\"} />}\n onClick={() => handleAddTable()}\n >\n Sync Table\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n sx={{\n borderRadius: 2,\n fontWeight: 600,\n px: 2,\n boxShadow: \"none\",\n textTransform: \"none\",\n }}\n startIcon={<FontAwesomeIcons iconName={\"faPlus\"} />}\n onClick={() => handleCreateTable()}\n >\n Create Table\n </Button>\n </Box>\n </Box>\n\n {/* ── Search & Stats Bar ── */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 2,\n backgroundColor: \"action.hover\",\n p: 1.5,\n borderRadius: 2.5,\n border: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Chip\n label={`${tableList?.length || 0} Synced`}\n size=\"small\"\n color=\"primary\"\n variant=\"filled\"\n sx={{ fontWeight: 700, borderRadius: 2, px: 0.5 }}\n />\n <Chip\n label={`${allTableList?.length || 0} Total`}\n size=\"small\"\n variant=\"outlined\"\n sx={{\n fontWeight: 600,\n borderRadius: 2,\n px: 0.5,\n borderColor: \"divider\",\n }}\n />\n </Box>\n\n <TextField\n value={searchQuery}\n size=\"small\"\n placeholder=\"Search synced tables...\"\n onChange={(e) => setSearchQuery(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcons iconName=\"faMagnifyingGlass\" />\n </InputAdornment>\n ),\n sx: {\n backgroundColor: \"background.paper\",\n borderRadius: 2,\n minWidth: 260,\n },\n }}\n />\n </Box>\n </Box>\n\n <Divider sx={{ my: 3 }} />\n\n {/* ── Content: List + Details Layout ── */}\n <Grid container spacing={2.5}>\n {/* ── Left Panel: Table List ── */}\n <Grid size={3}>\n <Paper\n variant=\"outlined\"\n sx={{\n borderRadius: 2.5,\n overflow: \"hidden\",\n maxHeight: \"72vh\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* List Header */}\n <Box\n sx={{\n px: 2,\n py: 1.5,\n backgroundColor: isExportMode ? \"warning.50\" : \"action.hover\",\n borderBottom: \"1px solid\",\n borderColor: isExportMode ? \"warning.300\" : \"divider\",\n transition: \"background-color 0.2s\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: 700,\n color: isExportMode ? \"warning.dark\" : \"text.primary\",\n }}\n >\n {isExportMode\n ? \"Select Tables to Export\"\n : translate(\"Synced Tables\")}\n </Typography>\n {isExportMode && (\n <Tooltip\n title={\n selectedForExport.size === filteredList.length\n ? \"Deselect all\"\n : \"Select all\"\n }\n arrow\n >\n <Checkbox\n size=\"small\"\n checked={\n filteredList.length > 0 &&\n selectedForExport.size === filteredList.length\n }\n indeterminate={\n selectedForExport.size > 0 &&\n selectedForExport.size < filteredList.length\n }\n onChange={(e) => {\n if (e.target.checked)\n setSelectedForExport(new Set(filteredList));\n else setSelectedForExport(new Set());\n }}\n sx={{ p: 0.25 }}\n />\n </Tooltip>\n )}\n </Box>\n <Typography\n variant=\"caption\"\n color={isExportMode ? \"warning.dark\" : \"text.secondary\"}\n >\n {isExportMode\n ? `${selectedForExport.size} of ${filteredList.length} selected`\n : `${filteredList.length} of ${tableList?.length || 0} tables`}\n </Typography>\n </Box>\n\n {/* Table List */}\n <Box sx={{ overflowY: \"auto\", flex: 1 }}>\n {filteredList.length ? (\n <List disablePadding>\n {filteredList.map((tableName, index) => {\n const isSelected = selectedTable === tableName;\n return (\n <ListItem\n key={index + 1}\n disablePadding\n secondaryAction={\n !isExportMode && (\n <Box\n sx={{\n display: \"flex\",\n gap: 0.25,\n opacity: isSelected ? 1 : 0,\n transition: \"opacity 0.2s\",\n }}\n >\n <Tooltip\n title=\"Edit table\"\n arrow\n placement=\"top\"\n >\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onTableChange(tableName);\n setEditMode(true);\n }}\n sx={{\n color: \"primary.main\",\n \"&:hover\": {\n backgroundColor: \"primary.50\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName={\"faPen\"}\n className=\"text-[0.75rem]\"\n />\n </IconButton>\n </Tooltip>\n <Tooltip\n title=\"Delete table\"\n arrow\n placement=\"top\"\n >\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onTableChange(tableName);\n setOpenDeleteModal(true);\n }}\n sx={{\n color: \"error.main\",\n \"&:hover\": {\n backgroundColor: \"error.50\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName={\"faTrash\"}\n className=\"text-[0.75rem]\"\n />\n </IconButton>\n </Tooltip>\n </Box>\n )\n }\n sx={{\n borderBottom:\n index === filteredList.length - 1\n ? \"none\"\n : \"1px solid\",\n borderColor: \"divider\",\n \"&:hover .MuiBox-root\": { opacity: \"1 !important\" },\n }}\n >\n <ListItemButton\n selected={isSelected && !isExportMode}\n onClick={() => {\n if (isExportMode) {\n const newSet = new Set(selectedForExport);\n if (newSet.has(tableName))\n newSet.delete(tableName);\n else newSet.add(tableName);\n setSelectedForExport(newSet);\n } else {\n onTableChange(tableName);\n }\n }}\n sx={{\n py: 1,\n px: 2,\n transition: \"all 0.15s ease\",\n ...(isExportMode\n ? {}\n : {\n \"&.Mui-selected\": {\n backgroundColor: \"primary.50\",\n borderLeft: \"3px solid\",\n borderLeftColor: \"primary.main\",\n \"&:hover\": {\n backgroundColor: \"primary.100\",\n },\n },\n \"&:hover\": {\n backgroundColor: \"action.hover\",\n },\n }),\n }}\n >\n {isExportMode && (\n <Checkbox\n size=\"small\"\n checked={selectedForExport.has(tableName)}\n disableRipple\n sx={{ p: 0, mr: 1.5 }}\n />\n )}\n <ListItemText\n primary={\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight:\n isSelected && !isExportMode ? 600 : 400,\n color:\n isSelected && !isExportMode\n ? \"primary.dark\"\n : \"text.primary\",\n fontSize: \"0.82rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"160px\",\n }}\n >\n {tableName}\n </Typography>\n }\n />\n </ListItemButton>\n </ListItem>\n );\n })}\n </List>\n ) : (\n <Box sx={{ p: 3, textAlign: \"center\" }}>\n <FontAwesomeIcons\n iconName=\"faInbox\"\n className=\"text-[2rem] text-gray-300\"\n />\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ mt: 1 }}\n >\n {tableList.length < 1\n ? \"No tables synced\"\n : \"No tables match your search.\"}\n </Typography>\n </Box>\n )}\n </Box>\n\n {/* Export floating bar */}\n {isExportMode && (\n <Box\n sx={{\n p: 2,\n borderTop: \"1px solid\",\n borderColor: \"divider\",\n backgroundColor: \"background.paper\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {selectedForExport.size} selected\n </Typography>\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n disabled={selectedForExport.size === 0}\n onClick={handleExportDownload}\n startIcon={<FontAwesomeIcons iconName=\"faDownload\" />}\n sx={{\n textTransform: \"none\",\n borderRadius: 2,\n boxShadow: \"none\",\n }}\n >\n Download JSON\n </Button>\n </Box>\n )}\n </Paper>\n </Grid>\n\n {/* ── Right Panel: Table Details ── */}\n <Suspense>\n {((!!selectedTable && !!tableInfo) || isCreateTableMode) && (\n <TableDetails\n tableInfo={tableInfo}\n table={selectedTable}\n isEditMode={editMode}\n updateEditMode={setEditMode}\n tableCompleteInfo={tableCompleteInfo}\n formSubmitted={formSubmitted}\n reloadComponents={reloadComponents}\n isCreateTableMode={isCreateTableMode}\n isSyncTableMode={isSyncTableMode}\n updateCreateTableMode={setIsCreateTableMode}\n openDeleteModal={openDeleteModal}\n setOpenDeleteModal={setOpenDeleteModal}\n generateRebuildScript={generateRebuildScript}\n ></TableDetails>\n )}\n </Suspense>\n </Grid>\n </Paper>\n\n {/* ── Sync Table Dialog (replacing raw Modal) ── */}\n <Dialog\n open={modalOpen}\n onClose={handleModalClose}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{\n sx: { borderRadius: 3, p: 1 },\n }}\n >\n <DialogTitle sx={{ fontWeight: 700, pb: 1 }}>\n Sync a Table\n <Typography variant=\"body2\" color=\"text.secondary\">\n Select an existing database table to sync with the mobile app.\n </Typography>\n </DialogTitle>\n <DialogContent>\n <Autocomplete\n options={allTableList.filter((x) => {\n return !tableList.includes(x);\n })}\n getOptionLabel={(option) => option}\n value={tableForModal}\n onChange={(_, newValue) => setTableForModal(newValue)}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Table\"\n placeholder=\"Search and select a table...\"\n size=\"small\"\n sx={{ mt: 1 }}\n />\n )}\n />\n </DialogContent>\n <DialogActions sx={{ px: 3, pb: 2 }}>\n <Button\n onClick={handleModalClose}\n variant=\"outlined\"\n size=\"small\"\n sx={{ borderRadius: 2, textTransform: \"none\" }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => handleTableSelect()}\n disabled={!tableForModal}\n sx={{ borderRadius: 2, textTransform: \"none\", boxShadow: \"none\" }}\n >\n Sync Table\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* ── Import Summary Dialog ── */}\n <ImportSummaryDialog\n open={importSummaryOpen}\n onClose={() => setImportSummaryOpen(false)}\n summaryData={importSummaryData}\n onApply={handleApplyImport}\n applying={importApplying}\n migrationVersions={importMigrationVersions}\n unifiedMigrationScript={unifiedMigrationScript}\n onUnifiedScriptChange={handleUnifiedScriptChange}\n />\n </>\n );\n}\n\nTableList.propTypes = {\n tableList: PropTypes.any,\n tablesInfo: PropTypes.any,\n allTableList: PropTypes.any,\n allTablesInfo: PropTypes.any,\n formSubmitted: PropTypes.bool,\n reloadComponents: PropTypes.any,\n};\n"],"names":["STATUS_CONFIG","ChangeSummaryChips","changes","status","chips","jsx","Chip","_a","_b","_c","_d","_e","Typography","Box","TableDiffDetail","item","tableName","jsxs","Alert","_f","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","col","_g","s","i","ImportSummaryDialog","open","onClose","summaryData","onApply","applying","migrationVersions","unifiedMigrationScript","onUnifiedScriptChange","unifiedScriptExpanded","setUnifiedScriptExpanded","useState","affectedCount","d","Dialog","DialogTitle","Divider","DialogContent","cfg","React","Accordion","p","AccordionSummary","FontAwesomeIcons","AccordionDetails","Editor","DialogActions","Button","PropTypes","TableDetails","lazy","TableList","tableList","tablesInfo","allTableList","allTablesInfo","formSubmitted","reloadComponents","searchQuery","setSearchQuery","selectedTable","setSelectedTable","syncedTableInfo","setSyncedTableInfo","tableInfo","setTableInfo","allTableInfo","setAllTableInfo","tableCompleteInfo","setTableCompleteInfo","filteredList","editMode","setEditMode","modalOpen","setModalOpen","tableForModal","setTableForModal","isCreateTableMode","setIsCreateTableMode","isSyncTableMode","setIsSyncTableMode","openDeleteModal","setOpenDeleteModal","translate","useTranslateProvider","loggedInUser","useSelector","state","isExportMode","setIsExportMode","selectedForExport","setSelectedForExport","importFileRef","useRef","importSummaryOpen","setImportSummaryOpen","importSummaryData","setImportSummaryData","importApplying","setImportApplying","importMigrationVersions","setImportMigrationVersions","setUnifiedMigrationScript","useForm","useEffect","info1","info2","createTableObject","mapToSQLiteType","sqlType","type","tbInfo","info","parsedColumns","columnArray","columnName","media","handleAddTable","handleCreateTable","handleModalClose","handleTableSelect","onTableChange","handleExportDownload","tables","name","json","blob","url","a","showToast","generateCreateTableScript","tableData","cols","c","generateRebuildScript","existingTable","importedTable","newCols","existingCols","newColNames","colList","pk","colDefs","pkLine","pkLine2","normalizeQuery","query","computeImportDiff","importedData","existingSynced","refTable","importedCols","refCols","sc","k","l","hasSchema","hasMeta","migrationScript","generateUnifiedScript","diffData","combinedScript","handleImportFileChange","e","file","reader","ev","parsed","diff","unified","execute","res","err","handleUnifiedScriptChange","newScript","handleApplyImport","toProcess","dtoList","idx","t","columns","allDataRes","executeAll","failedIndex","failedItem","errorMsg","migrationRes","Fragment","Paper","Tooltip","TextField","InputAdornment","Grid","Checkbox","List","index","isSelected","ListItem","IconButton","ListItemButton","newSet","ListItemText","Suspense","Autocomplete","x","option","_","newValue","params"],"mappings":";;;;;;;;;;;;AA0BA,MAAMA,KAAgB;AAAA,EACpB,WAAW,EAAE,OAAO,aAAa,OAAO,UAAA;AAAA,EACxC,UAAU,EAAE,OAAO,YAAY,OAAO,UAAA;AAAA,EACtC,eAAe,EAAE,OAAO,iBAAiB,OAAO,OAAA;AAAA,EAChD,YAAY,EAAE,OAAO,cAAc,OAAO,UAAA;AAC5C;AAEA,SAASC,GAAmB,EAAE,SAAAC,GAAS,QAAAC,KAAU;;AAC/C,QAAMC,IAAQ,CAAA;AACd,SAAID,MAAW,cACbC,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,KAAGC,IAAAL,EAAQ,iBAAR,gBAAAK,EAAsB,WAAU,CAAC;AAAA,QAC3C,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,MAGEC,IAAAN,EAAQ,iBAAR,QAAAM,EAAsB,UACxBJ,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,IAAIJ,EAAQ,aAAa,MAAM;AAAA,QACtC,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,IAEAO,IAAAP,EAAQ,mBAAR,QAAAO,EAAwB,UAC1BL,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,IAAIJ,EAAQ,eAAe,MAAM;AAAA,QACxC,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,IAEAQ,IAAAR,EAAQ,uBAAR,QAAAQ,EAA4B,UAC9BN,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,GAAGJ,EAAQ,mBAAmB,MAAM;AAAA,QAC3C,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,GAEAA,EAAQ,oBACVE,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,IAEAK,IAAAT,EAAQ,oBAAR,QAAAS,EAAyB,UAC3BP,EAAM;AAAA,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,GAAGJ,EAAQ,gBAAgB,MAAM;AAAA,QACxC,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;AAAA,MAJJ;AAAA,IAAA;AAAA,EAKN,GAECE,EAAM,UACTA,EAAM;AAAA,sBACHQ,GAAA,EAAsB,SAAQ,WAAU,OAAM,kBAAiB,iBAAhD,MAEhB;AAAA,EAAA,IAIJ,gBAAAP,EAACQ,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,KAAK,UAAU,OAAA,GAAW,UAAAT,EAAA,CAAM;AAErE;AAEA,SAASU,GAAgB,EAAE,MAAAC,KAAQ;;AACjC,QAAM,EAAE,WAAAC,GAAW,QAAAb,GAAQ,SAAAD,EAAA,IAAYa;AAEvC,2BACGF,GAAA,EAAI,IAAI,EAAE,GAAG,OACX,UAAA;AAAA,IAAAV,MAAW,eACV,gBAAAc,EAACC,IAAA,EAAM,UAAS,WAAU,IAAI,EAAE,IAAI,KAAK,IAAI,IAAA,GAAO,UAAA;AAAA,MAAA;AAAA,MACL;AAAA,MAC7C,gBAAAb,EAAC,YAAO,UAAA,eAAA,CAAY;AAAA,MAAS;AAAA,IAAA,GAC/B;AAAA,OAEAE,IAAAL,EAAQ,iBAAR,gBAAAK,EAAsB,UAAS,OAC/BC,IAAAN,EAAQ,mBAAR,gBAAAM,EAAwB,UAAS,OACjCC,IAAAP,EAAQ,uBAAR,gBAAAO,EAA4B,UAAS,KACrCP,EAAQ,qBACRC,MAAW,eACT,gBAAAc,EAACC,IAAA,EAAM,UAAS,WAAU,IAAI,EAAE,IAAI,KAAK,IAAI,IAAA,GAAO,UAAA;AAAA,MAAA;AAAA,MACI;AAAA,MACtD,gBAAAb,EAAC,YAAO,UAAA,oBAAA,CAAiB;AAAA,MAAS;AAAA,IAAA,GAEpC;AAAA,OAIFK,IAAAR,EAAQ,iBAAR,gBAAAQ,EAAsB,UAAS,OAC/BC,IAAAT,EAAQ,mBAAR,gBAAAS,EAAwB,UAAS,OACjCQ,IAAAjB,EAAQ,uBAAR,gBAAAiB,EAA4B,UAAS,MACrC,gBAAAd;AAAA,MAACe;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,IAAI;AAAA,UACJ,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,QAGhB,UAAA,gBAAAH,EAACI,IAAA,EAAM,MAAK,SACV,UAAA;AAAA,UAAA,gBAAAhB,EAACiB,MACC,UAAA,gBAAAL,EAACM,GAAA,EAAS,IAAI,EAAE,iBAAiB,kBAC/B,UAAA;AAAA,YAAA,gBAAAlB,EAACmB,GAAA,EAAU,IAAI,EAAE,YAAY,KAAK,UAAU,UAAA,GAAa,UAAA,SAAA,CAEzD;AAAA,YACA,gBAAAnB,EAACmB,KAAU,IAAI,EAAE,YAAY,KAAK,UAAU,UAAA,GAAa,UAAA,OAAA,CAEzD;AAAA,YACA,gBAAAnB,EAACmB,KAAU,IAAI,EAAE,YAAY,KAAK,UAAU,UAAA,GAAa,UAAA,SAAA,CAEzD;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,4BACCC,IAAA,EACG,UAAA;AAAA,aAAAvB,EAAQ,gBAAgB,CAAA,GAAI,IAAI,CAACwB,MACjC,gBAAAT;AAAA,cAACM;AAAA,cAAA;AAAA,gBAEC,IAAI,EAAE,iBAAiB,uBAAA;AAAA,gBAEvB,UAAA;AAAA,kBAAA,gBAAAlB;AAAA,oBAACmB;AAAA,oBAAA;AAAA,sBACC,IAAI,EAAE,UAAU,WAAW,YAAY,YAAA;AAAA,sBAEtC,UAAAE,EAAI;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEP,gBAAArB,EAACmB,KAAU,IAAI,EAAE,UAAU,UAAA,GAAc,YAAI,MAAK;AAAA,kBAClD,gBAAAnB,EAACmB,GAAA,EACC,UAAA,gBAAAnB,EAACC,GAAA,EAAK,MAAK,SAAQ,OAAM,SAAQ,OAAM,UAAA,CAAU,EAAA,CACnD;AAAA,gBAAA;AAAA,cAAA;AAAA,cAXK,OAAOoB,EAAI,IAAI;AAAA,YAAA,CAavB;AAAA,aACCxB,EAAQ,kBAAkB,CAAA,GAAI,IAAI,CAACwB,MACnC,gBAAAT;AAAA,cAACM;AAAA,cAAA;AAAA,gBAEC,IAAI,EAAE,iBAAiB,uBAAA;AAAA,gBAEvB,UAAA;AAAA,kBAAA,gBAAAlB;AAAA,oBAACmB;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,UAAU;AAAA,wBACV,YAAY;AAAA,wBACZ,gBAAgB;AAAA,wBAChB,OAAO;AAAA,sBAAA;AAAA,sBAGR,UAAAE,EAAI;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEP,gBAAArB;AAAA,oBAACmB;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,UAAU;AAAA,wBACV,gBAAgB;AAAA,wBAChB,OAAO;AAAA,sBAAA;AAAA,sBAGR,UAAAE,EAAI;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEP,gBAAArB,EAACmB,GAAA,EACC,UAAA,gBAAAnB,EAACC,GAAA,EAAK,MAAK,SAAQ,OAAM,WAAU,OAAM,QAAA,CAAQ,EAAA,CACnD;AAAA,gBAAA;AAAA,cAAA;AAAA,cAxBK,OAAOoB,EAAI,IAAI;AAAA,YAAA,CA0BvB;AAAA,aACCxB,EAAQ,sBAAsB,CAAA,GAAI,IAAI,CAACwB,MACvC,gBAAAT;AAAA,cAACM;AAAA,cAAA;AAAA,gBAEC,IAAI,EAAE,iBAAiB,uBAAA;AAAA,gBAEvB,UAAA;AAAA,kBAAA,gBAAAlB;AAAA,oBAACmB;AAAA,oBAAA;AAAA,sBACC,IAAI,EAAE,UAAU,WAAW,YAAY,YAAA;AAAA,sBAEtC,UAAAE,EAAI;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAENF,GAAA,EAAU,IAAI,EAAE,UAAU,aACzB,UAAA;AAAA,oBAAA,gBAAAnB;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,gBAAgB;AAAA,0BAChB,OAAO;AAAA,0BACP,aAAa;AAAA,wBAAA;AAAA,wBAGd,UAAAqB,EAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEP,gBAAArB,EAAC,QAAA,EAAM,UAAAqB,EAAI,QAAA,CAAQ;AAAA,kBAAA,GACrB;AAAA,kBACA,gBAAArB,EAACmB,GAAA,EACC,UAAA,gBAAAnB,EAACC,GAAA,EAAK,MAAK,SAAQ,OAAM,gBAAe,OAAM,UAAA,CAAU,EAAA,CAC1D;AAAA,gBAAA;AAAA,cAAA;AAAA,cAtBK,QAAQoB,EAAI,IAAI;AAAA,YAAA,CAwBxB;AAAA,UAAA,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAKHxB,EAAQ,oBACP,gBAAAe;AAAA,MAACJ;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,aAAa;AAAA,QAAA;AAAA,QAGf,UAAA;AAAA,UAAA,gBAAAR;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,IAAI,EAAE,YAAY,KAAK,OAAO,eAAA;AAAA,cAC/B,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAAK,EAACL,KAAW,SAAQ,WAAU,IAAI,EAAE,IAAI,KACtC,UAAA;AAAA,YAAA,gBAAAP,EAAC,QAAA,EAAM,UAAAH,EAAQ,iBAAiB,MAAK;AAAA,YACpC;AAAA,YACD,gBAAAG,EAAC,QAAA,EAAM,UAAAH,EAAQ,iBAAiB,GAAA,CAAG;AAAA,UAAA,EAAA,CACrC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,MAKHyB,IAAAzB,EAAQ,oBAAR,gBAAAyB,EAAyB,UAAS,KACjC,gBAAAV,EAACJ,KAAI,IAAI,EAAE,IAAI,IAAA,GACb,UAAA;AAAA,MAAA,gBAAAR;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI,EAAE,YAAY,KAAK,SAAS,SAAS,IAAI,IAAA;AAAA,UAC9C,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGAV,EAAQ,gBAAgB,IAAI,CAAC0B,GAAGC,MAC/B,gBAAAZ;AAAA,QAACJ;AAAA,QAAA;AAAA,UAEC,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,IAAI,KAAA;AAAA,UAEzD,UAAA;AAAA,YAAA,gBAAAI;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI,EAAE,OAAO,kBAAkB,UAAU,IAAA;AAAA,gBAExC,UAAA;AAAA,kBAAAgB,EAAE;AAAA,kBAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEX,gBAAAX,EAACL,GAAA,EAAW,SAAQ,WAClB,UAAA;AAAA,cAAA,gBAAAP,EAAC,QAAA,EAAM,UAAA,OAAOuB,EAAE,IAAI,GAAE;AAAA,cAAO;AAAA,cAAG,gBAAAvB,EAAC,QAAA,EAAM,UAAA,OAAOuB,EAAE,EAAE,EAAA,CAAE;AAAA,YAAA,EAAA,CACtD;AAAA,UAAA;AAAA,QAAA;AAAA,QAXKC;AAAA,MAAA,CAaR;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GAGJ;AAEJ;AAEA,SAAwBC,GAAoB;AAAA,EAC1C,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,uBAAAC;AACF,GAAG;AACD,QAAM,CAACC,GAAuBC,CAAwB,IAAIC,EAAS,EAAI,GACjEC,IAAgBT,EAAY;AAAA,IAChC,CAACU,MAAMA,EAAE,WAAW;AAAA,EAAA,EACpB;AAEF,SACE,gBAAA1B;AAAA,IAAC2B;AAAA,IAAA;AAAA,MACC,MAAAb;AAAA,MACA,SAAAC;AAAA,MACA,UAAS;AAAA,MACT,WAAS;AAAA,MACT,YAAY,EAAE,IAAI,EAAE,cAAc,IAAE;AAAA,MAEpC,UAAA;AAAA,QAAA,gBAAAf,EAAC4B,MAAY,IAAI,EAAE,IAAI,GAAG,YAAY,OAAO,UAAA;AAAA,UAAA;AAAA,UAE3C,gBAAA5B,EAACL,GAAA,EAAW,SAAQ,SAAQ,OAAM,kBAC/B,UAAA;AAAA,YAAA8B;AAAA,YAAc;AAAA,YAA8BT,EAAY;AAAA,YAAO;AAAA,UAAA,EAAA,CAElE;AAAA,QAAA,GACF;AAAA,0BACCa,IAAA,EAAQ;AAAA,0BACRC,IAAA,EAAc,IAAI,EAAE,GAAG,KACtB,UAAA;AAAA,UAAA,gBAAA1C,EAACe,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,YAAA,gBAAAhB,EAACiB,MACC,UAAA,gBAAAL,EAACM,GAAA,EAAS,IAAI,EAAE,iBAAiB,kBAC/B,UAAA;AAAA,cAAA,gBAAAlB,EAACmB,GAAA,EAAU,IAAI,EAAE,YAAY,KAAK,IAAI,EAAA,GAAK,UAAA,aAAA,CAE3C;AAAA,gCACCA,GAAA,EAAU,IAAI,EAAE,YAAY,IAAA,GAAO,UAAA,UAAM;AAAA,gCACzCA,GAAA,EAAU,IAAI,EAAE,YAAY,IAAA,GAAO,UAAA,UAAA,CAAO;AAAA,YAAA,EAAA,CAC7C,EAAA,CACF;AAAA,YACA,gBAAAnB,EAACoB,IAAA,EACE,UAAAQ,EAAY,IAAI,CAAClB,MAAS;AACzB,oBAAMiC,IACJhD,GAAce,EAAK,MAAM,KAAKf,GAAc;AAC9C,qBACE,gBAAAiB,EAACgC,GAAM,UAAN,EACC,UAAA;AAAA,gBAAA,gBAAAhC;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,SAAS;AAAA,wBACP,cACER,EAAK,WAAW,eAAe,SAAS;AAAA,sBAAA;AAAA,oBAC5C;AAAA,oBAGF,UAAA;AAAA,sBAAA,gBAAAV;AAAA,wBAACmB;AAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,YAAY;AAAA,4BACZ,UAAU;AAAA,4BACV,IAAI;AAAA,0BAAA;AAAA,0BAGL,UAAAT,EAAK;AAAA,wBAAA;AAAA,sBAAA;AAAA,wCAEPS,GAAA,EACC,UAAA,gBAAAnB;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,OAAO0C,EAAI;AAAA,0BACX,OAAOA,EAAI;AAAA,0BACX,MAAK;AAAA,0BACL,IAAI,EAAE,YAAY,IAAA;AAAA,wBAAI;AAAA,sBAAA,GAE1B;AAAA,wCACCxB,GAAA,EACC,UAAA,gBAAAnB;AAAA,wBAACJ;AAAA,wBAAA;AAAA,0BACC,SAASc,EAAK;AAAA,0BACd,QAAQA,EAAK;AAAA,wBAAA;AAAA,sBAAA,EACf,CACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEDA,EAAK,WAAW,gBACf,gBAAAV,EAACkB,GAAA,EACC,UAAA,gBAAAlB;AAAA,kBAACmB;AAAA,kBAAA;AAAA,oBACC,SAAS;AAAA,oBACT,IAAI;AAAA,sBACF,IAAI;AAAA,sBACJ,IAAI;AAAA,sBACJ,IAAI;AAAA,sBACJ,iBAAiB;AAAA,oBAAA;AAAA,oBAGnB,UAAA,gBAAAnB;AAAA,sBAACS;AAAA,sBAAA;AAAA,wBACC,MAAAC;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA,EACF,CACF;AAAA,cAAA,EAAA,GAhDiBA,EAAK,SAkD1B;AAAA,YAEJ,CAAC,EAAA,CACH;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,UAGCsB,KACC,gBAAAhC,EAACQ,GAAA,EAAI,IAAI,EAAE,GAAG,GAAG,WAAW,aAAa,aAAa,UAAA,GACpD,UAAA,gBAAAI;AAAA,YAACiC;AAAA,YAAA;AAAA,cACC,UAAUX;AAAA,cACV,UAAU,MAAMC,EAAyB,CAACW,MAAM,CAACA,CAAC;AAAA,cAClD,IAAI;AAAA,gBACF,WAAW;AAAA,gBACX,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,cAAc;AAAA,cAAA;AAAA,cAGhB,UAAA;AAAA,gBAAA,gBAAA9C;AAAA,kBAAC+C;AAAA,kBAAA;AAAA,oBACC,YACE,gBAAA/C;AAAA,sBAACgD;AAAA,sBAAA;AAAA,wBACC,UAAS;AAAA,wBACT,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAId,UAAA,gBAAApC;AAAA,sBAACJ;AAAA,sBAAA;AAAA,wBACC,IAAI;AAAA,0BACF,SAAS;AAAA,0BACT,gBAAgB;AAAA,0BAChB,YAAY;AAAA,0BACZ,OAAO;AAAA,0BACP,IAAI;AAAA,wBAAA;AAAA,wBAGN,UAAA;AAAA,0BAAA,gBAAAI,EAACL,KAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,OAC9C,UAAA;AAAA,4BAAA,gBAAAP;AAAA,8BAACgD;AAAA,8BAAA;AAAA,gCACC,UAAS;AAAA,gCACT,WAAU;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BACV;AAAA,0BAAA,GAEJ;AAAA,0BACCjB,KAAqBA,EAAkB,iBAAiB,UACvD,gBAAAnB;AAAA,4BAACL;AAAA,4BAAA;AAAA,8BACC,SAAQ;AAAA,8BACR,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAA;AAAA,8BAC5C,UAAA;AAAA,gCAAA;AAAA,kDACS,UAAA,EAAO,UAAA;AAAA,kCAAA;AAAA,kCAAEwB,EAAkB,eAAe;AAAA,gCAAA,GAAE;AAAA,gCACpD,gBAAA/B;AAAA,kCAACgD;AAAA,kCAAA;AAAA,oCACC,UAAS;AAAA,oCACT,WAAU;AAAA,kCAAA;AAAA,gCAAA;AAAA,gCACV;AAAA,kDACI,UAAA,EAAO,UAAA;AAAA,kCAAA;AAAA,kCAAEjB,EAAkB,aAAa;AAAA,gCAAA,EAAA,CAAE;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAClD;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAEJ;AAAA,gBAAA;AAAA,kCAEDkB,IAAA,EAAiB,IAAI,EAAE,GAAG,KACzB,UAAA,gBAAAjD;AAAA,kBAACkD;AAAA,kBAAA;AAAA,oBACC,QAAO;AAAA,oBACP,iBAAgB;AAAA,oBAChB,OAAM;AAAA,oBACN,SAAS;AAAA,sBACP,UAAU;AAAA,sBACV,SAAS,EAAE,SAAS,GAAA;AAAA,sBACpB,UAAU;AAAA,sBACV,sBAAsB;AAAA,sBACtB,UAAU;AAAA,oBAAA;AAAA,oBAEZ,OAAOlB;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA,EACZ,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,GAEJ;AAAA,0BACCQ,IAAA,EAAQ;AAAA,QACT,gBAAA7B,EAACuC,IAAA,EAAc,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,EAAA,GACtC,UAAA;AAAA,UAAA,gBAAAnD;AAAA,YAACoD;AAAA,YAAA;AAAA,cACC,SAASzB;AAAA,cACT,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,IAAI,EAAE,cAAc,GAAG,eAAe,OAAA;AAAA,cACtC,UAAUG;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAA9B;AAAA,YAACoD;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,UAAUf,MAAkB,KAAKP;AAAA,cACjC,SAASD;AAAA,cACT,IAAI,EAAE,cAAc,GAAG,eAAe,QAAQ,WAAW,OAAA;AAAA,cACzD,WAAWC,IAAW,OAAO,gBAAA9B,EAACgD,GAAA,EAAiB,UAAS,WAAU;AAAA,cAEjE,UAAAlB,IAAW,cAAc,iBAAiBO,CAAa;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1D,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAZ,GAAoB,YAAY;AAAA,EAC9B,MAAM4B,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAAA,EACxB,aAAaA,EAAU,MAAM;AAAA,EAC7B,SAASA,EAAU,KAAK;AAAA,EACxB,UAAUA,EAAU;AAAA,EACpB,mBAAmBA,EAAU;AAAA,EAC7B,wBAAwBA,EAAU;AAAA,EAClC,uBAAuBA,EAAU,KAAK;AACxC;AAEA5C,GAAgB,YAAY;AAAA,EAC1B,MAAM4C,EAAU;AAClB;AACAzD,GAAmB,YAAY;AAAA,EAC7B,SAASyD,EAAU;AAAA,EACnB,QAAQA,EAAU;AACpB;AC9dA,MAAMC,KAAeC,GAAK,MAAM,OAAO,4BAAgB,CAAC;AAExD,SAAwBC,GAAU;AAAA,EAChC,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC;AACF,GAAG;AACD,QAAM,CAACC,GAAaC,CAAc,IAAI5B,EAAS,EAAE,GAC3C,CAAC6B,GAAeC,CAAgB,IAAI9B,EAAS,EAAE,GAC/C,CAAC+B,GAAiBC,CAAkB,IAAIhC,EAAS,CAAA,CAAE,GACnD,CAACiC,GAAWC,CAAY,IAAIlC,EAAS,CAAA,CAAE,GACvC,CAACmC,GAAcC,EAAe,IAAIpC,EAAS,CAAA,CAAE,GAC7C,CAACqC,IAAmBC,CAAoB,IAAItC,EAAS,CAAA,CAAE,GACvDuC,IAAelB,IACjBA,EAAU;AAAA,IAAO,CAAC9C,MAChBA,EAAU,YAAA,EAAc,SAASoD,EAAY,aAAa;AAAA,EAAA,IAE5D,CAAA,GACE,CAACa,IAAUC,CAAW,IAAIzC,EAAS,EAAK,GACxC,CAAC0C,IAAWC,CAAY,IAAI3C,EAAS,EAAK,GAC1C,CAAC4C,GAAeC,CAAgB,IAAI7C,EAAA,GACpC,CAAC8C,IAAmBC,CAAoB,IAAI/C,EAAS,EAAK,GAC1D,CAACgD,IAAiBC,EAAkB,IAAIjD,EAAS,EAAK,GACtD,CAACkD,IAAiBC,EAAkB,IAAInD,EAAS,EAAK,GACtD,EAAE,WAAAoD,GAAA,IAAcC,GAAA,GAChBC,KAAeC,GAAY,CAACC,MAAUA,EAAM,aAAa,KAAK,EAAE,GAGhE,CAACC,GAAcC,EAAe,IAAI1D,EAAS,EAAK,GAChD,CAAC2D,GAAmBC,CAAoB,IAAI5D,EAAS,oBAAI,KAAK,GAG9D6D,KAAgBC,GAAO,IAAI,GAC3B,CAACC,IAAmBC,EAAoB,IAAIhE,EAAS,EAAK,GAC1D,CAACiE,IAAmBC,EAAoB,IAAIlE,EAAS,CAAA,CAAE,GACvD,CAACmE,IAAgBC,CAAiB,IAAIpE,EAAS,EAAK,GACpD,CAACqE,IAAyBC,EAA0B,IAAItE,EAAS,CAAA,CAAE,GACnE,CAACJ,IAAwB2E,EAAyB,IAAIvE,EAAS,EAAE;AAInE,EAAAwE,GAAQ;AAAA,IACV,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,EACV,CACD,GAEDC,GAAU,MAAM;AACd,QAAIC,IAAQ,CAAA,GACRC,IAAQ,CAAA;AACZ,IAAA7C,EAAiBT,EAAU,CAAC,CAAC,GAC7BqD,IAAQE,GAAkBtD,CAAU,GACpCU,EAAmB,CAACD,OAAqB,EAAE,GAAGA,GAAiB,GAAG2C,IAAQ,GAC1EC,IAAQC,GAAkBpD,CAAa,GACvCY,GAAgB,CAACD,OAAkB,EAAE,GAAGA,GAAc,GAAGwC,IAAQ;AAAA,EACnE,GAAG,CAACrD,GAAYE,CAAa,CAAC,GAE9BiD,GAAU,MAAM;AACd,IAAAvC,EAAa,MAAMH,EAAgBV,EAAU,CAAC,CAAC,CAAC,GAChDiB,EAAqB,MAAMH,EAAad,EAAU,CAAC,CAAC,CAAC;AAAA,EACvD,GAAG,CAACU,GAAiBI,CAAY,CAAC;AAElC,QAAM0C,KAAkB,CAACC,MAAY;AACnC,UAAMC,IAAOD,EAAQ,YAAA;AACrB,WACEC,EAAK,SAAS,KAAK,KACnBA,EAAK,SAAS,WAAW,KACzBA,MAAS,aACTA,EAAK,SAAS,QAAQ,KACtBA,EAAK,SAAS,MAAM,IAEb,aAEPA,EAAK,SAAS,MAAM,KACpBA,EAAK,SAAS,MAAM,KACpBA,EAAK,SAAS,SAAS,GAEhB;AAAA,EAGX,GAEMH,KAAoB,CAACI,MAAW;AACpC,UAAMC,IAAO,CAAA;AACb,WAAAD,EAAO,QAAQ,CAAC1G,MAAS;AACvB,YAAM4G,IAAgB,KAAK,MAAM5G,EAAK,UAAU,GAC1C6G,IAAc,OAAO,KAAKD,CAAa,EAAE,IAAI,CAACE,OAAgB;AAAA,QAClE,MAAMA;AAAA,QACN,MAAMP,GAAgBK,EAAcE,CAAU,CAAC;AAAA,MAAA,EAC/C,GAEIC,IACJ/G,EAAK,qBACD,KAAK,MAAMA,EAAK,kBAAkB,IAClC;AACN,MAAA2G,EAAK3G,EAAK,SAAS,IAAI;AAAA,QACrB,YAAY6G;AAAA,QACZ,iBAAiB7G,EAAK,kBAAkBA,EAAK,kBAAkB;AAAA,QAC/D,YAAYA,EAAK,aAAaA,EAAK,aAAa;AAAA,QAChD,aAAaA,EAAK,cAAcA,EAAK,cAAc;AAAA,QACnD,UAAUA,EAAK,aAAa,SAAYA,EAAK,WAAW;AAAA,QACxD,UAAUA,EAAK,aAAa,SAAYA,EAAK,WAAW;AAAA,QACxD,oBAAoB+G;AAAA,QACpB,eAAe/G,EAAK,gBAAgBA,EAAK,gBAAgB;AAAA,MAAA;AAAA,IAE7D,CAAC,GACM2G;AAAA,EACT,GAEMK,KAAiB,MAAM;AAC3B,IAAAvC,EAAqB,EAAK,GAC1BJ,EAAa,EAAI,GACjBE,EAAA;AAAA,EACF,GAEM0C,KAAoB,MAAM;AAC9B,IAAA9C,EAAY,EAAK,GACjBM,EAAqB,EAAI;AAAA,EAC3B,GAEMyC,KAAmB,MAAM;AAC7B,IAAA7C,EAAa,EAAK;AAAA,EACpB,GAEM8C,KAAoB,MAAM;AAC9B,QAAI7C,GAAe;AACjB,YAAMX,IAAY,EAAE,GAAGE,EAAaS,CAAa,EAAA;AACjD,MAAIX,MACFA,EAAU,aAAa,CAAA,IAEzBH,EAAiBc,CAAa,GAC9BV,EAAa,MAAMD,CAAS,GAC5BK,EAAqB,MAAMH,EAAaS,CAAa,CAAC,GACtDK,GAAmB,EAAI,GACvBF,EAAqB,EAAK,GAC1BN,EAAY,EAAI;AAAA,IAClB;AACA,IAAAE,EAAa,EAAK,GAClBE,EAAiB,MAAM,EAAE;AAAA,EAC3B,GAEM6C,KAAgB,CAACnH,MAAc;AACnC,IAAAuD,EAAiBvD,CAAS,GAC1B2D,EAAa,MAAMH,EAAgBxD,CAAS,CAAC,GAC7C+D,EAAqB,MAAMH,EAAa5D,CAAS,CAAC,GAClDkE,EAAY,EAAK,GACjBM,EAAqB,EAAK,GAC1BE,GAAmB,EAAK;AAAA,EAC1B,GAGM0C,KAAuB,MAAM;AACjC,QAAIhC,EAAkB,SAAS,EAAG;AAClC,UAAMiC,IAAS,CAAA;AACf,IAAAjC,EAAkB,QAAQ,CAACkC,MAAS;AAClC,MAAI9D,EAAgB8D,CAAI,QAAUA,CAAI,IAAI9D,EAAgB8D,CAAI;AAAA,IAChE,CAAC;AACD,UAAMC,IAAO,KAAK;AAAA,MAChB,EAAE,aAAY,oBAAI,QAAO,YAAA,GAAe,QAAAF,EAAA;AAAA,MACxC;AAAA,MACA;AAAA,IAAA,GAEIG,IAAO,IAAI,KAAK,CAACD,CAAI,GAAG,EAAE,MAAM,oBAAoB,GACpDE,IAAM,IAAI,gBAAgBD,CAAI,GAC9BE,IAAI,SAAS,cAAc,GAAG;AACpC,IAAAA,EAAE,OAAOD,GACTC,EAAE,WAAW,aAAa,KAAK,IAAA,CAAK,SACpCA,EAAE,MAAA,GACF,IAAI,gBAAgBD,CAAG,GACvBtC,GAAgB,EAAK,GACrBE,EAAqB,oBAAI,KAAK,GAC9BsC,EAAU;AAAA,MACR,SAAS,YAAYvC,EAAkB,IAAI;AAAA,MAC3C,MAAM;AAAA,IAAA,CACP;AAAA,EACH,GAGMwC,KAA4B,CAAC5H,GAAW6H,MAAc;AAC1D,UAAMC,IAAOD,EAAU,cAAc,CAAA;AACrC,QAAIjH,IAAI,gBAAgBZ,CAAS;AAAA;AACjC,WAAAY,KAAKkH,EAAK,IAAI,CAACC,MAAM,KAAKA,EAAE,IAAI,IAAIA,EAAE,IAAI,EAAE,EAAE,KAAK;AAAA,CAAK,GACpDF,EAAU,eACZjH,KAAK;AAAA,eAAmBZ,CAAS,sBAAsB6H,EAAU,UAAU,MAC7EjH,KAAK;AAAA,KACEA;AAAA,EACT,GAEMoH,KAAwB,CAAChI,GAAWiI,GAAeC,MAAkB;AACzE,UAAMC,IAAUD,EAAc,cAAc,CAAA,GACtCE,IAAeH,EAAc,cAAc,CAAA,GAC3CI,IAAc,IAAI,IAAIF,EAAQ,IAAI,CAACJ,MAAMA,EAAE,IAAI,CAAC,GAIhDO,IAHaF,EAChB,OAAO,CAACL,MAAMM,EAAY,IAAIN,EAAE,IAAI,CAAC,EACrC,IAAI,CAACA,MAAMA,EAAE,IAAI,EACO,KAAK,IAAI,GAC9BQ,IAAKL,EAAc,YACnBM,IAAUL,EAAQ,IAAI,CAACJ,MAAM,KAAKA,EAAE,IAAI,IAAIA,EAAE,IAAI,EAAE,EAAE,KAAK;AAAA,CAAK,GAChEU,IAASF,IACX;AAAA,eAAmBvI,CAAS,4BAA4BuI,CAAE,MAC1D,IACEG,KAAUH,IACZ;AAAA,eAAmBvI,CAAS,sBAAsBuI,CAAE,MACpD;AACJ,WAAO;AAAA,MACL;AAAA,MACA,gBAAgBvI,CAAS;AAAA,EAAawI,CAAO,GAAGC,CAAM;AAAA;AAAA,MACtD;AAAA,MACAH,IACI,eAAetI,CAAS,WAAWsI,CAAO;AAAA,SAAaA,CAAO,SAAStI,CAAS,MAChF;AAAA,MACJ;AAAA,MACA,cAAcA,CAAS;AAAA,MACvB;AAAA,MACA,gBAAgBA,CAAS;AAAA,EAAOwI,CAAO,GAAGE,EAAO;AAAA;AAAA,MACjD;AAAA,MACAJ,IACI,eAAetI,CAAS,KAAKsI,CAAO;AAAA,SAAaA,CAAO,SAAStI,CAAS,YAC1E;AAAA,MACJ;AAAA,MACA,cAAcA,CAAS;AAAA,IAAA,EACvB,KAAK;AAAA;AAAA,CAAM;AAAA,EACf,GAEM2I,IAAiB,CAACC,OAAWA,KAAS,IAAI,QAAQ,QAAQ,GAAG,EAAE,KAAA,GAG/DC,KAAoB,CAACC,MAAiB;AAC1C,UAAMzB,IAASyB,EAAa,UAAU,CAAA;AACtC,WAAO,OAAO,QAAQzB,CAAM,EAAE,IAAI,CAAC,CAACrH,GAAWkI,CAAa,MAAM;AAChE,YAAMa,IAAiBvF,EAAgBxD,CAAS,GAE1CgJ,IAAWD,GACX7J,IAAU;AAAA,QACd,cAAc,CAAA;AAAA,QACd,gBAAgB,CAAA;AAAA,QAChB,oBAAoB,CAAA;AAAA,QACpB,kBAAkB;AAAA,QAClB,iBAAiB,CAAA;AAAA,MAAC;AAEpB,UAAIC,IAAS;AAEb,UAAI,CAAC4J;AACH,QAAA5J,IAAS,aACTD,EAAQ,eAAegJ,EAAc,cAAc,CAAA;AAAA,WAC9C;AACL,cAAMe,IAAe,IAAI;AAAA,WACtBf,EAAc,cAAc,CAAA,GAAI,IAAI,CAACH,MAAM,CAACA,EAAE,MAAMA,EAAE,IAAI,CAAC;AAAA,QAAA,GAExDmB,IAAU,IAAI;AAAA,WACjBF,EAAS,cAAc,CAAA,GAAI,IAAI,CAACjB,MAAM,CAACA,EAAE,MAAMA,EAAE,IAAI,CAAC;AAAA,QAAA;AAuBzD,YArBA7I,EAAQ,gBAAgBgJ,EAAc,cAAc,CAAA,GAAI;AAAA,UACtD,CAACH,MAAM,CAACmB,EAAQ,IAAInB,EAAE,IAAI;AAAA,QAAA,GAE5B7I,EAAQ,kBAAkB8J,EAAS,cAAc,CAAA,GAAI;AAAA,UACnD,CAACjB,MAAM,CAACkB,EAAa,IAAIlB,EAAE,IAAI;AAAA,QAAA,GAEjC7I,EAAQ,sBAAsBgJ,EAAc,cAAc,IACvD,OAAO,CAACH,MAAMmB,EAAQ,IAAInB,EAAE,IAAI,KAAKmB,EAAQ,IAAInB,EAAE,IAAI,MAAMA,EAAE,IAAI,EACnE,IAAI,CAACA,OAAO;AAAA,UACX,MAAMA,EAAE;AAAA,UACR,SAASmB,EAAQ,IAAInB,EAAE,IAAI;AAAA,UAC3B,SAASA,EAAE;AAAA,QAAA,EACX,GACJ7I,EAAQ,mBACNgJ,EAAc,eAAec,EAAS,aAClC;AAAA,UACE,MAAMA,EAAS,cAAc;AAAA,UAC7B,IAAId,EAAc,cAAc;AAAA,QAAA,IAElC,MAEFa,GAAgB;AAClB,gBAAMI,IAAK,CAAA;AACX;AAAA,YACE,CAAC,iBAAiB,iBAAiB;AAAA,YACnC,CAAC,YAAY,WAAW;AAAA,YACxB,CAAC,YAAY,WAAW;AAAA,UAAA,EACxB,QAAQ,CAAC,CAACC,GAAGC,EAAC,MAAM;AACpB,YAAI,OAAOnB,EAAckB,CAAC,CAAC,MAAM,OAAOL,EAAeK,CAAC,CAAC,KACvDD,EAAG,KAAK;AAAA,cACN,OAAOE;AAAA,cACP,MAAMN,EAAeK,CAAC;AAAA,cACtB,IAAIlB,EAAckB,CAAC;AAAA,YAAA,CACpB;AAAA,UACL,CAAC,GAECT,EAAeT,EAAc,eAAe,MAC5CS,EAAeI,EAAe,eAAe,KAE7CI,EAAG,KAAK;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,IAAI;AAAA,UAAA,CACL,GAGDR,EAAeT,EAAc,WAAW,MACxCS,EAAeI,EAAe,WAAW,KAEzCI,EAAG,KAAK;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,IAAI;AAAA,UAAA,CACL,GAEHjK,EAAQ,kBAAkBiK;AAAA,QAC5B;AAEA,cAAMG,KACJpK,EAAQ,aAAa,SAAS,KAC9BA,EAAQ,eAAe,SAAS,KAChCA,EAAQ,mBAAmB,SAAS,KACpCA,EAAQ,kBACJqK,IAAUrK,EAAQ,gBAAgB,SAAS;AACjD,QAAAC,IAASmK,MAAaC,IAAU,aAAa;AAAA,MAC/C;AAEA,UAAIC,IAAkB;AACtB,aAAIrK,MAAW,cACbqK,IAAkB5B,GAA0B5H,GAAWkI,CAAa,IAEpE/I,MAAW,iBACVD,EAAQ,aAAa,SAAS,KAC7BA,EAAQ,eAAe,SAAS,KAChCA,EAAQ,mBAAmB,SAAS,KACpCA,EAAQ,sBAEVsK,IAAkBxB;AAAA,QAChBhI;AAAA,QACAgJ;AAAA,QACAd;AAAA,MAAA,IAIG;AAAA,QACL,WAAAlI;AAAA,QACA,QAAAb;AAAA,QACA,SAAAD;AAAA,QACA,eAAAgJ;AAAA,QACA,eAAec;AAAA,QACf,iBAAAQ;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,GAEMC,KAAwB,CAACC,MAAa;AAC1C,QAAIC,IAAiB;AAErB,WADkBD,EAAS,OAAO,CAAC/H,MAAMA,EAAE,WAAW,YAAY,EACxD,QAAQ,CAAC5B,MAAS;;AAC1B,MAAIA,EAAK,oBACP4J,KAAkB;AAAA,GAClBA,KAAkB,aAAa5J,EAAK,SAAS;AAAA,GACzCA,EAAK,WAAW,cAClB4J,KAAkB;AAAA,KAElBA,KAAkB;AAAA,IACdpK,IAAAQ,EAAK,QAAQ,iBAAb,QAAAR,EAA2B,WAC7BoK,KAAkB,eAAe5J,EAAK,QAAQ,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,KACtFP,IAAAO,EAAK,QAAQ,mBAAb,QAAAP,EAA6B,WAC/BmK,KAAkB,iBAAiB5J,EAAK,QAAQ,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,KAC1FN,IAAAM,EAAK,QAAQ,uBAAb,QAAAN,EAAiC,WACnCkK,KAAkB,wBAAwB5J,EAAK,QAAQ,mBAAmB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IACzIA,EAAK,QAAQ,qBACf4J,KAAkB;AAAA,KAEtBA,KAAkB;AAAA;AAAA,GAClBA,KAAkB5J,EAAK,gBAAgB,KAAA,IAAS;AAAA;AAAA;AAAA,IAEpD,CAAC,GACM4J;AAAA,EACT,GAGMC,KAAyB,CAACC,MAAM;;AACpC,UAAMC,KAAOvK,IAAAsK,EAAE,OAAO,UAAT,gBAAAtK,EAAiB;AAC9B,QAAI,CAACuK,EAAM;AACX,UAAMC,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAAS,CAACC,MAAO;AACtB,UAAI;AACF,cAAMC,IAAS,KAAK,MAAMD,EAAG,OAAO,MAAM;AAC1C,YAAI,CAACC,EAAO;AACV,gBAAM,IAAI,MAAM,uCAAuC;AACzD,cAAMC,IAAOrB,GAAkBoB,CAAM;AACrC,QAAAtE,GAAqBuE,CAAI;AACzB,cAAMC,IAAUV,GAAsBS,CAAI;AAC1C,QAAAlE,GAA0BmE,CAAO,GAEjCC,GAAQ,EAAE,MAAM,2CAAA,CAA4C,EACzD,KAAK,CAACC,MAAQ;;AACb,UAAAtE,KAA2BvG,KAAAD,IAAA8K,KAAA,gBAAAA,EAAK,SAAL,gBAAA9K,EAAW,WAAX,gBAAAC,EAAoB,OAAM,CAAA,CAAE;AAAA,QACzD,CAAC,EACA,MAAM,MAAMuG,GAA2B,CAAA,CAAE,CAAC,GAE7CN,GAAqB,EAAI;AAAA,MAC3B,SAAS6E,GAAK;AACZ,QAAA3C,EAAU,EAAE,SAAS,kBAAkB2C,EAAI,OAAO,IAAI,MAAM,SAAS;AAAA,MACvE;AAAA,IACF,GACAP,EAAO,WAAWD,CAAI,GACtBD,EAAE,OAAO,QAAQ;AAAA,EACnB,GAEMU,KAA4B,CAACC,MAAc;AAC/C,IAAAxE,GAA0BwE,CAAS;AAAA,EACrC,GAEMC,KAAoB,YAAY;;AACpC,UAAMC,IAAYhF,GAAkB;AAAA,MAClC,CAAC/D,MAAMA,EAAE,WAAW;AAAA,IAAA;AAEtB,QAAI,CAAC+I,EAAU,QAAQ;AACrB,MAAA/C,EAAU,EAAE,SAAS,qBAAqB,MAAM,QAAQ;AACxD;AAAA,IACF;AAEA,IAAA9B,EAAkB,EAAI;AAEtB,UAAM8E,IAAUD,EAAU,IAAI,CAAC3K,GAAM6K,MAAQ;AAC3C,YAAMC,IAAI9K,EAAK,eACT+K,IAAU,CAAA;AAChB,cAACD,EAAE,cAAc,CAAA,GAAI,QAAQ,CAAC,MAAM;AAClC,QAAAC,EAAQ,EAAE,IAAI,IAAI,EAAE;AAAA,MACtB,CAAC,GAEM;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,UACV,WAAW/K,EAAK,aAAa;AAAA,UAC7B,eAAe,CAAC,CAAC8K,EAAE;AAAA,UACnB,YAAY,KAAK,UAAUC,CAAO,KAAK;AAAA,UACvC,YAAYD,EAAE,cAAc;AAAA,UAC5B,iBAAiBA,EAAE,mBAAmB;AAAA,UACtC,aAAaA,EAAE,eAAe;AAAA,UAC9B,UAAU,CAAC,CAACA,EAAE;AAAA,UACd,UAAU,CAAC,CAACA,EAAE;AAAA,UACd,oBAAoBA,EAAE,WAClB,KAAK,UAAUA,EAAE,sBAAsB,CAAA,CAAE,IACzC;AAAA,UACJ,YAAY9F,MAAgB;AAAA,UAC5B,UAAU;AAAA,QAAA;AAAA,QAEZ,UAAU6F;AAAA,MAAA;AAAA,IAEd,CAAC;AAED,QAAI;AACF,YAAMG,KAAc,MAAMC,GAAWL,CAAO,GAAG;AAE/C,UADiBI,KAAA,gBAAAA,EAAY,KAAK,CAACV,MAAQA,EAAI,WAAW,IAC5C;AACZ,cAAMY,IAAcF,EAAW,UAAU,CAACV,MAAQA,EAAI,WAAW,CAAC,GAC5Da,IAAaR,EAAUO,CAAW,GAClCE,MAAW5L,IAAAwL,EAAWE,CAAW,MAAtB,gBAAA1L,EAAyB,YAAW;AACrD,QAAAoI,EAAU;AAAA,UACR,SAAS,kBAAkBuD,EAAW,SAAS,KAAKC,CAAQ;AAAA,UAC5D,MAAM;AAAA,QAAA,CACP,GACDtF,EAAkB,EAAK;AACvB;AAAA,MACF;AAEA,UAAIxE,GAAuB,QAAQ;AACjC,cAAM+J,KACJ,MAAMhB,GAAQ;AAAA,UACZ,MAAM;AAAA,UACN,YAAY;AAAA,YACV,iBAAiB/I;AAAA,YACjB,YAAY0D,MAAgB;AAAA,YAC5B,mBAAmB;AAAA,UAAA;AAAA,QACrB,CACD,GACD;AAEF,SAAIqG,KAAA,gBAAAA,EAAc,YAAW,KAC3BzD,EAAU;AAAA,UACR,SAAS,sCAAsCyD,KAAA,gBAAAA,EAAc,OAAO;AAAA,UACpE,MAAM;AAAA,QAAA,CACP;AAAA,MAEL;AAEA,MAAAvF,EAAkB,EAAK,GACvBJ,GAAqB,EAAK,GAC1BtC,EAAiB,CAAChB,MAAM,CAACA,CAAC,GAC1BwF,EAAU,EAAE,SAAS,gCAAgC,MAAM,WAAW;AAAA,IACxE,SAAS2C,GAAK;AACZ,MAAA3C,EAAU;AAAA,QACR,SAAS,2BAA2B2C,CAAG;AAAA,QACvC,MAAM;AAAA,MAAA,CACP,GACDzE,EAAkB,EAAK;AAAA,IACzB;AAAA,EACF;AAEA,SACE,gBAAA5F,EAAAoL,IAAA,EAEE,UAAA;AAAA,IAAA,gBAAApL;AAAA,MAACqL;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,IAAI;AAAA,UACF,GAAG,EAAE,IAAI,KAAK,IAAI,EAAA;AAAA,UAClB,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,cAAc;AAAA,UACd,iBAAiB;AAAA,QAAA;AAAA,QAInB,UAAA;AAAA,UAAA,gBAAArL,EAACJ,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,YAAA,gBAAAI;AAAA,cAACJ;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,KAAK;AAAA,gBAAA;AAAA,gBAGP,UAAA;AAAA,kBAAA,gBAAAI,EAACJ,GAAA,EAAI,IAAI,EAAE,UAAU,EAAE,IAAI,QAAQ,IAAI,MAAA,EAAM,GAC3C,UAAA;AAAA,oBAAA,gBAAAR;AAAA,sBAACO;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,KAAK,OAAO,gBAAgB,IAAI,IAAA;AAAA,wBAEjD,aAAU,qBAAqB;AAAA,sBAAA;AAAA,oBAAA;AAAA,sCAEjCA,GAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAiB,UAAA,oFAAA,CAGnD;AAAA,kBAAA,GACF;AAAA,kBAEA,gBAAAK;AAAA,oBAACJ;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK;AAAA,wBACL,UAAU;AAAA,sBAAA;AAAA,sBAIZ,UAAA;AAAA,wBAAA,gBAAAR;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,QAAO;AAAA,4BACP,KAAKiG;AAAA,4BACL,OAAO,EAAE,SAAS,OAAA;AAAA,4BAClB,UAAUsE;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAIZ,gBAAAvK;AAAA,0BAACkM;AAAA,0BAAA;AAAA,4BACC,OACErG,IACI,uBACA;AAAA,4BAEN,OAAK;AAAA,4BAEL,UAAA,gBAAA7F;AAAA,8BAACoD;AAAA,8BAAA;AAAA,gCACC,SAASyC,IAAe,cAAc;AAAA,gCACtC,MAAK;AAAA,gCACL,OAAOA,IAAe,YAAY;AAAA,gCAClC,IAAI;AAAA,kCACF,cAAc;AAAA,kCACd,YAAY;AAAA,kCACZ,IAAI;AAAA,kCACJ,eAAe;AAAA,kCACf,aAAa;AAAA,kCACb,OAAOA,IAAe,UAAU;AAAA,kCAChC,WAAW;AAAA,oCACT,iBAAiBA,IACb,iBACA;AAAA,oCACJ,aAAa;AAAA,kCAAA;AAAA,gCACf;AAAA,gCAEF,WACE,gBAAA7F;AAAA,kCAACgD;AAAA,kCAAA;AAAA,oCACC,UAAU6C,IAAe,YAAY;AAAA,kCAAA;AAAA,gCAAA;AAAA,gCAGzC,SAAS,MAAM;AACb,kCAAAC,GAAgB,CAAChD,MAAM,CAACA,CAAC,GACzBkD,EAAqB,oBAAI,KAAK;AAAA,gCAChC;AAAA,gCAEC,cAAe,kBAAkB;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACpC;AAAA,wBAAA;AAAA,wBAIF,gBAAAhG,EAACkM,GAAA,EAAQ,OAAM,wCAAuC,OAAK,IACzD,UAAA,gBAAAlM;AAAA,0BAACoD;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,IAAI;AAAA,8BACF,cAAc;AAAA,8BACd,YAAY;AAAA,8BACZ,IAAI;AAAA,8BACJ,eAAe;AAAA,8BACf,aAAa;AAAA,8BACb,OAAO;AAAA,8BACP,WAAW;AAAA,gCACT,iBAAiB;AAAA,gCACjB,aAAa;AAAA,8BAAA;AAAA,4BACf;AAAA,4BAEF,WAAW,gBAAApD,EAACgD,GAAA,EAAiB,UAAS,eAAA,CAAe;AAAA,4BACrD,SAAS,MAAA;;AAAM,sCAAA9C,IAAA+F,GAAc,YAAd,gBAAA/F,EAAuB;AAAA;AAAA,4BACvC,UAAA;AAAA,0BAAA;AAAA,wBAAA,GAGH;AAAA,wBAEA,gBAAAF;AAAA,0BAACoD;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,IAAI;AAAA,8BACF,cAAc;AAAA,8BACd,YAAY;AAAA,8BACZ,IAAI;AAAA,8BACJ,eAAe;AAAA,8BACf,aAAa;AAAA,8BACb,OAAO;AAAA,8BACP,WAAW;AAAA,gCACT,iBAAiB;AAAA,gCACjB,aAAa;AAAA,8BAAA;AAAA,4BACf;AAAA,4BAEF,WAAW,gBAAApD,EAACgD,GAAA,EAAiB,UAAU,WAAA,CAAY;AAAA,4BACnD,SAAS,MAAM0E,GAAA;AAAA,4BAChB,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGD,gBAAA1H;AAAA,0BAACoD;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,SAAQ;AAAA,4BACR,IAAI;AAAA,8BACF,cAAc;AAAA,8BACd,YAAY;AAAA,8BACZ,IAAI;AAAA,8BACJ,WAAW;AAAA,8BACX,eAAe;AAAA,4BAAA;AAAA,4BAEjB,WAAW,gBAAApD,EAACgD,GAAA,EAAiB,UAAU,SAAA,CAAU;AAAA,4BACjD,SAAS,MAAM2E,GAAA;AAAA,4BAChB,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAIF,gBAAA/G;AAAA,cAACJ;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,iBAAiB;AAAA,kBACjB,GAAG;AAAA,kBACH,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,aAAa;AAAA,gBAAA;AAAA,gBAGf,UAAA;AAAA,kBAAA,gBAAAI,EAACJ,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAA,GACrD,UAAA;AAAA,oBAAA,gBAAAR;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,OAAO,IAAGwD,KAAA,gBAAAA,EAAW,WAAU,CAAC;AAAA,wBAChC,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,KAAK,cAAc,GAAG,IAAI,IAAA;AAAA,sBAAI;AAAA,oBAAA;AAAA,oBAElD,gBAAAzD;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,OAAO,IAAG0D,KAAA,gBAAAA,EAAc,WAAU,CAAC;AAAA,wBACnC,MAAK;AAAA,wBACL,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,YAAY;AAAA,0BACZ,cAAc;AAAA,0BACd,IAAI;AAAA,0BACJ,aAAa;AAAA,wBAAA;AAAA,sBACf;AAAA,oBAAA;AAAA,kBACF,GACF;AAAA,kBAEA,gBAAA3D;AAAA,oBAACmM;AAAA,oBAAA;AAAA,sBACC,OAAOpI;AAAA,sBACP,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,UAAU,CAACyG,MAAMxG,EAAewG,EAAE,OAAO,KAAK;AAAA,sBAC9C,YAAY;AAAA,wBACV,kCACG4B,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAApM,EAACgD,GAAA,EAAiB,UAAS,oBAAA,CAAoB,EAAA,CACjD;AAAA,wBAEF,IAAI;AAAA,0BACF,iBAAiB;AAAA,0BACjB,cAAc;AAAA,0BACd,UAAU;AAAA,wBAAA;AAAA,sBACZ;AAAA,oBACF;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,4BAECP,IAAA,EAAQ,IAAI,EAAE,IAAI,KAAK;AAAA,UAGxB,gBAAA7B,EAACyL,IAAA,EAAK,WAAS,IAAC,SAAS,KAEvB,UAAA;AAAA,YAAA,gBAAArM,EAACqM,IAAA,EAAK,MAAM,GACV,UAAA,gBAAAzL;AAAA,cAACqL;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACF,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,eAAe;AAAA,gBAAA;AAAA,gBAIjB,UAAA;AAAA,kBAAA,gBAAArL;AAAA,oBAACJ;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,iBAAiBqF,IAAe,eAAe;AAAA,wBAC/C,cAAc;AAAA,wBACd,aAAaA,IAAe,gBAAgB;AAAA,wBAC5C,YAAY;AAAA,sBAAA;AAAA,sBAGd,UAAA;AAAA,wBAAA,gBAAAjF;AAAA,0BAACJ;AAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,SAAS;AAAA,8BACT,YAAY;AAAA,8BACZ,gBAAgB;AAAA,4BAAA;AAAA,4BAGlB,UAAA;AAAA,8BAAA,gBAAAR;AAAA,gCAACO;AAAA,gCAAA;AAAA,kCACC,SAAQ;AAAA,kCACR,IAAI;AAAA,oCACF,YAAY;AAAA,oCACZ,OAAOsF,IAAe,iBAAiB;AAAA,kCAAA;AAAA,kCAGxC,UAAAA,IACG,4BACAL,GAAU,eAAe;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAE9BK,KACC,gBAAA7F;AAAA,gCAACkM;AAAA,gCAAA;AAAA,kCACC,OACEnG,EAAkB,SAASpB,EAAa,SACpC,iBACA;AAAA,kCAEN,OAAK;AAAA,kCAEL,UAAA,gBAAA3E;AAAA,oCAACsM;AAAA,oCAAA;AAAA,sCACC,MAAK;AAAA,sCACL,SACE3H,EAAa,SAAS,KACtBoB,EAAkB,SAASpB,EAAa;AAAA,sCAE1C,eACEoB,EAAkB,OAAO,KACzBA,EAAkB,OAAOpB,EAAa;AAAA,sCAExC,UAAU,CAAC6F,MAAM;AACf,wCAAIA,EAAE,OAAO,UACXxE,EAAqB,IAAI,IAAIrB,CAAY,CAAC,IACvCqB,EAAqB,oBAAI,KAAK;AAAA,sCACrC;AAAA,sCACA,IAAI,EAAE,GAAG,KAAA;AAAA,oCAAK;AAAA,kCAAA;AAAA,gCAChB;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGJ,gBAAAhG;AAAA,0BAACO;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,OAAOsF,IAAe,iBAAiB;AAAA,4BAEtC,UAAAA,IACG,GAAGE,EAAkB,IAAI,OAAOpB,EAAa,MAAM,cACnD,GAAGA,EAAa,MAAM,QAAOlB,KAAA,gBAAAA,EAAW,WAAU,CAAC;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACzD;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAIDjD,GAAA,EAAI,IAAI,EAAE,WAAW,QAAQ,MAAM,KACjC,YAAa,SACZ,gBAAAR,EAACuM,MAAK,gBAAc,IACjB,YAAa,IAAI,CAAC5L,GAAW6L,MAAU;AACtC,0BAAMC,IAAaxI,MAAkBtD;AACrC,2BACE,gBAAAX;AAAA,sBAAC0M;AAAA,sBAAA;AAAA,wBAEC,gBAAc;AAAA,wBACd,iBACE,CAAC7G,KACC,gBAAAjF;AAAA,0BAACJ;AAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,SAAS;AAAA,8BACT,KAAK;AAAA,8BACL,SAASiM,IAAa,IAAI;AAAA,8BAC1B,YAAY;AAAA,4BAAA;AAAA,4BAGd,UAAA;AAAA,8BAAA,gBAAAzM;AAAA,gCAACkM;AAAA,gCAAA;AAAA,kCACC,OAAM;AAAA,kCACN,OAAK;AAAA,kCACL,WAAU;AAAA,kCAEV,UAAA,gBAAAlM;AAAA,oCAAC2M;AAAA,oCAAA;AAAA,sCACC,MAAK;AAAA,sCACL,SAAS,CAACnC,MAAM;AACd,wCAAAA,EAAE,gBAAA,GACF1C,GAAcnH,CAAS,GACvBkE,EAAY,EAAI;AAAA,sCAClB;AAAA,sCACA,IAAI;AAAA,wCACF,OAAO;AAAA,wCACP,WAAW;AAAA,0CACT,iBAAiB;AAAA,wCAAA;AAAA,sCACnB;AAAA,sCAGF,UAAA,gBAAA7E;AAAA,wCAACgD;AAAA,wCAAA;AAAA,0CACC,UAAU;AAAA,0CACV,WAAU;AAAA,wCAAA;AAAA,sCAAA;AAAA,oCACZ;AAAA,kCAAA;AAAA,gCACF;AAAA,8BAAA;AAAA,8BAEF,gBAAAhD;AAAA,gCAACkM;AAAA,gCAAA;AAAA,kCACC,OAAM;AAAA,kCACN,OAAK;AAAA,kCACL,WAAU;AAAA,kCAEV,UAAA,gBAAAlM;AAAA,oCAAC2M;AAAA,oCAAA;AAAA,sCACC,MAAK;AAAA,sCACL,SAAS,CAACnC,MAAM;AACd,wCAAAA,EAAE,gBAAA,GACF1C,GAAcnH,CAAS,GACvB4E,GAAmB,EAAI;AAAA,sCACzB;AAAA,sCACA,IAAI;AAAA,wCACF,OAAO;AAAA,wCACP,WAAW;AAAA,0CACT,iBAAiB;AAAA,wCAAA;AAAA,sCACnB;AAAA,sCAGF,UAAA,gBAAAvF;AAAA,wCAACgD;AAAA,wCAAA;AAAA,0CACC,UAAU;AAAA,0CACV,WAAU;AAAA,wCAAA;AAAA,sCAAA;AAAA,oCACZ;AAAA,kCAAA;AAAA,gCACF;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAIN,IAAI;AAAA,0BACF,cACEwJ,MAAU7H,EAAa,SAAS,IAC5B,SACA;AAAA,0BACN,aAAa;AAAA,0BACb,wBAAwB,EAAE,SAAS,eAAA;AAAA,wBAAe;AAAA,wBAGpD,UAAA,gBAAA/D;AAAA,0BAACgM;AAAA,0BAAA;AAAA,4BACC,UAAUH,KAAc,CAAC5G;AAAA,4BACzB,SAAS,MAAM;AACb,kCAAIA,GAAc;AAChB,sCAAMgH,IAAS,IAAI,IAAI9G,CAAiB;AACxC,gCAAI8G,EAAO,IAAIlM,CAAS,IACtBkM,EAAO,OAAOlM,CAAS,IACpBkM,EAAO,IAAIlM,CAAS,GACzBqF,EAAqB6G,CAAM;AAAA,8BAC7B;AACE,gCAAA/E,GAAcnH,CAAS;AAAA,4BAE3B;AAAA,4BACA,IAAI;AAAA,8BACF,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,YAAY;AAAA,8BACZ,GAAIkF,IACA,CAAA,IACA;AAAA,gCACE,kBAAkB;AAAA,kCAChB,iBAAiB;AAAA,kCACjB,YAAY;AAAA,kCACZ,iBAAiB;AAAA,kCACjB,WAAW;AAAA,oCACT,iBAAiB;AAAA,kCAAA;AAAA,gCACnB;AAAA,gCAEF,WAAW;AAAA,kCACT,iBAAiB;AAAA,gCAAA;AAAA,8BACnB;AAAA,4BACF;AAAA,4BAGL,UAAA;AAAA,8BAAAA,KACC,gBAAA7F;AAAA,gCAACsM;AAAA,gCAAA;AAAA,kCACC,MAAK;AAAA,kCACL,SAASvG,EAAkB,IAAIpF,CAAS;AAAA,kCACxC,eAAa;AAAA,kCACb,IAAI,EAAE,GAAG,GAAG,IAAI,IAAA;AAAA,gCAAI;AAAA,8BAAA;AAAA,8BAGxB,gBAAAX;AAAA,gCAAC8M;AAAA,gCAAA;AAAA,kCACC,SACE,gBAAA9M;AAAA,oCAACO;AAAA,oCAAA;AAAA,sCACC,SAAQ;AAAA,sCACR,IAAI;AAAA,wCACF,YACEkM,KAAc,CAAC5G,IAAe,MAAM;AAAA,wCACtC,OACE4G,KAAc,CAAC5G,IACX,iBACA;AAAA,wCACN,UAAU;AAAA,wCACV,UAAU;AAAA,wCACV,cAAc;AAAA,wCACd,YAAY;AAAA,wCACZ,UAAU;AAAA,sCAAA;AAAA,sCAGX,UAAAlF;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCACH;AAAA,8BAAA;AAAA,4BAEJ;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF;AAAA,sBA1IK6L,IAAQ;AAAA,oBAAA;AAAA,kBA6InB,CAAC,EAAA,CACH,IAEA,gBAAA5L,EAACJ,GAAA,EAAI,IAAI,EAAE,GAAG,GAAG,WAAW,SAAA,GAC1B,UAAA;AAAA,oBAAA,gBAAAR;AAAA,sBAACgD;AAAA,sBAAA;AAAA,wBACC,UAAS;AAAA,wBACT,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEZ,gBAAAhD;AAAA,sBAACO;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,OAAM;AAAA,wBACN,IAAI,EAAE,IAAI,EAAA;AAAA,wBAET,UAAAkD,EAAU,SAAS,IAChB,qBACA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACN,EAAA,CACF,EAAA,CAEJ;AAAA,kBAGCoC,KACC,gBAAAjF;AAAA,oBAACJ;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,GAAG;AAAA,wBACH,WAAW;AAAA,wBACX,aAAa;AAAA,wBACb,iBAAiB;AAAA,wBACjB,SAAS;AAAA,wBACT,gBAAgB;AAAA,wBAChB,YAAY;AAAA,sBAAA;AAAA,sBAGd,UAAA;AAAA,wBAAA,gBAAAI,EAACL,KAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,OAC3C,UAAA;AAAA,0BAAAwF,EAAkB;AAAA,0BAAK;AAAA,wBAAA,GAC1B;AAAA,wBACA,gBAAA/F;AAAA,0BAACoD;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,OAAM;AAAA,4BACN,UAAU2C,EAAkB,SAAS;AAAA,4BACrC,SAASgC;AAAA,4BACT,WAAW,gBAAA/H,EAACgD,GAAA,EAAiB,UAAS,aAAA,CAAa;AAAA,4BACnD,IAAI;AAAA,8BACF,eAAe;AAAA,8BACf,cAAc;AAAA,8BACd,WAAW;AAAA,4BAAA;AAAA,4BAEd,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA,GAGN;AAAA,YAGA,gBAAAhD,EAAC+M,MACI,WAAA,CAAC,CAAC9I,KAAiB,CAAC,CAACI,KAAca,OACpC,gBAAAlF;AAAA,cAACsD;AAAA,cAAA;AAAA,gBACC,WAAAe;AAAA,gBACA,OAAOJ;AAAA,gBACP,YAAYW;AAAA,gBACZ,gBAAgBC;AAAA,gBAChB,mBAAAJ;AAAA,gBACA,eAAAZ;AAAA,gBACA,kBAAAC;AAAA,gBACA,mBAAAoB;AAAA,gBACA,iBAAAE;AAAA,gBACA,uBAAuBD;AAAA,gBACvB,iBAAAG;AAAA,gBACA,oBAAAC;AAAA,gBACA,uBAAAoD;AAAA,cAAA;AAAA,YAAA,EACD,CAEL;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIF,gBAAA/H;AAAA,MAAC2B;AAAA,MAAA;AAAA,QACC,MAAMuC;AAAA,QACN,SAAS8C;AAAA,QACT,UAAS;AAAA,QACT,WAAS;AAAA,QACT,YAAY;AAAA,UACV,IAAI,EAAE,cAAc,GAAG,GAAG,EAAA;AAAA,QAAE;AAAA,QAG9B,UAAA;AAAA,UAAA,gBAAAhH,EAAC4B,MAAY,IAAI,EAAE,YAAY,KAAK,IAAI,KAAK,UAAA;AAAA,YAAA;AAAA,8BAE1CjC,GAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAiB,UAAA,iEAAA,CAEnD;AAAA,UAAA,GACF;AAAA,4BACCmC,IAAA,EACC,UAAA,gBAAA1C;AAAA,YAACgN;AAAA,YAAA;AAAA,cACC,SAASrJ,EAAa,OAAO,CAACsJ,MACrB,CAACxJ,EAAU,SAASwJ,CAAC,CAC7B;AAAA,cACD,gBAAgB,CAACC,MAAWA;AAAA,cAC5B,OAAOlI;AAAA,cACP,UAAU,CAACmI,GAAGC,MAAanI,EAAiBmI,CAAQ;AAAA,cACpD,aAAa,CAACC,MACZ,gBAAArN;AAAA,gBAACmM;AAAA,gBAAA;AAAA,kBACE,GAAGkB;AAAA,kBACJ,OAAM;AAAA,kBACN,aAAY;AAAA,kBACZ,MAAK;AAAA,kBACL,IAAI,EAAE,IAAI,EAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YACd;AAAA,UAAA,GAGN;AAAA,UACA,gBAAAzM,EAACuC,MAAc,IAAI,EAAE,IAAI,GAAG,IAAI,KAC9B,UAAA;AAAA,YAAA,gBAAAnD;AAAA,cAACoD;AAAA,cAAA;AAAA,gBACC,SAASwE;AAAA,gBACT,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,IAAI,EAAE,cAAc,GAAG,eAAe,OAAA;AAAA,gBACvC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAA5H;AAAA,cAACoD;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS,MAAMyE,GAAA;AAAA,gBACf,UAAU,CAAC7C;AAAA,gBACX,IAAI,EAAE,cAAc,GAAG,eAAe,QAAQ,WAAW,OAAA;AAAA,gBAC1D,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIF,gBAAAhF;AAAA,MAACyB;AAAA,MAAA;AAAA,QACC,MAAM0E;AAAA,QACN,SAAS,MAAMC,GAAqB,EAAK;AAAA,QACzC,aAAaC;AAAA,QACb,SAAS+E;AAAA,QACT,UAAU7E;AAAA,QACV,mBAAmBE;AAAA,QACnB,wBAAAzE;AAAA,QACA,uBAAuBkJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACzB,GACF;AAEJ;AAEA1H,GAAU,YAAY;AAAA,EACpB,WAAWH,EAAU;AAAA,EACrB,YAAYA,EAAU;AAAA,EACtB,cAAcA,EAAU;AAAA,EACxB,eAAeA,EAAU;AAAA,EACzB,eAAeA,EAAU;AAAA,EACzB,kBAAkBA,EAAU;AAC9B;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TypeConfiguration-DYbBG_hZ.js","sources":["../src/views/Events/TypeConfiguration.jsx"],"sourcesContent":["import React from \"react\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport * as Yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport {\n FormControl,\n Select,\n MenuItem,\n Button,\n Box,\n Typography,\n} from \"@mui/material\";\nimport PropTypes from \"prop-types\";\nimport \"./Styles/ManageEventConfiguration.scss\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\n\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n/**\n * A form component for configuring event types.\n * @module TypeConfigurationForm\n * @param {Object} props - The props for the component.\n * @param {Function} props.setType - Function to set the selected type.\n * @param {Function} props.onSubmit - Function to handle form submission.\n * @returns {JSX.Element} The rendered form component.\n */\nconst TypeConfigurationForm = ({ setType, onSubmit }) => {\n const { translate } = useTranslateProvider();\n const validationSchema = Yup.object().shape({\n type: Yup.string().required(\"Type is Required\"),\n });\n\n const {\n control,\n handleSubmit,\n reset,\n formState: { errors },\n } = useForm({\n resolver: yupResolver(validationSchema),\n mode: \"onChange\",\n });\n\n /**\n * @function onFormSubmit\n * Handles form submission.\n * Calls the onSubmit function and resets the form.\n */\n const onFormSubmit = () => {\n onSubmit();\n reset();\n setType(null);\n };\n\n return (\n <div>\n <FormControl\n fullWidth\n error={!!errors.type}\n className=\"mb-2\"\n data-testid=\"typeconfigurationform-formcontrol-type\"\n >\n <Typography variant=\"body2\" className=\"m-1\">\n {translate(\"Type\")}\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n\n <Controller\n name=\"type\"\n control={control}\n defaultValue=\"\"\n render={({ field }) => (\n <Select\n {...field}\n size=\"small\"\n displayEmpty\n onChange={(e) => {\n field.onChange(e.target.value);\n setType(e.target.value);\n }}\n data-testid=\"typeconfigurationform-select-type\"\n >\n <MenuItem value=\"\">\n <Typography variant=\"body2\">{translate(\"Select\")}</Typography>\n </MenuItem>\n <MenuItem className=\"text-[14px] \" value=\"SMS\">\n {translate(\"SMS Notification\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"EMAIL\">\n {translate(\"Email Notification\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"QUERY\">\n {translate(\"Query\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"MOBILE\">\n {translate(\"Mobile Notification\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"EXCEPTION\">\n {translate(\"Exception\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"SYSTEM_FUNCTION\">\n {translate(\"System Function\")}\n </MenuItem>\n <MenuItem className=\"text-[14px]\" value=\"PUSH_NOTIFICATION\">\n {translate(\"Push Notification\")}\n </MenuItem>\n {(GeneralUtil.isEkavach || GeneralUtil.isPhmp) && (\n <MenuItem className=\"text-[14px]\" value=\"KAFKA_SYNC\">\n {translate(\"Kafka Sync\")}\n </MenuItem>\n )}\n </Select>\n )}\n />\n {errors?.type && (\n <p\n className=\"error-helper\"\n data-testid=\"typeconfigurationform-error-helper-type\"\n >\n {errors?.type?.message}\n </p>\n )}\n </FormControl>\n\n <Box className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"secondary\"\n onClick={() => {\n setType(null);\n reset();\n setType(null);\n }} // Clear form\n data-testid=\"typeconfigurationform-button-clear\"\n >\n {translate(\"Clear\")}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSubmit(onFormSubmit)} // Handle submission without form reload\n data-testid=\"typeconfigurationform-button-add\"\n >\n {translate(\"Add\")}\n </Button>\n </Box>\n </div>\n );\n};\n\nexport default TypeConfigurationForm;\n\nTypeConfigurationForm.propTypes = {\n setType: PropTypes.any, // or PropTypes.shape({...}) for specific shape\n onSubmit: PropTypes.any, // or PropTypes.shape({...}) for specific shape\n};\n"],"names":["TypeConfigurationForm","setType","onSubmit","translate","useTranslateProvider","validationSchema","Yup","control","handleSubmit","reset","errors","useForm","yupResolver","onFormSubmit","jsxs","FormControl","Typography","jsx","Controller","field","Select","e","MenuItem","GeneralUtil","Box","Button","PropTypes"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserList-BAeAFeXZ.js","sources":["../src/views/Users/UserFilterForm.jsx","../src/views/Users/UserList.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React, { lazy, Suspense, useEffect, useState } from \"react\";\nconst LocationSelectionComponent = lazy(\n () =>\n import(\"@/views/feature-components/LocationDirective/LocationDirectiveV2\"),\n);\nimport { Button, InputLabel, Switch } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getRoles } from \"../../services/Users\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { useDispatch } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport { useLocation } from \"react-router\";\nimport {\n UserFilterFormSkeleton,\n UserFilterFormSwitchButtonSkeleton,\n} from \"./Skeletons/UserListSkeleton\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n\nconst UserFilterForm = ({\n handleOverlayState,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n selectedLocation,\n setSelectedLocation,\n filterRequired,\n setUserFilterPreference,\n user,\n setFilterRequired,\n locationIdRef,\n locations,\n setLocations,\n setAdminRoleIdsStats,\n}) => {\n const [roles, setRoles] = useState([]);\n\n const trackEvent = useTrackEvent();\n const { translate } = useTranslateProvider();\n const methods = useForm({ mode: \"onChange\" });\n const dispatch = useDispatch();\n const location = useLocation();\n const {\n control,\n handleSubmit,\n formState: { errors },\n getValues,\n setValue,\n clearErrors,\n } = methods;\n\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n setRoles(data);\n if (roleDetails?.id) {\n setValue(\"roleId\", roleDetails.id);\n }\n if (status) {\n setValue(\"status\", status);\n }\n if (\n Object.keys(user?.userFilterPreference || {})?.length > 0 &&\n location?.state?.fromManageUser === true\n ) {\n setValue(\"roleId\", user?.userFilterPreference?.roleid);\n setValue(\"status\", user?.userFilterPreference?.status);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n useEffect(() => {\n loadInitialData();\n }, []);\n\n const onSubmit = async () => {\n try {\n setIsLoading((cur) => !cur);\n setAdminRoleIdsStats([]);\n trackEvent(\"button_click\", {\n button_name: `User Filter-filter-button`,\n button_type: \"filter\",\n button_id: \"userfilterform-search-button\",\n });\n\n const status = getValues(\"status\") || \"BOTH\";\n if (status) {\n setStatus(status);\n }\n const searchObject = {\n limit: 50,\n offset: 0,\n order: \"asc\",\n orderby: \"userName\",\n status,\n };\n\n const selectedLocationId =\n selectedLocation?.finalSelected?.optionSelected?.id;\n if (selectedLocationId) {\n searchObject[\"locationId\"] = selectedLocationId;\n setLocationId(selectedLocationId);\n } else {\n setLocationId(null);\n }\n\n const selectedRole = roles.find(\n (item) => item.id === getValues(\"roleId\"),\n );\n if (selectedRole?.id) {\n searchObject[\"roleid\"] = selectedRole.id;\n setRoleDetails(selectedRole);\n } else {\n setRoleDetails(null);\n }\n setUserFilterPreference(searchObject);\n dispatch(\n setUserDetails({\n ...user,\n userFilterPreference: {\n ...searchObject,\n filterRequired,\n selectedLocation,\n },\n }),\n );\n trackEvent(\"filter\", {\n filter_type: [\"location\", \"role\", \"status\"],\n ...searchObject,\n });\n setIsLoading((cur) => !cur);\n handleOverlayState();\n } catch (error) {\n showToast({ message: `error : ${error?.message}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n return (\n <FormProvider {...methods}>\n <Grid\n className=\"m-[1rem]\"\n component=\"form\"\n onSubmit={(event) => {\n if (Object.keys(errors).length > 0) {\n event.preventDefault(); // Prevent form submission\n return;\n }\n handleSubmit(onSubmit)(event);\n }}\n data-testid=\"userfilterform-container-grid\"\n noValidate\n >\n <UserFilterFormSwitchButtonSkeleton isLoading={isLoading}>\n <Grid className=\"flex items-center\">\n <InputLabel>{translate(\"Location Filter Required\")} :</InputLabel>\n <Switch\n defaultChecked\n checked={filterRequired}\n onChange={(e) => {\n setFilterRequired(e.target.checked);\n if (!e.target.checked) {\n locationIdRef.current = null;\n clearErrors(\"level1\");\n }\n }}\n />\n </Grid>\n </UserFilterFormSwitchButtonSkeleton>\n\n {filterRequired === true && (\n <Suspense>\n <LocationSelectionComponent\n childForm={true}\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n templateType=\"inline\"\n disabled={isLoading}\n locations={locations}\n setLocations={setLocations}\n fetchAccordingToUserAoi={GeneralUtil.isBahaar ? true : false}\n // Add any other props needed for your use case\n />\n </Suspense>\n )}\n <UserFilterFormSkeleton isLoading={isLoading}>\n <Grid>\n <InputLabel data-testid=\"userfilterform-role-label\">\n {translate(\"Role\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"roleId\"\n options={roles}\n displayName=\"name\"\n optionValue=\"id\"\n errors={errors}\n dataTestId=\"userfilterform-role-dropdown\"\n className=\"mb-[0.3125rem]\"\n />\n\n <InputLabel\n className=\"mt-2\"\n data-testid=\"userfilterform-status-label\"\n >\n {translate(\"Status\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"status\"\n defaultValue=\"BOTH\"\n options={[\"ACTIVE\", \"INACTIVE\", \"BOTH\"]}\n errors={errors}\n dataTestId=\"userfilterform-status-dropdown\"\n />\n <Grid\n container\n spacing={1}\n marginTop={1}\n justifyContent=\"flex-end\"\n data-testid=\"userfilterform-buttons-container\"\n >\n <Grid item data-testid=\"userfilterform-closebutton-item\">\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => handleOverlayState()}\n data-testid=\"userfilterform-close-button\"\n >\n {translate(\"Close\")}\n </Button>\n </Grid>\n\n <Grid item data-testid=\"userfilterform-searchbutton-item\">\n <Button\n variant=\"contained\"\n type=\"submit\"\n data-testid=\"userfilterform-search-button\"\n >\n {translate(\"Search\")}\n </Button>\n </Grid>\n </Grid>\n </Grid>\n </UserFilterFormSkeleton>\n </Grid>\n </FormProvider>\n );\n};\n\nexport default UserFilterForm;\n\nUserFilterForm.propTypes = {\n handleOverlayState: PropTypes.any,\n setUsersData: PropTypes.any,\n setIsLoading: PropTypes.any,\n isLoading: PropTypes.any,\n setLocationId: PropTypes.func,\n setRoleDetails: PropTypes.func,\n roleDetails: PropTypes.any,\n status: PropTypes.any,\n setStatus: PropTypes.any,\n selectedLocation: PropTypes.any,\n setSelectedLocation: PropTypes.any,\n filterRequired: PropTypes.any,\n setFilterRequired: PropTypes.any,\n setUserFilterPreference: PropTypes.any,\n user: PropTypes.any,\n resetLocationDirective: PropTypes.any,\n locationIdRef: PropTypes.any,\n setSelectedLocationId: PropTypes.any,\n locations: PropTypes.any,\n setLocations: PropTypes.any,\n setAdminRoleIdsStats: PropTypes.any,\n};\n","import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n generateSOHCode,\n getUsersList,\n toggleUserStatus,\n} from \"../../services/Users.js\";\nimport { showToast } from \"@/common/toaster/toaster.jsx\";\nimport usePagination from \"@/hooks/usePagination.js\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal.jsx\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport SideOverlay from \"@/views/custom-components/SideOverlay.jsx\";\nimport UserFilterForm from \"./UserFilterForm.jsx\";\nimport \"./Styles/Users.css\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { execute } from \"@/common/services/QueryBuilder\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport {\n faBars,\n faFileExcel,\n faFilePdf,\n faPen,\n faPhone,\n faHospital,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n Box,\n Button,\n Card,\n CircularProgress,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { saveAs } from \"file-saver\";\nimport {\n default as React,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { getRoles } from \"../../services/Users\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport * as XLSX from \"xlsx-js-style\";\nimport {\n UserListSkeleton,\n UserStatsSkeleton,\n} from \"./Skeletons/UserListSkeleton.jsx\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport useDownloadPdf from \"@/hooks/useDownloadPdf.js\";\nimport CustomStatsComponent from \"@/views/custom-components/CustomStatsComponent.jsx\";\nimport {\n faUsers,\n faCheckCircle,\n faTimesCircle,\n faUserShield,\n} from \"@fortawesome/free-solid-svg-icons\";\n\n/**\n * @module UserList\n * @returns {JSX.Element}\n */\n\nexport default function UserList() {\n const navigate = useNavigate();\n const trackEvent = useTrackEvent();\n const [adminRolesIds, setAdminRolesId] = useState([]);\n const [allUsers, setAllUsers] = useState([]);\n\n //colors for stats\n let totalUserColor = \"#8688ecff\";\n let activeUserColor = \"#10b981\";\n let inactiveUserColor = \"#f43f5e\";\n let adminUserColor = \"#f59e0b\";\n let whiteColor = \"#ffffffff\";\n\n const [adminRoleIdsStats, setAdminRoleIdsStats] = useState([]);\n const [rolesIds, setRolesIds] = useState([]);\n const [userStats, setUserStats] = useState(null);\n const [userStatsLoading, setUserStatsLoading] = useState(false);\n const theme = useTheme();\n const isDark = theme.palette.mode === \"dark\";\n //status model=1,soh model =2\n const [openModel, setOpenModel] = useState(0);\n const [rights, setRights] = useState({});\n const rightsRef = useRef(rights);\n\n useEffect(() => {\n rightsRef.current = rights;\n }, [rights]);\n\n const [row, setRow] = useState(null);\n const [search, setSearch] = useState(\"\");\n const [debounceSearch, setDebounceSearch] = useState(\"\");\n const [usersData, setUsersData] = useState([]);\n const [hasMore, setHasMore] = useState(true);\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [sortConfig, setSortConfig] = useState({\n sortColumn: \"userName\",\n sortOrder: \"asc\",\n });\n const [toggle, setToggle] = useState(false);\n const pageSize = 50;\n const { translate } = useTranslateProvider();\n const [isLoading, setIsLoading] = useState(false);\n const [locationId, setLocationId] = useState(null);\n const [roleDetails, setRoleDetails] = useState(null);\n const [status, setStatus] = useState(null);\n const location = useLocation();\n const dispatch = useDispatch();\n const { user } = useSelector((state) => state?.Authenticate);\n const [selectedLocationId, setSelectedLocationId] = useState(\n user?.userFilterPreference?.locationId || null,\n );\n const locationIdRef = useRef(selectedLocationId);\n const [selectedLocation, setSelectedLocation] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.selectedLocation) ||\n {},\n {},\n );\n const [filterRequired, setFilterRequired] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.filterRequired) ||\n false,\n );\n const [userFilterPreference, setUserFilterPreference] = useState(\n (location?.state?.fromManageUser === true && user?.userFilterPreference) ||\n {},\n );\n const [resetLocationDirective, setResetLocationDirective] = useState(0);\n const [locations, setLocations] = useState([]);\n\n /**\n * Toggles the label for the action button based on the display state of a row.\n * @function handleToggleOption\n * @param {Object} row - The row object containing the display state.\n * @param {string} row.displayState - The current display state of the row, which determines the button label.\n * @returns {void}\n */\n // const isDark = theme.palette.mode === \"dark\";\n const updatedData = useMemo(() => {\n return usersData?.map((user, index) => {\n let name = \"\";\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n return {\n ...user,\n index: index + 1,\n firstName: name.trim(),\n };\n });\n }, [usersData, isDark]);\n\n useEffect(() => {\n const getUsersStats = async () => {\n try {\n if (rolesIds.length > 0) {\n setUserStatsLoading(true);\n const response = await execute(\n {\n code: \"GET_USERS_STATS\",\n parameters: {\n locationId: userFilterPreference?.locationId || locationId,\n roleid: userFilterPreference?.roleid || roleDetails?.id || null,\n roleIds: rolesIds?.join(\",\"),\n },\n },\n { showLoader: false },\n );\n if (response?.data?.result && response?.data?.result.length > 0) {\n setUserStats(response.data.result[0]);\n }\n setUserStatsLoading(false);\n }\n } catch (error) {\n setUserStatsLoading(false);\n console.error(\"Error fetching user stats:\", error);\n }\n };\n getUsersStats();\n }, [userFilterPreference, rolesIds]);\n\n const defaultColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n {\n field: \"userName\",\n label: \"User Identity\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-48 gap-4 h-full\">\n <Box\n className=\"w-[15%] h-10 rounded-2xl flex items-center justify-center font-black text-xs shadow-sm transition-transform duration-300 group-hover:scale-110\"\n sx={{\n background: `linear-gradient(to bottom right, ${alpha(theme.palette.primary.main, 0.05)}, ${alpha(theme.palette.primary.main, 0.2)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n color: theme.palette.primary.main,\n }}\n >\n {row?.firstName\n ?.split(\" \")\n .filter((n) => ![\"Mr\", \"Ms\", \"Mrs\"].includes(n))\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()}\n </Box>\n\n <div className=\"w-[80%] flex flex-col h-full justify-center pt-2\">\n <Box\n component=\"span\"\n className=\"text-sm font-black leading-tight transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary, // Dynamic text color\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.firstName}\n </Box>\n <Box\n component=\"span\"\n className=\"text-md font-bold font-mono flex items-center gap-1.5 transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary, // Dynamic muted color\n }}\n >\n <Box\n component=\"span\"\n className=\"w-1.5 h-1.5 rounded-full transition-colors duration-300\"\n sx={{\n backgroundColor: theme.palette.divider, // Dynamic dot color\n }}\n ></Box>\n {row?.userName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"contactNumber\",\n label: \"Phone number\".toUpperCase(),\n sortable: true,\n align: \"left\",\n sortOrder: \"asc\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-32 gap-4 h-full\">\n <div className=\"flex items-center text-md tracking-tight\">\n <Box\n className=\"w-7 h-7 rounded-xl flex items-center justify-center mr-2 shadow-sm transition-all duration-300\"\n sx={{\n backgroundColor:\n theme.palette.mode === \"dark\"\n ? alpha(theme.palette.common.white, 0.05)\n : \"rgb(248, 250, 252)\",\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n backgroundColor: theme.palette.primary.main,\n color: \"white\",\n },\n }}\n >\n <FontAwesomeIcon icon={faPhone} className=\"text-xs\" />\n </Box>\n\n <Box\n component=\"span\"\n className=\"transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.contactNumber || \"N/A\"}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"roleName\",\n label: \"Role Name\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-auto h-full\">\n <div className=\"flex flex-col gap-1.5\">\n <Box\n component=\"span\"\n className=\"px-2.5 rounded-lg text-[0.6rem] font-black uppercase tracking-widest w-fit whitespace-nowrap\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: theme.palette.primary.main,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n }}\n >\n {row?.roleName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"areaOfIntervention\",\n label: \"Area of Intervention\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const formattedArea = row?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \", \",\n );\n return (\n <div className=\"flex items-center w-48 h-full\">\n <div className=\"flex flex-col gap-1.5 w-full min-w-0\">\n <Box\n className=\"flex items-center text-md pl-2\"\n sx={{ color: theme.palette.text.primary }} // Use theme color instead of slate-700\n >\n <Tooltip\n arrow\n placement=\"top\"\n title={\n <span\n dangerouslySetInnerHTML={{\n __html: row?.areaOfIntervention || \"N/A\",\n }}\n />\n }\n >\n <span\n className=\"cursor-default block w-full whitespace-normal break-words\"\n dangerouslySetInnerHTML={{\n __html: formattedArea || \"N/A\",\n }}\n />\n </Tooltip>\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"healthFacilityName\",\n label: \"Health Infrastructure\".toUpperCase(),\n align: \"left\",\n render: (row) => (\n <div className=\"flex items-center gap-3 h-full\">\n <Box\n className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all duration-300\"\n sx={{\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n }}\n >\n <FontAwesomeIcon icon={faHospital} />\n </Box>\n\n <Box\n component=\"span\"\n className=\"text-sm transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n <div className=\"whitespace-pre-line\">\n {row?.healthFacilityName?.replace(/<br\\s*\\/?>/gi, \"\\n\") || \"N/A\"}\n </div>\n </Box>\n </div>\n ),\n },\n {\n field: \"displayState\",\n label: \"User Status\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const isActive = row?.displayState === \"ACTIVE\";\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Box\n className=\"inline-flex items-center justify-center rounded-full text-[0.8rem] font-black border transition-all duration-500 shadow-sm px-3 w-auto min-w-[110px]\"\n sx={{\n backgroundColor: isActive\n ? theme.palette.mode === \"dark\"\n ? alpha(theme.palette.success.main, 0.15)\n : \"rgb(236, 253, 245)\"\n : theme.palette.mode === \"dark\"\n ? alpha(theme.palette.error.main, 0.15)\n : \"rgb(254, 242, 242)\",\n color: isActive\n ? theme.palette.mode === \"dark\"\n ? theme.palette.success.light\n : \"rgb(4, 120, 87)\"\n : theme.palette.mode === \"dark\"\n ? theme.palette.error.light\n : \"rgb(248, 113, 113)\",\n borderColor: isActive\n ? alpha(theme.palette.success.main, 0.3)\n : alpha(theme.palette.error.main, 0.3),\n }}\n >\n <span\n className={`w-2 h-2 rounded-full mr-2 ${isActive ? \"bg-emerald-500 animate-pulse\" : \"bg-red-400\"\n }`}\n ></span>\n {row?.displayState}\n </Box>\n </div>\n );\n },\n },\n {\n field: \"Actions\",\n label: \"Actions\".toUpperCase(),\n align: \"left\",\n },\n ];\n\n const [columns, setColumns] = useState(defaultColumns);\n useEffect(() => {\n setColumns(defaultColumns);\n }, [isDark]);\n /**\n * Handles the status toggle action for the selected user and updates the user list.\n *\n * @async\n * @function handleClickStatusModal\n * @returns {Promise<void>}\n */\n\n const handleClickStatusModal = async () => {\n const is_active = row.displayState !== \"ACTIVE\";\n try {\n await toggleUserStatus(row, { is_active });\n setOpenModel(0);\n setToggle((cur) => !cur);\n showToast({\n message: \"User State Updated Successfully\",\n type: \"success\",\n });\n } catch (error) {\n setOpenModel(0);\n setToggle((cur) => !cur);\n const errorCode = error?.response?.data?.errorcode;\n const message =\n error?.response?.data?.message ||\n error?.message ||\n \"Something went wrong\";\n console.log(errorCode, message);\n if (errorCode === 400) {\n showToast({\n message: `${message}`,\n type: \"error\",\n });\n } else {\n showToast({\n message: \"Error in Updating User State.\",\n type: \"error\",\n });\n }\n }\n };\n\n /**\n * Handles the generation of the SOH (Statement of Holdings) code for a user.\n * @async\n * @function handleClickGenerateSOHModal\n * @returns {Promise<void>} - A promise that resolves after the SOH code is generated.\n */\n\n const handleClickGenerateSOHModal = async () => {\n try {\n const response = await generateSOHCode({\n userId: GeneralUtil.isTecho ? row?.userId : row?.id,\n });\n if (response) {\n setUsersData((users) => {\n return users.map((user) => {\n return user?.userId ===\n (GeneralUtil.isTecho ? row?.userId : row?.id)\n ? { ...user, loginCode: response.data }\n : user;\n });\n });\n showToast({\n message: `You have successfully generated your login code. Your login code is : ${response.data}`,\n type: \"success\",\n });\n }\n } catch (error) {\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n } finally {\n setOpenModel(0);\n }\n };\n\n /**\n * Navigates to the user edit page for the specified user.\n * @function handleEditUser\n * @param {Object} row - The user data object.\n * @param {number} row.id - The unique ID of the user.\n * @returns {void}\n */\n\n const handleEditUser = (row) => {\n if (GeneralUtil.isTecho)\n return navigate(`/ui/medplat/manage/user/${row.userId}`);\n else return navigate(`/ui/medplat/manage/user/${row.id}`);\n };\n const getActions = useCallback(\n (row) => {\n return [\n rightsRef.current?.[\"update.manage.users\"] && {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faPen} data-testid=\"userlist-button-edit\" />\n ),\n onClick: () => {\n handleEditUser(row);\n },\n iconColor: theme.palette.secondary.main,\n backgroundColor: alpha(theme.palette.secondary.main, 0.1),\n hoverBackgroundColor: theme.palette.secondary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.secondary.main,\n rotateIcon: true,\n },\n {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faBars} data-testid=\"userlist-button-menu\" />\n ),\n iconColor: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n hoverBackgroundColor: theme.palette.primary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.primary.main,\n menuItems: [\n {\n label: translate(\n row.displayState === \"ACTIVE\"\n ? \"Mark as Inactive\"\n : \"Mark as Active\",\n ),\n onClick: () => {\n setOpenModel(1);\n setRow(row);\n },\n },\n row.displayState === \"ACTIVE\" &&\n !row?.loginCode && {\n label: translate(\"Generate SOH Code\"),\n onClick: () => {\n setOpenModel(2);\n setRow(row);\n },\n },\n ].filter(Boolean),\n },\n ].filter(Boolean);\n },\n [translate],\n );\n\n /**\n * Handles sorting of the user list by the specified column.\n * @function s\n * @returns {Promise<void>}\n */\n\n const handleSort = async (column) => {\n const newOrder = column.sortOrder === \"asc\" ? \"desc\" : \"asc\";\n setColumns((prev) =>\n prev.map((col) => {\n if (col.field === column.field) {\n return { ...col, sortOrder: newOrder };\n }\n return col;\n }),\n );\n setSortConfig({ sortColumn: column.field, sortOrder: newOrder });\n };\n\n /**\n * Toggles the state of the overlay.\n * @function handleOverlayState\n * @returns {void}\n */\n\n const handleOverlayState = () => {\n trackEvent(\"button_click\", {\n button_name: \"User Filter-open-button\",\n button_type: \"filter_open\",\n button_id: \"userlist-overlay-filter\",\n });\n setOverlayOpen(!overlayOpen);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebounceSearch(search);\n }, 1000);\n\n return () => clearTimeout(timer); // Cleanup previous timer\n }, [search]);\n\n /**\n * Fetches additional user data for pagination and logs the search tracking event.\n * @async\n * @function loadMoreData\n * @param {Object} pageParam - The pagination parameters for the API request.\n * @param {number} pageParam.limit - The number of items to fetch per page.\n * @param {number} pageParam.offset - The offset for pagination.\n * @returns {Promise<Array>} - A promise that resolves to an array of user data fetched from the API.\n * @throws {Error} - Displays a toast notification if an error occurs during the API call.\n *\n **/\n async function loadMoreData(pageParam, initialLoad) {\n try {\n if (rightsRef.current?.[\"view.manage.users\"]) {\n initialLoad && setIsLoading((cur) => !cur);\n\n const response = await getUsersList({\n limit: pageParam.limit,\n offset: pageParam.offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n search !== \"\" &&\n trackEvent(\"search_tracking\", {\n searchTerm: search,\n results_count: response?.data?.length,\n search_type: \"Page Search\",\n });\n initialLoad && setIsLoading((cur) => !cur);\n return response.data;\n }\n } catch (error) {\n showToast({ message: `error ${error}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n }\n\n /**\n * Custom hook for managing paginated user data.\n *\n * @CustomHook\n * @type {Object}\n * @property {Array} pageData - The paginated user data fetched from the server.\n * @property {Function} fetchNextPage - Function to fetch the next page of data.\n * @property {boolean} hasNextPage - Indicates whether more pages are available to fetch.\n * @property {boolean} isFetchingNextPage - Indicates if the next page is currently being fetched.\n **/\n\n const {\n data: pageData,\n fetchNextPage,\n hasNextPage,\n } = usePagination({\n key: [\n \"users\",\n debounceSearch,\n sortConfig.sortOrder,\n sortConfig.sortColumn,\n toggle,\n locationId,\n roleDetails?.id,\n status,\n rights,\n adminRoleIdsStats,\n ],\n queryFn: ({ pageParam }) => {\n const isInitial = !pageParam?.offset || pageParam?.offset === 0;\n return loadMoreData(pageParam, isInitial);\n },\n limit: pageSize,\n });\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n *\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n\n useEffect(() => {\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n const adminIds = data\n ?.filter((role) => role?.name?.toLowerCase()?.includes(\"admin\"))\n .map((role) => role.id);\n setAdminRolesId(adminIds);\n const allIds = data?.map((role) => role.id);\n setRolesIds(allIds);\n setIsLoading(true);\n const { data: featureJson } =\n await getAssignedFeatures(\"techo.manage.users\");\n featureJson && setRights(JSON.parse(featureJson));\n if (!location?.state?.fromManageUser === true) {\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n }\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n console.error(\"Error loading initial data:\", error);\n }\n };\n loadInitialData();\n }, []);\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n useEffect(() => {\n const allUsers = pageData?.pages?.flat() || [];\n setHasMore(hasNextPage);\n setUsersData(allUsers);\n }, [pageData]);\n\n const getAllUser = async () => {\n try {\n const batchSize = 50000;\n let offset = 0;\n let allUsers = [];\n let hasMoreUsers = true;\n\n while (hasMoreUsers) {\n const response = await getUsersList({\n limit: batchSize,\n offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n\n const currentBatch = response?.data || [];\n allUsers = [...allUsers, ...currentBatch];\n\n if (currentBatch.length < batchSize) {\n hasMoreUsers = false;\n } else {\n offset += batchSize;\n }\n }\n\n return allUsers;\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in retriving all Users\", type: \"error\" });\n return [];\n }\n };\n const processAndDownloadExcel = async (data) => {\n try {\n const now = new Date();\n const month = now.getMonth() + 1;\n const fileName = `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`;\n\n const worksheet = XLSX.utils.json_to_sheet(data);\n\n const headerStyle = {\n font: { bold: true },\n alignment: { horizontal: \"center\" },\n };\n\n if (data.length > 0) {\n const range = XLSX.utils.decode_range(worksheet[\"!ref\"]);\n\n for (let C = range.s.c; C <= range.e.c; ++C) {\n const cell = worksheet[XLSX.utils.encode_cell({ r: 0, c: C })];\n if (!cell) continue;\n cell.s = headerStyle;\n }\n }\n\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Sheet1\");\n\n const excelBuffer = XLSX.write(workbook, {\n bookType: \"xlsx\",\n type: \"array\",\n });\n\n const blob = new Blob([excelBuffer], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n });\n const blobSizeInMB = (blob.size / (1024 * 1024)).toFixed(2);\n\n saveAs(blob, `${fileName}.xlsx`);\n\n trackEvent(\"file_download\", {\n file_type: \"excel\",\n file_name: `${fileName}.xlsx`,\n file_size: `${blobSizeInMB} MB`,\n filter_parameters: {\n taskTypeId: usersData.id,\n },\n download_status: \"success\",\n });\n } catch (error) {\n console.error(\"Error generating Excel file:\", error);\n showToast({ message: \"Error generating Excel file\", type: \"error\" });\n }\n };\n const [disableExcel, setDisableExcel] = useState(false);\n const downloadExcel = async () => {\n try {\n setDisableExcel(true);\n let userList;\n if (allUsers?.length === 0) {\n userList = await getAllUser();\n setAllUsers(userList);\n } else {\n userList = allUsers;\n }\n\n let taskDetails = [];\n if (userList && userList.length > 0) {\n taskDetails = userList.map((user, index) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n \"No.\": index + 1,\n NAME: name || \"NA\",\n \"USER IDENTITY\": user?.userName || \"NA\",\n \"MOBILE NUMBER\": user?.contactNumber || \"NA\",\n \"USER ROLE\": user?.roleName || \"NA\",\n \"AREA OF INTERVENTION\": areaOfIntervention || \"NA\",\n \"HEALTH INFRASTRUCTURE\": user?.healthFacilityName || \"NA\",\n \"USER STATUS\": user?.displayState || \"NA\",\n };\n\n // Convert `null` values to empty strings and boolean values to \"Yes\" or \"No\"\n Object.keys(processedUser).forEach((key) => {\n if (key === \"id\") {\n delete processedUser[key];\n } else if (processedUser[key] === null) {\n processedUser[key] = \"\";\n } else if (typeof processedUser[key] === \"boolean\") {\n processedUser[key] = processedUser[key] ? \"Yes\" : \"No\";\n }\n });\n\n return processedUser;\n });\n\n // Call the function to process data and download the Excel file\n }\n processAndDownloadExcel(taskDetails);\n setDisableExcel(false);\n } catch (error) {\n setDisableExcel(false);\n console.log(error);\n showToast({\n message: \"Error in downloading excel\",\n type: \"error\",\n });\n }\n };\n\n const downloadPdf = useDownloadPdf();\n const [disablePdf, setDisablePdf] = useState(false);\n const handleDownloadPdf = async () => {\n try {\n setDisablePdf(true);\n let usersData = [];\n\n if (allUsers?.length === 0) {\n usersData = await getAllUser();\n setAllUsers(usersData);\n } else {\n usersData = allUsers;\n }\n if (!usersData || usersData.length === 0) return;\n // Build columns and keys as in TableComponent\n let pdfColumns = [];\n let pdfKeys = [];\n pdfColumns.push(\"NAME\");\n pdfKeys.push(\"name\");\n defaultColumns\n .filter(\n (col) =>\n col.field !== \"Actions\" &&\n col.field !== \"index\" &&\n col.field !== \"Sr. No.\",\n )\n .forEach((col) => {\n pdfColumns.push(col.label);\n pdfKeys.push(col.field);\n });\n let taskDetails = usersData.map((user) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n ...user,\n name: name || \"NA\",\n areaOfIntervention: areaOfIntervention,\n };\n return processedUser;\n });\n\n const now = new Date();\n const month = now.getMonth() + 1;\n\n downloadPdf({\n columns: pdfColumns,\n keys: pdfKeys,\n data: taskDetails,\n fileName: `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`,\n headerText: \"User List\",\n footerText: \"User List\",\n orientation: pdfColumns.length > 7 ? \"landscape\" : \"portrait\",\n });\n setDisablePdf(false);\n } catch (error) {\n setDisablePdf(false);\n console.error(error);\n }\n };\n\n const resetFilter = () => {\n setLocationId(null);\n setRoleDetails(null);\n setStatus(\"BOTH\");\n setUserFilterPreference({});\n setFilterRequired(false);\n setLocations([]);\n setAdminRoleIdsStats([]);\n // setSelectedLocation([])\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n setSelectedLocationId(null);\n setSelectedLocation({});\n setResetLocationDirective((cur) => {\n return cur + 1;\n });\n locationIdRef.current = null;\n handleOverlayState();\n };\n\n return !isLoading && !rights?.[\"view.manage.users\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card\n className=\"h-80 w-150 flex justify-center items-center\"\n data-testid=\"userlist-no-permission\"\n >\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to view Users\n </Typography>\n </Card>\n </Box>\n ) : (\n <Grid className=\"w-[98%] mt-4 \">\n <CustomConfirmationModal\n open={openModel === 1}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickStatusModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want toggle the state of this user type?\"\n dataTestId=\"userlist-modal-status-confirmation\"\n />\n <CustomConfirmationModal\n open={openModel === 2}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickGenerateSOHModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want to Generate SOH code ?\"\n dataTestId=\"userlist-modal-generate-soh-confirmation\"\n />\n\n <UserListSkeleton isLoading={isLoading}>\n <Grid\n container\n className=\"flex flex-col md:flex-row mb-2 justify-between items-start md:items-center space-y-2 md:space-y-0\"\n >\n <Grid>\n <Typography\n variant=\"body2\"\n className=\"font-bold font-sans text-lg text-[var(--color-customBlue)] uppercase text-customBlue\"\n data-testid=\"notification-list-typography-title\"\n >\n {translate(\"User List\")}\n </Typography>\n </Grid>\n\n <Grid className=\"flex flex-col md:flex-row w-full md:w-auto space-y-2 md:space-y-0 md:space-x-3\">\n <Grid className=\"w-full md:w-auto\">\n <TextField\n name=\"searchQuery\"\n id=\"searchQuery\"\n className=\"w-full md:w-auto\"\n placeholder=\"Search...\"\n size=\"small\"\n onChange={(e) => setSearch(e.target?.value)}\n value={search}\n data-testid=\"userlist-textfield-search\"\n sx={{\n \"& .MuiInputBase-root\": {\n backgroundColor: (theme) => theme.palette.background.paper,\n },\n }}\n />\n </Grid>\n <div className=\"flex items-center gap-3 flex-wrap md:flex-nowrap\">\n {/* PDF + Excel group */}\n <div\n className={`flex items-center rounded-2xl p-1 shadow-sm transition-all duration-300 border ${isDark\n ? \"bg-slate-900 border-slate-800\"\n : \"bg-white border-slate-200\"\n }`}\n >\n <button\n disabled={disablePdf}\n onClick={handleDownloadPdf}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ${isDark\n ? \"text-slate-400 hover:text-slate-100 hover:bg-slate-800\"\n : \"text-slate-600 hover:text-red-600 hover:bg-slate-50\"\n }`}\n >\n {disablePdf ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n )}\n </button>\n\n <button\n disabled={disableExcel}\n onClick={() => downloadExcel(usersData)}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ml-1 ${isDark\n ? \"bg-slate-800 text-slate-100 hover:bg-slate-700\"\n : \"bg-[#243A50] text-white hover:bg-[#1a2b3c]\"\n }`}\n >\n {disableExcel ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n )}\n </button>\n </div>\n\n {/* Add Button */}\n {rights?.[\"create.manage.users\"] && (\n <Button\n variant=\"contained\"\n className=\"w-auto ml-auto\"\n onClick={() => {\n trackEvent(\"button_click\", {\n button_name: \"add_user\",\n button_type: \"navigate\",\n button_id: \"userlist-button-add\",\n });\n navigate(\"/ui/medplat/manage/user\");\n }}\n size=\"small\"\n data-testid=\"userlist-button-add\"\n >\n {translate(\"Add\")}\n </Button>\n )}\n </div>\n\n {/* <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFilePdf}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n data-testid=\"userlist-icon-pdf\"\n onClick={handleDownloadPdf}\n />\n </Grid>\n <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFileExcel}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n onClick={() => downloadExcel(usersData)}\n data-testid=\"userlist-icon-save\"\n />\n </Grid> */}\n </Grid>\n </Grid>\n </UserListSkeleton>\n\n <UserStatsSkeleton isLoading={userStatsLoading}>\n {userStats && (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mt-4 mb-4\">\n <CustomStatsComponent\n title=\"Total Users\"\n value={userStats?.total_users || 0}\n icon={faUsers}\n bottomIndicator={totalUserColor}\n selected={status === \"BOTH\" && adminRoleIdsStats.length === 0}\n selectedBgColor={totalUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.total_users > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n } else {\n showToast({ message: \"No users found\", type: \"warning\" });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Active Users\"\n value={userStats?.active_count || 0}\n icon={faCheckCircle}\n bottomIndicator={activeUserColor}\n selected={status === \"ACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={activeUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.active_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"ACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"ACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Inactive Users\"\n value={userStats?.inactive_count || 0}\n icon={faTimesCircle}\n bottomIndicator={inactiveUserColor}\n selected={status === \"INACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={inactiveUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.inactive_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"INACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"INACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No inactive users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Admins\"\n value={userStats?.admin_role_count || 0}\n icon={faUserShield}\n bottomIndicator={adminUserColor}\n selected={adminRoleIdsStats.length > 0}\n selectedBgColor={adminUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.admin_role_count > 0) {\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n setAdminRoleIdsStats(adminRolesIds);\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n </div>\n )}\n </UserStatsSkeleton>\n\n <CustomizedTable\n columns={columns}\n tableData={updatedData}\n actions={getActions}\n paginationConfig={{\n pagination: true,\n paginationType: \"infinite-scroll\",\n rowsPerPageInTable: pageSize,\n hasMore,\n loadMore: () => hasMore && fetchNextPage({ cancelRefetch: false }),\n }}\n styleConfig={{ cellStyle: { maxLines: 2 } }}\n isLoading={usersData ? isLoading : true}\n handleSort={handleSort}\n dataTestId=\"userlist-table-customized\"\n />\n <SideOverlay\n title=\"User Filter\"\n resetButtonLabel=\"Reset\"\n onResetClick={resetFilter}\n FormBody={UserFilterForm}\n handleOverlayState={handleOverlayState}\n overlayOpen={overlayOpen}\n dataTestId=\"userlist-overlay-filter\"\n formProps={{\n setAdminRoleIdsStats,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n setSelectedLocation,\n selectedLocation,\n filterRequired,\n setFilterRequired,\n setUserFilterPreference,\n user,\n userFilterPreference,\n locationIdRef,\n setSelectedLocationId,\n resetLocationDirective,\n setResetLocationDirective,\n locations,\n setLocations,\n }}\n />\n </Grid>\n );\n}\n"],"names":["LocationSelectionComponent","lazy","UserFilterForm","handleOverlayState","setIsLoading","isLoading","setLocationId","setRoleDetails","roleDetails","status","setStatus","selectedLocation","setSelectedLocation","filterRequired","setUserFilterPreference","user","setFilterRequired","locationIdRef","locations","setLocations","setAdminRoleIdsStats","roles","setRoles","useState","trackEvent","useTrackEvent","translate","useTranslateProvider","methods","useForm","dispatch","useDispatch","location","useLocation","control","handleSubmit","errors","getValues","setValue","clearErrors","loadInitialData","data","getRoles","_a","_b","_c","_d","error","useEffect","onSubmit","cur","searchObject","selectedLocationId","selectedRole","item","setUserDetails","showToast","jsx","FormProvider","jsxs","Grid","event","UserFilterFormSwitchButtonSkeleton","InputLabel","Switch","e","Suspense","GeneralUtil","UserFilterFormSkeleton","CustomDropdown","Button","PropTypes","UserList","navigate","useNavigate","adminRolesIds","setAdminRolesId","allUsers","setAllUsers","totalUserColor","activeUserColor","inactiveUserColor","adminUserColor","whiteColor","adminRoleIdsStats","rolesIds","setRolesIds","userStats","setUserStats","userStatsLoading","setUserStatsLoading","theme","useTheme","isDark","openModel","setOpenModel","rights","setRights","rightsRef","useRef","row","setRow","search","setSearch","debounceSearch","setDebounceSearch","usersData","setUsersData","hasMore","setHasMore","overlayOpen","setOverlayOpen","sortConfig","setSortConfig","toggle","setToggle","pageSize","locationId","useSelector","state","setSelectedLocationId","_e","userFilterPreference","_f","resetLocationDirective","setResetLocationDirective","updatedData","useMemo","index","name","response","execute","defaultColumns","Box","alpha","n","FontAwesomeIcon","faPhone","formattedArea","Tooltip","faHospital","isActive","columns","setColumns","handleClickStatusModal","is_active","toggleUserStatus","errorCode","message","handleClickGenerateSOHModal","generateSOHCode","users","handleEditUser","getActions","useCallback","faPen","faBars","handleSort","column","newOrder","prev","col","timer","loadMoreData","pageParam","initialLoad","getUsersList","pageData","fetchNextPage","hasNextPage","usePagination","isInitial","adminIds","role","allIds","featureJson","getAssignedFeatures","getAllUser","offset","hasMoreUsers","currentBatch","processAndDownloadExcel","now","month","fileName","worksheet","XLSX.utils","headerStyle","range","C","cell","workbook","excelBuffer","XLSX.write","blob","blobSizeInMB","saveAs","disableExcel","setDisableExcel","downloadExcel","userList","taskDetails","areaOfIntervention","processedUser","key","downloadPdf","useDownloadPdf","disablePdf","setDisablePdf","handleDownloadPdf","pdfColumns","pdfKeys","resetFilter","Card","Typography","CustomConfirmationModal","UserListSkeleton","TextField","Fragment","CircularProgress","faFilePdf","faFileExcel","UserStatsSkeleton","CustomStatsComponent","faUsers","faCheckCircle","faTimesCircle","faUserShield","CustomizedTable","SideOverlay"],"mappings":"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"}
|