From ce471faa683fcabf4599df32b2addd6f2db89a5b Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 6 Jun 2025 17:17:42 +0530 Subject: [PATCH] address comments. --- .github/workflows/publish.yml | 2 + src/lib/flags.ts | 38 +++++++------------ .../collection-[collection]/+page.svelte | 2 +- .../project-[region]-[project]/sites/+page.ts | 2 +- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 40e336f54..998d91f7e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -117,6 +117,7 @@ jobs: build-args: | "PUBLIC_CONSOLE_MODE=self-hosted" "PUBLIC_APPWRITE_MULTI_REGION=false" + "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" publish-cloud-no-regions: @@ -154,5 +155,6 @@ jobs: build-args: | "PUBLIC_CONSOLE_MODE=cloud" "PUBLIC_APPWRITE_MULTI_REGION=false" + "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" "PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" diff --git a/src/lib/flags.ts b/src/lib/flags.ts index f28581c79..57b3f3952 100644 --- a/src/lib/flags.ts +++ b/src/lib/flags.ts @@ -1,34 +1,24 @@ import { env } from '$env/dynamic/public'; -import type { Organization } from './stores/organization'; import type { Account } from './stores/user'; +import type { Organization } from './stores/organization'; -export const PUBLIC_CONSOLE_FEATURE_FLAGS = env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? ''; +// Parse feature flags from env as a string array (exact match only) +const flagsRaw = (env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? '').split(','); -function setupFlag(name: string, _description: string) { - // TODO: Use flags library that provides visual component during development +function isFlagEnabled(name: string) { + // loose generic to allow safe access while retaining type safety + return (data: T) => { + const { user, organization } = data; - return (user: Account, organization: Organization) => { - if (PUBLIC_CONSOLE_FEATURE_FLAGS.includes(name)) { - return true; - } - - const userPrefs = user?.prefs ?? {}; - const userFlag = userPrefs[`flags-${name}`] ?? null; - if (userFlag) { - return true; - } - - const organizationPrefs = organization?.prefs ?? {}; - const organizationFlag = organizationPrefs[`flags-${name}`] ?? null; - if (organizationFlag) { - return true; - } - - return false; + return !!( + flagsRaw.includes(name) || + user?.prefs?.[`flags-${name}`] || + organization?.prefs?.[`flags-${name}`] + ); }; } export const flags = { - showSites: setupFlag('sites', 'When disabled, sites view will show high demand'), - showCsvImport: setupFlag('csv-import', 'When disabled, documents view will hide import button') + showSites: isFlagEnabled('sites'), + showCsvImport: isFlagEnabled('csv-import') }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte index 07c8d6ab9..289cb6368 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte @@ -100,7 +100,7 @@ analyticsSource="database_documents" /> - {#if flags.showCsvImport(data.account, data.organization)} + {#if flags.showCsvImport(data)}