Data corporate & member linking ke client portal
This commit is contained in:
ivan-sim
2023-09-27 17:37:21 +07:00
parent 1abb9b2539
commit 544eb32a81
19 changed files with 245 additions and 335 deletions

View File

@@ -13,6 +13,7 @@ use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberRe
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources; use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources; use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
use Modules\Client\Transformers\DataMemberResource; use Modules\Client\Transformers\DataMemberResource;
use Illuminate\Support\Facades\DB;
class CorporateMemberController extends Controller class CorporateMemberController extends Controller
{ {
@@ -47,7 +48,7 @@ class CorporateMemberController extends Controller
public function show($corporate_id, $person_id) public function show($corporate_id, $person_id)
{ {
$data = Member::with(['claims', 'person', 'employeds', 'currentPlan.benefits']) $data = Member::with(['claims', 'person', 'employeds', 'currentPlan.benefits', 'person.currentAddress'])
->where('person_id', $person_id) ->where('person_id', $person_id)
->whereHas('employeds', function ($query) use ($corporate_id) { ->whereHas('employeds', function ($query) use ($corporate_id) {
$query->where('corporate_id', $corporate_id); $query->where('corporate_id', $corporate_id);
@@ -57,6 +58,40 @@ class CorporateMemberController extends Controller
$totalClaims = $data->claims->sum('total_claim'); $totalClaims = $data->claims->sum('total_claim');
$data->total_claims = $totalClaims; $data->total_claims = $totalClaims;
//Get Family
$data_family = DB::table('members')
->join('persons', 'members.person_id', '=', 'persons.id')
->select('members.*','persons.phone')
->where('principal_id', $data->member_id)
->get();
if($data_family->isEmpty())
{
$principal_id = DB::table('members')
->where('member_id', $data->member_id)
->select('principal_id')
->first();
$data_family = DB::table('members')
->join('persons', 'members.person_id', '=', 'persons.id')
->select('members.*','persons.phone')
->where('principal_id', $principal_id->principal_id)
->where('members.member_id','<>',$data->member_id)
->orWhere('members.member_id', $principal_id->principal_id)
->get();
}
$data->family = $data_family;
//Claim History
$data_claim_history = DB::table('claim_requests')
->join('claims', 'claims.claim_request_id', '=', 'claim_requests.id')
->join('claim_items', 'claim_items.claim_id', '=', 'claims.id')
->join('benefits', 'benefits.id', '=', 'claim_items.claim_itemable_id')
->select('claim_requests.status','claim_requests.submission_date','benefits.description')
->where('claim_requests.member_id', $data->id)
->get();
$data->claim_history = $data_claim_history;
return response()->json(DataMemberResource::make($data)); return response()->json(DataMemberResource::make($data));
} }
} }

View File

@@ -3,6 +3,7 @@
namespace Modules\Client\Http\Controllers\Api; namespace Modules\Client\Http\Controllers\Api;
use App\Models\Person; use App\Models\Person;
use App\Models\Member;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -29,4 +30,36 @@ class DataController extends Controller
return response()->json(['error' => 'Failed to update data'], 500); return response()->json(['error' => 'Failed to update data'], 500);
} }
} }
public function updateFamily(Request $request)
{
try {
// Ambil data keluarga dari payload
$familyData = $request->json()->all();
// Loop melalui data keluarga
foreach ($familyData as $familyMember) {
// Ambil ID anggota keluarga dari payload
$person_id = $familyMember['person_id'];
// Perbarui data anggota keluarga sesuai dengan payload
Member::where('person_id', $person_id)->update([
'name' => $familyMember['name'],
'email' => $familyMember['email'],
]);
Person::where('id', $person_id)->update([
'name' => $familyMember['name'],
'email' => $familyMember['email'],
'phone' => $familyMember['phone'],
]);
}
// Respon sukses jika pembaruan berhasil
return response()->json([$person_id => 'Data keluarga berhasil diperbarui'], 200);
} catch (\Exception $e) {
// Tangani kesalahan jika ada yang terjadi
return response()->json(['error' => 'Gagal memperbarui data keluarga: ' . $e->getMessage()], 500);
}
}
} }

