Skip to content

Commit e6274d0

Browse files
committed
Start instance settings
1 parent 70085e9 commit e6274d0

File tree

7 files changed

+118
-6
lines changed

7 files changed

+118
-6
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script setup lang="ts"></script>
2+
3+
<template>
4+
<div>Hello</div>
5+
</template>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<script setup lang="ts">
2+
import {
3+
SettingsIcon,
4+
CoffeeIcon,
5+
InfoIcon,
6+
WrenchIcon,
7+
BoxIcon,
8+
ArchiveIcon,
9+
MonitorIcon,
10+
} from '@modrinth/assets'
11+
import { TabbedModal } from '@modrinth/ui'
12+
import { ref } from 'vue'
13+
import { defineMessage } from '@vintl/vintl'
14+
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
15+
import GeneralSettings from '@/components/ui/instance_settings/GeneralSettings.vue'
16+
17+
const props = defineProps({
18+
instance: {
19+
type: Object,
20+
default() {
21+
return {}
22+
},
23+
},
24+
})
25+
26+
const tabs = [
27+
{
28+
name: defineMessage({
29+
id: 'instance.settings.tabs.general',
30+
defaultMessage: 'General',
31+
}),
32+
icon: InfoIcon,
33+
content: GeneralSettings,
34+
},
35+
{
36+
name: defineMessage({
37+
id: 'instance.settings.tabs.java',
38+
defaultMessage: 'Java',
39+
}),
40+
icon: CoffeeIcon,
41+
content: GeneralSettings,
42+
},
43+
{
44+
name: defineMessage({
45+
id: 'instance.settings.tabs.window',
46+
defaultMessage: 'Window',
47+
}),
48+
icon: MonitorIcon,
49+
content: GeneralSettings,
50+
},
51+
{
52+
name: defineMessage({
53+
id: 'instance.settings.tabs.hooks',
54+
defaultMessage: 'Hooks',
55+
}),
56+
icon: WrenchIcon,
57+
content: GeneralSettings,
58+
},
59+
{
60+
name: defineMessage({
61+
id: 'instance.settings.tabs.modpack',
62+
defaultMessage: 'Modpack',
63+
}),
64+
icon: BoxIcon,
65+
content: GeneralSettings,
66+
modpackOnly: true,
67+
},
68+
{
69+
name: defineMessage({
70+
id: 'instance.settings.tabs.manage',
71+
defaultMessage: 'Manage',
72+
}),
73+
icon: ArchiveIcon,
74+
content: GeneralSettings,
75+
},
76+
]
77+
78+
const modal = ref()
79+
80+
function show() {
81+
modal.value.show()
82+
}
83+
84+
defineExpose({ show })
85+
</script>
86+
<template>
87+
<ModalWrapper ref="modal">
88+
<template #title>
89+
<span class="flex items-center gap-2 text-lg font-extrabold text-contrast">
90+
<SettingsIcon /> Instance settings
91+
</span>
92+
</template>
93+
94+
<TabbedModal :tabs="tabs" />
95+
</ModalWrapper>
96+
</template>

apps/app-frontend/src/components/ui/modal/ModalWrapper.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ function onModalHide() {
4949

5050
<template>
5151
<Modal ref="modal" :header="header" :noblur="!themeStore.advancedRendering" @hide="onModalHide">
52+
<template #title>
53+
<slot name="title" />
54+
</template>
5255
<slot />
5356
</Modal>
5457
</template>

apps/app-frontend/src/pages/instance/Index.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@contextmenu.prevent.stop="(event) => handleRightClick(event, instance.path)"
55
>
66
<ExportModal ref="exportModal" :instance="instance" />
7+
<InstanceSettingsModal ref="settingsModal" />
78
<ContentPageHeader>
89
<template #icon>
910
<Avatar :src="icon" :alt="instance.name" size="96px" />
@@ -48,12 +49,9 @@
4849
<button disabled>Loading...</button>
4950
</ButtonStyled>
5051
<ButtonStyled size="large" circular>
51-
<RouterLink
52-
v-tooltip="'Instance settings'"
53-
:to="`/instance/${encodeURIComponent(route.params.id)}/options`"
54-
>
52+
<button v-tooltip="'Instance settings'" @click="settingsModal.show()">
5553
<SettingsIcon />
56-
</RouterLink>
54+
</button>
5755
</ButtonStyled>
5856
<ButtonStyled size="large" type="transparent" circular>
5957
<OverflowMenu
@@ -169,6 +167,7 @@ import { handleSevereError } from '@/store/error.js'
169167
import { get_project, get_version_many } from '@/helpers/cache.js'
170168
import dayjs from 'dayjs'
171169
import ExportModal from '@/components/ui/ExportModal.vue'
170+
import InstanceSettingsModal from '@/components/ui/modal/InstanceSettingsModal.vue'
172171
173172
const route = useRoute()
174173
@@ -347,6 +346,8 @@ const icon = computed(() =>
347346
instance.value.icon_path ? convertFileSrc(instance.value.icon_path) : null,
348347
)
349348
349+
const settingsModal = ref()
350+
350351
onUnmounted(() => {
351352
unlistenProcesses()
352353
unlistenProfiles()

packages/assets/icons/monitor.svg

Lines changed: 1 addition & 0 deletions
Loading

packages/assets/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ import _MessageIcon from './icons/message.svg?component'
111111
import _MicrophoneIcon from './icons/microphone.svg?component'
112112
import _MinimizeIcon from './icons/minimize.svg?component'
113113
import _MinusIcon from './icons/minus.svg?component'
114+
import _MonitorIcon from './icons/monitor.svg?component'
114115
import _MonitorSmartphoneIcon from './icons/monitor-smartphone.svg?component'
115116
import _MoonIcon from './icons/moon.svg?component'
116117
import _MoreHorizontalIcon from './icons/more-horizontal.svg?component'
@@ -301,6 +302,7 @@ export const MessageIcon = _MessageIcon
301302
export const MicrophoneIcon = _MicrophoneIcon
302303
export const MinimizeIcon = _MinimizeIcon
303304
export const MinusIcon = _MinusIcon
305+
export const MonitorIcon = _MonitorIcon
304306
export const MonitorSmartphoneIcon = _MonitorSmartphoneIcon
305307
export const MoonIcon = _MoonIcon
306308
export const MoreHorizontalIcon = _MoreHorizontalIcon

packages/ui/src/components/base/Checkbox.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<DropdownIcon v-else-if="collapsingToggleStyle" aria-hidden="true" />
1919
</button>
2020
<!-- aria-hidden is set so screenreaders only use the <button>'s aria-label -->
21-
<p v-if="label" aria-hidden="true">
21+
<p v-if="label" aria-hidden="true" class="checkbox-label">
2222
{{ label }}
2323
</p>
2424
<slot v-else />
@@ -138,4 +138,8 @@ function toggle() {
138138
cursor: not-allowed;
139139
}
140140
}
141+
142+
.checkbox-label {
143+
color: var(--color-base);
144+
}
141145
</style>

0 commit comments

Comments
 (0)