feat(panel): let a sponsor slot start at a scheduled time

sponsors.json only had an end date, so a booked placement had to be
added to the file on the day it started. An optional `from` now hides
a sponsor (and its logo) until that instant; entries without it show
immediately as before.
This commit is contained in:
MHSanaei
2026-09-27 16:30:20 +02:00
parent 044e2926a0
commit 09617f04f5
11 changed files with 48 additions and 20 deletions
+2
View File
@@ -1107,6 +1107,7 @@ export const EXAMPLES: Record<string, unknown> = {
},
"Sponsor": {
"enable": true,
"from": "2026-10-01T00:00:00Z",
"id": "acme-2026-10",
"link": "https://acme.example/?utm_source=3x-ui",
"logo": "/sponsors/logo/acme.png",
@@ -1123,6 +1124,7 @@ export const EXAMPLES: Record<string, unknown> = {
"sponsors": [
{
"enable": true,
"from": "2026-10-01T00:00:00Z",
"id": "acme-2026-10",
"link": "https://acme.example/?utm_source=3x-ui",
"logo": "/sponsors/logo/acme.png",
+6
View File
@@ -4476,6 +4476,12 @@ export const SCHEMAS: Record<string, unknown> = {
"nullable": true,
"type": "boolean"
},
"from": {
"example": "2026-10-01T00:00:00Z",
"format": "date-time",
"nullable": true,
"type": "string"
},
"id": {
"example": "acme-2026-10",
"type": "string"
+1
View File
@@ -1028,6 +1028,7 @@ export interface Setting {
export interface Sponsor {
enable?: boolean | null;
from?: string | null;
id: string;
link: string;
logo?: string;
+1
View File
@@ -1091,6 +1091,7 @@ export type Setting = z.infer<typeof SettingSchema>;
export const SponsorSchema = z.object({
enable: z.boolean().nullable().optional(),
from: z.string().nullable().optional(),
id: z.string(),
link: z.string(),
logo: z.string().optional(),