amis 1.4.2-beta.13 → 1.4.2-beta.18
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/Alert2.d.ts +26 -21
- package/lib/components/Alert2.js +11 -4
- package/lib/components/Alert2.js.map +2 -2
- package/lib/components/AssociatedSelection.js +2 -2
- package/lib/components/AssociatedSelection.js.map +2 -2
- package/lib/components/Button.js +1 -1
- package/lib/components/Button.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 +70 -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/ColorPicker.d.ts +5 -1
- package/lib/components/ColorPicker.js +17 -4
- package/lib/components/ColorPicker.js.map +2 -2
- 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/Overlay.js +5 -0
- package/lib/components/Overlay.js.map +2 -2
- package/lib/components/PopOver.d.ts +1 -0
- package/lib/components/PopOver.js +12 -1
- package/lib/components/PopOver.js.map +2 -2
- package/lib/components/Tabs.d.ts +20 -20
- package/lib/components/TabsTransfer.d.ts +84 -84
- package/lib/components/Toast.d.ts +90 -87
- package/lib/components/Toast.js +15 -5
- 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/components/condition-builder/Field.js +2 -3
- package/lib/components/condition-builder/Field.js.map +2 -2
- package/lib/components/icons.js +8 -0
- package/lib/components/icons.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/alert-danger.js +7 -0
- package/lib/icons/alert-info.js +7 -0
- package/lib/icons/alert-success.js +7 -0
- package/lib/icons/alert-warning.js +7 -0
- 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/Alert.d.ts +21 -1
- package/lib/renderers/Alert.js.map +2 -2
- package/lib/renderers/Card.d.ts +1 -0
- package/lib/renderers/Card.js +7 -2
- package/lib/renderers/Card.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/ConditionBuilder.js +2 -2
- package/lib/renderers/Form/ConditionBuilder.js.map +2 -2
- package/lib/renderers/Form/InputCity.d.ts +84 -84
- package/lib/renderers/Form/InputColor.d.ts +2 -1
- package/lib/renderers/Form/InputColor.js +1 -1
- package/lib/renderers/Form/InputColor.js.map +2 -2
- 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/renderers/Page.d.ts +18 -0
- package/lib/renderers/Page.js +53 -9
- package/lib/renderers/Page.js.map +2 -2
- package/lib/store/formItem.js +44 -4
- package/lib/store/formItem.js.map +2 -2
- package/lib/themes/ang-ie11.css +324 -49
- package/lib/themes/ang.css +324 -49
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +324 -49
- package/lib/themes/antd.css +324 -49
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +331 -58
- package/lib/themes/cxd.css +331 -58
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +324 -49
- package/lib/themes/dark.css +324 -49
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +331 -58
- 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 +8 -0
- package/lib/utils/helper.js +33 -2
- package/lib/utils/helper.js.map +2 -2
- package/lib/utils/tpl-builtin.js +5 -0
- package/lib/utils/tpl-builtin.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +365 -49
- package/scss/_properties.scss +2 -1
- package/scss/components/_alert.scss +28 -5
- package/scss/components/_anchor-nav.scss +1 -0
- package/scss/components/_button.scss +5 -0
- package/scss/components/_card.scss +1 -1
- package/scss/components/_collapse-group.scss +15 -0
- package/scss/components/_collapse.scss +33 -23
- package/scss/components/_grid-nav.scss +128 -0
- package/scss/components/_nav.scss +2 -7
- package/scss/components/_page.scss +35 -2
- package/scss/components/_spinner.scss +5 -4
- package/scss/components/_table.scss +6 -0
- package/scss/components/_toast.scss +41 -11
- package/scss/components/form/_color.scss +32 -3
- package/scss/components/form/_combo.scss +4 -0
- package/scss/components/form/_fieldset.scss +1 -0
- package/scss/components/form/_transfer.scss +1 -0
- package/scss/components/form/_tree.scss +42 -0
- package/scss/themes/_common.scss +2 -0
- package/scss/themes/_cxd-variables.scss +9 -4
- package/scss/themes/cxd.scss +1 -7
- package/sdk/ang-ie11.css +375 -53
- package/sdk/ang.css +377 -53
- package/sdk/antd-ie11.css +375 -53
- package/sdk/antd.css +377 -53
- package/sdk/charts.js +13 -13
- package/sdk/color-picker.js +69 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +379 -60
- package/sdk/cxd.css +384 -62
- package/sdk/dark-ie11.css +375 -53
- package/sdk/dark.css +377 -53
- 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 +16 -20
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +379 -60
- package/sdk/sdk.css +384 -62
- package/sdk/sdk.js +1215 -1173
- 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/Alert2.tsx +32 -4
- package/src/components/AssociatedSelection.tsx +3 -1
- package/src/components/Button.tsx +1 -0
- package/src/components/Collapse.tsx +139 -20
- package/src/components/CollapseGroup.tsx +130 -0
- package/src/components/ColorPicker.tsx +32 -10
- package/src/components/GridNav.tsx +233 -0
- package/src/components/Overlay.tsx +6 -0
- package/src/components/PopOver.tsx +15 -1
- package/src/components/Toast.tsx +48 -21
- package/src/components/Tree.tsx +194 -8
- package/src/components/condition-builder/Field.tsx +3 -1
- package/src/components/icons.tsx +8 -0
- package/src/envOverwrite.ts +20 -7
- package/src/factory.tsx +52 -6
- package/src/icons/alert-danger.svg +1 -0
- package/src/icons/alert-info.svg +1 -0
- package/src/icons/alert-success.svg +1 -0
- package/src/icons/alert-warning.svg +1 -0
- package/src/icons/drag-bar.svg +12 -6
- package/src/index.tsx +2 -0
- package/src/renderers/Alert.tsx +31 -1
- package/src/renderers/Card.tsx +13 -2
- package/src/renderers/Collapse.tsx +70 -117
- package/src/renderers/CollapseGroup.tsx +80 -0
- package/src/renderers/Form/ConditionBuilder.tsx +2 -2
- package/src/renderers/Form/InputColor.tsx +4 -2
- package/src/renderers/GridNav.tsx +204 -0
- package/src/renderers/Page.tsx +62 -1
- 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 +33 -0
- package/src/utils/tpl-builtin.ts +6 -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 {}
|
@@ -66,12 +66,12 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
|
|
66
66
|
RemoteOptionsProps & React.ComponentProps<typeof ConditionBuilder>
|
67
67
|
> {
|
68
68
|
render() {
|
69
|
-
const {loading, config, deferLoad, ...rest} = this.props;
|
69
|
+
const {loading, config, deferLoad, disabled, ...rest} = this.props;
|
70
70
|
return (
|
71
71
|
<ConditionBuilder
|
72
72
|
{...rest}
|
73
73
|
fields={config || rest.fields || []}
|
74
|
-
disabled={loading}
|
74
|
+
disabled={disabled || loading}
|
75
75
|
/>
|
76
76
|
);
|
77
77
|
}
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import React, {Suspense} from 'react';
|
2
|
-
import {FormItem, FormControlProps, FormBaseControl} from './Item';
|
3
2
|
import cx from 'classnames';
|
4
3
|
|
4
|
+
import {FormItem, FormControlProps, FormBaseControl} from './Item';
|
5
|
+
import type {PresetColor} from '../../components/ColorPicker';
|
6
|
+
|
5
7
|
export const ColorPicker = React.lazy(
|
6
8
|
() => import('../../components/ColorPicker')
|
7
9
|
);
|
@@ -34,7 +36,7 @@ export interface InputColorControlSchema extends FormBaseControl {
|
|
34
36
|
/**
|
35
37
|
* 预设颜色,用户可以直接从预设中选。
|
36
38
|
*/
|
37
|
-
presetColors?: Array<
|
39
|
+
presetColors?: Array<PresetColor>;
|
38
40
|
|
39
41
|
/**
|
40
42
|
* 是否允许用户输入颜色。
|
@@ -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/renderers/Page.tsx
CHANGED
@@ -85,6 +85,21 @@ export interface PageSchema extends BaseSchema {
|
|
85
85
|
*/
|
86
86
|
aside?: SchemaCollection;
|
87
87
|
|
88
|
+
/**
|
89
|
+
* 边栏是否允许拖动
|
90
|
+
*/
|
91
|
+
asideResizor?: boolean;
|
92
|
+
|
93
|
+
/**
|
94
|
+
* 边栏最小宽度
|
95
|
+
*/
|
96
|
+
asideMinWidth?: number;
|
97
|
+
|
98
|
+
/**
|
99
|
+
* 边栏最小宽度
|
100
|
+
*/
|
101
|
+
asideMaxWidth?: number;
|
102
|
+
|
88
103
|
/**
|
89
104
|
* 边栏区 css 类名
|
90
105
|
*/
|
@@ -199,6 +214,9 @@ export default class Page extends React.Component<PageProps> {
|
|
199
214
|
mounted: boolean;
|
200
215
|
style: HTMLStyleElement;
|
201
216
|
varStyle: HTMLStyleElement;
|
217
|
+
startX: number;
|
218
|
+
startWidth: number;
|
219
|
+
codeWrap: HTMLElement;
|
202
220
|
|
203
221
|
static defaultProps = {
|
204
222
|
asideClassName: '',
|
@@ -499,6 +517,37 @@ export default class Page extends React.Component<PageProps> {
|
|
499
517
|
}
|
500
518
|
}
|
501
519
|
|
520
|
+
@autobind
|
521
|
+
handleResizeMouseDown(e: React.MouseEvent) {
|
522
|
+
// todo 可能 ie 不正确
|
523
|
+
let isRightMB = e.nativeEvent.which == 3;
|
524
|
+
|
525
|
+
if (isRightMB) {
|
526
|
+
return;
|
527
|
+
}
|
528
|
+
|
529
|
+
this.codeWrap = e.currentTarget.parentElement as HTMLElement;
|
530
|
+
document.addEventListener('mousemove', this.handleResizeMouseMove);
|
531
|
+
document.addEventListener('mouseup', this.handleResizeMouseUp);
|
532
|
+
this.startX = e.clientX;
|
533
|
+
this.startWidth = this.codeWrap.offsetWidth;
|
534
|
+
}
|
535
|
+
|
536
|
+
@autobind
|
537
|
+
handleResizeMouseMove(e: MouseEvent) {
|
538
|
+
const {asideMinWidth = 160, asideMaxWidth = 350} = this.props;
|
539
|
+
const dx = e.clientX - this.startX;
|
540
|
+
const mx = this.startWidth + dx;
|
541
|
+
const width = Math.min(Math.max(mx, asideMinWidth), asideMaxWidth);
|
542
|
+
this.codeWrap.style.cssText += `width: ${width}px`;
|
543
|
+
}
|
544
|
+
|
545
|
+
@autobind
|
546
|
+
handleResizeMouseUp() {
|
547
|
+
document.removeEventListener('mousemove', this.handleResizeMouseMove);
|
548
|
+
document.removeEventListener('mouseup', this.handleResizeMouseUp);
|
549
|
+
}
|
550
|
+
|
502
551
|
openFeedback(dialog: any, ctx: any) {
|
503
552
|
return new Promise(resolve => {
|
504
553
|
const {store} = this.props;
|
@@ -658,6 +707,7 @@ export default class Page extends React.Component<PageProps> {
|
|
658
707
|
regions,
|
659
708
|
style,
|
660
709
|
data,
|
710
|
+
asideResizor,
|
661
711
|
translate: __
|
662
712
|
} = this.props;
|
663
713
|
|
@@ -684,7 +734,11 @@ export default class Page extends React.Component<PageProps> {
|
|
684
734
|
style={styleVar}
|
685
735
|
>
|
686
736
|
{hasAside ? (
|
687
|
-
<div className={cx(
|
737
|
+
<div className={cx(
|
738
|
+
`Page-aside`,
|
739
|
+
asideResizor ? 'relative' : 'Page-aside--withWidth',
|
740
|
+
asideClassName
|
741
|
+
)}>
|
688
742
|
{render('aside', aside || '', {
|
689
743
|
...subProps,
|
690
744
|
...(typeof aside === 'string'
|
@@ -694,6 +748,13 @@ export default class Page extends React.Component<PageProps> {
|
|
694
748
|
}
|
695
749
|
: null)
|
696
750
|
})}
|
751
|
+
{asideResizor ? (
|
752
|
+
<div
|
753
|
+
onMouseDown={this.handleResizeMouseDown}
|
754
|
+
className={cx(`Page-asideResizor`)}
|
755
|
+
></div>
|
756
|
+
) : null}
|
757
|
+
|
697
758
|
</div>
|
698
759
|
) : null}
|
699
760
|
|