76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
import { api } from './client';
|
|
import type { Event, EventDashboardAnalytics } from './types';
|
|
|
|
interface ListParams {
|
|
organization?: string;
|
|
status?: string;
|
|
type?: string;
|
|
page?: number;
|
|
limit?: number;
|
|
recordKind?: 'event' | 'activity';
|
|
activitySubtype?: 'qna' | 'quiz' | 'poll';
|
|
enrich?: boolean;
|
|
}
|
|
|
|
export const eventsApi = {
|
|
list(params?: ListParams) {
|
|
const sp = new URLSearchParams();
|
|
if (params?.organization) sp.set('organization', params.organization);
|
|
if (params?.status) sp.set('status', params.status);
|
|
if (params?.type) sp.set('type', params.type);
|
|
if (params?.page != null) sp.set('page', String(params.page));
|
|
if (params?.limit != null) sp.set('limit', String(params.limit));
|
|
if (params?.recordKind) sp.set('recordKind', params.recordKind);
|
|
if (params?.activitySubtype) sp.set('activitySubtype', params.activitySubtype);
|
|
if (params?.enrich) sp.set('enrich', '1');
|
|
const q = sp.toString();
|
|
return api.get<{ events: Event[]; total: number; page: number; limit: number }>(
|
|
`/events${q ? `?${q}` : ''}`
|
|
);
|
|
},
|
|
|
|
get(id: string, opts?: { enrich?: boolean }) {
|
|
const q = opts?.enrich ? '?enrich=1' : '';
|
|
return api.get<Event>(`/events/${id}${q}`);
|
|
},
|
|
|
|
create(payload: Partial<Event>) {
|
|
return api.post<Event>('/events', payload);
|
|
},
|
|
|
|
update(id: string, payload: Partial<Event>) {
|
|
return api.put<Event>(`/events/${id}`, payload);
|
|
},
|
|
|
|
remove(id: string) {
|
|
return api.delete<unknown>(`/events/${id}`);
|
|
},
|
|
|
|
analytics(id: string) {
|
|
return api.get<EventDashboardAnalytics>(`/events/${id}/analytics`);
|
|
},
|
|
|
|
duplicate(id: string) {
|
|
return api.post<Event>(`/events/${id}/duplicate`, {});
|
|
},
|
|
|
|
generateFromAi(payload: { description: string; organization?: string | null }) {
|
|
return api.post<Event>('/events/generate-from-ai', payload);
|
|
},
|
|
|
|
aiExtractPreview(payload: { description: string; organization?: string | null }) {
|
|
return api.post<{
|
|
gaps: { id: string; prompt: string }[];
|
|
mergedPreview: Record<string, unknown>;
|
|
}>('/events/ai-extract-preview', payload);
|
|
},
|
|
|
|
/** Forms + microsites with resolved hrefs for emailer CTA pickers */
|
|
emailerLinkTargets(eventId: string) {
|
|
return api.get<{
|
|
forms: { id: string; name: string; href: string }[];
|
|
microsites: { id: string; name: string; href: string }[];
|
|
}>(`/events/${eventId}/emailer-link-targets`);
|
|
},
|
|
};
|