import React, { KeyboardEvent } from 'react'; import { Field, FieldConfig, FieldError, IField } from '../common'; /** * code编辑器配置项 * - codeType: 语言类型 * - height: 代码编辑器高度 * - theme: 编辑器主题风格 * - fullScreen: 是否支持全屏 * - maxLength: 最大字符长度 * - minLength: 最小字符长度 * - cjkLength: 中文占字符数 * - regExp: 正则校验配置 */ export interface CodeFieldConfig extends FieldConfig { type: 'code'; codeType: 'xml' | 'json' | 'javascript' | 'java'; height: number; theme: 'white' | 'black'; fullScreen: boolean; maxLength?: number; minLength?: number; cjkLength?: number; regExp?: { expression: string; message?: string; }; } export interface ICodeField { codeType: 'xml' | 'json' | 'javascript' | 'java'; fullScreenStatus: boolean; height: number; theme: 'white' | 'black'; value: string; onChange: (value: string) => Promise; } /** * code编辑器配置项 * - codeType: 语言类型 * - height: 代码编辑器高度 * - onResetValue: 编辑器重置为默认值 * - fullScreen: 是否支持全屏 * - fullScreenStatus: 编辑器是不是处于全屏状态 */ export interface ICodeFieldContainer { fullScreen: boolean; fullScreenStatus: boolean; theme: 'white' | 'black'; children: React.ReactNode; onResetValue: (value: string) => Promise; keydownCallback: (value: KeyboardEvent) => Promise; enterFull: () => void; exitFull: () => void; } interface State { fullScreenStatus: boolean; } export default class CodeField extends Field implements IField { state: State; reset: () => Promise; validate: (value: string) => Promise; keydownCallback: (e: KeyboardEvent) => void; enterFull: () => void; exitFull: () => void; renderContainer: (props: ICodeFieldContainer) => JSX.Element; renderComponent: (props: ICodeField) => JSX.Element; render: () => JSX.Element; } export {};