162 lines
3.9 KiB
TypeScript
162 lines
3.9 KiB
TypeScript
export interface PageInfo {
|
|
pageSize: number;
|
|
totalRows: number;
|
|
isFirstPage: boolean;
|
|
isLastPage: boolean;
|
|
page: number;
|
|
}
|
|
|
|
export interface InterestsResponse {
|
|
list: Interest[];
|
|
PageInfo: PageInfo;
|
|
}
|
|
|
|
export enum Table {
|
|
Interest = "mbs9hjauug4eseo",
|
|
}
|
|
|
|
export const getNocoDbConfiguration = () => useRuntimeConfig().nocodb;
|
|
|
|
export const createTableUrl = (table: Table) =>
|
|
`${getNocoDbConfiguration().url}/api/v2/tables/${table}/records`;
|
|
|
|
export const getInterests = async () =>
|
|
$fetch<InterestsResponse>(createTableUrl(Table.Interest), {
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
params: {
|
|
limit: 1000,
|
|
},
|
|
});
|
|
|
|
export const getInterestById = async (id: string) =>
|
|
$fetch<Interest>(`${createTableUrl(Table.Interest)}/${id}`, {
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
});
|
|
|
|
export const updateInterest = async (id: string, data: Partial<Interest>) => {
|
|
// Create a clean data object that matches the InterestsRequest schema
|
|
// Remove any properties that are not in the schema or shouldn't be sent
|
|
const cleanData: Record<string, any> = {};
|
|
|
|
// Only include fields that are part of the InterestsRequest schema
|
|
const allowedFields = [
|
|
"Full Name",
|
|
"Yacht Name",
|
|
"Length",
|
|
"Address",
|
|
"Email Address",
|
|
"Sales Process Level",
|
|
"Phone Number",
|
|
"Extra Comments",
|
|
"Berth Size Desired",
|
|
"LOI-NDA Document",
|
|
"Date Added",
|
|
"Width",
|
|
"Depth",
|
|
"Created At",
|
|
"Request More Information",
|
|
"Source",
|
|
"Place of Residence",
|
|
"Contact Method Preferred",
|
|
"Request Form Sent",
|
|
"Berth Number",
|
|
"EOI Time Sent",
|
|
"Lead Category",
|
|
"Request More Info - To Sales",
|
|
"EOI Send to Sales",
|
|
"Time LOI Sent",
|
|
"EOI Status",
|
|
"Berth Info Sent Status",
|
|
"Contract Sent Status",
|
|
"Deposit 10% Status",
|
|
"Contract Status",
|
|
];
|
|
|
|
// Filter the data to only include allowed fields
|
|
for (const field of allowedFields) {
|
|
if (field in data) {
|
|
cleanData[field] = (data as any)[field];
|
|
}
|
|
}
|
|
|
|
return $fetch<Interest>(createTableUrl(Table.Interest), {
|
|
method: "PATCH",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
body: {
|
|
Id: id, // This identifies the record to update
|
|
...cleanData, // These are the fields to update
|
|
},
|
|
});
|
|
};
|
|
|
|
export const createInterest = async (data: Partial<Interest>) => {
|
|
// Create a clean data object that matches the InterestsRequest schema
|
|
const cleanData: Record<string, any> = {};
|
|
|
|
// Only include fields that are part of the InterestsRequest schema
|
|
const allowedFields = [
|
|
"Full Name",
|
|
"Yacht Name",
|
|
"Length",
|
|
"Address",
|
|
"Email Address",
|
|
"Sales Process Level",
|
|
"Phone Number",
|
|
"Extra Comments",
|
|
"Berth Size Desired",
|
|
"Date Added",
|
|
"Width",
|
|
"Depth",
|
|
"Source",
|
|
"Place of Residence",
|
|
"Contact Method Preferred",
|
|
"Lead Category",
|
|
"EOI Status",
|
|
"Berth Info Sent Status",
|
|
"Contract Sent Status",
|
|
"Deposit 10% Status",
|
|
"Contract Status",
|
|
];
|
|
|
|
// Filter the data to only include allowed fields
|
|
for (const field of allowedFields) {
|
|
if (field in data) {
|
|
cleanData[field] = (data as any)[field];
|
|
}
|
|
}
|
|
|
|
// Remove any computed or relation fields that shouldn't be sent
|
|
delete cleanData.Id;
|
|
delete cleanData.Berths;
|
|
delete cleanData["Berth Recommendations"];
|
|
delete cleanData.Berth;
|
|
|
|
return $fetch<Interest>(createTableUrl(Table.Interest), {
|
|
method: "POST",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
body: cleanData,
|
|
});
|
|
};
|
|
|
|
export const deleteInterest = async (id: string) =>
|
|
$fetch(`${createTableUrl(Table.Interest)}/${id}`, {
|
|
method: "DELETE",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
});
|
|
|
|
export const triggerWebhook = async (url: string, payload: any) =>
|
|
$fetch(url, {
|
|
method: "POST",
|
|
body: payload,
|
|
});
|