Prashikshak / Web /src /api /forms.api.ts
Abhisingh-18's picture
Initial commit: Prashikshak - disaster management training platform
9a92a42
Raw
History Blame Contribute Delete
4.48 kB
import api from './axiosInstance.api';
// Types based on backend models
export type FieldType =
| 'short_text'
| 'long_text'
| 'multiple_choice'
| 'checkboxes'
| 'dropdown'
| 'linear_scale'
| 'date'
| 'time'
| 'email'
| 'phone'
| 'number'
| 'file_upload';
export interface IFormField {
id: string;
type: FieldType;
label: string;
description?: string;
required: boolean;
options?: string[];
validation?: {
min?: number;
max?: number;
pattern?: string;
maxLength?: number;
minLength?: number;
fileTypes?: string[];
maxFileSize?: number;
};
order: number;
}
export interface IForm {
_id: string;
title: string;
description?: string;
event?: any;
organization: any;
createdBy: any;
fields: IFormField[];
accessType: 'event_attendees' | 'verified_users' | 'public';
restrictToAttendees: boolean;
oneResponsePerUser: boolean;
shortCode: string;
shareToken: string;
qrCode?: string;
acceptingResponses: boolean;
showResponseSummary: boolean;
allowEditing: boolean;
responseCount: number;
status: 'draft' | 'active' | 'closed';
createdAt: string;
updatedAt: string;
}
export interface IFieldResponse {
fieldId: string;
value: any;
fileUrl?: string;
}
export interface IFormResponse {
_id: string;
form: string | IForm;
event?: string;
respondent: any;
responses: IFieldResponse[];
submittedAt: string;
lastEditedAt?: string;
isComplete: boolean;
}
export interface CreateFormRequest {
title: string;
description?: string;
eventId?: string;
fields: IFormField[];
accessType?: 'event_attendees' | 'verified_users' | 'public';
restrictToAttendees?: boolean;
oneResponsePerUser?: boolean;
showResponseSummary?: boolean;
allowEditing?: boolean;
}
export interface UpdateFormRequest {
title?: string;
description?: string;
fields?: IFormField[];
accessType?: 'event_attendees' | 'verified_users' | 'public';
restrictToAttendees?: boolean;
oneResponsePerUser?: boolean;
acceptingResponses?: boolean;
showResponseSummary?: boolean;
allowEditing?: boolean;
status?: 'draft' | 'active' | 'closed';
}
export interface SubmitResponseRequest {
responses: IFieldResponse[];
}
// API Functions
export const createForm = async (data: CreateFormRequest): Promise<{ message: string; form: any }> => {
console.log("sending create form request");
const response = await api.post('/forms/create', data);
return response.data;
};
export const updateForm = async (formId: string, data: UpdateFormRequest): Promise<{ message: string; form: IForm }> => {
const response = await api.put(`/forms/${formId}`, data);
return response.data;
};
export const getFormDetails = async (formId: string, token?: string): Promise<{ form: IForm; hasSubmitted: boolean; canEdit: boolean }> => {
const url = token ? `/forms/${formId}?token=${token}` : `/forms/${formId}`;
const response = await api.get(url);
return response.data;
};
export const submitFormResponse = async (formId: string, data: SubmitResponseRequest): Promise<{ message: string; response: IFormResponse }> => {
const response = await api.post(`/forms/${formId}/submit`, data);
return response.data;
};
export const getFormResponses = async (formId: string): Promise<{ form: { title: string; responseCount: number }; responses: IFormResponse[] }> => {
const response = await api.get(`/forms/${formId}/responses`);
return response.data;
};
export const getMyForms = async (eventId?: string): Promise<{ forms: IForm[] }> => {
const url = eventId ? `/forms/my-forms?eventId=${eventId}` : '/forms/my-forms';
const response = await api.get(url);
return response.data;
};
export const deleteForm = async (formId: string): Promise<{ message: string }> => {
const response = await api.delete(`/forms/${formId}`);
return response.data;
};
export const getMyResponse = async (formId: string): Promise<{ response: IFormResponse }> => {
const response = await api.get(`/forms/${formId}/my-response`);
return response.data;
};
export const exportResponsesToCSV = async (formId: string): Promise<Blob> => {
const response = await api.get(`/forms/${formId}/export/csv`, {
responseType: 'blob'
});
return response.data;
};