LMSN-191
Data corporate & member linking ke client portal
This commit is contained in:
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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']);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -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`, {
|
||||||
|
|||||||
@@ -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([]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user