Overview
Widget Code Editor
Widget code_editor basato su Monaco (wuic-code-editor) con supporto parser/provider contestuali e configurazione avanzata via mc_props_bag.extras.customEditorConfig.
Scope
- tipo colonna:
mc_ui_column_type = "code_editor" - componente runtime:
src/lib/component/code-editor/code-editor.component.ts - linguaggi supportati in config:
sql,typescript(ts),html,json,csharp - parser/provider effettivamente implementati:
sql,typescript,html
mc_props_bag: customEditorConfig (dettaglio)
{
"customEditorConfig": {
"editorOptions": {
"language": "sql",
"theme": "vs-dark",
"wordWrap": "on",
"wrappingIndent": "same",Significato proprietà
customEditorConfig.editorOptions.language
- seleziona il motore editor.
- valori utili: sql, typescript, html.
- valori anche accettati: json, csharp (senza provider avanzato dedicato).
customEditorConfig.editorOptions.scaffoldedOnly(SQL)
- passato al backend CodeEditor/AutocompleteSqlObjects?scaffoldedOnly=....
- true: suggerimenti solo su oggetti scaffolded.
customEditorConfig.editorOptions.theme
- tema Monaco (vs-dark, ecc.), poi può essere sovrascritto dal provider SQL (sqlTheme).
customEditorConfig.compilerOptions(TS)
- opzioni TypeScript Monaco (target, module, moduleResolution, ...).
- usate da typescriptDefaults.setCompilerOptions.
customEditorConfig.schemas(JSON)
- JSON schema diagnostics per modalità json.
customEditorConfig.codeContext(TS)
- firma/template callback tipizzato in base ai metadata route/colonna.
customEditorConfig.extraLibs(TS)
- librerie .d.ts addizionali caricate nell'editor.
customEditorConfig.routeContextField/columnContextField(TS)
- campi record usati per dedurre route e colonna correnti e generare tipizzazione contestuale.
customEditorConfig.htmlAutoFormat(HTML)
- se false, disabilita auto-format debounce (1.2s) su modifiche HTML.
style.editCss,form.columns,form.disabled
- layout/disabilitazione UI field-editor.
Parser/provider disponibili (verifica codice)
SQL parser (SqlProvider)
- file:
code-editor/sql-parser.ts - features:
- autocomplete contestuale su schema/tabelle/colonne/relazioni/funzioni/stored.
- drag&drop nodi SQL tree dentro editor.
- tokenizzazione Monarch e tema dedicato sqlTheme.
- validazione SQL via endpoint backend CodeEditor/ParseSql (azione test).
TS parser (TSProvider)
- file:
code-editor/ts-parser.ts - features:
- snippets contestuali (http.get, http.post, prompt, toast, ecc.).
- caricamento extraLibs e baseLibs .d.ts.
- compiler options Monaco configurabili.
- tipizzazione dinamica del record in base ai metadata route/lookup (codeContext).
HTML parser (HtmlProvider)
- file:
code-editor/html-parser.ts - features:
- validazione HTML con parse5 + marker Monaco.
- regole strict aggiuntive: tag non chiusi, binding Angular malformati, javascript: URL, inline handler on*.
- completion snippet HTML + binding Angular/WUIC ([input], (output), [(model)], *ngIf, *ngFor).
- formatter documento HTML registrato su Monaco.
- preview pseudo-render sanitizzata nel componente (toggleHtmlPreview).
Scenario Advanced: Tipizzazione Contestuale routeContextField/columnContextField
- Snippet inline:
customEditorConfig.routeContextField: "md_route_name". - Snippet inline:
customEditorConfig.columnContextField: "mc_id". - Runtime TS provider: legge route/colonna dal record corrente e costruisce contesto tipizzato per autocomplete e helper snippet.
- Risultato pratico: codice callback piu guidato, meno errori di campo/route e migliore discoverability delle API disponibili.
- Uso consigliato: metadata-editor, action callback e script custom dove la colonna cambia in base al contesto utente.
- Integrazione: per il flusso lookup assistito correlato vedi
field-widget-lookup.
Effetti Client/Server
- Client:
- editing avanzato con toolbar, fullscreen, suggest, formatter.
- sync su record[field] via BehaviorSubject.
- Server:
- SQL validation e metadata schema autocomplete passano da endpoint CodeEditor/*.
- TS/HTML parsing resta client-side (Monaco + provider locali).
Note operative
- per richiesta utente “ts”, usare
language: "typescript". - in
htmlcon template Angular complessi, tenerehtmlAutoFormatdisattivabile per evitare format aggressivo. - in
jsonc'è validazione schema ma non provider parser avanzato come SQL/TS/HTML.