@praxisui/crud 3.0.0-beta.1 → 3.0.0-beta.3

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.
Files changed (2) hide show
  1. package/README.md +111 -0
  2. package/package.json +6 -6
package/README.md CHANGED
@@ -114,6 +114,117 @@ Checklist rapido para PR:
114
114
  - preferir memoizacao por ciclo de vida/signal
115
115
  - manter `trackBy` em listas dinamicas
116
116
 
117
+ ## Fluxo CRUD
118
+
119
+ O `@praxisui/crud` nao e apenas um wrapper visual. Ele funciona como shell canonico de CRUD da plataforma:
120
+
121
+ - compoe `praxis-table` como superficie de listagem
122
+ - sintetiza `crudContext` estavel para a tabela
123
+ - delega abertura de `create/view/edit` ao `CrudLauncherService`
124
+ - resolve `route`, `modal` ou `drawer` por precedencia governada
125
+ - propaga `afterOpen`, `afterClose`, `afterSave` e `afterDelete`
126
+ - faz `refetch()` da tabela quando save/delete concluem com sucesso
127
+
128
+ ### Versao Pedagogica de Alto Nivel
129
+
130
+ Esta e a leitura adequada para documentacao publica e landing pages.
131
+
132
+ ```mermaid
133
+ sequenceDiagram
134
+ participant Usuario as Usuario
135
+ participant Crud as praxis-crud
136
+ participant Tabela as praxis-table
137
+ participant Launcher as CrudLauncherService
138
+ participant Host as Host / Router / Dialog / Drawer
139
+ participant Form as Praxis Dynamic Form
140
+
141
+ Usuario->>Tabela: clica em criar, visualizar ou editar
142
+ Tabela-->>Crud: emite rowAction ou toolbarAction
143
+ Crud->>Launcher: resolve a acao e o modo de abertura
144
+ Launcher->>Host: abre por rota, modal ou gaveta
145
+ Host->>Form: renderiza o formulario do recurso
146
+ Form-->>Crud: retorna save, delete ou close
147
+ Crud->>Tabela: refetch() quando save/delete concluem
148
+ Crud-->>Usuario: fluxo volta para a lista atualizada
149
+ ```
150
+
151
+ Leitura pedagogica:
152
+
153
+ 1. **A tabela dispara a intencao CRUD**.
154
+ 2. **O shell `praxis-crud` governa o fluxo**, nao o app consumidor.
155
+ 3. **O launcher decide como abrir o formulario**.
156
+ 4. **A lista e atualizada automaticamente apos save/delete**.
157
+
158
+ ### Versao Detalhada e Fiel ao Runtime Atual
159
+
160
+ Esta versao documenta a implementacao atual da lib.
161
+
162
+ ```mermaid
163
+ sequenceDiagram
164
+ participant Host as Host / metadata
165
+ participant Crud as PraxisCrudComponent
166
+ participant Tabela as PraxisTable
167
+ participant Launcher as CrudLauncherService
168
+ participant Storage as AsyncConfigStorage
169
+ participant Router as Angular Router
170
+ participant Dialog as DialogService
171
+ participant Drawer as CRUD_DRAWER_ADAPTER
172
+ participant FormHost as DynamicFormDialogHost
173
+ participant Form as PraxisDynamicForm
174
+
175
+ Host->>Crud: fornece metadata + crudId
176
+ Crud->>Crud: assertCrudMetadata(allowDeferredActionBindings=true)
177
+ Crud->>Crud: buildEffectiveTableConfig()
178
+ Crud->>Crud: buildTableCrudContext()
179
+ Crud->>Tabela: renderiza table + crudContext
180
+
181
+ alt acao na toolbar
182
+ Tabela-->>Crud: toolbarAction(action)
183
+ else acao na linha
184
+ Tabela-->>Crud: rowAction(action, row)
185
+ end
186
+
187
+ Crud->>Crud: onAction(action, row)
188
+ Crud->>Launcher: launch(actionMeta, row, metadata, componentKeyId)
189
+ Launcher->>Storage: load crud-overrides:<componentKeyId>
190
+ Launcher->>Launcher: mergeCrudOverrides()
191
+ Launcher->>Launcher: resolveOpenMode()
192
+
193
+ alt route
194
+ Launcher->>Router: navigateByUrl(route + query params)
195
+ else drawer
196
+ Launcher->>Drawer: open({ action, metadata, inputs })
197
+ else modal
198
+ Launcher->>Dialog: openAsync(DynamicFormDialogHost)
199
+ Dialog->>FormHost: injeta action + metadata + inputs
200
+ FormHost->>FormHost: resolve resourcePath, idField, resourceId, mode
201
+ FormHost->>Form: renderiza PraxisDynamicForm
202
+ Form-->>FormHost: formSubmit / formCancel
203
+ FormHost-->>Crud: DialogRef.afterClosed()
204
+ end
205
+
206
+ Crud-->>Host: afterOpen(mode, action)
207
+
208
+ alt save
209
+ Crud-->>Host: afterSave(id, data)
210
+ Crud->>Tabela: refetch()
211
+ else delete
212
+ Crud-->>Host: afterDelete(id)
213
+ Crud->>Tabela: refetch()
214
+ else close
215
+ Crud-->>Host: afterClose()
216
+ end
217
+ ```
218
+
219
+ ### Pontos-Chave do Runtime
220
+
221
+ 1. **`crudContext` precisa ser estavel**: o componente nao usa getter dinamico no template; ele memoiza o contexto quando o metadata muda.
222
+ 2. **`PraxisCrudComponent` pode completar a UX da tabela**: ele injeta automaticamente toolbar add e row actions quando o metadata declara acoes e o host nao configurou a tabela explicitamente.
223
+ 3. **A validacao estrutural do metadata e estrita, mas aceita bindings diferidos**: `route` e `formId` podem ser completados por overrides persistidos imediatamente antes da abertura.
224
+ 4. **O `CrudLauncherService` e a fonte de verdade para `openMode`**: ele mescla overrides persistidos, defaults do metadata e GlobalConfig antes de decidir `route`, `modal` ou `drawer`.
225
+ 5. **Modal e drawer nao sao equivalentes internamente**: o ramo modal usa `DynamicFormDialogHostComponent`; o ramo drawer depende do adapter provido pelo host.
226
+ 6. **Save e delete geram refetch automatico da lista**: esse side effect faz parte do contrato atual do shell CRUD.
227
+
117
228
  ## Documentacao Tecnica da Lib
118
229
 
119
230
  - `projects/praxis-crud/docs/host-crud-runtime-and-openmode.md`
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@praxisui/crud",
3
- "version": "3.0.0-beta.1",
3
+ "version": "3.0.0-beta.3",
4
4
  "description": "CRUD building blocks for Praxis UI: integrates dynamic forms and tables with unified configuration and services.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.1.0",
7
7
  "@angular/core": "^20.1.0",
8
- "@praxisui/dynamic-form": "^3.0.0-beta.1",
9
- "@praxisui/table": "^3.0.0-beta.1",
10
- "@praxisui/core": "^3.0.0-beta.1",
11
- "@praxisui/dynamic-fields": "^3.0.0-beta.1",
12
- "@praxisui/settings-panel": "^3.0.0-beta.1"
8
+ "@praxisui/dynamic-form": "^3.0.0-beta.3",
9
+ "@praxisui/table": "^3.0.0-beta.3",
10
+ "@praxisui/core": "^3.0.0-beta.3",
11
+ "@praxisui/dynamic-fields": "^3.0.0-beta.3",
12
+ "@praxisui/settings-panel": "^3.0.0-beta.3"
13
13
  },
14
14
  "dependencies": {
15
15
  "tslib": "^2.3.0"