enable feature flags for app, add docs

This commit is contained in:
Will Freeman
2025-10-25 14:33:09 -06:00
parent 37150211e4
commit 0089241a53
3 changed files with 119 additions and 9 deletions
+71
View File
@@ -0,0 +1,71 @@
import { ref, readonly } from 'vue';
interface FeatureFlags {
iosApp: {
enabled: boolean;
appUrl: string;
};
}
const flags = ref<FeatureFlags | null>(null);
const isLoading = ref(false);
const error = ref<string | null>(null);
let fetchPromise: Promise<void> | null = null;
async function fetchFeatureFlags(): Promise<void> {
if (flags.value !== null) {
// Already loaded
return;
}
if (fetchPromise) {
// Already fetching, wait for the existing promise
return fetchPromise;
}
fetchPromise = (async () => {
try {
isLoading.value = true;
error.value = null;
const response = await fetch('https://cdn.deflock.me/config/flags.json');
if (!response.ok) {
throw new Error(`Failed to fetch feature flags: ${response.status}`);
}
const data = await response.json();
flags.value = data;
} catch (err) {
error.value = err instanceof Error ? err.message : 'Unknown error';
console.warn('Failed to load feature flags, using defaults:', error.value);
// Fallback to default values
flags.value = {
iosApp: {
enabled: false,
appUrl: ''
}
};
} finally {
isLoading.value = false;
}
})();
return fetchPromise;
}
export function useFeatureFlags() {
// Auto-fetch on first use
if (!fetchPromise) {
fetchFeatureFlags();
}
return {
flags: readonly(flags),
isLoading: readonly(isLoading),
error: readonly(error),
refresh: fetchFeatureFlags
};
}