forked from didirus/AstralRinth
* Initial onboarding * Update OnboardingModal.vue * Add finish * Animation * Automatic opening * Move onboarding icon to outside of main appbar * Run lint * run fmt * mostly finish * Finish onboarding * fix onboarding bug + linux build * fix build again * Add back window shadows --------- Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com> Co-authored-by: Jai A <jaiagr+gpg@pm.me> Co-authored-by: Jai A <jai@modrinth.com>
170 lines
3.8 KiB
Vue
170 lines
3.8 KiB
Vue
<template>
|
|
<JavaDetectionModal ref="detectJavaModal" @submit="(val) => emit('update:modelValue', val)" />
|
|
<div class="toggle-setting" :class="{ compact }">
|
|
<input
|
|
autocomplete="off"
|
|
:disabled="props.disabled"
|
|
:value="props.modelValue ? props.modelValue.path : ''"
|
|
type="text"
|
|
class="installation-input"
|
|
:placeholder="placeholder ?? '/path/to/java'"
|
|
@input="
|
|
(val) => {
|
|
emit('update:modelValue', {
|
|
...props.modelValue,
|
|
path: val.target.value,
|
|
})
|
|
}
|
|
"
|
|
/>
|
|
<span class="installation-buttons">
|
|
<Button :disabled="props.disabled" @click="autoDetect">
|
|
<SearchIcon />
|
|
Auto detect
|
|
</Button>
|
|
<Button :disabled="props.disabled" @click="handleJavaFileInput()">
|
|
<FolderSearchIcon />
|
|
Browse
|
|
</Button>
|
|
<Button v-if="testingJava" disabled> Testing... </Button>
|
|
<Button v-else-if="testingJavaSuccess === true">
|
|
<CheckIcon class="test-success" />
|
|
Success
|
|
</Button>
|
|
<Button v-else-if="testingJavaSuccess === false">
|
|
<XIcon class="test-fail" />
|
|
Failed
|
|
</Button>
|
|
<Button v-else :disabled="props.disabled" @click="testJava">
|
|
<PlayIcon />
|
|
Test
|
|
</Button>
|
|
</span>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { Button, SearchIcon, PlayIcon, CheckIcon, XIcon, FolderSearchIcon } from 'omorphia'
|
|
import { find_jre_17_jres, get_jre } from '@/helpers/jre.js'
|
|
import { ref } from 'vue'
|
|
import { open } from '@tauri-apps/api/dialog'
|
|
import JavaDetectionModal from '@/components/ui/JavaDetectionModal.vue'
|
|
import mixpanel from 'mixpanel-browser'
|
|
import { handleError } from '@/store/state.js'
|
|
|
|
const props = defineProps({
|
|
version: {
|
|
type: Number,
|
|
required: false,
|
|
default: null,
|
|
},
|
|
modelValue: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
disabled: {
|
|
type: Boolean,
|
|
required: false,
|
|
default: false,
|
|
},
|
|
placeholder: {
|
|
type: String,
|
|
required: false,
|
|
default: null,
|
|
},
|
|
compact: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
})
|
|
|
|
const emit = defineEmits(['update:modelValue'])
|
|
|
|
const testingJava = ref(false)
|
|
const testingJavaSuccess = ref(null)
|
|
async function testJava() {
|
|
testingJava.value = true
|
|
let result = await get_jre(props.modelValue ? props.modelValue.path : '')
|
|
testingJava.value = false
|
|
testingJavaSuccess.value = !!result
|
|
|
|
mixpanel.track('JavaTest', {
|
|
path: props.modelValue ? props.modelValue.path : '',
|
|
success: !!result,
|
|
})
|
|
|
|
setTimeout(() => {
|
|
testingJavaSuccess.value = null
|
|
}, 2000)
|
|
}
|
|
|
|
async function handleJavaFileInput() {
|
|
let filePath = await open()
|
|
|
|
if (filePath) {
|
|
let result = await get_jre(filePath)
|
|
if (!result) {
|
|
result = {
|
|
path: filePath,
|
|
version: props.version.toString(),
|
|
architecture: 'x86',
|
|
}
|
|
|
|
mixpanel.track('JavaManualSelect', {
|
|
path: filePath,
|
|
version: props.version,
|
|
})
|
|
}
|
|
|
|
emit('update:modelValue', result)
|
|
}
|
|
}
|
|
|
|
const detectJavaModal = ref(null)
|
|
async function autoDetect() {
|
|
if (!props.compact) {
|
|
detectJavaModal.value.show(props.version, props.modelValue)
|
|
} else {
|
|
let versions = await find_jre_17_jres().catch(handleError)
|
|
if (versions.length > 0) {
|
|
emit('update:modelValue', versions[0])
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.installation-input {
|
|
width: 100% !important;
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.toggle-setting {
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
|
|
&.compact {
|
|
flex-wrap: wrap;
|
|
}
|
|
}
|
|
|
|
.installation-buttons {
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
margin: 0;
|
|
}
|
|
|
|
.test-success {
|
|
color: var(--color-green);
|
|
}
|
|
|
|
.test-fail {
|
|
color: var(--color-red);
|
|
}
|
|
</style>
|