Refactor CompetenceDetail component

This commit is contained in:
Christian Cueni 2022-12-06 07:49:03 +01:00
parent 934d4c6945
commit 91c19f29b4
4 changed files with 1453 additions and 36 deletions

View File

@ -8,32 +8,48 @@ import { ref } from "vue";
const competenceStore = useCompetenceStore(); const competenceStore = useCompetenceStore();
const props = defineProps<{ interface Props {
competence: CompetencePage; competence: CompetencePage;
}>(); isInline?: boolean;
}
const props = withDefaults(defineProps<Props>(), {
isInline: false,
});
const isOpen = ref(false); const isOpen = ref(false);
const togglePerformanceCriteria = () => { function togglePerformanceCriteria() {
isOpen.value = !isOpen.value; isOpen.value = !isOpen.value;
}; }
</script> </script>
<template> <template>
<div> <div>
<div :class="{ 'pb-8 border-b mb-4': isOpen }" class="-mx-8 px-8"> <div :class="{ 'pb-8 border-b mb-4': isOpen }" class="-mx-8 px-8">
<div <div
class="mb-4 flex flex-row justify-between items-center" class="flex flex-row justify-between items-center"
:class="props.isInline ? '' : 'mb-4'"
role="button" role="button"
aria-pressed="false" aria-pressed="false"
@click="togglePerformanceCriteria()" @click="togglePerformanceCriteria()"
> >
<h2 class="text-large"> <h2 :class="props.isInline ? ['text-bold', 'w-2/5'] : 'text-large'">
{{ competence.competence_id }} {{ competence.title }} {{ competence.competence_id }} {{ competence.title }}
</h2> </h2>
<ItToggleArrow :is-open="isOpen"></ItToggleArrow> <CompetenceProgress
v-if="isInline"
class="w-[330px]"
:status-count="
competenceStore.calcStatusCount(
competenceStore.criteriaByCompetence(competence)
)
"
></CompetenceProgress>
<ItToggleArrow :is-open="isOpen" :small="isInline"></ItToggleArrow>
</div> </div>
<CompetenceProgress <CompetenceProgress
v-if="!isInline"
:status-count=" :status-count="
competenceStore.calcStatusCount( competenceStore.calcStatusCount(
competenceStore.criteriaByCompetence(competence) competenceStore.criteriaByCompetence(competence)

View File

@ -1,5 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
interface Props { interface Props {
isOpen: boolean; isOpen: boolean;
small?: boolean; small?: boolean;
@ -10,14 +9,14 @@ const props = withDefaults(defineProps<Props>(), {
small: false, small: false,
}); });
function sizeClasses(isSmall: boolean) { function sizeClasses() {
return isSmall ? ["h-8", "w-8"] : ["h-10", "w-10"]; return props.small ? ["h-8", "w-8"] : ["h-10", "w-10"];
} }
</script> </script>
<template> <template>
<div class="transition-transform" :class="{ 'rotate-180': isOpen }"> <div class="transition-transform" :class="{ 'rotate-180': isOpen }">
<it-icon-arrow-down :class="sizeClasses(small)" aria-hidden="true" /> <it-icon-arrow-down :class="sizeClasses()" aria-hidden="true" />
</div> </div>
</template> </template>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ module.exports = {
"handlungsfelder-overview": "handlungsfelder-overview":
"url('/static/icons/icon-handlungsfelder-overview.svg')", "url('/static/icons/icon-handlungsfelder-overview.svg')",
"lernmedien-overview": "url('/static/icons/icon-lernmedien-overview.svg')", "lernmedien-overview": "url('/static/icons/icon-lernmedien-overview.svg')",
"message": "url('/static/icons/icon-message.svg')", message: "url('/static/icons/icon-message.svg')",
}, },
borderColor: (theme) => ({ borderColor: (theme) => ({
DEFAULT: theme("colors.gray.500"), DEFAULT: theme("colors.gray.500"),