react-hook-core 0.4.23 → 0.5.1
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/common.js +0 -57
- package/lib/core.js +16 -1
- package/lib/edit.js +27 -27
- package/lib/index.js +0 -4
- package/lib/reflect.js +18 -39
- package/lib/route.js +5 -0
- package/lib/search.js +71 -16
- package/lib/state.js +61 -219
- package/lib/util.js +13 -2
- package/package.json +1 -1
- package/src/com.ts +1 -1
- package/src/common.ts +1 -61
- package/src/core.ts +14 -10
- package/src/edit.ts +36 -36
- package/src/index.ts +5 -5
- package/src/route.ts +15 -0
- package/src/search.ts +69 -17
- package/src/state.ts +71 -223
- package/src/util.ts +14 -2
- package/lib/formutil.js +0 -76
- package/lib/update.js +0 -151
- package/lib/useEdit.js +0 -582
- package/lib/useSearch.js +0 -591
- package/src/formutil.ts +0 -69
- package/src/update.ts +0 -138
- package/src/useEdit.ts +0 -699
- package/src/useSearch.ts +0 -750
package/lib/state.js
CHANGED
|
@@ -14,8 +14,8 @@ 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
|
-
var util_1 = require("./util")
|
|
19
19
|
function getDecimalSeparator(ele) {
|
|
20
20
|
var separator = ele.getAttribute("data-decimal-separator")
|
|
21
21
|
if (!separator) {
|
|
@@ -29,45 +29,56 @@ function getDecimalSeparator(ele) {
|
|
|
29
29
|
exports.getDecimalSeparator = getDecimalSeparator
|
|
30
30
|
var r1 = / |,|\$|€|£|¥|'|٬|،| /g
|
|
31
31
|
var r2 = / |\.|\$|€|£|¥|'|٬|،| /g
|
|
32
|
-
function
|
|
32
|
+
function updateNumber(e, o, setObj, decimalSeparator, callback, formatStr) {
|
|
33
33
|
var ctrl = e.target
|
|
34
|
+
var v0 = formatStr ? formatStr(ctrl.value) : ctrl.value
|
|
35
|
+
var dataField = ctrl.getAttribute("data-field")
|
|
36
|
+
var field = dataField ? dataField : ctrl.name
|
|
37
|
+
var v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
|
|
38
|
+
if (v.indexOf(",") >= 0) {
|
|
39
|
+
v = v.replace(",", ".")
|
|
40
|
+
}
|
|
41
|
+
var val = isNaN(v) ? undefined : parseInt(v)
|
|
42
|
+
reflect_1.setValue(o, field, val)
|
|
43
|
+
setObj(__assign({}, o))
|
|
44
|
+
if (callback) {
|
|
45
|
+
callback()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.updateNumber = updateNumber
|
|
49
|
+
function formatAndUpdateState(e, o, setObj, formatStr, callback) {
|
|
50
|
+
updateState(e, o, setObj, callback, formatStr)
|
|
51
|
+
}
|
|
52
|
+
exports.formatAndUpdateState = formatAndUpdateState
|
|
53
|
+
function updateState(e, o, setObj, callback, formatStr) {
|
|
54
|
+
var ctrl = e.target
|
|
55
|
+
var v0 = formatStr ? formatStr(ctrl.value) : ctrl.value
|
|
34
56
|
var dataField = ctrl.getAttribute("data-field")
|
|
35
57
|
var field = dataField ? dataField : ctrl.name
|
|
36
58
|
if (ctrl.tagName === "SELECT") {
|
|
37
59
|
if (ctrl.tagName === "SELECT") {
|
|
38
|
-
if (
|
|
60
|
+
if (v0 === "" || !v0) {
|
|
39
61
|
ctrl.removeAttribute("data-value")
|
|
40
62
|
} else {
|
|
41
|
-
ctrl.setAttribute("data-value",
|
|
63
|
+
ctrl.setAttribute("data-value", v0)
|
|
42
64
|
}
|
|
43
65
|
}
|
|
44
|
-
reflect_1.setValue(o, field,
|
|
66
|
+
reflect_1.setValue(o, field, v0)
|
|
45
67
|
} else {
|
|
46
68
|
var stype = ctrl.getAttribute("type")
|
|
47
69
|
var type = stype ? stype.toLowerCase() : "text"
|
|
48
70
|
var model = o
|
|
49
|
-
if (type === "
|
|
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") {
|
|
71
|
+
if (type === "checkbox") {
|
|
61
72
|
var value = model[field]
|
|
62
73
|
if (ctrl.id && ctrl.name !== ctrl.id) {
|
|
63
74
|
if (!value || !Array.isArray(value)) {
|
|
64
75
|
value = []
|
|
65
76
|
}
|
|
66
|
-
value.includes(
|
|
77
|
+
value.includes(v0)
|
|
67
78
|
? (value = value.filter(function (v) {
|
|
68
|
-
return v !==
|
|
79
|
+
return v !== v0
|
|
69
80
|
}))
|
|
70
|
-
: value.push(
|
|
81
|
+
: value.push(v0)
|
|
71
82
|
model[field] = value
|
|
72
83
|
} else {
|
|
73
84
|
var v = valueOfCheckbox(ctrl)
|
|
@@ -75,185 +86,48 @@ function updateState(e, o, setObj) {
|
|
|
75
86
|
}
|
|
76
87
|
} else if (type === "radio") {
|
|
77
88
|
if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
|
|
78
|
-
model[field] =
|
|
89
|
+
model[field] = v0
|
|
79
90
|
} else {
|
|
80
|
-
reflect_1.setValue(model, field,
|
|
91
|
+
reflect_1.setValue(model, field, v0)
|
|
81
92
|
}
|
|
82
93
|
} else if (type === "date" || type === "datetime-local") {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
} catch (error) {
|
|
87
|
-
console.error("Error occurred while formatting date:", error)
|
|
88
|
-
}
|
|
94
|
+
var date = new Date(v0)
|
|
95
|
+
var val = !isNaN(date.getTime()) ? date.toISOString() : null
|
|
96
|
+
reflect_1.setValue(model, field, val)
|
|
89
97
|
} else if (type === "time") {
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
reflect_1.setValue(model, field, selectedDate.getTime())
|
|
94
|
-
} catch (error) {
|
|
95
|
-
console.error("Error occurred while formatting time:", error)
|
|
96
|
-
}
|
|
97
|
-
return objSet
|
|
98
|
-
} else {
|
|
99
|
-
reflect_1.setValue(o, field, ctrl.value)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
setObj(__assign({}, o))
|
|
103
|
-
}
|
|
104
|
-
exports.updateState = updateState
|
|
105
|
-
exports.enLocale = {
|
|
106
|
-
id: "en-US",
|
|
107
|
-
countryCode: "US",
|
|
108
|
-
dateFormat: "M/d/yyyy",
|
|
109
|
-
firstDayOfWeek: 1,
|
|
110
|
-
decimalSeparator: ".",
|
|
111
|
-
groupSeparator: ",",
|
|
112
|
-
decimalDigits: 2,
|
|
113
|
-
currencyCode: "USD",
|
|
114
|
-
currencySymbol: "$",
|
|
115
|
-
currencyPattern: 0,
|
|
116
|
-
}
|
|
117
|
-
function localeOf(lc, glc) {
|
|
118
|
-
var l = lc
|
|
119
|
-
if (!l) {
|
|
120
|
-
if (glc) {
|
|
121
|
-
if (typeof glc === "function") {
|
|
122
|
-
l = glc()
|
|
98
|
+
var date = new Date(v0)
|
|
99
|
+
if (!isNaN(date.getTime())) {
|
|
100
|
+
reflect_1.setValue(model, field, date.getTime())
|
|
123
101
|
} else {
|
|
124
|
-
|
|
102
|
+
reflect_1.setValue(model, field, null)
|
|
125
103
|
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
e.preventDefault()
|
|
140
|
-
}
|
|
141
|
-
if (removeErr && ctrl.nodeName === "SELECT" && ctrl.value && ctrl.classList.contains("invalid")) {
|
|
142
|
-
removeErr(ctrl)
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
exports.handleEvent = handleEvent
|
|
146
|
-
function handleProps(e, props, ctrl, modelName, tloc, prepareData) {
|
|
147
|
-
var _a, _b, _c, _d
|
|
148
|
-
if (props.setGlobalState) {
|
|
149
|
-
var res = util_1.valueOf(ctrl, tloc, e.type)
|
|
150
|
-
if (res.mustChange) {
|
|
151
|
-
var dataField = ctrl.getAttribute("data-field")
|
|
152
|
-
var field = dataField ? dataField : ctrl.name
|
|
153
|
-
var propsDataForm = props[modelName]
|
|
154
|
-
var form = ctrl.form
|
|
155
|
-
if (form) {
|
|
156
|
-
var formName = form.name
|
|
157
|
-
if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
|
|
158
|
-
var data =
|
|
159
|
-
props.shouldBeCustomized && prepareData ? prepareData(((_a = {}), (_a[ctrl.name] = res.value), _a)) : ((_b = {}), (_b[ctrl.name] = res.value), _b)
|
|
160
|
-
props.setGlobalState(((_c = {}), (_c[formName] = __assign(__assign({}, propsDataForm), data)), _c))
|
|
161
|
-
} else {
|
|
162
|
-
reflect_1.setValue(propsDataForm, field, ctrl.value)
|
|
163
|
-
props.setGlobalState(((_d = {}), (_d[formName] = __assign({}, propsDataForm)), _d))
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
exports.handleProps = handleProps
|
|
170
|
-
function buildState(e, state, ctrl, modelName, tloc) {
|
|
171
|
-
var form = ctrl.form
|
|
172
|
-
if (form) {
|
|
173
|
-
if (modelName && modelName !== "") {
|
|
174
|
-
var type = ctrl.getAttribute("type")
|
|
175
|
-
var ex = state[modelName]
|
|
176
|
-
var dataField = ctrl.getAttribute("data-field")
|
|
177
|
-
var field = dataField ? dataField : ctrl.name
|
|
178
|
-
var model = Object.assign({}, ex)
|
|
179
|
-
if (type && type.toLowerCase() === "checkbox") {
|
|
180
|
-
var value = model[field]
|
|
181
|
-
if (ctrl.id && ctrl.name !== ctrl.id) {
|
|
182
|
-
if (!value || !Array.isArray(value)) {
|
|
183
|
-
value = []
|
|
184
|
-
}
|
|
185
|
-
value.includes(ctrl.value)
|
|
186
|
-
? (value = value.filter(function (v) {
|
|
187
|
-
return v !== ctrl.value
|
|
188
|
-
}))
|
|
189
|
-
: value.push(ctrl.value)
|
|
190
|
-
model[field] = value
|
|
191
|
-
} else {
|
|
192
|
-
var v = valueOfCheckbox(ctrl)
|
|
193
|
-
model[field] = v
|
|
194
|
-
}
|
|
195
|
-
var objSet = {}
|
|
196
|
-
objSet[modelName] = model
|
|
197
|
-
return objSet
|
|
198
|
-
} else if (type && type.toLowerCase() === "radio") {
|
|
199
|
-
if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
|
|
200
|
-
model[field] = ctrl.value
|
|
201
|
-
} else {
|
|
202
|
-
reflect_1.setValue(model, field, ctrl.value)
|
|
203
|
-
}
|
|
204
|
-
var objSet = {}
|
|
205
|
-
objSet[modelName] = model
|
|
206
|
-
return objSet
|
|
207
|
-
} else if (type && (type.toLowerCase() === "date" || type.toLowerCase() === "datetime-local")) {
|
|
208
|
-
var objSet = {}
|
|
209
|
-
try {
|
|
210
|
-
var selectedDate = new Date(ctrl.value)
|
|
211
|
-
reflect_1.setValue(model, field, ctrl.value && ctrl.value !== "" ? selectedDate.toISOString() : null)
|
|
212
|
-
objSet[modelName] = model
|
|
213
|
-
return objSet
|
|
214
|
-
} catch (error) {
|
|
215
|
-
console.error("Error occurred while formatting date:", error)
|
|
216
|
-
}
|
|
217
|
-
return objSet
|
|
218
|
-
} else if (type && type.toLowerCase() === "time") {
|
|
219
|
-
var objSet = {}
|
|
220
|
-
try {
|
|
221
|
-
var selectedDate = new Date(ctrl.value)
|
|
222
|
-
reflect_1.setValue(model, field, selectedDate.getTime())
|
|
223
|
-
objSet[modelName] = model
|
|
224
|
-
return objSet
|
|
225
|
-
} catch (error) {
|
|
226
|
-
console.error("Error occurred while formatting time:", error)
|
|
104
|
+
} else {
|
|
105
|
+
var datatype = ctrl.getAttribute("data-type")
|
|
106
|
+
if (datatype === "phone") {
|
|
107
|
+
var val = core_1.removePhoneFormat(v0)
|
|
108
|
+
reflect_1.setValue(o, field, val)
|
|
109
|
+
} else if (datatype === "fax") {
|
|
110
|
+
var val = core_1.removeFaxFormat(v0)
|
|
111
|
+
reflect_1.setValue(o, field, val)
|
|
112
|
+
} else if (datatype === "number" || datatype === "int") {
|
|
113
|
+
var decimalSeparator = getDecimalSeparator(ctrl)
|
|
114
|
+
var v = decimalSeparator === "," ? v0.replace(r2, "") : v0.replace(r1, "")
|
|
115
|
+
if (v.indexOf(",") >= 0) {
|
|
116
|
+
v = v.replace(",", ".")
|
|
227
117
|
}
|
|
228
|
-
|
|
118
|
+
var val = isNaN(v) ? undefined : parseFloat(v)
|
|
119
|
+
reflect_1.setValue(o, field, val)
|
|
229
120
|
} else {
|
|
230
|
-
|
|
231
|
-
if (ctrl.value === "" || !ctrl.value) {
|
|
232
|
-
ctrl.removeAttribute("data-value")
|
|
233
|
-
} else {
|
|
234
|
-
ctrl.setAttribute("data-value", "data-value")
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
var data = util_1.valueOf(ctrl, tloc, e.type)
|
|
238
|
-
if (data.mustChange) {
|
|
239
|
-
if (field.indexOf(".") < 0 && field.indexOf("[") < 0) {
|
|
240
|
-
model[field] = data.value
|
|
241
|
-
} else {
|
|
242
|
-
reflect_1.setValue(model, field, data.value)
|
|
243
|
-
}
|
|
244
|
-
var objSet = {}
|
|
245
|
-
objSet[modelName] = model
|
|
246
|
-
return objSet
|
|
247
|
-
}
|
|
121
|
+
reflect_1.setValue(o, field, v0)
|
|
248
122
|
}
|
|
249
|
-
} else {
|
|
250
|
-
return buildFlatState(e, state, tloc)
|
|
251
123
|
}
|
|
252
|
-
}
|
|
253
|
-
|
|
124
|
+
}
|
|
125
|
+
setObj(__assign({}, o))
|
|
126
|
+
if (callback) {
|
|
127
|
+
callback()
|
|
254
128
|
}
|
|
255
129
|
}
|
|
256
|
-
exports.
|
|
130
|
+
exports.updateState = updateState
|
|
257
131
|
function valueOfCheckbox(ctrl) {
|
|
258
132
|
var ctrlOnValue = ctrl.getAttribute("data-on-value")
|
|
259
133
|
var ctrlOffValue = ctrl.getAttribute("data-off-value")
|
|
@@ -266,35 +140,3 @@ function valueOfCheckbox(ctrl) {
|
|
|
266
140
|
}
|
|
267
141
|
}
|
|
268
142
|
exports.valueOfCheckbox = valueOfCheckbox
|
|
269
|
-
function buildFlatState(e, state, l) {
|
|
270
|
-
var _a
|
|
271
|
-
var ctrl = e.currentTarget
|
|
272
|
-
var stateName = ctrl.name
|
|
273
|
-
var objSet = {}
|
|
274
|
-
var type = ctrl.getAttribute("type")
|
|
275
|
-
if (type && type.toLowerCase() === "checkbox") {
|
|
276
|
-
if (ctrl.id && stateName === ctrl.id) {
|
|
277
|
-
var v = valueOfCheckbox(ctrl)
|
|
278
|
-
objSet[stateName] = v
|
|
279
|
-
return objSet
|
|
280
|
-
} else {
|
|
281
|
-
var value = state[stateName]
|
|
282
|
-
value.includes(ctrl.value)
|
|
283
|
-
? (value = value.filter(function (v) {
|
|
284
|
-
return v !== ctrl.value
|
|
285
|
-
}))
|
|
286
|
-
: value.push(ctrl.value)
|
|
287
|
-
var objSet2 = ((_a = {}), (_a[ctrl.name] = value), _a)
|
|
288
|
-
return objSet2
|
|
289
|
-
}
|
|
290
|
-
} else {
|
|
291
|
-
var data = util_1.valueOf(ctrl, l, e.type)
|
|
292
|
-
if (data.mustChange) {
|
|
293
|
-
objSet[stateName] = data.value
|
|
294
|
-
return objSet
|
|
295
|
-
} else {
|
|
296
|
-
return undefined
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
exports.buildFlatState = buildFlatState
|
package/lib/util.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
"use strict"
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true })
|
|
3
|
-
|
|
3
|
+
exports.enLocale = {
|
|
4
|
+
id: "en-US",
|
|
5
|
+
countryCode: "US",
|
|
6
|
+
dateFormat: "M/d/yyyy",
|
|
7
|
+
firstDayOfWeek: 1,
|
|
8
|
+
decimalSeparator: ".",
|
|
9
|
+
groupSeparator: ",",
|
|
10
|
+
decimalDigits: 2,
|
|
11
|
+
currencyCode: "USD",
|
|
12
|
+
currencySymbol: "$",
|
|
13
|
+
currencyPattern: 0,
|
|
14
|
+
}
|
|
4
15
|
var r1 = / |,|\$|€|£|¥|'|٬|،| /g
|
|
5
16
|
var r2 = / |\.|\$|€|£|¥|'|٬|،| /g
|
|
6
17
|
function valueOf(ctrl, locale, eventType) {
|
|
@@ -57,7 +68,7 @@ function getStringCurrency(value, datatype, locale, maxLength, isOnBlur) {
|
|
|
57
68
|
return { mustChange: true, value: value.substring(1) }
|
|
58
69
|
}
|
|
59
70
|
if (!locale) {
|
|
60
|
-
locale =
|
|
71
|
+
locale = exports.enLocale
|
|
61
72
|
}
|
|
62
73
|
var decimalDigits = locale ? locale.decimalDigits : 2
|
|
63
74
|
var groupDigits = 3
|
package/package.json
CHANGED
package/src/com.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface Props {
|
|
|
23
23
|
maxLength?: number
|
|
24
24
|
value?: string
|
|
25
25
|
placeholder?: string
|
|
26
|
-
pageSizeChanged?: (
|
|
26
|
+
pageSizeChanged?: (e: React.ChangeEvent<HTMLSelectElement>) => void
|
|
27
27
|
search?: React.MouseEventHandler<HTMLElement>
|
|
28
28
|
toggle?: React.MouseEventHandler<HTMLElement>
|
|
29
29
|
clear?: React.MouseEventHandler<HTMLButtonElement>
|
package/src/common.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StringMap } from "./core"
|
|
2
2
|
|
|
3
3
|
export function messageByHttpStatus(status: number, resource: StringMap): string {
|
|
4
4
|
const k = "error_" + status
|
|
@@ -26,63 +26,3 @@ export function error(err: any, resource: StringMap, ae: (msg: string, callback?
|
|
|
26
26
|
ae(msg, undefined, title)
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
export function showLoading(loading?: LoadingService | ((firstTime?: boolean) => void)): void {
|
|
31
|
-
if (loading) {
|
|
32
|
-
if (typeof loading === "function") {
|
|
33
|
-
loading()
|
|
34
|
-
} else {
|
|
35
|
-
loading.showLoading()
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export function hideLoading(loading?: LoadingService | (() => void)): void {
|
|
40
|
-
if (loading) {
|
|
41
|
-
if (typeof loading === "function") {
|
|
42
|
-
loading()
|
|
43
|
-
} else {
|
|
44
|
-
loading.hideLoading()
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function initForm(form?: HTMLFormElement, initMat?: (f: HTMLFormElement) => void): HTMLFormElement | undefined {
|
|
50
|
-
if (form) {
|
|
51
|
-
setTimeout(() => {
|
|
52
|
-
if (initMat) {
|
|
53
|
-
initMat(form)
|
|
54
|
-
}
|
|
55
|
-
focusFirstElement(form)
|
|
56
|
-
}, 100)
|
|
57
|
-
}
|
|
58
|
-
return form
|
|
59
|
-
}
|
|
60
|
-
export function focusFirstElement(form: HTMLFormElement): void {
|
|
61
|
-
let i = 0
|
|
62
|
-
const len = form.length
|
|
63
|
-
for (i = 0; i < len; i++) {
|
|
64
|
-
const ctrl = form[i] as HTMLInputElement
|
|
65
|
-
if (!(ctrl.readOnly || ctrl.disabled)) {
|
|
66
|
-
let nodeName = ctrl.nodeName
|
|
67
|
-
const type = ctrl.getAttribute("type")
|
|
68
|
-
if (type) {
|
|
69
|
-
const t = type.toUpperCase()
|
|
70
|
-
if (t === "BUTTON" || t === "SUBMIT") {
|
|
71
|
-
ctrl.focus()
|
|
72
|
-
}
|
|
73
|
-
if (nodeName === "INPUT") {
|
|
74
|
-
nodeName = t
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (nodeName !== "BUTTON" && nodeName !== "RESET" && nodeName !== "SUBMIT" && nodeName !== "CHECKBOX" && nodeName !== "RADIO") {
|
|
78
|
-
ctrl.focus()
|
|
79
|
-
/*
|
|
80
|
-
try {
|
|
81
|
-
ctrl.setSelectionRange(0, ctrl.value.length)
|
|
82
|
-
} catch (err) {}
|
|
83
|
-
*/
|
|
84
|
-
return
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
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 {
|
|
@@ -39,15 +52,6 @@ export interface ErrorMessage {
|
|
|
39
52
|
param?: string | number | Date
|
|
40
53
|
message?: string
|
|
41
54
|
}
|
|
42
|
-
export interface UIService {
|
|
43
|
-
validateForm(form?: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean): boolean
|
|
44
|
-
removeFormError(form: HTMLFormElement): void
|
|
45
|
-
removeError(el: HTMLInputElement): void
|
|
46
|
-
showFormError(form?: HTMLFormElement, errors?: ErrorMessage[], focusFirst?: boolean): ErrorMessage[]
|
|
47
|
-
buildErrorMessage(errors: ErrorMessage[]): string
|
|
48
|
-
|
|
49
|
-
registerEvents?(form: HTMLFormElement): void
|
|
50
|
-
}
|
|
51
55
|
|
|
52
56
|
export type Type =
|
|
53
57
|
| "ObjectId"
|
package/src/edit.ts
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
import { NavigateFunction } from "react-router-dom"
|
|
2
2
|
import { Attributes, ErrorMessage, StringMap } from "./core"
|
|
3
3
|
|
|
4
|
+
export function isSuccessful<T>(x: number | T | ErrorMessage[]): boolean {
|
|
5
|
+
if (Array.isArray(x)) {
|
|
6
|
+
return false
|
|
7
|
+
} else if (typeof x === "object") {
|
|
8
|
+
return true
|
|
9
|
+
} else if (typeof x === "number" && x > 0) {
|
|
10
|
+
return true
|
|
11
|
+
}
|
|
12
|
+
return false
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type Result<T> = number | T | ErrorMessage[]
|
|
16
|
+
export function afterSaved<T>(
|
|
17
|
+
res: Result<T>,
|
|
18
|
+
form: HTMLFormElement | undefined | null,
|
|
19
|
+
resource: StringMap,
|
|
20
|
+
showFormError: (form?: HTMLFormElement | null, errors?: ErrorMessage[]) => ErrorMessage[],
|
|
21
|
+
alertSuccess: (msg: string, callback?: () => void) => void,
|
|
22
|
+
alertError: (msg: string) => void,
|
|
23
|
+
navigate?: NavigateFunction,
|
|
24
|
+
) {
|
|
25
|
+
if (Array.isArray(res)) {
|
|
26
|
+
showFormError(form, res)
|
|
27
|
+
} else if (isSuccessful(res)) {
|
|
28
|
+
alertSuccess(resource.msg_save_success, () => {
|
|
29
|
+
if (navigate) {
|
|
30
|
+
navigate(-1)
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
} else if (res === 0) {
|
|
34
|
+
alertError(resource.error_not_found)
|
|
35
|
+
} else {
|
|
36
|
+
alertError(resource.error_conflict)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
4
40
|
export function createModel<T>(attributes?: Attributes): T {
|
|
5
41
|
const obj: any = {}
|
|
6
42
|
if (!attributes) {
|
|
@@ -48,39 +84,3 @@ export function createModel<T>(attributes?: Attributes): T {
|
|
|
48
84
|
}
|
|
49
85
|
return obj
|
|
50
86
|
}
|
|
51
|
-
|
|
52
|
-
export function isSuccessful<T>(x: number | T | ErrorMessage[]): boolean {
|
|
53
|
-
if (Array.isArray(x)) {
|
|
54
|
-
return false
|
|
55
|
-
} else if (typeof x === "object") {
|
|
56
|
-
return true
|
|
57
|
-
} else if (typeof x === "number" && x > 0) {
|
|
58
|
-
return true
|
|
59
|
-
}
|
|
60
|
-
return false
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
type Result<T> = number | T | ErrorMessage[]
|
|
64
|
-
export function afterSaved<T>(
|
|
65
|
-
res: Result<T>,
|
|
66
|
-
form: HTMLFormElement | undefined | null,
|
|
67
|
-
resource: StringMap,
|
|
68
|
-
showFormError: (form?: HTMLFormElement | null, errors?: ErrorMessage[]) => ErrorMessage[],
|
|
69
|
-
alertSuccess: (msg: string, callback?: () => void) => void,
|
|
70
|
-
alertError: (msg: string) => void,
|
|
71
|
-
navigate?: NavigateFunction,
|
|
72
|
-
) {
|
|
73
|
-
if (Array.isArray(res)) {
|
|
74
|
-
showFormError(form, res)
|
|
75
|
-
} else if (isSuccessful(res)) {
|
|
76
|
-
alertSuccess(resource.msg_save_success, () => {
|
|
77
|
-
if (navigate) {
|
|
78
|
-
navigate(-1)
|
|
79
|
-
}
|
|
80
|
-
})
|
|
81
|
-
} else if (res === 0) {
|
|
82
|
-
alertError(resource.error_not_found)
|
|
83
|
-
} else {
|
|
84
|
-
alertError(resource.error_conflict)
|
|
85
|
-
}
|
|
86
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -4,16 +4,16 @@ export * from "./com"
|
|
|
4
4
|
export * from "./core"
|
|
5
5
|
export * from "./diff"
|
|
6
6
|
export * from "./edit"
|
|
7
|
-
export * from "./formutil"
|
|
8
7
|
export * from "./reflect"
|
|
9
8
|
export * from "./route"
|
|
10
9
|
export * from "./search"
|
|
11
10
|
export * from "./state"
|
|
12
|
-
export * from "./update"
|
|
13
|
-
export * from "./useEdit"
|
|
14
11
|
export * from "./useMessage"
|
|
15
|
-
export * from "./useSearch"
|
|
16
12
|
export * from "./util"
|
|
13
|
+
|
|
14
|
+
export type ButtonMouseEvent = React.MouseEvent<HTMLButtonElement, MouseEvent>
|
|
15
|
+
export type SelectChangeEvent = ChangeEvent<HTMLSelectElement>
|
|
16
|
+
export type InputChangeEvent = ChangeEvent<HTMLInputElement>
|
|
17
17
|
/*
|
|
18
18
|
type CallBackType<T> = (updatedValue: T) => void;
|
|
19
19
|
type SetStateType<T> = T | ((prev: T) => T);
|
|
@@ -94,7 +94,7 @@ interface InputProps {
|
|
|
94
94
|
defaultValue?: string
|
|
95
95
|
onChangeNumber?: (value: number) => void
|
|
96
96
|
onChange?: ChangeEventHandler<HTMLInputElement>
|
|
97
|
-
currencyOnBlur?: (
|
|
97
|
+
currencyOnBlur?: (e: Event | any, locale: Locale, currencyCode?: string, includingCurrencySymbol?: boolean) => void
|
|
98
98
|
currencyCode?: string
|
|
99
99
|
symbol?: boolean
|
|
100
100
|
readOnly?: boolean
|
package/src/route.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import queryString from "query-string"
|
|
2
|
+
import * as React from "react"
|
|
2
3
|
import { NavigateFunction } from "react-router-dom"
|
|
3
4
|
import { StringMap } from "./core"
|
|
4
5
|
import { hasDiff } from "./reflect"
|
|
5
6
|
import { Filter } from "./search"
|
|
6
7
|
|
|
8
|
+
export function onBack<T>(
|
|
9
|
+
e: React.MouseEvent<HTMLElement, MouseEvent>,
|
|
10
|
+
navigate: NavigateFunction,
|
|
11
|
+
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
12
|
+
resource: StringMap,
|
|
13
|
+
o1: T,
|
|
14
|
+
o2: T,
|
|
15
|
+
keys?: string[],
|
|
16
|
+
version?: string,
|
|
17
|
+
) {
|
|
18
|
+
e.preventDefault()
|
|
19
|
+
goBack(navigate, confirm, resource, o1, o2, keys, version)
|
|
20
|
+
}
|
|
21
|
+
|
|
7
22
|
export function goBack<T>(
|
|
8
23
|
navigate: NavigateFunction,
|
|
9
24
|
confirm: (msg: string, yesCallback?: () => void) => void,
|