react-hook-core 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/com.js +16 -3
- package/lib/index.js +21 -8
- package/lib/reflect.js +15 -9
- package/lib/route.js +68 -54
- package/lib/search.js +9 -1
- package/package.json +1 -1
- package/src/com.ts +34 -6
- package/src/core.ts +0 -14
- package/src/index.ts +20 -8
- package/src/reflect.ts +16 -10
- package/src/route.ts +91 -64
- package/src/search.ts +14 -2
- package/src/state.ts +10 -2
package/lib/com.js
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true })
|
|
3
3
|
var React = require("react")
|
|
4
4
|
var core_1 = require("./core")
|
|
5
|
+
function Error(p) {
|
|
6
|
+
return React.createElement(
|
|
7
|
+
"div",
|
|
8
|
+
React.createElement(
|
|
9
|
+
"header",
|
|
10
|
+
p.back && React.createElement("button", { type: "button", id: "btnBack", name: "btnBack", className: "btn-back", onClick: p.back }),
|
|
11
|
+
React.createElement("h2", p.title),
|
|
12
|
+
),
|
|
13
|
+
React.createElement("div", { className: "error-body" }, React.createElement("h4", { className: "h4" }, p.message)),
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
exports.Error = Error
|
|
5
17
|
function PageSizeSelect(p) {
|
|
6
18
|
var g = p.sizes
|
|
7
19
|
var s = !g || g.length === 0 ? core_1.pageSizes : g
|
|
@@ -28,9 +40,10 @@ function Search(p) {
|
|
|
28
40
|
maxLength: p.maxLength,
|
|
29
41
|
placeholder: p.placeholder,
|
|
30
42
|
}),
|
|
31
|
-
p.clear &&
|
|
32
|
-
|
|
33
|
-
p.
|
|
43
|
+
p.clear &&
|
|
44
|
+
React.createElement("button", { type: "button", id: "btnClearQ", name: "btnClearQ", hidden: !p.value, className: "btn-remove-text", onClick: p.clear }),
|
|
45
|
+
p.toggle && React.createElement("button", { type: "button", id: "btnToggleSearch", name: "btnToggleSearch", className: "btn-filter", onClick: p.toggle }),
|
|
46
|
+
p.search && React.createElement("button", { type: "submit", id: "btnSearch", name: "btnSearch", className: "btn-search", onClick: p.search }),
|
|
34
47
|
),
|
|
35
48
|
)
|
|
36
49
|
}
|
package/lib/index.js
CHANGED
|
@@ -18,7 +18,7 @@ __export(require("./util"))
|
|
|
18
18
|
function checked(s, v) {
|
|
19
19
|
if (s) {
|
|
20
20
|
if (Array.isArray(s)) {
|
|
21
|
-
return
|
|
21
|
+
return includes(s, v)
|
|
22
22
|
} else {
|
|
23
23
|
return s === v
|
|
24
24
|
}
|
|
@@ -26,6 +26,16 @@ function checked(s, v) {
|
|
|
26
26
|
return false
|
|
27
27
|
}
|
|
28
28
|
exports.checked = checked
|
|
29
|
+
function includes(s, v) {
|
|
30
|
+
var l = s.length
|
|
31
|
+
for (var i = 0; i < l; i++) {
|
|
32
|
+
if (s[i] === v) {
|
|
33
|
+
return true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
exports.includes = includes
|
|
29
39
|
function value(obj) {
|
|
30
40
|
return obj ? obj : {}
|
|
31
41
|
}
|
|
@@ -128,8 +138,8 @@ exports.formatDate = formatDate
|
|
|
128
138
|
function dateToString(date) {
|
|
129
139
|
var d2 = typeof date !== "string" ? date : new Date(date)
|
|
130
140
|
var year = d2.getFullYear()
|
|
131
|
-
var month =
|
|
132
|
-
var day =
|
|
141
|
+
var month = pad(d2.getMonth() + 1)
|
|
142
|
+
var day = pad(d2.getDate())
|
|
133
143
|
return year + "-" + month + "-" + day
|
|
134
144
|
}
|
|
135
145
|
exports.dateToString = dateToString
|
|
@@ -139,14 +149,17 @@ function datetimeToString(date) {
|
|
|
139
149
|
}
|
|
140
150
|
var d2 = typeof date !== "string" ? date : new Date(date)
|
|
141
151
|
var year = d2.getFullYear()
|
|
142
|
-
var month =
|
|
143
|
-
var day =
|
|
144
|
-
var hours =
|
|
145
|
-
var minutes =
|
|
146
|
-
var seconds =
|
|
152
|
+
var month = pad(d2.getMonth() + 1)
|
|
153
|
+
var day = pad(d2.getDate())
|
|
154
|
+
var hours = pad(d2.getHours())
|
|
155
|
+
var minutes = pad(d2.getMinutes())
|
|
156
|
+
var seconds = pad(d2.getSeconds())
|
|
147
157
|
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds
|
|
148
158
|
}
|
|
149
159
|
exports.datetimeToString = datetimeToString
|
|
160
|
+
function pad(n) {
|
|
161
|
+
return n < 10 ? "0" + n : n.toString()
|
|
162
|
+
}
|
|
150
163
|
exports.scrollToFocus = function (e, isUseTimeOut) {
|
|
151
164
|
try {
|
|
152
165
|
var element = e.target
|
package/lib/reflect.js
CHANGED
|
@@ -42,11 +42,11 @@ function clone(obj) {
|
|
|
42
42
|
exports.clone = clone
|
|
43
43
|
function diff(obj1, obj2) {
|
|
44
44
|
var fields = []
|
|
45
|
-
var key1s = Object.keys(
|
|
45
|
+
var key1s = Object.keys(obj2)
|
|
46
46
|
for (var _i = 0, key1s_1 = key1s; _i < key1s_1.length; _i++) {
|
|
47
47
|
var k = key1s_1[_i]
|
|
48
|
-
var v1 =
|
|
49
|
-
var v2 =
|
|
48
|
+
var v1 = obj2[k]
|
|
49
|
+
var v2 = obj1[k]
|
|
50
50
|
if (v1 == null) {
|
|
51
51
|
if (v2 != null) {
|
|
52
52
|
fields.push(k)
|
|
@@ -64,7 +64,7 @@ function diff(obj1, obj2) {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
var key2s = Object.keys(
|
|
67
|
+
var key2s = Object.keys(obj1)
|
|
68
68
|
var ni = notIn(key1s, key2s)
|
|
69
69
|
for (var _a = 0, ni_1 = ni; _a < ni_1.length; _a++) {
|
|
70
70
|
var n = ni_1[_a]
|
|
@@ -85,6 +85,9 @@ function notIn(s1, s2) {
|
|
|
85
85
|
}
|
|
86
86
|
exports.notIn = notIn
|
|
87
87
|
function makeDiff(o1, o2, keys, version) {
|
|
88
|
+
if (o1 && !o2) {
|
|
89
|
+
return o1
|
|
90
|
+
}
|
|
88
91
|
var obj1 = o1
|
|
89
92
|
var obj2 = o2
|
|
90
93
|
var obj3 = {}
|
|
@@ -111,19 +114,22 @@ function makeDiff(o1, o2, keys, version) {
|
|
|
111
114
|
}
|
|
112
115
|
exports.makeDiff = makeDiff
|
|
113
116
|
function hasDiff(o1, o2, keys, version) {
|
|
117
|
+
if (o1 && !o2) {
|
|
118
|
+
return true
|
|
119
|
+
}
|
|
114
120
|
var diff = makeDiff(o1, o2, keys, version)
|
|
115
|
-
return !
|
|
121
|
+
return !isEmpty(diff)
|
|
116
122
|
}
|
|
117
123
|
exports.hasDiff = hasDiff
|
|
118
|
-
function
|
|
119
|
-
for (var
|
|
120
|
-
if (
|
|
124
|
+
function isEmpty(obj) {
|
|
125
|
+
for (var _ in obj) {
|
|
126
|
+
if (Object.prototype.hasOwnProperty.call(obj, _)) {
|
|
121
127
|
return false
|
|
122
128
|
}
|
|
123
129
|
}
|
|
124
130
|
return true
|
|
125
131
|
}
|
|
126
|
-
exports.
|
|
132
|
+
exports.isEmpty = isEmpty
|
|
127
133
|
function equal(obj1, obj2) {
|
|
128
134
|
if (obj1 == null && obj2 == null) {
|
|
129
135
|
return true
|
package/lib/route.js
CHANGED
|
@@ -8,7 +8,9 @@ function onBack(e, navigate, confirm, resource, o1, o2, keys, version) {
|
|
|
8
8
|
}
|
|
9
9
|
exports.onBack = onBack
|
|
10
10
|
function goBack(navigate, confirm, resource, o1, o2, keys, version) {
|
|
11
|
-
if (!
|
|
11
|
+
if (!o2) {
|
|
12
|
+
navigate(-1)
|
|
13
|
+
} else if (!reflect_1.hasDiff(o1, o2, keys, version)) {
|
|
12
14
|
navigate(-1)
|
|
13
15
|
} else {
|
|
14
16
|
confirm(resource.msg_confirm_back, function () {
|
|
@@ -17,85 +19,97 @@ function goBack(navigate, confirm, resource, o1, o2, keys, version) {
|
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
21
|
exports.goBack = goBack
|
|
20
|
-
function buildFromUrl(
|
|
21
|
-
return buildParameters(window.location.search,
|
|
22
|
+
function buildFromUrl(model) {
|
|
23
|
+
return buildParameters(window.location.search, model)
|
|
22
24
|
}
|
|
23
25
|
exports.buildFromUrl = buildFromUrl
|
|
24
26
|
function buildParameters(url, model) {
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
var parsed = convertToObject(query_string_1.default.parse(urlSearch), model)
|
|
32
|
-
return parsed
|
|
33
|
-
} catch (error) {
|
|
34
|
-
console.log(error)
|
|
35
|
-
throw error
|
|
27
|
+
var query = url
|
|
28
|
+
var index = url.indexOf("?")
|
|
29
|
+
if (index >= 0) {
|
|
30
|
+
query = url.substring(index + 1)
|
|
36
31
|
}
|
|
32
|
+
var parsed = query_string_1.default.parse(query, {
|
|
33
|
+
parseNumbers: true,
|
|
34
|
+
parseBooleans: true,
|
|
35
|
+
})
|
|
36
|
+
return convertToObject(parsed, model)
|
|
37
37
|
}
|
|
38
38
|
exports.buildParameters = buildParameters
|
|
39
39
|
function convertToObject(input, model) {
|
|
40
40
|
if (model) {
|
|
41
|
-
return
|
|
41
|
+
return mapToModel(input, model)
|
|
42
42
|
}
|
|
43
43
|
var output = {}
|
|
44
44
|
for (var key in input) {
|
|
45
|
+
if (!Object.prototype.hasOwnProperty.call(input, key)) {
|
|
46
|
+
continue
|
|
47
|
+
}
|
|
45
48
|
var value = input[key]
|
|
46
49
|
var keys = key.split(".")
|
|
47
|
-
var
|
|
50
|
+
var current = output
|
|
48
51
|
for (var i = 0; i < keys.length; i++) {
|
|
49
|
-
var
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
var k = keys[i]
|
|
53
|
+
if (i === keys.length - 1) {
|
|
54
|
+
current[k] = parseValue(value)
|
|
55
|
+
} else {
|
|
56
|
+
if (!current[k]) {
|
|
57
|
+
current[k] = {}
|
|
55
58
|
}
|
|
59
|
+
current = current[k]
|
|
56
60
|
}
|
|
57
|
-
currentObj = currentObj[currentKey]
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
return output
|
|
61
64
|
}
|
|
62
65
|
exports.convertToObject = convertToObject
|
|
63
|
-
function
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
} else
|
|
88
|
-
|
|
89
|
-
dest[key] = dest[key].toString()
|
|
90
|
-
}
|
|
66
|
+
function mapToModel(input, model) {
|
|
67
|
+
var result = {}
|
|
68
|
+
var key
|
|
69
|
+
for (key in model) {
|
|
70
|
+
if (!Object.prototype.hasOwnProperty.call(model, key)) {
|
|
71
|
+
continue
|
|
72
|
+
}
|
|
73
|
+
var modelValue = model[key]
|
|
74
|
+
var inputValue = input[key]
|
|
75
|
+
if (inputValue === undefined) {
|
|
76
|
+
result[key] = modelValue
|
|
77
|
+
continue
|
|
78
|
+
}
|
|
79
|
+
if (modelValue instanceof Date) {
|
|
80
|
+
result[key] = new Date(inputValue)
|
|
81
|
+
} else if (typeof modelValue === "number") {
|
|
82
|
+
result[key] = Number(inputValue)
|
|
83
|
+
} else if (typeof modelValue === "boolean") {
|
|
84
|
+
result[key] = Boolean(inputValue)
|
|
85
|
+
} else if (typeof modelValue === "string") {
|
|
86
|
+
result[key] = String(inputValue)
|
|
87
|
+
} else if (Object.prototype.toString.call(modelValue) === "[object Array]") {
|
|
88
|
+
if (Object.prototype.toString.call(inputValue) === "[object Array]") {
|
|
89
|
+
result[key] = inputValue
|
|
90
|
+
} else {
|
|
91
|
+
result[key] = [inputValue]
|
|
91
92
|
}
|
|
93
|
+
} else if (typeof modelValue === "object" && modelValue !== null) {
|
|
94
|
+
result[key] = mapToModel(inputValue || {}, modelValue)
|
|
95
|
+
} else {
|
|
96
|
+
result[key] = inputValue
|
|
92
97
|
}
|
|
93
98
|
}
|
|
94
|
-
return
|
|
99
|
+
return result
|
|
95
100
|
}
|
|
96
101
|
function parseValue(value) {
|
|
97
|
-
if (
|
|
98
|
-
return
|
|
102
|
+
if (typeof value !== "string") {
|
|
103
|
+
return value
|
|
104
|
+
}
|
|
105
|
+
if (!isNaN(Number(value))) {
|
|
106
|
+
return Number(value)
|
|
107
|
+
}
|
|
108
|
+
if (value === "true") {
|
|
109
|
+
return true
|
|
110
|
+
}
|
|
111
|
+
if (value === "false") {
|
|
112
|
+
return false
|
|
99
113
|
}
|
|
100
114
|
return value
|
|
101
115
|
}
|
package/lib/search.js
CHANGED
|
@@ -340,6 +340,14 @@ function buildSortFilter(obj, sortable) {
|
|
|
340
340
|
return filter
|
|
341
341
|
}
|
|
342
342
|
exports.buildSortFilter = buildSortFilter
|
|
343
|
+
function addParametersIntoUrlWithSort(filter, state, isFirstLoad, setFilter) {
|
|
344
|
+
var urlFilter = buildSortFilter(filter, state)
|
|
345
|
+
addParametersIntoUrl(urlFilter, isFirstLoad)
|
|
346
|
+
if (setFilter) {
|
|
347
|
+
setFilter(filter)
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
exports.addParametersIntoUrlWithSort = addParametersIntoUrlWithSort
|
|
343
351
|
function handleToggle(target, off) {
|
|
344
352
|
var on = !off
|
|
345
353
|
if (target) {
|
|
@@ -358,7 +366,7 @@ function getNumber(e) {
|
|
|
358
366
|
return parseInt(e.currentTarget.value, 10)
|
|
359
367
|
}
|
|
360
368
|
exports.getNumber = getNumber
|
|
361
|
-
function setSortFilter(state,
|
|
369
|
+
function setSortFilter(filter, state, setFilter, setState, search) {
|
|
362
370
|
setSort(state, filter.sort)
|
|
363
371
|
if (setFilter) {
|
|
364
372
|
setFilter(filter)
|
package/package.json
CHANGED
package/src/com.ts
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
import { Locale, pageSizes } from "./core"
|
|
3
3
|
|
|
4
|
+
export interface ErrorProps {
|
|
5
|
+
title?: string
|
|
6
|
+
message?: string
|
|
7
|
+
back?: React.MouseEventHandler<HTMLElement>
|
|
8
|
+
}
|
|
9
|
+
export function Error(p: ErrorProps) {
|
|
10
|
+
return React.createElement(
|
|
11
|
+
"div",
|
|
12
|
+
React.createElement(
|
|
13
|
+
"header",
|
|
14
|
+
p.back && React.createElement("button", { type: "button", id: "btnBack", name: "btnBack", className: "btn-back", onClick: p.back }),
|
|
15
|
+
React.createElement("h2", p.title),
|
|
16
|
+
),
|
|
17
|
+
React.createElement("div", { className: "error-body" }, React.createElement("h4", { className: "h4" }, p.message)),
|
|
18
|
+
)
|
|
19
|
+
/*
|
|
20
|
+
<div>
|
|
21
|
+
<header>
|
|
22
|
+
<button type="button" id="btnBack" name="btnBack" className="btn-back" onClick={() => navigate(-1)}></button>
|
|
23
|
+
<h2>{resource.error_404_title}</h2>
|
|
24
|
+
</header>
|
|
25
|
+
<div className="error-body">
|
|
26
|
+
<h4 className="h4">{resource.error_404_message}</h4>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
*/
|
|
30
|
+
}
|
|
4
31
|
export interface PageSizeProps {
|
|
5
32
|
id?: string
|
|
6
33
|
name?: string
|
|
@@ -46,9 +73,10 @@ export function Search(p: Props) {
|
|
|
46
73
|
maxLength: p.maxLength,
|
|
47
74
|
placeholder: p.placeholder,
|
|
48
75
|
}),
|
|
49
|
-
p.clear &&
|
|
50
|
-
|
|
51
|
-
p.
|
|
76
|
+
p.clear &&
|
|
77
|
+
React.createElement("button", { type: "button", id: "btnClearQ", name: "btnClearQ", hidden: !p.value, className: "btn-remove-text", onClick: p.clear }),
|
|
78
|
+
p.toggle && React.createElement("button", { type: "button", id: "btnToggleSearch", name: "btnToggleSearch", className: "btn-filter", onClick: p.toggle }),
|
|
79
|
+
p.search && React.createElement("button", { type: "submit", id: "btnSearch", name: "btnSearch", className: "btn-search", onClick: p.search }),
|
|
52
80
|
),
|
|
53
81
|
)
|
|
54
82
|
/*
|
|
@@ -57,9 +85,9 @@ export function Search(p: Props) {
|
|
|
57
85
|
<label className={p.className}>
|
|
58
86
|
{p.pageSizeChanged && <PageSizeSelect size={p.size} sizes={p.sizes} onChange={p.pageSizeChanged} name={p.name} id={p.id} />}
|
|
59
87
|
<input type='text' id='q' name='q' value={p.value || ''} onChange={p.onChange} maxLength={p.maxLength} placeholder={p.placeholder} />
|
|
60
|
-
{p.clear && <button type='button' hidden={!p.value} className='btn-remove-text' onClick={p.clear}/>}
|
|
61
|
-
{p.toggle && <button type='button' className='btn-filter' onClick={p.toggle} />}
|
|
62
|
-
{p.search && <button type='submit' className='btn-search' onClick={p.search} />}
|
|
88
|
+
{p.clear && <button type='button' id='btnClearQ' name='btnClearQ' hidden={!p.value} className='btn-remove-text' onClick={p.clear}/>}
|
|
89
|
+
{p.toggle && <button type='button' id='btnToggleSearch' name='btnToggleSearch' className='btn-filter' onClick={p.toggle} />}
|
|
90
|
+
{p.search && <button type='submit' id='btnSearch' name='btnSearch' className='btn-search' onClick={p.search} />}
|
|
63
91
|
</label>
|
|
64
92
|
</>
|
|
65
93
|
);
|
package/src/core.ts
CHANGED
|
@@ -75,23 +75,9 @@ export type Type =
|
|
|
75
75
|
| "datetimes"
|
|
76
76
|
| "times"
|
|
77
77
|
|
|
78
|
-
export type Format = "currency" | "percentage" | "email" | "url" | "phone" | "fax" | "ipv4" | "ipv6"
|
|
79
|
-
|
|
80
|
-
export interface Attribute {
|
|
81
|
-
name?: string
|
|
82
|
-
type?: Type
|
|
83
|
-
format?: Format
|
|
84
|
-
key?: boolean
|
|
85
|
-
version?: boolean
|
|
86
|
-
typeof?: Attributes
|
|
87
|
-
scale?: number
|
|
88
|
-
noformat?: boolean
|
|
89
|
-
}
|
|
90
78
|
export interface Attribute {
|
|
91
79
|
name?: string
|
|
92
80
|
type?: Type
|
|
93
|
-
key?: boolean
|
|
94
|
-
version?: boolean
|
|
95
81
|
typeof?: Attributes
|
|
96
82
|
}
|
|
97
83
|
export interface Attributes {
|
package/src/index.ts
CHANGED
|
@@ -40,13 +40,22 @@ export const useCallbackState: RetType = <T>(initialValue: T | (() => T)) => {
|
|
|
40
40
|
export function checked(s: string[] | string | undefined, v: string): boolean | undefined {
|
|
41
41
|
if (s) {
|
|
42
42
|
if (Array.isArray(s)) {
|
|
43
|
-
return
|
|
43
|
+
return includes(s, v)
|
|
44
44
|
} else {
|
|
45
45
|
return s === v
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
return false
|
|
49
49
|
}
|
|
50
|
+
export function includes(s: string[], v: string): boolean {
|
|
51
|
+
const l = s.length
|
|
52
|
+
for (let i = 0; i < l; i++) {
|
|
53
|
+
if (s[i] === v) {
|
|
54
|
+
return true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
50
59
|
export function value<T>(obj?: T): T {
|
|
51
60
|
return obj ? obj : ({} as any)
|
|
52
61
|
}
|
|
@@ -182,8 +191,8 @@ export function formatDate(date: Date | null | undefined, format: string): strin
|
|
|
182
191
|
export function dateToString(date: Date | string): string {
|
|
183
192
|
const d2 = typeof date !== "string" ? date : new Date(date)
|
|
184
193
|
const year = d2.getFullYear()
|
|
185
|
-
const month =
|
|
186
|
-
const day =
|
|
194
|
+
const month = pad(d2.getMonth() + 1)
|
|
195
|
+
const day = pad(d2.getDate())
|
|
187
196
|
return `${year}-${month}-${day}`
|
|
188
197
|
}
|
|
189
198
|
export function datetimeToString(date?: Date | string): string | undefined {
|
|
@@ -192,13 +201,16 @@ export function datetimeToString(date?: Date | string): string | undefined {
|
|
|
192
201
|
}
|
|
193
202
|
const d2 = typeof date !== "string" ? date : new Date(date)
|
|
194
203
|
const year = d2.getFullYear()
|
|
195
|
-
const month =
|
|
196
|
-
const day =
|
|
197
|
-
const hours =
|
|
198
|
-
const minutes =
|
|
199
|
-
const seconds =
|
|
204
|
+
const month = pad(d2.getMonth() + 1)
|
|
205
|
+
const day = pad(d2.getDate())
|
|
206
|
+
const hours = pad(d2.getHours())
|
|
207
|
+
const minutes = pad(d2.getMinutes())
|
|
208
|
+
const seconds = pad(d2.getSeconds())
|
|
200
209
|
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`
|
|
201
210
|
}
|
|
211
|
+
function pad(n: number): string {
|
|
212
|
+
return n < 10 ? "0" + n : n.toString()
|
|
213
|
+
}
|
|
202
214
|
|
|
203
215
|
export const scrollToFocus = (e: any, isUseTimeOut?: boolean) => {
|
|
204
216
|
try {
|
package/src/reflect.ts
CHANGED
|
@@ -38,10 +38,10 @@ export function clone(obj: any): any {
|
|
|
38
38
|
|
|
39
39
|
export function diff(obj1: any, obj2: any): string[] {
|
|
40
40
|
const fields = []
|
|
41
|
-
const key1s = Object.keys(
|
|
41
|
+
const key1s = Object.keys(obj2)
|
|
42
42
|
for (const k of key1s) {
|
|
43
|
-
const v1 =
|
|
44
|
-
const v2 =
|
|
43
|
+
const v1 = obj2[k]
|
|
44
|
+
const v2 = obj1[k]
|
|
45
45
|
if (v1 == null) {
|
|
46
46
|
if (v2 != null) {
|
|
47
47
|
fields.push(k)
|
|
@@ -59,7 +59,7 @@ export function diff(obj1: any, obj2: any): string[] {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const key2s = Object.keys(
|
|
62
|
+
const key2s = Object.keys(obj1)
|
|
63
63
|
const ni = notIn(key1s, key2s)
|
|
64
64
|
for (const n of ni) {
|
|
65
65
|
fields.push(n)
|
|
@@ -76,7 +76,10 @@ export function notIn(s1: string[], s2: string[]): string[] {
|
|
|
76
76
|
return r
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
export function makeDiff<T>(o1: T, o2
|
|
79
|
+
export function makeDiff<T>(o1: T, o2?: T, keys?: string[], version?: string): Partial<T> {
|
|
80
|
+
if (o1 && !o2) {
|
|
81
|
+
return o1
|
|
82
|
+
}
|
|
80
83
|
const obj1: any = o1
|
|
81
84
|
const obj2: any = o2
|
|
82
85
|
const obj3: any = {}
|
|
@@ -99,13 +102,16 @@ export function makeDiff<T>(o1: T, o2: T, keys?: string[], version?: string): Pa
|
|
|
99
102
|
}
|
|
100
103
|
return obj3
|
|
101
104
|
}
|
|
102
|
-
export function hasDiff<T>(o1: T, o2
|
|
105
|
+
export function hasDiff<T>(o1: T, o2?: T, keys?: string[], version?: string): boolean {
|
|
106
|
+
if (o1 && !o2) {
|
|
107
|
+
return true
|
|
108
|
+
}
|
|
103
109
|
const diff = makeDiff(o1, o2, keys, version)
|
|
104
|
-
return !
|
|
110
|
+
return !isEmpty(diff)
|
|
105
111
|
}
|
|
106
|
-
export function
|
|
107
|
-
for (
|
|
108
|
-
if (
|
|
112
|
+
export function isEmpty(obj: object): boolean {
|
|
113
|
+
for (const _ in obj) {
|
|
114
|
+
if (Object.prototype.hasOwnProperty.call(obj, _)) {
|
|
109
115
|
return false
|
|
110
116
|
}
|
|
111
117
|
}
|
package/src/route.ts
CHANGED
|
@@ -11,7 +11,7 @@ export function onBack<T>(
|
|
|
11
11
|
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
12
12
|
resource: StringMap,
|
|
13
13
|
o1: T,
|
|
14
|
-
o2
|
|
14
|
+
o2?: T,
|
|
15
15
|
keys?: string[],
|
|
16
16
|
version?: string,
|
|
17
17
|
) {
|
|
@@ -24,102 +24,129 @@ export function goBack<T>(
|
|
|
24
24
|
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
25
25
|
resource: StringMap,
|
|
26
26
|
o1: T,
|
|
27
|
-
o2
|
|
27
|
+
o2?: T,
|
|
28
28
|
keys?: string[],
|
|
29
29
|
version?: string,
|
|
30
30
|
) {
|
|
31
|
-
if (!
|
|
31
|
+
if (!o2) {
|
|
32
|
+
navigate(-1)
|
|
33
|
+
} else if (!hasDiff(o1, o2, keys, version)) {
|
|
32
34
|
navigate(-1)
|
|
33
35
|
} else {
|
|
34
36
|
confirm(resource.msg_confirm_back, () => navigate(-1))
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
export function buildFromUrl<
|
|
39
|
-
return buildParameters<
|
|
40
|
+
export function buildFromUrl<T extends Filter>(model?: T): T {
|
|
41
|
+
return buildParameters<T>(window.location.search, model)
|
|
40
42
|
}
|
|
43
|
+
|
|
41
44
|
export function buildParameters<T>(url: string, model?: T): T {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
const parsed: any = convertToObject<T>(queryString.parse(urlSearch), model)
|
|
49
|
-
return parsed
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.log(error)
|
|
52
|
-
throw error
|
|
45
|
+
var query = url
|
|
46
|
+
var index = url.indexOf("?")
|
|
47
|
+
|
|
48
|
+
if (index >= 0) {
|
|
49
|
+
query = url.substring(index + 1)
|
|
53
50
|
}
|
|
51
|
+
|
|
52
|
+
var parsed = queryString.parse(query, {
|
|
53
|
+
parseNumbers: true,
|
|
54
|
+
parseBooleans: true,
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
return convertToObject(parsed as any, model)
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
export function convertToObject<T>(input: any, model?: T): T {
|
|
60
|
+
export function convertToObject<T>(input: { [key: string]: any }, model?: T): T {
|
|
57
61
|
if (model) {
|
|
58
|
-
return
|
|
62
|
+
return mapToModel(input, model)
|
|
59
63
|
}
|
|
60
|
-
const output: any = {}
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
var output: any = {}
|
|
66
|
+
|
|
67
|
+
for (var key in input) {
|
|
68
|
+
if (!Object.prototype.hasOwnProperty.call(input, key)) {
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
var value = input[key]
|
|
73
|
+
var keys = key.split(".")
|
|
74
|
+
var current = output
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
for (var i = 0; i < keys.length; i++) {
|
|
77
|
+
var k = keys[i]
|
|
78
|
+
|
|
79
|
+
if (i === keys.length - 1) {
|
|
80
|
+
current[k] = parseValue(value)
|
|
81
|
+
} else {
|
|
82
|
+
if (!current[k]) {
|
|
83
|
+
current[k] = {}
|
|
75
84
|
}
|
|
85
|
+
current = current[k]
|
|
76
86
|
}
|
|
77
|
-
|
|
78
|
-
currentObj = currentObj[currentKey]
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
return output as T
|
|
83
91
|
}
|
|
84
92
|
|
|
85
|
-
function
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
for (
|
|
90
|
-
if (!Object.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
93
|
+
function mapToModel<T>(input: { [key: string]: any }, model: T): T {
|
|
94
|
+
var result: any = {}
|
|
95
|
+
var key: string
|
|
96
|
+
|
|
97
|
+
for (key in model as any) {
|
|
98
|
+
if (!Object.prototype.hasOwnProperty.call(model, key)) {
|
|
99
|
+
continue
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
var modelValue = (model as any)[key]
|
|
103
|
+
var inputValue = input[key]
|
|
104
|
+
|
|
105
|
+
if (inputValue === undefined) {
|
|
106
|
+
result[key] = modelValue
|
|
107
|
+
continue
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (modelValue instanceof Date) {
|
|
111
|
+
result[key] = new Date(inputValue)
|
|
112
|
+
} else if (typeof modelValue === "number") {
|
|
113
|
+
result[key] = Number(inputValue)
|
|
114
|
+
} else if (typeof modelValue === "boolean") {
|
|
115
|
+
result[key] = Boolean(inputValue)
|
|
116
|
+
} else if (typeof modelValue === "string") {
|
|
117
|
+
result[key] = String(inputValue)
|
|
118
|
+
} else if (Object.prototype.toString.call(modelValue) === "[object Array]") {
|
|
119
|
+
if (Object.prototype.toString.call(inputValue) === "[object Array]") {
|
|
120
|
+
result[key] = inputValue
|
|
121
|
+
} else {
|
|
122
|
+
result[key] = [inputValue]
|
|
113
123
|
}
|
|
124
|
+
} else if (typeof modelValue === "object" && modelValue !== null) {
|
|
125
|
+
result[key] = mapToModel(inputValue || {}, modelValue)
|
|
126
|
+
} else {
|
|
127
|
+
result[key] = inputValue
|
|
114
128
|
}
|
|
115
129
|
}
|
|
116
|
-
|
|
130
|
+
|
|
131
|
+
return result
|
|
117
132
|
}
|
|
118
133
|
|
|
119
134
|
function parseValue(value: any): any {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return parseFloat(value)
|
|
135
|
+
if (typeof value !== "string") {
|
|
136
|
+
return value
|
|
123
137
|
}
|
|
138
|
+
|
|
139
|
+
if (!isNaN(Number(value))) {
|
|
140
|
+
return Number(value)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (value === "true") {
|
|
144
|
+
return true
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (value === "false") {
|
|
148
|
+
return false
|
|
149
|
+
}
|
|
150
|
+
|
|
124
151
|
return value
|
|
125
152
|
}
|
package/src/search.ts
CHANGED
|
@@ -361,6 +361,18 @@ export function buildSortFilter<S extends Filter>(obj: S, sortable: Sortable): S
|
|
|
361
361
|
delete filter.fields
|
|
362
362
|
return filter
|
|
363
363
|
}
|
|
364
|
+
export function addParametersIntoUrlWithSort<F extends Filter>(
|
|
365
|
+
filter: F,
|
|
366
|
+
state: Sortable,
|
|
367
|
+
isFirstLoad?: boolean,
|
|
368
|
+
setFilter?: (v: React.SetStateAction<F>) => void,
|
|
369
|
+
) {
|
|
370
|
+
const urlFilter = buildSortFilter(filter, state)
|
|
371
|
+
addParametersIntoUrl(urlFilter, isFirstLoad)
|
|
372
|
+
if (setFilter) {
|
|
373
|
+
setFilter(filter)
|
|
374
|
+
}
|
|
375
|
+
}
|
|
364
376
|
export function handleToggle(target?: HTMLElement, off?: boolean): boolean {
|
|
365
377
|
const on = !off
|
|
366
378
|
if (target) {
|
|
@@ -379,10 +391,10 @@ export function getNumber(e: ChangeEvent<HTMLSelectElement | HTMLInputElement>):
|
|
|
379
391
|
}
|
|
380
392
|
|
|
381
393
|
export function setSortFilter<F extends Filter, T extends Sortable>(
|
|
382
|
-
state: T,
|
|
383
394
|
filter: F,
|
|
384
|
-
|
|
395
|
+
state: T,
|
|
385
396
|
setFilter?: (v: React.SetStateAction<F>) => void,
|
|
397
|
+
setState?: (v: React.SetStateAction<T>) => void,
|
|
386
398
|
search?: (first?: boolean) => void,
|
|
387
399
|
) {
|
|
388
400
|
setSort(state, filter.sort)
|
package/src/state.ts
CHANGED
|
@@ -39,7 +39,11 @@ export function updateNumber<T>(
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
export function formatAndUpdateState<T>(
|
|
42
|
-
e:
|
|
42
|
+
e:
|
|
43
|
+
| ChangeEvent<HTMLInputElement>
|
|
44
|
+
| ChangeEvent<HTMLSelectElement>
|
|
45
|
+
| ChangeEvent<HTMLTextAreaElement>
|
|
46
|
+
| ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,
|
|
43
47
|
o: T,
|
|
44
48
|
setObj: (v: React.SetStateAction<T>) => void,
|
|
45
49
|
formatStr?: (s?: string) => string,
|
|
@@ -48,7 +52,11 @@ export function formatAndUpdateState<T>(
|
|
|
48
52
|
updateState(e, o, setObj, callback, formatStr)
|
|
49
53
|
}
|
|
50
54
|
export function updateState<T>(
|
|
51
|
-
e:
|
|
55
|
+
e:
|
|
56
|
+
| ChangeEvent<HTMLInputElement>
|
|
57
|
+
| ChangeEvent<HTMLSelectElement>
|
|
58
|
+
| ChangeEvent<HTMLTextAreaElement>
|
|
59
|
+
| ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,
|
|
52
60
|
o: T,
|
|
53
61
|
setObj: (v: React.SetStateAction<T>) => void,
|
|
54
62
|
callback?: () => void,
|