iglooform 2.4.28 → 2.4.31

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.
@@ -118,8 +118,7 @@ var UploadPhoto = function UploadPhoto(props) {
118
118
 
119
119
  invariant(typeof props.handleUpload === 'function' || uploadApi, '"handleUpload" should be a function. Or uploadApi should be set at Form/FreeForm');
120
120
  invariant(!uploadApi || props.bizKey, '"bizKey" should be set if Upload is used with uploadApi');
121
- var _props$value = props.value,
122
- value = _props$value === void 0 ? [] : _props$value,
121
+ var value = props.value,
123
122
  limit = props.limit,
124
123
  limitErrorMessage = props.limitErrorMessage,
125
124
  descriptions = props.descriptions,
@@ -235,10 +234,10 @@ var UploadPhoto = function UploadPhoto(props) {
235
234
  };
236
235
 
237
236
  useEffect(function () {
238
- if (Array.isArray(value)) {
237
+ if (Array.isArray(value) && files.length === 0) {
239
238
  mapFilesFromValue(value);
240
239
  }
241
- }, []);
240
+ }, [value, files]);
242
241
  var uploadId = useMemo(function () {
243
242
  return "igloo-upload-photo-input-".concat(Math.random());
244
243
  }, []);
@@ -250,7 +249,7 @@ var UploadPhoto = function UploadPhoto(props) {
250
249
  URL.revokeObjectURL(dataUrl);
251
250
  });
252
251
  };
