2024-11-21 10:08:37 +01:00
|
|
|
<template>
|
|
|
|
|
<div class="dialog__inner">
|
|
|
|
|
<header class="flex">
|
|
|
|
|
<div class="options-selector">
|
|
|
|
|
<button
|
|
|
|
|
v-for="(track, index) in tracks"
|
|
|
|
|
class="btn btn--image"
|
2024-12-17 15:08:03 +01:00
|
|
|
:aria-pressed="activeTracks.includes(track) ? true : false"
|
2024-11-21 10:08:37 +01:00
|
|
|
:aria-controls="track.slug"
|
2024-12-16 15:46:19 +01:00
|
|
|
:style="`--btn-image: url(${getFrontViewUrl(track)});`"
|
2024-12-17 15:08:03 +01:00
|
|
|
@click="selectTrack(track)"
|
2024-11-21 10:08:37 +01:00
|
|
|
>
|
|
|
|
|
<span>{{ track.title }}</span>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2024-12-17 15:08:03 +01:00
|
|
|
<button
|
|
|
|
|
class="btn | ml-auto"
|
2024-12-17 15:26:04 +01:00
|
|
|
:class="{ 'btn--secondary': isCompareModeEnabled }"
|
2024-12-17 15:08:03 +01:00
|
|
|
@click="isCompareModeEnabled = !isCompareModeEnabled"
|
|
|
|
|
>
|
2024-12-17 15:29:26 +01:00
|
|
|
<span>{{
|
|
|
|
|
isCompareModeEnabled
|
|
|
|
|
? "Quitter le mode comparer"
|
|
|
|
|
: "Comparer les pistes"
|
|
|
|
|
}}</span>
|
2024-11-21 10:08:37 +01:00
|
|
|
</button>
|
|
|
|
|
</header>
|
|
|
|
|
|
2024-11-22 10:02:39 +01:00
|
|
|
<div class="track">
|
2024-12-17 15:08:03 +01:00
|
|
|
<template v-for="activeTrack in activeTracks" :key="activeTrack.title">
|
|
|
|
|
<Interactive360
|
|
|
|
|
v-if="activeTrack.files.length > 1"
|
|
|
|
|
:activeTrack="activeTrack"
|
|
|
|
|
/>
|
|
|
|
|
<figure v-else>
|
|
|
|
|
<img :src="activeTrack.files[0].url" alt="" />
|
|
|
|
|
</figure>
|
|
|
|
|
</template>
|
2024-12-17 15:29:26 +01:00
|
|
|
<div
|
|
|
|
|
v-if="isCompareModeEnabled && activeTracks.length < 2"
|
|
|
|
|
class="track-empty | bg-white rounded-xl w-full p-32"
|
|
|
|
|
>
|
2024-12-17 15:26:04 +01:00
|
|
|
<p>Cliquez sur la piste que vous souhaitez comparer</p>
|
|
|
|
|
</div>
|
2024-11-21 10:08:37 +01:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<script setup>
|
2024-12-17 15:13:34 +01:00
|
|
|
import { ref, computed, watch } from "vue";
|
2024-11-21 10:08:37 +01:00
|
|
|
import { storeToRefs } from "pinia";
|
|
|
|
|
import { usePageStore } from "../../../stores/page";
|
2024-12-16 15:46:19 +01:00
|
|
|
import Interactive360 from "./Interactive360.vue";
|
2024-12-19 17:18:26 +01:00
|
|
|
import { useDialogStore } from "../../../stores/dialog";
|
2024-11-21 10:08:37 +01:00
|
|
|
|
|
|
|
|
const { page } = storeToRefs(usePageStore());
|
2024-12-19 17:18:26 +01:00
|
|
|
const { isCommentsOpen, isCommentPanelEnabled } = storeToRefs(useDialogStore());
|
2024-11-21 10:08:37 +01:00
|
|
|
|
|
|
|
|
const tracks = computed(
|
2024-12-19 17:29:44 +01:00
|
|
|
() =>
|
|
|
|
|
page.value.steps.find((step) => step.slug === "virtual-sample").files
|
|
|
|
|
.dynamic
|
2024-11-21 10:08:37 +01:00
|
|
|
);
|
|
|
|
|
|
2024-12-17 15:08:03 +01:00
|
|
|
const isCompareModeEnabled = ref(false);
|
2024-12-17 15:13:34 +01:00
|
|
|
watch(isCompareModeEnabled, (newValue) => {
|
2024-12-19 17:18:26 +01:00
|
|
|
if (newValue) {
|
|
|
|
|
isCommentsOpen.value = false;
|
|
|
|
|
isCommentPanelEnabled.value = false;
|
|
|
|
|
} else {
|
|
|
|
|
isCommentPanelEnabled.value = true;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-17 15:29:26 +01:00
|
|
|
if (!newValue && activeTracks.value.length === 2) {
|
2024-12-17 15:13:34 +01:00
|
|
|
activeTracks.value.pop();
|
|
|
|
|
}
|
|
|
|
|
});
|
2024-12-17 15:08:03 +01:00
|
|
|
|
|
|
|
|
const activeTracks = ref([tracks.value[0]]);
|
2024-11-21 10:08:37 +01:00
|
|
|
|
2024-12-16 15:46:19 +01:00
|
|
|
function getFrontViewUrl(track) {
|
|
|
|
|
if (track.files.length > 1) {
|
|
|
|
|
return track.files[7].url;
|
2024-12-16 15:29:54 +01:00
|
|
|
} else {
|
2024-12-16 15:46:19 +01:00
|
|
|
return track.files[0].url;
|
2024-12-16 15:29:54 +01:00
|
|
|
}
|
2024-12-16 15:46:19 +01:00
|
|
|
}
|
2024-12-17 15:08:03 +01:00
|
|
|
|
|
|
|
|
function selectTrack(track) {
|
2024-12-17 15:29:26 +01:00
|
|
|
if (!isCompareModeEnabled.value) {
|
|
|
|
|
activeTracks.value = [track];
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (activeTracks.value.length === 1 && !activeTracks.value.includes(track)) {
|
|
|
|
|
activeTracks.value.push(track);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (activeTracks.value.length === 2) {
|
2024-12-17 15:08:03 +01:00
|
|
|
if (activeTracks.value.includes(track)) {
|
2024-12-17 15:29:26 +01:00
|
|
|
removeTrack(track);
|
2024-12-17 15:08:03 +01:00
|
|
|
} else {
|
2024-12-17 16:35:32 +01:00
|
|
|
activeTracks.value.pop();
|
2024-12-17 15:08:03 +01:00
|
|
|
activeTracks.value.push(track);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-17 15:29:26 +01:00
|
|
|
|
|
|
|
|
function removeTrack(track) {
|
|
|
|
|
activeTracks.value = activeTracks.value.filter(
|
|
|
|
|
(activeTrack) => activeTrack.title !== track.title
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-11-21 10:08:37 +01:00
|
|
|
</script>
|
2024-12-16 15:29:54 +01:00
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
.track figure {
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.track .drag-zone {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
z-index: 2;
|
|
|
|
|
}
|
|
|
|
|
</style>
|