From 3b228a96fb1575c66e59cdddba177b8773b6edc4 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Tue, 21 Jan 2025 15:02:08 +0700 Subject: [PATCH 1/2] update delete member by id --- Modules/Internal/Http/Controllers/Api/MemberController.php | 6 +++++- Modules/Internal/Routes/api.php | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Modules/Internal/Http/Controllers/Api/MemberController.php b/Modules/Internal/Http/Controllers/Api/MemberController.php index f288252e..3c09bb6a 100755 --- a/Modules/Internal/Http/Controllers/Api/MemberController.php +++ b/Modules/Internal/Http/Controllers/Api/MemberController.php @@ -81,7 +81,11 @@ class MemberController extends Controller */ public function destroy($id) { - // + $member = Member::findOrFail($id); + // Menghapus member + $member->delete(); + // Mengembalikan respons setelah penghapusan (misalnya sukses) + return response()->json(['message' => 'Member deleted successfully'], 200); } public function benefits($member_id) diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 14d3c1a5..327e07b0 100755 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -258,6 +258,7 @@ Route::prefix('internal')->group(function () { Route::get('members', [MemberController::class, 'index']); + Route::post('members/{id}', [MemberController::class, 'destroy']); Route::get('members/{member_id}/benefits', [MemberController::class, 'benefits']); Route::post('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'store']); From d297fc6ab24ed0d3936520145ac84c9a63f6c806 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Tue, 21 Jan 2025 15:39:28 +0700 Subject: [PATCH 2/2] update --- .../src/pages/Corporates/Member/List.tsx | 24 +++- .../Member/sections/DialogDeleteMember.tsx | 132 ++++++++++++++++++ 2 files changed, 154 insertions(+), 2 deletions(-) create mode 100755 frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx diff --git a/frontend/dashboard/src/pages/Corporates/Member/List.tsx b/frontend/dashboard/src/pages/Corporates/Member/List.tsx index 3e9ec04c..c142b35e 100755 --- a/frontend/dashboard/src/pages/Corporates/Member/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/List.tsx @@ -63,7 +63,8 @@ import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material import CloseIcon from '@mui/icons-material/Close'; import Label from '../../../components/Label'; import DialogEditMember from './sections/DialogEditMember'; -import { Edit } from '@mui/icons-material'; +import { Delete, Edit } from '@mui/icons-material'; +import DialogDeleteMember from './sections/DialogDeleteMember'; export default function CorporatePlanList({handleSubmitSuccess}) { const navigate = useNavigate(); @@ -153,6 +154,9 @@ export default function CorporatePlanList({handleSubmitSuccess}) { setSearchParams(filter); }; + const [idMember, setIdMember] = useState(); + const [openDialogDeleteMember, setDialogDeleteMember] = useState(false) + useEffect(() => { loadDataTableData(); }, []); @@ -580,6 +584,14 @@ export default function CorporatePlanList({handleSubmitSuccess}) { History + { + setIdMember(row.id) + setDialogDeleteMember(true) + }} + > + + Delete + } /> @@ -922,8 +934,16 @@ export default function CorporatePlanList({handleSubmitSuccess}) { setOpenDialog = {setOpenDialogUpdate} member = {member} > - + + + {/* Dialog Delete */} + + ); } diff --git a/frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx new file mode 100755 index 00000000..44f4259a --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx @@ -0,0 +1,132 @@ +import MuiDialog from "@/components/MuiDialog"; +import { Autocomplete, Button, Card, Checkbox, DialogActions, Grid, Typography } from "@mui/material"; +import { Paper } from "@mui/material"; +import { Stack } from '@mui/material'; +import React, { useState } from 'react'; +import { fDateTimesecond, toTitleCase } from "@/utils/formatTime"; +import axios from "@/utils/axios"; +import { enqueueSnackbar } from "notistack"; +import { useNavigate } from "react-router"; +import { TextField } from "@mui/material"; + + +type DialogDeleteType = { + openDialog: boolean; + setOpenDialog: any; + onSubmit?: void; + id: number|undefined; +} + +export default function DialogDeleteMember({id, setOpenDialog, openDialog,onSubmit} : DialogDeleteType ) { + const style1 = { + color: '#919EAB', + width: '30%' + } + const style2 = { + width: '70%' + } + const marginBottom2 = { + marginBottom: 2, + } + + const handleCloseDialog = () => { + setOpenDialog(false); + resetForm(); + } + + const [isReasonSelected, setIsReasonSelected] = useState(false); + + const reasons = [ + { value: 'agreement', label: 'Agreement changed' }, + { value: 'endorsement', label: 'Endorsement' }, + { value: 'renewal', label: 'Renewal' }, + { value: 'wrong_setting', label: 'Wrong Setting' }, + // Add more options as needed + ]; + const [formData, setFormData] = useState({ + reason: null + }); + + const resetForm = () => { + setFormData({ + reason: null + }); + }; + + const handleChange = (field, value) => { + setFormData((prevData) => ({ + ...prevData, + [field]: value, + })); + if (field === 'reason') { + setIsReasonSelected(!!value); + } + + }; + + const handleSubmit = () => { + if (isReasonSelected && formData.reason !== '') { + axios + .post(`members/${id}`, formData) + .then((response) => { + enqueueSnackbar('Member LOG has Deleted', { variant: 'success' }); + setOpenDialog(false); + window.location.reload() + }) + .catch(({ response }) => { + enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' }); + }); + } else { + setIsReasonSelected(false); + alert('Silakan pilih alasan sebelum menghapus data.'); + } + + } + + + const getContent = () => ( + + Are you sure to delete this detail Member ? + + + + Reason* + option.label} + fullWidth + value={reasons.find((r) => r.value === formData.reason) || null} // Use find to match the default value + onChange={(e, newValue) => handleChange('reason', newValue?.value)} + renderInput={(params) => ( + + )} + /> + + + + + + + + + ); + + + return ( + + ); +}