Files
log-lottery/src/views/Config/Server/useViewModel.ts

69 lines
2.2 KiB
TypeScript

import type { ServerType, WsMsgData } from '@/types/storeType'
import { cloneDeep } from 'lodash-es'
import { storeToRefs } from 'pinia'
import { onMounted, ref, watch } from 'vue'
import { useWebsocket } from '@/hooks/useWebsocket'
import useStore from '@/store'
import { getUniqueSignature } from '@/utils/auth'
import { IndexDb } from '@/utils/dexie'
export function useViewModel() {
const serverConfig = useStore().serverConfig
const {
getServerList: serverList,
getCurrentServer: currentServer,
} = storeToRefs(serverConfig)
const currentServerValue = ref<ServerType>(cloneDeep(currentServer.value))
const wsUrl = ref<string>('ws://localhost:8080/echo')
const msgList = ref<WsMsgData[]>([])
const { open: openWs, close: closeWs, status: wsStatus } = useWebsocket()
const msgListDb = new IndexDb('msgList', ['msgList'], 1, ['createTime'])
const handleConnectWs = async () => {
const userSignature = await getUniqueSignature()
wsUrl.value = `ws://localhost:8080/echo?userSignature=${userSignature}`
openWs(wsUrl.value)
}
const getAllMsg = async () => {
msgListDb.getDataSortedByDateTime('msgList', 'dateTime').then((data) => {
msgList.value = data
})
}
watch(
() => currentServerValue.value.id,
(newValue) => {
serverList.value.forEach((item) => {
if (item.id === newValue) {
currentServerValue.value = item
serverConfig.setCurrentServer(currentServerValue.value)
}
})
},
)
watch(() => currentServer.value.host, (newValue) => {
currentServerValue.value.host = newValue
serverConfig.updateServerList(currentServerValue.value)
})
watch(
() => wsStatus.value,
(newValue) => {
if (newValue && (newValue.connected === true || newValue.connected === false)) {
serverConfig.setServerStatus(newValue.connected)
}
},
)
onMounted(() => {
getAllMsg()
})
return {
serverList,
currentServerValue,
wsStatus,
handleConnectWs,
closeWs,
msgList,
}
}