name: page
uploadPath: ../media/page

meta:
    label: Inhalt
    muiIcon: tableOfContents
    allowExportAll: true
    backup:
        active: true
        collectionName: backups
    defaultSort:
        field: sort
        order: MANUALLY
    views:
        - type: simpleList
          selectionPriority: 0
          primaryText: pageTitle
          secondaryText: path
          mediaQuery: "(min-width: 0px)"
          tertiaryText: type
        - type: table
          selectionPriority: 1
          mediaQuery: "(min-width: 700px)"
          columns:
              - source: type
                name: Typ
                filter: true
              - source: path
                name: Pfad
                filter: true
              - source: pageTitle
                name: Titel
                filter: true
              - source: active
                name: Aktiv
                filter: true

    tablist:
        activeTab: general

        tabs:
            - name: general
              label: Allgemein
              subFields:
                  - source: path
                  - source: pageTitle
                  - source: type
                  - source: active
                  - source: sort

            - name: teaser
              label: Homepage Seitenteaser
              subFields:
                  - source: teaser

            - name: personPreview
              label: Personenvorschau
              subFields:
                  - source: personType
                  - source: personPreview

            - name: jobOffer
              label: Job Angebot
              subFields:
                  - source: jobOffer

            - name: site
              label: Seite
              subFields:
                  - source: rows

            - name: meta
              label: Meta
              subFields:
                  - source: meta

    subNavigation:
        - name: seite
          label:
              de: Seiten
              en: pages
          muiIcon: book-open-page-variant
          defaultSort:
              field: "sort"
              order: "MANUALLY"
          setDefault:
              field: type
              value: page

          views:
              - type: table
                columns:
                    - source: path
                      name: Pfad
                      filter: true
                    - source: pageTitle
                      name: Titel
                      filter: true
                    - source: active
                      name: Aktiv
                      filter: true

          filter:
              type: page

        - name: teamMembers
          label:
              de: Teammitglieder
              en: Team members
          muiIcon: accountGroup
          setDefault:
              field: type
              value: teamMembers
          defaultSort:
              field: "sort"
              order: "MANUALLY"
          views:
              - type: table
                columns:
                    - source: path
                      name: Pfad
                      fiter: true
                    - source: personType
                      name: Typ
                      filter: true
                    - source: pageTitle
                      name: Titel
                      filter: true
                    - source: active
                      name: Aktiv
                      filter: true
          filter:
              type: teamMembers

        - name: jobOffers
          label:
              de: Stellenanzeigen
              en: Job offers
          muiIcon: briefcase
          setDefault:
              field: type
              value: jobOffers
          defaultSort:
              field: "sort"
              order: "MANUALLY"
          views:
              - type: table
                columns:
                    - source: path
                      name: Pfad
                      filter: true
                    - source: pageTitle
                      name: Titel
                      filter: true
                    - source: active
                      name: Aktiv
                      filter: true

          filter:
              type: jobOffers

imageFilter:
    xs:
        - fit: true
          height: 90
          width: 90
          resampling: lanczos
          quality: 60
    s:
        - fit: true
          height: 300
          width: 300
          resampling: lanczos
          quality: 60
    m:
        - fit: true
          height: 600
          width: 600
          resampling: lanczos
          quality: 60
    l:
        - fit: true
          height: 1240
          width: 1240
          resampling: lanczos
          quality: 60
    xl:
        - fit: true
          height: 2000
          width: 2000
          resampling: lanczos
          quality: 60

permissions:
    public:
        methods:
            get: true
            post: false
            put: false
            delete: false
    user:
        methods:
            get: true
            post: true
            put: true
            delete: true

hooks:
    post:
        return:
            type: javascript
            file: hooks/clear_cache.js
    put:
        return:
            type: javascript
            file: hooks/clear_cache.js

projections:
    navigation:
        select:
            path: 1

