@zat-design/sisyphus-react 4.5.9-beta.1 → 4.5.9

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.
@@ -129,10 +129,19 @@ export const ProConfigProvider = props => {
129
129
  const lang = state?.locale ?? cacheLang ?? props?.locale ?? 'zh-CN';
130
130
  useEffect(() => {
131
131
  const raw = localStorage.getItem('localConfig');
132
- const localConfig = JSON.parse(raw || '{}');
132
+ let localConfig;
133
+ try {
134
+ localConfig = JSON.parse(raw || '{}');
135
+ } catch {
136
+ localStorage.removeItem('localConfig');
137
+ if (process.env.NODE_ENV !== 'production') {
138
+ console.warn('ProConfigProvider: invalid localConfig cache has been removed.');
139
+ }
140
+ return;
141
+ }
133
142
  dispatch({
134
143
  type: 'set',
135
- payload: merge(initialState, localConfig)
144
+ payload: merge({}, initialState, localConfig)
136
145
  });
137
146
  }, []);
138
147
  useEffect(() => {
@@ -147,7 +156,7 @@ export const ProConfigProvider = props => {
147
156
  return /*#__PURE__*/_jsx(ThemeProvider, {
148
157
  children: /*#__PURE__*/_jsx(ProConfigContext.Provider, {
149
158
  value: {
150
- state: merge(state, props.value),
159
+ state: merge({}, state, props.value),
151
160
  dispatch
152
161
  },
153
162
  children: /*#__PURE__*/_jsx(ThemeAwareConfigProvider, {
@@ -35,7 +35,7 @@ const ProDownload = props => {
35
35
  ...headers,
36
36
  ...defaultProps.headers
37
37
  };
38
- const handDownload = async () => {
38
+ const handDownload = async (_params = params) => {
39
39
  if (source === 'url') {
40
40
  try {
41
41
  fetch(url || action).then(response => {
@@ -58,13 +58,8 @@ const ProDownload = props => {
58
58
  setState({
59
59
  loading: true
60
60
  });
61
- let _params = params;
62
- if (_isFunction(params)) {
63
- _params = params.constructor.name === 'AsyncFunction' ? await params() : params();
64
- }
65
-
66
- // 发起请求
67
61
  try {
62
+ // 发起请求
68
63
  await DownloadRequest({
69
64
  url: url || action,
70
65
  method,
@@ -75,11 +70,6 @@ const ProDownload = props => {
75
70
  onFinish,
76
71
  onError: onError || onErrorConfig
77
72
  });
78
- } catch (error) {
79
- setState({
80
- loading: false
81
- });
82
- return Promise.reject();
83
73
  } finally {
84
74
  setState({
85
75
  loading: false
@@ -92,16 +82,24 @@ const ProDownload = props => {
92
82
  return /*#__PURE__*/_jsx(Button, {
93
83
  className: cls,
94
84
  onClick: async () => {
95
- if (_isBoolean(beforeDownload) && !beforeDownload) {
96
- return false;
97
- }
98
- if (beforeDownload) {
99
- const res = beforeDownload instanceof (async () => {}).constructor ? await beforeDownload() : beforeDownload();
100
- if (res === false) {
101
- return;
85
+ let resolvedParams = params;
86
+ try {
87
+ if (_isBoolean(beforeDownload) && !beforeDownload) {
88
+ return false;
89
+ }
90
+ if (beforeDownload) {
91
+ const res = await Promise.resolve(beforeDownload());
92
+ if (res === false) {
93
+ return;
94
+ }
102
95
  }
96
+ if (source !== 'url' && _isFunction(params)) {
97
+ resolvedParams = await Promise.resolve(params());
98
+ }
99
+ } catch {
100
+ return false;
103
101
  }
104
- handDownload();
102
+ return handDownload(resolvedParams);
105
103
  },
106
104
  ...defaultProps,
107
105
  loading: loading,
@@ -105,7 +105,11 @@ export const DownloadRequest = async ({
105
105
  ...headers
106
106
  };
107
107
  }
108
- const res = await fetch(url, config).then(async response => {
108
+ const response = await fetch(url, config);
109
+ const {
110
+ res,
111
+ responseData
112
+ } = await (async () => {
109
113
  try {
110
114
  const data = await response.clone().json();
111
115
  if (!data) {
@@ -120,16 +124,25 @@ export const DownloadRequest = async ({
120
124
  return Promise.reject(errorMsg);
121
125
  }
122
126
  if (_isFunction(transformResponse)) {
123
- return Promise.resolve(transformResponse(data));
127
+ return Promise.resolve(transformResponse(data)).then(transformedData => ({
128
+ res: transformedData,
129
+ responseData: data
130
+ }));
124
131
  }
125
- Promise.resolve(data);
132
+ return Promise.resolve({
133
+ res: response,
134
+ responseData: data
135
+ });
126
136
  } catch (error) {
127
137
  if (response.ok) {
128
- return Promise.resolve(response);
138
+ return Promise.resolve({
139
+ res: response,
140
+ responseData: null
141
+ });
129
142
  }
130
143
  }
131
144
  return Promise.reject(`${locale.ProDownload.errorMessage}`);
132
- });
145
+ })();
133
146
  let fileBlob;
134
147
  let data = null;
135
148
  let contentFileName = '';
@@ -137,19 +150,19 @@ export const DownloadRequest = async ({
137
150
  data = res;
138
151
  } else {
139
152
  // 优先获取Content-Disposition中filename
140
- contentFileName = getFilenameFromContentDisposition(res.headers.get('Content-Disposition'));
141
- data = _get(res, 'data');
153
+ contentFileName = getFilenameFromContentDisposition(response.headers.get('Content-Disposition'));
154
+ data = _get(responseData, 'data');
142
155
  }
143
156
  if (data) {
144
157
  fileBlob = convertBase64ToBlob(data);
145
158
  } else {
146
- fileBlob = await res.blob();
159
+ fileBlob = await response.blob();
147
160
  }
148
161
  // 完成回调
149
- onFinish?.(res, params);
162
+ onFinish?.(_isFunction(transformResponse) ? res : response, params);
150
163
  BlobMakeFile({
151
164
  blob: fileBlob,
152
165
  fileName: fileName || contentFileName
153
166
  });
154
- return Promise.resolve(res);
167
+ return Promise.resolve(_isFunction(transformResponse) ? res : response);
155
168
  };
@@ -150,16 +150,15 @@ const ProEnum = props => {
150
150
  list = sourceList;
151
151
  }
152
152
  if ( /*#__PURE__*/React.isValidElement(component)) {
153
- const Component = component;
154
- return /*#__PURE__*/_jsx(Component, {
153
+ return /*#__PURE__*/React.cloneElement(component, {
155
154
  ...enumProps,
156
155
  dataSource: list,
157
156
  fieldNames: {
158
157
  label,
159
158
  value: fieldValue
160
159
  },
161
- value: value,
162
- onChange: onChange
160
+ value,
161
+ onChange
163
162
  });
164
163
  }
165
164
  switch (type) {
@@ -244,7 +244,7 @@ const InputNumber = props => {
244
244
  value = _min;
245
245
  }
246
246
  value = parser(String(value), props.precision ?? valueProps?.precision);
247
- rest?.onChange(value);
247
+ rest?.onChange?.(value);
248
248
  const limit = {
249
249
  min: Number(_min),
250
250
  max: Number(_max)
Binary file
@@ -277,7 +277,7 @@ const ProTreeModal = props => {
277
277
  if (draggable && span) {
278
278
  // 开启 draggable 使用拖拽后的顺序
279
279
  const checkedList = listRef.current?.onChange();
280
- onChange(checkedList);
280
+ onChange?.(checkedList);
281
281
  } else {
282
282
  let values = checkedValues;
283
283
  if (labelInValue) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zat-design/sisyphus-react",
3
- "version": "4.5.9-beta.1",
3
+ "version": "4.5.9",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -88,6 +88,9 @@
88
88
  "start": "cross-env NODE_OPTIONS=\"--openssl-legacy-provider\" dumi dev",
89
89
  "test": "umi-test",
90
90
  "test:coverage": "umi-test --coverage",
91
+ "test:coverage:focused": "jest --config=jest.coverage.focused.js --coverage",
92
+ "coverage:report": "node ./scripts/coverage-gap-report.mjs --target=90 --scope=full",
93
+ "coverage:gate": "node ./scripts/coverage-directory-gate.mjs",
91
94
  "tsc": "tsc --noEmit"
92
95
  },
93
96
  "lint-staged": {