react-hook-core 0.4.23 → 0.5.0

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/core.js CHANGED
@@ -4,7 +4,12 @@ exports.pageSizes = [12, 24, 60, 100, 120, 180, 300, 600]
4
4
  exports.sizes = exports.pageSizes
5
5
  var resources = (function () {
6
6
  function resources() {}
7
- resources.phone = / |\-|\.|\(|\)/g
7
+ resources.removePhoneFormat = function (phone) {
8
+ return phone ? phone.replace(resources.phone, "") : ""
9
+ }
10
+ resources.removeFaxFormat = function (fax) {
11
+ return fax ? fax.replace(resources.fax, "") : ""
12
+ }
8
13
  resources._cache = {}
9
14
  resources.cache = true
10
15
  resources.fields = "fields"
@@ -13,6 +18,16 @@ var resources = (function () {
13
18
  resources.defaultLimit = 24
14
19
  resources.limits = exports.pageSizes
15
20
  resources.pageMaxSize = 7
21
+ resources.phone = / |\-|\.|\(|\)/g
22
+ resources.fax = / |\-|\.|\(|\)/g
16
23
  return resources
17
24
  })()
18
25
  exports.resources = resources
26
+ function removePhoneFormat(phone) {
27
+ return resources.removePhoneFormat(phone)
28
+ }
29
+ exports.removePhoneFormat = removePhoneFormat
30
+ function removeFaxFormat(fax) {
31
+ return resources.removeFaxFormat(fax)
32
+ }
33
+ exports.removeFaxFormat = removeFaxFormat
package/lib/search.js CHANGED
@@ -1,7 +1,22 @@
1
1
  "use strict"
2
+ var __assign =
3
+ (this && this.__assign) ||
4
+ function () {
5
+ __assign =
6
+ Object.assign ||
7
+ function (t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i]
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]
11
+ }
12
+ return t
13
+ }
14
+ return __assign.apply(this, arguments)
15
+ }
2
16
  Object.defineProperty(exports, "__esModule", { value: true })
3
17
  var core_1 = require("./core")
4
18
  var reflect_1 = require("./reflect")
