@eqproject/eqp-dynamic-module 2.10.60 → 2.10.63
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 +702 -259
- package/USERGUIDE.md +437 -0
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +2 -8
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +2 -5
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +2 -11
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +2 -11
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -2
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +1 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,259 +1,702 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
|
|
|
164
|
-
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
|
180
|
-
|
|
|
181
|
-
|
|
|
182
|
-
|
|
|
183
|
-
|
|
|
184
|
-
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
1
|
+
# @eqproject/eqp-dynamic-module
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@eqproject/eqp-dynamic-module)
|
|
4
|
+
[](https://angular.io/)
|
|
5
|
+
|
|
6
|
+
> Libreria Angular 15 per la creazione, visualizzazione e gestione di form dinamiche con configuratore no-code.
|
|
7
|
+
> Angular 15 library for building, rendering and managing dynamic forms with a no-code configurator.
|
|
8
|
+
|
|
9
|
+
📖 **[Guida utente / User Guide →](./USERGUIDE.md)**
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Changelog
|
|
14
|
+
|
|
15
|
+
### v2.10.63
|
|
16
|
+
- README riscritto in formato bilingue (italiano completo + inglese completo).
|
|
17
|
+
- Aggiunto `USERGUIDE.md` con guida pratica per scenari d'uso comuni e sezione prompt AI di esempio.
|
|
18
|
+
- `USERGUIDE.md` incluso nel pacchetto npm tramite `ng-package.json` assets.
|
|
19
|
+
|
|
20
|
+
### v2.10.62
|
|
21
|
+
- Migrazione da `tmw-picker` 1.0.x a 1.1.0: NgModule → standalone components, moment.js → Luxon, aggiornamento di tutti i token formato data (`DD/MM/YYYY` → `dd/MM/yyyy`).
|
|
22
|
+
- Rimossi input inutilizzati: `answerToDuplicateId` da `eqp-dynamic-module`, `ProjectName` da `eqp-dynamic-module-configurator`.
|
|
23
|
+
- Documentazione NPM riscritta completamente (bilingue IT/EN).
|
|
24
|
+
|
|
25
|
+
### v2.10.60
|
|
26
|
+
- Aggiornamenti interni e correzioni bug.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Versione italiana
|
|
31
|
+
|
|
32
|
+
- [Panoramica](#panoramica)
|
|
33
|
+
- [Prerequisiti](#prerequisiti)
|
|
34
|
+
- [Installazione](#installazione)
|
|
35
|
+
- [Configurazione del modulo](#configurazione-del-modulo)
|
|
36
|
+
- [Componenti](#componenti)
|
|
37
|
+
- [eqp-dynamic-module — Visualizzatore form](#eqp-dynamic-module--visualizzatore-form)
|
|
38
|
+
- [eqp-dynamic-module-configurator — Builder form](#eqp-dynamic-module-configurator--builder-form)
|
|
39
|
+
- [Modelli di configurazione](#modelli-di-configurazione)
|
|
40
|
+
- [Modalità di visualizzazione](#modalità-di-visualizzazione)
|
|
41
|
+
- [Configurazione endpoint](#configurazione-endpoint)
|
|
42
|
+
- [Modelli dati](#modelli-dati)
|
|
43
|
+
- [Tipi di campo](#tipi-di-campo)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Panoramica
|
|
48
|
+
|
|
49
|
+
`@eqproject/eqp-dynamic-module` espone **due componenti pubblici**:
|
|
50
|
+
|
|
51
|
+
| Componente | Scopo |
|
|
52
|
+
|-----------|-------|
|
|
53
|
+
| `<eqp-dynamic-module>` | Visualizzatore, compilatore, lista, filtro e grafici a runtime |
|
|
54
|
+
| `<eqp-dynamic-module-configurator>` | Builder no-code per creare e modificare le definizioni form |
|
|
55
|
+
|
|
56
|
+
Le form sono strutture JSON salvate lato server e recuperate a runtime. La libreria gestisce rendering, validazione, recupero dati, operazioni CRUD e funzionalità avanzate come formule, trigger, action button e speech-to-text.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### Prerequisiti
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install @angular/cdk@^15.1.2 @angular/material@^15.1.2 @angular/material-luxon-adapter@^15.2.9 --legacy-peer-deps
|
|
64
|
+
npm install @angular-material-components/datetime-picker@^15.0.0 @angular-material-components/moment-adapter@^15.0.0 --legacy-peer-deps
|
|
65
|
+
npm install moment@^2.29.4 sweetalert2@^11.4.24 --legacy-peer-deps
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> Tutti i comandi `npm install` per questa libreria richiedono il flag `--legacy-peer-deps`.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### Installazione
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm install @eqproject/eqp-dynamic-module --legacy-peer-deps
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### Configurazione del modulo
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { EqpDynamicModuleModule } from '@eqproject/eqp-dynamic-module';
|
|
84
|
+
|
|
85
|
+
@NgModule({
|
|
86
|
+
imports: [
|
|
87
|
+
EqpDynamicModuleModule
|
|
88
|
+
]
|
|
89
|
+
})
|
|
90
|
+
export class AppModule {}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
In `angular.json`, aggiungi il tema Material agli stili:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
"styles": [
|
|
97
|
+
"node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
|
|
98
|
+
"src/styles.css"
|
|
99
|
+
]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Componenti
|
|
105
|
+
|
|
106
|
+
#### `eqp-dynamic-module` — Visualizzatore form
|
|
107
|
+
|
|
108
|
+
Visualizza una form dinamica in una delle [modalità disponibili](#modalità-di-visualizzazione).
|
|
109
|
+
|
|
110
|
+
**Utilizzo base**
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { DynamicModuleGeneralConfig, DynamicModuleViewModeEnum } from '@eqproject/eqp-dynamic-module';
|
|
114
|
+
|
|
115
|
+
generalConfig = new DynamicModuleGeneralConfig(
|
|
116
|
+
'https://tua-api.esempio.it/api',
|
|
117
|
+
this.userToken,
|
|
118
|
+
this.context,
|
|
119
|
+
null
|
|
120
|
+
);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```html
|
|
124
|
+
<eqp-dynamic-module
|
|
125
|
+
[configurations]="generalConfig"
|
|
126
|
+
[formID]="'id-del-form'"
|
|
127
|
+
[starterViewMode]="DynamicModuleViewModeEnum.LIST"
|
|
128
|
+
[userID]="currentUser.id"
|
|
129
|
+
(saveRecord)="onSalvataggio($event)"
|
|
130
|
+
(afterSaveRecord)="dopoSalvataggio($event)">
|
|
131
|
+
</eqp-dynamic-module>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Input**
|
|
135
|
+
|
|
136
|
+
| Input | Tipo | Default | Descrizione |
|
|
137
|
+
|-------|------|---------|-------------|
|
|
138
|
+
| `configurations` | `DynamicModuleGeneralConfig` | — | **Obbligatorio.** Configurazione connessione server. |
|
|
139
|
+
| `formID` | `string` | — | **Obbligatorio.** ID del form da visualizzare. |
|
|
140
|
+
| `starterViewMode` | `DynamicModuleViewModeEnum` | `LIST` | Modalità iniziale. |
|
|
141
|
+
| `userID` | `string` | `"0"` | ID utente per il salvataggio record. |
|
|
142
|
+
| `orgaID` | `string` | `"0"` | ID organizzazione. |
|
|
143
|
+
| `showTitle` | `boolean` | `true` | Mostra/nasconde il nome del form. |
|
|
144
|
+
| `showBackButton` | `boolean` | `true` | Mostra/nasconde il pulsante indietro. |
|
|
145
|
+
| `showSaveButton` | `boolean` | `true` | Mostra/nasconde il pulsante salva. |
|
|
146
|
+
| `values` | `Record[]` | `null` | Record pre-caricati per la modalità LIST. |
|
|
147
|
+
| `FormJSON` | `string` | `""` | JSON del form per la modalità REPAIR. |
|
|
148
|
+
| `formulaObject` | `any` | `{}` | Oggetto contesto per le formule (es. `{ role, user }`). |
|
|
149
|
+
| `selectedRecord` | `Record \| string` | `null` | Record pre-selezionato (oggetto o ID). |
|
|
150
|
+
| `externalButtons` | `RecordButton[]` | `[]` | Pulsanti extra nel menu azioni record. |
|
|
151
|
+
| `actionButtons` | `ActionButton[]` | `[]` | Pulsanti azione per i campi di tipo `Bottone`. |
|
|
152
|
+
| `defaultListActions` | `DynamicModuleListFormRecordActionsDefault` | tutti `true` | Azioni default lista: add, view, edit, duplicate, delete, graphs. |
|
|
153
|
+
| `listViewRecordTitle` | `string[]` | `[]` | Chiavi dei campi che compongono il titolo accordion. |
|
|
154
|
+
| `defaultListViewFunction` | `Function` | `null` | Funzione custom al caricamento della lista. |
|
|
155
|
+
| `onSaveBackToList` | `boolean` | `false` | Torna alla LIST dopo il salvataggio. |
|
|
156
|
+
| `onBackTo` | `DynamicModuleViewModeEnum` | `null` | Modalità di destinazione del pulsante indietro. |
|
|
157
|
+
| `numberOfColumns` | `number` | `3` | Numero di colonne del layout. |
|
|
158
|
+
| `showHiddenFields` | `boolean` | `true` | Mostra/nasconde i campi marcati come nascosti. |
|
|
159
|
+
| `filterResultViewMode` | `DynamicModuleFilterResultViewModeEnum` | `INTERNAL_EQPTABLE` | Modalità visualizzazione risultati filtro. |
|
|
160
|
+
| `additionalParams` | `any` | `null` | Parametri extra per le chiamate filtro server. |
|
|
161
|
+
| `additionalInfo` | `any` | `null` | Dati extra per operazioni client-side. |
|
|
162
|
+
| `prefilterParams` | `any` | `null` | Parametri pre-filtro. |
|
|
163
|
+
| `updateInfo` | `any` | `null` | Dati per aggiornare i valori delle risposte. |
|
|
164
|
+
| `contestualizationParams` | `any` | `null` | Parametri di contestualizzazione della lista risultati. |
|
|
165
|
+
| `showNewSearchButton` | `boolean` | `true` | Mostra/nasconde il pulsante "nuova ricerca". |
|
|
166
|
+
| `highlightFilter` | `any` | — | Configurazione evidenziazione righe/campi. |
|
|
167
|
+
| `isDraggableListView` | `boolean` | `true` | Abilita drag-and-drop nella lista. |
|
|
168
|
+
| `Statistic` | `FilterStatistic` | `null` | Configurazione statistiche e filtri. |
|
|
169
|
+
| `QueryEditorComponent` | `any` | — | Componente query editor custom per i lookup. |
|
|
170
|
+
| `debugMode` | `boolean` | `false` | Abilita log dettagliati in console. |
|
|
171
|
+
|
|
172
|
+
**Output**
|
|
173
|
+
|
|
174
|
+
| Output | Payload | Descrizione |
|
|
175
|
+
|--------|---------|-------------|
|
|
176
|
+
| `(saveRecord)` | `Record` | Emesso al salvataggio **senza** endpoint configurato. |
|
|
177
|
+
| `(afterSaveRecord)` | `Record` | Emesso dopo la chiamata server di salvataggio. |
|
|
178
|
+
| `(deleteRecord)` | `Record` | Emesso all'eliminazione **senza** endpoint configurato. |
|
|
179
|
+
| `(afterDeleteRecord)` | `Record` | Emesso dopo la chiamata server di eliminazione. |
|
|
180
|
+
| `(SaveJSON)` | `string` | Emesso all'esportazione del JSON del form. |
|
|
181
|
+
| `(afterFilter)` | `DynRecord[]` | Emesso dopo l'applicazione di un filtro. |
|
|
182
|
+
| `(dragStarted)` | `Record` | Emesso all'inizio di un drag. |
|
|
183
|
+
| `(dragReleased)` | `void` | Emesso al rilascio del drag. |
|
|
184
|
+
| `(clickDragIndicator)` | `Record` | Emesso al click sull'icona drag. |
|
|
185
|
+
| `(out)` | `eventOut` | Output generico per comunicazione esterna. |
|
|
186
|
+
| `(fireTrigger)` | `FireTrigger` | Emesso quando scatta un trigger. |
|
|
187
|
+
| `(afterOutputExternalFilters)` | `FilterStatistic` | Emesso dopo filtri esterni applicati. |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
#### `eqp-dynamic-module-configurator` — Builder form
|
|
192
|
+
|
|
193
|
+
Designer no-code per creare e modificare definizioni form.
|
|
194
|
+
|
|
195
|
+
**Modalità d'uso**
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Nuovo form
|
|
199
|
+
const specific = new DynamicModuleConfiguratorSpecificConfig();
|
|
200
|
+
specific.UserID = this.currentUser.id;
|
|
201
|
+
specific.orgaID = this.currentOrga.id;
|
|
202
|
+
const general = new DynamicModuleGeneralConfig(this.baseServerUrl, this.userToken, this.context, null);
|
|
203
|
+
this.config = new DynamicModuleConfiguratorConfig(general, specific);
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<!-- Nuovo form -->
|
|
208
|
+
<eqp-dynamic-module-configurator
|
|
209
|
+
*ngIf="config"
|
|
210
|
+
[configurations]="config"
|
|
211
|
+
(saveFormEvent)="onSalvaForm($event)">
|
|
212
|
+
</eqp-dynamic-module-configurator>
|
|
213
|
+
|
|
214
|
+
<!-- Modifica form esistente -->
|
|
215
|
+
<eqp-dynamic-module-configurator
|
|
216
|
+
*ngIf="config"
|
|
217
|
+
[configurations]="config"
|
|
218
|
+
[formID]="formID"
|
|
219
|
+
(saveFormEvent)="onSalvaForm($event)">
|
|
220
|
+
</eqp-dynamic-module-configurator>
|
|
221
|
+
|
|
222
|
+
<!-- Esportazione -->
|
|
223
|
+
<eqp-dynamic-module-configurator
|
|
224
|
+
[configurations]="config"
|
|
225
|
+
[formID]="formID"
|
|
226
|
+
[viewMode]="'Export'"
|
|
227
|
+
(saveFormEvent)="onSalvaForm($event)">
|
|
228
|
+
</eqp-dynamic-module-configurator>
|
|
229
|
+
|
|
230
|
+
<!-- Importazione da JSON -->
|
|
231
|
+
<eqp-dynamic-module-configurator
|
|
232
|
+
[configurations]="config"
|
|
233
|
+
[formID]="null"
|
|
234
|
+
[viewMode]="'Export'"
|
|
235
|
+
(saveFormEvent)="onSalvaForm($event)">
|
|
236
|
+
</eqp-dynamic-module-configurator>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Input**
|
|
240
|
+
|
|
241
|
+
| Input | Tipo | Default | Descrizione |
|
|
242
|
+
|-------|------|---------|-------------|
|
|
243
|
+
| `configurations` | `DynamicModuleConfiguratorConfig` | — | **Obbligatorio.** Contenitore configurazione. |
|
|
244
|
+
| `formID` | `string` | `null` | ID del form da modificare. `null` crea un nuovo form. |
|
|
245
|
+
| `viewMode` | `string` | `"addOrEdit"` | `"addOrEdit"` per creare/modificare, `"Export"` per esportare/importare. |
|
|
246
|
+
| `fieldsExtraConfig` | `FieldExtraConfig[]` | — | Configurazione extra per campi specifici. |
|
|
247
|
+
| `triggers` | `any` | — | Definizioni trigger disponibili nell'editor. |
|
|
248
|
+
| `actionButtons` | `any` | — | Definizioni action button disponibili. |
|
|
249
|
+
| `contestualization` | `Contestualization[]` | — | Opzioni di contestualizzazione per lookup e filtri. |
|
|
250
|
+
| `formulaObject` | `any` | — | Contesto per l'anteprima delle formule. |
|
|
251
|
+
| `QueryEditorComponent` | `DynamicLoaderDirectiveData` | — | Componente query editor custom. |
|
|
252
|
+
| `debugMode` | `boolean` | `false` | Abilita log dettagliati. |
|
|
253
|
+
|
|
254
|
+
**Output**
|
|
255
|
+
|
|
256
|
+
| Output | Payload | Descrizione |
|
|
257
|
+
|--------|---------|-------------|
|
|
258
|
+
| `(saveFormEvent)` | `Form` | Emesso al salvataggio **senza** endpoint configurato. |
|
|
259
|
+
| `(afterSaveFormEvent)` | `Form` | Emesso dopo la chiamata server di salvataggio. |
|
|
260
|
+
| `(out)` | `eventOut` | Output generico per comunicazione esterna. |
|
|
261
|
+
| `(fireTrigger)` | `FireTrigger` | Emesso quando scatta un trigger. |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### Modelli di configurazione
|
|
266
|
+
|
|
267
|
+
#### `DynamicModuleGeneralConfig`
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
const general = new DynamicModuleGeneralConfig(
|
|
271
|
+
'https://api.esempio.it/api', // baseServerUrl
|
|
272
|
+
userToken, // token autenticazione
|
|
273
|
+
context, // oggetto Context
|
|
274
|
+
null // EndPointConfiguration (null = usa default)
|
|
275
|
+
);
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
| Proprietà | Tipo | Descrizione |
|
|
279
|
+
|-----------|------|-------------|
|
|
280
|
+
| `baseServerUrl` | `string` | URL base API. Usato per costruire automaticamente gli endpoint se `endPointConfiguration` è `null`. |
|
|
281
|
+
| `userToken` | `string` | Token di autenticazione inviato con ogni chiamata. |
|
|
282
|
+
| `endPointConfiguration` | `EndPointConfiguration \| null` | Override completo degli endpoint. `null` usa le rotte standard. |
|
|
283
|
+
| `context` | `Context` | Contesto applicativo. |
|
|
284
|
+
|
|
285
|
+
#### `DynamicModuleListFormRecordActionsDefault`
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
const actions = new DynamicModuleListFormRecordActionsDefault();
|
|
289
|
+
actions.add = true; // Pulsante "Aggiungi" nell'header lista
|
|
290
|
+
actions.view = true; // Visualizza record (solo lettura)
|
|
291
|
+
actions.edit = true; // Modifica record
|
|
292
|
+
actions.duplicate = false; // Duplica record
|
|
293
|
+
actions.delete = true; // Elimina record
|
|
294
|
+
actions.graphs = false; // Grafici record
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
### Modalità di visualizzazione
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
import { DynamicModuleViewModeEnum } from '@eqproject/eqp-dynamic-module';
|
|
303
|
+
|
|
304
|
+
enum DynamicModuleViewModeEnum {
|
|
305
|
+
NONE = 0, // Nessuna visualizzazione
|
|
306
|
+
VIEW = 1, // Sola lettura
|
|
307
|
+
COMPILE = 2, // Compilazione / modifica
|
|
308
|
+
LIST = 3, // Lista record
|
|
309
|
+
REPAIR = 4, // Revisione form
|
|
310
|
+
LISTWIEW = 5, // Lista compatta alternativa
|
|
311
|
+
FILTER = 6, // Filtro / ricerca
|
|
312
|
+
GRAPHS = 7, // Statistiche e grafici
|
|
313
|
+
HLIST = 8, // Lista orizzontale
|
|
314
|
+
EXTERNAL_FILTER = 9 // Filtro guidato dal componente padre
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
### Configurazione endpoint
|
|
321
|
+
|
|
322
|
+
Per default la libreria costruisce tutti gli URL dagli endpoint a partire da `baseServerUrl`. Passa un `EndPointConfiguration` custom per sovrascrivere singole rotte.
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
import { EndPointConfiguration, EndPointData, RequestMethodEnum, ParamTypeEnum } from '@eqproject/eqp-dynamic-module';
|
|
326
|
+
|
|
327
|
+
const endPoints = new EndPointConfiguration();
|
|
328
|
+
endPoints.Records.SaveEndPoint = new EndPointData();
|
|
329
|
+
endPoints.Records.SaveEndPoint.Url = 'https://custom-api.esempio.it/records/save';
|
|
330
|
+
endPoints.Records.SaveEndPoint.RequestMethod = RequestMethodEnum.POST;
|
|
331
|
+
endPoints.Records.SaveEndPoint.Params = [{
|
|
332
|
+
ParamName: 'orgId',
|
|
333
|
+
ParamValue: this.orgaId,
|
|
334
|
+
ParamType: ParamTypeEnum['Query param']
|
|
335
|
+
}];
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Endpoint Records disponibili:** `GetWithContextualizationByFormCodeEndPoint`, `GetByFormIDEndPoint`, `GetByFormCodeEndPoint`, `GetAllByEntAndUserIDEndPoint`, `GetByIDEndPoint`, `SaveEndPoint`, `DuplicateEndPoint`, `DeleteEndPoint`, `RepairEndPoint`, `ApplyFilter`, `GetAllAttachmentsEndPoint`.
|
|
339
|
+
|
|
340
|
+
**Endpoint Forms disponibili:** `GetByIDEndPoint`, `GetAllFormEndPoint`, `GetByIDAndVersionEndPoint`, `SaveEndPoint`, `SaveAttachmentEndPoint`, `ExportByIDEndPoint`, `GetAttachmentWithBases64`, `SpeechToFormEditEndPoint`.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
### Modelli dati
|
|
345
|
+
|
|
346
|
+
#### `Record`
|
|
347
|
+
|
|
348
|
+
| Proprietà | Tipo | Descrizione |
|
|
349
|
+
|-----------|------|-------------|
|
|
350
|
+
| `ID` | `string` | Identificatore unico. |
|
|
351
|
+
| `EntID` | `string` | ID del form (entità) di appartenenza. |
|
|
352
|
+
| `Version` | `number` | Versione del form al momento della compilazione. |
|
|
353
|
+
| `userID` | `string` | ID utente che ha creato il record. |
|
|
354
|
+
| `AnswerDate` | `string` | Data di compilazione (ISO). |
|
|
355
|
+
| `HTMLreadableValues` | `string` | Valori in formato HTML leggibile. |
|
|
356
|
+
| `AdditionalParams` | `any` | Parametri aggiuntivi. |
|
|
357
|
+
| `AdditionalInfo` | `any` | Informazioni aggiuntive. |
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
### Tipi di campo
|
|
362
|
+
|
|
363
|
+
| Valore | Chiave | Descrizione |
|
|
364
|
+
|--------|--------|-------------|
|
|
365
|
+
| `1` | `Campo di testo` | Input testo singola riga. |
|
|
366
|
+
| `2` | `Area di testo` | Textarea multiriga. |
|
|
367
|
+
| `3` | `Booleano` | Checkbox / toggle. |
|
|
368
|
+
| `4` | `Data e/ora` | Selettore data e/o ora. |
|
|
369
|
+
| `5` | `Campo numerico` | Input numerico con maschera. |
|
|
370
|
+
| `6` | `Allegato` | Upload file. |
|
|
371
|
+
| `7` | `Immagine` | Upload immagine con crop. |
|
|
372
|
+
| `8` | `Elenco generico` | Dropdown / selezione multipla. |
|
|
373
|
+
| `9` | `Lookup` | Lookup server-side con query configurabile. |
|
|
374
|
+
| `10` | `Form di dettaglio` | Form di dettaglio annidato. |
|
|
375
|
+
| `11` | `Elenco immagini` | Selettore lista immagini. |
|
|
376
|
+
| `12` | `Etichetta` | Solo visualizzazione. |
|
|
377
|
+
| `13` | `Immagine con markers` | Immagine con annotazioni interattive. |
|
|
378
|
+
| `14` | `Bottone` | Campo pulsante azione. |
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## English version
|
|
383
|
+
|
|
384
|
+
- [Overview](#overview)
|
|
385
|
+
- [Prerequisites](#prerequisites)
|
|
386
|
+
- [Installation](#installation)
|
|
387
|
+
- [Module Setup](#module-setup)
|
|
388
|
+
- [Components](#components)
|
|
389
|
+
- [eqp-dynamic-module — Form Viewer/Filler](#eqp-dynamic-module--form-viewerfiller)
|
|
390
|
+
- [eqp-dynamic-module-configurator — Form Builder](#eqp-dynamic-module-configurator--form-builder)
|
|
391
|
+
- [Configuration Models](#configuration-models)
|
|
392
|
+
- [View Modes](#view-modes)
|
|
393
|
+
- [Endpoint Configuration](#endpoint-configuration)
|
|
394
|
+
- [Data Models](#data-models)
|
|
395
|
+
- [Field Types Reference](#field-types-reference)
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
### Overview
|
|
400
|
+
|
|
401
|
+
`@eqproject/eqp-dynamic-module` exposes **two public components**:
|
|
402
|
+
|
|
403
|
+
| Component | Purpose |
|
|
404
|
+
|-----------|---------|
|
|
405
|
+
| `<eqp-dynamic-module>` | Runtime form viewer, filler, list, filter and graphs |
|
|
406
|
+
| `<eqp-dynamic-module-configurator>` | No-code form builder (create, edit, import, export) |
|
|
407
|
+
|
|
408
|
+
Forms are defined as JSON structures stored server-side and fetched at runtime. The library handles rendering, validation, data retrieval, CRUD operations and advanced features like formulas, triggers, action buttons and speech-to-text.
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
### Prerequisites
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
npm install @angular/cdk@^15.1.2 @angular/material@^15.1.2 @angular/material-luxon-adapter@^15.2.9 --legacy-peer-deps
|
|
416
|
+
npm install @angular-material-components/datetime-picker@^15.0.0 @angular-material-components/moment-adapter@^15.0.0 --legacy-peer-deps
|
|
417
|
+
npm install moment@^2.29.4 sweetalert2@^11.4.24 --legacy-peer-deps
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
> All `npm install` commands for this library require `--legacy-peer-deps`.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
### Installation
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
npm install @eqproject/eqp-dynamic-module --legacy-peer-deps
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
### Module Setup
|
|
433
|
+
|
|
434
|
+
```typescript
|
|
435
|
+
import { EqpDynamicModuleModule } from '@eqproject/eqp-dynamic-module';
|
|
436
|
+
|
|
437
|
+
@NgModule({
|
|
438
|
+
imports: [EqpDynamicModuleModule]
|
|
439
|
+
})
|
|
440
|
+
export class AppModule {}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
Add Angular Material theme to `angular.json` styles:
|
|
444
|
+
|
|
445
|
+
```json
|
|
446
|
+
"styles": [
|
|
447
|
+
"node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
|
|
448
|
+
"src/styles.css"
|
|
449
|
+
]
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
### Components
|
|
455
|
+
|
|
456
|
+
#### `eqp-dynamic-module` — Form Viewer/Filler
|
|
457
|
+
|
|
458
|
+
**Basic usage**
|
|
459
|
+
|
|
460
|
+
```typescript
|
|
461
|
+
import { DynamicModuleGeneralConfig, DynamicModuleViewModeEnum } from '@eqproject/eqp-dynamic-module';
|
|
462
|
+
|
|
463
|
+
generalConfig = new DynamicModuleGeneralConfig(
|
|
464
|
+
'https://your-api.example.com/api',
|
|
465
|
+
this.userToken,
|
|
466
|
+
this.context,
|
|
467
|
+
null
|
|
468
|
+
);
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
```html
|
|
472
|
+
<eqp-dynamic-module
|
|
473
|
+
[configurations]="generalConfig"
|
|
474
|
+
[formID]="'your-form-id'"
|
|
475
|
+
[starterViewMode]="DynamicModuleViewModeEnum.LIST"
|
|
476
|
+
[userID]="currentUser.id"
|
|
477
|
+
(saveRecord)="onSave($event)"
|
|
478
|
+
(afterSaveRecord)="onAfterSave($event)">
|
|
479
|
+
</eqp-dynamic-module>
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
**Inputs**
|
|
483
|
+
|
|
484
|
+
| Input | Type | Default | Description |
|
|
485
|
+
|-------|------|---------|-------------|
|
|
486
|
+
| `configurations` | `DynamicModuleGeneralConfig` | — | **Required.** Server connection configuration. |
|
|
487
|
+
| `formID` | `string` | — | **Required.** ID of the form to display. |
|
|
488
|
+
| `starterViewMode` | `DynamicModuleViewModeEnum` | `LIST` | Initial view mode. |
|
|
489
|
+
| `userID` | `string` | `"0"` | User ID stamped on saved records. |
|
|
490
|
+
| `orgaID` | `string` | `"0"` | Organization ID. |
|
|
491
|
+
| `showTitle` | `boolean` | `true` | Show/hide the form name. |
|
|
492
|
+
| `showBackButton` | `boolean` | `true` | Show/hide the back button. |
|
|
493
|
+
| `showSaveButton` | `boolean` | `true` | Show/hide the save button. |
|
|
494
|
+
| `values` | `Record[]` | `null` | Pre-loaded records for LIST mode. |
|
|
495
|
+
| `FormJSON` | `string` | `""` | Form JSON string for REPAIR mode. |
|
|
496
|
+
| `formulaObject` | `any` | `{}` | Context object for formula evaluation. |
|
|
497
|
+
| `selectedRecord` | `Record \| string` | `null` | Pre-select a record by object or ID. |
|
|
498
|
+
| `externalButtons` | `RecordButton[]` | `[]` | Extra buttons in the record action menu. |
|
|
499
|
+
| `actionButtons` | `ActionButton[]` | `[]` | Action buttons for `Bottone` field type. |
|
|
500
|
+
| `defaultListActions` | `DynamicModuleListFormRecordActionsDefault` | all `true` | Toggle default list actions. |
|
|
501
|
+
| `listViewRecordTitle` | `string[]` | `[]` | Field keys composing the accordion title. |
|
|
502
|
+
| `defaultListViewFunction` | `Function` | `null` | Custom function called on list load. |
|
|
503
|
+
| `onSaveBackToList` | `boolean` | `false` | Return to LIST after save. |
|
|
504
|
+
| `onBackTo` | `DynamicModuleViewModeEnum` | `null` | View mode for the back button. |
|
|
505
|
+
| `numberOfColumns` | `number` | `3` | Number of layout columns. |
|
|
506
|
+
| `showHiddenFields` | `boolean` | `true` | Show/hide hidden fields. |
|
|
507
|
+
| `filterResultViewMode` | `DynamicModuleFilterResultViewModeEnum` | `INTERNAL_EQPTABLE` | Filter results display mode. |
|
|
508
|
+
| `additionalParams` | `any` | `null` | Extra params for server filter calls. |
|
|
509
|
+
| `additionalInfo` | `any` | `null` | Extra data for client-side operations. |
|
|
510
|
+
| `prefilterParams` | `any` | `null` | Pre-filter parameters. |
|
|
511
|
+
| `updateInfo` | `any` | `null` | Data to update response values after load. |
|
|
512
|
+
| `contestualizationParams` | `any` | `null` | Contextualisation parameters. |
|
|
513
|
+
| `showNewSearchButton` | `boolean` | `true` | Show/hide the new search button. |
|
|
514
|
+
| `highlightFilter` | `any` | — | Row/field highlighting configuration. |
|
|
515
|
+
| `isDraggableListView` | `boolean` | `true` | Enable drag-and-drop in list view. |
|
|
516
|
+
| `Statistic` | `FilterStatistic` | `null` | Statistics and filter configuration. |
|
|
517
|
+
| `QueryEditorComponent` | `any` | — | Custom query editor component for lookups. |
|
|
518
|
+
| `debugMode` | `boolean` | `false` | Enable verbose console logging. |
|
|
519
|
+
|
|
520
|
+
**Outputs**
|
|
521
|
+
|
|
522
|
+
| Output | Payload | Description |
|
|
523
|
+
|--------|---------|-------------|
|
|
524
|
+
| `(saveRecord)` | `Record` | Emitted on save when **no** save endpoint is configured. |
|
|
525
|
+
| `(afterSaveRecord)` | `Record` | Emitted after server save call completes. |
|
|
526
|
+
| `(deleteRecord)` | `Record` | Emitted on delete when **no** delete endpoint is configured. |
|
|
527
|
+
| `(afterDeleteRecord)` | `Record` | Emitted after server delete call completes. |
|
|
528
|
+
| `(SaveJSON)` | `string` | Emitted when form JSON is exported. |
|
|
529
|
+
| `(afterFilter)` | `DynRecord[]` | Emitted after filter operation with result set. |
|
|
530
|
+
| `(dragStarted)` | `Record` | Emitted when drag starts. |
|
|
531
|
+
| `(dragReleased)` | `void` | Emitted when drag ends. |
|
|
532
|
+
| `(clickDragIndicator)` | `Record` | Emitted when drag handle is clicked. |
|
|
533
|
+
| `(out)` | `eventOut` | General-purpose external output. |
|
|
534
|
+
| `(fireTrigger)` | `FireTrigger` | Emitted when a trigger fires. |
|
|
535
|
+
| `(afterOutputExternalFilters)` | `FilterStatistic` | Emitted after external filters applied. |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
#### `eqp-dynamic-module-configurator` — Form Builder
|
|
540
|
+
|
|
541
|
+
**Usage modes**
|
|
542
|
+
|
|
543
|
+
```html
|
|
544
|
+
<!-- Create new form -->
|
|
545
|
+
<eqp-dynamic-module-configurator
|
|
546
|
+
*ngIf="config"
|
|
547
|
+
[configurations]="config"
|
|
548
|
+
(saveFormEvent)="onFormSaved($event)">
|
|
549
|
+
</eqp-dynamic-module-configurator>
|
|
550
|
+
|
|
551
|
+
<!-- Edit existing form -->
|
|
552
|
+
<eqp-dynamic-module-configurator
|
|
553
|
+
[configurations]="config"
|
|
554
|
+
[formID]="formID"
|
|
555
|
+
(saveFormEvent)="onFormSaved($event)">
|
|
556
|
+
</eqp-dynamic-module-configurator>
|
|
557
|
+
|
|
558
|
+
<!-- Export form -->
|
|
559
|
+
<eqp-dynamic-module-configurator
|
|
560
|
+
[configurations]="config"
|
|
561
|
+
[formID]="formID"
|
|
562
|
+
[viewMode]="'Export'"
|
|
563
|
+
(saveFormEvent)="onFormSaved($event)">
|
|
564
|
+
</eqp-dynamic-module-configurator>
|
|
565
|
+
|
|
566
|
+
<!-- Import from JSON -->
|
|
567
|
+
<eqp-dynamic-module-configurator
|
|
568
|
+
[configurations]="config"
|
|
569
|
+
[formID]="null"
|
|
570
|
+
[viewMode]="'Export'"
|
|
571
|
+
(saveFormEvent)="onFormSaved($event)">
|
|
572
|
+
</eqp-dynamic-module-configurator>
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**Inputs**
|
|
576
|
+
|
|
577
|
+
| Input | Type | Default | Description |
|
|
578
|
+
|-------|------|---------|-------------|
|
|
579
|
+
| `configurations` | `DynamicModuleConfiguratorConfig` | — | **Required.** Configuration container. |
|
|
580
|
+
| `formID` | `string` | `null` | Form ID to edit. `null` creates a new form. |
|
|
581
|
+
| `viewMode` | `string` | `"addOrEdit"` | `"addOrEdit"` or `"Export"`. |
|
|
582
|
+
| `fieldsExtraConfig` | `FieldExtraConfig[]` | — | Extra configuration for specific fields. |
|
|
583
|
+
| `triggers` | `any` | — | Trigger definitions for the editor. |
|
|
584
|
+
| `actionButtons` | `any` | — | Action button definitions. |
|
|
585
|
+
| `contestualization` | `Contestualization[]` | — | Contextualisation options. |
|
|
586
|
+
| `formulaObject` | `any` | — | Context for formula preview. |
|
|
587
|
+
| `QueryEditorComponent` | `DynamicLoaderDirectiveData` | — | Custom query editor component. |
|
|
588
|
+
| `debugMode` | `boolean` | `false` | Enable verbose logging. |
|
|
589
|
+
|
|
590
|
+
**Outputs**
|
|
591
|
+
|
|
592
|
+
| Output | Payload | Description |
|
|
593
|
+
|--------|---------|-------------|
|
|
594
|
+
| `(saveFormEvent)` | `Form` | Emitted on save when **no** save endpoint is configured. |
|
|
595
|
+
| `(afterSaveFormEvent)` | `Form` | Emitted after server save call completes. |
|
|
596
|
+
| `(out)` | `eventOut` | General-purpose external output. |
|
|
597
|
+
| `(fireTrigger)` | `FireTrigger` | Emitted when a trigger fires. |
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
### Configuration Models
|
|
602
|
+
|
|
603
|
+
#### `DynamicModuleGeneralConfig`
|
|
604
|
+
|
|
605
|
+
```typescript
|
|
606
|
+
const general = new DynamicModuleGeneralConfig(
|
|
607
|
+
baseServerUrl, // string — e.g. "https://api.example.com/api"
|
|
608
|
+
userToken, // string — auth token
|
|
609
|
+
context, // Context
|
|
610
|
+
endPointConfiguration // EndPointConfiguration | null
|
|
611
|
+
);
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
#### `DynamicModuleListFormRecordActionsDefault`
|
|
615
|
+
|
|
616
|
+
```typescript
|
|
617
|
+
const actions = new DynamicModuleListFormRecordActionsDefault();
|
|
618
|
+
actions.add = true;
|
|
619
|
+
actions.view = true;
|
|
620
|
+
actions.edit = true;
|
|
621
|
+
actions.duplicate = false;
|
|
622
|
+
actions.delete = true;
|
|
623
|
+
actions.graphs = false;
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
### View Modes
|
|
629
|
+
|
|
630
|
+
```typescript
|
|
631
|
+
enum DynamicModuleViewModeEnum {
|
|
632
|
+
NONE = 0,
|
|
633
|
+
VIEW = 1,
|
|
634
|
+
COMPILE = 2,
|
|
635
|
+
LIST = 3,
|
|
636
|
+
REPAIR = 4,
|
|
637
|
+
LISTWIEW = 5,
|
|
638
|
+
FILTER = 6,
|
|
639
|
+
GRAPHS = 7,
|
|
640
|
+
HLIST = 8,
|
|
641
|
+
EXTERNAL_FILTER = 9
|
|
642
|
+
}
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
---
|
|
646
|
+
|
|
647
|
+
### Endpoint Configuration
|
|
648
|
+
|
|
649
|
+
```typescript
|
|
650
|
+
const endPoints = new EndPointConfiguration();
|
|
651
|
+
endPoints.Records.SaveEndPoint = new EndPointData();
|
|
652
|
+
endPoints.Records.SaveEndPoint.Url = 'https://custom-api.example.com/records/save';
|
|
653
|
+
endPoints.Records.SaveEndPoint.RequestMethod = RequestMethodEnum.POST;
|
|
654
|
+
endPoints.Records.SaveEndPoint.Params = [{
|
|
655
|
+
ParamName: 'orgId',
|
|
656
|
+
ParamValue: this.orgaId,
|
|
657
|
+
ParamType: ParamTypeEnum['Query param']
|
|
658
|
+
}];
|
|
659
|
+
const general = new DynamicModuleGeneralConfig(baseUrl, token, context, endPoints);
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**Available Records endpoints:** `GetWithContextualizationByFormCodeEndPoint`, `GetByFormIDEndPoint`, `GetByFormCodeEndPoint`, `GetAllByEntAndUserIDEndPoint`, `GetByIDEndPoint`, `SaveEndPoint`, `DuplicateEndPoint`, `DeleteEndPoint`, `RepairEndPoint`, `ApplyFilter`, `GetAllAttachmentsEndPoint`.
|
|
663
|
+
|
|
664
|
+
**Available Forms endpoints:** `GetByIDEndPoint`, `GetAllFormEndPoint`, `GetByIDAndVersionEndPoint`, `SaveEndPoint`, `SaveAttachmentEndPoint`, `ExportByIDEndPoint`, `GetAttachmentWithBases64`, `SpeechToFormEditEndPoint`.
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
### Data Models
|
|
669
|
+
|
|
670
|
+
#### `Record`
|
|
671
|
+
|
|
672
|
+
| Property | Type | Description |
|
|
673
|
+
|----------|------|-------------|
|
|
674
|
+
| `ID` | `string` | Unique record identifier. |
|
|
675
|
+
| `EntID` | `string` | ID of the form this record belongs to. |
|
|
676
|
+
| `Version` | `number` | Form version at compilation time. |
|
|
677
|
+
| `userID` | `string` | ID of the user who created the record. |
|
|
678
|
+
| `AnswerDate` | `string` | ISO date string of compilation. |
|
|
679
|
+
| `HTMLreadableValues` | `string` | Pre-rendered HTML of field values. |
|
|
680
|
+
| `AdditionalParams` | `any` | Extra parameters. |
|
|
681
|
+
| `AdditionalInfo` | `any` | Extra information. |
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
### Field Types Reference
|
|
686
|
+
|
|
687
|
+
| Value | Key | Description |
|
|
688
|
+
|-------|-----|-------------|
|
|
689
|
+
| `1` | `Campo di testo` | Single-line text input. |
|
|
690
|
+
| `2` | `Area di testo` | Multi-line textarea. |
|
|
691
|
+
| `3` | `Booleano` | Checkbox / boolean toggle. |
|
|
692
|
+
| `4` | `Data e/ora` | Date and/or time picker. |
|
|
693
|
+
| `5` | `Campo numerico` | Numeric input with mask. |
|
|
694
|
+
| `6` | `Allegato` | File attachment upload. |
|
|
695
|
+
| `7` | `Immagine` | Image upload with optional cropping. |
|
|
696
|
+
| `8` | `Elenco generico` | Dropdown / multi-select list. |
|
|
697
|
+
| `9` | `Lookup` | Server-side lookup with configurable query. |
|
|
698
|
+
| `10` | `Form di dettaglio` | Embedded detail (inner) form. |
|
|
699
|
+
| `11` | `Elenco immagini` | Image selector list. |
|
|
700
|
+
| `12` | `Etichetta` | Display-only label. |
|
|
701
|
+
| `13` | `Immagine con markers` | Image with interactive annotation markers. |
|
|
702
|
+
| `14` | `Bottone` | Action button field. |
|