feat(sub): show the announcement on the subscription info page

The subAnnounce setting was only emitted as a base64 Announce response header, which most client apps ignore and browsers never see. Pass it into the sub page view-model and render it as an info alert at the top of the card; custom themes get the announce key for free.

Closes #5276
This commit is contained in:
MHSanaei
2026-07-03 09:38:37 +02:00
parent 1f04912b6f
commit 323cf09d10
3 changed files with 7 additions and 0 deletions
+1
View File
@@ -18,6 +18,7 @@ interface SubPageData {
links?: string[];
emails?: string[];
datepicker?: 'gregorian' | 'jalalian';
announce?: string;
downloadByte?: string | number;
uploadByte?: string | number;
usedByte?: string | number;
+5
View File
@@ -1,6 +1,7 @@
import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
Alert,
Button,
Card,
Col,
@@ -61,6 +62,7 @@ const links: string[] = Array.isArray(subData.links) ? subData.links : [];
const linkEmails: string[] = Array.isArray(subData.emails) ? subData.emails : [];
const subEmail = [...new Set(linkEmails.filter(Boolean))].join(', ');
const datepicker = subData.datepicker || 'gregorian';
const announce = subData.announce || '';
const isUnlimited = totalByte <= 0 && expireMs === 0;
const isActive = (() => {
@@ -283,6 +285,9 @@ export default function SubPage() {
<Row justify="center">
<Col xs={24} sm={22} md={18} lg={14} xl={12}>
<Card hoverable className="subscription-card" title={cardTitle} extra={cardExtra}>
{announce && (
<Alert type="info" showIcon message={announce} style={{ marginBottom: 16 }} />
)}
<Descriptions
bordered
column={1}
+1
View File
@@ -281,6 +281,7 @@ func (a *SUBController) serveSubPage(c *gin.Context, basePath string, page PageD
"links": page.Result,
"emails": page.Emails,
"datepicker": datepicker,
"announce": a.subAnnounce,
}
// When an admin has configured a custom subscription theme, render it