@@ -243,12 +327,13 @@ const handleReset = async () => {
:categories="[
...categories.filter(
(cat) =>
- result?.display_categories.includes(cat.name) && cat.project_type === 'modpack'
+ result?.display_categories.includes(cat.name) &&
+ cat.project_type === searchStore.projectType
),
...loaders.filter(
(loader) =>
result?.display_categories.includes(loader.name) &&
- loader.supported_project_types?.includes('modpack')
+ loader.supported_project_types?.includes(searchStore.projectType)
),
]"
:project-type-display="result?.project_type"
@@ -265,6 +350,17 @@ const handleReset = async () => {
diff --git a/theseus_gui/src/pages/project/Index.vue b/theseus_gui/src/pages/project/Index.vue
index 91527367..65bcdb2b 100644
--- a/theseus_gui/src/pages/project/Index.vue
+++ b/theseus_gui/src/pages/project/Index.vue
@@ -1,6 +1,7 @@
+
@@ -271,8 +344,12 @@ async function install(version) {
}
.project-sidebar {
+ position: fixed;
width: 20rem;
- min-width: 20rem;
+ min-height: 100vh;
+ height: fit-content;
+ max-height: 100vh;
+ overflow-y: auto;
background: var(--color-raised-bg);
padding: 1rem;
}
@@ -289,6 +366,7 @@ async function install(version) {
flex-direction: column;
width: 100%;
padding: 1rem;
+ margin-left: 20rem;
}
.button-group {
@@ -398,4 +476,15 @@ async function install(version) {
}
}
}
+
+.install-loading {
+ scale: 0.2;
+ height: 1rem;
+ width: 1rem;
+ margin-right: -1rem;
+
+ :deep(svg) {
+ color: var(--color-contrast);
+ }
+}
diff --git a/theseus_gui/src/pages/project/Version.vue b/theseus_gui/src/pages/project/Version.vue
index 1867cff9..c648f4b5 100644
--- a/theseus_gui/src/pages/project/Version.vue
+++ b/theseus_gui/src/pages/project/Version.vue
@@ -6,9 +6,10 @@
Auto-Featured
-
@@ -65,8 +65,14 @@
@click="$router.push(`/project/${$route.params.id}/version/${version.id}`)"
>
- install(version.id)">
-
+ install(version.id)"
+ >
+
+
@@ -126,7 +132,8 @@
import {
Card,
Button,
- CheckCircleIcon,
+ CheckIcon,
+ ClearIcon,
Badge,
DownloadIcon,
Checkbox,
@@ -155,6 +162,10 @@ defineProps({
type: Function,
required: true,
},
+ installed: {
+ type: Boolean,
+ required: true,
+ },
})
diff --git a/theseus_gui/src/routes.js b/theseus_gui/src/routes.js
index 5e968971..a56e54c6 100644
--- a/theseus_gui/src/routes.js
+++ b/theseus_gui/src/routes.js
@@ -18,7 +18,7 @@ export default new createRouter({
},
},
{
- path: '/browse',
+ path: '/browse/:projectType',
name: 'Browse',
component: Pages.Browse,
meta: {
diff --git a/theseus_gui/src/store/search.js b/theseus_gui/src/store/search.js
index 4af8b63a..72207d8d 100644
--- a/theseus_gui/src/store/search.js
+++ b/theseus_gui/src/store/search.js
@@ -9,6 +9,7 @@ export const useSearch = defineStore('searchStore', {
pageCount: 1,
offset: 0,
filter: 'Relevance',
+ projectType: '',
facets: [],
orFacets: [],
environments: {
@@ -18,10 +19,15 @@ export const useSearch = defineStore('searchStore', {
activeVersions: [],
openSource: false,
limit: 20,
+ instanceContext: null,
}),
actions: {
getQueryString() {
- let andFacets = ['project_type:modpack']
+ let andFacets = [`project_type:${this.projectType === 'datapack' ? 'mod' : this.projectType}`]
+
+ if (this.instanceContext) {
+ this.activeVersions = [this.instanceContext.metadata.game_version]
+ }
// Iterate through possible andFacets
this.facets.forEach((facet) => {
@@ -32,7 +38,18 @@ export const useSearch = defineStore('searchStore', {
// Create andFacet string
let formattedAndFacets = ''
- andFacets.forEach((f) => (formattedAndFacets += `["${f}"],`))
+ if (this.projectType === 'datapack') {
+ ;[...andFacets, `categories:${encodeURIComponent('datapack')}`].forEach(
+ (f) => (formattedAndFacets += `["${f}"],`)
+ )
+ } else if (this.instanceContext && this.projectType === 'mod') {
+ ;[
+ ...andFacets,
+ `categories:${encodeURIComponent(this.instanceContext.metadata.loader)}`,
+ ].forEach((f) => (formattedAndFacets += `["${f}"],`))
+ } else {
+ andFacets.forEach((f) => (formattedAndFacets += `["${f}"],`))
+ }
formattedAndFacets = formattedAndFacets.slice(0, formattedAndFacets.length - 1)
formattedAndFacets += ''