61 lines
1.7 KiB
Vue
61 lines
1.7 KiB
Vue
<script setup lang="ts">
|
|
import PerformanceCriteriaRow from "@/components/competences/PerformanceCriteriaRow.vue";
|
|
import ItProgress from "@/components/ui/ItProgress.vue";
|
|
import ItToggleArrow from "@/components/ui/ItToggleArrow.vue";
|
|
import { useCompetenceStore } from "@/stores/competence";
|
|
import type { CompetencePage } from "@/types";
|
|
import { ref } from "vue";
|
|
|
|
const competenceStore = useCompetenceStore();
|
|
|
|
const props = defineProps<{
|
|
competence: CompetencePage;
|
|
}>();
|
|
|
|
const isOpen = ref(false);
|
|
|
|
const togglePerformanceCriteria = () => {
|
|
isOpen.value = !isOpen.value;
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div :class="{ 'pb-8 border-b mb-4': isOpen }" class="-mx-8 px-8">
|
|
<div
|
|
class="mb-4 flex flex-row justify-between items-center"
|
|
role="button"
|
|
aria-pressed="false"
|
|
@click="togglePerformanceCriteria()"
|
|
>
|
|
<h2 class="text-large">
|
|
{{ competence.competence_id }} {{ competence.title }}
|
|
</h2>
|
|
<div class="transition-transform" :class="{ 'rotate-180': isOpen }">
|
|
<it-icon-arrow-down class="h-10 w-10" aria-hidden="true" />
|
|
</div>
|
|
</div>
|
|
<ItProgress
|
|
:status-count="
|
|
competenceStore.calcStatusCount(
|
|
competenceStore.criteriaByCompetence(competence)
|
|
)
|
|
"
|
|
></ItProgress>
|
|
</div>
|
|
<ul v-if="isOpen">
|
|
<li
|
|
v-for="performanceCriteria in competenceStore.criteriaByCompetence(competence)"
|
|
:key="performanceCriteria.id"
|
|
class="mb-4 pb-4 border-b"
|
|
>
|
|
<PerformanceCriteriaRow
|
|
:criteria="performanceCriteria"
|
|
:show-state="true"
|
|
></PerformanceCriteriaRow>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</template>
|
|
<style lang="scss" scoped></style>
|