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/useSearch.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import {useEffect, useState} from 'react';
2
+ import {RouteComponentProps} from 'react-router';
2
3
  import {useHistory, useRouteMatch} from 'react-router-dom';
3
4
  import {clone} from 'reflectx';
4
- import {addParametersIntoUrl, append, buildSearchMessage, formatResults, getDisplayFieldsFromForm, getModel, handleAppend, handleSort, initSearchable, mergeSearchModel as mergeSearchModel2, Pagination, removeSortStatus, SearchModel, showPaging, Sortable, validate} from 'search-utilities';
5
- import {error, initForm, LoadingService, Locale, ModelProps, ResourceService, SearchParameter, SearchPermission, SearchResult, SearchService, UIService} from './core';
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';
6
7
  import {DispatchWithCallback, useMergeState} from './merge';
7
8
  import {buildFromUrl} from './route';
9
+ import {enLocale} from './state';
8
10
  import {useUpdate, useUpdateWithProps} from './update';
9
11
 
10
12
  export interface Searchable<T> extends Pagination, Sortable {
@@ -14,54 +16,54 @@ export interface Searchable<T> extends Pagination, Sortable {
14
16
  }
15
17
  function prepareData(data: any): void {
16
18
  }
17
- export const callSearch = async <T, S extends SearchModel>(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) => {
18
- try {
19
- const s = clone(se);
20
- let page = se.page;
21
- if (!page || page < 1) {
22
- page = 1;
23
- }
24
- let offset: number;
25
- if (se.firstLimit && se.firstLimit > 0) {
26
- offset = se.limit * (page - 2) + se.firstLimit;
27
- } else {
28
- offset = se.limit * (page - 1);
29
- }
30
- const limit = (page <= 1 && se.firstLimit && se.firstLimit > 0 ? se.firstLimit : se.limit);
31
- const next = (nextPageToken && nextPageToken.length > 0 ? nextPageToken : offset);
32
- const fields = se.fields;
33
- delete se['page'];
34
- delete se['fields'];
35
- delete se['limit'];
36
- delete se['firstLimit'];
37
- const sr = await search3(s, limit, next, fields);
38
- showResults3(s, sr, lc);
39
- } catch (err) {
40
- searchError3(err);
19
+ 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
+ const s = clone(se);
21
+ let page = se.page;
22
+ if (!page || page < 1) {
23
+ page = 1;
24
+ }
25
+ let offset: number;
26
+ if (!se.limit || se.limit <= 0) {
27
+ se.limit = 24;
28
+ }
29
+ if (se.firstLimit && se.firstLimit > 0) {
30
+ offset = se.limit * (page - 2) + se.firstLimit;
31
+ } else {
32
+ offset = se.limit * (page - 1);
41
33
  }
34
+ const limit = (page <= 1 && se.firstLimit && se.firstLimit > 0 ? se.firstLimit : se.limit);
35
+ const next = (nextPageToken && nextPageToken.length > 0 ? nextPageToken : offset);
36
+ const fields = se.fields;
37
+ delete se['page'];
38
+ delete se['fields'];
39
+ delete se['limit'];
40
+ delete se['firstLimit'];
41
+ search3(s, limit, next, fields).then(sr => {
42
+ showResults3(s, sr, lc);
43
+ }).catch(err => searchError3(err));
42
44
  };
43
- const appendListOfState = <T, S extends SearchModel>(results: T[], list: T[], setState2: DispatchWithCallback<Partial<SearchComponentState<T, S>>>) => {
45
+ const appendListOfState = <T, S extends Filter>(results: T[], list: T[]|undefined, setState2: DispatchWithCallback<Partial<SearchComponentState<T, S>>>) => {
44
46
  const arr = append(list, results);
45
47
  setState2({ list: arr } as any);
46
48
  };
47
- const setListOfState = <T, S extends SearchModel>(list: T[], setState2: DispatchWithCallback<Partial<SearchComponentState<T, S>>>) => {
49
+ const setListOfState = <T, S extends Filter>(list: T[], setState2: DispatchWithCallback<Partial<SearchComponentState<T, S>>>) => {
48
50
  setState2({ list } as any);
49
51
  };
50
- export interface InitSearchComponentParam<T, M extends SearchModel, S> extends SearchComponentParam<T, M> {
51
- createSearchModel?: () => M;
52
+ export interface InitSearchComponentParam<T, M extends Filter, S> extends SearchComponentParam<T, M> {
53
+ createFilter?: () => M;
52
54
  initialize?: (ld: (s: M, auto?: boolean) => void, setState2: DispatchWithCallback<Partial<S>>, com?: SearchComponentState<T, M>) => void;
53
55
  }
54
- export interface HookPropsSearchParameter<T, S extends SearchModel, ST, P extends ModelProps> extends HookPropsBaseSearchParameter<T, S, ST, P> {
55
- createSearchModel?: () => S;
56
+ export interface HookPropsSearchParameter<T, S extends Filter, ST, P extends RouteComponentProps> extends HookPropsBaseSearchParameter<T, S, ST, P> {
57
+ createFilter?: () => S;
56
58
  initialize?: (ld: (s: S, auto?: boolean) => void, setState2: DispatchWithCallback<Partial<ST>>, com?: SearchComponentState<T, S>) => void;
57
59
  }
58
- export interface SearchComponentParam<T, M extends SearchModel> {
60
+ export interface SearchComponentParam<T, M extends Filter> {
59
61
  keys?: string[];
60
62
  sequenceNo?: string;
61
63
  name?: string;
64
+ fields?: string[];
62
65
  appendMode?: boolean;
63
66
  pageSizes?: number[];
64
- displayFields?: string[];
65
67
  pageIndex?: number;
66
68
  pageSize?: number;
67
69
  initPageSize?: number;
@@ -71,15 +73,16 @@ export interface SearchComponentParam<T, M extends SearchModel> {
71
73
  load?: (s: M, auto?: boolean) => void;
72
74
  getModelName?: () => string;
73
75
  getCurrencyCode?: () => string;
74
- setSearchModel?: (s: M) => void;
75
- getSearchModel?: () => M;
76
- getFields?: () => string[];
76
+ setFilter?: (s: M) => void;
77
+ getFilter?: () => M;
78
+ getFields?: () => string[]|undefined;
77
79
  validateSearch?: (se: M, callback: () => void) => void;
78
80
  prepareCustomData?: (data: any) => void;
79
- format?(obj: T, locale: Locale): T;
81
+ format?(obj: T, locale?: Locale): T;
80
82
  showResults?(s: M, sr: SearchResult<T>, lc: Locale): void;
81
- appendList?(results: T[], list: T[], s: DispatchWithCallback<Partial<SearchComponentState<T, M>>>): void;
83
+ appendList?(results: T[], list: T[]|undefined, s: DispatchWithCallback<Partial<SearchComponentState<T, M>>>): void;
82
84
  setList?(list: T[], s: DispatchWithCallback<Partial<SearchComponentState<T, M>>>): void;
85
+ /*
83
86
  showLoading?(firstTime?: boolean): void;
84
87
  hideLoading?(): void;
85
88
  decodeFromForm?(form: HTMLFormElement, locale?: Locale, currencyCode?: string): any;
@@ -87,29 +90,31 @@ export interface SearchComponentParam<T, M extends SearchModel> {
87
90
  validateForm?(form: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean): boolean;
88
91
  removeFormError?(form: HTMLFormElement): void;
89
92
  removeError?(el: HTMLInputElement): void;
93
+ */
90
94
  }
91
- export interface HookBaseSearchParameter<T, S extends SearchModel, ST extends SearchComponentState<T, S>> extends SearchComponentParam<T, S> {
95
+ export interface HookBaseSearchParameter<T, S extends Filter, ST extends SearchComponentState<T, S>> extends SearchComponentParam<T, S> {
92
96
  refForm: any;
93
97
  initialState: ST;
94
- search: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>;
98
+ service: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>;
95
99
  resource: ResourceService;
96
100
  showMessage: (msg: string) => void;
97
101
  showError: (m: string, header?: string, detail?: string, callback?: () => void) => void;
98
102
  getLocale?: () => Locale;
99
103
  autoSearch?: boolean;
100
104
  }
101
- export interface HookPropsBaseSearchParameter<T, S extends SearchModel, ST, P extends ModelProps> extends HookBaseSearchParameter<T, S, ST> {
105
+ export interface HookPropsBaseSearchParameter<T, S extends Filter, ST, P> extends HookBaseSearchParameter<T, S, ST> {
102
106
  props?: P;
103
107
  prepareCustomData?: (data: any) => void;
104
108
  }
105
109
  export interface SearchComponentState<T, S> extends Pagination, Sortable {
110
+ view?: string;
106
111
  nextPageToken?: string;
107
112
  keys?: string[];
108
- model?: S;
113
+ filter?: S;
109
114
  list?: T[];
110
115
 
111
116
  format?: (obj: T, locale: Locale) => T;
112
- displayFields?: string[];
117
+ fields?: string[];
113
118
  initFields?: boolean;
114
119
  triggerSearch?: boolean;
115
120
  tmpPageIndex?: number;
@@ -126,186 +131,102 @@ export interface SearchComponentState<T, S> extends Pagination, Sortable {
126
131
  approvable?: boolean;
127
132
  deletable?: boolean;
128
133
  }
129
- export const pageSizes = [10, 20, 40, 60, 100, 200, 400, 800];
130
134
 
131
- function createSearchComponentState<T, S extends SearchModel>(p: SearchComponentParam<T, S>, p2?: SearchPermission): SearchComponentState<T, S> {
132
- const p3: SearchComponentState<T, S> = {
133
- model: {} as any,
134
- pageIndex: p.pageIndex,
135
- pageSize: p.pageSize,
136
- initPageSize: p.initPageSize,
137
- pageSizes: p.pageSizes,
138
- appendMode: p.appendMode,
139
- displayFields: p.displayFields,
140
- pageMaxSize: (p.pageMaxSize && p.pageMaxSize > 0 ? p.pageMaxSize : 7)
141
- };
142
- if (p2) {
143
- p3.viewable = p2.viewable;
144
- p3.addable = p2.addable;
145
- p3.editable = p2.editable;
146
- p3.deletable = p2.deletable;
147
- p3.approvable = p2.approvable;
148
- } else {
149
- p3.viewable = true;
150
- p3.addable = true;
151
- p3.editable = true;
152
- }
153
- return p3;
154
- }
155
- function mergeParam<T, S extends SearchModel>(p: SearchComponentParam<T, S>, ui?: UIService, loading?: LoadingService): void {
156
- if (!p.sequenceNo) {
157
- p.sequenceNo = 'sequenceNo';
158
- }
159
- if (!p.pageIndex || p.pageIndex < 1) {
160
- p.pageIndex = 1;
161
- }
162
- if (!p.pageSize) {
163
- p.pageSize = 20;
164
- }
165
- if (!p.initPageSize) {
166
- p.initPageSize = p.pageSize;
167
- }
168
- if (!p.pageSizes) {
169
- p.pageSizes = pageSizes;
170
- }
171
- if (!p.pageMaxSize) {
172
- p.pageMaxSize = 7;
173
- }
174
- if (ui) {
175
- if (!p.decodeFromForm) {
176
- p.decodeFromForm = ui.decodeFromForm;
177
- }
178
- if (!p.registerEvents) {
179
- p.registerEvents = ui.registerEvents;
135
+ function mergeParam<T, S extends Filter>(p?: SearchComponentParam<T, S>): SearchComponentParam<T, S> {
136
+ if (p) {
137
+ if (!p.sequenceNo) {
138
+ p.sequenceNo = 'sequenceNo';
180
139
  }
181
- if (!p.validateForm) {
182
- p.validateForm = ui.validateForm;
140
+ if (!p.pageSize) {
141
+ p.pageSize = 24;
183
142
  }
184
- if (!p.removeFormError) {
185
- p.removeFormError = ui.removeFormError;
143
+ if (!p.pageSizes) {
144
+ p.pageSizes = pageSizes;
186
145
  }
187
- if (!p.removeError) {
188
- p.removeError = ui.removeError;
189
- }
190
- }
191
- if (loading) {
192
- if (!p.showLoading) {
193
- p.showLoading = loading.showLoading;
194
- }
195
- if (!p.hideLoading) {
196
- p.hideLoading = loading.hideLoading;
146
+ if (!p.pageMaxSize || p.pageMaxSize <= 0) {
147
+ p.pageMaxSize = 7;
197
148
  }
149
+ return p;
150
+ } else {
151
+ return {
152
+ sequenceNo: 'sequenceNo',
153
+ pageSize: 24,
154
+ pageSizes,
155
+ pageMaxSize: 7
156
+ };
198
157
  }
199
158
  }
200
- export const useSearch = <T, S extends SearchModel, ST extends SearchComponentState<T, S>>(
159
+ export const useSearch = <T, S extends Filter, ST extends SearchComponentState<T, S>>(
201
160
  refForm: any,
202
161
  initialState: ST,
203
- search: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>,
204
- p1: InitSearchComponentParam<T, S, ST>,
162
+ service: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>,
205
163
  p2: SearchParameter,
206
- p3?: SearchPermission,
164
+ p?: InitSearchComponentParam<T, S, ST>,
207
165
  ) => {
208
- const baseProps = useBaseSearchWithProps(null, refForm, initialState, search, p1, p2, p3);
166
+ const baseProps = useCoreSearch(undefined, refForm, initialState, service, p2, p);
209
167
 
210
168
  useEffect(() => {
211
169
  const { load, setState, component } = baseProps;
212
170
  if (refForm) {
213
- const registerEvents = (p2.ui ? p2.ui.registerEvents : null);
171
+ const registerEvents = (p2.ui ? p2.ui.registerEvents : undefined);
214
172
  initForm(refForm.current, registerEvents);
215
173
  }
216
- if (p1.initialize) {
217
- p1.initialize(load, setState, component);
218
- } else {
219
- const se: S = (p1.createSearchModel ? p1.createSearchModel() : null);
220
- const s: any = mergeSearchModel2(buildFromUrl<S>(), se, component.pageSizes);
221
- load(s, p2.auto);
222
- }
223
- }, []);
224
- return { ...baseProps };
225
- };
226
- export const useSearchOneWithProps = <T, S extends SearchModel, ST extends SearchComponentState<T, S>, P>(p: HookPropsSearchParameter<T, S, ST, P>) => {
227
- const baseProps = useBaseSearchOne(p);
228
- /*
229
- useEffect(() => {
230
- if (!component.isFirstTime) {
231
- doSearch();
232
- }
233
- }, [component.pageSize, component.pageIndex]);
234
- */
235
- useEffect(() => {
236
- const { load, setState, component } = baseProps;
237
- if (p.refForm) {
238
- initForm(p.refForm.current, p.registerEvents);
239
- }
240
- if (p.initialize) {
174
+ if (p && p.initialize) {
241
175
  p.initialize(load, setState, component);
242
176
  } else {
243
- const se: S = (p.createSearchModel ? p.createSearchModel() : null);
244
- const s: any = mergeSearchModel2(buildFromUrl<S>(), se, component.pageSizes);
245
- load(s, p.autoSearch);
177
+ const se: S|undefined = (p && p.createFilter ? p.createFilter() : undefined);
178
+ const s: any = mergeFilter2(buildFromUrl<S>(), se, component.pageSizes);
179
+ load(s, p2.auto);
246
180
  }
247
181
  }, []);
248
-
249
182
  return { ...baseProps };
250
183
  };
251
- export const useBaseSearchOne = <T, S extends SearchModel, ST extends SearchComponentState<T, S>, P extends ModelProps>(p: HookPropsBaseSearchParameter<T, S, ST, P>, p2?: SearchPermission) => {
252
- return useBaseSearchWithProps(p.props, p.refForm, p.initialState, p.search, p, p, p2);
184
+ export const useSearchOneProps = <T, S extends Filter, ST extends SearchComponentState<T, S>, P extends RouteComponentProps>(p: HookPropsSearchParameter<T, S, ST, P>) => {
185
+ return useSearch(p.refForm, p.initialState, p.service, p, p);
253
186
  };
254
- export const useBaseSearch = <T, S extends SearchModel, ST extends SearchComponentState<T, S>>(
255
- refForm: any,
256
- initialState: ST,
257
- search: ((s: S, ctx?: any) => Promise<SearchResult<T>>) | SearchService<T, S>,
258
- p1: SearchComponentParam<T, S>,
259
- p2: SearchParameter,
260
- p3?: SearchPermission
261
- ) => {
262
- return useBaseSearchWithProps(null, refForm, initialState, search, p1, p2, p3);
187
+ 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);
263
189
  };
264
- export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends ModelProps>(
265
- props: P,
190
+ export const useCoreSearch = <T, S extends Filter, ST, P>(
191
+ props: P|undefined,
266
192
  refForm: any,
267
193
  initialState: ST,
268
- search: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>,
269
- p1: SearchComponentParam<T, S>,
270
- p2: SearchParameter,
271
- p3?: SearchPermission
194
+ service: ((s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>) | SearchService<T, S>,
195
+ p1: SearchParameter,
196
+ p2?: SearchComponentParam<T, S>
272
197
  ) => {
273
- mergeParam(p1, p2.ui, p2.loading);
274
- const [running, setRunning] = useState(undefined);
198
+ const p = mergeParam(p2);
199
+ const [running, setRunning] = useState<boolean>();
275
200
 
276
201
  const _getModelName = (): string => {
277
- if (p1.name && p1.name.length > 0) {
278
- return p1.name;
279
- } else {
280
- return 'model';
281
- }
202
+ return getName('filter', p && p.name ? p.name : undefined);
282
203
  };
283
- const getModelName = (p1.getModelName ? p1.getModelName : _getModelName);
204
+ const getModelName = (p && p.getModelName ? p.getModelName : _getModelName);
284
205
 
285
206
  // 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;
286
- const baseProps = (props ? useUpdateWithProps<ST, P>(props, initialState, p2.getLocale, p1.removeError, getModelName, p1.prepareCustomData) : useUpdate<ST>(initialState, p2.getLocale, p1.removeError, getModelName));
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)));
287
208
  const { state, setState } = baseProps;
288
209
  const [history, match] = [useHistory(), useRouteMatch()];
289
210
 
290
211
  const _getCurrencyCode = (): string => {
291
212
  return refForm && refForm.current ? refForm.current.getAttribute('currency-code') : null;
292
213
  };
293
- const getCurrencyCode = p1.getCurrencyCode ? p1.getCurrencyCode : _getCurrencyCode;
214
+ const getCurrencyCode = p && p.getCurrencyCode ? p.getCurrencyCode : _getCurrencyCode;
294
215
 
295
- const prepareCustomData = (p1.prepareCustomData ? p1.prepareCustomData : prepareData);
216
+ const prepareCustomData = (p && p.prepareCustomData ? p.prepareCustomData : prepareData);
296
217
  const updateDateState = (name: string, value: any) => {
297
218
  const modelName = getModelName();
298
- const currentState = state[modelName];
299
- if (props.setGlobalState) {
300
- const data = props.shouldBeCustomized ? prepareCustomData({ [name]: value }) : { [name]: value };
301
- props.setGlobalState({ [modelName]: { ...currentState, ...data } });
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 } });
302
223
  } else {
303
224
  setState({ [modelName]: { ...currentState, [name]: value } } as T);
304
225
  }
305
226
  setState({ [modelName]: { ...currentState, [name]: value } } as T);
306
227
  };
307
228
 
308
- const p = createSearchComponentState<T, S>(p1, p3);
229
+ // const p = createSearchComponentState<T, S>(p1);
309
230
  const [component, setComponent] = useMergeState<SearchComponentState<T, S>>(p);
310
231
 
311
232
  const toggleFilter = (event: any): void => {
@@ -317,46 +238,46 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
317
238
  history.push(match.url + '/add');
318
239
  };
319
240
 
320
- const _getFields = (): string[] => {
321
- const { displayFields, initFields } = component;
322
- const fs = getDisplayFieldsFromForm(displayFields, initFields, refForm.current);
323
- setComponent({ displayFields: fs, initFields: true });
241
+ const _getFields = (): string[]|undefined => {
242
+ const { fields, initFields } = component;
243
+ const fs = getFieldsFromForm(fields, initFields, refForm.current);
244
+ setComponent({ fields: fs, initFields: true });
324
245
  return fs;
325
246
  };
326
- const getFields = p1.getFields ? p1.getFields : _getFields;
247
+ const getFields = p && p.getFields ? p.getFields : _getFields;
327
248
 
328
- const getSearchModel = (se?: Searchable<T>): S => {
249
+ const getFilter = (se?: Searchable<T>): S => {
329
250
  if (!se) {
330
251
  se = component;
331
252
  }
332
- let keys = p1.keys;
333
- if (!keys && typeof search !== 'function') {
334
- keys = search.keys();
253
+ let keys = p && p.keys ? p.keys : undefined;
254
+ if (!keys && typeof service !== 'function' && service.keys) {
255
+ keys = service.keys();
335
256
  }
336
257
  const n = getModelName();
337
- let fs = p1.displayFields;
258
+ let fs = p && p.fields;
338
259
  if (!fs || fs.length <= 0) {
339
260
  fs = getFields();
340
261
  }
341
- const lc = p2.getLocale();
262
+ const lc = (p1.getLocale ? p1.getLocale() : enLocale);
342
263
  const cc = getCurrencyCode();
343
- const obj3 = getModel<T, S>(state, n, se, fs, se.excluding, keys, se.list, refForm.current, p1.decodeFromForm, lc, cc);
264
+ const obj3 = getModel<T, S>(state, n, se, fs, se.excluding, keys, se.list, refForm.current, getDecodeFromForm(p1), lc, cc);
344
265
  return obj3;
345
266
  };
346
- const _setSearchModel = (s: S): void => {
267
+ const _setFilter = (s: S): void => {
347
268
  const objSet: any = {};
348
269
  const n = getModelName();
349
270
  objSet[n] = s;
350
271
  setState(objSet);
351
272
  };
352
273
 
353
- const setSearchModel = p1.setSearchModel ? p1.setSearchModel : _setSearchModel;
274
+ const setFilter = p && p.setFilter ? p.setFilter : _setFilter;
354
275
 
355
276
  const _load = (s: S, auto?: boolean): void => {
356
277
  const com = Object.assign({}, component);
357
- const obj2 = initSearchable(s, com);
278
+ const obj2 = initFilter(s, com);
358
279
  setComponent(com);
359
- setSearchModel(obj2);
280
+ setFilter(obj2);
360
281
  const runSearch = doSearch;
361
282
  if (auto) {
362
283
  setTimeout(() => {
@@ -364,39 +285,34 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
364
285
  }, 0);
365
286
  }
366
287
  };
367
- const load = p1.load ? p1.load : _load;
288
+ const load = p && p.load ? p.load : _load;
368
289
 
369
290
  const doSearch = (se: Searchable<T>, isFirstLoad?: boolean) => {
370
- const f = refForm.current;
371
- if (f && p1.removeFormError) {
372
- p1.removeFormError(f);
373
- }
374
- const s = getSearchModel(se);
291
+ removeFormError(p1, refForm.current);
292
+ const s = getFilter(se);
375
293
  const isStillRunning = running;
376
294
  validateSearch(s, () => {
377
295
  if (isStillRunning === true) {
378
296
  return;
379
297
  }
380
298
  setRunning(true);
381
- if (p1.showLoading) {
382
- p1.showLoading();
383
- }
384
- if (!p1.ignoreUrlParam) {
299
+ showLoading(p1.loading);
300
+ if (p && !p.ignoreUrlParam) {
385
301
  addParametersIntoUrl(s, isFirstLoad);
386
302
  }
387
- const lc = p2.getLocale();
388
- if (typeof search === 'function') {
389
- callSearch<T, S>(s, search, showResults, searchError, lc, se.nextPageToken);
303
+ const lc = p1.getLocale ? p1.getLocale() : enLocale;
304
+ if (typeof service === 'function') {
305
+ callSearch<T, S>(s, service, showResults, searchError, lc, se.nextPageToken);
390
306
  } else {
391
- callSearch<T, S>(s, search.search, showResults, searchError, lc, se.nextPageToken);
307
+ callSearch<T, S>(s, service.search, showResults, searchError, lc, se.nextPageToken);
392
308
  }
393
309
  });
394
310
  };
395
311
 
396
312
  const _validateSearch = (se: S, callback: () => void) => {
397
- validate(se, callback, refForm.current, p2.getLocale(), p1.validateForm);
313
+ validate(se, callback, refForm.current, (p1.getLocale ? p1.getLocale() : undefined), getValidateForm(p1));
398
314
  };
399
- const validateSearch = p1.validateSearch ? p1.validateSearch : _validateSearch;
315
+ const validateSearch = p && p.validateSearch ? p.validateSearch : _validateSearch;
400
316
 
401
317
  const pageSizeChanged = (event: any) => {
402
318
  const size = parseInt(event.currentTarget.value, 10);
@@ -411,10 +327,10 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
411
327
  doSearch(component);
412
328
  };
413
329
 
414
- const clearKeyworkOnClick = (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
330
+ const clearQ = (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
415
331
  const n = getModelName();
416
332
  if (n && n.length > 0) {
417
- const m = state[n];
333
+ const m = (state as any)[n];
418
334
  if (m) {
419
335
  m.keyword = '';
420
336
  const setObj: any = {};
@@ -425,7 +341,7 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
425
341
  }
426
342
  };
427
343
 
428
- const searchOnClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
344
+ const search = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
429
345
  if (event) {
430
346
  event.preventDefault();
431
347
  }
@@ -452,6 +368,17 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
452
368
  resetAndSearch();
453
369
  }
454
370
  };
371
+ const changeView = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>, view?: string) => {
372
+ if (view && view.length > 0) {
373
+ setComponent({view});
374
+ } else if (event && event.target) {
375
+ const target = event.target as any;
376
+ const v: string = target.getAttribute('data-view');
377
+ if (v && v.length > 0) {
378
+ setComponent({view: v});
379
+ }
380
+ }
381
+ };
455
382
 
456
383
  const resetAndSearch = () => {
457
384
  if (running === true) {
@@ -461,13 +388,13 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
461
388
  setComponent({ pageIndex: 1, tmpPageIndex: 1 });
462
389
  removeSortStatus(component.sortTarget);
463
390
  setComponent({
464
- sortTarget: null,
465
- sortField: null,
391
+ sortTarget: undefined,
392
+ sortField: undefined,
466
393
  append: false,
467
394
  pageIndex: 1
468
395
  });
469
- component.sortTarget = null;
470
- component.sortField = null;
396
+ component.sortTarget = undefined;
397
+ component.sortField = undefined;
471
398
  component.append = false;
472
399
  component.pageIndex = 1;
473
400
  doSearch(component);
@@ -475,50 +402,51 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
475
402
 
476
403
  const searchError = (err: any): void => {
477
404
  setComponent({ pageIndex: component.tmpPageIndex });
478
- error(err, p2.resource.value, p2.showError);
405
+ error(err, p1.resource.value, p1.showError);
479
406
  };
480
- const appendList = (p1.appendList ? p1.appendList : appendListOfState);
481
- const setList = (p1.setList ? p1.setList : setListOfState);
407
+ const appendList = (p && p.appendList ? p.appendList : appendListOfState);
408
+ const setList = (p && p.setList ? p.setList : setListOfState);
482
409
  const _showResults = (s: S, sr: SearchResult<T>, lc: Locale) => {
483
410
  const results = sr.list;
484
411
  if (results && results.length > 0) {
485
- formatResults(results, component.pageIndex, component.pageSize, component.initPageSize, p1.sequenceNo, p1.format, lc);
412
+ debugger;
413
+ formatResults(results, component.pageIndex, component.pageSize, component.pageSize, p ? p.sequenceNo : undefined, p ? p.format : undefined, lc);
486
414
  }
487
415
  const am = component.appendMode;
488
416
  const pi = (s.page && s.page >= 1 ? s.page : 1);
489
- setComponent({ itemTotal: sr.total, pageIndex: pi, nextPageToken: sr.nextPageToken });
417
+ setComponent({ total: sr.total, pageIndex: pi, nextPageToken: sr.nextPageToken });
490
418
  if (am) {
491
419
  let limit = s.limit;
492
- if (s.page <= 1 && s.firstLimit && s.firstLimit > 0) {
420
+ if ((!s.page || s.page <= 1) && s.firstLimit && s.firstLimit > 0) {
493
421
  limit = s.firstLimit;
494
422
  }
495
- handleAppend(component, limit, sr.list, sr.nextPageToken);
496
- if (component.append && s.page > 1) {
497
- appendList(results, component.list, setState);
423
+ handleAppend(component, sr.list, limit, sr.nextPageToken);
424
+ if (component.append && (s.page && s.page > 1)) {
425
+ appendList(results, component.list, setState as any);
498
426
  } else {
499
- setList(results, setState);
427
+ setList(results, setState as any);
500
428
  }
501
429
  } else {
502
- showPaging(component, s.limit, sr.list, sr.total);
503
- setList(results, setState);
430
+ showPaging(component, sr.list, s.limit, sr.total);
431
+ setList(results, setState as any);
504
432
  setComponent({ tmpPageIndex: s.page });
505
- const m1 = buildSearchMessage(p2.resource, s.page, s.limit, sr.list, sr.total);
506
- p2.showMessage(m1);
433
+ if (s.limit) {
434
+ const m1 = buildMessage(p1.resource, s.page, s.limit, sr.list, sr.total);
435
+ p1.showMessage(m1);
436
+ }
507
437
  }
508
438
  setRunning(false);
509
- if (p1.hideLoading) {
510
- p1.hideLoading();
511
- }
439
+ hideLoading(p1.loading);
512
440
  if (component.triggerSearch) {
513
441
  setComponent({ triggerSearch: false });
514
442
  resetAndSearch();
515
443
  }
516
444
  };
517
- const showResults = (p1.showResults ? p1.showResults : _showResults);
445
+ const showResults = (p && p.showResults ? p.showResults : _showResults);
518
446
 
519
447
  const showMore = (event: any) => {
520
448
  event.preventDefault();
521
- const n = component.pageIndex + 1;
449
+ const n = component.pageIndex ? component.pageIndex + 1 : 2;
522
450
  const m = component.pageIndex;
523
451
  setComponent({ tmpPageIndex: m, pageIndex: n, append: true });
524
452
  component.tmpPageIndex = m;
@@ -527,11 +455,11 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
527
455
  doSearch(component);
528
456
  };
529
457
 
530
- const pageChanged = (data) => {
531
- const { currentPage, itemsPerPage } = data;
532
- setComponent({ pageIndex: currentPage, pageSize: itemsPerPage, append: false });
533
- component.pageIndex = currentPage;
534
- component.pageSize = itemsPerPage;
458
+ const pageChanged = (data: PageChange) => {
459
+ const { page, size } = data;
460
+ setComponent({ pageIndex: page, pageSize: size, append: false });
461
+ component.pageIndex = page;
462
+ component.pageSize = size;
535
463
  component.append = false;
536
464
  doSearch(component);
537
465
  };
@@ -542,23 +470,24 @@ export const useBaseSearchWithProps = <T, S extends SearchModel, ST, P extends M
542
470
  setRunning,
543
471
  getCurrencyCode,
544
472
  updateDateState,
545
- resource: p2.resource.resource(),
473
+ resource: p1.resource.resource(),
546
474
  setComponent,
547
475
  component,
548
- showMessage: p2.showMessage,
476
+ showMessage: p1.showMessage,
549
477
  load,
550
478
  add,
551
- searchOnClick,
479
+ searchOnClick: search,
552
480
  sort,
481
+ changeView,
553
482
  showMore,
554
483
  toggleFilter,
555
484
  doSearch,
556
485
  pageChanged,
557
486
  pageSizeChanged,
558
- clearKeyworkOnClick,
487
+ clearKeyworkOnClick: clearQ,
559
488
  showResults,
560
489
  getFields,
561
490
  getModelName,
562
- format: p1.format
491
+ format: p ? p.format : undefined
563
492
  };
564
493
  };