| @@ -46,4 +46,6 @@ img | |||
| .huerotate {-webkit-filter: hue-rotate(180deg);} | |||
| .rss.opacity {-webkit-filter: opacity(50%);} | |||
| img:hover{-webkit-filter:none;} | |||
| img:hover{-webkit-filter:none;} | |||
| /* iframe#webpack-dev-server-client-overlay{display:none!important} */ | |||
| @@ -12,6 +12,7 @@ export const predictUsageCount = 'predictUsageCount' | |||
| export const windowCount = 'windowCount' | |||
| import {useNavigate} from "react-router-dom"; | |||
| import {useDispatch} from "react-redux"; | |||
| import { REFRESH_TOKEN } from 'utils/ApiPathConst'; | |||
| // ** Handle User Login | |||
| export const handleLogin = data => { | |||
| @@ -25,7 +26,7 @@ export const handleLogin = data => { | |||
| refreshToken: data['refreshToken'] | |||
| }) | |||
| console.log(data) | |||
| // console.log(data) | |||
| // ** Add to user, accessToken & refreshToken to localStorage | |||
| localStorage.setItem('userData', JSON.stringify(data)) | |||
| localStorage.setItem('accessToken', data.accessToken) | |||
| @@ -104,6 +105,8 @@ export const SetupAxiosInterceptors = () => { | |||
| const navigate = useNavigate() | |||
| const dispatch = useDispatch(); | |||
| //const updateLastRequestTime = useContext(TimerContext); | |||
| let isRefreshToken= false; | |||
| axios.interceptors.request.use( | |||
| config => { | |||
| // ** Get token from localStorage | |||
| @@ -126,39 +129,77 @@ export const SetupAxiosInterceptors = () => { | |||
| //updateLastRequestTime(Date.now()); | |||
| return response; | |||
| }, | |||
| error => { | |||
| async (error) => { | |||
| // ** const { config, response: { status } } = error | |||
| const {response} = error | |||
| if (error.response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| // ** if (status === 401) { | |||
| if (response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| if (error.response.status === 401 && error.config.url !== apiPath + REFRESH_TOKEN) { | |||
| // Make a request to refresh the access token | |||
| const refreshToken = localStorage.getItem('refreshToken'); | |||
| if (isRefreshToken) { | |||
| return; | |||
| } | |||
| } | |||
| if (response && response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| isRefreshToken = true; | |||
| return axios | |||
| .post(`${apiPath}${REFRESH_TOKEN}`, { | |||
| refreshToken: refreshToken // Replace with your refresh token | |||
| }) | |||
| .then((response) => { | |||
| if (response.status === 200) { | |||
| const newAccessToken = response.data.accessToken; | |||
| const newRefreshToken = response.data.refreshToken; | |||
| localStorage.setItem('accessToken', newAccessToken); | |||
| localStorage.setItem('refreshToken', newRefreshToken); | |||
| isRefreshToken = false; | |||
| window.location.reload(); | |||
| } | |||
| }) | |||
| .catch((refreshError) => { | |||
| dispatch(handleLogoutFunction()); | |||
| navigate('/login'); | |||
| isRefreshToken = false; | |||
| window.location.reload(); | |||
| throw refreshError; | |||
| }); | |||
| } else { | |||
| if (isUserLoggedIn()){ | |||
| if (error.response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| // ** if (status === 401) { | |||
| if (response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| if (response && response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| if (localStorage.getItem("expiredAlertShown")) { | |||
| await dispatch(handleLogoutFunction()); | |||
| await navigate('/login'); | |||
| await window.location.reload(); | |||
| } | |||
| } else { | |||
| if (error.response.status === 401) { | |||
| await dispatch(handleLogoutFunction()); | |||
| await navigate('/login'); | |||
| // await window.location.reload(); | |||
| } | |||
| } | |||
| } | |||
| if (localStorage.getItem("expiredAlertShown")) { | |||
| dispatch(handleLogoutFunction()); | |||
| navigate('/login'); | |||
| } | |||
| return Promise.reject(error) | |||
| }, | |||
| } | |||
| ) | |||
| } | |||
| @@ -44,7 +44,7 @@ export const getNonce = () => { | |||
| }; | |||
| export const getBowserType = () => { | |||
| console.log(navigator.userAgent) | |||
| // console.log(navigator.userAgent) | |||
| // const regex = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Mi|huawei|Opera Mini|SAMSUNG|Samsung|SGH-[I|N|T]|GT-[I|N]|SM-[A|N|P|T|Z]|SHV-E|SCH-[I|J|R|S]|SPH-L/i; | |||
| // if(!regex.test(navigator.userAgent)) | |||
| if (navigator.userAgent.indexOf("Edg") != -1) { | |||
| @@ -1,17 +1,29 @@ | |||
| import React, { createContext, useState, useEffect } from 'react'; | |||
| //import {useNavigate} from "react-router-dom"; | |||
| import {useNavigate} from "react-router-dom"; | |||
| //import axios from "axios"; | |||
| import {getUserData} from "../auth/utils"; | |||
| import {isObjEmpty} from "../utils/Utils"; | |||
| // import {getUserData} from "auth/utils"; | |||
| // import {isObjEmpty} from "../utils/Utils"; | |||
| import {useIdleTimer} from "react-idle-timer"; | |||
| import { handleLogoutFunction } from 'auth/index'; | |||
| import { useDispatch } from "react-redux"; | |||
| import { | |||
| isUserLoggedIn, | |||
| isGLDLoggedIn, | |||
| // isPrimaryLoggedIn, | |||
| // isCreditorLoggedIn, | |||
| // isINDLoggedIn, | |||
| // isORGLoggedIn, | |||
| // getUserId | |||
| } from "utils/Utils"; | |||
| const TimerContext = createContext(); | |||
| const AutoLogoutProvider = ({ children }) => { | |||
| const [lastRequestTime, setLastRequestTime] = useState(Date.now()); | |||
| //const navigate = useNavigate(); | |||
| const [logoutInterval /*, setLogoutInterval*/] = useState(1); | |||
| const navigate = useNavigate(); | |||
| const [logoutInterval, setLogoutInterval] = useState(1); | |||
| const [state, setState] = useState('Active'); | |||
| const dispatch = useDispatch() | |||
| const onIdle = () => { | |||
| setLastRequestTime(Date.now()); | |||
| @@ -30,7 +42,7 @@ const AutoLogoutProvider = ({ children }) => { | |||
| } = useIdleTimer({ | |||
| onIdle, | |||
| onActive, | |||
| timeout: 10_000, | |||
| timeout: 1_000, | |||
| throttle: 500, | |||
| crossTab: true, | |||
| syncTimers: 200, | |||
| @@ -39,42 +51,55 @@ const AutoLogoutProvider = ({ children }) => { | |||
| const lastActiveTab = isLastActiveTab() === null ? 'loading' : isLastActiveTab() | |||
| //const tabId = getTabId() === null ? 'loading' : getTabId().toString() | |||
| useEffect(() => { | |||
| const userData = getUserData(); | |||
| if(!isObjEmpty(userData)){ | |||
| const getLogoutInterval = () =>{ | |||
| if(isUserLoggedIn()&&logoutInterval===1){ | |||
| //TODO: get auto logout time here | |||
| if(isGLDLoggedIn()){ | |||
| setLogoutInterval(240); | |||
| console.log("Set Logout Interval: 240") | |||
| }else{ | |||
| setLogoutInterval(60); | |||
| console.log("Set Logout Interval: 60") | |||
| } | |||
| // axios.get(`${apiPath}${GET_IDLE_LOGOUT_TIME}`, | |||
| // ) | |||
| // .then((response) => { | |||
| // if (response.status === 200) { | |||
| // setLastRequestTime(Date.now()); | |||
| // setLogoutInterval(parseInt(response.data.data)); | |||
| // } | |||
| // }) | |||
| // .catch(error => { | |||
| // console.log(error); | |||
| // return false; | |||
| // }); | |||
| // .then((response) => { | |||
| // if (response.status === 200) { | |||
| // setLastRequestTime(Date.now()); | |||
| // setLogoutInterval(parseInt(response.data.data)); | |||
| // } | |||
| // }) | |||
| // .catch(error => { | |||
| // console.log(error); | |||
| // return false; | |||
| // }); | |||
| } | |||
| else{ | |||
| if(!isUserLoggedIn()&&logoutInterval>1){ | |||
| setLogoutInterval(1); | |||
| } | |||
| //navigate('/login'); | |||
| } | |||
| }, []); | |||
| } | |||
| useEffect(() => { | |||
| getLogoutInterval() | |||
| // console.log("AutoLogoutProvider Start") | |||
| // console.log(logoutInterval) | |||
| const interval = setInterval(async () => { | |||
| const currentTime = Date.now(); | |||
| getRemainingTime(); | |||
| if(state !== "Active" && lastActiveTab){ | |||
| const timeElapsed = currentTime - lastRequestTime; | |||
| // console.log(timeElapsed); | |||
| // console.log(parseInt(timeElapsed/1000)); | |||
| // console.log(logoutInterval* 60); | |||
| if (timeElapsed >= logoutInterval * 60 * 1000) { | |||
| //TODO: auto logout here | |||
| // console.log("logout"); | |||
| //await dispatch(handleLogoutFunction()); | |||
| //await navigate('/login'); | |||
| //await window.location.reload(); | |||
| if(isUserLoggedIn()){ | |||
| alert("登入驗證已過期,請重新登入。") | |||
| dispatch(handleLogoutFunction()); | |||
| navigate('/login'); | |||
| window.location.reload(); | |||
| } | |||
| } | |||
| } | |||
| else if(state === "Active"){ | |||
| @@ -1,15 +1,17 @@ | |||
| // material-ui | |||
| import * as React from 'react'; | |||
| import { | |||
| DataGrid, | |||
| DataGrid, GridOverlay, | |||
| } from "@mui/x-data-grid"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| import {TablePagination, Typography} from '@mui/material'; | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| export function FiDataGrid({ rows, columns, sx, autoHeight, | |||
| hideFooterSelectedRowCount, rowModesModel, editMode, | |||
| pageSizeOptions, filterItems, | |||
| ...props }) { | |||
| hideFooterSelectedRowCount, rowModesModel, editMode, | |||
| pageSizeOptions, filterItems, customPageSize, ...props }) { | |||
| const intl = useIntl(); | |||
| const [_rows, set_rows] = React.useState([]); | |||
| const [_columns, set_columns] = React.useState([]); | |||
| const [_rowModesModel, set_rowModesModel] = React.useState({}); | |||
| @@ -17,13 +19,12 @@ export function FiDataGrid({ rows, columns, sx, autoHeight, | |||
| const [_pageSizeOptions, set_pageSizeOptions] = React.useState([10, 25, 50]); | |||
| const [_filterItems, set_filterItems] = React.useState([]); | |||
| const [page, setPage] = React.useState(0); | |||
| const [pageSize, setPageSize] = React.useState(10); | |||
| const [_autoHeight, set_autoHeight] = React.useState(true); | |||
| const [myHideFooterSelectedRowCount, setMyHideFooterSelectedRowCount] = React.useState(true); | |||
| const [_sx, set_sx] = React.useState({ | |||
| padding: "4 2 4 2", | |||
| // boxShadow: 1, | |||
| // border: 1, | |||
| // borderColor: '#DDD', | |||
| '& .MuiDataGrid-cell': { | |||
| borderTop: 1, | |||
| borderBottom: 1, | |||
| @@ -35,7 +36,6 @@ export function FiDataGrid({ rows, columns, sx, autoHeight, | |||
| }, | |||
| }); | |||
| React.useEffect(() => { | |||
| if (sx) { | |||
| set_sx(sx); | |||
| @@ -55,80 +55,74 @@ export function FiDataGrid({ rows, columns, sx, autoHeight, | |||
| if (pageSizeOptions) { | |||
| set_pageSizeOptions(pageSizeOptions) | |||
| } | |||
| if(autoHeight != undefined){ | |||
| if(autoHeight !== undefined){ | |||
| set_autoHeight(autoHeight) | |||
| } | |||
| if(editMode){ | |||
| set_editMode(editMode); | |||
| } | |||
| }, []); | |||
| React.useEffect(() => { | |||
| if (sx) { | |||
| set_sx(sx); | |||
| } | |||
| }, [sx]); | |||
| React.useEffect(() => { | |||
| if (hideFooterSelectedRowCount) { | |||
| setMyHideFooterSelectedRowCount(hideFooterSelectedRowCount); | |||
| if(filterItems){ | |||
| set_filterItems(filterItems); | |||
| } | |||
| }, [hideFooterSelectedRowCount]); | |||
| React.useEffect(() => { | |||
| if (rowModesModel) { | |||
| set_rowModesModel(rowModesModel) | |||
| if(customPageSize){ | |||
| setPageSize(customPageSize); | |||
| } | |||
| }, [rowModesModel]); | |||
| }, [sx, hideFooterSelectedRowCount, rowModesModel, rows, columns, pageSizeOptions, autoHeight, editMode, filterItems, customPageSize]); | |||
| React.useEffect(() => { | |||
| if (rows) { | |||
| set_rows(rows) | |||
| } | |||
| }, [rows]); | |||
| const handleChangePage = (event, newPage) => { | |||
| setPage(newPage); | |||
| }; | |||
| React.useEffect(() => { | |||
| if (columns) { | |||
| set_columns(columns) | |||
| } | |||
| }, [columns]); | |||
| const handleChangePageSize = (event) => { | |||
| setPageSize(parseInt(event.target.value, 10)); | |||
| setPage(0); | |||
| }; | |||
| React.useEffect(() => { | |||
| if (pageSizeOptions) { | |||
| set_pageSizeOptions(pageSizeOptions) | |||
| } | |||
| }, [pageSizeOptions]); | |||
| const startIndex = page * pageSize; | |||
| const endIndex = (page + 1) * pageSize; | |||
| const slicedRows = _rows.slice(startIndex, endIndex); | |||
| React.useEffect(() => { | |||
| if(autoHeight != undefined){ | |||
| set_autoHeight(autoHeight) | |||
| } | |||
| }, [autoHeight]); | |||
| function CustomNoRowsOverlay() { | |||
| return ( | |||
| <GridOverlay> | |||
| <Typography variant="body1"> | |||
| <FormattedMessage id="noRecordFound" /> | |||
| </Typography> | |||
| </GridOverlay> | |||
| ); | |||
| } | |||
| React.useEffect(() => { | |||
| if(editMode){ | |||
| set_editMode(editMode); | |||
| } | |||
| }, [editMode]); | |||
| React.useEffect(() => { | |||
| if(filterItems){ | |||
| set_filterItems(filterItems); | |||
| } | |||
| }, [filterItems]); | |||
| return ( | |||
| <DataGrid | |||
| {...props} | |||
| rows={_rows} | |||
| rows={slicedRows} | |||
| columns={_columns} | |||
| disableColumnMenu | |||
| rowModesModel={_rowModesModel} | |||
| pageSizeOptions={_pageSizeOptions} | |||
| editMode={_editMode} | |||
| autoHeight={_autoHeight} | |||
| hideFooterSelectedRowCount={myHideFooterSelectedRowCount} | |||
| filterModel={{items:_filterItems}} | |||
| filterModel={{ items: _filterItems }} | |||
| sx={_sx} | |||
| components={{ | |||
| noRowsOverlay: CustomNoRowsOverlay, | |||
| Pagination: () => ( | |||
| <TablePagination | |||
| count={_rows.length} | |||
| page={page} | |||
| rowsPerPage={pageSize} | |||
| rowsPerPageOptions={[5,10,20,100]} | |||
| labelDisplayedRows={({ from, to, count }) => | |||
| `${from}-${to} ${intl.formatMessage({ id: "of" })} ${count}` | |||
| } | |||
| labelRowsPerPage={intl.formatMessage({ id: "rowsPerPage" }) + ":"} | |||
| onPageChange={handleChangePage} | |||
| onRowsPerPageChange={handleChangePageSize} | |||
| /> | |||
| ), | |||
| }} | |||
| /> | |||
| ); | |||
| } | |||
| @@ -0,0 +1,72 @@ | |||
| import { createContext, useEffect, useRef, useCallback } from 'react'; | |||
| import { apiPath } from 'auth/utils'; | |||
| import { REFRESH_TOKEN } from 'utils/ApiPathConst'; | |||
| import axios from 'axios'; | |||
| const RefreshTokenContext = createContext(); | |||
| const RefreshTokenProvider = ({ children }) => { | |||
| const token = useRef(localStorage.getItem('accessToken')); | |||
| const isRefresh = useRef(false); | |||
| // handle Refresh Token Logic | |||
| const handleRefreshToken = useCallback(() => { | |||
| if (!isRefresh.current) { | |||
| const refreshToken = localStorage.getItem('refreshToken'); | |||
| isRefresh.current = true; | |||
| axios | |||
| .post(`${apiPath}${REFRESH_TOKEN}`, { | |||
| refreshToken: refreshToken | |||
| }) | |||
| .then((response) => { | |||
| if (response.status === 200) { | |||
| const newAccessToken = response.data.accessToken; | |||
| const newRefreshToken = response.data.refreshToken; | |||
| localStorage.setItem('accessToken', newAccessToken); | |||
| localStorage.setItem('refreshToken', newRefreshToken); | |||
| token.current = newAccessToken; | |||
| isRefresh.current = false; | |||
| } else { | |||
| token.current = null; | |||
| isRefresh.current = false; | |||
| } | |||
| }) | |||
| .catch((refreshError) => { | |||
| console.log('Failed to refresh token'); | |||
| console.log(refreshError) | |||
| token.current = null | |||
| isRefresh.current = false; | |||
| }); | |||
| } | |||
| }, []); | |||
| // Function to check token expiry | |||
| const checkTokenExpiry = useCallback(() => { | |||
| // Check if token is present and its expiry time | |||
| if (token.current) { | |||
| const tokenExp = JSON.parse(atob(token.current.split('.')[1])).exp; | |||
| const currentTime = Math.floor(Date.now() / 1000); | |||
| const expiryTime = tokenExp - 30; // Refresh 30 seconds before expiry | |||
| // console.log("check refresh Token"); | |||
| // console.log(currentTime); | |||
| // console.log(new Date(currentTime*1000).toLocaleString()); | |||
| // console.log(expiryTime); | |||
| // console.log(new Date(expiryTime*1000).toLocaleString()); | |||
| // console.log('accessToken: ' + localStorage.getItem('accessToken')); | |||
| // console.log('refreshToken: ' + localStorage.getItem('refreshToken')); | |||
| if (currentTime >= expiryTime) { | |||
| handleRefreshToken(); | |||
| } | |||
| } | |||
| }, [token]); | |||
| // Start the timer on component mount | |||
| useEffect(() => { | |||
| const timer = setInterval(checkTokenExpiry, 10000); // Check every 10 second | |||
| return () => clearInterval(timer); // Cleanup timer on unmount | |||
| }, [checkTokenExpiry]); | |||
| return <RefreshTokenContext.Provider value={{}}>{children}</RefreshTokenContext.Provider>; | |||
| }; | |||
| export { RefreshTokenContext, RefreshTokenProvider }; | |||
| @@ -18,6 +18,7 @@ import { store } from 'store'; | |||
| import reportWebVitals from './reportWebVitals'; | |||
| import {I18nProvider} from "./components/I18nProvider"; | |||
| import {AutoLogoutProvider} from "./components/AutoLogoutProvider"; | |||
| import {RefreshTokenProvider} from "./components/RefreshTokenProvider"; | |||
| // ==============================|| MAIN - REACT DOM RENDER ||============================== // | |||
| @@ -29,11 +30,13 @@ root.render( | |||
| <StrictMode> | |||
| <ReduxProvider store={store}> | |||
| <I18nProvider> | |||
| <BrowserRouter basename="/"> | |||
| <AutoLogoutProvider> | |||
| <App /> | |||
| </AutoLogoutProvider> | |||
| </BrowserRouter> | |||
| <BrowserRouter basename="/"> | |||
| <RefreshTokenProvider> | |||
| <AutoLogoutProvider> | |||
| <App /> | |||
| </AutoLogoutProvider> | |||
| </RefreshTokenProvider> | |||
| </BrowserRouter> | |||
| </I18nProvider> | |||
| </ReduxProvider> | |||
| </StrictMode> | |||
| @@ -137,6 +137,17 @@ function Header(props) { | |||
| <li> | |||
| <Link className="emailTemplate" to='/emailTemplate'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Email Template</Typography></Link> | |||
| </li> | |||
| <li> | |||
| <Link className="client" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2 }}>Setting</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | |||
| <ul className='dropdown'> | |||
| <li> | |||
| <Link className="userProfileGld" to='/user/profile'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Users Profile</Typography></Link> | |||
| </li> | |||
| <li> | |||
| <Link className="systemSetting" to='/setting/sys'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>System Setting</Typography></Link> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| <li> | |||
| <Link className="logout" onClick={handleLogout}><Typography variant={"pnspsHeaderTitle"} sx={{ ml: 2 }}>Logout</Typography></Link> | |||
| </li> | |||
| @@ -216,7 +227,7 @@ function Header(props) { | |||
| <Link className="manageUser" to={'/org'}> | |||
| <Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2 }}> | |||
| {/* <FormattedMessage id="companyOrUserRecord" /> */} | |||
| Organisation Profile | |||
| <FormattedMessage id="organizationProfile" /> | |||
| </Typography> | |||
| </Link> | |||
| </li> | |||
| @@ -252,8 +263,7 @@ function Header(props) { | |||
| <li> | |||
| <Link className="manageUser" to={'/orgUser'}> | |||
| <Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2 }}> | |||
| {/* <FormattedMessage id="companyOrUserRecord" /> */} | |||
| User Profile | |||
| <FormattedMessage id="userProfile" /> | |||
| </Typography> | |||
| </Link> | |||
| </li> | |||
| @@ -103,18 +103,14 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| ]; | |||
| return ( | |||
| <div style={{ minHeight:400, width: '100%' }}> | |||
| <div style={{ width: '100%' }}> | |||
| <FiDataGrid | |||
| sx={_sx} | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| onRowDoubleClick={handleEditClick} | |||
| /> | |||
| </div> | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| Autocomplete, | |||
| Typography, | |||
| @@ -15,6 +14,8 @@ import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as HttpUtils from "utils/HttpUtils"; | |||
| import { useNavigate } from "react-router-dom"; | |||
| import { notifyDownloadSuccess } from 'utils/CommonFunction'; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -35,22 +36,6 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
| const [issueCombo, setIssueCombo] = React.useState([]); | |||
| const navigate = useNavigate() | |||
| const _sx = { | |||
| padding: "4 2 4 2", | |||
| boxShadow: 1, | |||
| border: 1, | |||
| borderColor: '#DDD', | |||
| '& .MuiDataGrid-cell': { | |||
| borderTop: 1, | |||
| borderBottom: 1, | |||
| borderColor: "#EEE" | |||
| }, | |||
| '& .MuiDataGrid-footerContainer': { | |||
| border: 1, | |||
| borderColor: "#EEE" | |||
| } | |||
| } | |||
| React.useEffect(() => { | |||
| if (issueComboData && issueComboData.length > 0) { | |||
| setIssueCombo(issueComboData); | |||
| @@ -128,22 +113,24 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
| <MainCard xs={12} md={12} lg={12} | |||
| border={false} | |||
| content={false} | |||
| sx={_sx} | |||
| > | |||
| <form> | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="h5">Please Select Gazette Issue :</Typography> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
| <Typography variant="h5" > | |||
| Please Select Gazette Issue : | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| {/*row 2*/} | |||
| {/*row 2*/} | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 1 }}> | |||
| <Grid container display="flex" alignItems={"center"} sx={{mb:3}}> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3 }}> | |||
| <Autocomplete | |||
| disablePortal | |||
| size="small" | |||
| id="issueId" | |||
| options={issueCombo} | |||
| value={issueSelected} | |||
| @@ -177,17 +164,15 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
| </Button> | |||
| </Grid> */} | |||
| <Grid item sx={{ ml: 3, mr: 3 }} > | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={onSubmit} | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Create</Typography> | |||
| > | |||
| Create | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }} > | |||
| @@ -198,9 +183,20 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
| <Typography variant="h5">Pending Publish: {publishCount}</Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| <div> | |||
| <Dialog open={isFailPopUp} onClose={() => setIsFailPopUp(false)} > | |||
| <Dialog | |||
| open={isFailPopUp} | |||
| onClose={() => setIsFailPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Action Fail</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{failText}</Typography> | |||
| @@ -211,7 +207,17 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={isSuccessPopUp} onClose={() => setIsSuccessPopUp(false)} > | |||
| <Dialog | |||
| open={isSuccessPopUp} | |||
| onClose={() => setIsSuccessPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Create Result</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Grid container alignItems={"center"}> | |||
| @@ -80,16 +80,18 @@ const Index = () => { | |||
| !onReady ? | |||
| <LoadingComponent/> | |||
| : | |||
| <Grid container sx={{minHeight: '85vh',backgroundColor:'#ffffff'}} direction="column"> | |||
| <Grid container sx={{backgroundColor: 'backgroundColor.default'}} direction="column"> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">Create Demand Note</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| Create Demand Note | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| issueComboData={issueCombo} | |||
| @@ -18,6 +18,8 @@ import { notifyDownloadSuccess } from 'utils/CommonFunction'; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as HttpUtils from "utils/HttpUtils"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| export default function SearchDemandNote({ recordList, reloadFun, applySearch }) { | |||
| @@ -270,8 +272,9 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| ]; | |||
| return ( | |||
| <div style={{ height: '100%', width: '100%' }}> | |||
| <div style={{ width: '100%' }}> | |||
| <Grid container maxWidth justifyContent="flex-start"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <input | |||
| id="uploadFileBtn" | |||
| @@ -295,62 +298,45 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| <Button | |||
| component="span" | |||
| variant="contained" | |||
| size="large" | |||
| > | |||
| <Typography variant="h5">Attach DN</Typography> | |||
| Attach DN | |||
| </Button> | |||
| </label> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={findReadyToSend} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Ready Send</Typography> | |||
| > | |||
| Ready Send | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={() => setSendPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Send DN</Typography> | |||
| > | |||
| Send DN | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={() => exportXml()} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Export XML</Typography> | |||
| onClick={() => exportXml()}> | |||
| Export GDNS | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={() => setConfirmPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Mark as Paid</Typography> | |||
| > | |||
| Mark as Paid | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| <Box sx={{ backgroundColor: "#fff", ml: 2 }} width="98%"> | |||
| <FiDataGrid | |||
| @@ -361,17 +347,23 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| }} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 100 }, | |||
| }, | |||
| }} | |||
| customPageSize={100} | |||
| getRowHeight={() => 'auto'} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| /> | |||
| </Box> | |||
| <div> | |||
| <Dialog open={isErrorPopUp} onClose={() => setIsErrorPopUp(false)} > | |||
| <Dialog | |||
| open={isErrorPopUp} | |||
| onClose={() => setIsErrorPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Action Fail</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Number of DN record must less than 100.<br />Please edit search form.</Typography> | |||
| @@ -382,7 +374,17 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={selectonWarning} onClose={() => setSelectonWarning(false)} > | |||
| <Dialog | |||
| open={selectonWarning} | |||
| onClose={() => setSelectonWarning(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Warning</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Please Select DN.</Typography> | |||
| @@ -393,7 +395,17 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={isConfirmPopUp} onClose={() => setConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={isConfirmPopUp} | |||
| onClose={() => setConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure to mark DN paid?</Typography> | |||
| @@ -405,7 +417,17 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={isSendPopUp} onClose={() => setSendPopUp(false)} > | |||
| <Dialog | |||
| open={isSendPopUp} | |||
| onClose={() => setSendPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure to send DN?</Typography> | |||
| @@ -417,7 +439,17 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={wait} onClose={() => setWait(false)} > | |||
| <Dialog | |||
| open={wait} | |||
| onClose={() => setWait(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Calculating, please wait ...</Typography> | |||
| </DialogContent> | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| Autocomplete, | |||
| Typography | |||
| @@ -12,6 +11,8 @@ import * as React from "react"; | |||
| import * as ComboData from "utils/ComboData"; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as FormatUtils from "utils/FormatUtils"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -88,14 +89,12 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
| > | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 3, mb: 3 }} width="98%"> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1 }} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item xs={12}> | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center"> | |||
| <Typography variant="h5">Search Form</Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1, ml:3,mb:2.5}}> | |||
| <Typography variant="pnspsFormHeader" > | |||
| Search Form | |||
| </Typography> | |||
| </Grid> | |||
| {/*row 2*/} | |||
| <Grid container display="flex" alignItems={"center"}> | |||
| @@ -105,6 +104,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
| {...register("issueId")} | |||
| disablePortal | |||
| id="issueId" | |||
| size="small" | |||
| options={issueCombo} | |||
| value={issueSelected} | |||
| inputValue={(issueSelected?.id) ? getIssueLabel(issueSelected) : ""} | |||
| @@ -145,6 +145,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
| {...register("orgId")} | |||
| disablePortal | |||
| id="orgId" | |||
| size="small" | |||
| options={orgCombo} | |||
| value={orgSelected} | |||
| inputValue={(orgSelected?.label) ? orgSelected?.label : ""} | |||
| @@ -220,6 +221,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Autocomplete | |||
| multiple | |||
| size="small" | |||
| {...register("status")} | |||
| id="status" | |||
| options={ComboData.denmandNoteStatus} | |||
| @@ -258,31 +260,25 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mb:3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Clear</Typography> | |||
| > | |||
| Clear | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb:3}}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Submit</Typography> | |||
| > | |||
| Submit | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| @@ -94,16 +94,18 @@ const UserSearchPage_Individual = () => { | |||
| !onReady ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ minHeight: '85vh', backgroundColor: 'backgroundColor.default' }} direction="column"> | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default' }} direction="column"> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">Demand Note</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| Demand Note | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb: -1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| orgComboData={orgCombo} | |||
| @@ -80,11 +80,7 @@ export default function SearchDemandNote({ recordList }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 100 }, | |||
| }, | |||
| }} | |||
| customPageSize={100} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| </Box> | |||
| @@ -13,6 +13,8 @@ import * as ComboData from "utils/ComboData"; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as FormatUtils from "utils/FormatUtils"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -76,13 +78,13 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
| > | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 3, mb: 3 }} width="98%"> | |||
| <Grid container sx={{ backgroundColor: '#ffffff' }} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item xs={12}> | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center"> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="search"/> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="pnspsFormHeader"> | |||
| <FormattedMessage id="searchForm"/> | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| @@ -210,35 +212,26 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{mr: 3, mb: 3}}> | |||
| <Button | |||
| color="cancel" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| > | |||
| <FormattedMessage id="reset"/> | |||
| </Typography> | |||
| </Button> | |||
| </Grid> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5"> | |||
| <Grid item sx={{ mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| > | |||
| <FormattedMessage id="submit" /> | |||
| </Typography> | |||
| </Button> | |||
| </Grid> | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| @@ -98,14 +98,14 @@ const UserSearchPage_Individual = () => { | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="paymentInfoRecord" /> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| orgComboData={orgCombo} | |||
| @@ -4,8 +4,7 @@ import { | |||
| Grid, | |||
| Typography, | |||
| FormLabel, | |||
| OutlinedInput, | |||
| Button, | |||
| Button, TextField, | |||
| // TextField, | |||
| // Autocomplete, | |||
| } from '@mui/material'; | |||
| @@ -15,6 +14,8 @@ import * as React from "react"; | |||
| import Loadable from 'components/Loadable'; | |||
| const MainCard = Loadable(React.lazy(() => import('components/MainCard'))); | |||
| import { useForm } from 'react-hook-form'; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const ApplicationDetailCard = ({ | |||
| formData, | |||
| @@ -35,59 +36,30 @@ const ApplicationDetailCard = ({ | |||
| // initialValues: data, | |||
| // }); | |||
| const DisplayField = ({ name, width, value, rows = 1, disabled = false }) => { | |||
| return <OutlinedInput | |||
| const DisplayField = ({ name, rows, value, disabled = false }) => { | |||
| return <TextField | |||
| fullWidth | |||
| multiline | |||
| disabled={disabled} | |||
| size="small" | |||
| // onChange={formik.handleChange} | |||
| inputProps={{ style: {fontSize: '1.1rem'}}} | |||
| InputProps={{ | |||
| style: { | |||
| minHeight:'42.5px', | |||
| maxHeight: '50vh', | |||
| padding: '0 0 0 0', | |||
| height: 'fit-content', | |||
| boxSizing: "inherit"}, | |||
| }} | |||
| sx={{ padding: '10.5px 14px 10.5px 12px'}} | |||
| {...register(name, | |||
| { | |||
| value: value, | |||
| })} | |||
| id={name} | |||
| name={name} | |||
| variant="outlined" | |||
| multiline | |||
| minRows={rows} | |||
| maxRows={6} | |||
| rows={rows} | |||
| sx={ | |||
| { | |||
| "& .Mui-disabled": { | |||
| WebkitTextFillColor: "#000000", | |||
| background: "#f8f8f8", | |||
| }, | |||
| // "& .MuiInputBase-input.Mui-disabled": { | |||
| // WebkitTextFillColor: "#000000", | |||
| // background: "#f8f8f8", | |||
| // }, | |||
| width: width ? width : '100%' | |||
| } | |||
| } | |||
| />; | |||
| } | |||
| const { register, handleSubmit } = useForm() | |||
| // const DisplaySelection = ({ name = "test", value = "", onChange }) => { | |||
| // return <Autocomplete | |||
| // {...register(name)} | |||
| // disablePortal | |||
| // id={name} | |||
| // options={formData} | |||
| // vale={value} | |||
| // onChange={onChange} | |||
| // renderInput={(params) => ( | |||
| // <TextField {...params} | |||
| // InputLabelProps={{ | |||
| // shrink: true | |||
| // }} | |||
| // /> | |||
| // )} | |||
| // /> | |||
| // } | |||
| return ( | |||
| <MainCard | |||
| id={"emailTemplateMainCard"} | |||
| @@ -141,6 +113,7 @@ const ApplicationDetailCard = ({ | |||
| <DisplayField | |||
| name="description" | |||
| value={formData?.description} | |||
| rows={2} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| @@ -168,14 +141,14 @@ const ApplicationDetailCard = ({ | |||
| <Grid container direction="row" justifyContent="space-between" | |||
| alignItems="center"> | |||
| <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{ mb: 1 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| <Grid item xs={12} md={1.5} lg={1.5} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Subject (Cht):</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <Grid item xs={12} md={10.5} lg={10.5}> | |||
| <DisplayField | |||
| name="subjectCht" | |||
| value={formData?.subjectCht} | |||
| @@ -202,18 +175,18 @@ const ApplicationDetailCard = ({ | |||
| </Grid> | |||
| <Grid container direction="row" justifyContent="space-between" | |||
| alignItems="center"> | |||
| <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{ mb: 1 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| <Grid item xs={12} md={1.5} lg={1.5} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Subject (Chs):</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <Grid item xs={12} md={10.5} lg={10.5}> | |||
| <DisplayField | |||
| name="subjectChs" | |||
| value={formData?.subjectChs} | |||
| rows={2} | |||
| rows={1} | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -236,18 +209,18 @@ const ApplicationDetailCard = ({ | |||
| </Grid> | |||
| <Grid container direction="row" justifyContent="space-between" | |||
| alignItems="center"> | |||
| <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{ mb: 1 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| <Grid item xs={12} md={1.5} lg={1.5} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Subject (Eng):</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <Grid item xs={12} md={10.5} lg={10.5}> | |||
| <DisplayField | |||
| name="subjectEng" | |||
| value={formData?.subjectEng} | |||
| rows={2} | |||
| rows={1} | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -273,33 +246,25 @@ const ApplicationDetailCard = ({ | |||
| {/*bottom button*/} | |||
| <Grid item s={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"end"} justifyContent="center"> | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| color="error" | |||
| color="delete" | |||
| variant="contained" | |||
| onClick={handleDelete} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Delete</Typography> | |||
| Delete | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Save</Typography> | |||
| Save | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -129,7 +129,7 @@ const Index = () => { | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12} width="100%"> | |||
| <Button title="Back" sx={{ ml: 6, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/emailTemplate") }}> | |||
| <Button title="Back" sx={{ ml: 6, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }}> | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| @@ -87,11 +87,7 @@ export default function EmailTemplateTable({ recordList }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| @@ -25,6 +25,8 @@ const BackgroundHead = { | |||
| backgroundPosition: 'right' | |||
| } | |||
| import { useNavigate } from "react-router"; | |||
| import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -56,7 +58,7 @@ const Index = () => { | |||
| <LoadingComponent /> | |||
| : | |||
| ( | |||
| <Grid container sx={{ minHeight: '110vh', backgroundColor: 'backgroundColor.default' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid item xs={12} width="100%"> | |||
| <div style={BackgroundHead} width="100%"> | |||
| <Stack direction="row" height='70px'> | |||
| @@ -78,18 +80,18 @@ const Index = () => { | |||
| <Grid container direction="row" | |||
| justifyContent="space-between" | |||
| alignItems="center"> | |||
| <Grid item xs={3} md={3} sx={{ ml: 3, mr: 1, mb: 3, mt: 3 }}> | |||
| <Grid item xs={3} md={3} sx={{ mb:3, ml: 3, mr: 1 }}> | |||
| <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={()=>{navigate('/emailTemplate/-1')}} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <AddCircleOutlineIcon sx={{ mb: 0.5 }} /> | |||
| <Typography sx={{ ml: 1 }} variant="h5">New Email Template</Typography> | |||
| startIcon={<AddCircleOutlineIcon/>} | |||
| > | |||
| New Email Template | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid > | |||
| @@ -69,18 +69,14 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| return ( | |||
| <div style={{ minHeight:400, width: '100%' }}> | |||
| <div style={{ width: '100%' }}> | |||
| <FiDataGrid | |||
| sx={_sx} | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={10} | |||
| onRowDoubleClick={handleEditClick} | |||
| /> | |||
| </div> | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| // Autocomplete, | |||
| Typography | |||
| @@ -10,6 +9,8 @@ import MainCard from "components/MainCard"; | |||
| import { useForm } from "react-hook-form"; | |||
| import * as React from "react"; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import {PNSPS_BUTTON_THEME} from "../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // import * as ComboData from "utils/ComboData"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -20,22 +21,6 @@ const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria }) => | |||
| const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
| // const [status, setStatus] = React.useState(ComboData.paymentStatus[0]); | |||
| const _sx = { | |||
| padding: "4 2 4 2", | |||
| boxShadow: 1, | |||
| border: 1, | |||
| borderColor: '#DDD', | |||
| '& .MuiDataGrid-cell': { | |||
| borderTop: 1, | |||
| borderBottom: 1, | |||
| borderColor: "#EEE" | |||
| }, | |||
| '& .MuiDataGrid-footerContainer': { | |||
| border: 1, | |||
| borderColor: "#EEE" | |||
| } | |||
| } | |||
| const { register, handleSubmit, getValues } = useForm() | |||
| const onSubmit = (data) => { | |||
| @@ -67,20 +52,19 @@ const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria }) => | |||
| <MainCard xs={12} md={12} lg={12} | |||
| border={false} | |||
| content={false} | |||
| sx={_sx} | |||
| > | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="h5">Credit Date</Typography> | |||
| <form onSubmit={handleSubmit(onSubmit)} > | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
| <Typography variant="h5" > | |||
| Credit Date | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| {/*row 2*/} | |||
| <Grid container alignItems="center"> | |||
| {/*row 2*/} | |||
| <Grid container display="flex" alignItems={"center"}> | |||
| <Grid item xs={9} s={6} md={4} lg={4} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| @@ -121,31 +105,26 @@ const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria }) => | |||
| </Grid> */} | |||
| </Grid> | |||
| <Grid container justifyContent="flex-end" direction="row" alignItems="center" spacing={3}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, }} > | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mb: 3, }} > | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Preview</Typography> | |||
| > | |||
| Preview | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, }} > | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={generateHandler} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Generate</Typography> | |||
| > | |||
| Generate | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| </MainCard> | |||
| @@ -42,7 +42,7 @@ const Index = () => { | |||
| }, [record]); | |||
| React.useEffect(() => { | |||
| console.log(searchCriteria) | |||
| // console.log(searchCriteria) | |||
| loadGrid(); | |||
| }, [searchCriteria]); | |||
| @@ -57,14 +57,14 @@ const Index = () => { | |||
| } | |||
| function downloadXML(input) { | |||
| console.log(input) | |||
| // console.log(input) | |||
| HttpUtils.get({ | |||
| url: UrlUtils.GEN_GFMIS_XML + "/today", | |||
| params:{dateTo: input.dateTo, | |||
| dateFrom: input.dateFrom, | |||
| }, | |||
| onSuccess: (responseData) => { | |||
| console.log(responseData) | |||
| // console.log(responseData) | |||
| const parser = new DOMParser(); | |||
| const xmlDoc = parser.parseFromString(responseData, 'application/xml'); | |||
| const filename = xmlDoc.querySelector('FileHeader').getAttribute('H_Filename'); | |||
| @@ -100,7 +100,7 @@ const Index = () => { | |||
| !onReady ? | |||
| <LoadingComponent/> | |||
| : | |||
| <Grid container sx={{minHeight: '85vh',backgroundColor:'#ffffff'}} direction="column"> | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default'}} direction="column"> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| @@ -109,7 +109,7 @@ const Index = () => { | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| generateXML={generateXML} | |||
| @@ -79,7 +79,7 @@ const Index = () => { | |||
| <Grid container justifyContent="flex-start" alignItems="center" > | |||
| <center> | |||
| <Grid item xs={12} md={12} sx={{p:2}} > | |||
| <Typography variant="h2" sx={{ textAlign: "left", borderBottom: "1px solid black" }}> | |||
| <Typography variant="h3" sx={{ textAlign: "left", borderBottom: "1px solid black" }}> | |||
| {record?.subject} | |||
| </Typography> | |||
| <Typography sx={{p:1}} align="justify">{DateUtils.datetimeStr(record?.sentDate)}</Typography> | |||
| @@ -87,7 +87,7 @@ const Index = () => { | |||
| <div dangerouslySetInnerHTML={{__html: record?.content}}></div> | |||
| </Typography> | |||
| <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | |||
| <Typography variant="h4" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | |||
| <Button | |||
| component="span" | |||
| variant="contained" | |||
| @@ -66,11 +66,7 @@ export default function MsgTable({ recordList }) { | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 20 }, | |||
| }, | |||
| }} | |||
| customPageSize={20} | |||
| onRowDoubleClick={handleEditClick} | |||
| /> | |||
| </div> | |||
| @@ -63,8 +63,8 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="h4"> | |||
| <FormattedMessage id="search"/> | |||
| <Typography variant="pnspsFormHeader"> | |||
| <FormattedMessage id="searchForm"/> | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| @@ -77,6 +77,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| fullWidth | |||
| {...register("keyword")} | |||
| id='keyword' | |||
| aria-label={intl.formatMessage({id: 'keyword'})} | |||
| label={intl.formatMessage({id: 'keyword'}) + ":"} | |||
| defaultValue={searchCriteria.code} | |||
| InputLabelProps={{ | |||
| @@ -93,6 +94,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| {...register("dateFrom")} | |||
| id="dateFrom" | |||
| type="date" | |||
| aria-label={intl.formatMessage({id: 'dateFrom'})} | |||
| label={intl.formatMessage({id: 'dateFrom'})} | |||
| defaultValue={searchCriteria.dateFrom} | |||
| InputProps={{ inputProps: { max: maxDate } }} | |||
| @@ -120,6 +122,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| onChange={(newValue) => { | |||
| setMaxDate(DateUtils.dateStr(newValue)); | |||
| }} | |||
| aria-label={intl.formatMessage({id: 'dateTo'})} | |||
| id="dateTo" | |||
| type="date" | |||
| //label="付款日期(到)" | |||
| @@ -138,7 +141,9 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| <Grid item sx={{mr: 3, mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={resetForm} | |||
| aria-label={intl.formatMessage({id: 'reset'})} | |||
| > | |||
| <FormattedMessage id="reset"/> | |||
| </Button> | |||
| @@ -148,6 +153,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| aria-label={intl.formatMessage({id: 'submit'})} | |||
| > | |||
| <FormattedMessage id="submit"/> | |||
| </Button> | |||
| @@ -69,7 +69,7 @@ const Index = () => { | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="paymentHistory"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -42,11 +42,7 @@ export default function CreditorHistoryTable({ recordList }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 100 }, | |||
| }, | |||
| }} | |||
| customPageSize={100} | |||
| /> | |||
| </div> | |||
| ); | |||
| @@ -4,20 +4,22 @@ import { | |||
| Dialog, DialogTitle, DialogContent, DialogActions, | |||
| } from '@mui/material'; | |||
| // import { FormControlLabel } from '@material-ui/core'; | |||
| import MainCard from "../../../components/MainCard"; | |||
| import MainCard from "components/MainCard"; | |||
| import * as React from "react"; | |||
| import { useFormik } from 'formik'; | |||
| import * as yup from 'yup'; | |||
| import { useEffect, useState } from "react"; | |||
| import * as HttpUtils from '../../../utils/HttpUtils'; | |||
| import * as UrlUtils from "../../../utils/ApiPathConst"; | |||
| import * as FieldUtils from "../../../utils/FieldUtils"; | |||
| import * as ComboData from "../../../utils/ComboData"; | |||
| import * as HttpUtils from 'utils/HttpUtils'; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as FieldUtils from "utils/FieldUtils"; | |||
| import * as ComboData from "utils/ComboData"; | |||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| import { notifySaveSuccess } from 'utils/CommonFunction'; | |||
| import { useIntl } from "react-intl"; | |||
| import {PNSPS_BUTTON_THEME} from "themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -92,8 +94,8 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| faxNumber: vaule.faxNumber | |||
| }, | |||
| addressTemp: { | |||
| country: vaule.country, | |||
| district: vaule.district, | |||
| country: vaule.country.id, | |||
| district: vaule.district.id, | |||
| addressLine1: vaule.addressLine1, | |||
| addressLine2: vaule.addressLine2, | |||
| addressLine3: vaule.addressLine3, | |||
| @@ -170,97 +172,80 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <> | |||
| {createMode ? | |||
| <> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Create</Typography> | |||
| </Button> | |||
| </Grid> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| > | |||
| Create | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </> : | |||
| <> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={loadDataFun} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| color="cancel" | |||
| > | |||
| <Typography variant="h5">Reset & Back</Typography> | |||
| Reset & Back | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Save</Typography> | |||
| Save | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </> | |||
| } | |||
| </> | |||
| : | |||
| <> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={onEditClick} | |||
| > | |||
| <Typography variant="h5">Edit</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={onEditClick} | |||
| color="success" | |||
| > | |||
| Edit | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| { | |||
| currentUserData.creditor ? | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="error" | |||
| onClick={() => setNonCreditorConfirmPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Mark as Non-Creditor</Typography> | |||
| Mark as Non-Creditor | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| : | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="orange" | |||
| onClick={() => setCreditorConfirmPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Mark as Creditor</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| color="orange" | |||
| onClick={() => setCreditorConfirmPopUp(true)} | |||
| > | |||
| Mark as Creditor | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| } | |||
| </> | |||
| @@ -275,7 +260,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid container spacing={1}> | |||
| <Grid item xs={12}> | |||
| <Typography variant="h4" sx={{ mb: 2, mr: 3, borderBottom: "1px solid black" }}> | |||
| Organisation Details | |||
| Organization Details | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| @@ -400,7 +385,17 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| } | |||
| </form> | |||
| <div> | |||
| <Dialog open={creditorConfirmPopUp} onClose={() => setCreditorConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={creditorConfirmPopUp} | |||
| onClose={() => setCreditorConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Creditor?</Typography> | |||
| @@ -412,7 +407,17 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={nonCreditorConfirmPopUp} onClose={() => setNonCreditorConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={nonCreditorConfirmPopUp} | |||
| onClose={() => setNonCreditorConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Non-Creditor?</Typography> | |||
| @@ -1,23 +1,27 @@ | |||
| // material-ui | |||
| import { | |||
| Grid, Button, Checkbox, FormControlLabel, Typography, | |||
| Grid, Button, | |||
| // Checkbox, FormControlLabel, | |||
| Typography, | |||
| Dialog, DialogTitle, DialogContent, DialogActions, | |||
| } from '@mui/material'; | |||
| // import { FormControlLabel } from '@material-ui/core'; | |||
| import MainCard from "../../../components/MainCard"; | |||
| import MainCard from "components/MainCard"; | |||
| import * as React from "react"; | |||
| import { useFormik } from 'formik'; | |||
| import * as yup from 'yup'; | |||
| import { useEffect, useState } from "react"; | |||
| import * as HttpUtils from '../../../utils/HttpUtils'; | |||
| import * as UrlUtils from "../../../utils/ApiPathConst"; | |||
| import * as FieldUtils from "../../../utils/FieldUtils"; | |||
| import * as ComboData from "../../../utils/ComboData"; | |||
| import * as HttpUtils from 'utils/HttpUtils'; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as FieldUtils from "utils/FieldUtils"; | |||
| import * as ComboData from "utils/ComboData"; | |||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| import { notifySaveSuccess } from 'utils/CommonFunction'; | |||
| import {useIntl} from "react-intl"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| import {PNSPS_BUTTON_THEME} from "themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -48,52 +52,25 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| enableReinitialize: true, | |||
| initialValues: currentUserData, | |||
| validationSchema: yup.object().shape({ | |||
| enCompanyName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | |||
| chCompanyName: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))).nullable(), | |||
| addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
| addressLine2: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'noMoreThen255Words'}))), | |||
| addressLine3: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'noMoreThen255Words'}))), | |||
| fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))).nullable(), | |||
| tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | |||
| phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'requiredValidNumber'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireContactNumber'}))), | |||
| faxNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'require8Number'}))).nullable(), | |||
| brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))), | |||
| brNo: yup.string().required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertNumber'}))).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInValidBusinessRegCertNumber'}))), function (value) { | |||
| var brNo_pattern = /[0-9]{8}/ | |||
| if (value !== undefined) { | |||
| if (value.match(brNo_pattern)) { | |||
| return true | |||
| } else { | |||
| return false | |||
| } | |||
| } | |||
| }), | |||
| }), | |||
| onSubmit: vaule => { | |||
| console.log(vaule) | |||
| HttpUtils.post({ | |||
| url: UrlUtils.POST_ORG_SAVE_PATH, | |||
| url: UrlUtils.POST_PUB_ORG_SAVE_PATH, | |||
| params: { | |||
| id: id > 0 ? id : null, | |||
| enCompanyName: vaule.enCompanyName, | |||
| chCompanyName: vaule.chCompanyName, | |||
| brNo: vaule.brNo, | |||
| brExpiryDate: vaule.brExpiryDate, | |||
| enCompanyNameTemp: vaule.enCompanyNameTemp, | |||
| chCompanyNameTemp: vaule.chCompanyNameTemp, | |||
| brExpiryDateTemp: vaule.brExpiryDateTemp, | |||
| contactPerson: vaule.contactPerson, | |||
| contactTel: { | |||
| countryCode: vaule.tel_countryCode, | |||
| phoneNumber: vaule.phoneNumber | |||
| }, | |||
| faxNo: { | |||
| countryCode: vaule.fax_countryCode, | |||
| faxNumber: vaule.faxNumber | |||
| }, | |||
| addressTemp: { | |||
| country: vaule.country, | |||
| district: vaule.district, | |||
| country: vaule.country.id, | |||
| district: vaule.district.id, | |||
| addressLine1: vaule.addressLine1, | |||
| addressLine2: vaule.addressLine2, | |||
| addressLine3: vaule.addressLine3, | |||
| @@ -134,26 +111,6 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| setEditMode(true); | |||
| }; | |||
| const markAsCreditor = () => { | |||
| setCreditorConfirmPopUp(false); | |||
| HttpUtils.get({ | |||
| url: UrlUtils.GET_ORG_MARK_AS_CREDITOR + "/" + id, | |||
| onSuccess: () => { | |||
| loadDataFun(); | |||
| } | |||
| }); | |||
| } | |||
| const markAsNonCreditor = () => { | |||
| setNonCreditorConfirmPopUp(false); | |||
| HttpUtils.get({ | |||
| url: UrlUtils.GET_ORG_MARK_AS_NON_CREDITOR + "/" + id, | |||
| onSuccess: () => { | |||
| loadDataFun(); | |||
| } | |||
| }); | |||
| } | |||
| return ( | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| @@ -171,46 +128,39 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| {createMode ? | |||
| <> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Create</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| > | |||
| <FormattedMessage id="create" /> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> : | |||
| <> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={loadDataFun} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Reset & Back</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={loadDataFun} | |||
| > | |||
| <FormattedMessage id="resetAndBack" /> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Save</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| > | |||
| <FormattedMessage id="save" /> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -218,45 +168,15 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| : | |||
| <> | |||
| <Grid item sx={{ ml: 0, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={onEditClick} | |||
| > | |||
| <Typography variant="h5">Edit</Typography> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="orange" | |||
| onClick={()=>setCreditorConfirmPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Mark as Creditor</Typography> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="error" | |||
| onClick={()=>setNonCreditorConfirmPopUp(true)} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Mark as Non-Creditor</Typography> | |||
| </Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={onEditClick} | |||
| color="success" | |||
| > | |||
| < FormattedMessage id="edit" /> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -270,20 +190,25 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid container spacing={1}> | |||
| <Grid item xs={12}> | |||
| <Typography variant="h4" sx={{ mb: 2, mr: 3, borderBottom: "1px solid black" }}> | |||
| Organisation Details | |||
| <FormattedMessage id="organizationDetails" /> | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getTextField({ | |||
| label: FieldUtils.notNullFieldLabel("BR No.:"), | |||
| label: intl.formatMessage({id: 'brNo'}) + ":", | |||
| valueName: "brNo", | |||
| disabled: (!editMode && !createMode), | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| <FormControlLabel | |||
| {FieldUtils.getTextField({ | |||
| label: intl.formatMessage({id: 'creditorAccount'}) + ":", | |||
| valueName: "creditor", | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| {/* <FormControlLabel | |||
| control={<Checkbox checked={formik.values.creditor} />} | |||
| label="is Creditor" | |||
| name="creditor" | |||
| @@ -292,41 +217,41 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| }} | |||
| disabled={true} | |||
| //disabled={!editMode && !createMode} | |||
| /> | |||
| /> */} | |||
| </Grid> | |||
| <Grid item lg={4} ></Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getTextField({ | |||
| label: FieldUtils.notNullFieldLabel("Name (Eng):"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'nameEng'}) + ":"), | |||
| valueName: "enCompanyName", | |||
| disabled: (!editMode && !createMode), | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getTextField({ | |||
| label: "Name (Ch):", | |||
| label: intl.formatMessage({id: 'nameChi'}) + ":", | |||
| valueName: "chCompanyName", | |||
| disabled: (!editMode && !createMode), | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getDateField({ | |||
| label: FieldUtils.notNullFieldLabel("Expiry Date:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'expiryDate'}) + ":"), | |||
| valueName: "brExpiryDate", | |||
| disabled: (!editMode && !createMode), | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getTextField({ | |||
| label: FieldUtils.notNullFieldLabel("Contact Person:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'contactPerson'}) + ":"), | |||
| valueName: "contactPerson", | |||
| disabled: (!editMode && !createMode), | |||
| form: formik | |||
| @@ -335,7 +260,7 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getPhoneField({ | |||
| label: FieldUtils.notNullFieldLabel("Contact Tel:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'userContactNumber'}) + ":"), | |||
| valueName: { | |||
| code: "tel_countryCode", | |||
| num: "phoneNumber" | |||
| @@ -347,19 +272,19 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getPhoneField({ | |||
| label: "Fax No:", | |||
| label: intl.formatMessage({id: 'contactFaxNumber'}) + ":", | |||
| valueName: { | |||
| code: "fax_countryCode", | |||
| num: "faxNumber" | |||
| }, | |||
| disabled: (!editMode && !createMode), | |||
| disabled: true, | |||
| form: formik | |||
| })} | |||
| </Grid> | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getComboField({ | |||
| label: FieldUtils.notNullFieldLabel("Country:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'country'}) + ":"), | |||
| valueName: "country", | |||
| disabled: (!editMode && !createMode), | |||
| dataList: ComboData.country, | |||
| @@ -370,7 +295,7 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getComboField({ | |||
| label: FieldUtils.notNullFieldLabel("District:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'district'}) + ":"), | |||
| valueName: "district", | |||
| disabled: (!editMode && !createMode), | |||
| dataList: ComboData.district, | |||
| @@ -382,7 +307,7 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| <Grid item lg={4} > | |||
| {FieldUtils.getAddressField({ | |||
| label: FieldUtils.notNullFieldLabel("Address:"), | |||
| label: FieldUtils.notNullFieldLabel(intl.formatMessage({id: 'formAddress'}) + ":"), | |||
| valueName: ["addressLine1", "addressLine2", "addressLine3"], | |||
| disabled: (!editMode && !createMode), | |||
| form: formik | |||
| @@ -395,7 +320,17 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| } | |||
| </form> | |||
| <div> | |||
| <Dialog open={creditorConfirmPopUp} onClose={() => setCreditorConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={creditorConfirmPopUp} | |||
| onClose={() => setCreditorConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Creditor?</Typography> | |||
| @@ -407,7 +342,17 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={nonCreditorConfirmPopUp} onClose={() => setNonCreditorConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={nonCreditorConfirmPopUp} | |||
| onClose={() => setNonCreditorConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Non-Creditor?</Typography> | |||
| @@ -32,6 +32,11 @@ const BackgroundHead = { | |||
| backgroundColor: '#0C489E', | |||
| backgroundPosition: 'right' | |||
| } | |||
| import { | |||
| FormattedMessage, | |||
| // FormattedMessage, | |||
| useIntl | |||
| } from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -43,9 +48,14 @@ const OrganizationDetailPage = () => { | |||
| const [isLoading, setLoding] = React.useState(true); | |||
| const [isEditMode, setEditMode] = React.useState(false); | |||
| const navigate = useNavigate(); | |||
| const intl = useIntl(); | |||
| const { locale } = intl; | |||
| const isCreditor = locale === 'en' ?"Yes":locale === 'zh-HK' ?"是":"是"; | |||
| const notCreditor = locale === 'en' ?"No":locale === 'zh-HK' ?"否":"否"; | |||
| React.useEffect(() => { | |||
| console.log(formData); | |||
| // console.log(formData); | |||
| if (isINDLoggedIn()||isORGLoggedIn()&&!isPrimaryLoggedIn()){ | |||
| navigate('/dashboard'); | |||
| }else{ | |||
| @@ -61,9 +71,9 @@ const OrganizationDetailPage = () => { | |||
| HttpUtils.get({ | |||
| url: UrlUtils.GET_ORG_PATH + "/" + params.id, | |||
| onSuccess: function (response) { | |||
| console.log(response) | |||
| response.data["country"] = getObjectByValue(ComboData.country, "key", response.data.address?.country); | |||
| response.data["district"] = getObjectByValue(ComboData.district, "key", response.data.address?.district); | |||
| // console.log(response) | |||
| response.data["country"] = getObjectByValue(ComboData.country, "key", response.data.addressTemp?.country); | |||
| response.data["district"] = getObjectByValue(ComboData.district, "key", response.data.addressTemp?.district); | |||
| response.data["addressLine1"] = response.data.addressTemp?.addressLine1; | |||
| response.data["addressLine2"] = response.data.addressTemp?.addressLine2; | |||
| response.data["addressLine3"] = response.data.addressTemp?.addressLine3; | |||
| @@ -85,9 +95,10 @@ const OrganizationDetailPage = () => { | |||
| HttpUtils.get({ | |||
| url: UrlUtils.GET_PUB_ORG_PATH, | |||
| onSuccess: function (response) { | |||
| console.log(response) | |||
| response.data["country"] = getObjectByValue(ComboData.country, "key", response.data.address?.country); | |||
| response.data["district"] = getObjectByValue(ComboData.district, "key", response.data.address?.district); | |||
| // console.log(response) | |||
| response.data["creditor"] = response.data.creditor!=null?response.data.creditor?isCreditor:notCreditor:notCreditor; | |||
| response.data["country"] = getObjectByValue(ComboData.country, "key", response.data.addressTemp?.country); | |||
| response.data["district"] = getObjectByValue(ComboData.district, "key", response.data.addressTemp?.district); | |||
| response.data["addressLine1"] = response.data.addressTemp?.addressLine1; | |||
| response.data["addressLine2"] = response.data.addressTemp?.addressLine2; | |||
| response.data["addressLine3"] = response.data.addressTemp?.addressLine3; | |||
| @@ -115,16 +126,24 @@ const OrganizationDetailPage = () => { | |||
| isLoading ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ backgroundColor: "backgroundColor.default" }}> | |||
| <Grid container direction="column" sx={{minHeight: '90vh',backgroundColor:isGLDLoggedIn()?'backgroundColor.default':'#ffffff' }}> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">Maintain Organisation</Typography> | |||
| {isGLDLoggedIn()? | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| Maintain Organization | |||
| </Typography> | |||
| : | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="organizationProfile" /> | |||
| </Typography> | |||
| } | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12}> | |||
| <Button title="Back" sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/org") }}> | |||
| <Button aria-label={intl.formatMessage({id: 'back'})} title="Back" sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1)}}> | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| @@ -133,7 +152,7 @@ const OrganizationDetailPage = () => { | |||
| <Grid container> | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Box xs={12} ml={0} mt={-1} mr={0} sx={{ p: 1, borderRadius: '10px' }}> | |||
| {isGLDLoggedIn? | |||
| {isGLDLoggedIn()? | |||
| <InfoCard | |||
| userData={formData} | |||
| loadDataFun={loadData} | |||
| @@ -256,7 +256,17 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
| </div> | |||
| <div> | |||
| <Dialog open={isFailPopUp} onClose={() => setIsFailPopUp(false)} > | |||
| <Dialog | |||
| open={isFailPopUp} | |||
| onClose={() => setIsFailPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Action Fail</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{failText}</Typography> | |||
| @@ -24,7 +24,7 @@ const OrganizationDetailPage_FromUser = () => { | |||
| useEffect(()=>{ | |||
| console.log(formData); | |||
| // console.log(formData); | |||
| loadData(); | |||
| },[]); | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| Typography, | |||
| Autocomplete, | |||
| @@ -15,6 +14,8 @@ import * as React from "react"; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as HttpUtils from "utils/HttpUtils"; | |||
| import * as ComboData from "utils/ComboData"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -62,119 +63,109 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center"> | |||
| <Typography variant="h4">Search Form</Typography> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
| <Typography variant="pnspsFormHeader" > | |||
| Search Form | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| {/*row 2*/} | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("brNo")} | |||
| id='brNo' | |||
| label="BR No." | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("enCompanyName")} | |||
| id="enCompanyName" | |||
| label="Name (English)" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("chCompanyName")} | |||
| id="chCompanyName" | |||
| label="Name (Chinese)" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3}}> | |||
| <Autocomplete | |||
| {...register("searchCreditor")} | |||
| id="searchCreditor" | |||
| size="small" | |||
| options={ComboData.CreditorStatus} | |||
| value={creditorSelected} | |||
| onChange={(event, newValue) => { | |||
| setCreditorSelected(newValue); | |||
| {/*row 2*/} | |||
| <Grid container display="flex" alignItems={"center"}> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("brNo")} | |||
| id='brNo' | |||
| label="BR No." | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| getOptionLabel={(option) => option.label} | |||
| renderInput={(params) => ( | |||
| <TextField | |||
| {...params} | |||
| label="Status" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| )} | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("enCompanyName")} | |||
| id="enCompanyName" | |||
| label="Name (English)" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("chCompanyName")} | |||
| id="chCompanyName" | |||
| label="Name (Chinese)" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3}}> | |||
| <Autocomplete | |||
| {...register("searchCreditor")} | |||
| id="searchCreditor" | |||
| size="small" | |||
| options={ComboData.CreditorStatus} | |||
| value={creditorSelected} | |||
| onChange={(event, newValue) => { | |||
| setCreditorSelected(newValue); | |||
| }} | |||
| getOptionLabel={(option) => option.label} | |||
| renderInput={(params) => ( | |||
| <TextField | |||
| {...params} | |||
| label="Status" | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| /> | |||
| )} | |||
| /> | |||
| </Grid> | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={doExport} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Export</Typography> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Clear</Typography> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Submit</Typography> | |||
| </Button> | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{mr: 3, mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={doExport} | |||
| > | |||
| Export | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ mr: 3, mb: 3}}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| > | |||
| Clear | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ mb: 3}}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| > | |||
| Submit | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| </MainCard> | |||
| @@ -102,11 +102,7 @@ export default function OrganizationTable({ recordList }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| /> | |||
| </div> | |||
| @@ -76,7 +76,7 @@ const OrganizationSearchPage = () => { | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm applySearch={applySearch} /> | |||
| </Grid> | |||
| {/*row 2*/} | |||
| @@ -69,11 +69,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| rowHeight={150} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| <Typography align="right" variant= "h3">Total Amount: <span style={{ color: "blue", fontWeight: "bold", }}> HK$ {FormatUtils.currencyFormat(total)}</span></Typography> | |||
| @@ -79,11 +79,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| rowHeight={150} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| <Typography align="right" variant="h4" sx={{mr:2}}> | |||
| <FormattedMessage id="payTotal"/>: | |||
| @@ -4,7 +4,7 @@ import { | |||
| Typography, | |||
| Stack, | |||
| Box, | |||
| // Button | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import * as React from "react"; | |||
| @@ -17,8 +17,9 @@ import Loadable from 'components/Loadable'; | |||
| const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||
| const PaymentDetails = Loadable(React.lazy(() => import('./PaymentDetails'))); | |||
| const DataGrid = Loadable(React.lazy(() => import('./DataGrid'))); | |||
| import ForwardIcon from '@mui/icons-material/Forward'; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| import {FormattedMessage} from "react-intl"; | |||
| import {FormattedMessage,useIntl} from "react-intl"; | |||
| const BackgroundHead = { | |||
| backgroundImage: `url(${titleBackgroundImg})`, | |||
| width: '100%', | |||
| @@ -34,6 +35,7 @@ const BackgroundHead = { | |||
| const Index = () => { | |||
| const params = useParams(); | |||
| const navigate = useNavigate() | |||
| const intl = useIntl(); | |||
| const [record, setRecord] = React.useState(); | |||
| const [itemList, setItemList] = React.useState([]); | |||
| @@ -99,6 +101,15 @@ const Index = () => { | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12} width={{xs:"90%", sm:"90%", md:"90%", lg:"80%"}}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'back'})} | |||
| title={intl.formatMessage({id: 'back'})} | |||
| sx={{ ml: 0, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }} | |||
| > | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} spacing={2} sx={{ textAlign: "center" }}> | |||
| <Grid container justifyContent="center" direction="column" spacing={2} sx={{ p: 2 }} alignitems="stretch" > | |||
| @@ -89,7 +89,7 @@ const MultiPaymentWindow = (props) => { | |||
| // }, [availableMethodData]); | |||
| useEffect(() => { | |||
| console.log(paymentMethod) | |||
| // console.log(paymentMethod) | |||
| // const subtype = (paymentMethod === "Visa" || paymentMethod === "MasterCard" || paymentMethod === "JCB" || paymentMethod === "UnionPay") ? "CreditCard" : paymentMethod; | |||
| // const filteredPaymentMethod = availableMethodData.filter(obj => obj.subtype === subtype); | |||
| const filteredPaymentMethod = availableMethodData.filter(obj => { | |||
| @@ -98,7 +98,7 @@ const MultiPaymentWindow = (props) => { | |||
| } | |||
| return obj.subtype === paymentMethod; | |||
| }); | |||
| console.log(filteredPaymentMethod) | |||
| // console.log(filteredPaymentMethod) | |||
| setFilteredPaymentMethod(filteredPaymentMethod); | |||
| setFpsClass(paymentMethod == "FPS" || paymentMethod == "" ? "" : "grayscale") | |||
| @@ -237,12 +237,12 @@ const MultiPaymentWindow = (props) => { | |||
| <Grid item xs={12} md={12}> | |||
| <Grid container > | |||
| <Grid item> | |||
| <Typography sx={{fontSize: "20px", color: "#000000", textAlign: "left" }}> | |||
| <Typography variant="pnspsFormParagraphBold" sx={{ color: "#000000", textAlign: "left" }}> | |||
| <FormattedMessage id="payTotal"/>(HK$): | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item> | |||
| <Typography sx={{fontSize: "20px", color: "#000000", textAlign: "left" }}> | |||
| <Typography variant="pnspsFormParagraphBold" sx={{color: "#000000", textAlign: "left" }}> | |||
| {" HK$ " + FormatUtils.currencyFormat(props.totalAmount)} | |||
| </Typography> | |||
| </Grid> | |||
| @@ -87,18 +87,13 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| ]; | |||
| return ( | |||
| <div style={{ minHeight:400, width: '100%' }}> | |||
| <div style={{ width: '100%' }}> | |||
| <FiDataGrid | |||
| sx={_sx} | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| onRowDoubleClick={handleEditClick} | |||
| /> | |||
| </div> | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| Autocomplete, | |||
| Typography | |||
| @@ -11,6 +10,8 @@ import { useForm } from "react-hook-form"; | |||
| import * as React from "react"; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as ComboData from "utils/ComboData"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -20,22 +21,6 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
| const [status, setStatus] = React.useState(ComboData.paymentStatus[0]); | |||
| const _sx = { | |||
| padding: "4 2 4 2", | |||
| boxShadow: 1, | |||
| border: 1, | |||
| borderColor: '#DDD', | |||
| '& .MuiDataGrid-cell': { | |||
| borderTop: 1, | |||
| borderBottom: 1, | |||
| borderColor: "#EEE" | |||
| }, | |||
| '& .MuiDataGrid-footerContainer': { | |||
| border: 1, | |||
| borderColor: "#EEE" | |||
| } | |||
| } | |||
| const { reset, register, handleSubmit } = useForm() | |||
| const onSubmit = (data) => { | |||
| @@ -58,20 +43,19 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| <MainCard xs={12} md={12} lg={12} | |||
| border={false} | |||
| content={false} | |||
| sx={_sx} | |||
| > | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="h4">Search</Typography> | |||
| <form onSubmit={handleSubmit(onSubmit)} > | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
| <Typography variant="pnspsFormHeader" > | |||
| Search Form | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| {/*row 2*/} | |||
| <Grid container alignItems={"center"}> | |||
| {/*row 2*/} | |||
| <Grid container display="flex" alignItems={"center"}> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <TextField | |||
| fullWidth | |||
| @@ -138,6 +122,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| <Autocomplete | |||
| {...register("status")} | |||
| disablePortal={false} | |||
| size="small" | |||
| id="status" | |||
| filterOptions={(options) => options} | |||
| options={ComboData.paymentStatus} | |||
| @@ -159,39 +144,32 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| }} | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mb: 3}}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={resetForm} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Reset</Typography> | |||
| > | |||
| Reset | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Submit</Typography> | |||
| > | |||
| Submit | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </form> | |||
| </MainCard> | |||
| @@ -64,16 +64,18 @@ const Index = () => { | |||
| !onReady ? | |||
| <LoadingComponent/> | |||
| : | |||
| <Grid container sx={{minHeight: '85vh',backgroundColor:'#ffffff'}} direction="column"> | |||
| <Grid container sx={{backgroundColor: 'backgroundColor.default'}} direction="column"> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">Online Payment Record</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| Payment Record | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| searchCriteria={searchCriteria} | |||
| @@ -106,11 +106,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| onRowDoubleClick={handleEditClick} | |||
| /> | |||
| </div> | |||
| @@ -68,8 +68,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center" > | |||
| <Typography variant="h4"> | |||
| <FormattedMessage id="search"/> | |||
| <Typography variant="pnspsFormHeader"> | |||
| <FormattedMessage id="searchForm"/> | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| @@ -182,17 +182,20 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{mr: 3, mb: 3 }}> | |||
| <Button | |||
| color="cancel" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| aria-label={intl.formatMessage({id: 'reset'})} | |||
| > | |||
| <FormattedMessage id="reset"/> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Grid item sx={{mr: 3, mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| aria-label={intl.formatMessage({id: 'submit'})} | |||
| > | |||
| <FormattedMessage id="submit"/> | |||
| </Button> | |||
| @@ -69,7 +69,7 @@ const Index = () => { | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="paymentHistory"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -301,7 +301,7 @@ const Index = () => { | |||
| } | |||
| useEffect(() => { | |||
| console.log(availableMethods) | |||
| // console.log(availableMethods) | |||
| if (availableMethods.length > 0) { | |||
| availableMethods.forEach((method) => { | |||
| if (method.subtype === "FPS") { | |||
| @@ -433,7 +433,17 @@ const Index = () => { | |||
| </Grid> | |||
| {/*row 2*/} | |||
| <div> | |||
| <Dialog open={expiryDateErr} onClose={() => setExpiryDateErr(false)} > | |||
| <Dialog | |||
| open={expiryDateErr} | |||
| onClose={() => setExpiryDateErr(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle></DialogTitle> | |||
| <Typography variant="h2" style={{ padding: '16px' }}>行動失敗</Typography> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| @@ -428,7 +428,17 @@ const FormPanel = ({ formData }) => { | |||
| </form> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Warning</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| @@ -439,7 +449,17 @@ const FormPanel = ({ formData }) => { | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={wait} onClose={() => setWait(false)} > | |||
| <Dialog | |||
| open={wait} | |||
| onClose={() => setWait(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Calculating, please wait ...</Typography> | |||
| </DialogContent> | |||
| @@ -85,9 +85,9 @@ const Index = () => { | |||
| ( | |||
| <Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid item xs={12} width="100%"> | |||
| <div style={BackgroundHead} width="100%"> | |||
| <div style={BackgroundHead} width="100%" > | |||
| <Stack direction="row" height='70px'> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }, pt:2}}> | |||
| <FormattedMessage id="proofRecord"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -166,7 +166,7 @@ const Index = () => { | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Stack direction="column" justifyContent="space-between"> | |||
| <Typography variant="h4"> | |||
| <FormattedMessage id="totalAmount"/>(HK$): {FormatUtils.currencyFormat(fee)} | |||
| <FormattedMessage id="totalAmount"/> (HK$): {FormatUtils.currencyFormat(fee)} | |||
| </Typography> | |||
| </Stack> | |||
| </DialogContent> | |||
| @@ -65,9 +65,9 @@ const Index = () => { | |||
| ( | |||
| <Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid item xs={12} width="100%"> | |||
| <div style={BackgroundHead} width="100%"> | |||
| <Stack direction="row" height='70px'> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}> | |||
| <div style={BackgroundHead} width="100%" > | |||
| <Stack direction="row" height='70px' > | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }, pt:2}} > | |||
| <FormattedMessage id="proofRecord"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -294,7 +294,10 @@ const ApplicationDetailCard = ({ | |||
| </Grid> | |||
| </Grid> | |||
| <div> | |||
| <Dialog open={cancelPopUp} onClose={() => setCancelPopUp(false)} > | |||
| <Dialog | |||
| open={cancelPopUp} | |||
| onClose={() => setCancelPopUp(false)} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>Are you sure you want to cancel this proof?</Typography> | |||
| @@ -119,7 +119,9 @@ const Index = () => { | |||
| <Grid item xs={12} width="100%"> | |||
| <div style={BackgroundHead} width="100%"> | |||
| <Stack direction="row" height='70px'> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>Proof Record</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | |||
| Proof Record | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| @@ -79,7 +79,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applicationId"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -93,7 +93,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"left"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applyStatus"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -112,7 +112,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applyPerson"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -132,7 +132,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="gazetteCount"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -149,7 +149,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="contactPerson"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -164,7 +164,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applicationPublishDate" />: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -181,7 +181,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid container alignItems="left"> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="myRemarks"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -205,7 +205,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| <Grid item xs={12} sm={12} md={6} lg={6} sx={{mb: 1}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} sm={12} md={12} lg={12} sx={{ alignItems: 'center',wordBreak: 'break-word' }}> | |||
| <Typography><Typography variant="h5"> | |||
| <Typography><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="pleaseCheckReminder" />: | |||
| </Typography></Typography> | |||
| </Grid> | |||
| @@ -248,7 +248,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| </Grid> | |||
| <Grid item xs={12} sm={3} md={3} lg={3} | |||
| sx={{ mb: 1, display: 'flex', alignItems: 'center' }}> | |||
| <Typography variant="h5"> | |||
| <Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="payFeeFor"/>: | |||
| </Typography> | |||
| </Grid> | |||
| @@ -259,9 +259,9 @@ const ApplicationDetailCard = ({ formData, }) => { | |||
| { | |||
| formik.values.groupType === "Private Bill" | |||
| ? | |||
| <Typography variant="h5">( {data.noOfPages} {intl.formatMessage({id: 'page'})} x $6,552 )</Typography> | |||
| <Typography variant="pnspsFormParagraph">( {data.noOfPages} {intl.formatMessage({id: 'page'})} x $6,552 )</Typography> | |||
| : | |||
| <Typography variant="h5">( {data.length} cm x {data.colCount === 2 ? "$364 二格位" : "$182 一格位"} )</Typography> | |||
| <Typography variant="pnspsFormParagraph">( {data.length} cm x {data.colCount === 2 ? "$364 二格位" : "$182 一格位"} )</Typography> | |||
| } | |||
| </Grid> | |||
| </Grid> | |||
| @@ -251,6 +251,7 @@ const FormPanel = ({ formData }) => { | |||
| color="save" | |||
| component="span" | |||
| variant="contained" | |||
| aria-label={intl.formatMessage({id: 'upload'})} | |||
| disabled={attachments.length >= (formik.values.groupType === "Private Bill" ? 2 : 1)} | |||
| > | |||
| <FormattedMessage id="upload" /> | |||
| @@ -303,6 +304,7 @@ const FormPanel = ({ formData }) => { | |||
| variant="contained" | |||
| color="success" | |||
| type="submit" | |||
| aria-label={intl.formatMessage({id: 'submitReply'})} | |||
| > | |||
| <FormattedMessage id="submitReply" /> | |||
| </Button> | |||
| @@ -320,7 +322,17 @@ const FormPanel = ({ formData }) => { | |||
| </form> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle> | |||
| <FormattedMessage id="attention"/> | |||
| </DialogTitle> | |||
| @@ -328,7 +340,12 @@ const FormPanel = ({ formData }) => { | |||
| <Typography variant="h3" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setIsWarningPopUp(false)}>OK</Button> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'ok'})} | |||
| onClick={() => setIsWarningPopUp(false)} | |||
| > | |||
| OK | |||
| </Button> | |||
| </DialogActions> | |||
| </Dialog> | |||
| </div> | |||
| @@ -84,18 +84,22 @@ const Index = () => { | |||
| <LoadingComponent /> | |||
| : | |||
| ( | |||
| <Grid container sx={{ width: '100%', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid container sx={{ width: '100%', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||
| <Grid item xs={12} width="100%"> | |||
| <div style={BackgroundHead} width="100%"> | |||
| <Stack direction="row" height='70px'> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }, pt:2}}> | |||
| <FormattedMessage id="proofRecord"/> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12} width="100%"> | |||
| <Button title={intl.formatMessage({id: 'back'})} sx={{ mt: 2.5, ml: 3 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/proof/search") }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'back'})} | |||
| title={intl.formatMessage({id: 'back'})} | |||
| sx={{ mt: 2.5, ml: 3 }} style={{ border: '2px solid' }} | |||
| variant="outlined" onClick={() => { navigate("/proof/search") }}> | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| @@ -2,7 +2,6 @@ | |||
| import * as React from 'react'; | |||
| import { | |||
| Button, | |||
| Box | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as FormatUtils from "utils/FormatUtils" | |||
| @@ -130,21 +129,14 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| } | |||
| return ( | |||
| <div style={{ height: '100%', width: '100%' }}> | |||
| <Box sx={{ backgroundColor: "#fff", ml: 2 }} width="98%"> | |||
| <FiDataGrid | |||
| rowHeight={80} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| </Box> | |||
| <div style={{ width: '100%' }}> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| customPageSize={10} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| </div> | |||
| ); | |||
| } | |||
| @@ -1,7 +1,6 @@ | |||
| // material-ui | |||
| import { | |||
| Button, | |||
| CardContent, | |||
| Grid, TextField, | |||
| Autocomplete | |||
| } from '@mui/material'; | |||
| @@ -12,6 +11,8 @@ import * as ComboData from "utils/ComboData"; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as FormatUtils from "utils/FormatUtils"; | |||
| import { Typography } from '../../../../node_modules/@mui/material/index'; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -91,14 +92,14 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| > | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2 }} width="98%"> | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1 }} width="98%"> | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center"> | |||
| <Typography variant="h5">Search Form</Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
| <Typography variant="pnspsFormHeader" > | |||
| Search Form | |||
| </Typography> | |||
| </Grid> | |||
| {/*row 2*/} | |||
| <Grid container alignItems={"center"}> | |||
| @@ -132,6 +133,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| <Autocomplete | |||
| {...register("issueId")} | |||
| disablePortal | |||
| size="small" | |||
| id="issueId" | |||
| options={issueCombo} | |||
| value={issueSelected} | |||
| @@ -155,6 +157,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| <Autocomplete | |||
| {...register("gazettGroup")} | |||
| disablePortal | |||
| size="small" | |||
| id="gazettGroup" | |||
| options={ComboData.groupTitle} | |||
| value={groupSelected} | |||
| @@ -229,6 +232,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| {...register("status")} | |||
| disablePortal | |||
| id="status" | |||
| size="small" | |||
| filterOptions={(options) => options} | |||
| options={ComboData.proofStatus} | |||
| value={status} | |||
| @@ -256,6 +260,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| {...register("orgId")} | |||
| disablePortal={false} | |||
| id="orgId" | |||
| size="small" | |||
| options={orgCombo} | |||
| value={orgSelected} | |||
| inputValue={(orgSelected?.label) ? orgSelected?.label : ""} | |||
| @@ -281,32 +286,25 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mb: 3, mt: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mb: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Clear</Typography> | |||
| > | |||
| Clear | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mb: 3, mt: 3 }}> | |||
| <Grid item sx={{ ml: 3, mb: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }}> | |||
| <Typography variant="h5">Submit</Typography> | |||
| > | |||
| Submit | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| @@ -92,7 +92,7 @@ const UserSearchPage_Individual = () => { | |||
| !onReady ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ minHeight: '85vh', backgroundColor: 'backgroundColor.default' }} direction="column" | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default' }} direction="column" | |||
| > | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| @@ -102,7 +102,7 @@ const UserSearchPage_Individual = () => { | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| orgComboData={orgCombo} | |||
| @@ -158,11 +158,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| sx={_sx} | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 10 }, | |||
| }, | |||
| }} | |||
| customPageSize={10} | |||
| getRowHeight={() => "auto"} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| /> | |||
| @@ -102,8 +102,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
| {/*row 1*/} | |||
| <CardContent sx={{ px: 2.5, pt: 3 }}> | |||
| <Grid item justifyContent="space-between" alignItems="center"> | |||
| <Typography variant="h4"> | |||
| <FormattedMessage id="search"/> | |||
| <Typography variant="pnspsFormHeader"> | |||
| <FormattedMessage id="searchForm"/> | |||
| </Typography> | |||
| </Grid> | |||
| </CardContent> | |||
| @@ -276,16 +276,19 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
| <Grid item sx={{ mr: 3, mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={resetForm} | |||
| aria-label={intl.formatMessage({id: 'reset'})} | |||
| > | |||
| <FormattedMessage id="reset"/> | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Grid item sx={{mr: 3, mb: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| aria-label={intl.formatMessage({id: 'submit'})} | |||
| > | |||
| <FormattedMessage id="submit"/> | |||
| </Button> | |||
| @@ -82,9 +82,9 @@ const UserSearchPage_Individual = () => { | |||
| : | |||
| <Grid container sx={{minHeight: '85vh',backgroundColor:'#ffffff'}} direction="column"> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <div style={BackgroundHead} > | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center" > | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="proofRecord"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -132,19 +132,23 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <Grid item xs={12} md={12} width="100%" > | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="applyPublicNotice"/> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12} width={{xs:"90%", sm:"90%", md:"60%", lg:"60%"}}> | |||
| <Button title={intl.formatMessage({id: 'back'})} sx={{ ml: 0, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'back'})} | |||
| title={intl.formatMessage({id: 'back'})} | |||
| sx={{ ml: 0, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }} | |||
| > | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| {/* <Grid item xs={12}> | |||
| <Typography variant="h5">申請公共啟事</Typography> | |||
| <Typography variant="pnspsFormParagraphBold">申請公共啟事</Typography> | |||
| </Grid> */} | |||
| <Grid item xs={12} md={12} width={{ md: "60%", xs: "90%" }}> | |||
| <Box xs={12} mt={1} sx={{ p: 2, border: '3px groove grey', borderRadius: '10px' }}> | |||
| @@ -184,13 +188,13 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <Typography variant="h5"> | |||
| <Typography variant="pnspsFormParagraphBold"> | |||
| <FormattedMessage id="targetVol" />: | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={6}> | |||
| <RadioGroup | |||
| aria-labelledby="demo-radio-buttons-group-label" | |||
| aria-labelledby="radio-buttons-group-label" | |||
| id="issueId" | |||
| name="issueId" | |||
| defaultValue={issueId} | |||
| @@ -205,12 +209,11 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid container direction="row" justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <Typography variant="h5"> | |||
| <Typography variant="pnspsFormParagraphBold"> | |||
| <FormattedMessage id="draftFile"/> ({intl.formatMessage({id: 'fileSizeWarning'})}): | |||
| </Typography> | |||
| </Grid> | |||
| @@ -227,15 +230,35 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| /> | |||
| {attachment.name} | |||
| </Grid> | |||
| <Grid item xs={12} md={3} lg={3}> | |||
| {/* <Grid item xs={12} md={3} lg={3}> | |||
| <label htmlFor="uploadFileBtn"> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'uploadFileBtn'})} | |||
| component="span" | |||
| variant="outlined" | |||
| size="large" | |||
| >{attachment ? intl.formatMessage({id: 'uploadFileBtn'}) : intl.formatMessage({id: 'reUpload'})}</Button> | |||
| </label> | |||
| </Grid> */} | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Grid container direction="row" justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| </Grid> | |||
| <Grid item xs={12} md={6} lg={6} > | |||
| <label htmlFor="uploadFileBtn"> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'uploadFileBtn'})} | |||
| component="span" | |||
| variant="outlined" | |||
| size="large" | |||
| >{attachment ? intl.formatMessage({id: 'uploadFileBtn'}) : intl.formatMessage({id: 'reUpload'})}</Button> | |||
| </label> | |||
| </Grid> | |||
| <Grid item xs={12} md={3} lg={3}> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| {isORGLoggedIn()? | |||
| @@ -260,6 +283,7 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <center> | |||
| <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'applyPublicNotice'})} | |||
| variant="contained" | |||
| type="submit" | |||
| > | |||
| @@ -273,7 +297,17 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| </Box> | |||
| </Grid> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle> | |||
| <FormattedMessage id="attention"/> | |||
| </DialogTitle> | |||
| @@ -281,7 +315,12 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <Typography variant="h3" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setIsWarningPopUp(false)}>OK</Button> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'ok'})} | |||
| onClick={() => setIsWarningPopUp(false)} | |||
| > | |||
| <FormattedMessage id="ok" /> | |||
| </Button> | |||
| </DialogActions> | |||
| </Dialog> | |||
| </div> | |||
| @@ -537,7 +537,17 @@ const ApplicationDetailCard = ( | |||
| </Grid> | |||
| </form> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Warning</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| @@ -262,7 +262,16 @@ const GazetteDetailCard = ( | |||
| </Grid> | |||
| </form> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }}> | |||
| <DialogTitle><Typography variant="h3">Warning</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| @@ -70,11 +70,7 @@ export default function SubmittedTab({ rows }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| </> | |||
| @@ -109,11 +109,7 @@ export default function ProofTab({rows}) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: {page: 0, pageSize: 5}, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| ); | |||
| @@ -52,11 +52,7 @@ export default function StatusHistoryTab({rows}) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: {page: 0, pageSize: 5}, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| ); | |||
| @@ -157,6 +157,7 @@ const ApplicationDetailCard = ( | |||
| || currentApplicationDetailData.status == "paid" | |||
| || currentApplicationDetailData.creditor} | |||
| startIcon={<EditNoteIcon />} | |||
| aria-label={intl.formatMessage({id: 'payFor'})} | |||
| > | |||
| <FormattedMessage id="payFor"/> | |||
| </Button> | |||
| @@ -169,6 +170,7 @@ const ApplicationDetailCard = ( | |||
| disabled={currentApplicationDetailData.status !== "submitted"} | |||
| title={intl.formatMessage({id: 'cancel'})} | |||
| startIcon={<CloseIcon />} | |||
| aria-label={intl.formatMessage({id: 'cancel'})} | |||
| > | |||
| <FormattedMessage id="cancel"/> | |||
| </Button> | |||
| @@ -188,7 +190,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applicationId"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -218,7 +220,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applyStatus"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -234,11 +236,11 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Stack direction="row" justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={12} md={7} lg={7}> | |||
| <FormLabel><Typography variant="h5">原因:</Typography></FormLabel> | |||
| <FormLabel><Typography variant="pnspsFormParagraph">原因:</Typography></FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={5} lg={5}> | |||
| <FormControl variant="outlined" fullWidth disabled> | |||
| <Typography id='reason' variant="h5"> | |||
| <Typography id='reason' variant="pnspsFormParagraph"> | |||
| {currentApplicationDetailData.reason} | |||
| </Typography> | |||
| </FormControl> | |||
| @@ -257,7 +259,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="applyPerson"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -304,7 +306,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="gazetteCount"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -338,7 +340,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="contactPerson"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -368,7 +370,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="publishDate"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -403,7 +405,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="userContactNumber"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -452,13 +454,13 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="currencyPrice"/>(HK$): | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <FormLabel><Typography variant="h5">{FormatUtils.currencyFormat(fee)}</Typography></FormLabel> | |||
| <FormLabel><Typography variant="pnspsFormParagraph">{FormatUtils.currencyFormat(fee)}</Typography></FormLabel> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -471,7 +473,7 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="userFaxNumber"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| @@ -522,34 +524,32 @@ const ApplicationDetailCard = ( | |||
| <Grid container direction="row"> | |||
| <Grid item xs={12} sm={12} md={2.5} lg={1.6} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="draftFile"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} sm={12} md={9} lg={9} > | |||
| <Grid container direction="row" alignItems="center" justifyContent="flex-start"> | |||
| <Grid item xs={12} sm={12} md={9} lg={9} sx={{ wordBreak: 'break-word' , }}> | |||
| <FormControl variant="outlined" fullWidth > | |||
| <Typography | |||
| fullWidth | |||
| id='fileName' | |||
| variant="h5" | |||
| > | |||
| {fileDetail.filename} | |||
| </Typography> | |||
| </FormControl> | |||
| </Grid> | |||
| <Grid item xs={12} sm={12} md={3} lg={3} > | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={onDownloadClick()} | |||
| title={intl.formatMessage({id: 'download'})} | |||
| color="save" | |||
| startIcon={<DownloadIcon sx={{alignItems:"center"}}/>} | |||
| <Grid item xs={12} sm={12} md={12} lg={12} sx={{ wordBreak: 'break-word' , }}> | |||
| <Typography | |||
| fullWidth | |||
| id='fileName' | |||
| variant="pnspsFormParagraph" | |||
| > | |||
| <FormattedMessage id="download"/> | |||
| </Button> | |||
| {fileDetail.filename} | |||
| </Typography> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| sx={{ml:3}} | |||
| variant="contained" | |||
| onClick={onDownloadClick()} | |||
| aria-label={intl.formatMessage({id: 'download'})} | |||
| title={intl.formatMessage({id: 'download'})} | |||
| color="save" | |||
| startIcon={<DownloadIcon sx={{alignItems:"center"}}/>} | |||
| > | |||
| <FormattedMessage id="download"/> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -564,10 +564,10 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5">Care Of:</Typography></FormLabel> | |||
| <FormLabel><Typography variant="pnspsFormParagraph">Care Of:</Typography></FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <Typography variant="h5">{currentApplicationDetailData.careOf}</Typography> | |||
| <Typography variant="pnspsFormParagraph">{currentApplicationDetailData.careOf}</Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> : null | |||
| @@ -576,12 +576,12 @@ const ApplicationDetailCard = ( | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={12} md={3} lg={3} | |||
| sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel><Typography variant="h5"> | |||
| <FormLabel><Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="extraMark"/>: | |||
| </Typography></FormLabel> | |||
| </Grid> | |||
| <Grid item xs={12} md={9} lg={9}> | |||
| <Typography variant="h5">{currentApplicationDetailData.remarks}</Typography> | |||
| <Typography variant="pnspsFormParagraph">{currentApplicationDetailData.remarks}</Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -607,22 +607,40 @@ const ApplicationDetailCard = ( | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Stack direction="column" justifyContent="space-between"> | |||
| <Typography variant="h4"> | |||
| <FormattedMessage id="totalAmount"/>(HK$): {FormatUtils.currencyFormat(fee)} | |||
| <FormattedMessage id="totalAmount"/> (HK$): {FormatUtils.currencyFormat(fee)} | |||
| </Typography> | |||
| </Stack> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setIsPopUp(false)}><Typography variant="h5"> | |||
| <Button | |||
| onClick={() => setIsPopUp(false)} | |||
| aria-label={intl.formatMessage({id: 'close'})} | |||
| > | |||
| <Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="close"/> | |||
| </Typography></Button> | |||
| <Button onClick={() => doPayment()}><Typography variant="h5"> | |||
| <Button | |||
| onClick={() => doPayment()} | |||
| aria-label={intl.formatMessage({id: 'confirm'})} | |||
| > | |||
| <Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="confirm"/> | |||
| </Typography></Button> | |||
| </DialogActions> | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={errorPopUp} onClose={() => setErrorPopUp(false)} > | |||
| <Dialog | |||
| open={errorPopUp} | |||
| onClose={() => setErrorPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle></DialogTitle> | |||
| <Typography variant="h2" style={{ padding: '16px' }}>行動失敗</Typography> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| @@ -633,8 +651,11 @@ const ApplicationDetailCard = ( | |||
| </Stack> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setErrorPopUp(false)}> | |||
| <Typography variant="h5"> | |||
| <Button | |||
| onClick={() => setErrorPopUp(false)} | |||
| aria-label={intl.formatMessage({id: 'close'})} | |||
| > | |||
| <Typography variant="pnspsFormParagraph"> | |||
| <FormattedMessage id="close"/> | |||
| </Typography></Button> | |||
| </DialogActions> | |||
| @@ -21,15 +21,16 @@ import * as yup from 'yup'; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import {FormattedMessage} from "react-intl"; | |||
| import {useIntl} from "react-intl"; | |||
| const StatusChangeDialog = (props) => { | |||
| const [status, setStatus] = useState(""); | |||
| const intl = useIntl(); | |||
| useEffect(() => { | |||
| console.log(Object.keys(!props.selectedGazetteGroup).length) | |||
| if(props.getStatus === "cancel"){ | |||
| setStatus("取消") | |||
| setStatus(intl.formatMessage({id: 'cancel'})) | |||
| } | |||
| }, [props.getStatus]); | |||
| @@ -60,8 +61,8 @@ const StatusChangeDialog = (props) => { | |||
| maxWidth={'xs'} | |||
| > | |||
| <DialogTitle > | |||
| <Typography variant="h4" color="error"> | |||
| {status}公共啟事 | |||
| <Typography variant="h4"> | |||
| {status} {intl.formatMessage({id: 'publicNotice'})} | |||
| </Typography> | |||
| </DialogTitle> | |||
| <FormikProvider value={formik}> | |||
| @@ -69,7 +70,8 @@ const StatusChangeDialog = (props) => { | |||
| <DialogContent> | |||
| <DialogContentText> | |||
| <FormLabel sx={{fontSize: "18px", color:"#000000",textAlign:"center"}}> | |||
| <Typography variant="h5">確定{status}公共啟事?</Typography> | |||
| <Typography variant="h5"> | |||
| {intl.formatMessage({id: 'confirmTo'})}{status} {intl.formatMessage({id: 'publicNotice'})}?</Typography> | |||
| </FormLabel> | |||
| </DialogContentText> | |||
| </DialogContent> | |||
| @@ -82,7 +84,7 @@ const StatusChangeDialog = (props) => { | |||
| variant="contained" | |||
| onClick={props.handleClose} | |||
| autoFocus | |||
| color="delete" | |||
| color="cancel" | |||
| > | |||
| <FormattedMessage id="cancel"/> | |||
| </Button> | |||
| @@ -154,7 +154,7 @@ const DashboardDefault = () => { | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="myPublicNotice"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -164,7 +164,12 @@ const DashboardDefault = () => { | |||
| <Grid container direction="column" justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={12} width="75%"> | |||
| <Stack direction="row"> | |||
| <Button title={intl.formatMessage({id: 'back'})} sx={{ ml: 0, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/publicNotice") }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'back'})} | |||
| title={intl.formatMessage({id: 'back'})} | |||
| sx={{ ml: 0, mt: 2.5 }} style={{ border: '2px solid' }} | |||
| variant="outlined" onClick={() => { navigate("/publicNotice") }} | |||
| > | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| <Typography ml={3} mt={3} variant="h4">{title}</Typography> | |||
| @@ -72,11 +72,7 @@ export default function SubmittedTab({ rows }) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 5 }, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| </> | |||
| @@ -80,11 +80,7 @@ export default function ProofTab({rows}) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: {page: 0, pageSize: 5}, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| ); | |||
| @@ -44,11 +44,7 @@ export default function StatusHistoryTab({rows}) { | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: {page: 0, pageSize: 5}, | |||
| }, | |||
| }} | |||
| customPageSize={5} | |||
| /> | |||
| </div> | |||
| ); | |||
| @@ -56,11 +56,15 @@ const PublicNotice = ({ proofList, paymentList }) => { | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider' }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example"> | |||
| <Tab label={ | |||
| <Tab | |||
| aria-label={intl.formatMessage({id: 'proofRecord'})} | |||
| label={ | |||
| intl.formatMessage({id: 'proofRecord'}) + "(" + _proofList.length + ") "} value="1" | |||
| /> | |||
| <Tab label={ intl.formatMessage({id: 'paymentHistory'}) +"(" + _paymentList.length + ") "} value="2" /> | |||
| <Tab | |||
| aria-label={intl.formatMessage({id: 'paymentHistory'})} | |||
| label={ intl.formatMessage({id: 'paymentHistory'}) +"(" + _paymentList.length + ") "} value="2" | |||
| /> | |||
| </TabList> | |||
| </Box> | |||
| <TabPanel value="1"> | |||
| @@ -80,13 +80,13 @@ export default function BaseGrid({rows}) { | |||
| renderCell: (params) => ( | |||
| isORGLoggedIn()? | |||
| <div> | |||
| <Typography>Care Of: {params.row.careOf}</Typography> | |||
| <Typography variant="pnspsNormalText">Care Of: {params.row.careOf}</Typography> | |||
| <Typography> | |||
| <FormattedMessage id="myRemarks"/>: {params.row.remarks} | |||
| <FormattedMessage variant="pnspsNormalText" id="myRemarks"/>: {params.row.remarks} | |||
| </Typography> | |||
| </div>: | |||
| <div> | |||
| <Typography>{params.row.remarks}</Typography> | |||
| <Typography variant="pnspsNormalText">{params.row.remarks}</Typography> | |||
| </div> | |||
| ) | |||
| }, | |||
| @@ -106,7 +106,7 @@ export default function BaseGrid({rows}) { | |||
| width: 160, | |||
| cellClassName: 'actions', | |||
| renderCell: (params) => { | |||
| return <Button onClick={handleDetailClick(params)}> | |||
| return <Button aria-label={intl.formatMessage({id: 'viewDetail'})} onClick={handleDetailClick(params)}> | |||
| <FormattedMessage id="viewDetail"/> | |||
| </Button>; | |||
| }, | |||
| @@ -118,15 +118,11 @@ export default function BaseGrid({rows}) { | |||
| } | |||
| return ( | |||
| <div style={{minHeight: 400, width: '100%', padding: 4}}> | |||
| <div style={{minHeight: 400, height:"100%", width: '100%', padding: 4}}> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: {page: 0, pageSize: 10}, | |||
| }, | |||
| }} | |||
| customPageSize={10} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| @@ -166,12 +166,12 @@ export default function SubmittedTab({ rows }) { | |||
| renderCell: (params) => ( | |||
| isORGLoggedIn() ? | |||
| <div> | |||
| <Typography>Care Of: {params.row.careOf}</Typography> | |||
| <Typography> | |||
| <Typography variant="pnspsNormalText">Care Of: {params.row.careOf}</Typography> | |||
| <Typography variant="pnspsNormalText"> | |||
| <FormattedMessage id="myRemarks"/>: {params.row.remarks}</Typography> | |||
| </div> : | |||
| <div> | |||
| <Typography>{params.row.remarks}</Typography> | |||
| <Typography variant="pnspsNormalText">{params.row.remarks}</Typography> | |||
| </div> | |||
| ) | |||
| }, | |||
| @@ -202,7 +202,7 @@ export default function SubmittedTab({ rows }) { | |||
| width: 150, | |||
| cellClassName: 'actions', | |||
| renderCell: (params) => { | |||
| return <Button onClick={handleDetailClick(params)}> | |||
| return <Button aria-label={intl.formatMessage({id: 'viewDetail'})} onClick={handleDetailClick(params)}> | |||
| <FormattedMessage id="viewDetail"/> | |||
| </Button>; | |||
| }, | |||
| @@ -230,7 +230,7 @@ export default function SubmittedTab({ rows }) { | |||
| totalAmount += datas[i].fee; | |||
| } | |||
| content.push(<Typography variant="h5"> | |||
| <FormattedMessage id="totalAmount"/>(HK$): {FormatUtils.currencyFormat(totalAmount)} | |||
| <FormattedMessage id="totalAmount"/> (HK$): {FormatUtils.currencyFormat(totalAmount)} | |||
| <br /><br /> | |||
| </Typography>); | |||
| //setAmount(totalAmount); | |||
| @@ -307,11 +307,7 @@ export default function SubmittedTab({ rows }) { | |||
| disableRowSelectionOnClick | |||
| rows={rowList} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 20 }, | |||
| }, | |||
| }} | |||
| customPageSize={20} | |||
| onRowSelectionModelChange={(newSelection) => { | |||
| setSelectedRowItems(newSelection); | |||
| }} | |||
| @@ -323,6 +319,7 @@ export default function SubmittedTab({ rows }) { | |||
| <Button | |||
| color="create" | |||
| variant="contained" | |||
| aria-label={intl.formatMessage({id: 'pay'})} | |||
| onClick={() => { handlePaymentBtn() }} | |||
| sx={{mt:2, ml:1}} | |||
| > | |||
| @@ -354,11 +351,13 @@ export default function SubmittedTab({ rows }) { | |||
| </Stack> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setIsPopUp(false)}> | |||
| <Button onClick={() => setIsPopUp(false)} aria-label={intl.formatMessage({id: 'close'})}> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="close"/> | |||
| </Typography></Button> | |||
| <Button onClick={() => doPayment()}><Typography variant="h5"> | |||
| <Button onClick={() => doPayment()} aria-label={intl.formatMessage({id: 'confirm'})}> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="confirm"/> | |||
| </Typography></Button> | |||
| </DialogActions> | |||
| @@ -366,7 +365,17 @@ export default function SubmittedTab({ rows }) { | |||
| </div> | |||
| <div> | |||
| <Dialog open={checkCareOf} onClose={() => setCheckCareOf(false)} > | |||
| <Dialog | |||
| open={checkCareOf} | |||
| onClose={() => setCheckCareOf(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle></DialogTitle> | |||
| <Typography variant="h2" style={{ padding: '16px' }}>Warning</Typography> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| @@ -377,11 +386,13 @@ export default function SubmittedTab({ rows }) { | |||
| </Stack> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setCheckCareOf(false)}> | |||
| <Button onClick={() => setCheckCareOf(false)} aria-label={intl.formatMessage({id: 'close'})}> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="close"/> | |||
| </Typography></Button> | |||
| <Button onClick={() => afterWarningPayment()}><Typography variant="h5"> | |||
| <Button onClick={() => afterWarningPayment()} aria-label={intl.formatMessage({id: 'confirm'})}> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="confirm"/> | |||
| </Typography></Button> | |||
| </DialogActions> | |||
| @@ -389,7 +400,17 @@ export default function SubmittedTab({ rows }) { | |||
| </div> | |||
| <div> | |||
| <Dialog open={expiryDateErr} onClose={() => setExpiryDateErr(false)} > | |||
| <Dialog | |||
| open={expiryDateErr} | |||
| onClose={() => setExpiryDateErr(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle></DialogTitle> | |||
| <Typography variant="h2" style={{ padding: '16px' }}>行動失敗</Typography> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| @@ -400,7 +421,7 @@ export default function SubmittedTab({ rows }) { | |||
| </Stack> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setExpiryDateErr(false)}> | |||
| <Button onClick={() => setExpiryDateErr(false)} aria-label={intl.formatMessage({id: 'close'})}> | |||
| <Typography variant="h5"> | |||
| <FormattedMessage id="close"/> | |||
| </Typography></Button> | |||
| @@ -64,8 +64,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| <form onSubmit={handleSubmit(onSubmit)}> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:marginBottom}}> | |||
| <Typography variant="pnspsFormTitle" > | |||
| <FormattedMessage id="search"/> | |||
| <Typography variant="pnspsFormHeader" > | |||
| <FormattedMessage id="searchForm"/> | |||
| </Typography> | |||
| </Grid> | |||
| {/*row 2*/} | |||
| @@ -75,6 +75,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| fullWidth | |||
| {...register("appNo")} | |||
| id='appNo' | |||
| aria-label={intl.formatMessage({id: 'applicationId'})} | |||
| label={intl.formatMessage({id: 'applicationId'})} | |||
| defaultValue={searchCriteria.appNo} | |||
| InputLabelProps={{ | |||
| @@ -89,6 +90,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| {...register("dateFrom")} | |||
| id="dateFrom" | |||
| type="date" | |||
| aria-label={intl.formatMessage({id: 'submitDateFrom'})} | |||
| label={intl.formatMessage({id: 'submitDateFrom'})} | |||
| defaultValue={searchCriteria.dateFrom} | |||
| InputProps={{ inputProps: { max: maxDate } }} | |||
| @@ -110,6 +112,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| {...register("dateTo")} | |||
| id="dateTo" | |||
| type="date" | |||
| aria-label={intl.formatMessage({id: 'submitDateTo'})} | |||
| label={intl.formatMessage({id: 'submitDateTo'})} | |||
| defaultValue={searchCriteria.dateTo} | |||
| InputProps={{ inputProps: { min: minDate } }} | |||
| @@ -125,6 +128,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| {...register("careOf")} | |||
| id="careOf" | |||
| label="Care Of" | |||
| aria-label={"Care Of"} | |||
| defaultValue={searchCriteria.careOf} | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| @@ -139,6 +143,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| {...register("contact")} | |||
| id="contact" | |||
| label={intl.formatMessage({id: 'contactPerson'})} | |||
| aria-label={intl.formatMessage({id: 'contactPerson'})} | |||
| defaultValue={searchCriteria.contact} | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| @@ -183,6 +188,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| renderInput={(params) => ( | |||
| <TextField {...params} | |||
| label={intl.formatMessage({id: 'status'})} | |||
| aria-label={intl.formatMessage({id: 'status'})} | |||
| InputLabelProps={{ | |||
| shrink: true | |||
| }} | |||
| @@ -211,7 +217,9 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={resetForm} | |||
| aria-label={intl.formatMessage({id: 'reset'})} | |||
| > | |||
| <Typography variant="pnspsButtonText"> | |||
| <FormattedMessage id="reset"/> | |||
| @@ -219,10 +227,11 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3}}> | |||
| <Grid item> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| aria-label={intl.formatMessage({id: 'search'})} | |||
| > | |||
| <Typography variant="pnspsButtonText"> | |||
| <FormattedMessage id="search"/> | |||
| @@ -45,7 +45,7 @@ const UserSearchPage_Individual = () => { | |||
| } | |||
| return ( | |||
| <Grid container> | |||
| <Grid container sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb:-3}}> | |||
| <SearchForm | |||
| @@ -58,11 +58,14 @@ const UserSearchPage_Individual = () => { | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| sx={{width: "-webkit-fill-available"}} | |||
| sx={{width: "-webkit-fill-available",height: "100%", minHeight:'100%'}} | |||
| > | |||
| <EventTable | |||
| recordList={record} | |||
| /> | |||
| <div style={{height: '100%', width: '100%' }}> | |||
| <EventTable | |||
| autoHeight | |||
| recordList={record} | |||
| /> | |||
| </div> | |||
| </MainCard> | |||
| </Grid> | |||
| @@ -83,13 +83,13 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| renderCell: (params) => ( | |||
| isORGLoggedIn()? | |||
| <div> | |||
| <Typography>Care Of: {params.row.careOf}</Typography> | |||
| <Typography> | |||
| <Typography variant="pnspsNormalText">Care Of: {params.row.careOf}</Typography> | |||
| <Typography variant="pnspsNormalText"> | |||
| <FormattedMessage id="myRemarks"/>: {params.row.remarks} | |||
| </Typography> | |||
| </div>: | |||
| <div> | |||
| <Typography>{params.row.remarks}</Typography> | |||
| <Typography variant="pnspsNormalText">{params.row.remarks}</Typography> | |||
| </div> | |||
| ) | |||
| }, | |||
| @@ -109,7 +109,9 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| width: 150, | |||
| cellClassName: 'actions', | |||
| renderCell: (params) => { | |||
| return <Button onClick={handleDetailClick(params)}> | |||
| return <Button onClick={handleDetailClick(params)} | |||
| aria-label={intl.formatMessage({id: 'viewDetail'})} | |||
| > | |||
| <FormattedMessage id="viewDetail"/> | |||
| </Button>; | |||
| }, | |||
| @@ -121,15 +123,11 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| } | |||
| return ( | |||
| <div style={{ minHeight: 400, width: '100%' }}> | |||
| <div style={{ minHeight: 400, height: "100%", width: '100%' }}> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 20 }, | |||
| }, | |||
| }} | |||
| customPageSize={20} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| getRowHeight={() => 'auto'} | |||
| /> | |||
| @@ -108,7 +108,7 @@ const PublicNotice = () => { | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||
| <FormattedMessage id="myPublicNotice"/> | |||
| </Typography> | |||
| </Stack> | |||
| @@ -118,7 +118,7 @@ const PublicNotice = () => { | |||
| <Stack direction="row" justifyContent="flex-end" alignItems="center"> | |||
| <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
| <Box sx={{ mr: { md: "47px" } }}> | |||
| <Button variant="contained" onClick={() => { onBtnClick() }}> | |||
| <Button aria-label={intl.formatMessage({id: 'applyPublicNotice'})} variant="contained" onClick={() => { onBtnClick() }}> | |||
| <FormattedMessage id="applyPublicNotice"/> | |||
| </Button> | |||
| </Box> | |||
| @@ -129,14 +129,14 @@ const PublicNotice = () => { | |||
| { | |||
| JSON.parse(localStorage.getItem('userData')).creditor ? ( | |||
| <Grid item xs={12} sm={12} md={12} lg={12} sx={{ minHeight: '75vh', maxWidth: '1%',width: "-webkit-fill-available", backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}> | |||
| <Grid item xs={12} sm={12} md={12} lg={12} sx={{ height:'100%', maxWidth: '100%',width: "-webkit-fill-available", backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}> | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto', }}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto', overflowY:'auto' }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example" sx={{ display: 'flex', flexDirection: 'row' }}> | |||
| <Tab label={intl.formatMessage({id: 'processing'}) + " (" + submittedList?.length + ")"} value="1" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList?.length + ")"} value="3" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList?.length + ")"} value="4" /> | |||
| <Tab label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'processing'})} label={intl.formatMessage({id: 'processing'}) + " (" + submittedList?.length + ")"} value="1" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'pendingPublish'})} label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList?.length + ")"} value="3" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'pendingPayment'})} label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList?.length + ")"} value="4" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'searchApplyRecord'})} label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| </TabList> | |||
| </Box> | |||
| <TabPanel value="1"> | |||
| @@ -166,14 +166,14 @@ const PublicNotice = () => { | |||
| </TabContext> | |||
| </Grid> | |||
| ) : ( | |||
| <Grid item xs={12} sx={{ minHeight: '75vh', maxWidth: '95%', width: "-webkit-fill-available", backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}> | |||
| <Grid item xs={12} sx={{ minHeight: '80vh',height:"100%", maxHeight:'300vh', maxWidth: '95%', width: "-webkit-fill-available", backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}> | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider' }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example"> | |||
| <Tab label={intl.formatMessage({id: 'processing'}) + " (" + submittedList.length + ")"} value="1" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList.length + ")"} value="3" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList.length + ")"} value="4" /> | |||
| <Tab label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'processing'})} label={intl.formatMessage({id: 'processing'}) + " (" + submittedList.length + ")"} value="1" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'pendingPayment'})} label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList.length + ")"} value="3" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'pendingPublish'})} label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList.length + ")"} value="4" /> | |||
| <Tab aria-label={intl.formatMessage({id: 'searchApplyRecord'})} label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| </TabList> | |||
| </Box> | |||
| <TabPanel value="1"> | |||
| @@ -1,8 +1,7 @@ | |||
| // material-ui | |||
| import * as React from 'react'; | |||
| import { | |||
| Button, | |||
| Box | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "utils/DateUtils"; | |||
| import * as FormatUtils from "utils/FormatUtils"; | |||
| @@ -111,20 +110,14 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
| } | |||
| return ( | |||
| <div style={{ height: '100%', width: '100%' }}> | |||
| <Box sx={{ backgroundColor: "#fff", ml: 2 }} width="98%"> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| initialState={{ | |||
| pagination: { | |||
| paginationModel: { page: 0, pageSize: 10 }, | |||
| }, | |||
| }} | |||
| getRowHeight={() => 'auto'} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| /> | |||
| </Box> | |||
| <div style={{width: '100%' }}> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| customPageSize={10} | |||
| getRowHeight={() => 'auto'} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| /> | |||
| </div> | |||
| ); | |||
| } | |||
| @@ -94,7 +94,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1, mb: marginBottom}} width="98%"> | |||
| {/*row 1*/} | |||
| <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:marginBottom}}> | |||
| <Typography variant="pnspsFormTitle" > | |||
| <Typography variant="pnspsFormHeader" > | |||
| Search Form | |||
| </Typography> | |||
| </Grid> | |||
| @@ -237,6 +237,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| disablePortal | |||
| id="orgId" | |||
| options={orgCombo} | |||
| size="small" | |||
| value={orgSelected} | |||
| inputValue={(orgSelected?.label) ? orgSelected?.label : ""} | |||
| onChange={(event, newValue) => { | |||
| @@ -261,8 +262,8 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| <Autocomplete | |||
| {...register("issueId")} | |||
| disablePortal | |||
| id="issueId" | |||
| size="small" | |||
| id="issueId" | |||
| options={issueCombo} | |||
| value={issueSelected} | |||
| inputValue={(issueSelected?.id) ? getIssueLabel(issueSelected) : ""} | |||
| @@ -300,7 +301,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| {/*last row*/} | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Grid item sx={{ ml: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={resetForm} | |||
| @@ -309,7 +310,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Grid item sx={{ ml: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| @@ -92,7 +92,7 @@ const UserSearchPage_Individual = () => { | |||
| !onReady ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ minHeight: '85vh', backgroundColor: 'backgroundColor.default' }} direction="column"> | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default' }}> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| @@ -101,7 +101,7 @@ const UserSearchPage_Individual = () => { | |||
| </div> | |||
| </Grid> | |||
| {/*row 1*/} | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb: -4}}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{mb: -1}}> | |||
| <SearchForm | |||
| applySearch={applySearch} | |||
| orgComboData={orgCombo} | |||
| @@ -0,0 +1,125 @@ | |||
| // material-ui | |||
| import { | |||
| FormControl, | |||
| Button, | |||
| Grid, | |||
| // InputAdornment, | |||
| Typography, FormLabel, | |||
| OutlinedInput, | |||
| } from '@mui/material'; | |||
| import MainCard from "components/MainCard"; | |||
| import * as React from "react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const Form = ({ selectedItem, onSave }) => { | |||
| const [data, setData] = React.useState({}); | |||
| const [value, setValue] = React.useState(""); | |||
| React.useEffect(() => { | |||
| //if user data from parent are not null | |||
| if (selectedItem !== undefined && Object.keys(selectedItem).length > 0) { | |||
| setData(selectedItem); | |||
| setValue(selectedItem.value) | |||
| } | |||
| }, [selectedItem]); | |||
| return ( | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| > | |||
| { | |||
| data?.name ? | |||
| <> | |||
| <Typography variant="h5" sx={{ mt: 3, ml: 3, mr: 3, borderBottom: "1px solid black" }}> | |||
| Update | |||
| </Typography> | |||
| <form> | |||
| <Grid container> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={2} | |||
| sx={{ ml: 3, mr: 3, display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Name:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={8} > | |||
| <Typography> | |||
| {data?.name} | |||
| </Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={2} | |||
| sx={{ ml: 3, mr: 3, display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel >Type:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={8}> | |||
| <Typography> | |||
| {data?.type} | |||
| </Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={2} | |||
| sx={{ ml: 3, mr: 3, display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Category:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={8}> | |||
| <Typography> | |||
| {data?.category} | |||
| </Typography> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={2} | |||
| sx={{ ml: 3, mr: 3, display: 'flex', alignItems: 'center' }}> | |||
| <FormLabel>Value:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={8}> | |||
| <FormControl variant="outlined" fullWidth required> | |||
| <OutlinedInput | |||
| fullWidth | |||
| size="small" | |||
| value={value} | |||
| onChange={(event)=>{ | |||
| setValue(event.target.value); | |||
| }} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Button onClick={()=>{onSave({ name: data.name, value:value})}}>Save</Button> | |||
| </form> | |||
| </> | |||
| : | |||
| <Typography variant="h5" sx={{ mt: 3, ml: 3, mr: 3, borderBottom: "1px solid black" }}> | |||
| Please select system params. | |||
| </Typography> | |||
| } | |||
| </MainCard> | |||
| ); | |||
| }; | |||
| export default Form; | |||
| @@ -0,0 +1,73 @@ | |||
| // material-ui | |||
| import { | |||
| Box, | |||
| Typography | |||
| } from '@mui/material'; | |||
| import MainCard from "components/MainCard"; | |||
| import * as React from "react"; | |||
| import { FiDataGrid } from "components/FiDataGrid"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const Table = ({onRowClick, dataList}) => { | |||
| const [rows, setRows] = React.useState(dataList); | |||
| React.useEffect(() => { | |||
| setRows(dataList); | |||
| }, [dataList]); | |||
| const columns = [ | |||
| { | |||
| field: 'name', | |||
| headerName: 'Name', | |||
| width: 300, | |||
| }, | |||
| { | |||
| id: 'type', | |||
| field: 'type', | |||
| headerName: 'Type', | |||
| width: 150, | |||
| valueGetter: (params) => { | |||
| return params.row.type | |||
| } | |||
| }, | |||
| { | |||
| id: 'category', | |||
| field: 'category', | |||
| headerName: 'Category', | |||
| width: 150, | |||
| }, | |||
| { | |||
| id: 'value', | |||
| field: 'value', | |||
| headerName: 'Value', | |||
| flex: 1 | |||
| }, | |||
| ]; | |||
| return ( | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| height='100%' | |||
| > | |||
| <Typography variant="h5" sx={{mt: 3, ml: 3, mr: 3, borderBottom: "1px solid black"}}> | |||
| System Params | |||
| </Typography> | |||
| <div style={{ width: '100%' }}> | |||
| <Box sx={{ backgroundColor: "#fff", ml: 2 }} height='100%'> | |||
| <FiDataGrid | |||
| rows={rows} | |||
| columns={columns} | |||
| customPageSize={10} | |||
| getRowHeight={() => 'auto'} | |||
| onRowClick={onRowClick} | |||
| /> | |||
| </Box> | |||
| </div> | |||
| </MainCard> | |||
| ); | |||
| }; | |||
| export default Table; | |||
| @@ -0,0 +1,110 @@ | |||
| import { | |||
| Grid, | |||
| Typography, | |||
| Stack, | |||
| Box, | |||
| } from '@mui/material'; | |||
| import * as React from "react"; | |||
| import { GET_SYS_PARAMS, } from "utils/ApiPathConst"; | |||
| import Loadable from 'components/Loadable'; | |||
| const Table = Loadable(React.lazy(() => import('./Table'))); | |||
| const Form = Loadable(React.lazy(() => import('./Form'))); | |||
| import { notifyActionSuccess } from 'utils/CommonFunction'; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| import * as HttpUtils from "utils/HttpUtils"; | |||
| const BackgroundHead = { | |||
| backgroundImage: `url(${titleBackgroundImg})`, | |||
| width: '100%', | |||
| height: '100%', | |||
| backgroundSize: 'contain', | |||
| backgroundRepeat: 'no-repeat', | |||
| backgroundColor: '#0C489E', | |||
| backgroundPosition: 'right' | |||
| } | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const SystemSetting = () => { | |||
| const [dataList, setDataList] = React.useState([]); | |||
| const [selectedItem, setSelectedItem] = React.useState({}); | |||
| React.useEffect(() => { | |||
| loadList(); | |||
| }, []); | |||
| const loadList=()=>{ | |||
| HttpUtils.get({ | |||
| url: GET_SYS_PARAMS, | |||
| onSuccess: (responseData)=>{ | |||
| setDataList(responseData); | |||
| } | |||
| }); | |||
| } | |||
| const onRowClick=(param)=>{ | |||
| setSelectedItem(param.row); | |||
| } | |||
| const onSave=(param)=>{ | |||
| HttpUtils.post({ | |||
| url: GET_SYS_PARAMS+"/update", | |||
| params:{ | |||
| name: param.name, | |||
| value: param.value | |||
| }, | |||
| onSuccess: ()=>{ | |||
| notifyActionSuccess(); | |||
| loadList(); | |||
| } | |||
| }); | |||
| } | |||
| return ( | |||
| <Grid container sx={{ minHeight: '90vh', backgroundColor: 'backgroundColor.default' }} direction="column" | |||
| justifyContent="flex-start"> | |||
| <> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">System Setting</Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| {/*col 1*/} | |||
| <Grid item xs={12} > | |||
| <Grid container direction="row" sx={{ p: 2 }} spacing={2} > | |||
| <Grid item xs={12} md={8} lg={8} > | |||
| <Box xs={12} sx={{ borderRadius: '10px', backgroundColor: '#fff' }} > | |||
| <Table | |||
| dataList={dataList} | |||
| onRowClick={onRowClick} | |||
| /> | |||
| </Box> | |||
| </Grid> | |||
| <Grid item xs={12} md={4} lg={4}> | |||
| <Box xs={12} sx={{ borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <Form | |||
| selectedItem={selectedItem} | |||
| onSave={onSave} | |||
| /> | |||
| </Box> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| {/*col 2*/} | |||
| </> | |||
| </Grid> | |||
| ); | |||
| }; | |||
| export default SystemSetting; | |||
| @@ -4,10 +4,10 @@ import { | |||
| } from "@mui/x-data-grid"; | |||
| import {useEffect, useState} from "react"; | |||
| import axios from "axios"; | |||
| import {apiPath} from "../../../auth/utils"; | |||
| import {apiPath} from "auth/utils"; | |||
| //import LoadingComponent from "../extra-pages/LoadingComponent"; | |||
| import * as React from "react"; | |||
| import {GET_AUTH_LIST} from "../../../utils/ApiPathConst"; | |||
| import {GET_AUTH_LIST} from "utils/ApiPathConst"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| @@ -20,22 +20,18 @@ export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord}) { | |||
| const [onReady, setOnReady] = useState(false); | |||
| const [currentSelectedRow, setCurrentSelectedRow] = useState(userAuth); | |||
| const _sx = { | |||
| ml: 3, | |||
| mb: 3, | |||
| mr: 3, | |||
| padding: "4 2 4 2", | |||
| boxShadow: 1, | |||
| border: 1, | |||
| borderColor: '#DDD', | |||
| '& .MuiDataGrid-cell': { | |||
| borderTop: 1, | |||
| borderBottom: 1, | |||
| //borderBottom: 1, | |||
| borderColor: "#EEE" | |||
| }, | |||
| '& .MuiDataGrid-footerContainer': { | |||
| border: 1, | |||
| borderColor: "#EEE" | |||
| } | |||
| // '& .MuiDataGrid-footerContainer': { | |||
| // border: 1, | |||
| // borderColor: "#EEE" | |||
| // } | |||
| } | |||
| useEffect(() => { | |||
| axios.get(`${apiPath}${GET_AUTH_LIST}`) | |||
| @@ -49,8 +49,9 @@ const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewR | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| sx={{margin: 0}} | |||
| > | |||
| <Typography variant="h6" sx={{ mt: 3, ml: 3, mb: 2, mr: 3, borderBottom: "1px solid black" }}> | |||
| <Typography variant="h6" sx={{ mt: 2, ml: 3, mr: 1, borderBottom: "1px solid black" }}> | |||
| User Authority | |||
| </Typography> | |||
| @@ -23,6 +23,7 @@ const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord} | |||
| useEffect(() => { | |||
| //if user data from parent are not null | |||
| if (Object.keys(userData).length > 0 && userData !== undefined) { | |||
| // console.log(userData.groupIds) | |||
| setCurrentUserData(userData.data); | |||
| setSelectedRow(userData.groupIds); | |||
| } | |||
| @@ -48,8 +49,9 @@ const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord} | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| sx={{margin: 0}} | |||
| > | |||
| <Typography variant="h5" sx={{mt: 3, ml: 3, mb: 2, mr: 3, borderBottom: "1px solid black"}}> | |||
| <Typography variant="h6" sx={{mt: 2, ml: 3, mr: 1, borderBottom: "1px solid black"}}> | |||
| Group(s) | |||
| </Typography> | |||
| <UserGroupTable | |||
| @@ -4,9 +4,9 @@ import { | |||
| } from "@mui/x-data-grid"; | |||
| import {useEffect, useState} from "react"; | |||
| import axios from "axios"; | |||
| import {apiPath} from "../../../auth/utils"; | |||
| import {apiPath} from "auth/utils"; | |||
| import * as React from "react"; | |||
| import {GET_GROUP_COMBO_PATH} from "../../../utils/ApiPathConst"; | |||
| import {GET_GROUP_COMBO_PATH} from "utils/ApiPathConst"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
| @@ -19,9 +19,6 @@ export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord}) | |||
| const [currentSelectedRow, setCurrentSelectedRow] = useState(userGroup); | |||
| const _sx = { | |||
| ml: 3, | |||
| mb: 3, | |||
| mr: 3, | |||
| padding: "4 2 4 2", | |||
| boxShadow: 1, | |||
| border: 1, | |||
| @@ -41,7 +38,9 @@ export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord}) | |||
| axios.get(`${apiPath}${GET_GROUP_COMBO_PATH}`) | |||
| .then((response) => { | |||
| if (response.status === 200) { | |||
| // console.log(userGroup) | |||
| setGroupData(response.data.records); | |||
| setCurrentSelectedRow(userGroup); | |||
| } | |||
| }) | |||
| .catch(error => { | |||
| @@ -85,7 +84,7 @@ export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord}) | |||
| checkboxSelection | |||
| rowSelectionModel={currentSelectedRow} | |||
| onRowSelectionModelChange={(ids) => { | |||
| console.log(ids); | |||
| // console.log(ids); | |||
| setSelectedRow(ids); | |||
| setCurrentSelectedRow(ids); | |||
| }} | |||
| @@ -67,8 +67,9 @@ const UserInformationCard = ({isCollectData, updateUserObject,userData,isNewReco | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| sx={{margin: 0}} | |||
| > | |||
| <Typography variant="h5" sx={{mt: 3, ml: 3, mr: 3, borderBottom: "1px solid black"}}> | |||
| <Typography variant="h6" sx={{ mt: 2, ml: 3, mr: 1, borderBottom: "1px solid black"}}> | |||
| Information | |||
| </Typography> | |||
| @@ -236,10 +237,10 @@ const UserInformationCard = ({isCollectData, updateUserObject,userData,isNewReco | |||
| </Grid> | |||
| </Grid> */} | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3}}> | |||
| <Grid container> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| sx={{ml: 3, mr: 3, mb:3, display: 'flex', alignItems: 'center'}}> | |||
| <FormLabel required>Locked:</FormLabel> | |||
| </Grid> | |||
| @@ -10,7 +10,7 @@ import { useEffect, useState } from "react"; | |||
| import * as React from "react"; | |||
| import axios from "axios"; | |||
| import { useNavigate, useParams } from "react-router-dom"; | |||
| import { GLD_USER_PATH, DELETE_USER, POST_ADMIN_USER_REGISTER } from "../../../utils/ApiPathConst"; | |||
| import { GLD_USER_PATH, DELETE_USER, POST_ADMIN_USER_REGISTER } from "utils/ApiPathConst"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| @@ -23,7 +23,7 @@ import { | |||
| getDeletedRecordWithRefList, | |||
| notifyDeleteSuccess, | |||
| notifySaveSuccess, | |||
| } from "../../../utils/CommonFunction"; | |||
| } from "utils/CommonFunction"; | |||
| import ForwardIcon from '@mui/icons-material/Forward'; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| @@ -221,7 +221,7 @@ const UserMaintainPage = () => { | |||
| <Grid item xs={12} md={5} lg={5}> | |||
| <Grid container> | |||
| <Grid item xs={12} md={12} lg={12}> | |||
| <Box xs={12} ml={4} mt={3} sx={{ p: 1, borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <Box xs={12} ml={4} mt={2} sx={{ borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <UserInformationCard | |||
| updateUserObject={updateUserObject} | |||
| userData={userData} | |||
| @@ -231,8 +231,8 @@ const UserMaintainPage = () => { | |||
| </Box> | |||
| </Grid> | |||
| <Grid item xs={12} md={12} lg={12} sx={{ mt: 3 }}> | |||
| <Box xs={12} ml={4} mt={2} sx={{ p: 1, borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <Grid item xs={12} md={12} lg={12} sx={{ mt: 0.5 }}> | |||
| <Box xs={12} ml={4} mt={2} sx={{borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <UserGroupCard | |||
| updateUserGroupList={updateUserGroupList} | |||
| userData={userData} | |||
| @@ -245,7 +245,7 @@ const UserMaintainPage = () => { | |||
| </Grid> | |||
| {/*col 2*/} | |||
| <Grid item xs={12} md={7} lg={7}> | |||
| <Box xs={12} ml={4} mt={3} mr={3} sx={{ p: 1, borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <Box xs={12} ml={2} mt={2} mr={3} sx={{ borderRadius: '10px', backgroundColor: '#fff' }}> | |||
| <UserAuthorityCard | |||
| updateUserAuthList={updateUserAuthList} | |||
| userData={userData} | |||
| @@ -256,7 +256,7 @@ const UserMaintainPage = () => { | |||
| </Grid> | |||
| {/*bottom button*/} | |||
| <Grid item s={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"end"} justifyContent="center"> | |||
| <Grid item s={12} md={12} lg={12} sx={{ mt:1, mb:2 }} alignItems={"end"} justifyContent="center"> | |||
| <Grid container maxWidth justifyContent="flex-end"> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| @@ -17,6 +17,8 @@ import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; | |||
| import {useIntl} from "react-intl"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -150,49 +152,39 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||
| <Grid container maxWidth justifyContent="flex-start"> | |||
| {editMode ? | |||
| <> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={loadDataFun} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| color="cancel" | |||
| > | |||
| <Typography variant="h5">Reset & Back</Typography> | |||
| Reset & Back | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Save</Typography> | |||
| Save | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </> | |||
| : | |||
| <> | |||
| <Grid item sx={{ mr: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={onEditClick} | |||
| > | |||
| <Typography variant="h5">Edit</Typography> | |||
| Edit | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -321,16 +313,14 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||
| })} | |||
| </Grid> | |||
| <Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2 ,mb:2}}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end', | |||
| }} | |||
| onClick={onVerifiedClick} | |||
| > | |||
| <Typography variant="h5">Verify</Typography> | |||
| Verify | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -454,31 +444,27 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||
| </Grid> | |||
| {locked ? | |||
| <Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2}}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={doUnlock} | |||
| > | |||
| <Typography variant="h5">Active</Typography> | |||
| Active | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| : | |||
| <Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2}}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| variant="contained" | |||
| color="error" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={doLock} | |||
| > | |||
| <Typography variant="h5">Lock</Typography> | |||
| Lock | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| } | |||
| </> | |||
| @@ -116,7 +116,9 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ mr: 3 }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'back'})} | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={loadDataFun} | |||
| > | |||
| <FormattedMessage id="resetAndBack" /> | |||
| @@ -125,6 +127,7 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'save'})} | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| @@ -139,6 +142,7 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ mr: 3 }}> | |||
| <Button | |||
| aria-label={intl.formatMessage({id: 'edit'})} | |||
| variant="contained" | |||
| onClick={onEditClick} | |||
| > | |||
| @@ -214,7 +218,7 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||
| <Grid xs={12} sm={12} md={12} lg={4}> | |||
| <Grid container alignItems={"center"} sx={{mb:2}}> | |||
| <Grid item xs={12} sm={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}> | |||
| <Typography variant="h5"> | |||
| <Typography variant="pnspsFormParagraphBold"> | |||
| <FormattedMessage id="idNo" />: | |||
| </Typography> | |||
| </Grid> | |||
| @@ -120,14 +120,16 @@ const UserMaintainPage_Individual = () => { | |||
| isLoading ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ backgroundColor: 'backgroundColor.default', maxWidth:'100%' }}> | |||
| <Grid container direction="column" sx={{minHeight: '90vh', backgroundColor: isGLDLoggedIn()?'backgroundColor.default':'#ffffff', maxWidth:'100%' }}> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| {isGLDLoggedIn()? | |||
| <Typography ml={15} color='#FFF' variant="h4">Maintain Individual User</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | |||
| Maintain Individual User | |||
| </Typography> | |||
| : | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | |||
| <FormattedMessage id="userProfile" /> | |||
| </Typography> | |||
| } | |||
| @@ -135,7 +137,10 @@ const UserMaintainPage_Individual = () => { | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12}> | |||
| <Button title="Back" sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/indUser") }}> | |||
| <Button title="Back" | |||
| sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} | |||
| variant="outlined" onClick={() => { navigate(-1) }} | |||
| > | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| @@ -18,6 +18,8 @@ import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; | |||
| import {useIntl} from "react-intl"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -196,50 +198,39 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
| <Grid container maxWidth justifyContent="flex-start"> | |||
| {editMode ? | |||
| <> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| onClick={loadDataFun} | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| color="cancel" | |||
| > | |||
| <Typography variant="h5">Reset & Back</Typography> | |||
| Reset & Back | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| > | |||
| <Typography variant="h5">Save</Typography> | |||
| Save | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </> | |||
| : | |||
| <> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={onEditClick} | |||
| > | |||
| <Typography variant="h5">Edit</Typography> | |||
| Edit | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -380,17 +371,14 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
| })} | |||
| </Grid> | |||
| <Grid item xs={1} md={1} lg={1}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={() => { onVerifiedClick() }} | |||
| > | |||
| <Typography variant="h5">Verify</Typography> | |||
| Verify | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </> | |||
| } | |||
| @@ -436,33 +424,27 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
| {formik.values.locked ? | |||
| <Grid item xs={1} md={1} lg={1} sx={{ ml: 1 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="success" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={doUnlock} | |||
| > | |||
| <Typography variant="h5">Active</Typography> | |||
| Active | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| : | |||
| <Grid item xs={1} md={1} lg={1} sx={{ ml: 1 }}> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| color="error" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end', | |||
| }} | |||
| onClick={doLock} | |||
| > | |||
| <Typography variant="h5">Lock</Typography> | |||
| Lock | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| } | |||
| </> | |||
| @@ -478,11 +460,13 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
| <Grid container alignItems={"center"}> | |||
| {currentUserData.orgId == null ? | |||
| <Grid item lg={2} > | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button variant="contained" | |||
| onClick={createOrgClick} | |||
| > | |||
| <Typography variant="h5">Create Organisation</Typography> | |||
| Create Organisation | |||
| </Button> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| : null | |||
| } | |||
| @@ -577,25 +561,55 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
| </form> | |||
| } | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <Dialog | |||
| open={isWarningPopUp} | |||
| onClose={() => setIsWarningPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Warning</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => setIsWarningPopUp(false)}><Typography variant="h5">Close</Typography></Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button onClick={() => setIsWarningPopUp(false)}> | |||
| Close | |||
| </Button> | |||
| </ThemeProvider> | |||
| </DialogActions> | |||
| </Dialog> | |||
| </div> | |||
| <div> | |||
| <Dialog open={isConfirmPopUp} onClose={() => setIsConfirmPopUp(false)} > | |||
| <Dialog | |||
| open={isConfirmPopUp} | |||
| onClose={() => setIsConfirmPopUp(false)} | |||
| PaperProps={{ | |||
| sx: { | |||
| minWidth: '40vw', | |||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||
| } | |||
| }} | |||
| > | |||
| <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h4" style={{ padding: '16px' }}>{confirmText}</Typography> | |||
| </DialogContent> | |||
| <DialogActions> | |||
| <Button onClick={() => { setIsConfirmPopUp(false) }}><Typography variant="h5">Close</Typography></Button> | |||
| <Button onClick={() => { confirmAction?.function(); }}><Typography variant="h5">Confirm</Typography></Button> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Button onClick={() => { setIsConfirmPopUp(false) }}> | |||
| Close | |||
| </Button> | |||
| <Button onClick={() => { confirmAction?.function(); }}> | |||
| Confirm | |||
| </Button> | |||
| </ThemeProvider> | |||
| </DialogActions> | |||
| </Dialog> | |||
| </div> | |||
| @@ -114,6 +114,7 @@ const UserInformationCard_Organization_Pub = ({ userData, loadDataFun,}) => { | |||
| <Button | |||
| variant="contained" | |||
| onClick={loadDataFun} | |||
| color="cancel" | |||
| > | |||
| <FormattedMessage id="resetAndBack" /> | |||
| @@ -181,14 +181,16 @@ const UserMaintainPage_Organization = () => { | |||
| isLoading ? | |||
| <LoadingComponent /> | |||
| : | |||
| <Grid container sx={{ backgroundColor: "backgroundColor.default" }}> | |||
| <Grid container sx={{ backgroundColor: isGLDLoggedIn()?'backgroundColor.default':'#ffffff' }}> | |||
| <Grid item xs={12}> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| {isGLDLoggedIn()? | |||
| <Typography ml={15} color='#FFF' variant="h4">Maintain Organisation User</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | |||
| Maintain Organisation User | |||
| </Typography> | |||
| : | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | |||
| <FormattedMessage id="userProfile" /> | |||
| </Typography> | |||
| } | |||
| @@ -196,7 +198,7 @@ const UserMaintainPage_Organization = () => { | |||
| </div> | |||
| </Grid> | |||
| <Grid item xs={12}> | |||
| <Button title="Back" sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/orgUser") }}> | |||
| <Button title="Back" sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }}> | |||
| <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} /> | |||
| </Button> | |||
| </Grid> | |||
| @@ -0,0 +1,160 @@ | |||
| // material-ui | |||
| import { | |||
| FormControl, | |||
| // IconButton, | |||
| Grid, | |||
| // InputAdornment, | |||
| Typography, FormLabel, | |||
| OutlinedInput, | |||
| } from '@mui/material'; | |||
| import MainCard from "components/MainCard"; | |||
| import * as React from "react"; | |||
| import {useEffect, useState} from "react"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { lazy } from 'react'; | |||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const UserInformationCard = ({userData}) => { | |||
| const [currentUserData, setCurrentUserData] = React.useState({}); | |||
| // const [locked, setLocked] = useState(false); | |||
| const [onReady, setOnReady] = useState(false); | |||
| useEffect(() => { | |||
| //if user data from parent are not null | |||
| if (Object.keys(userData).length > 0 && userData !== undefined) { | |||
| setCurrentUserData(userData.data); | |||
| } | |||
| }, [userData]); | |||
| useEffect(() => { | |||
| //if state data are ready and assign to different field | |||
| if (Object.keys(userData).length > 0 &¤tUserData !== undefined&¤tUserData.id!==undefined) { | |||
| // console.log(currentUserData) | |||
| // setLocked(currentUserData.locked); | |||
| setOnReady(true); | |||
| } | |||
| }, [currentUserData]); | |||
| return ( | |||
| !onReady ? | |||
| <LoadingComponent/> | |||
| : | |||
| <MainCard elevation={0} | |||
| border={false} | |||
| content={false} | |||
| > | |||
| <Typography variant="h5" sx={{mt: 3, ml: 3, mr: 3, borderBottom: "1px solid black"}}> | |||
| Information | |||
| </Typography> | |||
| <form> | |||
| <Grid container> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3, mt:3}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| <FormLabel required>Username:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6}> | |||
| <FormControl variant="outlined" fullWidth required> | |||
| <OutlinedInput | |||
| required | |||
| fullWidth | |||
| size="small" | |||
| // {...register("username", | |||
| // { | |||
| // })} | |||
| id='username' | |||
| disabled={true} | |||
| value={currentUserData.username} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| <FormLabel required >Full Name:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6}> | |||
| <FormControl variant="outlined" fullWidth required> | |||
| <OutlinedInput | |||
| required | |||
| fullWidth | |||
| size="small" | |||
| value= {currentUserData.enName} | |||
| disabled={true} | |||
| // {...register("enName", | |||
| // { | |||
| // })} | |||
| id='enName' | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| <FormLabel>Post:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6}> | |||
| <FormControl variant="outlined" fullWidth required> | |||
| <OutlinedInput | |||
| fullWidth | |||
| size="small" | |||
| value= {currentUserData.post} | |||
| disabled={true} | |||
| // {...register("post", | |||
| // { | |||
| // })} | |||
| id='post' | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| <FormLabel required>Email:</FormLabel> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6}> | |||
| <FormControl variant="outlined" fullWidth required> | |||
| <OutlinedInput | |||
| fullWidth | |||
| size="small" | |||
| value={currentUserData.emailAddress} | |||
| disabled={true} | |||
| // {...register("emailAddress", | |||
| // { | |||
| // })} | |||
| id='emailAddress' | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| </form> | |||
| </MainCard> | |||
| ); | |||
| }; | |||
| export default UserInformationCard; | |||