View File

@@ -38,6 +38,7 @@ Route::prefix('client')->group(function () {
Route::get('user', [UserController::class, 'index']); Route::get('user', [UserController::class, 'index']);
Route::get('data/{id}', [DataController::class, 'show']); Route::get('data/{id}', [DataController::class, 'show']);
Route::put('data/{id}', [DataController::class, 'update']); Route::put('data/{id}', [DataController::class, 'update']);
Route::post('update-family', [DataController::class, 'updateFamily']);
Route::get('corporate-manage', [CorporateManageController::class, 'index']); Route::get('corporate-manage', [CorporateManageController::class, 'index']);
Route::get('corporate-manage/{corporate_id}', [CorporateManageController::class, 'show']); Route::get('corporate-manage/{corporate_id}', [CorporateManageController::class, 'show']);

View File

@@ -25,10 +25,21 @@ class DataMemberResource extends JsonResource
'name' => $this->name, 'name' => $this->name,
'name_suffix' => $this->name_suffix, 'name_suffix' => $this->name_suffix,
'birth_date' => $this->birth_date, 'birth_date' => $this->birth_date,
'birth_place' => $this->person->birth_place,
'last_weight_kg' => $this->person->last_weight_kg,
'last_height_cm'=> $this->person->last_height_cm,
'phone' => $this->person->phone,
'nik' => $this->person->nik,
'religion' => $this->person->religion,
'marital_status' => $this->person->marital_status,
'last_education' => $this->person->last_education,
'current_employment' => $this->person->current_employment,
'main_address_id' => $this->person->currentAddress->text,
'family' => $this->family,
'claim_history' => $this->claim_history,
'gender' => $this->gender, 'gender' => $this->gender,
'language' => $this->language, 'language' => $this->language,
'race' => $this->race, 'race' => $this->race,
'marital_status' => $this->marital_status,
'record_type' => $this->record_type, 'record_type' => $this->record_type,
'principal_id' => $this->principal_id, 'principal_id' => $this->principal_id,
'relation_with_principal' => $this->relation_with_principal, 'relation_with_principal' => $this->relation_with_principal,

View File

@@ -71,7 +71,9 @@ class Person extends Model
public function currentAddress() public function currentAddress()
{ {
return $this->belongsTo(Address::class, 'main_address_id'); return $this->belongsTo(Address::class, 'main_address_id')->withDefault([
'text' => '',
]);
} }
public function domicileAddress() public function domicileAddress()

View File

@@ -2,6 +2,7 @@ import { FormControl, InputLabel, MenuItem, Select, SelectChangeEvent } from '@m
import { useContext, useEffect, useState } from 'react'; import { useContext, useEffect, useState } from 'react';
import { UserCurrentCorporateContext } from '../../../contexts/UserCurrentCorporate'; import { UserCurrentCorporateContext } from '../../../contexts/UserCurrentCorporate';
import axios from '../../../utils/axios'; import axios from '../../../utils/axios';
import { useNavigate } from 'react-router-dom';
/* ---------------------------------- types --------------------------------- */ /* ---------------------------------- types --------------------------------- */
type CorporateDataProps = { type CorporateDataProps = {
@@ -13,9 +14,17 @@ type CorporateDataProps = {
export default function CorporatePopover() { export default function CorporatePopover() {
const { corporateValue, setCorporateValue } = useContext(UserCurrentCorporateContext); const { corporateValue, setCorporateValue } = useContext(UserCurrentCorporateContext);
const [corporateData, setCorporateData] = useState([]); const [corporateData, setCorporateData] = useState([]);
//Check route in profile
const navigate = useNavigate();
const currentPathname = window.location.pathname;
const desiredPart = currentPathname.split('/')[1];
const handleCorporateChange = (event: SelectChangeEvent) => { const handleCorporateChange = (event: SelectChangeEvent) => {
setCorporateValue(event.target.value as string); setCorporateValue(event.target.value as string);
if(desiredPart === 'user-profile')
{
navigate('/alarm-center');
}
}; };
useEffect(() => { useEffect(() => {

View File

@@ -26,7 +26,7 @@ export default function NavbarAccount({ isCollapse }: Props) {
const { user } = useAuth(); const { user } = useAuth();
console.log('current user is ', user) // console.log('current user is ', user)
return ( return (
<Link underline="none" color="inherit"> <Link underline="none" color="inherit">
<RootStyle <RootStyle

View File

@@ -121,14 +121,14 @@ export default function ServiceMonitoring() {
const { corporateValue } = useContext(UserCurrentCorporateContext); const { corporateValue } = useContext(UserCurrentCorporateContext);
const { id } = useParams(); const { id } = useParams();
const claimId = '2'; const claimId = '2';
console.log('id', id); // console.log('id', id);
useEffect(() => { useEffect(() => {
console.log('fetching data...'); console.log('fetching data...');
axios axios
.get('/data/' + id) .get('/data/' + id)
.then((response) => { .then((response) => {
console.log('data fetched...', response.data); // console.log('data fetched...', response.data);
setData(response.data); setData(response.data);
}) })
.catch((error) => { .catch((error) => {
@@ -138,7 +138,7 @@ export default function ServiceMonitoring() {
axios axios
.get('/corporate-manage/' + corporateValue) .get('/corporate-manage/' + corporateValue)
.then((response) => { .then((response) => {
console.log('corporate fetched...', response.data); // console.log('corporate fetched...', response.data);
setCorporate(response.data); setCorporate(response.data);
}) })
.catch((error) => { .catch((error) => {
@@ -146,15 +146,15 @@ export default function ServiceMonitoring() {
}); });
}, []); }, []);
console.log('Data:', data); // console.log('Data:', data);
const [encounterData, setEncounterData] = useState({}); const [encounterData, setEncounterData] = useState({});
useEffect(() => { useEffect(() => {
console.log('fetching encounter data...'); // console.log('fetching encounter data...');
axios axios
.get('/claims/${claim_id}/encounters') .get('/claims/${claim_id}/encounters')
.then((response) => { .then((response) => {
console.log('encounter data fetched...', response.data); // console.log('encounter data fetched...', response.data);
setEncounterData(response.data); setEncounterData(response.data);
}) })
.catch((error) => { .catch((error) => {

View File

@@ -24,7 +24,6 @@ export default function UserProfile() {
const { themeStretch } = useSettings(); const { themeStretch } = useSettings();
// const navigate = useNavigate(); // const navigate = useNavigate();
const [data, setData] = useState(); const [data, setData] = useState();
const [data1, setData1] = useState();
const { corporateValue } = useContext(UserCurrentCorporateContext); const { corporateValue } = useContext(UserCurrentCorporateContext);
const { id } = useParams(); const { id } = useParams();
@@ -40,10 +39,10 @@ export default function UserProfile() {
}); });
}, []); }, []);
console.log('data', data); // console.log('data', data);
return ( return (
<Page title="Profile Peserta Jessica Lie"> <Page title="Profile">
<Container maxWidth={themeStretch ? false : 'xl'}> <Container maxWidth={themeStretch ? false : 'xl'}>
<Stack direction="row" alignItems="center" sx={{ marginBottom: 2 }}> <Stack direction="row" alignItems="center" sx={{ marginBottom: 2 }}>
{/* <IconButton sx={{ marginRight: '10px', color: '#424242' }} onClick={() => navigate()}> {/* <IconButton sx={{ marginRight: '10px', color: '#424242' }} onClick={() => navigate()}>
@@ -62,7 +61,7 @@ export default function UserProfile() {
</Grid> </Grid>
{/* Item 2 */} {/* Item 2 */}
<Grid item xs={12} md={12}> <Grid item xs={12} md={12}>
<CardFamilyInformation data={data1} /> <CardFamilyInformation data={data} />
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
@@ -75,7 +74,7 @@ export default function UserProfile() {
</Grid> </Grid>
{/* Item 2 */} {/* Item 2 */}
<Grid item xs={12}> <Grid item xs={12}>
<CardClaimHistory /> <CardClaimHistory data={data}/>
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -85,7 +85,7 @@ export default function ClaimForm({ isEdit, currentClaim }: Props) {
useEffect(() => { useEffect(() => {
console.log('defaultValues', defaultValues); // console.log('defaultValues', defaultValues);
if (isEdit && currentClaim) { if (isEdit && currentClaim) {
reset(defaultValues); reset(defaultValues);
setMember(defaultValues.member) setMember(defaultValues.member)
@@ -102,7 +102,7 @@ export default function ClaimForm({ isEdit, currentClaim }: Props) {
setValue(`uploaded_files.${type}`, [...currentFiles, ...files]); setValue(`uploaded_files.${type}`, [...currentFiles, ...files]);
console.log('currentFiles', getValues('uploaded_files')); // console.log('currentFiles', getValues('uploaded_files'));
}; };
const memberSelected = (member) => { const memberSelected = (member) => {
@@ -110,7 +110,7 @@ export default function ClaimForm({ isEdit, currentClaim }: Props) {
}; };
const checkLimit = async () => { const checkLimit = async () => {
console.log('CHECKING LIMIT'); // console.log('CHECKING LIMIT');
}; };
const onSubmit = async (data: any) => { const onSubmit = async (data: any) => {

View File

@@ -68,7 +68,7 @@ export default function ClaimsCreateUpdate() {
}; };
const handleSaveClaimItems = () => { const handleSaveClaimItems = () => {
console.log('Storing ', claimItems); // console.log('Storing ', claimItems);
setLoadingClaimItems(true); setLoadingClaimItems(true);
axios axios
.post(`claims/${id}/update-items`, { .post(`claims/${id}/update-items`, {

View File

@@ -12,17 +12,17 @@ export default function DialogMemberBenefit({member, setOpenDialog, openDialog,
const toggleBenefit = (benefit) => { const toggleBenefit = (benefit) => {
if (selectedBenefits.includes(benefit)) { if (selectedBenefits.includes(benefit)) {
console.log('removing', benefit) // console.log('removing', benefit)
setSelectedBenefits(selectedBenefits.filter((throughBenefit) => benefit.id != throughBenefit.id)) setSelectedBenefits(selectedBenefits.filter((throughBenefit) => benefit.id != throughBenefit.id))
} else { } else {
console.log('adding', benefit) // console.log('adding', benefit)
setSelectedBenefits([...selectedBenefits, benefit]) setSelectedBenefits([...selectedBenefits, benefit])
} }
} }
const handleSubmit = () => { const handleSubmit = () => {
onSubmit(selectedBenefits); onSubmit(selectedBenefits);
console.log ('submitting') // console.log ('submitting')
setOpenDialog(false); setOpenDialog(false);
setSelectedBenefits([]); setSelectedBenefits([]);
} }

View File

@@ -278,7 +278,7 @@ export default function Index() {
params: { ...parameters }, params: { ...parameters },
}); });
console.log('member', corporateMembers); // console.log('member', corporateMembers);
const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`); const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`);
setSearchParams(parameters); setSearchParams(parameters);
@@ -356,7 +356,7 @@ export default function Index() {
})(); })();
}, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]); }, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]);
console.log(policyData); // console.log(policyData);
return ( return (
<Page title="Dashboard"> <Page title="Dashboard">

View File

@@ -29,7 +29,7 @@ const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({
export default function CardBenefitSummary({ data }) { export default function CardBenefitSummary({ data }) {
const [benefits, setBenefits] = useState([]); const [benefits, setBenefits] = useState([]);
console.log('data', data); // console.log('data', data);
useEffect(() => { useEffect(() => {
setBenefits(data); setBenefits(data);
}, [data]); }, [data]);
@@ -58,7 +58,7 @@ export default function CardBenefitSummary({ data }) {
<Typography variant="body2" color="#0A0A0A"> <Typography variant="body2" color="#0A0A0A">
Yearly Limits Yearly Limits
</Typography> </Typography>
<BorderLinearProgress variant="determinate" value={100} /> <BorderLinearProgress variant="determinate" value={0} />
<Stack direction="row" spacing={0.25}> <Stack direction="row" spacing={0.25}>
<Typography variant="body2">0</Typography> <Typography variant="body2">0</Typography>
<Typography>/</Typography> <Typography>/</Typography>

View File

@@ -13,6 +13,7 @@ import {
} from '@mui/material'; } from '@mui/material';
// react // react
import { useState } from 'react'; import { useState } from 'react';
import { fDate } from '../../../utils/formatTime';
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
@@ -20,27 +21,22 @@ function createData(benefitType: string, submissionDate: string, status: string)
return { benefitType, submissionDate, status }; return { benefitType, submissionDate, status };
} }
const rows = [
createData('Rawat Jalan', '15-10-2022', 'Request'),
createData('Rawat Inap', '15-10-2022', 'Request'),
createData('Manfaat Special', '15-10-2022', 'Request'),
createData('Perobatan Mata', '15-10-2022', 'Request'),
createData('Perawatan Gigi', '15-10-2022', 'Request'),
createData('Kehamilan', '15-10-2022', 'Request'),
createData('Laboratorium', '15-10-2022', 'Request'),
createData('Manfaat Farmasi', '15-10-2022', 'Request'),
];
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
export default function CardClaimHistory(benefitMember) { export default function CardClaimHistory({ data }) {
const [page, setPage] = useState(0); const [page, setPage] = useState(0);
const [rowsPerPage, setRowsPerPage] = useState(5); const [rowsPerPage, setRowsPerPage] = useState(5);
console.log('benefitMember', benefitMember);
const handleChangePage = (event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => { const handleChangePage = (event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {
setPage(newPage); setPage(newPage);
}; };
// Data claim history
const claimHistory = data?.claim_history;
const rows = claimHistory ? claimHistory.map(history => {
return createData(history.description, fDate(history.submission_date), history.status);
}) : [];
return ( return (
<Card sx={{ padding: 2 }}> <Card sx={{ padding: 2 }}>
<Stack direction="row" justifyContent="space-between" alignItems="center"> <Stack direction="row" justifyContent="space-between" alignItems="center">

View File

@@ -1,9 +1,61 @@
// mui // mui
import { Button, Card, Stack, Typography, Grid, Switch } from '@mui/material'; import { Button, Card, Stack, Typography, Grid, Switch, TextField } from '@mui/material';
// components // components
import Iconify from '../../../components/Iconify'; import Iconify from '../../../components/Iconify';
import { fDate } from '../../../utils/formatTime';
import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material';
import { useContext, useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import axios from '../../../utils/axios';
import { enqueueSnackbar } from 'notistack';
export default function CardFamilyInformation() { export default function CardFamilyInformation({ data }) {
const [openDialog, setOpenDialog] = useState(false);
const [editIndex, setEditIndex] = useState(null);
const [editedFamilyData, setEditedFamilyData] = useState({});
const { id } = useParams();
const handleEditData = (index) => {
setEditIndex(index);
setEditedFamilyData(data?.family[index] || {});
setOpenDialog(true);
};
const handleCloseDialog = () => {
setOpenDialog(false);
};
const handleSaveData = () => {
if (editIndex !== null) {
try {
// Salin data keluarga saat ini
const updatedFamily = [...data?.family];
// Perbarui data keluarga dengan data yang diedit
updatedFamily[editIndex] = editedFamilyData;
// Perbarui data utama dengan data keluarga yang telah diperbarui
const updatedData = { ...data, family: updatedFamily };
axios
.post('/update-family', updatedData.family)
.then((response) => {
enqueueSnackbar('Data updated successfully', { variant: 'success' });
setOpenDialog(false);
window.location.reload();
})
.catch((error) => {
enqueueSnackbar('Failed to update data', { variant: 'error' });
});
} catch (error) {
console.error('Terjadi kesalahan saat menyimpan data:', error);
}
}
};
return ( return (
<Card sx={{ borderRadius: '6px', paddingY: 2 }}> <Card sx={{ borderRadius: '6px', paddingY: 2 }}>
{/* Stack 1 */} {/* Stack 1 */}
@@ -14,12 +66,12 @@ export default function CardFamilyInformation() {
sx={{ paddingY: 1, paddingX: 3 }} sx={{ paddingY: 1, paddingX: 3 }}
> >
<Typography variant="subtitle2">Beneficiary / Family</Typography> <Typography variant="subtitle2">Beneficiary / Family</Typography>
<Button startIcon={<Iconify icon="ic:round-add" />}>Add Member</Button> <Button startIcon={<Iconify icon="ic:round-add" />} disabled>Add Member</Button>
</Stack> </Stack>
{/* Stack 2 */} {/* Stack 2 */}
<Grid container maxHeight="307px" spacing={2} paddingX={2} sx={{ overflowY: 'auto' }}> <Grid container maxHeight="307px" spacing={2} paddingX={2} sx={{ overflowY: 'auto' }}>
{/* Card 1 */} {data?.family.map((familyMember, index) => (
<Grid item xs={12} sm={6} md={6}> <Grid item xs={12} sm={6} md={6} key={index}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}> <Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */} {/* Stack 1 */}
<Stack <Stack
@@ -39,23 +91,31 @@ export default function CardFamilyInformation() {
style={{ borderRadius: '50%' }} style={{ borderRadius: '50%' }}
/> />
<Typography variant="body2" sx={{ fontWeight: 500 }}> <Typography variant="body2" sx={{ fontWeight: 500 }}>
Husband {familyMember.relation_with_principal === 'H'
? 'Husband'
: familyMember.relation_with_principal === 'W'
? 'Wife'
: familyMember.relation_with_principal === 'S'
? 'Son'
: familyMember.relation_with_principal === 'D'
? 'Daughter'
: 'Main Member'}
</Typography> </Typography>
</Stack> </Stack>
{/* Row 2 */} {/* Row 2 */}
<Stack alignItems="center"> <Stack alignItems="center">
<Typography variant="caption">Suspend</Typography> <Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" /> <Switch aria-label="switch demo" disabled />
</Stack> </Stack>
</Stack> </Stack>
<Typography variant="body2" color="#757575"> <Typography variant="body2" color="#757575">
Octa Xavier {familyMember?.name}
</Typography> </Typography>
<Typography variant="body2" color="#757575"> <Typography variant="body2" color="#757575">
14 Jan 1986 {familyMember?.birth_date ? fDate(familyMember?.birth_date) : ''}
</Typography> </Typography>
<Typography variant="body2" color="#757575"> <Typography variant="body2" color="#757575">
082113256754 {familyMember?.phone}
</Typography> </Typography>
{/* Stack 2 */} {/* Stack 2 */}
<Stack <Stack
@@ -64,296 +124,56 @@ export default function CardFamilyInformation() {
justifyContent="space-between" justifyContent="space-between"
marginTop={1.25} marginTop={1.25}
> >
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}> <Button color="error" startIcon={<Iconify icon="ic:round-close" />} disabled>
Remove Remove
</Button> </Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}> <Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />} onClick={ () => handleEditData(index)}>
Edit Data
</Button>
</Stack>
</Card>
</Grid>
{/* Card 2 */}
<Grid item xs={12} sm={6} md={6}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
spacing={2}
sx={{ flex: '100%' }}
>
{/* Row 1 */}
<Stack direction="row" spacing={1}>
<div
style={{
borderRadius: '50%',
width: '24px',
height: '24px',
backgroundColor: '#D9D9D9',
}}
/>
<Typography variant="body2" sx={{ fontWeight: 500 }}>
Kid
</Typography>
</Stack>
{/* Row 2 */}
<Stack alignItems="center">
<Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" />
</Stack>
</Stack>
<Typography variant="body2" color="#757575">
Celine Claudia
</Typography>
<Typography variant="body2" color="#757575">
15 Oct 2000
</Typography>
<Typography variant="body2" color="#757575">
082113256754
</Typography>
{/* Stack 2 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
marginTop={1.25}
>
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}>
Remove
</Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}>
Edit Data
</Button>
</Stack>
</Card>
</Grid>
{/* Card 3 */}
<Grid item xs={12} sm={6} md={6}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
spacing={2}
sx={{ flex: '100%' }}
>
{/* Row 1 */}
<Stack direction="row" spacing={1}>
<div
style={{
borderRadius: '50%',
width: '24px',
height: '24px',
backgroundColor: '#D9D9D9',
}}
/>
<Typography variant="body2" sx={{ fontWeight: 500 }}>
Kid
</Typography>
</Stack>
{/* Row 2 */}
<Stack alignItems="center">
<Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" />
</Stack>
</Stack>
<Typography variant="body2" color="#757575">
Celine Claudia
</Typography>
<Typography variant="body2" color="#757575">
15 Oct 2000
</Typography>
<Typography variant="body2" color="#757575">
082113256754
</Typography>
{/* Stack 2 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
marginTop={1.25}
>
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}>
Remove
</Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}>
Edit Data
</Button>
</Stack>
</Card>
</Grid>
{/* Card 4 */}
<Grid item xs={12} sm={6} md={6}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
spacing={2}
sx={{ flex: '100%' }}
>
{/* Row 1 */}
<Stack direction="row" spacing={1}>
<div
style={{
borderRadius: '50%',
width: '24px',
height: '24px',
backgroundColor: '#D9D9D9',
}}
/>
<Typography variant="body2" sx={{ fontWeight: 500 }}>
Kid
</Typography>
</Stack>
{/* Row 2 */}
<Stack alignItems="center">
<Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" />
</Stack>
</Stack>
<Typography variant="body2" color="#757575">
Celine Claudia
</Typography>
<Typography variant="body2" color="#757575">
15 Oct 2000
</Typography>
<Typography variant="body2" color="#757575">
082113256754
</Typography>
{/* Stack 2 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
marginTop={1.25}
>
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}>
Remove
</Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}>
Edit Data
</Button>
</Stack>
</Card>
</Grid>
{/* Card 5 */}
<Grid item xs={12} sm={6} md={6}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
spacing={2}
sx={{ flex: '100%' }}
>
{/* Row 1 */}
<Stack direction="row" spacing={1}>
<div
style={{
borderRadius: '50%',
width: '24px',
height: '24px',
backgroundColor: '#D9D9D9',
}}
/>
<Typography variant="body2" sx={{ fontWeight: 500 }}>
Kid
</Typography>
</Stack>
{/* Row 2 */}
<Stack alignItems="center">
<Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" />
</Stack>
</Stack>
<Typography variant="body2" color="#757575">
Celine Claudia
</Typography>
<Typography variant="body2" color="#757575">
15 Oct 2000
</Typography>
<Typography variant="body2" color="#757575">
082113256754
</Typography>
{/* Stack 2 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
marginTop={1.25}
>
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}>
Remove
</Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}>
Edit Data
</Button>
</Stack>
</Card>
</Grid>
{/* Card 6 */}
<Grid item xs={12} sm={6} md={6}>
<Card sx={{ paddingX: 1.5, paddingY: 1 }}>
{/* Stack 1 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
spacing={2}
sx={{ flex: '100%' }}
>
{/* Row 1 */}
<Stack direction="row" spacing={1}>
<div
style={{
borderRadius: '50%',
width: '24px',
height: '24px',
backgroundColor: '#D9D9D9',
}}
/>
<Typography variant="body2" sx={{ fontWeight: 500 }}>
Kid
</Typography>
</Stack>
{/* Row 2 */}
<Stack alignItems="center">
<Typography variant="caption">Suspend</Typography>
<Switch aria-label="switch demo" />
</Stack>
</Stack>
<Typography variant="body2" color="#757575">
Celine Claudia
</Typography>
<Typography variant="body2" color="#757575">
15 Oct 2000
</Typography>
<Typography variant="body2" color="#757575">
082113256754
</Typography>
{/* Stack 2 */}
<Stack
direction="row"
alignItems="center"
justifyContent="space-between"
marginTop={1.25}
>
<Button color="error" startIcon={<Iconify icon="ic:round-close" />}>
Remove
</Button>
<Button variant="contained" startIcon={<Iconify icon="heroicons:pencil-solid" />}>
Edit Data Edit Data
</Button> </Button>
</Stack> </Stack>
</Card> </Card>
</Grid> </Grid>
))}
</Grid> </Grid>
{/* Dialog */}
<Dialog open={openDialog} onClose={handleCloseDialog}>
<DialogTitle>Edit Data</DialogTitle>
<DialogContent>
<Stack spacing={2}>
<TextField
label="Name"
value={editedFamilyData?.name || ''}
onChange={(e) => setEditedFamilyData({ ...editedFamilyData, name: e.target.value })}
fullWidth
sx={{ marginTop: '16px' }}
/>
<TextField
label="Email Address"
value={editedFamilyData?.email || ''}
onChange={(e) => setEditedFamilyData({ ...editedFamilyData, email: e.target.value })}
fullWidth
sx={{ marginTop: '16px' }}
/>
<TextField
label="Phone No."
value={editedFamilyData?.phone || ''}
onChange={(e) => setEditedFamilyData({ ...editedFamilyData, phone: e.target.value })}
fullWidth
sx={{ marginTop: '16px' }}
/>
</Stack>
</DialogContent>
<DialogActions>
<Button onClick={handleCloseDialog}>Cancel</Button>
<Button onClick={handleSaveData} variant="contained" color="primary">
Save
</Button>
</DialogActions>
</Dialog>
</Card> </Card>
); );
} }

View File

@@ -24,6 +24,9 @@ export default function CardPersonalInformation({ data }) {
/* const [updatedData, setUpdatedData] = useState(data); */ /* const [updatedData, setUpdatedData] = useState(data); */
//console.log(data);
const handleEditData = () => { const handleEditData = () => {
setWeight(data?.last_weight_kg || ''); setWeight(data?.last_weight_kg || '');
setHeight(data?.last_height_cm || ''); setHeight(data?.last_height_cm || '');
@@ -59,6 +62,7 @@ export default function CardPersonalInformation({ data }) {
// Handle the successful update // Handle the successful update
enqueueSnackbar('Data updated successfully', { variant: 'success' }); enqueueSnackbar('Data updated successfully', { variant: 'success' });
setOpenDialog(false); setOpenDialog(false);
window.location.reload();
}) })
.catch((error) => { .catch((error) => {
// Handle the error // Handle the error
@@ -139,7 +143,7 @@ export default function CardPersonalInformation({ data }) {
</Stack> </Stack>
<Stack sx={{ width: '100%' }}> <Stack sx={{ width: '100%' }}>
<Typography variant="caption">Jenis Kelamin</Typography> <Typography variant="caption">Jenis Kelamin</Typography>
<Typography variant="body2">{data?.gender}</Typography> <Typography variant="body2">{data?.gender ? data.gender.charAt(0).toUpperCase() + data.gender.slice(1) : ''}</Typography>
</Stack> </Stack>
</Stack> </Stack>
</Stack> </Stack>
@@ -176,7 +180,7 @@ export default function CardPersonalInformation({ data }) {
<Typography variant="body2">{data?.nik}</Typography> <Typography variant="body2">{data?.nik}</Typography>
</Stack> </Stack>
<Stack> <Stack>
<Button variant="contained" startIcon={<VisibilityIcon />}> <Button variant="contained" startIcon={<VisibilityIcon />} disabled>
Lihat Foto Lihat Foto
</Button> </Button>
</Stack> </Stack>

View File

@@ -154,7 +154,7 @@ export default function DialogTopUpLimit({
}; };
const onTopupHandler = (value: string) => { const onTopupHandler = (value: string) => {
console.log(!!errors); //console.log(!!errors);
let newValue; let newValue;

View File

@@ -3,7 +3,7 @@ import { format, parseISO, getTime, setHours, setMinutes, formatDistanceToNow }
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
export function fDate(date: Date | string | number) { export function fDate(date: Date | string | number) {
console.log(date); //console.log(date);
return format(new Date(date), 'dd MMMM yyyy'); return format(new Date(date), 'dd MMMM yyyy');
} }