| @@ -8,6 +8,7 @@ import { | |||||
| Stack, | Stack, | ||||
| Dialog, DialogTitle, DialogContent, DialogActions, | Dialog, DialogTitle, DialogContent, DialogActions, | ||||
| } from '@mui/material'; | } from '@mui/material'; | ||||
| import LoadingButton from '@mui/lab/LoadingButton'; | |||||
| import { GET_PUBLIC_NOTICE_LIST, SET_PUBLIC_NOTICE_STATUS_PUBLISH_BULK } from "utils/ApiPathConst"; | import { GET_PUBLIC_NOTICE_LIST, SET_PUBLIC_NOTICE_STATUS_PUBLISH_BULK } from "utils/ApiPathConst"; | ||||
| import * as HttpUtils from "utils/HttpUtils"; | import * as HttpUtils from "utils/HttpUtils"; | ||||
| import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
| @@ -29,6 +30,7 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| const [selectedRowItems, setSelectedRowItems] = React.useState([]); | const [selectedRowItems, setSelectedRowItems] = React.useState([]); | ||||
| const [isConfirmPopUp, setIsConfirmPopUp] = React.useState(false); | const [isConfirmPopUp, setIsConfirmPopUp] = React.useState(false); | ||||
| const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); | const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); | ||||
| const [publishLoading, setPublishLoading] = React.useState(false); | |||||
| const [reload, setReload] = React.useState(new Date()); | const [reload, setReload] = React.useState(new Date()); | ||||
| @@ -39,6 +41,12 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| set_searchCriteria(searchCriteria); | set_searchCriteria(searchCriteria); | ||||
| }, [searchCriteria]); | }, [searchCriteria]); | ||||
| React.useEffect(() => { | |||||
| if (!isConfirmPopUp) { | |||||
| setPublishLoading(false); | |||||
| } | |||||
| }, [isConfirmPopUp]); | |||||
| function genIssueNo(params) { | function genIssueNo(params) { | ||||
| const issueNo = params.row.issueYear + " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) + ", No. " + FormatUtils.zeroPad(params.row.issueNo, 2) + ", " + DateUtils.dateFormat(params.row.issueDate, "D MMM YYYY (ddd)") | const issueNo = params.row.issueYear + " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) + ", No. " + FormatUtils.zeroPad(params.row.issueNo, 2) + ", " + DateUtils.dateFormat(params.row.issueDate, "D MMM YYYY (ddd)") | ||||
| @@ -158,26 +166,36 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| } | } | ||||
| const doPublish = () => { | const doPublish = () => { | ||||
| setIsConfirmPopUp(false); | |||||
| if (publishLoading) return; | |||||
| let appIdList = []; | let appIdList = []; | ||||
| const datas = rows?.filter((row) => | const datas = rows?.filter((row) => | ||||
| selectedRowItems.includes(row.id) | selectedRowItems.includes(row.id) | ||||
| ); | ); | ||||
| // console.log(datas) | |||||
| for (var i = 0; i < datas?.length; i++) { | for (var i = 0; i < datas?.length; i++) { | ||||
| appIdList.push(datas[i].id); | appIdList.push(datas[i].id); | ||||
| } | } | ||||
| if (appIdList.length < 1) { | if (appIdList.length < 1) { | ||||
| setIsConfirmPopUp(false); | |||||
| setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
| } else { | } else { | ||||
| setPublishLoading(true); | |||||
| HttpUtils.post({ | HttpUtils.post({ | ||||
| url: SET_PUBLIC_NOTICE_STATUS_PUBLISH_BULK, | url: SET_PUBLIC_NOTICE_STATUS_PUBLISH_BULK, | ||||
| params: { | params: { | ||||
| ids: appIdList | ids: appIdList | ||||
| }, | }, | ||||
| onSuccess: () => { | onSuccess: () => { | ||||
| setPublishLoading(false); | |||||
| setIsConfirmPopUp(false); | |||||
| setReload(new Date()); | setReload(new Date()); | ||||
| notifyActionSuccess("Action Success!") | notifyActionSuccess("Action Success!") | ||||
| }, | |||||
| onFail: () => { | |||||
| setPublishLoading(false); | |||||
| }, | |||||
| onError: () => { | |||||
| setPublishLoading(false); | |||||
| } | } | ||||
| }); | }); | ||||
| } | } | ||||
| @@ -190,6 +208,7 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| <Grid container direction="row" justifyContent="flex-start" alignItems="center" sx={{ p: 1 }} > | <Grid container direction="row" justifyContent="flex-start" alignItems="center" sx={{ p: 1 }} > | ||||
| <Button | <Button | ||||
| variant="contained" | variant="contained" | ||||
| disabled={publishLoading} | |||||
| onClick={() => setIsConfirmPopUp(true)} | onClick={() => setIsConfirmPopUp(true)} | ||||
| > | > | ||||
| Published | Published | ||||
| @@ -228,7 +247,10 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| <div> | <div> | ||||
| <Dialog | <Dialog | ||||
| open={isConfirmPopUp} | open={isConfirmPopUp} | ||||
| onClose={() => setIsConfirmPopUp(false)} | |||||
| onClose={() => { | |||||
| if (publishLoading) return; | |||||
| setIsConfirmPopUp(false); | |||||
| }} | |||||
| PaperProps={{ | PaperProps={{ | ||||
| sx: { | sx: { | ||||
| minWidth: '40vw', | minWidth: '40vw', | ||||
| @@ -248,15 +270,24 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea | |||||
| </Stack> | </Stack> | ||||
| </DialogContent> | </DialogContent> | ||||
| <DialogActions> | <DialogActions> | ||||
| <Button onClick={() => setIsConfirmPopUp(false)} aria-label={intl.formatMessage({ id: 'close' })}> | |||||
| <Button | |||||
| onClick={() => setIsConfirmPopUp(false)} | |||||
| disabled={publishLoading} | |||||
| aria-label={intl.formatMessage({ id: 'close' })} | |||||
| > | |||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="close" /> | <FormattedMessage id="close" /> | ||||
| </Typography></Button> | </Typography></Button> | ||||
| <Button onClick={() => doPublish()} aria-label={intl.formatMessage({ id: 'confirm' })}> | |||||
| <Typography variant="h5"> | |||||
| <LoadingButton | |||||
| onClick={() => doPublish()} | |||||
| loading={publishLoading} | |||||
| aria-label={intl.formatMessage({ id: 'confirm' })} | |||||
| > | |||||
| <Typography variant="h5" component="span"> | |||||
| <FormattedMessage id="confirm" /> | <FormattedMessage id="confirm" /> | ||||
| </Typography></Button> | |||||
| </Typography> | |||||
| </LoadingButton> | |||||
| </DialogActions> | </DialogActions> | ||||
| </Dialog> | </Dialog> | ||||
| </div> | </div> | ||||