feat: add PopupAd and AdminPopupAd interfaces with CRUD operations

- Introduced PopupAd and AdminPopupAd interfaces in common.ts.
- Implemented encoding, decoding, and JSON conversion methods for both PopupAd and AdminPopupAd.
- Added new RPC methods for managing PopupAds in admin.ts and me.ts, including list, create, update, and delete functionalities.
- Integrated PopupAdsClient in grpcClient.ts for gRPC communication.
- Updated auth store to handle real-time notifications for user-specific topics.
- Modified tsconfig.json to include auto-imports and components type definitions.
This commit is contained in:
2026-03-29 06:42:37 +00:00
parent 43702e8bf7
commit 8515498ade
31 changed files with 3905 additions and 78 deletions

View File

@@ -121,7 +121,8 @@
"playerConfigs": "Player Configs",
"domains": "Allowed Domains",
"ads": "Ads & VAST",
"danger": "Danger Zone"
"danger": "Danger Zone",
"popupAds": "Popup Ads"
},
"content": {
"fallbackTitle": "Settings",
@@ -157,6 +158,10 @@
"danger": {
"title": "Danger Zone",
"subtitle": "Irreversible and destructive actions. Be careful!"
},
"popupAds": {
"title": "Popup Ads",
"subtitle": "Manage your popup ad settings and preferences."
}
},
"notificationSettings": {
@@ -501,6 +506,68 @@
"failedDetail": "Failed to load or update VAST templates."
}
},
"popupAds": {
"createItem": "Add Popup Ad",
"maxTriggersLabel": "Highest URL trigger limit per session ({{count}})",
"emptyTitle": "No popup ads yet",
"emptySubtitle": "Create a popup ad to start opening URLs or injecting scripts.",
"types": {
"url": "URL",
"script": "Script"
},
"table": {
"label": "Label",
"type": "Type",
"target": "Target",
"maxTriggersPerSession": "Max triggers/session"
},
"dialog": {
"createTitle": "Create Popup Ad",
"editTitle": "Edit Popup Ad",
"type": "Type",
"label": "Label",
"labelPlaceholder": "e.g., Ad Network 1",
"url": "Destination URL",
"urlPlaceholder": "https://example.com/landing-page",
"script": "Script snippet",
"scriptPlaceholder": "<script async src=\"//example.com/ad.js\"></script>",
"maxTriggersPerSession": "Max popup triggers per session",
"activeTitle": "Item status",
"activeDescription": "Disable an item to keep it in the table without serving it.",
"update": "Update",
"create": "Create"
},
"info": {
"urlTitle": "URL:",
"urlDescription": "Opens in a new tab when viewer clicks.",
"scriptTitle": "Script:",
"scriptDescription": "Injects the script tag into the page (popunder networks, etc)."
},
"confirm": {
"deleteMessage": "Are you sure you want to delete \"{{name}}\"?",
"deleteHeader": "Delete Popup Ad",
"deleteAccept": "Delete",
"deleteReject": "Cancel"
},
"toast": {
"labelRequiredSummary": "Label required",
"labelRequiredDetail": "Please enter a label for this popup ad.",
"valueRequiredSummary": "Value required",
"valueRequiredDetail": "Please enter a URL or script snippet.",
"maxTriggersRequiredSummary": "Trigger limit required",
"maxTriggersRequiredDetail": "Please enter a max trigger count greater than 0 for URL popup ads.",
"invalidUrlSummary": "Invalid URL",
"invalidUrlDetail": "Please enter a valid URL.",
"createdSummary": "Popup ad created",
"createdDetail": "The popup ad has been added.",
"updatedSummary": "Popup ad updated",
"updatedDetail": "The popup ad has been updated.",
"deletedSummary": "Popup ad deleted",
"deletedDetail": "The popup ad has been removed.",
"failedSummary": "Action failed",
"failedDetail": "Failed to load or update popup ads."
}
},
"profile": {
"title": "Profile Information",
"subtitle": "Manage your personal information and account details.",
@@ -768,7 +835,7 @@
},
"overview": {
"welcome": {
"title": "Hello, {{{name}}}",
"title": "Hello, {{name}}",
"subtitle": "Here's what's happening with your content today."
},
"stats": {

View File

@@ -121,7 +121,8 @@
"playerConfigs": "Cấu hình trình phát",
"domains": "Tên miền được phép",
"ads": "Quảng cáo & VAST",
"danger": "Vùng nguy hiểm"
"danger": "Vùng nguy hiểm",
"popupAds": "Popup Ads"
},
"content": {
"fallbackTitle": "Cài đặt",
@@ -157,6 +158,10 @@
"danger": {
"title": "Vùng nguy hiểm",
"subtitle": "Hành động không thể hoàn tác và có tính phá hủy. Hãy cẩn thận!"
},
"popupAds": {
"title": "Popup Ads",
"subtitle": "Quản lý cài đặt và tùy chọn quảng cáo popup của bạn."
}
},
"notificationSettings": {
@@ -501,6 +506,68 @@
"failedDetail": "Không thể tải hoặc cập nhật mẫu VAST."
}
},
"popupAds": {
"createItem": "Thêm popup ad",
"maxTriggersLabel": "Giới hạn trigger URL cao nhất mỗi phiên ({{count}})",
"emptyTitle": "Chưa có popup ad",
"emptySubtitle": "Tạo popup ad để bắt đầu mở URL hoặc inject script.",
"types": {
"url": "URL",
"script": "Script"
},
"table": {
"label": "Nhãn",
"type": "Loại",
"target": "Đích",
"maxTriggersPerSession": "Số trigger tối đa/phiên"
},
"dialog": {
"createTitle": "Tạo popup ad",
"editTitle": "Sửa popup ad",
"type": "Loại",
"label": "Nhãn",
"labelPlaceholder": "ví dụ: Ad Network 1",
"url": "URL đích",
"urlPlaceholder": "https://example.com/landing-page",
"script": "Đoạn script",
"scriptPlaceholder": "<script async src=\"//example.com/ad.js\"></script>",
"maxTriggersPerSession": "Số lần popup tối đa mỗi phiên",
"activeTitle": "Trạng thái mục",
"activeDescription": "Tắt một mục để giữ nó trong bảng mà không phân phối nó.",
"update": "Cập nhật",
"create": "Tạo"
},
"info": {
"urlTitle": "URL:",
"urlDescription": "Mở tab mới khi người xem nhấp.",
"scriptTitle": "Script:",
"scriptDescription": "Inject script tag vào trang cho các mạng popup/popunder."
},
"confirm": {
"deleteMessage": "Bạn có chắc muốn xóa \"{{name}}\"?",
"deleteHeader": "Xóa popup ad",
"deleteAccept": "Xóa",
"deleteReject": "Hủy"
},
"toast": {
"labelRequiredSummary": "Thiếu nhãn",
"labelRequiredDetail": "Vui lòng nhập nhãn cho popup ad này.",
"valueRequiredSummary": "Thiếu giá trị",
"valueRequiredDetail": "Vui lòng nhập URL hoặc đoạn script.",
"maxTriggersRequiredSummary": "Thiếu giới hạn trigger",
"maxTriggersRequiredDetail": "Vui lòng nhập số trigger lớn hơn 0 cho popup ad loại URL.",
"invalidUrlSummary": "URL không hợp lệ",
"invalidUrlDetail": "Vui lòng nhập URL hợp lệ.",
"createdSummary": "Đã tạo popup ad",
"createdDetail": "Popup ad đã được thêm.",
"updatedSummary": "Đã cập nhật popup ad",
"updatedDetail": "Popup ad đã được cập nhật.",
"deletedSummary": "Đã xóa popup ad",
"deletedDetail": "Popup ad đã được gỡ bỏ.",
"failedSummary": "Thao tác thất bại",
"failedDetail": "Không thể tải hoặc cập nhật popup ads."
}
},
"profile": {
"title": "Thông tin hồ sơ",
"subtitle": "Quản lý thông tin cá nhân và chi tiết tài khoản của bạn.",
@@ -767,7 +834,7 @@
},
"overview": {
"welcome": {
"title": "Xin chào, {{{name}}}",
"title": "Xin chào, {{name}}",
"subtitle": "Đây là tình hình nội dung của bạn hôm nay."
},
"stats": {