fix: Due date badge in dark mode / compact mode (fix #4386)

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2023-08-30 16:30:32 +02:00
parent 08bc7b163b
commit f53785ef54

View File

@@ -21,18 +21,31 @@
--> -->
<template> <template>
<div v-if="card" class="duedate"> <div v-if="card" class="duedate" :data-due-state="dueState">
<transition name="zoom"> <transition name="zoom">
<div v-if="card.duedate" :class="dueIcon" :title="absoluteDate"> <div v-if="card.duedate" class="due" :title="absoluteDate">
<span>{{ relativeDate }}</span> <Clock v-if="overdue" :size="16" />
<ClockOutline v-else :size="16" />
<span v-if="!compactMode" class="due--label">{{ relativeDate }}</span>
</div> </div>
</transition> </transition>
</div> </div>
</template> </template>
<script> <script>
import { mapState } from 'vuex'
import moment from '@nextcloud/moment' import moment from '@nextcloud/moment'
import Clock from 'vue-material-design-icons/Clock.vue'
import ClockOutline from 'vue-material-design-icons/ClockOutline.vue'
import CalendarAlert from 'vue-material-design-icons/CalendarAlert.vue'
import CalendarBlank from 'vue-material-design-icons/CalendarBlank.vue'
const DueState = {
Future: 'Future',
Next: 'Next',
Now: 'Now',
Overdue: 'Overdue',
}
export default { export default {
name: 'DueDate', name: 'DueDate',
props: { props: {
@@ -41,19 +54,32 @@ export default {
default: null, default: null,
}, },
}, },
components: {
Clock,
ClockOutline,
CalendarAlert,
CalendarBlank,
},
computed: { computed: {
dueIcon() { ...mapState({
compactMode: state => state.compactMode,
}),
dueState() {
const days = Math.floor(moment(this.card.duedate).diff(this.$root.time, 'seconds') / 60 / 60 / 24) const days = Math.floor(moment(this.card.duedate).diff(this.$root.time, 'seconds') / 60 / 60 / 24)
if (days < 0) { if (days < 0) {
return 'icon-calendar due icon overdue' return DueState.Overdue
} }
if (days === 0) { if (days === 0) {
return 'icon-calendar-dark due icon now' return DueState.Now
} }
if (days === 1) { if (days === 1) {
return 'icon-calendar-dark due icon next' return DueState.Overdue
} }
return 'icon-calendar-dark due icon'
return DueState.Future
},
overdue() {
this.dueState === DueState.Overdue
}, },
relativeDate() { relativeDate() {
const diff = moment(this.$root.time).diff(this.card.duedate, 'seconds') const diff = moment(this.$root.time).diff(this.card.duedate, 'seconds')
@@ -63,49 +89,43 @@ export default {
return moment(this.card.duedate).fromNow() return moment(this.card.duedate).fromNow()
}, },
absoluteDate() { absoluteDate() {
return moment(this.card.duedate).format('L') return moment(this.card.duedate).format('LLLL')
}, },
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.icon.due { .due {
background-position: 4px center; background-position: 4px center;
border-radius: 3px; border-radius: var(--border-radius-large);
margin-top: 9px; margin-top: 9px;
margin-bottom: 9px; margin-bottom: 9px;
padding: 3px 0 3px 4px; padding: 2px 8px;
font-size: 90%; font-size: 90%;
display: flex; display: flex;
align-items: center; align-items: center;
flex-shrink: 1; flex-shrink: 1;
z-index: 2; z-index: 2;
.icon { [data-due-state="Overdue"] & {
background-size: contain; color: var(--color-main-background);
background-color: var(--color-error-text);
}
[data-due-state="Now"] & {
color: var(--color-main-background);
background-color: var(--color-warning);
} }
&.overdue {
color: var(--color-error-text);
padding: 3px 4px;
}
&.now {
color: var(--color-warning-text);
padding: 3px 4px;
}
&.next {
background-color: var(--color-background-dark);
padding: 3px 4px;
}
&::before,
span { span {
margin-left: 20px;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
} }
.due--label {
margin-left: 4px;
}
} }
@media print { @media print {