mirror of
https://github.com/modrinth/code.git
synced 2026-08-26 09:34:50 +00:00
* fix(content): changing mod versions works again
* chore(assets): update pyro logo
* fix(properties): deprecate fetchconfigfile
* Revert "fix(content): changing mod versions works again"
This reverts commit d7c0d1196f.
* feat(files): ability to sort via column click
* chore(startup): update clunky wording
* feat(serverListing): server icons SSR friendly
* fix(servers): if archon fails, display err in listing
* chore(serverlisting): use pyroserver hook to init icon
* chore(servers): much more graceful reinstall
* fix(servers): tw warn
* fix(platform): correctly react when pack reinstalled
* fix(serversroot): explicitly import navigateTo
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(serverlabels): show skeleton instead of hiding
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(platform): install-aware controls
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor!(platform): rewrite platform page
* fix(platform): regression in autoselecting loader
* chore(platform): prefer version over project modification date
* fix(platform): permanent hang after initial mount
* chore(platform): do not silently fail and hang if modpack fails loading
* oops: remove hardcoded error causer
* fix(platform): switch modpack btn while installing doesnt need class
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(platform): adjust styling in version modal
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(platform): prevent changing project card style
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor(pyrodropdown): rewrite
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(pyrodropdown): do nopt use deprecated substr
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(network): sentence case
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor(terminal): initial batch
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): fulllog over fullscreen
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): fullscreen conflict with body scroll
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): init drag select
* feat(terminal): shift click support
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): double lines limit
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): copy button
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): protip style
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): improve styles
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): regex search
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): move icons to icons dir
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): improve drag select autoscroll inertia
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): cancel selection on right click
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): progblur and stb btn disappearing
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor(serverstats): power efficiency
* fix(subdomainlabel): correct tooltip terminology
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(preferences): users hide subdomain label
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(servers): clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): deselect lines on escape
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(serversidebar): type err
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(fileitem): vue server render type
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): disable pointer events on lines if scrolling
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): search result counts style
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): plural
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): view selection
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): show actively selected lines in scrollbar
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminallog): btn color
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(gamelabel): align to text
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(gamelabel): align to text
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(listing): remove deadcode
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(serverlisting): deprecated process.server
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(platform): correctly disable button
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(backups): do not allow backup creation during server installation
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(platform): flush stale currentversion data on successful install
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(gamelabel): fix gap
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(network): vaporize uppercase
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(info): vaporize uppercase
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(backups): style unification
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(backups): finalize style change
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(servers): catch pyro servers fetch errors during ssr
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(serverstats): ram as bytes graph now works
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(platform): unify attempts and refresh interval
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): input
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(servers): installing ticket + update available notice back in platform
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): dont add bg to scroll track
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): preserve whitespace
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(serversroot): unnest blurred icon query
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(serverstats): clamp memory usage to 100% no matter what
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat(terminal): allow copy of single lines, show btn
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore(terminal): animate copy>view transition
Signed-off-by: Evan Song <theevansong@gmail.com>
* init: search improvements
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: lint
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: change log modal title
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: hide fullscreen when selecting and cancel selection on clickout
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor(terminal): more reliable jumpToLine
Signed-off-by: Evan Song <theevansong@gmail.com>
* feat: search results separator
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: remove buggy isScrollable check
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: style
Signed-off-by: Evan Song <theevansong@gmail.com>
* refactor: correctly store pos to make jump reliable
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: disparity between search/log dragselect
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: prevent propagation of click events when clicking on jump btn
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: switch selection strategies depending on terminal mode
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: smarter esc handling
Signed-off-by: Evan Song <theevansong@gmail.com>
* finalize
Signed-off-by: Evan Song <theevansong@gmail.com>
* run fix
* fix: ensure lines between cannot be selected
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix: increase initial log batch to 256
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): click on scroll track should take user to new scroll position
Signed-off-by: Evan Song <theevansong@gmail.com>
* fix(terminal): update aria label for view selected logs btn
Signed-off-by: Evan Song <theevansong@gmail.com>
* chore: clean
Signed-off-by: Evan Song <theevansong@gmail.com>
---------
Signed-off-by: Evan Song <theevansong@gmail.com>
165 lines
4.5 KiB
Vue
165 lines
4.5 KiB
Vue
<template>
|
|
<NewModal
|
|
ref="modal"
|
|
:header="'Changing ' + props.project?.title + ' version'"
|
|
@hide="onHide"
|
|
@show="onShow"
|
|
>
|
|
<div class="flex flex-col gap-4 md:w-[600px]">
|
|
<div class="flex flex-col gap-2">
|
|
<p class="m-0">
|
|
Select the version of {{ props.project?.title || "the modpack" }} you want to install on
|
|
your server.
|
|
</p>
|
|
<p v-if="props.currentVersion" class="m-0 text-sm text-secondary">
|
|
Currently installed: {{ props.currentVersion.version_number }}
|
|
</p>
|
|
</div>
|
|
|
|
<div class="flex w-full flex-col gap-4">
|
|
<UiServersTeleportDropdownMenu
|
|
v-if="props.versions?.length"
|
|
v-model="selectedVersion"
|
|
:options="versionOptions"
|
|
placeholder="Select version..."
|
|
name="version"
|
|
class="w-full max-w-full"
|
|
/>
|
|
|
|
<div class="flex w-full flex-col gap-2 rounded-2xl bg-table-alternateRow p-4">
|
|
<div class="flex w-full flex-row items-center justify-between">
|
|
<label class="w-full text-lg font-bold text-contrast" for="modpack-hard-reset">
|
|
Erase all data
|
|
</label>
|
|
<input
|
|
id="modpack-hard-reset"
|
|
v-model="hardReset"
|
|
class="switch stylized-toggle shrink-0"
|
|
type="checkbox"
|
|
/>
|
|
</div>
|
|
<div>
|
|
If enabled, existing mods, worlds, and configurations, will be deleted before installing
|
|
the new modpack version.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-4 flex justify-start gap-4">
|
|
<ButtonStyled :color="hardReset ? 'red' : 'brand'">
|
|
<button
|
|
:disabled="isLoading || !selectedVersion || props.serverStatus === 'installing'"
|
|
@click="handleReinstall"
|
|
>
|
|
<DownloadIcon class="size-4" />
|
|
{{ isLoading ? "Installing..." : hardReset ? "Erase and install" : "Install" }}
|
|
</button>
|
|
</ButtonStyled>
|
|
<ButtonStyled>
|
|
<button :disabled="isLoading" @click="hide">
|
|
<XIcon />
|
|
Cancel
|
|
</button>
|
|
</ButtonStyled>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</NewModal>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { ButtonStyled, NewModal } from "@modrinth/ui";
|
|
import { DownloadIcon, XIcon } from "@modrinth/assets";
|
|
import type { Server } from "~/composables/pyroServers";
|
|
|
|
const props = defineProps<{
|
|
server: Server<["general", "content", "backups", "network", "startup", "ws", "fs"]>;
|
|
project: any;
|
|
versions: any[];
|
|
currentVersion?: any;
|
|
currentVersionId?: string;
|
|
serverStatus?: string;
|
|
}>();
|
|
|
|
const emit = defineEmits<{
|
|
reinstall: [any?];
|
|
}>();
|
|
|
|
const modal = ref();
|
|
const hardReset = ref(false);
|
|
const isLoading = ref(false);
|
|
const selectedVersion = ref("");
|
|
|
|
const versionOptions = computed(() => props.versions?.map((v) => v.version_number) || []);
|
|
|
|
const handleReinstall = async () => {
|
|
if (!selectedVersion.value || !props.project?.id) return;
|
|
|
|
isLoading.value = true;
|
|
try {
|
|
const versionId = props.versions.find((v) => v.version_number === selectedVersion.value)?.id;
|
|
|
|
await props.server.general?.reinstall(
|
|
props.server.serverId,
|
|
false,
|
|
props.project.id,
|
|
versionId,
|
|
undefined,
|
|
hardReset.value,
|
|
);
|
|
|
|
emit("reinstall");
|
|
hide();
|
|
} catch (error) {
|
|
if (error instanceof PyroFetchError && error.statusCode === 429) {
|
|
addNotification({
|
|
group: "server",
|
|
title: "Cannot reinstall server",
|
|
text: "You are being rate limited. Please try again later.",
|
|
type: "error",
|
|
});
|
|
} else {
|
|
addNotification({
|
|
group: "server",
|
|
title: "Reinstall Failed",
|
|
text: "An unexpected error occurred while reinstalling. Please try again later.",
|
|
type: "error",
|
|
});
|
|
}
|
|
} finally {
|
|
isLoading.value = false;
|
|
}
|
|
};
|
|
|
|
watch(
|
|
() => props.serverStatus,
|
|
(newStatus) => {
|
|
if (newStatus === "installing") {
|
|
hide();
|
|
}
|
|
},
|
|
);
|
|
|
|
const onShow = () => {
|
|
hardReset.value = false;
|
|
selectedVersion.value =
|
|
props.currentVersion?.version_number ?? props.versions?.[0]?.version_number ?? "";
|
|
};
|
|
|
|
const onHide = () => {
|
|
hardReset.value = false;
|
|
selectedVersion.value = "";
|
|
isLoading.value = false;
|
|
};
|
|
|
|
const show = () => modal.value?.show();
|
|
const hide = () => modal.value?.hide();
|
|
|
|
defineExpose({ show, hide });
|
|
</script>
|
|
|
|
<style scoped>
|
|
.stylized-toggle:checked::after {
|
|
background: var(--color-accent-contrast) !important;
|
|
}
|
|
</style>
|