refactor: add more data to server store

This commit is contained in:
Zack Spear
2023-05-30 18:40:49 -07:00
committed by Zack Spear
parent 53725d322a
commit f33064c3bf
2 changed files with 165 additions and 18 deletions

View File

@@ -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<string | undefined>();
const deviceCount = ref<number | undefined>();
const guid = ref<string | undefined>();
const keyTypeForPurchase = ref<string | undefined>();
const locale = ref<string | undefined>();
const name = ref<string | undefined>();
const site = ref<string | undefined>();
const state = ref<string | undefined>(); // @todo implement ServerState ENUM
const uptime = ref<number | undefined>();
const expireTime = ref<number | undefined>();
const server = computed<Server>(() => {
/**
* Getters
*/
const server = computed<Server>(():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,
};
});

View File

@@ -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
}