From 92c2a08ac5a9fb162d1df50dea7e4a62d7c89480 Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Thu, 1 Oct 2026 13:13:57 -0400 Subject: [PATCH] OpenConceptLab/ocl_online#299 | Banner: subscription dates (Nov 1 / Dec 1 grace period), "Learn more" and "See pricing" New announcement id, so visitors who dismissed the preview banner see this one. Two links instead of one, each kept on one line on narrow screens: "Learn more" (the letter to the OCL community) and "See pricing" (new announcement.pricing_link_label in en/es/zh). Both carry utm_campaign=subscription_dates. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019j2N6BFoNmA32L2DHKZV41 --- src/common/constants.js | 3 ++- src/components/app/AnnouncementBanner.jsx | 23 +++++++++++++++++------ src/i18n/locales/en/translations.json | 5 +++-- src/i18n/locales/es/translations.json | 5 +++-- src/i18n/locales/zh/translations.json | 5 +++-- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/common/constants.js b/src/common/constants.js index d06becc..c3c85f1 100644 --- a/src/common/constants.js +++ b/src/common/constants.js @@ -72,4 +72,5 @@ export const DEFAULT_CASCADE_PARAMS = { export const ALL = '*'; export const URL_REGISTRY_DOC_LINK = 'https://docs.openconceptlab.org/en/latest/oclapi/apireference/urlregistry.html' export const MATCHING_ALGORITHMS_DOC_LINK = 'https://docs.openconceptlab.org/en/latest/oclmap/matching-algorithms.html' -export const MAPPER_ANNOUNCEMENT_URL = 'https://openconceptlab.org/blog/letter-to-the-ocl-community?utm_source=oclmap&utm_medium=banner&utm_campaign=preview_launch' +export const MAPPER_ANNOUNCEMENT_LETTER_URL = 'https://openconceptlab.org/blog/letter-to-the-ocl-community?utm_source=oclmap&utm_medium=banner&utm_campaign=subscription_dates' +export const MAPPER_ANNOUNCEMENT_PRICING_URL = 'https://openconceptlab.org/pricing?utm_source=oclmap&utm_medium=banner&utm_campaign=subscription_dates' diff --git a/src/components/app/AnnouncementBanner.jsx b/src/components/app/AnnouncementBanner.jsx index 1b14647..e97a08a 100644 --- a/src/components/app/AnnouncementBanner.jsx +++ b/src/components/app/AnnouncementBanner.jsx @@ -6,14 +6,20 @@ import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; import CampaignOutlinedIcon from '@mui/icons-material/CampaignOutlined'; import CloseIcon from '@mui/icons-material/Close'; -import { MAPPER_ANNOUNCEMENT_URL } from '../../common/constants'; +import { MAPPER_ANNOUNCEMENT_LETTER_URL, MAPPER_ANNOUNCEMENT_PRICING_URL } from '../../common/constants'; // OCL Online-wide announcement strip, fixed above the app bar and styled like // the community site's AnnouncementBanner, so it reads as sitting above the // tool rather than inside it. Same component in TBv3 and TBv2. Update // announcement.* in the locale bundles (and bump ANNOUNCEMENT_ID) to re-show a // new announcement to visitors who dismissed a previous one. -const ANNOUNCEMENT_ID = 'mapper-public-preview-2026-09-v2'; +const ANNOUNCEMENT_ID = 'subscription-dates-2026-10'; + +// Shown after announcement.text in this order, separated by a middle dot. +const ANNOUNCEMENT_LINKS = [ + { labelKey: 'announcement.link_label', href: MAPPER_ANNOUNCEMENT_LETTER_URL }, + { labelKey: 'announcement.pricing_link_label', href: MAPPER_ANNOUNCEMENT_PRICING_URL }, +]; const DISMISSED_KEY = 'announcementDismissed'; @@ -95,10 +101,15 @@ const AnnouncementBanner = () => { {t('announcement.title')} - {t('announcement.text')}{' '} - - {t('announcement.link_label')} - + {t('announcement.text')} + {ANNOUNCEMENT_LINKS.map(({ labelKey, href }, i) => ( + + {i ? ' · ' : ' '} + + {t(labelKey)} + + + ))} diff --git a/src/i18n/locales/en/translations.json b/src/i18n/locales/en/translations.json index 7a089db..7e59445 100644 --- a/src/i18n/locales/en/translations.json +++ b/src/i18n/locales/en/translations.json @@ -775,9 +775,10 @@ }, "unknown_error": "Unknown error", "announcement": { - "title": "Welcome to the public preview of the OCL Mapper!", - "text": "Try it now, ahead of the full release coming soon.", + "title": "Subscriptions open November 1.", + "text": "Existing accounts using premium features have a grace period until December 1.", "link_label": "Learn more", + "pricing_link_label": "See pricing", "dismiss": "Dismiss" }, "quota": { diff --git a/src/i18n/locales/es/translations.json b/src/i18n/locales/es/translations.json index bc856db..d2d21e8 100644 --- a/src/i18n/locales/es/translations.json +++ b/src/i18n/locales/es/translations.json @@ -769,9 +769,10 @@ }, "unknown_error": "Error desconocido", "announcement": { - "title": "¡Te damos la bienvenida a la vista previa pública de OCL Mapper!", - "text": "Pruébalo ahora, antes del lanzamiento completo que llegará pronto.", + "title": "Las suscripciones abren el 1 de noviembre.", + "text": "Las cuentas existentes que usan funciones premium tienen un periodo de gracia hasta el 1 de diciembre.", "link_label": "Más información", + "pricing_link_label": "Ver precios", "dismiss": "Descartar" }, "quota": { diff --git a/src/i18n/locales/zh/translations.json b/src/i18n/locales/zh/translations.json index a835a20..fcb6e14 100644 --- a/src/i18n/locales/zh/translations.json +++ b/src/i18n/locales/zh/translations.json @@ -767,9 +767,10 @@ }, "unknown_error": "未知错误", "announcement": { - "title": "欢迎体验 OCL Mapper 公开预览版!", - "text": "正式版即将推出,现在就来抢先试用吧。", + "title": "订阅将于 11 月 1 日开放。", + "text": "使用高级功能的现有账户可享受宽限期至 12 月 1 日。", "link_label": "了解更多", + "pricing_link_label": "查看价格", "dismiss": "关闭" }, "quota": {