react-hook-core 0.4.6 → 0.4.8

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/util.ts CHANGED
@@ -1,120 +1,121 @@
1
- import {Locale} from './core';
2
- import {enLocale} from './state';
1
+ import { Locale } from "./core"
2
+ import { enLocale } from "./state"
3
3
 
4
- const r1 = / |,|\$|€|£|¥|'|٬|،| /g;
5
- const r2 = / |\.|\$|€|£|¥|'|٬|،| /g;
4
+ const r1 = / |,|\$|€|£|¥|'|٬|،| /g
5
+ const r2 = / |\.|\$|€|£|¥|'|٬|،| /g
6
6
 
7
- export function valueOf(ctrl: HTMLInputElement, locale?: Locale, eventType?: string): { mustChange: any, value?: any } {
8
- if (ctrl.type === 'checkbox') {
9
- const ctrlOnValue = ctrl.getAttribute('data-on-value');
10
- const ctrlOffValue = ctrl.getAttribute('data-off-value');
7
+ export function valueOf(ctrl: HTMLInputElement, locale?: Locale, eventType?: string): { mustChange: any; value?: any } {
8
+ if (ctrl.type === "checkbox") {
9
+ const ctrlOnValue = ctrl.getAttribute("data-on-value")
10
+ const ctrlOffValue = ctrl.getAttribute("data-off-value")
11
11
  if (ctrlOnValue && ctrlOffValue) {
12
- const onValue = ctrlOnValue ? ctrlOnValue : true;
13
- const offValue = ctrlOffValue ? ctrlOffValue : false;
14
- return ctrl.checked === true ? { mustChange: true, value: onValue } : { mustChange: true, value: offValue };
12
+ const onValue = ctrlOnValue ? ctrlOnValue : true
13
+ const offValue = ctrlOffValue ? ctrlOffValue : false
14
+ return ctrl.checked === true ? { mustChange: true, value: onValue } : { mustChange: true, value: offValue }
15
15
  } else {
16
- return ctrl.checked === true ? { mustChange: true, value: true } : { mustChange: true, value: false };
16
+ return ctrl.checked === true ? { mustChange: true, value: true } : { mustChange: true, value: false }
17
17
  }
18
18
  } else {
19
- const datatype = ctrl.getAttribute('data-type');
20
- if (datatype === 'number' || datatype === 'int') {
21
- let v;
22
- if (locale && locale.decimalSeparator !== '.') {
23
- v = ctrl.value.replace(r2, '');
19
+ const datatype = ctrl.getAttribute("data-type")
20
+ if (datatype === "number" || datatype === "int") {
21
+ let v
22
+ if (locale && locale.decimalSeparator !== ".") {
23
+ v = ctrl.value.replace(r2, "")
24
24
  if (v.indexOf(locale.decimalSeparator) >= 0) {
25
- v = v.replace(locale.decimalSeparator, '.');
25
+ v = v.replace(locale.decimalSeparator, ".")
26
26
  }
27
27
  } else {
28
- v = ctrl.value.replace(r1, '');
28
+ v = ctrl.value.replace(r1, "")
29
29
  }
30
- return isNaN(v as any) ? { mustChange: false } : { mustChange: true, value: parseFloat(v) };
31
- } else if (datatype === 'currency' || datatype === 'string-currency') {
32
- const ml = ctrl.getAttribute('maxlength');
33
- const nm = (ml != null && !isNaN(ml as any) ? parseInt(ml, 10) : undefined);
34
- const res: any = getStringCurrency(ctrl.value, datatype, locale, nm, eventType === 'blur');
35
- return res;
30
+ return isNaN(v as any) ? { mustChange: false } : { mustChange: true, value: parseFloat(v) }
31
+ } else if (datatype === "currency" || datatype === "string-currency") {
32
+ const ml = ctrl.getAttribute("maxlength")
33
+ const nm = ml != null && !isNaN(ml as any) ? parseInt(ml, 10) : undefined
34
+ const res: any = getStringCurrency(ctrl.value, datatype, locale, nm, eventType === "blur")
35
+ return res
36
36
  } else {
37
- return { mustChange: true, value: ctrl.value };
37
+ return { mustChange: true, value: ctrl.value }
38
38
  }
39
39
  }
40
40
  }
41
41
 
42
- function getStringCurrency(value: string, datatype: string, locale?: Locale, maxLength?: number, isOnBlur?: boolean): { mustChange: any, value?: string } {
43
- if (locale && locale.decimalSeparator !== '.') {
44
- value = value.replace(r2, '');
42
+ function getStringCurrency(value: string, datatype: string, locale?: Locale, maxLength?: number, isOnBlur?: boolean): { mustChange: any; value?: string } {
43
+ if (locale && locale.decimalSeparator !== ".") {
44
+ value = value.replace(r2, "")
45
45
  if (value.indexOf(locale.decimalSeparator) >= 0) {
46
- value = value.replace(locale.decimalSeparator, '.');
46
+ value = value.replace(locale.decimalSeparator, ".")
47
47
  }
48
48
  } else {
49
- value = value.replace(r1, '');
49
+ value = value.replace(r1, "")
50
50
  }
51
- if (value === '') {
52
- return { mustChange: true, value: '' };
51
+ if (value === "") {
52
+ return { mustChange: true, value: "" }
53
53
  }
54
- value = extractNumber(value, '.'); // value = ReactUtil.extractNumber(value, locale.decimalSeparator);
54
+ value = extractNumber(value, ".") // value = ReactUtil.extractNumber(value, locale.decimalSeparator);
55
55
  if (value.length === 0) {
56
- return { mustChange: false };
57
- } else if (value.length > 0 && value.charAt(0) === '0') {
58
- return { mustChange: true, value: value.substring(1) };
56
+ return { mustChange: false }
57
+ } else if (value.length > 0 && value.charAt(0) === "0") {
58
+ return { mustChange: true, value: value.substring(1) }
59
59
  }
60
60
 
61
61
  if (!locale) {
62
- locale = enLocale;
62
+ locale = enLocale
63
63
  }
64
- const decimalDigits = locale ? locale.decimalDigits : 2;
65
- const groupDigits = 3; // TODO in database locale don't have data
66
- const decimalSeparator = locale.decimalSeparator; // '.'
67
- const groupSeparator = locale.groupSeparator; // ','
64
+ const decimalDigits = locale ? locale.decimalDigits : 2
65
+ const groupDigits = 3 // TODO in database locale don't have data
66
+ const decimalSeparator = locale.decimalSeparator // '.'
67
+ const groupSeparator = locale.groupSeparator // ','
68
68
 
69
69
  if (isOnBlur) {
70
- const number = Number(value.replace(/^0+/, ''));
70
+ const number = Number(value.replace(/^0+/, ""))
71
71
  if (number === 0) {
72
- return { mustChange: true, value: '' };
72
+ return { mustChange: true, value: "" }
73
73
  } else {
74
- value = number.toFixed(decimalDigits);
74
+ value = number.toFixed(decimalDigits)
75
75
  }
76
76
  }
77
77
 
78
- const dotPosition = value.indexOf('.');
78
+ const dotPosition = value.indexOf(".")
79
79
  // Format thousands
80
- let beforeDot = dotPosition >= 0 ? value.substr(0, dotPosition) : value;
81
- if (datatype === 'string-currency' || isOnBlur) {
82
- beforeDot = beforeDot.replace(new RegExp('\\B(?=(\\d{' + groupDigits + '})+(?!\\d))', 'g'), groupSeparator);
80
+ let beforeDot = dotPosition >= 0 ? value.substr(0, dotPosition) : value
81
+ if (datatype === "string-currency" || isOnBlur) {
82
+ beforeDot = beforeDot.replace(new RegExp("\\B(?=(\\d{" + groupDigits + "})+(?!\\d))", "g"), groupSeparator)
83
83
  }
84
84
 
85
85
  // Cut after dot
86
- let afterDot;
86
+ let afterDot
87
87
  if (dotPosition > 0) {
88
- afterDot = value.substr(dotPosition + 1);
88
+ afterDot = value.substr(dotPosition + 1)
89
89
  if (afterDot.length > decimalDigits) {
90
- afterDot = afterDot.substr(0, decimalDigits);
90
+ afterDot = afterDot.substr(0, decimalDigits)
91
91
  }
92
92
  }
93
93
  if (maxLength && beforeDot.length > maxLength - (decimalDigits + 1)) {
94
- return { mustChange: false };
94
+ return { mustChange: false }
95
95
  }
96
96
 
97
- value = dotPosition >= 0 ? beforeDot + decimalSeparator + afterDot : beforeDot;
98
- return maxLength && value.length > maxLength ? { mustChange: false } : { mustChange: true, value };
97
+ value = dotPosition >= 0 ? beforeDot + decimalSeparator + afterDot : beforeDot
98
+ return maxLength && value.length > maxLength ? { mustChange: false } : { mustChange: true, value }
99
99
  }
100
100
 
101
101
  function extractNumber(str: string, decimalSeparator: string): string {
102
- const arrs: string[] = [];
103
- let d = false;
102
+ const arrs: string[] = []
103
+ let d = false
104
104
  for (let i = 0; i < str.length; i++) {
105
- const ch = str.charAt(i); // get char
106
- if (ch >= '0' && ch <= '9') {
107
- arrs.push(ch);
108
- } else if (ch === decimalSeparator) {// else if (ch === '.') {
105
+ const ch = str.charAt(i) // get char
106
+ if (ch >= "0" && ch <= "9") {
107
+ arrs.push(ch)
108
+ } else if (ch === decimalSeparator) {
109
+ // else if (ch === '.') {
109
110
  if (d) {
110
- return arrs.join('');
111
+ return arrs.join("")
111
112
  } else {
112
- d = true;
113
- arrs.push(ch);
113
+ d = true
114
+ arrs.push(ch)
114
115
  }
115
116
  } else {
116
- return arrs.join('');
117
+ return arrs.join("")
117
118
  }
118
119
  }
119
- return arrs.join('');
120
+ return arrs.join("")
120
121
  }
package/lib/useView.js DELETED
@@ -1,126 +0,0 @@
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
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- var react_1 = require("react");
15
- var react_router_1 = require("react-router");
16
- var core_1 = require("./core");
17
- var formutil_1 = require("./formutil");
18
- var merge_1 = require("./merge");
19
- exports.useViewOne = function (p) {
20
- return exports.useCoreView(p.refForm, p.initialState, p.service, p, p);
21
- };
22
- exports.useView = function (refForm, initialState, service, p1, p) {
23
- var baseProps = exports.useCoreView(refForm, initialState, service, p1, p);
24
- var _a = merge_1.useMergeState(initialState), setState = _a[1];
25
- var params = react_router_1.useParams();
26
- react_1.useEffect(function () {
27
- if (baseProps.refForm) {
28
- core_1.initForm(baseProps.refForm.current);
29
- }
30
- var id = core_1.buildId(params, p ? p.keys : undefined);
31
- if (id) {
32
- if (p && p.initialize) {
33
- p.initialize(id, baseProps.load, setState, p.callback);
34
- }
35
- else {
36
- baseProps.load(id, p ? p.callback : undefined);
37
- }
38
- }
39
- }, []);
40
- return __assign({}, baseProps);
41
- };
42
- exports.useCoreView = function (refForm, initialState, service, p1, p) {
43
- var _a = merge_1.useMergeState(initialState), state = _a[0], setState = _a[1];
44
- var _b = react_1.useState(), running = _b[0], setRunning = _b[1];
45
- var navigate = react_router_1.useNavigate();
46
- var back = function (event) {
47
- if (event) {
48
- event.preventDefault();
49
- }
50
- navigate(-1);
51
- };
52
- var getModelName = function (f) {
53
- if (p && p.name) {
54
- return p.name;
55
- }
56
- return core_1.getModelName(f, 'model');
57
- };
58
- var showModel = function (model) {
59
- var n = getModelName(refForm.current);
60
- var objSet = {};
61
- objSet[n] = model;
62
- setState(objSet);
63
- };
64
- var _handleNotFound = function (form) {
65
- var msg = core_1.message(p1.resource.value, 'error_not_found', 'error');
66
- if (form) {
67
- formutil_1.setReadOnly(form);
68
- }
69
- p1.showError(msg.message, msg.title);
70
- };
71
- var handleNotFound = (p && p.handleNotFound ? p.handleNotFound : _handleNotFound);
72
- var _load = function (_id, callback) {
73
- var id = _id;
74
- if (id != null && id !== '') {
75
- setRunning(true);
76
- core_1.showLoading(p1.loading);
77
- var fn = (typeof service === 'function' ? service : service.load);
78
- fn(id).then(function (obj) {
79
- if (!obj) {
80
- handleNotFound(refForm.current);
81
- }
82
- else {
83
- if (callback) {
84
- callback(obj, showModel);
85
- }
86
- else {
87
- showModel(obj);
88
- }
89
- }
90
- setRunning(false);
91
- core_1.hideLoading(p1.loading);
92
- }).catch(function (err) {
93
- var data = (err && err.response) ? err.response : err;
94
- var r = p1.resource;
95
- var title = r.value('error');
96
- var msg = r.value('error_internal');
97
- if (data && data.status === 404) {
98
- handleNotFound(refForm.current);
99
- }
100
- else {
101
- if (data && data.status) {
102
- msg = core_1.messageByHttpStatus(data.status, r.value);
103
- }
104
- formutil_1.setReadOnly(refForm.current);
105
- p1.showError(msg, title);
106
- }
107
- setRunning(false);
108
- core_1.hideLoading(p1.loading);
109
- });
110
- }
111
- };
112
- var load = (p && p.load ? p.load : _load);
113
- return {
114
- state: state,
115
- setState: setState,
116
- refForm: refForm,
117
- resource: p1.resource.resource(),
118
- running: running,
119
- setRunning: setRunning,
120
- showModel: showModel,
121
- getModelName: getModelName,
122
- handleNotFound: handleNotFound,
123
- load: load,
124
- back: back
125
- };
126
- };
package/src/useView.ts DELETED
@@ -1,158 +0,0 @@
1
- import {useEffect, useState} from 'react';
2
- import {useNavigate, useParams} from 'react-router';
3
- import {buildId, getModelName as getModelName2, hideLoading, initForm, LoadingService, Locale, message, messageByHttpStatus, ResourceService, showLoading, ViewParameter, ViewService} from './core';
4
- import {setReadOnly} from './formutil';
5
- import {DispatchWithCallback, useMergeState} from './merge';
6
-
7
- export interface BaseViewComponentParam<T, ID> {
8
- name?: string;
9
- handleNotFound?: (form?: HTMLFormElement) => void;
10
- getModelName?: (f?: HTMLFormElement) => string;
11
- showModel?: (m: T) => void;
12
- load?: (i: ID, callback?: (m: T, showM: (m2: T) => void) => void) => void;
13
- }
14
- export interface HookBaseViewParameter<T, ID, S> extends BaseViewComponentParam<T, ID> {
15
- refForm: any;
16
- initialState: S;
17
- service: ((id: ID, ctx?: any) => Promise<T>)|ViewService<T, ID>;
18
- resource: ResourceService;
19
- showError: (m: string, header?: string, detail?: string, callback?: () => void) => void;
20
- getLocale?: () => Locale;
21
- loading?: LoadingService;
22
- }
23
- export interface ViewComponentParam<T, ID, S> extends BaseViewComponentParam<T, ID> {
24
- keys?: string[];
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;
26
- callback?: (m: T, showF: (model: T) => void) => void;
27
- }
28
- export interface HookPropsViewParameter<T, ID, S, P> extends HookPropsBaseViewParameter<T, ID, S, P> {
29
- keys?: string[];
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;
31
- callback?: (m: T, showF: (model: T) => void) => void;
32
- }
33
- export interface HookPropsBaseViewParameter<T, ID, S, P> extends HookBaseViewParameter<T, ID, S> {
34
- props: P;
35
- }
36
- export const useViewOne = <T, ID, S>(p: HookBaseViewParameter<T, ID, S>) => {
37
- return useCoreView(p.refForm, p.initialState, p.service, p, p);
38
- };
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>(
66
- refForm: any,
67
- initialState: S,
68
- service: ((id: ID, ctx?: any) => Promise<T>)|ViewService<T, ID>,
69
- p1: ViewParameter,
70
- p?: ViewComponentParam<T, ID, S>
71
- ) => {
72
- const [state, setState] = useMergeState<S>(initialState);
73
- const [running, setRunning] = useState<boolean>();
74
- const navigate = useNavigate();
75
-
76
- const back = (event: any) => {
77
- if (event) {
78
- event.preventDefault();
79
- }
80
- navigate(-1);
81
- };
82
-
83
- const getModelName = (f?: HTMLFormElement) => {
84
- if (p && p.name) {
85
- return p.name;
86
- }
87
- return getModelName2(f, 'model');
88
- };
89
-
90
- const showModel = (model: T) => {
91
- const n: string = getModelName(refForm.current);
92
- const objSet: any = {};
93
- objSet[n] = model;
94
- setState(objSet);
95
- };
96
-
97
- const _handleNotFound = (form?: any): void => {
98
- const msg = message(p1.resource.value, 'error_not_found', 'error');
99
- if (form) {
100
- setReadOnly(form);
101
- }
102
- p1.showError(msg.message, msg.title);
103
- };
104
- const handleNotFound = (p && p.handleNotFound ? p.handleNotFound : _handleNotFound);
105
-
106
- const _load = (_id: ID, callback?: (m: T, showM: (m2: T) => void) => void) => {
107
- const id: any = _id;
108
- if (id != null && id !== '') {
109
- setRunning(true);
110
- showLoading(p1.loading);
111
- const fn = (typeof service === 'function' ? service : service.load);
112
- fn(id).then(obj => {
113
- if (!obj) {
114
- handleNotFound(refForm.current);
115
- } else {
116
- if (callback) {
117
- callback(obj, showModel);
118
- } else {
119
- showModel(obj);
120
- }
121
- }
122
- setRunning(false);
123
- hideLoading(p1.loading);
124
- }).catch(err => {
125
- const data = (err && err.response) ? err.response : err;
126
- const r = p1.resource;
127
- const title = r.value('error');
128
- let msg = r.value('error_internal');
129
- if (data && data.status === 404) {
130
- handleNotFound(refForm.current);
131
- } else {
132
- if (data && data.status) {
133
- msg = messageByHttpStatus(data.status, r.value);
134
- }
135
- setReadOnly(refForm.current);
136
- p1.showError(msg, title);
137
- }
138
- setRunning(false);
139
- hideLoading(p1.loading);
140
- });
141
- }
142
- };
143
- const load = (p && p.load ? p.load : _load);
144
-
145
- return {
146
- state,
147
- setState,
148
- refForm,
149
- resource: p1.resource.resource(),
150
- running,
151
- setRunning,
152
- showModel,
153
- getModelName,
154
- handleNotFound,
155
- load,
156
- back
157
- };
158
- };