-
Notifications
You must be signed in to change notification settings - Fork 61
Description
Activity Layout
Dies wird wieder zum Thema, da es die Entität ActivityType nicht mehr gibt. ActivityType hat bisher das zu verwendende Layout bestimmt. Bisher haben wir nur ein Layout "General", welches alle ActivityContents in einer bestimmten Reihenfolge linear darstellt.
Im PR #833 wurde das Layout "General" fixiert (da ActivityType nicht mehr existiert).
In diesem Issue soll diskutiert werden, wie zukünftig mit der Idee Activity-Layouts umgegangen werden soll.
Ein Layout: General
Als erste muss die Frage beantwortet werden, ob ein allgemeines Layout ausreichend ist.
Falls Ja, kann das Issue geschlossen werden.
Falls Nein, sollen hier einige Ideen diskutiert werden.
Varianten
Falls es mehrere Layouts geben soll, stellt sich die Frage der Granularität. Hier die Möglichkeiten
- Layout pro ActivityCategory
- Layout pro Activity
Vor- und Nachteile anhand der Anwenungsfälle (Desktop, Mobile, Print) pro Variante:
Anwendungsfall | Layout pro ActivityCategory | Layout pro Activity |
---|---|---|
Allgemein | ➕ Einfacher in der Handhabung | ➕ ActivityContent-Instancen könnten individuell platziert werden |
Desktop (Spalten Layout sinnvoll) |
➖ Gleiches Layout für alle Activities einer Category ➕ Für Leser einfacher, da alle Activities einer Category gleich aussehen |
➕ extrem flexibel |
Mobile (Nur 1-Spalten Layout) |
➖ Gleiche Reihenfolge für alle Activities einer Category | ➕ flexible Reihenfolge |
Print (Spalten Layout sinnvoll) |
➖ Gleiches Layout für alle Activities einer Category ➕ Für Leser einfacher, da alle Activities einer Category gleich aussehen |
➕ extrem flexibel ➖ unklar wie Benutzer-Handling funktioniert (evtl. Desktop-Layout verewnden? Ist das korrekt?) |
Folgende scheinen für mich gewichtig:
- ➕ Pro ActivityCategory ist einfacher in der Handhabung
- ➕ Pro Activity ist extrem flexibel
- Die Flexibilität hat bei Desktop & Print viel gewicht / bei Mobile-Layouts weniger. Diese sind trivial (1-Spalten-Layout mit Reihenfolge)
- Bei Desktop & Print geht es darum, ein Layout zu gestallten, welches auch gut aussieht, wenn bestimmt ActivityContents fehlen.
Möglicher Ausweg
Damit verschiedene Activities der gleichen ActivityCategory verschiedene Layouts haben können, könnte ich mir auch eine Layout-Collection pro ActivityCategory vorstellen, aus welcher pro Activity gewählt werden kann.
Dank einem möglichen Ausweg welcher einen grossen Teil der Flexibilität zurück bringen kann, wird hier die einfachere Variante weiter verfolgt.
Layout pro ActivityCategory
Auf der Ebene ActivityCategory ist unklar, welche und wieviele ActivityContents es geben wird. Es können daher "nur" ContentTypes platziert werden. Alle ActivityContents des gleichen ContentTypes werden an derselben Stelle dargestellt.
Die Reihenfolge der ActivityContents soll auf der ebene Activity definert werden können.
Es gibt somit zwei Themen zu beleuchten:
- Anordnung der ContentTypes
- Reihenfolge der ActivityContents
Anordnung der ContentTypes
Das Problem der Anordnung stellt sich für alle 3 Anwendungsfälle:
- Desktop
- Mobile
Für Desktop und Print sind Mehr-Spalten-Layouts denkbar. Bei Mobile sollte das definieren der ContentType-Reihenfolge ausreichend sein.
Desktop & Print
Hier sind komplexere Layouts denkbar. CSS-Grids könnten hier weiter helfen.
Im Falle von CSS-Grids müssen zwei Informationen erfasst werden:
- Grid-Layout
- Platzierung von ContentTypes im Grid
Grid-Layout
Hier würde ich möglichst einfach vorgehen.
- V1) Vordefinierte Layouts
- 1 Spalte
- 2 Spalten 30% / 70%
- 2 Spalten 50% / 50%
- 2 Spalten 70% / 30%
- 3 Spalten ...
- ...
- V2) Spalten-Editor
Platzierung von ContentTypes
Im Falle von CSS-Grids ist dies im Prinzip nur eine Reihenfolge mit allfälligen Zusätzinformationen (Col-Span; Row-Span).
Die Herausforderung hier besteht darin, dies dem Benutzer verständlich zu machen.
Mobile
Technisch reicht hier eine sortierte Liste der ContentTypes. Die Liste definiert, in welcher Reihenfolge die ContentTypes bei der Anziege einer Aktivität erscheinen sollen.
ContentTypes, welche nicht in der Liste enthalten sind (jedoch in der Aktivität vorhanden sind) werden am bei der Anzeige am Ende hinzugefügt (sortiert nach ContentType-Id (TBD)).
Datenmodel
Wenn möglich, soll das Backend nichts über das Frontend "wissen". Es soll daher nicht die Layout-Struktur eins zu eins in der Datenbank abgebildet werden.
Ich schlage daher folgendes Datenmodel vor:
Pro ActivityCategory können mehrere ActivityLayouts erfasst werden (anfangs vielleicht nur eines).
Beim erstellen eines neuen Lagers werden diese (analog zu ActivityCategory) von ActivityLayoutTemplate kopiert.
Ein ActivityLayout umfasst 3 Konfigurationen (Desktop, Mobile, Print). Damit im Backend keine Wissen vom Frontent verborgen ist, schlage ich vor, dass dies 3 JSON-Felder sind.
Layout-Data
{
"columns": [
{
"width": "200px"
},
{
"width": "10%"
},
{
"width": "auto"
}
],
"contentTypes": [
{
"contentType": "Storycontext"
},
{
"contentType": "Storyboard"
}
]
}
Notizen:
- Für Mobile-Layout darf Key "columns" fehlen; falls doch vorhandne, wird dieser ignoriert.
- Falls Mobile-Layout leer, wird Desktop-Layout verwendet (fallback)
- Falls Print-Layout leer, wird Desktop-Layout verwendet (fallback)
Vergleich zu heute:
Heute wird das Layout durch General.vue bestimmt.
Dies definiert im wesenltichen die Reihenfolge der ContentTypes. Ansonsten enthält es keine wesentliche Information.
Es sollte also nichts 'vergessen' gegangen sein.
Reihenfolge der ActivityContents
Hierzu soll auf der Entität ActivityContent die Spalte Pos ergänzt werden. Die ActivityContents werden sortiert nach der Spalte Pos dargestellt.