diff --git a/store/server.ts b/store/server.ts index 5ea5b020f..fbfff4f2f 100644 --- a/store/server.ts +++ b/store/server.ts @@ -1,5 +1,5 @@ import { defineStore, createPinia, setActivePinia } from "pinia"; -import type { Server, ServerState } from '~/types/server'; +import type { Server, ServerState, ServerStateData } from '~/types/server'; /** * @see https://stackoverflow.com/questions/73476371/using-pinia-with-vue-js-web-components * @see https://github.com/vuejs/pinia/discussions/1085 @@ -7,39 +7,170 @@ import type { Server, ServerState } from '~/types/server'; setActivePinia(createPinia()); export const useServerStore = defineStore('server', () => { + /** + * State + */ const description = ref(); const deviceCount = ref(); const guid = ref(); - const keyTypeForPurchase = ref(); const locale = ref(); const name = ref(); const site = ref(); const state = ref(); // @todo implement ServerState ENUM + const uptime = ref(); + const expireTime = ref(); - const server = computed(() => { + /** + * Getters + */ + const server = computed(():Server => { return { description: description.value, deviceCount: deviceCount.value, guid: guid.value, - keyTypeForPurchase: keyTypeForPurchase.value, locale: locale.value, name: name.value, site: site.value, state: state.value, + uptime: uptime.value, + expireTime: expireTime.value, } }); - const setServer = (server: Server) => { - console.debug('[setServer]', server); - description.value = server?.description; - deviceCount.value = server?.deviceCount; - guid.value = server?.guid; - keyTypeForPurchase.value = server?.keyTypeForPurchase; - locale.value = server?.locale; - name.value = server?.name; - site.value = server?.site; - state.value = server?.state; + const stateDataDefault: ServerStateData = { + actions: ['purchase', 'signIn', 'signOut'], + humanReadable: 'Trial', + heading: 'Thank you for choosing Unraid OS!', + message: '[Temp] Your Trial Key includes all the features of a Pro Key', + }; + const stateData = computed(():ServerStateData => { + switch (state.value) { + case 'TRIAL': + return { + ...stateDataDefault, + }; + case 'EEXPIRED': + return { + ...stateDataDefault, + }; + case 'BASIC': + return { + ...stateDataDefault, + }; + case 'PLUS': + return { + ...stateDataDefault, + }; + case 'PRO': + return { + ...stateDataDefault, + }; + case 'EGUID': + return { + ...stateDataDefault, + }; + case 'EGUID1': + return { + ...stateDataDefault, + }; + case 'ENOKEYFILE2': + return { + ...stateDataDefault, + }; + case 'ETRIAL': + return { + ...stateDataDefault, + }; + case 'ENOKEYFILE1': + return { + ...stateDataDefault, + }; + case 'ENOFLASH': + return { + ...stateDataDefault, + }; + case 'ENOFLASH1': + return { + ...stateDataDefault, + }; + case 'ENOFLASH2': + return { + ...stateDataDefault, + }; + case 'ENOFLASH3': + return { + ...stateDataDefault, + }; + case 'ENOFLASH4': + return { + ...stateDataDefault, + }; + case 'ENOFLASH5': + return { + ...stateDataDefault, + }; + case 'ENOFLASH6': + return { + ...stateDataDefault, + }; + case 'ENOFLASH7': + return { + ...stateDataDefault, + }; + case 'EBLACKLISTED': + return { + ...stateDataDefault, + }; + case 'EBLACKLISTED1': + return { + ...stateDataDefault, + }; + case 'EBLACKLISTED2': + return { + ...stateDataDefault, + }; + case 'ENOCONN': + return { + ...stateDataDefault, + }; + default: + return { + ...stateDataDefault, + }; + } + }); + + /** + * Actions + */ + const setServer = (data: Server) => { + console.debug('[setServer]', data); + description.value = data?.description; + deviceCount.value = data?.deviceCount; + guid.value = data?.guid; + locale.value = data?.locale; + name.value = data?.name; + site.value = data?.site; + state.value = data?.state; + uptime.value = data?.uptime; + expireTime.value = data?.expireTime; }; - return { name, description, guid, keyTypeForPurchase, locale, deviceCount, site, server, setServer }; + return { + // state + name, + description, + guid, + locale, + deviceCount, + site, + uptime, + expireTime, + state, + // getters + server, + stateData, + // actions + setServer, + }; }); diff --git a/types/server.ts b/types/server.ts index e5e3ff9b3..c79bdbf89 100644 --- a/types/server.ts +++ b/types/server.ts @@ -16,7 +16,6 @@ export enum ServerState { EBLACKLISTED2 = 'EBLACKLISTED2', ENOCONN = 'ENOCONN', } - export interface Server { // state?: ServerState; state?: string; @@ -30,9 +29,26 @@ export interface Server { site?: string; wanFQDN?: string; regGen?: number; - expireTime?: number; license?: string; keyfile?: string; - keyTypeForPurchase?: string; locale?: string; + uptime?: number; + expireTime?: number; +} + +export type ServerStateDataActions = 'redeem'|'purchase'|'upgrade'|'signOut'|'signIn'|'trialExtend'|'trialStart'|'replace'|'recover'; + +export interface ServerStateDataError { + heading: string; + message: string; + reAuthFix: boolean; // @todo potentially remove +} + +export interface ServerStateData { + actions: ServerStateDataActions[]; + humanReadable: string; // @todo create interface of ENUM to string mapping + heading: string; + message: string; + error?: ServerStateDataError; + withKey?: boolean; // @todo potentially remove } \ No newline at end of file