cartodb-4.42/lib/assets/javascripts/new-dashboard/components/Settings/Ordering.vue
2024-04-06 05:25:13 +00:00

96 lines
2.4 KiB
Vue

<template>
<div class="section">
<h6 class="text is-xsmall is-txtSoftGrey u-tupper letter-spacing">{{ $t('SettingsDropdown.orderMaps') }}</h6>
<ul class="list">
<li class="type text is-caption is-txtGrey" v-for="ordering in orderings" :key="ordering.name" :class="{ 'type--selected': isOrderApplied(ordering.order, ordering.direction) }">
<a class="element" v-if="!ordering.options" :class="{ 'element--selected': isOrderApplied(ordering.order, ordering.direction) }" @click="setOrder(ordering.order, ordering.direction)">
{{ $t(`SettingsDropdown.order.${ordering.name}`) }}
</a>
<template v-else>
{{ $t(`SettingsDropdown.order.${ordering.name}.title`) }} (
<span v-for="(option, index) in ordering.options" :key="option">
<a :key="option" class="element" :class="{ 'element--selected': isOrderApplied(ordering.order, option) }" @click="setOrder(ordering.order, option)">
{{ $t(`SettingsDropdown.order.${ordering.name}.${option}`) }}
</a>
<span v-if="index < ordering.options.length - 1">|</span>
</span>
)
</template>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Ordering',
props: {
orderings: Array,
order: String,
orderDirection: String
},
methods: {
isOrderApplied (order, direction) {
return direction
? (this.$props.order === order) && (this.$props.orderDirection === direction)
: this.$props.order === order;
},
setOrder (order, direction) {
this.$emit('orderChanged', { order, direction });
}
}
};
</script>
<style lang="scss" scoped>
@import 'new-dashboard/styles/variables';
.section {
padding: 24px 12px 24px 36px;
border-bottom: none;
background-color: #FFF;
background-color: $softblue;
}
.list {
margin-top: 8px;
}
.type {
margin-bottom: 8px;
&:last-of-type {
margin-bottom: 0;
}
&.type--selected {
position: relative;
&::before {
content: "";
position: absolute;
top: 50%;
left: -22px;
width: 14px;
height: 14px;
transform: translateY(-50%);
background-image: url("../../assets/icons/common/check.svg");
background-repeat: no-repeat;
background-position: center;
}
}
}
.element {
text-decoration: none;
cursor: pointer;
&.element--selected {
color: $text__color;
pointer-events: none;
}
}
</style>