feat: Add account privacy settings endpoint

- Implemented new endpoints for retrieving account privacy settings.
- Added fields for privacy preferences such as profile visibility, online status, and activity visibility.

feat: Extend play menu tags functionality

- Updated PlayMenuTagsRequest to include TrendingTags.
- Modified SetPlayMenuTags to handle trending tags.
- Enhanced logging to include trending tags.

fix: Increase maximum archive size for room zip imports

- Updated MaxArchiveBytes from 12GB to 25GB in RoomZipImportController.

feat: Improve CDN image handling

- Added local image path resolution for room images.
- Implemented lazy loading of room image aliases from JSON file.

feat: Enhance match player presence resolution

- Updated ResolveDataBlobForPresenceAsync to consider sub-room IDs and private instance status.

feat: Extend RoomEntity with new properties

- Added AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson fields.

feat: Update database schema for new room properties

- Added new columns to the Rooms table for AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson.

feat: Implement platform notifications controller

- Created PlatformNotificationsController for managing user notification preferences.
- Added endpoints for retrieving and setting notification preferences and categories.
This commit is contained in:
Alexa
2026-06-25 01:23:57 +03:00
parent 1d4777e3da
commit 312ecbbdc8
18 changed files with 1615 additions and 239 deletions
+12 -3
View File
@@ -13,6 +13,7 @@ import { Plus, RefreshCw, Trash, Upload } from '../components/Icons';
interface PlayMenuTagSettings {
pinnedTags: string[];
popularTags: string[];
trendingTags: string[];
updatedAt: string;
}
@@ -245,6 +246,7 @@ function PlayMenuTagsPanel({
}) {
const [pinnedTags, setPinnedTags] = useState<string[]>([]);
const [popularTags, setPopularTags] = useState<string[]>([]);
const [trendingTags, setTrendingTags] = useState<string[]>([]);
const [busy, setBusy] = useState(false);
const toast = useToast();
@@ -252,6 +254,7 @@ function PlayMenuTagsPanel({
if (!tags) return;
setPinnedTags(tags.pinnedTags);
setPopularTags(tags.popularTags);
setTrendingTags(tags.trendingTags);
}, [tags]);
const save = async (reset = false) => {
@@ -260,8 +263,8 @@ function PlayMenuTagsPanel({
await api<PlayMenuTagSettings>('/settings/play-menu-tags', {
method: 'POST',
body: reset
? { PinnedTags: [], PopularTags: [] }
: { PinnedTags: pinnedTags, PopularTags: popularTags },
? { PinnedTags: [], PopularTags: [], TrendingTags: [] }
: { PinnedTags: pinnedTags, PopularTags: popularTags, TrendingTags: trendingTags },
});
toast.push(reset ? 'Play menu tags reset.' : 'Play menu tags saved.', 'success');
onSaved();
@@ -299,7 +302,7 @@ function PlayMenuTagsPanel({
{error && <div className="mt-3 text-sm text-danger">{error}</div>}
{loading && !tags && <div className="mt-3 text-xs text-ink-400">Loading tags...</div>}
{tags && (
<div className="mt-4 grid gap-3 md:grid-cols-2">
<div className="mt-4 grid gap-3 md:grid-cols-3">
<TagListEditor
label="Pinned tags"
tags={pinnedTags}
@@ -312,6 +315,12 @@ function PlayMenuTagsPanel({
onChange={setPopularTags}
max={32}
/>
<TagListEditor
label="Trending tags"
tags={trendingTags}
onChange={setTrendingTags}
max={32}
/>
</div>
)}
</div>