From 746bc9a55e5b5a839b9a35da191fdcc588ee075b Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Thu, 6 Aug 2026 18:43:22 -0700 Subject: [PATCH] disclosures in search --- apps/app-frontend/src/pages/Browse.vue | 14 ++ apps/app-frontend/src/store/theme.ts | 1 + apps/frontend/src/composables/featureFlags.ts | 1 + .../src/pages/discover/[type]/index.vue | 9 + packages/app-lib/src/state/settings.rs | 1 + .../modal/PhotosensitivityWarningModal.vue | 100 +++++++++++ packages/ui/src/components/modal/index.ts | 1 + .../browse-tab/providers/browse-manager.ts | 1 + .../src/layouts/shared/browse-tab/sidebar.vue | 33 +++- packages/ui/src/locales/de-CH/index.json | 10 -- packages/ui/src/locales/de-DE/index.json | 10 -- packages/ui/src/locales/en-US/index.json | 44 ++++- packages/ui/src/locales/es-419/index.json | 10 -- packages/ui/src/locales/fr-FR/index.json | 9 - packages/ui/src/locales/it-IT/index.json | 9 - packages/ui/src/locales/ja-JP/index.json | 3 - packages/ui/src/locales/ko-KR/index.json | 9 - packages/ui/src/locales/nl-NL/index.json | 9 - packages/ui/src/locales/pl-PL/index.json | 9 - packages/ui/src/locales/pt-BR/index.json | 10 -- packages/ui/src/locales/ru-RU/index.json | 9 - packages/ui/src/locales/sr-CS/index.json | 10 -- packages/ui/src/locales/sv-SE/index.json | 7 - packages/ui/src/locales/tr-TR/index.json | 9 - packages/ui/src/locales/uk-UA/index.json | 9 - packages/ui/src/locales/zh-CN/index.json | 10 -- packages/ui/src/locales/zh-TW/index.json | 10 -- packages/ui/src/utils/search.ts | 156 +++++++++++++++--- 28 files changed, 329 insertions(+), 184 deletions(-) create mode 100644 packages/ui/src/components/modal/PhotosensitivityWarningModal.vue 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 @@ + + + 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 @@