19
+ var state_1 = require("./state")
5
20
  function mergeFilter(obj, b, pageSizes, arrs) {
6
21
  var a = b
7
22
  if (!b) {
@@ -316,15 +331,17 @@ function buildSortFilter(obj, sortable) {
316
331
  var filter = reflect_1.clone(obj)
317
332
  if (sortable.sortField && sortable.sortField.length > 0) {
318
333
  filter.sort = sortable.sortType === "-" ? "-" + sortable.sortField : sortable.sortField
334
+ obj.sort = filter.sort
319
335
  } else {
320
336
  delete filter.sort
337
+ delete obj.sort
321
338
  }
322
339
  delete filter.fields
323
340
  return filter
324
341
  }
325
342
  exports.buildSortFilter = buildSortFilter
326
- function handleToggle(target, on) {
327
- var off = !on
343
+ function handleToggle(target, off) {
344
+ var on = !off
328
345
  if (target) {
329
346
  if (on) {
330
347
  if (!target.classList.contains("on")) {
@@ -334,29 +351,67 @@ function handleToggle(target, on) {
334
351
  target.classList.remove("on")
335
352
  }
336
353
  }
337
- return off
354
+ return on
338
355
  }
339
356
  exports.handleToggle = handleToggle
340
357
  function getNumber(event) {
341
358
  return parseInt(event.currentTarget.value, 10)
342
359
  }
343
360
  exports.getNumber = getNumber
344
- function onPageSizeChanged(event, search, filter, setState) {
361
+ function setSortFilter(state, filter, setState, setFilter, search) {
362
+ setSort(state, filter.sort)
363
+ if (setFilter) {
364
+ setFilter(filter)
365
+ }
366
+ if (setState) {
367
+ setState(state)
368
+ }
369
+ if (search) {
370
+ search(true)
371
+ }
372
+ }
373
+ exports.setSortFilter = setSortFilter
374
+ function onToggleSearch(e, showFilter, setShowFilter) {
375
+ var toggleFilter = handleToggle(e.target, showFilter)
376
+ if (setShowFilter) {
377
+ setShowFilter(toggleFilter)
378
+ }
379
+ }
380
+ exports.onToggleSearch = onToggleSearch
381
+ function resetSearch(e, filter, setFilter, search) {
382
+ filter.page = 1
383
+ state_1.updateState(e, filter, setFilter)
384
+ if (search) {
385
+ search()
386
+ }
387
+ }
388
+ exports.resetSearch = resetSearch
389
+ function onClearQ(filter, setFilter, search) {
390
+ filter.q = ""
391
+ if (setFilter) {
392
+ setFilter(__assign({}, filter))
393
+ }
394
+ if (search) {
395
+ search()
396
+ }
397
+ }
398
+ exports.onClearQ = onClearQ
399
+ function onPageSizeChanged(event, search, filter, setFilter) {
345
400
  filter.page = 1
346
401
  filter.limit = getNumber(event)
347
- if (setState) {
348
- setState(filter)
402
+ if (setFilter) {
403
+ setFilter(filter)
349
404
  }
350
405
  search()
351
406
  }
352
407
  exports.onPageSizeChanged = onPageSizeChanged
353
- function onPageChanged(data, search, filter, setState) {
408
+ function onPageChanged(data, search, filter, setFilter) {
354
409
  var page = data.page,
355
410
  size = data.size
356
411
  filter.page = page
357
412
  filter.limit = size
358
- if (setState) {
359
- setState(filter)
413
+ if (setFilter) {
414
+ setFilter(filter)
360
415
  }
361
416
  search()
362
417
  }
package/lib/state.js CHANGED
@@ -14,6 +14,7 @@ var __assign =
14
14
  return __assign.apply(this, arguments)
15
15
  }
16
16
  Object.defineProperty(exports, "__esModule", { value: true })
17
+ var core_1 = require("./core")
17
18
  var reflect_1 = require("./reflect")
18
19
  var util_1 = require("./util")
19
20
  function getDecimalSeparator(ele) {
@@ -29,45 +30,56 @@ function getDecimalSeparator(ele) {
29
30
  exports.getDecimalSeparator = getDecimalSeparator
30
31
  var r1 = / |,|\$|€|£|¥|'|٬|،| /g
31
32
  var r2 = / |\.|\$|€|£|¥|'|٬|،| /g
32
- function updateState(e, o, setObj) {
33
+ function updateNumber(e, o, setObj, decimalSeparator, callback, formatStr) {
33
34
  var ctrl = e.target
35
+ var v0 = formatStr ? formatStr(ctrl.value) : ctrl.value
36
+ var dataField = ctrl.getAttribute("data-field")
37
+ var field = dataField ? dataField : ctrl.name
38
+ var v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
39
+ if (v.indexOf(",") >= 0) {
40
+ v = v.replace(",", ".")
41
+ }
42
+ var val = isNaN(v) ? undefined : parseInt(v)
43
+ reflect_1.setValue(o, field, val)
44
+ setObj(__assign({}, o))
45
+ if (callback) {
46
+ callback()
47
+ }
48
+ }
49
+ exports.updateNumber = updateNumber
50
+ function formatAndUpdateState(e, o, setObj, formatStr, callback) {
51
+ updateState(e, o, setObj, callback, formatStr)
52
+ }
53
+ exports.formatAndUpdateState = formatAndUpdateState
54
+ function updateState(e, o, setObj, callback, formatStr) {
55
+ var ctrl = e.target
56
+ var v0 = formatStr ? formatStr(ctrl.value) : ctrl.value
34
57
  var dataField = ctrl.getAttribute("data-field")
35
58
  var field = dataField ? dataField : ctrl.name
36
59
  if (ctrl.tagName === "SELECT") {
37
60
  if (ctrl.tagName === "SELECT") {
38
- if (ctrl.value === "" || !ctrl.value) {
61
+ if (v0 === "" || !v0) {
39
62
  ctrl.removeAttribute("data-value")
40
63
  } else {
41
- ctrl.setAttribute("data-value", "data-value")
64
+ ctrl.setAttribute("data-value", v0)
42
65
  }
43
66
  }
44
- reflect_1.setValue(o, field, ctrl.value)
67
+ reflect_1.setValue(o, field, v0)
45
68
  } else {
46
69
  var stype = ctrl.getAttribute("type")
47
70
  var type = stype ? stype.toLowerCase() : "text"
48
71
  var model = o
49
- if (type === "text") {
50
- var datatype = ctrl.getAttribute("data-type")
51
- if (datatype === "number" || datatype === "integer") {
52
- var decimalSeparator = getDecimalSeparator(ctrl)
53
- var v0 = ctrl.value
54
- var v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
55
- var val = isNaN(v) ? undefined : parseFloat(v)
56
- reflect_1.setValue(o, field, val)
57
- } else {
58
- reflect_1.setValue(o, field, ctrl.value)
59
- }
60
- } else if (type === "checkbox") {
72
+ if (type === "checkbox") {
61
73
  var value = model[field]
62
74
  if (ctrl.id && ctrl.name !== ctrl.id) {
63
75
  if (!value || !Array.isArray(value)) {
64
76
  value = []
65
77
  }
66
- value.includes(ctrl.value)
78
+ value.includes(v0)
67
79
  ? (value = value.filter(function (v) {
68
- return v !== ctrl.value
80
+ return v !== v0
69
81
  }))
70
- : value.push(ctrl.value)
82
+ : value.push(v0)
71
83
  model[field] = value
72
84
  } else {
73
85
  var v = valueOfCheckbox(ctrl)
@@ -75,31 +87,46 @@ function updateState(e, o, setObj) {
75
87
  }
76
88
  } else if (type === "radio") {
77
89
  if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
78
- model[field] = ctrl.value
90
+ model[field] = v0
79
91
  } else {
80
- reflect_1.setValue(model, field, ctrl.value)
92
+ reflect_1.setValue(model, field, v0)
81
93
  }
82
94
  } else if (type === "date" || type === "datetime-local") {
83
- try {
84
- var selectedDate = new Date(ctrl.value)
85
- reflect_1.setValue(model, field, ctrl.value && ctrl.value !== "" ? selectedDate.toISOString() : null)
86
- } catch (error) {
87
- console.error("Error occurred while formatting date:", error)
88
- }
95
+ var date = new Date(v0)
96
+ var val = !isNaN(date.getTime()) ? date.toISOString() : null
97
+ reflect_1.setValue(model, field, val)
89
98
  } else if (type === "time") {
90
- var objSet = {}
91
- try {
92
- var selectedDate = new Date(ctrl.value)
93
- reflect_1.setValue(model, field, selectedDate.getTime())
94
- } catch (error) {
95
- console.error("Error occurred while formatting time:", error)
99
+ var date = new Date(v0)
100
+ if (!isNaN(date.getTime())) {
101
+ reflect_1.setValue(model, field, date.getTime())
102
+ } else {
103
+ reflect_1.setValue(model, field, null)
96
104
  }
97
- return objSet
98
105
  } else {
99
- reflect_1.setValue(o, field, ctrl.value)
106
+ var datatype = ctrl.getAttribute("data-type")
107
+ if (datatype === "phone") {
108
+ var val = core_1.removePhoneFormat(v0)
109
+ reflect_1.setValue(o, field, val)
110
+ } else if (datatype === "fax") {
111
+ var val = core_1.removeFaxFormat(v0)
112
+ reflect_1.setValue(o, field, val)
113
+ } else if (datatype === "number" || datatype === "int") {
114
+ var decimalSeparator = getDecimalSeparator(ctrl)
115
+ var v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
116
+ if (v.indexOf(",") >= 0) {
117
+ v = v.replace(",", ".")
118
+ }
119
+ var val = isNaN(v) ? undefined : parseFloat(v)
120
+ reflect_1.setValue(o, field, val)
121
+ } else {
122
+ reflect_1.setValue(o, field, v0)
123
+ }
100
124
  }
101
125
  }
102
126
  setObj(__assign({}, o))
127
+ if (callback) {
128
+ callback()
129
+ }
103
130
  }
104
131
  exports.updateState = updateState
105
132
  exports.enLocale = {
package/lib/update.js CHANGED
@@ -17,14 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true })
17
17
  var react_1 = require("react")
18
18
  var core_1 = require("./core")
19
19
  var state_1 = require("./state")
20
- function removePhoneFormat(phone) {
21
- if (phone) {
22
- return phone.replace(core_1.resources.phone, "")
23
- } else {
24
- return phone
25
- }
26
- }
27
- exports.removePhoneFormat = removePhoneFormat
28
20
  function getModelName(form, name) {
29
21
  if (form) {
30
22
  var a = form.getAttribute("model-name")
@@ -90,7 +82,7 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
90
82
  var updatePhoneState = function (event) {
91
83
  var re = /^[0-9\b]+$/
92
84
  var target = event.currentTarget
93
- var value = removePhoneFormat(target.value)
85
+ var value = core_1.removePhoneFormat(target.value)
94
86
  if (re.test(value) || !value) {
95
87
  updateState(event)
96
88
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-hook-core",
3
- "version": "0.4.23",
3
+ "version": "0.5.0",
4
4
  "description": "react",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./src/index.ts",
package/src/core.ts CHANGED
@@ -6,7 +6,6 @@ export const pageSizes = [12, 24, 60, 100, 120, 180, 300, 600]
6
6
  export const sizes = pageSizes
7
7
  // tslint:disable-next-line:class-name
8
8
  export class resources {
9
- static phone = / |\-|\.|\(|\)/g
10
9
  static _cache: any = {}
11
10
  static cache = true
12
11
  static fields = "fields"
@@ -15,6 +14,20 @@ export class resources {
15
14
  static defaultLimit = 24
16
15
  static limits = pageSizes
17
16
  static pageMaxSize = 7
17
+ static phone = / |\-|\.|\(|\)/g
18
+ static fax = / |\-|\.|\(|\)/g
19
+ static removePhoneFormat(phone?: string | null): string {
20
+ return phone ? phone.replace(resources.phone, "") : ""
21
+ }
22
+ static removeFaxFormat(fax?: string | null): string {
23
+ return fax ? fax.replace(resources.fax, "") : ""
24
+ }
25
+ }
26
+ export function removePhoneFormat(phone?: string | null): string {
27
+ return resources.removePhoneFormat(phone)
28
+ }
29
+ export function removeFaxFormat(fax?: string | null): string {
30
+ return resources.removeFaxFormat(fax)
18
31
  }
19
32
 
20
33
  export interface StringMap {
package/src/index.ts CHANGED
@@ -14,6 +14,10 @@ export * from "./useEdit"
14
14
  export * from "./useMessage"
15
15
  export * from "./useSearch"
16
16
  export * from "./util"
17
+
18
+ export type ButtonMouseEvent = React.MouseEvent<HTMLButtonElement, MouseEvent>
19
+ export type SelectChangeEvent = ChangeEvent<HTMLSelectElement>
20
+ export type InputChangeEvent = ChangeEvent<HTMLInputElement>
17
21
  /*
18
22
  type CallBackType<T> = (updatedValue: T) => void;
19
23
  type SetStateType<T> = T | ((prev: T) => T);
package/src/search.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ChangeEvent } from "react"
2
2
  import { resources, StringMap } from "./core"
3
3
  import { clone } from "./reflect"
4
+ import { updateState } from "./state"
4
5
 
5
6
  export interface PageChange {
6
7
  page: number // currentPage
@@ -352,14 +353,16 @@ export function buildSortFilter<S extends Filter>(obj: S, sortable: Sortable): S
352
353
  const filter: any = clone(obj)
353
354
  if (sortable.sortField && sortable.sortField.length > 0) {
354
355
  filter.sort = sortable.sortType === "-" ? "-" + sortable.sortField : sortable.sortField
356
+ obj.sort = filter.sort
355
357
  } else {
356
358
  delete filter.sort
359
+ delete obj.sort
357
360
  }
358
361
  delete filter.fields
359
362
  return filter
360
363
  }
361
- export function handleToggle(target?: HTMLElement, on?: boolean): boolean {
362
- const off = !on
364
+ export function handleToggle(target?: HTMLElement, off?: boolean): boolean {
365
+ const on = !off
363
366
  if (target) {
364
367
  if (on) {
365
368
  if (!target.classList.contains("on")) {
@@ -369,31 +372,80 @@ export function handleToggle(target?: HTMLElement, on?: boolean): boolean {
369
372
  target.classList.remove("on")
370
373
  }
371
374
  }
372
- return off
375
+ return on
373
376
  }
374
-
375
377
  export function getNumber(event: ChangeEvent<HTMLSelectElement | HTMLInputElement>): number {
376
378
  return parseInt(event.currentTarget.value, 10)
377
379
  }
380
+
381
+ export function setSortFilter<F extends Filter, T extends Sortable>(
382
+ state: T,
383
+ filter: F,
384
+ setState?: (v: React.SetStateAction<T>) => void,
385
+ setFilter?: (v: React.SetStateAction<F>) => void,
386
+ search?: (first?: boolean) => void,
387
+ ) {
388
+ setSort(state, filter.sort)
389
+ if (setFilter) {
390
+ setFilter(filter)
391
+ }
392
+ if (setState) {
393
+ setState(state)
394
+ }
395
+ if (search) {
396
+ search(true)
397
+ }
398
+ }
399
+ export function onToggleSearch(
400
+ e: React.MouseEvent<HTMLButtonElement, MouseEvent>,
401
+ showFilter: boolean,
402
+ setShowFilter?: (v: React.SetStateAction<boolean>) => void,
403
+ ) {
404
+ const toggleFilter = handleToggle(e.target as HTMLElement, showFilter)
405
+ if (setShowFilter) {
406
+ setShowFilter(toggleFilter)
407
+ }
408
+ }
409
+ export function resetSearch<T extends Filter>(
410
+ e: ChangeEvent<HTMLInputElement, HTMLInputElement>,
411
+ filter: T,
412
+ setFilter: (v: React.SetStateAction<T>) => void,
413
+ search?: () => void,
414
+ ) {
415
+ filter.page = 1
416
+ updateState(e, filter, setFilter)
417
+ if (search) {
418
+ search()
419
+ }
420
+ }
421
+ export function onClearQ<T extends Filter>(filter: T, setFilter?: (v: React.SetStateAction<T>) => void, search?: () => void) {
422
+ filter.q = ""
423
+ if (setFilter) {
424
+ setFilter({ ...filter })
425
+ }
426
+ if (search) {
427
+ search()
428
+ }
429
+ }
378
430
  export function onPageSizeChanged<T extends Filter>(
379
431
  event: ChangeEvent<HTMLSelectElement>,
380
432
  search: () => void,
381
433
  filter: T,
382
- setState?: (v: React.SetStateAction<T>) => void,
434
+ setFilter?: (v: React.SetStateAction<T>) => void,
383
435
  ) {
384
436
  filter.page = 1
385
437
  filter.limit = getNumber(event)
386
- if (setState) {
387
- setState(filter)
438
+ if (setFilter) {
439
+ setFilter(filter)
388
440
  }
389
441
  search()
390
442
  }
391
- export function onPageChanged<T extends Filter>(data: PageChange, search: () => void, filter: T, setState?: (v: React.SetStateAction<T>) => void) {
443
+ export function onPageChanged<T extends Filter>(data: PageChange, search: () => void, filter: T, setFilter?: (v: React.SetStateAction<T>) => void) {
392
444
  const { page, size } = data
393
445
  filter.page = page
394
446
  filter.limit = size
395
- if (setState) {
396
- setState(filter)
447
+ if (setFilter) {
448
+ setFilter(filter)
397
449
  }
398
450
  search()
399
451
  }
package/src/state.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ChangeEvent } from "react"
2
- import { Locale } from "./core"
2
+ import { Locale, removeFaxFormat, removePhoneFormat } from "./core"
3
3
  import { setValue } from "./reflect"
4
4
  import { valueOf } from "./util"
5
5
 
@@ -16,45 +16,69 @@ export function getDecimalSeparator(ele: HTMLInputElement): string {
16
16
 
17
17
  const r1 = / |,|\$|€|£|¥|'|٬|،| /g
18
18
  const r2 = / |\.|\$|€|£|¥|'|٬|،| /g
19
+ export function updateNumber<T>(
20
+ e: ChangeEvent<HTMLInputElement, HTMLInputElement>,
21
+ o: T,
22
+ setObj: (v: React.SetStateAction<T>) => void,
23
+ decimalSeparator?: string,
24
+ callback?: () => void,
25
+ formatStr?: (s?: string) => string,
26
+ ) {
27
+ const ctrl = e.target
28
+ const v0: string = formatStr ? formatStr(ctrl.value) : ctrl.value
29
+ const dataField = ctrl.getAttribute("data-field")
30
+ const field = dataField ? dataField : ctrl.name
31
+ let v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
32
+ if (v.indexOf(",") >= 0) {
33
+ v = v.replace(",", ".")
34
+ }
35
+ const val = isNaN(v as any) ? undefined : parseInt(v)
36
+ setValue(o, field, val)
37
+ setObj({ ...o })
38
+ if (callback) {
39
+ callback()
40
+ }
41
+ }
42
+ export function formatAndUpdateState<T>(
43
+ e: ChangeEvent<HTMLInputElement, HTMLInputElement> | ChangeEvent<HTMLTextAreaElement, HTMLTextAreaElement>,
44
+ o: T,
45
+ setObj: (v: React.SetStateAction<T>) => void,
46
+ formatStr?: (s?: string) => string,
47
+ callback?: () => void,
48
+ ) {
49
+ updateState(e, o, setObj, callback, formatStr)
50
+ }
19
51
  export function updateState<T>(
20
52
  e: ChangeEvent<HTMLInputElement, HTMLInputElement> | ChangeEvent<HTMLTextAreaElement, HTMLTextAreaElement>,
21
53
  o: T,
22
54
  setObj: (v: React.SetStateAction<T>) => void,
55
+ callback?: () => void,
56
+ formatStr?: (s?: string) => string,
23
57
  ) {
24
58
  const ctrl = e.target
59
+ const v0: string = formatStr ? formatStr(ctrl.value) : ctrl.value
25
60
  const dataField = ctrl.getAttribute("data-field")
26
61
  const field = dataField ? dataField : ctrl.name
27
62
  if (ctrl.tagName === "SELECT") {
28
63
  if (ctrl.tagName === "SELECT") {
29
- if (ctrl.value === "" || !ctrl.value) {
64
+ if (v0 === "" || !v0) {
30
65
  ctrl.removeAttribute("data-value")
31
66
  } else {
32
- ctrl.setAttribute("data-value", "data-value")
67
+ ctrl.setAttribute("data-value", v0)
33
68
  }
34
69
  }
35
- setValue(o, field, ctrl.value)
70
+ setValue(o, field, v0)
36
71
  } else {
37
72
  let stype = ctrl.getAttribute("type")
38
73
  const type: string = stype ? stype.toLowerCase() : "text"
39
74
  let model: any = o
40
- if (type === "text") {
41
- const datatype = ctrl.getAttribute("data-type")
42
- if (datatype === "number" || datatype === "integer") {
43
- const decimalSeparator = getDecimalSeparator(ctrl as HTMLInputElement)
44
- const v0: string = ctrl.value
45
- const v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
46
- const val = isNaN(v as any) ? undefined : parseFloat(v)
47
- setValue(o, field, val)
48
- } else {
49
- setValue(o, field, ctrl.value)
50
- }
51
- } else if (type === "checkbox") {
75
+ if (type === "checkbox") {
52
76
  let value = model[field]
53
77
  if (ctrl.id && ctrl.name !== ctrl.id) {
54
78
  if (!value || !Array.isArray(value)) {
55
79
  value = []
56
80
  }
57
- value.includes(ctrl.value) ? (value = value.filter((v: string) => v !== ctrl.value)) : value.push(ctrl.value)
81
+ value.includes(v0) ? (value = value.filter((v: string) => v !== v0)) : value.push(v0)
58
82
  model[field] = value
59
83
  } else {
60
84
  const v = valueOfCheckbox(ctrl as HTMLInputElement)
@@ -62,31 +86,46 @@ export function updateState<T>(
62
86
  }
63
87
  } else if (type === "radio") {
64
88
  if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
65
- model[field] = ctrl.value
89
+ model[field] = v0
66
90
  } else {
67
- setValue(model, field, ctrl.value)
91
+ setValue(model, field, v0)
68
92
  }
69
93
  } else if (type === "date" || type === "datetime-local") {
70
- try {
71
- const selectedDate = new Date(ctrl.value)
72
- setValue(model, field, ctrl.value && ctrl.value !== "" ? selectedDate.toISOString() : null)
73
- } catch (error) {
74
- console.error("Error occurred while formatting date:", error)
75
- }
94
+ const date = new Date(v0)
95
+ const val = !isNaN(date.getTime()) ? date.toISOString() : null
96
+ setValue(model, field, val)
76
97
  } else if (type === "time") {
77
- const objSet: any = {}
78
- try {
79
- const selectedDate = new Date(ctrl.value)
80
- setValue(model, field, selectedDate.getTime())
81
- } catch (error) {
82
- console.error("Error occurred while formatting time:", error)
98
+ const date = new Date(v0)
99
+ if (!isNaN(date.getTime())) {
100
+ setValue(model, field, date.getTime())
101
+ } else {
102
+ setValue(model, field, null)
83
103
  }
84
- return objSet
85
104
  } else {
86
- setValue(o, field, ctrl.value)
105
+ const datatype = ctrl.getAttribute("data-type")
106
+ if (datatype === "phone") {
107
+ const val = removePhoneFormat(v0)
108
+ setValue(o, field, val)
109
+ } else if (datatype === "fax") {
110
+ const val = removeFaxFormat(v0)
111
+ setValue(o, field, val)
112
+ } else if (datatype === "number" || datatype === "int") {
113
+ const decimalSeparator = getDecimalSeparator(ctrl as HTMLInputElement)
114
+ let v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
115
+ if (v.indexOf(",") >= 0) {
116
+ v = v.replace(",", ".")
117
+ }
118
+ const val = isNaN(v as any) ? undefined : parseFloat(v)
119
+ setValue(o, field, val)
120
+ } else {
121
+ setValue(o, field, v0)
122
+ }
87
123
  }
88
124
  }
89
125
  setObj({ ...o })
126
+ if (callback) {
127
+ callback()
128
+ }
90
129
  }
91
130
 
92
131
  export const enLocale = {
package/src/update.ts CHANGED
@@ -1,15 +1,7 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react"
2
- import { Locale, resources } from "./core"
2
+ import { Locale, removePhoneFormat } from "./core"
3
3
  import { buildFlatState, buildState, handleEvent, localeOf } from "./state"
4
4
 
5
- export function removePhoneFormat(phone: string): string {
6
- if (phone) {
7
- return phone.replace(resources.phone, "")
8
- } else {
9
- return phone
10
- }
11
- }
12
-
13
5
  export function getModelName(form?: HTMLFormElement | null, name?: string): string {
14
6
  if (form) {
15
7
  const a = form.getAttribute("model-name")