From a16274409eca6dcdf89e34edd1152b197d0514e6 Mon Sep 17 00:00:00 2001 From: David <33458145+davidmcpowell@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:05:43 +0100 Subject: [PATCH] Merge pull request #34318 from overleaf/dp-labs-custom-success-notification Add customisable success notification for Labs experiment enrollment GitOrigin-RevId: 7d60ea3bac124909b19f8f537e1ab2b6db8d787e --- .../Features/SplitTests/SplitTestHandler.mjs | 5 +++++ .../Features/SplitTests/SplitTestManager.mjs | 2 ++ services/web/app/src/models/SplitTest.mjs | 22 +++++++++++++++++++ services/web/types/split-test.ts | 5 +++++ 4 files changed, 34 insertions(+) diff --git a/services/web/app/src/Features/SplitTests/SplitTestHandler.mjs b/services/web/app/src/Features/SplitTests/SplitTestHandler.mjs index 383b26763a..094da06473 100644 --- a/services/web/app/src/Features/SplitTests/SplitTestHandler.mjs +++ b/services/web/app/src/Features/SplitTests/SplitTestHandler.mjs @@ -836,6 +836,11 @@ async function _loadSplitTestInfoInLocals(locals, splitTestName, session) { description: splitTest.labsDescription || '', icon: splitTest.labsIcon || '', surveyLink: splitTest.badgeInfo?.labs?.url || '', + successNotification: { + content: splitTest.labsSuccessNotification?.content || '', + buttonLabel: splitTest.labsSuccessNotification?.buttonLabel || '', + buttonUrl: splitTest.labsSuccessNotification?.buttonUrl || '', + }, isFull: SplitTestUtils.isExperimentFull(variant), versionCreatedAt: currentVersion.createdAt instanceof Date diff --git a/services/web/app/src/Features/SplitTests/SplitTestManager.mjs b/services/web/app/src/Features/SplitTests/SplitTestManager.mjs index 166ee14e65..42815e4ea4 100644 --- a/services/web/app/src/Features/SplitTests/SplitTestManager.mjs +++ b/services/web/app/src/Features/SplitTests/SplitTestManager.mjs @@ -131,6 +131,7 @@ async function createSplitTest( labsTitle: labsInfo.title, labsDescription: labsInfo.description, labsIcon: labsInfo.icon, + labsSuccessNotification: labsInfo.successNotification, versions: [ { versionNumber: 1, @@ -205,6 +206,7 @@ async function updateSplitTestInfo(name, info, labsInfo) { splitTest.labsTitle = labsInfo.title splitTest.labsDescription = labsInfo.description splitTest.labsIcon = labsInfo.icon + splitTest.labsSuccessNotification = labsInfo.successNotification } return _saveSplitTest(splitTest) } diff --git a/services/web/app/src/models/SplitTest.mjs b/services/web/app/src/models/SplitTest.mjs index e3b5dcdfe8..f70e353b7d 100644 --- a/services/web/app/src/models/SplitTest.mjs +++ b/services/web/app/src/models/SplitTest.mjs @@ -40,6 +40,24 @@ const BadgeInfoSchema = new Schema( { _id: false } ) +const LabsSuccessNotificationSchema = new Schema( + { + content: { + type: String, + required: false, + }, + buttonLabel: { + type: String, + required: false, + }, + buttonUrl: { + type: String, + required: false, + }, + }, + { _id: false } +) + const VariantSchema = new Schema( { name: { @@ -187,6 +205,10 @@ export const SplitTestSchema = new Schema( type: String, required: false, }, + labsSuccessNotification: { + type: LabsSuccessNotificationSchema, + required: false, + }, }, { minimize: false } ) diff --git a/services/web/types/split-test.ts b/services/web/types/split-test.ts index 632027c98e..62dcc80d96 100644 --- a/services/web/types/split-test.ts +++ b/services/web/types/split-test.ts @@ -22,4 +22,9 @@ export type LabsDetails = { description: string icon: string surveyLink: string + successNotification?: { + content?: string + buttonLabel?: string + buttonUrl?: string + } }