amis 1.9.1-beta.0 → 1.9.1-beta.4
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/SchemaRenderer.js +6 -9
- package/lib/SchemaRenderer.js.map +2 -2
- package/lib/actions/CmptAction.js +4 -4
- package/lib/actions/CmptAction.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 +22 -13
- 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/components/table/ItemActionsWrapper.d.ts +10 -0
- package/lib/components/table/ItemActionsWrapper.js +25 -0
- package/lib/components/table/ItemActionsWrapper.js.map +13 -0
- package/lib/components/table/index.d.ts +48 -41
- package/lib/components/table/index.js +46 -18
- package/lib/components/table/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/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/Options.js +11 -5
- package/lib/renderers/Form/Options.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/Form/wrapControl.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/Table-v2/index.d.ts +14 -2
- package/lib/renderers/Table-v2/index.js +33 -3
- package/lib/renderers/Table-v2/index.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 +552 -5
- 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 +1653 -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/SchemaRenderer.tsx +1 -4
- package/src/actions/CmptAction.ts +4 -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 +35 -11
- 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/components/table/ItemActionsWrapper.tsx +32 -0
- package/src/components/table/index.tsx +115 -58
- 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/JSONSchema.tsx +56 -0
- package/src/renderers/Form/JSONSchemaEditor.tsx +8 -27
- package/src/renderers/Form/Options.tsx +17 -7
- 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/Form/wrapControl.tsx +0 -1
- package/src/renderers/Log.tsx +213 -19
- package/src/renderers/Page.tsx +6 -1
- package/src/renderers/Service.tsx +5 -1
- package/src/renderers/Table-v2/index.tsx +65 -2
- 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
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "UserTabSelect.js",
|
4
|
+
"sourceRoot": "",
|
5
|
+
"sources": [
|
6
|
+
"/src/components/UserTabSelect.tsx"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": "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",
|
10
|
+
"sourcesContent": [
|
11
|
+
"/**\n * @file 移动端人员、部门、角色、岗位选择\n * @author fex\n */\n\nimport React from 'react';\nimport {themeable, ThemeProps} from '../theme';\nimport {LocaleProps, localeable} from '../locale';\nimport {ResultBox} from '../components';\nimport UserSelect from './UserSelect';\nimport {Option} from '../renderers/Form/Options';\nimport Sortable from 'sortablejs';\nimport PopUp from '../components/PopUp';\nimport {Icon} from '../components/icons';\nimport {autobind, findTree} from '../utils/helper';\nimport {default as Tabs, Tab} from './Tabs';\nimport {UserSelectProps} from './UserSelect';\nimport {PlainObject} from '../types';\nimport {resolveVariableAndFilter} from '../utils/tpl-builtin';\n\nexport interface UserSelectTop extends UserSelectProps {\n title: string;\n deferApi?: string;\n searchApi?: string;\n searchable?: boolean;\n searchParam?: PlainObject;\n searchTerm?: string;\n}\nexport interface UserTabSelectProps extends ThemeProps, LocaleProps {\n tabOptions?: Array<UserSelectTop>;\n multiple?: boolean;\n placeholder?: string;\n valueField?: string;\n labelField?: string;\n selection?: Array<Option>;\n data?: PlainObject;\n onChange: (value: Array<Option> | Option) => void;\n onSearch?: (\n term: string,\n cancelExecutor: Function,\n paramObj?: PlainObject\n ) => Promise<any[]> | undefined;\n deferLoad: (\n data?: Object,\n isRef?: boolean,\n param?: PlainObject\n ) => Promise<Option[]>;\n}\n\nexport interface UserTabSelectState {\n isOpened: boolean;\n isSearch: boolean;\n isSelectOpened: boolean;\n inputValue: string;\n breadList: Array<any>;\n options: Array<Option>;\n tempSelection: Array<Option>;\n selection: Array<Option>;\n searchList: Array<Option>;\n searchLoading: boolean;\n isEdit: boolean;\n activeKey: number;\n}\n\nexport class UserTabSelect extends React.Component<\n UserTabSelectProps,\n UserTabSelectState\n> {\n cancelSearch?: Function;\n sortable?: Sortable;\n unmounted = false;\n\n constructor(props: UserTabSelectProps) {\n super(props);\n this.state = {\n isOpened: false,\n isSelectOpened: false,\n inputValue: '',\n options: [],\n breadList: [],\n searchList: [],\n tempSelection: [],\n selection: props.selection ? props.selection : [],\n isSearch: false,\n searchLoading: false,\n isEdit: false,\n activeKey: 0\n };\n }\n\n static defaultProps = {};\n\n componentDidMount() {}\n\n componentDidUpdate(prevProps: UserTabSelectProps) {}\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n @autobind\n onClose() {\n this.setState({\n isOpened: false,\n isSearch: false,\n inputValue: '',\n searchList: [],\n searchLoading: false,\n activeKey: 0\n });\n }\n\n @autobind\n onOpen() {\n const {selection} = this.state;\n this.setState({\n isOpened: true,\n tempSelection: selection.slice()\n });\n }\n\n @autobind\n handleBack() {\n this.onClose();\n const {onChange} = this.props;\n onChange(this.state.selection);\n }\n\n @autobind\n handleSelectChange(option: Option | Array<Option>, isReplace?: boolean) {\n const {multiple, valueField = 'value'} = this.props;\n let selection = this.state.selection.slice();\n let selectionVals = selection.map((option: Option) => option[valueField]);\n if (isReplace && Array.isArray(option)) {\n selection = option.slice();\n } else if (!Array.isArray(option)) {\n let pos = selectionVals.indexOf(option[valueField]);\n if (pos !== -1) {\n selection.splice(selection.indexOf(option), 1);\n } else {\n if (multiple) {\n selection.push(option);\n } else {\n selection = [option];\n }\n }\n }\n\n this.setState({\n selection: selection\n });\n return false;\n }\n\n @autobind\n handleTabChange(key: number) {\n this.setState({\n activeKey: key\n });\n }\n\n render() {\n let {\n classnames: cx,\n translate: __,\n onChange,\n placeholder = '请选择',\n tabOptions,\n onSearch,\n deferLoad,\n data\n } = this.props;\n const {activeKey, isOpened, selection} = this.state;\n\n return (\n <div className={cx('UserTabSelect')}>\n <ResultBox\n className={cx('UserTabSelect-input', isOpened ? 'is-active' : '')}\n allowInput={false}\n result={selection}\n onResultChange={value => this.handleSelectChange(value, true)}\n onResultClick={this.onOpen}\n placeholder={placeholder}\n useMobileUI\n />\n <PopUp\n isShow={isOpened}\n className={cx(`UserTabSelect-popup`)}\n onHide={this.onClose}\n showClose={false}\n >\n <div className={cx('UserTabSelect-wrap')}>\n <div className={cx('UserSelect-navbar')}>\n <span className=\"left-arrow-box\" onClick={this.handleBack}>\n <Icon icon=\"left-arrow\" className=\"icon\" />\n </span>\n <div className={cx('UserSelect-navbar-title')}>人员选择</div>\n </div>\n <Tabs\n mode=\"tiled\"\n className={cx('UserTabSelect-tabs')}\n onSelect={this.handleTabChange}\n activeKey={activeKey}\n >\n {tabOptions?.map((item: UserSelectTop, index: number) => {\n return (\n <Tab\n {...this.props}\n eventKey={index}\n key={index}\n title={item.title}\n className=\"TabsTransfer-tab\"\n >\n <UserSelect\n selection={selection}\n showResultBox={false}\n {...item}\n options={\n typeof item.options === 'string' && data\n ? resolveVariableAndFilter(\n item.options,\n data,\n '| raw'\n )\n : item.options\n }\n multiple\n controlled\n onChange={this.handleSelectChange}\n onSearch={(input: string, cancelExecutor: Function) =>\n item.searchable && onSearch\n ? onSearch(input, cancelExecutor, {\n searchApi: item.searchApi,\n searchParam: item.searchParam,\n searchTerm: item.searchTerm\n })\n : undefined\n }\n deferLoad={(\n data?: PlainObject,\n isRef?: boolean,\n param?: PlainObject\n ) =>\n deferLoad(data, isRef, {\n deferApi: item.deferApi,\n ...(param || {})\n })\n }\n />\n </Tab>\n );\n })}\n </Tabs>\n </div>\n </PopUp>\n </div>\n );\n }\n}\n\nexport default themeable(localeable(UserTabSelect));\n"
|
12
|
+
]
|
13
|
+
}
|
@@ -39,6 +39,7 @@ export interface RemoteOptionsProps<T = any> {
|
|
39
39
|
updateConfig: (value: T, ctx?: any) => void;
|
40
40
|
}
|
41
41
|
export interface WithRemoteConfigSettings {
|
42
|
+
sourceField?: string;
|
42
43
|
/**
|
43
44
|
* 从接口返回数据适配到配置
|
44
45
|
*/
|
@@ -59,6 +60,12 @@ export interface WithRemoteConfigSettings {
|
|
59
60
|
* 懒加载选项相关,结束懒加载的回调
|
60
61
|
*/
|
61
62
|
afterDeferLoad?: (item: any, indexes: Array<number>, reponse: Payload, config: any, props: any) => any;
|
63
|
+
injectedPropsFilter?: (injectedProps: {
|
64
|
+
config: any;
|
65
|
+
loading?: boolean;
|
66
|
+
deferLoad: (term: string) => any;
|
67
|
+
updateConfig: (config: any) => void;
|
68
|
+
}, props: any) => any;
|
62
69
|
}
|
63
70
|
export declare function withRemoteConfig<P = any>(config?: WithRemoteConfigSettings): <T extends React.ComponentType<React.ComponentProps<T> & RemoteOptionsProps<P>>>(ComposedComponent: T) => {
|
64
71
|
new (props: Omit<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, keyof RemoteOptionsProps<P>>> & OutterProps & {
|
@@ -100,15 +100,16 @@ function withRemoteConfig(config) {
|
|
100
100
|
props.store.setComponent(_this);
|
101
101
|
_this.deferLoadConfig = _this.deferLoadConfig.bind(_this);
|
102
102
|
(_a = props.remoteConfigRef) === null || _a === void 0 ? void 0 : _a.call(props, _this);
|
103
|
+
props.store.setData(props.data);
|
104
|
+
_this.syncConfig();
|
103
105
|
return _this;
|
104
106
|
}
|
105
107
|
class_1.prototype.componentDidMount = function () {
|
106
108
|
var _this = this;
|
107
109
|
var env = this.props.env || this.context;
|
108
|
-
var _a = this.props, store = _a.store,
|
109
|
-
|
110
|
+
var _a = this.props, store = _a.store, data = _a.data;
|
111
|
+
var source = this.props[config.sourceField || 'source'];
|
110
112
|
if ((0, tpl_builtin_1.isPureVariable)(source)) {
|
111
|
-
this.syncConfig();
|
112
113
|
this.toDispose.push((0, mobx_1.reaction)(function () {
|
113
114
|
return (0, tpl_builtin_1.resolveVariableAndFilter)(source, store.data, '| raw');
|
114
115
|
}, function () { return _this.syncConfig(); }));
|
@@ -142,17 +143,18 @@ function withRemoteConfig(config) {
|
|
142
143
|
class_1.prototype.loadConfig = function (ctx) {
|
143
144
|
if (ctx === void 0) { ctx = this.props.data; }
|
144
145
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
145
|
-
var env,
|
146
|
-
return (0, tslib_1.__generator)(this, function (
|
147
|
-
switch (
|
146
|
+
var env, store, source;
|
147
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
148
|
+
switch (_a.label) {
|
148
149
|
case 0:
|
149
150
|
env = this.props.env || this.context;
|
150
|
-
|
151
|
+
store = this.props.store;
|
152
|
+
source = this.props[config.sourceField || 'source'];
|
151
153
|
if (!(env && (0, api_1.isEffectiveApi)(source, ctx))) return [3 /*break*/, 2];
|
152
154
|
return [4 /*yield*/, store.load(env, source, ctx, config)];
|
153
155
|
case 1:
|
154
|
-
|
155
|
-
|
156
|
+
_a.sent();
|
157
|
+
_a.label = 2;
|
156
158
|
case 2: return [2 /*return*/];
|
157
159
|
}
|
158
160
|
});
|
@@ -180,19 +182,24 @@ function withRemoteConfig(config) {
|
|
180
182
|
store.setConfig(value, config, ctx);
|
181
183
|
};
|
182
184
|
class_1.prototype.syncConfig = function () {
|
183
|
-
var _a = this.props, store = _a.store,
|
185
|
+
var _a = this.props, store = _a.store, data = _a.data;
|
186
|
+
var source = this.props[config.sourceField || 'source'];
|
184
187
|
if ((0, tpl_builtin_1.isPureVariable)(source)) {
|
185
188
|
store.setConfig((0, tpl_builtin_1.resolveVariableAndFilter)(source, data, '| raw') || [], config, 'syncConfig');
|
186
189
|
}
|
190
|
+
else if ((0, helper_1.isObject)(source) && !(0, api_1.isEffectiveApi)(source, data)) {
|
191
|
+
store.setConfig(source, config, 'syncConfig');
|
192
|
+
}
|
187
193
|
};
|
188
194
|
class_1.prototype.deferLoadConfig = function (item) {
|
189
195
|
var _a, _b;
|
190
196
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
191
|
-
var _c, store,
|
197
|
+
var _c, store, data, deferApi, source, env, indexes, ret, response, e_2, ret2;
|
192
198
|
return (0, tslib_1.__generator)(this, function (_d) {
|
193
199
|
switch (_d.label) {
|
194
200
|
case 0:
|
195
|
-
_c = this.props, store = _c.store,
|
201
|
+
_c = this.props, store = _c.store, data = _c.data, deferApi = _c.deferApi;
|
202
|
+
source = this.props[config.sourceField || 'source'];
|
196
203
|
env = this.props.env || this.context;
|
197
204
|
indexes = (0, helper_1.findTreeIndex)(store.config, function (a) { return a === item; });
|
198
205
|
ret = (_a = config.beforeDeferLoad) === null || _a === void 0 ? void 0 : _a.call(config, item, indexes, store.config, this.props);
|
@@ -237,7 +244,9 @@ function withRemoteConfig(config) {
|
|
237
244
|
var _a = this.props, remoteConfigRef = _a.remoteConfigRef, autoComplete = _a.autoComplete, rest = (0, tslib_1.__rest)(_a, ["remoteConfigRef", "autoComplete"]);
|
238
245
|
return (react_1.default.createElement(ComposedComponent, (0, tslib_1.__assign)({}, rest, (env && (0, api_1.isEffectiveApi)(autoComplete) && this.loadOptions
|
239
246
|
? { loadOptions: this.loadOptions }
|
240
|
-
: {}),
|
247
|
+
: {}), (config.injectedPropsFilter
|
248
|
+
? config.injectedPropsFilter(injectedProps, this.props)
|
249
|
+
: injectedProps))));
|
241
250
|
};
|
242
251
|
return class_1;
|
243
252
|
}(react_1.default.Component)),
|
@@ -6,8 +6,8 @@
|
|
6
6
|
"/src/components/WithRemoteConfig.tsx"
|
7
7
|
],
|
8
8
|
"names": [],
|
9
|
-
"mappings": ";;;;AAAA;;;GAGG;AACH,6DAA0B;AAC1B,iGAA0D;AAC1D,0EAAuC;AAGvC,yCAAsC;AAEtC,8BAA+C;AAE/C,mDAA+D;AAC/D,oCAKsB;AACtB,oDAI8B;AAC9B,6BAA8B;AAC9B,
|
9
|
+
"mappings": "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",
|
10
10
|
"sourcesContent": [
|
11
|
-
"/**\n * 一个可以拉取远程配置的 HOC\n *\n */\nimport React from 'react';\nimport hoistNonReactStatic from 'hoist-non-react-statics';\nimport debounce from 'lodash/debounce';\nimport {Api, Payload} from '../types';\nimport {SchemaApi, SchemaTokenizeableString} from '../Schema';\nimport {withStore} from './WithStore';\n\nimport {EnvContext, RendererEnv} from '../env';\n\nimport {flow, Instance, isAlive, types} from 'mobx-state-tree';\nimport {\n buildApi,\n isEffectiveApi,\n normalizeApi,\n normalizeApiResponseData\n} from '../utils/api';\nimport {\n isPureVariable,\n resolveVariableAndFilter,\n tokenize\n} from '../utils/tpl-builtin';\nimport {reaction} from 'mobx';\nimport {createObject, findIndex, findTreeIndex} from '../utils/helper';\n\nexport const Store = types\n .model('RemoteConfigStore')\n .props({\n fetching: false,\n errorMsg: '',\n config: types.frozen(),\n data: types.frozen({})\n })\n .actions(self => {\n let component: any = undefined;\n\n const load: (\n env: RendererEnv,\n api: Api,\n ctx: any,\n config: WithRemoteConfigSettings\n ) => Promise<any> = flow(function* (env, api, ctx, config = {}): any {\n try {\n self.fetching = true;\n const ret: Payload = yield env.fetcher(api, ctx);\n if (!isAlive(self)) {\n return;\n }\n\n if (ret.ok) {\n const data = normalizeApiResponseData(ret.data);\n let options = config.adaptor\n ? config.adaptor(data, component.props)\n : data;\n (self as any).setConfig(options, config, 'remote');\n config.afterLoad?.(data, self.config, component.props);\n return ret;\n } else {\n throw new Error(ret.msg || 'fetch error');\n }\n } catch (e) {\n isAlive(self) && (self.errorMsg = e.message);\n } finally {\n isAlive(self) && (self.fetching = false);\n }\n });\n\n return {\n setComponent(c: any) {\n component = c;\n },\n\n load,\n setData(data: any) {\n self.data = data || {};\n },\n setConfig(\n options: any,\n config: WithRemoteConfigSettings,\n motivation?: any\n ) {\n if (config.normalizeConfig) {\n options =\n config.normalizeConfig(\n options,\n self.config,\n component.props,\n motivation\n ) || options;\n }\n\n self.config = options;\n }\n };\n });\n\nexport type IStore = Instance<typeof Store>;\n\nexport interface OutterProps {\n env?: RendererEnv;\n data: any;\n source?: SchemaApi | SchemaTokenizeableString;\n autoComplete?: SchemaApi | SchemaTokenizeableString;\n deferApi?: SchemaApi;\n remoteConfigRef?: (\n instance:\n | {\n loadConfig: (ctx?: any) => Promise<any> | void;\n setConfig: (value: any) => void;\n }\n | undefined\n ) => void;\n}\n\nexport interface RemoteOptionsProps<T = any> {\n config: T;\n loading?: boolean;\n deferLoad: (item: any) => Promise<any>;\n updateConfig: (value: T, ctx?: any) => void;\n}\n\nexport interface WithRemoteConfigSettings {\n /**\n * 从接口返回数据适配到配置\n */\n adaptor?: (json: any, props: any) => any;\n\n /**\n * 配置格式化\n */\n normalizeConfig?: (\n config: any,\n origin: any,\n props: any,\n motivation?: any\n ) => any;\n\n /**\n * 请求返回后的回调\n */\n afterLoad?: (ret: any, config: any, props: any) => void;\n\n /**\n * 懒加载选项相关,开始懒加载的回调\n */\n beforeDeferLoad?: (\n item: any,\n indexes: Array<number>,\n config: any,\n props: any\n ) => any;\n\n /**\n * 懒加载选项相关,结束懒加载的回调\n */\n afterDeferLoad?: (\n item: any,\n indexes: Array<number>,\n reponse: Payload,\n config: any,\n props: any\n ) => any;\n}\n\nexport function withRemoteConfig<P = any>(\n config: WithRemoteConfigSettings = {}\n) {\n return function <\n T extends React.ComponentType<\n React.ComponentProps<T> & RemoteOptionsProps<P>\n >\n >(ComposedComponent: T) {\n type FinalOutterProps = JSX.LibraryManagedAttributes<\n T,\n Omit<React.ComponentProps<T>, keyof RemoteOptionsProps<P>>\n > &\n OutterProps;\n\n const result = hoistNonReactStatic(\n withStore(() => Store.create())(\n class extends React.Component<\n FinalOutterProps & {\n store: IStore;\n }\n > {\n static displayName = `WithRemoteConfig(${\n ComposedComponent.displayName || ComposedComponent.name\n })`;\n static ComposedComponent =\n ComposedComponent as React.ComponentType<T>;\n static contextType = EnvContext;\n toDispose: Array<() => void> = [];\n\n loadOptions = debounce(this.loadAutoComplete.bind(this), 250, {\n trailing: true,\n leading: false\n });\n\n constructor(\n props: FinalOutterProps & {\n store: IStore;\n }\n ) {\n super(props);\n\n this.setConfig = this.setConfig.bind(this);\n props.store.setComponent(this);\n this.deferLoadConfig = this.deferLoadConfig.bind(this);\n props.remoteConfigRef?.(this);\n }\n\n componentDidMount() {\n const env: RendererEnv = this.props.env || this.context;\n const {store, source, data} = this.props;\n\n store.setData(data);\n\n if (isPureVariable(source)) {\n this.syncConfig();\n this.toDispose.push(\n reaction(\n () =>\n resolveVariableAndFilter(\n source as string,\n store.data,\n '| raw'\n ),\n () => this.syncConfig()\n )\n );\n } else if (env && isEffectiveApi(source, data)) {\n this.loadConfig();\n source.autoRefresh !== false &&\n this.toDispose.push(\n reaction(\n () => {\n const api = normalizeApi(source as string);\n return api.trackExpression\n ? tokenize(api.trackExpression, store.data)\n : buildApi(api, store.data, {\n ignoreData: true\n }).url;\n },\n () => this.loadConfig()\n )\n );\n }\n }\n\n componentDidUpdate(prevProps: any) {\n const props = this.props;\n\n if (props.data !== prevProps.data) {\n props.store.setData(props.data);\n }\n }\n\n componentWillUnmount() {\n this.toDispose.forEach(fn => fn());\n this.toDispose = [];\n\n this.props.remoteConfigRef?.(undefined);\n this.loadOptions.cancel();\n }\n\n async loadConfig(ctx = this.props.data) {\n const env: RendererEnv = this.props.env || this.context;\n const {store, source} = this.props;\n\n if (env && isEffectiveApi(source, ctx)) {\n await store.load(env, source, ctx, config);\n }\n }\n\n loadAutoComplete(input: string) {\n const env: RendererEnv = this.props.env || this.context;\n const {autoComplete, data, store} = this.props;\n\n if (!env || !env.fetcher) {\n throw new Error('fetcher is required');\n }\n\n const ctx = createObject(data, {\n term: input,\n value: input\n });\n\n if (!isEffectiveApi(autoComplete, ctx)) {\n return Promise.resolve({\n options: []\n });\n }\n\n return store.load(env, autoComplete, ctx, config);\n }\n\n setConfig(value: any, ctx?: any) {\n const {store} = this.props;\n store.setConfig(value, config, ctx);\n }\n\n syncConfig() {\n const {store, source, data} = this.props;\n\n if (isPureVariable(source)) {\n store.setConfig(\n resolveVariableAndFilter(source as string, data, '| raw') || [],\n config,\n 'syncConfig'\n );\n }\n }\n\n async deferLoadConfig(item: any) {\n const {store, source, data, deferApi} = this.props;\n const env: RendererEnv = this.props.env || this.context;\n const indexes = findTreeIndex(store.config, a => a === item)!;\n\n const ret = config.beforeDeferLoad?.(\n item,\n indexes,\n store.config,\n this.props\n );\n\n ret && store.setConfig(ret, config, 'before-defer-load');\n let response: Payload;\n try {\n if (!isEffectiveApi(item.deferApi || deferApi || source)) {\n throw new Error('deferApi is required');\n }\n\n response = await env.fetcher(\n item.deferApi || deferApi || source,\n createObject(data, item)\n );\n } catch (e) {\n response = {\n ok: false,\n msg: e.message,\n status: 500,\n data: undefined\n };\n }\n const ret2 = config.afterDeferLoad?.(\n item,\n indexes, // 只能假定还是那个 index 了\n response,\n store.config,\n this.props\n );\n ret2 && store.setConfig(ret2, config, 'after-defer-load');\n }\n\n render() {\n const store = this.props.store;\n const env: RendererEnv = this.props.env || this.context;\n const injectedProps: RemoteOptionsProps<P> = {\n config: store.config,\n loading: store.fetching,\n deferLoad: this.deferLoadConfig,\n updateConfig: this.setConfig\n };\n const {remoteConfigRef, autoComplete, ...rest} = this.props;\n\n return (\n <ComposedComponent\n {...(rest as JSX.LibraryManagedAttributes<\n T,\n React.ComponentProps<T>\n >)}\n {...(env && isEffectiveApi(autoComplete) && this.loadOptions\n ? {loadOptions: this.loadOptions}\n : {})}\n {...injectedProps}\n />\n );\n }\n }\n ),\n ComposedComponent\n );\n\n return result as typeof result & {\n ComposedComponent: T;\n };\n };\n}\n"
|
11
|
+
"/**\n * 一个可以拉取远程配置的 HOC\n *\n */\nimport React from 'react';\nimport hoistNonReactStatic from 'hoist-non-react-statics';\nimport debounce from 'lodash/debounce';\nimport {Api, ApiObject, Payload} from '../types';\nimport {SchemaApi, SchemaTokenizeableString} from '../Schema';\nimport {withStore} from './WithStore';\n\nimport {EnvContext, RendererEnv} from '../env';\n\nimport {flow, Instance, isAlive, types} from 'mobx-state-tree';\nimport {\n buildApi,\n isEffectiveApi,\n normalizeApi,\n normalizeApiResponseData\n} from '../utils/api';\nimport {\n isPureVariable,\n resolveVariableAndFilter,\n tokenize\n} from '../utils/tpl-builtin';\nimport {reaction} from 'mobx';\nimport {\n createObject,\n findIndex,\n findTreeIndex,\n isObject\n} from '../utils/helper';\n\nexport const Store = types\n .model('RemoteConfigStore')\n .props({\n fetching: false,\n errorMsg: '',\n config: types.frozen(),\n data: types.frozen({})\n })\n .actions(self => {\n let component: any = undefined;\n\n const load: (\n env: RendererEnv,\n api: Api,\n ctx: any,\n config: WithRemoteConfigSettings\n ) => Promise<any> = flow(function* (env, api, ctx, config = {}): any {\n try {\n self.fetching = true;\n const ret: Payload = yield env.fetcher(api, ctx);\n if (!isAlive(self)) {\n return;\n }\n\n if (ret.ok) {\n const data = normalizeApiResponseData(ret.data);\n let options = config.adaptor\n ? config.adaptor(data, component.props)\n : data;\n (self as any).setConfig(options, config, 'remote');\n config.afterLoad?.(data, self.config, component.props);\n return ret;\n } else {\n throw new Error(ret.msg || 'fetch error');\n }\n } catch (e) {\n isAlive(self) && (self.errorMsg = e.message);\n } finally {\n isAlive(self) && (self.fetching = false);\n }\n });\n\n return {\n setComponent(c: any) {\n component = c;\n },\n\n load,\n setData(data: any) {\n self.data = data || {};\n },\n setConfig(\n options: any,\n config: WithRemoteConfigSettings,\n motivation?: any\n ) {\n if (config.normalizeConfig) {\n options =\n config.normalizeConfig(\n options,\n self.config,\n component.props,\n motivation\n ) || options;\n }\n\n self.config = options;\n }\n };\n });\n\nexport type IStore = Instance<typeof Store>;\n\nexport interface OutterProps {\n env?: RendererEnv;\n data: any;\n source?: SchemaApi | SchemaTokenizeableString;\n autoComplete?: SchemaApi | SchemaTokenizeableString;\n deferApi?: SchemaApi;\n remoteConfigRef?: (\n instance:\n | {\n loadConfig: (ctx?: any) => Promise<any> | void;\n setConfig: (value: any) => void;\n }\n | undefined\n ) => void;\n}\n\nexport interface RemoteOptionsProps<T = any> {\n config: T;\n loading?: boolean;\n deferLoad: (item: any) => Promise<any>;\n updateConfig: (value: T, ctx?: any) => void;\n}\n\nexport interface WithRemoteConfigSettings {\n sourceField?: string;\n\n /**\n * 从接口返回数据适配到配置\n */\n adaptor?: (json: any, props: any) => any;\n\n /**\n * 配置格式化\n */\n normalizeConfig?: (\n config: any,\n origin: any,\n props: any,\n motivation?: any\n ) => any;\n\n /**\n * 请求返回后的回调\n */\n afterLoad?: (ret: any, config: any, props: any) => void;\n\n /**\n * 懒加载选项相关,开始懒加载的回调\n */\n beforeDeferLoad?: (\n item: any,\n indexes: Array<number>,\n config: any,\n props: any\n ) => any;\n\n /**\n * 懒加载选项相关,结束懒加载的回调\n */\n afterDeferLoad?: (\n item: any,\n indexes: Array<number>,\n reponse: Payload,\n config: any,\n props: any\n ) => any;\n\n injectedPropsFilter?: (\n injectedProps: {\n config: any;\n loading?: boolean;\n deferLoad: (term: string) => any;\n updateConfig: (config: any) => void;\n },\n props: any\n ) => any;\n}\n\nexport function withRemoteConfig<P = any>(\n config: WithRemoteConfigSettings = {}\n) {\n return function <\n T extends React.ComponentType<\n React.ComponentProps<T> & RemoteOptionsProps<P>\n >\n >(ComposedComponent: T) {\n type FinalOutterProps = JSX.LibraryManagedAttributes<\n T,\n Omit<React.ComponentProps<T>, keyof RemoteOptionsProps<P>>\n > &\n OutterProps;\n\n const result = hoistNonReactStatic(\n withStore(() => Store.create())(\n class extends React.Component<\n FinalOutterProps & {\n store: IStore;\n }\n > {\n static displayName = `WithRemoteConfig(${\n ComposedComponent.displayName || ComposedComponent.name\n })`;\n static ComposedComponent =\n ComposedComponent as React.ComponentType<T>;\n static contextType = EnvContext;\n toDispose: Array<() => void> = [];\n\n loadOptions = debounce(this.loadAutoComplete.bind(this), 250, {\n trailing: true,\n leading: false\n });\n\n constructor(\n props: FinalOutterProps & {\n store: IStore;\n }\n ) {\n super(props);\n\n this.setConfig = this.setConfig.bind(this);\n props.store.setComponent(this);\n this.deferLoadConfig = this.deferLoadConfig.bind(this);\n props.remoteConfigRef?.(this);\n props.store.setData(props.data);\n this.syncConfig();\n }\n\n componentDidMount() {\n const env: RendererEnv = this.props.env || this.context;\n const {store, data} = this.props;\n const source = (this.props as any)[config.sourceField || 'source'];\n\n if (isPureVariable(source)) {\n this.toDispose.push(\n reaction(\n () =>\n resolveVariableAndFilter(\n source as string,\n store.data,\n '| raw'\n ),\n () => this.syncConfig()\n )\n );\n } else if (env && isEffectiveApi(source, data)) {\n this.loadConfig();\n (source as ApiObject).autoRefresh !== false &&\n this.toDispose.push(\n reaction(\n () => {\n const api = normalizeApi(source as string);\n return api.trackExpression\n ? tokenize(api.trackExpression, store.data)\n : buildApi(api, store.data, {\n ignoreData: true\n }).url;\n },\n () => this.loadConfig()\n )\n );\n }\n }\n\n componentDidUpdate(prevProps: any) {\n const props = this.props;\n\n if (props.data !== prevProps.data) {\n props.store.setData(props.data);\n }\n }\n\n componentWillUnmount() {\n this.toDispose.forEach(fn => fn());\n this.toDispose = [];\n\n this.props.remoteConfigRef?.(undefined);\n this.loadOptions.cancel();\n }\n\n async loadConfig(ctx = this.props.data) {\n const env: RendererEnv = this.props.env || this.context;\n const {store} = this.props;\n const source = (this.props as any)[config.sourceField || 'source'];\n\n if (env && isEffectiveApi(source, ctx)) {\n await store.load(env, source, ctx, config);\n }\n }\n\n loadAutoComplete(input: string) {\n const env: RendererEnv = this.props.env || this.context;\n const {autoComplete, data, store} = this.props;\n\n if (!env || !env.fetcher) {\n throw new Error('fetcher is required');\n }\n\n const ctx = createObject(data, {\n term: input,\n value: input\n });\n\n if (!isEffectiveApi(autoComplete, ctx)) {\n return Promise.resolve({\n options: []\n });\n }\n\n return store.load(env, autoComplete, ctx, config);\n }\n\n setConfig(value: any, ctx?: any) {\n const {store} = this.props;\n store.setConfig(value, config, ctx);\n }\n\n syncConfig() {\n const {store, data} = this.props;\n const source = (this.props as any)[config.sourceField || 'source'];\n\n if (isPureVariable(source)) {\n store.setConfig(\n resolveVariableAndFilter(source as string, data, '| raw') || [],\n config,\n 'syncConfig'\n );\n } else if (isObject(source) && !isEffectiveApi(source, data)) {\n store.setConfig(source, config, 'syncConfig');\n }\n }\n\n async deferLoadConfig(item: any) {\n const {store, data, deferApi} = this.props;\n const source = (this.props as any)[config.sourceField || 'source'];\n const env: RendererEnv = this.props.env || this.context;\n const indexes = findTreeIndex(store.config, a => a === item)!;\n\n const ret = config.beforeDeferLoad?.(\n item,\n indexes,\n store.config,\n this.props\n );\n\n ret && store.setConfig(ret, config, 'before-defer-load');\n let response: Payload;\n try {\n if (!isEffectiveApi(item.deferApi || deferApi || source)) {\n throw new Error('deferApi is required');\n }\n\n response = await env.fetcher(\n item.deferApi || deferApi || source,\n createObject(data, item)\n );\n } catch (e) {\n response = {\n ok: false,\n msg: e.message,\n status: 500,\n data: undefined\n };\n }\n const ret2 = config.afterDeferLoad?.(\n item,\n indexes, // 只能假定还是那个 index 了\n response,\n store.config,\n this.props\n );\n ret2 && store.setConfig(ret2, config, 'after-defer-load');\n }\n\n render() {\n const store = this.props.store;\n const env: RendererEnv = this.props.env || this.context;\n const injectedProps: RemoteOptionsProps<P> = {\n config: store.config,\n loading: store.fetching,\n deferLoad: this.deferLoadConfig,\n updateConfig: this.setConfig\n };\n const {remoteConfigRef, autoComplete, ...rest} = this.props;\n\n return (\n <ComposedComponent\n {...(rest as JSX.LibraryManagedAttributes<\n T,\n React.ComponentProps<T>\n >)}\n {...(env && isEffectiveApi(autoComplete) && this.loadOptions\n ? {loadOptions: this.loadOptions}\n : {})}\n {...(config.injectedPropsFilter\n ? config.injectedPropsFilter(injectedProps, this.props)\n : injectedProps)}\n />\n );\n }\n }\n ),\n ComposedComponent\n );\n\n return result as typeof result & {\n ComposedComponent: T;\n };\n };\n}\n"
|
12
12
|
]
|
13
13
|
}
|
@@ -5,6 +5,7 @@ import { LocaleProps } from '../../locale';
|
|
5
5
|
import { ClassNamesFn } from '../../theme';
|
6
6
|
import { PickerOption } from '../PickerColumn';
|
7
7
|
import { DateType } from './Calendar';
|
8
|
+
import type { TimeScale } from './TimeView';
|
8
9
|
interface CustomDaysViewProps extends LocaleProps {
|
9
10
|
classPrefix?: string;
|
10
11
|
prevIcon?: string;
|
@@ -44,8 +45,31 @@ interface CustomDaysViewProps extends LocaleProps {
|
|
44
45
|
hideHeader?: boolean;
|
45
46
|
getColumns: (types: DateType[], dateBoundary: void) => any;
|
46
47
|
getDateBoundary: (currentDate: moment.Moment) => any;
|
48
|
+
timeConstraints?: any;
|
47
49
|
}
|
48
50
|
export declare class CustomDaysView extends React.Component<CustomDaysViewProps> {
|
51
|
+
timeConstraints: {
|
52
|
+
hours: {
|
53
|
+
min: number;
|
54
|
+
max: number;
|
55
|
+
step: number;
|
56
|
+
};
|
57
|
+
minutes: {
|
58
|
+
min: number;
|
59
|
+
max: number;
|
60
|
+
step: number;
|
61
|
+
};
|
62
|
+
seconds: {
|
63
|
+
min: number;
|
64
|
+
max: number;
|
65
|
+
step: number;
|
66
|
+
};
|
67
|
+
milliseconds: {
|
68
|
+
min: number;
|
69
|
+
max: number;
|
70
|
+
step: number;
|
71
|
+
};
|
72
|
+
};
|
49
73
|
state: {
|
50
74
|
columns: {
|
51
75
|
options: PickerOption[];
|
@@ -67,7 +91,8 @@ export declare class CustomDaysView extends React.Component<CustomDaysViewProps>
|
|
67
91
|
confirm: () => void;
|
68
92
|
cancel: () => void;
|
69
93
|
renderDay: (props: any, currentDate: moment.Moment) => JSX.Element;
|
70
|
-
|
94
|
+
/** 时间选择器数据源 */
|
95
|
+
computedTimeOptions(timeScale: TimeScale): {
|
71
96
|
label: string;
|
72
97
|
value: string;
|
73
98
|
}[];
|
@@ -7,6 +7,7 @@ var moment_1 = (0, tslib_1.__importDefault)(require("moment"));
|
|
7
7
|
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
8
8
|
var downshift_1 = (0, tslib_1.__importDefault)(require("downshift"));
|
9
9
|
var findIndex_1 = (0, tslib_1.__importDefault)(require("lodash/findIndex"));
|
10
|
+
var merge_1 = (0, tslib_1.__importDefault)(require("lodash/merge"));
|
10
11
|
var locale_1 = require("../../locale");
|
11
12
|
var helper_1 = require("../../utils/helper");
|
12
13
|
var Picker_1 = (0, tslib_1.__importDefault)(require("../Picker"));
|
@@ -14,6 +15,28 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
14
15
|
(0, tslib_1.__extends)(CustomDaysView, _super);
|
15
16
|
function CustomDaysView(props) {
|
16
17
|
var _this = _super.call(this, props) || this;
|
18
|
+
_this.timeConstraints = {
|
19
|
+
hours: {
|
20
|
+
min: 0,
|
21
|
+
max: 23,
|
22
|
+
step: 1
|
23
|
+
},
|
24
|
+
minutes: {
|
25
|
+
min: 0,
|
26
|
+
max: 59,
|
27
|
+
step: 1
|
28
|
+
},
|
29
|
+
seconds: {
|
30
|
+
min: 0,
|
31
|
+
max: 59,
|
32
|
+
step: 1
|
33
|
+
},
|
34
|
+
milliseconds: {
|
35
|
+
min: 0,
|
36
|
+
max: 999,
|
37
|
+
step: 1
|
38
|
+
}
|
39
|
+
};
|
17
40
|
_this.updateSelectedDate = function (event) {
|
18
41
|
// need confirm
|
19
42
|
if (_this.props.requiredConfirm) {
|
@@ -58,9 +81,13 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
58
81
|
}
|
59
82
|
};
|
60
83
|
_this.scrollToTop = function (type, value, i, label) {
|
84
|
+
var _a;
|
61
85
|
var elf = document.getElementById("".concat(_this.state.uniqueTag, "-").concat(i, "-input"));
|
62
|
-
|
63
|
-
|
86
|
+
var _b = _this.timeConstraints[type], min = _b.min, step = _b.step;
|
87
|
+
var offset = (value - min) / step;
|
88
|
+
var height = 28; /** 单个选项的高度 */
|
89
|
+
(_a = elf === null || elf === void 0 ? void 0 : elf.parentNode) === null || _a === void 0 ? void 0 : _a.scrollTo({
|
90
|
+
top: offset * height,
|
64
91
|
behavior: label === 'init' ? 'auto' : 'smooth'
|
65
92
|
});
|
66
93
|
};
|
@@ -178,6 +205,7 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
178
205
|
var _a = _this.props, timeFormat = _a.timeFormat, selectedDate = _a.selectedDate, viewDate = _a.viewDate, isEndDate = _a.isEndDate, cx = _a.classnames;
|
179
206
|
var date = selectedDate || (isEndDate ? viewDate.endOf('day') : viewDate);
|
180
207
|
var inputs = [];
|
208
|
+
var timeConstraints = _this.timeConstraints;
|
181
209
|
inputs.push(_this.showTime());
|
182
210
|
timeFormat.split(':').forEach(function (format, i) {
|
183
211
|
var type = /h/i.test(format)
|
@@ -188,11 +216,9 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
188
216
|
? 'seconds'
|
189
217
|
: '';
|
190
218
|
if (type) {
|
191
|
-
var min_1 =
|
192
|
-
var max_1 = type
|
193
|
-
var
|
194
|
-
var times = _this.computedTimeOptions(60);
|
195
|
-
var options_1 = type === 'hours' ? hours : times;
|
219
|
+
var min_1 = timeConstraints[type].min;
|
220
|
+
var max_1 = timeConstraints[type].max;
|
221
|
+
var options_1 = _this.computedTimeOptions(type);
|
196
222
|
var formatMap_1 = {
|
197
223
|
hours: 'HH',
|
198
224
|
minutes: 'mm',
|
@@ -207,8 +233,15 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
207
233
|
}
|
208
234
|
});
|
209
235
|
return (react_1.default.createElement("div", { className: cx('CalendarInputWrapper', 'CalendarInputWrapperMT') },
|
210
|
-
react_1.default.createElement("div", { className: cx('CalendarInput-sugs', type === 'hours'
|
211
|
-
|
236
|
+
react_1.default.createElement("div", { className: cx('CalendarInput-sugs', type === 'hours'
|
237
|
+
? 'CalendarInput-sugsHours'
|
238
|
+
: 'CalendarInput-sugsTimes'), id: "".concat(_this.state.uniqueTag, "-").concat(i, "-input") }, options_1.map(function (option) {
|
239
|
+
var _a;
|
240
|
+
return (react_1.default.createElement("div", { key: option.value, className: cx('CalendarInput-sugsItem', {
|
241
|
+
'is-highlight': selectedDate
|
242
|
+
? option.value === date.format(formatMap_1[type])
|
243
|
+
: option.value === ((_a = options_1 === null || options_1 === void 0 ? void 0 : options_1[0]) === null || _a === void 0 ? void 0 : _a.value)
|
244
|
+
}), onClick: function () {
|
212
245
|
_this.setTime(type, parseInt(option.value, 10));
|
213
246
|
_this.scrollToTop(type, parseInt(option.value, 10), i);
|
214
247
|
closeMenu();
|
@@ -273,8 +306,11 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
273
306
|
columns: columns,
|
274
307
|
types: types,
|
275
308
|
pickerValue: currentDate.toArray(),
|
276
|
-
uniqueTag: 0
|
309
|
+
uniqueTag: 0
|
277
310
|
};
|
311
|
+
if (_this.props.timeConstraints) {
|
312
|
+
_this.timeConstraints = (0, merge_1.default)(_this.timeConstraints, props.timeConstraints);
|
313
|
+
}
|
278
314
|
return _this;
|
279
315
|
}
|
280
316
|
CustomDaysView.prototype.getDaysOfWeek = function (locale) {
|
@@ -327,7 +363,7 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
327
363
|
return weeks;
|
328
364
|
};
|
329
365
|
CustomDaysView.prototype.componentWillMount = function () {
|
330
|
-
this.setState({ uniqueTag:
|
366
|
+
this.setState({ uniqueTag: new Date().valueOf() });
|
331
367
|
};
|
332
368
|
CustomDaysView.prototype.componentDidMount = function () {
|
333
369
|
var _this = this;
|
@@ -351,13 +387,16 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
351
387
|
}
|
352
388
|
});
|
353
389
|
};
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
390
|
+
/** 时间选择器数据源 */
|
391
|
+
CustomDaysView.prototype.computedTimeOptions = function (timeScale) {
|
392
|
+
var _a;
|
393
|
+
var _b = (_a = this.timeConstraints) === null || _a === void 0 ? void 0 : _a[timeScale], min = _b.min, max = _b.max, step = _b.step;
|
394
|
+
return Array.from({ length: max - min + 1 }, function (item, index) {
|
395
|
+
var value = (index + min)
|
396
|
+
.toString()
|
397
|
+
.padStart(timeScale !== 'milliseconds' ? 2 : 3, '0');
|
398
|
+
return index % step === 0 ? { label: value, value: value } : undefined;
|
399
|
+
}).filter(function (item) { return !!item; });
|
361
400
|
};
|
362
401
|
CustomDaysView.prototype.render = function () {
|
363
402
|
var _a = this.props, date = _a.viewDate, useMobileUI = _a.useMobileUI, embed = _a.embed, timeFormat = _a.timeFormat, cx = _a.classnames;
|
@@ -384,7 +423,9 @@ var CustomDaysView = /** @class */ (function (_super) {
|
|
384
423
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
385
424
|
react_1.default.createElement("div", { className: timeFormat ? 'rdtDays' : '' },
|
386
425
|
react_1.default.createElement("table", { className: timeFormat ? 'rdtDaysPart' : '' }, tableChildren),
|
387
|
-
timeFormat ? (react_1.default.createElement("div", { className: timeFormat.toLowerCase().indexOf('s') > 0
|
426
|
+
timeFormat ? (react_1.default.createElement("div", { className: timeFormat.toLowerCase().indexOf('s') > 0
|
427
|
+
? 'rdtTimePartWithS'
|
428
|
+
: 'rdtTimePart' }, this.renderTimes())) : null),
|
388
429
|
react_1.default.createElement("table", null, this.renderFooter())));
|
389
430
|
};
|
390
431
|
return CustomDaysView;
|