feat: extract shop from mp/shop — initial libreshop/shop
Some checks failed
Build and publish / build (push) Failing after 19s
Some checks failed
Build and publish / build (push) Failing after 19s
Source moved verbatim from mp/shop/ on 2026-04-29; mp was the first concrete adapter consuming the libreshop toolkit. Builds and publishes git.librete.ch/libreshop/shop on every main / v* push via the standard .gitea/workflows/build.yml shared across libreshop components.
This commit is contained in:
55
components/CookieBanner.vue
Normal file
55
components/CookieBanner.vue
Normal file
@@ -0,0 +1,55 @@
|
||||
<template>
|
||||
<div
|
||||
v-if="consentGiven === false"
|
||||
class="fixed bottom-0 left-0 right-0 bg-white border-t border-gray-200 shadow-lg px-4 py-3 text-gray-800 z-50 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 sm:gap-4"
|
||||
>
|
||||
<p class="text-xs text-gray-600 sm:flex-1">
|
||||
{{ consentText }}
|
||||
</p>
|
||||
|
||||
<div class="flex items-center gap-2 shrink-0">
|
||||
<Button
|
||||
href="/datenschutz"
|
||||
data-cy="cookie-banner-privacy"
|
||||
classes="bg-transparent border-transparent py-1.5 px-3 !text-xs !text-black hover:!bg-gray-100 shadow-none"
|
||||
>
|
||||
Datenschutzerklärung
|
||||
</Button>
|
||||
<Button @click="acceptCookies" data-cy="cookie-banner-accept" classes="bg-gray-800 py-1.5 px-4 !text-xs whitespace-nowrap">
|
||||
Akzeptieren
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const COOKIE_CONSENT_KEY = "shop:cookie-consent";
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
consentText?: string;
|
||||
}>(),
|
||||
{
|
||||
consentText:
|
||||
"Wir verwenden notwendige Cookies für die sichere Zahlungsabwicklung. Weitere Informationen finden Sie in unserer Datenschutzerklärung:"
|
||||
}
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
"consent-given": [];
|
||||
}>();
|
||||
|
||||
// Start with null to prevent SSR flash - banner only renders after client check
|
||||
const consentGiven = ref<boolean | null>(null);
|
||||
|
||||
// Check localStorage only on client
|
||||
onMounted(() => {
|
||||
consentGiven.value = !!localStorage.getItem(COOKIE_CONSENT_KEY);
|
||||
});
|
||||
|
||||
function acceptCookies() {
|
||||
localStorage.setItem(COOKIE_CONSENT_KEY, new Date().toISOString());
|
||||
consentGiven.value = true;
|
||||
emit("consent-given");
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user