react-hook-core 0.1.3 → 0.1.6

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,17 +1,13 @@
1
1
  import {useEffect, useState} from 'react';
2
- import {RouteComponentProps} from 'react-router';
3
- import {clone, makeDiff} from 'reflectx';
2
+ import {useNavigate, useParams} from 'react-router';
4
3
  import {Attributes, buildId, createEditStatus, EditStatusConfig, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, UIService} from './core';
5
4
  import {build, createModel as createModel2, EditParameter, GenericService, handleStatus, handleVersion, initPropertyNullInModel, ResultInfo} from './edit';
6
5
  import {focusFirstError, readOnly as setReadOnly} from './formutil';
7
6
  import {DispatchWithCallback, useMergeState} from './merge';
8
- import {useRouter} from './router';
7
+ import {clone, makeDiff} from './reflect';
9
8
  import {localeOf} from './state';
10
9
  import {useUpdate} from './update';
11
10
 
12
- function prepareData(data: any): void {
13
- }
14
-
15
11
  export interface BaseEditComponentParam<T, ID> {
16
12
  status?: EditStatusConfig;
17
13
  backOnSuccess?: boolean;
@@ -40,9 +36,9 @@ export interface BaseEditComponentParam<T, ID> {
40
36
  fail?: (result: ResultInfo<T>) => void;
41
37
  postSave?: (obj: T, res: number|ResultInfo<T>, version?: string, backOnSave?: boolean) => void;
42
38
  handleDuplicateKey?: (result?: ResultInfo<T>) => void;
43
- load?: (i: ID, callback?: (m: T, showM: (m2: T) => void) => void) => void;
39
+ load?: (i: ID|null, callback?: (m: T, showM: (m2: T) => void) => void) => void;
44
40
  doSave?: (obj: T, diff?: T, version?: string, isBack?: boolean) => void;
45
- prepareCustomData?: (data: any) => void; // need to review
41
+ // prepareCustomData?: (data: any) => void; // need to review
46
42
  }
47
43
  export interface HookBaseEditParameter<T, ID, S> extends BaseEditComponentParam<T, ID> {
48
44
  refForm: any;
@@ -57,27 +53,57 @@ export interface HookBaseEditParameter<T, ID, S> extends BaseEditComponentParam<
57
53
  loading?: LoadingService;
58
54
  }
59
55
  export interface EditComponentParam<T, ID, S> extends BaseEditComponentParam<T, ID> {
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;
56
+ initialize?: (id: ID|null, ld: (i: ID|null, cb?: (m: T, showF: (model: T) => void) => void) => void, setState2: DispatchWithCallback<Partial<S>>, callback?: (m: T, showF: (model: T) => void) => void) => void;
61
57
  callback?: (m: T, showF: (model: T) => void) => void;
62
58
  }
63
- export interface HookPropsEditParameter<T, ID, S, P extends RouteComponentProps> extends HookPropsBaseEditParameter<T, ID, S, P> {
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;
59
+ export interface HookPropsEditParameter<T, ID, S, P> extends HookPropsBaseEditParameter<T, ID, S, P> {
60
+ initialize?: (id: ID|null, ld: (i: ID|null, cb?: (m: T, showF: (model: T) => void) => void) => void, setState2: DispatchWithCallback<Partial<S>>, callback?: (m: T, showF: (model: T) => void) => void) => void;
65
61
  callback?: (m: T, showF: (model: T) => void) => void;
66
62
  }
67
- export interface HookPropsBaseEditParameter<T, ID, S, P extends RouteComponentProps> extends HookBaseEditParameter<T, ID, S> {
63
+ export interface HookPropsBaseEditParameter<T, ID, S, P> extends HookBaseEditParameter<T, ID, S> {
68
64
  props: P;
69
- prepareCustomData?: (data: any) => void;
65
+ // prepareCustomData?: (data: any) => void;
70
66
  }
71
67
  export const useEdit = <T, ID, S>(
72
68
  refForm: any,
73
69
  initialState: S,
74
70
  service: GenericService<T, ID, number|ResultInfo<T>>,
75
- p1: EditParameter,
76
- p2?: BaseEditComponentParam<T, ID>
71
+ p2: EditParameter,
72
+ p?: EditComponentParam<T, ID, S>
77
73
  ) => {
78
- return useCoreEdit(undefined, refForm, initialState, service, p1, p2);
74
+ const params = useParams();
75
+ const baseProps = useCoreEdit(refForm, initialState, service, p2, p);
76
+ useEffect(() => {
77
+ if (refForm) {
78
+ const registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
79
+ initForm(baseProps.refForm.current, registerEvents);
80
+ }
81
+ const n = baseProps.getModelName(refForm.current);
82
+ const obj: any = {};
83
+ obj[n] = baseProps.createNewModel();
84
+ baseProps.setState(obj);
85
+ let keys: string[]|undefined;
86
+ if (p && !p.keys && service && service.metadata) {
87
+ const metadata = (p.metadata ? p.metadata : service.metadata());
88
+ if (metadata) {
89
+ const meta = build(metadata);
90
+ keys = (p.keys ? p.keys : (meta ? meta.keys : undefined));
91
+ const version = (p.version ? p.version : (meta ? meta.version : undefined));
92
+ p.keys = keys;
93
+ p.version = version;
94
+ }
95
+ }
96
+ const id = buildId<ID>(params, keys);
97
+ if (p && p.initialize) {
98
+ p.initialize(id, baseProps.load, baseProps.setState, p.callback);
99
+ } else {
100
+ baseProps.load(id, p ? p.callback : undefined);
101
+ }
102
+ // eslint-disable-next-line react-hooks/exhaustive-deps
103
+ }, []);
104
+ return {...baseProps};
79
105
  };
80
- export const useEditProps = <T, ID, S, P extends RouteComponentProps>(
106
+ export const useEditProps = <T, ID, S, P>(
81
107
  props: P,
82
108
  refForm: any,
83
109
  initialState: S,
@@ -85,7 +111,8 @@ export const useEditProps = <T, ID, S, P extends RouteComponentProps>(
85
111
  p2: EditParameter,
86
112
  p?: EditComponentParam<T, ID, S>
87
113
  ) => {
88
- const baseProps = useCoreEdit<T, ID, S, P>(props, refForm, initialState, service, p2, p);
114
+ const params = useParams();
115
+ const baseProps = useCoreEdit<T, ID, S, P>(refForm, initialState, service, p2, p, props);
89
116
  useEffect(() => {
90
117
  if (refForm) {
91
118
  const registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
@@ -98,36 +125,37 @@ export const useEditProps = <T, ID, S, P extends RouteComponentProps>(
98
125
  let keys: string[]|undefined;
99
126
  if (p && !p.keys && service && service.metadata) {
100
127
  const metadata = (p.metadata ? p.metadata : service.metadata());
101
- const meta = build(metadata);
102
- keys = (p.keys ? p.keys : (meta ? meta.keys : undefined));
103
- const version = (p.version ? p.version : (meta ? meta.version : undefined));
104
- p.keys = keys;
105
- p.version = version;
106
- }
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);
128
+ if (metadata) {
129
+ const meta = build(metadata);
130
+ keys = (p.keys ? p.keys : (meta ? meta.keys : undefined));
131
+ const version = (p.version ? p.version : (meta ? meta.version : undefined));
132
+ p.keys = keys;
133
+ p.version = version;
113
134
  }
114
135
  }
136
+ const id = buildId<ID>(params, keys);
137
+ if (p && p.initialize) {
138
+ p.initialize(id, baseProps.load, baseProps.setState, p.callback);
139
+ } else {
140
+ baseProps.load(id, p ? p.callback : undefined);
141
+ }
142
+ // eslint-disable-next-line react-hooks/exhaustive-deps
115
143
  }, []);
116
144
  return {...baseProps};
117
145
  };
118
- export const useEditOneProps = <T, ID, S, P extends RouteComponentProps>(p: HookPropsEditParameter<T, ID, S, P>) => {
146
+ export const useEditOneProps = <T, ID, S, P>(p: HookPropsEditParameter<T, ID, S, P>) => {
119
147
  return useEditProps(p.props, p.refForm, p.initialState, p.service, p, p);
120
148
  };
121
149
  export const useEditOne = <T, ID, S>(p: HookBaseEditParameter<T, ID, S>) => {
122
150
  return useEdit(p.refForm, p.initialState, p.service, p, p);
123
151
  };
124
152
  export const useCoreEdit = <T, ID, S, P>(
125
- props: P|undefined,
126
153
  refForm: any,
127
154
  initialState: S,
128
155
  service: GenericService<T, ID, number|ResultInfo<T>>,
129
156
  p1: EditParameter,
130
- p?: BaseEditComponentParam<T, ID>
157
+ p?: BaseEditComponentParam<T, ID>,
158
+ props?: P
131
159
  ) => {
132
160
  /*
133
161
  const {
@@ -135,13 +163,13 @@ export const useCoreEdit = <T, ID, S, P>(
135
163
  patchable = true,
136
164
  addable = true
137
165
  } = p; */
166
+ const navigate = useNavigate();
138
167
  const addable = (p && p.patchable !== false ? true : undefined);
139
- const {goBack} = useRouter();
140
168
  const back = (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
141
169
  if (event) {
142
170
  event.preventDefault();
143
171
  }
144
- goBack();
172
+ navigate(-1);
145
173
  };
146
174
 
147
175
  const [running, setRunning] = useState<boolean>();
@@ -154,18 +182,6 @@ export const useCoreEdit = <T, ID, S, P>(
154
182
  };
155
183
  const baseProps = useUpdate<S>(initialState, getModelName, p1.getLocale);
156
184
 
157
- const prepareCustomData = (p && p.prepareCustomData ? p.prepareCustomData : prepareData);
158
- const updateDateState = (name: string, value: any) => {
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 } });
164
- } else {
165
- setState({[modelName]: {...currentState, [name]: value}} as T);
166
- }
167
- };
168
-
169
185
  const { state, setState } = baseProps;
170
186
  const [flag, setFlag] = useMergeState({
171
187
  newMode: false,
@@ -404,7 +420,7 @@ export const useCoreEdit = <T, ID, S, P>(
404
420
  };
405
421
  const doSave = (p && p.doSave ? p.doSave : _doSave);
406
422
 
407
- const _load = (_id: ID, callback?: (m: T, showM: (m2: T) => void) => void) => {
423
+ const _load = (_id: ID|null, callback?: (m: T, showM: (m2: T) => void) => void) => {
408
424
  const id: any = _id;
409
425
  if (id != null && id !== '') {
410
426
  setRunning(true);
@@ -462,7 +478,6 @@ export const useCoreEdit = <T, ID, S, P>(
462
478
  flag,
463
479
  running,
464
480
  setRunning,
465
- updateDateState,
466
481
  showModel,
467
482
  getModelName,
468
483
  resetState,
@@ -472,6 +487,7 @@ export const useCoreEdit = <T, ID, S, P>(
472
487
  newOnClick: create,
473
488
  save,
474
489
  onSave,
490
+ // eslint-disable-next-line no-restricted-globals
475
491
  confirm,
476
492
  validate,
477
493
  showMessage: p1.showMessage,
package/src/useSearch.ts CHANGED
@@ -1,21 +1,25 @@
1
1
  import {useEffect, useState} from 'react';
2
- import {RouteComponentProps} from 'react-router';
3
- import {useHistory, useRouteMatch} from 'react-router-dom';
4
- import {clone} from 'reflectx';
5
- import {addParametersIntoUrl, append, buildMessage, Filter, formatResults, getFieldsFromForm, getModel, handleAppend, handleSort, initFilter, mergeFilter as mergeFilter2, Pagination, removeSortStatus, showPaging, Sortable, validate} from 'search-core';
6
- import {error, getDecodeFromForm, getName, getRemoveError, getValidateForm, hideLoading, initForm, Locale, PageChange, pageSizes, removeFormError, ResourceService, SearchParameter, SearchResult, SearchService, showLoading} from './core';
2
+ import {error, getDecodeFromForm, getName, getRemoveError, getValidateForm, handleToggle, hideLoading, initForm, Locale, PageChange, pageSizes, removeFormError, ResourceService, SearchParameter, SearchResult, SearchService, showLoading} from './core';
7
3
  import {DispatchWithCallback, useMergeState} from './merge';
4
+ import {clone} from './reflect';
8
5
  import {buildFromUrl} from './route';
6
+ import {addParametersIntoUrl, append, buildMessage, formatResults, getFieldsFromForm, getModel, handleAppend, handleSort, initFilter, mergeFilter as mergeFilter2, Pagination, removeSortStatus, showPaging, Sortable, validate} from './search';
9
7
  import {enLocale} from './state';
10
- import {useUpdate, useUpdateWithProps} from './update';
8
+ import {useUpdate} from './update';
11
9
 
12
10
  export interface Searchable<T> extends Pagination, Sortable {
13
11
  nextPageToken?: string;
14
12
  excluding?: string[]|number[];
15
13
  list?: T[];
16
14
  }
17
- function prepareData(data: any): void {
15
+ interface Filter {
16
+ page?: number;
17
+ limit?: number;
18
+ firstLimit?: number;
19
+ fields?: string[];
20
+ sort?: string;
18
21
  }
22
+
19
23
  export const callSearch = <T, S extends Filter>(se: S, search3: (s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>, showResults3: (s: S, sr: SearchResult<T>, lc: Locale) => void, searchError3: (err: any) => void, lc: Locale, nextPageToken?: string) => {
20
24
  const s = clone(se);
21
25
  let page = se.page;
@@ -53,13 +57,19 @@ export interface InitSearchComponentParam<T, M extends Filter, S> extends Search
53
57
  createFilter?: () => M;
54
58
  initialize?: (ld: (s: M, auto?: boolean) => void, setState2: DispatchWithCallback<Partial<S>>, com?: SearchComponentState<T, M>) => void;
55
59
  }
56
- export interface HookPropsSearchParameter<T, S extends Filter, ST, P extends RouteComponentProps> extends HookPropsBaseSearchParameter<T, S, ST, P> {
60
+ export interface HookPropsSearchParameter<T, S extends Filter, ST, P> extends HookPropsBaseSearchParameter<T, S, ST, P> {
57
61
  createFilter?: () => S;
58
62
  initialize?: (ld: (s: S, auto?: boolean) => void, setState2: DispatchWithCallback<Partial<ST>>, com?: SearchComponentState<T, S>) => void;
59
63
  }
60
64
  export interface SearchComponentParam<T, M extends Filter> {
65
+ addable?: boolean;
66
+ editable?: boolean;
67
+ approvable?: boolean;
68
+ deletable?: boolean;
69
+
61
70
  keys?: string[];
62
71
  sequenceNo?: string;
72
+ hideFilter?: boolean;
63
73
  name?: string;
64
74
  fields?: string[];
65
75
  appendMode?: boolean;
@@ -77,7 +87,7 @@ export interface SearchComponentParam<T, M extends Filter> {
77
87
  getFilter?: () => M;
78
88
  getFields?: () => string[]|undefined;
79
89
  validateSearch?: (se: M, callback: () => void) => void;
80
- prepareCustomData?: (data: any) => void;
90
+ // prepareCustomData?: (data: any) => void;
81
91
  format?(obj: T, locale?: Locale): T;
82
92
  showResults?(s: M, sr: SearchResult<T>, lc: Locale): void;
83
93
  appendList?(results: T[], list: T[]|undefined, s: DispatchWithCallback<Partial<SearchComponentState<T, M>>>): void;
@@ -104,7 +114,7 @@ export interface HookBaseSearchParameter<T, S extends Filter, ST extends SearchC
104
114
  }
105
115
  export interface HookPropsBaseSearchParameter<T, S extends Filter, ST, P> extends HookBaseSearchParameter<T, S, ST> {
106
116
  props?: P;
107
- prepareCustomData?: (data: any) => void;
117
+ // prepareCustomData?: (data: any) => void;
108
118
  }
109
119
  export interface SearchComponentState<T, S> extends Pagination, Sortable {
110
120
  view?: string;
@@ -121,7 +131,7 @@ export interface SearchComponentState<T, S> extends Pagination, Sortable {
121
131
 
122
132
  pageMaxSize?: number;
123
133
  pageSizes?: number[];
124
- excluding?: any;
134
+ excluding?: string[]|number[];
125
135
  hideFilter?: boolean;
126
136
 
127
137
  ignoreUrlParam?: boolean;
@@ -146,13 +156,33 @@ function mergeParam<T, S extends Filter>(p?: SearchComponentParam<T, S>): Search
146
156
  if (!p.pageMaxSize || p.pageMaxSize <= 0) {
147
157
  p.pageMaxSize = 7;
148
158
  }
159
+ if (p.hideFilter === undefined) {
160
+ p.hideFilter = true;
161
+ }
162
+ if (p.addable === undefined) {
163
+ p.addable = true;
164
+ }
165
+ if (p.editable === undefined) {
166
+ p.editable = true;
167
+ }
168
+ if (p.approvable === undefined) {
169
+ p.approvable = true;
170
+ }
171
+ if (p.deletable === undefined) {
172
+ p.deletable = true;
173
+ }
149
174
  return p;
150
175
  } else {
151
176
  return {
152
177
  sequenceNo: 'sequenceNo',
153
178
  pageSize: 24,
154
179
  pageSizes,
155
- pageMaxSize: 7
180
+ pageMaxSize: 7,
181
+ hideFilter: true,
182
+ addable: true,
183
+ editable: true,
184
+ approvable: true,
185
+ deletable: true
156
186
  };
157
187
  }
158
188
  }
@@ -163,7 +193,7 @@ export const useSearch = <T, S extends Filter, ST extends SearchComponentState<T
163
193
  p2: SearchParameter,
164
194
  p?: InitSearchComponentParam<T, S, ST>,
165
195
  ) => {
166
- const baseProps = useCoreSearch(undefined, refForm, initialState, service, p2, p);
196
+ const baseProps = useCoreSearch(refForm, initialState, service, p2, p);
167
197
 
168
198
  useEffect(() => {
169
199
  const { load, setState, component } = baseProps;
@@ -178,22 +208,23 @@ export const useSearch = <T, S extends Filter, ST extends SearchComponentState<T
178
208
  const s: any = mergeFilter2(buildFromUrl<S>(), se, component.pageSizes);
179
209
  load(s, p2.auto);
180
210
  }
211
+ // eslint-disable-next-line react-hooks/exhaustive-deps
181
212
  }, []);
182
213
  return { ...baseProps };
183
214
  };
184
- export const useSearchOneProps = <T, S extends Filter, ST extends SearchComponentState<T, S>, P extends RouteComponentProps>(p: HookPropsSearchParameter<T, S, ST, P>) => {
215
+ export const useSearchOneProps = <T, S extends Filter, ST extends SearchComponentState<T, S>, P>(p: HookPropsSearchParameter<T, S, ST, P>) => {
185
216
  return useSearch(p.refForm, p.initialState, p.service, p, p);
186
217
  };
187
218
  export const useSearchOne = <T, S extends Filter, ST extends SearchComponentState<T, S>>(p: HookBaseSearchParameter<T, S, ST>) => {
188
- return useCoreSearch(undefined, p.refForm, p.initialState, p.service, p, p);
219
+ return useCoreSearch(p.refForm, p.initialState, p.service, p, p);
189
220
  };
190
221
  export const useCoreSearch = <T, S extends Filter, ST, P>(
191
- props: P|undefined,
192
222
  refForm: any,
193
223
  initialState: ST,
194
224
  service: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>,
195
225
  p1: SearchParameter,
196
- p2?: SearchComponentParam<T, S>
226
+ p2?: SearchComponentParam<T, S>,
227
+ props?: P
197
228
  ) => {
198
229
  const p = mergeParam(p2);
199
230
  const [running, setRunning] = useState<boolean>();
@@ -204,38 +235,21 @@ export const useCoreSearch = <T, S extends Filter, ST, P>(
204
235
  const getModelName = (p && p.getModelName ? p.getModelName : _getModelName);
205
236
 
206
237
  // const setState2: <K extends keyof S, P>(st: ((prevState: Readonly<S>, props: Readonly<P>) => (Pick<S, K> | S | null)) | (Pick<S, K> | S | null), cb?: () => void) => void;
207
- const baseProps = (props ? useUpdateWithProps<ST, P>(props, initialState, getModelName, p1.getLocale, getRemoveError(p1), p ? p.prepareCustomData : undefined) : useUpdate<ST>(initialState, getModelName, p1.getLocale, getRemoveError(p1)));
238
+ const baseProps = useUpdate<ST>(initialState, getModelName, p1.getLocale, getRemoveError(p1));
208
239
  const { state, setState } = baseProps;
209
- const [history, match] = [useHistory(), useRouteMatch()];
210
240
 
211
241
  const _getCurrencyCode = (): string => {
212
242
  return refForm && refForm.current ? refForm.current.getAttribute('currency-code') : null;
213
243
  };
214
244
  const getCurrencyCode = p && p.getCurrencyCode ? p.getCurrencyCode : _getCurrencyCode;
215
245
 
216
- const prepareCustomData = (p && p.prepareCustomData ? p.prepareCustomData : prepareData);
217
- const updateDateState = (name: string, value: any) => {
218
- const modelName = getModelName();
219
- const currentState = (state as any)[modelName];
220
- if (props && (props as any).setGlobalState) {
221
- const data = (props as any).shouldBeCustomized ? prepareCustomData({ [name]: value }) : { [name]: value };
222
- (props as any).setGlobalState({ [modelName]: { ...currentState, ...data } });
223
- } else {
224
- setState({ [modelName]: { ...currentState, [name]: value } } as T);
225
- }
226
- setState({ [modelName]: { ...currentState, [name]: value } } as T);
227
- };
228
-
229
246
  // const p = createSearchComponentState<T, S>(p1);
230
247
  const [component, setComponent] = useMergeState<SearchComponentState<T, S>>(p);
231
248
 
232
- const toggleFilter = (event: any): void => {
233
- setComponent({ hideFilter: !component.hideFilter });
234
- };
235
-
236
- const add = (event: any) => {
237
- event.preventDefault();
238
- history.push(match.url + '/add');
249
+ const toggleFilter = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
250
+ const x = !component.hideFilter;
251
+ handleToggle(event.target as HTMLInputElement, !x);
252
+ setComponent({ hideFilter: x });
239
253
  };
240
254
 
241
255
  const _getFields = (): string[]|undefined => {
@@ -409,7 +423,6 @@ export const useCoreSearch = <T, S extends Filter, ST, P>(
409
423
  const _showResults = (s: S, sr: SearchResult<T>, lc: Locale) => {
410
424
  const results = sr.list;
411
425
  if (results && results.length > 0) {
412
- debugger;
413
426
  formatResults(results, component.pageIndex, component.pageSize, component.pageSize, p ? p.sequenceNo : undefined, p ? p.format : undefined, lc);
414
427
  }
415
428
  const am = component.appendMode;
@@ -469,14 +482,12 @@ export const useCoreSearch = <T, S extends Filter, ST, P>(
469
482
  running,
470
483
  setRunning,
471
484
  getCurrencyCode,
472
- updateDateState,
473
485
  resource: p1.resource.resource(),
474
486
  setComponent,
475
487
  component,
476
488
  showMessage: p1.showMessage,
477
489
  load,
478
- add,
479
- searchOnClick: search,
490
+ search,
480
491
  sort,
481
492
  changeView,
482
493
  showMore,
package/src/useView.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  import {useEffect, useState} from 'react';
2
- import {RouteComponentProps} from 'react-router';
2
+ import {useNavigate, useParams} from 'react-router';
3
3
  import {buildId, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, ViewParameter, ViewService} from './core';
4
4
  import {readOnly} from './formutil';
5
5
  import {DispatchWithCallback, useMergeState} from './merge';
6
- import {useRouter} from './router';
7
6
 
8
7
  export interface BaseViewComponentParam<T, ID> {
9
8
  name?: string;
@@ -26,7 +25,7 @@ export interface ViewComponentParam<T, ID, S> extends BaseViewComponentParam<T,
26
25
  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;
27
26
  callback?: (m: T, showF: (model: T) => void) => void;
28
27
  }
29
- export interface HookPropsViewParameter<T, ID, S, P extends RouteComponentProps> extends HookPropsBaseViewParameter<T, ID, S, P> {
28
+ export interface HookPropsViewParameter<T, ID, S, P> extends HookPropsBaseViewParameter<T, ID, S, P> {
30
29
  keys?: string[];
31
30
  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;
32
31
  callback?: (m: T, showF: (model: T) => void) => void;
@@ -34,13 +33,36 @@ export interface HookPropsViewParameter<T, ID, S, P extends RouteComponentProps>
34
33
  export interface HookPropsBaseViewParameter<T, ID, S, P> extends HookBaseViewParameter<T, ID, S> {
35
34
  props: P;
36
35
  }
37
- export const useViewOneProps = <T, ID, S, P extends RouteComponentProps>(p: HookPropsViewParameter<T, ID, S, P>) => {
38
- return useViewProps(p.props, p.refForm, p.initialState, p.service, p, p);
39
- };
40
36
  export const useViewOne = <T, ID, S>(p: HookBaseViewParameter<T, ID, S>) => {
41
- return useView(p.refForm, p.initialState, p.service, p, p);
37
+ return useCoreView(p.refForm, p.initialState, p.service, p, p);
42
38
  };
43
39
  export const useView = <T, ID, S>(
40
+ refForm: any,
41
+ initialState: S,
42
+ service: ((id: ID, ctx?: any) => Promise<T>)|ViewService<T, ID>,
43
+ p1: ViewParameter,
44
+ p?: ViewComponentParam<T, ID, S>
45
+ ) => {
46
+ const baseProps = useCoreView(refForm, initialState, service, p1, p);
47
+ const [, setState] = useMergeState<S>(initialState);
48
+ const params = useParams();
49
+ useEffect(() => {
50
+ if (baseProps.refForm) {
51
+ initForm(baseProps.refForm.current);
52
+ }
53
+ const id = buildId<ID>(params, p ? p.keys : undefined);
54
+ if (id) {
55
+ if (p && p.initialize) {
56
+ p.initialize(id, baseProps.load, setState, p.callback);
57
+ } else {
58
+ baseProps.load(id, p ? p.callback : undefined);
59
+ }
60
+ }
61
+ }, []);
62
+ return {...baseProps};
63
+ };
64
+
65
+ export const useCoreView = <T, ID, S>(
44
66
  refForm: any,
45
67
  initialState: S,
46
68
  service: ((id: ID, ctx?: any) => Promise<T>)|ViewService<T, ID>,
@@ -49,13 +71,13 @@ export const useView = <T, ID, S>(
49
71
  ) => {
50
72
  const [state, setState] = useMergeState<S>(initialState);
51
73
  const [running, setRunning] = useState<boolean>();
52
- const {goBack} = useRouter();
74
+ const navigate = useNavigate();
53
75
 
54
76
  const back = (event: any) => {
55
77
  if (event) {
56
78
  event.preventDefault();
57
79
  }
58
- goBack();
80
+ navigate(-1);
59
81
  };
60
82
 
61
83
  const getModelName = (f?: HTMLFormElement) => {
@@ -134,28 +156,3 @@ export const useView = <T, ID, S>(
134
156
  back
135
157
  };
136
158
  };
137
- export const useViewProps = <T, ID, S, P extends RouteComponentProps>(
138
- props: P,
139
- refForm: any,
140
- initialState: S,
141
- service: ((id: ID, ctx?: any) => Promise<T>)|ViewService<T, ID>,
142
- p1: ViewParameter,
143
- p?: ViewComponentParam<T, ID, S>
144
- ) => {
145
- const baseProps = useView(refForm, initialState, service, p1, p);
146
- const [state, setState] = useMergeState<S>(initialState);
147
- useEffect(() => {
148
- if (baseProps.refForm) {
149
- initForm(baseProps.refForm.current);
150
- }
151
- const id = buildId<ID>(props, p ? p.keys : undefined);
152
- if (id) {
153
- if (p && p.initialize) {
154
- p.initialize(id, baseProps.load, setState, p.callback);
155
- } else {
156
- baseProps.load(id, p ? p.callback : undefined);
157
- }
158
- }
159
- }, []);
160
- return {...baseProps};
161
- };
package/tsconfig.json CHANGED
@@ -7,6 +7,7 @@
7
7
  "module": "commonjs",
8
8
  "moduleResolution": "node",
9
9
  "strict": true,
10
+ "strictNullChecks": true,
10
11
  "pretty": true,
11
12
  "sourceMap": false,
12
13
  "declaration": false,
@@ -14,7 +15,8 @@
14
15
  "removeComments": true,
15
16
  "lib": [
16
17
  "dom",
17
- "es6"
18
+ "es6",
19
+ "es7"
18
20
  ]
19
21
  },
20
22
  "include": [