placementt-core 1.400.751 → 1.400.752

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.
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sharedOpportunitiesForSchoolSection = exports.employerDatabaseSummarySection = exports.sharedOpportunitiesSection = exports.attendingEventsSection = exports.upcomingEventsSection = void 0;
6
+ exports.sharedOpportunitiesForSchoolSection = exports.employerDatabaseSummarySection = exports.sharedOpportunitiesSection = exports.attendingEventsSection = exports.upcomingEventsSection = exports.emailCampaignSectionDataFetcher = void 0;
7
+ const firestore_1 = require("firebase/firestore");
8
+ const firebaseQuery_1 = __importDefault(require("./firebase/firebaseQuery"));
9
+ const util_1 = require("./firebase/util");
4
10
  const PRIMARY_COLOUR = "#397DF2";
5
11
  function activityTypeLabel(type) {
6
12
  const labels = {
@@ -16,15 +22,98 @@ function sectionStyles(color) {
16
22
  return {
17
23
  container: `margin: 16px 0; font-family: nunito, sans-serif;`,
18
24
  title: `font-size: 16px; font-weight: bold; color: #333; margin: 0 0 8px 0; font-family: nunito, sans-serif;`,
19
- table: `width: 100%; border-collapse: collapse; margin: 8px 0; font-family: nunito, sans-serif; font-size: 13px;`,
20
- th: `background-color: ${color}; color: white; text-align: left; padding: 8px 12px; font-family: nunito, sans-serif; font-size: 13px;`,
21
- td: `padding: 8px 12px; border-bottom: 1px solid #f0f0f0; font-family: nunito, sans-serif; font-size: 13px; color: #333;`,
22
- tdAlt: `padding: 8px 12px; border-bottom: 1px solid #f0f0f0; background-color: #fafafa; font-family: nunito, sans-serif; font-size: 13px; color: #333;`,
23
25
  footer: `font-size: 12px; color: #666; margin: 8px 0 0 0; font-family: nunito, sans-serif;`,
24
26
  link: `color: ${color}; text-decoration: none;`,
25
27
  emptyText: `font-family: nunito, sans-serif; color: #666; font-size: 13px; margin: 4px 0;`,
26
28
  };
27
29
  }
30
+ const emailCampaignSectionDataFetcher = async (sectionName, data) => {
31
+ const firebaseQuery = new firebaseQuery_1.default();
32
+ const oId = data.oId;
33
+ const primaryColor = data.primaryColor;
34
+ const today = (0, util_1.convertDate)(new Date(), "dbstring");
35
+ switch (sectionName) {
36
+ case "upcomingEventsSection": {
37
+ const eventsRaw = await firebaseQuery.getDocsWhere(["externalEvents"], [(0, firestore_1.where)("oId", "==", oId), (0, firestore_1.where)("startDate", ">=", today)]);
38
+ const events = Object.entries(eventsRaw).map(([id, e]) => ({
39
+ id,
40
+ title: e.name,
41
+ description: e.description,
42
+ startDate: (0, util_1.convertDate)(e.startDate, "visual") || e.startDate || "",
43
+ endDate: e.endDate ? (0, util_1.convertDate)(e.endDate, "visual") : undefined,
44
+ activityType: e.activityType || e.activityId || "other",
45
+ location: e.locality,
46
+ image: e.image,
47
+ }));
48
+ return exports.upcomingEventsSection.render({ placeholder: false, events: events, oId, primaryColor });
49
+ }
50
+ case "attendingEventsSection": {
51
+ const providerContactId = data.providerContactId;
52
+ const attendeesRaw = await firebaseQuery.getDocsWhere(["externalEventAttendees"], [(0, firestore_1.where)("providerContactId", "==", providerContactId), (0, firestore_1.where)("oId", "==", oId)]);
53
+ const events = (await Promise.all(Object.values(attendeesRaw).map(async (attendee) => {
54
+ const event = await firebaseQuery.getDocData(["externalEvents", attendee.eventId]);
55
+ if (!(event === null || event === void 0 ? void 0 : event.startDate) || (event.endDate && event.endDate < today))
56
+ return null;
57
+ return {
58
+ title: event.name,
59
+ description: event.description,
60
+ startDate: (0, util_1.convertDate)(event.startDate, "visual") || event.startDate,
61
+ endDate: event.endDate ? (0, util_1.convertDate)(event.endDate, "visual") : undefined,
62
+ activityType: event.activityType || event.activityId || "other",
63
+ location: event.locality,
64
+ };
65
+ }))).filter(Boolean);
66
+ return exports.attendingEventsSection.render({ placeholder: false, events: events, primaryColor });
67
+ }
68
+ case "sharedOpportunitiesSection": {
69
+ const providerContactId = data.providerContactId;
70
+ const oppsRaw = await firebaseQuery.getDocsWhere(["externalEventRequests"], [(0, firestore_1.where)("providerContactId", "==", providerContactId)]);
71
+ const opportunities = Object.entries(oppsRaw).map(([id, r]) => ({
72
+ id,
73
+ title: r.title || "",
74
+ description: r.description,
75
+ type: r.activityType,
76
+ created: r.created,
77
+ }));
78
+ return exports.sharedOpportunitiesSection.render({ placeholder: false, opportunities: opportunities, oId, primaryColor });
79
+ }
80
+ case "employerDatabaseSummarySection": {
81
+ const contactsRaw = await firebaseQuery.getDocsWhere(["providerContacts"], [(0, firestore_1.where)(`savedBy.${oId}.exists`, "==", true)]);
82
+ const contacts = Object.values(contactsRaw);
83
+ const sectors = new Set(contacts.map((c) => c.sector).filter(Boolean));
84
+ const consentedActivities = {};
85
+ contacts.forEach((c) => {
86
+ var _a;
87
+ const saved = (_a = c.savedBy) === null || _a === void 0 ? void 0 : _a[oId];
88
+ if (saved === null || saved === void 0 ? void 0 : saved.activities) {
89
+ saved.activities.forEach((activity) => {
90
+ consentedActivities[activity] = (consentedActivities[activity] || 0) + 1;
91
+ });
92
+ }
93
+ });
94
+ const stats = {
95
+ totalContacts: contacts.length,
96
+ sectors: sectors.size,
97
+ consentedActivities,
98
+ };
99
+ return exports.employerDatabaseSummarySection.render({ placeholder: false, stats, primaryColor });
100
+ }
101
+ case "sharedOpportunitiesForSchoolSection": {
102
+ const oppsRaw = await firebaseQuery.getDocsWhere(["externalEventRequests"], [(0, firestore_1.where)("schools", "array-contains", oId)]);
103
+ const opportunities = Object.entries(oppsRaw).map(([id, r]) => ({
104
+ id,
105
+ title: r.title || "",
106
+ description: r.description,
107
+ type: r.activityType,
108
+ created: r.created,
109
+ }));
110
+ return exports.sharedOpportunitiesForSchoolSection.render({ placeholder: false, opportunities: opportunities, primaryColor });
111
+ }
112
+ default:
113
+ return "";
114
+ }
115
+ };
116
+ exports.emailCampaignSectionDataFetcher = emailCampaignSectionDataFetcher;
28
117
  exports.upcomingEventsSection = {
29
118
  id: "upcomingEvents",
30
119
  title: "Upcoming Events",
@@ -34,10 +123,11 @@ exports.upcomingEventsSection = {
34
123
  render: ({ placeholder, events, oId, primaryColor: pc }) => {
35
124
  const color = pc || PRIMARY_COLOUR;
36
125
  const s = sectionStyles(color);
126
+ const eventOId = oId;
37
127
  const displayEvents = placeholder ? [
38
- { title: "Mock Interviews Day", startDate: "15 May 2025", activityType: "mockInterviews", location: "School Main Hall" },
39
- { title: "Annual Careers Fair", startDate: "22 May 2025", endDate: "23 May 2025", activityType: "workExperience", location: "Town Hall" },
40
- { title: "Mentoring Programme", startDate: "5 June 2025", activityType: "mentoring" },
128
+ { title: "Mock Interviews Day", startDate: "15 May 2025", activityType: "mockInterviews", location: "School Main Hall", description: "Join us for a day of mock interview practice with our Year 11 students." },
129
+ { title: "Annual Careers Fair", startDate: "22 May 2025", endDate: "23 May 2025", activityType: "workExperience", location: "Town Hall", description: "A two-day careers fair featuring employers from across the region." },
130
+ { title: "Mentoring Programme", startDate: "5 June 2025", activityType: "mentoring", description: "Support students with one-to-one mentoring sessions over the summer term." },
41
131
  { title: "Workplace Visit Day", startDate: "12 June 2025", activityType: "workplaceVisits", location: "City Centre" },
42
132
  ] : (events || []);
43
133
  if (!displayEvents.length)
@@ -59,16 +149,19 @@ exports.upcomingEventsSection = {
59
149
  const dateStr = event.endDate && event.endDate !== event.startDate
60
150
  ? `${event.startDate} – ${event.endDate}`
61
151
  : event.startDate;
62
- const eventLink = oId ? `https://careerthread.co.uk/publicEvents/${oId}` : "#";
152
+ const eventLink = eventOId ? `https://careerthread.co.uk/publicEvents/${eventOId}` : "#";
63
153
  const imgStyle = event.image
64
- ? `height:140px;background-image:url('${event.image}');background-size:cover;background-position:center;`
65
- : `height:140px;background-color:${bgColor};`;
154
+ ? `height:120px;background-image:url('${event.image}');background-size:cover;background-position:center;`
155
+ : `height:120px;background-color:${bgColor};`;
66
156
  return `
67
157
  <div style="border-radius:12px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,0.12);background:#ffffff;">
68
158
  <div style="${imgStyle}"></div>
69
159
  <div style="padding:12px 14px 14px;">
160
+ <p style="font-size:11px;font-weight:bold;color:${color};text-transform:uppercase;letter-spacing:0.5px;margin:0 0 4px 0;font-family:nunito,sans-serif;">${activityTypeLabel(event.activityType)}</p>
70
161
  <p style="font-weight:bold;font-size:14px;margin:0 0 3px 0;font-family:nunito,sans-serif;color:#333;line-height:1.3;">${event.title}</p>
71
- <p style="font-size:12px;color:#888;margin:0 0 12px 0;font-family:nunito,sans-serif;">${dateStr}</p>
162
+ <p style="font-size:12px;color:#888;margin:0 0 4px 0;font-family:nunito,sans-serif;">${dateStr}</p>
163
+ ${event.location ? `<p style="font-size:12px;color:#888;margin:0 0 4px 0;font-family:nunito,sans-serif;">${event.location}</p>` : ""}
164
+ ${event.description ? `<p style="font-size:12px;color:#666;margin:0 0 10px 0;font-family:nunito,sans-serif;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;">${event.description}</p>` : `<div style="margin-bottom:10px;"></div>`}
72
165
  <a href="${eventLink}" style="display:block;background-color:${color};color:#ffffff;text-align:center;padding:9px 12px;border-radius:6px;text-decoration:none;font-size:13px;font-family:nunito,sans-serif;font-weight:bold;">View Event</a>
73
166
  </div>
74
167
  </div>`;
@@ -93,7 +186,7 @@ exports.upcomingEventsSection = {
93
186
  <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
94
187
  ${cardRows.join("")}
95
188
  </table>
96
- ${oId ? `<p style="${s.footer}"><a href="https://careerthread.co.uk/publicEvents/${oId}" style="${s.link}">View all events and sign up →</a></p>` : ""}
189
+ ${eventOId ? `<p style="${s.footer}"><a href="https://careerthread.co.uk/publicEvents/${eventOId}" style="${s.link}">View all events and sign up →</a></p>` : ""}
97
190
  </div>`;
98
191
  },
99
192
  };
@@ -107,8 +200,8 @@ exports.attendingEventsSection = {
107
200
  const color = pc || PRIMARY_COLOUR;
108
201
  const s = sectionStyles(color);
109
202
  const displayEvents = placeholder ? [
110
- { title: "Mock Interviews Day", startDate: "15 May 2025", activityType: "mockInterviews" },
111
- { title: "Annual Careers Fair", startDate: "22 May 2025", activityType: "workExperience" },
203
+ { title: "Mock Interviews Day", startDate: "15 May 2025", activityType: "mockInterviews", description: "Join us for a day of mock interview practice with our Year 11 students." },
204
+ { title: "Annual Careers Fair", startDate: "22 May 2025", activityType: "workExperience", description: "A two-day careers fair featuring employers from across the region." },
112
205
  ] : (events || []);
113
206
  if (!placeholder && !displayEvents.length) {
114
207
  return `
@@ -117,24 +210,38 @@ exports.attendingEventsSection = {
117
210
  <p style="${s.emptyText}">You are not currently signed up to any upcoming events. We would love to have you involved!</p>
118
211
  </div>`;
119
212
  }
120
- const rows = displayEvents.map((event, i) => `
121
- <tr>
122
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}"><strong>${event.title}</strong></td>
123
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${event.startDate}</td>
124
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${activityTypeLabel(event.activityType)}</td>
125
- </tr>`).join("");
213
+ const makeCard = (event) => {
214
+ const dateStr = event.endDate && event.endDate !== event.startDate
215
+ ? `${event.startDate} ${event.endDate}`
216
+ : event.startDate;
217
+ return `
218
+ <div style="border-radius:12px;box-shadow:0 2px 10px rgba(0,0,0,0.12);background:#ffffff;padding:16px;">
219
+ <p style="font-size:11px;font-weight:bold;color:${color};text-transform:uppercase;letter-spacing:0.5px;margin:0 0 6px 0;font-family:nunito,sans-serif;">${activityTypeLabel(event.activityType)}</p>
220
+ <p style="font-weight:bold;font-size:14px;margin:0 0 4px 0;font-family:nunito,sans-serif;color:#333;line-height:1.3;">${event.title}</p>
221
+ <p style="font-size:12px;color:#888;margin:0 0 4px 0;font-family:nunito,sans-serif;">${dateStr}</p>
222
+ ${event.location ? `<p style="font-size:12px;color:#888;margin:0 0 4px 0;font-family:nunito,sans-serif;">${event.location}</p>` : ""}
223
+ ${event.description ? `<p style="font-size:12px;color:#666;margin:0;font-family:nunito,sans-serif;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;">${event.description}</p>` : ""}
224
+ </div>`;
225
+ };
226
+ const cardRows = [];
227
+ for (let i = 0; i < displayEvents.length; i += 2) {
228
+ const second = displayEvents[i + 1];
229
+ cardRows.push(`
230
+ <tr>
231
+ <td class="att-col" style="width:50%;vertical-align:top;padding:0 6px 16px 0;">
232
+ ${makeCard(displayEvents[i])}
233
+ </td>
234
+ <td class="att-col" style="width:50%;vertical-align:top;padding:0 0 16px 6px;">
235
+ ${second ? makeCard(second) : ""}
236
+ </td>
237
+ </tr>`);
238
+ }
126
239
  return `
127
240
  <div style="${s.container}">
241
+ <style>@media(max-width:600px){.att-col{width:100%!important;display:block!important;padding:0 0 12px 0!important;}}</style>
128
242
  <p style="${s.title}">Your Upcoming Events</p>
129
- <table style="${s.table}">
130
- <thead>
131
- <tr>
132
- <th style="${s.th}">Event</th>
133
- <th style="${s.th}">Date</th>
134
- <th style="${s.th}">Type</th>
135
- </tr>
136
- </thead>
137
- <tbody>${rows}</tbody>
243
+ <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
244
+ ${cardRows.join("")}
138
245
  </table>
139
246
  </div>`;
140
247
  },
@@ -148,6 +255,7 @@ exports.sharedOpportunitiesSection = {
148
255
  render: ({ placeholder, opportunities, oId, primaryColor: pc }) => {
149
256
  const color = pc || PRIMARY_COLOUR;
150
257
  const s = sectionStyles(color);
258
+ const eventOId = oId;
151
259
  const displayOps = placeholder ? [
152
260
  { title: "Mock Interview Sessions", description: "Offering 10 mock interview slots for Year 11 students", type: "mockInterviews" },
153
261
  { title: "Workplace Visit", description: "Office tour for up to 30 students", type: "workplaceVisits" },
@@ -158,14 +266,14 @@ exports.sharedOpportunitiesSection = {
158
266
  <div style="${s.container}">
159
267
  <p style="${s.title}">Share an Opportunity</p>
160
268
  <p style="${s.emptyText}">We would love to hear from you! You can share work experience placements, mock interview sessions, workplace visits, and more with our students.</p>
161
- ${oId ? `<p style="font-family:nunito,sans-serif;margin:12px 0 0 0;"><a href="https://careerthread.co.uk/requestEvent/${oId}" style="background-color:${color};color:white;padding:8px 16px;border-radius:20px;text-decoration:none;font-size:14px;font-family:nunito,sans-serif;">Submit an Opportunity</a></p>` : ""}
269
+ ${eventOId ? `<p style="font-family:nunito,sans-serif;margin:12px 0 0 0;"><a href="https://careerthread.co.uk/requestEvent/${eventOId}" style="background-color:${color};color:white;padding:8px 16px;border-radius:20px;text-decoration:none;font-size:14px;font-family:nunito,sans-serif;">Submit an Opportunity</a></p>` : ""}
162
270
  </div>`;
163
271
  }
164
272
  const makeCard = (op) => `
165
273
  <div style="border-radius:12px;box-shadow:0 2px 10px rgba(0,0,0,0.12);background:#ffffff;padding:16px;">
166
274
  <p style="font-size:11px;font-weight:bold;color:${color};text-transform:uppercase;letter-spacing:0.5px;margin:0 0 6px 0;font-family:nunito,sans-serif;">${op.type ? activityTypeLabel(op.type) : "Opportunity"}</p>
167
275
  <p style="font-weight:bold;font-size:14px;margin:0 0 6px 0;font-family:nunito,sans-serif;color:#333;line-height:1.3;">${op.title}</p>
168
- <p style="font-size:12px;color:#888;margin:0;font-family:nunito,sans-serif;line-height:1.5;">${op.description || ""}</p>
276
+ ${op.description ? `<p style="font-size:12px;color:#888;margin:0;font-family:nunito,sans-serif;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;">${op.description}</p>` : ""}
169
277
  </div>`;
170
278
  const cardRows = [];
171
279
  for (let i = 0; i < displayOps.length; i += 2) {
@@ -188,7 +296,7 @@ exports.sharedOpportunitiesSection = {
188
296
  <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
189
297
  ${cardRows.join("")}
190
298
  </table>
191
- ${oId ? `<p style="${s.footer}"><a href="https://careerthread.co.uk/requestEvent/${oId}" style="${s.link}">Submit another opportunity →</a></p>` : ""}
299
+ ${eventOId ? `<p style="${s.footer}"><a href="https://careerthread.co.uk/requestEvent/${eventOId}" style="${s.link}">Submit another opportunity →</a></p>` : ""}
192
300
  </div>`;
193
301
  },
194
302
  };
@@ -218,37 +326,52 @@ exports.employerDatabaseSummarySection = {
218
326
  mentoring: "Mentoring",
219
327
  other: "Other",
220
328
  };
221
- const consentRows = Object.entries(displayStats.consentedActivities).map(([activity, count], i) => `
222
- <tr>
223
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${activityLabels[activity] || activity}</td>
224
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${count} employer${count !== 1 ? "s" : ""}</td>
225
- </tr>`).join("");
329
+ const activityEntries = Object.entries(displayStats.consentedActivities);
330
+ const activityCardRows = [];
331
+ for (let i = 0; i < activityEntries.length; i += 2) {
332
+ const [actA, countA] = activityEntries[i];
333
+ const second = activityEntries[i + 1];
334
+ activityCardRows.push(`
335
+ <tr>
336
+ <td class="act-col" style="width:50%;vertical-align:top;padding:0 6px 12px 0;">
337
+ <div style="border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.10);background:#ffffff;padding:14px 16px;text-align:center;">
338
+ <div style="font-size:22px;font-weight:bold;color:${color};font-family:nunito,sans-serif;">${countA}</div>
339
+ <div style="font-size:12px;color:#555;font-family:nunito,sans-serif;margin-top:4px;">${activityLabels[actA] || actA}</div>
340
+ </div>
341
+ </td>
342
+ <td class="act-col" style="width:50%;vertical-align:top;padding:0 0 12px 6px;">
343
+ ${second ? `
344
+ <div style="border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.10);background:#ffffff;padding:14px 16px;text-align:center;">
345
+ <div style="font-size:22px;font-weight:bold;color:${color};font-family:nunito,sans-serif;">${second[1]}</div>
346
+ <div style="font-size:12px;color:#555;font-family:nunito,sans-serif;margin-top:4px;">${activityLabels[second[0]] || second[0]}</div>
347
+ </div>` : ""}
348
+ </td>
349
+ </tr>`);
350
+ }
226
351
  return `
227
352
  <div style="${s.container}">
353
+ <style>@media(max-width:600px){.act-col{width:100%!important;display:block!important;padding:0 0 8px 0!important;}}</style>
228
354
  <p style="${s.title}">Your Employer Database</p>
229
- <table style="width: 100%; border-collapse: collapse; margin: 8px 0;">
355
+ <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;margin:8px 0;">
230
356
  <tr>
231
- <td style="padding: 16px; background-color: ${color}; color: white; text-align: center; border-radius: 4px; width: 48%;">
232
- <div style="font-size: 28px; font-weight: bold; font-family: nunito, sans-serif;">${displayStats.totalContacts}</div>
233
- <div style="font-size: 12px; font-family: nunito, sans-serif; opacity: 0.9; margin-top: 4px;">Total Contacts</div>
357
+ <td class="act-col" style="width:50%;vertical-align:top;padding:0 6px 12px 0;">
358
+ <div style="padding:16px;background-color:${color};color:white;text-align:center;border-radius:10px;">
359
+ <div style="font-size:28px;font-weight:bold;font-family:nunito,sans-serif;">${displayStats.totalContacts}</div>
360
+ <div style="font-size:12px;font-family:nunito,sans-serif;opacity:0.9;margin-top:4px;">Total Contacts</div>
361
+ </div>
234
362
  </td>
235
- <td style="width: 4%;"></td>
236
- <td style="padding: 16px; background-color: ${color}; color: white; text-align: center; border-radius: 4px; width: 48%;">
237
- <div style="font-size: 28px; font-weight: bold; font-family: nunito, sans-serif;">${displayStats.sectors}</div>
238
- <div style="font-size: 12px; font-family: nunito, sans-serif; opacity: 0.9; margin-top: 4px;">Sectors Represented</div>
363
+ <td class="act-col" style="width:50%;vertical-align:top;padding:0 0 12px 6px;">
364
+ <div style="padding:16px;background-color:${color};color:white;text-align:center;border-radius:10px;">
365
+ <div style="font-size:28px;font-weight:bold;font-family:nunito,sans-serif;">${displayStats.sectors}</div>
366
+ <div style="font-size:12px;font-family:nunito,sans-serif;opacity:0.9;margin-top:4px;">Sectors Represented</div>
367
+ </div>
239
368
  </td>
240
369
  </tr>
241
370
  </table>
242
- ${consentRows ? `
243
- <p style="font-size: 14px; font-weight: bold; font-family: nunito, sans-serif; margin: 16px 0 4px 0; color: #333;">Consented to Activities</p>
244
- <table style="${s.table}">
245
- <thead>
246
- <tr>
247
- <th style="${s.th}">Activity</th>
248
- <th style="${s.th}">Consented Employers</th>
249
- </tr>
250
- </thead>
251
- <tbody>${consentRows}</tbody>
371
+ ${activityCardRows.length ? `
372
+ <p style="font-size:14px;font-weight:bold;font-family:nunito,sans-serif;margin:8px 0 4px 0;color:#333;">Consented to Activities</p>
373
+ <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
374
+ ${activityCardRows.join("")}
252
375
  </table>` : ""}
253
376
  </div>`;
254
377
  },
@@ -256,16 +379,16 @@ exports.employerDatabaseSummarySection = {
256
379
  exports.sharedOpportunitiesForSchoolSection = {
257
380
  id: "sharedOpportunitiesForSchool",
258
381
  title: "Opportunities Shared With Your School",
259
- description: "A table of all employer opportunities that have been shared with this school.",
382
+ description: "A grid of employer opportunities that have been shared with this school.",
260
383
  emailInput: [{ type: "heading-one", children: [{ text: "Employer Opportunities" }] }, { type: "paragraph", children: [{ text: "See below the opportunities that employers have shared with your students. Click on an opportunity to see more." }] }],
261
384
  forTemplates: ["schoolsEmailCampaign"],
262
385
  render: ({ placeholder, opportunities, primaryColor: pc }) => {
263
386
  const color = pc || PRIMARY_COLOUR;
264
387
  const s = sectionStyles(color);
265
388
  const displayOps = placeholder ? [
266
- { title: "Mock Interview Day", description: "Financial services firm offering interview practice", type: "mockInterviews" },
267
- { title: "Finance Workplace Visit", description: "Tour of a London bank for up to 25 students", type: "workplaceVisits" },
268
- { title: "Year 10 Work Experience", description: "1-week placement at a local engineering firm", type: "workExperience" },
389
+ { title: "Mock Interview Day", description: "Financial services firm offering interview practice for Year 11 students ahead of their GCSEs.", type: "mockInterviews" },
390
+ { title: "Finance Workplace Visit", description: "Tour of a London bank for up to 25 students, with Q&A from senior staff.", type: "workplaceVisits" },
391
+ { title: "Year 10 Work Experience", description: "1-week placement at a local engineering firm working alongside qualified engineers.", type: "workExperience" },
269
392
  ] : (opportunities || []);
270
393
  if (!placeholder && !displayOps.length) {
271
394
  return `
@@ -274,24 +397,31 @@ exports.sharedOpportunitiesForSchoolSection = {
274
397
  <p style="${s.emptyText}">No opportunities have been shared with your school yet.</p>
275
398
  </div>`;
276
399
  }
277
- const rows = displayOps.map((op, i) => `
278
- <tr>
279
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}"><strong>${op.title}</strong></td>
280
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${op.description || ""}</td>
281
- <td style="${i % 2 === 1 ? s.tdAlt : s.td}">${op.type ? activityTypeLabel(op.type) : ""}</td>
282
- </tr>`).join("");
400
+ const makeCard = (op) => `
401
+ <div style="border-radius:12px;box-shadow:0 2px 10px rgba(0,0,0,0.12);background:#ffffff;padding:16px;">
402
+ <p style="font-size:11px;font-weight:bold;color:${color};text-transform:uppercase;letter-spacing:0.5px;margin:0 0 6px 0;font-family:nunito,sans-serif;">${op.type ? activityTypeLabel(op.type) : "Opportunity"}</p>
403
+ <p style="font-weight:bold;font-size:14px;margin:0 0 6px 0;font-family:nunito,sans-serif;color:#333;line-height:1.3;">${op.title}</p>
404
+ ${op.description ? `<p style="font-size:12px;color:#888;margin:0;font-family:nunito,sans-serif;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;">${op.description}</p>` : ""}
405
+ </div>`;
406
+ const cardRows = [];
407
+ for (let i = 0; i < displayOps.length; i += 2) {
408
+ const second = displayOps[i + 1];
409
+ cardRows.push(`
410
+ <tr>
411
+ <td class="sch-opp-col" style="width:50%;vertical-align:top;padding:0 6px 16px 0;">
412
+ ${makeCard(displayOps[i])}
413
+ </td>
414
+ <td class="sch-opp-col" style="width:50%;vertical-align:top;padding:0 0 16px 6px;">
415
+ ${second ? makeCard(second) : ""}
416
+ </td>
417
+ </tr>`);
418
+ }
283
419
  return `
284
420
  <div style="${s.container}">
421
+ <style>@media(max-width:600px){.sch-opp-col{width:100%!important;display:block!important;padding:0 0 12px 0!important;}}</style>
285
422
  <p style="${s.title}">Opportunities Shared With Your School</p>
286
- <table style="${s.table}">
287
- <thead>
288
- <tr>
289
- <th style="${s.th}">Opportunity</th>
290
- <th style="${s.th}">Description</th>
291
- <th style="${s.th}">Type</th>
292
- </tr>
293
- </thead>
294
- <tbody>${rows}</tbody>
423
+ <table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
424
+ ${cardRows.join("")}
295
425
  </table>
296
426
  </div>`;
297
427
  },
@@ -1 +1 @@
1
- {"version":3,"file":"emailSections.js","sourceRoot":"","sources":["../src/emailSections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emailSections.js","sourceRoot":"","sources":["../src/emailSections.ts"],"names":[],"mappings":"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"}
@@ -755,6 +755,7 @@ export type InstituteData = {
755
755
  publicEventPage?: boolean;
756
756
  discount?: string;
757
757
  package: string;
758
+ marketingEmails: string[];
758
759
  careersHubLinks?: {
759
760
  [oId: string]: {
760
761
  exists: boolean;
@@ -1347,6 +1348,7 @@ export type EmailSectionConfig = {
1347
1348
  forTemplates: string[];
1348
1349
  render: (props: EmailSectionRenderProps) => string;
1349
1350
  };
1351
+ export type EmailSectionNames = "upcomingEventsSection" | "attendingEventsSection" | "sharedOpportunitiesSection" | "employerDatabaseSummarySection" | "sharedOpportunitiesForSchoolSection";
1350
1352
  export type EmailTemplateConfig = {
1351
1353
  description: string;
1352
1354
  params: string[];
@@ -1363,7 +1365,7 @@ export type EmailTemplateConfig = {
1363
1365
  link: string;
1364
1366
  }[];
1365
1367
  type: "workflow" | "feedback" | "event" | "campaign" | "database";
1366
- sections?: EmailSectionConfig[];
1368
+ sections?: EmailSectionNames[];
1367
1369
  };
1368
1370
  export type EmailCampaign = {
1369
1371
  id: string;
package/lib/util.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { WhereFilterOp } from "firebase/firestore";
2
- import { AlumniConversation, DataViewerSelectionBackend, DataViewerSelectionWeb, EmailTemplateConfig, ExternalEvent, ExternalEventAttendee, ExternalEventCareersSchool, ExternalEventStudent, FlagCodes, InstituteData, ProviderContactData, StudentPlacementData, UserData, WorkflowStage, YearScoreData } from "./typeDefinitions";
2
+ import { AlumniConversation, DataViewerSelectionBackend, DataViewerSelectionWeb, EmailSectionNames, EmailTemplateConfig, ExternalEvent, ExternalEventAttendee, ExternalEventCareersSchool, ExternalEventStudent, FlagCodes, InstituteData, ProviderContactData, StudentPlacementData, UserData, WorkflowStage, YearScoreData } from "./typeDefinitions";
3
3
  import { Descendant } from "slate";
4
4
  type PlacementFlagCodeParams = {
5
5
  placement: StudentPlacementData;
@@ -25,7 +25,7 @@ export declare const getMostRecentAlumniMessage: (conversation: AlumniConversati
25
25
  delivered: "blocked" | "pending" | true;
26
26
  id: string;
27
27
  } | null;
28
- export declare function buildEmailHTML({ preheader, title, salutation, body, primaryColor, primaryButton, secondaryButton, primaryImage, designatedStaffEmail, organisationName, params, data, sectionData }: {
28
+ export declare function buildEmailHTML({ preheader, title, salutation, body, primaryColor, primaryButton, secondaryButton, primaryImage, designatedStaffEmail, organisationName, params, data, sectionData, emailSectionRenderer }: {
29
29
  preheader: string;
30
30
  title: string;
31
31
  salutation?: string;
@@ -51,7 +51,10 @@ export declare function buildEmailHTML({ preheader, title, salutation, body, pri
51
51
  [key: string]: unknown;
52
52
  };
53
53
  };
54
- }): string;
54
+ emailSectionRenderer?: (sectionName: EmailSectionNames, data: {
55
+ [key: string]: unknown;
56
+ }) => Promise<string>;
57
+ }): Promise<string>;
55
58
  export declare const getWeightsForOES: (years: number) => {
56
59
  weights: number[];
57
60
  sum: number;
package/lib/util.js CHANGED
@@ -178,7 +178,7 @@ const getMostRecentAlumniMessage = (conversation) => {
178
178
  return mostRecent || null; // Return most recent or null if none found
179
179
  };
180
180
  exports.getMostRecentAlumniMessage = getMostRecentAlumniMessage;
181
- function buildEmailHTML({ preheader, title, salutation, body, primaryColor = constants_1.PRIMARY_COLOUR, primaryButton, secondaryButton, primaryImage = "https://firebasestorage.googleapis.com/v0/b/placementt-dfa17.appspot.com/o/public%2FCareerThreadLogoForEmail.png?alt=media&token=046b5555-cd79-4fc9-bc89-90395e3fa351v", designatedStaffEmail, organisationName, params, data, sectionData }) {
181
+ async function buildEmailHTML({ preheader, title, salutation, body, primaryColor = constants_1.PRIMARY_COLOUR, primaryButton, secondaryButton, primaryImage = "https://firebasestorage.googleapis.com/v0/b/placementt-dfa17.appspot.com/o/public%2FCareerThreadLogoForEmail.png?alt=media&token=046b5555-cd79-4fc9-bc89-90395e3fa351v", designatedStaffEmail, organisationName, params, data, sectionData, emailSectionRenderer }) {
182
182
  const serialiseSlate = (nodes) => {
183
183
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
184
184
  return nodes.map((n) => {
@@ -222,7 +222,7 @@ function buildEmailHTML({ preheader, title, salutation, body, primaryColor = con
222
222
  };
223
223
  const makeButtonHTML = (url, title, color) => `<div style="text-align:center;padding:20px 0;"><a href="${url}" style="background-color:${color};border:1px solid #ffffff;border-radius:30px;color:#ffffff;display:inline-block;font-size:16px;font-weight:normal;padding:12px 40px;text-align:center;text-decoration:none;font-family:nunito,sans-serif;">${title}</a><div style="font-family:inherit;text-align:center;font-size:12px;color:#666;margin-top:4px;">Or go to <a href="${url}" style="color:#666;">${url}</a></div></div>`;
224
224
  const makeSecondaryButtonHTML = (url, title) => `<div style="text-align:center;padding:10px 0;"><a href="${url}" style="display:inline-block;font-weight:normal;color:#aeaeae;text-decoration:none;font-family:nunito,sans-serif;">${title}</a></div>`;
225
- const getEmailContentFromTemplate = (template, params, data) => {
225
+ const getEmailContentFromTemplate = async (template, params, data) => {
226
226
  let finalBody = typeof template === "string" ? template : serialiseSlate(template);
227
227
  const allParams = [...params.params, ...Object.keys(data)];
228
228
  // Replace data params
@@ -261,18 +261,23 @@ function buildEmailHTML({ preheader, title, salutation, body, primaryColor = con
261
261
  });
262
262
  // Resolve sections
263
263
  if (params.sections) {
264
- const resolveSection = (sectionId) => {
265
- const section = params.sections.find((s) => s.id === sectionId);
266
- if (!section)
267
- return "";
268
- const renderProps = (sectionData === null || sectionData === void 0 ? void 0 : sectionData[sectionId])
269
- ? { primaryColor, ...sectionData[sectionId] }
270
- : { placeholder: true, primaryColor };
271
- return section.render(renderProps);
272
- };
264
+ const sectionIds = new Set();
265
+ let m;
266
+ const divRe = /<div[^>]*>\s*\{\{section:([^}]+)\}\}\s*<\/div>/g;
267
+ const inlineRe = /\{\{section:([^}]+)\}\}/g;
268
+ while ((m = divRe.exec(finalBody)) !== null)
269
+ sectionIds.add(m[1]);
270
+ while ((m = inlineRe.exec(finalBody)) !== null)
271
+ sectionIds.add(m[1]);
272
+ const resolvedMap = {};
273
+ await Promise.all([...sectionIds].map(async (id) => {
274
+ if (emailSectionRenderer) {
275
+ resolvedMap[id] = await emailSectionRenderer(id, { ...data, primaryColor });
276
+ }
277
+ }));
273
278
  finalBody = finalBody
274
- .replace(/<div[^>]*>\s*\{\{section:([^}]+)\}\}\s*<\/div>/g, (_, id) => resolveSection(id))
275
- .replace(/\{\{section:([^}]+)\}\}/g, (_, id) => resolveSection(id));
279
+ .replace(/<div[^>]*>\s*\{\{section:([^}]+)\}\}\s*<\/div>/g, (_, id) => { var _a; return (_a = resolvedMap[id]) !== null && _a !== void 0 ? _a : ""; })
280
+ .replace(/\{\{section:([^}]+)\}\}/g, (_, id) => { var _a; return (_a = resolvedMap[id]) !== null && _a !== void 0 ? _a : ""; });
276
281
  }
277
282
  return finalBody;
278
283
  };
@@ -280,7 +285,7 @@ function buildEmailHTML({ preheader, title, salutation, body, primaryColor = con
280
285
  let formattedPrimaryButton = primaryButton;
281
286
  let formattedSecondaryButton = secondaryButton;
282
287
  if (params && data) {
283
- formattedBody = getEmailContentFromTemplate(body, params, data);
288
+ formattedBody = await getEmailContentFromTemplate(body, params, data);
284
289
  }
285
290
  const emailHeadAndStylesHTML = `
286
291
  <head>