client-web/build-prod/static/js/50.57553c55.chunk.js.map
{"version":3,"file":"static/js/50.57553c55.chunk.js","mappings":"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","sources":["components/NoDataImage.tsx","pages/Owner/NewUserModal.tsx","components/EditAcl.tsx","pages/Owner/Users.tsx"],"sourcesContent":["import * as React from 'react'\nimport './NoDataImage.scss'\n\nexport default function NoDataImage() {\n return <div className='noDataImg'></div>\n}","import React, { useState } from \"react\";\nimport Dialog from \"@mui/material/Dialog\";\nimport DialogTitle from \"@mui/material/DialogTitle\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { useFormik } from \"formik\";\nimport TextField from \"@mui/material/TextField\";\nimport { useStoreState } from \"../../store\";\nimport FormControl from \"@mui/material/FormControl\";\nimport InputLabel from \"@mui/material/InputLabel\";\nimport LoadingButton from \"@mui/lab/LoadingButton\";\nimport * as http from \"../../http\";\nimport DialogContent from \"@mui/material/DialogContent\";\nimport DialogContentText from \"@mui/material/DialogContentText\";\nimport Button from \"@mui/material/Button\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport { NativeSelect } from \"@mui/material\";\n\ntype TProps = {\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n setUsers: React.Dispatch<React.SetStateAction<any>>;\n};\n\nexport default function NewUserModal({ open, setOpen, setUsers }: TProps) {\n const apps = useStoreState((state) => state.apps);\n const addAppUsers = useStoreState((state) => state.addAppUsers);\n const [loading, setLoading] = useState(false);\n\n const formik = useFormik({\n initialValues: {\n firstName: \"\",\n lastName: \"\",\n username: \"\",\n password: \"\",\n appId: apps[0]?._id,\n },\n validate: (values) => {\n const errors: Record<string, string> = {};\n\n if (!values.firstName) {\n errors.firstName = \"Required\";\n }\n\n if (!values.lastName) {\n errors.lastName = \"Required\";\n }\n\n if (!values.username) {\n errors.username = \"Required\";\n }\n\n if (!values.password) {\n errors.password = \"Required\";\n }\n\n return errors;\n },\n onSubmit: ({ username, firstName, lastName, password, appId }) => {\n setLoading(true);\n const app = apps.find((el) => el._id === appId);\n http\n .registerUsername(\n username,\n password,\n firstName,\n lastName,\n app?.appToken\n )\n .then((result) => {\n setUsers((old) => {\n return [...old, result.data.user];\n });\n setOpen(false);\n });\n },\n });\n\n if (apps.length === 0) {\n return (\n <Dialog\n open={open}\n onClose={() => {}}\n aria-labelledby=\"responsive-dialog-title\"\n >\n <DialogTitle id=\"responsive-dialog-title\">There is no apps</DialogTitle>\n <DialogContent>\n <DialogContentText>\n You should create app first please!\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n disabled={loading}\n variant=\"contained\"\n autoFocus\n onClick={() => setOpen(false)}\n >\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Dialog onClose={() => {}} open={open}>\n <Box style={{ width: \"400px\" }}>\n <DialogTitle\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n New User\n <IconButton disabled={loading} onClick={() => setOpen(false)}>\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <Box sx={{ width: \"100%\", typography: \"body1\", padding: 1 }}>\n <form onSubmit={formik.handleSubmit}>\n <Box>\n <FormControl fullWidth>\n <InputLabel variant=\"standard\" htmlFor=\"uncontrolled-native\">\n App\n </InputLabel>\n <NativeSelect\n inputProps={{\n name: \"appName\",\n id: \"uncontrolled-native\",\n }}\n onChange={(e) => {\n formik.setFieldValue(\"appId\", e.target.value);\n }}\n >\n {apps.map((app) => {\n return (\n <option key={app._id} value={app._id}>\n {app.appName}\n </option>\n );\n })}\n </NativeSelect>\n </FormControl>\n </Box>\n <Box>\n <TextField\n fullWidth\n error={\n formik.touched.firstName && formik.errors.firstName\n ? true\n : false\n }\n helperText={\n formik.touched.firstName && formik.errors.firstName\n ? formik.errors.firstName\n : \"\"\n }\n margin=\"dense\"\n label=\"First Name\"\n name=\"firstName\"\n variant=\"standard\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.firstName}\n />\n <TextField\n fullWidth\n error={\n formik.touched.lastName && formik.errors.lastName\n ? true\n : false\n }\n helperText={\n formik.touched.lastName && formik.errors.lastName\n ? formik.errors.lastName\n : \"\"\n }\n margin=\"dense\"\n label=\"Last Name\"\n name=\"lastName\"\n variant=\"standard\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.lastName}\n />\n <TextField\n fullWidth\n error={\n formik.touched.lastName && formik.errors.username\n ? true\n : false\n }\n helperText={\n formik.touched.username && formik.errors.username\n ? formik.errors.username\n : \"\"\n }\n margin=\"dense\"\n label=\"Username\"\n name=\"username\"\n variant=\"standard\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.username}\n />\n <TextField\n fullWidth\n error={\n formik.touched.password && formik.errors.password\n ? true\n : false\n }\n helperText={\n formik.touched.password && formik.errors.password\n ? formik.errors.password\n : \"\"\n }\n margin=\"dense\"\n label=\"Password\"\n name=\"password\"\n variant=\"standard\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.password}\n />\n </Box>\n <Box\n style={{\n display: \"inline-flex\",\n margin: \"0 auto\",\n flexDirection: \"column\",\n }}\n >\n <LoadingButton\n loading={loading}\n variant=\"contained\"\n style={{ marginTop: \"15px\" }}\n type=\"submit\"\n disabled={loading}\n >\n Create New User\n </LoadingButton>\n </Box>\n </form>\n </Box>\n </Box>\n </Dialog>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport Paper from \"@mui/material/Paper\";\nimport { Button, Checkbox, Typography } from \"@mui/material\";\nimport {\n getUserAcl,\n IAclBody,\n IUserAcl,\n TPermission,\n updateUserAcl,\n} from \"../http\";\nimport { Box } from \"@mui/system\";\nimport { FullPageSpinner } from \"./FullPageSpinner\";\nimport { useStoreState } from \"../store\";\n\nexport interface IEditAcl {\n userId: string;\n updateData?(user: IUserAcl): void;\n}\n\nconst label = { inputProps: { \"aria-label\": \"Checkbox\" } };\ntype TKeys =\n | \"appCreate\"\n | \"appPush\"\n | \"appSettings\"\n | \"appStats\"\n | \"appTokens\"\n | \"appUsers\";\n\nconst checkDisabled = (arr: Array<string> | undefined, property: string) => {\n if (!arr) return false;\n return !!arr.find((item) => item === property);\n};\nconst checkAdminEnabled = (acl: TPermission) => {\n if (!acl) return false;\n return !!Object.entries(acl).find((item) => item[0] === \"admin\" && !!item[1]);\n};\nconst Row = ({\n name,\n row,\n onChange,\n disableAllRow,\n}: {\n name: TKeys;\n row: TPermission;\n disableAllRow: boolean;\n onChange: (\n e: React.ChangeEvent<HTMLInputElement>,\n keyToChange: TKeys\n ) => void;\n}) => {\n const isOwner = useStoreState((state) => state.user?.ACL.ownerAccess);\n return (\n <TableRow\n sx={{\n \"&:last-child td, &:last-child th\": { border: 0 },\n }}\n >\n <TableCell component=\"th\" scope=\"row\">\n {name}\n </TableCell>\n <TableCell\n style={{\n backgroundColor: !checkDisabled(row?.disabled, \"create\")\n ? \"white\"\n : \"lightgrey\",\n }}\n align=\"left\"\n >\n <Checkbox\n checked={row?.create}\n name={\"create\"}\n disabled={\n (checkDisabled(row?.disabled, \"create\") || disableAllRow) &&\n !isOwner\n }\n onChange={(e) => onChange(e, name)}\n {...label}\n />\n </TableCell>\n <TableCell\n style={{\n backgroundColor: !checkDisabled(row?.disabled, \"read\")\n ? \"white\"\n : \"lightgrey\",\n }}\n align=\"left\"\n >\n <Checkbox\n name={\"read\"}\n onChange={(e) => onChange(e, name)}\n disabled={checkDisabled(row?.disabled, \"read\") || disableAllRow}\n checked={row?.read}\n {...label}\n />\n </TableCell>\n <TableCell\n style={{\n backgroundColor: !checkDisabled(row?.disabled, \"update\")\n ? \"white\"\n : \"lightgrey\",\n }}\n align=\"left\"\n >\n <Checkbox\n name={\"update\"}\n onChange={(e) => onChange(e, name)}\n disabled={checkDisabled(row?.disabled, \"update\") || disableAllRow}\n checked={row?.update}\n {...label}\n />\n </TableCell>\n <TableCell\n style={{\n backgroundColor: !checkDisabled(row?.disabled, \"delete\")\n ? \"white\"\n : \"lightgrey\",\n }}\n align=\"left\"\n >\n <Checkbox\n name={\"delete\"}\n onChange={(e) => onChange(e, name)}\n disabled={checkDisabled(row?.disabled, \"delete\") || disableAllRow}\n checked={row?.delete}\n {...label}\n />\n </TableCell>\n <TableCell\n style={{\n backgroundColor: !checkDisabled(row?.disabled, \"admin\")\n ? \"white\"\n : \"lightgrey\",\n }}\n align=\"left\"\n >\n <Checkbox\n name={\"admin\"}\n onChange={(e) => onChange(e, name)}\n disabled={checkDisabled(row?.disabled, \"admin\") || disableAllRow}\n checked={row?.admin}\n {...label}\n />\n </TableCell>\n </TableRow>\n );\n};\n\nexport const EditAcl: React.FC<IEditAcl> = ({ userId, updateData }) => {\n const [userAcl, setUserAcl] = useState<IUserAcl>();\n const [userAclApplicationKeys, setUserAclApplicationKeys] = useState<\n Array<TKeys>\n >([]);\n const [userAclNetworkKeys, setUserAclNetworkKeys] = useState<Array<TKeys>>(\n []\n );\n const myAcl = useStoreState((state) => state.ACL);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n console.log(\"userAclApplicationKeys \", userAclApplicationKeys);\n }, [userAclApplicationKeys]);\n\n const getAcl = async () => {\n setLoading(true);\n try {\n const { data } = await getUserAcl(userId);\n console.log(\"getAcl \", data);\n setUserAcl(data);\n const appKeys = Object.keys(data.result.application) as TKeys[];\n const networkKeys = Object.keys(data.result.network) as TKeys[];\n\n setUserAclApplicationKeys(appKeys);\n setUserAclNetworkKeys(networkKeys);\n } catch (error) {\n console.log(error);\n }\n setLoading(false);\n };\n\n const onApplicationAclChange = (\n e: React.ChangeEvent<HTMLInputElement>,\n keyToChange: TKeys\n ) => {\n setUserAcl((prev) => ({\n result: {\n ...prev!.result,\n application: {\n ...prev!.result!.application,\n [keyToChange]: {\n ...prev!.result!.application[keyToChange],\n [e.target.name]: e.target.checked,\n },\n },\n },\n }));\n };\n const onNetworkAclChange = (\n e: React.ChangeEvent<HTMLInputElement>,\n keyToChange: TKeys\n ) => {\n setUserAcl((prev) => ({\n result: {\n ...prev!.result,\n network: {\n ...prev!.result!.network,\n netStats: {\n ...prev!.result!.network.netStats,\n [e.target.name]: e.target.checked,\n },\n },\n },\n }));\n };\n\n const updateAcl = async () => {\n setLoading(true);\n try {\n const filteredApplication = Object.fromEntries(\n Object.entries(userAcl!.result!.application).map((item) => {\n delete item[1].disabled;\n return item;\n })\n );\n const filteredNetwork = Object.fromEntries(\n Object.entries(userAcl!.result!.network).map((item) => {\n delete item[1].disabled;\n return item;\n })\n );\n\n const body = {\n application: filteredApplication,\n network: filteredNetwork,\n } as IAclBody;\n\n const aclRes = await updateUserAcl(userId, body);\n const updatedUserAcl = aclRes.data as IUserAcl;\n if (updateData) {\n updateData(updatedUserAcl);\n }\n } catch (error) {\n console.log(error);\n }\n setLoading(false);\n };\n useEffect(() => {\n getAcl();\n }, []);\n\n if (loading) {\n return <FullPageSpinner />;\n }\n\n return (\n <>\n <Typography marginBottom={\"10px\"} fontWeight={\"bold\"}>\n Applications\n </Typography>\n\n <TableContainer component={Paper}>\n <Table size={\"small\"} sx={{ minWidth: 650 }} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Create</TableCell>\n <TableCell align=\"left\">Read</TableCell>\n <TableCell align=\"left\">Update</TableCell>\n <TableCell align=\"left\">Delete</TableCell>\n <TableCell align=\"left\">Admin</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {myAcl.result &&\n userAclApplicationKeys.map((row) => {\n const application = userAcl!.result.application[row];\n const myApplicationAcl = myAcl!.result.application[row];\n\n return (\n <Row\n disableAllRow={!checkAdminEnabled(myApplicationAcl)}\n // disableAllRow={false}\n onChange={onApplicationAclChange}\n name={row}\n row={application}\n key={row}\n />\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n <Typography marginBottom={\"10px\"} marginTop={\"10px\"} fontWeight={\"bold\"}>\n Networks\n </Typography>\n\n <TableContainer component={Paper}>\n <Table size={\"small\"} sx={{ minWidth: 650 }} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n\n <TableCell>Create</TableCell>\n <TableCell align=\"left\">Read</TableCell>\n <TableCell align=\"left\">Update</TableCell>\n <TableCell align=\"left\">Delete</TableCell>\n <TableCell align=\"left\">Admin</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {userAclNetworkKeys.map((row) => {\n const network = userAcl!.result.network.netStats;\n const myNetworkAcl = myAcl!.result.network.netStats;\n\n return (\n <Row\n disableAllRow={!checkAdminEnabled(myNetworkAcl)}\n // disableAllRow={false}\n onChange={onNetworkAclChange}\n name={row}\n row={network}\n key={row}\n />\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n <Box\n sx={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"flex-end\",\n marginTop: \"20px\",\n }}\n >\n <Button variant=\"contained\" onClick={updateAcl}>\n Update Acl\n </Button>\n </Box>\n </>\n );\n};\n","import * as React from \"react\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport Paper from \"@mui/material/Paper\";\nimport Box from \"@mui/material/Box\";\nimport { IconButton, Modal, Typography } from \"@mui/material\";\nimport AddCircleIcon from \"@mui/icons-material/AddCircle\";\nimport Select, { SelectChangeEvent } from \"@mui/material/Select\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport { useStoreState } from \"../../store\";\nimport NoDataImage from \"../../components/NoDataImage\";\nimport NewUserModal from \"./NewUserModal\";\nimport FormControl from \"@mui/material/FormControl\";\nimport InputLabel from \"@mui/material/InputLabel\";\nimport Pagination from \"@mui/material/Pagination\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport * as http from \"../../http\";\nimport { EditAcl } from \"../../components/EditAcl\";\n\nconst boxStyle = {\n position: \"absolute\" as \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"70vw\",\n bgcolor: \"background.paper\",\n boxShadow: 24,\n borderRadius: \"10px\",\n p: 4,\n};\n\nfunction hasACLAdmin(acl: http.IUserAcl): boolean {\n const appKeys = Object.keys(acl.result.application);\n let hasAdmin = false;\n for (let i = 0; i < appKeys.length; i++) {\n if (acl.result.application[appKeys[i]].admin === true) {\n hasAdmin = true;\n break;\n }\n }\n\n return hasAdmin;\n}\n\nexport default function UsersTable() {\n const apps = useStoreState((state) => state.apps);\n const ownerAccess = useStoreState((state) => state.user.ACL.ownerAccess);\n const user = useStoreState((state) => state.user);\n const [showNewUser, setShowNewUser] = React.useState(false);\n const [users, setUsers] = React.useState<[] | http.IUser[]>([]);\n const [currentApp, setCurrentApp] = React.useState<string>();\n const [aclEditData, setAclEditData] = React.useState({\n modalOpen: false,\n userId: \"\",\n });\n const [hasAdmin, setHasAdmin] = React.useState(false);\n const ACL = useStoreState((state) => state.ACL);\n\n React.useEffect(() => {\n setHasAdmin(hasACLAdmin(ACL));\n }, [ACL]);\n\n const [pagination, setPagination] = React.useState<{\n total: number;\n limit: number;\n offset: number;\n }>();\n\n const getUsers = async (\n appId: string | null,\n limit: number = 10,\n offset: number = 0\n ) => {\n try {\n if (appId) {\n console.log(appId);\n const getUsersResp = await http.getAppUsers(appId, limit, offset);\n const { data } = getUsersResp;\n setPagination({\n limit: data.limit,\n offset: data.offset,\n total: data.total,\n });\n return data.items;\n }\n } catch (e) {}\n return [];\n };\n\n React.useEffect(() => {\n if (ownerAccess) {\n if (apps.length) {\n setCurrentApp(apps[0]._id);\n getUsers(apps[0]._id).then((users) => {\n setUsers(users);\n });\n }\n }\n }, [apps]);\n\n React.useEffect(() => {\n if (!ownerAccess) {\n setCurrentApp(user.appId);\n getUsers(user.appId).then((users) => {\n setUsers(users);\n });\n }\n }, []);\n\n React.useEffect(() => {\n console.log(\"Users mount\");\n }, []);\n\n const onAppSelectChange = (e: SelectChangeEvent) => {\n setCurrentApp(e.target.value);\n getUsers(e.target.value).then((users) => {\n setUsers(users);\n });\n };\n\n const onPagination = (event: React.ChangeEvent<unknown>, page: number) => {\n // page = 1 => offset 0\n // page = 2 => offset 10\n // page = 3 => offset 20\n let offset = 0;\n if (page - 1 > 0) {\n offset = (page - 1) * (pagination?.limit || 10);\n }\n\n getUsers(currentApp || null, pagination?.limit || 10, offset).then(\n (users) => setUsers(users)\n );\n };\n\n const handleAclEditOpen = (userId: string) =>\n setAclEditData({ modalOpen: true, userId: userId });\n\n const handleAclEditClose = () =>\n setAclEditData({ modalOpen: false, userId: \"\" });\n\n const updateUserDataAfterAclChange = (user: http.IUserAcl) => {\n const oldUsers = users;\n const indexToUpdate = oldUsers.findIndex(\n (item) => item._id === aclEditData.userId\n );\n if (indexToUpdate !== -1) {\n }\n oldUsers[indexToUpdate]._id = user.result.userId;\n setUsers(oldUsers);\n };\n\n return (\n <TableContainer component={Paper} style={{ margin: \"0 auto\" }}>\n <Box style={{ display: \"flex\", alignItems: \"center\" }}>\n <Typography variant=\"h6\" style={{ margin: \"16px\" }}>\n Users\n </Typography>\n {currentApp && ownerAccess ? (\n <FormControl variant=\"standard\" sx={{ m: 1, minWidth: 120 }}>\n <InputLabel id=\"demo-simple-select-label\">App</InputLabel>\n <Select\n labelId=\"demo-simple-select-label\"\n id=\"demo-simple-select\"\n label=\"App\"\n value={currentApp}\n onChange={onAppSelectChange}\n >\n {apps.map((app) => {\n return (\n <MenuItem key={app._id} value={app._id}>\n {app.appName}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n ) : null}\n\n {(ownerAccess || ACL.result.application.appUsers.create) && (\n <IconButton onClick={() => setShowNewUser(true)} size=\"large\">\n <AddCircleIcon fontSize=\"large\"></AddCircleIcon>\n </IconButton>\n )}\n </Box>\n {users.length === 0 && (\n <Box\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n <NoDataImage></NoDataImage>\n <Typography style={{ marginTop: \"20px\", marginBottom: \"20px\" }}>\n Users not found.\n </Typography>\n </Box>\n )}\n\n {users.length > 0 && (\n <Table aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell width={200}>appId</TableCell>\n <TableCell align=\"right\">firstName</TableCell>\n <TableCell align=\"right\">lastName</TableCell>\n <TableCell align=\"right\">username</TableCell>\n <TableCell align=\"right\">email</TableCell>\n <TableCell align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {users.map((user) => (\n <TableRow\n key={user._id}\n sx={{ \"&:last-child td, &:last-child th\": { border: 0 } }}\n >\n <TableCell component=\"th\" scope=\"row\">\n {user.appId}\n </TableCell>\n <TableCell align=\"right\">{user.firstName}</TableCell>\n <TableCell align=\"right\">{user.lastName}</TableCell>\n <TableCell align=\"right\">\n {user.username ? user.username : \"-\"}\n </TableCell>\n <TableCell align=\"right\">\n {user.email ? user.email : \"-\"}\n </TableCell>\n <TableCell align=\"right\">\n <Box sx={{ width: \"200px\" }}>\n {ACL.result.application.appUsers.update && (\n <Typography>Edit</Typography>\n )}\n\n {hasAdmin && (\n <Typography\n style={{\n cursor: \"pointer\",\n textDecoration: \"underline\",\n }}\n onClick={() => handleAclEditOpen(user._id)}\n >\n Edit ACL\n </Typography>\n )}\n </Box>\n </TableCell>\n </TableRow>\n ))}\n {pagination?.total && (\n <TableRow>\n <TableCell colSpan={6}>\n <Pagination\n onChange={onPagination}\n count={Math.ceil(pagination.total / pagination.limit)}\n />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n )}\n <NewUserModal\n open={showNewUser}\n setUsers={setUsers}\n setOpen={setShowNewUser}\n />\n <Modal\n open={aclEditData.modalOpen}\n onClose={handleAclEditClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n >\n <Box sx={boxStyle}>\n <EditAcl\n updateData={updateUserDataAfterAclChange}\n userId={aclEditData.userId}\n />\n <IconButton\n onClick={handleAclEditClose}\n sx={{ position: \"absolute\", top: 0, right: 0, color: \"black\" }}\n >\n <CloseIcon fontSize={\"large\"} />\n </IconButton>\n </Box>\n </Modal>\n </TableContainer>\n );\n}\n"],"names":["NoDataImage","className","NewUserModal","open","setOpen","setUsers","apps","useStoreState","state","addAppUsers","useState","loading","setLoading","formik","useFormik","initialValues","firstName","lastName","username","password","appId","_id","validate","values","errors","onSubmit","app","find","el","http","appToken","then","result","old","data","user","length","Dialog","onClose","DialogTitle","id","DialogContent","DialogContentText","DialogActions","Button","disabled","variant","autoFocus","onClick","Box","style","width","display","justifyContent","IconButton","Close","sx","typography","padding","handleSubmit","FormControl","fullWidth","InputLabel","htmlFor","NativeSelect","inputProps","name","onChange","e","setFieldValue","target","value","map","appName","TextField","error","touched","helperText","margin","label","handleChange","onBlur","handleBlur","flexDirection","LoadingButton","marginTop","type","checkDisabled","arr","property","item","checkAdminEnabled","acl","Object","entries","Row","row","disableAllRow","isOwner","ACL","ownerAccess","TableRow","border","TableCell","component","scope","backgroundColor","align","Checkbox","checked","create","read","update","delete","admin","EditAcl","userId","updateData","userAcl","setUserAcl","userAclApplicationKeys","setUserAclApplicationKeys","userAclNetworkKeys","setUserAclNetworkKeys","myAcl","useEffect","console","log","getAcl","getUserAcl","appKeys","keys","application","networkKeys","network","onApplicationAclChange","keyToChange","prev","onNetworkAclChange","netStats","updateAcl","filteredApplication","fromEntries","filteredNetwork","body","updateUserAcl","aclRes","updatedUserAcl","FullPageSpinner","Typography","marginBottom","fontWeight","TableContainer","Paper","Table","size","minWidth","TableHead","TableBody","myApplicationAcl","myNetworkAcl","boxStyle","position","top","left","transform","bgcolor","boxShadow","borderRadius","p","UsersTable","React","showNewUser","setShowNewUser","users","currentApp","setCurrentApp","modalOpen","aclEditData","setAclEditData","hasAdmin","setHasAdmin","i","hasACLAdmin","pagination","setPagination","getUsers","limit","offset","getUsersResp","total","items","handleAclEditClose","alignItems","m","Select","labelId","MenuItem","appUsers","AddCircle","fontSize","email","cursor","textDecoration","colSpan","Pagination","event","page","count","Math","ceil","Modal","oldUsers","indexToUpdate","findIndex","right","color"],"sourceRoot":""}