api-client/components/layout/section.vue

117 lines
2.1 KiB
Vue
Raw Normal View History

<template>
2020-02-24 18:44:50 +00:00
<fieldset :id="label.toLowerCase()" :class="{ 'no-colored-frames': !frameColorsEnabled }">
2019-10-25 08:14:34 +00:00
<legend @click.prevent="collapse">
<span>{{ label }}</span>
2019-12-02 15:20:20 +00:00
<i class="material-icons">
{{ isCollapsed(label) ? "expand_more" : "expand_less" }}
2019-12-02 15:20:20 +00:00
</i>
2019-10-25 08:14:34 +00:00
</legend>
2020-02-25 16:10:40 +00:00
<div class="collapsible" :class="{ hidden: isCollapsed(label.toLowerCase()) }">
<slot />
</div>
</fieldset>
</template>
<style scoped lang="scss">
2020-06-19 17:37:40 +00:00
fieldset {
margin: 16px 0;
border-radius: 8px;
background-color: var(--bg-dark-color);
transition: all 0.2s ease-in-out;
legend {
display: inline-block;
align-items: center;
justify-content: center;
color: var(--fg-color);
font-weight: 700;
cursor: pointer;
transition: all 0.2s ease-in-out;
* {
vertical-align: middle;
}
i {
margin-left: 8px;
}
}
&.blue legend {
color: #57b5f9;
}
&.gray legend {
color: #bcc2cd;
}
&.green legend {
color: #50fa7b;
}
&.cyan legend {
color: #8be9fd;
}
&.purple legend {
color: #bd93f9;
}
&.orange legend {
color: #ffb86c;
}
&.pink legend {
color: #ff79c6;
}
&.red legend {
color: #ff5555;
}
&.yellow legend {
color: #f1fa8c;
}
}
2019-11-02 05:32:21 +00:00
fieldset.no-colored-frames legend {
color: var(--fg-color);
}
</style>
<script>
2019-11-02 05:32:21 +00:00
export default {
computed: {
frameColorsEnabled() {
2020-02-25 16:10:40 +00:00
return this.$store.state.postwoman.settings.FRAME_COLORS_ENABLED || false
2020-02-24 18:44:50 +00:00
},
sectionString() {
2020-02-25 16:33:02 +00:00
return `${this.$route.path.replace(/\/+$/, "")}/${this.label}`
2020-02-25 16:10:40 +00:00
},
2019-11-02 05:32:21 +00:00
},
2019-10-25 08:14:34 +00:00
2019-11-02 05:32:21 +00:00
props: {
label: {
type: String,
default: "Section",
2019-10-22 12:02:26 +00:00
},
2019-11-02 05:32:21 +00:00
collapsed: {
2020-02-24 18:44:50 +00:00
type: Boolean,
},
2019-11-02 05:32:21 +00:00
},
2019-11-02 05:32:21 +00:00
methods: {
collapse({ target }) {
2020-02-25 16:10:40 +00:00
const parent = target.parentNode.parentNode
parent.querySelector(".collapsible").classList.toggle("hidden")
2020-02-25 16:41:02 +00:00
2020-02-25 07:04:10 +00:00
// Save collapsed section into the collapsedSections array
2020-02-25 16:10:40 +00:00
this.$store.commit("setCollapsedSection", this.sectionString)
2020-02-24 18:44:50 +00:00
},
isCollapsed(label) {
2020-02-25 16:10:40 +00:00
return this.$store.state.theme.collapsedSections.includes(this.sectionString) || false
},
},
}
2019-08-25 08:37:21 +00:00
</script>