1
0
Fork 0
activist/src/components/Sticker.vue

160 lines
3.6 KiB
Vue
Raw Normal View History

<script setup lang="ts">
import QRCode from "@/components/QRCode.vue";
2024-12-02 19:35:53 -05:00
import {computed} from "vue";
2024-12-08 20:41:54 -05:00
import Image from 'primevue/image'
import { type Organization, useOrganization } from '@/queries/organization'
2024-11-17 14:11:18 -05:00
const {
2024-11-17 15:01:11 -05:00
layout, color,
2024-12-08 20:41:54 -05:00
orgs,
2024-11-17 14:11:18 -05:00
message1, message2,
message3, message4,
} = defineProps([
2024-11-17 15:01:11 -05:00
'layout', 'color',
2024-12-08 20:41:54 -05:00
"orgs",
2024-11-17 14:11:18 -05:00
'message1', 'message2',
'message3', 'message4',
])
const layout1Class = computed(() => ({
hidden: layout !== 'layout1',
layout1: layout === 'layout1',
}))
const layout2Class = computed(() => ({
hidden: layout !== 'layout2',
layout2: layout === 'layout2',
}))
const layout3Class = computed(() => ({
hidden: layout !== 'layout3',
layout3: layout === 'layout3',
}))
const layout4Class = computed(() => ({
hidden: layout !== 'layout4',
layout4: layout === 'layout4',
}))
const color2 = computed(() => {
return '#' + color;
})
const { state: allOrgs } = useOrganization();
const myOrgs = computed(() => {
console.log(orgs)
if (allOrgs.value.status !== 'success') {
return [];
}
return allOrgs.value.data.filter((org: Organization) => {
return orgs.includes(org.id);
});
});
</script>
<template>
<div class="sticker">
<QRCode class="qr-code"></QRCode>
2024-11-17 14:11:18 -05:00
<div class="content">
2024-12-08 20:41:54 -05:00
<div class="orgs">
<div v-for="org in myOrgs" :key="org.id">
2024-12-08 20:41:54 -05:00
<img class="logo" :src="org.logo" alt="todo" />
</div>
</div>
2024-11-17 14:11:18 -05:00
<div v-bind:class="layout1Class">
<div class="message">{{ message1 }}</div>
</div>
<div v-bind:class="layout2Class">
<div class="message">{{ message1 }}</div>
<div class="message">{{ message2 }}</div>
</div>
<div v-bind:class="layout3Class">
<div class="message">{{ message1 }}</div>
<div class="message">{{ message2 }}</div>
2024-12-05 20:41:10 -05:00
<div class="message">{{ message3 }}</div>
2024-11-17 14:11:18 -05:00
</div>
<div v-bind:class="layout4Class">
<div class="message">{{ message1 }}</div>
<div class="message">{{ message2 }}</div>
<div class="message">{{ message3 }}</div>
<div class="message">{{ message4 }}</div>
</div>
</div>
</div>
</template>
<style scoped>
.message {
color: white;
font-weight: bold;
2024-12-01 19:49:36 -05:00
overflow: hidden;
white-space: nowrap;
}
.qr-code {
height: 100%;
}
.sticker {
width: 256px;
aspect-ratio: 6 / 1;
background-color: v-bind(color2);
display: flex;
2024-12-08 20:41:54 -05:00
overflow: clip;
position: relative;
2024-11-17 14:11:18 -05:00
.content {
width: 100%;
.layout1 {
2024-12-22 13:34:55 -05:00
line-height: 165%;
font-size: 185%;
2024-11-17 14:11:18 -05:00
height: 100%;
> div {
height: 100%;
}
}
.layout2 {
display: flex;
flex-direction: column;
font-size: 70%;
gap: 5px;
height: 100%;
> div {
flex: auto 1 0;
}
}
.layout3 {
display: flex;
gap: 5px;
height: 100%;
> div {
width: 33%;
}
}
.layout4 {
/* TODO: overflow issue. Turn on outline to see. */
display: grid;
font-size: 70%;
grid-template-columns: 50% 50%;
gap: 5px;
height: 100%;
}
2024-12-08 20:41:54 -05:00
.message {
/*outline: 1px solid #CCC3;*/
padding-left: 4px;
padding-right: 4px;
text-shadow: #FFF 0px 0px 4px;
z-index: 100;
}
.orgs {
display: flex;
flex-direction: row;
justify-content: space-evenly;
2024-12-08 20:41:54 -05:00
position: absolute;
> div {
flex-shrink: 0;
.logo {
height: 65px;
width: 65px;
margin-top: -10px;
2024-12-15 21:29:37 -05:00
filter: grayscale(1) invert(1) brightness(4.0) opacity(0.2);
2024-12-08 20:41:54 -05:00
transform: rotate(0deg);
}
}
}
2024-11-17 14:11:18 -05:00
}
}
</style>