react-hook-core 0.4.8 → 0.4.9
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 +0 -118
- package/lib/formutil.js +0 -28
- package/lib/index.js +25 -0
- package/lib/input.js +49 -0
- package/lib/reflect.js +0 -10
- package/lib/route.js +11 -0
- package/lib/search.js +14 -31
- package/lib/update.js +30 -2
- package/lib/useEdit.js +11 -10
- package/lib/useSearch.js +41 -9
- package/lib/util.js +3 -3
- package/package.json +1 -1
- package/src/core.ts +0 -131
- package/src/formutil.ts +0 -27
- package/src/index.ts +26 -0
- package/src/input.ts +47 -15
- package/src/reflect.ts +0 -19
- package/src/route.ts +19 -0
- package/src/search.ts +14 -31
- package/src/update.ts +29 -2
- package/src/useEdit.ts +3 -15
- package/src/useSearch.ts +40 -17
- package/src/util.ts +3 -3
package/lib/core.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict"
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true })
|
|
3
|
-
var formutil_1 = require("./formutil")
|
|
4
3
|
exports.pageSizes = [12, 24, 60, 100, 120, 180, 300, 600]
|
|
5
4
|
exports.sizes = exports.pageSizes
|
|
6
5
|
var resources = (function () {
|
|
@@ -17,120 +16,3 @@ var resources = (function () {
|
|
|
17
16
|
return resources
|
|
18
17
|
})()
|
|
19
18
|
exports.resources = resources
|
|
20
|
-
function removePhoneFormat(phone) {
|
|
21
|
-
if (phone) {
|
|
22
|
-
return phone.replace(resources.phone, "")
|
|
23
|
-
} else {
|
|
24
|
-
return phone
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.removePhoneFormat = removePhoneFormat
|
|
28
|
-
exports.datetimeToString = function (inputDate) {
|
|
29
|
-
var date = new Date(inputDate)
|
|
30
|
-
var year = date.getFullYear()
|
|
31
|
-
var month = String(date.getMonth() + 1).padStart(2, "0")
|
|
32
|
-
var day = String(date.getDate()).padStart(2, "0")
|
|
33
|
-
var hours = String(date.getHours()).padStart(2, "0")
|
|
34
|
-
var minutes = String(date.getMinutes()).padStart(2, "0")
|
|
35
|
-
var seconds = String(date.getSeconds()).padStart(2, "0")
|
|
36
|
-
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds
|
|
37
|
-
}
|
|
38
|
-
exports.dateToString = function (inputDate) {
|
|
39
|
-
var year = inputDate.getFullYear()
|
|
40
|
-
var month = String(inputDate.getMonth() + 1).padStart(2, "0")
|
|
41
|
-
var day = String(inputDate.getDate()).padStart(2, "0")
|
|
42
|
-
return year + "-" + month + "-" + day
|
|
43
|
-
}
|
|
44
|
-
function initForm(form, initMat) {
|
|
45
|
-
if (form) {
|
|
46
|
-
setTimeout(function () {
|
|
47
|
-
if (initMat) {
|
|
48
|
-
initMat(form)
|
|
49
|
-
}
|
|
50
|
-
formutil_1.focusFirstElement(form)
|
|
51
|
-
}, 100)
|
|
52
|
-
}
|
|
53
|
-
return form
|
|
54
|
-
}
|
|
55
|
-
exports.initForm = initForm
|
|
56
|
-
function getName(d, n) {
|
|
57
|
-
return n && n.length > 0 ? n : d
|
|
58
|
-
}
|
|
59
|
-
exports.getName = getName
|
|
60
|
-
function getModelName(form, name) {
|
|
61
|
-
if (form) {
|
|
62
|
-
var a = form.getAttribute("model-name")
|
|
63
|
-
if (a && a.length > 0) {
|
|
64
|
-
return a
|
|
65
|
-
}
|
|
66
|
-
var b = form.name
|
|
67
|
-
if (b) {
|
|
68
|
-
if (b.endsWith("Form")) {
|
|
69
|
-
return b.substring(0, b.length - 4)
|
|
70
|
-
}
|
|
71
|
-
return b
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if (name && name.length > 0) {
|
|
75
|
-
return name
|
|
76
|
-
}
|
|
77
|
-
return ""
|
|
78
|
-
}
|
|
79
|
-
exports.getModelName = getModelName
|
|
80
|
-
exports.scrollToFocus = function (e, isUseTimeOut) {
|
|
81
|
-
try {
|
|
82
|
-
var element = e.target
|
|
83
|
-
var form = element.form
|
|
84
|
-
if (form) {
|
|
85
|
-
var container_1 = form.childNodes[1]
|
|
86
|
-
var elementRect_1 = element.getBoundingClientRect()
|
|
87
|
-
var absoluteElementTop = elementRect_1.top + window.pageYOffset
|
|
88
|
-
var middle_1 = absoluteElementTop - window.innerHeight / 2
|
|
89
|
-
var scrollTop_1 = container_1.scrollTop
|
|
90
|
-
var timeOut = isUseTimeOut ? 300 : 0
|
|
91
|
-
var isChrome_1 = navigator.userAgent.search("Chrome") > 0
|
|
92
|
-
setTimeout(function () {
|
|
93
|
-
if (isChrome_1) {
|
|
94
|
-
var scrollPosition = scrollTop_1 === 0 ? elementRect_1.top + 64 : scrollTop_1 + middle_1
|
|
95
|
-
container_1.scrollTo(0, Math.abs(scrollPosition))
|
|
96
|
-
} else {
|
|
97
|
-
container_1.scrollTo(0, Math.abs(scrollTop_1 + middle_1))
|
|
98
|
-
}
|
|
99
|
-
}, timeOut)
|
|
100
|
-
}
|
|
101
|
-
} catch (e) {
|
|
102
|
-
console.log(e)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
function showLoading(s) {
|
|
106
|
-
if (s) {
|
|
107
|
-
s.showLoading()
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
exports.showLoading = showLoading
|
|
111
|
-
function hideLoading(s) {
|
|
112
|
-
if (s) {
|
|
113
|
-
s.hideLoading()
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.hideLoading = hideLoading
|
|
117
|
-
function getRemoveError(u, rmErr) {
|
|
118
|
-
if (rmErr) {
|
|
119
|
-
return rmErr
|
|
120
|
-
}
|
|
121
|
-
return u && u.ui ? u.ui.removeError : undefined
|
|
122
|
-
}
|
|
123
|
-
exports.getRemoveError = getRemoveError
|
|
124
|
-
function removeFormError(u, f) {
|
|
125
|
-
if (f && u && u.ui) {
|
|
126
|
-
u.ui.removeFormError(f)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
exports.removeFormError = removeFormError
|
|
130
|
-
function getValidateForm(u, vf) {
|
|
131
|
-
if (vf) {
|
|
132
|
-
return vf
|
|
133
|
-
}
|
|
134
|
-
return u && u.ui ? u.ui.validateForm : undefined
|
|
135
|
-
}
|
|
136
|
-
exports.getValidateForm = getValidateForm
|
package/lib/formutil.js
CHANGED
|
@@ -46,34 +46,6 @@ function setReadOnly(form) {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
exports.setReadOnly = setReadOnly
|
|
49
|
-
function focusFirstElement(form) {
|
|
50
|
-
var i = 0
|
|
51
|
-
var len = form.length
|
|
52
|
-
for (i = 0; i < len; i++) {
|
|
53
|
-
var ctrl = form[i]
|
|
54
|
-
if (!(ctrl.readOnly || ctrl.disabled)) {
|
|
55
|
-
var nodeName = ctrl.nodeName
|
|
56
|
-
var type = ctrl.getAttribute("type")
|
|
57
|
-
if (type) {
|
|
58
|
-
var t = type.toUpperCase()
|
|
59
|
-
if (t === "BUTTON" || t === "SUBMIT") {
|
|
60
|
-
ctrl.focus()
|
|
61
|
-
}
|
|
62
|
-
if (nodeName === "INPUT") {
|
|
63
|
-
nodeName = t
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (nodeName !== "BUTTON" && nodeName !== "RESET" && nodeName !== "SUBMIT" && nodeName !== "CHECKBOX" && nodeName !== "RADIO") {
|
|
67
|
-
ctrl.focus()
|
|
68
|
-
try {
|
|
69
|
-
ctrl.setSelectionRange(0, ctrl.value.length)
|
|
70
|
-
} catch (err) {}
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
exports.focusFirstElement = focusFirstElement
|
|
77
49
|
function focusFirstError(form, className) {
|
|
78
50
|
if (!form) {
|
|
79
51
|
return
|
package/lib/index.js
CHANGED
|
@@ -156,3 +156,28 @@ function getNumber(event) {
|
|
|
156
156
|
return parseInt(event.currentTarget.value, 10)
|
|
157
157
|
}
|
|
158
158
|
exports.getNumber = getNumber
|
|
159
|
+
exports.scrollToFocus = function (e, isUseTimeOut) {
|
|
160
|
+
try {
|
|
161
|
+
var element = e.target
|
|
162
|
+
var form = element.form
|
|
163
|
+
if (form) {
|
|
164
|
+
var container_1 = form.childNodes[1]
|
|
165
|
+
var elementRect_1 = element.getBoundingClientRect()
|
|
166
|
+
var absoluteElementTop = elementRect_1.top + window.pageYOffset
|
|
167
|
+
var middle_1 = absoluteElementTop - window.innerHeight / 2
|
|
168
|
+
var scrollTop_1 = container_1.scrollTop
|
|
169
|
+
var timeOut = isUseTimeOut ? 300 : 0
|
|
170
|
+
var isChrome_1 = navigator.userAgent.search("Chrome") > 0
|
|
171
|
+
setTimeout(function () {
|
|
172
|
+
if (isChrome_1) {
|
|
173
|
+
var scrollPosition = scrollTop_1 === 0 ? elementRect_1.top + 64 : scrollTop_1 + middle_1
|
|
174
|
+
container_1.scrollTo(0, Math.abs(scrollPosition))
|
|
175
|
+
} else {
|
|
176
|
+
container_1.scrollTo(0, Math.abs(scrollTop_1 + middle_1))
|
|
177
|
+
}
|
|
178
|
+
}, timeOut)
|
|
179
|
+
}
|
|
180
|
+
} catch (e) {
|
|
181
|
+
console.log(e)
|
|
182
|
+
}
|
|
183
|
+
}
|
package/lib/input.js
CHANGED
|
@@ -59,3 +59,52 @@ function getErrorFunc(p, showErr) {
|
|
|
59
59
|
return p.showError
|
|
60
60
|
}
|
|
61
61
|
exports.getErrorFunc = getErrorFunc
|
|
62
|
+
function showLoading(s) {
|
|
63
|
+
if (s) {
|
|
64
|
+
s.showLoading()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.showLoading = showLoading
|
|
68
|
+
function hideLoading(s) {
|
|
69
|
+
if (s) {
|
|
70
|
+
s.hideLoading()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.hideLoading = hideLoading
|
|
74
|
+
function initForm(form, initMat) {
|
|
75
|
+
if (form) {
|
|
76
|
+
setTimeout(function () {
|
|
77
|
+
if (initMat) {
|
|
78
|
+
initMat(form)
|
|
79
|
+
}
|
|
80
|
+
focusFirstElement(form)
|
|
81
|
+
}, 100)
|
|
82
|
+
}
|
|
83
|
+
return form
|
|
84
|
+
}
|
|
85
|
+
exports.initForm = initForm
|
|
86
|
+
function focusFirstElement(form) {
|
|
87
|
+
var i = 0
|
|
88
|
+
var len = form.length
|
|
89
|
+
for (i = 0; i < len; i++) {
|
|
90
|
+
var ctrl = form[i]
|
|
91
|
+
if (!(ctrl.readOnly || ctrl.disabled)) {
|
|
92
|
+
var nodeName = ctrl.nodeName
|
|
93
|
+
var type = ctrl.getAttribute("type")
|
|
94
|
+
if (type) {
|
|
95
|
+
var t = type.toUpperCase()
|
|
96
|
+
if (t === "BUTTON" || t === "SUBMIT") {
|
|
97
|
+
ctrl.focus()
|
|
98
|
+
}
|
|
99
|
+
if (nodeName === "INPUT") {
|
|
100
|
+
nodeName = t
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (nodeName !== "BUTTON" && nodeName !== "RESET" && nodeName !== "SUBMIT" && nodeName !== "CHECKBOX" && nodeName !== "RADIO") {
|
|
104
|
+
ctrl.focus()
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.focusFirstElement = focusFirstElement
|
package/lib/reflect.js
CHANGED
|
@@ -151,16 +151,6 @@ function hasDiff(o1, o2, keys, version) {
|
|
|
151
151
|
return !isEmptyObject(diff)
|
|
152
152
|
}
|
|
153
153
|
exports.hasDiff = hasDiff
|
|
154
|
-
function goBack(navigate, confirm, resource, o1, o2, keys, version) {
|
|
155
|
-
if (!hasDiff(o1, o2, keys, version)) {
|
|
156
|
-
navigate(-1)
|
|
157
|
-
} else {
|
|
158
|
-
confirm(resource.msg_confirm_back, function () {
|
|
159
|
-
return navigate(-1)
|
|
160
|
-
})
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
exports.goBack = goBack
|
|
164
154
|
function notIn(s1, s2) {
|
|
165
155
|
var r = []
|
|
166
156
|
for (var _i = 0, s2_1 = s2; _i < s2_1.length; _i++) {
|
package/lib/route.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
"use strict"
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true })
|
|
3
3
|
var qs = require("query-string")
|
|
4
|
+
var reflect_1 = require("./reflect")
|
|
5
|
+
function goBack(navigate, confirm, resource, o1, o2, keys, version) {
|
|
6
|
+
if (!reflect_1.hasDiff(o1, o2, keys, version)) {
|
|
7
|
+
navigate(-1)
|
|
8
|
+
} else {
|
|
9
|
+
confirm(resource.msg_confirm_back, function () {
|
|
10
|
+
return navigate(-1)
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.goBack = goBack
|
|
4
15
|
function buildFromUrl(modelT) {
|
|
5
16
|
return buildParameters(window.location.search, modelT)
|
|
6
17
|
}
|
package/lib/search.js
CHANGED
|
@@ -111,13 +111,6 @@ function initFilter(m, com) {
|
|
|
111
111
|
return m
|
|
112
112
|
}
|
|
113
113
|
exports.initFilter = initFilter
|
|
114
|
-
function showPaging(com, list, pageSize, total) {
|
|
115
|
-
com.total = total
|
|
116
|
-
var pageTotal = getPageTotal(pageSize, total)
|
|
117
|
-
com.pages = pageTotal
|
|
118
|
-
com.showPaging = !total || com.pages <= 1 || (list && list.length >= total) ? false : true
|
|
119
|
-
}
|
|
120
|
-
exports.showPaging = showPaging
|
|
121
114
|
function getFields(form, arr) {
|
|
122
115
|
if (arr && arr.length > 0) {
|
|
123
116
|
return arr
|
|
@@ -157,20 +150,6 @@ function getFields(form, arr) {
|
|
|
157
150
|
return fields.length > 0 ? fields : undefined
|
|
158
151
|
}
|
|
159
152
|
exports.getFields = getFields
|
|
160
|
-
function getPageTotal(pageSize, total) {
|
|
161
|
-
if (!pageSize || pageSize <= 0) {
|
|
162
|
-
return 1
|
|
163
|
-
} else {
|
|
164
|
-
if (!total) {
|
|
165
|
-
total = 0
|
|
166
|
-
}
|
|
167
|
-
if (total % pageSize === 0) {
|
|
168
|
-
return Math.floor(total / pageSize)
|
|
169
|
-
}
|
|
170
|
-
return Math.floor(total / pageSize + 1)
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
exports.getPageTotal = getPageTotal
|
|
174
153
|
function formatText() {
|
|
175
154
|
var args = []
|
|
176
155
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -195,6 +174,20 @@ function formatText() {
|
|
|
195
174
|
return formatted
|
|
196
175
|
}
|
|
197
176
|
exports.formatText = formatText
|
|
177
|
+
function getPageTotal(pageSize, total) {
|
|
178
|
+
if (!pageSize || pageSize <= 0) {
|
|
179
|
+
return 1
|
|
180
|
+
} else {
|
|
181
|
+
if (!total) {
|
|
182
|
+
total = 0
|
|
183
|
+
}
|
|
184
|
+
if (total % pageSize === 0) {
|
|
185
|
+
return Math.floor(total / pageSize)
|
|
186
|
+
}
|
|
187
|
+
return Math.floor(total / pageSize + 1)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.getPageTotal = getPageTotal
|
|
198
191
|
function buildMessage(resource, results, limit, page, total) {
|
|
199
192
|
if (!results || results.length === 0) {
|
|
200
193
|
return resource.msg_no_data_found
|
|
@@ -355,16 +348,6 @@ function handleToggle(target, on) {
|
|
|
355
348
|
return off
|
|
356
349
|
}
|
|
357
350
|
exports.handleToggle = handleToggle
|
|
358
|
-
function handleSortEvent(event, com) {
|
|
359
|
-
if (event && event.target) {
|
|
360
|
-
var target = event.target
|
|
361
|
-
var s = handleSort(target, com.sortTarget, com.sortField, com.sortType)
|
|
362
|
-
com.sortField = s.field
|
|
363
|
-
com.sortType = s.type
|
|
364
|
-
com.sortTarget = target
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
exports.handleSortEvent = handleSortEvent
|
|
368
351
|
function getSortElement(target) {
|
|
369
352
|
return target.nodeName === "I" ? target.parentElement : target
|
|
370
353
|
}
|
package/lib/update.js
CHANGED
|
@@ -18,9 +18,37 @@ var react_1 = require("react")
|
|
|
18
18
|
var core_1 = require("./core")
|
|
19
19
|
var merge_1 = require("./merge")
|
|
20
20
|
var state_1 = require("./state")
|
|
21
|
+
function removePhoneFormat(phone) {
|
|
22
|
+
if (phone) {
|
|
23
|
+
return phone.replace(core_1.resources.phone, "")
|
|
24
|
+
} else {
|
|
25
|
+
return phone
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.removePhoneFormat = removePhoneFormat
|
|
29
|
+
function getModelName(form, name) {
|
|
30
|
+
if (form) {
|
|
31
|
+
var a = form.getAttribute("model-name")
|
|
32
|
+
if (a && a.length > 0) {
|
|
33
|
+
return a
|
|
34
|
+
}
|
|
35
|
+
var b = form.name
|
|
36
|
+
if (b) {
|
|
37
|
+
if (b.endsWith("Form")) {
|
|
38
|
+
return b.substring(0, b.length - 4)
|
|
39
|
+
}
|
|
40
|
+
return b
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (name && name.length > 0) {
|
|
44
|
+
return name
|
|
45
|
+
}
|
|
46
|
+
return ""
|
|
47
|
+
}
|
|
48
|
+
exports.getModelName = getModelName
|
|
21
49
|
var m = "model"
|
|
22
50
|
var _getModelName = function (f2) {
|
|
23
|
-
return
|
|
51
|
+
return getModelName(f2, m)
|
|
24
52
|
}
|
|
25
53
|
exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
|
|
26
54
|
var _a = merge_1.useMergeState(initialState),
|
|
@@ -38,7 +66,7 @@ exports.useUpdate = function (initialState, getName, getLocale, removeErr) {
|
|
|
38
66
|
var updatePhoneState = function (event) {
|
|
39
67
|
var re = /^[0-9\b]+$/
|
|
40
68
|
var target = event.currentTarget
|
|
41
|
-
var value =
|
|
69
|
+
var value = removePhoneFormat(target.value)
|
|
42
70
|
if (re.test(value) || !value) {
|
|
43
71
|
updateState(event)
|
|
44
72
|
} else {
|
package/lib/useEdit.js
CHANGED
|
@@ -20,6 +20,7 @@ var core_1 = require("./core")
|
|
|
20
20
|
var edit_1 = require("./edit")
|
|
21
21
|
var error_1 = require("./error")
|
|
22
22
|
var formutil_1 = require("./formutil")
|
|
23
|
+
var input_1 = require("./input")
|
|
23
24
|
var merge_1 = require("./merge")
|
|
24
25
|
var reflect_1 = require("./reflect")
|
|
25
26
|
var state_1 = require("./state")
|
|
@@ -119,7 +120,7 @@ exports.useEdit = function (refForm, initialState, service, p2, p) {
|
|
|
119
120
|
react_1.useEffect(function () {
|
|
120
121
|
if (refForm) {
|
|
121
122
|
var registerEvents = p2.ui ? p2.ui.registerEvents : undefined
|
|
122
|
-
|
|
123
|
+
input_1.initForm(baseProps.refForm.current, registerEvents)
|
|
123
124
|
}
|
|
124
125
|
var n = baseProps.getModelName(refForm.current)
|
|
125
126
|
var obj = {}
|
|
@@ -144,7 +145,7 @@ exports.useEdit = function (refForm, initialState, service, p2, p) {
|
|
|
144
145
|
baseProps.load(id, p ? p.callback : undefined)
|
|
145
146
|
} catch (error) {
|
|
146
147
|
p2.showError(error)
|
|
147
|
-
|
|
148
|
+
input_1.hideLoading(p2.loading)
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
}, [])
|
|
@@ -156,7 +157,7 @@ exports.useEditProps = function (props, refForm, initialState, service, p2, p) {
|
|
|
156
157
|
react_1.useEffect(function () {
|
|
157
158
|
if (refForm) {
|
|
158
159
|
var registerEvents = p2.ui ? p2.ui.registerEvents : undefined
|
|
159
|
-
|
|
160
|
+
input_1.initForm(baseProps.refForm.current, registerEvents)
|
|
160
161
|
}
|
|
161
162
|
var n = baseProps.getModelName(refForm.current)
|
|
162
163
|
var obj = {}
|
|
@@ -197,7 +198,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
197
198
|
if (p && p.name && p.name.length > 0) {
|
|
198
199
|
return p.name
|
|
199
200
|
}
|
|
200
|
-
return
|
|
201
|
+
return update_1.getModelName(f)
|
|
201
202
|
}
|
|
202
203
|
var baseProps = update_1.useUpdate(initialState, getModelName, p1.getLocale)
|
|
203
204
|
var state = baseProps.state,
|
|
@@ -414,7 +415,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
414
415
|
var _handleError = function (err) {
|
|
415
416
|
if (err) {
|
|
416
417
|
setRunning(false)
|
|
417
|
-
|
|
418
|
+
input_1.hideLoading(p1.loading)
|
|
418
419
|
var errHeader = p1.resource.value("error")
|
|
419
420
|
var errMsg = p1.resource.value("error_internal")
|
|
420
421
|
var data = err && err.response ? err.response : err
|
|
@@ -429,7 +430,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
429
430
|
var handleError = p && p.handleError ? p.handleError : _handleError
|
|
430
431
|
var _postSave = function (r, origin, version, isPatch, backOnSave) {
|
|
431
432
|
setRunning(false)
|
|
432
|
-
|
|
433
|
+
input_1.hideLoading(p1.loading)
|
|
433
434
|
var x = r
|
|
434
435
|
var successMsg = p1.resource.value("msg_save_success")
|
|
435
436
|
var newMod = flag.newMode
|
|
@@ -473,7 +474,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
473
474
|
var handleDuplicateKey = p && p.handleDuplicateKey ? p.handleDuplicateKey : _handleDuplicateKey
|
|
474
475
|
var _doSave = function (obj, body, version, isBack) {
|
|
475
476
|
setRunning(true)
|
|
476
|
-
|
|
477
|
+
input_1.showLoading(p1.loading)
|
|
477
478
|
var isBackO = isBack != null && isBack !== undefined ? isBack : false
|
|
478
479
|
var patchable = p ? p.patchable : true
|
|
479
480
|
if (flag.newMode === false) {
|
|
@@ -506,7 +507,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
506
507
|
var id = _id
|
|
507
508
|
if (id != null && id !== "") {
|
|
508
509
|
setRunning(true)
|
|
509
|
-
|
|
510
|
+
input_1.showLoading(p1.loading)
|
|
510
511
|
service
|
|
511
512
|
.load(id)
|
|
512
513
|
.then(function (obj) {
|
|
@@ -521,7 +522,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
521
522
|
}
|
|
522
523
|
}
|
|
523
524
|
setRunning(false)
|
|
524
|
-
|
|
525
|
+
input_1.hideLoading(p1.loading)
|
|
525
526
|
})
|
|
526
527
|
.catch(function (err) {
|
|
527
528
|
var _a, _b, _c
|
|
@@ -549,7 +550,7 @@ exports.useCoreEdit = function (refForm, initialState, service, p1, p, props) {
|
|
|
549
550
|
}
|
|
550
551
|
}
|
|
551
552
|
setRunning(false)
|
|
552
|
-
|
|
553
|
+
input_1.hideLoading(p1.loading)
|
|
553
554
|
})
|
|
554
555
|
} else {
|
|
555
556
|
var obj = createModel()
|
package/lib/useSearch.js
CHANGED
|
@@ -24,12 +24,40 @@ Object.defineProperty(exports, "__esModule", { value: true })
|
|
|
24
24
|
var react_1 = require("react")
|
|
25
25
|
var core_1 = require("./core")
|
|
26
26
|
var error_1 = require("./error")
|
|
27
|
+
var input_1 = require("./input")
|
|
27
28
|
var merge_1 = require("./merge")
|
|
28
29
|
var reflect_1 = require("./reflect")
|
|
29
30
|
var route_1 = require("./route")
|
|
30
31
|
var search_1 = require("./search")
|
|
31
32
|
var state_1 = require("./state")
|
|
32
33
|
var update_1 = require("./update")
|
|
34
|
+
function showPaging(com, list, pageSize, total) {
|
|
35
|
+
com.total = total
|
|
36
|
+
var pageTotal = search_1.getPageTotal(pageSize, total)
|
|
37
|
+
com.pages = pageTotal
|
|
38
|
+
com.showPaging = !total || com.pages <= 1 || (list && list.length >= total) ? false : true
|
|
39
|
+
}
|
|
40
|
+
exports.showPaging = showPaging
|
|
41
|
+
function removeFormError(u, f) {
|
|
42
|
+
if (f && u && u.ui) {
|
|
43
|
+
u.ui.removeFormError(f)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.removeFormError = removeFormError
|
|
47
|
+
function getValidateForm(u, vf) {
|
|
48
|
+
if (vf) {
|
|
49
|
+
return vf
|
|
50
|
+
}
|
|
51
|
+
return u && u.ui ? u.ui.validateForm : undefined
|
|
52
|
+
}
|
|
53
|
+
exports.getValidateForm = getValidateForm
|
|
54
|
+
function getRemoveError(u, rmErr) {
|
|
55
|
+
if (rmErr) {
|
|
56
|
+
return rmErr
|
|
57
|
+
}
|
|
58
|
+
return u && u.ui ? u.ui.removeError : undefined
|
|
59
|
+
}
|
|
60
|
+
exports.getRemoveError = getRemoveError
|
|
33
61
|
function getModel(state, modelName, searchable, fields, excluding) {
|
|
34
62
|
var obj2 = getModelFromState(state, modelName)
|
|
35
63
|
var obj = obj2 ? obj2 : {}
|
|
@@ -259,7 +287,7 @@ exports.useSearch = function (refForm, initialState, service, p2, p) {
|
|
|
259
287
|
searchError = baseProps.searchError
|
|
260
288
|
if (refForm) {
|
|
261
289
|
var registerEvents = p2.ui ? p2.ui.registerEvents : undefined
|
|
262
|
-
|
|
290
|
+
input_1.initForm(refForm.current, registerEvents)
|
|
263
291
|
}
|
|
264
292
|
if (p && p.initialize) {
|
|
265
293
|
p.initialize(load, setState, component)
|
|
@@ -281,16 +309,20 @@ exports.useSearchOneProps = function (p) {
|
|
|
281
309
|
exports.useSearchOne = function (p) {
|
|
282
310
|
return exports.useCoreSearch(p.refForm, p.initialState, p.service, p, p)
|
|
283
311
|
}
|
|
312
|
+
function getName(d, n) {
|
|
313
|
+
return n && n.length > 0 ? n : d
|
|
314
|
+
}
|
|
315
|
+
exports.getName = getName
|
|
284
316
|
exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
285
317
|
var p = mergeParam(p2)
|
|
286
318
|
var _a = react_1.useState(),
|
|
287
319
|
running = _a[0],
|
|
288
320
|
setRunning = _a[1]
|
|
289
321
|
var _getModelName = function () {
|
|
290
|
-
return
|
|
322
|
+
return getName("filter", p && p.name ? p.name : undefined)
|
|
291
323
|
}
|
|
292
324
|
var getModelName = p && p.getModelName ? p.getModelName : _getModelName
|
|
293
|
-
var baseProps = update_1.useUpdate(initialState, getModelName, p1.getLocale,
|
|
325
|
+
var baseProps = update_1.useUpdate(initialState, getModelName, p1.getLocale, getRemoveError(p1))
|
|
294
326
|
var state = baseProps.state,
|
|
295
327
|
setState = baseProps.setState
|
|
296
328
|
var _b = react_1.useState(false),
|
|
@@ -359,7 +391,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
359
391
|
}
|
|
360
392
|
var load = p && p.load ? p.load : _load
|
|
361
393
|
var doSearch = function (se, isFirstLoad) {
|
|
362
|
-
|
|
394
|
+
removeFormError(p1, refForm.current)
|
|
363
395
|
var s = getFilter(se)
|
|
364
396
|
if (isFirstLoad) {
|
|
365
397
|
setState(state)
|
|
@@ -370,7 +402,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
370
402
|
return
|
|
371
403
|
}
|
|
372
404
|
setRunning(true)
|
|
373
|
-
|
|
405
|
+
input_1.showLoading(p1.loading)
|
|
374
406
|
if (p && !p.ignoreUrlParam) {
|
|
375
407
|
search_1.addParametersIntoUrl(s, isFirstLoad)
|
|
376
408
|
}
|
|
@@ -383,7 +415,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
383
415
|
})
|
|
384
416
|
}
|
|
385
417
|
var _validateSearch = function (se, callback) {
|
|
386
|
-
validate(se, callback, refForm.current, p1.getLocale ? p1.getLocale() : undefined,
|
|
418
|
+
validate(se, callback, refForm.current, p1.getLocale ? p1.getLocale() : undefined, getValidateForm(p1))
|
|
387
419
|
}
|
|
388
420
|
var validateSearch = p && p.validateSearch ? p.validateSearch : _validateSearch
|
|
389
421
|
var pageSizeChanged = function (event) {
|
|
@@ -473,7 +505,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
473
505
|
var searchError = function (err) {
|
|
474
506
|
setComponent({ page: component.tmpPageIndex })
|
|
475
507
|
error_1.error(err, p1.resource.value, p1.showError)
|
|
476
|
-
|
|
508
|
+
input_1.hideLoading(p1.loading)
|
|
477
509
|
}
|
|
478
510
|
var appendList = p && p.appendList ? p.appendList : appendListOfState
|
|
479
511
|
var setList = p && p.setList ? p.setList : setListOfState
|
|
@@ -500,7 +532,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
500
532
|
setList(results, setState)
|
|
501
533
|
}
|
|
502
534
|
} else {
|
|
503
|
-
|
|
535
|
+
showPaging(component, sr.list, s.limit, sr.total)
|
|
504
536
|
setList(results, setState)
|
|
505
537
|
setComponent({ tmpPageIndex: s.page })
|
|
506
538
|
if (s.limit) {
|
|
@@ -509,7 +541,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
509
541
|
}
|
|
510
542
|
}
|
|
511
543
|
setRunning(false)
|
|
512
|
-
|
|
544
|
+
input_1.hideLoading(p1.loading)
|
|
513
545
|
if (component.triggerSearch) {
|
|
514
546
|
setComponent({ triggerSearch: false })
|
|
515
547
|
resetAndSearch()
|
package/lib/util.js
CHANGED
|
@@ -72,15 +72,15 @@ function getStringCurrency(value, datatype, locale, maxLength, isOnBlur) {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
var dotPosition = value.indexOf(".")
|
|
75
|
-
var beforeDot = dotPosition >= 0 ? value.
|
|
75
|
+
var beforeDot = dotPosition >= 0 ? value.substring(0, dotPosition) : value
|
|
76
76
|
if (datatype === "string-currency" || isOnBlur) {
|
|
77
77
|
beforeDot = beforeDot.replace(new RegExp("\\B(?=(\\d{" + groupDigits + "})+(?!\\d))", "g"), groupSeparator)
|
|
78
78
|
}
|
|
79
79
|
var afterDot
|
|
80
80
|
if (dotPosition > 0) {
|
|
81
|
-
afterDot = value.
|
|
81
|
+
afterDot = value.substring(dotPosition + 1)
|
|
82
82
|
if (afterDot.length > decimalDigits) {
|
|
83
|
-
afterDot = afterDot.
|
|
83
|
+
afterDot = afterDot.substring(0, decimalDigits)
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
if (maxLength && beforeDot.length > maxLength - (decimalDigits + 1)) {
|
package/package.json
CHANGED
package/src/core.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { focusFirstElement } from "./formutil"
|
|
2
|
-
|
|
3
1
|
export interface LoadingService {
|
|
4
2
|
showLoading(firstTime?: boolean): void
|
|
5
3
|
hideLoading(): void
|
|
@@ -19,13 +17,6 @@ export class resources {
|
|
|
19
17
|
static pageMaxSize = 7
|
|
20
18
|
}
|
|
21
19
|
|
|
22
|
-
export function removePhoneFormat(phone: string): string {
|
|
23
|
-
if (phone) {
|
|
24
|
-
return phone.replace(resources.phone, "")
|
|
25
|
-
} else {
|
|
26
|
-
return phone
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
20
|
export interface StringMap {
|
|
30
21
|
[key: string]: string
|
|
31
22
|
}
|
|
@@ -98,125 +89,3 @@ export interface Attribute {
|
|
|
98
89
|
export interface Attributes {
|
|
99
90
|
[key: string]: Attribute
|
|
100
91
|
}
|
|
101
|
-
|
|
102
|
-
export const datetimeToString = (inputDate: Date) => {
|
|
103
|
-
const date = new Date(inputDate)
|
|
104
|
-
const year = date.getFullYear()
|
|
105
|
-
const month = String(date.getMonth() + 1).padStart(2, "0")
|
|
106
|
-
const day = String(date.getDate()).padStart(2, "0")
|
|
107
|
-
const hours = String(date.getHours()).padStart(2, "0")
|
|
108
|
-
const minutes = String(date.getMinutes()).padStart(2, "0")
|
|
109
|
-
const seconds = String(date.getSeconds()).padStart(2, "0")
|
|
110
|
-
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export const dateToString = (inputDate: Date) => {
|
|
114
|
-
const year = inputDate.getFullYear()
|
|
115
|
-
const month = String(inputDate.getMonth() + 1).padStart(2, "0")
|
|
116
|
-
const day = String(inputDate.getDate()).padStart(2, "0")
|
|
117
|
-
return `${year}-${month}-${day}`
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function initForm(form?: HTMLFormElement, initMat?: (f: HTMLFormElement) => void): HTMLFormElement | undefined {
|
|
121
|
-
if (form) {
|
|
122
|
-
setTimeout(() => {
|
|
123
|
-
if (initMat) {
|
|
124
|
-
initMat(form)
|
|
125
|
-
}
|
|
126
|
-
focusFirstElement(form)
|
|
127
|
-
}, 100)
|
|
128
|
-
}
|
|
129
|
-
return form
|
|
130
|
-
}
|
|
131
|
-
export function getName(d: string, n?: string): string {
|
|
132
|
-
return n && n.length > 0 ? n : d
|
|
133
|
-
}
|
|
134
|
-
export function getModelName(form?: HTMLFormElement | null, name?: string): string {
|
|
135
|
-
if (form) {
|
|
136
|
-
const a = form.getAttribute("model-name")
|
|
137
|
-
if (a && a.length > 0) {
|
|
138
|
-
return a
|
|
139
|
-
}
|
|
140
|
-
const b = form.name
|
|
141
|
-
if (b) {
|
|
142
|
-
if (b.endsWith("Form")) {
|
|
143
|
-
return b.substring(0, b.length - 4)
|
|
144
|
-
}
|
|
145
|
-
return b
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (name && name.length > 0) {
|
|
149
|
-
return name
|
|
150
|
-
}
|
|
151
|
-
return ""
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export const scrollToFocus = (e: any, isUseTimeOut?: boolean) => {
|
|
155
|
-
try {
|
|
156
|
-
const element = e.target as HTMLInputElement
|
|
157
|
-
const form = element.form
|
|
158
|
-
if (form) {
|
|
159
|
-
const container = form.childNodes[1] as HTMLElement
|
|
160
|
-
const elementRect = element.getBoundingClientRect()
|
|
161
|
-
const absoluteElementTop = elementRect.top + window.pageYOffset
|
|
162
|
-
const middle = absoluteElementTop - window.innerHeight / 2
|
|
163
|
-
const scrollTop = container.scrollTop
|
|
164
|
-
const timeOut = isUseTimeOut ? 300 : 0
|
|
165
|
-
const isChrome = navigator.userAgent.search("Chrome") > 0
|
|
166
|
-
setTimeout(() => {
|
|
167
|
-
if (isChrome) {
|
|
168
|
-
const scrollPosition = scrollTop === 0 ? elementRect.top + 64 : scrollTop + middle
|
|
169
|
-
container.scrollTo(0, Math.abs(scrollPosition))
|
|
170
|
-
} else {
|
|
171
|
-
container.scrollTo(0, Math.abs(scrollTop + middle))
|
|
172
|
-
}
|
|
173
|
-
}, timeOut)
|
|
174
|
-
}
|
|
175
|
-
} catch (e) {
|
|
176
|
-
console.log(e)
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
export interface LoadingParameter {
|
|
180
|
-
loading?: LoadingService
|
|
181
|
-
}
|
|
182
|
-
export function showLoading(s?: LoadingService): void {
|
|
183
|
-
if (s) {
|
|
184
|
-
s.showLoading()
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
export function hideLoading(s?: LoadingService): void {
|
|
188
|
-
if (s) {
|
|
189
|
-
s.hideLoading()
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
export interface UIParameter {
|
|
193
|
-
ui?: UIService
|
|
194
|
-
}
|
|
195
|
-
export function getRemoveError(u?: UIParameter, rmErr?: (el: HTMLInputElement) => void): ((el: HTMLInputElement) => void) | undefined {
|
|
196
|
-
if (rmErr) {
|
|
197
|
-
return rmErr
|
|
198
|
-
}
|
|
199
|
-
return u && u.ui ? u.ui.removeError : undefined
|
|
200
|
-
}
|
|
201
|
-
export function removeFormError(u?: UIParameter, f?: HTMLFormElement): void {
|
|
202
|
-
if (f && u && u.ui) {
|
|
203
|
-
u.ui.removeFormError(f)
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
export function getValidateForm(
|
|
207
|
-
u?: UIParameter,
|
|
208
|
-
vf?: (form: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean) => boolean,
|
|
209
|
-
): ((form: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean) => boolean) | undefined {
|
|
210
|
-
if (vf) {
|
|
211
|
-
return vf
|
|
212
|
-
}
|
|
213
|
-
return u && u.ui ? u.ui.validateForm : undefined
|
|
214
|
-
}
|
|
215
|
-
/*
|
|
216
|
-
export function getDecodeFromForm(u?: UIParameter, d?: (form: HTMLFormElement, locale?: Locale, currencyCode?: string) => any): ((form: HTMLFormElement, locale?: Locale, currencyCode?: string) => any) | undefined {
|
|
217
|
-
if (d) {
|
|
218
|
-
return d;
|
|
219
|
-
}
|
|
220
|
-
return (u && u.ui ? u.ui.decodeFromForm : undefined);
|
|
221
|
-
}
|
|
222
|
-
*/
|
package/src/formutil.ts
CHANGED
|
@@ -40,33 +40,6 @@ export function setReadOnly(form?: HTMLFormElement | null, ...args: string[]): v
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
export function focusFirstElement(form: HTMLFormElement): void {
|
|
44
|
-
let i = 0
|
|
45
|
-
const len = form.length
|
|
46
|
-
for (i = 0; i < len; i++) {
|
|
47
|
-
const ctrl = form[i] as HTMLInputElement
|
|
48
|
-
if (!(ctrl.readOnly || ctrl.disabled)) {
|
|
49
|
-
let nodeName = ctrl.nodeName
|
|
50
|
-
const type = ctrl.getAttribute("type")
|
|
51
|
-
if (type) {
|
|
52
|
-
const t = type.toUpperCase()
|
|
53
|
-
if (t === "BUTTON" || t === "SUBMIT") {
|
|
54
|
-
ctrl.focus()
|
|
55
|
-
}
|
|
56
|
-
if (nodeName === "INPUT") {
|
|
57
|
-
nodeName = t
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (nodeName !== "BUTTON" && nodeName !== "RESET" && nodeName !== "SUBMIT" && nodeName !== "CHECKBOX" && nodeName !== "RADIO") {
|
|
61
|
-
ctrl.focus()
|
|
62
|
-
try {
|
|
63
|
-
ctrl.setSelectionRange(0, ctrl.value.length)
|
|
64
|
-
} catch (err) {}
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
43
|
export function focusFirstError(form?: HTMLFormElement | null, className?: string): void {
|
|
71
44
|
if (!form) {
|
|
72
45
|
return
|
package/src/index.ts
CHANGED
|
@@ -203,3 +203,29 @@ export function datetimeToString(date?: Date | string): string | undefined {
|
|
|
203
203
|
export function getNumber(event: ChangeEvent<HTMLSelectElement | HTMLInputElement>): number {
|
|
204
204
|
return parseInt(event.currentTarget.value, 10)
|
|
205
205
|
}
|
|
206
|
+
|
|
207
|
+
export const scrollToFocus = (e: any, isUseTimeOut?: boolean) => {
|
|
208
|
+
try {
|
|
209
|
+
const element = e.target as HTMLInputElement
|
|
210
|
+
const form = element.form
|
|
211
|
+
if (form) {
|
|
212
|
+
const container = form.childNodes[1] as HTMLElement
|
|
213
|
+
const elementRect = element.getBoundingClientRect()
|
|
214
|
+
const absoluteElementTop = elementRect.top + window.pageYOffset
|
|
215
|
+
const middle = absoluteElementTop - window.innerHeight / 2
|
|
216
|
+
const scrollTop = container.scrollTop
|
|
217
|
+
const timeOut = isUseTimeOut ? 300 : 0
|
|
218
|
+
const isChrome = navigator.userAgent.search("Chrome") > 0
|
|
219
|
+
setTimeout(() => {
|
|
220
|
+
if (isChrome) {
|
|
221
|
+
const scrollPosition = scrollTop === 0 ? elementRect.top + 64 : scrollTop + middle
|
|
222
|
+
container.scrollTo(0, Math.abs(scrollPosition))
|
|
223
|
+
} else {
|
|
224
|
+
container.scrollTo(0, Math.abs(scrollTop + middle))
|
|
225
|
+
}
|
|
226
|
+
}, timeOut)
|
|
227
|
+
}
|
|
228
|
+
} catch (e) {
|
|
229
|
+
console.log(e)
|
|
230
|
+
}
|
|
231
|
+
}
|
package/src/input.ts
CHANGED
|
@@ -81,23 +81,55 @@ export function getErrorFunc(
|
|
|
81
81
|
}
|
|
82
82
|
return (p as any).showError
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
export
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
export function getEditStatusFunc(p: ResourceService|EditStatusParameter, status?: EditStatusConfig): EditStatusConfig {
|
|
89
|
-
if (status) {
|
|
90
|
-
return status;
|
|
84
|
+
|
|
85
|
+
export function showLoading(s?: LoadingService): void {
|
|
86
|
+
if (s) {
|
|
87
|
+
s.showLoading()
|
|
91
88
|
}
|
|
92
|
-
return (p as any).status;
|
|
93
89
|
}
|
|
94
|
-
export
|
|
95
|
-
|
|
90
|
+
export function hideLoading(s?: LoadingService): void {
|
|
91
|
+
if (s) {
|
|
92
|
+
s.hideLoading()
|
|
93
|
+
}
|
|
96
94
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
|
|
96
|
+
export function initForm(form?: HTMLFormElement, initMat?: (f: HTMLFormElement) => void): HTMLFormElement | undefined {
|
|
97
|
+
if (form) {
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
if (initMat) {
|
|
100
|
+
initMat(form)
|
|
101
|
+
}
|
|
102
|
+
focusFirstElement(form)
|
|
103
|
+
}, 100)
|
|
104
|
+
}
|
|
105
|
+
return form
|
|
106
|
+
}
|
|
107
|
+
export function focusFirstElement(form: HTMLFormElement): void {
|
|
108
|
+
let i = 0
|
|
109
|
+
const len = form.length
|
|
110
|
+
for (i = 0; i < len; i++) {
|
|
111
|
+
const ctrl = form[i] as HTMLInputElement
|
|
112
|
+
if (!(ctrl.readOnly || ctrl.disabled)) {
|
|
113
|
+
let nodeName = ctrl.nodeName
|
|
114
|
+
const type = ctrl.getAttribute("type")
|
|
115
|
+
if (type) {
|
|
116
|
+
const t = type.toUpperCase()
|
|
117
|
+
if (t === "BUTTON" || t === "SUBMIT") {
|
|
118
|
+
ctrl.focus()
|
|
119
|
+
}
|
|
120
|
+
if (nodeName === "INPUT") {
|
|
121
|
+
nodeName = t
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (nodeName !== "BUTTON" && nodeName !== "RESET" && nodeName !== "SUBMIT" && nodeName !== "CHECKBOX" && nodeName !== "RADIO") {
|
|
125
|
+
ctrl.focus()
|
|
126
|
+
/*
|
|
127
|
+
try {
|
|
128
|
+
ctrl.setSelectionRange(0, ctrl.value.length)
|
|
129
|
+
} catch (err) {}
|
|
130
|
+
*/
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
}
|
|
100
134
|
}
|
|
101
|
-
return (p as any).status;
|
|
102
135
|
}
|
|
103
|
-
*/
|
package/src/reflect.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { NavigateFunction } from "react-router-dom"
|
|
2
|
-
import { StringMap } from "./core"
|
|
3
|
-
|
|
4
1
|
export function clone(obj: any): any {
|
|
5
2
|
if (!obj) {
|
|
6
3
|
return obj
|
|
@@ -143,22 +140,6 @@ export function hasDiff<T>(o1: T, o2: T, keys?: string[], version?: string): boo
|
|
|
143
140
|
return !isEmptyObject(diff)
|
|
144
141
|
}
|
|
145
142
|
|
|
146
|
-
export function goBack<T>(
|
|
147
|
-
navigate: NavigateFunction,
|
|
148
|
-
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
149
|
-
resource: StringMap,
|
|
150
|
-
o1: T,
|
|
151
|
-
o2: T,
|
|
152
|
-
keys?: string[],
|
|
153
|
-
version?: string,
|
|
154
|
-
) {
|
|
155
|
-
if (!hasDiff(o1, o2, keys, version)) {
|
|
156
|
-
navigate(-1)
|
|
157
|
-
} else {
|
|
158
|
-
confirm(resource.msg_confirm_back, () => navigate(-1))
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
143
|
export function notIn(s1: string[], s2: string[]): string[] {
|
|
163
144
|
const r = []
|
|
164
145
|
for (const s of s2) {
|
package/src/route.ts
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import * as qs from "query-string"
|
|
2
|
+
import { NavigateFunction } from "react-router-dom"
|
|
3
|
+
import { StringMap } from "./core"
|
|
4
|
+
import { hasDiff } from "./reflect"
|
|
2
5
|
import { Filter } from "./search"
|
|
3
6
|
|
|
7
|
+
export function goBack<T>(
|
|
8
|
+
navigate: NavigateFunction,
|
|
9
|
+
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
10
|
+
resource: StringMap,
|
|
11
|
+
o1: T,
|
|
12
|
+
o2: T,
|
|
13
|
+
keys?: string[],
|
|
14
|
+
version?: string,
|
|
15
|
+
) {
|
|
16
|
+
if (!hasDiff(o1, o2, keys, version)) {
|
|
17
|
+
navigate(-1)
|
|
18
|
+
} else {
|
|
19
|
+
confirm(resource.msg_confirm_back, () => navigate(-1))
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
4
23
|
export function buildFromUrl<S extends Filter>(modelT?: S): S {
|
|
5
24
|
return buildParameters<S>(window.location.search, modelT)
|
|
6
25
|
}
|
package/src/search.ts
CHANGED
|
@@ -42,7 +42,7 @@ export interface Pagination {
|
|
|
42
42
|
appendable?: boolean
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
interface Searchable extends Pagination, Sortable {}
|
|
46
46
|
|
|
47
47
|
export function getOffset(limit: number, page?: number, firstLimit?: number): number {
|
|
48
48
|
const p = page && page > 0 ? page : 1
|
|
@@ -156,13 +156,6 @@ export function initFilter<S extends Filter>(m: S, com: Searchable): S {
|
|
|
156
156
|
return m
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
export function showPaging<T>(com: Pagination, list: T[], pageSize?: number, total?: number): void {
|
|
160
|
-
com.total = total
|
|
161
|
-
const pageTotal = getPageTotal(pageSize, total)
|
|
162
|
-
com.pages = pageTotal
|
|
163
|
-
com.showPaging = !total || com.pages <= 1 || (list && list.length >= total) ? false : true
|
|
164
|
-
}
|
|
165
|
-
|
|
166
159
|
export function getFields(form?: HTMLFormElement, arr?: string[]): string[] | undefined {
|
|
167
160
|
if (arr && arr.length > 0) {
|
|
168
161
|
return arr
|
|
@@ -202,20 +195,6 @@ export function getFields(form?: HTMLFormElement, arr?: string[]): string[] | un
|
|
|
202
195
|
return fields.length > 0 ? fields : undefined
|
|
203
196
|
}
|
|
204
197
|
|
|
205
|
-
export function getPageTotal(pageSize?: number, total?: number): number {
|
|
206
|
-
if (!pageSize || pageSize <= 0) {
|
|
207
|
-
return 1
|
|
208
|
-
} else {
|
|
209
|
-
if (!total) {
|
|
210
|
-
total = 0
|
|
211
|
-
}
|
|
212
|
-
if (total % pageSize === 0) {
|
|
213
|
-
return Math.floor(total / pageSize)
|
|
214
|
-
}
|
|
215
|
-
return Math.floor(total / pageSize + 1)
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
198
|
export function formatText(...args: any[]): string {
|
|
220
199
|
let formatted = args[0]
|
|
221
200
|
if (!formatted || formatted === "") {
|
|
@@ -235,6 +214,19 @@ export function formatText(...args: any[]): string {
|
|
|
235
214
|
}
|
|
236
215
|
return formatted
|
|
237
216
|
}
|
|
217
|
+
export function getPageTotal(pageSize?: number, total?: number): number {
|
|
218
|
+
if (!pageSize || pageSize <= 0) {
|
|
219
|
+
return 1
|
|
220
|
+
} else {
|
|
221
|
+
if (!total) {
|
|
222
|
+
total = 0
|
|
223
|
+
}
|
|
224
|
+
if (total % pageSize === 0) {
|
|
225
|
+
return Math.floor(total / pageSize)
|
|
226
|
+
}
|
|
227
|
+
return Math.floor(total / pageSize + 1)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
238
230
|
export function buildMessage<T>(resource: StringMap, results: T[], limit: number, page: number | undefined, total?: number): string {
|
|
239
231
|
if (!results || results.length === 0) {
|
|
240
232
|
return resource.msg_no_data_found
|
|
@@ -393,15 +385,6 @@ export function handleToggle(target?: HTMLElement, on?: boolean): boolean {
|
|
|
393
385
|
}
|
|
394
386
|
return off
|
|
395
387
|
}
|
|
396
|
-
export function handleSortEvent(event: Event, com: Sortable): void {
|
|
397
|
-
if (event && event.target) {
|
|
398
|
-
const target = event.target as HTMLElement
|
|
399
|
-
const s = handleSort(target, com.sortTarget, com.sortField, com.sortType)
|
|
400
|
-
com.sortField = s.field
|
|
401
|
-
com.sortType = s.type
|
|
402
|
-
com.sortTarget = target
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
388
|
|
|
406
389
|
export function getSortElement(target: HTMLElement): HTMLElement {
|
|
407
390
|
return target.nodeName === "I" ? (target.parentElement as HTMLElement) : target
|
package/src/update.ts
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
import { useEffect, useState } from "react"
|
|
2
|
-
import {
|
|
2
|
+
import { Locale, resources } from "./core"
|
|
3
3
|
import { useMergeState } from "./merge"
|
|
4
4
|
import { buildFlatState, buildState, handleEvent, localeOf } from "./state"
|
|
5
5
|
|
|
6
|
+
export function removePhoneFormat(phone: string): string {
|
|
7
|
+
if (phone) {
|
|
8
|
+
return phone.replace(resources.phone, "")
|
|
9
|
+
} else {
|
|
10
|
+
return phone
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function getModelName(form?: HTMLFormElement | null, name?: string): string {
|
|
15
|
+
if (form) {
|
|
16
|
+
const a = form.getAttribute("model-name")
|
|
17
|
+
if (a && a.length > 0) {
|
|
18
|
+
return a
|
|
19
|
+
}
|
|
20
|
+
const b = form.name
|
|
21
|
+
if (b) {
|
|
22
|
+
if (b.endsWith("Form")) {
|
|
23
|
+
return b.substring(0, b.length - 4)
|
|
24
|
+
}
|
|
25
|
+
return b
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (name && name.length > 0) {
|
|
29
|
+
return name
|
|
30
|
+
}
|
|
31
|
+
return ""
|
|
32
|
+
}
|
|
6
33
|
const m = "model"
|
|
7
34
|
const _getModelName = (f2?: HTMLFormElement | null): string => {
|
|
8
|
-
return
|
|
35
|
+
return getModelName(f2, m)
|
|
9
36
|
}
|
|
10
37
|
export const useUpdate = <T>(
|
|
11
38
|
initialState: T,
|
package/src/useEdit.ts
CHANGED
|
@@ -1,26 +1,14 @@
|
|
|
1
1
|
import { useEffect, useState } from "react"
|
|
2
2
|
import { Params, useNavigate, useParams } from "react-router"
|
|
3
|
-
import {
|
|
4
|
-
Attribute,
|
|
5
|
-
Attributes,
|
|
6
|
-
ErrorMessage,
|
|
7
|
-
getModelName as getModelName2,
|
|
8
|
-
hideLoading,
|
|
9
|
-
initForm,
|
|
10
|
-
LoadingService,
|
|
11
|
-
Locale,
|
|
12
|
-
resources,
|
|
13
|
-
ResourceService,
|
|
14
|
-
showLoading,
|
|
15
|
-
UIService,
|
|
16
|
-
} from "./core"
|
|
3
|
+
import { Attribute, Attributes, ErrorMessage, LoadingService, Locale, resources, ResourceService, UIService } from "./core"
|
|
17
4
|
import { createModel as createModel2 } from "./edit"
|
|
18
5
|
import { message, messageByHttpStatus } from "./error"
|
|
19
6
|
import { focusFirstError, setReadOnly } from "./formutil"
|
|
7
|
+
import { hideLoading, initForm, showLoading } from "./input"
|
|
20
8
|
import { DispatchWithCallback, useMergeState } from "./merge"
|
|
21
9
|
import { clone, makeDiff } from "./reflect"
|
|
22
10
|
import { localeOf } from "./state"
|
|
23
|
-
import { useUpdate } from "./update"
|
|
11
|
+
import { getModelName as getModelName2, useUpdate } from "./update"
|
|
24
12
|
|
|
25
13
|
export function buildKeys(attributes: Attributes): string[] {
|
|
26
14
|
if (!attributes) {
|
package/src/useSearch.ts
CHANGED
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from "react"
|
|
2
|
-
import {
|
|
3
|
-
getName,
|
|
4
|
-
getRemoveError,
|
|
5
|
-
getValidateForm,
|
|
6
|
-
hideLoading,
|
|
7
|
-
initForm,
|
|
8
|
-
LoadingService,
|
|
9
|
-
Locale,
|
|
10
|
-
pageSizes,
|
|
11
|
-
removeFormError,
|
|
12
|
-
resources,
|
|
13
|
-
ResourceService,
|
|
14
|
-
showLoading,
|
|
15
|
-
UIService,
|
|
16
|
-
} from "./core"
|
|
2
|
+
import { LoadingService, Locale, pageSizes, resources, ResourceService, UIService } from "./core"
|
|
17
3
|
import { error } from "./error"
|
|
4
|
+
import { hideLoading, initForm, showLoading } from "./input"
|
|
18
5
|
import { DispatchWithCallback, useMergeState } from "./merge"
|
|
19
6
|
import { clone } from "./reflect"
|
|
20
7
|
import { buildFromUrl } from "./route"
|
|
@@ -23,6 +10,7 @@ import {
|
|
|
23
10
|
buildMessage,
|
|
24
11
|
Filter,
|
|
25
12
|
getFields,
|
|
13
|
+
getPageTotal,
|
|
26
14
|
handleSort,
|
|
27
15
|
handleToggle,
|
|
28
16
|
initFilter,
|
|
@@ -32,13 +20,19 @@ import {
|
|
|
32
20
|
removeSortStatus,
|
|
33
21
|
SearchResult,
|
|
34
22
|
SearchService,
|
|
35
|
-
showPaging,
|
|
36
23
|
Sortable,
|
|
37
24
|
} from "./search"
|
|
38
25
|
import { enLocale } from "./state"
|
|
39
26
|
import { useUpdate } from "./update"
|
|
40
27
|
|
|
41
|
-
export
|
|
28
|
+
export function showPaging<T>(com: Pagination, list: T[], pageSize?: number, total?: number): void {
|
|
29
|
+
com.total = total
|
|
30
|
+
const pageTotal = getPageTotal(pageSize, total)
|
|
31
|
+
com.pages = pageTotal
|
|
32
|
+
com.showPaging = !total || com.pages <= 1 || (list && list.length >= total) ? false : true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface Searchable extends Pagination, Sortable {
|
|
42
36
|
nextPageToken?: string
|
|
43
37
|
excluding?: string[] | number[]
|
|
44
38
|
}
|
|
@@ -52,6 +46,30 @@ export interface SearchParameter {
|
|
|
52
46
|
auto?: boolean
|
|
53
47
|
}
|
|
54
48
|
|
|
49
|
+
export interface UIParameter {
|
|
50
|
+
ui?: UIService
|
|
51
|
+
}
|
|
52
|
+
export function removeFormError(u?: UIParameter, f?: HTMLFormElement): void {
|
|
53
|
+
if (f && u && u.ui) {
|
|
54
|
+
u.ui.removeFormError(f)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function getValidateForm(
|
|
58
|
+
u?: UIParameter,
|
|
59
|
+
vf?: (form: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean) => boolean,
|
|
60
|
+
): ((form: HTMLFormElement, locale?: Locale, focusFirst?: boolean, scroll?: boolean) => boolean) | undefined {
|
|
61
|
+
if (vf) {
|
|
62
|
+
return vf
|
|
63
|
+
}
|
|
64
|
+
return u && u.ui ? u.ui.validateForm : undefined
|
|
65
|
+
}
|
|
66
|
+
export function getRemoveError(u?: UIParameter, rmErr?: (el: HTMLInputElement) => void): ((el: HTMLInputElement) => void) | undefined {
|
|
67
|
+
if (rmErr) {
|
|
68
|
+
return rmErr
|
|
69
|
+
}
|
|
70
|
+
return u && u.ui ? u.ui.removeError : undefined
|
|
71
|
+
}
|
|
72
|
+
|
|
55
73
|
export function getModel<S extends Filter>(state: any, modelName: string, searchable: Searchable, fields?: string[], excluding?: string[] | number[]): S {
|
|
56
74
|
let obj2 = getModelFromState(state, modelName)
|
|
57
75
|
|
|
@@ -122,6 +140,7 @@ export function getFieldsFromForm(fields?: string[], initFields?: boolean, form?
|
|
|
122
140
|
}
|
|
123
141
|
return fields
|
|
124
142
|
}
|
|
143
|
+
|
|
125
144
|
export function append<T>(list?: T[], results?: T[]): T[] {
|
|
126
145
|
if (list && results) {
|
|
127
146
|
for (const obj of results) {
|
|
@@ -425,6 +444,10 @@ export const useSearchOneProps = <T, S extends Filter, ST extends SearchComponen
|
|
|
425
444
|
export const useSearchOne = <T, S extends Filter, ST extends SearchComponentState<T, S>>(p: HookBaseSearchParameter<T, S, ST>) => {
|
|
426
445
|
return useCoreSearch(p.refForm, p.initialState, p.service, p, p)
|
|
427
446
|
}
|
|
447
|
+
|
|
448
|
+
export function getName(d: string, n?: string): string {
|
|
449
|
+
return n && n.length > 0 ? n : d
|
|
450
|
+
}
|
|
428
451
|
export const useCoreSearch = <T, S extends Filter, ST>(
|
|
429
452
|
refForm: any,
|
|
430
453
|
initialState: ST,
|
package/src/util.ts
CHANGED
|
@@ -77,7 +77,7 @@ function getStringCurrency(value: string, datatype: string, locale?: Locale, max
|
|
|
77
77
|
|
|
78
78
|
const dotPosition = value.indexOf(".")
|
|
79
79
|
// Format thousands
|
|
80
|
-
let beforeDot = dotPosition >= 0 ? value.
|
|
80
|
+
let beforeDot = dotPosition >= 0 ? value.substring(0, dotPosition) : value
|
|
81
81
|
if (datatype === "string-currency" || isOnBlur) {
|
|
82
82
|
beforeDot = beforeDot.replace(new RegExp("\\B(?=(\\d{" + groupDigits + "})+(?!\\d))", "g"), groupSeparator)
|
|
83
83
|
}
|
|
@@ -85,9 +85,9 @@ function getStringCurrency(value: string, datatype: string, locale?: Locale, max
|
|
|
85
85
|
// Cut after dot
|
|
86
86
|
let afterDot
|
|
87
87
|
if (dotPosition > 0) {
|
|
88
|
-
afterDot = value.
|
|
88
|
+
afterDot = value.substring(dotPosition + 1)
|
|
89
89
|
if (afterDot.length > decimalDigits) {
|
|
90
|
-
afterDot = afterDot.
|
|
90
|
+
afterDot = afterDot.substring(0, decimalDigits)
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
if (maxLength && beforeDot.length > maxLength - (decimalDigits + 1)) {
|