feat(10.1-02): mount plugin widget elements and run their actions from the form
- pluginAssets loads controller scripts and stylesheets from {base}/assets/ only, once per URL
- WidgetField mounts the custom element with attributes only and posts summer-action through the typed client
- Only declared fill keys returned by the server are patched; the form turns dirty and nothing saves
- widget is a registered valueless type rendered on create and update, labelled as a group
- backend::lang.extension strings in en and pl; embedded dist rebuilt
This commit is contained in:
28
admin/src/components/form/formContext.ts
Normal file
28
admin/src/components/form/formContext.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
// What a record form shares with extension controls (D-05, D-08). FormView
|
||||
// provides these; a widget reads the current values and the locale, and
|
||||
// writes action results back through patch, which marks the form dirty and
|
||||
// clears that field's errors exactly like typing into it. A form without a
|
||||
// provider (settings pages) gets the defaults of the injecting control.
|
||||
import type { InjectionKey, Ref } from 'vue'
|
||||
import type { AdminRecord } from '../../api/types'
|
||||
|
||||
/** Read-only view of the form's current values. */
|
||||
export const FORM_VALUES: InjectionKey<Readonly<Ref<AdminRecord>>> = Symbol('summer.form.values')
|
||||
|
||||
/** Sets one field's value as if the admin had edited it. Nothing is saved. */
|
||||
export const FORM_PATCH: InjectionKey<(name: string, value: unknown) => void> = Symbol('summer.form.patch')
|
||||
|
||||
/** The form schema's locale (meta.locale). */
|
||||
export const FORM_LOCALE: InjectionKey<Readonly<Ref<string>>> = Symbol('summer.form.locale')
|
||||
|
||||
/**
|
||||
* The form controller's plugin assets: resolves once its scripts have loaded
|
||||
* or failed, with the failed URLs (pluginAssets.loadControllerAssets).
|
||||
*/
|
||||
export const FORM_ASSETS: InjectionKey<() => Promise<string[]>> = Symbol('summer.form.assets')
|
||||
|
||||
/** Event a widget element dispatches to run its action (bubbles, composed). */
|
||||
export const WIDGET_EVENT = 'summer-action'
|
||||
|
||||
/** How long a widget waits for its custom element to be defined. */
|
||||
export const WIDGET_TIMEOUT = 5000
|
||||
Reference in New Issue
Block a user