react-hook-core 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/com.js +33 -11
- package/lib/core.js +81 -188
- package/lib/diff.js +28 -30
- package/lib/edit.js +54 -112
- package/lib/error.js +53 -0
- package/lib/formutil.js +58 -72
- package/lib/index.js +110 -95
- package/lib/input.js +31 -32
- package/lib/merge.js +26 -16
- package/lib/reflect.js +140 -147
- package/lib/route.js +45 -53
- package/lib/search.js +231 -471
- package/lib/state.js +159 -168
- package/lib/update.js +69 -64
- package/lib/useEdit.js +461 -348
- package/lib/useMessage.js +20 -20
- package/lib/useSearch.js +437 -246
- package/lib/util.js +74 -85
- package/package.json +1 -1
- package/src/com.ts +44 -30
- package/src/core.ts +125 -413
- package/src/diff.ts +54 -24
- package/src/edit.ts +44 -146
- package/src/error.ts +55 -0
- package/src/formutil.ts +51 -62
- package/src/index.ts +129 -114
- package/src/input.ts +44 -38
- package/src/merge.ts +16 -13
- package/src/reflect.ts +100 -101
- package/src/route.ts +40 -40
- package/src/search.ts +123 -308
- package/src/state.ts +135 -124
- package/src/update.ts +41 -41
- package/src/useEdit.ts +489 -319
- package/src/useMessage.ts +21 -21
- package/src/useSearch.ts +493 -277
- package/src/util.ts +67 -66
- package/lib/useView.js +0 -126
- package/src/useView.ts +0 -158
package/src/useEdit.ts
CHANGED
|
@@ -1,524 +1,694 @@
|
|
|
1
|
-
import {useEffect, useState} from
|
|
2
|
-
import {useNavigate, useParams} from
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { useEffect, useState } from "react"
|
|
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"
|
|
17
|
+
import { createModel as createModel2 } from "./edit"
|
|
18
|
+
import { message, messageByHttpStatus } from "./error"
|
|
19
|
+
import { focusFirstError, setReadOnly } from "./formutil"
|
|
20
|
+
import { DispatchWithCallback, useMergeState } from "./merge"
|
|
21
|
+
import { clone, makeDiff } from "./reflect"
|
|
22
|
+
import { localeOf } from "./state"
|
|
23
|
+
import { useUpdate } from "./update"
|
|
24
|
+
|
|
25
|
+
export function buildKeys(attributes: Attributes): string[] {
|
|
26
|
+
if (!attributes) {
|
|
27
|
+
return []
|
|
28
|
+
}
|
|
29
|
+
const ks = Object.keys(attributes)
|
|
30
|
+
const ps = []
|
|
31
|
+
for (const k of ks) {
|
|
32
|
+
const attr: Attribute = attributes[k]
|
|
33
|
+
if (attr.key === true) {
|
|
34
|
+
ps.push(k)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return ps
|
|
38
|
+
}
|
|
39
|
+
type Readonly<T> = {
|
|
40
|
+
readonly [P in keyof T]: T[P]
|
|
41
|
+
}
|
|
42
|
+
export function buildId<ID>(p: Readonly<Params<string>>, keys?: string[]): ID | null {
|
|
43
|
+
if (!keys || keys.length === 0 || keys.length === 1) {
|
|
44
|
+
if (keys && keys.length === 1) {
|
|
45
|
+
if (p[keys[0]]) {
|
|
46
|
+
return p[keys[0]] as any
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return p["id"] as any
|
|
50
|
+
}
|
|
51
|
+
const id: any = {}
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
let v = p[key]
|
|
54
|
+
if (!v) {
|
|
55
|
+
v = p[key]
|
|
56
|
+
if (!v) {
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
id[key] = v
|
|
61
|
+
}
|
|
62
|
+
return id
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface EditParameter {
|
|
66
|
+
resource: ResourceService
|
|
67
|
+
showMessage: (msg: string, option?: string) => void
|
|
68
|
+
showError: (m: string, callback?: () => void, header?: string) => void
|
|
69
|
+
confirm: (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void
|
|
70
|
+
ui?: UIService
|
|
71
|
+
getLocale?: (profile?: string) => Locale
|
|
72
|
+
loading?: LoadingService
|
|
73
|
+
// status?: EditStatusConfig;
|
|
74
|
+
}
|
|
75
|
+
export interface GenericService<T, ID, R> {
|
|
76
|
+
metadata?(): Attributes | undefined
|
|
77
|
+
keys?(): string[]
|
|
78
|
+
load(id: ID, ctx?: any): Promise<T | null>
|
|
79
|
+
patch?(obj: Partial<T>, ctx?: any): Promise<R>
|
|
80
|
+
create(obj: T, ctx?: any): Promise<R>
|
|
81
|
+
update(obj: T, ctx?: any): Promise<R>
|
|
82
|
+
delete?(id: ID, ctx?: any): Promise<number>
|
|
83
|
+
}
|
|
84
|
+
export interface MetaModel {
|
|
85
|
+
keys?: string[]
|
|
86
|
+
version?: string
|
|
87
|
+
}
|
|
88
|
+
export function build(attributes: Attributes, name?: string): MetaModel | undefined {
|
|
89
|
+
if (!attributes) {
|
|
90
|
+
return undefined
|
|
91
|
+
}
|
|
92
|
+
if (resources.cache && name && name.length > 0) {
|
|
93
|
+
let meta: MetaModel = resources._cache[name]
|
|
94
|
+
if (!meta) {
|
|
95
|
+
meta = buildMetaModel(attributes)
|
|
96
|
+
resources._cache[name] = meta
|
|
97
|
+
}
|
|
98
|
+
return meta
|
|
99
|
+
} else {
|
|
100
|
+
return buildMetaModel(attributes)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function buildMetaModel(attributes: Attributes): MetaModel {
|
|
105
|
+
if (!attributes) {
|
|
106
|
+
return {}
|
|
107
|
+
}
|
|
108
|
+
/*
|
|
109
|
+
if (model && !model.source) {
|
|
110
|
+
model.source = model.name;
|
|
111
|
+
}
|
|
112
|
+
*/
|
|
113
|
+
const md: MetaModel = {}
|
|
114
|
+
const pks: string[] = new Array<string>()
|
|
115
|
+
const keys: string[] = Object.keys(attributes)
|
|
116
|
+
for (const key of keys) {
|
|
117
|
+
const attr: Attribute = attributes[key]
|
|
118
|
+
if (attr) {
|
|
119
|
+
if (attr.version) {
|
|
120
|
+
md.version = key
|
|
121
|
+
}
|
|
122
|
+
if (attr.key === true) {
|
|
123
|
+
pks.push(key)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
md.keys = pks
|
|
128
|
+
return md
|
|
129
|
+
}
|
|
130
|
+
export function handleVersion<T>(obj: T, version?: string): void {
|
|
131
|
+
if (obj && version && version.length > 0) {
|
|
132
|
+
const v = (obj as any)[version]
|
|
133
|
+
if (v && typeof v === "number") {
|
|
134
|
+
;(obj as any)[version] = v + 1
|
|
135
|
+
} else {
|
|
136
|
+
;(obj as any)[version] = 1
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
10
140
|
|
|
11
141
|
export interface BaseEditComponentParam<T, ID> {
|
|
12
142
|
// status?: EditStatusConfig;
|
|
13
|
-
backOnSuccess?: boolean
|
|
14
|
-
name?: string
|
|
15
|
-
metadata?: Attributes
|
|
16
|
-
keys?: string[]
|
|
17
|
-
version?: string
|
|
18
|
-
setBack?: boolean
|
|
19
|
-
patchable?: boolean
|
|
143
|
+
backOnSuccess?: boolean
|
|
144
|
+
name?: string
|
|
145
|
+
metadata?: Attributes
|
|
146
|
+
keys?: string[]
|
|
147
|
+
version?: string
|
|
148
|
+
setBack?: boolean
|
|
149
|
+
patchable?: boolean
|
|
20
150
|
|
|
21
151
|
// addable?: boolean;
|
|
22
|
-
readOnly?: boolean
|
|
152
|
+
readOnly?: boolean
|
|
23
153
|
// deletable?: boolean;
|
|
24
154
|
|
|
25
|
-
createSuccessMsg?: string
|
|
26
|
-
updateSuccessMsg?: string
|
|
155
|
+
createSuccessMsg?: string
|
|
156
|
+
updateSuccessMsg?: string
|
|
27
157
|
|
|
28
|
-
handleNotFound?: (form?: HTMLFormElement) => void
|
|
29
|
-
getModelName?: (f?: HTMLFormElement) => string
|
|
30
|
-
getModel?: () => T
|
|
31
|
-
showModel?: (m: T) => void
|
|
32
|
-
createModel?: () => T
|
|
33
|
-
onSave?: (isBack?: boolean) => void
|
|
34
|
-
validate?: (obj: T, callback: (obj2?: T) => void) => void
|
|
35
|
-
succeed?: (msg: string, origin: T, version?: string, isBack?: boolean, model?: T) => void
|
|
36
|
-
fail?: (result: ErrorMessage[]) => void
|
|
37
|
-
postSave?: (res: number|T|ErrorMessage[], origin: T, version?: string, isPatch?: boolean, backOnSave?: boolean) => void
|
|
38
|
-
handleError?: (error: any) => void
|
|
39
|
-
handleDuplicateKey?: (result?: T) => void
|
|
40
|
-
load?: (i: ID|null, callback?: (m: T, showM: (m2: T) => void) => void) => void
|
|
41
|
-
doSave?: (obj: T, diff?: T, version?: string, isBack?: boolean) => void
|
|
158
|
+
handleNotFound?: (form?: HTMLFormElement) => void
|
|
159
|
+
getModelName?: (f?: HTMLFormElement) => string
|
|
160
|
+
getModel?: () => T
|
|
161
|
+
showModel?: (m: T) => void
|
|
162
|
+
createModel?: () => T
|
|
163
|
+
onSave?: (isBack?: boolean) => void
|
|
164
|
+
validate?: (obj: T, callback: (obj2?: T) => void) => void
|
|
165
|
+
succeed?: (msg: string, origin: T, version?: string, isBack?: boolean, model?: T) => void
|
|
166
|
+
fail?: (result: ErrorMessage[]) => void
|
|
167
|
+
postSave?: (res: number | T | ErrorMessage[], origin: T, version?: string, isPatch?: boolean, backOnSave?: boolean) => void
|
|
168
|
+
handleError?: (error: any) => void
|
|
169
|
+
handleDuplicateKey?: (result?: T) => void
|
|
170
|
+
load?: (i: ID | null, callback?: (m: T, showM: (m2: T) => void) => void) => void
|
|
171
|
+
doSave?: (obj: T, diff?: T, version?: string, isBack?: boolean) => void
|
|
42
172
|
// prepareCustomData?: (data: any) => void; // need to review
|
|
43
173
|
}
|
|
44
174
|
export interface HookBaseEditParameter<T, ID, S> extends BaseEditComponentParam<T, ID> {
|
|
45
|
-
refForm: any
|
|
46
|
-
initialState: S
|
|
47
|
-
service: GenericService<T, ID, number|T|ErrorMessage[]
|
|
48
|
-
resource: ResourceService
|
|
49
|
-
showMessage: (msg: string) => void
|
|
50
|
-
showError: (m: string, callback?: () => void, header?: string) => void
|
|
51
|
-
getLocale?: () => Locale
|
|
52
|
-
confirm: (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void
|
|
53
|
-
ui?: UIService
|
|
54
|
-
loading?: LoadingService
|
|
175
|
+
refForm: any
|
|
176
|
+
initialState: S
|
|
177
|
+
service: GenericService<T, ID, number | T | ErrorMessage[]>
|
|
178
|
+
resource: ResourceService
|
|
179
|
+
showMessage: (msg: string) => void
|
|
180
|
+
showError: (m: string, callback?: () => void, header?: string) => void
|
|
181
|
+
getLocale?: () => Locale
|
|
182
|
+
confirm: (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void
|
|
183
|
+
ui?: UIService
|
|
184
|
+
loading?: LoadingService
|
|
55
185
|
}
|
|
56
186
|
export interface EditComponentParam<T, ID, S> extends BaseEditComponentParam<T, ID> {
|
|
57
|
-
initialize?: (
|
|
58
|
-
|
|
187
|
+
initialize?: (
|
|
188
|
+
id: ID | null,
|
|
189
|
+
ld: (i: ID | null, cb?: (m: T, showF: (model: T) => void) => void) => void,
|
|
190
|
+
setState2: DispatchWithCallback<Partial<S>>,
|
|
191
|
+
callback?: (m: T, showF: (model: T) => void) => void,
|
|
192
|
+
) => void
|
|
193
|
+
callback?: (m: T, showF: (model: T) => void) => void
|
|
59
194
|
}
|
|
60
195
|
export interface HookPropsEditParameter<T, ID, S, P> extends HookPropsBaseEditParameter<T, ID, S, P> {
|
|
61
|
-
initialize?: (
|
|
62
|
-
|
|
196
|
+
initialize?: (
|
|
197
|
+
id: ID | null,
|
|
198
|
+
ld: (i: ID | null, cb?: (m: T, showF: (model: T) => void) => void) => void,
|
|
199
|
+
setState2: DispatchWithCallback<Partial<S>>,
|
|
200
|
+
callback?: (m: T, showF: (model: T) => void) => void,
|
|
201
|
+
) => void
|
|
202
|
+
callback?: (m: T, showF: (model: T) => void) => void
|
|
63
203
|
}
|
|
64
204
|
export interface HookPropsBaseEditParameter<T, ID, S, P> extends HookBaseEditParameter<T, ID, S> {
|
|
65
|
-
props: P
|
|
205
|
+
props: P
|
|
66
206
|
// prepareCustomData?: (data: any) => void;
|
|
67
207
|
}
|
|
68
208
|
export const useEdit = <T, ID, S>(
|
|
69
209
|
refForm: any,
|
|
70
210
|
initialState: S,
|
|
71
|
-
service: GenericService<T, ID, number|T|ErrorMessage[]>,
|
|
211
|
+
service: GenericService<T, ID, number | T | ErrorMessage[]>,
|
|
72
212
|
|
|
73
213
|
p2: EditParameter,
|
|
74
|
-
p?: EditComponentParam<T, ID, S
|
|
75
|
-
|
|
76
|
-
const params = useParams()
|
|
77
|
-
const baseProps = useCoreEdit(refForm, initialState, service, p2, p)
|
|
214
|
+
p?: EditComponentParam<T, ID, S>,
|
|
215
|
+
) => {
|
|
216
|
+
const params = useParams()
|
|
217
|
+
const baseProps = useCoreEdit(refForm, initialState, service, p2, p)
|
|
78
218
|
useEffect(() => {
|
|
79
219
|
if (refForm) {
|
|
80
|
-
const registerEvents =
|
|
81
|
-
initForm(baseProps.refForm.current, registerEvents)
|
|
220
|
+
const registerEvents = p2.ui ? p2.ui.registerEvents : undefined
|
|
221
|
+
initForm(baseProps.refForm.current, registerEvents)
|
|
82
222
|
}
|
|
83
|
-
const n = baseProps.getModelName(refForm.current)
|
|
84
|
-
const obj: any = {}
|
|
85
|
-
obj[n] = baseProps.createModel()
|
|
86
|
-
baseProps.setState(obj)
|
|
87
|
-
let keys: string[]|undefined
|
|
223
|
+
const n = baseProps.getModelName(refForm.current)
|
|
224
|
+
const obj: any = {}
|
|
225
|
+
obj[n] = baseProps.createModel()
|
|
226
|
+
baseProps.setState(obj)
|
|
227
|
+
let keys: string[] | undefined
|
|
88
228
|
if (p && !p.keys && service && service.metadata) {
|
|
89
|
-
const metadata =
|
|
229
|
+
const metadata = p.metadata ? p.metadata : service.metadata()
|
|
90
230
|
if (metadata) {
|
|
91
|
-
const meta = build(metadata)
|
|
92
|
-
keys =
|
|
93
|
-
const version =
|
|
94
|
-
p.keys = keys
|
|
95
|
-
p.version = version
|
|
231
|
+
const meta = build(metadata)
|
|
232
|
+
keys = p.keys ? p.keys : meta ? meta.keys : undefined
|
|
233
|
+
const version = p.version ? p.version : meta ? meta.version : undefined
|
|
234
|
+
p.keys = keys
|
|
235
|
+
p.version = version
|
|
96
236
|
}
|
|
97
237
|
}
|
|
98
|
-
const id = buildId<ID>(params, keys)
|
|
238
|
+
const id = buildId<ID>(params, keys)
|
|
99
239
|
if (p && p.initialize) {
|
|
100
|
-
p.initialize(id, baseProps.load, baseProps.setState, p.callback)
|
|
240
|
+
p.initialize(id, baseProps.load, baseProps.setState, p.callback)
|
|
101
241
|
} else {
|
|
102
242
|
try {
|
|
103
|
-
baseProps.load(id, p ? p.callback : undefined)
|
|
243
|
+
baseProps.load(id, p ? p.callback : undefined)
|
|
104
244
|
} catch (error) {
|
|
105
|
-
p2.showError(error as string)
|
|
106
|
-
hideLoading(p2.loading)
|
|
245
|
+
p2.showError(error as string)
|
|
246
|
+
hideLoading(p2.loading)
|
|
107
247
|
}
|
|
108
248
|
}
|
|
109
|
-
|
|
110
|
-
}, [])
|
|
111
|
-
return {...baseProps}
|
|
112
|
-
}
|
|
249
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
250
|
+
}, [])
|
|
251
|
+
return { ...baseProps }
|
|
252
|
+
}
|
|
113
253
|
export const useEditProps = <T, ID, S, P>(
|
|
114
254
|
props: P,
|
|
115
255
|
refForm: any,
|
|
116
256
|
initialState: S,
|
|
117
|
-
service: GenericService<T, ID, number|T|ErrorMessage[]>,
|
|
257
|
+
service: GenericService<T, ID, number | T | ErrorMessage[]>,
|
|
118
258
|
p2: EditParameter,
|
|
119
|
-
p?: EditComponentParam<T, ID, S
|
|
120
|
-
|
|
121
|
-
const params = useParams()
|
|
122
|
-
const baseProps = useCoreEdit<T, ID, S, P>(refForm, initialState, service, p2, p, props)
|
|
259
|
+
p?: EditComponentParam<T, ID, S>,
|
|
260
|
+
) => {
|
|
261
|
+
const params = useParams()
|
|
262
|
+
const baseProps = useCoreEdit<T, ID, S, P>(refForm, initialState, service, p2, p, props)
|
|
123
263
|
useEffect(() => {
|
|
124
264
|
if (refForm) {
|
|
125
|
-
const registerEvents =
|
|
126
|
-
initForm(baseProps.refForm.current, registerEvents)
|
|
265
|
+
const registerEvents = p2.ui ? p2.ui.registerEvents : undefined
|
|
266
|
+
initForm(baseProps.refForm.current, registerEvents)
|
|
127
267
|
}
|
|
128
|
-
const n = baseProps.getModelName(refForm.current)
|
|
129
|
-
const obj: any = {}
|
|
130
|
-
obj[n] = baseProps.createModel()
|
|
131
|
-
baseProps.setState(obj)
|
|
132
|
-
let keys: string[]|undefined
|
|
268
|
+
const n = baseProps.getModelName(refForm.current)
|
|
269
|
+
const obj: any = {}
|
|
270
|
+
obj[n] = baseProps.createModel()
|
|
271
|
+
baseProps.setState(obj)
|
|
272
|
+
let keys: string[] | undefined
|
|
133
273
|
if (p && !p.keys && service && service.metadata) {
|
|
134
|
-
const metadata =
|
|
274
|
+
const metadata = p.metadata ? p.metadata : service.metadata()
|
|
135
275
|
if (metadata) {
|
|
136
|
-
const meta = build(metadata)
|
|
137
|
-
keys =
|
|
138
|
-
const version =
|
|
139
|
-
p.keys = keys
|
|
140
|
-
p.version = version
|
|
276
|
+
const meta = build(metadata)
|
|
277
|
+
keys = p.keys ? p.keys : meta ? meta.keys : undefined
|
|
278
|
+
const version = p.version ? p.version : meta ? meta.version : undefined
|
|
279
|
+
p.keys = keys
|
|
280
|
+
p.version = version
|
|
141
281
|
}
|
|
142
282
|
}
|
|
143
|
-
const id = buildId<ID>(params, keys)
|
|
283
|
+
const id = buildId<ID>(params, keys)
|
|
144
284
|
if (p && p.initialize) {
|
|
145
|
-
p.initialize(id, baseProps.load, baseProps.setState, p.callback)
|
|
285
|
+
p.initialize(id, baseProps.load, baseProps.setState, p.callback)
|
|
146
286
|
} else {
|
|
147
|
-
baseProps.load(id, p ? p.callback : undefined)
|
|
287
|
+
baseProps.load(id, p ? p.callback : undefined)
|
|
148
288
|
}
|
|
149
|
-
|
|
150
|
-
}, [])
|
|
151
|
-
return {...baseProps}
|
|
152
|
-
}
|
|
289
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
290
|
+
}, [])
|
|
291
|
+
return { ...baseProps }
|
|
292
|
+
}
|
|
153
293
|
export const useEditOneProps = <T, ID, S, P>(p: HookPropsEditParameter<T, ID, S, P>) => {
|
|
154
|
-
return useEditProps(p.props, p.refForm, p.initialState, p.service, p, p)
|
|
155
|
-
}
|
|
294
|
+
return useEditProps(p.props, p.refForm, p.initialState, p.service, p, p)
|
|
295
|
+
}
|
|
156
296
|
export const useEditOne = <T, ID, S>(p: HookBaseEditParameter<T, ID, S>) => {
|
|
157
|
-
return useEdit(p.refForm, p.initialState, p.service, p, p)
|
|
158
|
-
}
|
|
297
|
+
return useEdit(p.refForm, p.initialState, p.service, p, p)
|
|
298
|
+
}
|
|
159
299
|
export const useCoreEdit = <T, ID, S, P>(
|
|
160
300
|
refForm: any,
|
|
161
301
|
initialState: S,
|
|
162
|
-
service: GenericService<T, ID, number|T|ErrorMessage[]>,
|
|
302
|
+
service: GenericService<T, ID, number | T | ErrorMessage[]>,
|
|
163
303
|
p1: EditParameter,
|
|
164
304
|
p?: BaseEditComponentParam<T, ID>,
|
|
165
|
-
props?: P
|
|
166
|
-
|
|
167
|
-
|
|
305
|
+
props?: P,
|
|
306
|
+
) => {
|
|
307
|
+
/*
|
|
168
308
|
const {
|
|
169
309
|
backOnSuccess = true,
|
|
170
310
|
patchable = true,
|
|
171
311
|
addable = true
|
|
172
312
|
} = p; */
|
|
173
|
-
const navigate = useNavigate()
|
|
313
|
+
const navigate = useNavigate()
|
|
174
314
|
// const addable = (p && p.patchable !== false ? true : undefined);
|
|
175
315
|
|
|
176
|
-
const [running, setRunning] = useState<boolean>()
|
|
316
|
+
const [running, setRunning] = useState<boolean>()
|
|
177
317
|
|
|
178
|
-
const getModelName = (f?: HTMLFormElement|null): string => {
|
|
318
|
+
const getModelName = (f?: HTMLFormElement | null): string => {
|
|
179
319
|
if (p && p.name && p.name.length > 0) {
|
|
180
|
-
return p.name
|
|
320
|
+
return p.name
|
|
181
321
|
}
|
|
182
|
-
return getModelName2(f)
|
|
183
|
-
}
|
|
184
|
-
const baseProps = useUpdate<S>(initialState, getModelName, p1.getLocale)
|
|
322
|
+
return getModelName2(f)
|
|
323
|
+
}
|
|
324
|
+
const baseProps = useUpdate<S>(initialState, getModelName, p1.getLocale)
|
|
185
325
|
|
|
186
|
-
const { state, setState } = baseProps
|
|
326
|
+
const { state, setState } = baseProps
|
|
187
327
|
const [flag, setFlag] = useMergeState({
|
|
188
328
|
newMode: false,
|
|
189
329
|
setBack: false,
|
|
190
330
|
// addable,
|
|
191
331
|
readOnly: p ? p.readOnly : undefined,
|
|
192
|
-
originalModel: undefined
|
|
193
|
-
})
|
|
332
|
+
originalModel: undefined,
|
|
333
|
+
})
|
|
194
334
|
|
|
195
335
|
const showModel = (model: T) => {
|
|
196
|
-
const n = getModelName(refForm.current)
|
|
197
|
-
const objSet: any = {}
|
|
198
|
-
objSet[n] = model
|
|
199
|
-
setState(objSet)
|
|
336
|
+
const n = getModelName(refForm.current)
|
|
337
|
+
const objSet: any = {}
|
|
338
|
+
objSet[n] = model
|
|
339
|
+
setState(objSet)
|
|
200
340
|
if (p && p.readOnly) {
|
|
201
|
-
const f = refForm.current
|
|
202
|
-
setReadOnly(f)
|
|
341
|
+
const f = refForm.current
|
|
342
|
+
setReadOnly(f)
|
|
203
343
|
}
|
|
204
|
-
}
|
|
344
|
+
}
|
|
205
345
|
|
|
206
346
|
const resetState = (newMode: boolean, model: T, originalModel?: T) => {
|
|
207
|
-
setFlag({ newMode, originalModel } as any)
|
|
208
|
-
showModel(model)
|
|
209
|
-
}
|
|
347
|
+
setFlag({ newMode, originalModel } as any)
|
|
348
|
+
showModel(model)
|
|
349
|
+
}
|
|
210
350
|
|
|
211
351
|
const _handleNotFound = (form?: any): void => {
|
|
212
|
-
const msg = message(p1.resource.value,
|
|
352
|
+
const msg = message(p1.resource.value, "error_404", "error")
|
|
213
353
|
if (form) {
|
|
214
|
-
setReadOnly(form)
|
|
354
|
+
setReadOnly(form)
|
|
215
355
|
}
|
|
216
|
-
p1.showError(msg.message, () => window.history.back, msg.title)
|
|
217
|
-
}
|
|
218
|
-
const handleNotFound =
|
|
356
|
+
p1.showError(msg.message, () => window.history.back, msg.title)
|
|
357
|
+
}
|
|
358
|
+
const handleNotFound = p && p.handleNotFound ? p.handleNotFound : _handleNotFound
|
|
219
359
|
|
|
220
360
|
const _getModel = () => {
|
|
221
|
-
const n = getModelName(refForm.current)
|
|
361
|
+
const n = getModelName(refForm.current)
|
|
222
362
|
if (props) {
|
|
223
|
-
return (props as any)[n] || (state as any)[n]
|
|
363
|
+
return (props as any)[n] || (state as any)[n]
|
|
224
364
|
} else {
|
|
225
|
-
return (state as any)[n]
|
|
365
|
+
return (state as any)[n]
|
|
226
366
|
}
|
|
227
|
-
}
|
|
228
|
-
const getModel =
|
|
367
|
+
}
|
|
368
|
+
const getModel = p && p.getModel ? p.getModel : _getModel
|
|
229
369
|
|
|
230
370
|
const back = (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
|
231
371
|
if (event) {
|
|
232
|
-
event.preventDefault()
|
|
372
|
+
event.preventDefault()
|
|
233
373
|
}
|
|
234
374
|
if (flag.newMode === true) {
|
|
235
|
-
navigate(-1)
|
|
375
|
+
navigate(-1)
|
|
236
376
|
} else {
|
|
237
|
-
const obj = getModel()
|
|
238
|
-
const diffObj = makeDiff(flag.originalModel, obj)
|
|
239
|
-
const objKeys = Object.keys(diffObj)
|
|
377
|
+
const obj = getModel()
|
|
378
|
+
const diffObj = makeDiff(flag.originalModel, obj)
|
|
379
|
+
const objKeys = Object.keys(diffObj)
|
|
240
380
|
if (objKeys.length === 0) {
|
|
241
|
-
navigate(-1)
|
|
381
|
+
navigate(-1)
|
|
242
382
|
} else {
|
|
243
|
-
const msg = message(p1.resource.value,
|
|
244
|
-
p1.confirm(
|
|
245
|
-
|
|
246
|
-
|
|
383
|
+
const msg = message(p1.resource.value, "msg_confirm_back", "confirm", "yes", "no")
|
|
384
|
+
p1.confirm(
|
|
385
|
+
msg.message,
|
|
386
|
+
() => {
|
|
387
|
+
navigate(-1)
|
|
388
|
+
},
|
|
389
|
+
msg.title,
|
|
390
|
+
msg.no,
|
|
391
|
+
msg.yes,
|
|
392
|
+
)
|
|
247
393
|
}
|
|
248
394
|
}
|
|
249
|
-
}
|
|
395
|
+
}
|
|
250
396
|
const _createModel = (): T => {
|
|
251
|
-
const metadata =
|
|
397
|
+
const metadata = p && p.metadata ? p.metadata : service.metadata ? service.metadata() : undefined
|
|
252
398
|
if (metadata) {
|
|
253
|
-
const obj = createModel2<T>(metadata)
|
|
254
|
-
return obj
|
|
399
|
+
const obj = createModel2<T>(metadata)
|
|
400
|
+
return obj
|
|
255
401
|
} else {
|
|
256
|
-
const obj: any = {}
|
|
257
|
-
return obj
|
|
402
|
+
const obj: any = {}
|
|
403
|
+
return obj
|
|
258
404
|
}
|
|
259
|
-
}
|
|
260
|
-
const createModel =
|
|
405
|
+
}
|
|
406
|
+
const createModel = p && p.createModel ? p.createModel : _createModel
|
|
261
407
|
|
|
262
408
|
const create = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
|
263
|
-
event.preventDefault()
|
|
264
|
-
const obj = createModel()
|
|
265
|
-
resetState(true, obj, undefined)
|
|
266
|
-
const u = p1.ui
|
|
409
|
+
event.preventDefault()
|
|
410
|
+
const obj = createModel()
|
|
411
|
+
resetState(true, obj, undefined)
|
|
412
|
+
const u = p1.ui
|
|
267
413
|
if (u) {
|
|
268
414
|
setTimeout(() => {
|
|
269
|
-
u.removeFormError(refForm.current)
|
|
270
|
-
}, 100)
|
|
415
|
+
u.removeFormError(refForm.current)
|
|
416
|
+
}, 100)
|
|
271
417
|
}
|
|
272
|
-
}
|
|
418
|
+
}
|
|
273
419
|
|
|
274
420
|
const _onSave = (isBack?: boolean) => {
|
|
275
421
|
if (p && p.readOnly) {
|
|
276
422
|
if (flag.newMode === true) {
|
|
277
|
-
const m = message(p1.resource.value,
|
|
278
|
-
p1.showError(m.message, undefined, m.title)
|
|
423
|
+
const m = message(p1.resource.value, "error_permission_add", "error_permission")
|
|
424
|
+
p1.showError(m.message, undefined, m.title)
|
|
279
425
|
} else {
|
|
280
|
-
const msg = message(p1.resource.value,
|
|
281
|
-
p1.showError(msg.message, undefined, msg.title)
|
|
426
|
+
const msg = message(p1.resource.value, "error_permission_edit", "error_permission")
|
|
427
|
+
p1.showError(msg.message, undefined, msg.title)
|
|
282
428
|
}
|
|
283
429
|
} else {
|
|
284
|
-
if (running === true) {
|
|
285
|
-
return
|
|
430
|
+
if (running === true) {
|
|
431
|
+
return
|
|
286
432
|
}
|
|
287
|
-
const obj = getModel()
|
|
288
|
-
const metadata =
|
|
289
|
-
let keys: string[]|undefined
|
|
290
|
-
let version: string|undefined
|
|
433
|
+
const obj = getModel()
|
|
434
|
+
const metadata = p && p.metadata ? p.metadata : service.metadata ? service.metadata() : undefined
|
|
435
|
+
let keys: string[] | undefined
|
|
436
|
+
let version: string | undefined
|
|
291
437
|
if (p && metadata && (!p.keys || !p.version)) {
|
|
292
|
-
const meta = build(metadata)
|
|
293
|
-
keys =
|
|
294
|
-
version =
|
|
438
|
+
const meta = build(metadata)
|
|
439
|
+
keys = p.keys ? p.keys : meta ? meta.keys : undefined
|
|
440
|
+
version = p.version ? p.version : meta ? meta.version : undefined
|
|
295
441
|
}
|
|
296
442
|
if (flag.newMode) {
|
|
297
443
|
validate(obj, () => {
|
|
298
|
-
const msg = message(p1.resource.value,
|
|
299
|
-
p1.confirm(
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
444
|
+
const msg = message(p1.resource.value, "msg_confirm_save", "confirm", "yes", "no")
|
|
445
|
+
p1.confirm(
|
|
446
|
+
msg.message,
|
|
447
|
+
() => {
|
|
448
|
+
doSave(obj, undefined, version, isBack)
|
|
449
|
+
},
|
|
450
|
+
msg.title,
|
|
451
|
+
msg.no,
|
|
452
|
+
msg.yes,
|
|
453
|
+
)
|
|
454
|
+
})
|
|
303
455
|
} else {
|
|
304
|
-
const diffObj = makeDiff(flag.originalModel, obj, keys, version)
|
|
305
|
-
const objKeys = Object.keys(diffObj)
|
|
456
|
+
const diffObj = makeDiff(flag.originalModel, obj, keys, version)
|
|
457
|
+
const objKeys = Object.keys(diffObj)
|
|
306
458
|
if (objKeys.length === 0) {
|
|
307
|
-
p1.showMessage(p1.resource.value(
|
|
459
|
+
p1.showMessage(p1.resource.value("msg_no_change"))
|
|
308
460
|
} else {
|
|
309
461
|
validate(obj, () => {
|
|
310
|
-
const msg = message(p1.resource.value,
|
|
311
|
-
p1.confirm(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
462
|
+
const msg = message(p1.resource.value, "msg_confirm_save", "confirm", "yes", "no")
|
|
463
|
+
p1.confirm(
|
|
464
|
+
msg.message,
|
|
465
|
+
() => {
|
|
466
|
+
doSave(obj, diffObj as any, version, isBack)
|
|
467
|
+
},
|
|
468
|
+
msg.title,
|
|
469
|
+
msg.no,
|
|
470
|
+
msg.yes,
|
|
471
|
+
)
|
|
472
|
+
})
|
|
315
473
|
}
|
|
316
474
|
}
|
|
317
475
|
}
|
|
318
|
-
}
|
|
319
|
-
const onSave =
|
|
476
|
+
}
|
|
477
|
+
const onSave = p && p.onSave ? p.onSave : _onSave
|
|
320
478
|
|
|
321
479
|
const save = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
|
322
|
-
event.preventDefault()
|
|
323
|
-
event.persist()
|
|
324
|
-
onSave()
|
|
325
|
-
}
|
|
480
|
+
event.preventDefault()
|
|
481
|
+
event.persist()
|
|
482
|
+
onSave()
|
|
483
|
+
}
|
|
326
484
|
|
|
327
485
|
const _validate = (obj: T, callback: (obj2?: T) => void) => {
|
|
328
486
|
if (p1.ui) {
|
|
329
|
-
const valid = p1.ui.validateForm(refForm.current, localeOf(undefined, p1.getLocale))
|
|
487
|
+
const valid = p1.ui.validateForm(refForm.current, localeOf(undefined, p1.getLocale))
|
|
330
488
|
if (valid) {
|
|
331
|
-
callback(obj)
|
|
489
|
+
callback(obj)
|
|
332
490
|
}
|
|
333
491
|
} else {
|
|
334
|
-
callback(obj)
|
|
492
|
+
callback(obj)
|
|
335
493
|
}
|
|
336
|
-
}
|
|
337
|
-
const validate =
|
|
494
|
+
}
|
|
495
|
+
const validate = p && p.validate ? p.validate : _validate
|
|
338
496
|
|
|
339
497
|
const _succeed = (msg: string, origin: T, version?: string, isBack?: boolean, model?: T) => {
|
|
340
498
|
if (model) {
|
|
341
|
-
setFlag({ newMode: false })
|
|
499
|
+
setFlag({ newMode: false })
|
|
342
500
|
if (model && flag.setBack === true) {
|
|
343
|
-
resetState(false, model, clone(model))
|
|
501
|
+
resetState(false, model, clone(model))
|
|
344
502
|
} else {
|
|
345
|
-
handleVersion(origin, version)
|
|
503
|
+
handleVersion(origin, version)
|
|
346
504
|
}
|
|
347
505
|
} else {
|
|
348
|
-
handleVersion(origin, version)
|
|
506
|
+
handleVersion(origin, version)
|
|
349
507
|
}
|
|
350
|
-
p1.showMessage(msg)
|
|
508
|
+
p1.showMessage(msg)
|
|
351
509
|
if (isBack) {
|
|
352
|
-
back(undefined)
|
|
510
|
+
back(undefined)
|
|
353
511
|
}
|
|
354
|
-
}
|
|
355
|
-
const succeed =
|
|
512
|
+
}
|
|
513
|
+
const succeed = p && p.succeed ? p.succeed : _succeed
|
|
356
514
|
|
|
357
515
|
const _fail = (result: ErrorMessage[]) => {
|
|
358
|
-
const f = refForm.current
|
|
359
|
-
const u = p1.ui
|
|
516
|
+
const f = refForm.current
|
|
517
|
+
const u = p1.ui
|
|
360
518
|
if (u && f) {
|
|
361
|
-
const unmappedErrors = u.showFormError(f, result)
|
|
362
|
-
focusFirstError(f)
|
|
519
|
+
const unmappedErrors = u.showFormError(f, result)
|
|
520
|
+
focusFirstError(f)
|
|
363
521
|
if (unmappedErrors && unmappedErrors.length > 0) {
|
|
364
|
-
const t = p1.resource.value(
|
|
522
|
+
const t = p1.resource.value("error")
|
|
365
523
|
if (p1.ui && p1.ui.buildErrorMessage) {
|
|
366
|
-
const msg = p1.ui.buildErrorMessage(unmappedErrors)
|
|
367
|
-
p1.showError(msg, undefined, t)
|
|
524
|
+
const msg = p1.ui.buildErrorMessage(unmappedErrors)
|
|
525
|
+
p1.showError(msg, undefined, t)
|
|
368
526
|
} else {
|
|
369
|
-
p1.showError(unmappedErrors[0].field +
|
|
527
|
+
p1.showError(unmappedErrors[0].field + " " + unmappedErrors[0].code + " " + unmappedErrors[0].message, undefined, t)
|
|
370
528
|
}
|
|
371
529
|
}
|
|
372
530
|
} else {
|
|
373
|
-
const t = p1.resource.value(
|
|
531
|
+
const t = p1.resource.value("error")
|
|
374
532
|
if (result.length > 0) {
|
|
375
|
-
p1.showError(result[0].field +
|
|
533
|
+
p1.showError(result[0].field + " " + result[0].code + " " + result[0].message, undefined, t)
|
|
376
534
|
} else {
|
|
377
|
-
p1.showError(t, undefined, t)
|
|
535
|
+
p1.showError(t, undefined, t)
|
|
378
536
|
}
|
|
379
537
|
}
|
|
380
|
-
}
|
|
381
|
-
const fail =
|
|
538
|
+
}
|
|
539
|
+
const fail = p && p.fail ? p.fail : _fail
|
|
382
540
|
|
|
383
541
|
const _handleError = function (err: any) {
|
|
384
542
|
if (err) {
|
|
385
|
-
setRunning(false)
|
|
386
|
-
hideLoading(p1.loading)
|
|
387
|
-
const errHeader = p1.resource.value(
|
|
388
|
-
const errMsg = p1.resource.value(
|
|
389
|
-
const data =
|
|
543
|
+
setRunning(false)
|
|
544
|
+
hideLoading(p1.loading)
|
|
545
|
+
const errHeader = p1.resource.value("error")
|
|
546
|
+
const errMsg = p1.resource.value("error_internal")
|
|
547
|
+
const data = err && err.response ? err.response : err
|
|
390
548
|
if (data.status === 400) {
|
|
391
|
-
const errMsg = p1.resource.value(
|
|
392
|
-
p1.showError(errMsg, undefined, errHeader)
|
|
393
|
-
} else{
|
|
394
|
-
p1.showError(errMsg, undefined, errHeader)
|
|
549
|
+
const errMsg = p1.resource.value("error_400")
|
|
550
|
+
p1.showError(errMsg, undefined, errHeader)
|
|
551
|
+
} else {
|
|
552
|
+
p1.showError(errMsg, undefined, errHeader)
|
|
395
553
|
}
|
|
396
554
|
}
|
|
397
|
-
}
|
|
398
|
-
const handleError =
|
|
555
|
+
}
|
|
556
|
+
const handleError = p && p.handleError ? p.handleError : _handleError
|
|
399
557
|
|
|
400
|
-
const _postSave = (r: number | T|ErrorMessage[], origin: T, version?: string, isPatch?: boolean, backOnSave?: boolean) => {
|
|
401
|
-
setRunning(false)
|
|
402
|
-
hideLoading(p1.loading)
|
|
403
|
-
const x: any = r
|
|
404
|
-
const successMsg = p1.resource.value(
|
|
405
|
-
const newMod = flag.newMode
|
|
558
|
+
const _postSave = (r: number | T | ErrorMessage[], origin: T, version?: string, isPatch?: boolean, backOnSave?: boolean) => {
|
|
559
|
+
setRunning(false)
|
|
560
|
+
hideLoading(p1.loading)
|
|
561
|
+
const x: any = r
|
|
562
|
+
const successMsg = p1.resource.value("msg_save_success")
|
|
563
|
+
const newMod = flag.newMode
|
|
406
564
|
// const st = createEditStatus(p ? p.status : undefined);
|
|
407
565
|
if (Array.isArray(x)) {
|
|
408
|
-
fail(x)
|
|
566
|
+
fail(x)
|
|
409
567
|
} else if (!isNaN(x)) {
|
|
410
568
|
if (x > 0) {
|
|
411
|
-
succeed(successMsg, origin, version, backOnSave)
|
|
569
|
+
succeed(successMsg, origin, version, backOnSave)
|
|
412
570
|
} else {
|
|
413
571
|
if (newMod && x <= 0) {
|
|
414
|
-
handleDuplicateKey()
|
|
572
|
+
handleDuplicateKey()
|
|
415
573
|
} else if (!newMod && x === 0) {
|
|
416
|
-
handleNotFound()
|
|
574
|
+
handleNotFound()
|
|
417
575
|
} else {
|
|
418
|
-
const title = p1.resource.value(
|
|
419
|
-
const err = p1.resource.value(
|
|
420
|
-
p1.showError(err, undefined, title)
|
|
576
|
+
const title = p1.resource.value("error")
|
|
577
|
+
const err = p1.resource.value("error_version")
|
|
578
|
+
p1.showError(err, undefined, title)
|
|
421
579
|
}
|
|
422
580
|
}
|
|
423
581
|
} else {
|
|
424
|
-
const result = r as T
|
|
582
|
+
const result = r as T
|
|
425
583
|
if (isPatch) {
|
|
426
|
-
const keys = Object.keys(result as any)
|
|
427
|
-
const a: any = origin
|
|
584
|
+
const keys = Object.keys(result as any)
|
|
585
|
+
const a: any = origin
|
|
428
586
|
for (const k of keys) {
|
|
429
|
-
a[k] = (result as any)[k]
|
|
587
|
+
a[k] = (result as any)[k]
|
|
430
588
|
}
|
|
431
|
-
succeed(successMsg, a, undefined, backOnSave, a)
|
|
589
|
+
succeed(successMsg, a, undefined, backOnSave, a)
|
|
432
590
|
} else {
|
|
433
|
-
succeed(successMsg, origin, version, backOnSave, r as T)
|
|
591
|
+
succeed(successMsg, origin, version, backOnSave, r as T)
|
|
434
592
|
}
|
|
435
|
-
p1.showMessage(successMsg)
|
|
593
|
+
p1.showMessage(successMsg)
|
|
436
594
|
}
|
|
437
|
-
}
|
|
438
|
-
const postSave =
|
|
595
|
+
}
|
|
596
|
+
const postSave = p && p.postSave ? p.postSave : _postSave
|
|
439
597
|
|
|
440
598
|
const _handleDuplicateKey = (result?: T) => {
|
|
441
|
-
const msg = message(p1.resource.value,
|
|
442
|
-
p1.showError(msg.message, undefined, msg.title)
|
|
443
|
-
}
|
|
444
|
-
const handleDuplicateKey =
|
|
599
|
+
const msg = message(p1.resource.value, "error_duplicate_key", "error")
|
|
600
|
+
p1.showError(msg.message, undefined, msg.title)
|
|
601
|
+
}
|
|
602
|
+
const handleDuplicateKey = p && p.handleDuplicateKey ? p.handleDuplicateKey : _handleDuplicateKey
|
|
445
603
|
|
|
446
604
|
const _doSave = (obj: T, body?: Partial<T>, version?: string, isBack?: boolean) => {
|
|
447
|
-
setRunning(true)
|
|
448
|
-
showLoading(p1.loading)
|
|
449
|
-
const isBackO =
|
|
450
|
-
const patchable =
|
|
605
|
+
setRunning(true)
|
|
606
|
+
showLoading(p1.loading)
|
|
607
|
+
const isBackO = isBack != null && isBack !== undefined ? isBack : false
|
|
608
|
+
const patchable = p ? p.patchable : true
|
|
451
609
|
if (flag.newMode === false) {
|
|
452
610
|
if (service.patch && patchable !== false && body && Object.keys(body).length > 0) {
|
|
453
|
-
service
|
|
454
|
-
|
|
455
|
-
|
|
611
|
+
service
|
|
612
|
+
.patch(body)
|
|
613
|
+
.then((res: number | T | ErrorMessage[]) => {
|
|
614
|
+
postSave(res, obj, version, true, isBackO)
|
|
615
|
+
})
|
|
616
|
+
.catch(handleError)
|
|
456
617
|
} else {
|
|
457
|
-
service
|
|
618
|
+
service
|
|
619
|
+
.update(obj)
|
|
620
|
+
.then((res: number | T | ErrorMessage[]) => postSave(res, obj, version, false, isBackO))
|
|
621
|
+
.catch(handleError)
|
|
458
622
|
}
|
|
459
623
|
} else {
|
|
460
|
-
service
|
|
624
|
+
service
|
|
625
|
+
.create(obj)
|
|
626
|
+
.then((res: number | T | ErrorMessage[]) => postSave(res, obj, version, false, isBackO))
|
|
627
|
+
.catch(handleError)
|
|
461
628
|
}
|
|
462
|
-
}
|
|
629
|
+
}
|
|
463
630
|
|
|
464
|
-
const doSave =
|
|
631
|
+
const doSave = p && p.doSave ? p.doSave : _doSave
|
|
465
632
|
|
|
466
|
-
const _load = (_id: ID|null, callback?: (m: T, showM: (m2: T) => void) => void) => {
|
|
467
|
-
const id: any = _id
|
|
468
|
-
if (id != null && id !==
|
|
469
|
-
setRunning(true)
|
|
470
|
-
showLoading(p1.loading)
|
|
471
|
-
service
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
if (callback) {
|
|
477
|
-
callback(obj, showModel);
|
|
633
|
+
const _load = (_id: ID | null, callback?: (m: T, showM: (m2: T) => void) => void) => {
|
|
634
|
+
const id: any = _id
|
|
635
|
+
if (id != null && id !== "") {
|
|
636
|
+
setRunning(true)
|
|
637
|
+
showLoading(p1.loading)
|
|
638
|
+
service
|
|
639
|
+
.load(id)
|
|
640
|
+
.then((obj: T | null) => {
|
|
641
|
+
if (!obj) {
|
|
642
|
+
handleNotFound(refForm.current)
|
|
478
643
|
} else {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
const data = (err && err.response) ? err.response : err;
|
|
486
|
-
const r = p1.resource;
|
|
487
|
-
const title = r.value('error');
|
|
488
|
-
let msg = r.value('error_internal');
|
|
489
|
-
if (data && data.status === 422) {
|
|
490
|
-
fail(err.response?.data);
|
|
491
|
-
const obj = err.response?.data?.value;
|
|
492
|
-
if (obj) {
|
|
493
|
-
callback ? callback(obj as T, showModel) : showModel(obj as T);
|
|
644
|
+
setFlag({ newMode: false, originalModel: clone(obj) })
|
|
645
|
+
if (callback) {
|
|
646
|
+
callback(obj, showModel)
|
|
647
|
+
} else {
|
|
648
|
+
showModel(obj)
|
|
649
|
+
}
|
|
494
650
|
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
651
|
+
setRunning(false)
|
|
652
|
+
hideLoading(p1.loading)
|
|
653
|
+
})
|
|
654
|
+
.catch((err: any) => {
|
|
655
|
+
const data = err && err.response ? err.response : err
|
|
656
|
+
const r = p1.resource
|
|
657
|
+
const title = r.value("error")
|
|
658
|
+
let msg = r.value("error_internal")
|
|
659
|
+
if (data && data.status === 422) {
|
|
660
|
+
fail(err.response?.data)
|
|
661
|
+
const obj = err.response?.data?.value
|
|
662
|
+
if (obj) {
|
|
663
|
+
callback ? callback(obj as T, showModel) : showModel(obj as T)
|
|
501
664
|
}
|
|
502
|
-
|
|
503
|
-
|
|
665
|
+
} else {
|
|
666
|
+
if (data && data.status === 404) {
|
|
667
|
+
handleNotFound(refForm.current)
|
|
668
|
+
} else {
|
|
669
|
+
if (data.status && !isNaN(data.status)) {
|
|
670
|
+
msg = messageByHttpStatus(data.status, r.value)
|
|
671
|
+
}
|
|
672
|
+
if (data && (data.status === 401 || data.status === 403)) {
|
|
673
|
+
setReadOnly(refForm.current)
|
|
674
|
+
}
|
|
675
|
+
p1.showError(msg, undefined, title)
|
|
504
676
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
hideLoading(p1.loading);
|
|
510
|
-
});
|
|
677
|
+
}
|
|
678
|
+
setRunning(false)
|
|
679
|
+
hideLoading(p1.loading)
|
|
680
|
+
})
|
|
511
681
|
} else {
|
|
512
|
-
const obj = createModel()
|
|
513
|
-
setFlag({ newMode: true, originalModel: undefined })
|
|
682
|
+
const obj = createModel()
|
|
683
|
+
setFlag({ newMode: true, originalModel: undefined })
|
|
514
684
|
if (callback) {
|
|
515
|
-
callback(obj, showModel)
|
|
685
|
+
callback(obj, showModel)
|
|
516
686
|
} else {
|
|
517
|
-
showModel(obj)
|
|
687
|
+
showModel(obj)
|
|
518
688
|
}
|
|
519
689
|
}
|
|
520
|
-
}
|
|
521
|
-
const load =
|
|
690
|
+
}
|
|
691
|
+
const load = p && p.load ? p.load : _load
|
|
522
692
|
|
|
523
693
|
return {
|
|
524
694
|
...baseProps,
|
|
@@ -547,6 +717,6 @@ if (running === true) {
|
|
|
547
717
|
postSave,
|
|
548
718
|
handleDuplicateKey,
|
|
549
719
|
load,
|
|
550
|
-
doSave
|
|
551
|
-
}
|
|
552
|
-
}
|
|
720
|
+
doSave,
|
|
721
|
+
}
|
|
722
|
+
}
|