Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/vue/components/Syllabus/SyllabusLayout.vue
3375 views
<template>
  <div class="syllabus">
    <!-- TODO: update section header description and provide translation -->
    <AccountMenu
      :first-name="firstName"
      :last-name="lastName"
      :active-menu-item="syllabusParentPath"
      :section-list="sectionList"
    />
    <div class="syllabus__container">
      <UserAccountSectionHeader>
        <template #title>
          {{ syllabus.name }}
        </template>
      </UserAccountSectionHeader>
      <SyllabusView :syllabus="syllabus" :user-is-logged-in="userIsLoggedIn" />
    </div>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue-demi'
import { getActiveSyllabus, Syllabus } from '../../../ts/syllabus'
import { ACCOUNT_MENU_LINKS } from '../constants/accountMenuLinks'
import UserAccountSectionHeader from '../UserAccount/UserAccountSectionHeader.vue'
import AccountMenu from '../UserAccount/AccountMenu.vue'
import SyllabusView from './SyllabusView.vue'

export default defineComponent({
  name: 'SyllabusLayout',
  components: {
    UserAccountSectionHeader,
    SyllabusView,
    AccountMenu
  },
  props: {
    firstName: { type: String, required: false, default: '' },
    lastName: { type: String, required: false, default: '' }
  },
  data () {
    return {
      syllabus: undefined as Syllabus | undefined,
      sectionList: ACCOUNT_MENU_LINKS,
      syllabusParentPath: '/account/classroom'
    }
  },
  computed: {
    userIsLoggedIn () {
      if (this.firstName !== '' || this.lastName !== '') {
        return true
      }
      return false
    }
  },
  mounted () {
    this.syllabus = getActiveSyllabus()
  }
})
</script>

<style lang="scss" scoped>
@import 'carbon-components/scss/globals/scss/typography';
@import '~/../scss/variables/mq.scss';
@import '~/../scss/mixins/mixins.scss';

.syllabus {
  display: grid;
  grid-template-columns: 17rem 1fr;
  height: calc(100vh - 60px);

  @include mq($from: medium, $until: large) {
    grid-template-columns: 12rem 1fr;
  }

  @include mq($until: medium) {
    grid-template-columns: 1fr;
    grid-template-rows: min-content 1fr;
  }

  &__container {
    margin-left: 0;
    padding: $spacing-07 $spacing-08;
  }

  &__not-found {
    @include type-style('expressive-heading-04');
    padding-top: $spacing-07;
  }
}
</style>