253
- }, []);
252
+ }, [files]);
254
253
  useEffect(function () {
255
254
  var removeLimitMsg = function removeLimitMsg(e) {
256
255
  if (DomRef.current && !DomRef.current.contains(e.target) && limitNumError.current) {
@@ -5,6 +5,7 @@ declare const CratetCheckBoxFilter: (props: {
5
5
  allSelected: any[];
6
6
  valueConfirm: any;
7
7
  chooseed?: string[];
8
+ onChange?: any;
8
9
  disabled?: any[];
9
10
  }) => JSX.Element;
10
11
  export default CratetCheckBoxFilter;
@@ -69,6 +69,7 @@ var CratetCheckBoxFilter = function CratetCheckBoxFilter(props) {
69
69
  _props$chooseed = props.chooseed,
70
70
  chooseed = _props$chooseed === void 0 ? [] : _props$chooseed,
71
71
  disabled = props.disabled,
72
+ _onChange = props.onChange,
72
73
  _props$valueConfirm = props.valueConfirm,
73
74
  valueConfirm = _props$valueConfirm === void 0 ? function () {} : _props$valueConfirm;
74
75
  var timeKey = new Date();
@@ -102,6 +103,7 @@ var CratetCheckBoxFilter = function CratetCheckBoxFilter(props) {
102
103
  }), allChoose ? (0, _jsxRuntime.jsx)("span", {
103
104
  className: "igloo-form-filter-drop-down-container-content-group-title-action",
104
105
  onClick: function onClick() {
106
+ typeof _onChange === 'function' && _onChange([]);
105
107
  valueConfirm({
106
108
  type: optionKey,
107
109
  value: []
@@ -117,6 +119,7 @@ var CratetCheckBoxFilter = function CratetCheckBoxFilter(props) {
117
119
  }) : (0, _jsxRuntime.jsx)("span", {
118
120
  className: "igloo-form-filter-drop-down-container-content-group-title-action",
119
121
  onClick: function onClick() {
122
+ typeof _onChange === 'function' && _onChange(allCanChoose);
120
123
  valueConfirm({
121
124
  type: optionKey,
122
125
  value: allCanChoose
@@ -136,7 +139,8 @@ var CratetCheckBoxFilter = function CratetCheckBoxFilter(props) {
136
139
  width: '100%'
137
140
  },
138
141
  onChange: function onChange(e) {
139
- return valueConfirm({
142
+ typeof _onChange === 'function' && _onChange(e);
143
+ valueConfirm({
140
144
  type: optionKey,
141
145
  value: e
142
146
  });
@@ -23,6 +23,7 @@ export interface IFrameConfig {
23
23
  canNotDelete?: boolean;
24
24
  tagTitle?: (value?: any) => string;
25
25
  render?: (value: any, onChange: any) => ReactNode;
26
+ onChange?: any;
26
27
  }
27
28
  export interface IFilterProps {
28
29
  initValue?: {
@@ -44,6 +45,8 @@ export interface IFilterProps {
44
45
  searchInputDefault?: string | number;
45
46
  searchWithFilter?: boolean;
46
47
  inputOnly?: boolean;
48
+ beforeOpenFilter?: any;
49
+ resetCallBack?: any;
47
50
  }
48
51
  declare const FilterComponent: (props: IFilterProps) => JSX.Element;
49
52
  export default FilterComponent;
@@ -389,7 +389,9 @@ var FilterComponent = function FilterComponent(props) {
389
389
  searchWithFilter = _props$searchWithFilt === void 0 ? false : _props$searchWithFilt,
390
390
  searchInputDefault = props.searchInputDefault,
391
391
  initValue = props.initValue,
392
- inputOnly = props.inputOnly;
392
+ inputOnly = props.inputOnly,
393
+ beforeOpenFilter = props.beforeOpenFilter,
394
+ resetCallBack = props.resetCallBack;
393
395
  var filterTitle = props.filterTitle,
394
396
  _props$filterItems = props.filterItems,
395
397
  filterItems = _props$filterItems === void 0 ? [] : _props$filterItems; // id controller
@@ -668,7 +670,8 @@ var FilterComponent = function FilterComponent(props) {
668
670
  format = _item$format2 === void 0 ? defaultFormat : _item$format2,
669
671
  dateRangeConfig = item.dateRangeConfig,
670
672
  render = item.render,
671
- tagTitle = item.tagTitle;
673
+ tagTitle = item.tagTitle,
674
+ onChangeProps = item.onChange;
672
675
 
673
676
  switch (type) {
674
677
  case 'customize':
@@ -704,7 +707,8 @@ var FilterComponent = function FilterComponent(props) {
704
707
  onFocus: invisibleRef.current,
705
708
  dateRangeConfig: dateRangeConfig,
706
709
  pickerOpenStatus: dataPickerOpenStatus[key],
707
- setPickerOpenStatus: setPickerOpenStatus
710
+ setPickerOpenStatus: setPickerOpenStatus,
711
+ onChange: onChangeProps
708
712
  }, key);
709
713
 
710
714
  case 'mult':
@@ -716,7 +720,8 @@ var FilterComponent = function FilterComponent(props) {
716
720
  allSelected: optionsAllSelected[key],
717
721
  chooseed: optionsChanged[key],
718
722
  disabled: disabled,
719
- valueConfirm: dispatchOptionsChange
723
+ valueConfirm: dispatchOptionsChange,
724
+ onChange: onChangeProps
720
725
  }, key);
721
726
 
722
727
  case 'single':
@@ -727,7 +732,8 @@ var FilterComponent = function FilterComponent(props) {
727
732
  optionKey: key,
728
733
  chooseed: optionsChanged[key],
729
734
  disabled: disabled,
730
- valueConfirm: dispatchOptionsChange
735
+ valueConfirm: dispatchOptionsChange,
736
+ onChange: onChangeProps
731
737
  }, key);
732
738
  }
733
739
  })]
@@ -738,6 +744,7 @@ var FilterComponent = function FilterComponent(props) {
738
744
  },
739
745
  children: [(0, _jsxRuntime.jsx)("span", {
740
746
  onClick: function onClick() {
747
+ typeof resetCallBack === 'function' && resetCallBack(_objectSpread({}, defaultOptions));
741
748
  setTimeout(function () {
742
749
  setTimeRangeType(-1);
743
750
  dispatchOptionsChange({
@@ -1077,6 +1084,11 @@ var FilterComponent = function FilterComponent(props) {
1077
1084
  visible: dropVisible,
1078
1085
  onVisibleChange: function onVisibleChange(visible) {
1079
1086
  setDropVisible(visible);
1087
+
1088
+ if (visible) {
1089
+ typeof beforeOpenFilter === 'function' && beforeOpenFilter(_objectSpread({}, confirmed));
1090
+ }
1091
+
1080
1092
  setTimeout(function () {
1081
1093
  if (dropVisible) {
1082
1094
  setTimeRangeType(confirmedTimeRange);
@@ -5,6 +5,7 @@ declare type IRadioBoxProps = {
5
5
  valueConfirm: any;
6
6
  chooseed?: string[];
7
7
  disabled?: any[];
8
+ onChange?: any;
8
9
  };
9
10
  declare const CreateRadioBoxFilter: (props: IRadioBoxProps) => JSX.Element;
10
11
  export default CreateRadioBoxFilter;
@@ -33,7 +33,8 @@ var CreateRadioBoxFilter = function CreateRadioBoxFilter(props) {
33
33
  configList = props.configList,
34
34
  disabled = props.disabled,
35
35
  valueConfirm = props.valueConfirm,
36
- chooseed = props.chooseed;
36
+ chooseed = props.chooseed,
37
+ _onChange = props.onChange;
37
38
  return (0, _jsxRuntime.jsxs)("div", {
38
39
  className: "igloo-form-filter-drop-down-container-content-group",
39
40
  children: [(0, _jsxRuntime.jsx)("div", {
@@ -45,7 +46,8 @@ var CreateRadioBoxFilter = function CreateRadioBoxFilter(props) {
45
46
  }), (0, _jsxRuntime.jsx)(_radio.default.Group, {
46
47
  value: chooseed,
47
48
  onChange: function onChange(e) {
48
- return valueConfirm({
49
+ typeof _onChange === 'function' && _onChange(e.target.value);
50
+ valueConfirm({
49
51
  type: optionKey,
50
52
  value: e.target.value
51
53
  });
@@ -12,6 +12,7 @@ declare const CreateRangePickerFilter: (props: {
12
12
  disabledDate?: any;
13
13
  setRangeType?: any;
14
14
  format?: string;
15
+ onChange?: any;
15
16
  tiemRange?: number;
16
17
  }) => JSX.Element;
17
18
  export default CreateRangePickerFilter;
@@ -65,6 +65,7 @@ var CreateRangePickerFilter = function CreateRangePickerFilter(props) {
65
65
  dateRangeConfig = _props$dateRangeConfi === void 0 ? {} : _props$dateRangeConfi,
66
66
  _props$pickerOpenStat = props.pickerOpenStatus,
67
67
  pickerOpenStatus = _props$pickerOpenStat === void 0 ? false : _props$pickerOpenStat,
68
+ onChange = props.onChange,
68
69
  setPickerOpenStatus = props.setPickerOpenStatus;
69
70
  var RangePicker = _datePicker.default.RangePicker;
70
71
 
@@ -104,6 +105,7 @@ var CreateRangePickerFilter = function CreateRangePickerFilter(props) {
104
105
  type: optionKey,
105
106
  value: [timeValueRef.current.startTime, timeValueRef.current.endTime]
106
107
  });
108
+ typeof onChange === 'function' && onChange([timeValueRef.current.startTime, timeValueRef.current.endTime]);
107
109
  setPickerOpenStatus({
108
110
  type: optionKey,
109
111
  value: false
@@ -267,11 +267,7 @@ var Element = function Element(_ref) {
267
267
  hideWhenEdit = elementProps.hideWhenEdit,
268
268
  otherElementProps = _objectWithoutProperties(elementProps, _excluded2);
269
269
 
270
- if (preview && hideWhenPreview) {
271
- return null;
272
- }
273
-
274
- return hideWhenEdit || !display ? null : (0, _jsxRuntime.jsx)(_col.default, _objectSpread(_objectSpread({}, restColProps), {}, {
270
+ var component = (0, _jsxRuntime.jsx)(_col.default, _objectSpread(_objectSpread({}, restColProps), {}, {
275
271
  className: "igloo-form-item",
276
272
  children: (0, _jsxRuntime.jsx)("div", {
277
273
  style: {
@@ -290,6 +286,13 @@ var Element = function Element(_ref) {
290
286
  }))
291
287
  })
292
288
  }));
289
+
290
+ if (preview) {
291
+ if (hideWhenPreview) return null;
292
+ return component;
293
+ }
294
+
295
+ return hideWhenEdit || !display ? null : component;
293
296
  }
294
297
 
295
298
  if (!display) return null;
package/lib/form/index.js CHANGED
@@ -81,7 +81,8 @@ var IglooForm = function IglooForm(props, ref) {
81
81
  } : _props$getScrollConta,
82
82
  _props$onFirstModifie = props.onFirstModified,
83
83
  onFirstModified = _props$onFirstModifie === void 0 ? function () {} : _props$onFirstModifie,
84
- uploadApi = props.uploadApi;
84
+ uploadApi = props.uploadApi,
85
+ selectDatasourceApi = props.selectDatasourceApi;
85
86
 
86
87
  var _Form$useForm = _form.default.useForm(),
87
88
  _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
@@ -260,7 +261,8 @@ var IglooForm = function IglooForm(props, ref) {
260
261
  showSubmitButton: showSubmitButton,
261
262
  getScrollContainer: getScrollContainer,
262
263
  registerDependencies: registerDependencies,
263
- uploadApi: uploadApi
264
+ uploadApi: uploadApi,
265
+ selectDatasourceApi: selectDatasourceApi
264
266
  }, locales),
265
267
  children: (0, _jsxRuntime.jsxs)(_form.default, {
266
268
  form: form,
@@ -16,5 +16,6 @@ declare const _default: React.Context<{
16
16
  getScrollContainer: () => HTMLElement | Window | null;
17
17
  registerDependencies: (name: FormItemName | FormItemName[], updater: Function) => void;
18
18
  uploadApi?: string | undefined;
19
+ selectDatasourceApi?: string | undefined;
19
20
  }>;
20
21
  export default _default;
@@ -225,7 +225,7 @@ var AddableSection = function AddableSection(props) {
225
225
  return children.map(function (c, index) {
226
226
  var _c$type;
227
227
 
228
- if (['Igloo_Free_Form_Item', 'Igloo_Free_Form_Section', 'Igloo_Free_Form_AddabledSection'].includes(c === null || c === void 0 ? void 0 : (_c$type = c.type) === null || _c$type === void 0 ? void 0 : _c$type.displayName)) {
228
+ if (['Igloo_Free_Form_Item', 'Igloo_Free_Form_Section', 'Igloo_Free_Form_AddableSection'].includes(c === null || c === void 0 ? void 0 : (_c$type = c.type) === null || _c$type === void 0 ? void 0 : _c$type.displayName)) {
229
229
  return /*#__PURE__*/(0, _react.cloneElement)(c, _objectSpread(_objectSpread({
230
230
  key: index
231
231
  }, c.props), {}, {
@@ -71,7 +71,8 @@ var FreeForm = function FreeForm(props) {
71
71
  } : _props$getScrollConta,
72
72
  _props$onFirstModifie = props.onFirstModified,
73
73
  onFirstModified = _props$onFirstModifie === void 0 ? function () {} : _props$onFirstModifie,
74
- uploadApi = props.uploadApi;
74
+ uploadApi = props.uploadApi,
75
+ selectDatasourceApi = props.selectDatasourceApi;
75
76
 
76
77
  var _Form$useForm = _form.default.useForm(),
77
78
  _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
@@ -212,7 +213,8 @@ var FreeForm = function FreeForm(props) {
212
213
  showSubmitButton: showSubmitButton,
213
214
  getScrollContainer: getScrollContainer,
214
215
  registerDependencies: registerDependencies,
215
- uploadApi: uploadApi
216
+ uploadApi: uploadApi,
217
+ selectDatasourceApi: selectDatasourceApi
216
218
  }, locales),
217
219
  children: (0, _jsxRuntime.jsx)(_form.default, {
218
220
  form: form,
@@ -2,11 +2,19 @@ import { SelectProps, SelectValue } from 'antd/es/select';
2
2
  import { FC, IglooComponentProps } from '../types';
3
3
  import { FormInstance } from 'antd/es/form';
4
4
  import './style';
5
+ import { NamePath } from 'antd/es/form/interface';
5
6
  export declare const Option: import("rc-select/lib/Option").OptionFC, OptGroup: import("rc-select/lib/OptGroup").OptionGroupFC;
6
7
  declare type Props = SelectProps<SelectValue> & IglooComponentProps & {
7
8
  getOptions?: (form: FormInstance) => any[];
8
9
  multiple?: boolean;
9
10
  clearWhenOptionsUpdated?: boolean;
11
+ optionGroups?: {
12
+ parentKey: string;
13
+ options: Props['options'];
14
+ }[];
15
+ datasourceKey?: string;
16
+ datasourceApi?: string;
17
+ dependField?: NamePath;
10
18
  };
11
19
  declare type OptionType = typeof Option;
12
20
  declare type OptGroupType = typeof OptGroup;
@@ -14,5 +22,5 @@ interface IglooSelectType extends FC<Props> {
14
22
  Option: OptionType;
15
23
  OptGroup: OptGroupType;
16
24
  }
17
- declare const IglooSelect: IglooSelectType;
18
- export default IglooSelect;
25
+ declare const AttachedSelect: IglooSelectType;
26
+ export default AttachedSelect;
@@ -25,16 +25,27 @@ var _checkbox = _interopRequireDefault(require("../checkbox"));
25
25
 
26
26
  var _localeContext = _interopRequireDefault(require("../locale/locale-context"));
27
27
 
28
+ var _formContext = _interopRequireDefault(require("../form-context"));
29
+
28
30
  var _button = _interopRequireDefault(require("../button"));
29
31
 
30
32
  var _input = _interopRequireDefault(require("../input"));
31
33
 
32
34
  require("./style");
33
35
 
34
- var _excluded = ["options", "getOptions", "value", "className", "placeholder", "onDropdownVisibleChange", "children", "showSearch", "filterOption", "optionFilterProp", "multiple", "clearWhenOptionsUpdated"];
36
+ var _invariant = _interopRequireDefault(require("invariant"));
37
+
38
+ var _excluded = ["value", "className", "placeholder", "onDropdownVisibleChange", "showSearch", "filterOption", "optionFilterProp", "multiple", "options"],
39
+ _excluded2 = ["options", "optionGroups", "getOptions", "datasourceKey", "dependField", "children", "clearWhenOptionsUpdated"];
35
40
 
36
41
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
42
 
43
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
44
+
45
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
46
+
47
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
48
+
38
49
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
50
 
40
51
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -71,20 +82,17 @@ exports.OptGroup = OptGroup;
71
82
  exports.Option = Option;
72
83
 
73
84
  var IglooSelect = function IglooSelect(_ref) {
74
- var optionsProp = _ref.options,
75
- getOptionsProp = _ref.getOptions,
76
- valueProp = _ref.value,
85
+ var valueProp = _ref.value,
77
86
  className = _ref.className,
78
87
  placeholder = _ref.placeholder,
79
88
  _ref$onDropdownVisibl = _ref.onDropdownVisibleChange,
80
89
  onDropdownVisibleChange = _ref$onDropdownVisibl === void 0 ? function () {} : _ref$onDropdownVisibl,
81
- children = _ref.children,
82
90
  showSearch = _ref.showSearch,
83
91
  filterOption = _ref.filterOption,
84
92
  optionFilterProp = _ref.optionFilterProp,
85
93
  multiple = _ref.multiple,
86
- _ref$clearWhenOptions = _ref.clearWhenOptionsUpdated,
87
- clearWhenOptionsUpdated = _ref$clearWhenOptions === void 0 ? false : _ref$clearWhenOptions,
94
+ _ref$options = _ref.options,
95
+ options = _ref$options === void 0 ? [] : _ref$options,
88
96
  rest = _objectWithoutProperties(_ref, _excluded);
89
97
 
90
98
  var _useContext = (0, _react.useContext)(_localeContext.default),
@@ -100,86 +108,25 @@ var IglooSelect = function IglooSelect(_ref) {
100
108
  selectedOptions = _useState4[0],
101
109
  setSelectedOptions = _useState4[1];
102
110
 
111
+ var _useState5 = (0, _react.useState)(options),
112
+ _useState6 = _slicedToArray(_useState5, 2),
113
+ displayOptions = _useState6[0],
114
+ setDisplay = _useState6[1];
115
+
103
116
  (0, _react.useEffect)(function () {
104
117
  typeof rest.onChange === 'function' && valueProp !== selected && rest.onChange(selected, selectedOptions);
105
118
  }, [selected]);
106
119
  (0, _react.useEffect)(function () {
107
120
  setSelected(valueProp);
108
121
  }, [valueProp]);
109
-
110
- var getOptions = function getOptions() {
111
- var getFormInstance = rest.getFormInstance;
112
- var form = typeof getFormInstance === 'function' && getFormInstance();
113
-
114
- if (!form) {
115
- if (!children || typeof children === 'string' || typeof children === 'number' || typeof children === 'boolean') return [];
116
- return Array.isArray(children) ? children.map(function (child) {
117
- return {
118
- label: child.props.children,
119
- value: child.props.value
120
- };
121
- }) : [{
122
- label: children.props.children,
123
- value: children.props.value
124
- }];
125
- }
126
-
127
- var options = typeof getOptionsProp === 'function' && getOptionsProp(form);
128
- return options || [];
129
- };
130
-
131
- var options = optionsProp || getOptions();
132
-
133
- var _useState5 = (0, _react.useState)(options),
134
- _useState6 = _slicedToArray(_useState5, 2),
135
- originOptions = _useState6[0],
136
- setOriginOptions = _useState6[1];
137
-
138
- var _useState7 = (0, _react.useState)(options),
139
- _useState8 = _slicedToArray(_useState7, 2),
140
- displayOptions = _useState8[0],
141
- setDisplay = _useState8[1];
142
-
143
122
  (0, _react.useEffect)(function () {
144
- var updateOptions = options.length !== originOptions.length;
145
-
146
- if (!updateOptions) {
147
- for (var i = 0; i < options.length; i++) {
148
- var newOption = options[i];
149
- var originOption = originOptions[i];
150
-
151
- if (newOption.label !== originOption.label || newOption.value !== originOption.value) {
152
- updateOptions = true;
153
- break;
154
- }
155
- }
156
- }
157
-
158
- if (updateOptions) {
159
- setOriginOptions(options);
160
- setDisplay(options);
161
- var setFieldValue = rest.setFieldValue;
162
-
163
- if (clearWhenOptionsUpdated) {
164
- typeof setFieldValue === 'function' && setFieldValue();
165
- }
166
- }
123
+ setDisplay(options);
167
124
  }, [options]);
168
- (0, _react.useEffect)(function () {
169
- var setFieldValue = rest.setFieldValue;
170
- var foundValue = originOptions.find(function (option) {
171
- return Array.isArray(valueProp) ? valueProp.includes(option.value) : option.value === valueProp;
172
- });
173
125
 
174
- if (!foundValue) {
175
- typeof setFieldValue === 'function' && setFieldValue();
176
- }
177
- }, [valueProp, originOptions]);
178
-
179
- var _useState9 = (0, _react.useState)(false),
180
- _useState10 = _slicedToArray(_useState9, 2),
181
- dropVisible = _useState10[0],
182
- setDropVisible = _useState10[1];
126
+ var _useState7 = (0, _react.useState)(false),
127
+ _useState8 = _slicedToArray(_useState7, 2),
128
+ dropVisible = _useState8[0],
129
+ setDropVisible = _useState8[1];
183
130
 
184
131
  var handleDropDownVisibleChange = function handleDropDownVisibleChange(open) {
185
132
  typeof onDropdownVisibleChange === 'function' && onDropdownVisibleChange(open);
@@ -188,7 +135,7 @@ var IglooSelect = function IglooSelect(_ref) {
188
135
 
189
136
  var handleSearch = function handleSearch(e) {
190
137
  var value = e.target.value;
191
- var filteredOptions = originOptions.filter(function (option) {
138
+ var filteredOptions = options.filter(function (option) {
192
139
  var _option$label, _option$label$toStrin;
193
140
 
194
141
  return Boolean(option === null || option === void 0 ? void 0 : (_option$label = option.label) === null || _option$label === void 0 ? void 0 : (_option$label$toStrin = _option$label.toString()) === null || _option$label$toStrin === void 0 ? void 0 : _option$label$toStrin.includes(value));
@@ -370,11 +317,169 @@ var IglooSelect = function IglooSelect(_ref) {
370
317
  });
371
318
  };
372
319
 
373
- IglooSelect.formItemPropsHandler = function (config) {
320
+ var AttachedSelect = function AttachedSelect(_ref11) {
321
+ var options = _ref11.options,
322
+ optionGroups = _ref11.optionGroups,
323
+ getOptions = _ref11.getOptions,
324
+ datasourceKey = _ref11.datasourceKey,
325
+ dependField = _ref11.dependField,
326
+ children = _ref11.children,
327
+ _ref11$clearWhenOptio = _ref11.clearWhenOptionsUpdated,
328
+ clearWhenOptionsUpdated = _ref11$clearWhenOptio === void 0 ? false : _ref11$clearWhenOptio,
329
+ rest = _objectWithoutProperties(_ref11, _excluded2);
330
+
331
+ var _useState9 = (0, _react.useState)(options || []),
332
+ _useState10 = _slicedToArray(_useState9, 2),
333
+ _options = _useState10[0],
334
+ setOptions = _useState10[1];
335
+
336
+ var _useContext2 = (0, _react.useContext)(_formContext.default),
337
+ selectDatasourceApi = _useContext2.selectDatasourceApi;
338
+
339
+ var getFormInstance = rest.getFormInstance;
340
+ var form = typeof getFormInstance === 'function' && getFormInstance();
341
+ var dependFieldValue = form && dependField && form.getFieldValue(dependField);
342
+ var optionsFromGetOptions = typeof getOptions === 'function' && form && getOptions(form);
343
+ (0, _invariant.default)(datasourceKey && selectDatasourceApi || !datasourceKey, 'Please provide selectDatasourceApi in Form props');
344
+ (0, _react.useEffect)(function () {
345
+ var calcOptions = /*#__PURE__*/function () {
346
+ var _ref12 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
347
+ var group, query, api, rst, _yield$rst$json, data;
348
+
349
+ return regeneratorRuntime.wrap(function _callee$(_context) {
350
+ while (1) {
351
+ switch (_context.prev = _context.next) {
352
+ case 0:
353
+ if (!Array.isArray(options)) {
354
+ _context.next = 2;
355
+ break;
356
+ }
357
+
358
+ return _context.abrupt("return", options);
359
+
360
+ case 2:
361
+ if (!(Array.isArray(children) || _typeof(children) === 'object')) {
362
+ _context.next = 4;
363
+ break;
364
+ }
365
+
366
+ return _context.abrupt("return", Array.isArray(children) ? children.map(function (child) {
367
+ return {
368
+ label: child.props.children,
369
+ value: child.props.value
370
+ };
371
+ }) : [{
372
+ label: children.props.children,
373
+ value: children.props.value
374
+ }]);
375
+
376
+ case 4:
377
+ if (!Array.isArray(optionsFromGetOptions)) {
378
+ _context.next = 6;
379
+ break;
380
+ }
381
+
382
+ return _context.abrupt("return", optionsFromGetOptions);
383
+
384
+ case 6:
385
+ if (!optionGroups) {
386
+ _context.next = 10;
387
+ break;
388
+ }
389
+
390
+ if (!dependFieldValue) {
391
+ _context.next = 10;
392
+ break;
393
+ }
394
+
395
+ group = optionGroups.find(function (_ref13) {
396
+ var parentKey = _ref13.parentKey;
397
+ return Array.isArray(dependFieldValue) ? dependFieldValue.includes(parentKey) : parentKey === dependFieldValue;
398
+ });
399
+ return _context.abrupt("return", (group === null || group === void 0 ? void 0 : group.options) || []);
400
+
401
+ case 10:
402
+ if (!(selectDatasourceApi && datasourceKey)) {
403
+ _context.next = 27;
404
+ break;
405
+ }
406
+
407
+ query = Array.isArray(dependFieldValue) ? dependFieldValue.map(function (v) {
408
+ return "parent=".concat(v);
409
+ }).join('&') : dependFieldValue ? "parent=".concat(dependFieldValue) : '';
410
+ api = "".concat(selectDatasourceApi, "/").concat(datasourceKey);
411
+ _context.prev = 13;
412
+ _context.next = 16;
413
+ return fetch(query ? "".concat(api, "?").concat(query) : api);
414
+
415
+ case 16:
416
+ rst = _context.sent;
417
+ _context.next = 19;
418
+ return rst.json();
419
+
420
+ case 19:
421
+ _yield$rst$json = _context.sent;
422
+ data = _yield$rst$json.data;
423
+ return _context.abrupt("return", data || []);
424
+
425
+ case 24:
426
+ _context.prev = 24;
427
+ _context.t0 = _context["catch"](13);
428
+ return _context.abrupt("return", []);
429
+
430
+ case 27:
431
+ return _context.abrupt("return", []);
432
+
433
+ case 28:
434
+ case "end":
435
+ return _context.stop();
436
+ }
437
+ }
438
+ }, _callee, null, [[13, 24]]);
439
+ }));
440
+
441
+ return function calcOptions() {
442
+ return _ref12.apply(this, arguments);
443
+ };
444
+ }();
445
+
446
+ var compareOptions = function compareOptions(newOptions) {
447
+ var updateOptions = _options.length !== newOptions.length;
448
+
449
+ if (!updateOptions) {
450
+ for (var i = 0; i < _options.length; i++) {
451
+ var newOption = _options[i];
452
+ var originOption = newOptions[i];
453
+
454
+ if (newOption.label !== originOption.label || newOption.value !== originOption.value) {
455
+ updateOptions = true;
456
+ break;
457
+ }
458
+ }
459
+ }
460
+
461
+ if (updateOptions) {
462
+ setOptions(newOptions);
463
+ var setFieldValue = rest.setFieldValue;
464
+
465
+ if (clearWhenOptionsUpdated) {
466
+ typeof setFieldValue === 'function' && setFieldValue();
467
+ }
468
+ }
469
+ };
470
+
471
+ calcOptions().then(compareOptions);
472
+ }, [options, optionGroups, dependFieldValue, optionsFromGetOptions]);
473
+ return (0, _jsxRuntime.jsx)(IglooSelect, _objectSpread({
474
+ options: _options
475
+ }, rest));
476
+ };
477
+
478
+ AttachedSelect.formItemPropsHandler = function (config) {
374
479
  return {};
375
480
  };
376
481
 
377
- IglooSelect.Option = Option;
378
- IglooSelect.OptGroup = OptGroup;
379
- var _default = IglooSelect;
482
+ AttachedSelect.Option = Option;
483
+ AttachedSelect.OptGroup = OptGroup;
484
+ var _default = AttachedSelect;
380
485
  exports.default = _default;