@sooloer/pages 0.0.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.
Files changed (176) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/button-group/demo/authcode.d.ts +3 -0
  4. package/dist/button-group/demo/authcode.js +78 -0
  5. package/dist/button-group/demo/basic.d.ts +3 -0
  6. package/dist/button-group/demo/basic.js +67 -0
  7. package/dist/button-group/demo/custom.d.ts +3 -0
  8. package/dist/button-group/demo/custom.js +50 -0
  9. package/dist/button-group/demo/link.d.ts +3 -0
  10. package/dist/button-group/demo/link.js +65 -0
  11. package/dist/button-group/index.d.ts +4 -0
  12. package/dist/button-group/index.js +59 -0
  13. package/dist/button-group/style.d.ts +5 -0
  14. package/dist/button-group/style.js +11 -0
  15. package/dist/button-group/typing.d.ts +35 -0
  16. package/dist/button-group/typing.js +1 -0
  17. package/dist/filter/components/checkbox/index.d.ts +3 -0
  18. package/dist/filter/components/checkbox/index.js +32 -0
  19. package/dist/filter/components/ellipsis-text/index.d.ts +6 -0
  20. package/dist/filter/components/ellipsis-text/index.js +78 -0
  21. package/dist/filter/components/field/index.d.ts +7 -0
  22. package/dist/filter/components/field/index.js +143 -0
  23. package/dist/filter/components/input-range/index.d.ts +4 -0
  24. package/dist/filter/components/input-range/index.js +44 -0
  25. package/dist/filter/components/input-range/type.d.ts +22 -0
  26. package/dist/filter/components/input-range/type.js +1 -0
  27. package/dist/filter/components/text-area/index.d.ts +3 -0
  28. package/dist/filter/components/text-area/index.js +72 -0
  29. package/dist/filter/components/text-area/index.less +0 -0
  30. package/dist/filter/demo/basic.d.ts +3 -0
  31. package/dist/filter/demo/basic.js +35 -0
  32. package/dist/filter/demo/change-label-width.d.ts +3 -0
  33. package/dist/filter/demo/change-label-width.js +59 -0
  34. package/dist/filter/demo/checkbox.d.ts +3 -0
  35. package/dist/filter/demo/checkbox.js +69 -0
  36. package/dist/filter/demo/col-span.d.ts +3 -0
  37. package/dist/filter/demo/col-span.js +52 -0
  38. package/dist/filter/demo/custom.d.ts +3 -0
  39. package/dist/filter/demo/custom.js +53 -0
  40. package/dist/filter/demo/datePicker.d.ts +3 -0
  41. package/dist/filter/demo/datePicker.js +72 -0
  42. package/dist/filter/demo/ellipsis.d.ts +3 -0
  43. package/dist/filter/demo/ellipsis.js +58 -0
  44. package/dist/filter/demo/expand.d.ts +3 -0
  45. package/dist/filter/demo/expand.js +79 -0
  46. package/dist/filter/demo/form-controlled.d.ts +3 -0
  47. package/dist/filter/demo/form-controlled.js +63 -0
  48. package/dist/filter/demo/grid-columns.d.ts +3 -0
  49. package/dist/filter/demo/grid-columns.js +59 -0
  50. package/dist/filter/demo/hide-action.d.ts +3 -0
  51. package/dist/filter/demo/hide-action.js +41 -0
  52. package/dist/filter/demo/initial-value.d.ts +3 -0
  53. package/dist/filter/demo/initial-value.js +56 -0
  54. package/dist/filter/demo/input-range.d.ts +3 -0
  55. package/dist/filter/demo/input-range.js +24 -0
  56. package/dist/filter/demo/mask.d.ts +3 -0
  57. package/dist/filter/demo/mask.js +77 -0
  58. package/dist/filter/demo/radio.d.ts +3 -0
  59. package/dist/filter/demo/radio.js +69 -0
  60. package/dist/filter/demo/rangePicker.d.ts +3 -0
  61. package/dist/filter/demo/rangePicker.js +80 -0
  62. package/dist/filter/demo/required.d.ts +3 -0
  63. package/dist/filter/demo/required.js +36 -0
  64. package/dist/filter/demo/search-advanced.d.ts +3 -0
  65. package/dist/filter/demo/search-advanced.js +45 -0
  66. package/dist/filter/demo/search.d.ts +3 -0
  67. package/dist/filter/demo/search.js +45 -0
  68. package/dist/filter/demo/set-field.d.ts +3 -0
  69. package/dist/filter/demo/set-field.js +64 -0
  70. package/dist/filter/demo/textarea.d.ts +3 -0
  71. package/dist/filter/demo/textarea.js +42 -0
  72. package/dist/filter/demo/tooltip.d.ts +3 -0
  73. package/dist/filter/demo/tooltip.js +36 -0
  74. package/dist/filter/index.d.ts +5 -0
  75. package/dist/filter/index.js +406 -0
  76. package/dist/filter/index.less +84 -0
  77. package/dist/filter/typing.d.ts +148 -0
  78. package/dist/filter/typing.js +1 -0
  79. package/dist/footer/demo/basic.d.ts +3 -0
  80. package/dist/footer/demo/basic.js +44 -0
  81. package/dist/footer/demo/right-render.d.ts +3 -0
  82. package/dist/footer/demo/right-render.js +8 -0
  83. package/dist/footer/index.d.ts +6 -0
  84. package/dist/footer/index.js +26 -0
  85. package/dist/footer/index.less +11 -0
  86. package/dist/footer/typing.d.ts +17 -0
  87. package/dist/footer/typing.js +1 -0
  88. package/dist/index.d.ts +17 -0
  89. package/dist/index.js +9 -0
  90. package/dist/page/demo/basic.d.ts +3 -0
  91. package/dist/page/demo/basic.js +215 -0
  92. package/dist/page/demo/data.d.ts +16 -0
  93. package/dist/page/demo/data.js +121 -0
  94. package/dist/page/demo/renderTable.d.ts +3 -0
  95. package/dist/page/demo/renderTable.js +209 -0
  96. package/dist/page/demo/selection.d.ts +3 -0
  97. package/dist/page/demo/selection.js +229 -0
  98. package/dist/page/index.d.ts +5 -0
  99. package/dist/page/index.js +120 -0
  100. package/dist/page/index.less +35 -0
  101. package/dist/page/typing.d.ts +68 -0
  102. package/dist/page/typing.js +1 -0
  103. package/dist/search-condition/demo/basic.d.ts +3 -0
  104. package/dist/search-condition/demo/basic.js +35 -0
  105. package/dist/search-condition/demo/custom.d.ts +3 -0
  106. package/dist/search-condition/demo/custom.js +35 -0
  107. package/dist/search-condition/demo/ellipsis.d.ts +3 -0
  108. package/dist/search-condition/demo/ellipsis.js +30 -0
  109. package/dist/search-condition/demo/expand.d.ts +3 -0
  110. package/dist/search-condition/demo/expand.js +46 -0
  111. package/dist/search-condition/demo/removeable.d.ts +3 -0
  112. package/dist/search-condition/demo/removeable.js +39 -0
  113. package/dist/search-condition/index.d.ts +5 -0
  114. package/dist/search-condition/index.js +226 -0
  115. package/dist/search-condition/index.less +65 -0
  116. package/dist/search-condition/typing.d.ts +39 -0
  117. package/dist/search-condition/typing.js +1 -0
  118. package/dist/tab/demo/basic.d.ts +3 -0
  119. package/dist/tab/demo/basic.js +36 -0
  120. package/dist/tab/demo/count.d.ts +3 -0
  121. package/dist/tab/demo/count.js +63 -0
  122. package/dist/tab/demo/extra.d.ts +3 -0
  123. package/dist/tab/demo/extra.js +70 -0
  124. package/dist/tab/demo/icon.d.ts +3 -0
  125. package/dist/tab/demo/icon.js +36 -0
  126. package/dist/tab/demo/overflowCount.d.ts +3 -0
  127. package/dist/tab/demo/overflowCount.js +50 -0
  128. package/dist/tab/demo/settingRef.d.ts +3 -0
  129. package/dist/tab/demo/settingRef.js +77 -0
  130. package/dist/tab/demo/slide.d.ts +3 -0
  131. package/dist/tab/demo/slide.js +98 -0
  132. package/dist/tab/index.d.ts +5 -0
  133. package/dist/tab/index.js +51 -0
  134. package/dist/tab/index.less +11 -0
  135. package/dist/tab/typing.d.ts +51 -0
  136. package/dist/tab/typing.js +1 -0
  137. package/dist/table/demo/basic.d.ts +3 -0
  138. package/dist/table/demo/basic.js +65 -0
  139. package/dist/table/demo/checkbox.d.ts +3 -0
  140. package/dist/table/demo/checkbox.js +75 -0
  141. package/dist/table/demo/data.d.ts +16 -0
  142. package/dist/table/demo/data.js +120 -0
  143. package/dist/table/demo/global-checkbox.d.ts +3 -0
  144. package/dist/table/demo/global-checkbox.js +83 -0
  145. package/dist/table/demo/setting.d.ts +3 -0
  146. package/dist/table/demo/setting.js +78 -0
  147. package/dist/table/index.d.ts +4 -0
  148. package/dist/table/index.js +173 -0
  149. package/dist/table/setting/components/height.d.ts +8 -0
  150. package/dist/table/setting/components/height.js +45 -0
  151. package/dist/table/setting/components/reload.d.ts +7 -0
  152. package/dist/table/setting/components/reload.js +19 -0
  153. package/dist/table/setting/components/sort-group.d.ts +10 -0
  154. package/dist/table/setting/components/sort-group.js +103 -0
  155. package/dist/table/setting/components/sort-item.d.ts +3 -0
  156. package/dist/table/setting/components/sort-item.js +20 -0
  157. package/dist/table/setting/components/sort.d.ts +9 -0
  158. package/dist/table/setting/components/sort.js +105 -0
  159. package/dist/table/setting/index.d.ts +18 -0
  160. package/dist/table/setting/index.js +41 -0
  161. package/dist/table/setting/index.less +33 -0
  162. package/dist/table/table/index.d.ts +5 -0
  163. package/dist/table/table/index.js +170 -0
  164. package/dist/table/table/index.less +35 -0
  165. package/dist/table/typing.d.ts +92 -0
  166. package/dist/table/typing.js +1 -0
  167. package/dist/title/demo/basic.d.ts +3 -0
  168. package/dist/title/demo/basic.js +35 -0
  169. package/dist/title/demo/custom.d.ts +3 -0
  170. package/dist/title/demo/custom.js +15 -0
  171. package/dist/title/index.d.ts +5 -0
  172. package/dist/title/index.js +32 -0
  173. package/dist/title/index.less +39 -0
  174. package/dist/title/typing.d.ts +22 -0
  175. package/dist/title/typing.js +10 -0
  176. package/package.json +86 -0
