|
|
@@ -1,8 +1,9 @@
|
|
|
<template>
|
|
|
<div class="benevole-card">
|
|
|
<div class="benevole-card--title">{{ benevole.name }}</div>
|
|
|
- <div class="benevole-card--content" v-for="creneau in creneaux" :key="creneau.id">
|
|
|
- <creneau-viewer :creneau="creneau" />
|
|
|
+ <div v-for="(thisDayCreneauList, day) in personalCreneauListPerDay" :key="day">
|
|
|
+ <div class="benevole-card--day">{{ day }}</div>
|
|
|
+ <creneau-viewer v-for="creneau in thisDayCreneauList" :key="creneau.id" :creneau="creneau" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -12,6 +13,8 @@ import Benevole from "@/models/Benevole";
|
|
|
import Creneau from "@/models/Creneau";
|
|
|
import creneauViewer from "@/components/PrintableCreneauViewer.vue";
|
|
|
import { defineComponent, PropType } from "vue";
|
|
|
+import { Dictionary } from "lodash";
|
|
|
+import dayjs from "dayjs";
|
|
|
|
|
|
export default defineComponent({
|
|
|
components: { creneauViewer },
|
|
|
@@ -27,6 +30,29 @@ export default defineComponent({
|
|
|
.sort((a, b) => a.start.getTime() - b.start.getTime())
|
|
|
: [];
|
|
|
},
|
|
|
+ personalCreneauListPerDay(): Dictionary<Array<Creneau>> {
|
|
|
+ if (this.benevole !== undefined) {
|
|
|
+ const benevole = this.benevole;
|
|
|
+ return (
|
|
|
+ this.$store.state.creneauList
|
|
|
+ // filter creneau for this benevole
|
|
|
+ .filter((o) => o.benevoleIdList.indexOf(benevole.id) > -1)
|
|
|
+ // sort by date
|
|
|
+ .sort((a, b) => a.start.getTime() - b.start.getTime())
|
|
|
+ // Groupe créneau by day
|
|
|
+ .reduce((acc: Dictionary<Array<Creneau>>, creneau: Creneau) => {
|
|
|
+ const day = dayjs(creneau.start).format("dddd D MMMM");
|
|
|
+ if (!(day in acc)) {
|
|
|
+ acc[day] = [];
|
|
|
+ }
|
|
|
+ acc[day].push(creneau);
|
|
|
+ return acc;
|
|
|
+ }, {})
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return {};
|
|
|
+ }
|
|
|
+ },
|
|
|
},
|
|
|
});
|
|
|
</script>
|
|
|
@@ -34,15 +60,22 @@ export default defineComponent({
|
|
|
<style>
|
|
|
.benevole-card {
|
|
|
border: #000 solid 1px;
|
|
|
+ display: inline-block;
|
|
|
+ width: 100%;
|
|
|
+ vertical-align: top;
|
|
|
+ break-inside: avoid !important;
|
|
|
+ break-before: always;
|
|
|
+ -webkit-break-before: always;
|
|
|
}
|
|
|
.benevole-card--title {
|
|
|
color: #fff;
|
|
|
background: #000;
|
|
|
font-weight: bold;
|
|
|
- padding: 4px;
|
|
|
+ padding: 6px;
|
|
|
}
|
|
|
-.benevole-card--content {
|
|
|
- padding: 4px;
|
|
|
- border-bottom: #000 1px solid;
|
|
|
+.benevole-card--day {
|
|
|
+ color: #fff;
|
|
|
+ background: #333;
|
|
|
+ padding: 6px;
|
|
|
}
|
|
|
</style>
|