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