@bookla-app/react-client-sdk
Version:
React SDK for Bookla Client API
271 lines (270 loc) • 6.44 kB
TypeScript
export type ServiceType = "fixed" | "flexible" | "group" | "ticket" | "days";
export type BookingStatus = "confirmed" | "pending" | "cancelled" | "finished" | "no_show" | "rejected";
export interface ServiceResponse {
id: string;
companyID: string;
name: string;
type: ServiceType;
color: string;
createdAt: string;
updatedAt: string;
timeZone?: string;
settings?: ServiceSettings;
resources?: ResourceResponse[];
tickets?: TicketResponse[];
}
export interface ServiceSettings {
currency?: string;
bookingPolicy?: string;
duration?: string;
timeInterval?: string;
bufferBefore?: string;
bufferAfter?: string;
tax?: {
rate: number;
inclusive: boolean;
};
}
export interface ResourceResponse {
id: string;
companyID: string;
name: string;
color: string;
createdAt: string;
updatedAt: string;
services?: ServiceResponse[];
}
export interface TicketResponse {
id: string;
name: string;
}
export interface TimesResponse {
times: {
[resourceId: string]: TimeSlot[];
};
}
export interface DatesResponse {
dates: {
[resourceId: string]: string[];
};
timeZone: string;
}
export interface TimeSlot {
startTime: string;
duration: string;
price: {
amount: number;
comparedAmount: number;
currency: string;
};
}
export interface BookingListResponse {
bookings: BookingResponse[];
limit: number;
offset: number;
total: number;
}
export interface BookingResponse {
id: string;
companyID: string;
resourceID: string;
serviceID: string;
startTime: string;
endTime: string;
duration: string;
spots: number;
price?: number;
currency?: string;
type: ServiceType;
status: BookingStatus;
paymentURL?: string;
tickets?: {
[ticketID: string]: {
spots: number;
price: number;
comparedPrice?: number;
};
};
metaData?: {
[key: string]: any;
};
createdAt: string;
}
export interface SubscriptionContract {
id: string;
clientID: string;
subscriptionID: string;
status: string;
activeFrom: string;
duration: string;
limitations: {
bookingsCount?: number;
daysOfWeek?: number;
maxDuration?: string;
maxSpotsPerBooking?: number;
maxTicketsPerBooking?: Record<string, number>;
times?: Array<{
startTime: string;
endTime: string;
}>;
};
metaData?: Record<string, any>;
}
export interface SubscriptionCartResponse {
expiresAt: string;
items: SubscriptionContract[];
}
export interface PurchaseSubscriptionsResponse {
items: SubscriptionContract[];
price: number;
currency: string;
tax: number;
taxRate: number;
taxInclusive: boolean;
expiresAt: string;
paymentURL?: string;
}
export interface CompanySubscription {
id: string;
title: string;
price: number;
comparedPrice?: number;
currency: string;
duration: string;
availableFrom: string;
availableTo: string;
rRule?: string;
resourceIDs: string[];
serviceIDs: string[];
limitations: {
bookingsCount?: number;
daysOfWeek?: number;
maxDuration?: string;
maxSpotsPerBooking?: number;
maxTicketsPerBooking?: Record<string, number>;
times?: Array<{
startTime: string;
endTime: string;
}>;
};
metaData?: Record<string, any>;
}
export interface CodeValidateResponse {
canApply: boolean;
clientID: string;
clientEmail: string;
price: number;
pluginNameSpace: string;
pluginResponse?: Record<string, any>;
}
export interface ClientAuthResponse {
accessToken: string;
refreshToken: string;
expiresAt: string;
}
export interface CompanyGiftCard {
id: string;
title: string;
amount: number;
currency: string;
taxRate: number;
taxInclusive: boolean;
availableFrom: string;
availableTo?: string;
validityDuration: string;
metaData?: Record<string, any>;
}
export interface PurchaseGiftCardResponse {
item: GiftCardContract;
expiresAt: string;
price: number;
currency: string;
tax: number;
taxRate: number;
taxInclusive: boolean;
paymentURL: string;
}
export interface GiftCardUsage {
id: string;
createdAt: string;
companyID: string;
purchaseID: string;
giftCardID: string;
clientID: string;
status: string;
amount: number;
currency: string;
reservationID?: string;
metaData?: Record<string, any>;
}
export interface GiftCardContract {
id: string;
createdAt: string;
companyID: string;
giftCardID: string;
giftCardName: string;
clientID: string;
code: string;
amount: number;
currency: string;
validUntil?: string;
status: string;
usages?: GiftCardUsage[];
metaData?: Record<string, any>;
}
export interface ClientAddonResponse {
id: string;
name: string;
description: string;
priceCents: number;
currency: string;
taxPercent: number;
taxInclusive: boolean;
minQuantity: number;
maxQuantity: number;
sortOrder: number;
isRequired: boolean;
durationMultiplierEnabled?: boolean;
durationMultiplierUnit?: string;
durationMultiplierRounding?: "up" | "down" | "nearest";
metadata?: Record<string, any>;
}
export interface ClientAddonGroupResponse {
id: string;
name: string;
description: string;
sortOrder: number;
isRequired: boolean;
members: ClientAddonResponse[];
}
export interface ClientServiceAddonItem {
type: "addon" | "group";
serviceAddonId: string;
isRequired: boolean;
sortOrder: number;
addon?: ClientAddonResponse;
group?: ClientAddonGroupResponse;
}
export interface DiscoverAddonsResponse {
items: ClientServiceAddonItem[];
}
export interface ValidatedAddonItem {
addonId: string;
addonName: string;
quantity: number;
unitPrice: number;
subtotal: number;
tax: number;
total: number;
taxPercent: number;
taxInclusive: boolean;
}
export interface ValidateAddonsResponse {
valid: boolean;
errors?: string[];
subtotal: number;
tax: number;
total: number;
currency: string;
items: ValidatedAddonItem[];
}