react-hook-core 0.1.16 → 0.1.18

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/com.js CHANGED
@@ -6,7 +6,7 @@ function PageSizeSelect(p) {
6
6
  var g = p.sizes;
7
7
  var s = (!g || g.length === 0 ? core_1.pageSizes : g);
8
8
  var opts = s.map(function (pgSize) { return React.createElement('option', { key: pgSize, value: pgSize }, pgSize); });
9
- return React.createElement('select', { id: p.id, name: p.name, defaultValue: p.size, onChange: p.onChange }, opts);
9
+ return React.createElement('select', { id: p.id, name: p.name, value: p.size, defaultValue: p.size, onChange: p.onChange }, opts);
10
10
  }
11
11
  exports.PageSizeSelect = PageSizeSelect;
12
12
  function Search(p) {
package/lib/merge.js CHANGED
@@ -4,16 +4,11 @@ var react_1 = require("react");
4
4
  function useMergeState(initialState) {
5
5
  var _a = react_1.useState(initialState ? initialState : {}), state = _a[0], _setState = _a[1];
6
6
  var callbackRef = react_1.useRef();
7
- var isFirstCallbackCall = react_1.useRef(true);
8
7
  var setState = react_1.useCallback(function (newState, callback) {
9
8
  callbackRef.current = callback;
10
9
  _setState(function (prevState) { return Object.assign({}, prevState, newState); });
11
- }, []);
10
+ }, [state]);
12
11
  react_1.useEffect(function () {
13
- if (isFirstCallbackCall.current) {
14
- isFirstCallbackCall.current = false;
15
- return;
16
- }
17
12
  if (callbackRef.current) {
18
13
  callbackRef.current(state);
19
14
  }
package/lib/route.js CHANGED
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var qs = require("query-string");
4
- function buildFromUrl() {
5
- return buildParameters(window.location.search);
4
+ function buildFromUrl(modelT) {
5
+ return buildParameters(window.location.search, modelT);
6
6
  }
7
7
  exports.buildFromUrl = buildFromUrl;
8
- function buildParameters(url) {
8
+ function buildParameters(url, model) {
9
9
  var urlSearch = url;
10
- var i = urlSearch.indexOf('?');
10
+ var i = urlSearch.indexOf("?");
11
11
  if (i >= 0) {
12
12
  urlSearch = url.substring(i + 1);
13
13
  }
14
14
  try {
15
- var parsed = convertToObject(qs.parse(urlSearch));
15
+ var parsed = convertToObject(qs.parse(urlSearch), model);
16
16
  return parsed;
17
17
  }
18
18
  catch (error) {
@@ -21,17 +21,20 @@ function buildParameters(url) {
21
21
  }
22
22
  }
23
23
  exports.buildParameters = buildParameters;
24
- function convertToObject(input) {
24
+ function convertToObject(input, model) {
25
+ if (model) {
26
+ return parseToModel(input, model);
27
+ }
25
28
  var output = {};
26
29
  for (var key in input) {
27
30
  var value = input[key];
28
- var keys = key.split('.');
31
+ var keys = key.split(".");
29
32
  var currentObj = output;
30
33
  for (var i = 0; i < keys.length; i++) {
31
34
  var currentKey = keys[i];
32
35
  if (!currentObj[currentKey]) {
33
36
  if (i === keys.length - 1) {
34
- currentObj[currentKey] = value;
37
+ currentObj[currentKey] = parseValue(value);
35
38
  }
36
39
  else {
37
40
  currentObj[currentKey] = {};
@@ -43,3 +46,44 @@ function convertToObject(input) {
43
46
  return output;
44
47
  }
45
48
  exports.convertToObject = convertToObject;
49
+ function parseToModel(dest, src) {
50
+ if (typeof dest !== 'object' || typeof src !== 'object') {
51
+ return dest;
52
+ }
53
+ dest = convertToObject(dest);
54
+ for (var key in src) {
55
+ if (!Object.hasOwn(dest, key))
56
+ continue;
57
+ if (src.hasOwnProperty(key)) {
58
+ if (src[key] && src[key].constructor === Object) {
59
+ if (!dest[key] || dest[key].constructor !== Object) {
60
+ dest[key] = {};
61
+ }
62
+ parseToModel(dest[key], src[key]);
63
+ }
64
+ else if (src[key] instanceof Date) {
65
+ dest[key] = new Date(dest[key]);
66
+ }
67
+ else if (typeof src[key] === 'boolean') {
68
+ if (dest[key].length > 0) {
69
+ dest[key] = new Boolean(dest[key]);
70
+ }
71
+ }
72
+ else if (typeof src[key] === 'number') {
73
+ if (typeof dest[key] === 'string' && dest[key].indexOf(".") !== -1) {
74
+ dest[key] = parseFloat(dest[key]);
75
+ }
76
+ else {
77
+ dest[key] = parseInt(dest[key], 10);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ return dest;
83
+ }
84
+ function parseValue(value) {
85
+ if (!isNaN(value) && !isNaN(parseFloat(value))) {
86
+ return parseFloat(value);
87
+ }
88
+ return value;
89
+ }
package/lib/search.js CHANGED
@@ -143,6 +143,7 @@ function changePage(com, pageIndex, pageSize) {
143
143
  }
144
144
  exports.changePage = changePage;
145
145
  function optimizeFilter(obj, searchable, fields) {
146
+ var sLimit = searchable.limit;
146
147
  obj.fields = fields;
147
148
  if (searchable.pageIndex && searchable.pageIndex > 1) {
148
149
  obj.page = searchable.pageIndex;
@@ -150,7 +151,12 @@ function optimizeFilter(obj, searchable, fields) {
150
151
  else {
151
152
  delete obj.page;
152
153
  }
153
- obj.limit = searchable.pageSize;
154
+ if (sLimit) {
155
+ obj.limit = searchable.limit;
156
+ }
157
+ else {
158
+ obj.limit = searchable.pageSize;
159
+ }
154
160
  if (searchable.appendMode && searchable.initPageSize !== searchable.pageSize) {
155
161
  obj.firstLimit = searchable.initPageSize;
156
162
  }
@@ -169,24 +175,22 @@ function optimizeFilter(obj, searchable, fields) {
169
175
  return obj;
170
176
  }
171
177
  exports.optimizeFilter = optimizeFilter;
172
- function mapObjects(objA, objB) {
178
+ function mapObjects(dest, src) {
173
179
  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) && typeof objB[key] === 'string') {
179
- var arrayObjKeyB = objB[key].length > 0 ? (_a = (objB[key])) === null || _a === void 0 ? void 0 : _a.split(',') : [];
180
- if (arrayObjKeyB && arrayObjKeyB.length > 1) {
181
- objA[key] = __spreadArrays(arrayObjKeyB);
182
- }
183
- else {
184
- objA[key].push(objB[key]);
185
- }
180
+ for (var key in dest) {
181
+ if (src.hasOwnProperty(key) && src[key] !== null && src[key] !== undefined) {
182
+ if (Array.isArray(dest[key]) && typeof src[key] === 'string' && src[key].length > 0) {
183
+ var arrayObjKeySrc = src[key].length > 0 ? (_a = (src[key])) === null || _a === void 0 ? void 0 : _a.split(',') : [];
184
+ if (arrayObjKeySrc && arrayObjKeySrc.length > 1) {
185
+ dest[key] = __spreadArrays(arrayObjKeySrc);
186
+ }
187
+ else {
188
+ dest[key] = [];
189
+ dest[key].push(src[key]);
186
190
  }
187
191
  }
188
192
  else {
189
- objA[key] = objB[key];
193
+ dest[key] = src[key];
190
194
  }
191
195
  }
192
196
  }
package/lib/state.js CHANGED
@@ -91,6 +91,7 @@ function buildState(e, state, ctrl, modelName, tloc) {
91
91
  var dataField = ctrl.getAttribute('data-field');
92
92
  var field = (dataField ? dataField : ctrl.name);
93
93
  var model = Object.assign({}, ex);
94
+ var dType = 'array';
94
95
  if (type && type.toLowerCase() === 'checkbox') {
95
96
  var value = model[field];
96
97
  if (ctrl.id && ctrl.name !== ctrl.id) {
@@ -123,7 +124,7 @@ function buildState(e, state, ctrl, modelName, tloc) {
123
124
  var objSet = {};
124
125
  try {
125
126
  var selectedDate = new Date(ctrl.value);
126
- reflect_1.setValue(model, field, ctrl.value && ctrl.value !== '' ? selectedDate.toISOString() : '');
127
+ reflect_1.setValue(model, field, ctrl.value && ctrl.value !== '' ? selectedDate.toISOString() : null);
127
128
  objSet[modelName] = model;
128
129
  return objSet;
129
130
  }
package/lib/update.js CHANGED
@@ -1,14 +1,30 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function (t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  var core_1 = require("./core");
4
15
  var merge_1 = require("./merge");
5
16
  var state_1 = require("./state");
6
- var m = 'model';
17
+ var react_1 = require("react");
18
+ var m = "model";
7
19
  var _getModelName = function (f2) {
8
20
  return core_1.getModelName(f2, m);
9
21
  };
10
22
  exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
11
23
  var _a = merge_1.useMergeState(initialState), state = _a[0], setState = _a[1];
24
+ var _b = react_1.useState(false), rerender = _b[0], setRerender = _b[1];
25
+ react_1.useEffect(function () {
26
+ setRerender(!rerender);
27
+ }, [state]);
12
28
  var updatePhoneState = function (event) {
13
29
  var re = /^[0-9\b]+$/;
14
30
  var target = event.currentTarget;
@@ -17,8 +33,8 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
17
33
  updateState(event);
18
34
  }
19
35
  else {
20
- var splitArr = value.split('');
21
- var responseStr_1 = '';
36
+ var splitArr = value.split("");
37
+ var responseStr_1 = "";
22
38
  splitArr.forEach(function (element) {
23
39
  if (re.test(element)) {
24
40
  responseStr_1 += element;
@@ -28,12 +44,12 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
28
44
  updateState(event);
29
45
  }
30
46
  };
31
- var getModelName = (typeof getName === 'function' ? getName : _getModelName);
47
+ var getModelName = typeof getName === "function" ? getName : _getModelName;
32
48
  var updateState = function (e, callback, lc) {
33
49
  var ctrl = e.currentTarget;
34
50
  var mn = m;
35
51
  if (getName) {
36
- if (typeof getName === 'string') {
52
+ if (typeof getName === "string") {
37
53
  mn = getName;
38
54
  }
39
55
  else {
@@ -48,7 +64,7 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
48
64
  var objSet = state_1.buildState(e, state, ctrl, mn, l);
49
65
  if (objSet) {
50
66
  if (callback) {
51
- setState(objSet, callback);
67
+ setState(__assign({}, objSet), callback);
52
68
  }
53
69
  else {
54
70
  setState(objSet);
@@ -73,6 +89,6 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
73
89
  updateFlatState: updateFlatState,
74
90
  getLocale: getLocale,
75
91
  setState: setState,
76
- state: state
92
+ state: state,
77
93
  };
78
94
  };
package/lib/useEdit.js CHANGED
@@ -138,11 +138,11 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
138
138
  showModel(model);
139
139
  };
140
140
  var _handleNotFound = function (form) {
141
- var msg = core_1.message(p1.resource.value, 'error_not_found', 'error');
141
+ var msg = core_1.message(p1.resource.value, 'error_404', 'error');
142
142
  if (form) {
143
143
  formutil_1.readOnly(form);
144
144
  }
145
- p1.showError(msg.message, msg.title);
145
+ p1.showError(msg.message, msg.title, undefined, function () { return window.history.back; });
146
146
  };
147
147
  var handleNotFound = (p && p.handleNotFound ? p.handleNotFound : _handleNotFound);
148
148
  var _getModel = function () {
@@ -299,16 +299,11 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
299
299
  var unmappedErrors = u.showFormError(f, errors);
300
300
  formutil_1.focusFirstError(f);
301
301
  if (!result.message) {
302
- if (errors && errors.length === 1) {
303
- result.message = errors[0].message;
302
+ if (p1.ui && p1.ui.buildErrorMessage) {
303
+ result.message = p1.ui.buildErrorMessage(unmappedErrors);
304
304
  }
305
305
  else {
306
- if (p1.ui && p1.ui.buildErrorMessage) {
307
- result.message = p1.ui.buildErrorMessage(unmappedErrors);
308
- }
309
- else {
310
- result.message = errors[0].message;
311
- }
306
+ result.message = errors[0].message;
312
307
  }
313
308
  }
314
309
  if (result.message) {
@@ -426,21 +421,32 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
426
421
  setRunning(false);
427
422
  core_1.hideLoading(p1.loading);
428
423
  }).catch(function (err) {
424
+ var _a, _b, _c;
429
425
  var data = (err && err.response) ? err.response : err;
430
426
  var r = p1.resource;
431
427
  var title = r.value('error');
432
428
  var msg = r.value('error_internal');
433
- if (data && data.status === 404) {
434
- handleNotFound(refForm.current);
429
+ var st = core_1.createEditStatus(p ? p.status : undefined);
430
+ if (data && data.status === 422) {
431
+ fail((_a = err.response) === null || _a === void 0 ? void 0 : _a.data);
432
+ var obj = (_c = (_b = err.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.value;
433
+ if (obj) {
434
+ callback ? callback(obj, showModel) : showModel(obj);
435
+ }
435
436
  }
436
437
  else {
437
- if (data.status && !isNaN(data.status)) {
438
- msg = core_1.messageByHttpStatus(data.status, r.value);
438
+ if (data && data.status === 404) {
439
+ handleNotFound(refForm.current);
439
440
  }
440
- if (data && (data.status === 401 || data.status === 403)) {
441
- formutil_1.readOnly(refForm.current);
441
+ else {
442
+ if (data.status && !isNaN(data.status)) {
443
+ msg = core_1.messageByHttpStatus(data.status, r.value);
444
+ }
445
+ if (data && (data.status === 401 || data.status === 403)) {
446
+ formutil_1.readOnly(refForm.current);
447
+ }
448
+ p1.showError(msg, title);
442
449
  }
443
- p1.showError(msg, title);
444
450
  }
445
451
  setRunning(false);
446
452
  core_1.hideLoading(p1.loading);
package/lib/useSearch.js CHANGED
@@ -44,7 +44,7 @@ exports.callSearch = function (se, search3, showResults3, searchError3, lc, next
44
44
  delete se['firstLimit'];
45
45
  search3(s, limit, next, fields).then(function (sr) {
46
46
  showResults3(s, sr, lc);
47
- }).catch(function (err) { return searchError3(err); });
47
+ }).catch(function (err) { return err && searchError3(err); });
48
48
  };
49
49
  var appendListOfState = function (results, list, setState2) {
50
50
  var arr = search_1.append(list, results);
@@ -113,7 +113,7 @@ exports.useSearch = function (refForm, initialState, service, p2, p) {
113
113
  else {
114
114
  var se = (p && p.createFilter ? p.createFilter() : undefined);
115
115
  try {
116
- var s = search_1.mergeFilter(route_1.buildFromUrl(), se, component.pageSizes);
116
+ var s = search_1.mergeFilter(route_1.buildFromUrl(se), se, component.pageSizes);
117
117
  load(s, p2.auto);
118
118
  }
119
119
  catch (error) {
@@ -138,11 +138,15 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
138
138
  var getModelName = (p && p.getModelName ? p.getModelName : _getModelName);
139
139
  var baseProps = update_1.useUpdate(initialState, getModelName, p1.getLocale, core_1.getRemoveError(p1));
140
140
  var state = baseProps.state, setState = baseProps.setState;
141
+ var _b = react_1.useState(false), rerender = _b[0], setRerender = _b[1];
142
+ react_1.useEffect(function () {
143
+ setRerender(!rerender);
144
+ }, [state]);
141
145
  var _getCurrencyCode = function () {
142
146
  return refForm && refForm.current ? refForm.current.getAttribute('currency-code') : null;
143
147
  };
144
148
  var getCurrencyCode = p && p.getCurrencyCode ? p.getCurrencyCode : _getCurrencyCode;
145
- var _b = merge_1.useMergeState(p), component = _b[0], setComponent = _b[1];
149
+ var _c = merge_1.useMergeState(p), component = _c[0], setComponent = _c[1];
146
150
  var toggleFilter = function (event) {
147
151
  var x = !component.hideFilter;
148
152
  core_1.handleToggle(event.target, !x);
@@ -195,6 +199,9 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
195
199
  var doSearch = function (se, isFirstLoad) {
196
200
  core_1.removeFormError(p1, refForm.current);
197
201
  var s = getFilter(se);
202
+ if (isFirstLoad) {
203
+ setState(state);
204
+ }
198
205
  var isStillRunning = running;
199
206
  validateSearch(s, function () {
200
207
  if (isStillRunning === true) {
@@ -312,7 +319,10 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
312
319
  var appendList = (p && p.appendList ? p.appendList : appendListOfState);
313
320
  var setList = (p && p.setList ? p.setList : setListOfState);
314
321
  var _showResults = function (s, sr, lc) {
315
- var results = sr.list;
322
+ if (sr == undefined) {
323
+ return;
324
+ }
325
+ var results = (sr === null || sr === void 0 ? void 0 : sr.list) || [];
316
326
  if (results && results.length > 0) {
317
327
  search_1.formatResults(results, component.pageIndex, component.pageSize, component.pageSize, p ? p.sequenceNo : undefined, p ? p.format : undefined, lc);
318
328
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-hook-core",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "react",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./src/index.ts",
package/src/com.ts CHANGED
@@ -1,53 +1,53 @@
1
- import * as React from 'react';
2
- import { Locale, pageSizes } from './core';
3
-
4
- export interface PageSizeProps {
5
- id?: string;
6
- name?: string;
7
- size?: number;
8
- sizes?: number[];
9
- onChange?: React.ChangeEventHandler<HTMLSelectElement>;
10
- }
11
- export function PageSizeSelect(p: PageSizeProps) {
12
- const g = p.sizes;
13
- const s = (!g || g.length === 0 ? pageSizes : g);
14
- const opts = s.map(pgSize => React.createElement('option', { key: pgSize, value: pgSize }, pgSize));
15
- return React.createElement('select', { id: p.id, name: p.name, defaultValue: p.size, onChange: p.onChange }, opts);
16
- }
17
- export interface Props {
18
- id?: string;
19
- name?: string;
20
- size?: number;
21
- sizes?: number[];
22
- className?: string;
23
- maxLength?: number;
24
- value?: string;
25
- placeholder?: string;
26
- pageSizeChanged?: (event: any) => void;
27
- search?: React.MouseEventHandler<HTMLElement>;
28
- toggle?: React.MouseEventHandler<HTMLElement>;
29
- clear?: React.MouseEventHandler<HTMLButtonElement>;
30
- onChange?: (e: any, callback?: (() => void) | undefined, lc?: Locale | undefined) => void;
31
- }
32
- export function Search(p: Props) {
33
- return (React.createElement(React.Fragment, null,
34
- React.createElement("label", { className: p.className },
35
- p.pageSizeChanged && React.createElement(PageSizeSelect, { size: p.size, sizes: p.sizes, onChange: p.pageSizeChanged, name: p.name, id: p.id }),
36
- React.createElement("input", { type: 'text', id: 'q', name: 'q', value: p.value || '', onChange: p.onChange, maxLength: p.maxLength, placeholder: p.placeholder }),
37
- p.clear && React.createElement("button", { type: 'button', hidden: !p.value, className: 'btn-remove-text', onClick: p.clear }),
38
- p.toggle && React.createElement("button", { type: 'button', className: 'btn-filter', onClick: p.toggle }),
39
- p.search && React.createElement("button", { type: 'submit', className: 'btn-search', onClick: p.search }))));
40
- /*
41
- return (
42
- <>
43
- <label className={p.className}>
44
- {p.pageSizeChanged && <PageSizeSelect size={p.size} sizes={p.sizes} onChange={p.pageSizeChanged} name={p.name} id={p.id} />}
45
- <input type='text' id='q' name='q' value={p.value || ''} onChange={p.onChange} maxLength={p.maxLength} placeholder={p.placeholder} />
46
- {p.clear && <button type='button' hidden={!p.value} className='btn-remove-text' onClick={p.clear}/>}
47
- {p.toggle && <button type='button' className='btn-filter' onClick={p.toggle} />}
48
- {p.search && <button type='submit' className='btn-search' onClick={p.search} />}
49
- </label>
50
- </>
51
- );
52
- */
53
- }
1
+ import * as React from 'react';
2
+ import { Locale, pageSizes } from './core';
3
+
4
+ export interface PageSizeProps {
5
+ id?: string;
6
+ name?: string;
7
+ size?: number;
8
+ sizes?: number[];
9
+ onChange?: React.ChangeEventHandler<HTMLSelectElement>;
10
+ }
11
+ export function PageSizeSelect(p: PageSizeProps) {
12
+ const g = p.sizes;
13
+ const s = (!g || g.length === 0 ? pageSizes : g);
14
+ const opts = s.map(pgSize => React.createElement('option', { key: pgSize, value: pgSize }, pgSize));
15
+ return React.createElement('select', { id: p.id, name: p.name, value: p.size, defaultValue: p.size, onChange: p.onChange }, opts);
16
+ }
17
+ export interface Props {
18
+ id?: string;
19
+ name?: string;
20
+ size?: number;
21
+ sizes?: number[];
22
+ className?: string;
23
+ maxLength?: number;
24
+ value?: string;
25
+ placeholder?: string;
26
+ pageSizeChanged?: (event: any) => void;
27
+ search?: React.MouseEventHandler<HTMLElement>;
28
+ toggle?: React.MouseEventHandler<HTMLElement>;
29
+ clear?: React.MouseEventHandler<HTMLButtonElement>;
30
+ onChange?: (e: any, callback?: (() => void) | undefined, lc?: Locale | undefined) => void;
31
+ }
32
+ export function Search(p: Props) {
33
+ return (React.createElement(React.Fragment, null,
34
+ React.createElement("label", { className: p.className },
35
+ p.pageSizeChanged && React.createElement(PageSizeSelect, { size: p.size, sizes: p.sizes, onChange: p.pageSizeChanged, name: p.name, id: p.id }),
36
+ React.createElement("input", { type: 'text', id: 'q', name: 'q', value: p.value || '', onChange: p.onChange, maxLength: p.maxLength, placeholder: p.placeholder }),
37
+ p.clear && React.createElement("button", { type: 'button', hidden: !p.value, className: 'btn-remove-text', onClick: p.clear }),
38
+ p.toggle && React.createElement("button", { type: 'button', className: 'btn-filter', onClick: p.toggle }),
39
+ p.search && React.createElement("button", { type: 'submit', className: 'btn-search', onClick: p.search }))));
40
+ /*
41
+ return (
42
+ <>
43
+ <label className={p.className}>
44
+ {p.pageSizeChanged && <PageSizeSelect size={p.size} sizes={p.sizes} onChange={p.pageSizeChanged} name={p.name} id={p.id} />}
45
+ <input type='text' id='q' name='q' value={p.value || ''} onChange={p.onChange} maxLength={p.maxLength} placeholder={p.placeholder} />
46
+ {p.clear && <button type='button' hidden={!p.value} className='btn-remove-text' onClick={p.clear}/>}
47
+ {p.toggle && <button type='button' className='btn-filter' onClick={p.toggle} />}
48
+ {p.search && <button type='submit' className='btn-search' onClick={p.search} />}
49
+ </label>
50
+ </>
51
+ );
52
+ */
53
+ }
package/src/merge.ts CHANGED
@@ -1,28 +1,23 @@
1
- import {useCallback, useEffect, useRef, useState} from 'react';
2
-
3
- export type Callback<T> = (value?: T) => void;
4
- export type DispatchWithCallback<T> = (value: T, callback?: Callback<T>) => void;
5
-
6
- export function useMergeState<T>(initialState?: T | (() => T)): [T, DispatchWithCallback<Partial<T>>] {
7
- const [state, _setState] = useState(initialState ? initialState : {} as any);
8
-
9
- const callbackRef = useRef<Callback<T>>();
10
- const isFirstCallbackCall = useRef<boolean>(true);
11
-
12
- const setState = useCallback((newState: Partial<T>, callback?: Callback<T>): void => {
13
- callbackRef.current = callback;
14
- _setState((prevState: any) => Object.assign({}, prevState, newState));
15
- }, []);
16
-
17
- useEffect(() => {
18
- if (isFirstCallbackCall.current) {
19
- isFirstCallbackCall.current = false;
20
- return;
21
- }
22
- if (callbackRef.current) {
23
- callbackRef.current(state);
24
- }
25
- }, [state]);
26
-
27
- return [state, setState];
28
- }
1
+ import {useCallback, useEffect, useRef, useState} from 'react';
2
+
3
+ export type Callback<T> = (value?: T) => void;
4
+ export type DispatchWithCallback<T> = (value: T, callback?: Callback<T>) => void;
5
+
6
+ export function useMergeState<T>(initialState?: T | (() => T)): [T, DispatchWithCallback<Partial<T>>] {
7
+ const [state, _setState] = useState(initialState ? initialState : {} as any);
8
+
9
+ const callbackRef = useRef<Callback<T>>();
10
+
11
+ const setState = useCallback((newState: Partial<T>, callback?: Callback<T>): void => {
12
+ callbackRef.current = callback;
13
+ _setState((prevState: any) => Object.assign({}, prevState, newState));
14
+ }, [state]);
15
+
16
+ useEffect( () => {
17
+ if (callbackRef.current) {
18
+ callbackRef.current(state);
19
+ }
20
+ }, [state]);
21
+
22
+ return [state, setState];
23
+ }