feat: start trial from upc

This commit is contained in:
Zack Spear
2023-07-06 17:46:09 -07:00
parent 77ede914a2
commit de9b76a6a6
12 changed files with 217 additions and 41 deletions

View File

@@ -83,6 +83,9 @@ const subheading = computed(() => {
if (callbackStatus.value === 'success') {
if (accountActionType.value === 'signIn') return `You're one step closer to enhancing your Unraid experience`;
if (keyActionType.value === 'purchase') return `Thank you for purchasing an Unraid ${keyType.value} Key!`;
if (keyActionType.value === 'replace') return `Your ${keyType.value} Key has been replaced!`;
if (keyActionType.value === 'trialExtend') return `Your Trial key has been extended!`;
if (keyActionType.value === 'trialStart') return `Your free Trial key provides all the functionality of a Pro Registration key`;
if (keyActionType.value === 'upgrade') return `Thank you for upgrading to an Unraid ${keyType.value} Key!`;
return '';
}
@@ -148,7 +151,7 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
<UpcCallbackFeedbackStatus
v-if="showPromoCta"
:icon="InformationCircleIcon"
:text="'Enhance your Unraid experience with Unraid Connect'" />
:text="'Enhance your experience with Unraid Connect'" />
<UpcCallbackFeedbackStatus
v-if="showSignInCta"

View File

@@ -4,15 +4,17 @@ import { useServerStore } from '~/store/server';
import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
const { expireTime, pluginInstalled, state, stateData } = storeToRefs(useServerStore());
const { expireTime, pluginInstalled, registered, state, stateData } = storeToRefs(useServerStore());
const showConnectCopy = computed(() => (pluginInstalled.value && !registered.value));
const heading = computed(() => {
if (pluginInstalled.value) return 'Thank you for installing Connect!';
if (showConnectCopy.value) return 'Thank you for installing Connect!';
return stateData.value.heading;
});
const subheading = computed(() => {
if (pluginInstalled.value) return 'Sign In to your Unraid.net account to get started';
if (showConnectCopy.value) return 'Sign In to your Unraid.net account to get started';
return stateData.value.message;
});
@@ -23,7 +25,7 @@ const showExpireTime = computed(() => {
<template>
<div class="flex flex-col gap-y-24px w-full min-w-300px md:min-w-[500px] max-w-4xl p-16px">
<header :class="{ 'text-center': pluginInstalled }">
<header :class="{ 'text-center': showConnectCopy }">
<h2 class="text-24px text-center font-semibold" v-html="heading" />
<div v-html="subheading" class="flex flex-col gap-y-8px" />
<UpcUptimeExpire v-if="showExpireTime" class="opacity-75 mt-12px" />

View File

@@ -0,0 +1,66 @@
<script lang="ts" setup>
import { storeToRefs } from "pinia";
import { useTrialStore } from "~/store/trial";
export interface Props {
open?: boolean;
}
withDefaults(defineProps<Props>(), {
open: false,
});
const trialStore = useTrialStore();
const { trialStatus } = storeToRefs(trialStore);
const heading = computed(() => {
if (trialStatus.value === 'failed') return 'Failed to start your free 30 day trial';
if (trialStatus.value === 'requestNew') return 'Starting your free 30 day trial…';
if (trialStatus.value === 'success') return 'Free 30 Day Trial Created';
return '';
});
const subheading = computed(() => {
/** @todo show response error */
if (trialStatus.value === 'failed') return 'Key server did not return a trial key. Please try again later.';
if (trialStatus.value === 'requestNew') return 'Please wait while and keep this window open';
if (trialStatus.value === 'success') return 'Please wait while the page reloads to install your trial key';
return '';
});
const close = () => {
if (trialStatus.value === 'requestNew') return console.debug("[close] not allowed");
trialStore.setTrialStatus('ready');
};
</script>
<template>
<Modal
@close="close"
:open="open"
:title="heading"
:description="subheading"
:show-close-x="trialStatus !== 'requestNew'"
max-width="max-w-640px"
>
<template #main>
<BrandLoading v-if="trialStatus === 'requestNew'" class="w-[150px] mx-auto my-24px" />
<div v-if="trialStatus === 'failed'" class="my-24px">
<p class="text-red"></p>
</div>
</template>
<template v-if="trialStatus !== 'requestNew'" #footer>
<div class="w-full max-w-xs flex flex-col items-center gap-y-16px mx-auto">
<div>
<button
@click="close"
class="text-12px tracking-wide inline-block mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
:title="'Close Modal'"
>
{{ "Close" }}
</button>
</div>
</div>
</template>
</Modal>
</template>