fix: cookie banner design and settings
This commit is contained in:
parent
cbeae1bf85
commit
3a8f58682d
@ -1,5 +1,4 @@
|
||||
import type { Metadata } from 'next'
|
||||
|
||||
import { getPayload } from 'payload'
|
||||
import config from '@payload-config'
|
||||
import { AnnouncementBarComponent } from '@/components/AnnouncementBar/AnnouncementBar'
|
||||
@ -7,7 +6,6 @@ import { cn } from '@/utilities/ui'
|
||||
import { GeistMono } from 'geist/font/mono'
|
||||
import { GeistSans } from 'geist/font/sans'
|
||||
import React from 'react'
|
||||
|
||||
import { AdminBar } from '@/components/AdminBar'
|
||||
import { Footer } from '@/Footer/Component'
|
||||
import { Header } from '@/Header/Component'
|
||||
@ -16,20 +14,17 @@ import { InitTheme } from '@/providers/Theme/InitTheme'
|
||||
import { mergeOpenGraph } from '@/utilities/mergeOpenGraph'
|
||||
import { draftMode } from 'next/headers'
|
||||
import { getCachedGlobal } from '@/utilities/getGlobals'
|
||||
|
||||
import './globals.css'
|
||||
import { getServerSideURL } from '@/utilities/getURL'
|
||||
import { PopupAnnouncementComponent } from '@/globals/PopupAnnouncement/Component'
|
||||
import { HeadInjection, FooterInjection } from '@/components/HeadInjection'
|
||||
import { CookieConsent } from '@/components/CookieConsent'
|
||||
import { MatomoScript } from '@/components/MatomoScript'
|
||||
import { HeadInjection, FooterInjection } from '@/components/HeadInjection'
|
||||
import { PopupAnnouncementComponent } from '@/globals/PopupAnnouncement/Component'
|
||||
import './globals.css'
|
||||
import { getServerSideURL } from '@/utilities/getURL'
|
||||
|
||||
async function AnnouncementBarWrapper() {
|
||||
const payload = await getPayload({ config })
|
||||
const announcement = await payload.findGlobal({ slug: 'announcement-bar' })
|
||||
|
||||
if (!announcement?.enabled) return null
|
||||
|
||||
return (
|
||||
<AnnouncementBarComponent
|
||||
text={announcement.text}
|
||||
@ -44,27 +39,27 @@ async function AnnouncementBarWrapper() {
|
||||
export default async function RootLayout({ children }: { children: React.ReactNode }) {
|
||||
const { isEnabled } = await draftMode()
|
||||
|
||||
const popupData = await getCachedGlobal('popup-announcement', 1)() as any
|
||||
const [siteSettings, popupData] = await Promise.all([
|
||||
getCachedGlobal('site-settings', 1)() as any,
|
||||
getCachedGlobal('popup-announcement', 1)() as any,
|
||||
])
|
||||
|
||||
let privacyPolicyUrl = '/integritetspolicy'
|
||||
let matomoEnabled = false
|
||||
let matomoCode = ''
|
||||
const cc = siteSettings?.cookieConsent
|
||||
const privacyPolicyUrl = cc?.privacyPolicyUrl ?? '/integritetspolicy'
|
||||
const acceptedDays = parseInt(cc?.acceptedDays ?? '365', 10)
|
||||
const declinedDays = parseInt(cc?.declinedDays ?? '30', 10)
|
||||
const cookieEnabled = cc?.enabled ?? true
|
||||
|
||||
try {
|
||||
const siteSettings = await getCachedGlobal('site-settings', 0)() as any
|
||||
if (siteSettings?.cookieConsent?.privacyPolicyUrl) {
|
||||
privacyPolicyUrl = siteSettings.cookieConsent.privacyPolicyUrl
|
||||
}
|
||||
if (siteSettings?.matomo?.enabled && siteSettings?.matomo?.code) {
|
||||
matomoEnabled = true
|
||||
matomoCode = siteSettings.matomo.code
|
||||
}
|
||||
} catch {
|
||||
// use defaults
|
||||
}
|
||||
const matomoEnabled = Boolean(siteSettings?.matomo?.enabled && siteSettings?.matomo?.code)
|
||||
const matomoCode = siteSettings?.matomo?.code ?? ''
|
||||
|
||||
return (
|
||||
<html className={cn(GeistSans.variable, GeistMono.variable)} lang="sv" suppressHydrationWarning style={{colorScheme: "light"}}>
|
||||
<html
|
||||
className={cn(GeistSans.variable, GeistMono.variable)}
|
||||
lang="sv"
|
||||
suppressHydrationWarning
|
||||
style={{ colorScheme: 'light' }}
|
||||
>
|
||||
<head>
|
||||
<InitTheme />
|
||||
<link href="/favicon.ico" rel="icon" sizes="32x32" />
|
||||
@ -81,10 +76,14 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
{children}
|
||||
<Footer />
|
||||
<PopupAnnouncementComponent {...popupData} />
|
||||
<CookieConsent privacyPolicyUrl={privacyPolicyUrl} />
|
||||
{matomoEnabled && (
|
||||
<MatomoScript code={matomoCode} />
|
||||
{cookieEnabled && (
|
||||
<CookieConsent
|
||||
privacyPolicyUrl={privacyPolicyUrl}
|
||||
acceptedDays={acceptedDays}
|
||||
declinedDays={declinedDays}
|
||||
/>
|
||||
)}
|
||||
{matomoEnabled && <MatomoScript code={matomoCode} />}
|
||||
<FooterInjection />
|
||||
</Providers>
|
||||
</body>
|
||||
|
||||
@ -3,7 +3,12 @@
|
||||
import React, { useState, useEffect, useCallback } from 'react'
|
||||
|
||||
const COOKIE_NAME = 'fd-cookie-consent'
|
||||
const COOKIE_EXPIRY_DAYS = 365
|
||||
const COOKIE_TIMESTAMP_NAME = 'fd-cookie-consent-ts'
|
||||
|
||||
// Default expiry durations (in days)
|
||||
// 0 = session only (sessionStorage, not persisted across browser close)
|
||||
const DEFAULT_ACCEPTED_DAYS = 365
|
||||
const DEFAULT_DECLINED_DAYS = 30
|
||||
|
||||
type ConsentStatus = 'accepted' | 'declined' | null
|
||||
|
||||
@ -14,18 +19,46 @@ function getCookie(name: string): string | null {
|
||||
}
|
||||
|
||||
function setCookie(name: string, value: string, days: number) {
|
||||
const expires = new Date(Date.now() + days * 864e5).toUTCString()
|
||||
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; SameSite=Lax`
|
||||
if (days === 0) {
|
||||
// Session cookie — no expires attribute
|
||||
document.cookie = `${name}=${encodeURIComponent(value)}; path=/; SameSite=Lax`
|
||||
} else {
|
||||
const expires = new Date(Date.now() + days * 864e5).toUTCString()
|
||||
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; SameSite=Lax`
|
||||
}
|
||||
}
|
||||
|
||||
function deleteCookie(name: string) {
|
||||
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the stored consent is still valid for the given number of days.
|
||||
* If days = 0, we rely purely on the session cookie existing (no timestamp check).
|
||||
*/
|
||||
function isConsentExpired(days: number): boolean {
|
||||
if (days === 0) return false // Session cookies handle their own expiry
|
||||
const ts = getCookie(COOKIE_TIMESTAMP_NAME)
|
||||
if (!ts) return true
|
||||
const storedAt = parseInt(ts, 10)
|
||||
if (isNaN(storedAt)) return true
|
||||
return Date.now() - storedAt > days * 864e5
|
||||
}
|
||||
|
||||
interface CookieConsentProps {
|
||||
privacyPolicyUrl?: string
|
||||
/** Days to remember "Acceptera" — 0 = browser session only */
|
||||
acceptedDays?: number
|
||||
/** Days to remember "Avvisa" before asking again — 0 = browser session only */
|
||||
declinedDays?: number
|
||||
onAccept?: () => void
|
||||
onDecline?: () => void
|
||||
}
|
||||
|
||||
export const CookieConsent: React.FC<CookieConsentProps> = ({
|
||||
privacyPolicyUrl = '/integritetspolicy',
|
||||
acceptedDays = DEFAULT_ACCEPTED_DAYS,
|
||||
declinedDays = DEFAULT_DECLINED_DAYS,
|
||||
onAccept,
|
||||
onDecline,
|
||||
}) => {
|
||||
@ -33,62 +66,102 @@ export const CookieConsent: React.FC<CookieConsentProps> = ({
|
||||
|
||||
useEffect(() => {
|
||||
const consent = getCookie(COOKIE_NAME)
|
||||
|
||||
if (!consent) {
|
||||
// No consent stored at all — show the banner
|
||||
const timer = setTimeout(() => setVisible(true), 800)
|
||||
return () => clearTimeout(timer)
|
||||
}
|
||||
}, [])
|
||||
|
||||
// Consent exists — check if it has expired for its type
|
||||
const expiryDays = consent === 'accepted' ? acceptedDays : declinedDays
|
||||
if (isConsentExpired(expiryDays)) {
|
||||
// Consent period has lapsed — clear old cookies and ask again
|
||||
deleteCookie(COOKIE_NAME)
|
||||
deleteCookie(COOKIE_TIMESTAMP_NAME)
|
||||
const timer = setTimeout(() => setVisible(true), 800)
|
||||
return () => clearTimeout(timer)
|
||||
}
|
||||
}, [acceptedDays, declinedDays])
|
||||
|
||||
const handleAccept = useCallback(() => {
|
||||
setCookie(COOKIE_NAME, 'accepted', COOKIE_EXPIRY_DAYS)
|
||||
setCookie(COOKIE_NAME, 'accepted', acceptedDays)
|
||||
setCookie(COOKIE_TIMESTAMP_NAME, String(Date.now()), acceptedDays)
|
||||
setVisible(false)
|
||||
if (typeof window !== 'undefined' && window._paq) {
|
||||
window._paq.push(['setConsentGiven'])
|
||||
}
|
||||
onAccept?.()
|
||||
}, [onAccept])
|
||||
}, [acceptedDays, onAccept])
|
||||
|
||||
const handleDecline = useCallback(() => {
|
||||
setCookie(COOKIE_NAME, 'declined', COOKIE_EXPIRY_DAYS)
|
||||
setCookie(COOKIE_NAME, 'declined', declinedDays)
|
||||
setCookie(COOKIE_TIMESTAMP_NAME, String(Date.now()), declinedDays)
|
||||
setVisible(false)
|
||||
if (typeof window !== 'undefined' && window._paq) {
|
||||
window._paq.push(['forgetConsentGiven'])
|
||||
}
|
||||
onDecline?.()
|
||||
}, [onDecline])
|
||||
}, [declinedDays, onDecline])
|
||||
|
||||
if (!visible) return null
|
||||
|
||||
const policyLink = <a href={privacyPolicyUrl} className="text-fd-yellow underline hover:text-fd-yellow/80 transition-colors">Läs vår integritetspolicy</a>
|
||||
const policyLink = (
|
||||
<a
|
||||
href={privacyPolicyUrl}
|
||||
className="text-fd-yellow underline hover:text-fd-yellow/80 transition-colors"
|
||||
>
|
||||
Läs vår integritetspolicy
|
||||
</a>
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="fixed bottom-0 left-0 right-0 z-[9999] p-4 md:p-6" role="dialog" aria-label="Cookiesamtycke">
|
||||
<div className="max-w-[1200px] mx-auto bg-fd-navy rounded-[30px] md:rounded-[70px] shadow-2xl p-6 md:p-8 lg:p-10">
|
||||
<div className="flex flex-col md:flex-row md:items-center gap-6">
|
||||
<div className="flex-1">
|
||||
<h3 className="text-fd-yellow font-joey-bold text-lg md:text-xl mb-2">
|
||||
<div
|
||||
className="fixed bottom-0 left-0 right-0 z-[9999] w-full bg-fd-navy shadow-[0_-4px_32px_rgba(0,0,0,0.35)]"
|
||||
role="dialog"
|
||||
aria-label="Cookiesamtycke"
|
||||
>
|
||||
{/* Inner layout — full-width, no rounded corners */}
|
||||
<div className="w-full px-6 py-6 md:px-12 md:py-8 lg:px-20">
|
||||
<div className="max-w-[1400px] mx-auto flex flex-col md:flex-row md:items-center gap-5 md:gap-8">
|
||||
|
||||
{/* Text block */}
|
||||
<div className="flex-1 min-w-0">
|
||||
<h3 className="text-fd-yellow font-joey-bold text-lg md:text-xl mb-1.5">
|
||||
Vi använder cookies
|
||||
</h3>
|
||||
<p className="text-white font-joey text-sm md:text-base leading-relaxed">
|
||||
Vi använder cookies för att förbättra din upplevelse på vår webbplats och analysera trafik.
|
||||
Genom att klicka "Acceptera" godkänner du vår användning av cookies.{' '}
|
||||
<p className="text-white/85 font-joey text-sm md:text-base leading-relaxed">
|
||||
Vi använder cookies för att förbättra din upplevelse på vår webbplats och analysera
|
||||
trafik. Genom att klicka "Acceptera" godkänner du vår användning av
|
||||
cookies.{' '}
|
||||
{policyLink}
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col sm:flex-row gap-3 flex-shrink-0">
|
||||
<button onClick={handleDecline} className="inline-flex items-center justify-center px-6 py-2.5 rounded-full font-joey-bold text-white border-2 border-white hover:bg-white/10 transition-colors text-sm md:text-base">
|
||||
|
||||
{/* Action buttons */}
|
||||
<div className="flex flex-row gap-3 flex-shrink-0">
|
||||
<button
|
||||
onClick={handleDecline}
|
||||
className="inline-flex items-center justify-center px-6 py-2.5 font-joey-bold text-white border-2 border-white/60 hover:border-white hover:bg-white/10 transition-all text-sm md:text-base rounded-full"
|
||||
>
|
||||
Avvisa
|
||||
</button>
|
||||
<button onClick={handleAccept} className="inline-flex items-center justify-center px-6 py-2.5 rounded-full font-joey-bold text-fd-navy bg-fd-yellow hover:bg-fd-yellow/90 transition-colors text-sm md:text-base">
|
||||
<button
|
||||
onClick={handleAccept}
|
||||
className="inline-flex items-center justify-center px-6 py-2.5 font-joey-bold text-fd-navy bg-fd-yellow hover:bg-fd-yellow/90 transition-colors text-sm md:text-base rounded-full"
|
||||
>
|
||||
Acceptera
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
// ─── Utility exports (unchanged) ─────────────────────────────────────────────
|
||||
|
||||
export function getConsentStatus(): ConsentStatus {
|
||||
const value = getCookie(COOKIE_NAME)
|
||||
if (value === 'accepted' || value === 'declined') return value
|
||||
|
||||
@ -73,6 +73,42 @@ export const SiteSettings: GlobalConfig = {
|
||||
condition: (_, siblingData) => Boolean(siblingData?.enabled),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'acceptedDays',
|
||||
type: 'select',
|
||||
label: 'Hur länge sparas "Acceptera"-val',
|
||||
defaultValue: '365',
|
||||
admin: {
|
||||
condition: (_, siblingData) => Boolean(siblingData?.enabled),
|
||||
description:
|
||||
'Hur många dagar besökarens accept-val sparas innan bannern visas igen. "Webbläsarsession" = försvinner när fliken/webbläsaren stängs.',
|
||||
},
|
||||
options: [
|
||||
{ label: 'Webbläsarsession (session)', value: '0' },
|
||||
{ label: '30 dagar', value: '30' },
|
||||
{ label: '90 dagar', value: '90' },
|
||||
{ label: '180 dagar', value: '180' },
|
||||
{ label: '365 dagar (rekommenderat)', value: '365' },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'declinedDays',
|
||||
type: 'select',
|
||||
label: 'Hur länge sparas "Avvisa"-val',
|
||||
defaultValue: '30',
|
||||
admin: {
|
||||
condition: (_, siblingData) => Boolean(siblingData?.enabled),
|
||||
description:
|
||||
'Hur många dagar bannern döljs när besökaren avvisat. Efter detta visas bannern igen. Kortare tid = fler chanser att få samtycke.',
|
||||
},
|
||||
options: [
|
||||
{ label: 'Webbläsarsession (session)', value: '0' },
|
||||
{ label: '7 dagar', value: '7' },
|
||||
{ label: '14 dagar', value: '14' },
|
||||
{ label: '30 dagar (rekommenderat)', value: '30' },
|
||||
{ label: '90 dagar', value: '90' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -93,7 +129,8 @@ export const SiteSettings: GlobalConfig = {
|
||||
admin: {
|
||||
language: 'javascript',
|
||||
condition: (_, siblingData) => Boolean(siblingData?.enabled),
|
||||
description: 'Klistra in spårningskoden från Matomo (Administration → Tracking Code). Samtyckesgating läggs till automatiskt — du behöver inte ändra något i koden.',
|
||||
description:
|
||||
'Klistra in spårningskoden från Matomo (Administration → Tracking Code). Samtyckesgating läggs till automatiskt — du behöver inte ändra något i koden.',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
22864
src/migrations/20260218_130902.json
Normal file
22864
src/migrations/20260218_130902.json
Normal file
File diff suppressed because it is too large
Load Diff
635
src/migrations/20260218_130902.ts
Normal file
635
src/migrations/20260218_130902.ts
Normal file
@ -0,0 +1,635 @@
|
||||
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres'
|
||||
|
||||
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||
await db.execute(sql`
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_spacer_section_background" AS ENUM('white', 'navy', 'gray', 'yellow', 'transparent');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_icon_bar_section_background" AS ENUM('white', 'gray', 'navy', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_usp_checklist_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_tech_properties_section_background" AS ENUM('navy', 'white', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_usp_table_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_header_text_image_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_contact_form_section_background" AS ENUM('white', 'gray', 'navy', 'navyGradient');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_contact_form_layout" AS ENUM('standard', 'withImage', 'card');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_text_section_background" AS ENUM('white', 'navy', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_cta_banner_section_background" AS ENUM('yellow', 'navy', 'gray', 'white');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_cta_banner_alignment" AS ENUM('center', 'left');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_cta_banner_size" AS ENUM('small', 'medium', 'large');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_testimonial_layout" AS ENUM('grid', 'featured');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_testimonial_section_background" AS ENUM('gray', 'white', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_team_columns" AS ENUM('2', '3', '4');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_team_card_style" AS ENUM('navy', 'white', 'gray');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_team_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_spacer_section_background" AS ENUM('white', 'navy', 'gray', 'yellow', 'transparent');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_icon_bar_section_background" AS ENUM('white', 'gray', 'navy', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_usp_checklist_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_tech_properties_section_background" AS ENUM('navy', 'white', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_usp_table_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_header_text_image_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_contact_form_section_background" AS ENUM('white', 'gray', 'navy', 'navyGradient');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_contact_form_layout" AS ENUM('standard', 'withImage', 'card');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_text_section_background" AS ENUM('white', 'navy', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_cta_banner_section_background" AS ENUM('yellow', 'navy', 'gray', 'white');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_cta_banner_alignment" AS ENUM('center', 'left');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_cta_banner_size" AS ENUM('small', 'medium', 'large');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_testimonial_layout" AS ENUM('grid', 'featured');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_testimonial_section_background" AS ENUM('gray', 'white', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_team_columns" AS ENUM('2', '3', '4');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_team_card_style" AS ENUM('navy', 'white', 'gray');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_team_section_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_site_settings_cookie_consent_accepted_days" AS ENUM('0', '30', '90', '180', '365');
|
||||
CREATE TYPE "public"."enum_site_settings_cookie_consent_declined_days" AS ENUM('0', '7', '14', '30', '90');
|
||||
CREATE TABLE "pages_blocks_fd_cta_banner" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"heading" varchar DEFAULT 'Redo att komma igång?',
|
||||
"subheading" varchar,
|
||||
"cta_text" varchar DEFAULT 'Kontakta oss',
|
||||
"cta_link" varchar DEFAULT '/kontakt',
|
||||
"secondary_cta_text" varchar,
|
||||
"secondary_cta_link" varchar,
|
||||
"section_background" "enum_pages_blocks_fd_cta_banner_section_background" DEFAULT 'yellow',
|
||||
"alignment" "enum_pages_blocks_fd_cta_banner_alignment" DEFAULT 'center',
|
||||
"size" "enum_pages_blocks_fd_cta_banner_size" DEFAULT 'medium',
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "pages_blocks_fd_testimonial_testimonials" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" varchar NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"quote" varchar,
|
||||
"author_name" varchar,
|
||||
"author_role" varchar,
|
||||
"author_company" varchar,
|
||||
"avatar_id" integer
|
||||
);
|
||||
|
||||
CREATE TABLE "pages_blocks_fd_testimonial" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"heading" varchar,
|
||||
"layout" "enum_pages_blocks_fd_testimonial_layout" DEFAULT 'grid',
|
||||
"section_background" "enum_pages_blocks_fd_testimonial_section_background" DEFAULT 'gray',
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "pages_blocks_fd_team_members" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" varchar NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"photo_id" integer,
|
||||
"name" varchar,
|
||||
"role" varchar,
|
||||
"bio" varchar,
|
||||
"email" varchar,
|
||||
"linkedin" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "pages_blocks_fd_team" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"heading" varchar,
|
||||
"subheading" varchar,
|
||||
"columns" "enum_pages_blocks_fd_team_columns" DEFAULT '3',
|
||||
"card_style" "enum_pages_blocks_fd_team_card_style" DEFAULT 'navy',
|
||||
"section_background" "enum_pages_blocks_fd_team_section_background" DEFAULT 'white',
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_blocks_fd_cta_banner" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"heading" varchar DEFAULT 'Redo att komma igång?',
|
||||
"subheading" varchar,
|
||||
"cta_text" varchar DEFAULT 'Kontakta oss',
|
||||
"cta_link" varchar DEFAULT '/kontakt',
|
||||
"secondary_cta_text" varchar,
|
||||
"secondary_cta_link" varchar,
|
||||
"section_background" "enum__pages_v_blocks_fd_cta_banner_section_background" DEFAULT 'yellow',
|
||||
"alignment" "enum__pages_v_blocks_fd_cta_banner_alignment" DEFAULT 'center',
|
||||
"size" "enum__pages_v_blocks_fd_cta_banner_size" DEFAULT 'medium',
|
||||
"_uuid" varchar,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_blocks_fd_testimonial_testimonials" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"quote" varchar,
|
||||
"author_name" varchar,
|
||||
"author_role" varchar,
|
||||
"author_company" varchar,
|
||||
"avatar_id" integer,
|
||||
"_uuid" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_blocks_fd_testimonial" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"heading" varchar,
|
||||
"layout" "enum__pages_v_blocks_fd_testimonial_layout" DEFAULT 'grid',
|
||||
"section_background" "enum__pages_v_blocks_fd_testimonial_section_background" DEFAULT 'gray',
|
||||
"_uuid" varchar,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_blocks_fd_team_members" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"photo_id" integer,
|
||||
"name" varchar,
|
||||
"role" varchar,
|
||||
"bio" varchar,
|
||||
"email" varchar,
|
||||
"linkedin" varchar,
|
||||
"_uuid" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_blocks_fd_team" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"heading" varchar,
|
||||
"subheading" varchar,
|
||||
"columns" "enum__pages_v_blocks_fd_team_columns" DEFAULT '3',
|
||||
"card_style" "enum__pages_v_blocks_fd_team_card_style" DEFAULT 'navy',
|
||||
"section_background" "enum__pages_v_blocks_fd_team_section_background" DEFAULT 'white',
|
||||
"_uuid" varchar,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
ALTER TABLE "pages_hero_links" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "pages_rels" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_version_hero_links" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_rels" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "search_categories" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "search" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "search_rels" DISABLE ROW LEVEL SECURITY;
|
||||
DROP TABLE "pages_hero_links" CASCADE;
|
||||
DROP TABLE "pages_rels" CASCADE;
|
||||
DROP TABLE "_pages_v_version_hero_links" CASCADE;
|
||||
DROP TABLE "_pages_v_rels" CASCADE;
|
||||
DROP TABLE "search_categories" CASCADE;
|
||||
DROP TABLE "search" CASCADE;
|
||||
DROP TABLE "search_rels" CASCADE;
|
||||
ALTER TABLE "pages" DROP CONSTRAINT "pages_hero_media_id_media_id_fk";
|
||||
|
||||
ALTER TABLE "_pages_v" DROP CONSTRAINT "_pages_v_version_hero_media_id_media_id_fk";
|
||||
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_search_fk";
|
||||
|
||||
DROP INDEX "pages_hero_hero_media_idx";
|
||||
DROP INDEX "_pages_v_version_hero_version_hero_media_idx";
|
||||
DROP INDEX "payload_locked_documents_rels_search_id_idx";
|
||||
DROP INDEX "pages_slug_idx";
|
||||
DROP INDEX "posts_slug_idx";
|
||||
ALTER TABLE "pages_blocks_fd_faq_items" ALTER COLUMN "answer" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "pages_blocks_fd_usp_table_rows" ALTER COLUMN "description" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ALTER COLUMN "description" SET DEFAULT 'Berätta om era mål — vårt team kontaktar er och hjälper er hitta rätt lösning.';
|
||||
ALTER TABLE "pages_blocks_fd_text" ALTER COLUMN "body" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "_pages_v_blocks_fd_faq_items" ALTER COLUMN "answer" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table_rows" ALTER COLUMN "description" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ALTER COLUMN "description" SET DEFAULT 'Berätta om era mål — vårt team kontaktar er och hjälper er hitta rätt lösning.';
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" ALTER COLUMN "body" SET DATA TYPE jsonb;
|
||||
ALTER TABLE "pages_blocks_fd_spacer" ADD COLUMN "section_background" "enum_pages_blocks_fd_spacer_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_icon_bar" ADD COLUMN "section_background" "enum_pages_blocks_fd_icon_bar_section_background" DEFAULT 'gray';
|
||||
ALTER TABLE "pages_blocks_fd_usp_checklist" ADD COLUMN "section_background" "enum_pages_blocks_fd_usp_checklist_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_tech_properties" ADD COLUMN "section_background" "enum_pages_blocks_fd_tech_properties_section_background" DEFAULT 'navy';
|
||||
ALTER TABLE "pages_blocks_fd_usp_table" ADD COLUMN "section_background" "enum_pages_blocks_fd_usp_table_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_header_text_image" ADD COLUMN "section_background" "enum_pages_blocks_fd_header_text_image_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "section_background" "enum_pages_blocks_fd_contact_form_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "layout" "enum_pages_blocks_fd_contact_form_layout" DEFAULT 'standard';
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "external_api_enabled" boolean DEFAULT false;
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "external_api_endpoint" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "external_api_auth_token" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_locations_grid" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_alternate_hero" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_statistics" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_partners_logos" ADD COLUMN "heading" varchar DEFAULT 'Våra partners';
|
||||
ALTER TABLE "pages_blocks_fd_service_chooser" ADD COLUMN "heading" varchar DEFAULT 'Välj din bransch';
|
||||
ALTER TABLE "pages_blocks_fd_data_table" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_text" ADD COLUMN "section_background" "enum_pages_blocks_fd_text_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_spacer" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_spacer_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_icon_bar" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_icon_bar_section_background" DEFAULT 'gray';
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_checklist" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_usp_checklist_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_tech_properties" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_tech_properties_section_background" DEFAULT 'navy';
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_usp_table_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_header_text_image" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_header_text_image_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_contact_form_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "layout" "enum__pages_v_blocks_fd_contact_form_layout" DEFAULT 'standard';
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "external_api_enabled" boolean DEFAULT false;
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "external_api_endpoint" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "external_api_auth_token" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_locations_grid" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_alternate_hero" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_statistics" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_partners_logos" ADD COLUMN "heading" varchar DEFAULT 'Våra partners';
|
||||
ALTER TABLE "_pages_v_blocks_fd_service_chooser" ADD COLUMN "heading" varchar DEFAULT 'Välj din bransch';
|
||||
ALTER TABLE "_pages_v_blocks_fd_data_table" ADD COLUMN "heading" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" ADD COLUMN "section_background" "enum__pages_v_blocks_fd_text_section_background" DEFAULT 'white';
|
||||
ALTER TABLE "site_settings" ADD COLUMN "cookie_consent_accepted_days" "enum_site_settings_cookie_consent_accepted_days" DEFAULT '365';
|
||||
ALTER TABLE "site_settings" ADD COLUMN "cookie_consent_declined_days" "enum_site_settings_cookie_consent_declined_days" DEFAULT '30';
|
||||
ALTER TABLE "pages_blocks_fd_cta_banner" ADD CONSTRAINT "pages_blocks_fd_cta_banner_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_testimonial_testimonials" ADD CONSTRAINT "pages_blocks_fd_testimonial_testimonials_avatar_id_media_id_fk" FOREIGN KEY ("avatar_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_testimonial_testimonials" ADD CONSTRAINT "pages_blocks_fd_testimonial_testimonials_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages_blocks_fd_testimonial"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_testimonial" ADD CONSTRAINT "pages_blocks_fd_testimonial_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_team_members" ADD CONSTRAINT "pages_blocks_fd_team_members_photo_id_media_id_fk" FOREIGN KEY ("photo_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_team_members" ADD CONSTRAINT "pages_blocks_fd_team_members_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages_blocks_fd_team"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_blocks_fd_team" ADD CONSTRAINT "pages_blocks_fd_team_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_cta_banner" ADD CONSTRAINT "_pages_v_blocks_fd_cta_banner_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_testimonial_testimonials" ADD CONSTRAINT "_pages_v_blocks_fd_testimonial_testimonials_avatar_id_media_id_fk" FOREIGN KEY ("avatar_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_testimonial_testimonials" ADD CONSTRAINT "_pages_v_blocks_fd_testimonial_testimonials_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v_blocks_fd_testimonial"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_testimonial" ADD CONSTRAINT "_pages_v_blocks_fd_testimonial_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_team_members" ADD CONSTRAINT "_pages_v_blocks_fd_team_members_photo_id_media_id_fk" FOREIGN KEY ("photo_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_team_members" ADD CONSTRAINT "_pages_v_blocks_fd_team_members_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v_blocks_fd_team"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_blocks_fd_team" ADD CONSTRAINT "_pages_v_blocks_fd_team_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action;
|
||||
CREATE INDEX "pages_blocks_fd_cta_banner_order_idx" ON "pages_blocks_fd_cta_banner" USING btree ("_order");
|
||||
CREATE INDEX "pages_blocks_fd_cta_banner_parent_id_idx" ON "pages_blocks_fd_cta_banner" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_blocks_fd_cta_banner_path_idx" ON "pages_blocks_fd_cta_banner" USING btree ("_path");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_testimonials_order_idx" ON "pages_blocks_fd_testimonial_testimonials" USING btree ("_order");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_testimonials_parent_id_idx" ON "pages_blocks_fd_testimonial_testimonials" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_testimonials_avatar_idx" ON "pages_blocks_fd_testimonial_testimonials" USING btree ("avatar_id");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_order_idx" ON "pages_blocks_fd_testimonial" USING btree ("_order");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_parent_id_idx" ON "pages_blocks_fd_testimonial" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_blocks_fd_testimonial_path_idx" ON "pages_blocks_fd_testimonial" USING btree ("_path");
|
||||
CREATE INDEX "pages_blocks_fd_team_members_order_idx" ON "pages_blocks_fd_team_members" USING btree ("_order");
|
||||
CREATE INDEX "pages_blocks_fd_team_members_parent_id_idx" ON "pages_blocks_fd_team_members" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_blocks_fd_team_members_photo_idx" ON "pages_blocks_fd_team_members" USING btree ("photo_id");
|
||||
CREATE INDEX "pages_blocks_fd_team_order_idx" ON "pages_blocks_fd_team" USING btree ("_order");
|
||||
CREATE INDEX "pages_blocks_fd_team_parent_id_idx" ON "pages_blocks_fd_team" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_blocks_fd_team_path_idx" ON "pages_blocks_fd_team" USING btree ("_path");
|
||||
CREATE INDEX "_pages_v_blocks_fd_cta_banner_order_idx" ON "_pages_v_blocks_fd_cta_banner" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_blocks_fd_cta_banner_parent_id_idx" ON "_pages_v_blocks_fd_cta_banner" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_cta_banner_path_idx" ON "_pages_v_blocks_fd_cta_banner" USING btree ("_path");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_testimonials_order_idx" ON "_pages_v_blocks_fd_testimonial_testimonials" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_testimonials_parent_id_idx" ON "_pages_v_blocks_fd_testimonial_testimonials" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_testimonials_avatar_idx" ON "_pages_v_blocks_fd_testimonial_testimonials" USING btree ("avatar_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_order_idx" ON "_pages_v_blocks_fd_testimonial" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_parent_id_idx" ON "_pages_v_blocks_fd_testimonial" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_testimonial_path_idx" ON "_pages_v_blocks_fd_testimonial" USING btree ("_path");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_members_order_idx" ON "_pages_v_blocks_fd_team_members" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_members_parent_id_idx" ON "_pages_v_blocks_fd_team_members" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_members_photo_idx" ON "_pages_v_blocks_fd_team_members" USING btree ("photo_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_order_idx" ON "_pages_v_blocks_fd_team" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_parent_id_idx" ON "_pages_v_blocks_fd_team" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_blocks_fd_team_path_idx" ON "_pages_v_blocks_fd_team" USING btree ("_path");
|
||||
CREATE INDEX "pages_slug_idx" ON "pages" USING btree ("slug");
|
||||
CREATE INDEX "posts_slug_idx" ON "posts" USING btree ("slug");
|
||||
ALTER TABLE "pages_blocks_fd_spacer" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_icon_bar" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_usp_checklist" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_tech_properties" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_usp_table" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_header_text_image" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "background";
|
||||
ALTER TABLE "pages_blocks_fd_locations_grid" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_alternate_hero" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_statistics" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_partners_logos" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_service_chooser" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_data_table" DROP COLUMN "title";
|
||||
ALTER TABLE "pages_blocks_fd_text" DROP COLUMN "background";
|
||||
ALTER TABLE "pages" DROP COLUMN "hero_type";
|
||||
ALTER TABLE "pages" DROP COLUMN "hero_rich_text";
|
||||
ALTER TABLE "pages" DROP COLUMN "hero_media_id";
|
||||
ALTER TABLE "pages" DROP COLUMN "generate_slug";
|
||||
ALTER TABLE "_pages_v_blocks_fd_spacer" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_icon_bar" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_checklist" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_tech_properties" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_header_text_image" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_locations_grid" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_alternate_hero" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_statistics" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_partners_logos" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_service_chooser" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_data_table" DROP COLUMN "title";
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" DROP COLUMN "background";
|
||||
ALTER TABLE "_pages_v" DROP COLUMN "version_hero_type";
|
||||
ALTER TABLE "_pages_v" DROP COLUMN "version_hero_rich_text";
|
||||
ALTER TABLE "_pages_v" DROP COLUMN "version_hero_media_id";
|
||||
ALTER TABLE "_pages_v" DROP COLUMN "version_generate_slug";
|
||||
ALTER TABLE "posts" DROP COLUMN "generate_slug";
|
||||
ALTER TABLE "_posts_v" DROP COLUMN "version_generate_slug";
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "search_id";
|
||||
DROP TYPE "public"."enum_pages_hero_links_link_type";
|
||||
DROP TYPE "public"."enum_pages_hero_links_link_appearance";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_spacer_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_icon_bar_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_usp_checklist_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_tech_properties_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_usp_table_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_header_text_image_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_contact_form_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_text_background";
|
||||
DROP TYPE "public"."enum_pages_hero_type";
|
||||
DROP TYPE "public"."enum__pages_v_version_hero_links_link_type";
|
||||
DROP TYPE "public"."enum__pages_v_version_hero_links_link_appearance";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_spacer_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_icon_bar_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_usp_checklist_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_tech_properties_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_usp_table_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_header_text_image_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_contact_form_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_text_background";
|
||||
DROP TYPE "public"."enum__pages_v_version_hero_type";`)
|
||||
}
|
||||
|
||||
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
|
||||
await db.execute(sql`
|
||||
CREATE TYPE "public"."enum_pages_hero_links_link_type" AS ENUM('reference', 'custom');
|
||||
CREATE TYPE "public"."enum_pages_hero_links_link_appearance" AS ENUM('default', 'outline');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_spacer_background" AS ENUM('white', 'navy', 'gray', 'yellow', 'transparent');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_icon_bar_background" AS ENUM('white', 'gray', 'navy', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_usp_checklist_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_tech_properties_background" AS ENUM('navy', 'white', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_usp_table_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_header_text_image_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_contact_form_background" AS ENUM('white', 'gray');
|
||||
CREATE TYPE "public"."enum_pages_blocks_fd_text_background" AS ENUM('white', 'navy', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum_pages_hero_type" AS ENUM('none', 'highImpact', 'mediumImpact', 'lowImpact');
|
||||
CREATE TYPE "public"."enum__pages_v_version_hero_links_link_type" AS ENUM('reference', 'custom');
|
||||
CREATE TYPE "public"."enum__pages_v_version_hero_links_link_appearance" AS ENUM('default', 'outline');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_spacer_background" AS ENUM('white', 'navy', 'gray', 'yellow', 'transparent');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_icon_bar_background" AS ENUM('white', 'gray', 'navy', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_usp_checklist_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_tech_properties_background" AS ENUM('navy', 'white', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_usp_table_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_header_text_image_background" AS ENUM('white', 'gray', 'navy');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_contact_form_background" AS ENUM('white', 'gray');
|
||||
CREATE TYPE "public"."enum__pages_v_blocks_fd_text_background" AS ENUM('white', 'navy', 'gray', 'yellow');
|
||||
CREATE TYPE "public"."enum__pages_v_version_hero_type" AS ENUM('none', 'highImpact', 'mediumImpact', 'lowImpact');
|
||||
CREATE TABLE "pages_hero_links" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"link_type" "enum_pages_hero_links_link_type" DEFAULT 'reference',
|
||||
"link_new_tab" boolean,
|
||||
"link_url" varchar,
|
||||
"link_label" varchar,
|
||||
"link_appearance" "enum_pages_hero_links_link_appearance" DEFAULT 'default'
|
||||
);
|
||||
|
||||
CREATE TABLE "pages_rels" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"order" integer,
|
||||
"parent_id" integer NOT NULL,
|
||||
"path" varchar NOT NULL,
|
||||
"pages_id" integer,
|
||||
"posts_id" integer
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_version_hero_links" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"link_type" "enum__pages_v_version_hero_links_link_type" DEFAULT 'reference',
|
||||
"link_new_tab" boolean,
|
||||
"link_url" varchar,
|
||||
"link_label" varchar,
|
||||
"link_appearance" "enum__pages_v_version_hero_links_link_appearance" DEFAULT 'default',
|
||||
"_uuid" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "_pages_v_rels" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"order" integer,
|
||||
"parent_id" integer NOT NULL,
|
||||
"path" varchar NOT NULL,
|
||||
"pages_id" integer,
|
||||
"posts_id" integer
|
||||
);
|
||||
|
||||
CREATE TABLE "search_categories" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"relation_to" varchar,
|
||||
"category_i_d" varchar,
|
||||
"title" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "search" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"title" varchar,
|
||||
"priority" numeric,
|
||||
"slug" varchar,
|
||||
"meta_title" varchar,
|
||||
"meta_description" varchar,
|
||||
"meta_image_id" integer,
|
||||
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "search_rels" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"order" integer,
|
||||
"parent_id" integer NOT NULL,
|
||||
"path" varchar NOT NULL,
|
||||
"posts_id" integer
|
||||
);
|
||||
|
||||
ALTER TABLE "pages_blocks_fd_cta_banner" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "pages_blocks_fd_testimonial_testimonials" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "pages_blocks_fd_testimonial" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "pages_blocks_fd_team_members" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "pages_blocks_fd_team" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_blocks_fd_cta_banner" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_blocks_fd_testimonial_testimonials" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_blocks_fd_testimonial" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_blocks_fd_team_members" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "_pages_v_blocks_fd_team" DISABLE ROW LEVEL SECURITY;
|
||||
DROP TABLE "pages_blocks_fd_cta_banner" CASCADE;
|
||||
DROP TABLE "pages_blocks_fd_testimonial_testimonials" CASCADE;
|
||||
DROP TABLE "pages_blocks_fd_testimonial" CASCADE;
|
||||
DROP TABLE "pages_blocks_fd_team_members" CASCADE;
|
||||
DROP TABLE "pages_blocks_fd_team" CASCADE;
|
||||
DROP TABLE "_pages_v_blocks_fd_cta_banner" CASCADE;
|
||||
DROP TABLE "_pages_v_blocks_fd_testimonial_testimonials" CASCADE;
|
||||
DROP TABLE "_pages_v_blocks_fd_testimonial" CASCADE;
|
||||
DROP TABLE "_pages_v_blocks_fd_team_members" CASCADE;
|
||||
DROP TABLE "_pages_v_blocks_fd_team" CASCADE;
|
||||
DROP INDEX "pages_slug_idx";
|
||||
DROP INDEX "posts_slug_idx";
|
||||
ALTER TABLE "pages_blocks_fd_faq_items" ALTER COLUMN "answer" SET DATA TYPE varchar;
|
||||
ALTER TABLE "pages_blocks_fd_usp_table_rows" ALTER COLUMN "description" SET DATA TYPE varchar;
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ALTER COLUMN "description" SET DEFAULT 'Tell us about your goals, our team will reach out to you and help you achieve the right solution.';
|
||||
ALTER TABLE "pages_blocks_fd_text" ALTER COLUMN "body" SET DATA TYPE varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_faq_items" ALTER COLUMN "answer" SET DATA TYPE varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table_rows" ALTER COLUMN "description" SET DATA TYPE varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ALTER COLUMN "description" SET DEFAULT 'Tell us about your goals, our team will reach out to you and help you achieve the right solution.';
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" ALTER COLUMN "body" SET DATA TYPE varchar;
|
||||
ALTER TABLE "pages_blocks_fd_spacer" ADD COLUMN "background" "enum_pages_blocks_fd_spacer_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_icon_bar" ADD COLUMN "background" "enum_pages_blocks_fd_icon_bar_background" DEFAULT 'gray';
|
||||
ALTER TABLE "pages_blocks_fd_usp_checklist" ADD COLUMN "background" "enum_pages_blocks_fd_usp_checklist_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_tech_properties" ADD COLUMN "background" "enum_pages_blocks_fd_tech_properties_background" DEFAULT 'navy';
|
||||
ALTER TABLE "pages_blocks_fd_usp_table" ADD COLUMN "background" "enum_pages_blocks_fd_usp_table_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_header_text_image" ADD COLUMN "background" "enum_pages_blocks_fd_header_text_image_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" ADD COLUMN "background" "enum_pages_blocks_fd_contact_form_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages_blocks_fd_locations_grid" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_alternate_hero" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_statistics" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_partners_logos" ADD COLUMN "title" varchar DEFAULT 'Våra partners';
|
||||
ALTER TABLE "pages_blocks_fd_service_chooser" ADD COLUMN "title" varchar DEFAULT 'Välj din bransch';
|
||||
ALTER TABLE "pages_blocks_fd_data_table" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "pages_blocks_fd_text" ADD COLUMN "background" "enum_pages_blocks_fd_text_background" DEFAULT 'white';
|
||||
ALTER TABLE "pages" ADD COLUMN "hero_type" "enum_pages_hero_type" DEFAULT 'lowImpact';
|
||||
ALTER TABLE "pages" ADD COLUMN "hero_rich_text" jsonb;
|
||||
ALTER TABLE "pages" ADD COLUMN "hero_media_id" integer;
|
||||
ALTER TABLE "pages" ADD COLUMN "generate_slug" boolean DEFAULT true;
|
||||
ALTER TABLE "_pages_v_blocks_fd_spacer" ADD COLUMN "background" "enum__pages_v_blocks_fd_spacer_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_icon_bar" ADD COLUMN "background" "enum__pages_v_blocks_fd_icon_bar_background" DEFAULT 'gray';
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_checklist" ADD COLUMN "background" "enum__pages_v_blocks_fd_usp_checklist_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_tech_properties" ADD COLUMN "background" "enum__pages_v_blocks_fd_tech_properties_background" DEFAULT 'navy';
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table" ADD COLUMN "background" "enum__pages_v_blocks_fd_usp_table_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_header_text_image" ADD COLUMN "background" "enum__pages_v_blocks_fd_header_text_image_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" ADD COLUMN "background" "enum__pages_v_blocks_fd_contact_form_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v_blocks_fd_locations_grid" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_alternate_hero" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_statistics" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_partners_logos" ADD COLUMN "title" varchar DEFAULT 'Våra partners';
|
||||
ALTER TABLE "_pages_v_blocks_fd_service_chooser" ADD COLUMN "title" varchar DEFAULT 'Välj din bransch';
|
||||
ALTER TABLE "_pages_v_blocks_fd_data_table" ADD COLUMN "title" varchar;
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" ADD COLUMN "background" "enum__pages_v_blocks_fd_text_background" DEFAULT 'white';
|
||||
ALTER TABLE "_pages_v" ADD COLUMN "version_hero_type" "enum__pages_v_version_hero_type" DEFAULT 'lowImpact';
|
||||
ALTER TABLE "_pages_v" ADD COLUMN "version_hero_rich_text" jsonb;
|
||||
ALTER TABLE "_pages_v" ADD COLUMN "version_hero_media_id" integer;
|
||||
ALTER TABLE "_pages_v" ADD COLUMN "version_generate_slug" boolean DEFAULT true;
|
||||
ALTER TABLE "posts" ADD COLUMN "generate_slug" boolean DEFAULT true;
|
||||
ALTER TABLE "_posts_v" ADD COLUMN "version_generate_slug" boolean DEFAULT true;
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "search_id" integer;
|
||||
ALTER TABLE "pages_hero_links" ADD CONSTRAINT "pages_hero_links_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "pages_rels" ADD CONSTRAINT "pages_rels_posts_fk" FOREIGN KEY ("posts_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_version_hero_links" ADD CONSTRAINT "_pages_v_version_hero_links_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_rels" ADD CONSTRAINT "_pages_v_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_rels" ADD CONSTRAINT "_pages_v_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v_rels" ADD CONSTRAINT "_pages_v_rels_posts_fk" FOREIGN KEY ("posts_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "search_categories" ADD CONSTRAINT "search_categories_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."search"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "search" ADD CONSTRAINT "search_meta_image_id_media_id_fk" FOREIGN KEY ("meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "search_rels" ADD CONSTRAINT "search_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."search"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "search_rels" ADD CONSTRAINT "search_rels_posts_fk" FOREIGN KEY ("posts_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action;
|
||||
CREATE INDEX "pages_hero_links_order_idx" ON "pages_hero_links" USING btree ("_order");
|
||||
CREATE INDEX "pages_hero_links_parent_id_idx" ON "pages_hero_links" USING btree ("_parent_id");
|
||||
CREATE INDEX "pages_rels_order_idx" ON "pages_rels" USING btree ("order");
|
||||
CREATE INDEX "pages_rels_parent_idx" ON "pages_rels" USING btree ("parent_id");
|
||||
CREATE INDEX "pages_rels_path_idx" ON "pages_rels" USING btree ("path");
|
||||
CREATE INDEX "pages_rels_pages_id_idx" ON "pages_rels" USING btree ("pages_id");
|
||||
CREATE INDEX "pages_rels_posts_id_idx" ON "pages_rels" USING btree ("posts_id");
|
||||
CREATE INDEX "_pages_v_version_hero_links_order_idx" ON "_pages_v_version_hero_links" USING btree ("_order");
|
||||
CREATE INDEX "_pages_v_version_hero_links_parent_id_idx" ON "_pages_v_version_hero_links" USING btree ("_parent_id");
|
||||
CREATE INDEX "_pages_v_rels_order_idx" ON "_pages_v_rels" USING btree ("order");
|
||||
CREATE INDEX "_pages_v_rels_parent_idx" ON "_pages_v_rels" USING btree ("parent_id");
|
||||
CREATE INDEX "_pages_v_rels_path_idx" ON "_pages_v_rels" USING btree ("path");
|
||||
CREATE INDEX "_pages_v_rels_pages_id_idx" ON "_pages_v_rels" USING btree ("pages_id");
|
||||
CREATE INDEX "_pages_v_rels_posts_id_idx" ON "_pages_v_rels" USING btree ("posts_id");
|
||||
CREATE INDEX "search_categories_order_idx" ON "search_categories" USING btree ("_order");
|
||||
CREATE INDEX "search_categories_parent_id_idx" ON "search_categories" USING btree ("_parent_id");
|
||||
CREATE INDEX "search_slug_idx" ON "search" USING btree ("slug");
|
||||
CREATE INDEX "search_meta_meta_image_idx" ON "search" USING btree ("meta_image_id");
|
||||
CREATE INDEX "search_updated_at_idx" ON "search" USING btree ("updated_at");
|
||||
CREATE INDEX "search_created_at_idx" ON "search" USING btree ("created_at");
|
||||
CREATE INDEX "search_rels_order_idx" ON "search_rels" USING btree ("order");
|
||||
CREATE INDEX "search_rels_parent_idx" ON "search_rels" USING btree ("parent_id");
|
||||
CREATE INDEX "search_rels_path_idx" ON "search_rels" USING btree ("path");
|
||||
CREATE INDEX "search_rels_posts_id_idx" ON "search_rels" USING btree ("posts_id");
|
||||
ALTER TABLE "pages" ADD CONSTRAINT "pages_hero_media_id_media_id_fk" FOREIGN KEY ("hero_media_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "_pages_v" ADD CONSTRAINT "_pages_v_version_hero_media_id_media_id_fk" FOREIGN KEY ("version_hero_media_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_search_fk" FOREIGN KEY ("search_id") REFERENCES "public"."search"("id") ON DELETE cascade ON UPDATE no action;
|
||||
CREATE INDEX "pages_hero_hero_media_idx" ON "pages" USING btree ("hero_media_id");
|
||||
CREATE INDEX "_pages_v_version_hero_version_hero_media_idx" ON "_pages_v" USING btree ("version_hero_media_id");
|
||||
CREATE INDEX "payload_locked_documents_rels_search_id_idx" ON "payload_locked_documents_rels" USING btree ("search_id");
|
||||
CREATE UNIQUE INDEX "pages_slug_idx" ON "pages" USING btree ("slug");
|
||||
CREATE UNIQUE INDEX "posts_slug_idx" ON "posts" USING btree ("slug");
|
||||
ALTER TABLE "pages_blocks_fd_spacer" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_icon_bar" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_usp_checklist" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_tech_properties" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_usp_table" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_header_text_image" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "section_background";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "layout";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "external_api_enabled";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "external_api_endpoint";
|
||||
ALTER TABLE "pages_blocks_fd_contact_form" DROP COLUMN "external_api_auth_token";
|
||||
ALTER TABLE "pages_blocks_fd_locations_grid" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_alternate_hero" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_statistics" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_partners_logos" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_service_chooser" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_data_table" DROP COLUMN "heading";
|
||||
ALTER TABLE "pages_blocks_fd_text" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_spacer" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_icon_bar" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_checklist" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_tech_properties" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_usp_table" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_header_text_image" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "section_background";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "layout";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "external_api_enabled";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "external_api_endpoint";
|
||||
ALTER TABLE "_pages_v_blocks_fd_contact_form" DROP COLUMN "external_api_auth_token";
|
||||
ALTER TABLE "_pages_v_blocks_fd_locations_grid" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_alternate_hero" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_statistics" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_partners_logos" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_service_chooser" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_data_table" DROP COLUMN "heading";
|
||||
ALTER TABLE "_pages_v_blocks_fd_text" DROP COLUMN "section_background";
|
||||
ALTER TABLE "site_settings" DROP COLUMN "cookie_consent_accepted_days";
|
||||
ALTER TABLE "site_settings" DROP COLUMN "cookie_consent_declined_days";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_spacer_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_icon_bar_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_usp_checklist_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_tech_properties_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_usp_table_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_header_text_image_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_contact_form_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_contact_form_layout";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_text_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_cta_banner_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_cta_banner_alignment";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_cta_banner_size";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_testimonial_layout";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_testimonial_section_background";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_team_columns";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_team_card_style";
|
||||
DROP TYPE "public"."enum_pages_blocks_fd_team_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_spacer_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_icon_bar_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_usp_checklist_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_tech_properties_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_usp_table_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_header_text_image_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_contact_form_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_contact_form_layout";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_text_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_cta_banner_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_cta_banner_alignment";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_cta_banner_size";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_testimonial_layout";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_testimonial_section_background";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_team_columns";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_team_card_style";
|
||||
DROP TYPE "public"."enum__pages_v_blocks_fd_team_section_background";
|
||||
DROP TYPE "public"."enum_site_settings_cookie_consent_accepted_days";
|
||||
DROP TYPE "public"."enum_site_settings_cookie_consent_declined_days";`)
|
||||
}
|
||||
@ -4,6 +4,7 @@ import * as migration_20260216_171613 from './20260216_171613';
|
||||
import * as migration_20260216_183152 from './20260216_183152';
|
||||
import * as migration_20260216_184110 from './20260216_184110';
|
||||
import * as migration_20260216_184342 from './20260216_184342';
|
||||
import * as migration_20260218_130902 from './20260218_130902';
|
||||
|
||||
export const migrations = [
|
||||
{
|
||||
@ -34,6 +35,11 @@ export const migrations = [
|
||||
{
|
||||
up: migration_20260216_184342.up,
|
||||
down: migration_20260216_184342.down,
|
||||
name: '20260216_184342'
|
||||
name: '20260216_184342',
|
||||
},
|
||||
{
|
||||
up: migration_20260218_130902.up,
|
||||
down: migration_20260218_130902.down,
|
||||
name: '20260218_130902'
|
||||
},
|
||||
];
|
||||
|
||||
@ -2874,6 +2874,14 @@ export interface SiteSetting {
|
||||
cookieConsent?: {
|
||||
enabled?: boolean | null;
|
||||
privacyPolicyUrl?: string | null;
|
||||
/**
|
||||
* Hur många dagar besökarens accept-val sparas innan bannern visas igen. "Webbläsarsession" = försvinner när fliken/webbläsaren stängs.
|
||||
*/
|
||||
acceptedDays?: ('0' | '30' | '90' | '180' | '365') | null;
|
||||
/**
|
||||
* Hur många dagar bannern döljs när besökaren avvisat. Efter detta visas bannern igen. Kortare tid = fler chanser att få samtycke.
|
||||
*/
|
||||
declinedDays?: ('0' | '7' | '14' | '30' | '90') | null;
|
||||
};
|
||||
matomo?: {
|
||||
enabled?: boolean | null;
|
||||
@ -3013,6 +3021,8 @@ export interface SiteSettingsSelect<T extends boolean = true> {
|
||||
| {
|
||||
enabled?: T;
|
||||
privacyPolicyUrl?: T;
|
||||
acceptedDays?: T;
|
||||
declinedDays?: T;
|
||||
};
|
||||
matomo?:
|
||||
| T
|
||||
|
||||
Loading…
Reference in New Issue
Block a user