Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/vue/components/UtilityPanel/UtilityPanelDropdown.vue
3375 views
<template>
  <bx-dropdown
    v-model="selectedPanel"
    :value="selectedPanel"
    class="utility-panel-dropdown"
    trigger-content="Select resource"
    @bx-dropdown-selected="switchPanel($event)"
  >
    <bx-dropdown-item
      v-for="link in links"
      :key="link.label"
      class="utility-panel-dropdown__item"
      :value="link.label"
    >
      {{ $translate(link.label) }}
    </bx-dropdown-item>
  </bx-dropdown>
</template>

<script lang="ts">
import { Options, Vue, prop } from 'vue-class-component'
// using Carbon web-component from https://github.com/carbon-design-system/carbon-web-components#basic-usage
import 'carbon-web-components/es/components/dropdown/dropdown.js'
import 'carbon-web-components/es/components/dropdown/dropdown-item.js'

class Props {
  selectedPanel = prop<String>({})
}

@Options({})

export default class UtilityPanelHeader extends Vue.with(Props) {
  selectedPanel: string = 'Scratchpad'
  links = [
    {
      label: 'Scratchpad'
    },
    {
      label: 'Lesson Notes'
    },
    {
      label: 'Glossary'
    }
  ]

  mounted () {
    this.$emit('updatedPanelSelection', this.selectedPanel)
  }

  switchPanel (event: any) {
    // Segment analytics tracking
    const windowInstance = (window as any)
    const selectionTitle = event.detail.item.value
    const formattedTitle = selectionTitle.toLowerCase().replace(' ', '-')

    windowInstance.textbook.trackClickEvent(
      `chapter-details-dropdown-${formattedTitle}`,
      'chapter-details-panel'
    )

    this.$emit('updatedPanelSelection', selectionTitle)
    this.selectedPanel = selectionTitle
  }
}
</script>

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

.utility-panel-dropdown {
  width: 100%;

&__item {
    @include type-style('body-short-01');
    display: block;
    color: $link-color-secondary;
    text-decoration: none;
    background-color: $background-color-lighter;
  }

  // component overrides
  // selecting within the shadow
  &::part(trigger-button) {
    @include type-style('body-short-01');
    --cds-body-short-01-font-size: 1rem;
    background-color: $cool-gray-20;

    &:focus {
      outline: none;
    }
  }
}
</style>