diff --git a/apps/app-frontend/src/pages/Browse.vue b/apps/app-frontend/src/pages/Browse.vue index f2a4eb084e..1d6a4b2fcd 100644 --- a/apps/app-frontend/src/pages/Browse.vue +++ b/apps/app-frontend/src/pages/Browse.vue @@ -1242,11 +1242,25 @@ const advancedFiltersCollapsed = computed({ }, }) +const dismissedPhotosensitivityFilterWarning = computed({ + get: () => themeStore.getFeatureFlag('dismissed_photosensitivity_filter_warning'), + set: (value) => { + themeStore.featureFlags['dismissed_photosensitivity_filter_warning'] = value + getSettings() + .then((settings) => { + settings.feature_flags['dismissed_photosensitivity_filter_warning'] = value + return setSettings(settings) + }) + .catch(handleError) + }, +}) + provideBrowseManager({ tags, projectType, ...searchState, advancedFiltersCollapsed, + dismissedPhotosensitivityFilterWarning, getProjectLink: (result: Labrinth.Search.v3.ResultSearchProject) => ({ path: `/project/${result.project_id ?? result.slug}`, query: getProjectBrowseQuery(), diff --git a/apps/app-frontend/src/store/theme.ts b/apps/app-frontend/src/store/theme.ts index 00d47dc5f3..8e0fe8f2b7 100644 --- a/apps/app-frontend/src/store/theme.ts +++ b/apps/app-frontend/src/store/theme.ts @@ -22,6 +22,7 @@ export const DEFAULT_FEATURE_FLAGS = { friends_online_collapsed: false, friends_offline_collapsed: true, friends_pending_collapsed: true, + dismissed_photosensitivity_filter_warning: false, } export const THEME_OPTIONS = ['dark', 'light', 'oled', 'retro', 'system'] as const diff --git a/apps/frontend/src/composables/featureFlags.ts b/apps/frontend/src/composables/featureFlags.ts index 3dcc90f86e..f19838f321 100644 --- a/apps/frontend/src/composables/featureFlags.ts +++ b/apps/frontend/src/composables/featureFlags.ts @@ -58,6 +58,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({ versionDevInfoCollapsed: true, alwaysShowVersionDevInfo: false, advancedFiltersCollapsed: true, + dismissedPhotosensitivityFilterWarning: false, } as const) export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS diff --git a/apps/frontend/src/pages/discover/[type]/index.vue b/apps/frontend/src/pages/discover/[type]/index.vue index 993c13eabe..ad78cef14a 100644 --- a/apps/frontend/src/pages/discover/[type]/index.vue +++ b/apps/frontend/src/pages/discover/[type]/index.vue @@ -416,6 +416,14 @@ const advancedFiltersCollapsed = computed({ }, }) +const dismissedPhotosensitivityFilterWarning = computed({ + get: () => flags.value.dismissedPhotosensitivityFilterWarning, + set: (value) => { + flags.value.dismissedPhotosensitivityFilterWarning = value + saveFeatureFlags() + }, +}) + const projectTypeId = computed(() => projectType.value?.id ?? 'mod') debug('projectTypeId:', projectTypeId.value) @@ -525,6 +533,7 @@ provideBrowseManager({ serverOnlyLabel: computed(() => formatMessage(commonMessages.serverOnlyLabel)), hiddenFilterTypes: computed(() => (showServerOnlyToggle.value ? ['environment'] : [])), advancedFiltersCollapsed, + dismissedPhotosensitivityFilterWarning, displayMode: resultsDisplayMode, cycleDisplayMode: cycleSearchDisplayMode, maxResultsOptions: currentMaxResultsOptions, diff --git a/packages/app-lib/src/state/settings.rs b/packages/app-lib/src/state/settings.rs index 2e831754a5..7be6f700b5 100644 --- a/packages/app-lib/src/state/settings.rs +++ b/packages/app-lib/src/state/settings.rs @@ -70,6 +70,7 @@ pub enum FeatureFlag { FriendsOnlineCollapsed, FriendsOfflineCollapsed, FriendsPendingCollapsed, + DismissedPhotosensitivityFilterWarning, } impl Settings { diff --git a/packages/ui/src/components/modal/PhotosensitivityWarningModal.vue b/packages/ui/src/components/modal/PhotosensitivityWarningModal.vue new file mode 100644 index 0000000000..e3b905c6df --- /dev/null +++ b/packages/ui/src/components/modal/PhotosensitivityWarningModal.vue @@ -0,0 +1,100 @@ + + + + + {{ formatMessage(messages.body1) }} + + + {{ formatMessage(messages.body2) }} + + + + + + + {{ formatMessage(messages.iUnderstand) }} + + + + + + + diff --git a/packages/ui/src/components/modal/index.ts b/packages/ui/src/components/modal/index.ts index 4f27f8c31c..76f7171a9b 100644 --- a/packages/ui/src/components/modal/index.ts +++ b/packages/ui/src/components/modal/index.ts @@ -3,6 +3,7 @@ export { default as ConfirmModal } from './ConfirmModal.vue' export { default as NewModal } from './NewModal.vue' export type { ServerProject as OpenInAppModalServerProject } from './OpenInAppModal.vue' export { default as OpenInAppModal } from './OpenInAppModal.vue' +export { default as PhotosensitivityWarningModal } from './PhotosensitivityWarningModal.vue' export { default as ShareModal } from './ShareModal.vue' export type { Tab as TabbedModalTab } from './TabbedModal.vue' export { default as TabbedModal } from './TabbedModal.vue' diff --git a/packages/ui/src/layouts/shared/browse-tab/providers/browse-manager.ts b/packages/ui/src/layouts/shared/browse-tab/providers/browse-manager.ts index be69ef92c0..92c1d0a653 100644 --- a/packages/ui/src/layouts/shared/browse-tab/providers/browse-manager.ts +++ b/packages/ui/src/layouts/shared/browse-tab/providers/browse-manager.ts @@ -74,6 +74,7 @@ export interface BrowseManagerContext { serverOnlyLabel?: ComputedRef hiddenFilterTypes?: ComputedRef advancedFiltersCollapsed?: Ref + dismissedPhotosensitivityFilterWarning?: Ref onInstalled?: (projectId: string) => void displayMode?: Ref<'list' | 'grid' | 'gallery'> | ComputedRef<'list' | 'grid' | 'gallery'> diff --git a/packages/ui/src/layouts/shared/browse-tab/sidebar.vue b/packages/ui/src/layouts/shared/browse-tab/sidebar.vue index 399d3153b2..8fcd94aedd 100644 --- a/packages/ui/src/layouts/shared/browse-tab/sidebar.vue +++ b/packages/ui/src/layouts/shared/browse-tab/sidebar.vue @@ -1,15 +1,18 @@
+ {{ formatMessage(messages.body1) }} +
+ {{ formatMessage(messages.body2) }} +