// material-ui import { Grid, Typography, Button, Dialog, DialogTitle, DialogContent, DialogActions, } from '@mui/material'; import MainCard from "../../../components/MainCard"; import * as React from "react"; import * as FieldUtils from "../../../utils/FieldUtils"; import * as HttpUtils from '../../../utils/HttpUtils'; import * as UrlUtils from "../../../utils/ApiPathConst"; import * as ComboData from "../../../utils/ComboData"; import { useFormik } from 'formik'; import * as yup from 'yup'; const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); import Loadable from 'components/Loadable'; import { lazy } from 'react'; import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; import {useIntl} from "react-intl"; // ==============================|| DASHBOARD - DEFAULT ||============================== // const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => { const [currentUserData, setCurrentUserData] = React.useState(userData); const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); const [warningText, setWarningText] = React.useState(""); const [isConfirmPopUp, setIsConfirmPopUp] = React.useState(false); const [confirmText, setConfirmText] = React.useState(""); const [confirmAction, setConfirmAction] = React.useState(); const [editMode, setEditMode] = React.useState(false); const [onReady, setOnReady] = React.useState(false); const intl = useIntl(); React.useEffect(() => { //if state data are ready and assign to different field // console.log(currentApplicationDetailData) if (Object.keys(currentUserData).length > 0) { setOnReady(true); } }, [currentUserData]); function displayErrorMsg(errorMsg) { return {errorMsg} } const formik = useFormik({ enableReinitialize: true, initialValues: currentUserData, validationSchema: yup.object().shape({ contactPerson: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireName'}))), enCompanyName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), chCompanyName: yup.string().max(255).nullable(), addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), addressLine2: yup.string().max(255).nullable(), addressLine3: yup.string().max(255).nullable(), emailBus: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'require3Number'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'require3Number'}))).nullable(), phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'require8Number'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireContactNumber'}))), faxNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'require8Number'}))).nullable(), brExpiryDate: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))), brNo: yup.string().max(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertNumber'}))) .test('checkBrNoFormat', displayErrorMsg(`${intl.formatMessage({id: 'pleaseFillInValidBusinessRegCertNumber'})} (e.g. 12341234)`), function (value) { var brNo_pattern = /[0-9]{8}/ if (value !== undefined) { if (value.match(brNo_pattern)) { return true } else { return false } } }), }), onSubmit: (values) => { HttpUtils.post({ url: UrlUtils.POST_ORG_USER + "/" + userData.id, params: { contactTel: { countryCode: values.tel_countryCode, phoneNumber: values.phoneNumber }, // faxNo: { // countryCode: values.fax_countryCode, // faxNumber: values.faxNumber // }, // addressBus: { // country: values.country, // district: values.district, // addressLine1: values.addressLine1, // addressLine2: values.addressLine2, // addressLine3: values.addressLine3, // }, identification: values.identification, emailBus: values.emailBus, contactPerson: values.contactPerson, // enCompanyName: values.enCompanyName, // chCompanyName: values.chCompanyName, orgId: values.orgId, // brNo: values.brNo, // brExpiryDate: values.brExpiryDate, }, onSuccess: function () { notifySaveSuccess() loadDataFun(); } }); } }); React.useEffect(() => { if (Object.keys(userData).length > 0) { setCurrentUserData(userData); } }, [userData]); const onEditClick = () => { setEditMode(true); }; const createOrgClick = () => { window.open("/org/fromUser/" + userData.id, "_blank", "noreferrer"); window.addEventListener("focus", onFocus) }; const onFocus = () => { loadDataFun(); window.removeEventListener("focus", onFocus) } const onVerifiedClick = () => { if (formik?.values?.orgId) { HttpUtils.get({ url: UrlUtils.GET_IND_USER_VERIFY + "/" + userData.id, onSuccess: function () { notifyVerifySuccess() loadDataFun(); } }); } else { setWarningText("Please select Organisation before active this account.") setIsWarningPopUp(true); } }; const doLock = () => { setConfirmText("Confirm to Lock this Account?"); setConfirmAction({ function: function () { HttpUtils.get({ url: UrlUtils.GET_USER_LOCK + "/" + userData.id, onSuccess: function () { notifyLockSuccess() loadDataFun(); } }); } }); setIsConfirmPopUp(true); }; const doUnlock = () => { setConfirmText("Confirm to Un-Lock this Account?"); setConfirmAction({ function: function () { HttpUtils.get({ url: UrlUtils.GET_USER_UNLOCK + "/" + userData.id, onSuccess: function () { notifyActiveSuccess() loadDataFun(); } }); } }); setIsConfirmPopUp(true); }; return ( {!onReady ? : {/*top button*/} {editMode ? <> Reset & Back Save > : <> Edit > } {/*end top button*/} Organisation User Details {FieldUtils.getTextField({ label: "Username:", valueName: "username", disabled: true, form: formik })} {FieldUtils.getTextField({ label: "Name:", valueName: "contactPerson", disabled: (!editMode), form: formik })} {FieldUtils.getTextField({ label: "Created Date:", valueName: "createDate", disabled: true, form: formik })} {FieldUtils.getTextField({ label: "Email:", valueName: "emailBus", disabled: (!editMode), form: formik })} {FieldUtils.getPhoneField({ label: "Contact Tel:", valueName: { code: "tel_countryCode", num: "phoneNumber" }, disabled: (!editMode), form: formik })} {FieldUtils.getTextField({ label: "Last Updated:", valueName: "modifieDate", disabled: true, form: formik })} {FieldUtils.getComboField({ label: "Organisation:", valueName: "orgId", disabled: (!editMode), dataList: orgData, filterOptions: (options, state) => { if (!state || !state.inputValue) return options; let searchStr = state.inputValue.toLowerCase().toLowerCase().trim(); const displayOptions = options.filter((option) => { let brNo = option.brNo.toLowerCase().trim(); let enCompanyName = option.enCompanyName ? option.enCompanyName.toLowerCase().trim() : ""; let chCompanyName = option.chCompanyName ? option.chCompanyName.toLowerCase().trim() : ""; return brNo.includes(searchStr) || enCompanyName.includes(searchStr) || chCompanyName.includes(searchStr); }, ); return displayOptions; }, getOptionLabel: (item) => item ? typeof item === 'number' ? item + "" : (item["brNo"] ? BR No.: {item["brNo"]}Org. Name(Eng): {item["enCompanyName"] === null ? "N/A" : item["enCompanyName"]}Org. Name(CH): {item["chCompanyName"] === null ? "N/A" : item["chCompanyName"]} : "") : "", isOptionEqualToValue: (option, newValue, setValue, setInputValue) => { if (option.id == newValue || option.id == newValue.id) { setValue(option); setInputValue(option["brNo"]); return true; } return option == newValue || option.id == newValue.id; }, onInputChange: (event, newValue, setInputValue) => { if (newValue !== "[object Object]") { setInputValue(newValue); } }, onChange: (event, newValue) => { if (newValue == null) { formik.setFieldValue("orgId", ""); return; } formik.setFieldValue("orgId", newValue.id); }, form: formik })} Verified: { currentUserData.verifiedBy || editMode ? {FieldUtils.initField({ valueName: "verifiedStatus", disabled: true, form: formik, })} : <> {FieldUtils.initField({ valueName: "verifiedStatus", disabled: true, form: formik, })} { onVerifiedClick() }} > Verify > } {FieldUtils.getTextField({ label: "Last Login:", valueName: "lastLoginDate", disabled: true, form: formik })} Status: { editMode ? {FieldUtils.initField({ valueName: "status", disabled: true, form: formik, })} : <> {FieldUtils.initField({ valueName: "status", disabled: true, form: formik, })} {formik.values.locked ? Active : Lock } > } {currentUserData.orgId == null ? Create Organisation : null } Organisation {FieldUtils.getTextField({ label: "Org.Name (English):", valueName: "enCompanyName", disabled: true, form: formik })} {FieldUtils.getTextField({ label: "Org.Name (Chinese):", valueName: "chCompanyName", disabled: true, form: formik })} {FieldUtils.getTextField({ label: "BR No.:", valueName: "brNo", disabled: true, form: formik })} {FieldUtils.getComboField({ label: "Country:", valueName: "country", dataList: ComboData.country, getOptionLabel: (option) => option.type? intl.formatMessage({ id: option.type }) : "", disabled: true, form: formik })} {FieldUtils.getPhoneField({ label: "Fax No.:", valueName: { code: "fax_countryCode", num: "faxNumber" }, disabled: true, form: formik })} {FieldUtils.getDateField({ label: "BR Expiry Date.:", valueName: "brExpiryDate", disabled: true, form: formik })} {FieldUtils.getAddressField({ label: "Address:", valueName: ["addressLine1", "addressLine2", "addressLine3"], disabled: true, form: formik })} {FieldUtils.getComboField({ label: "District:", valueName: "district", dataList: ComboData.district, getOptionLabel: (option) => option.type? intl.formatMessage({ id: option.type }) : "", disabled: true, form: formik })} } setIsWarningPopUp(false)} > Warning {warningText} setIsWarningPopUp(false)}>Close setIsConfirmPopUp(false)} > Confirm {confirmText} { setIsConfirmPopUp(false) }}>Close { confirmAction?.function(); }}>Confirm ); }; export default UserInformationCard_Organization;