Merge remote-tracking branch 'origin/staging' into origin/production
This commit is contained in:
@@ -81,7 +81,11 @@ class MemberController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function destroy($id)
|
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)
|
public function benefits($member_id)
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ Route::prefix('internal')->group(function () {
|
|||||||
|
|
||||||
|
|
||||||
Route::get('members', [MemberController::class, 'index']);
|
Route::get('members', [MemberController::class, 'index']);
|
||||||
|
Route::post('members/{id}', [MemberController::class, 'destroy']);
|
||||||
Route::get('members/{member_id}/benefits', [MemberController::class, 'benefits']);
|
Route::get('members/{member_id}/benefits', [MemberController::class, 'benefits']);
|
||||||
|
|
||||||
Route::post('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'store']);
|
Route::post('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'store']);
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material
|
|||||||
import CloseIcon from '@mui/icons-material/Close';
|
import CloseIcon from '@mui/icons-material/Close';
|
||||||
import Label from '../../../components/Label';
|
import Label from '../../../components/Label';
|
||||||
import DialogEditMember from './sections/DialogEditMember';
|
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}) {
|
export default function CorporatePlanList({handleSubmitSuccess}) {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@@ -153,6 +154,9 @@ export default function CorporatePlanList({handleSubmitSuccess}) {
|
|||||||
setSearchParams(filter);
|
setSearchParams(filter);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [idMember, setIdMember] = useState<number>();
|
||||||
|
const [openDialogDeleteMember, setDialogDeleteMember] = useState(false)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadDataTableData();
|
loadDataTableData();
|
||||||
}, []);
|
}, []);
|
||||||
@@ -580,6 +584,14 @@ export default function CorporatePlanList({handleSubmitSuccess}) {
|
|||||||
<HistoryIcon />
|
<HistoryIcon />
|
||||||
History
|
History
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem onClick={() => {
|
||||||
|
setIdMember(row.id)
|
||||||
|
setDialogDeleteMember(true)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Delete color='error'/>
|
||||||
|
Delete
|
||||||
|
</MenuItem>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@@ -922,8 +934,16 @@ export default function CorporatePlanList({handleSubmitSuccess}) {
|
|||||||
setOpenDialog = {setOpenDialogUpdate}
|
setOpenDialog = {setOpenDialogUpdate}
|
||||||
member = {member}
|
member = {member}
|
||||||
>
|
>
|
||||||
|
|
||||||
</DialogEditMember>
|
</DialogEditMember>
|
||||||
|
<Grid item sm={12}>
|
||||||
|
|
||||||
|
{/* Dialog Delete */}
|
||||||
|
<DialogDeleteMember
|
||||||
|
id={idMember}
|
||||||
|
openDialog={openDialogDeleteMember}
|
||||||
|
setOpenDialog={setDialogDeleteMember}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
132
frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx
Executable file
132
frontend/dashboard/src/pages/Corporates/Member/sections/DialogDeleteMember.tsx
Executable file
@@ -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 = () => (
|
||||||
|
<Stack spacing={1} marginTop={2}>
|
||||||
|
<Typography variant="subtitle2">Are you sure to delete this detail Member ?</Typography>
|
||||||
|
<Grid item xs={12} md={12} marginTop={4}>
|
||||||
|
<Card sx={{padding:2, marginTop:2}} >
|
||||||
|
<Stack direction='row' spacing={2} sx={marginBottom2}>
|
||||||
|
<Typography variant='subtitle2' sx={style1} gutterBottom>Reason*</Typography>
|
||||||
|
<Autocomplete
|
||||||
|
options={reasons}
|
||||||
|
getOptionLabel={(option) => 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) => (
|
||||||
|
<TextField
|
||||||
|
{...params}
|
||||||
|
label="Reason"
|
||||||
|
variant="outlined"
|
||||||
|
required
|
||||||
|
error={!isReasonSelected} // Menandai input sebagai salah jika opsi tidak dipilih
|
||||||
|
helperText={!isReasonSelected ? 'Alasan harus dipilih' : ''}
|
||||||
|
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</Stack>
|
||||||
|
</Card>
|
||||||
|
</Grid>
|
||||||
|
<DialogActions>
|
||||||
|
<Button variant="outlined" sx={{color: '#212B36', borderColor: '#919EAB52'}} onClick={handleCloseDialog}>Cancel</Button>
|
||||||
|
<Button color="error" variant="contained" onClick={handleSubmit}>Delete</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Stack>
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<MuiDialog
|
||||||
|
title={{name: "Delete Member"}}
|
||||||
|
openDialog={openDialog}
|
||||||
|
setOpenDialog={setOpenDialog}
|
||||||
|
content={getContent()}
|
||||||
|
maxWidth="xs"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user