All checks were successful
		
		
	
	Check usage of free licenses / build-static-assets (pull_request) Successful in 30s
				
			Add copyright notice / copyright_notice (pull_request) Successful in 58s
				
			Build Nginx-based docker image / build-static-assets (push) Successful in 2m58s
				
			Playwright Tests / test (pull_request) Successful in 4m25s
				
			
		
			
				
	
	
		
			34 lines
		
	
	
		
			952 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			952 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/
 | |
| 
 | |
| 'use client'
 | |
| 
 | |
| import { AbstractApi } from '@/app/api/abstract-api';
 | |
| import { Website, WebsiteSerializer } from '@/app/lib/website';
 | |
| import { useState, useEffect } from 'react';
 | |
| import DOMPurify from "dompurify";
 | |
| import { useParams } from 'next/navigation';
 | |
| 
 | |
| export default function Page() {
 | |
|     const params = useParams<{ slug: string }>()
 | |
|   
 | |
|     useEffect(() => {
 | |
|       if (typeof window !== 'undefined') {
 | |
|         localStorage.setItem('slug', params.slug);
 | |
|       }
 | |
|     }, []);
 | |
| 
 | |
|   const [websiteContent, setWebsiteContent] = useState<string>("");
 | |
| 
 | |
|   const api = new AbstractApi<Website>();
 | |
|   const serializer = new WebsiteSerializer();
 | |
| 
 | |
|   useEffect(() => {
 | |
|     api.get(serializer, undefined, (loadedWebsite) => {
 | |
|       setWebsiteContent(loadedWebsite.content || "");
 | |
|     });
 | |
|   }, []);
 | |
| 
 | |
|   return (
 | |
|     <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(websiteContent) }} />
 | |
|   );
 | |
| } |