amis 1.4.2-beta.1 → 1.4.2-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/ListGroup.d.ts +21 -21
- package/lib/components/ResultBox.d.ts +84 -84
- package/lib/components/SearchBox.js +4 -4
- package/lib/components/SearchBox.js.map +2 -2
- package/lib/components/WithRemoteConfig.js +1 -1
- package/lib/components/WithRemoteConfig.js.map +2 -2
- package/lib/index.js +1 -1
- package/lib/renderers/CRUD.d.ts +4 -0
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Chart.js +1 -1
- package/lib/renderers/Chart.js.map +2 -2
- package/lib/renderers/DropDownButton.js +1 -1
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Link.js +4 -2
- package/lib/renderers/Link.js.map +2 -2
- package/lib/renderers/Mapping.d.ts +9 -2
- package/lib/renderers/Mapping.js +18 -6
- package/lib/renderers/Mapping.js.map +2 -2
- package/lib/renderers/Nav.js +3 -3
- package/lib/renderers/Nav.js.map +2 -2
- package/lib/renderers/SearchBox.d.ts +6 -1
- package/lib/renderers/SearchBox.js +19 -5
- package/lib/renderers/SearchBox.js.map +2 -2
- package/lib/store/combo.d.ts +0 -14
- package/lib/store/crud.js +3 -7
- package/lib/store/crud.js.map +2 -2
- package/lib/store/form.js +2 -1
- package/lib/store/form.js.map +2 -2
- package/lib/store/service.js +5 -4
- package/lib/store/service.js.map +2 -2
- package/lib/themes/ang-ie11.css +8 -1
- package/lib/themes/ang.css +8 -1
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +8 -1
- package/lib/themes/antd.css +8 -1
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +8 -1
- package/lib/themes/cxd.css +8 -1
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +8 -1
- package/lib/themes/dark.css +8 -1
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +8 -1
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.d.ts +1 -0
- package/lib/utils/api.js +15 -1
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/icon.js +3 -0
- package/lib/utils/icon.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +8 -0
- package/scss/components/_mapping.scss +6 -0
- package/scss/components/_nav.scss +1 -1
- package/scss/themes/_common.scss +1 -0
- package/sdk/ang-ie11.css +9 -1
- package/sdk/ang.css +9 -1
- package/sdk/antd-ie11.css +9 -1
- package/sdk/antd.css +9 -1
- package/sdk/charts.js +15 -15
- package/sdk/color-picker.js +67 -67
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +9 -1
- package/sdk/cxd.css +9 -1
- package/sdk/dark-ie11.css +9 -1
- package/sdk/dark.css +9 -1
- package/sdk/exceljs.js +1 -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 +22 -22
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +9 -1
- package/sdk/sdk.css +9 -1
- package/sdk/sdk.js +1128 -1128
- 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/components/SearchBox.tsx +4 -5
- package/src/components/WithRemoteConfig.tsx +7 -2
- package/src/renderers/CRUD.tsx +5 -0
- package/src/renderers/Chart.tsx +6 -2
- package/src/renderers/DropDownButton.tsx +1 -1
- package/src/renderers/Link.tsx +5 -4
- package/src/renderers/Mapping.tsx +27 -11
- package/src/renderers/Nav.tsx +3 -4
- package/src/renderers/SearchBox.tsx +23 -4
- package/src/store/crud.ts +3 -8
- package/src/store/form.ts +2 -1
- package/src/store/service.ts +5 -4
- package/src/utils/api.ts +13 -0
- package/src/utils/icon.tsx +4 -0
@@ -33,18 +33,18 @@ var SearchBox = /** @class */ (function (_super) {
|
|
33
33
|
(_a = this.inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
34
34
|
};
|
35
35
|
SearchBox.prototype.handleCancel = function () {
|
36
|
-
var _a = this.props, onActiveChange = _a.onActiveChange,
|
36
|
+
var _a = this.props, onActiveChange = _a.onActiveChange, onCancel = _a.onCancel, onChange = _a.onChange;
|
37
37
|
onActiveChange === null || onActiveChange === void 0 ? void 0 : onActiveChange(false);
|
38
38
|
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
39
39
|
onChange === null || onChange === void 0 ? void 0 : onChange('');
|
40
40
|
};
|
41
41
|
SearchBox.prototype.handleChange = function (e) {
|
42
|
-
var _a = this.props,
|
42
|
+
var _a = this.props, searchImediately = _a.searchImediately, onChange = _a.onChange;
|
43
43
|
onChange === null || onChange === void 0 ? void 0 : onChange(e.currentTarget.value);
|
44
44
|
searchImediately && this.lazyEmitSearch();
|
45
45
|
};
|
46
46
|
SearchBox.prototype.handleSearch = function () {
|
47
|
-
var _a = this.props,
|
47
|
+
var _a = this.props, onSearch = _a.onSearch, value = _a.value;
|
48
48
|
onSearch === null || onSearch === void 0 ? void 0 : onSearch(value || '');
|
49
49
|
};
|
50
50
|
SearchBox.prototype.handleKeyDown = function (e) {
|
@@ -54,7 +54,7 @@ var SearchBox = /** @class */ (function (_super) {
|
|
54
54
|
}
|
55
55
|
};
|
56
56
|
SearchBox.prototype.render = function () {
|
57
|
-
var _a = this.props, cx = _a.classnames,
|
57
|
+
var _a = this.props, cx = _a.classnames, active = _a.active, name = _a.name, className = _a.className, disabled = _a.disabled, placeholder = _a.placeholder, mini = _a.mini, value = _a.value, __ = _a.translate;
|
58
58
|
return (react_1.default.createElement("div", { className: cx('SearchBox', className, disabled ? 'is-disabled' : '', !mini || active ? 'is-active' : '') },
|
59
59
|
react_1.default.createElement("input", { name: name, disabled: disabled, onChange: this.handleChange, value: value || '', placeholder: __(placeholder || 'placeholder.enter'), ref: this.inputRef, autoComplete: "off", onKeyDown: this.handleKeyDown }),
|
60
60
|
!mini ? (react_1.default.createElement("a", { className: cx('SearchBox-searchBtn'), onClick: this.handleSearch },
|
@@ -6,8 +6,8 @@
|
|
6
6
|
"/src/components/SearchBox.tsx"
|
7
7
|
],
|
8
8
|
"names": [],
|
9
|
-
"mappings": ";;;;AAAA,6DAA0B;AAC1B,kCAA+C;AAC/C,iCAA6B;AAC7B,iDAA8C;AAC9C,0CAAyC;AACzC,oCAAkD;AAClD,0EAAuC;AAkBvC;IAA+B,0CAA+B;IAA9D;QAAA,
|
9
|
+
"mappings": "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",
|
10
10
|
"sourcesContent": [
|
11
|
-
"import React from 'react';\nimport {ThemeProps, themeable} from '../theme';\nimport {Icon} from './icons';\nimport {uncontrollable} from 'uncontrollable';\nimport {autobind} from '../utils/helper';\nimport {LocaleProps, localeable} from '../locale';\nimport debounce from 'lodash/debounce';\n\nexport interface SearchBoxProps extends ThemeProps, LocaleProps {\n name?: string;\n disabled?: boolean;\n mini?: boolean;\n searchImediately?: boolean;\n onChange?: (text: string) => void;\n placeholder?: string;\n defaultValue?: string;\n value?: string;\n active?: boolean;\n defaultActive?: boolean;\n onActiveChange?: (active: boolean) => void;\n onSearch?: (value: string) => void;\n onCancel?: () => void;\n}\n\nexport class SearchBox extends React.Component<SearchBoxProps> {\n inputRef: React.RefObject<HTMLInputElement> = React.createRef();\n static defaultProps = {\n mini: true,\n searchImediately: true\n };\n\n lazyEmitSearch = debounce(\n () => {\n const onSearch = this.props.onSearch;\n onSearch?.(this.props.value || '');\n },\n 250,\n {\n leading: false,\n trailing: true\n }\n );\n\n componentWillUnmount() {\n this.lazyEmitSearch.cancel();\n }\n\n @autobind\n handleActive() {\n const {onActiveChange} = this.props;\n onActiveChange?.(true);\n this.inputRef.current?.focus();\n }\n\n @autobind\n handleCancel() {\n const {onActiveChange,
|
11
|
+
"import React from 'react';\nimport {ThemeProps, themeable} from '../theme';\nimport {Icon} from './icons';\nimport {uncontrollable} from 'uncontrollable';\nimport {autobind} from '../utils/helper';\nimport {LocaleProps, localeable} from '../locale';\nimport debounce from 'lodash/debounce';\n\nexport interface SearchBoxProps extends ThemeProps, LocaleProps {\n name?: string;\n disabled?: boolean;\n mini?: boolean;\n searchImediately?: boolean;\n onChange?: (text: string) => void;\n placeholder?: string;\n defaultValue?: string;\n value?: string;\n active?: boolean;\n defaultActive?: boolean;\n onActiveChange?: (active: boolean) => void;\n onSearch?: (value: string) => void;\n onCancel?: () => void;\n}\n\nexport class SearchBox extends React.Component<SearchBoxProps> {\n inputRef: React.RefObject<HTMLInputElement> = React.createRef();\n static defaultProps = {\n mini: true,\n searchImediately: true\n };\n\n lazyEmitSearch = debounce(\n () => {\n const onSearch = this.props.onSearch;\n onSearch?.(this.props.value || '');\n },\n 250,\n {\n leading: false,\n trailing: true\n }\n );\n\n componentWillUnmount() {\n this.lazyEmitSearch.cancel();\n }\n\n @autobind\n handleActive() {\n const {onActiveChange} = this.props;\n onActiveChange?.(true);\n this.inputRef.current?.focus();\n }\n\n @autobind\n handleCancel() {\n const {onActiveChange, onCancel, onChange} = this.props;\n onActiveChange?.(false);\n onCancel?.();\n onChange?.('');\n }\n\n @autobind\n handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n const {searchImediately, onChange} = this.props;\n onChange?.(e.currentTarget.value);\n searchImediately && this.lazyEmitSearch();\n }\n\n @autobind\n handleSearch() {\n const {onSearch, value} = this.props;\n onSearch?.(value || '');\n }\n\n @autobind\n handleKeyDown(e: React.KeyboardEvent<any>) {\n if (e.key === 'Enter') {\n this.handleSearch();\n e.preventDefault();\n }\n }\n\n render() {\n const {\n classnames: cx,\n active,\n name,\n className,\n disabled,\n placeholder,\n mini,\n value,\n translate: __\n } = this.props;\n\n return (\n <div\n className={cx(\n 'SearchBox',\n className,\n disabled ? 'is-disabled' : '',\n !mini || active ? 'is-active' : ''\n )}\n >\n <input\n name={name}\n disabled={disabled}\n onChange={this.handleChange}\n value={value || ''}\n placeholder={__(placeholder || 'placeholder.enter')}\n ref={this.inputRef}\n autoComplete=\"off\"\n onKeyDown={this.handleKeyDown}\n />\n\n {!mini ? (\n <a className={cx('SearchBox-searchBtn')} onClick={this.handleSearch}>\n <Icon icon=\"search\" className=\"icon\" />\n </a>\n ) : active ? (\n <a className={cx('SearchBox-cancelBtn')} onClick={this.handleCancel}>\n <Icon icon=\"close\" className=\"icon\" />\n </a>\n ) : (\n <a className={cx('SearchBox-activeBtn')} onClick={this.handleActive}>\n <Icon icon=\"search\" className=\"icon\" />\n </a>\n )}\n </div>\n );\n }\n}\n\nexport default themeable(\n localeable(\n uncontrollable(SearchBox, {\n active: 'onActiveChange',\n value: 'onChange'\n })\n )\n);\n"
|
12
12
|
]
|
13
13
|
}
|
@@ -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,
|
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 {buildApi, isEffectiveApi, normalizeApi} 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 = 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, 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"
|
12
12
|
]
|
13
13
|
}
|
package/lib/index.js
CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerLocale = exports.setDefaultLocale = exports.getDefaultLocale = exports.classnames = exports.getClassPrefix = exports.classPrefix = exports.getTheme = exports.theme = exports.setDefaultTheme = exports.validateObject = exports.validate = exports.ScopedContext = exports.Scoped = exports.registerIcon = exports.Icon = exports.setIconVendor = exports.resolveVariableAndFilter = exports.resolveVariable = exports.relativeValueRe = exports.filterDate = exports.filterSchema = exports.resolveRenderer = exports.registerOptionsControl = exports.registerFormItem = exports.getRenderers = exports.unRegisterRenderer = exports.registerRenderer = exports.getRendererByName = exports.normalizeOptions = exports.str2rules = exports.addRule = exports.setCustomEvalExpression = exports.setCustomEvalJs = exports.evalJS = exports.evalExpression = exports.registerTplEnginer = exports.registerFilter = exports.resizeSensor = exports.utils = exports.filter = exports.buildApi = exports.wrapFetcher = exports.OptionsControl = exports.FormItemWrap = exports.FormItem = exports.RegisterStore = exports.Renderer = exports.updateEnv = exports.clearStoresCache = exports.render = void 0;
|
4
4
|
exports.animation = exports.makeTranslator = void 0;
|
5
5
|
var tslib_1 = require("tslib");
|
6
|
-
/** @license amis v1.4.2-beta.
|
6
|
+
/** @license amis v1.4.2-beta.6
|
7
7
|
*
|
8
8
|
* Copyright Baidu
|
9
9
|
*
|
package/lib/renderers/CRUD.d.ts
CHANGED
@@ -186,6 +186,10 @@ export interface CRUDCommonSchema extends BaseSchema {
|
|
186
186
|
* 默认只有当分页数大于 1 是才显示,如果总是想显示请配置。
|
187
187
|
*/
|
188
188
|
alwaysShowPagination?: boolean;
|
189
|
+
/**
|
190
|
+
* 开启查询区域,会根据列元素的searchable属性值,自动生成查询条件表单
|
191
|
+
*/
|
192
|
+
autoGenerateFilter?: boolean;
|
189
193
|
}
|
190
194
|
export declare type CRUDCardsSchema = CRUDCommonSchema & {
|
191
195
|
mode: 'cards';
|