amis 1.9.0 → 1.9.1-beta.3
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/RootRenderer.js +10 -2
- package/lib/RootRenderer.js.map +2 -2
- package/lib/Schema.d.ts +3 -2
- package/lib/Schema.js.map +1 -1
- package/lib/actions/Action.d.ts +1 -0
- package/lib/actions/Action.js +7 -6
- package/lib/actions/Action.js.map +2 -2
- package/lib/components/Button.d.ts +11 -10
- package/lib/components/Button.js +2 -2
- package/lib/components/Button.js.map +2 -2
- package/lib/components/CalendarMobile.d.ts +40 -40
- package/lib/components/Checkbox.js +1 -1
- package/lib/components/Checkbox.js.map +2 -2
- package/lib/components/ContextMenu.d.ts +4 -0
- package/lib/components/ContextMenu.js +23 -7
- package/lib/components/ContextMenu.js.map +2 -2
- package/lib/components/DatePicker.d.ts +40 -40
- package/lib/components/DateRangePicker.d.ts +40 -40
- package/lib/components/Form.d.ts +22 -0
- package/lib/components/Form.js +44 -0
- package/lib/components/Form.js.map +13 -0
- package/lib/components/FormField.d.ts +65 -0
- package/lib/components/FormField.js +48 -0
- package/lib/components/FormField.js.map +13 -0
- package/lib/components/InputBox.d.ts +10 -10
- package/lib/components/InputBox.js +4 -3
- package/lib/components/InputBox.js.map +2 -2
- package/lib/components/InputBoxWithSuggestion.d.ts +280 -0
- package/lib/components/InputBoxWithSuggestion.js +65 -0
- package/lib/components/InputBoxWithSuggestion.js.map +13 -0
- package/lib/components/ListGroup.d.ts +10 -10
- package/lib/components/PickerContainer.d.ts +4 -2
- package/lib/components/PickerContainer.js +28 -5
- package/lib/components/PickerContainer.js.map +2 -2
- package/lib/components/Radios.d.ts +10 -10
- package/lib/components/ResultBox.d.ts +40 -40
- package/lib/components/Select.d.ts +195 -202
- package/lib/components/Select.js +7 -3
- package/lib/components/Select.js.map +2 -2
- package/lib/components/Textarea.d.ts +568 -2
- package/lib/components/Textarea.js +129 -1
- package/lib/components/Textarea.js.map +2 -2
- package/lib/components/Toast.js +11 -9
- package/lib/components/Toast.js.map +2 -2
- package/lib/components/UserSelect.d.ts +500 -0
- package/lib/components/UserSelect.js +559 -0
- package/lib/components/UserSelect.js.map +13 -0
- package/lib/components/UserTabSelect.d.ts +320 -0
- package/lib/components/UserTabSelect.js +163 -0
- package/lib/components/UserTabSelect.js.map +13 -0
- package/lib/components/WithRemoteConfig.d.ts +7 -0
- package/lib/components/WithRemoteConfig.js +17 -11
- package/lib/components/WithRemoteConfig.js.map +2 -2
- package/lib/components/calendar/DaysView.d.ts +26 -1
- package/lib/components/calendar/DaysView.js +60 -19
- package/lib/components/calendar/DaysView.js.map +2 -2
- package/lib/components/calendar/TimeView.d.ts +1 -1
- package/lib/components/calendar/TimeView.js +10 -3
- package/lib/components/calendar/TimeView.js.map +2 -2
- package/lib/components/formula/Picker.js +4 -4
- package/lib/components/formula/Picker.js.map +2 -2
- package/lib/components/icons.d.ts +7 -1
- package/lib/components/icons.js +17 -1
- package/lib/components/icons.js.map +2 -2
- package/lib/components/index.d.ts +2 -1
- package/lib/components/index.js +3 -1
- package/lib/components/index.js.map +2 -2
- package/lib/components/json-schema/Array.d.ts +3 -0
- package/lib/components/json-schema/Array.js +125 -0
- package/lib/components/json-schema/Array.js.map +13 -0
- package/lib/components/json-schema/Item.d.ts +3 -0
- package/lib/components/json-schema/Item.js +34 -0
- package/lib/components/json-schema/Item.js.map +13 -0
- package/lib/components/json-schema/Object.d.ts +3 -0
- package/lib/components/json-schema/Object.js +178 -0
- package/lib/components/json-schema/Object.js.map +13 -0
- package/lib/components/json-schema/index.d.ts +279 -0
- package/lib/components/json-schema/index.js +16 -0
- package/lib/components/json-schema/index.js.map +13 -0
- package/lib/components/schema-editor/Array.js +2 -2
- package/lib/components/schema-editor/Array.js.map +2 -2
- package/lib/components/schema-editor/Common.d.ts +2 -0
- package/lib/components/schema-editor/Common.js +39 -3
- package/lib/components/schema-editor/Common.js.map +2 -2
- package/lib/components/schema-editor/Object.js +2 -2
- package/lib/components/schema-editor/Object.js.map +2 -2
- package/lib/components/schema-editor/index.d.ts +45 -41
- package/lib/components/schema-editor/index.js +5 -5
- package/lib/components/schema-editor/index.js.map +2 -2
- package/lib/helper.css +125 -124
- package/lib/helper.css.map +1 -1
- package/lib/hooks/use-validation-resolver.d.ts +1 -0
- package/lib/hooks/use-validation-resolver.js +49 -0
- package/lib/hooks/use-validation-resolver.js.map +13 -0
- package/lib/icons/department.js +17 -0
- package/lib/icons/menu.js +9 -0
- package/lib/icons/post.js +15 -0
- package/lib/icons/role.js +14 -0
- package/lib/icons/user-remove.js +12 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +2 -2
- package/lib/locale/de-DE.js +11 -1
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +12 -1
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +14 -3
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.js +25 -11
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/CRUD.js +5 -1
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Dialog.js +9 -3
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/Drawer.js +5 -1
- package/lib/renderers/Drawer.js.map +2 -2
- package/lib/renderers/Form/InputDate.d.ts +2 -2
- package/lib/renderers/Form/InputDate.js.map +2 -2
- package/lib/renderers/Form/InputFile.js +5 -12
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputText.d.ts +1 -1
- package/lib/renderers/Form/InputText.js.map +1 -1
- package/lib/renderers/Form/JSONSchema.d.ts +23 -0
- package/lib/renderers/Form/JSONSchema.js +44 -0
- package/lib/renderers/Form/JSONSchema.js.map +13 -0
- package/lib/renderers/Form/JSONSchemaEditor.d.ts +2 -3
- package/lib/renderers/Form/JSONSchemaEditor.js +9 -24
- package/lib/renderers/Form/JSONSchemaEditor.js.map +2 -2
- package/lib/renderers/Form/Textarea.d.ts +1 -8
- package/lib/renderers/Form/Textarea.js +11 -75
- package/lib/renderers/Form/Textarea.js.map +2 -2
- package/lib/renderers/Form/UserSelect.d.ts +54 -0
- package/lib/renderers/Form/UserSelect.js +197 -0
- package/lib/renderers/Form/UserSelect.js.map +13 -0
- package/lib/renderers/Form/index.d.ts +1 -1
- package/lib/renderers/Form/index.js +88 -42
- package/lib/renderers/Form/index.js.map +2 -2
- package/lib/renderers/Link.d.ts +1 -1
- package/lib/renderers/Link.js +15 -29
- package/lib/renderers/Link.js.map +2 -2
- package/lib/renderers/Log.d.ts +28 -0
- package/lib/renderers/Log.js +110 -20
- package/lib/renderers/Log.js.map +2 -2
- package/lib/renderers/Page.js +5 -1
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/Service.js +5 -1
- package/lib/renderers/Service.js.map +2 -2
- package/lib/renderers/Wizard.js +37 -14
- package/lib/renderers/Wizard.js.map +2 -2
- package/lib/store/form.js +65 -45
- package/lib/store/form.js.map +2 -2
- package/lib/themes/ang-ie11.css +576 -24
- package/lib/themes/ang.css +553 -12
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +576 -24
- package/lib/themes/antd.css +553 -12
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +576 -24
- package/lib/themes/cxd.css +553 -12
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +576 -24
- package/lib/themes/dark.css +553 -12
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default-ie11.css +576 -24
- package/lib/themes/default.css +553 -12
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.js +1 -1
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/renderer-event.js.map +2 -2
- package/package.json +2 -1
- package/schema.json +542 -4
- package/scss/_properties.scss +20 -8
- package/scss/components/_input-box.scss +22 -1
- package/scss/components/_json-schema.scss +124 -0
- package/scss/components/_log.scss +37 -5
- package/scss/components/form/_date-range.scss +1 -0
- package/scss/components/form/_select.scss +9 -0
- package/scss/components/form/_transfer.scss +19 -3
- package/scss/components/form/_user-select.scss +422 -0
- package/scss/helper/background/_background-color.scss +125 -124
- package/scss/themes/_common.scss +2 -0
- package/sdk/ang-ie11.css +670 -24
- package/sdk/ang.css +647 -12
- package/sdk/antd-ie11.css +670 -24
- package/sdk/antd.css +647 -12
- package/sdk/barcode.js +51 -51
- package/sdk/charts.js +14 -14
- package/sdk/codemirror.js +7 -7
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +670 -24
- package/sdk/cxd.css +647 -12
- package/sdk/dark-ie11.css +670 -24
- package/sdk/dark.css +647 -12
- package/sdk/exceljs.js +1 -1
- package/sdk/helper.css +125 -124
- package/sdk/helper.css.map +1 -1
- package/sdk/locale/de-DE.js +11 -1
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +16 -16
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +670 -24
- package/sdk/sdk.css +647 -12
- package/sdk/sdk.js +1651 -1637
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/RootRenderer.tsx +27 -15
- package/src/Schema.ts +5 -1
- package/src/actions/Action.ts +5 -4
- package/src/components/Button.tsx +3 -0
- package/src/components/Checkbox.tsx +2 -1
- package/src/components/ContextMenu.tsx +25 -7
- package/src/components/Form.tsx +70 -0
- package/src/components/FormField.tsx +127 -0
- package/src/components/InputBox.tsx +4 -1
- package/src/components/InputBoxWithSuggestion.tsx +113 -0
- package/src/components/PickerContainer.tsx +20 -5
- package/src/components/Select.tsx +18 -10
- package/src/components/Textarea.tsx +234 -2
- package/src/components/Toast.tsx +19 -18
- package/src/components/UserSelect.tsx +850 -0
- package/src/components/UserTabSelect.tsx +261 -0
- package/src/components/WithRemoteConfig.tsx +22 -7
- package/src/components/calendar/DaysView.tsx +117 -49
- package/src/components/calendar/TimeView.tsx +11 -6
- package/src/components/formula/Picker.tsx +2 -1
- package/src/components/icons.tsx +17 -1
- package/src/components/index.tsx +3 -1
- package/src/components/json-schema/Array.tsx +216 -0
- package/src/components/json-schema/Item.tsx +47 -0
- package/src/components/json-schema/Object.tsx +339 -0
- package/src/components/json-schema/index.tsx +44 -0
- package/src/components/schema-editor/Array.tsx +3 -1
- package/src/components/schema-editor/Common.tsx +61 -4
- package/src/components/schema-editor/Object.tsx +3 -1
- package/src/components/schema-editor/index.tsx +12 -5
- package/src/hooks/use-validation-resolver.ts +45 -0
- package/src/icons/department.svg +17 -0
- package/src/icons/menu.svg +2 -0
- package/src/icons/post.svg +15 -0
- package/src/icons/role.svg +14 -0
- package/src/icons/user-remove.svg +12 -0
- package/src/index.tsx +2 -0
- package/src/locale/de-DE.ts +11 -1
- package/src/locale/en-US.ts +12 -1
- package/src/locale/zh-CN.ts +14 -3
- package/src/renderers/Action.tsx +10 -9
- package/src/renderers/CRUD.tsx +5 -1
- package/src/renderers/Dialog.tsx +9 -3
- package/src/renderers/Drawer.tsx +5 -1
- package/src/renderers/Form/InputDate.tsx +9 -4
- package/src/renderers/Form/InputFile.tsx +5 -15
- package/src/renderers/Form/InputText.tsx +1 -1
- package/src/renderers/Form/JSONSchema.tsx +56 -0
- package/src/renderers/Form/JSONSchemaEditor.tsx +8 -27
- package/src/renderers/Form/Textarea.tsx +7 -117
- package/src/renderers/Form/UserSelect.tsx +263 -0
- package/src/renderers/Form/index.tsx +28 -18
- package/src/renderers/Link.tsx +5 -17
- package/src/renderers/Log.tsx +213 -19
- package/src/renderers/Page.tsx +6 -1
- package/src/renderers/Service.tsx +5 -1
- package/src/renderers/Wizard.tsx +24 -10
- package/src/store/form.ts +24 -17
- package/src/utils/api.ts +1 -1
- package/src/utils/renderer-event.ts +0 -2
@@ -8,6 +8,6 @@
|
|
8
8
|
"names": [],
|
9
9
|
"mappings": "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",
|
10
10
|
"sourcesContent": [
|
11
|
-
"import React from 'react';\nimport {\n OptionsControl,\n OptionsControlProps,\n highlight,\n FormOptionsControl\n} from './Options';\nimport {Action} from '../../types';\nimport Downshift, {StateChangeOptions} from 'downshift';\nimport {matchSorter} from 'match-sorter';\nimport debouce from 'lodash/debounce';\nimport {filter} from '../../utils/tpl';\nimport find from 'lodash/find';\nimport {Icon} from '../../components/icons';\nimport Input from '../../components/Input';\nimport {autobind, createObject, setVariable, ucFirst} from '../../utils/helper';\nimport {isEffectiveApi} from '../../utils/api';\nimport Spinner from '../../components/Spinner';\nimport {FormBaseControl} from './Item';\nimport {ActionSchema} from '../Action';\nimport {SchemaApi} from '../../Schema';\nimport {generateIcon} from '../../utils/icon';\nimport {\n rendererEventDispatcher,\n bindRendererEvent\n} from '../../actions/Decorators';\n\nimport type {Option} from '../../components/Select';\nimport type {ListenerAction} from '../../actions/Action';\n\n// declare function matchSorter(items:Array<any>, input:any, options:any): Array<any>;\n\n/**\n * Text 文本输入框。\n * 文档:https://baidu.gitee.io/amis/docs/components/form/text\n */\nexport interface TextControlSchema extends FormOptionsControl {\n type:\n | 'input-text'\n | 'input-email'\n | 'input-url'\n | 'input-password'\n | 'native-date'\n | 'native-time'\n | 'native-number';\n\n addOn?: {\n position?: 'left' | 'right';\n label?: string;\n icon?: string;\n className?: string;\n } & ActionSchema;\n\n /**\n * 是否去除首尾空白文本。\n */\n trimContents?: boolean;\n\n /**\n * 自动完成 API,当输入部分文字的时候,会将这些文字通过 ${term} 可以取到,发送给接口。\n * 接口可以返回匹配到的选项,帮助用户输入。\n */\n autoComplete?: SchemaApi;\n\n /**\n * 边框模式,全边框,还是半边框,或者没边框。\n */\n borderMode?: 'full' | 'half' | 'none';\n\n /**\n * 限制文字个数\n */\n maxLength?: number;\n\n /**\n * 是否显示计数\n */\n showCounter?: boolean;\n\n /**\n * 前缀\n */\n prefix?: string;\n\n /**\n * 后缀\n */\n suffix?: string;\n\n /**\n * 自动转换值\n */\n transform: {\n /** 用户输入的字符自动转小写 */\n lowerCase?: boolean;\n /** 用户输入的字符自动转大写 */\n upperCase?: boolean;\n };\n}\n\nexport type InputTextRendererEvent =\n | 'blur'\n | 'focus'\n | 'click'\n | 'change'\n | 'enter';\n\nexport interface TextProps extends OptionsControlProps {\n placeholder?: string;\n addOn?: Action & {\n position?: 'left' | 'right';\n label?: string;\n icon?: string;\n className?: string;\n };\n creatable?: boolean;\n clearable: boolean;\n resetValue?: any;\n autoComplete?: any;\n allowInputText?: boolean;\n spinnerClassName: string;\n revealPassword?: boolean;\n transform?: {\n lowerCase?: boolean; // 用户输入的字符自动转小写\n upperCase?: boolean; // 用户输入的字符自动转大写\n };\n}\n\nexport interface TextState {\n isOpen?: boolean;\n inputValue?: string;\n isFocused?: boolean;\n revealPassword?: boolean; // 主要用于 password 的时候切换一下显影\n}\n\nexport default class TextControl extends React.PureComponent<\n TextProps,\n TextState\n> {\n input?: HTMLInputElement;\n\n highlightedIndex?: any;\n unHook: Function;\n constructor(props: TextProps) {\n super(props);\n\n const value = props.value;\n this.state = {\n isOpen: false,\n inputValue:\n props.multiple || props.creatable === false\n ? ''\n : this.valueToString(value),\n isFocused: false,\n revealPassword: false\n };\n this.focus = this.focus.bind(this);\n this.clearValue = this.clearValue.bind(this);\n this.toggleRevealPassword = this.toggleRevealPassword.bind(this);\n this.inputRef = this.inputRef.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.loadAutoComplete = debouce(this.loadAutoComplete.bind(this), 250, {\n trailing: true,\n leading: false\n });\n }\n\n static defaultProps: Partial<TextProps> = {\n resetValue: '',\n labelField: 'label',\n valueField: 'value',\n placeholder: '',\n allowInputText: true,\n trimContents: true\n };\n\n componentDidMount() {\n const {formItem, autoComplete, addHook, formInited, data, name} =\n this.props;\n\n if (isEffectiveApi(autoComplete, data) && formItem) {\n if (formInited) {\n formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: ''\n })\n );\n } else if (addHook) {\n this.unHook = addHook(async (data: any) => {\n await formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: ''\n })\n );\n\n if (formItem.value) {\n setVariable(data, name!, formItem.value);\n }\n }, 'init');\n }\n }\n }\n\n componentDidUpdate(prevProps: TextProps) {\n const props = this.props;\n\n if (prevProps.value !== props.value) {\n this.setState({\n inputValue:\n props.multiple || props.creatable === false\n ? ''\n : this.valueToString(props.value)\n });\n }\n }\n\n componentWillUnmount() {\n this.unHook && this.unHook();\n }\n\n inputRef(ref: any) {\n this.input = ref;\n }\n\n doAction(action: ListenerAction, args: any) {\n const actionType = action?.actionType as string;\n\n if (!!~['clear', 'reset'].indexOf(actionType)) {\n this.clearValue();\n } else if (actionType === 'focus') {\n this.focus();\n }\n }\n\n focus() {\n if (!this.input) {\n return;\n }\n\n this.input.focus();\n\n // 光标放到最后\n const len = this.input.value.length;\n if (len) {\n // type为email的input元素不支持setSelectionRange,先改为text\n if (this.input.type === 'email') {\n this.input.type = 'text';\n this.input.setSelectionRange(len, len);\n this.input.type = 'email';\n } else {\n this.input.setSelectionRange(len, len);\n }\n }\n }\n\n clearValue() {\n const {onChange, resetValue} = this.props;\n\n onChange(resetValue);\n this.setState(\n {\n inputValue: resetValue\n },\n () => {\n this.focus();\n this.loadAutoComplete();\n }\n );\n }\n\n removeItem(index: number) {\n const {selectedOptions, onChange} = this.props;\n\n const newValue = selectedOptions.concat();\n newValue.splice(index, 1);\n\n onChange(this.normalizeValue(newValue));\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('click')\n handleClick() {\n this.focus();\n this.setState({\n isOpen: true\n });\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('focus')\n handleFocus(e: any) {\n this.setState({\n isOpen: true,\n isFocused: true\n });\n\n this.props.onFocus && this.props.onFocus(e);\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('blur')\n handleBlur(e: any) {\n const {onBlur, trimContents, value, onChange} = this.props;\n\n this.setState(\n {\n isFocused: false\n },\n () => {\n if (trimContents && value && typeof value === 'string') {\n onChange(value.trim());\n }\n }\n );\n\n onBlur && onBlur(e);\n }\n\n async handleInputChange(evt: React.ChangeEvent<HTMLInputElement>) {\n let value = this.transformValue(evt.currentTarget.value);\n const {creatable, multiple, onChange} = this.props;\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'change', {value});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n this.setState(\n {\n inputValue: value\n },\n () => {\n if (creatable !== false && !multiple) {\n onChange?.(value);\n }\n\n this.loadAutoComplete();\n }\n );\n }\n\n async handleKeyDown(evt: React.KeyboardEvent<HTMLInputElement>) {\n const {selectedOptions, onChange, multiple, creatable} = this.props;\n\n if (selectedOptions.length && !this.state.inputValue && evt.keyCode === 8) {\n evt.preventDefault();\n const newValue = selectedOptions.concat();\n newValue.pop();\n\n onChange(this.normalizeValue(newValue));\n\n this.setState(\n {\n inputValue: ''\n },\n this.loadAutoComplete\n );\n } else if (\n evt.key === 'Enter' &&\n this.state.inputValue &&\n typeof this.highlightedIndex !== 'number' &&\n creatable !== false\n ) {\n evt.preventDefault();\n let value: string | Array<string | any> = this.state.inputValue;\n\n if (\n multiple &&\n value &&\n !find(selectedOptions, item => item.value == value)\n ) {\n const newValue = selectedOptions.concat();\n newValue.push({\n label: value,\n value: value\n });\n\n value = this.normalizeValue(newValue).concat();\n }\n\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'enter', {value});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n onChange(value);\n\n this.setState(\n {\n inputValue: '',\n isOpen: false\n },\n this.loadAutoComplete\n );\n } else if (\n evt.key === 'Enter' &&\n this.state.isOpen &&\n typeof this.highlightedIndex !== 'number'\n ) {\n this.setState({\n isOpen: false\n });\n }\n }\n\n handleChange(value: any) {\n const {\n onChange,\n multiple,\n options,\n selectedOptions,\n creatable,\n valueField\n } = this.props;\n // Downshift传入的selectedItem是valueField字段,需要取回选项\n const toggledOption = options.find(\n item => item[valueField || 'value'] === value\n );\n\n if (multiple) {\n const newValue = selectedOptions.concat();\n toggledOption && newValue.push(toggledOption);\n\n onChange(this.normalizeValue(newValue));\n } else {\n onChange(toggledOption ? this.normalizeValue(toggledOption) : value);\n }\n\n if (multiple || creatable === false) {\n this.setState(\n {\n inputValue: ''\n },\n this.loadAutoComplete\n );\n }\n }\n\n handleStateChange(changes: StateChangeOptions<any>) {\n const creatable = this.props.creatable;\n const multiple = this.props.multiple || this.props.multi;\n switch (changes.type) {\n case Downshift.stateChangeTypes.itemMouseEnter:\n this.setState({\n isOpen: true\n });\n break;\n case Downshift.stateChangeTypes.changeInput:\n this.setState({\n isOpen: true\n });\n break;\n default:\n const state: TextState = {};\n if (typeof changes.isOpen !== 'undefined') {\n state.isOpen = changes.isOpen;\n }\n\n if (typeof changes.highlightedIndex !== 'undefined') {\n this.highlightedIndex = changes.highlightedIndex;\n }\n\n // 输入框清空\n if (\n !multiple &&\n creatable === false &&\n this.state.isOpen &&\n changes.isOpen === false\n ) {\n state.inputValue = '';\n }\n\n this.setState(state);\n break;\n }\n }\n\n @autobind\n async handleNormalInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n const {onChange} = this.props;\n let value = e.currentTarget.value;\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'change', {value: this.transformValue(value)});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n onChange(this.transformValue(value));\n }\n\n normalizeValue(value: Option[] | Option | undefined | null) {\n const {multiple, delimiter, joinValues, extractValue, valueField} =\n this.props;\n const selectedOptions = Array.isArray(value) ? value : value ? [value] : [];\n\n if (joinValues) {\n return selectedOptions\n .map(item => item[valueField || 'value'])\n .join(delimiter || ',');\n } else if (extractValue) {\n const mappedValue = selectedOptions.map(\n item => item[valueField || 'value']\n );\n return multiple ? mappedValue : mappedValue[0];\n } else {\n return multiple ? selectedOptions : selectedOptions[0];\n }\n }\n\n transformValue(value: string) {\n const {transform} = this.props;\n\n if (!transform) {\n return value;\n }\n\n Object.keys(transform).forEach((key: 'lowerCase' | 'upperCase') => {\n const propValue = transform[key];\n switch (key) {\n case 'lowerCase':\n propValue && (value = value.toLowerCase());\n break;\n case 'upperCase':\n propValue && (value = value.toUpperCase());\n break;\n }\n });\n\n return value;\n }\n\n loadAutoComplete() {\n const {formItem, autoComplete, data} = this.props;\n\n if (isEffectiveApi(autoComplete, data) && formItem) {\n formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: this.state.inputValue || '' // (multiple ? '' : selectedOptions[selectedOptions.length - 1]?.value)\n }),\n {\n extendsOptions: true\n }\n );\n }\n }\n\n reload() {\n const reload = this.props.reloadOptions;\n reload && reload();\n }\n\n valueToString(value: any) {\n return typeof value === 'undefined' || value === null\n ? ''\n : typeof value === 'string'\n ? value\n : JSON.stringify(value);\n }\n\n renderSugestMode() {\n const {\n className,\n inputOnly,\n value,\n placeholder,\n classnames: cx,\n disabled,\n name,\n loading,\n clearable,\n options,\n selectedOptions,\n autoComplete,\n labelField,\n valueField,\n multiple,\n creatable,\n borderMode,\n showCounter,\n maxLength,\n translate: __\n } = this.props;\n let type = this.props.type?.replace(/^(?:native|input)\\-/, '');\n\n return (\n <Downshift\n isOpen={this.state.isOpen && !disabled}\n inputValue={this.state.inputValue}\n onChange={this.handleChange}\n onStateChange={this.handleStateChange}\n selectedItem={selectedOptions.map(item => item[valueField || 'value'])}\n >\n {({\n getInputProps,\n getItemProps,\n isOpen,\n inputValue,\n selectedItem,\n highlightedIndex\n }) => {\n let filtedOptions =\n inputValue && isOpen && !autoComplete\n ? matchSorter(options, inputValue, {\n keys: [labelField || 'label', valueField || 'value']\n })\n : options;\n const indices = isOpen\n ? mapItemIndex(filtedOptions, selectedItem)\n : {};\n\n filtedOptions = filtedOptions.filter(\n (option: any) => !~selectedItem.indexOf(option.value)\n );\n\n if (\n this.state.inputValue &&\n creatable !== false &&\n multiple &&\n !filtedOptions.some(\n (option: any) => option.value === this.state.inputValue\n )\n ) {\n filtedOptions.push({\n [labelField || 'label']: this.state.inputValue,\n [valueField || 'value']: this.state.inputValue,\n isNew: true\n });\n }\n\n return (\n <div\n className={cx(\n `TextControl-input TextControl-input--withAC`,\n inputOnly ? className : '',\n {\n 'is-opened': isOpen,\n 'TextControl-input--multiple': multiple,\n [`TextControl-input--border${ucFirst(borderMode)}`]:\n borderMode\n }\n )}\n onClick={this.handleClick}\n >\n <>\n {placeholder &&\n !selectedOptions.length &&\n !this.state.inputValue &&\n !this.state.isFocused ? (\n <div className={cx('TextControl-placeholder')}>\n {placeholder}\n </div>\n ) : null}\n\n {selectedOptions.map((item, index) =>\n multiple ? (\n <div className={cx('TextControl-value')} key={index}>\n <span\n className={cx('TextControl-valueIcon')}\n onClick={this.removeItem.bind(this, index)}\n >\n ×\n </span>\n <span className={cx('TextControl-valueLabel')}>\n {`${item[labelField || 'label']}`}\n </span>\n </div>\n ) : (inputValue && isOpen) || creatable !== false ? null : (\n <div className={cx('TextControl-value')} key={index}>\n {item.label}\n </div>\n )\n )}\n\n <Input\n {...getInputProps({\n name,\n ref: this.inputRef,\n disabled,\n type,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onChange: this.handleInputChange,\n onKeyDown: this.handleKeyDown\n })}\n autoComplete=\"off\"\n size={10}\n />\n </>\n\n {clearable && !disabled && value ? (\n <a\n onClick={this.clearValue}\n className={cx('TextControl-clear')}\n >\n <Icon icon=\"input-clear\" className=\"icon\" />\n </a>\n ) : null}\n\n {showCounter ? (\n <span className={cx('TextControl-counter')}>\n {`${this.valueToString(value)?.length}${\n typeof maxLength === 'number' && maxLength\n ? `/${maxLength}`\n : ''\n }`}\n </span>\n ) : null}\n\n {loading ? (\n <Spinner\n show\n icon=\"reload\"\n spinnerClassName={cx('TextControl-spinner')}\n />\n ) : null}\n\n {isOpen && filtedOptions.length ? (\n <div className={cx('TextControl-sugs')}>\n {filtedOptions.map((option: any) => {\n return (\n <div\n {...getItemProps({\n item: option.value,\n disabled: option.disabled,\n className: cx(`TextControl-sugItem`, {\n 'is-highlight':\n highlightedIndex === indices[option.value],\n 'is-disabled': option.disabled\n })\n })}\n key={option.value}\n >\n {option.isNew ? (\n <span>\n {__('Text.add', {label: option.label})}\n <Icon icon=\"enter\" className=\"icon\" />\n </span>\n ) : (\n <span>\n {option.disabled\n ? option.label\n : highlight(option.label, inputValue as string)}\n {option.tip}\n </span>\n )}\n </div>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n }}\n </Downshift>\n );\n }\n\n toggleRevealPassword() {\n this.setState({revealPassword: !this.state.revealPassword});\n }\n\n renderNormal(): JSX.Element {\n const {\n classPrefix: ns,\n classnames: cx,\n className,\n inputOnly,\n value,\n placeholder,\n onChange,\n disabled,\n readOnly,\n max,\n min,\n step,\n clearable,\n revealPassword = true,\n name,\n borderMode,\n prefix,\n suffix,\n data,\n showCounter,\n maxLength\n } = this.props;\n\n const type = this.props.type?.replace(/^(?:native|input)\\-/, '');\n\n return (\n <div\n className={cx(\n 'TextControl-input',\n {\n [`TextControl-input--border${ucFirst(borderMode)}`]: borderMode\n },\n inputOnly ? className : ''\n )}\n >\n {prefix ? (\n <span className={cx('TextControl-inputPrefix')}>\n {filter(prefix, data)}\n </span>\n ) : null}\n <Input\n name={name}\n placeholder={placeholder}\n ref={this.inputRef}\n disabled={disabled}\n readOnly={readOnly}\n type={this.state.revealPassword ? 'text' : type}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n max={max}\n min={min}\n autoComplete=\"off\"\n size={10}\n step={step}\n onChange={this.handleNormalInputChange}\n value={this.valueToString(value)}\n />\n {clearable && !disabled && value ? (\n <a onClick={this.clearValue} className={`${ns}TextControl-clear`}>\n <Icon icon=\"input-clear\" className=\"icon\" />\n </a>\n ) : null}\n {type === 'password' && revealPassword && !disabled ? (\n <a\n onClick={this.toggleRevealPassword}\n className={`${ns}TextControl-revealPassword`}\n >\n {this.state.revealPassword ? (\n <i className=\"fa fa-eye\"></i>\n ) : (\n <i className=\"fa fa-eye-slash\"></i>\n )}\n </a>\n ) : null}\n {showCounter ? (\n <span className={cx('TextControl-counter')}>\n {`${this.valueToString(value)?.length}${\n typeof maxLength === 'number' && maxLength ? `/${maxLength}` : ''\n }`}\n </span>\n ) : null}\n {suffix ? (\n <span className={cx('TextControl-inputSuffix')}>\n {filter(suffix, data)}\n </span>\n ) : null}\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n classnames: cx,\n className,\n classPrefix: ns,\n options,\n source,\n autoComplete,\n addOn: addOnRaw,\n render,\n data,\n disabled,\n inputOnly\n } = this.props;\n\n const addOn: any =\n typeof addOnRaw === 'string'\n ? {\n label: addOnRaw,\n type: 'plain'\n }\n : addOnRaw;\n\n let input =\n autoComplete !== false && (source || options.length || autoComplete)\n ? this.renderSugestMode()\n : this.renderNormal();\n\n const iconElement = generateIcon(cx, addOn?.icon, 'Icon');\n\n let addOnDom = addOn ? (\n addOn.actionType ||\n ~['button', 'submit', 'reset', 'action'].indexOf(addOn.type) ? (\n <div className={cx(`${ns}TextControl-button`, addOn.className)}>\n {render('addOn', addOn, {\n disabled\n })}\n </div>\n ) : (\n <div className={cx(`${ns}TextControl-addOn`, addOn.className)}>\n {iconElement}\n {addOn.label ? filter(addOn.label, data) : null}\n </div>\n )\n ) : null;\n\n if (inputOnly) {\n return input;\n }\n\n return (\n <div\n className={cx(className, `${ns}TextControl`, {\n [`${ns}TextControl--withAddOn`]: !!addOnDom,\n 'is-focused': this.state.isFocused,\n 'is-disabled': disabled\n })}\n >\n {addOn && addOn.position === 'left' ? addOnDom : null}\n {input}\n {addOn && addOn.position !== 'left' ? addOnDom : null}\n </div>\n );\n }\n}\n\nexport function mapItemIndex(\n items: Array<any>,\n values: Array<any>,\n valueField: string = 'value'\n) {\n return items\n .filter(item => values.indexOf(item[valueField || 'value']) === -1)\n .reduce((prev, next, i) => {\n prev[next[valueField || 'value']] = i;\n return prev;\n }, {});\n}\n\n@OptionsControl({\n type: 'input-text'\n})\nexport class TextControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-password'\n})\nexport class PasswordControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-email',\n validations: 'isEmail'\n})\nexport class EmailControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-url',\n validations: 'isUrl'\n})\nexport class UrlControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-date'\n})\nexport class NativeDateControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-time'\n})\nexport class NativeTimeControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-number'\n})\nexport class NativeNumberControlRenderer extends TextControl {}\n"
|
11
|
+
"import React from 'react';\nimport {\n OptionsControl,\n OptionsControlProps,\n highlight,\n FormOptionsControl\n} from './Options';\nimport {Action} from '../../types';\nimport Downshift, {StateChangeOptions} from 'downshift';\nimport {matchSorter} from 'match-sorter';\nimport debouce from 'lodash/debounce';\nimport {filter} from '../../utils/tpl';\nimport find from 'lodash/find';\nimport {Icon} from '../../components/icons';\nimport Input from '../../components/Input';\nimport {autobind, createObject, setVariable, ucFirst} from '../../utils/helper';\nimport {isEffectiveApi} from '../../utils/api';\nimport Spinner from '../../components/Spinner';\nimport {FormBaseControl} from './Item';\nimport {ActionSchema} from '../Action';\nimport {SchemaApi} from '../../Schema';\nimport {generateIcon} from '../../utils/icon';\nimport {\n rendererEventDispatcher,\n bindRendererEvent\n} from '../../actions/Decorators';\n\nimport type {Option} from '../../components/Select';\nimport type {ListenerAction} from '../../actions/Action';\n\n// declare function matchSorter(items:Array<any>, input:any, options:any): Array<any>;\n\n/**\n * Text 文本输入框。\n * 文档:https://baidu.gitee.io/amis/docs/components/form/text\n */\nexport interface TextControlSchema extends FormOptionsControl {\n type:\n | 'input-text'\n | 'input-email'\n | 'input-url'\n | 'input-password'\n | 'native-date'\n | 'native-time'\n | 'native-number';\n\n addOn?: {\n position?: 'left' | 'right';\n label?: string;\n icon?: string;\n className?: string;\n } & ActionSchema;\n\n /**\n * 是否去除首尾空白文本。\n */\n trimContents?: boolean;\n\n /**\n * 自动完成 API,当输入部分文字的时候,会将这些文字通过 ${term} 可以取到,发送给接口。\n * 接口可以返回匹配到的选项,帮助用户输入。\n */\n autoComplete?: SchemaApi;\n\n /**\n * 边框模式,全边框,还是半边框,或者没边框。\n */\n borderMode?: 'full' | 'half' | 'none';\n\n /**\n * 限制文字个数\n */\n maxLength?: number;\n\n /**\n * 是否显示计数\n */\n showCounter?: boolean;\n\n /**\n * 前缀\n */\n prefix?: string;\n\n /**\n * 后缀\n */\n suffix?: string;\n\n /**\n * 自动转换值\n */\n transform?: {\n /** 用户输入的字符自动转小写 */\n lowerCase?: boolean;\n /** 用户输入的字符自动转大写 */\n upperCase?: boolean;\n };\n}\n\nexport type InputTextRendererEvent =\n | 'blur'\n | 'focus'\n | 'click'\n | 'change'\n | 'enter';\n\nexport interface TextProps extends OptionsControlProps {\n placeholder?: string;\n addOn?: Action & {\n position?: 'left' | 'right';\n label?: string;\n icon?: string;\n className?: string;\n };\n creatable?: boolean;\n clearable: boolean;\n resetValue?: any;\n autoComplete?: any;\n allowInputText?: boolean;\n spinnerClassName: string;\n revealPassword?: boolean;\n transform?: {\n lowerCase?: boolean; // 用户输入的字符自动转小写\n upperCase?: boolean; // 用户输入的字符自动转大写\n };\n}\n\nexport interface TextState {\n isOpen?: boolean;\n inputValue?: string;\n isFocused?: boolean;\n revealPassword?: boolean; // 主要用于 password 的时候切换一下显影\n}\n\nexport default class TextControl extends React.PureComponent<\n TextProps,\n TextState\n> {\n input?: HTMLInputElement;\n\n highlightedIndex?: any;\n unHook: Function;\n constructor(props: TextProps) {\n super(props);\n\n const value = props.value;\n this.state = {\n isOpen: false,\n inputValue:\n props.multiple || props.creatable === false\n ? ''\n : this.valueToString(value),\n isFocused: false,\n revealPassword: false\n };\n this.focus = this.focus.bind(this);\n this.clearValue = this.clearValue.bind(this);\n this.toggleRevealPassword = this.toggleRevealPassword.bind(this);\n this.inputRef = this.inputRef.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.loadAutoComplete = debouce(this.loadAutoComplete.bind(this), 250, {\n trailing: true,\n leading: false\n });\n }\n\n static defaultProps: Partial<TextProps> = {\n resetValue: '',\n labelField: 'label',\n valueField: 'value',\n placeholder: '',\n allowInputText: true,\n trimContents: true\n };\n\n componentDidMount() {\n const {formItem, autoComplete, addHook, formInited, data, name} =\n this.props;\n\n if (isEffectiveApi(autoComplete, data) && formItem) {\n if (formInited) {\n formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: ''\n })\n );\n } else if (addHook) {\n this.unHook = addHook(async (data: any) => {\n await formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: ''\n })\n );\n\n if (formItem.value) {\n setVariable(data, name!, formItem.value);\n }\n }, 'init');\n }\n }\n }\n\n componentDidUpdate(prevProps: TextProps) {\n const props = this.props;\n\n if (prevProps.value !== props.value) {\n this.setState({\n inputValue:\n props.multiple || props.creatable === false\n ? ''\n : this.valueToString(props.value)\n });\n }\n }\n\n componentWillUnmount() {\n this.unHook && this.unHook();\n }\n\n inputRef(ref: any) {\n this.input = ref;\n }\n\n doAction(action: ListenerAction, args: any) {\n const actionType = action?.actionType as string;\n\n if (!!~['clear', 'reset'].indexOf(actionType)) {\n this.clearValue();\n } else if (actionType === 'focus') {\n this.focus();\n }\n }\n\n focus() {\n if (!this.input) {\n return;\n }\n\n this.input.focus();\n\n // 光标放到最后\n const len = this.input.value.length;\n if (len) {\n // type为email的input元素不支持setSelectionRange,先改为text\n if (this.input.type === 'email') {\n this.input.type = 'text';\n this.input.setSelectionRange(len, len);\n this.input.type = 'email';\n } else {\n this.input.setSelectionRange(len, len);\n }\n }\n }\n\n clearValue() {\n const {onChange, resetValue} = this.props;\n\n onChange(resetValue);\n this.setState(\n {\n inputValue: resetValue\n },\n () => {\n this.focus();\n this.loadAutoComplete();\n }\n );\n }\n\n removeItem(index: number) {\n const {selectedOptions, onChange} = this.props;\n\n const newValue = selectedOptions.concat();\n newValue.splice(index, 1);\n\n onChange(this.normalizeValue(newValue));\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('click')\n handleClick() {\n this.focus();\n this.setState({\n isOpen: true\n });\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('focus')\n handleFocus(e: any) {\n this.setState({\n isOpen: true,\n isFocused: true\n });\n\n this.props.onFocus && this.props.onFocus(e);\n }\n\n @bindRendererEvent<TextProps, InputTextRendererEvent>('blur')\n handleBlur(e: any) {\n const {onBlur, trimContents, value, onChange} = this.props;\n\n this.setState(\n {\n isFocused: false\n },\n () => {\n if (trimContents && value && typeof value === 'string') {\n onChange(value.trim());\n }\n }\n );\n\n onBlur && onBlur(e);\n }\n\n async handleInputChange(evt: React.ChangeEvent<HTMLInputElement>) {\n let value = this.transformValue(evt.currentTarget.value);\n const {creatable, multiple, onChange} = this.props;\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'change', {value});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n this.setState(\n {\n inputValue: value\n },\n () => {\n if (creatable !== false && !multiple) {\n onChange?.(value);\n }\n\n this.loadAutoComplete();\n }\n );\n }\n\n async handleKeyDown(evt: React.KeyboardEvent<HTMLInputElement>) {\n const {selectedOptions, onChange, multiple, creatable} = this.props;\n\n if (selectedOptions.length && !this.state.inputValue && evt.keyCode === 8) {\n evt.preventDefault();\n const newValue = selectedOptions.concat();\n newValue.pop();\n\n onChange(this.normalizeValue(newValue));\n\n this.setState(\n {\n inputValue: ''\n },\n this.loadAutoComplete\n );\n } else if (\n evt.key === 'Enter' &&\n this.state.inputValue &&\n typeof this.highlightedIndex !== 'number' &&\n creatable !== false\n ) {\n evt.preventDefault();\n let value: string | Array<string | any> = this.state.inputValue;\n\n if (\n multiple &&\n value &&\n !find(selectedOptions, item => item.value == value)\n ) {\n const newValue = selectedOptions.concat();\n newValue.push({\n label: value,\n value: value\n });\n\n value = this.normalizeValue(newValue).concat();\n }\n\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'enter', {value});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n onChange(value);\n\n this.setState(\n {\n inputValue: '',\n isOpen: false\n },\n this.loadAutoComplete\n );\n } else if (\n evt.key === 'Enter' &&\n this.state.isOpen &&\n typeof this.highlightedIndex !== 'number'\n ) {\n this.setState({\n isOpen: false\n });\n }\n }\n\n handleChange(value: any) {\n const {\n onChange,\n multiple,\n options,\n selectedOptions,\n creatable,\n valueField\n } = this.props;\n // Downshift传入的selectedItem是valueField字段,需要取回选项\n const toggledOption = options.find(\n item => item[valueField || 'value'] === value\n );\n\n if (multiple) {\n const newValue = selectedOptions.concat();\n toggledOption && newValue.push(toggledOption);\n\n onChange(this.normalizeValue(newValue));\n } else {\n onChange(toggledOption ? this.normalizeValue(toggledOption) : value);\n }\n\n if (multiple || creatable === false) {\n this.setState(\n {\n inputValue: ''\n },\n this.loadAutoComplete\n );\n }\n }\n\n handleStateChange(changes: StateChangeOptions<any>) {\n const creatable = this.props.creatable;\n const multiple = this.props.multiple || this.props.multi;\n switch (changes.type) {\n case Downshift.stateChangeTypes.itemMouseEnter:\n this.setState({\n isOpen: true\n });\n break;\n case Downshift.stateChangeTypes.changeInput:\n this.setState({\n isOpen: true\n });\n break;\n default:\n const state: TextState = {};\n if (typeof changes.isOpen !== 'undefined') {\n state.isOpen = changes.isOpen;\n }\n\n if (typeof changes.highlightedIndex !== 'undefined') {\n this.highlightedIndex = changes.highlightedIndex;\n }\n\n // 输入框清空\n if (\n !multiple &&\n creatable === false &&\n this.state.isOpen &&\n changes.isOpen === false\n ) {\n state.inputValue = '';\n }\n\n this.setState(state);\n break;\n }\n }\n\n @autobind\n async handleNormalInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n const {onChange} = this.props;\n let value = e.currentTarget.value;\n const dispatcher = await rendererEventDispatcher<\n TextProps,\n InputTextRendererEvent\n >(this.props, 'change', {value: this.transformValue(value)});\n\n if (dispatcher?.prevented) {\n return;\n }\n\n onChange(this.transformValue(value));\n }\n\n normalizeValue(value: Option[] | Option | undefined | null) {\n const {multiple, delimiter, joinValues, extractValue, valueField} =\n this.props;\n const selectedOptions = Array.isArray(value) ? value : value ? [value] : [];\n\n if (joinValues) {\n return selectedOptions\n .map(item => item[valueField || 'value'])\n .join(delimiter || ',');\n } else if (extractValue) {\n const mappedValue = selectedOptions.map(\n item => item[valueField || 'value']\n );\n return multiple ? mappedValue : mappedValue[0];\n } else {\n return multiple ? selectedOptions : selectedOptions[0];\n }\n }\n\n transformValue(value: string) {\n const {transform} = this.props;\n\n if (!transform) {\n return value;\n }\n\n Object.keys(transform).forEach((key: 'lowerCase' | 'upperCase') => {\n const propValue = transform[key];\n switch (key) {\n case 'lowerCase':\n propValue && (value = value.toLowerCase());\n break;\n case 'upperCase':\n propValue && (value = value.toUpperCase());\n break;\n }\n });\n\n return value;\n }\n\n loadAutoComplete() {\n const {formItem, autoComplete, data} = this.props;\n\n if (isEffectiveApi(autoComplete, data) && formItem) {\n formItem.loadOptions(\n autoComplete,\n createObject(data, {\n term: this.state.inputValue || '' // (multiple ? '' : selectedOptions[selectedOptions.length - 1]?.value)\n }),\n {\n extendsOptions: true\n }\n );\n }\n }\n\n reload() {\n const reload = this.props.reloadOptions;\n reload && reload();\n }\n\n valueToString(value: any) {\n return typeof value === 'undefined' || value === null\n ? ''\n : typeof value === 'string'\n ? value\n : JSON.stringify(value);\n }\n\n renderSugestMode() {\n const {\n className,\n inputOnly,\n value,\n placeholder,\n classnames: cx,\n disabled,\n name,\n loading,\n clearable,\n options,\n selectedOptions,\n autoComplete,\n labelField,\n valueField,\n multiple,\n creatable,\n borderMode,\n showCounter,\n maxLength,\n translate: __\n } = this.props;\n let type = this.props.type?.replace(/^(?:native|input)\\-/, '');\n\n return (\n <Downshift\n isOpen={this.state.isOpen && !disabled}\n inputValue={this.state.inputValue}\n onChange={this.handleChange}\n onStateChange={this.handleStateChange}\n selectedItem={selectedOptions.map(item => item[valueField || 'value'])}\n >\n {({\n getInputProps,\n getItemProps,\n isOpen,\n inputValue,\n selectedItem,\n highlightedIndex\n }) => {\n let filtedOptions =\n inputValue && isOpen && !autoComplete\n ? matchSorter(options, inputValue, {\n keys: [labelField || 'label', valueField || 'value']\n })\n : options;\n const indices = isOpen\n ? mapItemIndex(filtedOptions, selectedItem)\n : {};\n\n filtedOptions = filtedOptions.filter(\n (option: any) => !~selectedItem.indexOf(option.value)\n );\n\n if (\n this.state.inputValue &&\n creatable !== false &&\n multiple &&\n !filtedOptions.some(\n (option: any) => option.value === this.state.inputValue\n )\n ) {\n filtedOptions.push({\n [labelField || 'label']: this.state.inputValue,\n [valueField || 'value']: this.state.inputValue,\n isNew: true\n });\n }\n\n return (\n <div\n className={cx(\n `TextControl-input TextControl-input--withAC`,\n inputOnly ? className : '',\n {\n 'is-opened': isOpen,\n 'TextControl-input--multiple': multiple,\n [`TextControl-input--border${ucFirst(borderMode)}`]:\n borderMode\n }\n )}\n onClick={this.handleClick}\n >\n <>\n {placeholder &&\n !selectedOptions.length &&\n !this.state.inputValue &&\n !this.state.isFocused ? (\n <div className={cx('TextControl-placeholder')}>\n {placeholder}\n </div>\n ) : null}\n\n {selectedOptions.map((item, index) =>\n multiple ? (\n <div className={cx('TextControl-value')} key={index}>\n <span\n className={cx('TextControl-valueIcon')}\n onClick={this.removeItem.bind(this, index)}\n >\n ×\n </span>\n <span className={cx('TextControl-valueLabel')}>\n {`${item[labelField || 'label']}`}\n </span>\n </div>\n ) : (inputValue && isOpen) || creatable !== false ? null : (\n <div className={cx('TextControl-value')} key={index}>\n {item.label}\n </div>\n )\n )}\n\n <Input\n {...getInputProps({\n name,\n ref: this.inputRef,\n disabled,\n type,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onChange: this.handleInputChange,\n onKeyDown: this.handleKeyDown\n })}\n autoComplete=\"off\"\n size={10}\n />\n </>\n\n {clearable && !disabled && value ? (\n <a\n onClick={this.clearValue}\n className={cx('TextControl-clear')}\n >\n <Icon icon=\"input-clear\" className=\"icon\" />\n </a>\n ) : null}\n\n {showCounter ? (\n <span className={cx('TextControl-counter')}>\n {`${this.valueToString(value)?.length}${\n typeof maxLength === 'number' && maxLength\n ? `/${maxLength}`\n : ''\n }`}\n </span>\n ) : null}\n\n {loading ? (\n <Spinner\n show\n icon=\"reload\"\n spinnerClassName={cx('TextControl-spinner')}\n />\n ) : null}\n\n {isOpen && filtedOptions.length ? (\n <div className={cx('TextControl-sugs')}>\n {filtedOptions.map((option: any) => {\n return (\n <div\n {...getItemProps({\n item: option.value,\n disabled: option.disabled,\n className: cx(`TextControl-sugItem`, {\n 'is-highlight':\n highlightedIndex === indices[option.value],\n 'is-disabled': option.disabled\n })\n })}\n key={option.value}\n >\n {option.isNew ? (\n <span>\n {__('Text.add', {label: option.label})}\n <Icon icon=\"enter\" className=\"icon\" />\n </span>\n ) : (\n <span>\n {option.disabled\n ? option.label\n : highlight(option.label, inputValue as string)}\n {option.tip}\n </span>\n )}\n </div>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n }}\n </Downshift>\n );\n }\n\n toggleRevealPassword() {\n this.setState({revealPassword: !this.state.revealPassword});\n }\n\n renderNormal(): JSX.Element {\n const {\n classPrefix: ns,\n classnames: cx,\n className,\n inputOnly,\n value,\n placeholder,\n onChange,\n disabled,\n readOnly,\n max,\n min,\n step,\n clearable,\n revealPassword = true,\n name,\n borderMode,\n prefix,\n suffix,\n data,\n showCounter,\n maxLength\n } = this.props;\n\n const type = this.props.type?.replace(/^(?:native|input)\\-/, '');\n\n return (\n <div\n className={cx(\n 'TextControl-input',\n {\n [`TextControl-input--border${ucFirst(borderMode)}`]: borderMode\n },\n inputOnly ? className : ''\n )}\n >\n {prefix ? (\n <span className={cx('TextControl-inputPrefix')}>\n {filter(prefix, data)}\n </span>\n ) : null}\n <Input\n name={name}\n placeholder={placeholder}\n ref={this.inputRef}\n disabled={disabled}\n readOnly={readOnly}\n type={this.state.revealPassword ? 'text' : type}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n max={max}\n min={min}\n autoComplete=\"off\"\n size={10}\n step={step}\n onChange={this.handleNormalInputChange}\n value={this.valueToString(value)}\n />\n {clearable && !disabled && value ? (\n <a onClick={this.clearValue} className={`${ns}TextControl-clear`}>\n <Icon icon=\"input-clear\" className=\"icon\" />\n </a>\n ) : null}\n {type === 'password' && revealPassword && !disabled ? (\n <a\n onClick={this.toggleRevealPassword}\n className={`${ns}TextControl-revealPassword`}\n >\n {this.state.revealPassword ? (\n <i className=\"fa fa-eye\"></i>\n ) : (\n <i className=\"fa fa-eye-slash\"></i>\n )}\n </a>\n ) : null}\n {showCounter ? (\n <span className={cx('TextControl-counter')}>\n {`${this.valueToString(value)?.length}${\n typeof maxLength === 'number' && maxLength ? `/${maxLength}` : ''\n }`}\n </span>\n ) : null}\n {suffix ? (\n <span className={cx('TextControl-inputSuffix')}>\n {filter(suffix, data)}\n </span>\n ) : null}\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n classnames: cx,\n className,\n classPrefix: ns,\n options,\n source,\n autoComplete,\n addOn: addOnRaw,\n render,\n data,\n disabled,\n inputOnly\n } = this.props;\n\n const addOn: any =\n typeof addOnRaw === 'string'\n ? {\n label: addOnRaw,\n type: 'plain'\n }\n : addOnRaw;\n\n let input =\n autoComplete !== false && (source || options.length || autoComplete)\n ? this.renderSugestMode()\n : this.renderNormal();\n\n const iconElement = generateIcon(cx, addOn?.icon, 'Icon');\n\n let addOnDom = addOn ? (\n addOn.actionType ||\n ~['button', 'submit', 'reset', 'action'].indexOf(addOn.type) ? (\n <div className={cx(`${ns}TextControl-button`, addOn.className)}>\n {render('addOn', addOn, {\n disabled\n })}\n </div>\n ) : (\n <div className={cx(`${ns}TextControl-addOn`, addOn.className)}>\n {iconElement}\n {addOn.label ? filter(addOn.label, data) : null}\n </div>\n )\n ) : null;\n\n if (inputOnly) {\n return input;\n }\n\n return (\n <div\n className={cx(className, `${ns}TextControl`, {\n [`${ns}TextControl--withAddOn`]: !!addOnDom,\n 'is-focused': this.state.isFocused,\n 'is-disabled': disabled\n })}\n >\n {addOn && addOn.position === 'left' ? addOnDom : null}\n {input}\n {addOn && addOn.position !== 'left' ? addOnDom : null}\n </div>\n );\n }\n}\n\nexport function mapItemIndex(\n items: Array<any>,\n values: Array<any>,\n valueField: string = 'value'\n) {\n return items\n .filter(item => values.indexOf(item[valueField || 'value']) === -1)\n .reduce((prev, next, i) => {\n prev[next[valueField || 'value']] = i;\n return prev;\n }, {});\n}\n\n@OptionsControl({\n type: 'input-text'\n})\nexport class TextControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-password'\n})\nexport class PasswordControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-email',\n validations: 'isEmail'\n})\nexport class EmailControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'input-url',\n validations: 'isUrl'\n})\nexport class UrlControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-date'\n})\nexport class NativeDateControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-time'\n})\nexport class NativeTimeControlRenderer extends TextControl {}\n\n@OptionsControl({\n type: 'native-number'\n})\nexport class NativeNumberControlRenderer extends TextControl {}\n"
|
12
12
|
]
|
13
13
|
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { FormControlProps, FormBaseControl } from './Item';
|
3
|
+
/**
|
4
|
+
* JSON Schema
|
5
|
+
* 文档:https://baidu.gitee.io/amis/docs/components/form/json-schema
|
6
|
+
*/
|
7
|
+
export interface JSONSchemaControlSchema extends FormBaseControl {
|
8
|
+
/**
|
9
|
+
* 指定为 JSON Schema
|
10
|
+
*/
|
11
|
+
type: 'json-schema';
|
12
|
+
/**
|
13
|
+
* json-schema 详情,支持关联上下文数据
|
14
|
+
*/
|
15
|
+
schema?: any;
|
16
|
+
}
|
17
|
+
export interface JSONSchemaProps extends FormControlProps, Omit<JSONSchemaControlSchema, 'type' | 'className' | 'descriptionClassName' | 'inputClassName'> {
|
18
|
+
}
|
19
|
+
export default class JSONSchemaControl extends React.PureComponent<JSONSchemaProps> {
|
20
|
+
render(): JSX.Element;
|
21
|
+
}
|
22
|
+
export declare class JSONSchemaRenderer extends JSONSchemaControl {
|
23
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.JSONSchemaRenderer = void 0;
|
4
|
+
var tslib_1 = require("tslib");
|
5
|
+
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
6
|
+
var Item_1 = require("./Item");
|
7
|
+
var index_1 = (0, tslib_1.__importDefault)(require("../../components/json-schema/index"));
|
8
|
+
var WithRemoteConfig_1 = require("../../components/WithRemoteConfig");
|
9
|
+
var EnhancedInputJSONSchema = (0, WithRemoteConfig_1.withRemoteConfig)({
|
10
|
+
sourceField: 'schema',
|
11
|
+
injectedPropsFilter: function (props) {
|
12
|
+
return {
|
13
|
+
schema: props.config,
|
14
|
+
loading: props.loading
|
15
|
+
};
|
16
|
+
}
|
17
|
+
})(index_1.default);
|
18
|
+
var JSONSchemaControl = /** @class */ (function (_super) {
|
19
|
+
(0, tslib_1.__extends)(JSONSchemaControl, _super);
|
20
|
+
function JSONSchemaControl() {
|
21
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
22
|
+
}
|
23
|
+
JSONSchemaControl.prototype.render = function () {
|
24
|
+
var rest = (0, tslib_1.__rest)(this.props, []);
|
25
|
+
return react_1.default.createElement(EnhancedInputJSONSchema, (0, tslib_1.__assign)({}, rest));
|
26
|
+
};
|
27
|
+
return JSONSchemaControl;
|
28
|
+
}(react_1.default.PureComponent));
|
29
|
+
exports.default = JSONSchemaControl;
|
30
|
+
var JSONSchemaRenderer = /** @class */ (function (_super) {
|
31
|
+
(0, tslib_1.__extends)(JSONSchemaRenderer, _super);
|
32
|
+
function JSONSchemaRenderer() {
|
33
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
34
|
+
}
|
35
|
+
JSONSchemaRenderer = (0, tslib_1.__decorate)([
|
36
|
+
(0, Item_1.FormItem)({
|
37
|
+
type: 'json-schema',
|
38
|
+
strictMode: false
|
39
|
+
})
|
40
|
+
], JSONSchemaRenderer);
|
41
|
+
return JSONSchemaRenderer;
|
42
|
+
}(JSONSchemaControl));
|
43
|
+
exports.JSONSchemaRenderer = JSONSchemaRenderer;
|
44
|
+
//# sourceMappingURL=./renderers/Form/JSONSchema.js.map
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "JSONSchema.js",
|
4
|
+
"sourceRoot": "",
|
5
|
+
"sources": [
|
6
|
+
"/src/renderers/Form/JSONSchema.tsx"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": ";;;;AAAA,6DAA0B;AAC1B,+BAAmE;AAEnE,0FAAiE;AAMjE,sEAAmE;AAyBnE,IAAM,uBAAuB,GAAG,IAAA,mCAAgB,EAAC;IAC/C,WAAW,EAAE,QAAQ;IACrB,mBAAmB,EAAE,UAAA,KAAK;QACxB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC,eAAsB,CAAC,CAAC;AAC3B;IAA+C,kDAAoC;IAAnF;;IAMA,CAAC;IALC,kCAAM,GAAN;QACE,IAAU,IAAI,uBAAI,IAAI,CAAC,KAAK,EAAtB,EAAS,CAAa,CAAC;QAE7B,OAAO,8BAAC,uBAAuB,4BAAK,IAAI,EAAI,CAAC;IAC/C,CAAC;IACH,wBAAC;AAAD,CAAC,AAND,CAA+C,eAAK,CAAC,aAAa,GAMjE;;AAMD;IAAwC,mDAAiB;IAAzD;;IAA2D,CAAC;IAA/C,kBAAkB;QAJ9B,IAAA,eAAQ,EAAC;YACR,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC;OACW,kBAAkB,CAA6B;IAAD,yBAAC;CAAA,AAA5D,CAAwC,iBAAiB,GAAG;AAA/C,gDAAkB",
|
10
|
+
"sourcesContent": [
|
11
|
+
"import React from 'react';\nimport {FormItem, FormControlProps, FormBaseControl} from './Item';\nimport {autobind, isObjectShallowModified} from '../../utils/helper';\nimport InputJSONSchema from '../../components/json-schema/index';\nimport {\n isPureVariable,\n resolveVariableAndFilter\n} from '../../utils/tpl-builtin';\nimport {isApiOutdated, isEffectiveApi} from '../../utils/api';\nimport {withRemoteConfig} from '../../components/WithRemoteConfig';\n\n/**\n * JSON Schema\n * 文档:https://baidu.gitee.io/amis/docs/components/form/json-schema\n */\nexport interface JSONSchemaControlSchema extends FormBaseControl {\n /**\n * 指定为 JSON Schema\n */\n type: 'json-schema';\n\n /**\n * json-schema 详情,支持关联上下文数据\n */\n schema?: any;\n}\n\nexport interface JSONSchemaProps\n extends FormControlProps,\n Omit<\n JSONSchemaControlSchema,\n 'type' | 'className' | 'descriptionClassName' | 'inputClassName'\n > {}\n\nconst EnhancedInputJSONSchema = withRemoteConfig({\n sourceField: 'schema',\n injectedPropsFilter: props => {\n return {\n schema: props.config,\n loading: props.loading\n };\n }\n})(InputJSONSchema as any);\nexport default class JSONSchemaControl extends React.PureComponent<JSONSchemaProps> {\n render() {\n const {...rest} = this.props;\n\n return <EnhancedInputJSONSchema {...rest} />;\n }\n}\n\n@FormItem({\n type: 'json-schema',\n strictMode: false\n})\nexport class JSONSchemaRenderer extends JSONSchemaControl {}\n"
|
12
|
+
]
|
13
|
+
}
|
@@ -15,7 +15,7 @@ export interface JSONSchemaEditorControlSchema extends FormBaseControl {
|
|
15
15
|
definitions?: {
|
16
16
|
[propName: string]: {
|
17
17
|
title: string;
|
18
|
-
type: 'string' | 'number' | '
|
18
|
+
type: 'string' | 'number' | 'integer' | 'object' | 'array' | 'boolean' | 'null';
|
19
19
|
[propName: string]: any;
|
20
20
|
};
|
21
21
|
};
|
@@ -56,8 +56,7 @@ export default class JSONSchemaEditorControl extends React.PureComponent<JSONSch
|
|
56
56
|
static defaultProps: {
|
57
57
|
enableAdvancedSetting: boolean;
|
58
58
|
};
|
59
|
-
|
60
|
-
renderModalProps({ value, onChange }: any): JSX.Element;
|
59
|
+
renderModalProps(value: any, onChange: (value: any) => void): JSX.Element;
|
61
60
|
render(): JSX.Element;
|
62
61
|
}
|
63
62
|
export declare class JSONSchemaEditorRenderer extends JSONSchemaEditorControl {
|
@@ -9,39 +9,24 @@ var helper_1 = require("../../utils/helper");
|
|
9
9
|
var JSONSchemaEditorControl = /** @class */ (function (_super) {
|
10
10
|
(0, tslib_1.__extends)(JSONSchemaEditorControl, _super);
|
11
11
|
function JSONSchemaEditorControl() {
|
12
|
-
|
13
|
-
// todo 完善这块配置
|
14
|
-
_this.settings = {
|
15
|
-
common: [
|
16
|
-
{
|
17
|
-
type: 'input-text',
|
18
|
-
name: 'title',
|
19
|
-
label: _this.props.translate('JSONSchema.title')
|
20
|
-
},
|
21
|
-
{
|
22
|
-
type: 'textarea',
|
23
|
-
name: 'description',
|
24
|
-
label: _this.props.translate('JSONSchema.description')
|
25
|
-
}
|
26
|
-
]
|
27
|
-
};
|
28
|
-
return _this;
|
12
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
29
13
|
}
|
30
|
-
JSONSchemaEditorControl.prototype.renderModalProps = function (
|
31
|
-
var
|
32
|
-
var
|
14
|
+
JSONSchemaEditorControl.prototype.renderModalProps = function (value, onChange) {
|
15
|
+
var _a = this.props, render = _a.render, advancedSettings = _a.advancedSettings;
|
16
|
+
var fields = (advancedSettings === null || advancedSettings === void 0 ? void 0 : advancedSettings[value === null || value === void 0 ? void 0 : value.type]) || [];
|
33
17
|
return render("modal", {
|
34
18
|
type: 'form',
|
35
19
|
wrapWithPanel: false,
|
36
|
-
body:
|
20
|
+
body: fields,
|
21
|
+
submitOnChange: true
|
37
22
|
}, {
|
38
23
|
data: value,
|
39
|
-
|
24
|
+
onSubmit: function (value) { return onChange(value); }
|
40
25
|
});
|
41
26
|
};
|
42
27
|
JSONSchemaEditorControl.prototype.render = function () {
|
43
28
|
var _a = this.props, enableAdvancedSetting = _a.enableAdvancedSetting, rest = (0, tslib_1.__rest)(_a, ["enableAdvancedSetting"]);
|
44
|
-
return (react_1.default.createElement(index_1.default, (0, tslib_1.__assign)({}, rest, {
|
29
|
+
return (react_1.default.createElement(index_1.default, (0, tslib_1.__assign)({}, rest, { enableAdvancedSetting: enableAdvancedSetting, renderModalProps: this.renderModalProps })));
|
45
30
|
};
|
46
31
|
JSONSchemaEditorControl.defaultProps = {
|
47
32
|
enableAdvancedSetting: false
|
@@ -49,7 +34,7 @@ var JSONSchemaEditorControl = /** @class */ (function (_super) {
|
|
49
34
|
(0, tslib_1.__decorate)([
|
50
35
|
helper_1.autobind,
|
51
36
|
(0, tslib_1.__metadata)("design:type", Function),
|
52
|
-
(0, tslib_1.__metadata)("design:paramtypes", [Object]),
|
37
|
+
(0, tslib_1.__metadata)("design:paramtypes", [Object, Function]),
|
53
38
|
(0, tslib_1.__metadata)("design:returntype", void 0)
|
54
39
|
], JSONSchemaEditorControl.prototype, "renderModalProps", null);
|
55
40
|
return JSONSchemaEditorControl;
|
@@ -6,8 +6,8 @@
|
|
6
6
|
"/src/renderers/Form/JSONSchemaEditor.tsx"
|
7
7
|
],
|
8
8
|
"names": [],
|
9
|
-
"mappings": ";;;;AAAA,6DAA0B;AAC1B,+BAAmE;AACnE,4FAAoE;AACpE,6CAA4C;AAyE5C;IAAqD,wDAA0C;IAA/F
|
9
|
+
"mappings": ";;;;AAAA,6DAA0B;AAC1B,+BAAmE;AACnE,4FAAoE;AACpE,6CAA4C;AAyE5C;IAAqD,wDAA0C;IAA/F;;IAmCA,CAAC;IA7BC,kDAAgB,GAAhB,UAAiB,KAAU,EAAE,QAA8B;QACnD,IAAA,KAA6B,IAAI,CAAC,KAAK,EAAtC,MAAM,YAAA,EAAE,gBAAgB,sBAAc,CAAC;QAC9C,IAAM,MAAM,GAAG,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,KAAI,EAAE,CAAC;QACrD,OAAO,MAAM,CACX,OAAO,EACP;YACE,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,MAAM;YACZ,cAAc,EAAE,IAAI;SACrB,EACD;YACE,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,UAAC,KAAU,IAAK,OAAA,QAAQ,CAAC,KAAK,CAAC,EAAf,CAAe;SAC1C,CACF,CAAC;IACJ,CAAC;IAED,wCAAM,GAAN;QACE,IAAM,KAAmC,IAAI,CAAC,KAAK,EAA5C,qBAAqB,2BAAA,EAAK,IAAI,2BAA/B,yBAAgC,CAAa,CAAC;QAEpD,OAAO,CACL,8BAAC,eAAgB,4BACX,IAAI,IACR,qBAAqB,EAAE,qBAAqB,EAC5C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IACvC,CACH,CAAC;IACJ,CAAC;IAjCM,oCAAY,GAAG;QACpB,qBAAqB,EAAE,KAAK;KAC7B,CAAC;IAGF;QADC,iBAAQ;;;;mEAiBR;IAaH,8BAAC;CAAA,AAnCD,CAAqD,eAAK,CAAC,aAAa,GAmCvE;kBAnCoB,uBAAuB;AAwC5C;IAA8C,yDAAuB;IAArE;;IAAuE,CAAC;IAA3D,wBAAwB;QAHpC,IAAA,eAAQ,EAAC;YACR,IAAI,EAAE,oBAAoB;SAC3B,CAAC;OACW,wBAAwB,CAAmC;IAAD,+BAAC;CAAA,AAAxE,CAA8C,uBAAuB,GAAG;AAA3D,4DAAwB",
|
10
10
|
"sourcesContent": [
|
11
|
-
"import React from 'react';\nimport {FormItem, FormControlProps, FormBaseControl} from './Item';\nimport JSONSchemaEditor from '../../components/schema-editor/index';\nimport {autobind} from '../../utils/helper';\n\n/**\n * JSON Schema Editor\n * 文档:https://baidu.gitee.io/amis/docs/components/form/json-schema-editor\n */\nexport interface JSONSchemaEditorControlSchema extends FormBaseControl {\n /**\n * 指定为 JSON Schema Editor\n */\n type: 'json-schema-editor';\n\n /**\n * 可以理解为类型模板,方便快速定义复杂类型\n */\n definitions?: {\n [propName: string]: {\n title: string;\n type:\n | 'string'\n | 'number'\n | '
|
11
|
+
"import React from 'react';\nimport {FormItem, FormControlProps, FormBaseControl} from './Item';\nimport JSONSchemaEditor from '../../components/schema-editor/index';\nimport {autobind} from '../../utils/helper';\n\n/**\n * JSON Schema Editor\n * 文档:https://baidu.gitee.io/amis/docs/components/form/json-schema-editor\n */\nexport interface JSONSchemaEditorControlSchema extends FormBaseControl {\n /**\n * 指定为 JSON Schema Editor\n */\n type: 'json-schema-editor';\n\n /**\n * 可以理解为类型模板,方便快速定义复杂类型\n */\n definitions?: {\n [propName: string]: {\n title: string;\n type:\n | 'string'\n | 'number'\n | 'integer'\n | 'object'\n | 'array'\n | 'boolean'\n | 'null';\n [propName: string]: any;\n };\n };\n\n /**\n * 顶层是否允许修改类型\n */\n rootTypeMutable?: boolean;\n\n /**\n * 顶层类型信息是否隐藏\n */\n showRootInfo?: boolean;\n\n /**\n * 禁用类型,默认禁用了 null 类型\n */\n disabledTypes?: Array<string>;\n\n /**\n * 开启详情配置\n */\n enableAdvancedSetting?: boolean;\n\n /**\n * 自定义详情配置面板如:\n *\n * {\n * boolean: [\n * {type: \"input-text\", name: \"aa\", label: \"AA\" }\n * ]\n * }\n *\n * 当配置布尔字段详情时,就会出现以上配置\n */\n advancedSettings?: {\n [propName: string]: any;\n };\n}\n\nexport interface JSONSchemaEditorProps\n extends FormControlProps,\n Omit<\n JSONSchemaEditorControlSchema,\n 'type' | 'className' | 'descriptionClassName' | 'inputClassName'\n > {}\n\nexport default class JSONSchemaEditorControl extends React.PureComponent<JSONSchemaEditorProps> {\n static defaultProps = {\n enableAdvancedSetting: false\n };\n\n @autobind\n renderModalProps(value: any, onChange: (value: any) => void) {\n const {render, advancedSettings} = this.props;\n const fields = advancedSettings?.[value?.type] || [];\n return render(\n `modal`,\n {\n type: 'form',\n wrapWithPanel: false,\n body: fields,\n submitOnChange: true\n },\n {\n data: value,\n onSubmit: (value: any) => onChange(value)\n }\n );\n }\n\n render() {\n const {enableAdvancedSetting, ...rest} = this.props;\n\n return (\n <JSONSchemaEditor\n {...rest}\n enableAdvancedSetting={enableAdvancedSetting}\n renderModalProps={this.renderModalProps}\n />\n );\n }\n}\n\n@FormItem({\n type: 'json-schema-editor'\n})\nexport class JSONSchemaEditorRenderer extends JSONSchemaEditorControl {}\n"
|
12
12
|
]
|
13
13
|
}
|
@@ -56,18 +56,11 @@ export interface TextAreaState {
|
|
56
56
|
}
|
57
57
|
export default class TextAreaControl extends React.Component<TextAreaProps, TextAreaState> {
|
58
58
|
static defaultProps: Partial<TextAreaProps>;
|
59
|
-
|
60
|
-
focused: boolean;
|
61
|
-
};
|
62
|
-
input?: HTMLInputElement;
|
63
|
-
inputRef: (ref: any) => HTMLInputElement;
|
59
|
+
inputRef: React.RefObject<any>;
|
64
60
|
doAction(action: ListenerAction, args: any): void;
|
65
|
-
valueToString(value: any): string;
|
66
61
|
focus(): void;
|
67
|
-
handleChange(e: React.ChangeEvent<HTMLTextAreaElement>): void;
|
68
62
|
handleFocus(e: React.FocusEvent<HTMLTextAreaElement>): void;
|
69
63
|
handleBlur(e: React.FocusEvent<HTMLTextAreaElement>): void;
|
70
|
-
handleClear(): Promise<void>;
|
71
64
|
render(): JSX.Element;
|
72
65
|
}
|
73
66
|
export declare class TextAreaControlRenderer extends TextAreaControl {
|
@@ -5,57 +5,29 @@ var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
6
6
|
var Item_1 = require("./Item");
|
7
7
|
var Textarea_1 = (0, tslib_1.__importDefault)(require("../../components/Textarea"));
|
8
|
-
var icons_1 = require("../../components/icons");
|
9
|
-
var react_dom_1 = require("react-dom");
|
10
8
|
var helper_1 = require("../../utils/helper");
|
11
9
|
var Decorators_1 = require("../../actions/Decorators");
|
12
10
|
var TextAreaControl = /** @class */ (function (_super) {
|
13
11
|
(0, tslib_1.__extends)(TextAreaControl, _super);
|
14
12
|
function TextAreaControl() {
|
15
13
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
16
|
-
_this.
|
17
|
-
focused: false
|
18
|
-
};
|
19
|
-
_this.inputRef = function (ref) { return (_this.input = (0, react_dom_1.findDOMNode)(ref)); };
|
14
|
+
_this.inputRef = react_1.default.createRef();
|
20
15
|
return _this;
|
21
16
|
}
|
22
17
|
TextAreaControl.prototype.doAction = function (action, args) {
|
23
18
|
var actionType = action === null || action === void 0 ? void 0 : action.actionType;
|
19
|
+
var onChange = this.props.onChange;
|
24
20
|
if (!!~['clear', 'reset'].indexOf(actionType)) {
|
25
|
-
this.
|
21
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(this.props.resetValue);
|
22
|
+
this.focus();
|
26
23
|
}
|
27
24
|
else if (actionType === 'focus') {
|
28
25
|
this.focus();
|
29
26
|
}
|
30
27
|
};
|
31
|
-
TextAreaControl.prototype.valueToString = function (value) {
|
32
|
-
return typeof value === 'undefined' || value === null
|
33
|
-
? ''
|
34
|
-
: typeof value === 'string'
|
35
|
-
? value
|
36
|
-
: JSON.stringify(value);
|
37
|
-
};
|
38
28
|
TextAreaControl.prototype.focus = function () {
|
39
|
-
var
|
40
|
-
|
41
|
-
return;
|
42
|
-
}
|
43
|
-
this.setState({
|
44
|
-
focused: true
|
45
|
-
}, function () {
|
46
|
-
if (!_this.input) {
|
47
|
-
return;
|
48
|
-
}
|
49
|
-
_this.input.focus();
|
50
|
-
// 光标放到最后
|
51
|
-
var len = _this.input.value.length;
|
52
|
-
len && _this.input.setSelectionRange(len, len);
|
53
|
-
});
|
54
|
-
};
|
55
|
-
TextAreaControl.prototype.handleChange = function (e) {
|
56
|
-
var onChange = this.props.onChange;
|
57
|
-
var value = e.currentTarget.value;
|
58
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
29
|
+
var _a;
|
30
|
+
(_a = this.inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
59
31
|
};
|
60
32
|
TextAreaControl.prototype.handleFocus = function (e) {
|
61
33
|
var onFocus = this.props.onFocus;
|
@@ -76,35 +48,11 @@ var TextAreaControl = /** @class */ (function (_super) {
|
|
76
48
|
onBlur && onBlur(e);
|
77
49
|
});
|
78
50
|
};
|
79
|
-
TextAreaControl.prototype.handleClear = function () {
|
80
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
81
|
-
var _a, onChange, resetValue;
|
82
|
-
return (0, tslib_1.__generator)(this, function (_b) {
|
83
|
-
_a = this.props, onChange = _a.onChange, resetValue = _a.resetValue;
|
84
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(resetValue);
|
85
|
-
this.focus();
|
86
|
-
return [2 /*return*/];
|
87
|
-
});
|
88
|
-
});
|
89
|
-
};
|
90
51
|
TextAreaControl.prototype.render = function () {
|
91
|
-
var
|
92
|
-
|
93
|
-
var counter = showCounter ? this.valueToString(value).length : 0;
|
94
|
-
return (react_1.default.createElement("div", { className: cx("TextareaControl", (_a = {},
|
95
|
-
_a["TextareaControl--border".concat((0, helper_1.ucFirst)(borderMode))] = borderMode,
|
96
|
-
_a['is-focused'] = this.state.focused,
|
97
|
-
_a['is-disabled'] = disabled,
|
98
|
-
_a), className) },
|
99
|
-
react_1.default.createElement(Textarea_1.default, { className: cx("TextareaControl-input"), autoComplete: "off", ref: this.inputRef, name: name, disabled: disabled, value: this.valueToString(value), placeholder: placeholder, autoCorrect: "off", spellCheck: "false", readOnly: readOnly, minRows: minRows || undefined, maxRows: maxRows || undefined, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur }),
|
100
|
-
clearable && !disabled && value ? (react_1.default.createElement("a", { onClick: this.handleClear, className: cx('TextareaControl-clear') },
|
101
|
-
react_1.default.createElement(icons_1.Icon, { icon: "input-clear", className: "icon" }))) : null,
|
102
|
-
showCounter ? (react_1.default.createElement("span", { className: cx('TextareaControl-counter', {
|
103
|
-
'is-empty': counter === 0,
|
104
|
-
'is-clearable': clearable && !disabled && value
|
105
|
-
}) }, "".concat(counter).concat(typeof maxLength === 'number' && maxLength ? "/".concat(maxLength) : ''))) : null));
|
52
|
+
var rest = (0, tslib_1.__rest)(this.props, []);
|
53
|
+
return (react_1.default.createElement(Textarea_1.default, (0, tslib_1.__assign)({}, rest, { onFocus: this.handleFocus, onBlur: this.handleBlur })));
|
106
54
|
};
|
107
|
-
var _a, _b
|
55
|
+
var _a, _b;
|
108
56
|
TextAreaControl.defaultProps = {
|
109
57
|
minRows: 3,
|
110
58
|
maxRows: 20,
|
@@ -112,32 +60,20 @@ var TextAreaControl = /** @class */ (function (_super) {
|
|
112
60
|
resetValue: '',
|
113
61
|
clearable: false
|
114
62
|
};
|
115
|
-
(0, tslib_1.__decorate)([
|
116
|
-
helper_1.autobind,
|
117
|
-
(0, tslib_1.__metadata)("design:type", Function),
|
118
|
-
(0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof react_1.default !== "undefined" && react_1.default.ChangeEvent) === "function" ? _a : Object]),
|
119
|
-
(0, tslib_1.__metadata)("design:returntype", void 0)
|
120
|
-
], TextAreaControl.prototype, "handleChange", null);
|
121
63
|
(0, tslib_1.__decorate)([
|
122
64
|
helper_1.autobind,
|
123
65
|
(0, Decorators_1.bindRendererEvent)('focus'),
|
124
66
|
(0, tslib_1.__metadata)("design:type", Function),
|
125
|
-
(0, tslib_1.__metadata)("design:paramtypes", [typeof (
|
67
|
+
(0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof react_1.default !== "undefined" && react_1.default.FocusEvent) === "function" ? _a : Object]),
|
126
68
|
(0, tslib_1.__metadata)("design:returntype", void 0)
|
127
69
|
], TextAreaControl.prototype, "handleFocus", null);
|
128
70
|
(0, tslib_1.__decorate)([
|
129
71
|
helper_1.autobind,
|
130
72
|
(0, Decorators_1.bindRendererEvent)('blur'),
|
131
73
|
(0, tslib_1.__metadata)("design:type", Function),
|
132
|
-
(0, tslib_1.__metadata)("design:paramtypes", [typeof (
|
74
|
+
(0, tslib_1.__metadata)("design:paramtypes", [typeof (_b = typeof react_1.default !== "undefined" && react_1.default.FocusEvent) === "function" ? _b : Object]),
|
133
75
|
(0, tslib_1.__metadata)("design:returntype", void 0)
|
134
76
|
], TextAreaControl.prototype, "handleBlur", null);
|
135
|
-
(0, tslib_1.__decorate)([
|
136
|
-
helper_1.autobind,
|
137
|
-
(0, tslib_1.__metadata)("design:type", Function),
|
138
|
-
(0, tslib_1.__metadata)("design:paramtypes", []),
|
139
|
-
(0, tslib_1.__metadata)("design:returntype", Promise)
|
140
|
-
], TextAreaControl.prototype, "handleClear", null);
|
141
77
|
return TextAreaControl;
|
142
78
|
}(react_1.default.Component));
|
143
79
|
exports.default = TextAreaControl;
|
@@ -6,8 +6,8 @@
|
|
6
6
|
"/src/renderers/Form/Textarea.tsx"
|
7
7
|
],
|
8
8
|
"names": [],
|
9
|
-
"mappings": ";;;;AAAA,6DAA0B;AAC1B,+BAAmE;AAEnE,oFAAiD;
|
9
|
+
"mappings": ";;;;AAAA,6DAA0B;AAC1B,+BAAmE;AAEnE,oFAAiD;AAGjD,6CAAqD;AAErD,uDAA2D;AAoE3D;IAA6C,gDAG5C;IAHD;QAAA,qEAuEC;QA3DC,cAAQ,GAAG,eAAK,CAAC,SAAS,EAAO,CAAC;;IA2DpC,CAAC;IAzDC,kCAAQ,GAAR,UAAS,MAAsB,EAAE,IAAS;QACxC,IAAM,UAAU,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAoB,CAAC;QAChD,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7C,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;aAAM,IAAI,UAAU,KAAK,OAAO,EAAE;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;IAED,+BAAK,GAAL;;QACE,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAID,qCAAW,GAAX,UAAY,CAAwC;QAC3C,IAAA,OAAO,GAAI,IAAI,CAAC,KAAK,QAAd,CAAe;QAE7B,IAAI,CAAC,QAAQ,CACX;YACE,OAAO,EAAE,IAAI;SACd,EACD;YACE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CACF,CAAC;IACJ,CAAC;IAID,oCAAU,GAAV,UAAW,CAAwC;QAC3C,IAAA,KAA0C,IAAI,CAAC,KAAK,EAAnD,MAAM,YAAA,EAAE,YAAY,kBAAA,EAAE,KAAK,WAAA,EAAE,QAAQ,cAAc,CAAC;QAE3D,IAAI,CAAC,QAAQ,CACX;YACE,OAAO,EAAE,KAAK;SACf,EACD;YACE,IAAI,YAAY,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBACtD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;aACxB;YAED,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;IACJ,CAAC;IAED,gCAAM,GAAN;QACE,IAAU,IAAI,uBAAI,IAAI,CAAC,KAAK,EAAtB,EAAS,CAAa,CAAC;QAE7B,OAAO,CACL,8BAAC,kBAAQ,4BAAK,IAAI,IAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,CAC3E,CAAC;IACJ,CAAC;;IAlEM,4BAAY,GAA2B;QAC5C,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,KAAK;KACjB,CAAC;IAsBF;QAFC,iBAAQ;QACR,IAAA,8BAAiB,EAAuC,OAAO,CAAC;;0EAClD,eAAK,oBAAL,eAAK,CAAC,UAAU;;sDAW9B;IAID;QAFC,iBAAQ;QACR,IAAA,8BAAiB,EAAuC,MAAM,CAAC;;0EAClD,eAAK,oBAAL,eAAK,CAAC,UAAU;;qDAe7B;IASH,sBAAC;CAAA,AAvED,CAA6C,eAAK,CAAC,SAAS,GAuE3D;kBAvEoB,eAAe;AA4EpC;IAA6C,wDAAe;IAA5D;;IAA8D,CAAC;IAAlD,uBAAuB;QAHnC,IAAA,eAAQ,EAAC;YACR,IAAI,EAAE,UAAU;SACjB,CAAC;OACW,uBAAuB,CAA2B;IAAD,8BAAC;CAAA,AAA/D,CAA6C,eAAe,GAAG;AAAlD,0DAAuB",
|
10
10
|
"sourcesContent": [
|
11
|
-
"import React from 'react';\nimport {FormItem, FormControlProps, FormBaseControl} from './Item';\nimport cx from 'classnames';\nimport Textarea from '../../components/Textarea';\nimport {Icon} from '../../components/icons';\nimport {findDOMNode} from 'react-dom';\nimport {autobind, ucFirst} from '../../utils/helper';\n\nimport {bindRendererEvent} from '../../actions/Decorators';\nimport type {ListenerAction} from '../../actions/Action';\n\n/**\n * TextArea 多行文本输入框。\n * 文档:https://baidu.gitee.io/amis/docs/components/form/textarea\n */\nexport interface TextareaControlSchema extends FormBaseControl {\n /**\n * 指定为多行文本输入框\n */\n type: 'textarea';\n\n /**\n * 最大行数\n */\n maxRows?: number;\n\n /**\n * 最小行数\n */\n minRows?: number;\n\n /**\n * 是否只读\n */\n readOnly?: boolean;\n\n /**\n * 边框模式,全边框,还是半边框,或者没边框。\n */\n borderMode?: 'full' | 'half' | 'none';\n\n /**\n * 限制文字个数\n */\n maxLength?: number;\n\n /**\n * 是否显示计数\n */\n showCounter?: boolean;\n\n /**\n * 输入内容是否可清除\n */\n clearable?: boolean;\n\n /**\n * 重置值\n */\n resetValue?: string;\n}\n\nexport type TextAreaRendererEvent = 'blur' | 'focus';\n\nexport interface TextAreaProps extends FormControlProps {\n placeholder?: string;\n minRows?: number;\n maxRows?: number;\n clearable?: boolean;\n resetValue?: string;\n}\n\nexport interface TextAreaState {\n focused: boolean;\n}\n\nexport default class TextAreaControl extends React.Component<\n TextAreaProps,\n TextAreaState\n> {\n static defaultProps: Partial<TextAreaProps> = {\n minRows: 3,\n maxRows: 20,\n trimContents: true,\n resetValue: '',\n clearable: false\n };\n\n
|
11
|
+
"import React from 'react';\nimport {FormItem, FormControlProps, FormBaseControl} from './Item';\nimport cx from 'classnames';\nimport Textarea from '../../components/Textarea';\nimport {Icon} from '../../components/icons';\nimport {findDOMNode} from 'react-dom';\nimport {autobind, ucFirst} from '../../utils/helper';\n\nimport {bindRendererEvent} from '../../actions/Decorators';\nimport type {ListenerAction} from '../../actions/Action';\n\n/**\n * TextArea 多行文本输入框。\n * 文档:https://baidu.gitee.io/amis/docs/components/form/textarea\n */\nexport interface TextareaControlSchema extends FormBaseControl {\n /**\n * 指定为多行文本输入框\n */\n type: 'textarea';\n\n /**\n * 最大行数\n */\n maxRows?: number;\n\n /**\n * 最小行数\n */\n minRows?: number;\n\n /**\n * 是否只读\n */\n readOnly?: boolean;\n\n /**\n * 边框模式,全边框,还是半边框,或者没边框。\n */\n borderMode?: 'full' | 'half' | 'none';\n\n /**\n * 限制文字个数\n */\n maxLength?: number;\n\n /**\n * 是否显示计数\n */\n showCounter?: boolean;\n\n /**\n * 输入内容是否可清除\n */\n clearable?: boolean;\n\n /**\n * 重置值\n */\n resetValue?: string;\n}\n\nexport type TextAreaRendererEvent = 'blur' | 'focus';\n\nexport interface TextAreaProps extends FormControlProps {\n placeholder?: string;\n minRows?: number;\n maxRows?: number;\n clearable?: boolean;\n resetValue?: string;\n}\n\nexport interface TextAreaState {\n focused: boolean;\n}\n\nexport default class TextAreaControl extends React.Component<\n TextAreaProps,\n TextAreaState\n> {\n static defaultProps: Partial<TextAreaProps> = {\n minRows: 3,\n maxRows: 20,\n trimContents: true,\n resetValue: '',\n clearable: false\n };\n\n inputRef = React.createRef<any>();\n\n doAction(action: ListenerAction, args: any) {\n const actionType = action?.actionType as string;\n const onChange = this.props.onChange;\n\n if (!!~['clear', 'reset'].indexOf(actionType)) {\n onChange?.(this.props.resetValue);\n this.focus();\n } else if (actionType === 'focus') {\n this.focus();\n }\n }\n\n focus() {\n this.inputRef.current?.focus();\n }\n\n @autobind\n @bindRendererEvent<TextAreaProps, TextAreaRendererEvent>('focus')\n handleFocus(e: React.FocusEvent<HTMLTextAreaElement>) {\n const {onFocus} = this.props;\n\n this.setState(\n {\n focused: true\n },\n () => {\n onFocus && onFocus(e);\n }\n );\n }\n\n @autobind\n @bindRendererEvent<TextAreaProps, TextAreaRendererEvent>('blur')\n handleBlur(e: React.FocusEvent<HTMLTextAreaElement>) {\n const {onBlur, trimContents, value, onChange} = this.props;\n\n this.setState(\n {\n focused: false\n },\n () => {\n if (trimContents && value && typeof value === 'string') {\n onChange(value.trim());\n }\n\n onBlur && onBlur(e);\n }\n );\n }\n\n render() {\n const {...rest} = this.props;\n\n return (\n <Textarea {...rest} onFocus={this.handleFocus} onBlur={this.handleBlur} />\n );\n }\n}\n\n@FormItem({\n type: 'textarea'\n})\nexport class TextAreaControlRenderer extends TextAreaControl {}\n"
|
12
12
|
]
|
13
13
|
}
|