fields:
    - type: string
      name: path
      meta:
          label: Pfad
          helperText: "Ein Pfad sollte mit einem / starten und ohne eins enden."
          containerProps:
              layout:
                  size:
                      default: "col-6"
                      small: "col-12"
                      large: "col-6"

    - type: boolean
      name: active
      meta:
          label: Aktiv
          helperText: Ist dies Aktiviert, so wird die Seite verfügbar.
          defaultValue: true
          containerProps:
              layout:
                  size:
                      default: "col-6"
                      small: "col-12"
                      large: "col-6"

    - type: string
      name: type
      meta:
          label: Inhaltstyp
          widget: select
          defaultValue: page
          containerProps:
              layout:
                  size:
                      default: "col-6"
                      small: "col-12"
                      large: "col-6"
          choices:
              - name: Seite
                id: page

              - name: Teammitglieder
                id: teamMembers

              - name: Stellenanzeigen
                id: jobOffers

    - name: pageTitle
      type: string
      meta:
          label: Titel der Seite
          helperText: "Dieser Titel wird in der Seite als h1 angezeigt."
          containerProps:
              layout:
                  size:
                      default: "col-6"
                      small: "col-12"
                      large: "col-6"

    - name: personType
      type: string
      meta:
          label: Typ
          widget: select
          defaultValue: chef
          dependsOn:
              eval: $.type == "teamMembers"

          choices:
              - name: Chef
                id: chef

              - name: Mitarbeiter
                id: employee

    - name: personPreview
      type: object
      meta:
          label: Personenvorschau
          dependsOn:
              eval: $.type == "teamMembers"
      subFields:
          - name: initialImage
            type: string
            meta:
                label: Bild
                containerProps:
                    layout:
                        size:
                            default: "col-6"
                            small: "col-12"
                            large: "col-6"
                dependsOn:
                    eval: $.personType == 'chef'
                widget: foreignKey # Verwendetes Widget.
                foreign:
                    collection: medialib # Name der Sammlung, in der die ausgewählten Daten gespeichert sind.
                    id: id # Feldname, das als eindeutige Kennung für die ausgewählten Daten verwendet wird.
                    subNavigation: 0 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird.
                    #projection: xyz
                    #sort: "title"
                    render:
                        defaultCollectionViews: true

          - name: hoverImage
            type: string
            meta:
                label: Bild beim Hover
                containerProps:
                    layout:
                        size:
                            default: "col-6"
                            small: "col-12"
                            large: "col-6"
                dependsOn:
                    eval: $.personType == 'chef'
                widget: foreignKey # Verwendetes Widget.
                foreign:
                    collection: medialib # Name der Sammlung, in der die ausgewählten Daten gespeichert sind.
                    id: id # Feldname, das als eindeutige Kennung für die ausgewählten Daten verwendet wird.
                    subNavigation: 0 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird.
                    #projection: xyz
                    #sort: "title"
                    render:
                        defaultCollectionViews: true

          - name: name
            type: string
            meta:
                label: Name

    - !include fields/teaserHomepage.yml

    - name: jobOffer
      type: object
      meta:
          label: Job Angebot
          dependsOn:
              eval: $.type == "jobOffers"
      subFields:
          - name: title
            type: string
            meta:
                label: Titel

          - name: text
            type: string
            meta:
                widget: richtext
                label: Text

          - name: emailButton
            type: boolean
            meta:
                label: E-Mail Button Anzeigen

          - name: emailSubject
            type: string
            meta:
                label: E-Mail Betreff
                dependsOn:
                    eval: $parent.emailButton == true

    - name: rows
      type: object[]
      meta:
          label: Zeilen
          widget: grid
          dependsOn:
              eval: $.type != "jobOffers" && ($.type != "teamMembers" || $.personType == "chef")
          metaElements:
              - source: backgroundImage
              - source: noBottomMargin
              - source: noTopMargin
              - source: flexWrapNormal
              - source: twoToThree
              - source: nextPage

      subFields: !include fieldLists/row.yml

    - name: meta
      type: object
      meta:
          label: Meta Agaben
          dependsOn:
              eval: $.type == "page"
      subFields:
          - name: title
            type: string
            meta:
                label: Titel
                containerProps:
                    layout:
                        size:
                            default: "col-6"
                            small: "col-12"
                            large: "col-6"

          - name: description
            type: string
            meta:
                label: Beschreibung
                containerProps:
                    layout:
                        size:
                            default: "col-6"
                            small: "col-12"
                            large: "col-6"
          - name: keywords
            type: string
            meta:
                label: Schlüsselwörter
    - name: sort
      type: number
      meta:
          label:
              de: Manuelle Sortierung
              en: Manual Sorting
          inputProps:
              { readonly: true, placeholder: { de: "Wert wird automatisch gesetzt", en: "Value is set automatically" } }
          helperText:
              de: Dieses Feld wird für die manuelle Sortierung benötigt. Sobald ein Eintrag per Drag&Drop verschoben wurde, wird die neue Position innerhalb der Liste eingetragen.
              en: This field is required for manual sorting. As soon as an entry is moved using Drag&Drop, the new position is entered in the list.
