
* refact: generalized back end structs * refact: fixed front end type, removed dead code * removed test image folder * refact: removed dead structs
77 lines
2.8 KiB
TypeScript
77 lines
2.8 KiB
TypeScript
'use client'
|
|
|
|
import { createContext, ReactNode, useContext, useEffect, useState } from 'react'
|
|
import { GetCurrentSession, GetDocuments, } from '../../wailsjs/wailsjs/go/ipc/Channel'
|
|
import { entities } from '../../wailsjs/wailsjs/go/models'
|
|
import { ProjectContextType, ProjectProps } from './types'
|
|
import makeDefaultProject from './makeDefaultProject'
|
|
import { saveDocuments } from '../../useCases/saveData'
|
|
import createAreaProviderMethods from './createAreaProviderMethods'
|
|
import createDocumentProviderMethods from './createDocumentMethods'
|
|
import createSessionProviderMethods from './createSessionProviderMethods'
|
|
import createUserMarkdownProviderMethods from './createUserMarkdownProviderMethods'
|
|
|
|
const ProjectContext = createContext<ProjectContextType>(makeDefaultProject())
|
|
|
|
export function useProject() {
|
|
return useContext(ProjectContext)
|
|
}
|
|
|
|
type Props = { children: ReactNode, projectProps: ProjectProps }
|
|
export function ProjectProvider({ children, projectProps }: Props) {
|
|
const [documents, setDocuments] = useState<entities.Document[]>(projectProps.documents)
|
|
const [groups, setGroups] = useState<entities.Group[]>(projectProps.groups)
|
|
const [selectedAreaId, setSelectedAreaId] = useState<string>('')
|
|
const [selectedDocumentId, setSelectedDocumentId] = useState<string>('')
|
|
const [currentSession, setCurrentSession] = useState<entities.Session>(new entities.Session())
|
|
|
|
const updateDocuments = async () => {
|
|
const response = await GetDocuments()
|
|
const { documents, groups } = response
|
|
setDocuments(documents)
|
|
setGroups(groups)
|
|
return response
|
|
}
|
|
|
|
const updateSession = async () => {
|
|
const response = await GetCurrentSession()
|
|
if (response) setCurrentSession(response)
|
|
return response
|
|
}
|
|
|
|
const documentMethods = createDocumentProviderMethods({ documents, saveDocuments, updateDocuments, selectedDocumentId, groups })
|
|
const areaMethods = createAreaProviderMethods({ documents, updateDocuments, selectedDocumentId })
|
|
const sessionMethods = createSessionProviderMethods({ updateSession, updateDocuments })
|
|
const userMarkDownMethods = createUserMarkdownProviderMethods()
|
|
|
|
|
|
useEffect(() => {
|
|
if (!documents.length && !groups.length) updateDocuments()
|
|
}, [documents.length, groups.length])
|
|
|
|
|
|
useEffect(() => {
|
|
if ((!currentSession?.user?.localId || !currentSession?.user?.id)) {
|
|
updateSession()
|
|
}
|
|
}, [currentSession?.user?.localId, currentSession?.user?.id])
|
|
|
|
const value = {
|
|
id: '',
|
|
documents,
|
|
groups,
|
|
selectedAreaId,
|
|
setSelectedAreaId,
|
|
selectedDocumentId,
|
|
setSelectedDocumentId,
|
|
currentSession,
|
|
...areaMethods,
|
|
...documentMethods,
|
|
...sessionMethods,
|
|
...userMarkDownMethods,
|
|
}
|
|
|
|
return <ProjectContext.Provider value={value}>
|
|
{children}
|
|
</ProjectContext.Provider>
|
|
} |