diff options
author | Jan <sentrycraft123@gmail.com> | 2023-08-08 23:59:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-08 23:59:05 +0200 |
commit | 24fb67f88ceca9bec04b49fae5b58759b7b25ec5 (patch) | |
tree | 3f30f87435b2877302bb90bd4ac1d82238230aa4 /src-vue/src/views/SettingsView.vue | |
parent | 023d2310ca33c5869f57bb4d68999662c6d887a9 (diff) | |
download | FlightCore-24fb67f88ceca9bec04b49fae5b58759b7b25ec5.tar.gz FlightCore-24fb67f88ceca9bec04b49fae5b58759b7b25ec5.zip |
feat: Add dropdown menu for profiles (#494)
Adds a dropdown menu to settings that allows selecting a different profile.
Currently gated behind dev mode being active.
Diffstat (limited to 'src-vue/src/views/SettingsView.vue')
-rw-r--r-- | src-vue/src/views/SettingsView.vue | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src-vue/src/views/SettingsView.vue b/src-vue/src/views/SettingsView.vue index c7ca2ded..c209da31 100644 --- a/src-vue/src/views/SettingsView.vue +++ b/src-vue/src/views/SettingsView.vue @@ -21,6 +21,21 @@ </el-input> </div> + <!-- Northstar Active Profile --> + <div class="fc_parameter__panel" v-if="$store.state.developer_mode"> + <h3>{{ $t('settings.profile.active') }}</h3> + <el-dropdown trigger="click"> + <el-button> + {{ $store.state.game_install.profile }} <el-icon class="el-icon--right"><arrow-down /></el-icon> + </el-button> + <template #dropdown> + <el-dropdown-menu> + <el-dropdown-item v-for="profile in $store.state.available_profiles" @click="switchProfile(profile)">{{ profile }}</el-dropdown-item> + </el-dropdown-menu> + </template> + </el-dropdown> + </div> + <!-- Thunderstore mods per page configuration --> <div class="fc_parameter__panel"> <h3>{{ $t('settings.nb_ts_mods_per_page') }}</h3> @@ -96,6 +111,7 @@ import { showErrorNotification, showNotification } from "../utils/ui"; import LanguageSelector from "../components/LanguageSelector.vue"; const persistentStore = new Store('flight-core-settings.json'); import { open } from '@tauri-apps/api/shell'; +import { i18n } from '../main'; export default defineComponent({ name: "SettingsView", @@ -144,6 +160,17 @@ export default defineComponent({ persistentStore.set('thunderstore-mods-per-page', { value }); await persistentStore.save(); // explicit save to disk } + }, + availableProfiles(): Object { + let profiles = this.$store.state.available_profiles + + // convert string array to object array so we can fill a table + let data = profiles.reduce( + (a: Object[], v: string) => [...a, {"name": v}], + [] + ); + + return data; } }, methods: { @@ -172,6 +199,39 @@ export default defineComponent({ async openGameInstallFolder() { // Opens the folder in default file explorer application await open(`${this.$store.state.game_install.game_path}`); + }, + async switchProfile(value: string) { + let store = this.$store; + let state = store.state; + + await invoke("validate_profile", { gameInstall: state.game_install, profile: value }) + .then(async (message) => { + if (!message) + { + // Profile is no longer valid, inform the user... + showErrorNotification( + i18n.global.tc('notification.profile.invalid.text'), + i18n.global.tc('notification.profile.invalid.title') + ); + + // ...and refresh + store.commit('fetchProfiles'); + return; + } + + state.game_install.profile = value; + + // Check for Northstar updates + store.commit('checkNorthstarUpdates'); + + // Save change in persistent store + await persistentStore.set('game-install', { value: state.game_install }); + await persistentStore.save(); // explicit save to disk + }) + .catch((error) => { + console.error(error); + showErrorNotification(error); + }); } }, mounted() { |