Joshua Shoemaker b1880a41f2 refact: session to redux
not working yet
2023-10-20 10:51:53 -05:00

54 lines
2.0 KiB
TypeScript

import { createSlice } from '@reduxjs/toolkit'
import type { PayloadAction } from '@reduxjs/toolkit'
import { entities } from '../../../wailsjs/wailsjs/go/models'
import { CreateNewProject, GetCurrentSession, RequestChangeSessionProjectByName, RequestChooseUserAvatar, RequestUpdateCurrentUser } from '../../../wailsjs/wailsjs/go/ipc/Channel'
import { UserProps } from './types'
import { serialize } from '../../serialize'
const initialState = {
currentSession: serialize(new entities.Session()) as entities.Session,
}
export const sessionSlice = createSlice({
name: 'session',
initialState,
reducers: {
updateSession: (state, action: PayloadAction<undefined>) => {
GetCurrentSession().then(response => {
if (response) state.currentSession = response
}).catch(console.error)
},
createNewProject: (state, action: PayloadAction<string>)=> {
const newProjectName = action.payload
CreateNewProject(newProjectName).then(createdSession => {
if (createdSession) state.currentSession = serialize(createdSession)
}).catch(console.error)
},
requestUpdateCurrentUser: (state, action: PayloadAction<UserProps>) => {
const userProps = action.payload
RequestUpdateCurrentUser(new entities.User(userProps)).then(updatedUser => {
state.currentSession.user = serialize(updatedUser)
}).catch(console.error)
},
requestSelectProjectByName: (state, action: PayloadAction<string>) => {
const projectName = action.payload
console.log('projectName: ', projectName)
RequestChangeSessionProjectByName(projectName).then(success => {
if (success) GetCurrentSession().then(response => {
console.log(response)
if (response) state.currentSession = serialize(response)
}).catch(console.error)
}).catch(console.error)
}
}
})
export const {
updateSession,
createNewProject,
requestUpdateCurrentUser,
requestSelectProjectByName
} = sessionSlice.actions
export default sessionSlice.reducer