You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/developer/components/initTabCtx/index.js

98 lines
2.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* @Description: 自定义测试化用例
* @Author: tangjiang
* @Github:
* @Date: 2019-11-27 19:46:14
* @LastEditors : tangjiang
* @LastEditTime : 2019-12-26 20:07:35
*/
import './index.scss';
import React, { useState, useEffect, useRef, useImperativeHandle, forwardRef } from 'react';
import { Form, Input} from 'antd';
const FormItem = Form.Item;
const { TextArea } = Input;
/**
* @description 初始化测试用例: 当有inputValue值时, 显示表单输入框,否则显示文本提示信息
* @param {*} props
* props: {
* inputValue: '' // 初始值
* onDebuggerCode: func // 点击调试代码执行函数
* }
*/
function InitTabCtx (props, ref) {
// useImperativeHandle // 让子组件只暴露一定的api给父组件
const tabRef = useRef(null);
const { inputValue, onDebuggerCode } = props;
// console.log('default value', inputValue);
useImperativeHandle(ref, () => ({
handleTestCodeFormSubmit: (cb) => {
// console.log('父组件调用我啦~~~~~~~~~');
_handleTestCodeFormSubmit(cb);
}
}));
// useEffect(() => {
// console.log('初始值: ========', props);
// }, [props]);
// 渲染文本提示信息
const renderText = () => (<span className={'ctx_default'}>请在这里添加测试用例点击调试代码时将从这里读取输入来测试你的代码...</span>);
// 渲染表单信息
const renderForm = () => {
const {form: { getFieldDecorator } } = props;
return (
<Form className={'user_case_form'}>
<FormItem
className={'input_area flex_l'}
>
{
getFieldDecorator('input', {
initialValue: inputValue
})(<TextArea
className="input_textarea_style"
rows={8}
placeholder="请填写测试用例的输入值,点击“调试代码”"
/>)
}
</FormItem>
</Form>
)
}
// 初始渲染内容
const [renderCtx, setRenderCtx] = useState(() => {
return function () {
return renderText();
};
});
// 输入值变化时更新渲染内容
useEffect(() => {
setRenderCtx(() => {
return renderForm;
});
}, [inputValue]);
const _handleTestCodeFormSubmit = (cb) => {
const {form} = props;
form.validateFields((err, values) => {
if (!err) { // 表单验证通过时,调用测试接口
cb && cb(); // 调用回调函数,切换 tab
onDebuggerCode && onDebuggerCode(values);
}
});
}
return(
<div ref={tabRef}>
{renderCtx()}
</div>
)
}
export default Form.create()(forwardRef(InitTabCtx));