mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-09-24 17:11:00 +00:00
feat: initial support for importing worlds
This commit is contained in:
@@ -3,6 +3,7 @@ import { motion } from "framer-motion";
|
||||
import { TauriService } from "../../services/TauriService";
|
||||
import CustomTUModal from "../modals/CustomTUModal";
|
||||
import SetUidModal from "../modals/SetUidModal";
|
||||
import ImportWorldModal from "../modals/ImportWorldModal";
|
||||
import {
|
||||
useUI,
|
||||
useConfig,
|
||||
@@ -75,6 +76,8 @@ const VersionsView = memo(function VersionsView() {
|
||||
const [isSetUidModalOpen, setIsSetUidModalOpen] = useState(false);
|
||||
const [setUidTargetId, setSetUidTargetId] = useState("");
|
||||
const [editingEdition, setEditingEdition] = useState<Edition | null>(null);
|
||||
const [isImportWorldModalOpen, setIsImportWorldModalOpen] = useState(false);
|
||||
const [importWorldTarget, setImportWorldTarget] = useState<{ id: string; name: string } | null>(null);
|
||||
const [initialPath, setInitialPath] = useState<string>("");
|
||||
const [hoveredBtn, setHoveredBtn] = useState<{
|
||||
row: number;
|
||||
@@ -207,6 +210,12 @@ const VersionsView = memo(function VersionsView() {
|
||||
}
|
||||
};
|
||||
|
||||
const handleImportWorld = (instanceId: string) => {
|
||||
const edition = editions.find((e: Edition) => e.instanceId === instanceId);
|
||||
setImportWorldTarget({ id: instanceId, name: edition?.name ?? instanceId });
|
||||
setIsImportWorldModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
ref={containerRef}
|
||||
@@ -530,6 +539,30 @@ const VersionsView = memo(function VersionsView() {
|
||||
/>
|
||||
Add to Steam
|
||||
</button>
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
playPressSound();
|
||||
handleImportWorld(edition.instanceId);
|
||||
setOpenMenuId(null);
|
||||
}}
|
||||
className="w-full text-left px-3 py-2 text-xs text-[#dddddd] hover:text-white hover:bg-white/10 flex items-center gap-2 transition-colors mc-text-shadow"
|
||||
>
|
||||
<svg
|
||||
width="14"
|
||||
height="14"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
className="w-3.5 h-3.5"
|
||||
>
|
||||
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
|
||||
<polyline points="7 10 12 15 17 10" />
|
||||
<line x1="12" y1="15" x2="12" y2="3" />
|
||||
</svg>
|
||||
Import World
|
||||
</button>
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -727,6 +760,15 @@ const VersionsView = memo(function VersionsView() {
|
||||
targetInstanceId={setUidTargetId}
|
||||
/>
|
||||
|
||||
<ImportWorldModal
|
||||
isOpen={isImportWorldModalOpen}
|
||||
onClose={() => { setIsImportWorldModalOpen(false); setImportWorldTarget(null); }}
|
||||
playPressSound={playPressSound}
|
||||
playBackSound={playBackSound}
|
||||
targetInstanceId={importWorldTarget?.id ?? ""}
|
||||
targetInstanceName={importWorldTarget?.name ?? ""}
|
||||
/>
|
||||
|
||||
{deleteConfirmEdition && (
|
||||
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/60">
|
||||
<div
|
||||
|
||||
Reference in New Issue
Block a user