aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com>2024-07-04 20:02:57 +0200
committerGitHub <noreply@github.com>2024-07-04 20:02:57 +0200
commit8ae6980f59d22a4f03556b362a9ab8845cfe3592 (patch)
treeaabcc839074a8ad33cedbee802f4ff8d8773818a
parentfb2bb020a23d1ae59e426f8c00cee6f6f945ec12 (diff)
downloadFlightCore-8ae6980f59d22a4f03556b362a9ab8845cfe3592.tar.gz
FlightCore-8ae6980f59d22a4f03556b362a9ab8845cfe3592.zip
feat: Filter NSFW mods by default (#964)
Add an option to filter out NSFW mods from Thunderstore and filter them out by default.
-rw-r--r--src-vue/src/plugins/modules/search.ts1
-rw-r--r--src-vue/src/views/SettingsView.vue16
-rw-r--r--src-vue/src/views/mods/ThunderstoreModsView.vue14
3 files changed, 27 insertions, 4 deletions
diff --git a/src-vue/src/plugins/modules/search.ts b/src-vue/src/plugins/modules/search.ts
index e590b94b..9614b0be 100644
--- a/src-vue/src/plugins/modules/search.ts
+++ b/src-vue/src/plugins/modules/search.ts
@@ -9,6 +9,7 @@ export const searchModule = {
// Selected mod categories
selectedCategories: [],
showDeprecatedMods: false,
+ showNsfwMods: false,
sortValue: {label: '', value: ''}
}),
getters: {
diff --git a/src-vue/src/views/SettingsView.vue b/src-vue/src/views/SettingsView.vue
index 16b894d5..5ead665b 100644
--- a/src-vue/src/views/SettingsView.vue
+++ b/src-vue/src/views/SettingsView.vue
@@ -112,6 +112,14 @@
</el-button>
</div>
+ <div class="fc_parameter__panel">
+ <h3>{{ $t('settings.show_nsfw_mods') }}</h3>
+ <span>
+ {{ $t('settings.show_nsfw_mods') }}
+ <el-switch v-model="showNsfwMods"></el-switch>
+ </span>
+ </div>
+
<!-- About section -->
<div class="fc_parameter__panel">
<h3>{{ $t('settings.about') }}</h3>
@@ -157,6 +165,14 @@ export default defineComponent({
}
},
computed: {
+ showNsfwMods: {
+ get(): boolean {
+ return this.$store.state.search.showNsfwMods;
+ },
+ set(value: boolean) {
+ this.$store.state.search.showNsfwMods = value;
+ }
+ },
showDeprecatedMods: {
get(): boolean {
return this.$store.state.search.showDeprecatedMods;
diff --git a/src-vue/src/views/mods/ThunderstoreModsView.vue b/src-vue/src/views/mods/ThunderstoreModsView.vue
index 1221f85f..1ec684a6 100644
--- a/src-vue/src/views/mods/ThunderstoreModsView.vue
+++ b/src-vue/src/views/mods/ThunderstoreModsView.vue
@@ -66,6 +66,9 @@ export default defineComponent({
showDeprecatedMods(): boolean {
return this.$store.state.search.showDeprecatedMods;
},
+ showNsfwMods(): boolean {
+ return this.$store.state.search.showNsfwMods;
+ },
searchValue(): string {
return this.$store.getters.searchWords;
},
@@ -95,22 +98,25 @@ export default defineComponent({
// Filter out deprecated mods
const showDeprecated = !mod.is_deprecated || this.showDeprecatedMods;
+ // Filter out NSFW mods
+ const showNsfw = !mod.has_nsfw_content || this.showNsfwMods;
+
// Filter with categories (only if some categories are selected)
const categoriesMatch: boolean = this.selectedCategories.length === 0
|| mod.categories
.filter((category: string) => this.selectedCategories.includes(category))
.length === this.selectedCategories.length;
- return inputMatches && categoriesMatch && showDeprecated;
+ return inputMatches && categoriesMatch && showDeprecated && showNsfw;
});
},
modsList(): ThunderstoreMod[] {
// Use filtered mods if user is searching, vanilla list otherwise.
const mods: ThunderstoreMod[] = this.searchValue.length !== 0 || this.selectedCategories.length !== 0
? this.filteredMods
- : this.showDeprecatedMods
- ? this.mods
- : this.mods.filter(mod => !mod.is_deprecated);
+ : this.mods
+ .filter(mod => this.showDeprecatedMods || !mod.is_deprecated)
+ .filter(mod => this.showNsfwMods || !mod.has_nsfw_content);
// Sort mods regarding user selected algorithm.
let compare: (a: ThunderstoreMod, b: ThunderstoreMod) => number;