From 547ec730c783cc058bb288aa70d7ca880710eed5 Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:06:01 -0800 Subject: [PATCH] New instance settings in app (#3033) * Tabbed interface component * Start instance settings * New instance settings, mostly done minus modpacks * Extract i18n * Some more fixes with settings, still no modpacks yet * Lint * Modpack installation settings * Change no friends language * Remove options legacy button * fix lint, small bug * fix invalid cond on friends ui * update resource management page --------- Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com> Co-authored-by: Jai A Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com> --- Cargo.lock | 1 + apps/app-frontend/src/App.vue | 1 + .../src/components/GridDisplay.vue | 6 +- .../src/components/ui/ModpackVersionModal.vue | 15 +- .../src/components/ui/friends/FriendsList.vue | 13 +- .../ui/instance_settings/GeneralSettings.vue | 325 ++++++++ .../ui/instance_settings/HooksSettings.vue | 154 ++++ .../InstallationSettings.vue | 742 ++++++++++++++++++ .../ui/instance_settings/JavaSettings.vue | 189 +++++ .../ui/instance_settings/WindowSettings.vue | 166 ++++ .../components/ui/modal/AppSettingsModal.vue | 43 +- .../ui/modal/ConfirmModalWrapper.vue | 10 + .../ui/modal/InstanceSettingsModal.vue | 103 +++ .../src/components/ui/modal/ModalWrapper.vue | 3 + .../ui/settings/AppearanceSettings.vue | 16 +- .../ui/settings/DefaultInstanceSettings.vue | 221 +++--- .../ui/settings/FeatureFlagSettings.vue | 4 +- .../components/ui/settings/JavaSettings.vue | 4 +- .../ui/settings/PrivacySettings.vue | 20 +- .../settings/ResourceManagementSettings.vue | 52 +- apps/app-frontend/src/helpers/types.d.ts | 105 +++ .../app-frontend/src/locales/en-US/index.json | 268 ++++++- .../app-frontend/src/pages/instance/Index.vue | 11 +- .../src/pages/instance/Options.vue | 2 +- apps/app-frontend/tailwind.config.js | 4 +- apps/app/Cargo.toml | 1 + apps/app/src/api/profile.rs | 94 ++- apps/frontend/tailwind.config.js | 4 +- packages/assets/icons/monitor.svg | 1 + packages/assets/icons/spinner.svg | 5 +- packages/assets/icons/unlink.svg | 1 + packages/assets/icons/unplug.svg | 1 + packages/assets/index.ts | 6 + .../ui/src/components/base/ButtonStyled.vue | 9 +- packages/ui/src/components/base/Checkbox.vue | 6 +- packages/ui/src/components/base/Chips.vue | 2 +- .../ui/src/components/base/OverflowMenu.vue | 12 +- .../components/base/TeleportDropdownMenu.vue | 441 +++++++++++ packages/ui/src/components/index.ts | 3 + .../ui/src/components/modal/ConfirmModal.vue | 16 +- packages/ui/src/components/modal/NewModal.vue | 1 + .../ui/src/components/modal/TabbedModal.vue | 47 ++ .../src/components/settings/ThemeSelector.vue | 2 +- 43 files changed, 2891 insertions(+), 239 deletions(-) create mode 100644 apps/app-frontend/src/components/ui/instance_settings/GeneralSettings.vue create mode 100644 apps/app-frontend/src/components/ui/instance_settings/HooksSettings.vue create mode 100644 apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue create mode 100644 apps/app-frontend/src/components/ui/instance_settings/JavaSettings.vue create mode 100644 apps/app-frontend/src/components/ui/instance_settings/WindowSettings.vue create mode 100644 apps/app-frontend/src/components/ui/modal/InstanceSettingsModal.vue create mode 100644 apps/app-frontend/src/helpers/types.d.ts create mode 100644 packages/assets/icons/monitor.svg create mode 100644 packages/assets/icons/unlink.svg create mode 100644 packages/assets/icons/unplug.svg create mode 100644 packages/ui/src/components/base/TeleportDropdownMenu.vue create mode 100644 packages/ui/src/components/modal/TabbedModal.vue diff --git a/Cargo.lock b/Cargo.lock index 0994b24f2..dce71d05c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9101,6 +9101,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", + "serde_with", "tauri", "tauri-build 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "tauri-plugin-deep-link", diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue index 694830756..258f762c2 100644 --- a/apps/app-frontend/src/App.vue +++ b/apps/app-frontend/src/App.vue @@ -357,6 +357,7 @@ function handleAuxClick(e) { diff --git a/apps/app-frontend/src/components/ui/friends/FriendsList.vue b/apps/app-frontend/src/components/ui/friends/FriendsList.vue index 71570e404..338a7edcf 100644 --- a/apps/app-frontend/src/components/ui/friends/FriendsList.vue +++ b/apps/app-frontend/src/components/ui/friends/FriendsList.vue @@ -161,7 +161,7 @@ onUnmounted(() => { diff --git a/apps/app-frontend/src/components/ui/instance_settings/GeneralSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/GeneralSettings.vue new file mode 100644 index 000000000..1343b0128 --- /dev/null +++ b/apps/app-frontend/src/components/ui/instance_settings/GeneralSettings.vue @@ -0,0 +1,325 @@ + + + + diff --git a/apps/app-frontend/src/components/ui/instance_settings/HooksSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/HooksSettings.vue new file mode 100644 index 000000000..691d47e44 --- /dev/null +++ b/apps/app-frontend/src/components/ui/instance_settings/HooksSettings.vue @@ -0,0 +1,154 @@ + + + diff --git a/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue new file mode 100644 index 000000000..2927a29a8 --- /dev/null +++ b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue @@ -0,0 +1,742 @@ + + + diff --git a/apps/app-frontend/src/components/ui/instance_settings/JavaSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/JavaSettings.vue new file mode 100644 index 000000000..9b258da9a --- /dev/null +++ b/apps/app-frontend/src/components/ui/instance_settings/JavaSettings.vue @@ -0,0 +1,189 @@ + + + diff --git a/apps/app-frontend/src/components/ui/instance_settings/WindowSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/WindowSettings.vue new file mode 100644 index 000000000..6cc1db44a --- /dev/null +++ b/apps/app-frontend/src/components/ui/instance_settings/WindowSettings.vue @@ -0,0 +1,166 @@ + + + diff --git a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue index d5c6bd5a3..d23ceae12 100644 --- a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue +++ b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue @@ -9,6 +9,7 @@ import { GameIcon, CoffeeIcon, } from '@modrinth/assets' +import { TabbedModal } from '@modrinth/ui' import { ref } from 'vue' import { useVIntl, defineMessage } from '@vintl/vintl' import AppearanceSettings from '@/components/ui/settings/AppearanceSettings.vue' @@ -24,15 +25,8 @@ import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue' const themeStore = useTheming() -const modal = ref() - -function show() { - modal.value.show() -} - const { formatMessage } = useVIntl() -const selectedTab = ref(0) const devModeCounter = ref(0) const developerModeEnabled = defineMessage({ @@ -59,8 +53,8 @@ const tabs = [ }, { name: defineMessage({ - id: 'app.settings.tabs.java-versions', - defaultMessage: 'Java versions', + id: 'app.settings.tabs.java-installations', + defaultMessage: 'Java installations', }), icon: CoffeeIcon, content: JavaSettings, @@ -92,13 +86,18 @@ const tabs = [ }, ] +const modal = ref() + +function show() { + modal.value.show() +} + defineExpose({ show }) const version = await getVersion() const osPlatform = getOsPlatform() const osVersion = getOsVersion() -/ diff --git a/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue b/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue index d9e7f63f3..fe6d0dbea 100644 --- a/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue +++ b/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue @@ -25,10 +25,18 @@ defineProps({ default: 'No description defined', required: true, }, + proceedIcon: { + type: Object, + default: undefined, + }, proceedLabel: { type: String, default: 'Proceed', }, + danger: { + type: Boolean, + default: true, + }, }) const emit = defineEmits(['proceed']) @@ -61,9 +69,11 @@ function proceed() { :has-to-type="hasToType" :title="title" :description="description" + :proceed-icon="proceedIcon" :proceed-label="proceedLabel" :on-hide="onModalHide" :noblur="!themeStore.advancedRendering" + :danger="danger" @proceed="proceed" /> diff --git a/apps/app-frontend/src/components/ui/modal/InstanceSettingsModal.vue b/apps/app-frontend/src/components/ui/modal/InstanceSettingsModal.vue new file mode 100644 index 000000000..d22e31943 --- /dev/null +++ b/apps/app-frontend/src/components/ui/modal/InstanceSettingsModal.vue @@ -0,0 +1,103 @@ + + diff --git a/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue b/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue index 53cc0a7c0..63d0c5f9d 100644 --- a/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue +++ b/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue @@ -49,6 +49,9 @@ function onModalHide() { diff --git a/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue b/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue index 0f9104743..a706f9527 100644 --- a/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue +++ b/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue @@ -1,5 +1,5 @@ diff --git a/apps/app-frontend/src/components/ui/settings/DefaultInstanceSettings.vue b/apps/app-frontend/src/components/ui/settings/DefaultInstanceSettings.vue index f0ef7e918..ecff3f485 100644 --- a/apps/app-frontend/src/components/ui/settings/DefaultInstanceSettings.vue +++ b/apps/app-frontend/src/components/ui/settings/DefaultInstanceSettings.vue @@ -46,121 +46,136 @@ watch( diff --git a/apps/app-frontend/src/components/ui/settings/FeatureFlagSettings.vue b/apps/app-frontend/src/components/ui/settings/FeatureFlagSettings.vue index 65ca0f8af..92b109b8d 100644 --- a/apps/app-frontend/src/components/ui/settings/FeatureFlagSettings.vue +++ b/apps/app-frontend/src/components/ui/settings/FeatureFlagSettings.vue @@ -27,7 +27,9 @@ function formatFlagName(name: string) {