amis 1.6.5-beta.3 → 1.8.0-beta.0
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 +3 -2
- package/lib/Schema.js +0 -1
- package/lib/Schema.js.map +2 -2
- package/lib/components/Alert2.js +4 -2
- package/lib/components/Alert2.js.map +2 -2
- package/lib/components/AssociatedSelection.d.ts +84 -84
- package/lib/components/Avatar.d.ts +20 -20
- package/lib/components/Breadcrumb.d.ts +130 -0
- package/lib/components/Breadcrumb.js +161 -0
- package/lib/components/Breadcrumb.js.map +13 -0
- package/lib/components/Card.d.ts +20 -20
- package/lib/components/ChainedSelection.d.ts +84 -84
- package/lib/components/CityArea.js +3 -0
- package/lib/components/CityArea.js.map +2 -2
- package/lib/components/Collapse.d.ts +20 -20
- package/lib/components/CollapseGroup.d.ts +20 -20
- package/lib/components/DatePicker.d.ts +84 -84
- package/lib/components/DateRangePicker.d.ts +2 -2
- package/lib/components/DateRangePicker.js +36 -45
- package/lib/components/DateRangePicker.js.map +2 -2
- package/lib/components/GroupedSelection.d.ts +84 -84
- package/lib/components/Layout.d.ts +21 -21
- package/lib/components/ListGroup.d.ts +21 -21
- package/lib/components/PopUp.js +2 -1
- package/lib/components/PopUp.js.map +2 -2
- package/lib/components/Radios.d.ts +21 -21
- package/lib/components/Range.js.map +2 -2
- package/lib/components/Selection.d.ts +84 -84
- package/lib/components/TableSelection.d.ts +84 -84
- package/lib/components/Tabs.d.ts +52 -23
- package/lib/components/Tabs.js +198 -46
- package/lib/components/Tabs.js.map +2 -2
- package/lib/components/TooltipWrapper.d.ts +21 -20
- package/lib/components/TooltipWrapper.js +2 -2
- package/lib/components/TooltipWrapper.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 +84 -84
- package/lib/components/TreeSelection.d.ts +84 -84
- package/lib/components/calendar/Calendar.js +5 -0
- package/lib/components/calendar/Calendar.js.map +2 -2
- package/lib/components/calendar/DaysView.js.map +1 -1
- package/lib/components/icons.js +8 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/components/index.d.ts +2 -1
- package/lib/components/index.js +4 -2
- package/lib/components/index.js.map +2 -2
- package/lib/icons/cloud-upload.js +17 -0
- package/lib/icons/image.js +7 -0
- package/lib/icons/refresh.js +9 -0
- package/lib/icons/trash.js +10 -0
- package/lib/icons/upload.js +3 -8
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +2 -2
- package/lib/locale/en-US.js +3 -1
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +4 -2
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.d.ts +1 -1
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/Breadcrumb.d.ts +41 -6
- package/lib/renderers/Breadcrumb.js +23 -19
- package/lib/renderers/Breadcrumb.js.map +2 -2
- package/lib/renderers/ButtonGroup.d.ts +2 -2
- package/lib/renderers/ButtonGroup.js.map +1 -1
- package/lib/renderers/Form/ChainedSelect.d.ts +4 -1
- package/lib/renderers/Form/ChainedSelect.js +83 -34
- package/lib/renderers/Form/ChainedSelect.js.map +2 -2
- package/lib/renderers/Form/Checkbox.d.ts +3 -0
- package/lib/renderers/Form/Checkbox.js +38 -1
- package/lib/renderers/Form/Checkbox.js.map +2 -2
- package/lib/renderers/Form/Combo.d.ts +4 -3
- package/lib/renderers/Form/Combo.js +81 -32
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/DiffEditor.d.ts +1 -1
- package/lib/renderers/Form/InputCity.d.ts +84 -84
- package/lib/renderers/Form/InputCity.js +4 -1
- package/lib/renderers/Form/InputCity.js.map +2 -2
- package/lib/renderers/Form/InputColor.js +3 -1
- package/lib/renderers/Form/InputColor.js.map +2 -2
- package/lib/renderers/Form/InputDate.js +3 -1
- package/lib/renderers/Form/InputDate.js.map +2 -2
- package/lib/renderers/Form/InputDateRange.js +3 -1
- package/lib/renderers/Form/InputDateRange.js.map +2 -2
- package/lib/renderers/Form/InputExcel.d.ts +4 -0
- package/lib/renderers/Form/InputExcel.js +33 -6
- package/lib/renderers/Form/InputExcel.js.map +2 -2
- package/lib/renderers/Form/InputFile.d.ts +8 -1
- package/lib/renderers/Form/InputFile.js +71 -42
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputImage.d.ts +4 -1
- package/lib/renderers/Form/InputImage.js +21 -9
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/InputRange.d.ts +27 -9
- package/lib/renderers/Form/InputRange.js +88 -23
- package/lib/renderers/Form/InputRange.js.map +2 -2
- package/lib/renderers/Form/InputSubForm.js +2 -1
- package/lib/renderers/Form/InputSubForm.js.map +2 -2
- package/lib/renderers/Form/InputTag.js +2 -1
- package/lib/renderers/Form/InputTag.js.map +2 -2
- package/lib/renderers/Form/MatrixCheckboxes.js +2 -1
- package/lib/renderers/Form/MatrixCheckboxes.js.map +2 -2
- package/lib/renderers/Form/NestedSelect.d.ts +9 -6
- package/lib/renderers/Form/NestedSelect.js +247 -130
- package/lib/renderers/Form/NestedSelect.js.map +2 -2
- package/lib/renderers/Form/Options.js +2 -1
- package/lib/renderers/Form/Options.js.map +2 -2
- package/lib/renderers/Form/Radios.js +2 -1
- package/lib/renderers/Form/Radios.js.map +2 -2
- package/lib/renderers/Form/Select.js +6 -3
- package/lib/renderers/Form/Select.js.map +2 -2
- package/lib/renderers/Form/Switch.d.ts +7 -6
- package/lib/renderers/Form/Switch.js +4 -1
- package/lib/renderers/Form/Switch.js.map +2 -2
- package/lib/renderers/Log.js +2 -1
- package/lib/renderers/Log.js.map +2 -2
- package/lib/renderers/PopOver.js +1 -1
- package/lib/renderers/PopOver.js.map +2 -2
- package/lib/renderers/Tabs.d.ts +58 -5
- package/lib/renderers/Tabs.js +170 -58
- package/lib/renderers/Tabs.js.map +2 -2
- package/lib/renderers/TooltipWrapper.d.ts +104 -0
- package/lib/renderers/TooltipWrapper.js +59 -0
- package/lib/renderers/TooltipWrapper.js.map +13 -0
- package/lib/renderers/Video.d.ts +6 -0
- package/lib/renderers/Video.js +13 -6
- package/lib/renderers/Video.js.map +2 -2
- package/lib/store/form.js +4 -13
- package/lib/store/form.js.map +2 -2
- package/lib/store/table.js +1 -1
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +742 -160
- package/lib/themes/ang.css +793 -163
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +757 -175
- package/lib/themes/antd.css +793 -163
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +1249 -667
- package/lib/themes/cxd.css +970 -321
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +742 -160
- package/lib/themes/dark.css +793 -163
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default-ie11.css +1249 -667
- package/lib/themes/default.css +970 -321
- package/lib/themes/default.css.map +1 -1
- package/package.json +1 -1
- package/schema.json +16012 -736
- package/scss/_properties.scss +56 -2
- package/scss/components/_alert.scss +1 -1
- package/scss/components/_breadcrumb.scss +90 -1
- package/scss/components/_button-group.scss +15 -0
- package/scss/components/_city-area.scss +2 -0
- package/scss/components/_popup.scss +13 -3
- package/scss/components/_tabs.scss +629 -132
- package/scss/components/_tooltip.scss +72 -0
- package/scss/components/form/_file.scss +82 -24
- package/scss/components/form/_image.scss +30 -25
- package/scss/components/form/_number.scss +2 -0
- package/scss/components/form/_switch.scss +1 -3
- package/scss/themes/_cxd-colors.scss +47 -47
- package/scss/themes/_cxd-variables.scss +20 -0
- package/sdk/ang-ie11.css +879 -196
- package/sdk/ang.css +931 -200
- package/sdk/antd-ie11.css +951 -268
- package/sdk/antd.css +931 -200
- 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 +1386 -703
- package/sdk/cxd.css +1107 -357
- package/sdk/dark-ie11.css +879 -196
- package/sdk/dark.css +931 -200
- 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 +17 -17
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +1386 -703
- package/sdk/sdk.css +1107 -357
- package/sdk/sdk.js +1260 -1248
- 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 -2
- package/src/components/Alert2.tsx +9 -3
- package/src/components/Breadcrumb.tsx +294 -0
- package/src/components/CityArea.tsx +3 -0
- package/src/components/DateRangePicker.tsx +40 -68
- package/src/components/PopUp.tsx +6 -5
- package/src/components/Range.tsx +7 -1
- package/src/components/Tabs.tsx +300 -54
- package/src/components/TooltipWrapper.tsx +4 -1
- package/src/components/calendar/Calendar.tsx +5 -0
- package/src/components/calendar/DaysView.tsx +2 -2
- package/src/components/icons.tsx +8 -0
- package/src/components/index.tsx +2 -0
- package/src/icons/cloud-upload.svg +22 -0
- package/src/icons/image.svg +1 -0
- package/src/icons/refresh.svg +7 -0
- package/src/icons/trash.svg +8 -0
- package/src/icons/upload.svg +4 -9
- package/src/index.tsx +1 -0
- package/src/locale/en-US.ts +3 -1
- package/src/locale/zh-CN.ts +4 -2
- package/src/renderers/Action.tsx +2 -1
- package/src/renderers/Breadcrumb.tsx +89 -45
- package/src/renderers/ButtonGroup.tsx +2 -2
- package/src/renderers/Form/ChainedSelect.tsx +56 -12
- package/src/renderers/Form/Checkbox.tsx +30 -1
- package/src/renderers/Form/Combo.tsx +84 -26
- package/src/renderers/Form/InputCity.tsx +13 -1
- package/src/renderers/Form/InputColor.tsx +2 -0
- package/src/renderers/Form/InputDate.tsx +2 -0
- package/src/renderers/Form/InputDateRange.tsx +2 -0
- package/src/renderers/Form/InputExcel.tsx +27 -5
- package/src/renderers/Form/InputFile.tsx +167 -115
- package/src/renderers/Form/InputImage.tsx +61 -35
- package/src/renderers/Form/InputRange.tsx +95 -40
- package/src/renderers/Form/InputSubForm.tsx +2 -1
- package/src/renderers/Form/InputTag.tsx +3 -1
- package/src/renderers/Form/MatrixCheckboxes.tsx +3 -1
- package/src/renderers/Form/NestedSelect.tsx +75 -26
- package/src/renderers/Form/Options.tsx +3 -1
- package/src/renderers/Form/Radios.tsx +3 -1
- package/src/renderers/Form/Select.tsx +6 -2
- package/src/renderers/Form/Switch.tsx +16 -9
- package/src/renderers/Log.tsx +2 -1
- package/src/renderers/PopOver.tsx +1 -1
- package/src/renderers/Tabs.tsx +254 -93
- package/src/renderers/TooltipWrapper.tsx +219 -0
- package/src/renderers/Video.tsx +21 -6
- package/src/store/form.ts +0 -9
- package/src/store/table.ts +1 -1
package/src/Schema.ts
CHANGED
@@ -52,6 +52,7 @@ import {DialogSchema, DialogSchemaBase} from './renderers/Dialog';
|
|
52
52
|
import {DrawerSchema} from './renderers/Drawer';
|
53
53
|
import {SearchBoxSchema} from './renderers/SearchBox';
|
54
54
|
import {SparkLineSchema} from './renderers/SparkLine';
|
55
|
+
import {TooltipWrapperSchema} from './renderers/TooltipWrapper';
|
55
56
|
import {PaginationWrapperSchema} from './renderers/PaginationWrapper';
|
56
57
|
import {PaginationSchema} from './renderers/Pagination';
|
57
58
|
import {AnchorNavSchema} from './renderers/AnchorNav';
|
@@ -331,7 +332,8 @@ export type SchemaType =
|
|
331
332
|
| 'native-date'
|
332
333
|
| 'native-time'
|
333
334
|
| 'native-number'
|
334
|
-
| 'code'
|
335
|
+
| 'code'
|
336
|
+
| 'tooltip-wrapper';
|
335
337
|
|
336
338
|
export type SchemaObject =
|
337
339
|
| PageSchema
|
@@ -389,6 +391,7 @@ export type SchemaObject =
|
|
389
391
|
| VideoSchema
|
390
392
|
| WizardSchema
|
391
393
|
| WrapperSchema
|
394
|
+
| TooltipWrapperSchema
|
392
395
|
| FormSchema
|
393
396
|
| AnchorNavSchema
|
394
397
|
| StepsSchema
|
@@ -882,4 +885,4 @@ export interface ToastSchemaBase extends BaseSchema {
|
|
882
885
|
* 持续时间
|
883
886
|
*/
|
884
887
|
timeout: number;
|
885
|
-
}
|
888
|
+
}
|
@@ -5,7 +5,8 @@
|
|
5
5
|
|
6
6
|
import React from 'react';
|
7
7
|
import {ClassNamesFn, themeable} from '../theme';
|
8
|
-
import {
|
8
|
+
import {generateIcon} from '../utils/icon';
|
9
|
+
import {Icon, getIcon} from './icons';
|
9
10
|
|
10
11
|
export interface AlertProps {
|
11
12
|
level: 'danger' | 'info' | 'success' | 'warning';
|
@@ -73,16 +74,21 @@ export class Alert extends React.Component<AlertProps, AlertState> {
|
|
73
74
|
closeButtonClassName
|
74
75
|
} = this.props;
|
75
76
|
|
77
|
+
// 优先使用内置svg,其次使用icon库
|
76
78
|
const iconNode = icon ? (
|
77
79
|
typeof icon === 'string' ? (
|
78
|
-
|
80
|
+
getIcon(icon) ? (
|
81
|
+
<Icon icon={icon} className={cx(`icon`)} />
|
82
|
+
) : (
|
83
|
+
generateIcon(cx, icon, 'icon')
|
84
|
+
)
|
79
85
|
) : React.isValidElement(icon) ? (
|
80
86
|
React.cloneElement(icon, {
|
81
87
|
className: cx(`Alert-icon`, icon.props?.className)
|
82
88
|
})
|
83
89
|
) : null
|
84
90
|
) : showIcon ? (
|
85
|
-
<Icon icon={`alert-${level}`} className={cx(`
|
91
|
+
<Icon icon={`alert-${level}`} className={cx(`icon`)} />
|
86
92
|
) : null;
|
87
93
|
|
88
94
|
return this.state.show ? (
|
@@ -0,0 +1,294 @@
|
|
1
|
+
/**
|
2
|
+
* @file Breadcrumb 面包屑
|
3
|
+
*/
|
4
|
+
|
5
|
+
import React from 'react';
|
6
|
+
import TooltipWrapper, {Trigger} from './TooltipWrapper';
|
7
|
+
import {ClassNamesFn, themeable, ThemeProps} from '../theme';
|
8
|
+
import {RootClose} from '../utils/RootClose';
|
9
|
+
import {removeHTMLTag} from '../utils/helper';
|
10
|
+
import {Icon} from '../components/icons';
|
11
|
+
import {generateIcon} from '../utils/icon';
|
12
|
+
import {
|
13
|
+
ItemPlace,
|
14
|
+
BreadcrumbBaseItemSchema,
|
15
|
+
BreadcrumbItemSchema,
|
16
|
+
TooltipPositionType,
|
17
|
+
BreadcrumbSchema
|
18
|
+
} from '../renderers/Breadcrumb';
|
19
|
+
|
20
|
+
interface BreadcrumbItemState {
|
21
|
+
isOpened: boolean;
|
22
|
+
tooltipTrigger: Trigger | Array<Trigger>;
|
23
|
+
tooltipRootClose: boolean;
|
24
|
+
}
|
25
|
+
|
26
|
+
interface BreadcrumbBaseItemProps
|
27
|
+
extends BreadcrumbBaseItemSchema {}
|
28
|
+
|
29
|
+
interface BreadcrumbItemProps {
|
30
|
+
item: BreadcrumbItemSchema;
|
31
|
+
itemPlace: ItemPlace;
|
32
|
+
labelMaxLength?: number;
|
33
|
+
tooltipContainer?: any;
|
34
|
+
tooltipPosition?: TooltipPositionType;
|
35
|
+
classnames: ClassNamesFn;
|
36
|
+
[propName: string]: any;
|
37
|
+
}
|
38
|
+
|
39
|
+
interface BreadcrumbProps extends ThemeProps,
|
40
|
+
Omit<BreadcrumbSchema, 'type' | 'className'> {
|
41
|
+
tooltipContainer?: any;
|
42
|
+
tooltipPosition?: TooltipPositionType;
|
43
|
+
[propName: string]: any;
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Breadcrumb 面包屑类
|
48
|
+
*/
|
49
|
+
export class Breadcrumb extends React.Component<BreadcrumbProps> {
|
50
|
+
Item: typeof BreadcrumbItem;
|
51
|
+
|
52
|
+
static defaultProps: Pick<
|
53
|
+
BreadcrumbProps,
|
54
|
+
| 'separator'
|
55
|
+
| 'labelMaxLength'
|
56
|
+
| 'tooltipPosition'
|
57
|
+
> = {
|
58
|
+
separator: '>',
|
59
|
+
labelMaxLength: 16,
|
60
|
+
tooltipPosition: 'top'
|
61
|
+
};
|
62
|
+
|
63
|
+
render() {
|
64
|
+
const cx = this.props.classnames;
|
65
|
+
const {
|
66
|
+
className,
|
67
|
+
separatorClassName,
|
68
|
+
items,
|
69
|
+
separator,
|
70
|
+
...restProps
|
71
|
+
} = this.props;
|
72
|
+
|
73
|
+
const crumbsLength = items?.length;
|
74
|
+
if (!crumbsLength) {
|
75
|
+
return <div className={cx('Breadcrumb', className)}></div>;
|
76
|
+
}
|
77
|
+
|
78
|
+
const crumbs = items.map<React.ReactNode>((item, index) => {
|
79
|
+
let itemPlace: ItemPlace = 'middle';
|
80
|
+
if (index === 0) {
|
81
|
+
itemPlace = 'start';
|
82
|
+
}
|
83
|
+
if (index === crumbsLength - 1) {
|
84
|
+
itemPlace = 'end';
|
85
|
+
}
|
86
|
+
return (
|
87
|
+
<BreadcrumbItem
|
88
|
+
{...restProps}
|
89
|
+
item={item}
|
90
|
+
itemPlace={itemPlace}
|
91
|
+
key={index}
|
92
|
+
></BreadcrumbItem>
|
93
|
+
)
|
94
|
+
})
|
95
|
+
.reduce((prev, curr, index) => [
|
96
|
+
prev,
|
97
|
+
<span
|
98
|
+
className={cx('Breadcrumb-separator', separatorClassName)}
|
99
|
+
key={`separator-${index}`}
|
100
|
+
>
|
101
|
+
{separator}
|
102
|
+
</span>,
|
103
|
+
curr
|
104
|
+
]);
|
105
|
+
|
106
|
+
return (
|
107
|
+
<div className={cx('Breadcrumb', className)}>{crumbs}</div>
|
108
|
+
);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* BreadcrumbItem 面包项类
|
114
|
+
*/
|
115
|
+
export class BreadcrumbItem extends React.Component<BreadcrumbItemProps, BreadcrumbItemState> {
|
116
|
+
target: any;
|
117
|
+
|
118
|
+
state: BreadcrumbItemState = {
|
119
|
+
tooltipTrigger: ['hover', 'focus'],
|
120
|
+
tooltipRootClose: false,
|
121
|
+
isOpened: false
|
122
|
+
};
|
123
|
+
|
124
|
+
domRef = (ref: any) => {
|
125
|
+
this.target = ref;
|
126
|
+
}
|
127
|
+
|
128
|
+
toogle = (e: React.MouseEvent<any>) => {
|
129
|
+
e.preventDefault();
|
130
|
+
|
131
|
+
this.setState({
|
132
|
+
isOpened: !this.state.isOpened
|
133
|
+
});
|
134
|
+
}
|
135
|
+
|
136
|
+
close = () => {
|
137
|
+
this.setState({
|
138
|
+
isOpened: false
|
139
|
+
});
|
140
|
+
}
|
141
|
+
|
142
|
+
/**
|
143
|
+
* 渲染基础面包项
|
144
|
+
* @param showHref 是否显示超链接
|
145
|
+
* @param itemType 基础面包项类型
|
146
|
+
* @param item 面包项
|
147
|
+
* @param label 渲染文本
|
148
|
+
* @returns
|
149
|
+
*/
|
150
|
+
renderBreadcrumbBaseItem(
|
151
|
+
showHref: boolean,
|
152
|
+
itemType: 'default' | 'dropdown',
|
153
|
+
item: BreadcrumbBaseItemProps,
|
154
|
+
label?: string,
|
155
|
+
) {
|
156
|
+
const {
|
157
|
+
itemClassName,
|
158
|
+
dropdownItemClassName,
|
159
|
+
classnames: cx
|
160
|
+
} = this.props;
|
161
|
+
const baseItemClassName = itemType === 'default' ? itemClassName : dropdownItemClassName;
|
162
|
+
if (showHref) {
|
163
|
+
return (
|
164
|
+
<a href={item.href} className={cx('Breadcrumb-item-' + itemType, baseItemClassName)}>
|
165
|
+
{item.icon
|
166
|
+
? generateIcon(cx, item.icon, 'Icon', 'Breadcrumb-icon')
|
167
|
+
: null}
|
168
|
+
<span className={cx('TplField')}>{label}</span>
|
169
|
+
</a>
|
170
|
+
);
|
171
|
+
}
|
172
|
+
return (
|
173
|
+
<span className={cx('Breadcrumb-item-' + itemType, baseItemClassName)}>
|
174
|
+
{item.icon
|
175
|
+
? generateIcon(cx, item.icon, 'Icon', 'Breadcrumb-icon')
|
176
|
+
: null}
|
177
|
+
<span className={cx('TplField')}>{label}</span>
|
178
|
+
</span>
|
179
|
+
);
|
180
|
+
}
|
181
|
+
|
182
|
+
/**
|
183
|
+
* 渲染基础面包项完整节点
|
184
|
+
* @param item 面包项
|
185
|
+
* @param tooltipPosition 浮窗提示位置
|
186
|
+
* @param itemPlace 面包香所在相对位置
|
187
|
+
* @param itemType 基础面包项类型
|
188
|
+
* @returns
|
189
|
+
*/
|
190
|
+
renderBreadcrumbNode(
|
191
|
+
item: BreadcrumbBaseItemProps,
|
192
|
+
tooltipPosition: TooltipPositionType = 'top',
|
193
|
+
itemPlace: ItemPlace,
|
194
|
+
itemType: 'default' | 'dropdown'
|
195
|
+
) {
|
196
|
+
const {
|
197
|
+
labelMaxLength,
|
198
|
+
tooltipContainer
|
199
|
+
} = this.props;
|
200
|
+
const {
|
201
|
+
tooltipTrigger,
|
202
|
+
tooltipRootClose
|
203
|
+
} = this.state;
|
204
|
+
const pureLabel = item.label ? removeHTMLTag(item.label) : '';
|
205
|
+
// 限制最大展示长度的最小值
|
206
|
+
const maxLength = labelMaxLength && +labelMaxLength > 1 ? +labelMaxLength : 1;
|
207
|
+
// 面包项相对位置为 middle ,且超过最大展示长度的面包项,进行缩略展示,并使用浮窗提示
|
208
|
+
if (pureLabel.length > maxLength && itemPlace === 'middle') {
|
209
|
+
return (
|
210
|
+
<TooltipWrapper
|
211
|
+
tooltip={pureLabel}
|
212
|
+
placement={tooltipPosition}
|
213
|
+
container={tooltipContainer}
|
214
|
+
trigger={tooltipTrigger}
|
215
|
+
rootClose={tooltipRootClose}
|
216
|
+
>
|
217
|
+
{this.renderBreadcrumbBaseItem(true, itemType, item, pureLabel.substring(0, maxLength) + '...')}
|
218
|
+
</TooltipWrapper>
|
219
|
+
);
|
220
|
+
}
|
221
|
+
const showHref = !item.href || itemPlace === 'end';
|
222
|
+
return this.renderBreadcrumbBaseItem(!showHref, itemType, item, pureLabel);
|
223
|
+
}
|
224
|
+
|
225
|
+
/**
|
226
|
+
* 渲染下拉菜单节点
|
227
|
+
* @param dropdown 面包项下拉菜单
|
228
|
+
* @returns
|
229
|
+
*/
|
230
|
+
renderDropdownNode(dropdown: BreadcrumbBaseItemProps[]) {
|
231
|
+
const {
|
232
|
+
dropdownClassName,
|
233
|
+
classnames: cx
|
234
|
+
} = this.props;
|
235
|
+
return (
|
236
|
+
<RootClose
|
237
|
+
disabled={!this.state.isOpened}
|
238
|
+
onRootClose={this.close}
|
239
|
+
>
|
240
|
+
{(ref: any) => {
|
241
|
+
return (
|
242
|
+
<ul
|
243
|
+
className={cx('Breadcrumb-dropdown', dropdownClassName)}
|
244
|
+
onClick={this.close}
|
245
|
+
ref={ref}
|
246
|
+
>
|
247
|
+
{Array.isArray(dropdown)
|
248
|
+
&& dropdown.map((menuItem: BreadcrumbBaseItemProps, index: number) => {
|
249
|
+
return (
|
250
|
+
<li key={'dropdown-item' + index}>
|
251
|
+
{this.renderBreadcrumbNode(menuItem, 'right', 'middle', 'dropdown')}
|
252
|
+
</li>
|
253
|
+
);
|
254
|
+
})}
|
255
|
+
</ul>
|
256
|
+
);
|
257
|
+
}}
|
258
|
+
</RootClose>
|
259
|
+
);
|
260
|
+
}
|
261
|
+
|
262
|
+
render() {
|
263
|
+
const {
|
264
|
+
item,
|
265
|
+
itemPlace,
|
266
|
+
tooltipPosition,
|
267
|
+
classnames: cx
|
268
|
+
} = this.props;
|
269
|
+
const {dropdown, ...restItemProps} = item;
|
270
|
+
return (
|
271
|
+
<span
|
272
|
+
className={cx('Breadcrumb-item',
|
273
|
+
{
|
274
|
+
'is-opened': this.state.isOpened
|
275
|
+
},
|
276
|
+
{
|
277
|
+
'Breadcrumb-item-last': itemPlace === 'end'
|
278
|
+
}
|
279
|
+
)}
|
280
|
+
ref={this.domRef}
|
281
|
+
>
|
282
|
+
{this.renderBreadcrumbNode({...restItemProps}, tooltipPosition, itemPlace, 'default')}
|
283
|
+
{dropdown ? (
|
284
|
+
<span onClick={this.toogle} className={cx('Breadcrumb-item-caret')}>
|
285
|
+
<Icon icon="caret" className="icon" />
|
286
|
+
</span>
|
287
|
+
): null}
|
288
|
+
{dropdown && this.state.isOpened ? this.renderDropdownNode(dropdown) : null}
|
289
|
+
</span>
|
290
|
+
);
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
export default themeable(Breadcrumb);
|
@@ -145,8 +145,11 @@ const CityArea = memo<AreaProps>(props => {
|
|
145
145
|
} else {
|
146
146
|
onChange({
|
147
147
|
code,
|
148
|
+
provinceCode: province,
|
148
149
|
province: db[province],
|
150
|
+
cityCode: city,
|
149
151
|
city: db[city],
|
152
|
+
districtCode: district,
|
150
153
|
district: db[district],
|
151
154
|
street
|
152
155
|
});
|
@@ -224,6 +224,9 @@ export class DateRangePicker extends React.Component<
|
|
224
224
|
popover: any;
|
225
225
|
input?: HTMLInputElement;
|
226
226
|
|
227
|
+
// 是否是第一次点击,如果是第一次点击就可以点任意地址
|
228
|
+
isFirstClick: boolean = true;
|
229
|
+
|
227
230
|
static formatValue(
|
228
231
|
newValue: any,
|
229
232
|
format: string,
|
@@ -276,8 +279,7 @@ export class DateRangePicker extends React.Component<
|
|
276
279
|
|
277
280
|
this.open = this.open.bind(this);
|
278
281
|
this.close = this.close.bind(this);
|
279
|
-
this.
|
280
|
-
this.handleEndChange = this.handleEndChange.bind(this);
|
282
|
+
this.handleSelectChange = this.handleSelectChange.bind(this);
|
281
283
|
this.handleFocus = this.handleFocus.bind(this);
|
282
284
|
this.handleBlur = this.handleBlur.bind(this);
|
283
285
|
this.checkStartIsValidDate = this.checkStartIsValidDate.bind(this);
|
@@ -426,61 +428,47 @@ export class DateRangePicker extends React.Component<
|
|
426
428
|
return value;
|
427
429
|
}
|
428
430
|
|
429
|
-
|
431
|
+
handleSelectChange(newValue: moment.Moment) {
|
430
432
|
const {embed, timeFormat, minDuration, maxDuration, minDate} = this.props;
|
431
|
-
|
432
|
-
|
433
|
-
if (
|
434
|
-
startDate &&
|
435
|
-
(!endDate || (endDate && newValue.isSame(startDate))) && // 没有结束时间,或者新的时间也是开始时间,这时都会将新值当成结束时间
|
436
|
-
newValue.isSameOrAfter(startDate) &&
|
437
|
-
(!minDuration || newValue.isAfter(startDate.clone().add(minDuration))) &&
|
438
|
-
(!maxDuration || newValue.isBefore(startDate.clone().add(maxDuration)))
|
439
|
-
) {
|
440
|
-
return this.setState(
|
441
|
-
{
|
442
|
-
endDate: this.filterDate(newValue, endDate, timeFormat, 'end')
|
443
|
-
},
|
444
|
-
() => {
|
445
|
-
embed && this.confirm();
|
446
|
-
}
|
447
|
-
);
|
448
|
-
}
|
449
|
-
|
450
|
-
if (minDate && newValue && newValue.isBefore(minDate, 'second')) {
|
451
|
-
newValue = minDate;
|
452
|
-
}
|
433
|
+
let {startDate, endDate} = this.state;
|
453
434
|
|
454
|
-
|
455
|
-
|
435
|
+
// 第一次点击只标记起始时间,或者点击了开始时间前面的时间
|
436
|
+
if (this.isFirstClick || newValue.isBefore(startDate)) {
|
437
|
+
// 这种情况说明第二次点击点击了前面的时间,这时要标记为第二次点击
|
438
|
+
if (newValue.isBefore(startDate)) {
|
439
|
+
this.isFirstClick = true;
|
440
|
+
}
|
441
|
+
if (minDate && newValue.isBefore(minDate)) {
|
442
|
+
newValue = minDate;
|
443
|
+
}
|
444
|
+
this.setState({
|
456
445
|
startDate: this.filterDate(
|
457
446
|
newValue,
|
458
447
|
startDate || minDate,
|
459
448
|
timeFormat,
|
460
449
|
'start'
|
461
|
-
)
|
462
|
-
|
463
|
-
|
464
|
-
|
450
|
+
),
|
451
|
+
endDate: undefined
|
452
|
+
});
|
453
|
+
} else {
|
454
|
+
// 第二次点击作为结束时间
|
455
|
+
if (!startDate) {
|
456
|
+
// 不大可能,但只能作为开始时间了
|
457
|
+
startDate = newValue;
|
465
458
|
}
|
466
|
-
);
|
467
|
-
}
|
468
459
|
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
(!maxDuration || newValue.isAfter(endDate.clone().subtract(maxDuration)))
|
480
|
-
) {
|
481
|
-
return this.setState(
|
460
|
+
if (minDuration && newValue.isAfter(startDate.clone().add(minDuration))) {
|
461
|
+
newValue = startDate.clone().add(minDuration);
|
462
|
+
}
|
463
|
+
if (
|
464
|
+
maxDuration &&
|
465
|
+
newValue.isBefore(startDate.clone().add(maxDuration))
|
466
|
+
) {
|
467
|
+
newValue = startDate.clone().add(maxDuration);
|
468
|
+
}
|
469
|
+
this.setState(
|
482
470
|
{
|
483
|
-
|
471
|
+
endDate: this.filterDate(newValue, endDate, timeFormat, 'end')
|
484
472
|
},
|
485
473
|
() => {
|
486
474
|
embed && this.confirm();
|
@@ -488,23 +476,7 @@ export class DateRangePicker extends React.Component<
|
|
488
476
|
);
|
489
477
|
}
|
490
478
|
|
491
|
-
|
492
|
-
newValue = maxDate;
|
493
|
-
}
|
494
|
-
|
495
|
-
this.setState(
|
496
|
-
{
|
497
|
-
endDate: this.filterDate(
|
498
|
-
newValue,
|
499
|
-
endDate || maxDate,
|
500
|
-
timeFormat,
|
501
|
-
'end'
|
502
|
-
)
|
503
|
-
},
|
504
|
-
() => {
|
505
|
-
embed && this.confirm();
|
506
|
-
}
|
507
|
-
);
|
479
|
+
this.isFirstClick = !this.isFirstClick;
|
508
480
|
}
|
509
481
|
|
510
482
|
handleMobileChange(data: any, callback?: () => void) {
|
@@ -600,7 +572,7 @@ export class DateRangePicker extends React.Component<
|
|
600
572
|
? maxDate.isBefore(endDate)
|
601
573
|
? maxDate
|
602
574
|
: endDate
|
603
|
-
:
|
575
|
+
: undefined;
|
604
576
|
|
605
577
|
if (minDate && currentDate.isBefore(minDate, precision)) {
|
606
578
|
return false;
|
@@ -634,7 +606,7 @@ export class DateRangePicker extends React.Component<
|
|
634
606
|
? minDate.isAfter(startDate)
|
635
607
|
? minDate
|
636
608
|
: startDate
|
637
|
-
:
|
609
|
+
: undefined;
|
638
610
|
|
639
611
|
if (minDate && currentDate.isBefore(minDate, precision)) {
|
640
612
|
return false;
|
@@ -712,7 +684,7 @@ export class DateRangePicker extends React.Component<
|
|
712
684
|
<Calendar
|
713
685
|
className={`${ns}DateRangePicker-start`}
|
714
686
|
value={startDate}
|
715
|
-
onChange={this.
|
687
|
+
onChange={this.handleSelectChange}
|
716
688
|
requiredConfirm={false}
|
717
689
|
dateFormat={dateFormat}
|
718
690
|
inputFormat={inputFormat}
|
@@ -729,7 +701,7 @@ export class DateRangePicker extends React.Component<
|
|
729
701
|
<Calendar
|
730
702
|
className={`${ns}DateRangePicker-end`}
|
731
703
|
value={endDate}
|
732
|
-
onChange={this.
|
704
|
+
onChange={this.handleSelectChange}
|
733
705
|
requiredConfirm={false}
|
734
706
|
dateFormat={dateFormat}
|
735
707
|
inputFormat={inputFormat}
|
package/src/components/PopUp.tsx
CHANGED
@@ -113,11 +113,12 @@ export class PopUp extends React.PureComponent<PopUpPorps> {
|
|
113
113
|
{!showConfirm && showClose ? (
|
114
114
|
<div className={cx(`${ns}PopUp-closeWrap`)}>
|
115
115
|
{header}
|
116
|
-
<
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
<span className={cx(`PopUp-closeBox`)} onClick={onHide}>
|
117
|
+
<Icon
|
118
|
+
icon="close"
|
119
|
+
className={cx('icon', `${ns}PopUp-close`)}
|
120
|
+
/>
|
121
|
+
</span>
|
121
122
|
</div>
|
122
123
|
) : null}
|
123
124
|
{showConfirm && (
|
package/src/components/Range.tsx
CHANGED
@@ -19,13 +19,19 @@ import {
|
|
19
19
|
MultipleValue,
|
20
20
|
Value,
|
21
21
|
FormatValue,
|
22
|
-
MarksType,
|
23
22
|
RangeItemProps
|
24
23
|
} from '../renderers/Form/InputRange';
|
25
24
|
import {stripNumber} from '../utils/tpl-builtin';
|
26
25
|
import {findDOMNode} from 'react-dom';
|
27
26
|
import {Icon} from './icons';
|
28
27
|
|
28
|
+
type MarksType = {
|
29
|
+
[index: number | string]: Record<
|
30
|
+
number,
|
31
|
+
React.ReactNode | {style?: React.CSSProperties; label?: string}
|
32
|
+
>;
|
33
|
+
};
|
34
|
+
|
29
35
|
interface HandleItemState {
|
30
36
|
isDrag: boolean;
|
31
37
|
labelActive: boolean;
|