frontend_nyla/src/contexts/PekContext.tsx

73 lines
2 KiB
TypeScript

import React, { createContext, useContext, ReactNode } from 'react';
import { usePek } from '../hooks/usePek';
interface PekContextType {
// Location input - separate fields
kanton: string;
setKanton: (value: string) => void;
gemeinde: string;
setGemeinde: (value: string) => void;
adresse: string;
setAdresse: (value: string) => void;
buildLocationString: () => string;
// Legacy locationInput for backward compatibility
locationInput: string;
setLocationInput: (value: string) => void;
useCurrentLocation: () => Promise<void>;
isGettingLocation: boolean;
locationError: string | null;
// Parcel search
selectedParcel: any;
searchParcel: (location: string, includeAdjacent?: boolean) => Promise<any>;
isSearchingParcel: boolean;
parcelSearchError: string | null;
// Map view
mapCenter: any;
mapZoomBounds: any;
parcelGeometries: any[];
handleMapClick: (point: any) => Promise<void>;
handleParcelClick: (parcelId: string) => Promise<void>;
// Command processing
commandInput: string;
setCommandInput: (value: string) => void;
processCommand: (userInput: string) => Promise<any>;
isProcessingCommand: boolean;
commandResults: any[];
commandError: string | null;
// Project management
currentProjekt: any;
createProjekt: (data: any) => Promise<any>;
isCreatingProjekt: boolean;
addParcelToProjekt: (projektId: string, data: any) => Promise<any>;
isAddingParcel: boolean;
projektError: string | null;
// Panel state
isPanelOpen: boolean;
setIsPanelOpen: (open: boolean) => void;
}
const PekContext = createContext<PekContextType | undefined>(undefined);
export const PekProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
const pekData = usePek();
return (
<PekContext.Provider value={pekData}>
{children}
</PekContext.Provider>
);
};
export const usePekContext = (): PekContextType => {
const context = useContext(PekContext);
if (!context) {
throw new Error('usePekContext must be used within a PekProvider');
}
return context;
};