react-hook-core 0.4.23 → 0.5.1

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