-
Notifications
You must be signed in to change notification settings - Fork 3
ui_form
Quando crei una pannello puoi scegliere tra 2 tipi di layout, usando la proprietà layout
- grid
- flex
Se non viene specificata acluna proprietà verrà usato il valore di default grid
Oltre al layout puoi aggiungre al pannello classi aggiuntive usando l'attributo classNames
, labelClassName
, fieldClassName
Infine puoi usare style
e passare un oggetto con gli style che vuoi mettere in linea.
"layout" : "grid"
Quando utilizzi il layout grid Anacleto è completamente autonomo nel disporre i pannelli all'interno di un form, la sola cosa che devi fare è dare un peso da 1 a 12 ai pannelli.
Se un peso non viene specificato di default il valore è 12.
Il peso di un pannello va specificato tramite la proprietà colNumber
utilizzando le classi apposite col-1
,col-2
... col-12
.
Se ne hai la necessuità puoi definire un peso diverso per schermi diversi, per farlo utilizza i prefissi:
- sm
- md
- lg
- xl
Immagina lo schermo diviso in 12 colonne, nell'esempio di seguito la larghezza del pannello sarà di default 12 (l'intera larghezza dello schermo). Negli schermi di medie dimensioni il pannello occuperà 8 colonne (2/3 dello schermo), mentre degli schermi grandi (o molto grandi) grandi il pannello occuperà 6 colonne di 12 (ossia metà schermo).
"colNumber" : "col-12 md:col-8 lg:col-6"
TIPS: Questa tecnica delle 12 colonne è largamente utilizzata da molti anni per creare applicazioni responsive. Se sei curioso indaga un po' nel web
In aggiunta alla proprietà colNumber
puoi utilizzare classNames
per aggiungere al tuo pannello le classi che più desideri separata da spazio.
"layout" : "flex"
Flex, flex e ancora flex...se non sa di cosa stiamo parlando documentati qui Docs - Video
Se vuoi essere libero di disegnare una finestra a tuo piacimaneto imposta l'attributo della finestra layout=flex
, da questo momento in poi sarai libero di posizionare i pannelli come desideri utilizzando la proprietà classNames
Quando utilizzi il layout flex
Anacleto di mette a disposizione alcune classi che possono aiutarti nel posizionare un pannello
-
flex-auto
impostaflex: 1 1 auto;
-
flex-1
impostaflex: 1 1 0% !important;
utile quando vuoi dare peso 1 a un pannello (se metti 3 pannelli con flex 1 saranno tutti e 3 larghi uguali) -
flex-2
impostaflex: 2 2 0% !important;
utile quando vuoi dare peso 2 a un pannello (sarà sempre largo il doppio di un pannello con flex 1) -
flex-grow-0
impostaflex-grow: 0;
-
flex-grow-1
impostaflex-grow: 1
-
flex-shrink-0
impostaflex-shrink: 0;
-
flex-shrink-1
impostaflex-shrink: 1;
-
stretch
il pannello occuperà tutto lo schermo in altezza
TIPS: tutte queste classi supportano sm, md, lg, xl usali per creare applicazioni responsive come si deve
Nel responsive NON si usano margini e padding, usa il gap, di seguito alcune classi di utilità già pronte
-
gap-0
impostagap: 0;
-
gap-1
impostagap: 0.25rem;
-
gap-2
impostagap: 0.5rem;
-
gap-3
impostagap: 1rem;
-
gap-4
impostagap: 1.5rem;
-
gap-5
impostagap: 2rem;
-
gap-6
impostagap: 3rem;
-
gap-7
impostagap: 4rem;
-
gap-8
impostagap: 5rem;
-
row-gap-0
impostarow-gap: 0;
-
row-gap-1
impostarow-gap: 0.25rem;
-
row-gap-2
impostarow-gap: 0.5rem;
-
row-gap-3
impostarow-gap: 1rem;
-
row-gap-4
impostarow-gap: 1.5rem;
-
row-gap-5
impostarow-gap: 2rem;
-
row-gap-6
impostarow-gap: 3rem;
-
row-gap-7
impostarow-gap: 4rem;
-
row-gap-8
impostarow-gap: 5rem;
-
column-gap-0
impostacolumn-gap: 0;
-
column-gap-1
impostacolumn-gap: 0.25rem;
-
column-gap-2
impostacolumn-gap: 0.5rem;
-
column-gap-3
impostacolumn-gap: 1rem;
-
column-gap-4
impostacolumn-gap: 1.5rem;
-
column-gap-5
impostacolumn-gap: 2rem;
-
column-gap-6
impostacolumn-gap: 3rem;
-
column-gap-7
impostacolumn-gap: 4rem;
-
column-gap-8
impostacolumn-gap: 5rem;
A questo link puoi trovare molte altre classi che ti possono essere utili DOCS
Ritona il valore del record di un form
var record = context.panels.user_detail.getRecord()
-- todo: wip
context.panels.user_detail.save();
context.panels.panel_id.load(args);
Il metodo load
carica il form partendo dallo store contenuto nel file .js
presente nella sezione code sotto la voce form store
.
Se ad esempio il nostro form ha come id user_detail
allora dovremmo cercare il file situato in:
code
│
└───form store
└───user_detail.js
es: context.panels.user_detail.load({uid:"pippo"});
N.B. come si può intuire, se 2 pannelli hanno lo stesso id
useranno lo stesso store. Questo può tornare molto utile quando si vogliono realizzare finestre diverse con pannelli diversi ma che condividono lo stesso store.
Di seguito un esempio di store:
const uid = req.query.uid;
const tenant = req.headers.tenant;
...your logic
const ret = {
uid: user.uid,
displayName: user.displayName,
email: user.email,
emailVerified: user.emailVerified,
disabled: user.user.disabled ,
lastSignInTime: user.metadata.lastSignInTime,
creationTime: user.metadata.creationTime,
userRoles: userRoles,
rolesAvailable: rolesAvailable
};
return ret;
Gli eventi sono delle funzioni che si possono definire all'interno dell'oggetto rappresentante il controllo del form.
items: [{
colNumber: "col-12 md:col-6",
fieldMargin: "mt-4",
type: "textInput",
hasFloatingLabel: true,
value: "",
width: "w-full",
id: "windowId",
disabled: false,
label: "Id finestra",
onChange: function (event, context, value) {
//enjoy!!
console.log(context.panels.window_header.getRecord())
}
},
...
]
onChange : function (event, context, value) ;
-
theme
light / vs-dark / hc-black defaultValue
value
theme
defaultLanguage
language
enable
classNames
labelClassName
fieldClassName
disable(boolean enable)
-
value
: array dei valori selezionati (in alternativa viene usato record[config.id] ) -
descriptionField
: attributo dei valori disponibili da usare per la descrizione -
filterField
: campo dell'oggetto da usare per filtrare i suggerimenti -
availableValues
: [in alternativa a availableValuesField] array valori dispnibili -
availableValuesField
: [in alternativa a availableValues] attributo del record contente l'array dei valori disponibili