penjagaan organisasi dan apotek

This commit is contained in:
2024-10-11 16:47:33 +07:00
parent f3fd02671f
commit 4c72d9ab21
3 changed files with 112 additions and 81 deletions

View File

@@ -139,6 +139,11 @@ export type Organization = {
name: string; name: string;
}; };
export type Corporate = {
id: number;
name: string;
};
export type Permisions = { export type Permisions = {
name: string; name: string;
guard_name: string; guard_name: string;
@@ -152,6 +157,7 @@ export type UserAccess = {
person: Person; person: Person;
role: Role; role: Role;
organization_id: Organization; organization_id: Organization;
corporate_id: Corporate;
} }
export type Person = { export type Person = {

View File

@@ -14,6 +14,7 @@ export default function UserAccessCreate() {
const { id } = useParams(); const { id } = useParams();
const [ currentUserAccess, setCurrentUserAccess ] = useState<UserAccess>(); const [ currentUserAccess, setCurrentUserAccess ] = useState<UserAccess>();
const [ roles, setRole ] = useState<any>(); const [ roles, setRole ] = useState<any>();
const [ corporate, setCorporate ] = useState<any>();
const [ organizations, setOrganization ] = useState<any>(); const [ organizations, setOrganization ] = useState<any>();
@@ -42,7 +43,6 @@ export default function UserAccessCreate() {
navigate('/404'); navigate('/404');
} }
}) })
axios.get('/organization-list') axios.get('/organization-list')
.then((res)=> { .then((res)=> {
setOrganization(res.data) setOrganization(res.data)
@@ -53,8 +53,20 @@ export default function UserAccessCreate() {
} }
}) })
axios.get('/corporates')
.then((res)=> {
setCorporate(res.data)
})
.catch((err) => {
if (err.response.status === 404) {
navigate('/404');
}
})
}, [id]); }, [id]);
console.log(corporate, 'test')
return ( return (
<Page title= "User Access"> <Page title= "User Access">
@@ -69,7 +81,7 @@ export default function UserAccessCreate() {
]} ]}
/> />
<UserAccessForm isEdit={isEdit} currentUserAccess={currentUserAccess} roles={roles} organizations={organizations}/> <UserAccessForm isEdit={isEdit} currentUserAccess={currentUserAccess} roles={roles} organizations={organizations} corporate={corporate} />
</Page> </Page>
); );
} }

View File

