amis 1.4.2-beta.13 → 1.4.2-beta.15
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/Schema.d.ts +4 -3
- package/lib/Schema.js.map +1 -1
- package/lib/components/AssociatedSelection.js +2 -2
- package/lib/components/AssociatedSelection.js.map +2 -2
- package/lib/components/Checkbox.d.ts +20 -20
- package/lib/components/Collapse.d.ts +51 -23
- package/lib/components/Collapse.js +69 -11
- package/lib/components/Collapse.js.map +2 -2
- package/lib/components/CollapseGroup.d.ts +88 -0
- package/lib/components/CollapseGroup.js +81 -0
- package/lib/components/CollapseGroup.js.map +13 -0
- package/lib/components/Editor.d.ts +84 -84
- package/lib/components/GridNav.d.ts +52 -0
- package/lib/components/GridNav.js +123 -0
- package/lib/components/GridNav.js.map +13 -0
- package/lib/components/ListGroup.d.ts +21 -21
- package/lib/components/Tabs.d.ts +20 -20
- package/lib/components/TabsTransfer.d.ts +84 -84
- package/lib/components/Toast.d.ts +86 -85
- package/lib/components/Toast.js +6 -3
- package/lib/components/Toast.js.map +2 -2
- package/lib/components/Transfer.d.ts +84 -84
- package/lib/components/TransferDropDown.d.ts +84 -84
- package/lib/components/Tree.d.ts +115 -84
- package/lib/components/Tree.js +183 -30
- package/lib/components/Tree.js.map +2 -2
- package/lib/envOverwrite.d.ts +1 -1
- package/lib/envOverwrite.js +24 -9
- package/lib/envOverwrite.js.map +2 -2
- package/lib/factory.d.ts +11 -1
- package/lib/factory.js +31 -4
- package/lib/factory.js.map +2 -2
- package/lib/icons/drag-bar.js +10 -3
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +2 -2
- package/lib/renderers/Collapse.d.ts +25 -20
- package/lib/renderers/Collapse.js +10 -73
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/CollapseGroup.d.ts +42 -0
- package/lib/renderers/CollapseGroup.js +33 -0
- package/lib/renderers/CollapseGroup.js.map +13 -0
- package/lib/renderers/Form/InputCity.d.ts +84 -84
- package/lib/renderers/Form/Item.js +2 -1
- package/lib/renderers/Form/Item.js.map +2 -2
- package/lib/renderers/GridNav.d.ts +99 -0
- package/lib/renderers/GridNav.js +82 -0
- package/lib/renderers/GridNav.js.map +13 -0
- package/lib/store/formItem.js +44 -4
- package/lib/store/formItem.js.map +2 -2
- package/lib/themes/ang-ie11.css +194 -27
- package/lib/themes/ang.css +194 -27
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +194 -27
- package/lib/themes/antd.css +194 -27
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +201 -34
- package/lib/themes/cxd.css +201 -34
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +194 -27
- package/lib/themes/dark.css +194 -27
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +201 -34
- package/lib/themes/default.css.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/api.d.ts +1 -0
- package/lib/utils/api.js +77 -6
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/helper.d.ts +6 -0
- package/lib/utils/helper.js +18 -1
- package/lib/utils/helper.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +242 -34
- package/scss/components/_anchor-nav.scss +1 -0
- package/scss/components/_collapse-group.scss +11 -0
- package/scss/components/_collapse.scss +33 -22
- package/scss/components/_grid-nav.scss +128 -0
- package/scss/components/_nav.scss +1 -1
- package/scss/components/_spinner.scss +5 -4
- package/scss/components/_table.scss +6 -0
- package/scss/components/form/_combo.scss +4 -0
- package/scss/components/form/_tree.scss +42 -0
- package/scss/themes/_common.scss +2 -0
- package/scss/themes/_cxd-variables.scss +6 -7
- package/scss/themes/cxd.scss +1 -0
- package/sdk/ang-ie11.css +227 -28
- package/sdk/ang.css +227 -27
- package/sdk/antd-ie11.css +227 -28
- package/sdk/antd.css +227 -27
- package/sdk/charts.js +13 -13
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +233 -32
- package/sdk/cxd.css +234 -34
- package/sdk/dark-ie11.css +227 -28
- package/sdk/dark.css +227 -27
- 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 +18 -18
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +233 -32
- package/sdk/sdk.css +234 -34
- package/sdk/sdk.js +1179 -1145
- 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/Schema.ts +5 -1
- package/src/components/AssociatedSelection.tsx +3 -1
- package/src/components/Collapse.tsx +144 -20
- package/src/components/CollapseGroup.tsx +130 -0
- package/src/components/GridNav.tsx +233 -0
- package/src/components/Toast.tsx +23 -16
- package/src/components/Tree.tsx +194 -8
- package/src/envOverwrite.ts +20 -7
- package/src/factory.tsx +52 -6
- package/src/icons/drag-bar.svg +12 -6
- package/src/index.tsx +2 -0
- package/src/renderers/Collapse.tsx +70 -117
- package/src/renderers/CollapseGroup.tsx +80 -0
- package/src/renderers/GridNav.tsx +204 -0
- package/src/store/formItem.ts +94 -2
- package/src/types.ts +1 -1
- package/src/utils/api.ts +93 -6
- package/src/utils/helper.ts +19 -0
- package/tsconfig-for-declaration.json +1 -1
@@ -3,11 +3,10 @@ import {Renderer, RendererProps} from '../factory';
|
|
3
3
|
import {Collapse as BasicCollapse} from '../components/Collapse';
|
4
4
|
import {
|
5
5
|
BaseSchema,
|
6
|
-
SchemaClassName,
|
7
6
|
SchemaCollection,
|
8
|
-
SchemaTpl
|
7
|
+
SchemaTpl,
|
8
|
+
SchemaObject
|
9
9
|
} from '../Schema';
|
10
|
-
import {isClickOnInput} from '../utils/helper';
|
11
10
|
|
12
11
|
/**
|
13
12
|
* Collapse 折叠渲染器,格式说明。
|
@@ -19,10 +18,20 @@ export interface CollapseSchema extends BaseSchema {
|
|
19
18
|
*/
|
20
19
|
type: 'collapse';
|
21
20
|
|
21
|
+
/**
|
22
|
+
* 标识
|
23
|
+
*/
|
24
|
+
key?: string;
|
25
|
+
|
22
26
|
/**
|
23
27
|
* 标题展示位置
|
24
28
|
*/
|
25
|
-
|
29
|
+
headerPosition?: 'top' | 'bottom';
|
30
|
+
|
31
|
+
/**
|
32
|
+
* 标题
|
33
|
+
*/
|
34
|
+
header?: string | SchemaCollection;
|
26
35
|
|
27
36
|
/**
|
28
37
|
* 内容区域
|
@@ -32,7 +41,12 @@ export interface CollapseSchema extends BaseSchema {
|
|
32
41
|
/**
|
33
42
|
* 配置 Body 容器 className
|
34
43
|
*/
|
35
|
-
bodyClassName?:
|
44
|
+
bodyClassName?: string;
|
45
|
+
|
46
|
+
/**
|
47
|
+
* 是否禁用
|
48
|
+
*/
|
49
|
+
disabled?: boolean;
|
36
50
|
|
37
51
|
/**
|
38
52
|
* 是否可折叠
|
@@ -45,19 +59,24 @@ export interface CollapseSchema extends BaseSchema {
|
|
45
59
|
collapsed?: boolean;
|
46
60
|
|
47
61
|
/**
|
48
|
-
*
|
62
|
+
* 图标是否展示
|
49
63
|
*/
|
50
|
-
|
64
|
+
showArrow?: boolean;
|
65
|
+
|
66
|
+
/**
|
67
|
+
* 自定义切换图标
|
68
|
+
*/
|
69
|
+
expandIcon?: SchemaObject;
|
51
70
|
|
52
71
|
/**
|
53
|
-
* 标题
|
72
|
+
* 标题 CSS 类名
|
54
73
|
*/
|
55
|
-
|
74
|
+
headingClassName?: string;
|
56
75
|
|
57
76
|
/**
|
58
77
|
* 收起的标题
|
59
78
|
*/
|
60
|
-
|
79
|
+
collapseHeader?: SchemaTpl;
|
61
80
|
|
62
81
|
/**
|
63
82
|
* 控件大小
|
@@ -85,143 +104,77 @@ export interface CollapseProps
|
|
85
104
|
children?: JSX.Element | ((props?: any) => JSX.Element);
|
86
105
|
}
|
87
106
|
|
88
|
-
export interface CollapseState {
|
89
|
-
collapsed: boolean;
|
90
|
-
}
|
91
|
-
|
92
107
|
export default class Collapse extends React.Component<
|
93
108
|
CollapseProps,
|
94
|
-
|
109
|
+
{}
|
95
110
|
> {
|
96
|
-
static propsList: Array<string> = [
|
97
|
-
'wrapperComponent',
|
98
|
-
'headingComponent',
|
99
|
-
'bodyClassName',
|
100
|
-
'collapsed',
|
101
|
-
'headingClassName',
|
102
|
-
'title',
|
103
|
-
'mountOnEnter',
|
104
|
-
'unmountOnExit'
|
105
|
-
];
|
106
|
-
|
107
|
-
static defaultProps: Partial<CollapseProps> = {
|
108
|
-
titlePosition: 'top',
|
109
|
-
wrapperComponent: 'div',
|
110
|
-
headingComponent: 'h4',
|
111
|
-
className: '',
|
112
|
-
headingClassName: '',
|
113
|
-
bodyClassName: '',
|
114
|
-
collapsable: true
|
115
|
-
};
|
116
|
-
|
117
|
-
state = {
|
118
|
-
collapsed: false
|
119
|
-
};
|
120
|
-
|
121
|
-
constructor(props: CollapseProps) {
|
122
|
-
super(props);
|
123
|
-
|
124
|
-
this.toggleCollapsed = this.toggleCollapsed.bind(this);
|
125
|
-
this.state.collapsed = !!props.collapsed;
|
126
|
-
}
|
127
|
-
|
128
|
-
componentDidUpdate(prevProps: CollapseProps) {
|
129
|
-
const props = this.props;
|
130
|
-
|
131
|
-
if (prevProps.collapsed !== props.collapsed) {
|
132
|
-
this.setState({
|
133
|
-
collapsed: !!props.collapsed
|
134
|
-
});
|
135
|
-
}
|
136
|
-
}
|
137
|
-
|
138
|
-
toggleCollapsed(e: React.MouseEvent<HTMLElement>) {
|
139
|
-
if (isClickOnInput(e)) {
|
140
|
-
return;
|
141
|
-
}
|
142
|
-
this.props.collapsable !== false &&
|
143
|
-
this.setState({
|
144
|
-
collapsed: !this.state.collapsed
|
145
|
-
});
|
146
|
-
}
|
147
111
|
|
148
112
|
render() {
|
149
113
|
const {
|
114
|
+
key,
|
115
|
+
id,
|
150
116
|
classPrefix: ns,
|
151
117
|
classnames: cx,
|
152
118
|
size,
|
153
|
-
wrapperComponent
|
154
|
-
headingComponent
|
119
|
+
wrapperComponent,
|
120
|
+
headingComponent,
|
155
121
|
className,
|
156
122
|
headingClassName,
|
157
123
|
children,
|
158
124
|
titlePosition,
|
125
|
+
headerPosition,
|
159
126
|
title,
|
160
127
|
collapseTitle,
|
128
|
+
collapseHeader,
|
129
|
+
header,
|
161
130
|
body,
|
162
131
|
bodyClassName,
|
163
132
|
render,
|
164
133
|
collapsable,
|
165
134
|
translate: __,
|
166
135
|
mountOnEnter,
|
167
|
-
unmountOnExit
|
136
|
+
unmountOnExit,
|
137
|
+
showArrow,
|
138
|
+
expandIcon,
|
139
|
+
disabled,
|
140
|
+
collapsed,
|
141
|
+
propsUpdate,
|
142
|
+
onCollapse
|
168
143
|
} = this.props;
|
169
|
-
// 默认给个 title,不然没法点
|
170
|
-
const finalTitle = this.state.collapsed ? title : collapseTitle || title;
|
171
|
-
|
172
|
-
let dom = [
|
173
|
-
finalTitle ? (
|
174
|
-
<HeadingComponent
|
175
|
-
key="title"
|
176
|
-
onClick={this.toggleCollapsed}
|
177
|
-
className={cx(`Collapse-header`, headingClassName)}
|
178
|
-
>
|
179
|
-
<div className={cx('Collapse-header-wrapper')}>
|
180
|
-
{render('heading', finalTitle, {className: 'Collapse-header-tpl'})}
|
181
|
-
{collapsable && <span className={cx('Collapse-arrow')} />}
|
182
|
-
</div>
|
183
|
-
</HeadingComponent>
|
184
|
-
) : null,
|
185
144
|
|
145
|
+
return (
|
186
146
|
<BasicCollapse
|
187
|
-
|
147
|
+
key={key}
|
148
|
+
id={id}
|
188
149
|
classnames={cx}
|
189
150
|
classPrefix={ns}
|
190
|
-
key="body"
|
191
151
|
mountOnEnter={mountOnEnter}
|
192
152
|
unmountOnExit={unmountOnExit}
|
153
|
+
size={size}
|
154
|
+
wrapperComponent={wrapperComponent}
|
155
|
+
headingComponent={headingComponent}
|
156
|
+
className={className}
|
157
|
+
headingClassName={headingClassName}
|
158
|
+
bodyClassName={bodyClassName}
|
159
|
+
headerPosition={titlePosition || headerPosition}
|
160
|
+
collapsable={collapsable}
|
161
|
+
collapsed={collapsed}
|
162
|
+
showArrow={showArrow}
|
163
|
+
disabled={disabled}
|
164
|
+
propsUpdate={propsUpdate}
|
165
|
+
expandIcon={expandIcon ? render('arrow-icon', expandIcon || '', {className: cx('Collapse-icon-tranform')}) : null}
|
166
|
+
collapseHeader={collapseTitle || collapseHeader ? render('heading', collapseTitle || collapseHeader) : null}
|
167
|
+
header={render('heading', title || header || '')}
|
168
|
+
body={children
|
169
|
+
? typeof children === 'function'
|
170
|
+
? children(this.props)
|
171
|
+
: children
|
172
|
+
: body
|
173
|
+
? render('body', body)
|
174
|
+
: null}
|
175
|
+
onCollapse={onCollapse}
|
193
176
|
>
|
194
|
-
<div className={cx(`Collapse-body`, bodyClassName)}>
|
195
|
-
{children
|
196
|
-
? typeof children === 'function'
|
197
|
-
? children(this.props)
|
198
|
-
: children
|
199
|
-
: body
|
200
|
-
? render('body', body)
|
201
|
-
: null}
|
202
|
-
</div>
|
203
177
|
</BasicCollapse>
|
204
|
-
];
|
205
|
-
|
206
|
-
if (titlePosition === 'bottom') {
|
207
|
-
dom.reverse();
|
208
|
-
}
|
209
|
-
|
210
|
-
return (
|
211
|
-
<WrapperComponent
|
212
|
-
className={cx(
|
213
|
-
`Collapse`,
|
214
|
-
{
|
215
|
-
'is-collapsed': this.state.collapsed,
|
216
|
-
[`Collapse--${size}`]: size,
|
217
|
-
'Collapse--collapsable': collapsable,
|
218
|
-
'Collapse--title-bottom': titlePosition === 'bottom'
|
219
|
-
},
|
220
|
-
className
|
221
|
-
)}
|
222
|
-
>
|
223
|
-
{dom}
|
224
|
-
</WrapperComponent>
|
225
178
|
);
|
226
179
|
}
|
227
180
|
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {Renderer, RendererProps} from '../factory';
|
3
|
+
import {BaseSchema, SchemaCollection, SchemaObject} from '../Schema';
|
4
|
+
import CollapseGroup from '../components/CollapseGroup';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* CollapseGroup 折叠渲染器,格式说明。
|
8
|
+
* 文档:https://baidu.gitee.io/amis/docs/components/collapse
|
9
|
+
*/
|
10
|
+
export interface CollapseGroupSchema extends BaseSchema {
|
11
|
+
/**
|
12
|
+
* 指定为折叠器类型
|
13
|
+
*/
|
14
|
+
type: 'collapse-group';
|
15
|
+
|
16
|
+
/**
|
17
|
+
* 激活面板
|
18
|
+
*/
|
19
|
+
activeKey?: Array<string | number | never> | string | number;
|
20
|
+
|
21
|
+
/**
|
22
|
+
* 手风琴模式
|
23
|
+
*/
|
24
|
+
accordion?: boolean;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* 自定义切换图标
|
28
|
+
*/
|
29
|
+
expandIcon?: SchemaObject;
|
30
|
+
|
31
|
+
/**
|
32
|
+
* 设置图标位置
|
33
|
+
*/
|
34
|
+
expandIconPosition?: 'left' | 'right';
|
35
|
+
|
36
|
+
/**
|
37
|
+
* 内容区域
|
38
|
+
*/
|
39
|
+
body?: SchemaCollection;
|
40
|
+
}
|
41
|
+
export interface CollapseGroupProps
|
42
|
+
extends RendererProps,
|
43
|
+
Omit<CollapseGroupSchema, 'type' | 'className'> {
|
44
|
+
|
45
|
+
children?: JSX.Element | ((props?: any) => JSX.Element);
|
46
|
+
}
|
47
|
+
|
48
|
+
export class CollapseGroupRender extends React.Component<CollapseGroupProps, {}> {
|
49
|
+
constructor(props: CollapseGroupProps) {
|
50
|
+
super(props);
|
51
|
+
}
|
52
|
+
render() {
|
53
|
+
const {
|
54
|
+
defaultActiveKey,
|
55
|
+
accordion,
|
56
|
+
expandIcon,
|
57
|
+
expandIconPosition,
|
58
|
+
body,
|
59
|
+
className,
|
60
|
+
render
|
61
|
+
} = this.props;
|
62
|
+
return (
|
63
|
+
<CollapseGroup
|
64
|
+
defaultActiveKey={defaultActiveKey}
|
65
|
+
accordion={accordion}
|
66
|
+
expandIcon={expandIcon}
|
67
|
+
expandIconPosition={expandIconPosition}
|
68
|
+
className={className}
|
69
|
+
>
|
70
|
+
{render('body', body || '')}
|
71
|
+
</CollapseGroup>
|
72
|
+
)
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
|
77
|
+
@Renderer({
|
78
|
+
type: 'collapse-group'
|
79
|
+
})
|
80
|
+
export class CollapseGroupRenderer extends CollapseGroupRender {}
|
@@ -0,0 +1,204 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {Renderer, RendererProps} from '../factory';
|
3
|
+
import {autobind, getPropValue} from '../utils/helper';
|
4
|
+
import {isPureVariable, resolveVariableAndFilter} from '../utils/tpl-builtin';
|
5
|
+
import {
|
6
|
+
BaseSchema,
|
7
|
+
SchemaTokenizeableString,
|
8
|
+
SchemaTpl,
|
9
|
+
SchemaUrlPath
|
10
|
+
} from '../Schema';
|
11
|
+
import {ActionSchema} from './Action';
|
12
|
+
import GridNav, {GridNavDirection, GridNavItem} from '../components/GridNav';
|
13
|
+
import {BadgeSchema} from '../components/Badge';
|
14
|
+
import handleAction from '../utils/handleAction';
|
15
|
+
import {validations} from '../utils/validations';
|
16
|
+
|
17
|
+
export interface ListItemSchema extends Omit<BaseSchema, 'type'> {
|
18
|
+
/**
|
19
|
+
* 单项点击事件
|
20
|
+
*/
|
21
|
+
clickAction?: ActionSchema;
|
22
|
+
|
23
|
+
/**
|
24
|
+
* 跳转地址
|
25
|
+
*/
|
26
|
+
link?: string;
|
27
|
+
|
28
|
+
/**
|
29
|
+
* 打开方式
|
30
|
+
*/
|
31
|
+
blank?: string;
|
32
|
+
|
33
|
+
/**
|
34
|
+
* 图片地址
|
35
|
+
*/
|
36
|
+
icon?: SchemaUrlPath;
|
37
|
+
|
38
|
+
/**
|
39
|
+
* 描述
|
40
|
+
*/
|
41
|
+
text?: SchemaTpl;
|
42
|
+
|
43
|
+
/**
|
44
|
+
* 图标最大宽度比例 0-100
|
45
|
+
*/
|
46
|
+
iconRatio?: number;
|
47
|
+
|
48
|
+
/**
|
49
|
+
* 角标
|
50
|
+
*/
|
51
|
+
badge?: BadgeSchema;
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* List 列表展示控件。
|
56
|
+
* 文档:https://baidu.gitee.io/amis/docs/components/card
|
57
|
+
*/
|
58
|
+
export interface ListSchema extends BaseSchema {
|
59
|
+
/**
|
60
|
+
* 指定为 List 列表展示控件。
|
61
|
+
*/
|
62
|
+
type: 'grid-nav';
|
63
|
+
|
64
|
+
/**
|
65
|
+
* 列表项类名
|
66
|
+
*/
|
67
|
+
itemClassName?: string;
|
68
|
+
|
69
|
+
/**
|
70
|
+
* 静态图片列表配置
|
71
|
+
*/
|
72
|
+
options?: Array<ListItemSchema>;
|
73
|
+
|
74
|
+
/**
|
75
|
+
* 是否将列表项固定为正方形
|
76
|
+
*/
|
77
|
+
square?: boolean;
|
78
|
+
|
79
|
+
/**
|
80
|
+
* 是否将列表项内容居中显示
|
81
|
+
*/
|
82
|
+
center?: boolean;
|
83
|
+
|
84
|
+
/**
|
85
|
+
* 是否显示列表项边框
|
86
|
+
*/
|
87
|
+
border?: boolean;
|
88
|
+
|
89
|
+
/**
|
90
|
+
* 列表项之间的间距,默认单位为px
|
91
|
+
*/
|
92
|
+
gutter?: number;
|
93
|
+
|
94
|
+
/**
|
95
|
+
* 图标宽度占比, 1-100
|
96
|
+
*/
|
97
|
+
iconRatio?: number;
|
98
|
+
|
99
|
+
/**
|
100
|
+
* 列表项内容排列的方向,可选值为 horizontal 、vertical
|
101
|
+
*/
|
102
|
+
direction?: GridNavDirection;
|
103
|
+
|
104
|
+
/**
|
105
|
+
* 列数
|
106
|
+
*/
|
107
|
+
columnNum?: number;
|
108
|
+
|
109
|
+
/**
|
110
|
+
* 数据源: 绑定当前环境变量
|
111
|
+
*
|
112
|
+
* @default ${items}
|
113
|
+
*/
|
114
|
+
source?: SchemaTokenizeableString;
|
115
|
+
}
|
116
|
+
|
117
|
+
export interface Column {
|
118
|
+
type: string;
|
119
|
+
[propName: string]: any;
|
120
|
+
}
|
121
|
+
|
122
|
+
export interface ListProps
|
123
|
+
extends RendererProps,
|
124
|
+
Omit<ListSchema, 'type' | 'className'> {
|
125
|
+
handleClick: (item?: ListItemSchema) => void;
|
126
|
+
}
|
127
|
+
|
128
|
+
@Renderer({
|
129
|
+
type: 'grid-nav'
|
130
|
+
})
|
131
|
+
export default class List extends React.Component<ListProps, object> {
|
132
|
+
@autobind
|
133
|
+
handleClick(item: ListItemSchema) {
|
134
|
+
return (e: React.MouseEvent) => {
|
135
|
+
let action;
|
136
|
+
if (item.link) {
|
137
|
+
action = validations.isUrl({}, item.link)
|
138
|
+
? {
|
139
|
+
type: 'button',
|
140
|
+
actionType: 'url',
|
141
|
+
url: item.link,
|
142
|
+
blank: item.blank
|
143
|
+
}
|
144
|
+
: {
|
145
|
+
type: 'button',
|
146
|
+
actionType: 'link',
|
147
|
+
link: item.link
|
148
|
+
};
|
149
|
+
} else {
|
150
|
+
action = item.clickAction!;
|
151
|
+
}
|
152
|
+
handleAction(e, action as ActionSchema, this.props);
|
153
|
+
};
|
154
|
+
}
|
155
|
+
|
156
|
+
render() {
|
157
|
+
const {itemClassName, source, data, options, classnames} = this.props;
|
158
|
+
|
159
|
+
let value = getPropValue(this.props);
|
160
|
+
let list: any = [];
|
161
|
+
|
162
|
+
if (typeof source === 'string' && isPureVariable(source)) {
|
163
|
+
list = resolveVariableAndFilter(source, data, '| raw') || undefined;
|
164
|
+
} else if (Array.isArray(value)) {
|
165
|
+
list = value;
|
166
|
+
} else if (Array.isArray(options)) {
|
167
|
+
list = options;
|
168
|
+
}
|
169
|
+
|
170
|
+
if (list && !Array.isArray(list)) {
|
171
|
+
list = [list];
|
172
|
+
}
|
173
|
+
|
174
|
+
if (!list?.length) {
|
175
|
+
return null;
|
176
|
+
}
|
177
|
+
|
178
|
+
return (
|
179
|
+
<GridNav {...this.props}>
|
180
|
+
{list.map((item: ListItemSchema, index: number) => (
|
181
|
+
<GridNavItem
|
182
|
+
key={index}
|
183
|
+
onClick={
|
184
|
+
item.clickAction || item.link ? this.handleClick(item) : undefined
|
185
|
+
}
|
186
|
+
className={itemClassName}
|
187
|
+
text={item.text}
|
188
|
+
icon={item.icon}
|
189
|
+
classnames={classnames}
|
190
|
+
badge={
|
191
|
+
item.badge
|
192
|
+
? {
|
193
|
+
badge: item.badge,
|
194
|
+
data: data,
|
195
|
+
classnames
|
196
|
+
}
|
197
|
+
: undefined
|
198
|
+
}
|
199
|
+
/>
|
200
|
+
))}
|
201
|
+
</GridNav>
|
202
|
+
);
|
203
|
+
}
|
204
|
+
}
|
package/src/store/formItem.ts
CHANGED
@@ -617,12 +617,104 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
617
617
|
return json;
|
618
618
|
});
|
619
619
|
|
620
|
+
const tryDeferLoadLeftOptions: (
|
621
|
+
option: any,
|
622
|
+
api: Api,
|
623
|
+
data?: object,
|
624
|
+
config?: fetchOptions
|
625
|
+
) => Promise<Payload | null> = flow(function* (
|
626
|
+
option: any,
|
627
|
+
api: string,
|
628
|
+
data: object,
|
629
|
+
config?: fetchOptions
|
630
|
+
) {
|
631
|
+
if (
|
632
|
+
self.options.length != 1 ||
|
633
|
+
!Array.isArray(self.options[0].leftOptions)
|
634
|
+
) {
|
635
|
+
return;
|
636
|
+
}
|
637
|
+
|
638
|
+
let leftOptions = self.options[0].leftOptions as any;
|
639
|
+
|
640
|
+
const indexes = findTreeIndex(leftOptions, item => item === option);
|
641
|
+
if (!indexes) {
|
642
|
+
return;
|
643
|
+
}
|
644
|
+
|
645
|
+
setOptions(
|
646
|
+
[
|
647
|
+
{
|
648
|
+
...self.options[0],
|
649
|
+
leftOptions: spliceTree(leftOptions, indexes, 1, {
|
650
|
+
...option,
|
651
|
+
loading: true
|
652
|
+
})
|
653
|
+
}
|
654
|
+
],
|
655
|
+
undefined,
|
656
|
+
data
|
657
|
+
);
|
658
|
+
|
659
|
+
let json = yield fetchOptions(
|
660
|
+
api,
|
661
|
+
data,
|
662
|
+
{
|
663
|
+
...config,
|
664
|
+
silent: true
|
665
|
+
},
|
666
|
+
false
|
667
|
+
);
|
668
|
+
if (!json) {
|
669
|
+
setOptions(
|
670
|
+
[
|
671
|
+
{
|
672
|
+
...self.options[0],
|
673
|
+
leftOptions: spliceTree(self.options, indexes, 1, {
|
674
|
+
...option,
|
675
|
+
loading: false,
|
676
|
+
error: true
|
677
|
+
})
|
678
|
+
}
|
679
|
+
],
|
680
|
+
undefined,
|
681
|
+
data
|
682
|
+
);
|
683
|
+
return;
|
684
|
+
}
|
685
|
+
|
686
|
+
let options: Array<IOption> =
|
687
|
+
json.data?.options ||
|
688
|
+
json.data.items ||
|
689
|
+
json.data.rows ||
|
690
|
+
json.data ||
|
691
|
+
[];
|
692
|
+
|
693
|
+
setOptions(
|
694
|
+
[
|
695
|
+
{
|
696
|
+
...self.options[0],
|
697
|
+
leftOptions: spliceTree(self.options, indexes, 1, {
|
698
|
+
...option,
|
699
|
+
loading: false,
|
700
|
+
loaded: true,
|
701
|
+
children: options
|
702
|
+
})
|
703
|
+
}
|
704
|
+
],
|
705
|
+
undefined,
|
706
|
+
data
|
707
|
+
);
|
708
|
+
|
709
|
+
return json;
|
710
|
+
});
|
711
|
+
|
620
712
|
const deferLoadOptions: (
|
621
713
|
option: any,
|
622
714
|
api: Api,
|
623
715
|
data?: object,
|
624
716
|
config?: fetchOptions
|
625
|
-
) => Promise<Payload | null> = flow(function*
|
717
|
+
) => Promise<Payload | null> = flow(function* (
|
626
718
|
option: any,
|
627
719
|
api: string,
|
628
720
|
data: object,
|
@@ -630,7 +722,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
630
722
|
) {
|
631
723
|
const indexes = findTreeIndex(self.options, item => item === option);
|
632
724
|
if (!indexes) {
|
633
|
-
return;
|
725
|
+
return yield tryDeferLoadLeftOptions(option, api, data, config);
|
634
726
|
}
|
635
727
|
|
636
728
|
setOptions(
|
package/src/types.ts
CHANGED
@@ -31,7 +31,7 @@ export interface fetcherResult {
|
|
31
31
|
}
|
32
32
|
|
33
33
|
export interface fetchOptions {
|
34
|
-
method?: 'get' | 'post' | 'put' | 'patch' | 'delete';
|
34
|
+
method?: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'jsonp';
|
35
35
|
successMessage?: string;
|
36
36
|
errorMessage?: string;
|
37
37
|
autoAppend?: boolean;
|