designtopack/src/components/project/client-brief/add-images-modal/AddImagesModal.vue

191 lines
4.3 KiB
Vue
Raw Normal View History

<template>
<Dialog
id="add-images"
v-model:visible="isOpen"
modal
header="Ajouter des images"
class="bg-white | text-grey-800 | rounded-2xl | overflow-hidden | p-32"
>
<div class="with-sidebar | h-full">
<nav>
<ul>
2024-10-09 16:32:10 +02:00
<li
v-for="tab in tabs"
:class="{ active: activeTab.name === tab.name }"
@click="activeTab = tab"
>
{{ tab.name }}
</li>
</ul>
</nav>
2024-10-09 16:32:10 +02:00
<div
class="with-sidebar | h-full"
data-side="right"
style="--sidebar-width: 26rem; gap: var(--gap)"
>
<div class="bg-grey-50 | rounded-2xl | p-8 | overflow-y">
<component :is="activeTab.component" :params="activeTab.params" />
</div>
<ImagesEditPanel />
</div>
</div>
</Dialog>
2024-10-09 18:21:14 +02:00
<Dialog
id="delete-image"
v-model:visible="deleteIsOpen"
modal
header="Êtes-vous sûr de vouloir supprimer cette image ?"
class="bg-white | text-grey-800 | rounded-2xl | overflow-hidden | text-center | w-full max-w | p-16 pt-32"
style="--row-gap: var(--space-32); --max-w: 40rem"
>
<p class="text-grey-700 | px-16">
Si vous supprimez cette image, celle-ci disparaîtra de votre brief ainsi que toutes les informations qui lui sont attribuées.
</p>
<template #footer>
<button
class="btn btn--secondary | flex-1"
@click="deleteIsOpen = false"
>
Annuler
</button>
<button
class="btn | flex-1"
@click=""
>
Supprimer
</button>
</template>
</Dialog>
</template>
<script setup>
import Dialog from "primevue/dialog";
2024-10-09 16:32:10 +02:00
import ImagesResources from "./ImagesResources.vue";
import ImagesEditPanel from "./ImagesEditPanel.vue";
import MyImages from "./MyImages.vue";
2024-10-09 17:36:35 +02:00
import { usePageStore } from "../../../../stores/page";
import { ref, watch } from "vue";
const { isAddImagesModalOpen } = defineProps({
isAddImagesModalOpen: Boolean,
});
const emit = defineEmits(["update:isAddImagesModalOpen"]);
const isOpen = ref(isAddImagesModalOpen);
watch(isOpen, (newValue) => {
emit("close");
});
2024-10-09 18:21:14 +02:00
const deleteIsOpen = false;
const tabs = [
{
2024-10-09 16:32:10 +02:00
name: "Mes images",
component: MyImages,
},
{
2024-10-09 16:32:10 +02:00
name: "Matériauthèque",
component: ImagesResources,
params: {
targetPage: "materials",
},
},
{
2024-10-09 16:32:10 +02:00
name: "Réalisations",
component: ImagesResources,
params: {
2024-10-09 17:43:58 +02:00
targetPage: "creations",
2024-10-09 16:32:10 +02:00
},
},
{
2024-10-09 16:32:10 +02:00
name: "Inspirations",
component: ImagesResources,
},
];
const activeTab = ref(tabs[0]);
</script>
<style>
#add-images {
--sidebar-width: 12.5rem;
counter-set: selected-images;
width: min(100vw - var(--gutter) * 2, 100rem);
height: min(100vh - var(--gutter) * 2, 60rem);
padding-top: var(--space-16);
row-gap: var(--space-32);
}
2024-10-09 16:54:19 +02:00
#add-images [data-pc-section="content"] {
height: calc(100% - 3.75rem);
}
#add-images nav li {
position: relative;
height: var(--space-48);
border-left: 1px solid var(--color-grey-400);
padding: var(--space-12) var(--space-16);
color: var(--color-grey-400);
font-weight: 500;
cursor: pointer;
}
#add-images nav li:hover,
#add-images nav li.active {
color: var(--color-grey-800);
border-left-color: var(--color-grey-800);
}
#add-images nav li.active::before {
content: "";
width: 2px;
position: absolute;
top: 0;
left: -1px;
bottom: 0;
background: var(--color-grey-800);
}
#add-images [data-pc-name="fileupload"] button {
padding: 3rem;
aspect-ratio: 1/1;
}
#add-images .image {
counter-increment: selected-images;
aspect-ratio: 1/1;
border-radius: var(--rounded-xl);
}
#add-images .image::after {
content: counter(selected-images);
top: var(--space-12);
right: var(--space-12);
border-radius: 50%;
color: var(--color-white);
font-weight: 700;
background: var(--color-grey-800);
mask: none;
display: grid;
place-items: center;
text-align: center;
width: 1.5rem;
height: 1.5rem;
}
#add-images .image img {
height: 100%;
width: 100%;
}
2024-10-09 18:21:14 +02:00
#delete-image [data-pc-section="footer"] {
display: flex;
gap: var(--space-16);
margin-top: var(--space-32);
}
#delete-image [data-pc-name="pcclosebutton"] {
display: none;
}
#delete-image_header {
font-family: var(--font-serif);
font-size: var(--text-lg);
}
.with-sidebar[data-side="right"] > * {
height: 100%;
overflow-y: auto;
}
</style>