/** * Campaign Hook * * React hook for accessing Campaign service operations. * Uses ServiceRegistry for service access - the service handles all * data transformation, validation, and API calls. * * @example * ```typescript * const { service, isLoading, error } = useCampaignService(); * const campaigns = await service.fetchAll(); * const campaign = await service.create(data); * ``` */ import type { FrontendCampaignDomainService } from '../../domain/campaign'; import type { CampaignOperations, CampaignFileUpload } from '@plyaz/types/campaign'; /** Service key for Campaign in ServiceRegistry */ export declare const CAMPAIGN_SERVICE_KEY = "campaign"; /** * Hook for Campaign service (async - with loading state) * * @returns Object containing service instance, loading state, and error * @example * ```typescript * const { service, isLoading, error } = useCampaignService(); * if (service) { * const campaigns = await service.fetchAll(); * } * ``` */ export declare function useCampaignService(): { service: FrontendCampaignDomainService | null; isLoading: boolean; error: Error | null; }; /** * Hook for Campaign service (sync - throws if not ready) * * @returns Campaign service instance * @throws Error if service is not available * @example * ```typescript * const service = useCampaignServiceSync(); * const campaign = await service.create(data); * ``` */ export declare function useCampaignServiceSync(): FrontendCampaignDomainService; /** * Hook for managing campaigns with enhanced operations * * Supports two file upload approaches: * 1. Use useCampaignFiles() hook separately in components * 2. Pass file data directly to create/update methods (hook-within-hook) * * @returns Object with campaigns state and CRUD methods * @example * ```typescript * const { campaigns, createCampaign, createCampaignWithFiles } = useCampaigns(); * * // Approach 1: Separate file upload * const { uploadCampaignImages } = useCampaignFiles(); * const urls = await uploadCampaignImages(files); * await createCampaign({ name: 'Campaign', bannerUrl: urls[0] }); * * // Approach 2: Direct file handling * await createCampaignWithFiles({ * name: 'Campaign', * files: { banner: bannerFile, gallery: galleryFiles } * }); * ``` */ export declare function useCampaignsWithFiles(): CampaignOperations; /** * Hook for campaign file uploads with enhanced functionality * * Error handling, progress streaming, and state management are handled automatically * by the global error store and stream store. Access progress via stream store hooks. * * @returns Object with upload methods (state managed globally) * @example * ```typescript * const { uploadCampaignImages } = useCampaignFiles(); * * // Upload banner - errors and progress handled automatically * const fileUrls = await uploadCampaignImages([bannerFile], 'campaign-123'); * * // Update campaign with the returned URL/fileId * await updateCampaign('campaign-123', { bannerUrl: fileUrls[0] }); * ``` */ export declare function useCampaignFiles(): CampaignFileUpload; /** * Get Campaign service directly from registry (non-hook) * * @returns Promise resolving to campaign service instance * @example * ```typescript * const handleSubmit = async () => { * const service = await getCampaignService(); * await service.create(data); * }; * ``` */ export declare function getCampaignService(): Promise; /** * Create service accessor for Zustand stores * * @returns Function that returns campaign service promise * @example * ```typescript * const getCampaign = createCampaignServiceAccessor(); * * const store = create((set) => ({ * campaigns: [], * fetch: async () => { * const service = await getCampaign(); * const campaigns = await service.fetchAll(); * set({ campaigns }); * }, * })); * ``` */ export declare function createCampaignServiceAccessor(): () => Promise; //# sourceMappingURL=useCampaign.d.ts.map