react-hook-core 0.0.1 → 0.1.3

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/src/useEdit.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import {useEffect, useState} from 'react';
2
+ import {RouteComponentProps} from 'react-router';
2
3
  import {clone, makeDiff} from 'reflectx';
3
- import {Attributes, buildId, createEditStatus, EditPermission, EditStatusConfig, getModelName as getModelName2, initForm, LoadingService, Locale, message, messageByHttpStatus, ModelProps, ResourceService, UIService} from './core';
4
+ import {Attributes, buildId, createEditStatus, EditStatusConfig, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, UIService} from './core';
4
5
  import {build, createModel as createModel2, EditParameter, GenericService, handleStatus, handleVersion, initPropertyNullInModel, ResultInfo} from './edit';
5
- import {focusFirstError, readOnly} from './formutil';
6
+ import {focusFirstError, readOnly as setReadOnly} from './formutil';
6
7
  import {DispatchWithCallback, useMergeState} from './merge';
7
8
  import {useRouter} from './router';
9
+ import {localeOf} from './state';
8
10
  import {useUpdate} from './update';
9
11
 
10
12
  function prepareData(data: any): void {
@@ -39,17 +41,18 @@ export interface BaseEditComponentParam<T, ID> {
39
41
  postSave?: (obj: T, res: number|ResultInfo<T>, version?: string, backOnSave?: boolean) => void;
40
42
  handleDuplicateKey?: (result?: ResultInfo<T>) => void;
41
43
  load?: (i: ID, callback?: (m: T, showM: (m2: T) => void) => void) => void;
42
- save?: (obj: T, diff?: T, version?: string, isBack?: boolean) => void;
44
+ doSave?: (obj: T, diff?: T, version?: string, isBack?: boolean) => void;
45
+ prepareCustomData?: (data: any) => void; // need to review
43
46
  }
44
47
  export interface HookBaseEditParameter<T, ID, S> extends BaseEditComponentParam<T, ID> {
45
48
  refForm: any;
46
49
  initialState: S;
47
50
  service: GenericService<T, ID, number|ResultInfo<T>>;
48
- resourceService: ResourceService;
51
+ resource: ResourceService;
49
52
  showMessage: (msg: string) => void;
50
53
  showError: (m: string, header?: string, detail?: string, callback?: () => void) => void;
51
54
  getLocale?: () => Locale;
52
- confirm: (m2: string, header: string, yesCallback?: () => void, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void;
55
+ confirm: (m2: string, header?: string, yesCallback?: () => void, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void;
53
56
  ui?: UIService;
54
57
  loading?: LoadingService;
55
58
  }
@@ -57,165 +60,82 @@ export interface EditComponentParam<T, ID, S> extends BaseEditComponentParam<T,
57
60
  initialize?: (id: ID, ld: (i: ID, cb?: (m: T, showF: (model: T) => void) => void) => void, setState2: DispatchWithCallback<Partial<S>>, callback?: (m: T, showF: (model: T) => void) => void) => void;
58
61
  callback?: (m: T, showF: (model: T) => void) => void;
59
62
  }
60
- export interface HookPropsEditParameter<T, ID, S, P extends ModelProps> extends HookPropsBaseEditParameter<T, ID, S, P> {
63
+ export interface HookPropsEditParameter<T, ID, S, P extends RouteComponentProps> extends HookPropsBaseEditParameter<T, ID, S, P> {
61
64
  initialize?: (id: ID, ld: (i: ID, cb?: (m: T, showF: (model: T) => void) => void) => void, setState2: DispatchWithCallback<Partial<S>>, callback?: (m: T, showF: (model: T) => void) => void) => void;
62
65
  callback?: (m: T, showF: (model: T) => void) => void;
63
66
  }
64
- export interface HookPropsBaseEditParameter<T, ID, S, P extends ModelProps> extends HookBaseEditParameter<T, ID, S> {
65
- props?: P;
67
+ export interface HookPropsBaseEditParameter<T, ID, S, P extends RouteComponentProps> extends HookBaseEditParameter<T, ID, S> {
68
+ props: P;
66
69
  prepareCustomData?: (data: any) => void;
67
70
  }
68
- export const useBaseEdit = <T, ID, S>(
71
+ export const useEdit = <T, ID, S>(
69
72
  refForm: any,
70
73
  initialState: S,
71
74
  service: GenericService<T, ID, number|ResultInfo<T>>,
72
75
  p1: EditParameter,
73
76
  p2?: BaseEditComponentParam<T, ID>
74
77
  ) => {
75
- return useBaseEditWithProps(null, refForm, initialState, service, p1, p2);
78
+ return useCoreEdit(undefined, refForm, initialState, service, p1, p2);
76
79
  };
77
- export const useBaseEditWithProps = <T, ID, S, P extends ModelProps>(
80
+ export const useEditProps = <T, ID, S, P extends RouteComponentProps>(
78
81
  props: P,
79
82
  refForm: any,
80
83
  initialState: S,
81
84
  service: GenericService<T, ID, number|ResultInfo<T>>,
82
- p1: EditParameter,
83
- p2?: BaseEditComponentParam<T, ID>,
84
- p3?: EditPermission
85
- ) => {
86
- const p4: BaseEditComponentParam<T, ID> = (p2 ? p2 : {} as any);
87
- const p: HookPropsBaseEditParameter<T, ID, S, P> = {
88
- props,
89
- refForm,
90
- initialState,
91
- service,
92
- status: p1.status,
93
- resourceService: p1.resource,
94
- showMessage: p1.showMessage,
95
- showError: p1.showError,
96
- confirm: p1.confirm,
97
- ui: p1.ui,
98
- getLocale: p1.getLocale,
99
- loading: p1.loading,
100
- backOnSuccess: p4.backOnSuccess,
101
- metadata: p4.metadata,
102
- keys: p4.keys,
103
- version: p4.version,
104
- setBack: p4.setBack,
105
- patchable: p4.patchable,
106
- addable: p4.addable,
107
- readOnly: p4.readOnly,
108
- handleNotFound: p4.handleNotFound,
109
- getModelName: p4.getModelName,
110
- getModel: p4.getModel,
111
- showModel: p4.showModel,
112
- createModel: p4.createModel,
113
- onSave: p4.onSave,
114
- validate: p4.validate,
115
- succeed: p4.succeed,
116
- fail: p4.fail,
117
- postSave: p4.postSave,
118
- handleDuplicateKey: p4.handleDuplicateKey,
119
- load: p4.load,
120
- save: p4.save
121
- };
122
- const per: EditPermission = (p3 ? p3 : p2);
123
- if (per) {
124
- p.addable = per.addable;
125
- p.readOnly = per.readOnly;
126
- p.deletable = per.deletable;
127
- }
128
- return useBaseEditOneWithProps(p);
129
- };
130
- export const useEdit = <T, ID, S, P extends ModelProps>(
131
- props: P,
132
- refForm: any,
133
- initialState: S,
134
- service: GenericService<T, ID, number|ResultInfo<T>>,
135
- p1: EditComponentParam<T, ID, S>,
136
85
  p2: EditParameter,
137
- p3?: EditPermission
86
+ p?: EditComponentParam<T, ID, S>
138
87
  ) => {
139
- const p4: EditComponentParam<T, ID, S> = (p1 ? p1 : {} as any);
140
- const p: HookPropsEditParameter<T, ID, S, P> = {
141
- props,
142
- refForm,
143
- initialize: p4.initialize,
144
- callback: p4.callback,
145
- initialState,
146
- service,
147
- status: p2.status,
148
- resourceService: p2.resource,
149
- showMessage: p2.showMessage,
150
- showError: p2.showError,
151
- confirm: p2.confirm,
152
- ui: p2.ui,
153
- getLocale: p2.getLocale,
154
- loading: p2.loading,
155
- backOnSuccess: p4.backOnSuccess,
156
- metadata: p4.metadata,
157
- keys: p4.keys,
158
- version: p4.version,
159
- setBack: p4.setBack,
160
- patchable: p4.patchable,
161
- addable: p4.addable,
162
- readOnly: p4.readOnly,
163
- handleNotFound: p4.handleNotFound,
164
- getModelName: p4.getModelName,
165
- getModel: p4.getModel,
166
- showModel: p4.showModel,
167
- createModel: p4.createModel,
168
- onSave: p4.onSave,
169
- validate: p4.validate,
170
- succeed: p4.succeed,
171
- fail: p4.fail,
172
- postSave: p4.postSave,
173
- handleDuplicateKey: p4.handleDuplicateKey,
174
- load: p4.load,
175
- save: p4.save
176
- };
177
- const per: EditPermission = (p3 ? p3 : p1);
178
- if (per) {
179
- p.addable = per.addable;
180
- p.readOnly = per.readOnly;
181
- p.deletable = per.deletable;
182
- }
183
- return useEditOne(p);
184
- };
185
- export const useEditOne = <T, ID, S, P extends ModelProps>(p: HookPropsEditParameter<T, ID, S, P>) => {
186
- const baseProps = useBaseEditOneWithProps(p);
88
+ const baseProps = useCoreEdit<T, ID, S, P>(props, refForm, initialState, service, p2, p);
187
89
  useEffect(() => {
188
- if (baseProps.refForm) {
189
- const registerEvents = (baseProps.ui ? baseProps.ui.registerEvents : null);
90
+ if (refForm) {
91
+ const registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
190
92
  initForm(baseProps.refForm.current, registerEvents);
191
93
  }
192
- const n = baseProps.getModelName(p.refForm.current);
94
+ const n = baseProps.getModelName(refForm.current);
193
95
  const obj: any = {};
194
96
  obj[n] = baseProps.createNewModel();
195
97
  baseProps.setState(obj);
196
- if (!p.keys && p.service && p.service.metadata) {
197
- const metadata = (p.metadata ? p.metadata : p.service.metadata());
98
+ let keys: string[]|undefined;
99
+ if (p && !p.keys && service && service.metadata) {
100
+ const metadata = (p.metadata ? p.metadata : service.metadata());
198
101
  const meta = build(metadata);
199
- const keys = (p.keys ? p.keys : (meta ? meta.keys : null));
200
- const version = (p.version ? p.version : (meta ? meta.version : null));
102
+ keys = (p.keys ? p.keys : (meta ? meta.keys : undefined));
103
+ const version = (p.version ? p.version : (meta ? meta.version : undefined));
201
104
  p.keys = keys;
202
105
  p.version = version;
203
106
  }
204
- const id = buildId<ID>(p.props, p.keys);
205
- if (p && p.initialize) {
206
- p.initialize(id, baseProps.load, baseProps.setState, p.callback);
207
- } else {
208
- baseProps.load(id, p.callback);
107
+ const id = buildId<ID>(props, keys);
108
+ if (id) {
109
+ if (p && p.initialize) {
110
+ p.initialize(id, baseProps.load, baseProps.setState, p.callback);
111
+ } else {
112
+ baseProps.load(id, p ? p.callback : undefined);
113
+ }
209
114
  }
210
115
  }, []);
211
116
  return {...baseProps};
212
117
  };
213
- export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookPropsBaseEditParameter<T, ID, S, P>) => {
118
+ export const useEditOneProps = <T, ID, S, P extends RouteComponentProps>(p: HookPropsEditParameter<T, ID, S, P>) => {
119
+ return useEditProps(p.props, p.refForm, p.initialState, p.service, p, p);
120
+ };
121
+ export const useEditOne = <T, ID, S>(p: HookBaseEditParameter<T, ID, S>) => {
122
+ return useEdit(p.refForm, p.initialState, p.service, p, p);
123
+ };
124
+ export const useCoreEdit = <T, ID, S, P>(
125
+ props: P|undefined,
126
+ refForm: any,
127
+ initialState: S,
128
+ service: GenericService<T, ID, number|ResultInfo<T>>,
129
+ p1: EditParameter,
130
+ p?: BaseEditComponentParam<T, ID>
131
+ ) => {
132
+ /*
214
133
  const {
215
134
  backOnSuccess = true,
216
135
  patchable = true,
217
136
  addable = true
218
- } = p;
137
+ } = p; */
138
+ const addable = (p && p.patchable !== false ? true : undefined);
219
139
  const {goBack} = useRouter();
220
140
  const back = (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
221
141
  if (event) {
@@ -224,22 +144,23 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
224
144
  goBack();
225
145
  };
226
146
 
227
- const [running, setRunning] = useState(undefined);
228
- const baseProps = useUpdate<S>(p.initialState, p.getLocale);
147
+ const [running, setRunning] = useState<boolean>();
229
148
 
230
- const getModelName = (f?: HTMLFormElement) => {
231
- if (p.name && p.name.length > 0) {
149
+ const getModelName = (f?: HTMLFormElement|null): string => {
150
+ if (p && p.name && p.name.length > 0) {
232
151
  return p.name;
233
152
  }
234
153
  return getModelName2(f);
235
154
  };
236
- const prepareCustomData = (p.prepareCustomData ? p.prepareCustomData : prepareData);
155
+ const baseProps = useUpdate<S>(initialState, getModelName, p1.getLocale);
156
+
157
+ const prepareCustomData = (p && p.prepareCustomData ? p.prepareCustomData : prepareData);
237
158
  const updateDateState = (name: string, value: any) => {
238
- const modelName = getModelName(p.refForm.current);
239
- const currentState = state[modelName];
240
- if (p.props && p.props.setGlobalState) {
241
- const data = p.props.shouldBeCustomized ? prepareCustomData({ [name]: value }) : { [name]: value };
242
- p.props.setGlobalState({ [modelName]: { ...currentState, ...data } });
159
+ const modelName = getModelName(refForm.current);
160
+ const currentState = (state as any)[modelName];
161
+ if (props && (props as any).setGlobalState) {
162
+ const data = (props as any).shouldBeCustomized ? prepareCustomData({ [name]: value }) : { [name]: value };
163
+ (props as any).setGlobalState({ [modelName]: { ...currentState, ...data } });
243
164
  } else {
244
165
  setState({[modelName]: {...currentState, [name]: value}} as T);
245
166
  }
@@ -250,47 +171,47 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
250
171
  newMode: false,
251
172
  setBack: false,
252
173
  addable,
253
- readOnly,
174
+ readOnly: p ? p.readOnly : undefined,
254
175
  originalModel: undefined
255
176
  });
256
177
 
257
178
  const showModel = (model: T) => {
258
- const n = getModelName(p.refForm.current);
179
+ const n = getModelName(refForm.current);
259
180
  const objSet: any = {};
260
181
  objSet[n] = model;
261
182
  setState(objSet);
262
- if (p.readOnly) {
263
- const f = p.refForm.current;
264
- readOnly(f);
183
+ if (p && p.readOnly) {
184
+ const f = refForm.current;
185
+ setReadOnly(f);
265
186
  }
266
187
  };
267
188
 
268
- const resetState = (newMode: boolean, model: T, originalModel: T) => {
269
- setFlag({ newMode, originalModel });
189
+ const resetState = (newMode: boolean, model: T, originalModel?: T) => {
190
+ setFlag({ newMode, originalModel } as any);
270
191
  showModel(model);
271
192
  };
272
193
 
273
194
  const _handleNotFound = (form?: any): void => {
274
- const msg = message(p.resourceService.value, 'error_not_found', 'error');
195
+ const msg = message(p1.resource.value, 'error_not_found', 'error');
275
196
  if (form) {
276
- readOnly(form);
197
+ setReadOnly(form);
277
198
  }
278
- p.showError(msg.message, msg.title);
199
+ p1.showError(msg.message, msg.title);
279
200
  };
280
- const handleNotFound = (p.handleNotFound ? p.handleNotFound : _handleNotFound);
201
+ const handleNotFound = (p && p.handleNotFound ? p.handleNotFound : _handleNotFound);
281
202
 
282
203
  const _getModel = () => {
283
- const n = getModelName(p.refForm.current);
284
- if (p.props) {
285
- return p.props[n] || state[n];
204
+ const n = getModelName(refForm.current);
205
+ if (props) {
206
+ return (props as any)[n] || (state as any)[n];
286
207
  } else {
287
- return state[n];
208
+ return (state as any)[n];
288
209
  }
289
210
  };
290
- const getModel = (p.getModel ? p.getModel : _getModel);
211
+ const getModel = (p && p.getModel ? p.getModel : _getModel);
291
212
 
292
213
  const _createModel = (): T => {
293
- const metadata = (p.metadata ? p.metadata : p.service.metadata());
214
+ const metadata = (p && p.metadata ? p.metadata : (service.metadata ? service.metadata() : undefined));
294
215
  if (metadata) {
295
216
  const obj = createModel2<T>(metadata);
296
217
  return obj;
@@ -299,75 +220,76 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
299
220
  return obj;
300
221
  }
301
222
  };
302
- const createModel = (p.createModel ? p.createModel : _createModel);
223
+ const createModel = (p && p.createModel ? p.createModel : _createModel);
303
224
 
304
- const newOnClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
225
+ const create = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
305
226
  event.preventDefault();
306
227
  const obj = createModel();
307
- resetState(true, obj, null);
308
- if (p.ui) {
228
+ resetState(true, obj, undefined);
229
+ const u = p1.ui;
230
+ if (u) {
309
231
  setTimeout(() => {
310
- p.ui.removeFormError(p.refForm.current);
232
+ u.removeFormError(refForm.current);
311
233
  }, 100);
312
234
  }
313
235
  };
314
236
 
315
237
  const _onSave = (isBack?: boolean) => {
316
238
  if (flag.newMode === true && flag.addable === false) {
317
- const m = message(p.resourceService.value, 'error_permission_add', 'error_permission');
318
- p.showError(m.message, m.title);
239
+ const m = message(p1.resource.value, 'error_permission_add', 'error_permission');
240
+ p1.showError(m.message, m.title);
319
241
  return;
320
- } else if (flag.newMode === false && p.readOnly) {
321
- const msg = message(p.resourceService.value, 'error_permission_edit', 'error_permission');
322
- p.showError(msg.message, msg.title);
242
+ } else if (p && flag.newMode === false && p.readOnly) {
243
+ const msg = message(p1.resource.value, 'error_permission_edit', 'error_permission');
244
+ p1.showError(msg.message, msg.title);
323
245
  return;
324
246
  } else {
325
247
  if (running === true) {
326
248
  return;
327
249
  }
328
250
  const obj = getModel();
329
- const metadata = (p.metadata ? p.metadata : p.service.metadata());
330
- if ((!p.keys || !p.version) && p.service && p.service.metadata) {
251
+ const metadata = (p && p.metadata ? p.metadata : (service.metadata ? service.metadata() : undefined));
252
+ let keys: string[]|undefined;
253
+ let version: string|undefined;
254
+ if (p && metadata && (!p.keys || !p.version)) {
331
255
  const meta = build(metadata);
332
- const keys = (p.keys ? p.keys : (meta ? meta.keys : null));
333
- const version = (p.version ? p.version : (meta ? meta.version : null));
334
- p.keys = keys;
335
- p.version = version;
256
+ keys = (p.keys ? p.keys : (meta ? meta.keys : undefined));
257
+ version = (p.version ? p.version : (meta ? meta.version : undefined));
336
258
  }
337
259
  if (flag.newMode) {
338
260
  validate(obj, () => {
339
- const msg = message(p.resourceService.value, 'msg_confirm_save', 'confirm', 'yes', 'no');
340
- p.confirm(msg.message, msg.title, () => {
341
- save(obj, null, p.version, isBack);
261
+ const msg = message(p1.resource.value, 'msg_confirm_save', 'confirm', 'yes', 'no');
262
+ p1.confirm(msg.message, msg.title, () => {
263
+ doSave(obj, undefined, version, isBack);
342
264
  }, msg.no, msg.yes);
343
265
  });
344
266
  } else {
345
- const diffObj = makeDiff(initPropertyNullInModel(flag.originalModel, metadata), obj, p.keys, p.version);
267
+ const diffObj = makeDiff(initPropertyNullInModel(flag.originalModel, metadata), obj, keys, version);
346
268
  const objKeys = Object.keys(diffObj);
347
269
  if (objKeys.length === 0) {
348
- p.showMessage(p.resourceService.value('msg_no_change'));
270
+ p1.showMessage(p1.resource.value('msg_no_change'));
349
271
  } else {
350
272
  validate(obj, () => {
351
- const msg = message(p.resourceService.value, 'msg_confirm_save', 'confirm', 'yes', 'no');
352
- p.confirm(msg.message, msg.title, () => {
353
- save(obj, diffObj, p.version, isBack);
273
+ const msg = message(p1.resource.value, 'msg_confirm_save', 'confirm', 'yes', 'no');
274
+ p1.confirm(msg.message, msg.title, () => {
275
+ doSave(obj, diffObj, version, isBack);
354
276
  }, msg.no, msg.yes);
355
277
  });
356
278
  }
357
279
  }
358
280
  }
359
281
  };
360
- const onSave = (p.onSave ? p.onSave : _onSave);
282
+ const onSave = (p && p.onSave ? p.onSave : _onSave);
361
283
 
362
- const saveOnClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
284
+ const save = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
363
285
  event.preventDefault();
364
286
  event.persist();
365
- onSave(backOnSuccess);
287
+ onSave();
366
288
  };
367
289
 
368
290
  const _validate = (obj: T, callback: (obj2?: T) => void) => {
369
- if (p.ui) {
370
- const valid = p.ui.validateForm(p.refForm.current, p.getLocale());
291
+ if (p1.ui) {
292
+ const valid = p1.ui.validateForm(refForm.current, localeOf(undefined, p1.getLocale));
371
293
  if (valid) {
372
294
  callback(obj);
373
295
  }
@@ -375,7 +297,7 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
375
297
  callback(obj);
376
298
  }
377
299
  };
378
- const validate = (p.validate ? p.validate : _validate);
300
+ const validate = (p && p.validate ? p.validate : _validate);
379
301
 
380
302
  const _succeed = (obj: T, msg: string, version?: string, isBack?: boolean, result?: ResultInfo<T>) => {
381
303
  if (result) {
@@ -389,44 +311,46 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
389
311
  } else {
390
312
  handleVersion(obj, version);
391
313
  }
392
- const isBackO = (isBack == null || isBack === undefined ? backOnSuccess : isBack);
393
- p.showMessage(msg);
394
- if (isBackO) {
395
- back(null);
314
+ p1.showMessage(msg);
315
+ if (isBack) {
316
+ back(undefined);
396
317
  }
397
318
  };
398
- const succeed = (p.succeed ? p.succeed : _succeed);
319
+ const succeed = (p && p.succeed ? p.succeed : _succeed);
399
320
 
400
321
  const _fail = (result: ResultInfo<T>) => {
401
322
  const errors = result.errors;
402
- const f = p.refForm.current;
403
- const unmappedErrors = p.ui.showFormError(f, errors);
404
- focusFirstError(f);
405
- if (!result.message) {
406
- if (errors && errors.length === 1) {
407
- result.message = errors[0].message;
408
- } else {
409
- if (p.ui && p.ui.buildErrorMessage) {
410
- result.message = p.ui.buildErrorMessage(unmappedErrors);
411
- } else {
323
+ const f = refForm.current;
324
+ const u = p1.ui;
325
+ if (errors && u) {
326
+ const unmappedErrors = u.showFormError(f, errors);
327
+ focusFirstError(f);
328
+ if (!result.message) {
329
+ if (errors && errors.length === 1) {
412
330
  result.message = errors[0].message;
331
+ } else {
332
+ if (p1.ui && p1.ui.buildErrorMessage) {
333
+ result.message = p1.ui.buildErrorMessage(unmappedErrors);
334
+ } else {
335
+ result.message = errors[0].message;
336
+ }
413
337
  }
414
338
  }
339
+ if (result.message) {
340
+ const t = p1.resource.value('error');
341
+ p1.showError(result.message, t);
342
+ }
415
343
  }
416
- const t = p.resourceService.value('error');
417
- p.showError(result.message, t);
418
344
  };
419
- const fail = (p.fail ? p.fail : _fail);
345
+ const fail = (p && p.fail ? p.fail : _fail);
420
346
 
421
347
  const _postSave = (obj: T, res: number | ResultInfo<T>, version?: string, backOnSave?: boolean) => {
422
348
  setRunning(false);
423
- if (p.loading) {
424
- p.loading.hideLoading();
425
- }
349
+ hideLoading(p1.loading);
426
350
  const x: any = res;
427
- const successMsg = p.resourceService.value('msg_save_success');
351
+ const successMsg = p1.resource.value('msg_save_success');
428
352
  const newMod = flag.newMode;
429
- const st = createEditStatus(p.status);
353
+ const st = createEditStatus(p ? p.status : undefined);
430
354
  if (!isNaN(x)) {
431
355
  if (x === st.success) {
432
356
  succeed(obj, successMsg, version, backOnSave);
@@ -436,14 +360,14 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
436
360
  } else if (!newMod && x === st.not_found) {
437
361
  handleNotFound();
438
362
  } else {
439
- handleStatus(x as number, st, p.resourceService.value, p.showError);
363
+ handleStatus(x as number, st, p1.resource.value, p1.showError);
440
364
  }
441
365
  }
442
366
  } else {
443
367
  const result: ResultInfo<any> = x;
444
368
  if (result.status === st.success) {
445
369
  succeed(obj, successMsg, version, backOnSave, result);
446
- p.showMessage(successMsg);
370
+ p1.showMessage(successMsg);
447
371
  } else if (result.errors && result.errors.length > 0) {
448
372
  fail(result);
449
373
  } else if (newMod && result.status === st.duplicate_key) {
@@ -451,45 +375,43 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
451
375
  } else if (!newMod && x === st.not_found) {
452
376
  handleNotFound();
453
377
  } else {
454
- handleStatus(result.status, st, p.resourceService.value, p.showError);
378
+ handleStatus(result.status, st, p1.resource.value, p1.showError);
455
379
  }
456
380
  }
457
381
  };
458
- const postSave = (p.postSave ? p.postSave : _postSave);
382
+ const postSave = (p && p.postSave ? p.postSave : _postSave);
459
383
 
460
384
  const _handleDuplicateKey = (result?: ResultInfo<any>) => {
461
- const msg = message(p.resourceService.value, 'error_duplicate_key', 'error');
462
- p.showError(msg.message, msg.title);
385
+ const msg = message(p1.resource.value, 'error_duplicate_key', 'error');
386
+ p1.showError(msg.message, msg.title);
463
387
  };
464
- const handleDuplicateKey = (p.handleDuplicateKey ? p.handleDuplicateKey : _handleDuplicateKey);
388
+ const handleDuplicateKey = (p && p.handleDuplicateKey ? p.handleDuplicateKey : _handleDuplicateKey);
465
389
 
466
- const _save = async (obj: T, body?: T, version?: string, isBack?: boolean) => {
390
+ const _doSave = (obj: T, body?: T, version?: string, isBack?: boolean) => {
467
391
  setRunning(true);
468
- p.loading.showLoading();
469
- const isBackO = (isBack == null || isBack === undefined ? backOnSuccess : isBack);
392
+ showLoading(p1.loading);
393
+ const isBackO = (isBack == null || isBack === undefined ? true : isBack);
394
+ const patchable = (p ? p.patchable : true);
470
395
  if (flag.newMode === false) {
471
- if (patchable === true && body && Object.keys(body).length > 0) {
472
- const result = await p.service.patch(body);
473
- postSave(obj, result, version, isBackO);
396
+ if (service.patch && patchable !== false && body && Object.keys(body).length > 0) {
397
+ service.patch(body).then(result => postSave(obj, result, version, isBackO));
474
398
  } else {
475
- const result = await p.service.update(obj);
476
- postSave(obj, result, version, isBackO);
399
+ service.update(obj).then(result => postSave(obj, result, version, isBackO));
477
400
  }
478
401
  } else {
479
- const result = await p.service.insert(obj);
480
- postSave(obj, result, version, isBackO);
402
+ service.insert(obj).then(result => postSave(obj, result, version, isBackO));
481
403
  }
482
404
  };
483
- const save = (p.save ? p.save : _save);
405
+ const doSave = (p && p.doSave ? p.doSave : _doSave);
484
406
 
485
- const _load = async (_id: ID, callback?: (m: T, showM: (m2: T) => void) => void) => {
407
+ const _load = (_id: ID, callback?: (m: T, showM: (m2: T) => void) => void) => {
486
408
  const id: any = _id;
487
- debugger;
488
409
  if (id != null && id !== '') {
489
- try {
490
- const obj = await p.service.load(id);
410
+ setRunning(true);
411
+ showLoading(p1.loading);
412
+ service.load(id).then(obj => {
491
413
  if (!obj) {
492
- handleNotFound(p.refForm.current);
414
+ handleNotFound(refForm.current);
493
415
  } else {
494
416
  setFlag({ newMode: false, originalModel: clone(obj) });
495
417
  if (callback) {
@@ -498,31 +420,30 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
498
420
  showModel(obj);
499
421
  }
500
422
  }
501
- } catch (err) {
423
+ setRunning(false);
424
+ hideLoading(p1.loading);
425
+ }).catch(err => {
502
426
  const data = (err && err.response) ? err.response : err;
503
- const r = p.resourceService;
427
+ const r = p1.resource;
504
428
  const title = r.value('error');
505
429
  let msg = r.value('error_internal');
506
430
  if (data && data.status === 404) {
507
- handleNotFound(p.refForm.current);
431
+ handleNotFound(refForm.current);
508
432
  } else {
509
433
  if (data.status && !isNaN(data.status)) {
510
434
  msg = messageByHttpStatus(data.status, r.value);
511
435
  }
512
436
  if (data && (data.status === 401 || data.status === 403)) {
513
- readOnly(p.refForm.current);
437
+ setReadOnly(refForm.current);
514
438
  }
515
- p.showError(msg, title);
439
+ p1.showError(msg, title);
516
440
  }
517
- } finally {
518
441
  setRunning(false);
519
- if (p.loading) {
520
- p.loading.hideLoading();
521
- }
522
- }
442
+ hideLoading(p1.loading);
443
+ });
523
444
  } else {
524
445
  const obj = createModel();
525
- setFlag({ newMode: true, originalModel: null });
446
+ setFlag({ newMode: true, originalModel: undefined });
526
447
  if (callback) {
527
448
  callback(obj, showModel);
528
449
  } else {
@@ -530,14 +451,14 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
530
451
  }
531
452
  }
532
453
  };
533
- const load = (p.load ? p.load : _load);
454
+ const load = (p && p.load ? p.load : _load);
534
455
 
535
456
  return {
536
457
  ...baseProps,
537
458
  back,
538
- refForm: p.refForm,
539
- ui: p.ui,
540
- resource: p.resourceService.resource(),
459
+ refForm,
460
+ ui: p1.ui,
461
+ resource: p1.resource.resource(),
541
462
  flag,
542
463
  running,
543
464
  setRunning,
@@ -548,17 +469,17 @@ export const useBaseEditOneWithProps = <T, ID, S, P extends ModelProps>(p: HookP
548
469
  handleNotFound,
549
470
  getModel,
550
471
  createNewModel: createModel,
551
- newOnClick,
552
- saveOnClick,
472
+ newOnClick: create,
473
+ save,
553
474
  onSave,
554
475
  confirm,
555
476
  validate,
556
- showMessage: p.showMessage,
477
+ showMessage: p1.showMessage,
557
478
  succeed,
558
479
  fail,
559
480
  postSave,
560
481
  handleDuplicateKey,
561
482
  load,
562
- save
483
+ doSave
563
484
  };
564
485
  };