@@ -2,23 +2,25 @@ import * as Yup from 'yup';
import { LoadingButton } from "@mui/lab"; import { LoadingButton } from "@mui/lab";
import { Box, Card, Grid, Stack, Typography } from "@mui/material"; import { Box, Card, Grid, Stack, Typography } from "@mui/material";
import { Role, UserAccess, Organization } from "../../../@types/user"; import { Role, UserAccess, Organization } from "../../../@types/user";
import { FormProvider, RHFSelect, RHFSwitch, RHFTextField } from "../../../components/hook-form"; import { FormProvider, RHFSelect, RHFTextField } from "../../../components/hook-form";
import { useEffect, useMemo } from 'react'; import { useEffect, useMemo, useState } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { yupResolver } from '@hookform/resolvers/yup'; import { yupResolver } from '@hookform/resolvers/yup';
import { useSnackbar } from 'notistack'; import { useSnackbar } from 'notistack';
import { useNavigate, useParams } from 'react-router-dom'; import { useNavigate, useParams } from 'react-router-dom';
import axios from '../../../utils/axios'; import axios from '../../../utils/axios';
import palette from '@/theme/palette'; import palette from '@/theme/palette';
import { Corporate } from '@/@types/corporates';
type Props = { type Props = {
isEdit: boolean; isEdit: boolean;
currentUserAccess?: UserAccess; currentUserAccess?: UserAccess;
roles: Role; roles: Role;
organizations: Organization; organizations: Organization;
corporate: Corporate;
}; };
export default function AccsessForm({ isEdit, currentUserAccess, roles, organizations }: Props) { export default function AccessForm({ isEdit, currentUserAccess, roles, organizations, corporate }: Props) {
const { enqueueSnackbar } = useSnackbar(); const { enqueueSnackbar } = useSnackbar();
const navigate = useNavigate(); const navigate = useNavigate();
@@ -28,14 +30,14 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
name: Yup.string().required('Name is required'), name: Yup.string().required('Name is required'),
}); });
console.log(currentUserAccess, 'test')
const defaultValues = useMemo( const defaultValues = useMemo(
() => ({ () => ({
name: currentUserAccess?.person?.name || '', name: currentUserAccess?.person?.name || '',
username: currentUserAccess?.username || '', username: currentUserAccess?.username || '',
email: currentUserAccess?.email || '', email: currentUserAccess?.email || '',
roles: currentUserAccess?.role?.id || [], roles: currentUserAccess?.role?.id || '',
organizations: currentUserAccess?.organization_id || [], organizations: currentUserAccess?.organization_id || '',
corporates: currentUserAccess?.corporate_id || '',
password: '', password: '',
}), }),
[currentUserAccess] [currentUserAccess]
@@ -58,25 +60,21 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
const { const {
reset, reset,
watch, watch,
control,
setValue,
getValues,
setError,
handleSubmit, handleSubmit,
setError,
formState: { isSubmitting }, formState: { isSubmitting },
} = methods; } = methods;
// Watch 'roles' field to conditionally render other fields
const selectedRole = watch('roles');
const onSubmit = async (data: any) => { const onSubmit = async (data: any) => {
console.log(data, 'test123');
console.log(data);
if (!isEdit) { if (!isEdit) {
await axios await axios
.post('/user/access', data) .post('/user/access', data)
.then((res) => { .then((res) => {
enqueueSnackbar('User created successfully', { variant: 'success' }); enqueueSnackbar('User created successfully', { variant: 'success' });
})
.then((res) => {
navigate('/user-access', { replace: true }); navigate('/user-access', { replace: true });
}) })
.catch(({ response }) => { .catch(({ response }) => {
@@ -85,9 +83,8 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
setError(key, { message: value[0] }); setError(key, { message: value[0] });
enqueueSnackbar(value[0] ?? 'Failed Processing Request', { variant: 'error' }); enqueueSnackbar(value[0] ?? 'Failed Processing Request', { variant: 'error' });
} }
} } else {
else { enqueueSnackbar('Create Failed : ' + response.data.message, { variant: 'error' });
enqueueSnackbar('Create Failed : '+ response.data.message, { variant: 'error' });
} }
}); });
} else { } else {
@@ -95,33 +92,29 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
.put('/user/access/' + currentUserAccess?.id, data) .put('/user/access/' + currentUserAccess?.id, data)
.then((res) => { .then((res) => {
enqueueSnackbar('User updated successfully', { variant: 'success' }); enqueueSnackbar('User updated successfully', { variant: 'success' });
}) navigate('/user-access', { replace: true });
.then((res) => {
navigate('/user-access' , { replace: true });
}) })
.catch(({ response }) => { .catch(({ response }) => {
enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' }); enqueueSnackbar('Update Failed : ' + response.data.message, { variant: 'error' });
}); });
} }
}; };
const optionsRoles = roles?.data?.map(item => ({ // Map role, organization, and corporate options
const optionsRoles = roles?.data?.map((item) => ({
value: item.id, value: item.id,
label: item.name label: item.name,
})) ?? []; })) ?? [];
if (optionsRoles.length > 0) { const optionsOrganization = organizations?.data?.map((item) => ({
optionsRoles.unshift({ value: '', label: '' });
}
const optionsOrganization = organizations?.data?.map(item => ({
value: item.id, value: item.id,
label: item.name label: item.name,
})) ?? []; })) ?? [];
if (optionsOrganization.length > 0) { const optionsCorporate = corporate?.data?.map((item) => ({
optionsOrganization.unshift({ value: '', label: '' }); value: item.id,
} label: item.name,
})) ?? [];
return ( return (
<FormProvider methods={methods} onSubmit={handleSubmit(onSubmit)}> <FormProvider methods={methods} onSubmit={handleSubmit(onSubmit)}>
@@ -130,11 +123,15 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
<Grid item xs={12} sm={12}> <Grid item xs={12} sm={12}>
<Card sx={{ px: 3, py: 4 }}> <Card sx={{ px: 3, py: 4 }}>
<Stack spacing={2}> <Stack spacing={2}>
<Typography variant="h6" color={palette.light.primary.main}>User Access</Typography> <Typography variant="h6" color={palette.light.primary.main}>
User Access
</Typography>
<RHFTextField name="name" label="Name" /> <RHFTextField name="name" label="Name" />
<RHFTextField name="username" label="Username" /> <RHFTextField name="username" label="Username" />
<RHFTextField type="email" name="email" label="Email" /> <RHFTextField type="email" name="email" label="Email" />
<RHFTextField type="password" name="password" label="Password" /> <RHFTextField type="password" name="password" label="Password" />
{/* Select for roles */}
<RHFSelect name="roles" label="Roles"> <RHFSelect name="roles" label="Roles">
{optionsRoles.map((option, index) => ( {optionsRoles.map((option, index) => (
<option key={index} value={option.value}> <option key={index} value={option.value}>
@@ -142,19 +139,35 @@ export default function AccsessForm({ isEdit, currentUserAccess, roles, organiza
</option> </option>
))} ))}
</RHFSelect> </RHFSelect>
<RHFSelect name="organizations" label="organizations">
{/* Conditional rendering based on selectedRole */}
{selectedRole && (['8'].includes(selectedRole) ? (
<RHFSelect name="organizations" label="Organizations">
{optionsOrganization.map((option, index) => ( {optionsOrganization.map((option, index) => (
<option key={index} value={option.value}> <option key={index} value={option.value}>
{option.label} {option.label}
</option> </option>
))} ))}
</RHFSelect> </RHFSelect>
) : ['2'].includes(selectedRole) ? (
<RHFSelect name="corporates" label="Corporates">
{optionsCorporate.map((option, index) => (
<option key={index} value={option.value}>
{option.label}
</option>
))}
</RHFSelect>
) : null)}
<LoadingButton
<LoadingButton type="submit" variant="contained" size="large" fullWidth={true} loading={isSubmitting}> type="submit"
{ isEdit? 'Update' : 'Create' } variant="contained"
size="large"
fullWidth={true}
loading={isSubmitting}
>
{isEdit ? 'Update' : 'Create'}
</LoadingButton> </LoadingButton>
</Stack> </Stack>
</Card> </Card>
</Grid> </Grid>