amis 1.3.5-beta.6 → 1.4.2-beta.1
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/README.md +1 -1
- package/lib/Schema.d.ts +17 -0
- package/lib/Schema.js.map +1 -1
- package/lib/components/Alert.js +3 -1
- package/lib/components/Alert.js.map +2 -2
- package/lib/components/Badge.d.ts +16 -3
- package/lib/components/Badge.js +53 -4
- package/lib/components/Badge.js.map +2 -2
- package/lib/components/Button.d.ts +24 -22
- package/lib/components/Button.js +13 -7
- package/lib/components/Button.js.map +2 -2
- package/lib/components/Checkbox.d.ts +1 -1
- package/lib/components/Checkbox.js +1 -1
- package/lib/components/Checkbox.js.map +2 -2
- package/lib/components/Collapse.js +1 -1
- package/lib/components/Collapse.js.map +2 -2
- package/lib/components/DatePicker.js +1 -1
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/DateRangePicker.js +1 -1
- package/lib/components/DateRangePicker.js.map +2 -2
- package/lib/components/Drawer.js +1 -1
- package/lib/components/Drawer.js.map +2 -2
- package/lib/components/InputBox.js +1 -1
- package/lib/components/InputBox.js.map +2 -2
- package/lib/components/Link.d.ts +91 -0
- package/lib/components/Link.js +44 -0
- package/lib/components/Link.js.map +13 -0
- package/lib/components/Modal.js +1 -1
- package/lib/components/Modal.js.map +2 -2
- package/lib/components/MonthRangePicker.js +1 -1
- package/lib/components/MonthRangePicker.js.map +2 -2
- package/lib/components/RichText.d.ts +6 -1
- package/lib/components/RichText.js +207 -8
- package/lib/components/RichText.js.map +2 -2
- package/lib/components/Select.d.ts +7 -0
- package/lib/components/Select.js +3 -0
- package/lib/components/Select.js.map +2 -2
- package/lib/components/SparkLine.d.ts +85 -84
- package/lib/components/SparkLine.js +2 -2
- package/lib/components/SparkLine.js.map +2 -2
- package/lib/components/Steps.d.ts +3 -3
- package/lib/components/Steps.js.map +1 -1
- package/lib/components/Toast.js +2 -2
- package/lib/components/Toast.js.map +2 -2
- package/lib/components/Tree.js +5 -3
- package/lib/components/Tree.js.map +2 -2
- package/lib/components/WithRemoteConfig.d.ts +8 -0
- package/lib/components/WithRemoteConfig.js +28 -2
- package/lib/components/WithRemoteConfig.js.map +2 -2
- package/lib/components/calendar/DaysView.js +2 -2
- package/lib/components/calendar/DaysView.js.map +2 -2
- package/lib/components/condition-builder/Field.js +0 -1
- package/lib/components/condition-builder/Field.js.map +2 -2
- package/lib/components/condition-builder/Value.js +2 -1
- package/lib/components/condition-builder/Value.js.map +2 -2
- package/lib/components/condition-builder/types.d.ts +5 -0
- package/lib/components/condition-builder/types.js.map +1 -1
- package/lib/components/icons.js +14 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/factory.d.ts +5 -1
- package/lib/factory.js +9 -4
- package/lib/factory.js.map +2 -2
- package/lib/helper.css.map +1 -1
- package/lib/icons/clock.js +10 -0
- package/lib/icons/loading-outline.js +7 -0
- package/lib/icons/status-close.js +11 -0
- package/lib/icons/status-fail.js +11 -0
- package/lib/icons/status-info.js +10 -0
- package/lib/icons/status-success.js +11 -0
- package/lib/icons/status-warning.js +10 -0
- package/lib/index.js +1 -1
- package/lib/locale/de-DE.js +3 -0
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +4 -1
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +5 -2
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.d.ts +16 -1
- package/lib/renderers/Action.js +5 -5
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/CRUD.d.ts +2 -2
- package/lib/renderers/CRUD.js +32 -26
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Collapse.d.ts +1 -1
- package/lib/renderers/Collapse.js +7 -3
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/Dialog.d.ts +0 -252
- package/lib/renderers/Dialog.js +1 -4
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/Drawer.js +0 -3
- package/lib/renderers/Drawer.js.map +2 -2
- package/lib/renderers/DropDownButton.d.ts +13 -1
- package/lib/renderers/DropDownButton.js +9 -5
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Form/ButtonGroupSelect.js +3 -0
- package/lib/renderers/Form/ButtonGroupSelect.js.map +2 -2
- package/lib/renderers/Form/Checkbox.d.ts +5 -0
- package/lib/renderers/Form/Checkbox.js +4 -0
- package/lib/renderers/Form/Checkbox.js.map +2 -2
- package/lib/renderers/Form/Combo.js +2 -2
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/DiffEditor.d.ts +0 -2
- package/lib/renderers/Form/Editor.d.ts +0 -2
- package/lib/renderers/Form/Editor.js +1 -1
- package/lib/renderers/Form/Editor.js.map +2 -2
- package/lib/renderers/Form/InputExcel.d.ts +5 -0
- package/lib/renderers/Form/InputExcel.js +24 -3
- package/lib/renderers/Form/InputExcel.js.map +2 -2
- package/lib/renderers/Form/InputFile.js +2 -2
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputImage.d.ts +8 -0
- package/lib/renderers/Form/InputImage.js +7 -4
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/InputTable.d.ts +23 -5
- package/lib/renderers/Form/InputTable.js +32 -3
- package/lib/renderers/Form/InputTable.js.map +2 -2
- package/lib/renderers/Form/Options.js +6 -3
- package/lib/renderers/Form/Options.js.map +2 -2
- package/lib/renderers/Form/Picker.js +2 -2
- package/lib/renderers/Form/Picker.js.map +2 -2
- package/lib/renderers/Form/wrapControl.js +2 -2
- package/lib/renderers/Form/wrapControl.js.map +2 -2
- package/lib/renderers/IFrame.js +2 -2
- package/lib/renderers/IFrame.js.map +2 -2
- package/lib/renderers/Image.d.ts +1 -0
- package/lib/renderers/Image.js +15 -1
- package/lib/renderers/Image.js.map +2 -2
- package/lib/renderers/Json.js +5 -1
- package/lib/renderers/Json.js.map +2 -2
- package/lib/renderers/Link.d.ts +16 -3
- package/lib/renderers/Link.js +16 -13
- package/lib/renderers/Link.js.map +2 -2
- package/lib/renderers/Log.d.ts +2 -2
- package/lib/renderers/Log.js +7 -1
- package/lib/renderers/Log.js.map +2 -2
- package/lib/renderers/Nav.d.ts +81 -25
- package/lib/renderers/Nav.js +272 -29
- package/lib/renderers/Nav.js.map +2 -2
- package/lib/renderers/Page.js +4 -1
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/Service.d.ts +10 -1
- package/lib/renderers/Service.js +85 -3
- package/lib/renderers/Service.js.map +2 -2
- package/lib/renderers/SparkLine.d.ts +4 -0
- package/lib/renderers/SparkLine.js.map +2 -2
- package/lib/renderers/Steps.d.ts +4 -4
- package/lib/renderers/Steps.js +5 -2
- package/lib/renderers/Steps.js.map +2 -2
- package/lib/renderers/Table/ColumnToggler.d.ts +113 -0
- package/lib/renderers/Table/ColumnToggler.js +216 -0
- package/lib/renderers/Table/ColumnToggler.js.map +13 -0
- package/lib/renderers/Table/ItemActionsWrapper.d.ts +11 -0
- package/lib/renderers/Table/ItemActionsWrapper.js +31 -0
- package/lib/renderers/Table/ItemActionsWrapper.js.map +13 -0
- package/lib/renderers/Table/TableBody.d.ts +5 -1
- package/lib/renderers/Table/TableBody.js +5 -1
- package/lib/renderers/Table/TableBody.js.map +2 -2
- package/lib/renderers/Table/TableCell.js +3 -1
- package/lib/renderers/Table/TableCell.js.map +2 -2
- package/lib/renderers/Table/TableContent.d.ts +1 -1
- package/lib/renderers/Table/TableContent.js +4 -0
- package/lib/renderers/Table/TableContent.js.map +2 -2
- package/lib/renderers/Table/index.d.ts +22 -4
- package/lib/renderers/Table/index.js +196 -81
- package/lib/renderers/Table/index.js.map +2 -2
- package/lib/store/app.d.ts +0 -1
- package/lib/store/combo.d.ts +0 -2
- package/lib/store/crud.d.ts +3 -3
- package/lib/store/crud.js +41 -36
- package/lib/store/crud.js.map +2 -2
- package/lib/store/form.d.ts +0 -1
- package/lib/store/modal.d.ts +1 -1
- package/lib/store/modal.js +4 -0
- package/lib/store/modal.js.map +2 -2
- package/lib/store/root.d.ts +0 -1
- package/lib/store/service.d.ts +0 -1
- package/lib/store/service.js +0 -13
- package/lib/store/service.js.map +2 -2
- package/lib/store/table.d.ts +258 -3
- package/lib/store/table.js +83 -7
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +941 -98
- package/lib/themes/ang.css +941 -98
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +941 -98
- package/lib/themes/antd.css +941 -98
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +1580 -411
- package/lib/themes/cxd.css +1580 -411
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +941 -98
- package/lib/themes/dark.css +941 -98
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +1580 -411
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.js +16 -4
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/attachmentAdpator.d.ts +7 -0
- package/lib/utils/attachmentAdpator.js +82 -0
- package/lib/utils/attachmentAdpator.js.map +13 -0
- package/lib/utils/handleAction.d.ts +7 -0
- package/lib/utils/handleAction.js +30 -0
- package/lib/utils/handleAction.js.map +13 -0
- package/lib/utils/helper.d.ts +1 -1
- package/lib/utils/helper.js +3 -3
- package/lib/utils/helper.js.map +2 -2
- package/lib/utils/tpl-builtin.d.ts +1 -1
- package/lib/utils/tpl-builtin.js +25 -15
- package/lib/utils/tpl-builtin.js.map +2 -2
- package/lib/utils/validations.js +62 -5
- package/lib/utils/validations.js.map +2 -2
- package/package.json +1 -2
- package/schema.json +633 -273
- package/scss/_mixins.scss +29 -0
- package/scss/_properties.scss +64 -13
- package/scss/_utilities.scss +4 -0
- package/scss/components/_badge.scss +67 -2
- package/scss/components/_button.scss +34 -3
- package/scss/components/_collapse.scss +26 -8
- package/scss/components/_column-toggler.scss +234 -0
- package/scss/components/_dropdown.scss +2 -1
- package/scss/components/_image-gallery.scss +1 -1
- package/scss/components/_images.scss +2 -1
- package/scss/components/_link.scss +6 -0
- package/scss/components/_markdown.scss +266 -0
- package/scss/components/_nav.scss +236 -154
- package/scss/components/_page.scss +5 -4
- package/scss/components/_progress.scss +2 -0
- package/scss/components/_spinner.scss +6 -2
- package/scss/components/_steps.scss +1 -1
- package/scss/components/_table.scss +25 -1
- package/scss/components/form/_color.scss +1 -0
- package/scss/components/form/_date-range.scss +2 -0
- package/scss/components/form/_date.scss +2 -0
- package/scss/components/form/_fieldset.scss +1 -2
- package/scss/components/form/_file.scss +5 -4
- package/scss/components/form/_group.scss +4 -0
- package/scss/components/form/_image.scss +7 -2
- package/scss/components/form/_list.scss +1 -0
- package/scss/components/form/_location.scss +1 -1
- package/scss/components/form/_text.scss +13 -0
- package/scss/components/form/_textarea.scss +10 -0
- package/scss/components/form/_transfer.scss +2 -0
- package/scss/themes/_common.scss +3 -0
- package/scss/themes/_cxd-colors.scss +56 -0
- package/scss/themes/_cxd-variables.scss +217 -92
- package/scss/themes/cxd.scss +366 -0
- package/sdk/ang-ie11.css +1192 -176
- package/sdk/ang.css +1175 -118
- package/sdk/antd-ie11.css +1177 -163
- package/sdk/antd.css +1175 -118
- package/sdk/charts.js +13 -13
- package/sdk/color-picker.js +67 -67
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +2538 -1222
- package/sdk/cxd.css +1825 -401
- package/sdk/dark-ie11.css +1192 -176
- package/sdk/dark.css +1175 -118
- package/sdk/exceljs.js +1 -1
- package/sdk/helper.css.map +1 -1
- package/sdk/ie11-patch.css +1 -0
- package/sdk/locale/de-DE.js +3 -0
- 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 -24
- package/sdk/rich-text.js +62 -64
- package/sdk/sdk-ie11.css +2538 -1222
- package/sdk/sdk.css +1825 -401
- package/sdk/sdk.js +1139 -1113
- 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 +18 -0
- package/src/components/Alert.tsx +3 -1
- package/src/components/Badge.tsx +124 -21
- package/src/components/Button.tsx +23 -7
- package/src/components/Checkbox.tsx +5 -2
- package/src/components/Collapse.tsx +14 -9
- package/src/components/DatePicker.tsx +1 -1
- package/src/components/DateRangePicker.tsx +23 -11
- package/src/components/Drawer.tsx +3 -2
- package/src/components/InputBox.tsx +1 -1
- package/src/components/Link.tsx +94 -0
- package/src/components/Modal.tsx +3 -2
- package/src/components/MonthRangePicker.tsx +10 -2
- package/src/components/RichText.tsx +244 -3
- package/src/components/Select.tsx +4 -0
- package/src/components/SparkLine.tsx +4 -1
- package/src/components/Steps.tsx +3 -3
- package/src/components/Toast.tsx +5 -5
- package/src/components/Tree.tsx +6 -8
- package/src/components/WithRemoteConfig.tsx +37 -2
- package/src/components/calendar/DaysView.tsx +2 -2
- package/src/components/condition-builder/Field.tsx +1 -2
- package/src/components/condition-builder/Value.tsx +3 -0
- package/src/components/condition-builder/types.ts +6 -0
- package/src/components/icons.tsx +15 -0
- package/src/factory.tsx +13 -3
- package/src/icons/clock.svg +1 -0
- package/src/icons/loading-outline.svg +4 -0
- package/src/icons/status-close.svg +10 -0
- package/src/icons/status-fail.svg +10 -0
- package/src/icons/status-info.svg +8 -0
- package/src/icons/status-success.svg +10 -0
- package/src/icons/status-warning.svg +8 -0
- package/src/locale/de-DE.ts +3 -0
- package/src/locale/en-US.ts +4 -1
- package/src/locale/zh-CN.ts +5 -2
- package/src/renderers/Action.tsx +71 -13
- package/src/renderers/CRUD.tsx +44 -59
- package/src/renderers/Collapse.tsx +6 -2
- package/src/renderers/Dialog.tsx +1 -5
- package/src/renderers/Drawer.tsx +0 -4
- package/src/renderers/DropDownButton.tsx +34 -12
- package/src/renderers/Form/ButtonGroupSelect.tsx +3 -0
- package/src/renderers/Form/Checkbox.tsx +8 -0
- package/src/renderers/Form/Combo.tsx +2 -3
- package/src/renderers/Form/Editor.tsx +19 -20
- package/src/renderers/Form/InputExcel.tsx +28 -3
- package/src/renderers/Form/InputFile.tsx +2 -1
- package/src/renderers/Form/InputImage.tsx +28 -10
- package/src/renderers/Form/InputTable.tsx +88 -9
- package/src/renderers/Form/Options.tsx +16 -5
- package/src/renderers/Form/Picker.tsx +3 -2
- package/src/renderers/Form/wrapControl.tsx +2 -2
- package/src/renderers/IFrame.tsx +2 -1
- package/src/renderers/Image.tsx +10 -0
- package/src/renderers/Json.tsx +10 -1
- package/src/renderers/Link.tsx +36 -11
- package/src/renderers/Log.tsx +16 -3
- package/src/renderers/Nav.tsx +340 -56
- package/src/renderers/Page.tsx +3 -1
- package/src/renderers/Service.tsx +101 -3
- package/src/renderers/SparkLine.tsx +5 -0
- package/src/renderers/Steps.tsx +12 -9
- package/src/renderers/Table/ColumnToggler.tsx +544 -0
- package/src/renderers/Table/ItemActionsWrapper.tsx +44 -0
- package/src/renderers/Table/TableBody.tsx +3 -2
- package/src/renderers/Table/TableCell.tsx +16 -1
- package/src/renderers/Table/TableContent.tsx +3 -1
- package/src/renderers/Table/index.tsx +240 -60
- package/src/store/crud.ts +34 -38
- package/src/store/modal.ts +4 -0
- package/src/store/service.ts +0 -19
- package/src/store/table.ts +103 -4
- package/src/utils/api.ts +24 -4
- package/src/utils/attachmentAdpator.ts +90 -0
- package/src/utils/handleAction.ts +41 -0
- package/src/utils/helper.ts +4 -3
- package/src/utils/tpl-builtin.ts +48 -17
- package/src/utils/validations.ts +80 -12
package/src/store/table.ts
CHANGED
@@ -45,6 +45,7 @@ export const Column = types
|
|
45
45
|
checkdisable: false,
|
46
46
|
isPrimary: false,
|
47
47
|
searchable: types.maybe(types.frozen()),
|
48
|
+
enableSearch: true,
|
48
49
|
sortable: false,
|
49
50
|
filterable: types.optional(types.frozen(), undefined),
|
50
51
|
fixed: '',
|
@@ -66,8 +67,13 @@ export const Column = types
|
|
66
67
|
|
67
68
|
table.persistSaveToggledColumns();
|
68
69
|
},
|
70
|
+
|
69
71
|
setToggled(value: boolean) {
|
70
72
|
self.toggled = value;
|
73
|
+
},
|
74
|
+
|
75
|
+
setEnableSearch(value: boolean) {
|
76
|
+
self.enableSearch = value;
|
71
77
|
}
|
72
78
|
}));
|
73
79
|
|
@@ -292,6 +298,10 @@ export const TableStore = iRendererStore
|
|
292
298
|
keepItemSelectionOnPageChange: false
|
293
299
|
})
|
294
300
|
.views(self => {
|
301
|
+
function getColumnsExceptBuiltinTypes() {
|
302
|
+
return self.columns.filter(item => !/^__/.test(item.type));
|
303
|
+
}
|
304
|
+
|
295
305
|
function getForms() {
|
296
306
|
return self.formsRef.map(item => ({
|
297
307
|
store: getStoreById(item.id) as IFormStore,
|
@@ -414,8 +424,8 @@ export const TableStore = iRendererStore
|
|
414
424
|
return getMovedRows().length;
|
415
425
|
}
|
416
426
|
|
417
|
-
function
|
418
|
-
return self.rows.
|
427
|
+
function getHovedRow(): IRow | undefined {
|
428
|
+
return flattenTree<IRow>(self.rows).find((item: IRow) => item.isHover);
|
419
429
|
}
|
420
430
|
|
421
431
|
function getUnSelectedRows() {
|
@@ -499,11 +509,46 @@ export const TableStore = iRendererStore
|
|
499
509
|
});
|
500
510
|
}
|
501
511
|
|
512
|
+
function getFirstToggledColumnIndex() {
|
513
|
+
const column = self.columns.find(
|
514
|
+
column => !/^__/.test(column.type) && column.toggled
|
515
|
+
);
|
516
|
+
|
517
|
+
return column == null ? null : column.index;
|
518
|
+
}
|
519
|
+
|
520
|
+
function getSearchableColumns() {
|
521
|
+
return self.columns.filter(
|
522
|
+
column => column.searchable && isObject(column.searchable)
|
523
|
+
);
|
524
|
+
}
|
525
|
+
|
526
|
+
function getActivedSearchableColumns() {
|
527
|
+
return self.columns.filter(
|
528
|
+
column =>
|
529
|
+
column.searchable &&
|
530
|
+
isObject(column.searchable) &&
|
531
|
+
column.enableSearch
|
532
|
+
);
|
533
|
+
}
|
534
|
+
|
502
535
|
return {
|
536
|
+
get columnsData() {
|
537
|
+
return getColumnsExceptBuiltinTypes();
|
538
|
+
},
|
539
|
+
|
503
540
|
get forms() {
|
504
541
|
return getForms();
|
505
542
|
},
|
506
543
|
|
544
|
+
get searchableColumns() {
|
545
|
+
return getSearchableColumns();
|
546
|
+
},
|
547
|
+
|
548
|
+
get activedSearchableColumns() {
|
549
|
+
return getSearchableColumns().filter(column => column.enableSearch);
|
550
|
+
},
|
551
|
+
|
507
552
|
get filteredColumns() {
|
508
553
|
return getFilteredColumns();
|
509
554
|
},
|
@@ -583,8 +628,8 @@ export const TableStore = iRendererStore
|
|
583
628
|
return getMovedRows();
|
584
629
|
},
|
585
630
|
|
586
|
-
get
|
587
|
-
return
|
631
|
+
get hoverRow() {
|
632
|
+
return getHovedRow();
|
588
633
|
},
|
589
634
|
|
590
635
|
get disabledHeadCheckbox() {
|
@@ -598,6 +643,10 @@ export const TableStore = iRendererStore
|
|
598
643
|
return maxLength === selectedLength;
|
599
644
|
},
|
600
645
|
|
646
|
+
get firstToggledColumnIndex() {
|
647
|
+
return getFirstToggledColumnIndex();
|
648
|
+
},
|
649
|
+
|
601
650
|
getData,
|
602
651
|
|
603
652
|
get columnGroup() {
|
@@ -984,11 +1033,16 @@ export const TableStore = iRendererStore
|
|
984
1033
|
}
|
985
1034
|
}
|
986
1035
|
|
1036
|
+
// 记录最近一次点击的多选框,主要用于 shift 多选时判断上一个选的是什么
|
1037
|
+
let lastCheckedRow: any = null;
|
1038
|
+
|
987
1039
|
function toggle(row: IRow) {
|
988
1040
|
if (!row.checkable) {
|
989
1041
|
return;
|
990
1042
|
}
|
991
1043
|
|
1044
|
+
lastCheckedRow = row;
|
1045
|
+
|
992
1046
|
const idx = self.selectedRows.indexOf(row);
|
993
1047
|
|
994
1048
|
if (self.multiple) {
|
@@ -1000,6 +1054,50 @@ export const TableStore = iRendererStore
|
|
1000
1054
|
}
|
1001
1055
|
}
|
1002
1056
|
|
1057
|
+
// 按住 shift 的时候点击选项
|
1058
|
+
function toggleShift(row: IRow) {
|
1059
|
+
// 如果是同一个或非 multiple 模式下就和不用 shift 一样
|
1060
|
+
if (!lastCheckedRow || row === lastCheckedRow || !self.multiple) {
|
1061
|
+
toggle(row);
|
1062
|
+
return;
|
1063
|
+
}
|
1064
|
+
|
1065
|
+
const maxLength = self.maxKeepItemSelectionLength;
|
1066
|
+
const checkableRows = self.checkableRows;
|
1067
|
+
const lastCheckedRowIndex = checkableRows.findIndex(
|
1068
|
+
row => row === lastCheckedRow
|
1069
|
+
);
|
1070
|
+
const rowIndex = checkableRows.findIndex(rowItem => row === rowItem);
|
1071
|
+
const minIndex =
|
1072
|
+
lastCheckedRowIndex > rowIndex ? rowIndex : lastCheckedRowIndex;
|
1073
|
+
const maxIndex =
|
1074
|
+
lastCheckedRowIndex > rowIndex ? lastCheckedRowIndex : rowIndex;
|
1075
|
+
|
1076
|
+
const rows = checkableRows.slice(minIndex, maxIndex);
|
1077
|
+
rows.push(row); // 将当前行也加入进行判断
|
1078
|
+
for (const rowItem of rows) {
|
1079
|
+
const idx = self.selectedRows.indexOf(rowItem);
|
1080
|
+
if (idx === -1) {
|
1081
|
+
// 如果上一个是选中状态,则将之间的所有 check 都变成可选
|
1082
|
+
if (lastCheckedRow.checked) {
|
1083
|
+
if (maxLength) {
|
1084
|
+
if (self.selectedRows.length < maxLength) {
|
1085
|
+
self.selectedRows.push(rowItem);
|
1086
|
+
}
|
1087
|
+
} else {
|
1088
|
+
self.selectedRows.push(rowItem);
|
1089
|
+
}
|
1090
|
+
}
|
1091
|
+
} else {
|
1092
|
+
if (!lastCheckedRow.checked) {
|
1093
|
+
self.selectedRows.splice(idx, 1);
|
1094
|
+
}
|
1095
|
+
}
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
lastCheckedRow = row;
|
1099
|
+
}
|
1100
|
+
|
1003
1101
|
function updateCheckDisable() {
|
1004
1102
|
if (!self.data) {
|
1005
1103
|
return;
|
@@ -1134,6 +1232,7 @@ export const TableStore = iRendererStore
|
|
1134
1232
|
updateSelected,
|
1135
1233
|
toggleAll,
|
1136
1234
|
toggle,
|
1235
|
+
toggleShift,
|
1137
1236
|
toggleExpandAll,
|
1138
1237
|
toggleExpanded,
|
1139
1238
|
collapseAllAtDepth,
|
package/src/utils/api.ts
CHANGED
@@ -22,6 +22,8 @@ interface ApiCacheConfig extends ApiObject {
|
|
22
22
|
|
23
23
|
const apiCaches: Array<ApiCacheConfig> = [];
|
24
24
|
|
25
|
+
const isIE = !!(document as any).documentMode;
|
26
|
+
|
25
27
|
export function normalizeApi(
|
26
28
|
api: Api,
|
27
29
|
defaultMethod: string = 'get'
|
@@ -80,7 +82,9 @@ export function buildApi(
|
|
80
82
|
);
|
81
83
|
api.url =
|
82
84
|
tokenize(api.url.substring(0, idx + 1), data, '| url_encode') +
|
83
|
-
qsstringify(
|
85
|
+
qsstringify(
|
86
|
+
(api.query = dataMapping(params, data, undefined, api.convertKeyToPath))
|
87
|
+
) +
|
84
88
|
(~hashIdx ? api.url.substring(hashIdx) : '');
|
85
89
|
} else {
|
86
90
|
api.url = tokenize(api.url, data, '| url_encode');
|
@@ -91,7 +95,12 @@ export function buildApi(
|
|
91
95
|
}
|
92
96
|
|
93
97
|
if (api.data) {
|
94
|
-
api.body = api.data = dataMapping(
|
98
|
+
api.body = api.data = dataMapping(
|
99
|
+
api.data,
|
100
|
+
data,
|
101
|
+
undefined,
|
102
|
+
api.convertKeyToPath
|
103
|
+
);
|
95
104
|
} else if (api.method === 'post' || api.method === 'put') {
|
96
105
|
api.body = api.data = cloneObject(data);
|
97
106
|
}
|
@@ -136,7 +145,7 @@ export function buildApi(
|
|
136
145
|
}
|
137
146
|
|
138
147
|
if (api.headers) {
|
139
|
-
api.headers = dataMapping(api.headers, data);
|
148
|
+
api.headers = dataMapping(api.headers, data, undefined, false);
|
140
149
|
}
|
141
150
|
|
142
151
|
if (api.requestAdaptor && typeof api.requestAdaptor === 'string') {
|
@@ -246,7 +255,9 @@ export function responseAdaptor(ret: fetcherResult, api: ApiObject) {
|
|
246
255
|
items: payload.data
|
247
256
|
}
|
248
257
|
: payload.data) || {}
|
249
|
-
)
|
258
|
+
),
|
259
|
+
undefined,
|
260
|
+
api.convertKeyToPath
|
250
261
|
);
|
251
262
|
}
|
252
263
|
|
@@ -293,6 +304,15 @@ export function wrapFetcher(
|
|
293
304
|
api
|
294
305
|
);
|
295
306
|
}
|
307
|
+
// IE 下 get 请求会被缓存,所以自动加个时间戳
|
308
|
+
if (isIE && api && api.method?.toLocaleLowerCase() === 'get') {
|
309
|
+
const timeStamp = `_t=${Date.now()}`;
|
310
|
+
if (api.url.indexOf('?') === -1) {
|
311
|
+
api.url = api.url + `?${timeStamp}`;
|
312
|
+
} else {
|
313
|
+
api.url = api.url + `&${timeStamp}`;
|
314
|
+
}
|
315
|
+
}
|
296
316
|
return wrapAdaptor(fn(api), api);
|
297
317
|
};
|
298
318
|
}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
/**
|
2
|
+
* 处理接口返回附件的情况,好几个地方用
|
3
|
+
* @param response
|
4
|
+
* @param __
|
5
|
+
* @returns
|
6
|
+
*/
|
7
|
+
|
8
|
+
export default function attachmentAdpator(response: any, __: Function) {
|
9
|
+
if (response && response.headers && response.headers['content-disposition']) {
|
10
|
+
const disposition = response.headers['content-disposition'];
|
11
|
+
let filename = '';
|
12
|
+
|
13
|
+
if (disposition && disposition.indexOf('attachment') !== -1) {
|
14
|
+
// disposition 有可能是 attachment; filename="??.xlsx"; filename*=UTF-8''%E4%B8%AD%E6%96%87.xlsx
|
15
|
+
// 这种情况下最后一个才是正确的文件名
|
16
|
+
let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)$/;
|
17
|
+
|
18
|
+
let matches = disposition.match(filenameRegex);
|
19
|
+
if (matches && matches.length) {
|
20
|
+
filename = matches[1].replace(`UTF-8''`, '').replace(/['"]/g, '');
|
21
|
+
}
|
22
|
+
|
23
|
+
// 很可能是中文被 url-encode 了
|
24
|
+
if (filename && filename.replace(/[^%]/g, '').length > 2) {
|
25
|
+
filename = decodeURIComponent(filename);
|
26
|
+
}
|
27
|
+
|
28
|
+
let type = response.headers['content-type'];
|
29
|
+
let blob =
|
30
|
+
response.data.toString() === '[object Blob]'
|
31
|
+
? response.data
|
32
|
+
: new Blob([response.data], {type: type});
|
33
|
+
if (typeof (window.navigator as any).msSaveBlob !== 'undefined') {
|
34
|
+
// IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
|
35
|
+
(window.navigator as any).msSaveBlob(blob, filename);
|
36
|
+
} else {
|
37
|
+
let URL = window.URL || (window as any).webkitURL;
|
38
|
+
let downloadUrl = URL.createObjectURL(blob);
|
39
|
+
if (filename) {
|
40
|
+
// use HTML5 a[download] attribute to specify filename
|
41
|
+
let a = document.createElement('a');
|
42
|
+
// safari doesn't support this yet
|
43
|
+
if (typeof a.download === 'undefined') {
|
44
|
+
(window as any).location = downloadUrl;
|
45
|
+
} else {
|
46
|
+
a.href = downloadUrl;
|
47
|
+
a.download = filename;
|
48
|
+
document.body.appendChild(a);
|
49
|
+
a.click();
|
50
|
+
}
|
51
|
+
} else {
|
52
|
+
(window as any).location = downloadUrl;
|
53
|
+
}
|
54
|
+
setTimeout(function () {
|
55
|
+
URL.revokeObjectURL(downloadUrl);
|
56
|
+
}, 100); // cleanup
|
57
|
+
}
|
58
|
+
|
59
|
+
return {
|
60
|
+
...response,
|
61
|
+
data: {
|
62
|
+
status: 0,
|
63
|
+
msg: __('Embed.downloading')
|
64
|
+
}
|
65
|
+
};
|
66
|
+
}
|
67
|
+
} else if (response.data.toString() === '[object Blob]') {
|
68
|
+
return new Promise((resolve, reject) => {
|
69
|
+
let reader = new FileReader();
|
70
|
+
reader.addEventListener('loadend', e => {
|
71
|
+
const text = reader.result as string;
|
72
|
+
|
73
|
+
try {
|
74
|
+
resolve({
|
75
|
+
...response,
|
76
|
+
data: {
|
77
|
+
...JSON.parse(text)
|
78
|
+
}
|
79
|
+
});
|
80
|
+
} catch (e) {
|
81
|
+
reject(e);
|
82
|
+
}
|
83
|
+
});
|
84
|
+
|
85
|
+
reader.readAsText(response.data);
|
86
|
+
});
|
87
|
+
}
|
88
|
+
|
89
|
+
return response;
|
90
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/**
|
2
|
+
* 后续好多地方可能都要支持 action,所以提取公共功能
|
3
|
+
*/
|
4
|
+
|
5
|
+
import {RendererProps} from '../factory';
|
6
|
+
import {ActionSchema, AjaxActionSchema} from '../renderers/Action';
|
7
|
+
import {normalizeApi, str2function} from './api';
|
8
|
+
|
9
|
+
export default function handleAction(
|
10
|
+
e: React.MouseEvent<any>,
|
11
|
+
action: ActionSchema,
|
12
|
+
props: RendererProps,
|
13
|
+
data?: any
|
14
|
+
) {
|
15
|
+
// https://reactjs.org/docs/legacy-event-pooling.html
|
16
|
+
e.persist();
|
17
|
+
|
18
|
+
const onAction = props.onAction;
|
19
|
+
let onClick: any = action.onClick;
|
20
|
+
|
21
|
+
if (typeof onClick === 'string') {
|
22
|
+
onClick = str2function(onClick, 'event', 'props');
|
23
|
+
}
|
24
|
+
const result: any = onClick && onClick(e, props);
|
25
|
+
|
26
|
+
if (e.isDefaultPrevented() || result === false || !onAction) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
e.preventDefault();
|
31
|
+
|
32
|
+
// download 是一种 ajax 的简写
|
33
|
+
if (action.actionType === 'download') {
|
34
|
+
action.actionType = 'ajax';
|
35
|
+
const api = normalizeApi((action as AjaxActionSchema).api);
|
36
|
+
api.responseType = 'blob';
|
37
|
+
(action as AjaxActionSchema).api = api;
|
38
|
+
}
|
39
|
+
|
40
|
+
onAction(e, action, data || props.data);
|
41
|
+
}
|
package/src/utils/helper.ts
CHANGED
@@ -181,7 +181,8 @@ export function getVariable(
|
|
181
181
|
export function setVariable(
|
182
182
|
data: {[propName: string]: any},
|
183
183
|
key: string,
|
184
|
-
value: any
|
184
|
+
value: any,
|
185
|
+
convertKeyToPath?: boolean
|
185
186
|
) {
|
186
187
|
data = data || {};
|
187
188
|
|
@@ -190,7 +191,7 @@ export function setVariable(
|
|
190
191
|
return;
|
191
192
|
}
|
192
193
|
|
193
|
-
const parts = keyToPath(key);
|
194
|
+
const parts = convertKeyToPath !== false ? keyToPath(key) : [key];
|
194
195
|
const last = parts.pop() as string;
|
195
196
|
|
196
197
|
while (parts.length) {
|
@@ -1617,7 +1618,7 @@ export function detectPropValueChanged<
|
|
1617
1618
|
|
1618
1619
|
// 去掉字符串中的 html 标签,不完全准确但效率比较高
|
1619
1620
|
export function removeHTMLTag(str: string) {
|
1620
|
-
return str.replace(/<\/?[^>]+(>|$)/g, '');
|
1621
|
+
return typeof str === 'string' ? str.replace(/<\/?[^>]+(>|$)/g, '') : str;
|
1621
1622
|
}
|
1622
1623
|
|
1623
1624
|
/**
|
package/src/utils/tpl-builtin.ts
CHANGED
@@ -383,10 +383,26 @@ export const filters: {
|
|
383
383
|
first: input => input && input[0],
|
384
384
|
nth: (input, nth = 0) => input && input[nth],
|
385
385
|
last: input => input && (input.length ? input[input.length - 1] : null),
|
386
|
-
minus
|
387
|
-
stripNumber(
|
388
|
-
|
389
|
-
|
386
|
+
minus(input, step = 1) {
|
387
|
+
return stripNumber(
|
388
|
+
(Number(input) || 0) - Number(getStrOrVariable(step, this))
|
389
|
+
);
|
390
|
+
},
|
391
|
+
plus(input, step = 1) {
|
392
|
+
return stripNumber(
|
393
|
+
(Number(input) || 0) + Number(getStrOrVariable(step, this))
|
394
|
+
);
|
395
|
+
},
|
396
|
+
times(input, step = 1) {
|
397
|
+
return stripNumber(
|
398
|
+
(Number(input) || 0) * Number(getStrOrVariable(step, this))
|
399
|
+
);
|
400
|
+
},
|
401
|
+
division(input, step = 1) {
|
402
|
+
return stripNumber(
|
403
|
+
(Number(input) || 0) / Number(getStrOrVariable(step, this))
|
404
|
+
);
|
405
|
+
},
|
390
406
|
count: (input: any) =>
|
391
407
|
Array.isArray(input) || typeof input === 'string' ? input.length : 0,
|
392
408
|
sum: (input, field) => {
|
@@ -866,10 +882,13 @@ export function resolveMapping(
|
|
866
882
|
export function dataMapping(
|
867
883
|
to: any,
|
868
884
|
from: PlainObject = {},
|
869
|
-
ignoreFunction: boolean | ((key: string, value: any) => boolean) = false
|
885
|
+
ignoreFunction: boolean | ((key: string, value: any) => boolean) = false,
|
886
|
+
convertKeyToPath?: boolean
|
870
887
|
): any {
|
871
888
|
if (Array.isArray(to)) {
|
872
|
-
return to.map(item =>
|
889
|
+
return to.map(item =>
|
890
|
+
dataMapping(item, from, ignoreFunction, convertKeyToPath)
|
891
|
+
);
|
873
892
|
} else if (typeof to === 'string') {
|
874
893
|
return resolveMapping(to, from);
|
875
894
|
} else if (!isPlainObject(to)) {
|
@@ -883,7 +902,7 @@ export function dataMapping(
|
|
883
902
|
|
884
903
|
if (typeof ignoreFunction === 'function' && ignoreFunction(key, value)) {
|
885
904
|
// 如果被ignore,不做数据映射处理。
|
886
|
-
setVariable(ret, key, value);
|
905
|
+
setVariable(ret, key, value, convertKeyToPath);
|
887
906
|
} else if (key === '&' && value === '$$') {
|
888
907
|
ret = {
|
889
908
|
...ret,
|
@@ -900,7 +919,8 @@ export function dataMapping(
|
|
900
919
|
dataMapping(
|
901
920
|
value[keys[0]],
|
902
921
|
createObject(from, raw),
|
903
|
-
ignoreFunction
|
922
|
+
ignoreFunction,
|
923
|
+
convertKeyToPath
|
904
924
|
)
|
905
925
|
)
|
906
926
|
: resolveMapping(value, from);
|
@@ -919,10 +939,10 @@ export function dataMapping(
|
|
919
939
|
};
|
920
940
|
}
|
921
941
|
} else if (value === '$$') {
|
922
|
-
setVariable(ret, key, from);
|
942
|
+
setVariable(ret, key, from, convertKeyToPath);
|
923
943
|
} else if (value && value[0] === '$') {
|
924
944
|
const v = resolveMapping(value, from);
|
925
|
-
setVariable(ret, key, v);
|
945
|
+
setVariable(ret, key, v, convertKeyToPath);
|
926
946
|
|
927
947
|
if (v === '__undefined') {
|
928
948
|
deleteVariable(ret, key);
|
@@ -952,26 +972,37 @@ export function dataMapping(
|
|
952
972
|
const mapping = value[keys[0]];
|
953
973
|
|
954
974
|
(ret as PlainObject)[key] = arr.map((raw: object) =>
|
955
|
-
dataMapping(
|
975
|
+
dataMapping(
|
976
|
+
mapping,
|
977
|
+
createObject(from, raw),
|
978
|
+
ignoreFunction,
|
979
|
+
convertKeyToPath
|
980
|
+
)
|
956
981
|
);
|
957
982
|
} else if (isPlainObject(value)) {
|
958
|
-
setVariable(
|
983
|
+
setVariable(
|
984
|
+
ret,
|
985
|
+
key,
|
986
|
+
dataMapping(value, from, ignoreFunction, convertKeyToPath),
|
987
|
+
convertKeyToPath
|
988
|
+
);
|
959
989
|
} else if (Array.isArray(value)) {
|
960
990
|
setVariable(
|
961
991
|
ret,
|
962
992
|
key,
|
963
993
|
value.map((value: any) =>
|
964
994
|
isPlainObject(value)
|
965
|
-
? dataMapping(value, from, ignoreFunction)
|
995
|
+
? dataMapping(value, from, ignoreFunction, convertKeyToPath)
|
966
996
|
: resolveMapping(value, from)
|
967
|
-
)
|
997
|
+
),
|
998
|
+
convertKeyToPath
|
968
999
|
);
|
969
1000
|
} else if (typeof value == 'string' && ~value.indexOf('$')) {
|
970
|
-
setVariable(ret, key, resolveMapping(value, from));
|
1001
|
+
setVariable(ret, key, resolveMapping(value, from), convertKeyToPath);
|
971
1002
|
} else if (typeof value === 'function' && ignoreFunction !== true) {
|
972
|
-
setVariable(ret, key, value(from));
|
1003
|
+
setVariable(ret, key, value(from), convertKeyToPath);
|
973
1004
|
} else {
|
974
|
-
setVariable(ret, key, value);
|
1005
|
+
setVariable(ret, key, value, convertKeyToPath);
|
975
1006
|
|
976
1007
|
if (value === '__undefined') {
|
977
1008
|
deleteVariable(ret, key);
|
package/src/utils/validations.ts
CHANGED
@@ -14,6 +14,79 @@ const makeRegexp = (reg: string | RegExp) => {
|
|
14
14
|
|
15
15
|
return /^$/;
|
16
16
|
};
|
17
|
+
import memoize from 'lodash/memoize';
|
18
|
+
import isPlainObject from 'lodash/isPlainObject';
|
19
|
+
|
20
|
+
const makeUrlRegexp = memoize(function (options: any) {
|
21
|
+
options = {
|
22
|
+
schemes: ['http', 'https', 'ftp', 'sftp'],
|
23
|
+
allowLocal: true,
|
24
|
+
allowDataUrl: false,
|
25
|
+
...(isPlainObject(options) ? options : {})
|
26
|
+
};
|
27
|
+
|
28
|
+
// https://github.com/ansman/validate.js/blob/master/validate.js#L1098-L1164
|
29
|
+
let {schemes, allowLocal, allowDataUrl} = options;
|
30
|
+
|
31
|
+
if (!Array.isArray(schemes)) {
|
32
|
+
schemes = ['http', 'https', 'ftp', 'sftp'];
|
33
|
+
}
|
34
|
+
|
35
|
+
let regex =
|
36
|
+
'^' +
|
37
|
+
// protocol identifier
|
38
|
+
'(?:(?:' +
|
39
|
+
schemes.join('|') +
|
40
|
+
')://)' +
|
41
|
+
// user:pass authentication
|
42
|
+
'(?:\\S+(?::\\S*)?@)?' +
|
43
|
+
'(?:';
|
44
|
+
|
45
|
+
var tld = '(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))';
|
46
|
+
|
47
|
+
if (allowLocal) {
|
48
|
+
tld += '?';
|
49
|
+
} else {
|
50
|
+
regex +=
|
51
|
+
// IP address exclusion
|
52
|
+
// private & local networks
|
53
|
+
'(?!(?:10|127)(?:\\.\\d{1,3}){3})' +
|
54
|
+
'(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})' +
|
55
|
+
'(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})';
|
56
|
+
}
|
57
|
+
|
58
|
+
regex +=
|
59
|
+
// IP address dotted notation octets
|
60
|
+
// excludes loopback network 0.0.0.0
|
61
|
+
// excludes reserved space >= 224.0.0.0
|
62
|
+
// excludes network & broacast addresses
|
63
|
+
// (first & last IP address of each class)
|
64
|
+
'(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' +
|
65
|
+
'(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' +
|
66
|
+
'(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' +
|
67
|
+
'|' +
|
68
|
+
// host name
|
69
|
+
'(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' +
|
70
|
+
// domain name
|
71
|
+
'(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' +
|
72
|
+
tld +
|
73
|
+
')' +
|
74
|
+
// port number
|
75
|
+
'(?::\\d{2,5})?' +
|
76
|
+
// resource path
|
77
|
+
'(?:[/?#]\\S*)?' +
|
78
|
+
'$';
|
79
|
+
|
80
|
+
if (allowDataUrl) {
|
81
|
+
// RFC 2397
|
82
|
+
var mediaType = '\\w+\\/[-+.\\w]+(?:;[\\w=]+)*';
|
83
|
+
var urlchar = "[A-Za-z0-9-_.!~\\*'();\\/?:@&=+$,%]*";
|
84
|
+
var dataurl = 'data:(?:' + mediaType + ')?(?:;base64)?,' + urlchar;
|
85
|
+
regex = '(?:' + regex + ')|(?:^' + dataurl + '$)';
|
86
|
+
}
|
87
|
+
|
88
|
+
return new RegExp(regex, 'i');
|
89
|
+
});
|
17
90
|
|
18
91
|
export interface ValidateFn {
|
19
92
|
(
|
@@ -55,12 +128,8 @@ export const validations: {
|
|
55
128
|
/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i
|
56
129
|
);
|
57
130
|
},
|
58
|
-
isUrl: function (values, value) {
|
59
|
-
return validations.matchRegexp(
|
60
|
-
values,
|
61
|
-
value,
|
62
|
-
/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
|
63
|
-
);
|
131
|
+
isUrl: function (values, value, options) {
|
132
|
+
return validations.matchRegexp(values, value, makeUrlRegexp(options));
|
64
133
|
},
|
65
134
|
isTrue: function (values, value) {
|
66
135
|
return value === true;
|
@@ -282,9 +351,8 @@ export function validate(
|
|
282
351
|
}
|
283
352
|
|
284
353
|
const fn = validations[ruleName];
|
285
|
-
const args = (
|
286
|
-
? rules[ruleName]
|
287
|
-
: [rules[ruleName]]
|
354
|
+
const args = (
|
355
|
+
Array.isArray(rules[ruleName]) ? rules[ruleName] : [rules[ruleName]]
|
288
356
|
).map((item: any) => {
|
289
357
|
if (typeof item === 'string' && isPureVariable(item)) {
|
290
358
|
return resolveVariableAndFilter(item, values, '|raw');
|
@@ -356,9 +424,9 @@ const splitValidations = function (str: string): Array<string> {
|
|
356
424
|
.map(str => (/^__\d+$/.test(str) ? placeholder[str] : str.trim()));
|
357
425
|
};
|
358
426
|
|
359
|
-
export function str2rules(
|
360
|
-
|
361
|
-
|
427
|
+
export function str2rules(validations: string | {[propName: string]: any}): {
|
428
|
+
[propName: string]: any;
|
429
|
+
} {
|
362
430
|
if (typeof validations === 'string') {
|
363
431
|
return validations
|
364
432
|
? splitValidations(validations).reduce(function (
|