@@ -0,0 +1,406 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _excluded = ["fields", "maskable", "labelWidth", "resetText", "searchText", "resetButtonProps", "searchButtonProps", "initialValues", "gridColumns", "values", "wrappRef", "onReset", "onSearch", "onExpandChange", "onValuesChange"],
3
+ _excluded2 = ["disabled"];
4
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
9
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
14
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
15
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
17
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
18
+ import { DownOutlined } from '@ant-design/icons';
19
+ import { calculator, sum } from '@tmaito/utils';
20
+ import { Button, Col, Form, Row, Space, Tooltip } from 'antd';
21
+ import classnames from 'classnames';
22
+ import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
23
+ import AutoSize from 'react-virtualized-auto-sizer';
24
+ import Field from "./components/field";
25
+ import "./index.less";
26
+ var theme = {
27
+ button_group_space_size: 8
28
+ };
29
+ var Item = Form.Item;
30
+ var ProFilter = function ProFilter(props, ref) {
31
+ var _props$fields = props.fields,
32
+ fields = _props$fields === void 0 ? [] : _props$fields,
33
+ _props$maskable = props.maskable,
34
+ maskable = _props$maskable === void 0 ? true : _props$maskable,
35
+ _props$labelWidth = props.labelWidth,
36
+ labelWidth = _props$labelWidth === void 0 ? 98 : _props$labelWidth,
37
+ _props$resetText = props.resetText,
38
+ resetText = _props$resetText === void 0 ? '重置' : _props$resetText,
39
+ _props$searchText = props.searchText,
40
+ searchText = _props$searchText === void 0 ? '查询' : _props$searchText,
41
+ _props$resetButtonPro = props.resetButtonProps,
42
+ resetButtonProps = _props$resetButtonPro === void 0 ? {} : _props$resetButtonPro,
43
+ _props$searchButtonPr = props.searchButtonProps,
44
+ searchButtonProps = _props$searchButtonPr === void 0 ? {} : _props$searchButtonPr,
45
+ _props$initialValues = props.initialValues,
46
+ initialValues = _props$initialValues === void 0 ? {} : _props$initialValues,
47
+ gridColumns = props.gridColumns,
48
+ _props$values = props.values,
49
+ values = _props$values === void 0 ? {} : _props$values,
50
+ wrappRef = props.wrappRef,
51
+ onReset = props.onReset,
52
+ onSearch = props.onSearch,
53
+ onExpandChange = props.onExpandChange,
54
+ onValuesChange = props.onValuesChange,
55
+ args = _objectWithoutProperties(props, _excluded);
56
+ var normalFieldRef = useRef(null);
57
+ var _Form$useForm = Form.useForm(),
58
+ _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
59
+ form = _Form$useForm2[0];
60
+ var _useState = useState(0),
61
+ _useState2 = _slicedToArray(_useState, 2),
62
+ clientHeight = _useState2[0],
63
+ setClientHeight = _useState2[1];
64
+ var _useState3 = useState(false),
65
+ _useState4 = _slicedToArray(_useState3, 2),
66
+ isExpanded = _useState4[0],
67
+ setIsExpanded = _useState4[1];
68
+ // 筛选项展示列数
69
+ var _useState5 = useState(4),
70
+ _useState6 = _slicedToArray(_useState5, 2),
71
+ span = _useState6[0],
72
+ setSpan = _useState6[1];
73
+ useImperativeHandle(ref, function () {
74
+ return {
75
+ form: form
76
+ };
77
+ });
78
+
79
+ // 计算需默认展示字段
80
+ var _useMemo = useMemo(function () {
81
+ var fixeds = [];
82
+ var mores = [];
83
+ fields.forEach(function (item) {
84
+ if (item !== null && item !== void 0 && item.collapsed) {
85
+ mores.push(item);
86
+ } else {
87
+ fixeds.push(item);
88
+ }
89
+ });
90
+ var firstRowFixed = [];
91
+ var otherRowFixed = [];
92
+ fixeds.reduce(function (total, item) {
93
+ var _item$colSpan = item.colSpan,
94
+ colSpan = _item$colSpan === void 0 ? 1 : _item$colSpan;
95
+ var val = colSpan + total;
96
+ if (val < span) {
97
+ firstRowFixed.push(item);
98
+ } else {
99
+ otherRowFixed.push(item);
100
+ }
101
+ return val;
102
+ }, 0);
103
+ var moreFixedFields = [];
104
+ var moreFields = [];
105
+ var otherRowFixedSpan = sum(otherRowFixed, 'colSpan', 1);
106
+ var remainder = span - otherRowFixedSpan % span;
107
+ mores.reduce(function (total, item) {
108
+ var _item$colSpan2 = item.colSpan,
109
+ colSpan = _item$colSpan2 === void 0 ? 1 : _item$colSpan2;
110
+ var val = colSpan + total;
111
+ if (val <= remainder && remainder < span) {
112
+ moreFixedFields.push(item);
113
+ } else {
114
+ moreFields.push(item);
115
+ }
116
+ return val;
117
+ }, 0);
118
+ return {
119
+ hasMoreFields: mores.length > 0,
120
+ moreFields: [].concat(moreFields),
121
+ moreFixedFields: [].concat(moreFixedFields),
122
+ fixedFirstRowFields: [].concat(firstRowFixed),
123
+ fixedOtherFields: [].concat(otherRowFixed)
124
+ };
125
+ }, [fields, span]),
126
+ moreFields = _useMemo.moreFields,
127
+ hasMoreFields = _useMemo.hasMoreFields,
128
+ moreFixedFields = _useMemo.moreFixedFields,
129
+ fixedFirstRowFields = _useMemo.fixedFirstRowFields,
130
+ fixedOtherFields = _useMemo.fixedOtherFields;
131
+
132
+ // 重置表单字段值
133
+ // 需对 values 字段做判断,如果传入该值,则触发更新,如果无该字段,则仅需内部控制表单字段
134
+ var resetFieldsValue = useMemo(function () {
135
+ if (props.hasOwnProperty('values')) {
136
+ return {
137
+ fields: (fields || []).map(function (item) {
138
+ return {
139
+ name: [item.name],
140
+ value: values[item.name]
141
+ };
142
+ })
143
+ };
144
+ }
145
+ return {};
146
+ }, [props, values, fields]);
147
+ var hasEmpty = function hasEmpty(value) {
148
+ return value === undefined || value === null;
149
+ };
150
+
151
+ // 通过类型判断字段值是否为空
152
+ // 'input' | 'select' | 'checkbox' | 'radio' | 'range' | 'digitRange' | 'date' | 'dateRange' | 'textarea'
153
+ var isEmptyField = function isEmptyField(value, fields) {
154
+ var _fields$type = fields.type,
155
+ type = _fields$type === void 0 ? 'input' : _fields$type;
156
+ if (['range', 'digitRange'].includes(type)) {
157
+ if (Array.isArray(value)) {
158
+ return hasEmpty(value[0]) && hasEmpty(value[1]);
159
+ }
160
+ return value === undefined;
161
+ }
162
+ return hasEmpty(value);
163
+ };
164
+ var handleIsExpanded = function handleIsExpanded(closeable) {
165
+ setIsExpanded(closeable);
166
+ onExpandChange === null || onExpandChange === void 0 || onExpandChange(closeable);
167
+ if (maskable && wrappRef !== null && wrappRef !== void 0 && wrappRef.current) {
168
+ wrappRef.current.style.position = closeable ? 'relative' : 'initial';
169
+ }
170
+ };
171
+
172
+ // 处理表单结果,input 类型表单结果需进行 - 首尾空格处理
173
+ var trimFieldsValue = function trimFieldsValue(val) {
174
+ var _loop = function _loop(key) {
175
+ var _ref = fields.find(function (item) {
176
+ return item.name === key;
177
+ }) || {},
178
+ _ref$type = _ref.type,
179
+ type = _ref$type === void 0 ? 'input' : _ref$type;
180
+ if (type === 'input') {
181
+ var _val$key;
182
+ val[key] = (_val$key = val[key]) === null || _val$key === void 0 ? void 0 : _val$key.trim();
183
+ }
184
+ };
185
+ for (var key in val) {
186
+ _loop(key);
187
+ }
188
+ return val;
189
+ };
190
+ var handleSearch = function handleSearch(values) {
191
+ onSearch === null || onSearch === void 0 || onSearch(trimFieldsValue(values));
192
+ handleIsExpanded(false);
193
+ };
194
+ var handleReset = function handleReset() {
195
+ form.resetFields();
196
+ handleIsExpanded(false);
197
+ onReset === null || onReset === void 0 || onReset(initialValues);
198
+ };
199
+ var handleValuesChange = function handleValuesChange(changedValues, allValues) {
200
+ if (normalFieldRef !== null && normalFieldRef !== void 0 && normalFieldRef.current) {
201
+ setTimeout(function () {
202
+ var _normalFieldRef$curre;
203
+ // @ts-ignore
204
+ setClientHeight(normalFieldRef === null || normalFieldRef === void 0 || (_normalFieldRef$curre = normalFieldRef.current) === null || _normalFieldRef$curre === void 0 ? void 0 : _normalFieldRef$curre.clientHeight);
205
+ }, 200);
206
+ }
207
+ onValuesChange === null || onValuesChange === void 0 || onValuesChange(trimFieldsValue(changedValues), trimFieldsValue(allValues));
208
+ };
209
+ var calcFieldSpan = function calcFieldSpan(field) {
210
+ var _field$colSpan = field.colSpan,
211
+ colSpan = _field$colSpan === void 0 ? 1 : _field$colSpan;
212
+ return "".concat(calculator.times(colSpan, 100, calculator.divide(1, span)), "%");
213
+ };
214
+
215
+ // 计算当前容器下可展示筛选项列数
216
+ var handleResize = function handleResize(props) {
217
+ var width = props.width;
218
+ var size = 3;
219
+ if (width < 1024) {
220
+ size = 3;
221
+ } else if (width < 1664) {
222
+ size = 4;
223
+ } else {
224
+ size = 5;
225
+ }
226
+ setSpan(gridColumns !== null && gridColumns !== void 0 ? gridColumns : size);
227
+ };
228
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", _extends({
229
+ className: "sooloer-filter"
230
+ }, args, {
231
+ style: {
232
+ zIndex: maskable && isExpanded ? 1 : 0
233
+ }
234
+ }), /*#__PURE__*/React.createElement(AutoSize, {
235
+ onResize: handleResize
236
+ }, function (props) {
237
+ return /*#__PURE__*/React.createElement("div", {
238
+ style: _objectSpread(_objectSpread({}, props), {}, {
239
+ height: 0,
240
+ visibility: 'hidden'
241
+ })
242
+ });
243
+ }), /*#__PURE__*/React.createElement(Form, _extends({
244
+ form: form
245
+ }, resetFieldsValue, {
246
+ onFinish: handleSearch,
247
+ initialValues: initialValues,
248
+ onValuesChange: handleValuesChange
249
+ }), /*#__PURE__*/React.createElement("div", {
250
+ className: classnames('sooloer-filter-container', {
251
+ 'is-hidden': !isExpanded
252
+ })
253
+ }, /*#__PURE__*/React.createElement("div", {
254
+ ref: normalFieldRef,
255
+ style: {
256
+ padding: '4px 0'
257
+ }
258
+ }, /*#__PURE__*/React.createElement(Row, {
259
+ gutter: 8
260
+ }, fixedFirstRowFields.map(function (item) {
261
+ return /*#__PURE__*/React.createElement(Col, {
262
+ key: item.name,
263
+ flex: calcFieldSpan(item),
264
+ style: {
265
+ maxWidth: calcFieldSpan(item)
266
+ }
267
+ }, /*#__PURE__*/React.createElement(Field, _extends({}, item, {
268
+ labelWidth: labelWidth
269
+ })));
270
+ }), /*#__PURE__*/React.createElement(Col, {
271
+ flex: "auto"
272
+ }, /*#__PURE__*/React.createElement(Item, {
273
+ colon: false,
274
+ shouldUpdate: true,
275
+ labelCol: {
276
+ flex: "".concat(labelWidth, "px")
277
+ },
278
+ className: "sooloer-filter-field-item"
279
+ }, function (_ref2) {
280
+ var getFieldsValue = _ref2.getFieldsValue;
281
+ // 收集所有必填项字段
282
+ var requiredFields = fields.filter(function (item) {
283
+ return item.hasOwnProperty('required') ? item.required : false;
284
+ });
285
+ var fieldsObj = {};
286
+ var fieldsName = [];
287
+ requiredFields.forEach(function (item) {
288
+ // @ts-ignore
289
+ fieldsObj[item.name] = item;
290
+ // @ts-ignore
291
+ fieldsName.push(item.name);
292
+ });
293
+ // const fieldsObj = Object.fromEntries(
294
+ // requiredFields.map((item) => [item.name, item])
295
+ // );
296
+ // 必填项是否未设值
297
+ var title = ''; // 必填提示文案
298
+ if (requiredFields.length) {
299
+ var _values = getFieldsValue(fieldsName);
300
+ // 未设值的字段
301
+ var unsetFields = Object.keys(_values).filter(function (key) {
302
+ return isEmptyField(_values[key], fieldsObj[key]);
303
+ });
304
+ var fieldsLabel = unsetFields.map(function (key) {
305
+ return fieldsObj[key].label;
306
+ });
307
+ title = "".concat(fieldsLabel.join('、')).concat(fieldsLabel.length > 1 ? '等' : '');
308
+ }
309
+ var disabled = searchButtonProps.disabled,
310
+ buttonProps = _objectWithoutProperties(searchButtonProps, _excluded2);
311
+ return /*#__PURE__*/React.createElement(Row, {
312
+ gutter: 8,
313
+ justify: "space-between"
314
+ }, /*#__PURE__*/React.createElement(Col, {
315
+ flex: "none"
316
+ }, hasMoreFields && /*#__PURE__*/React.createElement(Button, {
317
+ type: "link",
318
+ className: classnames('btn-expanded', {
319
+ 'is-expanded': isExpanded
320
+ }),
321
+ onClick: function onClick() {
322
+ if (maskable) {
323
+ var _normalFieldRef$curre2;
324
+ // @ts-ignore
325
+ setClientHeight(normalFieldRef === null || normalFieldRef === void 0 || (_normalFieldRef$curre2 = normalFieldRef.current) === null || _normalFieldRef$curre2 === void 0 ? void 0 : _normalFieldRef$curre2.clientHeight);
326
+ }
327
+ setTimeout(function () {
328
+ handleIsExpanded(!isExpanded);
329
+ }, 200);
330
+ }
331
+ }, isExpanded ? '收起' : '更多', /*#__PURE__*/React.createElement(DownOutlined, null))), /*#__PURE__*/React.createElement(Col, {
332
+ flex: "none"
333
+ }, /*#__PURE__*/React.createElement(Space, {
334
+ size: theme === null || theme === void 0 ? void 0 : theme.button_group_space_size
335
+ }, /*#__PURE__*/React.createElement(Button, _extends({
336
+ onClick: handleReset
337
+ }, resetButtonProps), resetText), title ? /*#__PURE__*/React.createElement(Tooltip, {
338
+ title: "".concat(title, "\u5B57\u6BB5\u4E3A\u5FC5\u586B\u9879"),
339
+ className: "sooloer-filter-btn-tooltip"
340
+ }, /*#__PURE__*/React.createElement(Button, _extends({
341
+ type: "primary",
342
+ htmlType: "submit",
343
+ disabled: disabled || !!title
344
+ }, buttonProps), searchText)) : /*#__PURE__*/React.createElement(Button, _extends({
345
+ type: "primary",
346
+ htmlType: "submit",
347
+ disabled: disabled
348
+ }, buttonProps), searchText))));
349
+ }))), /*#__PURE__*/React.createElement(Row, {
350
+ gutter: 8
351
+ }, fixedOtherFields.map(function (item) {
352
+ return /*#__PURE__*/React.createElement(Col, {
353
+ key: item.name,
354
+ flex: calcFieldSpan(item),
355
+ style: {
356
+ maxWidth: calcFieldSpan(item)
357
+ }
358
+ }, /*#__PURE__*/React.createElement(Field, _extends({}, item, {
359
+ labelWidth: labelWidth
360
+ })));
361
+ }), moreFixedFields.map(function (item) {
362
+ return /*#__PURE__*/React.createElement(Col, {
363
+ className: classnames({
364
+ 'sooloer-filter-field-hidden': !isExpanded
365
+ }),
366
+ key: item.name,
367
+ flex: calcFieldSpan(item),
368
+ style: {
369
+ maxWidth: calcFieldSpan(item)
370
+ }
371
+ }, /*#__PURE__*/React.createElement(Field, _extends({}, item, {
372
+ labelWidth: labelWidth
373
+ })));
374
+ }))), /*#__PURE__*/React.createElement("div", {
375
+ className: classnames('sooloer-filter-field-more', {
376
+ 'is-mask': maskable,
377
+ 'is-hidden': !isExpanded
378
+ }),
379
+ style: isExpanded && maskable ? {
380
+ top: clientHeight
381
+ } : {}
382
+ }, /*#__PURE__*/React.createElement(Row, {
383
+ gutter: 8
384
+ }, moreFields.map(function (item) {
385
+ return /*#__PURE__*/React.createElement(Col, {
386
+ key: item.name,
387
+ flex: calcFieldSpan(item),
388
+ style: {
389
+ maxWidth: calcFieldSpan(item)
390
+ }
391
+ }, /*#__PURE__*/React.createElement(Field, _extends({}, item, {
392
+ labelWidth: labelWidth
393
+ })));
394
+ })))))), maskable && (wrappRef === null || wrappRef === void 0 ? void 0 : wrappRef.current) && /*#__PURE__*/React.createElement("div", {
395
+ onClick: function onClick() {
396
+ console.log(1111);
397
+ handleIsExpanded(false);
398
+ },
399
+ className: classnames('sooloer-filter-mask', {
400
+ 'is-hidden': !isExpanded
401
+ })
402
+ }));
403
+ };
404
+
405
+ // @ts-ignore
406
+ export default /*#__PURE__*/forwardRef(ProFilter);
@@ -0,0 +1,84 @@
1
+ .sooloer-filter {
2
+ position: relative;
3
+ padding: 0 12px;
4
+
5
+ .btn-expanded {
6
+ .anticon-down {
7
+ margin-left: 4px;
8
+ }
9
+ &.is-expanded {
10
+ .anticon-down {
11
+ transform: translateY(-2px) rotate(-180deg);
12
+ }
13
+ }
14
+ }
15
+ .sooloer-filter-container {
16
+ position: relative;
17
+ transition: all 0.2s cubic-bezier(0.9, 0, 0.3, 0.7);
18
+ }
19
+ .sooloer-filter-field-item {
20
+ margin: 8px 0;
21
+ }
22
+
23
+ .sooloer-filter-field-more {
24
+ margin-right: -12px;
25
+ margin-left: -12px;
26
+ padding: 0 12px 6px;
27
+ overflow-x: hidden;
28
+ overflow-y: auto;
29
+ transform-origin: top;
30
+ transition: all 0.2s cubic-bezier(0.9, 0, 0.3, 0.7);
31
+ &.is-mask {
32
+ position: absolute;
33
+ right: 0;
34
+ left: 0;
35
+ z-index: 9;
36
+ max-height: 240px;
37
+ background-color: #fff;
38
+ box-shadow: 0 6px 6px -6px rgba(0, 0, 0, 0.1);
39
+ }
40
+ &.is-hidden {
41
+ max-height: 0;
42
+ transform: scaleY(0);
43
+ }
44
+ }
45
+ .sooloer-filter-field-fixed {
46
+ position: relative;
47
+ z-index: 1;
48
+ background-color: #fff;
49
+ }
50
+ .sooloer-filter-field-expand {
51
+ position: absolute;
52
+ z-index: 1;
53
+ width: 100%;
54
+ max-height: 240px;
55
+ overflow-x: hidden;
56
+ overflow-y: auto;
57
+ background: #fff;
58
+ box-shadow: 0 8px 8px -8px rgba(0, 0, 0, 0.2);
59
+ opacity: 1;
60
+ &.is-hidden {
61
+ height: 0;
62
+ opacity: 0;
63
+ }
64
+ }
65
+ .sooloer-filter-field-hidden {
66
+ display: none;
67
+ }
68
+
69
+ .sooloer-filter-btn-tooltip {
70
+ width: 100%;
71
+ }
72
+ &-mask {
73
+ position: absolute;
74
+ top: 0;
75
+ right: 0;
76
+ bottom: 0;
77
+ left: 0;
78
+ z-index: 0;
79
+ background-color: rgba(0, 0, 0, 0.45);
80
+ &.is-hidden {
81
+ display: none;
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,148 @@
1
+ import React from 'react';
2
+ export type InternalNamePath = (string | number)[];
3
+ export type NamePath = string | number | InternalNamePath;
4
+ export interface Meta {
5
+ name: InternalNamePath;
6
+ }
7
+ export interface InternalFieldData extends Meta {
8
+ value: any;
9
+ }
10
+ export interface FieldData extends Partial<Omit<InternalFieldData, 'name'>> {
11
+ name: NamePath;
12
+ }
13
+ export interface Callbacks<Values = any> {
14
+ onSearch?: (values: Values) => void;
15
+ onReset?: (values: Values) => void;
16
+ onExpandChange?: (isMore: boolean) => void;
17
+ onValuesChange?: (changedFields: Record<string, unknown>, allFields: Record<string, unknown>) => void;
18
+ }
19
+ export interface OptionProps {
20
+ value?: string | number;
21
+ label?: string | React.ReactNode;
22
+ }
23
+ /**
24
+ * 筛选项 props
25
+ */
26
+ export interface ProFieldProps {
27
+ /**
28
+ * @description 标签文本
29
+ */
30
+ label?: string;
31
+ /**
32
+ * @description 字段名,支持数组
33
+ */
34
+ name?: string;
35
+ /**
36
+ * @description 筛选项所占列数
37
+ * @default 1
38
+ */
39
+ colSpan?: number;
40
+ /**
41
+ * @description 筛选项类型,date、select、dateRange 等可通过扩展属性操作
42
+ * @default input
43
+ */
44
+ type?: string;
45
+ /**
46
+ * @description 自定义筛选项
47
+ */
48
+ fieldRender?: React.ReactNode;
49
+ /**
50
+ * @description 筛选项是否折叠
51
+ * @default false
52
+ */
53
+ collapsed?: boolean;
54
+ /**
55
+ * @description 必填样式设置
56
+ * @default false
57
+ */
58
+ required?: boolean;
59
+ /**
60
+ * @description 配置提示信息
61
+ */
62
+ tooltip?: string | React.ReactNode;
63
+ /**
64
+ * @description 组件相关扩展属性
65
+ */
66
+ widgetProps?: Record<string, any>;
67
+ [name: string]: any;
68
+ }
69
+ /**
70
+ * Filter 配置 props
71
+ */
72
+ export interface ProFilterProps<Values = any> {
73
+ /**
74
+ * @description 标签的宽度
75
+ * @default 98
76
+ */
77
+ labelWidth?: number;
78
+ /**
79
+ * @description 重置按钮的文本
80
+ * @default 重置
81
+ */
82
+ resetText?: string;
83
+ /**
84
+ * @description 可设置搜索栏栅格分数
85
+ * @default 系统根据容器自动计算
86
+ */
87
+ gridColumns?: number;
88
+ /**
89
+ * @description 查询按钮的文本
90
+ * @default 查询
91
+ */
92
+ searchText?: string;
93
+ /**
94
+ * @description 查询按钮 props
95
+ */
96
+ searchButtonProps?: any;
97
+ /**
98
+ * @description 是否展示查询、搜索按钮区域
99
+ * @default true
100
+ */
101
+ searchable?: boolean;
102
+ /**
103
+ * @description 重置按钮 props
104
+ */
105
+ resetButtonProps?: any;
106
+ /**
107
+ * @description 表单默认值,只有初始化以及重置时生效
108
+ */
109
+ initialValues?: Record<string, unknown>;
110
+ /**
111
+ * @description 通过状态管理控制表单字段
112
+ */
113
+ values?: Record<string, unknown>;
114
+ /**
115
+ * @description 更多筛选项时,展开形式, 默认遮盖,false 时占位
116
+ * @default true
117
+ */
118
+ maskable?: boolean;
119
+ /**
120
+ * @description 初始化
121
+ * @default []
122
+ */
123
+ fields?: ProFieldProps[];
124
+ /**
125
+ * @description 展开更多筛选项时,根据父节点展示蒙层
126
+ */
127
+ wrappRef?: any;
128
+ /**
129
+ * @description 获取Form实例
130
+ */
131
+ ref?: any;
132
+ /**
133
+ * @description 提交表单后回调事件
134
+ */
135
+ onSearch?: Callbacks<Values>['onSearch'];
136
+ /**
137
+ * @description 重置表后回调事件
138
+ */
139
+ onReset?: Callbacks<Values>['onReset'];
140
+ /**
141
+ * @description 字段更新时触发回调事件
142
+ */
143
+ onValuesChange?: Callbacks<Values>['onValuesChange'];
144
+ /**
145
+ * @description 筛选项更多展开 or 收缩时触发
146
+ */
147
+ onExpandChange?: Callbacks<Values>['onExpandChange'];
148
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,44 @@
1
+ import { ProFooter } from "../..";
2
+ import React from 'react';
3
+ export default (function () {
4
+ var buttonSource = [{
5
+ buttonProps: {
6
+ onClick: function onClick() {
7
+ console.log('上传');
8
+ }
9
+ },
10
+ fixed: true,
11
+ text: '上传'
12
+ }, {
13
+ buttonProps: {
14
+ type: 'primary',
15
+ onClick: function onClick() {
16
+ console.log('修改');
17
+ }
18
+ },
19
+ fixed: true,
20
+ text: '修改'
21
+ }, {
22
+ buttonProps: {
23
+ type: 'primary',
24
+ danger: true,
25
+ onClick: function onClick() {
26
+ console.log('删除');
27
+ }
28
+ },
29
+ fixed: true,
30
+ text: '删除'
31
+ }];
32
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ProFooter, {
33
+ leftRender: /*#__PURE__*/React.createElement(React.Fragment, null, "leftRender"),
34
+ toolbars: {
35
+ buttons: buttonSource
36
+ }
37
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ProFooter, {
38
+ leftRender: /*#__PURE__*/React.createElement(React.Fragment, null, "leftRender")
39
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ProFooter, {
40
+ toolbars: {
41
+ buttons: buttonSource
42
+ }
43
+ })));
44
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;