@blazeo.com/appointment-client 1.0.11 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blazeo.com-appointment-client-1.0.14.tgz +0 -0
- package/package.json +3 -2
- package/sample/src/EventTab.jsx +435 -395
- package/sample/src/FetchCalendarTab.jsx +19 -33
- package/sample/src/LeadTab.jsx +335 -0
- package/src/calendar/calendarCreation.ts +62 -15
- package/src/calendar/fetchCalendarDetails.ts +10 -2
- package/src/calendar/getCalendarsByCompany.ts +17 -64
- package/src/calendar/mapToDesiredResponse.ts +31 -17
- package/src/events/getAppointmentsByFilter.ts +98 -0
- package/src/index.ts +23 -14
- package/src/lead/fetchLeadDetails.ts +106 -0
- package/blazeo.com-appointment-client-1.0.11.tgz +0 -0
- package/dist/calendar/blazeoCalendarRelationMethods.d.ts +0 -8
- package/dist/calendar/blazeoCalendarRelationMethods.d.ts.map +0 -1
- package/dist/calendar/blazeoCalendarRelationMethods.js +0 -16
- package/dist/calendar/blazeoCalendarRelationMethods.js.map +0 -1
- package/dist/calendar/buildUnifiedCalendarView.d.ts +0 -39
- package/dist/calendar/buildUnifiedCalendarView.js +0 -301
- package/dist/calendar/calendarCreation.d.ts +0 -27
- package/dist/calendar/calendarCreation.js +0 -191
- package/dist/calendar/calendarCreationFacade.d.ts +0 -27
- package/dist/calendar/calendarCreationFacade.d.ts.map +0 -1
- package/dist/calendar/calendarCreationFacade.js +0 -167
- package/dist/calendar/calendarCreationFacade.js.map +0 -1
- package/dist/calendar/createCalendar.d.ts +0 -81
- package/dist/calendar/createCalendar.d.ts.map +0 -1
- package/dist/calendar/createCalendar.js +0 -206
- package/dist/calendar/createCalendar.js.map +0 -1
- package/dist/calendar/fetchCalendarDetails.d.ts +0 -41
- package/dist/calendar/fetchCalendarDetails.js +0 -262
- package/dist/calendar/fetchCalendarWithOpeningHours.d.ts +0 -25
- package/dist/calendar/fetchCalendarWithOpeningHours.js +0 -114
- package/dist/calendar/getAllParticipantOpeningHours.d.ts +0 -22
- package/dist/calendar/getAllParticipantOpeningHours.js +0 -22
- package/dist/calendar/getCalendarsByCompany.d.ts +0 -9
- package/dist/calendar/getCalendarsByCompany.js +0 -107
- package/dist/calendar/getOpeningHours.d.ts +0 -8
- package/dist/calendar/getOpeningHours.js +0 -9
- package/dist/calendar/getParticipantOpeningHours.d.ts +0 -37
- package/dist/calendar/getParticipantOpeningHours.js +0 -48
- package/dist/calendar/getParticipants.d.ts +0 -7
- package/dist/calendar/getParticipants.js +0 -13
- package/dist/calendar/mapCalendarBoToBlazeoSnapshot.d.ts +0 -10
- package/dist/calendar/mapCalendarBoToBlazeoSnapshot.d.ts.map +0 -1
- package/dist/calendar/mapCalendarBoToBlazeoSnapshot.js +0 -44
- package/dist/calendar/mapCalendarBoToBlazeoSnapshot.js.map +0 -1
- package/dist/calendar/mapCalendarToBlazeoSnapshot.d.ts +0 -29
- package/dist/calendar/mapCalendarToBlazeoSnapshot.d.ts.map +0 -1
- package/dist/calendar/mapCalendarToBlazeoSnapshot.js +0 -44
- package/dist/calendar/mapCalendarToBlazeoSnapshot.js.map +0 -1
- package/dist/calendar/mapToDesiredResponse.d.ts +0 -70
- package/dist/calendar/mapToDesiredResponse.js +0 -99
- package/dist/config/applyBlazeoClientConfig.d.ts +0 -3
- package/dist/config/applyBlazeoClientConfig.d.ts.map +0 -1
- package/dist/config/applyBlazeoClientConfig.js +0 -14
- package/dist/config/applyBlazeoClientConfig.js.map +0 -1
- package/dist/config/applyBlazeoDefaults.d.ts +0 -2
- package/dist/config/applyBlazeoDefaults.d.ts.map +0 -1
- package/dist/config/applyBlazeoDefaults.js +0 -14
- package/dist/config/applyBlazeoDefaults.js.map +0 -1
- package/dist/config/blazeo.config.d.ts +0 -11
- package/dist/config/blazeo.config.d.ts.map +0 -1
- package/dist/config/blazeo.config.js +0 -11
- package/dist/config/blazeo.config.js.map +0 -1
- package/dist/config/blazeoClientDefaults.d.ts +0 -11
- package/dist/config/blazeoClientDefaults.d.ts.map +0 -1
- package/dist/config/blazeoClientDefaults.js +0 -11
- package/dist/config/blazeoClientDefaults.js.map +0 -1
- package/dist/config/ensureBlazeoHttpReady.d.ts +0 -17
- package/dist/config/ensureBlazeoHttpReady.js +0 -31
- package/dist/config/initializeAppointmentClient.d.ts +0 -11
- package/dist/config/initializeAppointmentClient.d.ts.map +0 -1
- package/dist/config/initializeAppointmentClient.js +0 -15
- package/dist/config/initializeAppointmentClient.js.map +0 -1
- package/dist/config/syncBlazeoConnection.d.ts +0 -6
- package/dist/config/syncBlazeoConnection.js +0 -18
- package/dist/events/appointmentEventFacade.d.ts +0 -67
- package/dist/events/appointmentEventFacade.d.ts.map +0 -1
- package/dist/events/appointmentEventFacade.js +0 -124
- package/dist/events/appointmentEventFacade.js.map +0 -1
- package/dist/events/mapAppointmentToEventSnapshot.d.ts +0 -5
- package/dist/events/mapAppointmentToEventSnapshot.d.ts.map +0 -1
- package/dist/events/mapAppointmentToEventSnapshot.js +0 -57
- package/dist/events/mapAppointmentToEventSnapshot.js.map +0 -1
- package/dist/exampleData.d.ts +0 -119
- package/dist/exampleData.d.ts.map +0 -1
- package/dist/exampleData.js +0 -71
- package/dist/exampleData.js.map +0 -1
- package/dist/facade/calendarCreationFacade.d.ts +0 -40
- package/dist/facade/calendarCreationFacade.d.ts.map +0 -1
- package/dist/facade/calendarCreationFacade.js +0 -96
- package/dist/facade/calendarCreationFacade.js.map +0 -1
- package/dist/facade/mapCalendarBOToSnapshot.d.ts +0 -10
- package/dist/facade/mapCalendarBOToSnapshot.d.ts.map +0 -1
- package/dist/facade/mapCalendarBOToSnapshot.js +0 -44
- package/dist/facade/mapCalendarBOToSnapshot.js.map +0 -1
- package/dist/facades/index.d.ts +0 -12
- package/dist/facades/index.d.ts.map +0 -1
- package/dist/facades/index.js +0 -12
- package/dist/facades/index.js.map +0 -1
- package/dist/index.d.ts +0 -40
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -39
- package/dist/index.js.map +0 -1
- package/dist/models/CalendarRootModel.d.ts +0 -56
- package/dist/models/CalendarRootModel.d.ts.map +0 -1
- package/dist/models/CalendarRootModel.js +0 -54
- package/dist/models/CalendarRootModel.js.map +0 -1
- package/dist/models/CalendarSlotModel.d.ts +0 -9
- package/dist/models/CalendarSlotModel.d.ts.map +0 -1
- package/dist/models/CalendarSlotModel.js +0 -8
- package/dist/models/CalendarSlotModel.js.map +0 -1
- package/dist/models/EventModel.d.ts +0 -11
- package/dist/models/EventModel.d.ts.map +0 -1
- package/dist/models/EventModel.js +0 -10
- package/dist/models/EventModel.js.map +0 -1
- package/dist/models/ParticipantModel.d.ts +0 -9
- package/dist/models/ParticipantModel.d.ts.map +0 -1
- package/dist/models/ParticipantModel.js +0 -8
- package/dist/models/ParticipantModel.js.map +0 -1
- package/dist/models/index.d.ts +0 -5
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js +0 -5
- package/dist/models/index.js.map +0 -1
- package/dist/types/appointment.d.ts +0 -28
- package/dist/types/appointment.d.ts.map +0 -1
- package/dist/types/appointment.js +0 -6
- package/dist/types/appointment.js.map +0 -1
- package/dist/types/calendar.d.ts +0 -52
- package/dist/types/calendar.d.ts.map +0 -1
- package/dist/types/calendar.js +0 -6
- package/dist/types/calendar.js.map +0 -1
- package/dist/types/calendarBo.d.ts +0 -62
- package/dist/types/calendarBo.d.ts.map +0 -1
- package/dist/types/calendarBo.js +0 -6
- package/dist/types/calendarBo.js.map +0 -1
- package/sample/package-lock.json +0 -1778
|
@@ -24,22 +24,33 @@ export function mapToDesiredCalendarResponse(payload: any, openingHours: any[] =
|
|
|
24
24
|
}));
|
|
25
25
|
|
|
26
26
|
// Map opening hours with typename and raw fields
|
|
27
|
-
const mappedOpeningHours = openingHours.map(oh =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
const mappedOpeningHours = openingHours.map(oh => {
|
|
28
|
+
// If it's already a unified object (has day/start/end), preserve it but ensure __typename
|
|
29
|
+
if (oh.day !== undefined && oh.start !== undefined && oh.end !== undefined) {
|
|
30
|
+
return {
|
|
31
|
+
...oh,
|
|
32
|
+
__typename: "OpeningHour"
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Otherwise, map from raw PascalCase or camelCase
|
|
37
|
+
return {
|
|
38
|
+
id: pick(oh, "id", "Id") ?? 0,
|
|
39
|
+
createdOn: pick(oh, "createdOn", "CreatedOn", "created_on") ?? "0001-01-01T00:00:00.000Z",
|
|
40
|
+
modifiedOn: pick(oh, "modifiedOn", "ModifiedOn", "modified_on") ?? "0001-01-01T00:00:00.000Z",
|
|
41
|
+
member: pick(oh, "member", "Member"),
|
|
42
|
+
openingHourId: pick(oh, "openingHourId", "OpeningHourId", "opening_hour_id") ?? "",
|
|
43
|
+
calendarId: pick(oh, "calendarId", "CalendarId", "calendar_id") ?? "",
|
|
44
|
+
participantId: pick(oh, "participantId", "ParticipantId", "participant_id") ?? "",
|
|
45
|
+
days: oh.days ?? [],
|
|
46
|
+
startHour: oh.startHour ?? pick(oh, "startHour", "StartHour") ?? 0,
|
|
47
|
+
startMinute: oh.startMinute ?? pick(oh, "startMinute", "StartMinute") ?? 0,
|
|
48
|
+
endHour: oh.endHour ?? pick(oh, "endHour", "EndHour") ?? 0,
|
|
49
|
+
endMinute: oh.endMinute ?? pick(oh, "endMinute", "EndMinute") ?? 0,
|
|
50
|
+
off: !!(oh.off ?? pick(oh, "off", "Off")),
|
|
51
|
+
__typename: "OpeningHour"
|
|
52
|
+
};
|
|
53
|
+
});
|
|
43
54
|
|
|
44
55
|
// Map theme
|
|
45
56
|
const rawTheme = pick(payload, "theme", "Theme");
|
|
@@ -68,6 +79,8 @@ export function mapToDesiredCalendarResponse(payload: any, openingHours: any[] =
|
|
|
68
79
|
__typename: "ReminderChannelStatus"
|
|
69
80
|
})) : [];
|
|
70
81
|
|
|
82
|
+
const uuid = pick(payload, "uuid", "Uuid", "calendarId", "CalendarId");
|
|
83
|
+
|
|
71
84
|
return {
|
|
72
85
|
id: n(pick(payload, "id", "Id")),
|
|
73
86
|
durationUnit: n(pick(payload, "durationUnit", "DurationUnit")),
|
|
@@ -80,7 +93,8 @@ export function mapToDesiredCalendarResponse(payload: any, openingHours: any[] =
|
|
|
80
93
|
bufferTime: n(pick(payload, "bufferTime", "BufferTime")),
|
|
81
94
|
bufferTimeUnit: n(pick(payload, "bufferTimeUnit", "BufferTimeUnit")),
|
|
82
95
|
calendarLink: pick(payload, "calendarLink", "CalendarLink"),
|
|
83
|
-
uuid:
|
|
96
|
+
uuid: uuid,
|
|
97
|
+
calendarId: uuid, // Explicit alias requested by user
|
|
84
98
|
location: pick(payload, "location", "Location") ?? "",
|
|
85
99
|
bookingPageTitle: pick(payload, "bookingPageTitle", "BookingPageTitle") ?? null,
|
|
86
100
|
reminderChannelStatuses,
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { EventModel, LeadModel } from "@blazeo.com/calendar-client";
|
|
2
|
+
import { getCalendarsByCompany } from "../calendar/getCalendarsByCompany.js";
|
|
3
|
+
import moment from "moment";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* High-level method to fetch appointments with enriched mapping.
|
|
7
|
+
* Resolves names for organizers and calendars, and attempts to resolve missing leadIds.
|
|
8
|
+
*/
|
|
9
|
+
export async function getAppointmentsByFilter(
|
|
10
|
+
companyKey: string,
|
|
11
|
+
startDateFrom: string,
|
|
12
|
+
startDateTo: string,
|
|
13
|
+
opts: any = {}
|
|
14
|
+
) {
|
|
15
|
+
// 1. Fetch raw events
|
|
16
|
+
// Cast to any because getByDateRangeWithFilters is missing from some .d.ts versions but present in .js
|
|
17
|
+
const response: any = await (EventModel as any).getByDateRangeWithFilters(
|
|
18
|
+
companyKey,
|
|
19
|
+
startDateFrom,
|
|
20
|
+
startDateTo,
|
|
21
|
+
opts
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const events = response?.events || [];
|
|
25
|
+
const totalCount = response?.totalCount || 0;
|
|
26
|
+
|
|
27
|
+
if (events.length === 0) {
|
|
28
|
+
return { events: [], totalCount: 0 };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// 2. Fetch company data for name resolution (Calendars & Participants)
|
|
32
|
+
const enrichedCalendars = await getCalendarsByCompany(companyKey);
|
|
33
|
+
|
|
34
|
+
const calendarMap = new Map<string, string>();
|
|
35
|
+
const participantMap = new Map<string, string>();
|
|
36
|
+
|
|
37
|
+
enrichedCalendars.forEach((cal: any) => {
|
|
38
|
+
calendarMap.set(cal.calendarId, cal.name);
|
|
39
|
+
if (Array.isArray(cal.members)) {
|
|
40
|
+
cal.members.forEach((m: any) => {
|
|
41
|
+
participantMap.set(m.id, m.name);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// 3. Map events to the desired response schema
|
|
47
|
+
const mappedEvents = await Promise.all(
|
|
48
|
+
events.map(async (event: any) => {
|
|
49
|
+
// Resolve leadId if missing
|
|
50
|
+
// Note: event properties might be uppercase depending on API version, mapEventFromApi usually handles this
|
|
51
|
+
// but let's be defensive.
|
|
52
|
+
const rawEvent = (event as any)._raw || event;
|
|
53
|
+
let resolvedLeadId = event.leadId ?? rawEvent.lead_id ?? opts.leadId ?? null;
|
|
54
|
+
|
|
55
|
+
if (!resolvedLeadId && event.visitorEmail) {
|
|
56
|
+
try {
|
|
57
|
+
const lead: any = await LeadModel.getByEmail(event.visitorEmail, companyKey);
|
|
58
|
+
if (lead) {
|
|
59
|
+
resolvedLeadId = lead.leadId;
|
|
60
|
+
}
|
|
61
|
+
} catch (err) {
|
|
62
|
+
console.warn(`[getAppointmentsByFilter] Failed to resolve lead for ${event.visitorEmail}:`, err);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const calendarId = event.calendarId;
|
|
67
|
+
const participantId = event.participantId;
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
id: event.eventId, // UUID as per feedback
|
|
71
|
+
appointmentId: event.eventId,
|
|
72
|
+
title: event.title || "Appointment",
|
|
73
|
+
organizer: participantMap.get(participantId) || "Member",
|
|
74
|
+
guest: event.visitorName || "Guest",
|
|
75
|
+
serviceType: calendarMap.get(calendarId) || "Calendar",
|
|
76
|
+
status: event.attendeeStatus ?? 1,
|
|
77
|
+
calendarId: calendarId, // UUID
|
|
78
|
+
memberId: participantId, // UUID
|
|
79
|
+
participantId: participantId, // UUID
|
|
80
|
+
leadId: resolvedLeadId,
|
|
81
|
+
notes: event.description || "",
|
|
82
|
+
startDate: event.startDate ? moment(event.startDate).toISOString() : null,
|
|
83
|
+
endDate: event.endDate ? moment(event.endDate).toISOString() : null,
|
|
84
|
+
timeZone: event.timeZone || "Pakistan Standard Time",
|
|
85
|
+
meetingLocationType: 1,
|
|
86
|
+
customMeetingLocation: null,
|
|
87
|
+
__typename: "Appointment",
|
|
88
|
+
// Keep raw fields for potential fallback or reference
|
|
89
|
+
_raw: event
|
|
90
|
+
};
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
events: mappedEvents,
|
|
96
|
+
totalCount
|
|
97
|
+
};
|
|
98
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -9,9 +9,14 @@ export { ensureBlazeoHttpReady } from "./config/ensureBlazeoHttpReady.js";
|
|
|
9
9
|
export type { EnsureBlazeoHttpOptions } from "./config/ensureBlazeoHttpReady.js";
|
|
10
10
|
export { blazeoClientConfig } from "./config/blazeoClientDefaults.js";
|
|
11
11
|
export { applyBlazeoClientConfig } from "./config/applyBlazeoDefaults.js";
|
|
12
|
-
export {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export {
|
|
13
|
+
createCalendarRoot,
|
|
14
|
+
CalendarRootModel,
|
|
15
|
+
CalendarSlotModel,
|
|
16
|
+
EventModel as MSTEventModel,
|
|
17
|
+
ParticipantModel as MSTParticipantModel
|
|
18
|
+
} from "./models/CalendarRootModel.js";
|
|
19
|
+
export { fetchCalendarBundle, normalizeOpeningHours } from "./calendar/fetchCalendarDetails.js";
|
|
15
20
|
export {
|
|
16
21
|
buildUnifiedCalendarView,
|
|
17
22
|
type UnifiedCalendarMember,
|
|
@@ -33,35 +38,39 @@ export { addParticipantToCalendar, removeParticipantFromCalendar, saveCalendarOp
|
|
|
33
38
|
export { createAppointmentEventAsync, rescheduleAppointmentEventAsync, cancelAppointmentEventAsync } from "./events/appointmentEventFacade.js";
|
|
34
39
|
export { mapAppointmentToEventSnapshot } from "./events/mapAppointmentToEventSnapshot.js";
|
|
35
40
|
|
|
36
|
-
import { fetchCalendarDetails, fetchCalendarBundle } from "./calendar/fetchCalendarDetails.js";
|
|
37
|
-
import { fetchCalendarWithOpeningHours } from "./calendar/fetchCalendarWithOpeningHours.js";
|
|
38
41
|
import { getCalendarsByCompany } from "./calendar/getCalendarsByCompany.js";
|
|
42
|
+
import { fetchCalendarDetails } from "./calendar/fetchCalendarDetails.js";
|
|
43
|
+
import { getAppointmentsByFilter } from "./events/getAppointmentsByFilter.js";
|
|
44
|
+
export { getCalendarsByCompany, fetchCalendarDetails, getAppointmentsByFilter };
|
|
39
45
|
|
|
40
46
|
import {
|
|
41
47
|
CalendarModel as CoreCalendarModel,
|
|
42
48
|
EventModel as CoreEventModel,
|
|
43
49
|
ParticipantModel as CoreParticipantModel,
|
|
44
50
|
CalendarParticipantModel as CoreCalendarParticipantModel,
|
|
51
|
+
LeadModel as CoreLeadModel,
|
|
45
52
|
configure,
|
|
46
53
|
getConfig
|
|
47
54
|
} from "@blazeo.com/calendar-client";
|
|
48
55
|
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
// Enriched CalendarModel
|
|
57
|
+
export const CalendarModel = {
|
|
58
|
+
...CoreCalendarModel,
|
|
59
|
+
getCalendarsByCompany,
|
|
60
|
+
fetchCalendarDetails
|
|
61
|
+
};
|
|
54
62
|
|
|
55
63
|
export {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
CoreParticipantModel as CoreParticipantModel,
|
|
64
|
+
CoreEventModel as EventModel,
|
|
65
|
+
CoreParticipantModel as ParticipantModel,
|
|
59
66
|
CoreCalendarParticipantModel as CalendarParticipantModel,
|
|
67
|
+
CoreLeadModel as LeadModel,
|
|
68
|
+
CoreEventModel,
|
|
69
|
+
CoreParticipantModel,
|
|
60
70
|
configure,
|
|
61
71
|
getConfig
|
|
62
72
|
};
|
|
63
73
|
|
|
64
|
-
|
|
65
74
|
export const packageName = "@blazeo.com/appointment-client";
|
|
66
75
|
|
|
67
76
|
export class CalendarClient {
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { LeadModel } from "@blazeo.com/calendar-client";
|
|
2
|
+
import { getSnapshot, isStateTreeNode } from "mobx-state-tree";
|
|
3
|
+
import { ensureBlazeoHttpReady } from "../config/ensureBlazeoHttpReady.js";
|
|
4
|
+
|
|
5
|
+
export type BlazeoLeadConnection = {
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
consumer?: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/** Paging / sort options forwarded to `LeadModel.getByCompany` → `GET /lead/company/get`. */
|
|
11
|
+
export type LeadsByCompanyListOpts = {
|
|
12
|
+
skip?: number;
|
|
13
|
+
take?: number;
|
|
14
|
+
sortBy?: string;
|
|
15
|
+
sortOrder?: "ASC" | "DESC" | "asc" | "desc" | string;
|
|
16
|
+
sort?: string;
|
|
17
|
+
sort_column?: string;
|
|
18
|
+
sort_dir?: "asc" | "desc" | string;
|
|
19
|
+
page?: number;
|
|
20
|
+
page_size?: number;
|
|
21
|
+
searchColumn?: string;
|
|
22
|
+
search_column?: string;
|
|
23
|
+
searchText?: string;
|
|
24
|
+
search_text?: string;
|
|
25
|
+
search?: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
function leadToPlain(lead: unknown): Record<string, unknown> | null {
|
|
29
|
+
if (lead == null) return null;
|
|
30
|
+
if (isStateTreeNode(lead)) {
|
|
31
|
+
return getSnapshot(lead) as Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
if (typeof lead === "object") return lead as Record<string, unknown>;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function leadsToPlain(list: unknown[] | null): Record<string, unknown>[] {
|
|
38
|
+
if (!Array.isArray(list)) return [];
|
|
39
|
+
return list.map((x) => leadToPlain(x)).filter((x): x is Record<string, unknown> => x != null);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Lead by id: `LeadModel.getRaw` / `get` → `GET /lead/get?lead_id=…`.
|
|
44
|
+
* Returns the mapped MST snapshot when successful, plus the raw API envelope from `getRaw`.
|
|
45
|
+
*/
|
|
46
|
+
export async function fetchLeadDetails(
|
|
47
|
+
leadId: string,
|
|
48
|
+
connection: BlazeoLeadConnection = {}
|
|
49
|
+
): Promise<
|
|
50
|
+
| { ok: true; lead: Record<string, unknown> | null; rawGet: unknown }
|
|
51
|
+
| { ok: false; reason: "missing_base_url"; detail: string }
|
|
52
|
+
> {
|
|
53
|
+
const ready = ensureBlazeoHttpReady(connection);
|
|
54
|
+
if (!ready.ok) {
|
|
55
|
+
return { ok: false, reason: "missing_base_url", detail: ready.error };
|
|
56
|
+
}
|
|
57
|
+
const id = String(leadId ?? "").trim();
|
|
58
|
+
if (!id) {
|
|
59
|
+
return {
|
|
60
|
+
ok: true,
|
|
61
|
+
lead: null,
|
|
62
|
+
rawGet: { status: "failure", message: "leadId is empty" },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const rawGet = await LeadModel.getRaw(id);
|
|
66
|
+
const model = await LeadModel.get(id);
|
|
67
|
+
return { ok: true, lead: leadToPlain(model), rawGet };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Single lead by email + company: `GET /lead/getbyemail`.
|
|
72
|
+
*/
|
|
73
|
+
export async function fetchLeadByEmail(
|
|
74
|
+
email: string,
|
|
75
|
+
companyKey: string,
|
|
76
|
+
connection: BlazeoLeadConnection = {}
|
|
77
|
+
): Promise<
|
|
78
|
+
| { ok: true; lead: Record<string, unknown> | null }
|
|
79
|
+
| { ok: false; reason: "missing_base_url"; detail: string }
|
|
80
|
+
> {
|
|
81
|
+
const ready = ensureBlazeoHttpReady(connection);
|
|
82
|
+
if (!ready.ok) {
|
|
83
|
+
return { ok: false, reason: "missing_base_url", detail: ready.error };
|
|
84
|
+
}
|
|
85
|
+
const model = await LeadModel.getByEmail(String(email).trim(), String(companyKey).trim());
|
|
86
|
+
return { ok: true, lead: leadToPlain(model) };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Paged list: `LeadModel.getByCompany` → `GET /lead/company/get`.
|
|
91
|
+
*/
|
|
92
|
+
export async function fetchLeadsByCompany(
|
|
93
|
+
companyKey: string,
|
|
94
|
+
listOpts: LeadsByCompanyListOpts = {},
|
|
95
|
+
connection: BlazeoLeadConnection = {}
|
|
96
|
+
): Promise<
|
|
97
|
+
| { ok: true; leads: Record<string, unknown>[] }
|
|
98
|
+
| { ok: false; reason: "missing_base_url"; detail: string }
|
|
99
|
+
> {
|
|
100
|
+
const ready = ensureBlazeoHttpReady(connection);
|
|
101
|
+
if (!ready.ok) {
|
|
102
|
+
return { ok: false, reason: "missing_base_url", detail: ready.error };
|
|
103
|
+
}
|
|
104
|
+
const models = await LeadModel.getByCompany(String(companyKey).trim(), listOpts);
|
|
105
|
+
return { ok: true, leads: leadsToPlain(models ?? []) };
|
|
106
|
+
}
|
|
Binary file
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/** `GET /Calendar/Participant/Add` — attach `participantId` to this calendar. */
|
|
2
|
-
export declare function addParticipantToCalendar(calendar: any, participantId: string): any;
|
|
3
|
-
/** `GET /Calendar/Participant/Remove` */
|
|
4
|
-
export declare function removeParticipantFromCalendar(calendar: any, participantId: string): any;
|
|
5
|
-
/** `POST /Calendar/Participant/Availability/OpeningHour/Save` — one day/slot. */
|
|
6
|
-
export declare function saveCalendarOpeningHour(calendar: any, payload: any): any;
|
|
7
|
-
/** `POST /Calendar/Participant/Availability/OpeningHours/Save` — batch body (API-specific shape). */
|
|
8
|
-
export declare function saveCalendarOpeningHoursBatch(calendar: any, payload: any): any;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blazeoCalendarRelationMethods.d.ts","sourceRoot":"","sources":["../../src/calendar/blazeoCalendarRelationMethods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/E,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAClF,eAAe,CACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC3C,gBAAgB,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAC3C,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC5C,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,yCAAyC;AACzC,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,qGAAqG;AACrG,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAC3C,OAAO,CAAC,8BAA8B,CAAC,CAEzC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/** `GET /Calendar/Participant/Add` — attach `participantId` to this calendar. */
|
|
2
|
-
export function addParticipantToCalendar(calendar, participantId) {
|
|
3
|
-
return calendar.addParticipant(participantId);
|
|
4
|
-
}
|
|
5
|
-
/** `GET /Calendar/Participant/Remove` */
|
|
6
|
-
export function removeParticipantFromCalendar(calendar, participantId) {
|
|
7
|
-
return calendar.removeParticipant(participantId);
|
|
8
|
-
}
|
|
9
|
-
/** `POST /Calendar/Participant/Availability/OpeningHour/Save` — one day/slot. */
|
|
10
|
-
export function saveCalendarOpeningHour(calendar, payload) {
|
|
11
|
-
return calendar.saveOpeningHour(payload);
|
|
12
|
-
}
|
|
13
|
-
/** `POST /Calendar/Participant/Availability/OpeningHours/Save` — batch body (API-specific shape). */
|
|
14
|
-
export function saveCalendarOpeningHoursBatch(calendar, payload) {
|
|
15
|
-
return calendar.saveOpeningHours(payload);
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blazeoCalendarRelationMethods.js","sourceRoot":"","sources":["../../src/calendar/blazeoCalendarRelationMethods.ts"],"names":[],"mappings":"AAsCA,iFAAiF;AACjF,MAAM,UAAU,wBAAwB,CACtC,QAAoC,EACpC,aAAqB;IAErB,OAAO,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAChD,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,6BAA6B,CAC3C,QAAoC,EACpC,aAAqB;IAErB,OAAO,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CACrC,QAAoC,EACpC,OAAgC;IAEhC,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,6BAA6B,CAC3C,QAAoC,EACpC,OAA4C;IAE5C,OAAO,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export interface UnifiedCalendarMember {
|
|
2
|
-
id: number | string;
|
|
3
|
-
name: string;
|
|
4
|
-
email: string | null;
|
|
5
|
-
/** When API exposes status; otherwise derived from participant info flags. */
|
|
6
|
-
status: number | null;
|
|
7
|
-
/** Full row from Participants/GetInfo (plain object). */
|
|
8
|
-
participantInfo?: Record<string, unknown> | null;
|
|
9
|
-
__typename?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface UnifiedParticipantWithHours extends UnifiedCalendarMember {
|
|
12
|
-
openingHours: UnifiedOpeningHourRow[];
|
|
13
|
-
}
|
|
14
|
-
export interface UnifiedOpeningHourRow {
|
|
15
|
-
id?: number | string;
|
|
16
|
-
createdOn?: string;
|
|
17
|
-
modifiedOn?: string;
|
|
18
|
-
member: number | string;
|
|
19
|
-
openingHourId?: string;
|
|
20
|
-
calendarId?: string;
|
|
21
|
-
participantId?: string;
|
|
22
|
-
days: string[];
|
|
23
|
-
startHour: number;
|
|
24
|
-
startMinute: number;
|
|
25
|
-
endHour: number;
|
|
26
|
-
endMinute: number;
|
|
27
|
-
off: boolean;
|
|
28
|
-
__typename?: string;
|
|
29
|
-
}
|
|
30
|
-
export type UnifiedCalendarView = Record<string, unknown> & {
|
|
31
|
-
members: UnifiedCalendarMember[];
|
|
32
|
-
openingHours: UnifiedOpeningHourRow[];
|
|
33
|
-
participants?: UnifiedParticipantWithHours[];
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Build a consumer-friendly `{ id, name, members, openingHours }` shape where
|
|
37
|
-
* `openingHours[].member` references `members[].id`.
|
|
38
|
-
*/
|
|
39
|
-
export declare function buildUnifiedCalendarView(calendarSnapshot: Record<string, any> | null, openingHoursRows: any[], participants: any[] | null | undefined, participantsInfo: any[] | null | undefined): UnifiedCalendarView | null;
|