textualize/frontend/context/Project/createAreaProviderMethods.ts
2023-07-01 12:31:25 -05:00

89 lines
3.1 KiB
TypeScript

import { saveDocuments } from '../../useCases/saveData'
import { GetProcessedAreasByDocumentId, RequestAddArea, RequestAddProcessedArea, RequestChangeAreaOrder, RequestDeleteAreaById, RequestUpdateArea, RequestUpdateProcessedArea, } from '../../wailsjs/wailsjs/go/ipc/Channel'
import { entities, ipc } from '../../wailsjs/wailsjs/go/models'
import { AddAreaProps, AreaProps } from './types'
type Dependencies = {
documents: entities.Document[]
updateDocuments: () => Promise<ipc.GetDocumentsResponse>
selectedDocumentId: string
}
const createAreaProviderMethods = (dependencies: Dependencies) => {
const { documents, updateDocuments, selectedDocumentId } = dependencies
const getAreaById = (areaId: string): entities.Area | undefined => (
documents.map(d => d.areas).flat().find(a => a.id === areaId)
)
const getProcessedAreaById = async (areaId: string) => {
try {
if (!selectedDocumentId || !areaId) return
const processedAreas = await getProcessedAreasByDocumentId(selectedDocumentId)
const foundProcessedArea = processedAreas.find(a => a.id === areaId)
return foundProcessedArea
} catch (err) {
console.error(err)
return Promise.resolve(undefined)
}
}
const getProcessedAreasByDocumentId = async (documentId: string) => {
let response: entities.ProcessedArea[] = []
try {
response = await GetProcessedAreasByDocumentId(documentId)
} catch (err) {
console.log(err)
}
return response
}
const requestAddArea = async (documentId: string, area: AddAreaProps): Promise<entities.Area> => {
const response = await RequestAddArea(documentId, new entities.Area(area))
if (response.id) await updateDocuments()
saveDocuments()
return response
}
const requestUpdateArea = async (updatedArea: AreaProps): Promise<boolean> => {
console.log('requestUpdateArea', updatedArea)
const wasSuccessful = await RequestUpdateArea(new entities.Area(updatedArea))
if (wasSuccessful) await updateDocuments()
saveDocuments()
return wasSuccessful
}
const requestDeleteAreaById = async (areaId: string): Promise<boolean> => {
const wasSuccessfulDeletion = await RequestDeleteAreaById(areaId)
if (wasSuccessfulDeletion) updateDocuments()
saveDocuments()
return wasSuccessfulDeletion
}
const requestAddProcessedArea = async (processedArea: entities.ProcessedArea) => await RequestAddProcessedArea(processedArea)
const requestUpdateProcessedArea = async (updatedProcessedArea: entities.ProcessedArea) => await RequestUpdateProcessedArea(updatedProcessedArea)
const requestChangeAreaOrder = async (areaId: string, newOrder: number) => {
const response = await RequestChangeAreaOrder(areaId, newOrder)
await updateDocuments()
saveDocuments()
return response
}
return {
requestAddArea,
requestUpdateArea,
getAreaById,
requestDeleteAreaById,
getProcessedAreasByDocumentId,
requestAddProcessedArea,
requestUpdateProcessedArea,
requestChangeAreaOrder,
getProcessedAreaById,
}
}
export default createAreaProviderMethods