showDown(item.flag,key,item.isBin)}>
+
+
- {!item.isBin ? :""}
-
- {item.name}
+ {!item.isBin ? showDown(item.flag,key,item.isBin)}>:""}
+ showDown(item.flag,key,item.isBin)}>{item.name}
+ setCopyfileTipTitle("复制文件路径")}
+ >
+ copyFileName(item.name)}>
+
-
-
- +{item.addition}
- -{item.deletion}
-
+
+
0 ? ":":""} ${item.addition > 0 ? item.addition + "处添加" : ""}${item.addition > 0 && item.deletion > 0 ? "和" : ""}${item.deletion > 0 ? item.deletion + "处删除" : ""}`}>
+
+ {item.addition+item.deletion}处
+
+ {
+ !item.isSubmodule &&
+
{history.push(`/${owner}/${projectsId}${item.isDeleted ? `/commits/${truncateCommitId(parentsSha)}`:`/tree/${truncateCommitId(item.sha)}/${item.name}`}`)}}>查看文件
+ }
+
{
item.sections && item.sections.length >= 1 && !item.flag &&
diff --git a/src/forge/Merge/Index.scss b/src/forge/Merge/Index.scss
index 936b868f8..16cc95632 100644
--- a/src/forge/Merge/Index.scss
+++ b/src/forge/Merge/Index.scss
@@ -18,4 +18,86 @@
.pr_tags_closed{
border:1px solid #FA6400;
color: #FA6400;
+}
+.update-file-count{
+ cursor: pointer;
+ & .color-grey-3{
+ font-weight: bold;
+ }
+}
+.fileList{
+ .sc-bxivhb{
+ width: 55rem;
+ overflow: hidden;
+ white-space: normal;
+ word-break: break-all;
+ }
+ .see-file{
+ width: 14rem;
+ .ml10{
+ display: inline-block;
+ width: 4.5rem;
+ cursor: default;
+ }
+ span{
+ width: 7%;
+ }
+ }
+ .anchorPoint{
+ position: relative;
+ top: -5rem;
+ display: block;
+ height: 0;
+ }
+}
+.filesInfo{
+ background: #FAFCFF;
+ border-color:rgba(42, 97, 255, 0.23);
+ .ant-progress-line {
+ width: 5rem;
+ }
+ .ant-progress-inner{
+ background-color: #D14A4A;
+ }
+}
+.folders,.ant-anchor{
+ margin-left: 0;
+ padding-left: 0;
+}
+.folders{
+ position: absolute;
+ z-index: 2;
+ left: 0px;
+ top: 37px;
+ color: #333333;
+ width: 75rem;
+ box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
+ border-radius: 4px;
+ border: 1px solid rgba(153, 153, 153, 0.32);
+ .ant-anchor-link-active > .ant-anchor-link-title {
+ color: #466AFF;
+ }
+ .ant-anchor-link {
+ padding: 0px;
+ }
+ .folderList{
+ max-height: 275px;
+ overflow:auto;
+ .files{
+ border: 0px;
+ }
+ .filesInfo {
+ padding: 10px 18px 10px 15px;
+ height: 55px;
+ background: #FFF;
+ border-bottom: 1px solid #EEEEEE;
+ &:hover{
+ background: #F3F4F6;
+ }
+ .color-green,.color-red{
+ width: 3%;
+ text-align: right;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/forge/Merge/MergeDetail.js b/src/forge/Merge/MergeDetail.js
index 76c31ba0a..11bd3858b 100644
--- a/src/forge/Merge/MergeDetail.js
+++ b/src/forge/Merge/MergeDetail.js
@@ -228,7 +228,7 @@ class MergeDetail extends Component {
{
data && data.issue.user_permission ?
- 编辑
+ 编辑
: ''
}
diff --git a/src/forge/Merge/MergeItem.js b/src/forge/Merge/MergeItem.js
index 884c50feb..61477c142 100644
--- a/src/forge/Merge/MergeItem.js
+++ b/src/forge/Merge/MergeItem.js
@@ -62,9 +62,9 @@ class MergeItem extends Component {
{item.name}
@@ -110,7 +110,7 @@ class MergeItem extends Component {
{item.is_original
? item.fork_project_user
@@ -134,7 +134,7 @@ class MergeItem extends Component {
{/* {item.is_fork ? item.pull_request_base : `${item.author_name}:${item.pull_request_base}`} */}
{project_author_name}:{item.pull_request_base}
@@ -175,7 +175,7 @@ class MergeItem extends Component {
{item.journals_count ? (
{item.journals_count}
@@ -196,7 +196,7 @@ class MergeItem extends Component {
>
diff --git a/src/forge/Merge/MergeLinkFooter.jsx b/src/forge/Merge/MergeLinkFooter.jsx
new file mode 100644
index 000000000..2c9aa4814
--- /dev/null
+++ b/src/forge/Merge/MergeLinkFooter.jsx
@@ -0,0 +1,210 @@
+import React, { Component } from 'react';
+import { Tabs, Spin } from 'antd';
+import { Link } from 'react-router-dom';
+import axios from 'axios';
+
+import Commits from './Commits';
+import Comments from '../comments/comments';
+import Files from './Files';
+
+import '../Order/order.css';
+import './merge.css';
+
+const { TabPane } = Tabs;
+
+class MergeFooter extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ commitsData: [],
+ filesData: undefined,
+ isSpin: false,
+ activeKey: '1',
+ commitCount: 0,
+ filesCount: 0,
+ // 总评论数量,包含回复
+ commentsTotalCount: 0,
+ };
+ }
+ componentDidMount() {
+ this.Init();
+ // 为父组件绑定当前,以方便调用方法
+ this.props.bindFootRef && this.props.bindFootRef(this);
+ }
+
+ componentDidUpdate(prevProps) {
+ // 解决切换tab后浏览器回退不刷新的问题、点击tab后url变化但tab未切换的问题
+ const newPathname = this.props.location.pathname;
+ const prevPathname = prevProps.location.pathname;
+ if (newPathname !== prevPathname) {
+ this.Init(true);
+ }
+ }
+
+ Init = (isTabChange) => {
+ const { data, location, match } = this.props;
+ const { pathname } = location;
+ const { projectsId, owner, mergeId } = match.params;
+
+ let activeKey = '1';
+ if (pathname.indexOf('commits') > -1) {
+ activeKey = '2';
+ this.getCommit(owner, projectsId, mergeId);
+ } else if (pathname.indexOf('files') > -1) {
+ activeKey = '3';
+ this.getFile(owner, projectsId, mergeId);
+ }
+ if (isTabChange && activeKey === '1') {
+ this.refreshComment();
+ }
+ this.setState({
+ activeKey: activeKey,
+ commitCount: data && data.commits_count,
+ filesCount: data && data.files_count,
+ });
+ };
+
+ bindCommentRef = (commentRef) => {
+ this.childComment = commentRef;
+ }
+
+ refreshComment = () => {
+ this.childComment && this.childComment.getjournalslist();
+ }
+
+ getCommit = (owner, projectsId, mergeId) => {
+ this.setState({ isSpin: true });
+ const url = `/${owner}/${projectsId}/pulls/${mergeId}/commits.json`;
+ axios
+ .get(url)
+ .then((result) => {
+ if (result) {
+ this.setState({
+ commitsData: result.data.commits,
+ commitCount: result.data.commits_count,
+ });
+ }
+ this.setState({ isSpin: false });
+ })
+ .catch((error) => {
+ this.setState({ isSpin: false });
+ });
+ };
+
+ getFile = (owner, projectsId, mergeId) => {
+ this.setState({ isSpin: true });
+ const url = `/${owner}/${projectsId}/pulls/${mergeId}/files.json`;
+ axios
+ .get(url)
+ .then((result) => {
+ if (result) {
+ this.setState({
+ filesData: result.data,
+ filesCount: result.data.files_count,
+ });
+ }
+ this.setState({ isSpin: false });
+ })
+ .catch((error) => {
+ this.setState({ isSpin: false });
+ });
+ };
+
+ render() {
+ const { projectsId, owner, mergeId } = this.props.match.params;
+
+ const { order_id, data = {} } = this.props;
+ const {
+ isSpin,
+ activeKey,
+ filesCount,
+ commitCount,
+ filesData,
+ commitsData = [],
+ } = this.state;
+
+ // 评论数量优先取Comment组件中列表接口返回的,其次取合并请求详情接口中的,都没有取默认值0
+ const commentsTotalCount = parseInt(
+ this.state.commentsTotalCount || data.comments_total_count || 0,
+ 10
+ );
+
+ return (
+
+
+
+
+ 评论
+ {commentsTotalCount > 0 && (
+ {commentsTotalCount}
+ )}
+
+ }
+ key="1"
+ >
+ {
+ this.setState({ commentsTotalCount: commentsCount || 0 });
+ }}
+ {...this.props}
+ bindCommentRef={this.bindCommentRef}
+ />
+
+ {commitCount > 0 && (
+
+ 提交
+ {commitCount > 0 && (
+ {commitCount}
+ )}
+
+ }
+ key="2"
+ >
+ {commitsData.length > 0 && (
+
+ )}
+
+ )}
+ {filesCount > 0 && (
+
+ 文件
+ {filesCount > 0 && (
+ {filesCount}
+ )}
+
+ }
+ key="3"
+ >
+
+
+ )}
+
+
+
+ );
+ }
+}
+export default MergeFooter;
diff --git a/src/forge/Merge/MessageCount.js b/src/forge/Merge/MessageCount.js
index b064e3c2f..6d01e8a37 100644
--- a/src/forge/Merge/MessageCount.js
+++ b/src/forge/Merge/MessageCount.js
@@ -1,7 +1,6 @@
import React, { Component } from "react";
import { Tabs } from 'antd';
import { Link } from "react-router-dom";
-import { AlignCenter } from '../Component/layout';
import axios from "axios";
import { getImageUrl } from "educoder";
import {
@@ -11,7 +10,6 @@ import {
Dropdown,
Icon,
Menu,
- Select,
Tag,
Button,
Alert,
@@ -19,9 +17,8 @@ import {
import "./merge.css";
import RenderHtml from "../../components/render-html";
import "../Order/order.css";
-import MergeFooter from "./merge_footer";
+import MergeLinkFooter from "./MergeLinkFooter";
-const Option = Select.Option;
const TextArea = Input.TextArea;
function turnbar(str){
@@ -61,6 +58,11 @@ class MessageCount extends Component {
// this.clickBody();
};
+
+ bindFootRef = (footRef) => {
+ this.footRef = footRef;
+ }
+
clickBody=()=>{
document.body.addEventListener('click', e => {
let name = e.target.className;
@@ -150,6 +152,8 @@ class MessageCount extends Component {
});
const { getDetail } = this.props;
getDetail && getDetail();
+ // 调用子组件的方法刷新评论列表
+ this.footRef && this.footRef.refreshComment();
} else {
this.setState({ SpinMerge: false });
}
@@ -283,13 +287,13 @@ class MessageCount extends Component {
conflict_files && conflict_files.length>0 &&
如下文件有代码冲突:
-
+
{
conflict_files.map((i,k)=>{
- return
{i}
+ return
{i}
})
}
-
+
}
@@ -336,11 +340,11 @@ class MessageCount extends Component {
-
-
+
+
-
+
{data.issue.subject}
@@ -362,9 +366,9 @@ class MessageCount extends Component {
- {data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}: {turnbar(data.pull_request && data.pull_request.head)}
+ {data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}: {data.pull_request && data.pull_request.head}
@@ -377,7 +381,7 @@ class MessageCount extends Component {
{data.issue.project_author_name}:{data.pull_request.base}
@@ -441,14 +445,13 @@ class MessageCount extends Component {
-
-
+
{operate && (
@@ -465,7 +468,6 @@ class MessageCount extends Component {
)}
-
{
data.issue.description ?
@@ -543,7 +545,7 @@ class MessageCount extends Component {
onChange={this.changbodypr}
/>
-
@@ -558,19 +560,19 @@ class MessageCount extends Component {
取消
-
+
)}
-
+ bindFootRef={this.bindFootRef}
+ >
) : (
""
diff --git a/src/forge/Merge/NewMerge.js b/src/forge/Merge/NewMerge.js
index 7d33028d3..900dea824 100644
--- a/src/forge/Merge/NewMerge.js
+++ b/src/forge/Merge/NewMerge.js
@@ -6,6 +6,11 @@ import "./merge.css";
import MergeForm from "./merge_form";
import MergeFooter from "./merge_footer";
const Option = Select.Option;
+/**
+ * 此文件已废弃,新文件为CreateMerge.js
+ * 2021.10.12
+ */
+
class NewMerge extends Component {
constructor(props) {
super(props);
@@ -110,6 +115,7 @@ class NewMerge extends Component {
const { author , identifier } =oldProject;
url += `/${mergeBranch}...${author && author.login}/${identifier}:${localBranch}.json`;
}
+ this.setState({isSpin: true});
axios.get(url).then(result=>{
if(result){
if (result.data.status === 0) {
@@ -128,7 +134,9 @@ class NewMerge extends Component {
comparesData:result.data
})
}
- }).catch(error=>{})
+ }).catch(error=>{
+ this.setState({isSpin: false});
+ })
}
}
@@ -191,7 +199,7 @@ class NewMerge extends Component {
// this.ischeckmerge();
let { id ,merge , pull } = this.state;
if(type==="pull"){
- this.props.history.push(`/${owner}/${projectsId}/pulls/new/${pull}`)
+ this.props.history.push(`/${owner}/${projectsId}/compare/${pull}`)
this.compareProject(id,value,merge);
}else{
this.compareProject(id,pull,value);
@@ -213,7 +221,7 @@ class NewMerge extends Component {
merge_user_login: is_fork_id ? projects_names[0].project_user_login : undefined
}
})
- this.props.history.push(`/${login}/${identifier}/pulls/new`);
+ this.props.history.push(`/${login}/${identifier}/compare`);
this.newMergelist(login,identifier);
};
diff --git a/src/forge/Merge/UpdateMerge.js b/src/forge/Merge/UpdateMerge.js
index 8ed8034af..8918db6eb 100644
--- a/src/forge/Merge/UpdateMerge.js
+++ b/src/forge/Merge/UpdateMerge.js
@@ -64,12 +64,12 @@ class UpdateMerge extends Component {
源分支:
- {" "}
@@ -83,12 +83,12 @@ class UpdateMerge extends Component {
目标分支 :
{" "}
-
+
{`${data.project_author}/${data.project_name}`}
{" "}
{" "}
diff --git a/src/forge/Merge/merge.css b/src/forge/Merge/merge.css
index 6b50eeb10..d61543b49 100644
--- a/src/forge/Merge/merge.css
+++ b/src/forge/Merge/merge.css
@@ -40,6 +40,7 @@ form .ant-cascader-picker, form .ant-select {
}
.merge-header-button{
background:rgba(241,248,255,1);
+ text-align: left;
}
.width70{
width:70%;
@@ -152,13 +153,23 @@ form .ant-cascader-picker, form .ant-select {
margin-top: 15px;
border-radius: 2px;
}
+.see-file-btn{
+ color: #466AFF;
+ cursor: pointer;
+}
.filesInfo{
padding:10px 15px;
background-color: #fafafa;
}
+.filesInfo .cursor-pointer{
+ cursor: pointer;
+}
.filesContent{
border-top: 1px solid #ddd;
}
+.icon-fuzhiicon:hover{
+ color: #466AFF;
+}
.linesContent{
display: flex;
min-height: 30px;
@@ -198,4 +209,17 @@ form .ant-cascader-picker, form .ant-select {
}
.linesContent.add{
background: rgba(48, 232, 132, 0.15);
-}
\ No newline at end of file
+}
+
+.mergeRequest .folders{
+ /* width: 72rem; */
+ width: 100%;
+ }
+
+ .matchwidth .ant-select-selection__rendered{
+ width: 200px;
+ }
+ .overlihide li{
+ max-width: 450px;
+
+ }
\ No newline at end of file
diff --git a/src/forge/Merge/merge.js b/src/forge/Merge/merge.js
index 399c9bd91..8a0eaedea 100644
--- a/src/forge/Merge/merge.js
+++ b/src/forge/Merge/merge.js
@@ -213,7 +213,7 @@ class merge extends Component {
checkOperation() {
const { projectsId,owner } = this.props.match.params;
- this.props.history.push(`/${owner}/${projectsId}/pulls/new`);
+ this.props.history.push(`/${owner}/${projectsId}/compare/master...master`);
}
render() {
const { projectsId , owner } = this.props.match.params;
diff --git a/src/forge/Merge/merge_footer.js b/src/forge/Merge/merge_footer.js
index 6502827cd..868e736fe 100644
--- a/src/forge/Merge/merge_footer.js
+++ b/src/forge/Merge/merge_footer.js
@@ -1,169 +1,84 @@
-import React, { Component } from "react";
-import { Tabs, Spin } from "antd";
-import "../Order/order.css";
-import "./merge.css";
-import Commits from "./Commits";
-import Comments from "../comments/comments";
-import Files from "./Files";
-import axios from 'axios';
+import React, { Component } from 'react';
+import { Tabs } from 'antd';
+import Commits from './Commits';
+import Files from './Files';
+
+import '../Order/order.css';
+import './merge.css';
+
const { TabPane } = Tabs;
class MergeFooter extends Component {
- constructor(props){
+ constructor(props) {
super(props);
- this.state={
- pageData:undefined,
- commitsData:undefined,
- filesData:undefined,
- isSpin:false,
- activeKey:"1",
- commitCount:0,
- filesCount:0
- }
- }
- componentDidMount=()=>{
- const { footer_type ,data } = this.props;
- if(footer_type){
- const { projectsId , owner , mergeId } = this.props.match.params;
- this.getCommit(owner,projectsId,mergeId);
- this.getFile(owner,projectsId,mergeId);
- }
- this.setState({
- activeKey:footer_type ? "1" : "2",
- commitCount:data && data.commits_count,
- filesCount:data && data.files_count
- })
- }
- componentDidUpdate=(prevProps)=>{
- const { comparesData } = this.props;
- const { footer_type } = this.props;
- if(footer_type){
- const { data } = this.props;
- if(data !== prevProps.data){
- this.setState({
- commitCount:data && data.commits_count,
- filesCount:data && data.files_count
- })
- }
- }
- if(comparesData !== prevProps.comparesData){
- this.setState({
- activeKey:footer_type ? "1" : "2"
- })
- this.changeTab(footer_type ? "1" : "2");
- }
+ this.state = {
+ activeKey: '1',
+ };
}
- changeTab=(index)=>{
+ changeTab = (index) => {
this.setState({
- isSpin:true
- })
- this.setState({
- activeKey:index
- })
- const { footer_type , comparesData } = this.props;
- const { projectsId , owner , mergeId } = this.props.match.params;
-
- if(footer_type){
- if(index === "2"){
- this.getCommit(owner,projectsId,mergeId);
- }else if(index === "3"){
- this.getFile(owner,projectsId,mergeId);
- }else{
- this.setState({
- isSpin:false
- })
- }
- }else{
- this.setState({
- commitsData:comparesData.commits,
- filesData:comparesData.diff,
- commitCount:comparesData.commits_count,
- filesCount:comparesData.diff && comparesData.diff.files_count,
- isSpin:false
- })
- }
- }
-
- getCommit =(owner,projectsId,mergeId)=>{
- const url = `/${owner}/${projectsId}/pulls/${mergeId}/commits.json`;
- axios.get(url).then(result=>{
- if(result){
- this.setState({
- commitsData:result.data.commits,
- isSpin:false,
- commitCount:result.data.commits_count
- })
- }
- }).catch(error=>{})
- }
-
- getFile =(owner,projectsId,mergeId)=>{
- const url = `/${owner}/${projectsId}/pulls/${mergeId}/files.json`;
- axios.get(url).then(result=>{
- if(result){
- this.setState({
- filesData:result.data,
- isSpin:false,
- filesCount:result.data.files_count,
- })
- }
- }).catch(error=>{})
- }
+ activeKey: index,
+ });
+ };
render() {
- const { projectsId , owner } = this.props.match.params;
+ const { projectsId, owner } = this.props.match.params;
+ const { comparesData = {} } = this.props;
+ const { commits, diff, commits_count } = comparesData;
+ const { activeKey } = this.state;
- const { footer_type, order_id, data , comparesData } = this.props;
- let { isSpin , activeKey , filesCount, commitCount , filesData , commitsData } = this.state;
-
- return (
- !footer_type && !comparesData || (comparesData && ((comparesData.commits && comparesData.commits.length===0)||(comparesData && !comparesData.diff)) )?"":
-
-
-
- {
- footer_type &&
- 评论
- {data && parseInt(data.comments_count) > 0 && {data.comments_count}}
-
- } key="1">
-
-
- }
- {
- commitsData && commitsData.length > 0 &&
- 提交
- {commitCount > 0 && {commitCount}}
- } key="2">
-
-
- }
- {
- filesData && filesData.files && filesData.files.length>0 &&
- 文件
- {filesCount > 0 && {filesCount}}
-
- } key="3">
-
-
- }
-
-
-
+ return (commits && commits.length === 0) || !diff ? (
+ ''
+ ) : (
+
+
+ {commits && commits.length > 0 && (
+
+ 提交
+ {commits_count > 0 && (
+ {commits_count}
+ )}
+
+ }
+ key="1"
+ >
+
+
+ )}
+ {diff && diff.files && diff.files.length > 0 && (
+
+ 文件
+ {diff.files_count > 0 && (
+ {diff.files_count}
+ )}
+
+ }
+ key="3"
+ >
+
+
+ )}
+
);
}
diff --git a/src/forge/Merge/merge_form.js b/src/forge/Merge/merge_form.js
index 5df9794bb..e63781391 100644
--- a/src/forge/Merge/merge_form.js
+++ b/src/forge/Merge/merge_form.js
@@ -165,7 +165,8 @@ class MergeForm extends Component {
this.setState({
isSpin: false,
});
- this.props.history.push(`/${owner}/${projectsId}/pulls`);
+ const { pull_request_id } = result.data;
+ this.props.history.push(`/${owner}/${projectsId}/pulls/${pull_request_id}`);
const { getDetail } = this.props;
getDetail && getDetail();
} else {
@@ -195,7 +196,7 @@ class MergeForm extends Component {
isSpin: false,
});
this.props.history.push(
- `/${owner}/${projectsId}/pulls/${mergeId}/Messagecount`
+ `/${owner}/${projectsId}/pulls/${mergeId}`
);
} else {
this.setState({
@@ -264,7 +265,7 @@ class MergeForm extends Component {
},
],
initialValue: title,
- })(
)}
+ })(
)}
{
- this.props.history.push(merge_type === "new" ? `/${owner}/${projectsId}/pulls` : `/${owner}/${projectsId}/pulls/${mergeId}/detail`)
+ this.props.history.push(merge_type === "new" ? `/${owner}/${projectsId}/pulls` : `/${owner}/${projectsId}/pulls/${mergeId}`)
}}
>
取消
diff --git a/src/forge/Merge/no_data.js b/src/forge/Merge/no_data.js
index d5584797f..d5e4ca89b 100644
--- a/src/forge/Merge/no_data.js
+++ b/src/forge/Merge/no_data.js
@@ -12,7 +12,7 @@ class Nodata extends Component{
欢迎使用合并请求!
- 合并请求可以帮助您与他人协作编写代码。在使用之前,请先创建一个 合并请求
+ 合并请求可以帮助您与他人协作编写代码。在使用之前,请先创建一个 合并请求
diff --git a/src/forge/New/Index.js b/src/forge/New/Index.js
index c6eb2c3d5..e9aa1f952 100644
--- a/src/forge/New/Index.js
+++ b/src/forge/New/Index.js
@@ -285,12 +285,16 @@ class Index extends Component {
if(value.indexOf("/") > -1){
let arr = value.split("/");
let first = arr[arr.length-1];
- if(first.indexOf(".git") > -1){
+ if(first.indexOf(".") > -1){
let second = first.split('.')[0];
if(!second)return;
this.props.form.setFieldsValue({
repository_name:second
})
+ }else{
+ this.props.form.setFieldsValue({
+ repository_name:first
+ })
}
}
}
@@ -351,7 +355,7 @@ class Index extends Component {
required: true, message: '请填写镜像版本库地址'
}],
})(
-
+
)}
示例:https://github.com/facebook/reack.git
diff --git a/src/forge/Newfile/Index.js b/src/forge/Newfile/Index.js
index 9b7769552..953f50720 100644
--- a/src/forge/Newfile/Index.js
+++ b/src/forge/Newfile/Index.js
@@ -65,16 +65,18 @@ class Index extends Component {