@@ -45,7 +45,7 @@ const UserMaintainPage = () => { | |||
} | |||
useEffect(() => { | |||
console.log(params) | |||
axios.get(`${apiPath}${GET_USER_PATH}/${params.id}`) | |||
.then((response) => { | |||
if (response.status === 200) { | |||
@@ -0,0 +1,60 @@ | |||
// material-ui | |||
import { | |||
Typography | |||
} from '@mui/material'; | |||
import MainCard from "../../components/MainCard"; | |||
import * as React from "react"; | |||
import {useEffect, useState} from "react"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
import GroupAuthTable from "./GroupAuthTable"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const GroupAuthCard = ({isCollectData, updateUserAuthList,userGroupData}) => { | |||
const [currentAuthData, setCurrentAuthData] = React.useState({}); | |||
const [onReady, setOnReady] = useState(false); | |||
const [selectedRow, setSelectedRow] = useState([]); | |||
useEffect(() => { | |||
//if user data from parent are not null | |||
if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) { | |||
setCurrentAuthData(userGroupData.data); | |||
setSelectedRow(userGroupData.authIds); | |||
} | |||
}, [userGroupData]); | |||
useEffect(() => { | |||
//if state data are ready and assign to different field | |||
if (Object.keys(userGroupData).length > 0 && currentAuthData !== undefined) { | |||
setOnReady(true); | |||
} | |||
}, [currentAuthData]); | |||
useEffect(() => { | |||
//upload latest data to parent | |||
updateUserAuthList(selectedRow); | |||
}, [isCollectData]); | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<MainCard elevation={0} | |||
border={false} | |||
content={false} | |||
> | |||
<Typography variant="h5" sx={{mt: 3, ml: 3}}> | |||
User Authority | |||
</Typography> | |||
<GroupAuthTable | |||
userAuth={userGroupData.authIds} | |||
setSelectedRow={setSelectedRow} | |||
/> | |||
</MainCard> | |||
); | |||
}; | |||
export default GroupAuthCard; |
@@ -0,0 +1,80 @@ | |||
// material-ui | |||
import { | |||
DataGrid, | |||
} from "@mui/x-data-grid"; | |||
import {useEffect, useState} from "react"; | |||
import axios from "axios"; | |||
import {apiPath} from "../../auth/utils"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
import * as React from "react"; | |||
import {GET_GROUP_AUTH_LIST} from "../../utils/ApiPathConst"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function GroupAuthTable({setSelectedRow, userAuth}) { | |||
const [authData, setAuthData] = useState([]); | |||
const [onReady, setOnReady] = useState(false); | |||
const [currentSelectedRow, setCurrentSelectedRow] = useState(userAuth); | |||
useEffect(() => { | |||
axios.get(`${apiPath}${GET_GROUP_AUTH_LIST}`) | |||
.then((response) => { | |||
if (response.status === 200) { | |||
setAuthData(response.data.records); | |||
} | |||
}) | |||
.catch(error => { | |||
console.log(error); | |||
return false; | |||
}); | |||
}, []); | |||
useEffect(() => { | |||
//if state data are ready and assign to different field | |||
if (authData.length > 0) { | |||
setOnReady(true); | |||
} | |||
}, [authData]); | |||
const columns = [ | |||
{ | |||
id: 'module', | |||
field: 'module', | |||
headerName: 'Module', | |||
flex: 1, | |||
}, | |||
{ | |||
id: 'authority', | |||
field: 'name', | |||
headerName: 'Authority', | |||
flex: 2, | |||
}, | |||
]; | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<div style={{height: '100%', width: '100%'}}> | |||
<DataGrid | |||
rows={authData} | |||
columns={columns} | |||
editMode="row" | |||
initialState={{ | |||
pagination: { | |||
paginationModel: {page: 0, pageSize: 20}, | |||
}, | |||
}} | |||
pageSizeOptions={[10, 20, 30]} | |||
checkboxSelection | |||
rowSelectionModel={currentSelectedRow} | |||
onRowSelectionModelChange={(ids) => { | |||
console.log(ids); | |||
setSelectedRow(ids); | |||
setCurrentSelectedRow(ids); | |||
}} | |||
autoHeight | |||
/> | |||
</div> | |||
); | |||
} |
@@ -0,0 +1,133 @@ | |||
// material-ui | |||
import { | |||
Button, | |||
Grid, TextField, | |||
Typography | |||
} from '@mui/material'; | |||
import MainCard from "../../components/MainCard"; | |||
import * as React from "react"; | |||
import {useEffect, useState} from "react"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
import UserAddTable from "./UserAddTable"; | |||
import {GET_GROUP_MEMBER_LIST_PATH, GET_USER_COMBO_LIST} from "../../utils/ApiPathConst"; | |||
import axios from "axios"; | |||
import {apiPath} from "../../auth/utils"; | |||
import Autocomplete from "@mui/material/Autocomplete"; | |||
import {getIdList} from "../../utils/CommonFunction"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const UserAddCard = ({isCollectData, updateGroupMember,userGroupData}) => { | |||
const [currentUserData, setCurrentUserData] = React.useState({}); | |||
const [onReady, setOnReady] = useState(false); | |||
const [groupUserData, setGroupUserData] = useState([]); | |||
const [userComboList, setUserComboList] = useState([]); | |||
const [selectedUser, setSelectedUser] = useState(null); | |||
function updateUserList (){ | |||
const idList = getIdList(groupUserData); | |||
if(!idList.includes(selectedUser.id)){ | |||
const userList = [...groupUserData, selectedUser]; | |||
setGroupUserData(userList); | |||
console.log(userList); | |||
} | |||
} | |||
useEffect(() => { | |||
axios.get(`${apiPath}${GET_USER_COMBO_LIST}`) | |||
.then((response) => { | |||
if (response.status === 200) { | |||
setUserComboList(response.data.records); | |||
} | |||
}) | |||
.catch(error => { | |||
console.log(error); | |||
return false; | |||
}); | |||
}, []); | |||
useEffect(() => { | |||
//if user data from parent are not null | |||
if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) { | |||
setCurrentUserData(userGroupData.data); | |||
} | |||
}, [userGroupData]); | |||
useEffect(() => { | |||
//if state data are ready and assign to different field | |||
if (Object.keys(userGroupData).length > 0 &¤tUserData !== undefined) { | |||
axios.get(`${apiPath}${GET_GROUP_MEMBER_LIST_PATH}?id=${userGroupData.data.id}`) | |||
.then((response) => { | |||
if (response.status === 200) { | |||
setGroupUserData(response.data.records); | |||
} | |||
setOnReady(true); | |||
}) | |||
.catch(error => { | |||
console.log(error); | |||
return false; | |||
}); | |||
} | |||
}, [currentUserData]); | |||
useEffect(() => { | |||
//upload latest data to parent | |||
updateGroupMember(groupUserData); | |||
}, [isCollectData]); | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<MainCard elevation={0} | |||
border={false} | |||
content={false} | |||
> | |||
<Typography variant="h5" sx={{mt: 3, ml: 3}}> | |||
User(s) | |||
</Typography> | |||
<Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mt: 2}}> | |||
<Grid container alignItems={"center"}> | |||
<Grid item xs={3} s={3} md={2} lg={2} | |||
sx={{display: 'flex', alignItems: 'center'}}> | |||
User: | |||
</Grid> | |||
<Grid item xs={6} s={5} md={5} lg={5}> | |||
<Autocomplete | |||
disablePortal | |||
id="user-combo" | |||
value={selectedUser === null ? null : selectedUser} | |||
options={userComboList} | |||
onChange={(event, newValue) => { | |||
setSelectedUser(newValue); | |||
}} | |||
renderInput={(params) => <TextField {...params} />} | |||
/> | |||
</Grid> | |||
<Grid item xs={3} s={3} md={4} lg={4} sx={{ml: 3}}> | |||
<Button | |||
size="large" | |||
variant="contained" | |||
type="submit" | |||
sx={{ | |||
textTransform: 'capitalize', | |||
alignItems: 'end' | |||
}} | |||
onClick={updateUserList} | |||
> | |||
Add | |||
</Button> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
<UserAddTable | |||
setGroupUserData={setGroupUserData} | |||
userList={groupUserData} | |||
/> | |||
</MainCard> | |||
); | |||
}; | |||
export default UserAddCard; |
@@ -0,0 +1,91 @@ | |||
// material-ui | |||
import { | |||
DataGrid, GridActionsCellItem, | |||
} from "@mui/x-data-grid"; | |||
import {useEffect, useState} from "react"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
import * as React from "react"; | |||
import DeleteIcon from "@mui/icons-material/DeleteOutlined"; | |||
import {removeObjectWithId} from "../../utils/CommonFunction"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function UserAddTable({setGroupUserData, userList}) { | |||
const [groupData, setGroupData] = useState([]); | |||
const [onReady, setOnReady] = useState(false); | |||
useEffect(() => { | |||
setGroupData(userList); | |||
}, []); | |||
useEffect(() => { | |||
setGroupData(userList); | |||
}, [userList]); | |||
useEffect(() => { | |||
//if state data are ready and assign to different field | |||
if (groupData !== undefined) { | |||
setOnReady(true); | |||
} | |||
}, [groupData]); | |||
const handleDeleteClick = (id) => () => { | |||
const newList =removeObjectWithId(groupData,id) | |||
setGroupUserData(newList); | |||
setGroupData(newList); | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'actions', | |||
type: 'actions', | |||
headerName: 'Actions', | |||
width: 100, | |||
cellClassName: 'actions', | |||
getActions: ({id}) => { | |||
return [ | |||
<GridActionsCellItem | |||
key="OutDelete" | |||
icon={<DeleteIcon/>} | |||
label="Delete" | |||
onClick={handleDeleteClick(id)} | |||
color="inherit" | |||
/>, | |||
] | |||
}, | |||
}, | |||
{ | |||
id: 'name', | |||
field: 'name', | |||
headerName: 'User', | |||
flex: 1, | |||
}, | |||
{ | |||
id: 'subDiv', | |||
field: 'subDivisionName', | |||
headerName: 'Sub-Division', | |||
flex: 1, | |||
}, | |||
]; | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<div style={{height: '100%', width: '100%', overflow: "auto" }}> | |||
<DataGrid | |||
rows={groupData} | |||
columns={columns} | |||
editMode="row" | |||
initialState={{ | |||
pagination: { | |||
paginationModel: {page: 0, pageSize: 3}, | |||
}, | |||
}} | |||
pageSizeOptions={[3, 5]} | |||
pageSize={20} | |||
autoHeight={true} | |||
/> | |||
</div> | |||
); | |||
} |
@@ -0,0 +1,105 @@ | |||
// material-ui | |||
import { | |||
Grid, TextField, Typography | |||
} from '@mui/material'; | |||
import MainCard from "../../components/MainCard"; | |||
import * as React from "react"; | |||
import {useForm} from "react-hook-form"; | |||
import {useEffect, useState} from "react"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
//import {useParams} from "react-router-dom"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const UserGroupInfoCard = ({isCollectData, updateGroupObject,userGroupData}) => { | |||
//const params = useParams(); | |||
const [currentUserGroupData, setCurrentUserGroupData] = React.useState({}); | |||
const [onReady, setOnReady] = useState(false); | |||
const {register, getValues} = useForm() | |||
useEffect(() => { | |||
//if user data from parent are not null | |||
if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) { | |||
setCurrentUserGroupData(userGroupData.data); | |||
} | |||
}, [userGroupData]); | |||
useEffect(() => { | |||
//if state data are ready and assign to different field | |||
if (Object.keys(userGroupData).length > 0 &¤tUserGroupData !== undefined) { | |||
setOnReady(true); | |||
} | |||
}, [currentUserGroupData]); | |||
useEffect(() => { | |||
//upload latest data to parent | |||
const values = getValues(); | |||
const objectData ={ | |||
...values, | |||
} | |||
updateGroupObject(objectData); | |||
}, [isCollectData]); | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<MainCard elevation={0} | |||
border={false} | |||
content={false} | |||
> | |||
<Typography variant="h5" sx={{mt: 3, ml: 3, mb: 1}}> | |||
Information | |||
</Typography> | |||
<form> | |||
<Grid container> | |||
<Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
<Grid container alignItems={"center"}> | |||
<Grid item xs={4} s={4} md={4} lg={4} | |||
sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
User Group Name: | |||
</Grid> | |||
<Grid item xs={7} s={7} md={7} lg={6}> | |||
<TextField | |||
fullWidth | |||
{...register("userGroupName", | |||
{ | |||
value: currentUserGroupData.name, | |||
})} | |||
id='groupName' | |||
required | |||
/> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
<Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
<Grid container alignItems={"center"}> | |||
<Grid item xs={4} s={4} md={4} lg={4} | |||
sx={{ml: 3, mr: 3, mb:3, display: 'flex', alignItems: 'center'}}> | |||
User Group Description: | |||
</Grid> | |||
<Grid item xs={7} s={7} md={7} lg={6}> | |||
<TextField | |||
fullWidth | |||
{...register("description", | |||
{ | |||
value: currentUserGroupData.description, | |||
}) | |||
} | |||
id='description' | |||
/> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</form> | |||
</MainCard> | |||
); | |||
}; | |||
export default UserGroupInfoCard; |
@@ -0,0 +1,137 @@ | |||
// material-ui | |||
import { | |||
Button, | |||
Grid, Typography | |||
} from '@mui/material'; | |||
import {useEffect, useState} from "react"; | |||
import * as React from "react"; | |||
import axios from "axios"; | |||
import {apiPath} from "../../auth/utils"; | |||
import {useParams} from "react-router-dom"; | |||
import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
import {GET_GROUP_LIST_PATH} from "../../utils/ApiPathConst"; | |||
import GroupAuthCard from "./GroupAuthCard"; | |||
import UserGroupInfoCard from "./UserGroupInfoCard"; | |||
import UserAddCard from "./UserAddCard"; | |||
import {getIdList} from "../../utils/CommonFunction"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const UserMaintainPage = () => { | |||
const params = useParams(); | |||
const [onReady, setOnReady] = useState(false); | |||
const [isCollectData, setIsCollectData] = useState(false); | |||
const [editedGroupData, setEditedGroupData] = useState({}); | |||
const [userGroupData,setUserGroupData] = useState([]); | |||
const [userAuthData,setUserAuthData] = useState([]); | |||
const [userConfirm, setUserConfirm] = useState(false); | |||
const [groupMember, setGroupMember] = useState([]); | |||
function updateGroupObject(groupData) { | |||
setEditedGroupData(groupData); | |||
} | |||
function updateGroupMember(groupMember){ | |||
setGroupMember(groupMember); | |||
} | |||
function updateUserAuthList(userAuthData){ | |||
setUserAuthData(userAuthData); | |||
} | |||
const submitData = () => { | |||
setUserConfirm(true); | |||
setIsCollectData(!isCollectData); | |||
} | |||
useEffect(() => { | |||
axios.get(`${apiPath}${GET_GROUP_LIST_PATH}/${params.id}`) | |||
.then((response) => { | |||
if (response.status === 200) { | |||
setUserGroupData(response.data); | |||
} | |||
}) | |||
.catch(error => { | |||
console.log(error); | |||
return false; | |||
}); | |||
}, []); | |||
useEffect(() => { | |||
console.log(userGroupData); | |||
setOnReady(true); | |||
}, [userGroupData]); | |||
useEffect(() => { | |||
if(userConfirm && onReady){ | |||
console.log("update in parents"); | |||
console.log(editedGroupData); | |||
console.log(groupMember); | |||
console.log(getIdList(groupMember)); | |||
console.log(userAuthData); | |||
} | |||
setUserConfirm(false); | |||
}, [editedGroupData,userGroupData,userAuthData]); | |||
return ( | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<Grid container rowSpacing={4.5} columnSpacing={2.75}> | |||
<Grid item xs={12} sx={{mb: -2.25}}> | |||
<Typography variant="h5">Maintain User Group</Typography> | |||
</Grid> | |||
{/*col 1*/} | |||
<Grid item xs={12} md={5} lg={5}> | |||
<Grid container> | |||
<Grid item xs={12} md={12} lg={12}> | |||
<UserGroupInfoCard | |||
updateGroupObject={updateGroupObject} | |||
userGroupData={userGroupData} | |||
isCollectData={isCollectData} | |||
/> | |||
</Grid> | |||
<Grid item xs={12} md={12} lg={12} sx={{mt:3}}> | |||
<UserAddCard | |||
updateGroupMember={updateGroupMember} | |||
userGroupData={userGroupData} | |||
isCollectData={isCollectData} | |||
/> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
{/*col 2*/} | |||
<Grid item xs={12} md={7} lg={7}> | |||
<GroupAuthCard | |||
updateUserAuthList={updateUserAuthList} | |||
userGroupData={userGroupData} | |||
isCollectData={isCollectData} | |||
/> | |||
</Grid> | |||
{/*bottom button*/} | |||
<Grid item s={12} md={12} lg={12} sx={{mb: 3}} alignItems={"end"} justifyContent="center"> | |||
<Grid container maxWidth justifyContent="flex-end"> | |||
<Grid item sx={{ml: 3, mr: 3}}> | |||
<Button | |||
size="large" | |||
variant="contained" | |||
type="submit" | |||
sx={{ | |||
textTransform: 'capitalize', | |||
alignItems: 'end' | |||
}} | |||
onClick={submitData} | |||
> | |||
Save User | |||
</Button> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
); | |||
}; | |||
export default UserMaintainPage; |
@@ -1,5 +1,7 @@ | |||
// material-ui | |||
import { | |||
Box, | |||
Button, | |||
Grid, Typography | |||
} from '@mui/material'; | |||
import MainCard from "../../components/MainCard"; | |||
@@ -16,7 +18,7 @@ import * as React from "react"; | |||
const UserGroupSearchPanel = () => { | |||
const [record,setRecord] = useState([]); | |||
const [record, setRecord] = useState([]); | |||
const [searchCriteria, setSearchCriteria] = useState({}); | |||
const [onReady, setOnReady] = useState(false); | |||
@@ -32,7 +34,7 @@ const UserGroupSearchPanel = () => { | |||
getGroupList(); | |||
}, [searchCriteria]); | |||
function getGroupList(){ | |||
function getGroupList() { | |||
axios.get(`${apiPath}${GET_GROUP_LIST_PATH}`, | |||
{params: searchCriteria} | |||
) | |||
@@ -47,7 +49,7 @@ const UserGroupSearchPanel = () => { | |||
}); | |||
} | |||
function applySearch(input){ | |||
function applySearch(input) { | |||
setSearchCriteria(input); | |||
} | |||
@@ -55,27 +57,43 @@ const UserGroupSearchPanel = () => { | |||
!onReady ? | |||
<LoadingComponent/> | |||
: | |||
<Grid container rowSpacing={4.5} columnSpacing={2.75}> | |||
<Grid item xs={12} sx={{mb: -2.25}}> | |||
<Typography variant="h5">View User Group</Typography> | |||
</Grid> | |||
{/*row 1*/} | |||
<Grid item xs={12} md={12} lg={12}> | |||
<UserGroupSearchForm applySearch={applySearch}/> | |||
</Grid> | |||
{/*row 2*/} | |||
<Grid item xs={12} md={12} lg={12}> | |||
<MainCard elevation={0} | |||
border={false} | |||
content={false} | |||
> | |||
<UserGroupTable | |||
recordList={record} | |||
/> | |||
</MainCard> | |||
</Grid> | |||
<Grid container rowSpacing={4.5} columnSpacing={2.75}> | |||
<Grid item xs={12} md={12} lg={12}> | |||
<Grid container justifyContent="flex-start" alignItems="center"> | |||
<Grid item xs={1} sx={{mb: -2.25}} > | |||
<Box sx={{ display: 'flex', alignItems: 'center'}}> | |||
<Typography align="center" variant="h5" sx={{mb:2}}>View User Group</Typography> | |||
</Box> | |||
</Grid> | |||
<Grid item xs={1} sx={{ml: 3, mr: 3}}> | |||
<Button | |||
size="large" | |||
variant="contained" | |||
type="submit" | |||
> | |||
Create | |||
</Button> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
{/*row 1*/} | |||
<Grid item xs={12} md={12} lg={12}> | |||
<UserGroupSearchForm applySearch={applySearch}/> | |||
</Grid> | |||
{/*row 2*/} | |||
<Grid item xs={12} md={12} lg={12}> | |||
<MainCard elevation={0} | |||
border={false} | |||
content={false} | |||
> | |||
<UserGroupTable | |||
recordList={record} | |||
/> | |||
</MainCard> | |||
</Grid> | |||
</Grid> | |||
); | |||
}; | |||
@@ -8,9 +8,10 @@ import MainLayout from "../layout/MainLayout"; | |||
const SettingPage = Loadable(lazy(() => import('pages/pnspsSettingPage'))); | |||
const PasswordPolicyPage = Loadable(lazy(()=> import('pages/pnspsPasswordPolicyPage'))) | |||
const UserSettingPage = Loadable(lazy(()=>import ('pages/pnspsUserSettingPage/'))); | |||
const UserGroupSearchPage = Loadable(lazy(() => import('pages/pnspsUserGroupSearchPage'))); | |||
const UserSearchPage = Loadable(lazy(()=>import ('pages/pnspsUserSearchPage'))); | |||
const UserMaintainPage = Loadable(lazy(() => import('pages/pnspsUserDetailPage'))); | |||
const UserGroupSearchPage = Loadable(lazy(() => import('pages/pnspsUserGroupSearchPage'))); | |||
const UserGroupDetailPage = Loadable(lazy(() => import('pages/pnspsUserGroupDetailPage'))); | |||
// ==============================|| AUTH ROUTING ||============================== // | |||
@@ -23,13 +24,17 @@ const SettingRoutes = { | |||
element: <UserGroupSearchPage /> | |||
}, | |||
{ | |||
path: '/user/:id', | |||
element: <UserMaintainPage /> | |||
path: '/userGroup/:id', | |||
element: <UserGroupDetailPage /> | |||
}, | |||
{ | |||
path: 'userSearchview', | |||
element: <UserSearchPage /> | |||
}, | |||
{ | |||
path: '/user/:id', | |||
element: <UserMaintainPage /> | |||
}, | |||
{ | |||
path: 'usersetting', | |||
element: <UserSettingPage /> | |||
@@ -41,7 +46,7 @@ const SettingRoutes = { | |||
{ | |||
path: 'passwordpolicy', | |||
element: <PasswordPolicyPage /> | |||
} | |||
}, | |||
] | |||
}; | |||
@@ -1,4 +1,7 @@ | |||
export const GET_GROUP_COMBO_PATH = "/group/combo" | |||
export const GET_GROUP_LIST_PATH = "/group" | |||
export const GET_GROUP_COMBO_PATH = "/group/combo" | |||
export const GET_GROUP_MEMBER_LIST_PATH = "/group/member" | |||
export const GET_GROUP_AUTH_LIST = "/group/auth/combo" | |||
export const GET_USER_PATH = "/user" | |||
export const GET_AUTH_LIST = "/user/auth/combo" | |||
export const GET_AUTH_LIST = "/user/auth/combo" | |||
export const GET_USER_COMBO_LIST = "/user/combo" |
@@ -0,0 +1,14 @@ | |||
export function getIdList(input){ | |||
const output = input.map(function (obj) { | |||
return obj.id; | |||
}); | |||
return output; | |||
} | |||
export function removeObjectWithId(arr, id) { | |||
// Making a copy with the Array from() method | |||
const arrCopy = Array.from(arr); | |||
const objWithIdIndex = arrCopy.findIndex((obj) => obj.id === id); | |||
arrCopy.splice(objWithIdIndex, 1); | |||
return arrCopy; | |||
} |