@praxisui/dynamic-form 10.0.0-rc.4 → 10.0.0-rc.40

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/README.md CHANGED
@@ -29,6 +29,14 @@ Peer dependencies:
29
29
  - `@praxisui/ai`, `@praxisui/core`, `@praxisui/dynamic-fields`, `@praxisui/metadata-editor`, `@praxisui/rich-content`, `@praxisui/settings-panel`, `@praxisui/visual-builder` `^9.0.0-beta.12`
30
30
  - `rxjs` `^7.8.0`
31
31
 
32
+ ## Original item revision on submit
33
+
34
+ In edit mode, the form keeps a single strong `ETag` together with the item representation returned by its hydration GET (`readUrl`, custom `getById` endpoint or ordinary resource GET). Automatic PUT/PATCH sends that exact tag as `If-Match`; it never performs another GET during submit to acquire a newer revision. A successful response that contains the corresponding item representation replaces both cached data and revision from that same response, including server normalization. A command acknowledgment or incomplete representation cannot rotate the original item snapshot. A shared CRUD cache read by another consumer cannot replace the form's original revision.
35
+
36
+ The snapshot is transient and belongs to the resource identity, read/write target and API context. Preparation, reads and writes share a generation: switching away and back, reloading or destroying the surface cannot make an old callback current again. Obsolete automatic responses do not emit submit result events, run result hooks, publish field errors or reset a newer submit's loading state. If an obsolete preparation hook retained the reused form group, the draft requires explicit reload before another write. Changing those bindings requires hydration again. Missing or weak read ETags are not converted into versions; unversioned endpoints remain usable, while a versioned host can reject a missing precondition with `428`. After `412`/`428`, or a successful versioned write without its next ETag, automatic submission requires an explicit reload. Closing and reopening a surface or retrying its initialization loads the new representation; retrying submit alone cannot silently refresh the revision.
37
+
38
+ Explicit `submitResourceVersion` and the existing cross-resource version target inputs retain their command semantics and precedence. They remain host-owned inputs; same-resource editing needs no additional authoring fields. Backend authorization, concurrency and lifecycle policy remain authoritative.
39
+
32
40
  ## Reactive backend determinations
33
41
 
34
42
  When the exact request schema from `/schemas/filtered` publishes root-level `x-ui.reactiveDeterminations`, the form executes the Metadata-compiled backend capability after a valid source changes and applies server-derived draft values. After edit/create hydration, an already populated source is also validated before the draft can be reported as stable; an empty initial source settles as not applicable without an HTTP call. The projection is one closed graph: if any definition is malformed, the complete projection is rejected instead of partially executing. It remains backend-owned, tenant-neutral and transient: it is never copied to `FormConfig` and cannot be authored as a callback, URL or local write policy.
@@ -47,6 +55,12 @@ Use `optionSource.dependsOn` for dependent option lists and workflow actions for
47
55
 
48
56
  Use a local `FormConfig` when the host already knows the sections and fields.
49
57
 
58
+ With `configPersistenceStrategy="input-first"`, an explicitly bound host configuration remains authoritative even when it contains only actions or other policies. The schema for the current operation supplies missing fields and layout; stale persisted fields are not used to fill those gaps.
59
+
60
+ Each form owns its mutable `GenericCrudService` and editor field/rule context. Sibling forms cannot change one another's resource, custom endpoints or schema client. This is a breaking beta correction for hosts that previously replaced an ancestor `GenericCrudService`: configure the form through `resourcePath`, `apiEndpointKey`, `apiUrlEntry` and the direct-form `customEndpoints` input. An ancestor service subclass is no longer used by the form; HTTP interceptors, `API_URL` and shared infrastructure remain inherited. Tests that substitute the client must use `TestBed.overrideComponent(PraxisDynamicForm, { add: { providers: [{ provide: GenericCrudService, useValue: crudMock }] } })`, retaining the other component providers.
61
+
62
+ An explorer combining selectors from several resources is a local form, not an edit command for one of those resource DTOs. Its fields may query real API options through their own resource metadata while remaining `source: 'local'` with `submitPolicy: 'omit'`. Use a distinct form identity when replacing a schema-backed command with such an explorer; persisted connections are still restored for their original identity. The `/dependency-fields-demo` reference follows this pattern and gives the current host definition precedence with `configPersistenceStrategy="input-first"`; its previous `cascade-*` configurations and connections are left untouched.
63
+
50
64
  ```ts
51
65
  import { Component } from '@angular/core';
52
66
  import { FormConfig } from '@praxisui/core';
@@ -739,3 +753,7 @@ suportada, ocupa a linha seguinte. Nenhum documento ou protocolo de Save é alte
739
753
  - [Canonical technical overview: Overview](https://praxisui.dev/docs/components/praxis-dynamic-form)
740
754
  - [Praxis Angular public catalog](https://praxisui.dev/angular)
741
755
  <!-- praxis-npm-catalog-links:end -->
756
+
757
+ ### Filhos de páginas governadas
758
+
759
+ Consulte [o adapter nativo de página](docs/governed-page-widget-adapter.md) para reconstrução sem defaults, presença exata, identidade derivada e execução sem preferências concorrentes.