Skip to content

Commit

Permalink
WIP modals for smm2->smm3 user migration, first time user
Browse files Browse the repository at this point in the history
  • Loading branch information
budak7273 committed Sep 2, 2024
1 parent f73b0ac commit 69b351f
Show file tree
Hide file tree
Showing 6 changed files with 290 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Mod manager for [Satisfactory](https://www.satisfactorygame.com/).
Handles all the steps of installing mods for you.

Implemented in [Wails](https://wails.io/).
Implemented in [Wails](https://wails.io/) using [Svelte](https://svelte.dev/) and [Skeleton](https://www.skeleton.dev/).

## Installation and Usage

Expand Down
30 changes: 30 additions & 0 deletions frontend/src/App.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import ErrorDetails from '$lib/components/modals/ErrorDetails.svelte';
import ErrorModal from '$lib/components/modals/ErrorModal.svelte';
import ExternalInstallMod from '$lib/components/modals/ExternalInstallMod.svelte';
import MigrationModal from '$lib/components/modals/MigrationModal.svelte';
import { supportedProgressTypes } from '$lib/components/modals/ProgressModal.svelte';
import FirstTimeSetupModal from '$lib/components/modals/first-time-setup/FirstTimeSetupModal.svelte';
import { modalRegistry } from '$lib/components/modals/modalsRegistry';
import ImportProfile from '$lib/components/modals/profiles/ImportProfile.svelte';
import { isUpdateOnStart } from '$lib/components/modals/smmUpdate/smmUpdate';
Expand Down Expand Up @@ -163,6 +165,34 @@
$error = null;
}
const displayMigrationModal = true; // TODO testing the migrate popup, what should the real condition be?
$: if (displayMigrationModal) {
modalStore.trigger({
type: 'component',
component: {
ref: MigrationModal,
},
meta: {
persistent: true,
},
});
}
const firstTimeSetupModal = true; // TODO testing the first time setup popup, what should the real condition be?
$: if (firstTimeSetupModal) {
modalStore.trigger({
type: 'component',
component: {
ref: FirstTimeSetupModal,
},
meta: {
persistent: true,
},
});
}
EventsOn('externalInstallMod', (modReference: string, version: string) => {
if (!modReference) return;
modalStore.trigger({
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/lib/components/left-bar/LeftBar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,9 @@
</button>
</div>
<div class="flex flex-col gap-2">
<span class="pl-4 sticky top-0 z-[1] bg-surface-50-900-token">Links</span>
<span class="pl-4 sticky top-0 z-[1] bg-surface-50-900-token">
<T defaultValue="Links" keyName="left-bar.links"/>
</span>
<button
class="btn w-full bg-surface-200-700-token px-4 h-8 text-sm"
on:click={() => BrowserOpenURL($siteURL)}>
Expand Down
92 changes: 92 additions & 0 deletions frontend/src/lib/components/modals/MigrationModal.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<script lang="ts">
import { T } from '@tolgee/svelte';
import { BrowserOpenURL } from '$wailsjs/runtime/runtime';
export let parent: { onClose: () => void };
const OpenWelcomeGuide = () => {
BrowserOpenURL('https://docs.ficsit.app/satisfactory-modding/latest/ForUsers/Welcome.html');
};
</script>

<div
style="max-height: calc(100vh - 3rem); max-width: calc(100vw - 3rem);"
class="w-[48rem] card flex flex-col gap-6"
>
<header class="card-header font-bold text-2xl text-center">
<T defaultValue="Welcome to Satisfactory Mod Manager Version 3!" keyName="smm2_migration.title" />
</header>
<section class="px-4">
<p class="text-base text-center">
<T
defaultValue="We've made a lot of improvements in this version. Here are some of the highlights:"
keyName="smm2_migration.intro"
/>
</p>
</section>
<section class="px-4 overflow-y-auto">
<dl class="list-dl">
<div>
<span class="badge bg-primary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Dedicated server management" keyName="smm2_migration.feature.servers" /></dt>
</span>
</div>
<div>
<span class="badge bg-primary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="User interface refresh" keyName="smm2_migration.feature.ui" /></dt>
</span>
</div>
<div>
<span class="badge bg-primary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Translation support" keyName="smm2_migration.feature.translation" /></dt>
</span>
</div>
<div>
<span class="badge bg-primary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Action queueing" keyName="smm2_migration.feature.queue" /></dt>
</span>
</div>
<div>
<span class="badge bg-primary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Native Linux + Mac support" keyName="smm2_migration.feature.platform_support" /></dt>
</span>
</div>
<div>
<span class="badge bg-tertiary-800 text-lg">+</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Improved performance" keyName="smm2_migration.feature.performance" /></dt>
</span>
</div>
<div>
<span class="badge bg-warning-800 text-lg">⚠</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="New profile format" keyName="smm2_migration.feature.profile_format" /></dt>
</span>
</div>
</dl>
</section>
<section class="px-4">
<p class="text-base text-center">
<button
class="btn text-primary-600 variant-ringed"
on:click={OpenWelcomeGuide}
>
<T
defaultValue="Open the SMM2 -> SMM3 Migration Guide"
keyName="smm2_migration.open_guide"
/>
</button>
</p>
</section>
<footer class="card-footer">
<button class="btn" on:click={parent.onClose}>
<T defaultValue="Close" keyName="common.close" />
</button>
</footer>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
<script lang="ts">
import { mdiTimerSandFull, mdiWeb } from '@mdi/js';
import { SlideToggle } from '@skeletonlabs/skeleton';
import { T } from '@tolgee/svelte';
import LanguageSelector from './LanguageSelector.svelte';
import SvgIcon from '$lib/components/SVGIcon.svelte';
import { queueAutoStart } from '$lib/store/settingsStore';
import { BrowserOpenURL } from '$wailsjs/runtime/runtime';
export let parent: { onClose: () => void };
const OpenWelcomeGuide = () => {
BrowserOpenURL('https://docs.ficsit.app/satisfactory-modding/latest/ForUsers/Welcome.html');
};
</script>

<div
style="max-height: calc(100vh - 3rem); max-width: calc(100vw - 3rem);"
class="w-[48rem] card flex flex-col gap-6"
>
<header class="card-header font-bold text-2xl text-center">
<T defaultValue="Welcome to the Satisfactory Mod Manager!" keyName="first_time_setup.title" />
</header>
<section class="px-4">
<p class="text-base text-center">
<T
defaultValue="Select your preferences to get started."
keyName="first_time_setup.intro"
/>
</p>
</section>
<section class="px-4 overflow-y-auto">
<dl class="list-dl">
<div>
<span class="badge bg-tertiary-500">
<SvgIcon
class="h-5 w-5"
icon={mdiTimerSandFull}
/>
</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="When I add or remove a mod, or switch profiles..." keyName="first_time_setup.option.queue-auto-start.title" /></dt>
<dd class="text-base">
<span class="flex-auto">
<SlideToggle
name="slider-queue"
active="bg-primary-600"
bind:checked={$queueAutoStart}>
<span>
{#if $queueAutoStart}
<T
defaultValue="Apply the change immediately."
keyName="first_time_setup.option.queue-auto-start.enabled"
/>
{:else}
<T
defaultValue='Wait for me to press "Apply" to apply the change.'
keyName="first_time_setup.option.queue-auto-start.enabled"
/>
{/if}
</span>
</SlideToggle>
</span>
</span>
</div>
<div>
<span class="badge bg-tertiary-500 text-lg">
<SvgIcon
class="h-5 w-5"
icon={mdiWeb}
/>
</span>
<span class="flex-auto">
<dt class="text-lg"><T defaultValue="Use this language where available:" keyName="first_time_setup.option.language.title" /></dt>
<dd class="text-base">
<LanguageSelector />
</span>
</div>
</dl>
</section>
<section class="px-4">
<p class="text-base text-center">
<T
defaultValue='Change these settings at any time in the "Mod Manager Settings" menu.'
keyName="first_time_setup.change_later_hint"
/>
</p>
</section>
<section class="px-4">
<p class="text-base text-center">
<button
class="btn text-primary-600 variant-ringed"
on:click={OpenWelcomeGuide}
>
<T
defaultValue="Open the Welcome Guide"
keyName="first_time_setup.open_welcome_guide"
/>
</button>
</p>
</section>
<footer class="card-footer">
<button class="btn" on:click={parent.onClose}>
<T defaultValue="Close" keyName="common.close" />
</button>
</footer>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<script lang="ts">
import Select from '$lib/components/Select.svelte';
import { i18n } from '$lib/generated';
import { language } from '$lib/store/settingsStore';
let languages: string[] = Object.keys(i18n);
type DropdownItem = {
value: string;
label: string;
};
function prepLocale(locale: string) {
return {
value: locale,
label: localeName(locale),
};
}
let dropdownItemData = languages.map(prepLocale);
function localeName(locale: string) {
if (!locale) return 'N/A';
return new Intl.DisplayNames([locale], { type: 'language' }).of(locale) ?? `Error:${locale}`;
}
async function languageSelectChanged(selection: CustomEvent<DropdownItem>) {
$language = selection.detail.value;
}
</script>

<!-- TODO the formatting on this is totally botched, isn't going vertical, is starting open? -->
<Select
name="languageCombobox"
class="w-full h-15"
buttonClass="bg-surface-200-700-token px-4 text-sm"
itemActiveClass="!bg-surface-300/20"
itemClass="bg-surface-50-900-token"
items={dropdownItemData}
menuClass="bg-surface-50-900-token"

value={prepLocale($language) ?? 'UNSET'}
on:change={languageSelectChanged}
>
<svelte:fragment slot="item" let:item>
<span>{item.label}</span>
</svelte:fragment>
<!-- TODO: dynamic flags
<svelte:fragment slot="itemTrail" let:item>
<span slot="lead" class="h-5 w-5 block">
{localeFlag(item.value)}
</span>
</svelte:fragment>
-->
</Select>

0 comments on commit 69b351f

Please sign in to comment.