tibi-docs/docs/projektkonfig/fields.md
2022-11-02 14:16:12 +00:00

4.4 KiB

fields

Felder im tibi-server müssen einen bestimmten Datentyp haben. Über die Admin-UI können die Felder über Widgets in unterschiedlichen Ausprägungen dargestellt werden (view-Widgets), bzw. dem Benutzer eine Eingabe abverlangen (input-Widgets).

Es gibt grundlegende Angaben, die jedes Feld haben muss um vom tibi-server akzeptiert zu werden. Darüber hinaus kann auch jedes Feld ein "meta" Objekt haben, was der Admin-UI mitteilt, wie es dieses Feld für Ausgabe und Eingabe behandel soll.

Zunächst folgt der grundlegende Aufbau des Feld-Objektes:

# Der Name des Feldes wird in der Datenbank zum Objekt ebenso
# wie in der Ein- und Ausgabe über die API verwendet.
name: date

# Über "type" wird der Datentyp in der Datenbank festgelegt.
# Mögliche Typen sind weiter unten aufgelistet.
type: date

# Direkt am Feld kann eine Index-Definition erfolgen.
# Folgende mögliche Werte können ihn die Liste aufgenommen werden:
# "single" - Standard-Index für diese Feld
# "unique" - Das Feld muss einen eindeutigen Wert haben
# "text"   - Alle "text"-Indexanganben aller Felder werden zu einem
#            gemeinsamen Volltext-Index kombiniert
#
# Die Angabe des Volltextindex ist besser unter "collections.X.indexes"
# vorzunehmen.
index:
    - single

# Jede Datenübertragung an des Server wird validiert, d.h. es werden
# keine Datentypen angenommen, die nicht zu "type" passen.
# Darüber hinaus kann via "validator" eine zusätzliche Validierung
# vorgenommen werden.
# Dazu gibt es ein extra Kapitel.
validator:
    required: true
    eval: new Date($this) > new Date()

# Und natürlich gibt es auch hier ein "meta" Objekt zur Steuerung
# der Admin-UI.
meta:
    # Das "label" des Feldes wird als Label vor dem Widget verwendet.
    label:
        de: Titel
        en: title

    # Abgelkeitet vom "type" gibt es Standard-Widgets. für spezielle
    # Aufgaben stehen aber eine Hand voll Widgets bereit, die später
    # beschrieben werden.
    widget: text

    # Standardwerte für neue Enträge können entweder direkt angegeben
    # werden oder via Javascript client-seitig generiert werden.
    # In den Kontext injizierte Variablen werden später beschrieben.
    defaultValue:
        # Das Ergebnis von "eval" wird hier als Standardwert verwendet.
        # (hier das aktuelle Datum)
        eval: new Date()

    # Sollen Felder abhängig von bestimmten Bedingungen ein- oder
    # ausgeblendet werden, geschieht das über Anweisungen in "dependsOn".
    dependsOn:
        # Das Feld wird nur eingeblendet wenn der Wert von "type"
        # (auf gleicher Ebene wie das Feld "date" selbst)
        #  gleich "news" ist.
        eval: $parent.type == "news"

validator Objekt

TODO

dependsOn und defaultValue Kontext

TODO

Datentypen

Via "type" wird der Datentyp des Feldes definiert. Folgende Datentypen sind möglich:

string

String wird für Zeichenketten verwendet. Das Standardwidget ohne weitere Angabe ist bei der Ausgabe die direkte Textausgabe und bei der Eingabe ein input-Element vom type="text".

number

Number wird sowohl für ganze Zahlen, wie auch für Gleitkommawerte definiert. Auch hier ist das Standard-Widget für die Eingabe ein input-Element, allerdings vom type="number".

boolean

Ein boolcher Wert, also true/false, wird über den Typ "boolean" definiert und standardmäßig als Checkbox dargestellt.

date

date als Datentyp kann sowohl Datumsangabe mit, als auch ohne Uhrzeit aufnehmen. Das Standardwidget ist die einfache Datumseingabe ohne Uhrzeit.

file

Der Datentyp "file" ist für Dateiuploads vorgesehen. Es daher standardmäßig ein Datei-Auswahl-Dialog als Widget für die Eingabe angeboten.

string[]

Für string-Arrays ist die Angabe des Widgets zwingend notwendig.

number[]

Auch für number-Arrays wird die Widget-Angabe erwartet.

object

"object" ist ein spezieller Datentyp der zur Strukturierung der API und der Eingabe dient. Dieser Datentyp fasst "subFields" zusammen.

object[]

Wie "object" fasst auch das "object"-Array "subFields" zusammen. Diese allerdings als Liste von Objekten, anstatt als Einzelobjekt.

any

Felder vom Typ "any" können beliebige Daten aufnehmen. Die Validierung schlägt auf Basis der Typ-Validierung hier nie fehl.

Admin-UI Widgets

TODO

text

richText

number

checkbox

select

date

datetime

file

image

selectArray

checkboxArray

chipArray

object

objectArray

tabs