89 lines
3.1 KiB
TypeScript
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
|