forked from Gitlink/forgeplus-react
167 lines
4.6 KiB
JavaScript
167 lines
4.6 KiB
JavaScript
import React , { useImperativeHandle , useState , forwardRef , useCallback } from 'react';
|
||
import { Form , Modal , Input , Select , Spin } from 'antd';
|
||
import Editor from './Dispose/Editors';
|
||
import axios from 'axios';
|
||
|
||
const { Option } = Select;
|
||
const TYPE = ["Java","C","C++","Python","Go","Ruby","R","PHP",
|
||
"Perl","Node","Docker","Rust","Swift","Erlang","Other"]
|
||
|
||
function MouldNew({ form , visible , onCancel , onOk }, ref){
|
||
const [value , setValue ] = useState(undefined);
|
||
const [isSpin , setIsSpin ] = useState(false);
|
||
const [valueFlag , setValueFlag ] = useState(false);
|
||
const [ id , setId ] = useState(false);
|
||
const [ buildFlag , setBuildFlag ] = useState(false);
|
||
|
||
const { getFieldDecorator, validateFields , setFieldsValue } = form;
|
||
|
||
useImperativeHandle(ref, () => ({
|
||
setEditInfo: (info) => {
|
||
if(info){
|
||
setFieldsValue({
|
||
...info
|
||
})
|
||
if(info.stage_type === "build"){
|
||
setBuildFlag(true);
|
||
setFieldsValue({
|
||
category:TYPE[0]
|
||
})
|
||
}else{
|
||
removeCate();
|
||
}
|
||
setValue(info.content);
|
||
setId(info.id);
|
||
}else{
|
||
removeCate();
|
||
clear();
|
||
setId(undefined);
|
||
}
|
||
}
|
||
}))
|
||
|
||
const helper = useCallback(
|
||
(label, name, rules, widget, className, isRequired,flag) => (
|
||
<Form.Item label={label} className={className}>
|
||
{getFieldDecorator(name, { rules, validateFirst: true , valuePropName:flag ? "checked":"value" })(widget)}
|
||
</Form.Item>
|
||
),
|
||
[]
|
||
);
|
||
function changeContent(v){
|
||
if(v){
|
||
setValue(v);
|
||
setValueFlag(false);
|
||
}
|
||
}
|
||
function cancel(){
|
||
clear();
|
||
onCancel();
|
||
}
|
||
function sure(){
|
||
if(!value){
|
||
setValueFlag(true);
|
||
return;
|
||
}
|
||
validateFields((error,values)=>{
|
||
if(!error){
|
||
setIsSpin(true);
|
||
const url = `/ci/templates.json`;
|
||
axios.post(url,{
|
||
...values,id,content:value,category:buildFlag ? values.category:""
|
||
}).then(result=>{
|
||
if(result && result.data){
|
||
setIsSpin(false);
|
||
cancel();
|
||
onOk();
|
||
}
|
||
}).catch(error=>{})
|
||
}
|
||
})
|
||
}
|
||
function clear(){
|
||
setFieldsValue({
|
||
stage_type:"init",
|
||
template_name:undefined,
|
||
category:"Java",
|
||
})
|
||
setValue("");
|
||
setValueFlag(false);
|
||
}
|
||
|
||
function changeStage(e){
|
||
if(e === "build"){
|
||
setBuildFlag(true);
|
||
setFieldsValue({
|
||
category:TYPE[0]
|
||
})
|
||
}else{
|
||
removeCate();
|
||
}
|
||
}
|
||
|
||
function removeCate(){
|
||
setBuildFlag(false);
|
||
setFieldsValue({
|
||
category:""
|
||
})
|
||
}
|
||
return(
|
||
<Modal
|
||
visible={visible}
|
||
width="500px"
|
||
title={"新建/编辑模板"}
|
||
onCancel={cancel}
|
||
onOk={sure}
|
||
centered={true}
|
||
>
|
||
<Spin spinning={isSpin}>
|
||
<Form layout={"inline"}>
|
||
{helper(
|
||
"所属阶段",
|
||
"stage_type",
|
||
[{required:true,message:"请选择所属阶段"}],
|
||
<Select placeholder="请选择所属阶段" style={{width:"350px"}} onChange={(e)=>{changeStage(e)}}>
|
||
<Option value="init">初始化</Option>
|
||
<Option value="build">编译构建</Option>
|
||
<Option value="deploy">部署</Option>
|
||
<Option value="customize">其他</Option>
|
||
</Select>
|
||
)}
|
||
{helper(
|
||
"模板名称",
|
||
"template_name",
|
||
[{required:true,message:"请输入模板名称"}],
|
||
<Input placeholder="请输入模板名称" style={{width:"350px"}}/>
|
||
)}
|
||
{helper(
|
||
"模板分类",
|
||
"category",
|
||
[{required:buildFlag,message:"请选择模板分类"}],
|
||
<Select placeholder="请选择模板分类" style={{width:"350px"}}>
|
||
{
|
||
TYPE.map((item,key)=>{
|
||
return(
|
||
<Option value={item}>{item}</Option>
|
||
)
|
||
})
|
||
}
|
||
</Select>,buildFlag===true ? "" :"hide"
|
||
)}
|
||
<div style={{display:'flex',justifyContent:"flex-start"}}>
|
||
<span><span className="color-red">* </span>模板内容:</span>
|
||
<div>
|
||
<div className="editorPanel">
|
||
<Editor Numbers={"off"} width={"350px"} value={value} height="200px" theme="vs-grey" onChange={changeContent}/>
|
||
</div>
|
||
{ valueFlag && <span className="color-red">请输入模板内容</span>}
|
||
</div>
|
||
</div>
|
||
</Form>
|
||
</Spin>
|
||
</Modal>
|
||
)
|
||
}
|
||
export default Form.create()(forwardRef(MouldNew));
|
||
|