Commit bfd45510 authored by Arfin Syadziy's avatar Arfin Syadziy

Merge branch 'dev/arfin' into 'ENV-DEV-CR-CAFRM'

Dev/arfin

See merge request !1599
parents 8bde7f1c ed408605
import React, {Component} from 'react' import React, { Component } from 'react'
import {withStyles} from '@material-ui/core/styles'; import { withStyles } from '@material-ui/core/styles';
import {createMuiTheme, MuiThemeProvider, Paper, Snackbar, Tab, Tabs, Typography} from '@material-ui/core'; import { Paper, Snackbar, Typography } from '@material-ui/core';
import MuiAlert from '@material-ui/lab/Alert'; import MuiAlert from '@material-ui/lab/Alert';
import Constant from '../../library/Constant'; import Constant from '../../library/Constant';
import Images from '../../assets/Images'; import Images from '../../assets/Images';
import ReactTooltip from 'react-tooltip'; import ReactTooltip from 'react-tooltip';
import api from '../../api'; import api from '../../api';
import PropagateLoader from "react-spinners/PropagateLoader" import PropagateLoader from "react-spinners/PropagateLoader"
import TableDocument from "./TableDocument"; import TableDocument from "./TableCafrmDocument";
import CreateCarfmDoc from "./CreateCarfmDoc"; import CreateCarfmDoc from "./CreateCarfmDocument";
const Alert = withStyles({})((props) => <MuiAlert elevation={6} variant="filled" {...props} />); const Alert = withStyles({})((props) => <MuiAlert elevation={6} variant="filled" {...props} />);
...@@ -23,44 +23,34 @@ export default class CarfmDocument extends Component { ...@@ -23,44 +23,34 @@ export default class CarfmDocument extends Component {
load: false, load: false,
name: '', name: '',
userCompActive: [], userCompActive: [],
isHasAccessDocument: true,
submenu_id : 0, submenu_id : 0,
submenu_name: "", submenu_name: "",
menu_title: "", menu_title: "",
loading: true, loading: false
finishLoad: false,
} }
} }
componentDidMount() {
async componentDidMount() { this.getMenuName();
// this.getPermission()
await this.getMenuName();
await this.getPermission(this.state.submenu_name)
await this.getDataCarfm();
await this.getDetailUser();
await this.setState({
finishLoad: true
})
} }
async getMenuName(){ getMenuName(){
api.create().getMenuByUser().then(
await api.create().getMenuByUser().then(
response => { response => {
if(response.data){ if(response.data){
if(response.data.status === 'success'){ if(response.data.status === 'success'){
response.data.data.map( response.data.data.map(
(item) => { (item) => {
let arr = window.location.href.split('/'); let arr = window.location.href.split('/');
if (item.class_id == arr.slice(-1)[0]){
if(item.class_id == arr.slice(-1)[0]){
this.setState({ this.setState({
submenu_id : item.menu_id, submenu_id : item.menu_id,
submenu_name : item.menu_name.toLowerCase(), submenu_name : item.menu_name.toLowerCase(),
menu_title : item.menu_name.replace(/\b\w/g, c => c.toUpperCase()) menu_title : item.menu_name.replace(/\b\w/g, c => c.toUpperCase())
}, () => {
this.getPermission(this.state.submenu_name)
// this.getDataCarfm();
this.getDetailUser();
}) })
} }
} }
...@@ -71,50 +61,46 @@ export default class CarfmDocument extends Component { ...@@ -71,50 +61,46 @@ export default class CarfmDocument extends Component {
) )
} }
async getDataCarfm(create){ // getDataCarfm(create){
let payload = { // let payload = {
submenu_id : this.state.submenu_id // submenu_id : this.state.submenu_id
} // }
await api.create().getCarfmDocumentBySubmenu(payload).then( // api.create().getCarfmDocumentBySubmenu(payload).then(
response => { // response => {
if(response){ // if(response){
if(response.data.status === 'success'){ // if(response.data.status === 'success'){
let dataList = [] // let dataList = []
response.data.data.map((item, index) => { // response.data.data.map((item, index) => {
dataList.push(item) // dataList.push(item)
}) // })
// this.setState({
this.setState({ // listData: dataList,
isHasAccessDocument: true, // refresh: create == undefined ? '' : create,
listData: dataList, // loading: false
refresh: create == undefined ? '' : create // })
}) // } else {
// this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => {
// if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
// setTimeout(() => {
} else { // localStorage.removeItem(Constant.TOKEN)
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => { // window.location.reload();
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) { // }, 1000);
setTimeout(() => { // }
localStorage.removeItem(Constant.TOKEN) // })
window.location.reload(); // }
}, 1000); // }else {
} // this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error', loading: false })
}) // }
} // }
}else { // )
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error', loading: false }) // }
}
} getPermission(subMenu) {
)
}
async getPermission(subMenu) {
let payload = { let payload = {
menu: subMenu menu: subMenu
} }
await api.create().getPermission(payload).then(response => { api.create().getPermission(payload).then(response => {
if (response.data) { if (response.data) {
console.log(`status get permission ${response.data.status}`); console.log(`status get permission ${response.data.status}`);
if (response.data.status === "success") { if (response.data.status === "success") {
...@@ -124,9 +110,6 @@ export default class CarfmDocument extends Component { ...@@ -124,9 +110,6 @@ export default class CarfmDocument extends Component {
btndownload: response.data.data.download, btndownload: response.data.data.download,
load: true, load: true,
}) })
this.setState({
}, console.log(`btnview ${this.state.btnview}, btncreate ${this.state.btncreate}, btndownload ${this.state.btnview}`), console.log(response.data.data))
console.log("btn create " + this.state.btncreate); console.log("btn create " + this.state.btncreate);
} else { } else {
this.setState({ this.setState({
...@@ -139,13 +122,13 @@ export default class CarfmDocument extends Component { ...@@ -139,13 +122,13 @@ export default class CarfmDocument extends Component {
}) })
} }
async getDetailUser() { getDetailUser() {
let userId = localStorage.getItem(Constant.USER) let userId = localStorage.getItem(Constant.USER)
await api.create().getDetailUser(userId).then((response) => { api.create().getDetailUser(userId).then((response) => {
if (response.data) { if (response.data) {
if (response.ok) { if (response.ok) {
if (response.data.status === 'success') { if (response.data.status === 'success') {
this.setState({ userCompany: response.data.data.company, visibleTrue: false, loading: false }, () => { this.setState({ userCompany: response.data.data.company, visibleTrue: false }, () => {
this.getCompanyActive() this.getCompanyActive()
console.log(this.state.userCompany); console.log(this.state.userCompany);
}) })
...@@ -155,8 +138,8 @@ export default class CarfmDocument extends Component { ...@@ -155,8 +138,8 @@ export default class CarfmDocument extends Component {
}) })
} }
async getCompanyActive() { getCompanyActive() {
await api.create().getPerusahaanActive().then((response) => { api.create().getPerusahaanActive().then((response) => {
console.log("getcompanyactive start"); console.log("getcompanyactive start");
console.log(response.data.data); console.log(response.data.data);
console.log("getcompanyactive stop"); console.log("getcompanyactive stop");
...@@ -200,15 +183,15 @@ export default class CarfmDocument extends Component { ...@@ -200,15 +183,15 @@ export default class CarfmDocument extends Component {
}) })
} }
async createDocument(payload) { //upload apinya disini createDocument(payload) { //upload apinya disini
this.setState({ loading: true }) this.setState({ loading: true })
await api.create().uploadCarfmDocument(payload).then(response => { api.create().uploadCarfmDocument(payload).then(response => {
// console.log(response) // console.log(response)
if (response.data) { if (response.data) {
if (response.ok) { if (response.ok) {
if (response.data.message === "Data was Saved Successfully") { if (response.data.message === "Data was Saved Successfully") {
this.setState({ visibleCreate: false, loading: false, alert: true, messageAlert: response.data.message, tipeAlert: 'success'}) this.setState({ visibleCreate: false, loading: false, alert: true, messageAlert: response.data.message, tipeAlert: 'success'})
this.getDataCarfm('create') // this.getDataCarfm('create')
} }
else { else {
this.setState({ visibleCreate: false, alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => { this.setState({ visibleCreate: false, alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => {
...@@ -260,73 +243,61 @@ export default class CarfmDocument extends Component { ...@@ -260,73 +243,61 @@ export default class CarfmDocument extends Component {
/> />
</div> </div>
); );
return ( return (
<div style={{height: this.props.height, backgroundColor: '#f8f8f8'}}> <div style={{height: this.props.height, backgroundColor: '#f8f8f8'}}>
{/* {this.props.load && ()} */}
<Snackbar open={this.state.alert} autoHideDuration={6000} onClose={() => this.closeAlert()}> <Snackbar open={this.state.alert} autoHideDuration={6000} onClose={() => this.closeAlert()}>
<Alert onClose={() => this.closeAlert()} severity={this.state.tipeAlert}> <Alert onClose={() => this.closeAlert()} severity={this.state.tipeAlert}>
{this.state.messageAlert} {this.state.messageAlert}
</Alert> </Alert>
</Snackbar> </Snackbar>
<div className={"main-color"} <div className={"main-color"} style={{ height: 78, display: 'flex', alignItems: 'center', paddingLeft: 20 }}>
style={{height: 78, display: 'flex', alignItems: 'center', paddingLeft: 20}}> <Typography style={{ fontSize: '16px', color: 'white' }}>{this.state.menu_title}</Typography>
<Typography style={{fontSize: '16px', color: 'white'}}>{this.state.menu_title}</Typography>
</div> </div>
<div style={{padding: 20}}> <div style={{padding: 20}}>
{this.state.loading && loadingComponent} {this.state.loading && loadingComponent}
{this.state.btnview && (
{this.state.btnview && this.state.finishLoad && (
<Paper style={{padding: 20}}> <Paper style={{padding: 20}}>
<div style={{display: 'flex', justifyContent: 'flex-end'}}>
<div style={{display: 'flex', justifyContent: 'flex-end'}}> {/* {console.log("renderbtn" + this.state.btncreate)} */}
{console.log("renderbtn" + this.state.btncreate)} {(this.state.btncreate) && (
{(this.state.btncreate) && <span> <span>
<a data-tip={'Add'} data-for="add"> <a data-tip={'Add'} data-for="add">
<div style={{display: 'grid', justifyContent: 'flex-end'}}> <div style={{display: 'grid', justifyContent: 'flex-end'}}>
<button <button
type="button" type="button"
onClick={() => this.setState({visibleCreate: true, refresh: ''})} onClick={() => this.setState({visibleCreate: true, refresh: ''})}
style={{marginRight: 25, background: 'transparent'}} style={{marginRight: 25, background: 'transparent'}}
> >
<img src={Images.add}/> <img src={Images.add}/>
</button> </button>
</div> </div>
</a> </a>
<ReactTooltip border={true} id="add" place="bottom" type="light" effect="solid"/> <ReactTooltip border={true} id="add" place="bottom" type="light" effect="solid"/>
</span>} </span>
)}
</div> </div>
<div style={{display: 'flex'}}> <div style={{display: 'flex'}}>
{this.state.visibleTrue && (
{this.state.visibleTrue && (<TableDocument <TableDocument
data={this.state.listData} data={this.state.listData}
refresh={this.state.refresh} refresh={this.state.refresh}
load={true} load={this.state.load}
userCompActive={this.state.userCompActive} userCompActive={this.state.userCompActive}
handleLoading={this.handleLoading.bind(this)} handleLoading={this.handleLoading.bind(this)}
name={this.state.name} name={this.state.name}
submenu_id={this.state.submenu_id} submenu_id={this.state.submenu_id}
btndownload = {this.state.btndownload} btndownload = {this.state.btndownload}
/>)} />)}
</div> </div>
</Paper>
)}
{!this.state.btnview && this.state.finishLoad && (
<Paper style={{ padding: 20 }}>
<label>You Don't Have Any Access in Document Management</label>
</Paper> </Paper>
)} )}
</div> </div>
{this.state.visibleCreate && ( {this.state.visibleCreate && (
<CreateCarfmDoc <CreateCarfmDoc
onClickClose={() => this.setState({ visibleCreate: false })} onClickClose={() => this.setState({ visibleCreate: false })}
...@@ -334,6 +305,7 @@ export default class CarfmDocument extends Component { ...@@ -334,6 +305,7 @@ export default class CarfmDocument extends Component {
createDocument={this.createDocument.bind(this)} createDocument={this.createDocument.bind(this)}
handleLoading={this.handleLoading.bind(this)} handleLoading={this.handleLoading.bind(this)}
submenu_id={this.state.submenu_id} submenu_id={this.state.submenu_id}
menuName={this.state.menu_title}
/> />
)} )}
......
...@@ -19,6 +19,7 @@ export default class CreateCarfmDoc extends Component { ...@@ -19,6 +19,7 @@ export default class CreateCarfmDoc extends Component {
super(props) super(props)
this.state = { this.state = {
perusahaan: null, perusahaan: null,
perusahaanData: null,
getPerusahaan: null, getPerusahaan: null,
errorPerusahaan: false, errorPerusahaan: false,
msgErrorPerusahaan: '', msgErrorPerusahaan: '',
...@@ -45,29 +46,24 @@ export default class CreateCarfmDoc extends Component { ...@@ -45,29 +46,24 @@ export default class CreateCarfmDoc extends Component {
fileType: '', fileType: '',
docId: '', docId: '',
sizeUpload: "1", sizeUpload: "1",
menuName: null, isClickSave: 0
saveDisable: false,
submitVal: 0
} }
} }
async componentDidMount() { componentDidMount() {
this.props.handleLoading(1) this.getDataCompany()
await this.getMenuName() this.getPeriode()
await this.getDataCompany() this.getMonth()
await this.getPeriode() this.getFileSize()
await this.getMonth()
await this.getFileSize()
this.props.handleLoading(0)
} }
async getFileSize() { getFileSize() {
let body = { let body = {
group: 'MAX_FILE_SIZE', group: 'MAX_FILE_SIZE',
company_id: 0, company_id: 0,
type: 'MAX_FILE_SIZE' type: 'MAX_FILE_SIZE'
} }
await api.create().getAllSettingByType(body).then(response => { api.create().getAllSettingByType(body).then(response => {
// console.log(response); // console.log(response);
if (response.data) { if (response.data) {
if (response.data.status === "success") { if (response.data.status === "success") {
...@@ -95,8 +91,8 @@ export default class CreateCarfmDoc extends Component { ...@@ -95,8 +91,8 @@ export default class CreateCarfmDoc extends Component {
}) })
} }
async getDataCompany() { getDataCompany() {
await api.create().getPerusahaanUserActive().then((response) => { api.create().getPerusahaanUserActive().then((response) => {
if (response.data) { if (response.data) {
if (response.data.status == 'success') { if (response.data.status == 'success') {
let data = response.data.data let data = response.data.data
...@@ -111,10 +107,10 @@ export default class CreateCarfmDoc extends Component { ...@@ -111,10 +107,10 @@ export default class CreateCarfmDoc extends Component {
// company_name: 'Default' // company_name: 'Default'
// }) // })
let typeProps = { let typeProps = {
options: typeData.sort((a, b) => a.company_name.localeCompare(b.company_name)), options: typeData.sort((a, b) => a.company_name - b.company_name),
getOptionLabel: (option) => option.company_name, getOptionLabel: (option) => option.company_name,
}; };
this.setState({ perusahaan: typeProps}, () => console.log(this.state.perusahaan)) this.setState({ perusahaan: typeProps })
} else { } else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => { this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) { if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
...@@ -131,30 +127,8 @@ export default class CreateCarfmDoc extends Component { ...@@ -131,30 +127,8 @@ export default class CreateCarfmDoc extends Component {
}) })
} }
async getMenuName(){ getPeriode() {
api.create().getPeriodeTransaction().then(response => {
await api.create().getMenuByUser().then(
response => {
if(response.data){
if(response.data.status === 'success'){
response.data.data.map(
(item) => {
if(item.menu_id == this.props.submenu_id){
this.setState({
menuName : item.menu_name
}
);
}
}
)
}
}
}
)
}
async getPeriode() {
await api.create().getPeriodeTransaction().then(response => {
let dateNow = new Date let dateNow = new Date
let year = format(dateNow, 'yyyy') let year = format(dateNow, 'yyyy')
if (response.data) { if (response.data) {
...@@ -185,8 +159,8 @@ export default class CreateCarfmDoc extends Component { ...@@ -185,8 +159,8 @@ export default class CreateCarfmDoc extends Component {
}) })
} }
async getMonth() { getMonth() {
await api.create().getMonthTransaction().then(response => { api.create().getMonthTransaction().then(response => {
let dateNow = new Date let dateNow = new Date
// let bulan = format(dateNow, 'MMMM') // let bulan = format(dateNow, 'MMMM')
if (response.data) { if (response.data) {
...@@ -252,28 +226,29 @@ export default class CreateCarfmDoc extends Component { ...@@ -252,28 +226,29 @@ export default class CreateCarfmDoc extends Component {
} }
validasi() { validasi() {
if (R.isNil(this.state.getPerusahaan)) { if (R.isNil(this.state.getPerusahaan)) {
this.setState({ errorPerusahaan: true, msgErrorPerusahaan: 'Company Cannot be Empty', saveDisable: false }) this.setState({ errorPerusahaan: true, msgErrorPerusahaan: 'Company Cannot be Empty', saveDisable: false })
}else if (R.isNil(this.state.periode)) { }else if (R.isNil(this.state.periode)) {
this.setState({ errorPeriode: true, msgErrorPeriode: 'Period Cannot be Empty', saveDisable: false }) this.setState({ errorPeriode: true, msgErrorPeriode: 'Period Cannot be Empty', saveDisable: false })
} else if (R.isNil(this.state.monthId)) { } else if (R.isNil(this.state.monthId)) {
this.setState({ errorMonth: true, msgErrorMonth: 'Month Cannot be Empty', saveDisable: false }) this.setState({ errorMonth: true, msgErrorMonth: 'Month Cannot be Empty', saveDisable: false })
} }
else if (R.isNil(this.state.file)) { else if (R.isNil(this.state.file)) {
this.setState({ alert: true, messageAlert: 'File Cannot be Empty', tipeAlert: 'warning', saveDisable: false }) this.setState({ alert: true, messageAlert: 'File Cannot be Empty', tipeAlert: 'warning', saveDisable: false })
} else if(this.state.submitVal === 1) { } else {
const formData = new FormData(); console.log(this.state.isClickSave + " ===> di luar");
formData.append("file", this.state.file); const formData = new FormData();
formData.append("companyId", this.state.getPerusahaan.company_id); formData.append("file", this.state.file);
formData.append("submenuId", this.props.submenu_id); formData.append("companyId", this.state.getPerusahaan.company_id);
formData.append("description", this.state.description); formData.append("submenuId", this.props.submenu_id);
formData.append("extension", this.state.fileType); formData.append("description", this.state.description);
formData.append("documentPeriode", this.state.periode.periode); formData.append("extension", this.state.fileType);
formData.append("documentMonth", this.state.monthId.month_id); formData.append("documentPeriode", this.state.periode.periode);
this.setState({ formData }, () => { formData.append("documentMonth", this.state.monthId.month_id);
this.props.createDocument(this.state.formData, ) this.setState({ formData }, () => {
}) this.props.createDocument(this.state.formData)
} })
}
} }
deleteFile(e) { deleteFile(e) {
...@@ -338,16 +313,15 @@ export default class CreateCarfmDoc extends Component { ...@@ -338,16 +313,15 @@ export default class CreateCarfmDoc extends Component {
</div> </div>
<div className="column-2"> <div className="column-2">
<div style={{ padding: 10, borderRadius: 5, marginTop: "1.2em" }}> <div style={{ padding: 10, borderRadius: 5, marginTop: "1.2em" }}>
<TextField
<TextField value={this.props.menuName}
value={this.state.menuName} InputProps={{ style: { fontSize: 11 } }}
InputProps={{ style: { fontSize: 11 } }} InputLabelProps={{ style: { fontSize: 11, color: '#7e8085' } }}
InputLabelProps={{ style: { fontSize: 11, color: '#7e8085' } }} placeholder="Category"
placeholder="Category" disabled
size="medium"
size="medium" fullWidth={true}
fullWidth={true} />
/>
</div> </div>
</div> </div>
...@@ -459,21 +433,10 @@ export default class CreateCarfmDoc extends Component { ...@@ -459,21 +433,10 @@ export default class CreateCarfmDoc extends Component {
disabled={this.state.saveDisable} disabled={this.state.saveDisable}
type="button" type="button"
onClick={() => onClick={() =>
{ this.state.isClickSave == 1 ? null :
this.props.handleLoading(1); this.setState({ isClickSave: 1 }, () => {
this.setState({
saveDisable: true,
submitVal : this.state.submitVal + 1
}, console.log());
setTimeout(() => {
this.validasi() this.validasi()
console.log("vlidasi " + this.validasi()); })
}, 100)
this.props.handleLoading(0);
}
} }
> >
<div style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center' }}> <div style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center' }}>
......
...@@ -57,7 +57,6 @@ export default class TableDocument extends Component { ...@@ -57,7 +57,6 @@ export default class TableDocument extends Component {
let dataTable = [] let dataTable = []
response.data.data.map((item, index) => { response.data.data.map((item, index) => {
let indexId = this.props.userCompActive.findIndex((val) => val == item.company_id) let indexId = this.props.userCompActive.findIndex((val) => val == item.company_id)
if (indexId !== -1) { if (indexId !== -1) {
dataTable.push( [ dataTable.push( [
index, index,
...@@ -73,22 +72,22 @@ export default class TableDocument extends Component { ...@@ -73,22 +72,22 @@ export default class TableDocument extends Component {
item.values item.values
]) ])
} }
}) })
// console.log(dataTable)
this.setState({ dataTable, loading: false })
let docPath = response.data.data.map((item) => { let docPath = response.data.data.map((item) => {
return [ return [
item.document_filepath item.document_filepath
] ]
}) })
this.setState({ docPath, loading: false })
let docId = response.data.data.map((item) => { let docId = response.data.data.map((item) => {
return [ return [
item.document_id item.document_id
] ]
}) })
this.setState({ docId, loading: false })
// console.log(dataTable)
this.setState({ dataTable, docPath, docId, loading: false })
} else { } else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => { this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) { if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
......
...@@ -22,6 +22,7 @@ export default class DocumentManagement extends Component { ...@@ -22,6 +22,7 @@ export default class DocumentManagement extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
alert: false,
tab: 0, tab: 0,
listData: [], listData: [],
id: 0, id: 0,
......
...@@ -20,7 +20,7 @@ import SubHolding from '../container/Reports/SubHolding'; ...@@ -20,7 +20,7 @@ import SubHolding from '../container/Reports/SubHolding';
import SummaryTriputra from '../container/SummaryTriputra/SummaryOfTriputra'; import SummaryTriputra from '../container/SummaryTriputra/SummaryOfTriputra';
import MasterDataCAT from '../container/MasterData/MasterDataCAT/MasterDataCAT'; import MasterDataCAT from '../container/MasterData/MasterDataCAT/MasterDataCAT';
import ProgressReport from '../container/ProgressReport/ProgressReport'; import ProgressReport from '../container/ProgressReport/ProgressReport';
import CarfmDocument from "../container/CRFM/CarfmDocument"; import CarfmDocument from "../container/CAFRM/CafrmDocument";
const routes = [ const routes = [
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment