2024-07-06 20:57:32 -07:00
|
|
|
import type { CookieOptions } from "#app";
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type ProjectDisplayMode = "list" | "grid" | "gallery";
|
|
|
|
|
export type DarkColorTheme = "dark" | "oled" | "retro";
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
export interface NumberFlag {
|
2024-07-06 20:57:32 -07:00
|
|
|
min: number;
|
|
|
|
|
max: number;
|
2024-06-11 19:46:07 -07:00
|
|
|
}
|
|
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type BooleanFlag = boolean;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type RadioFlag = ProjectDisplayMode | DarkColorTheme;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type FlagValue = BooleanFlag; /* | NumberFlag | RadioFlag */
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
const validateValues = <K extends PropertyKey>(flags: Record<K, FlagValue>) => flags;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
export const DEFAULT_FEATURE_FLAGS = validateValues({
|
|
|
|
|
// Developer flags
|
|
|
|
|
developerMode: false,
|
2024-08-26 16:53:27 -07:00
|
|
|
showVersionFilesInTable: false,
|
|
|
|
|
showAdsWithPlus: false,
|
2025-02-19 22:00:52 -08:00
|
|
|
alwaysShowChecklistAsPopup: true,
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
// Feature toggles
|
Pyro Integration (#2503)
* fix
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor(fileitem): optimize
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(fileitem): fixed width timestamp
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(fileitem): allow editing json5/jsonc
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: motd pt 1, auto backups scaffolding, editing navbar changes
* feat: fancy sidebar animations
* fix: files
* fix: files pt2
* fix: faulty name validation disallowing spaces in file names
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor: fileitem props
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: upload files not refreshing files list
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(imgviewer): handle invalid/empty images
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: return of the sticky files header
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: prevent servericon from shrinking
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: wtf were we thinking with this anyway
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: further mobile optimization
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: propagate margin
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: truncation fixes
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: track navbar with sentinel
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(files): a11y
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: improve inspector styles
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: console preformance improvements, decrease blur
* feat(mobile): new server header
* fix: linting
* fix: useless z indeces
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust file filter names
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(files): true breadcrumbs
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(marketing): make custom responsive
* fix(marketing): mobile file manager card
* feat: trackable navtabs
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: oh no
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: smartly truncate
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): z-indexes
* fix: autofocus more inputs
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: color
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust copy
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: backup modal usability improvements
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: padding
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: title
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(content): update banner mobile support
* fix: server listing icons
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: ignore clicks in server listing for labels
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(mobile): backup card
* fix(backups): make plural conditional
* fix: debounce file item selectitem
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: lint
Signed-off-by: Evan Song <theevansong@gmail.com>
* stuff
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: temp sidebar fix until i can be smart
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: explictly set button type in file modals
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: properly sort backups
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: add getautobackup method to pyroservers
Signed-off-by: Evan Song <theevansong@gmail.com>
* choer: update autobackup params
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: update autobackup methods (REALLY GUYS)
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: implement autobackups
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: implement backup-while-running preference
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: make server labels a component
* feat: implement 'All details' modal
* fix(mobile): server manage page
* feat(files): mobile compatible
* fix(info labels): wrap
* chore(inspector): clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(backup settings): swap + and -
* fix(manage): new -> plans instead of modal
* feat: more small mobile fixes
* fix(auto backup modal): manual input validation
* fix(file browse navbar): home margin
* feat(purchase modal): mobile support
* fix(marketing): faded line alignments
* feat: add servers to mobile nav
* feat(network): dns record fixes
* feat: make all settings work on mobile
* fix(loader settings): modpack mobile
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(marketing): add 'Manage your servers' button
* fix(marketing): only check servers if logged in
* fix(network): allocation edit & delete button
* fix(backups): use UiServersTeleportOverflowMenu
* chore: linting
* chore: but here comes the sentence case
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(marketing): make buttons consistent
* lint
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(loader): prevent multiline version names in dropdown
Signed-off-by: Evan Song <theevansong@gmail.com>
* lint
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: copy
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: sentence case
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: linting
* chore: rename dumbass preference key
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor: rewrite power action buttons
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: robust download logic
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(loader mobile): modpack dropdown width
* fix: sentence case
* fix(save & 'working on it'): look good on mobile
* fix(TeleportDropdown): width
* fix(inspecting error): mobile
* fix: show action button dropdown when installing
* fix(navtabs): temp fix for mobile scrolling issue
* fix(install error): mobile compatible
* chore: just remove tracking
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: cleanup
* fix: broken svg clr in checkbox when using experimental styles
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust vanilla icon
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust loader props
Signed-off-by: Evan Song <theevansong@gmail.com>
* revert changes to serversidebar
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: server properties flicker
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(backups): plural
* fix: cases where the telepoverflow would clash with viewport edge
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(backups): auto-backups label
* fix(network): titlecase
* feat(fileitem): new rename icon
* fix(properties): wiki proper noun
* fix: disable motd for the time being
* chore: adjust wording for power conifmration
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: "external" to billing
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: icon
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: add EULA checkbox
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* me and bro deciding which case rules to enforce
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(sftp): copy address & username, launch tooltip
* feat(files): better move
* chore: attempt to mitigate excessive stack depth type
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(loader): prevent versions 1.2.4 and below
* feat(dns table): placeholder improvements
* feat(pyroServer): error handling
* fix: intrinsic size on loader icon
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust wording
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: sentence case
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust wording
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: types
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: "implemented" key in preference
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(connection lost): redesign
* feat(connection error): make icon orange
* fix: cleanup
* chore(connection lost): redesign pt 2
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: OOOOHHH MY GOD
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: implement capacity api on marketing
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: update createdat backup type
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor: all of backups
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: update backup types
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor: backups pt 2
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: comically small icons
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: align designs
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: hide ram graph if ram as bytes enabled
Signed-off-by: Evan Song <theevansong@gmail.com>
* base add content page
* Fix conflict
* feat(content): mobile-compatible header, sticky
* fix(marketing): md instead of sm for custom
* fix: compiler macro warning
Signed-off-by: Evan Song <theevansong@gmail.com>
* again
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: loader type error
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: default uptime seconds prop
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: hydration errors on server listing
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: move custom URL to general
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: indiviudally checkj capacities
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: falsey
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: missing prop
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: Derive On That Thang
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: adjust gap
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: add default name for backups
* fix: the backup number should PROBABLY be computed lol
* fix(backups): truncate text, mobile fixes
* fix(loader): modpack mobile fix
* feat(plans): add vcpus
* fix(backup modal): blank by default, maxlength
* fix(subdomain): separate length & valid chars
* feat: mrpack installs functionality (untested), forbidden handling, backups grammar
* feat(content): make responsive on mobile
* fix: disable plan buttons separately
* fix(backup modal): update name max length
* fix(purchase): wrapping on eula, eula link
* fix: move skeleton
* fix(server mobile header): truncation
* fix(server header): proper alignment
* Finish content page fixes
* fix: who up rinthing
Signed-off-by: Evan Song <theevansong@gmail.com>
* wip
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(staging & email banner): z-index
* feat: make eula tickbox more visible
* fix: move "powered by pyro" below buttons on hero
* fix: oops sorry ellie, also updated the main screenshot
* feat: update content screenshot
* fix: content page card should hide image on lg
* feat: hide total storage for now
* fix: terminal card now uses terminal icon
* fix(marketing): make medium plan card border solid
* feat: modloader card, move pyro BACK below buttons, beta release pill
* fix: spinning logo should be behind hero
* feat: surgically remove the hero's massive forehead
* feat(marketing): mobile UI screenshot
* fix(hero): z-index goes over mobile nav
* fix: consistent borders, files breakpoints
* chore: update turbo
* chore: adjust hero sizing
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: mention region restrictions
* chore: double check if we are at capcity
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: measure twice cut once
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: bro cut twice and measured once 💀
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(marketing): login first
* fix: out of capacity text when logged out
* fix(slider): reset some values for frontend
* feat: wip hero section
Signed-off-by: Evan Song <theevansong@gmail.com>
* New navigation to support the new products (#2879)
* Nav
* oops extra file
* feat: mrpack uploading with existing modpack, fix: choose modpack duplicate
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: update features section
Signed-off-by: Evan Song <theevansong@gmail.com>
* Nav adjustments
* fix: server manager empty state clashing with loading state
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: query param hard
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: do not count uptime if crashed
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: grammar
Signed-off-by: Evan Song <theevansong@gmail.com>
* hide hero img on lg breakpoints
* Make plugins a plug
* chore: prep for buffered text selection terminal
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: marketing responsive stuff, n fixes
* fix hoverable prop
* fix: edit mod spacing
* fix: type error for display name in dropdown
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: custom plans
* fix: no more console.log
* fix: properly linked prop label
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(install hero mobile): padding
* fix: prevent x overflow on servers page
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix lint oh ym fucking god yal
Signed-off-by: Evan Song <theevansong@gmail.com>
* Migrate modpack install to search
* fix(custom plan): warning icon variable
* fix: loading probally and modal loader things
* fix(marketing): login icon colours
* fix(marketing): responsiveness
* fix(marketing): responsiveness v2
* fix: sync button for icon tm
* fix(marketing): responsiveness v3
* fix: hero image
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: switch to cdn links
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: switch to cdn links
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: switch to cdn links
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: switch to cdn links
Signed-off-by: Evan Song <theevansong@gmail.com>
* Remove prod override
---------
Signed-off-by: Evan Song <theevansong@gmail.com>
Co-authored-by: Evan Song <theevansong@gmail.com>
Co-authored-by: TheWander02 <48934424+thewander02@users.noreply.github.com>
Co-authored-by: he3als <65787561+he3als@users.noreply.github.com>
Co-authored-by: Evan Song <52982404+ferothefox@users.noreply.github.com>
Co-authored-by: Lio <git@lio.cat>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: not-nullptr <needhelpwithrift@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: sticks <tanner@teamhydra.dev>
2024-11-02 23:14:00 -05:00
|
|
|
projectTypesPrimaryNav: false,
|
|
|
|
|
hidePlusPromoInUserMenu: false,
|
App redesign (#2946)
* Start of app redesign
* format
* continue progress
* Content page nearly done
* Fix recursion issues with content page
* Fix update all alignment
* Discover page progress
* Settings progress
* Removed unlocked-size hack that breaks web
* Revamp project page, refactor web project page to share code with app, fixed loading bar, misc UI/UX enhancements, update ko-fi logo, update arrow icons, fix web issues caused by floating-vue migration, fix tooltip issues, update web tooltips, clean up web hydration issues
* Ads + run prettier
* Begin auth refactor, move common messages to ui lib, add i18n extraction to all apps, begin Library refactor
* fix ads not hiding when plus log in
* rev lockfile changes/conflicts
* Fix sign in page
* Add generated
* (mostly) Data driven search
* Fix search mobile issue
* profile fixes
* Project versions page, fix typescript on UI lib and misc fixes
* Remove unused gallery component
* Fix linkfunction err
* Search filter controls at top, localization for locked filters
* Fix provided filter names
* Fix navigating from instance browse to main browse
* Friends frontend (#2995)
* Friends system frontend
* (almost) finish frontend
* finish friends, fix lint
* Fix lint
---------
Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
* Refresh macOS app icon
* Update web search UI more
* Fix link opens
* Fix frontend build
---------
Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-12-11 19:54:18 -08:00
|
|
|
oldProjectCards: true,
|
|
|
|
|
newProjectCards: false,
|
|
|
|
|
projectBackground: false,
|
|
|
|
|
searchBackground: false,
|
2025-04-17 04:26:13 -04:00
|
|
|
advancedDebugInfo: false,
|
2025-06-28 14:55:01 -07:00
|
|
|
showProjectPageDownloadModalServersPromo: false,
|
2025-06-26 08:38:42 -07:00
|
|
|
showProjectPageCreateServersTooltip: true,
|
|
|
|
|
showProjectPageQuickServerButton: false,
|
2024-06-11 19:46:07 -07:00
|
|
|
// advancedRendering: true,
|
|
|
|
|
// externalLinksNewTab: true,
|
|
|
|
|
// notUsingBlockers: false,
|
|
|
|
|
// hideModrinthAppPromos: false,
|
|
|
|
|
// preferredDarkTheme: 'dark',
|
|
|
|
|
// hideStagingBanner: false,
|
|
|
|
|
|
|
|
|
|
// Project display modes
|
|
|
|
|
// modSearchDisplayMode: 'list',
|
|
|
|
|
// pluginSearchDisplayMode: 'list',
|
|
|
|
|
// resourcePackSearchDisplayMode: 'gallery',
|
|
|
|
|
// modpackSearchDisplayMode: 'list',
|
|
|
|
|
// shaderSearchDisplayMode: 'gallery',
|
|
|
|
|
// dataPackSearchDisplayMode: 'list',
|
|
|
|
|
// userProjectDisplayMode: 'list',
|
|
|
|
|
// collectionProjectDisplayMode: 'list',
|
2024-07-06 20:57:32 -07:00
|
|
|
} as const);
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
export type AllFeatureFlags = {
|
2024-07-06 20:57:32 -07:00
|
|
|
[key in FeatureFlag]: (typeof DEFAULT_FEATURE_FLAGS)[key];
|
|
|
|
|
};
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
export type PartialFeatureFlags = Partial<AllFeatureFlags>;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-06-14 22:23:02 +02:00
|
|
|
const COOKIE_OPTIONS = {
|
2024-06-11 19:46:07 -07:00
|
|
|
maxAge: 60 * 60 * 24 * 365 * 10,
|
2024-07-06 20:57:32 -07:00
|
|
|
sameSite: "lax",
|
2024-06-11 19:46:07 -07:00
|
|
|
secure: true,
|
|
|
|
|
httpOnly: false,
|
2024-07-06 20:57:32 -07:00
|
|
|
path: "/",
|
|
|
|
|
} satisfies CookieOptions<PartialFeatureFlags>;
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
export const useFeatureFlags = () =>
|
2024-07-06 20:57:32 -07:00
|
|
|
useState<AllFeatureFlags>("featureFlags", () => {
|
|
|
|
|
const config = useRuntimeConfig();
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
const savedFlags = useCookie<PartialFeatureFlags>("featureFlags", COOKIE_OPTIONS);
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
if (!savedFlags.value) {
|
2024-07-06 20:57:32 -07:00
|
|
|
savedFlags.value = {};
|
2024-06-11 19:46:07 -07:00
|
|
|
}
|
|
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
const flags: AllFeatureFlags = JSON.parse(JSON.stringify(DEFAULT_FEATURE_FLAGS));
|
2024-06-11 19:46:07 -07:00
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
const overrides = config.public.featureFlagOverrides as PartialFeatureFlags;
|
2024-06-11 19:46:07 -07:00
|
|
|
for (const key in overrides) {
|
|
|
|
|
if (key in flags) {
|
2024-07-06 20:57:32 -07:00
|
|
|
const flag = key as FeatureFlag;
|
|
|
|
|
const value = overrides[flag] as (typeof flags)[FeatureFlag];
|
|
|
|
|
flags[flag] = value;
|
2024-06-11 19:46:07 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const key in savedFlags.value) {
|
|
|
|
|
if (key in flags) {
|
2024-07-06 20:57:32 -07:00
|
|
|
const flag = key as FeatureFlag;
|
|
|
|
|
const value = savedFlags.value[flag] as (typeof flags)[FeatureFlag];
|
|
|
|
|
flags[flag] = value;
|
2024-06-11 19:46:07 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-06 20:57:32 -07:00
|
|
|
return flags;
|
|
|
|
|
});
|
2024-06-11 19:46:07 -07:00
|
|
|
|
|
|
|
|
export const saveFeatureFlags = () => {
|
2024-07-06 20:57:32 -07:00
|
|
|
const flags = useFeatureFlags();
|
|
|
|
|
const cookie = useCookie<PartialFeatureFlags>("featureFlags", COOKIE_OPTIONS);
|
|
|
|
|
cookie.value = flags.value;
|
|
|
|
|
};
|