From 4a36260152511b2dd439a02b22c291c346fe48b2 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 3 Jun 2025 17:17:20 +0200 Subject: [PATCH] Add Sites feature flag and unavailable state Display waitlist message when Sites feature is disabled. The feature can be toggled via the sitesLive flag and includes responsive mobile images for the unavailable state. --- .../sites/+page.svelte | 90 ++++++++++++------- .../project-[region]-[project]/sites/+page.ts | 13 ++- 2 files changed, 68 insertions(+), 35 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index be8278543..b13c125df 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -11,12 +11,14 @@ import { isServiceLimited } from '$lib/stores/billing'; import { organization } from '$lib/stores/organization'; import { canWriteSites } from '$lib/stores/roles.js'; - import { Icon, Layout } from '@appwrite.io/pink-svelte'; + import { Card, Icon, Layout, Typography } from '@appwrite.io/pink-svelte'; import { Button } from '$lib/elements/forms'; import { app } from '$lib/stores/app'; import CreateSiteModal from './createSiteModal.svelte'; import EmptyLight from './(images)/empty-sites-light.svg'; import EmptyDark from './(images)/empty-sites-dark.svg'; + import EmptyLightMobile from './(images)/empty-sites-light-mobile.svg'; + import EmptyDarkMobile from './(images)/empty-sites-dark-mobile.svg'; import Grid from './grid.svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import { columns } from './store'; @@ -26,6 +28,7 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; + import { isSmallViewport } from '$lib/stores/viewport'; export let data; @@ -55,46 +58,65 @@ } }); }); + + $: isDark = $app.themeInUse === 'dark'; + $: imgSrc = isDark + ? $isSmallViewport + ? EmptyDarkMobile + : EmptyDark + : $isSmallViewport + ? EmptyLightMobile + : EmptyLight; + $: imgClass = $isSmallViewport ? 'mobile' : 'desktop'; - - - - - - - {#if $canWriteSites} - + {#if data.sitesLive} + {#if data.siteList.total} + {#if data.view === View.Grid} + + {:else} + {/if} - - - {#if data.siteList.total} - {#if data.view === View.Grid} - + + {:else if data.search} + {:else} -
+ (show = true)}> + {/if} - - {:else if data.search} - {:else} - (show = true)}> - + + + + + + + + Appwrite Sites is in high demand + + +
+ + To ensure a smooth experience for everyone, we’re rolling out access + gradually. + +
+
+
+
+
{/if} diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index 62eeb026a..b041a903f 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -5,13 +5,23 @@ import { CARD_LIMIT, Dependencies } from '$lib/constants'; export const load = async ({ url, depends, route, params }) => { depends(Dependencies.SITES); - const page = getPage(url); const search = getSearch(url); const limit = getLimit(url, route, CARD_LIMIT); const offset = pageToOffset(page, limit); const view = getView(url, route, View.Grid, View.Grid); + const sitesLive = false; + + if (!sitesLive) + return { + sitesLive, + offset, + limit, + search, + view + }; + const siteList = await sdk .forProject(params.region, params.project) .sites.list( @@ -20,6 +30,7 @@ export const load = async ({ url, depends, route, params }) => { ); return { + sitesLive, offset, limit, search,