react-hook-core 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/components.js CHANGED
@@ -385,12 +385,8 @@ var BaseSearchComponent = (function (_super) {
385
385
  if (!lc) {
386
386
  lc = state_1.enLocale;
387
387
  }
388
- var cc = this.getCurrencyCode();
389
388
  var fields = this.getFields();
390
- var l = this.getList();
391
- var f = this.getSearchForm();
392
- var dc = (this.ui ? this.ui.decodeFromForm : undefined);
393
- var obj3 = search_1.getModel(this.state, name, this, fields, this.excluding, this.keys, l, f, dc, lc, cc);
389
+ var obj3 = search_1.getModel(this.state, name, this, fields, this.excluding);
394
390
  return obj3;
395
391
  };
396
392
  BaseSearchComponent.prototype.getFields = function () {
@@ -833,27 +829,54 @@ var BaseEditComponent = (function (_super) {
833
829
  }
834
830
  };
835
831
  BaseEditComponent.prototype.fail = function (result) {
836
- var errors = result.errors;
837
832
  var f = this.form;
838
833
  var u = this.ui;
839
- if (u && f) {
840
- var unmappedErrors = u.showFormError(f, errors);
841
- if (!result.message) {
842
- if (errors && errors.length === 1) {
843
- result.message = errors[0].message;
834
+ if (Array.isArray(result)) {
835
+ if (u && f) {
836
+ var unmappedErrors = u.showFormError(f, result);
837
+ formutil_1.focusFirstError(f);
838
+ if (unmappedErrors && unmappedErrors.length > 0) {
839
+ var t = this.resourceService.value('error');
840
+ if (u && u.buildErrorMessage) {
841
+ var msg = u.buildErrorMessage(unmappedErrors);
842
+ this.showError(msg, t);
843
+ }
844
+ else {
845
+ this.showError(unmappedErrors[0].field + ' ' + unmappedErrors[0].code + ' ' + unmappedErrors[0].message, t);
846
+ }
847
+ }
848
+ }
849
+ else {
850
+ var t = this.resourceService.value('error');
851
+ if (result.length > 0) {
852
+ this.showError(result[0].field + ' ' + result[0].code + ' ' + result[0].message, t);
844
853
  }
845
854
  else {
846
- result.message = u.buildErrorMessage(unmappedErrors);
855
+ this.showError(t, t);
847
856
  }
848
857
  }
849
- formutil_1.focusFirstError(f);
850
858
  }
851
- else if (errors && errors.length === 1) {
852
- result.message = errors[0].message;
853
- }
854
- if (result.message) {
855
- var t = this.resourceService.value('error');
856
- this.showError(result.message, t);
859
+ else {
860
+ var errors = result.errors;
861
+ if (u && f) {
862
+ var unmappedErrors = u.showFormError(f, errors);
863
+ if (!result.message) {
864
+ if (errors && errors.length === 1) {
865
+ result.message = errors[0].message;
866
+ }
867
+ else {
868
+ result.message = u.buildErrorMessage(unmappedErrors);
869
+ }
870
+ }
871
+ formutil_1.focusFirstError(f);
872
+ }
873
+ else if (errors && errors.length === 1) {
874
+ result.message = errors[0].message;
875
+ }
876
+ if (result.message) {
877
+ var t = this.resourceService.value('error');
878
+ this.showError(result.message, t);
879
+ }
857
880
  }
858
881
  };
859
882
  BaseEditComponent.prototype.postSave = function (res, backOnSave) {
@@ -864,7 +887,10 @@ var BaseEditComponent = (function (_super) {
864
887
  var successMsg = (newMod ? this.insertSuccessMsg : this.updateSuccessMsg);
865
888
  var x = res;
866
889
  var r = this.resourceService;
867
- if (!isNaN(x)) {
890
+ if (Array.isArray(x)) {
891
+ this.fail(x);
892
+ }
893
+ else if (!isNaN(x)) {
868
894
  if (x === st.success) {
869
895
  this.succeed(successMsg, backOnSave);
870
896
  }
package/lib/core.js CHANGED
@@ -132,17 +132,22 @@ function buildId(p, keys) {
132
132
  return id;
133
133
  }
134
134
  exports.buildId = buildId;
135
- function dateToDefaultString(date) {
136
- return '' + date.getFullYear() + '-' + addZero(date.getMonth() + 1, 2) + '-' + addZero(date.getDate(), 2);
137
- }
138
- exports.dateToDefaultString = dateToDefaultString;
139
- function addZero(val, num) {
140
- var v = val.toString();
141
- while (v.length < num) {
142
- v = '0' + v;
143
- }
144
- return v.toString();
145
- }
135
+ exports.datetimeToString = function (inputDate) {
136
+ var date = new Date(inputDate);
137
+ var year = date.getFullYear();
138
+ var month = String(date.getMonth() + 1).padStart(2, '0');
139
+ var day = String(date.getDate()).padStart(2, '0');
140
+ var hours = String(date.getHours()).padStart(2, '0');
141
+ var minutes = String(date.getMinutes()).padStart(2, '0');
142
+ var seconds = String(date.getSeconds()).padStart(2, '0');
143
+ return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds;
144
+ };
145
+ exports.dateToString = function (inputDate) {
146
+ var year = inputDate.getFullYear();
147
+ var month = String(inputDate.getMonth() + 1).padStart(2, '0');
148
+ var day = String(inputDate.getDate()).padStart(2, '0');
149
+ return year + "-" + month + "-" + day;
150
+ };
146
151
  function initForm(form, initMat) {
147
152
  if (form) {
148
153
  setTimeout(function () {
package/lib/route.js CHANGED
@@ -11,7 +11,35 @@ function buildParameters(url) {
11
11
  if (i >= 0) {
12
12
  urlSearch = url.substring(i + 1);
13
13
  }
14
- var parsed = qs.parse(urlSearch);
15
- return parsed;
14
+ try {
15
+ var parsed = convertToObject(qs.parse(urlSearch));
16
+ return parsed;
17
+ }
18
+ catch (error) {
19
+ console.log(error);
20
+ throw error;
21
+ }
16
22
  }
17
23
  exports.buildParameters = buildParameters;
24
+ function convertToObject(input) {
25
+ var output = {};
26
+ for (var key in input) {
27
+ var value = input[key];
28
+ var keys = key.split('.');
29
+ var currentObj = output;
30
+ for (var i = 0; i < keys.length; i++) {
31
+ var currentKey = keys[i];
32
+ if (!currentObj[currentKey]) {
33
+ if (i === keys.length - 1) {
34
+ currentObj[currentKey] = value;
35
+ }
36
+ else {
37
+ currentObj[currentKey] = {};
38
+ }
39
+ }
40
+ currentObj = currentObj[currentKey];
41
+ }
42
+ }
43
+ return output;
44
+ }
45
+ exports.convertToObject = convertToObject;
package/lib/search.js CHANGED
@@ -1,4 +1,11 @@
1
1
  "use strict";
2
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
3
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
5
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6
+ r[k] = a[j];
7
+ return r;
8
+ };
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  var resources = (function () {
4
11
  function resources() {
@@ -156,9 +163,36 @@ function optimizeFilter(obj, searchable, fields) {
156
163
  else {
157
164
  delete obj.sort;
158
165
  }
166
+ if (searchable) {
167
+ mapObjects(obj, searchable);
168
+ }
159
169
  return obj;
160
170
  }
161
171
  exports.optimizeFilter = optimizeFilter;
172
+ function mapObjects(objA, objB) {
173
+ var _a;
174
+ for (var key in objA) {
175
+ if (objB.hasOwnProperty(key) && objB[key] !== null && objB[key] !== undefined) {
176
+ if (Array.isArray(objA[key])) {
177
+ objA[key] = [];
178
+ if (Array.isArray(objB[key]) && objB[key].length === 0) {
179
+ }
180
+ else {
181
+ var arrayObjKeyB = objB[key].length > 0 ? (_a = (objB[key])) === null || _a === void 0 ? void 0 : _a.split(',') : [];
182
+ if (arrayObjKeyB && arrayObjKeyB.length > 1) {
183
+ objA[key] = __spreadArrays(arrayObjKeyB);
184
+ }
185
+ else {
186
+ objA[key].push(objB[key]);
187
+ }
188
+ }
189
+ }
190
+ else {
191
+ objA[key] = objB[key];
192
+ }
193
+ }
194
+ }
195
+ }
162
196
  function append(list, results) {
163
197
  if (list && results) {
164
198
  for (var _i = 0, results_1 = results; _i < results_1.length; _i++) {
@@ -527,22 +561,11 @@ function toggleSortStyle(target) {
527
561
  return field;
528
562
  }
529
563
  exports.toggleSortStyle = toggleSortStyle;
530
- function getModel(state, modelName, searchable, fields, excluding, keys, l, f, dc, lc, currencyCode) {
564
+ function getModel(state, modelName, searchable, fields, excluding) {
531
565
  var obj2 = getModelFromState(state, modelName);
532
- if (f && dc) {
533
- obj2 = dc(f, lc, currencyCode);
534
- }
535
566
  var obj = obj2 ? obj2 : {};
536
567
  var obj3 = optimizeFilter(obj, searchable, fields);
537
568
  obj3.excluding = excluding;
538
- if (keys && keys.length === 1) {
539
- if (l && l.length > 0) {
540
- var refId = l[l.length - 1][keys[0]];
541
- if (refId) {
542
- obj3.refId = '' + refId;
543
- }
544
- }
545
- }
546
569
  return obj3;
547
570
  }
548
571
  exports.getModel = getModel;
package/lib/state.js CHANGED
@@ -119,6 +119,32 @@ function buildState(e, state, ctrl, modelName, tloc) {
119
119
  objSet[modelName] = model;
120
120
  return objSet;
121
121
  }
122
+ else if (type && (type.toLowerCase() === 'date' || type.toLowerCase() === 'datetime-local')) {
123
+ var objSet = {};
124
+ try {
125
+ var selectedDate = new Date(ctrl.value);
126
+ reflect_1.setValue(model, field, selectedDate.toISOString());
127
+ objSet[modelName] = model;
128
+ return objSet;
129
+ }
130
+ catch (error) {
131
+ console.error('Error occurred while formatting date:', error);
132
+ }
133
+ return objSet;
134
+ }
135
+ else if (type && (type.toLowerCase() === 'time')) {
136
+ var objSet = {};
137
+ try {
138
+ var selectedDate = new Date(ctrl.value);
139
+ reflect_1.setValue(model, field, selectedDate.getTime());
140
+ objSet[modelName] = model;
141
+ return objSet;
142
+ }
143
+ catch (error) {
144
+ console.error('Error occurred while formatting time:', error);
145
+ }
146
+ return objSet;
147
+ }
122
148
  else {
123
149
  if (ctrl.tagName === 'SELECT') {
124
150
  if (ctrl.value === '' || !ctrl.value) {
package/lib/useEdit.js CHANGED
@@ -260,28 +260,55 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
260
260
  };
261
261
  var succeed = (p && p.succeed ? p.succeed : _succeed);
262
262
  var _fail = function (result) {
263
- var errors = result.errors;
264
263
  var f = refForm.current;
265
264
  var u = p1.ui;
266
- if (errors && u) {
267
- var unmappedErrors = u.showFormError(f, errors);
268
- formutil_1.focusFirstError(f);
269
- if (!result.message) {
270
- if (errors && errors.length === 1) {
271
- result.message = errors[0].message;
272
- }
273
- else {
265
+ if (Array.isArray(result)) {
266
+ if (u && f) {
267
+ var unmappedErrors = u.showFormError(f, result);
268
+ formutil_1.focusFirstError(f);
269
+ if (unmappedErrors && unmappedErrors.length > 0) {
270
+ var t = p1.resource.value('error');
274
271
  if (p1.ui && p1.ui.buildErrorMessage) {
275
- result.message = p1.ui.buildErrorMessage(unmappedErrors);
272
+ var msg = p1.ui.buildErrorMessage(unmappedErrors);
273
+ p1.showError(msg, t);
276
274
  }
277
275
  else {
278
- result.message = errors[0].message;
276
+ p1.showError(unmappedErrors[0].field + ' ' + unmappedErrors[0].code + ' ' + unmappedErrors[0].message, t);
279
277
  }
280
278
  }
281
279
  }
282
- if (result.message) {
280
+ else {
283
281
  var t = p1.resource.value('error');
284
- p1.showError(result.message, t);
282
+ if (result.length > 0) {
283
+ p1.showError(result[0].field + ' ' + result[0].code + ' ' + result[0].message, t);
284
+ }
285
+ else {
286
+ p1.showError(t, t);
287
+ }
288
+ }
289
+ }
290
+ else {
291
+ var errors = result.errors;
292
+ if (errors && u) {
293
+ var unmappedErrors = u.showFormError(f, errors);
294
+ formutil_1.focusFirstError(f);
295
+ if (!result.message) {
296
+ if (errors && errors.length === 1) {
297
+ result.message = errors[0].message;
298
+ }
299
+ else {
300
+ if (p1.ui && p1.ui.buildErrorMessage) {
301
+ result.message = p1.ui.buildErrorMessage(unmappedErrors);
302
+ }
303
+ else {
304
+ result.message = errors[0].message;
305
+ }
306
+ }
307
+ }
308
+ if (result.message) {
309
+ var t = p1.resource.value('error');
310
+ p1.showError(result.message, t);
311
+ }
285
312
  }
286
313
  }
287
314
  };
@@ -293,7 +320,10 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
293
320
  var successMsg = p1.resource.value('msg_save_success');
294
321
  var newMod = flag.newMode;
295
322
  var st = core_1.createEditStatus(p ? p.status : undefined);
296
- if (!isNaN(x)) {
323
+ if (Array.isArray(x)) {
324
+ fail(x);
325
+ }
326
+ else if (!isNaN(x)) {
297
327
  if (x === st.success) {
298
328
  succeed(obj, successMsg, version, backOnSave);
299
329
  }
package/lib/useSearch.js CHANGED
@@ -102,7 +102,7 @@ exports.mergeParam = mergeParam;
102
102
  exports.useSearch = function (refForm, initialState, service, p2, p) {
103
103
  var baseProps = exports.useCoreSearch(refForm, initialState, service, p2, p);
104
104
  react_1.useEffect(function () {
105
- var load = baseProps.load, setState = baseProps.setState, component = baseProps.component;
105
+ var load = baseProps.load, setState = baseProps.setState, component = baseProps.component, searchError = baseProps.searchError;
106
106
  if (refForm) {
107
107
  var registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
108
108
  core_1.initForm(refForm.current, registerEvents);
@@ -112,8 +112,13 @@ exports.useSearch = function (refForm, initialState, service, p2, p) {
112
112
  }
113
113
  else {
114
114
  var se = (p && p.createFilter ? p.createFilter() : undefined);
115
- var s = search_1.mergeFilter(route_1.buildFromUrl(), se, component.pageSizes);
116
- load(s, p2.auto);
115
+ try {
116
+ var s = search_1.mergeFilter(route_1.buildFromUrl(), se, component.pageSizes);
117
+ load(s, p2.auto);
118
+ }
119
+ catch (error) {
120
+ searchError(error);
121
+ }
117
122
  }
118
123
  }, []);
119
124
  return __assign({}, baseProps);
@@ -163,9 +168,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
163
168
  if (!fs || fs.length <= 0) {
164
169
  fs = getFields();
165
170
  }
166
- var lc = (p1.getLocale ? p1.getLocale() : state_1.enLocale);
167
- var cc = getCurrencyCode();
168
- var obj3 = search_1.getModel(state, n, se, fs, se.excluding, keys, se.list, refForm.current, core_1.getDecodeFromForm(p1), lc, cc);
171
+ var obj3 = search_1.getModel(state, n, se, fs, se.excluding);
169
172
  return obj3;
170
173
  };
171
174
  var getFilter = p && p.getFilter ? p.getFilter : _getFilter;
@@ -184,7 +187,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
184
187
  var runSearch = doSearch;
185
188
  if (auto) {
186
189
  setTimeout(function () {
187
- runSearch(com, true);
190
+ runSearch(obj2, true);
188
191
  }, 0);
189
192
  }
190
193
  };
@@ -304,6 +307,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
304
307
  var searchError = function (err) {
305
308
  setComponent({ pageIndex: component.tmpPageIndex });
306
309
  core_1.error(err, p1.resource.value, p1.showError);
310
+ core_1.hideLoading(p1.loading);
307
311
  };
308
312
  var appendList = (p && p.appendList ? p.appendList : appendListOfState);
309
313
  var setList = (p && p.setList ? p.setList : setListOfState);
@@ -379,6 +383,6 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
379
383
  clearQ: clearQ,
380
384
  showResults: showResults,
381
385
  getFields: getFields,
382
- getModelName: getModelName, format: p ? p.format : undefined
386
+ getModelName: getModelName, format: p ? p.format : undefined, searchError: searchError
383
387
  });
384
388
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-hook-core",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "react",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./src/index.ts",
package/src/components.ts CHANGED
@@ -420,12 +420,8 @@ export class BaseSearchComponent<T, F extends Filter, P, I extends SearchState<T
420
420
  if (!lc) {
421
421
  lc = enLocale;
422
422
  }
423
- const cc = this.getCurrencyCode();
424
423
  const fields = this.getFields();
425
- const l = this.getList();
426
- const f = this.getSearchForm();
427
- const dc = (this.ui ? this.ui.decodeFromForm : undefined);
428
- const obj3 = getModel<T, F>(this.state, name, this, fields, this.excluding, this.keys, l, f, dc, lc, cc);
424
+ const obj3 = getModel<T, F>(this.state, name, this, fields, this.excluding);
429
425
  return obj3;
430
426
  }
431
427
  getFields(): string[]|undefined {
@@ -907,26 +903,49 @@ export abstract class BaseEditComponent<T, P, S> extends BaseComponent<P, S> {
907
903
  this.back(null);
908
904
  }
909
905
  }
910
- fail(result: ResultInfo<T>) {
911
- const errors = result.errors;
906
+ fail(result: ResultInfo<T> | ErrorMessage[]) {
912
907
  const f = this.form;
913
908
  const u = this.ui;
914
- if (u && f) {
915
- const unmappedErrors = u.showFormError(f, errors);
916
- if (!result.message) {
917
- if (errors && errors.length === 1) {
918
- result.message = errors[0].message;
909
+ if (Array.isArray(result)) {
910
+ if (u && f) {
911
+ const unmappedErrors = u.showFormError(f, result);
912
+ focusFirstError(f);
913
+ if (unmappedErrors && unmappedErrors.length > 0) {
914
+ const t = this.resourceService.value('error');
915
+ if (u && u.buildErrorMessage) {
916
+ const msg = u.buildErrorMessage(unmappedErrors);
917
+ this.showError(msg, t);
918
+ } else {
919
+ this.showError(unmappedErrors[0].field + ' ' + unmappedErrors[0].code + ' ' + unmappedErrors[0].message, t);
920
+ }
921
+ }
922
+ } else {
923
+ const t = this.resourceService.value('error');
924
+ if (result.length > 0) {
925
+ this.showError(result[0].field + ' ' + result[0].code + ' ' + result[0].message, t);
919
926
  } else {
920
- result.message = u.buildErrorMessage(unmappedErrors);
927
+ this.showError(t, t);
921
928
  }
922
929
  }
923
- focusFirstError(f);
924
- } else if (errors && errors.length === 1) {
925
- result.message = errors[0].message;
926
- }
927
- if (result.message) {
928
- const t = this.resourceService.value('error');
929
- this.showError(result.message, t);
930
+ } else {
931
+ const errors = result.errors;
932
+ if (u && f) {
933
+ const unmappedErrors = u.showFormError(f, errors);
934
+ if (!result.message) {
935
+ if (errors && errors.length === 1) {
936
+ result.message = errors[0].message;
937
+ } else {
938
+ result.message = u.buildErrorMessage(unmappedErrors);
939
+ }
940
+ }
941
+ focusFirstError(f);
942
+ } else if (errors && errors.length === 1) {
943
+ result.message = errors[0].message;
944
+ }
945
+ if (result.message) {
946
+ const t = this.resourceService.value('error');
947
+ this.showError(result.message, t);
948
+ }
930
949
  }
931
950
  }
932
951
 
@@ -938,7 +957,9 @@ export abstract class BaseEditComponent<T, P, S> extends BaseComponent<P, S> {
938
957
  const successMsg = (newMod ? this.insertSuccessMsg : this.updateSuccessMsg);
939
958
  const x: any = res;
940
959
  const r = this.resourceService;
941
- if (!isNaN(x)) {
960
+ if (Array.isArray(x)) {
961
+ this.fail(x);
962
+ } else if (!isNaN(x)) {
942
963
  if (x === st.success) {
943
964
  this.succeed(successMsg, backOnSave);
944
965
  } else {
package/src/core.ts CHANGED
@@ -310,16 +310,23 @@ export function buildId<ID>(p: Readonly<Params<string>>, keys?: string[]): ID |
310
310
  }
311
311
  return id;
312
312
  }
313
- export function dateToDefaultString(date: Date): string {
314
- return '' + date.getFullYear() + '-' + addZero(date.getMonth() + 1, 2) + '-' + addZero(date.getDate(), 2); // DateUtil.formatDate(date, 'YYYY-MM-DD');
315
- }
316
- function addZero(val: number, num: number): string {
317
- let v = val.toString();
318
- while (v.length < num) {
319
- v = '0' + v;
320
- }
321
- return v.toString();
322
- }
313
+ export const datetimeToString = (inputDate: Date) => {
314
+ const date = new Date(inputDate);
315
+ const year = date.getFullYear();
316
+ const month = String(date.getMonth() + 1).padStart(2, '0');
317
+ const day = String(date.getDate()).padStart(2, '0');
318
+ const hours = String(date.getHours()).padStart(2, '0');
319
+ const minutes = String(date.getMinutes()).padStart(2, '0');
320
+ const seconds = String(date.getSeconds()).padStart(2, '0');
321
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;
322
+ };
323
+
324
+ export const dateToString = (inputDate: Date) => {
325
+ const year = inputDate.getFullYear();
326
+ const month = String(inputDate.getMonth() + 1).padStart(2, '0');
327
+ const day = String(inputDate.getDate()).padStart(2, '0');
328
+ return `${year}-${month}-${day}`;
329
+ };
323
330
  /*
324
331
  export function formatFax(value: string) {
325
332
  return formatter.formatFax(value);
package/src/route.ts CHANGED
@@ -4,11 +4,44 @@ export function buildFromUrl<S>(): S {
4
4
  return buildParameters(window.location.search);
5
5
  }
6
6
  export function buildParameters<T>(url: string): T {
7
+
7
8
  let urlSearch = url;
8
9
  const i = urlSearch.indexOf('?');
9
10
  if (i >= 0) {
10
11
  urlSearch = url.substring(i + 1);
11
12
  }
12
- const parsed: any = qs.parse(urlSearch);
13
- return parsed;
13
+ try {
14
+ const parsed: any = convertToObject(qs.parse(urlSearch));
15
+ return parsed;
16
+
17
+ } catch (error) {
18
+ console.log(error);
19
+ throw error;
20
+ }
21
+ }
22
+
23
+ export function convertToObject(input: any) {
24
+ const output = {};
25
+
26
+ for (let key in input) {
27
+ const value = input[key];
28
+ const keys = key.split('.');
29
+
30
+ let currentObj = output as any;
31
+ for (let i = 0; i < keys.length; i++) {
32
+ const currentKey = keys[i];
33
+
34
+ if (!currentObj[currentKey]) {
35
+ if (i === keys.length - 1) {
36
+ currentObj[currentKey] = value;
37
+ } else {
38
+ currentObj[currentKey] = {};
39
+ }
40
+ }
41
+
42
+ currentObj = currentObj[currentKey];
43
+ }
44
+ }
45
+
46
+ return output;
14
47
  }
package/src/search.ts CHANGED
@@ -188,9 +188,33 @@ export function optimizeFilter<S extends Filter>(obj: S, searchable: Searchable,
188
188
  } else {
189
189
  delete obj.sort;
190
190
  }
191
+ if(searchable) {
192
+ mapObjects(obj, searchable as S);
193
+ }
191
194
  return obj;
192
195
  }
193
196
 
197
+ function mapObjects(objA: any, objB: any): void {
198
+ for (let key in objA) {
199
+ if (objB.hasOwnProperty(key) && objB[key] !== null && objB[key] !== undefined) {
200
+ if(Array.isArray(objA[key])) {
201
+ objA[key] = [];
202
+ if(Array.isArray(objB[key]) && objB[key].length === 0) {
203
+ } else {
204
+ const arrayObjKeyB = objB[key].length > 0 ? (objB[key])?.split(',') : [];
205
+ if(arrayObjKeyB && arrayObjKeyB.length > 1) {
206
+ objA[key] = [...arrayObjKeyB];
207
+ } else {
208
+ objA[key].push(objB[key])
209
+ }
210
+ }
211
+ } else {
212
+ objA[key] = objB[key];
213
+ }
214
+ }
215
+ }
216
+ }
217
+
194
218
  export function append<T>(list?: T[], results?: T[]): T[] {
195
219
  if (list && results) {
196
220
  for (const obj of results) {
@@ -551,22 +575,11 @@ export function toggleSortStyle(target: HTMLElement): string {
551
575
  }
552
576
  return field;
553
577
  }
554
- export function getModel<T, S extends Filter>(state: any, modelName: string, searchable: Searchable, fields?: string[], excluding?: string[]|number[], keys?: string[], l?: T[], f?: HTMLFormElement|null, dc?: (f2: HTMLFormElement, lc2?: Locale, cc?: string) => any, lc?: Locale, currencyCode?: string): S {
578
+ export function getModel<T, S extends Filter>(state: any, modelName: string, searchable: Searchable, fields?: string[], excluding?: string[]|number[]): S {
555
579
  let obj2 = getModelFromState(state, modelName);
556
- if (f && dc) {
557
- obj2 = dc(f, lc, currencyCode);
558
- }
559
580
  const obj: any = obj2 ? obj2 : {};
560
581
  const obj3 = optimizeFilter(obj, searchable, fields);
561
582
  obj3.excluding = excluding;
562
- if (keys && keys.length === 1) {
563
- if (l && l.length > 0) {
564
- const refId = (l[l.length - 1] as any)[keys[0]];
565
- if (refId) {
566
- obj3.refId = '' + refId;
567
- }
568
- }
569
- }
570
583
  return obj3;
571
584
  }
572
585
  function getModelFromState(state: any, modelName: string): any {
package/src/state.ts CHANGED
@@ -99,7 +99,29 @@ export function buildState<S, K extends keyof S>(e: any, state: Readonly<S>, ctr
99
99
  const objSet: any = {};
100
100
  objSet[modelName] = model;
101
101
  return objSet;
102
- } else {
102
+ } else if (type && (type.toLowerCase() === 'date' || type.toLowerCase() === 'datetime-local')) {
103
+ const objSet: any = {};
104
+ try {
105
+ const selectedDate = new Date(ctrl.value);
106
+ setValue(model, field, selectedDate.toISOString());
107
+ objSet[modelName] = model;
108
+ return objSet;
109
+ } catch (error) {
110
+ console.error('Error occurred while formatting date:', error);
111
+ }
112
+ return objSet;
113
+ } else if (type && (type.toLowerCase() === 'time')) {
114
+ const objSet: any = {};
115
+ try {
116
+ const selectedDate = new Date(ctrl.value);
117
+ setValue(model, field, selectedDate.getTime());
118
+ objSet[modelName] = model;
119
+ return objSet;
120
+ } catch (error) {
121
+ console.error('Error occurred while formatting time:', error);
122
+ }
123
+ return objSet;
124
+ } else {
103
125
  if (ctrl.tagName === 'SELECT') {
104
126
  if (ctrl.value === '' || !ctrl.value) {
105
127
  ctrl.removeAttribute('data-value');
package/src/useEdit.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import {useEffect, useState} from 'react';
2
2
  import {useNavigate, useParams} from 'react-router';
3
- import {Attributes, buildId, createEditStatus, EditStatusConfig, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, UIService} from './core';
3
+ import {Attributes, buildId, createEditStatus, EditStatusConfig, ErrorMessage, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, UIService} from './core';
4
4
  import {build, createModel as createModel2, EditParameter, GenericService, handleStatus, handleVersion, initPropertyNullInModel, ResultInfo} from './edit';
5
5
  import {focusFirstError, readOnly as setReadOnly} from './formutil';
6
6
  import {DispatchWithCallback, useMergeState} from './merge';
@@ -33,7 +33,7 @@ export interface BaseEditComponentParam<T, ID> {
33
33
  onSave?: (isBack?: boolean) => void;
34
34
  validate?: (obj: T, callback: (obj2?: T) => void) => void;
35
35
  succeed?: (obj: T, msg: string, version?: string, isBack?: boolean, result?: ResultInfo<T>) => void;
36
- fail?: (result: ResultInfo<T>) => void;
36
+ fail?: (result: ResultInfo<T>|ErrorMessage[]) => void;
37
37
  postSave?: (obj: T, res: number|ResultInfo<T>, version?: string, backOnSave?: boolean) => void;
38
38
  handleDuplicateKey?: (result?: ResultInfo<T>) => void;
39
39
  load?: (i: ID|null, callback?: (m: T, showM: (m2: T) => void) => void) => void;
@@ -334,27 +334,50 @@ export const useCoreEdit = <T, ID, S, P>(
334
334
  };
335
335
  const succeed = (p && p.succeed ? p.succeed : _succeed);
336
336
 
337
- const _fail = (result: ResultInfo<T>) => {
338
- const errors = result.errors;
337
+ const _fail = (result: ResultInfo<T> | ErrorMessage[]) => {
339
338
  const f = refForm.current;
340
339
  const u = p1.ui;
341
- if (errors && u) {
342
- const unmappedErrors = u.showFormError(f, errors);
343
- focusFirstError(f);
344
- if (!result.message) {
345
- if (errors && errors.length === 1) {
346
- result.message = errors[0].message;
347
- } else {
340
+ if (Array.isArray(result)) {
341
+ if (u && f) {
342
+ const unmappedErrors = u.showFormError(f, result);
343
+ focusFirstError(f);
344
+ if (unmappedErrors && unmappedErrors.length > 0) {
345
+ const t = p1.resource.value('error');
348
346
  if (p1.ui && p1.ui.buildErrorMessage) {
349
- result.message = p1.ui.buildErrorMessage(unmappedErrors);
347
+ const msg = p1.ui.buildErrorMessage(unmappedErrors);
348
+ p1.showError(msg, t);
350
349
  } else {
351
- result.message = errors[0].message;
350
+ p1.showError(unmappedErrors[0].field + ' ' + unmappedErrors[0].code + ' ' + unmappedErrors[0].message, t);
352
351
  }
353
352
  }
354
- }
355
- if (result.message) {
353
+ } else {
356
354
  const t = p1.resource.value('error');
357
- p1.showError(result.message, t);
355
+ if (result.length > 0) {
356
+ p1.showError(result[0].field + ' ' + result[0].code + ' ' + result[0].message, t);
357
+ } else {
358
+ p1.showError(t, t);
359
+ }
360
+ }
361
+ } else {
362
+ const errors = result.errors;
363
+ if (errors && u) {
364
+ const unmappedErrors = u.showFormError(f, errors);
365
+ focusFirstError(f);
366
+ if (!result.message) {
367
+ if (errors && errors.length === 1) {
368
+ result.message = errors[0].message;
369
+ } else {
370
+ if (p1.ui && p1.ui.buildErrorMessage) {
371
+ result.message = p1.ui.buildErrorMessage(unmappedErrors);
372
+ } else {
373
+ result.message = errors[0].message;
374
+ }
375
+ }
376
+ }
377
+ if (result.message) {
378
+ const t = p1.resource.value('error');
379
+ p1.showError(result.message, t);
380
+ }
358
381
  }
359
382
  }
360
383
  };
@@ -367,7 +390,9 @@ export const useCoreEdit = <T, ID, S, P>(
367
390
  const successMsg = p1.resource.value('msg_save_success');
368
391
  const newMod = flag.newMode;
369
392
  const st = createEditStatus(p ? p.status : undefined);
370
- if (!isNaN(x)) {
393
+ if (Array.isArray(x)) {
394
+ fail(x);
395
+ } else if (!isNaN(x)) {
371
396
  if (x === st.success) {
372
397
  succeed(obj, successMsg, version, backOnSave);
373
398
  } else {
package/src/useSearch.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import {useEffect, useState} from 'react';
2
- import {error, getDecodeFromForm, getName, getRemoveError, getValidateForm, handleToggle, hideLoading, initForm, Locale, PageChange, pageSizes, removeFormError, ResourceService, SearchParameter, SearchResult, SearchService, showLoading} from './core';
2
+ import {error, getName, getRemoveError, getValidateForm, handleToggle, hideLoading, initForm, Locale, PageChange, pageSizes, removeFormError, ResourceService, SearchParameter, SearchResult, SearchService, showLoading} from './core';
3
3
  import {DispatchWithCallback, useMergeState} from './merge';
4
4
  import {clone} from './reflect';
5
5
  import {buildFromUrl} from './route';
@@ -196,7 +196,7 @@ export const useSearch = <T, S extends Filter, ST extends SearchComponentState<T
196
196
  const baseProps = useCoreSearch(refForm, initialState, service, p2, p);
197
197
 
198
198
  useEffect(() => {
199
- const { load, setState, component } = baseProps;
199
+ const { load, setState, component, searchError } = baseProps;
200
200
  if (refForm) {
201
201
  const registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
202
202
  initForm(refForm.current, registerEvents);
@@ -205,8 +205,12 @@ export const useSearch = <T, S extends Filter, ST extends SearchComponentState<T
205
205
  p.initialize(load, setState, component);
206
206
  } else {
207
207
  const se: S|undefined = (p && p.createFilter ? p.createFilter() : undefined);
208
- const s: any = mergeFilter2(buildFromUrl<S>(), se, component.pageSizes);
209
- load(s, p2.auto);
208
+ try {
209
+ const s: any = mergeFilter2(buildFromUrl<S>(), se, component.pageSizes);
210
+ load(s, p2.auto);
211
+ } catch (error) {
212
+ searchError(error);
213
+ }
210
214
  }
211
215
  // eslint-disable-next-line react-hooks/exhaustive-deps
212
216
  }, []);
@@ -272,9 +276,7 @@ export const useCoreSearch = <T, S extends Filter, ST>(
272
276
  if (!fs || fs.length <= 0) {
273
277
  fs = getFields();
274
278
  }
275
- const lc = (p1.getLocale ? p1.getLocale() : enLocale);
276
- const cc = getCurrencyCode();
277
- const obj3 = getModel<T, S>(state, n, se, fs, se.excluding, keys, se.list, refForm.current, getDecodeFromForm(p1), lc, cc);
279
+ const obj3 = getModel<T, S>(state, n, se, fs, se.excluding);
278
280
  return obj3;
279
281
  };
280
282
  const getFilter = p && p.getFilter ? p.getFilter : _getFilter;
@@ -295,7 +297,7 @@ export const useCoreSearch = <T, S extends Filter, ST>(
295
297
  const runSearch = doSearch;
296
298
  if (auto) {
297
299
  setTimeout(() => {
298
- runSearch(com, true);
300
+ runSearch((obj2 as Searchable<T>), true);
299
301
  }, 0);
300
302
  }
301
303
  };
@@ -420,6 +422,7 @@ export const useCoreSearch = <T, S extends Filter, ST>(
420
422
  const searchError = (err: any): void => {
421
423
  setComponent({ pageIndex: component.tmpPageIndex });
422
424
  error(err, p1.resource.value, p1.showError);
425
+ hideLoading(p1.loading)
423
426
  };
424
427
  const appendList = (p && p.appendList ? p.appendList : appendListOfState);
425
428
  const setList = (p && p.setList ? p.setList : setListOfState);
@@ -502,6 +505,7 @@ export const useCoreSearch = <T, S extends Filter, ST>(
502
505
  showResults,
503
506
  getFields,
504
507
  getModelName,
505
- format: p ? p.format : undefined
508
+ format: p ? p.format : undefined,
509
+ searchError
506
510
  };
507
511
  };
package/tsconfig.json CHANGED
@@ -16,7 +16,8 @@
16
16
  "lib": [
17
17
  "dom",
18
18
  "es6",
19
- "es7"
19
+ "es7",
20
+ "es2017"
20
21
  ]
21
22
  },
22
23
  "include": [