Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun
	
		
	
				
					
				
			
						commit
						cbdbe7bf7d
					
				| 
		 After Width: | Height: | Size: 3.3 KiB  | 
| 
		 After Width: | Height: | Size: 239 KiB  | 
@ -0,0 +1,48 @@
 | 
				
			||||
import React,{ Component } from "react";
 | 
				
			||||
import './css/moopCases.css'
 | 
				
			||||
import '../courses/css/Courses.css'
 | 
				
			||||
 | 
				
			||||
import { getUrl } from 'educoder';
 | 
				
			||||
 | 
				
			||||
import Tags from './CaseTags'
 | 
				
			||||
 | 
				
			||||
class CaseItem extends Component{
 | 
				
			||||
  constructor(props){
 | 
				
			||||
    super(props);
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  render(){
 | 
				
			||||
    let { libraries } = this.props;
 | 
				
			||||
    console.log(libraries)
 | 
				
			||||
    return(
 | 
				
			||||
      <div className="library-list-container">
 | 
				
			||||
        {
 | 
				
			||||
          libraries && libraries.map((item,key)=>{
 | 
				
			||||
            return(
 | 
				
			||||
              <li className="library_list_item">
 | 
				
			||||
                <img alt={item.id} className="mr15 mt3 radius4" height="90" src={getUrl(`${item.cover_url}`)} width="120" />
 | 
				
			||||
                <div className="flex1">
 | 
				
			||||
                  <p className="clearfix mb25 lineh-40">
 | 
				
			||||
                    <a href={`/moop_cases/${item.id}`} className="task-hide font-22 library_l_name">{item.title}</a>
 | 
				
			||||
                    <span className="fl mt10"><Tags tags={item.tags}></Tags></span>
 | 
				
			||||
                  </p>
 | 
				
			||||
                  <p className="clearfix lineh-20">
 | 
				
			||||
                    <span className="color-grey-3 mr10">{item.author_name}</span>
 | 
				
			||||
                    <span className="color-grey-3 mr20">{item.author_school_name}</span>
 | 
				
			||||
                    <span className="color-grey-c fr">
 | 
				
			||||
                      <span className="color-grey-c mr20"><span className=" item-group-icon mr5"><i className="fa fa-eye"></i></span>{item.visited_count} 浏览</span>
 | 
				
			||||
                      <span className="color-grey-c mr20"><span className=" item-group-icon mr5"><i className="fa fa-thumbs-o-up"></i></span>{item.praise_count} 赞</span>
 | 
				
			||||
                      <span className="color-grey-c"><span className=" item-group-icon mr5"><i className="fa fa-download"></i></span>{item.download_count} 下载</span>
 | 
				
			||||
                    </span>
 | 
				
			||||
                  </p>
 | 
				
			||||
                </div>
 | 
				
			||||
              </li>
 | 
				
			||||
            )
 | 
				
			||||
          })
 | 
				
			||||
        }
 | 
				
			||||
        
 | 
				
			||||
      </div>
 | 
				
			||||
    )
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
export default CaseItem;
 | 
				
			||||
@ -0,0 +1,134 @@
 | 
				
			||||
import React,{ Component } from "react";
 | 
				
			||||
import { Input , Spin , Pagination } from "antd";
 | 
				
			||||
import './css/moopCases.css'
 | 
				
			||||
import '../courses/css/Courses.css'
 | 
				
			||||
 | 
				
			||||
import {  ActionBtn } from 'educoder';
 | 
				
			||||
 | 
				
			||||
import axios from 'axios'
 | 
				
			||||
 | 
				
			||||
import NoneData from '../courses/coursesPublic/NoneData'
 | 
				
			||||
 | 
				
			||||
import mainImg from '../../images/moop_cases/teach_ex.jpg'
 | 
				
			||||
import CaseItem from './CaseItem'
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
const Search = Input.Search;
 | 
				
			||||
class CaseList extends Component{
 | 
				
			||||
  constructor(props){
 | 
				
			||||
    super(props);
 | 
				
			||||
    this.state={
 | 
				
			||||
      type:0,
 | 
				
			||||
      search:undefined,
 | 
				
			||||
      page:1,
 | 
				
			||||
      pageSize:20,
 | 
				
			||||
      libraries:undefined,
 | 
				
			||||
      totalCount:undefined
 | 
				
			||||
    }
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  componentDidMount = () =>{
 | 
				
			||||
    let { type , search , page , pageSize } = this.state;
 | 
				
			||||
    this.InitList(type,search,page,pageSize);
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  // 列表
 | 
				
			||||
  InitList = (type,search,page,pageSize) =>{
 | 
				
			||||
    let url = `/libraries.json`;
 | 
				
			||||
    axios.get(url,{params:{
 | 
				
			||||
      type:type == 0 ? undefined : "mine",
 | 
				
			||||
      keyword:search,
 | 
				
			||||
      page,
 | 
				
			||||
      per_page:pageSize
 | 
				
			||||
    }}).then((result)=>{
 | 
				
			||||
      if(result){
 | 
				
			||||
        this.setState({
 | 
				
			||||
          libraries:result.data.libraries,
 | 
				
			||||
          totalCount:result.data.count
 | 
				
			||||
        })
 | 
				
			||||
      }
 | 
				
			||||
    }).catch((error)=>{
 | 
				
			||||
      console.log(error);
 | 
				
			||||
    })
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  // tab切换
 | 
				
			||||
  changeType = (type) =>{
 | 
				
			||||
    this.setState({
 | 
				
			||||
      type,
 | 
				
			||||
      page:1
 | 
				
			||||
    })
 | 
				
			||||
    let { search , page , pageSize } = this.state;
 | 
				
			||||
    this.InitList(type,search,page,pageSize);
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  // 输入搜索内容
 | 
				
			||||
  inputStudent=(e)=>{
 | 
				
			||||
    this.setState({
 | 
				
			||||
      search:e.target.value
 | 
				
			||||
    })
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  // 搜索
 | 
				
			||||
  searchInfo = () =>{
 | 
				
			||||
    let { type , search , pageSize } = this.state;
 | 
				
			||||
    this.InitList( type , search , 1 , pageSize );
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  // 切换分页
 | 
				
			||||
  onChangePage =(pageNumber)=>{
 | 
				
			||||
    this.setState({
 | 
				
			||||
      page:pageNumber
 | 
				
			||||
    })
 | 
				
			||||
    let { type , search , pageSize } = this.state;
 | 
				
			||||
    this.InitList( type , search , pageNumber , pageSize );
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  render(){
 | 
				
			||||
    let { type , search ,libraries , totalCount ,pageSize ,page } = this.state;
 | 
				
			||||
    return(
 | 
				
			||||
      <React.Fragment>
 | 
				
			||||
        <img src={mainImg} width="100%" />
 | 
				
			||||
        <div className="educontent">
 | 
				
			||||
          <div className="edu-back-white mb30 mt30">
 | 
				
			||||
            <p className="padding20-30 clearfix bor-bottom-greyE">
 | 
				
			||||
              <span className="font-18 fl color-grey-3">教学案例</span>
 | 
				
			||||
              <ActionBtn style="colorBlue" className="fr" onClick={() => this.addQuestion(null, Q_TYPE_SINGLE)}>发布案例</ActionBtn>
 | 
				
			||||
            </p>
 | 
				
			||||
            <div className="clearfix pl30 pr30">
 | 
				
			||||
              <ul className="fl library_nav mt25">
 | 
				
			||||
                <li className={type == 0 ? "active" :""} onClick={()=>this.changeType(0)}>
 | 
				
			||||
                  <a href="javascript:void(0)">全部</a>
 | 
				
			||||
                </li>
 | 
				
			||||
                <li className={type == 1 ? "active" :""} onClick={()=>this.changeType(1)}>
 | 
				
			||||
                  <a href="javascript:void(0)">我的</a>
 | 
				
			||||
                </li>
 | 
				
			||||
              </ul>
 | 
				
			||||
              <div className="fr mt16 mb16 searchView"style={{width:"300px"}}>
 | 
				
			||||
                <Search
 | 
				
			||||
                  value={search}
 | 
				
			||||
                  placeholder="输入教学案例标题、作者、单位进行检索"
 | 
				
			||||
                  onInput={this.inputStudent}
 | 
				
			||||
                  onSearch={this.searchInfo}
 | 
				
			||||
                ></Search>
 | 
				
			||||
              </div>
 | 
				
			||||
            </div>
 | 
				
			||||
          </div>
 | 
				
			||||
          {
 | 
				
			||||
            libraries && libraries.length > 0 &&  <CaseItem {...this.props} {...this.state} libraries={libraries}></CaseItem>
 | 
				
			||||
          }
 | 
				
			||||
          {
 | 
				
			||||
            libraries && libraries.length == 0 && <div className="mb50"><NoneData></NoneData></div>
 | 
				
			||||
          }
 | 
				
			||||
          {
 | 
				
			||||
            totalCount && totalCount > pageSize &&
 | 
				
			||||
            <div className="mb50 edu-txt-center clearfix">
 | 
				
			||||
              <Pagination defaultCurrent={page} current={page} pageSize={pageSize} showQuickJumper onChange={this.onChangePage} total={totalCount}></Pagination>
 | 
				
			||||
            </div>
 | 
				
			||||
          }
 | 
				
			||||
        </div>
 | 
				
			||||
      </React.Fragment>
 | 
				
			||||
    )
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
export default CaseList
 | 
				
			||||
@ -0,0 +1,26 @@
 | 
				
			||||
import React,{ Component } from "react";
 | 
				
			||||
import './css/moopCases.css'
 | 
				
			||||
import '../courses/css/Courses.css'
 | 
				
			||||
 | 
				
			||||
class CaseTags extends Component{
 | 
				
			||||
  constructor(props){
 | 
				
			||||
    super(props);
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  render(){
 | 
				
			||||
    let { tags } = this.props;
 | 
				
			||||
    return(
 | 
				
			||||
      <React.Fragment>
 | 
				
			||||
        {
 | 
				
			||||
          tags && tags.map((item,key)=>{
 | 
				
			||||
            return(
 | 
				
			||||
              <span key={key} className={item.name == "获奖案例" ? "edu-filter-btn fl cdefault edu-activity-red ml10" : "edu-filter-btn fl cdefault edu-activity-blue ml10"}>{item.name}</span>
 | 
				
			||||
            )
 | 
				
			||||
          })
 | 
				
			||||
        }
 | 
				
			||||
      </React.Fragment>
 | 
				
			||||
      
 | 
				
			||||
    )
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
export default CaseTags;
 | 
				
			||||
@ -0,0 +1,155 @@
 | 
				
			||||
.winput-300-35{
 | 
				
			||||
  width: 300px;
 | 
				
			||||
  height: 35px;
 | 
				
			||||
  padding: 5px;
 | 
				
			||||
  box-sizing: border-box;
 | 
				
			||||
}
 | 
				
			||||
.library_nav li {
 | 
				
			||||
  float: left;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  margin-right: 30px;
 | 
				
			||||
  position: relative;
 | 
				
			||||
  color: #05101A;
 | 
				
			||||
  height: 40px;
 | 
				
			||||
  line-height: 20px;
 | 
				
			||||
  font-size: 16px;
 | 
				
			||||
}
 | 
				
			||||
.library_nav li.active a, .library_nav li:hover a{
 | 
				
			||||
  color: #4cacff!important;
 | 
				
			||||
}
 | 
				
			||||
.library_list {
 | 
				
			||||
  margin-bottom: 30px;
 | 
				
			||||
}
 | 
				
			||||
.library_list_item:hover {
 | 
				
			||||
  box-shadow: 0px 4px 8px rgba(158,158,158,0.16);
 | 
				
			||||
}
 | 
				
			||||
.library_list_item {
 | 
				
			||||
  background: #fff;
 | 
				
			||||
  padding: 20px 30px;
 | 
				
			||||
  margin-bottom: 30px;
 | 
				
			||||
  display: flex;
 | 
				
			||||
}
 | 
				
			||||
.library_list_item .library_l_name {
 | 
				
			||||
  max-width: 600px;
 | 
				
			||||
  float: left;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.edu-activity-red {
 | 
				
			||||
  background-color: #FC2B6A;
 | 
				
			||||
  color: #fff!important;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  border: 1px solid #FC2B6A;
 | 
				
			||||
  line-height: 17px;
 | 
				
			||||
}
 | 
				
			||||
.edu-activity-green {
 | 
				
			||||
  background-color: green;
 | 
				
			||||
  color: #fff!important;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  border: 1px solid green;
 | 
				
			||||
  line-height: 17px;
 | 
				
			||||
}
 | 
				
			||||
.edu-activity-blue {
 | 
				
			||||
  background-color: #4CACFF;
 | 
				
			||||
  color: #fff!important;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  border: 1px solid #4CACFF;
 | 
				
			||||
  line-height: 17px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.pointsBtn {
 | 
				
			||||
  width: 70px;
 | 
				
			||||
  height: 70px;
 | 
				
			||||
  background-color: #4cacff;
 | 
				
			||||
  border-radius: 50%;
 | 
				
			||||
  color: #fff;
 | 
				
			||||
  text-align: center;
 | 
				
			||||
  margin: 0 auto;
 | 
				
			||||
  -webkit-box-sizing: border-box;
 | 
				
			||||
  box-sizing: border-box;
 | 
				
			||||
  padding: 2px 0;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  line-height: 22px;
 | 
				
			||||
  padding-top: 12px;
 | 
				
			||||
}
 | 
				
			||||
.pointedBtn{
 | 
				
			||||
  background: #BCD1E3;
 | 
				
			||||
  cursor: default
 | 
				
			||||
}
 | 
				
			||||
.pointsBtn span{
 | 
				
			||||
  display: block;
 | 
				
			||||
}
 | 
				
			||||
.upload_Title {
 | 
				
			||||
  position: relative;
 | 
				
			||||
  margin-right: 20px;
 | 
				
			||||
  float: left;
 | 
				
			||||
  line-height: 35px;
 | 
				
			||||
  font-size: 16px;
 | 
				
			||||
  width: 56px;
 | 
				
			||||
  color:rgba(0, 0, 0, 0.85);
 | 
				
			||||
  text-align: center
 | 
				
			||||
}
 | 
				
			||||
.upload_Title.must:before {
 | 
				
			||||
  display: inline-block;
 | 
				
			||||
  margin-right: 4px;
 | 
				
			||||
  color: #f5222d;
 | 
				
			||||
  font-size: 14px;
 | 
				
			||||
  font-family: SimSun, sans-serif;
 | 
				
			||||
  line-height: 1;
 | 
				
			||||
  content: '*';
 | 
				
			||||
}
 | 
				
			||||
.upload_Title:after{
 | 
				
			||||
  content: ':';
 | 
				
			||||
  position: relative;
 | 
				
			||||
  top: -0.5px;
 | 
				
			||||
  margin: 0 8px 0 2px;
 | 
				
			||||
}
 | 
				
			||||
.libraries_tab li {
 | 
				
			||||
  width: 120px;
 | 
				
			||||
  height: 35px;
 | 
				
			||||
  line-height: 33px;
 | 
				
			||||
  border-radius: 18px;
 | 
				
			||||
  border: 1px solid #4C98FF;
 | 
				
			||||
  color: #4C98FF;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
  margin-right: 30px;
 | 
				
			||||
  float: left;
 | 
				
			||||
  text-align: center;
 | 
				
			||||
}
 | 
				
			||||
.libraries_tab li.active {
 | 
				
			||||
  background: #4C98FF;
 | 
				
			||||
  color: #fff;
 | 
				
			||||
}
 | 
				
			||||
.librariesField .ant-upload{
 | 
				
			||||
  width: 100%;
 | 
				
			||||
  background: #F2F9FF;
 | 
				
			||||
  justify-content: center;
 | 
				
			||||
  align-items: center;
 | 
				
			||||
  display: -webkit-flex;
 | 
				
			||||
  text-align: center;
 | 
				
			||||
  height: 120px!important;
 | 
				
			||||
  border-radius: 4px;
 | 
				
			||||
  border: 1px dashed #4cacff!important;
 | 
				
			||||
  display: block;
 | 
				
			||||
  cursor: pointer;
 | 
				
			||||
}
 | 
				
			||||
.uploadImage .ant-upload.ant-upload-select-picture-card{
 | 
				
			||||
  width:120px;
 | 
				
			||||
  height: 90px;
 | 
				
			||||
}
 | 
				
			||||
.uploadImage .ant-upload.ant-upload-select-picture-card > .ant-upload{
 | 
				
			||||
  padding:0px!important;
 | 
				
			||||
}
 | 
				
			||||
.successPage {
 | 
				
			||||
  justify-content: center;
 | 
				
			||||
  align-items: center;
 | 
				
			||||
  display: -webkit-flex;
 | 
				
			||||
  height: 570px;
 | 
				
			||||
  text-align: center;
 | 
				
			||||
  margin-bottom: 50px;
 | 
				
			||||
}
 | 
				
			||||
.changebtn {
 | 
				
			||||
  width:166px;
 | 
				
			||||
  font-size: 16px;
 | 
				
			||||
  height: 45px;
 | 
				
			||||
  line-height: 45px;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,130 @@
 | 
				
			||||
import React,{ Component } from "react";
 | 
				
			||||
import './css/moopCases.css'
 | 
				
			||||
import '../courses/css/Courses.css'
 | 
				
			||||
 | 
				
			||||
import { SnackbarHOC } from 'educoder';
 | 
				
			||||
 | 
				
			||||
import { TPMIndexHOC } from '../tpm/TPMIndexHOC';
 | 
				
			||||
import { CNotificationHOC } from '../courses/common/CNotificationHOC'
 | 
				
			||||
 | 
				
			||||
import {BrowserRouter as Router,Route,Switch} from 'react-router-dom';
 | 
				
			||||
import Loading from '../../Loading';
 | 
				
			||||
import Loadable from 'react-loadable';
 | 
				
			||||
 | 
				
			||||
import axios from 'axios';
 | 
				
			||||
 | 
				
			||||
const CaseList = Loadable({
 | 
				
			||||
	loader: () => import('./CaseList'),
 | 
				
			||||
	loading:Loading,
 | 
				
			||||
})
 | 
				
			||||
const CaseDetail = Loadable({
 | 
				
			||||
	loader: () => import('./CaseDetail'),
 | 
				
			||||
	loading:Loading,
 | 
				
			||||
})
 | 
				
			||||
const CaseNew = Loadable({
 | 
				
			||||
	loader: () => import('./CaseNew'),
 | 
				
			||||
	loading:Loading,
 | 
				
			||||
})
 | 
				
			||||
const CaseSuccess = Loadable({
 | 
				
			||||
	loader: () => import('./Success'),
 | 
				
			||||
	loading:Loading,
 | 
				
			||||
})
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class Index extends Component{
 | 
				
			||||
  constructor(props){
 | 
				
			||||
    super(props);
 | 
				
			||||
    this.state={
 | 
				
			||||
      praise_count:0,
 | 
				
			||||
      CaseDetail:undefined,
 | 
				
			||||
      cover:undefined,
 | 
				
			||||
      creator:undefined,
 | 
				
			||||
      operation:undefined,
 | 
				
			||||
      tags:undefined,
 | 
				
			||||
      attachments:undefined,
 | 
				
			||||
      user_praised:true,
 | 
				
			||||
    }
 | 
				
			||||
  }
 | 
				
			||||
  // 获取案例详情
 | 
				
			||||
  getDetail = (caseID) =>{
 | 
				
			||||
    let url=`/libraries/${caseID}.json`
 | 
				
			||||
    axios.get(url).then((result)=>{
 | 
				
			||||
      if(result){
 | 
				
			||||
        this.setState({
 | 
				
			||||
          CaseDetail:result.data,
 | 
				
			||||
          praise_count:result.data.praise_count,
 | 
				
			||||
          cover:result.data.cover,
 | 
				
			||||
          creator:result.data.creator,
 | 
				
			||||
          operation:result.data.operation,
 | 
				
			||||
          user_praised:result.data.operation.user_praised,
 | 
				
			||||
          tags:result.data.tags,
 | 
				
			||||
          attachments:result.data.attachments
 | 
				
			||||
        })
 | 
				
			||||
      }
 | 
				
			||||
    }).catch((error)=>{
 | 
				
			||||
      console.log(error);
 | 
				
			||||
    })
 | 
				
			||||
  }
 | 
				
			||||
  // 点赞
 | 
				
			||||
  praisePoint=(caseID)=>{
 | 
				
			||||
    let { praise_count }=this.state;
 | 
				
			||||
    let url =`/praise_tread/like.json`;
 | 
				
			||||
    axios.post(url,{
 | 
				
			||||
      object_id:caseID,
 | 
				
			||||
      object_type:"library"
 | 
				
			||||
    }).then((result)=>{
 | 
				
			||||
      if(result){
 | 
				
			||||
        this.setState({
 | 
				
			||||
          praise_count: parseInt(praise_count)+1,
 | 
				
			||||
          user_praised:true
 | 
				
			||||
        })
 | 
				
			||||
      }
 | 
				
			||||
    }).catch((error)=>{
 | 
				
			||||
      console.log(error);
 | 
				
			||||
    })    
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  render(){
 | 
				
			||||
    
 | 
				
			||||
    return(
 | 
				
			||||
      <div className="newMain">
 | 
				
			||||
        <Switch {...this.props}>
 | 
				
			||||
 | 
				
			||||
          <Route exact path="/moop_cases"
 | 
				
			||||
            render={
 | 
				
			||||
              (props) => (<CaseList {...this.props} {...props} {...this.state} />)
 | 
				
			||||
            }
 | 
				
			||||
          ></Route>
 | 
				
			||||
          
 | 
				
			||||
          <Route exact path="/moop_cases/new"
 | 
				
			||||
            render={
 | 
				
			||||
              (props) => (<CaseNew {...this.props} {...props} {...this.state} />)
 | 
				
			||||
            }
 | 
				
			||||
          ></Route>
 | 
				
			||||
        
 | 
				
			||||
          <Route exact path="/moop_cases/:caseID"
 | 
				
			||||
            render={
 | 
				
			||||
              (props) => (<CaseDetail {...this.props} {...props} {...this.state} getDetail={this.getDetail} praisePoint ={this.praisePoint}/>)
 | 
				
			||||
            }
 | 
				
			||||
          ></Route>
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
          <Route exact path="/moop_cases/:caseID/edit"
 | 
				
			||||
            render={
 | 
				
			||||
              (props) => (<CaseNew {...this.props} {...props} {...this.state} getDetail={this.getDetail}  />)
 | 
				
			||||
            }
 | 
				
			||||
          ></Route>
 | 
				
			||||
 | 
				
			||||
          <Route exact path="/moop_cases/:caseID/publish_success"
 | 
				
			||||
            render={
 | 
				
			||||
              (props) => (<CaseSuccess {...this.props} {...props} {...this.state} getDetail={this.getDetail}  />)
 | 
				
			||||
            }
 | 
				
			||||
          ></Route>
 | 
				
			||||
 | 
				
			||||
        </Switch>
 | 
				
			||||
      </div>
 | 
				
			||||
    )
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
export default CNotificationHOC() ( SnackbarHOC() ( TPMIndexHOC(Index) ));
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue