import { useState, useRef, forwardRef } from 'react'; // import { useTheme } from '@mui/material'; import { useTheme } from '@mui/system'; import { useMediaQuery } from '@mui/material'; // for table import TableCell, { tableCellClasses } from '@mui/material/TableCell'; import TableRow from '@mui/material/TableRow'; // button icon import IconButton from '@mui/material/IconButton'; import ModeEditIcon from '@mui/icons-material/ModeEdit'; import DisabledByDefaultIcon from '@mui/icons-material/DisabledByDefault'; import EventAvailableIcon from '@mui/icons-material/EventAvailable'; // for dialog box import { styled } from '@mui/material/styles'; import Box from '@mui/material/Box'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import DialogActions from '@mui/material/DialogActions'; import CloseIcon from '@mui/icons-material/Close'; import Button from '@mui/material/Button'; import TextField from '@mui/material/TextField'; import FormControl from '@mui/material/FormControl'; import InputLabel from '@mui/material/InputLabel'; import Select from '@mui/material/Select'; import MenuItem from '@mui/material/MenuItem'; // this is for number format import NumberFormat from 'react-number-format'; // this is for circular progress import CircularProgress from '@mui/material/CircularProgress'; // for edit jadwal dialog import DialogContentText from '@mui/material/DialogContentText'; // for table import Paper from '@mui/material/Paper'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; const StyledTableCell = styled(TableCell)(({ theme }) => ({ [`&.${tableCellClasses.head}`]: { backgroundColor: theme.palette.primary.main, color: theme.palette.common.white, } })); // this for dialog jadwal import AppBar from '@mui/material/AppBar'; import Toolbar from '@mui/material/Toolbar'; import Slide from '@mui/material/Slide'; import Grid from '@mui/material/Grid'; import Typography from '@mui/material/Typography'; import TabelJadwalDokter from './tabelJadwalDokter'; const Transition = forwardRef(function Transition(props, ref) { // for modal history return ; }); // ini untuk number const NumberFormatCustom = forwardRef(function NumberFormatCustom(props, ref) { const { onChange, ...other } = props; return ( { onChange({ target: { name: props.name, value: values.value, }, }); }} // thousandSeparator isNumericString prefix="08" /> ); }); const NumberFormatCustomNIK = forwardRef(function NumberFormatCustom(props, ref) { const { onChange, ...other } = props; return ( { onChange({ target: { name: props.name, value: values.value, }, }); }} // thousandSeparator isNumericString // prefix="08" /> ); }); const BootstrapDialog = styled(Dialog)(({ theme }) => ({ // for modal edit '& .MuiDialogContent-root': { padding: theme.spacing(2), }, '& .MuiDialogActions-root': { padding: theme.spacing(1), }, })) const BootstrapDialogTitle = (props) => { // for modal edit const { children, onClose, ...other } = props; return ( {children} {onClose ? ( theme.palette.grey[500], }} > ) : null} ); }; function TabelDokterAll(props) { // console.log(props.dataDokterAll, "ini di bagian tabel all"); const url = process.env.HTTP_URL + "/api/admin/dokter"; // ini url const namaInputRef = useRef(); const [nik, setNik] = useState(''); const [nama, setNama] = useState(''); const [alamat, setAlamat] = useState(''); const noTelpInputRef = useRef(); const [noTelp, setNoTelp] = useState(''); const [spesialis, setSpesialis] = useState(''); // for dialog box const [dataDokterEdit, setDataDokterEdit] = useState({}); const [headerDialog, setHeaderDialog] = useState(''); const [openModalEdit, setOpenModalEdit] = useState(false); const [isGet, setIsGet] = useState(false); const handleClickOpenModalEdit = () => { setOpenModalEdit(true); }; const handleCloseModalEdit = (event, reason) => { if (reason && reason == "backdropClick") return; setOpenModalEdit(false); }; // for dialog jadwal const [dataJadwal, setDataJadwal] = useState([]); const [openJadwalModal, setOpenJadwalModal] = useState(false); const handleCloseModalJadwal = () => { setBukaJadwal(false) setOpenJadwalModal(false); setHariTambahEdit(''); setJamMulaiTambahEdit(null); setJamSelesaiTambahEdit(null); }; const handleClickOpenModalJadwal = async (id) => { setIsLoadingDataJadwal console.log(id) setNik(id); setOpenJadwalModal(true); // await 3 sec // await new Promise(resolve => setTimeout(resolve, 3000)); await cekJadwal(id); // setOpenEditJadwal(true); }; // Edit Jadwal Dialog const harinya = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"]; const [openEditJadwal, setOpenEditJadwal] = useState(false); const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.down('md')); const [isLoadingDataJadwal, setIsLoadingDataJadwal] = useState(false); const [bukaJadwal, setBukaJadwal] = useState(false); const [hariTambahEdit, setHariTambahEdit] = useState(''); const [jamMulaiTambahEdit, setJamMulaiTambahEdit] = useState(null); const [jamSelesaiTambahEdit, setJamSelesaiTambahEdit] = useState(null); const handleClickOpenEditJadwal = () => { setOpenEditJadwal(true); }; const handleCloseEditJadwal = () => { setOpenEditJadwal(false); }; async function edit_dokter(id) { setIsGet(false); try { const urlnya = `${url}?nik=${id}`; const response = await fetch(urlnya, { method: 'GET', headers: { 'Content-Type': 'application/json', 'allow-cors-origin': '*', 'crossDomain': true, 'Authorization': 'Basic ' + btoa(`${process.env.ADMIN_AUTH}:${process.env.ADMIN_PASSWORD}`) } }) // get response const data = await response.json() // console.log(data.data, "ini data dokter"); // props.toastnya("Berhasil mengambil data dokter"); if (response.status === 200) { let theData = data.data // console.log(theData, "ini data dokter"); setDataDokterEdit(theData); setHeaderDialog(theData.nama) setNik(theData.nik); setNama(theData.nama); setAlamat(theData.alamat); setNoTelp(theData.no_telp); setSpesialis(theData.spesialis); setIsGet(true); setOpenModalEdit(true); } else { props.toastnya("Data dokter tidak ditemukan"); } } catch (error) { props.toastnya("Terjadi kesalahan"); } handleClickOpenModalEdit(); } const beforeEditDokter = async () => { if (nama == dataDokterEdit.nama && alamat == dataDokterEdit.alamat && noTelp == dataDokterEdit.no_telp && spesialis == dataDokterEdit.spesialis) { props.toastnya("Tidak ada perubahan"); } else { let datanya = { nama, alamat, no_telp: noTelp, spesialis } handleCloseModalEdit() await props.editDokter(nik, datanya); } // console.log(nik, nama, alamat, noTelp, spesialis, dataDokterEdit, "ini data dokter"); } async function cekJadwal(id) { try { let urlnya = `${url}?nik=${id}&detail=jadwal`; const response = await fetch(urlnya, { method: 'GET', headers: { 'Content-Type': 'application/json', 'allow-cors-origin': '*', 'crossDomain': true, 'Authorization': 'Basic ' + btoa(`${process.env.ADMIN_AUTH}:${process.env.ADMIN_PASSWORD}`) } }) // get response const data = await response.json() // console.log(data.data, "ini data dokter"); setDataJadwal(data.data); // console.log(dataJadwal, "ini data jadwal"); } catch (error) { console.log(error) } } return ( <> {"Use Google's location service?"} Let Google help apps determine location. This means sending anonymous location data to Google, even when no apps are running. Jadwal Dokter NIK {nik} { isLoadingDataJadwal ? :
Hari Jam Masuk Jam Keluar Aksi { props.toastnya(message, stat) } } closeJadwal={handleCloseModalJadwal} backdropnya={ (stat) => { props.backdropnya(stat) } } sweetAlertLoadingnya={ (stat) => { props.sweetAlertLoadingnya(stat) } } openback={ async (nik, hari, jam_mulai, jam_selesai,stat) => { // await 500 milisec await new Promise(resolve => setTimeout(resolve, 500)); handleClickOpenModalJadwal(nik) setHariTambahEdit(hari) setJamMulaiTambahEdit(jam_mulai) setJamSelesaiTambahEdit(jam_selesai) if(stat){ setBukaJadwal(true) }else{ setBukaJadwal(false) } } } bukaJadwal={ bukaJadwal } jam_mulainya={jamMulaiTambahEdit} jam_selesainya={jamSelesaiTambahEdit} hari_nya={hariTambahEdit} />
}
{ e.preventDefault(); // await handleCloseModalEdit() beforeEditDokter() } } > Edit Detail {isGet ? headerDialog : null} { isGet ? <> setNik(e.target.value)} InputProps={{ inputComponent: NumberFormatCustomNIK, inputProps: { maxLength: 16, minLength: 16, } }} value={nik} name="nik" /> setNama(e.target.value)} required id="namaTextField" label="Nama" placeholder="Masukkan Nama" sx={{ width: "85%", boxShadow: 10 }} /> setAlamat(e.target.value)} required id="alamatTextField" label="Alamat" placeholder="Masukkan Alamat" sx={{ width: "85%", boxShadow: 10 }} /> setNoTelp(e.target.value)} id="NoTelpTextField" label="No Telpon" placeholder="Masukkan No Telpon" sx={{ width: "85%", boxShadow: 10 }} InputProps={{ inputComponent: NumberFormatCustom, inputProps: { maxLength: 13, minLength: 11, } }} value={noTelp} name="jumlah" /> Spesialis : <> } { isGet ? <> : <> } {props.dataDokterAll.map((row, index) => ( {row.nik} {row.nama} {row.spesialis} {row.no_telp} {row.status} edit_dokter(row.nik)}> { handleClickOpenModalJadwal(row.nik) } }> ))} ) } export default TabelDokterAll;