Skip to content

Activity Layout #834

@pmattmann

Description

@pmattmann

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
  • Print

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:
UML

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions