fix(ui): grupuj changelog po miesiacu, zdejmij naglowek z Sites
Changelog: 17 sierpniowych wpisow drukowalo "AUGUST 2026" 17 razy, bo naglowek szedl przy KAZDYM wpisie. Teraz wpisy sa laczone w grupy miesieczne (sa juz newest-first, wiec wystarczy sklejac kolejne z tym samym `date`), naglowek leci raz na grupe. Sites: usuniety tytul "SITES" + licznik i podpowiedz "tap a tube -> newest scenes". Byl jedynym ekranem-zakladka z wlasnym naglowkiem, przez co jego tresc zaczynala sie nizej niz na pozostalych. Martwe style (headerRow/headerLabel/headerCount/hint) wyciete. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
17e4ecaa8a
commit
576058497a
3 changed files with 26 additions and 27 deletions
|
|
@ -16,6 +16,14 @@ export type ChangelogEntry = {
|
|||
};
|
||||
|
||||
export const CHANGELOG: ChangelogEntry[] = [
|
||||
{
|
||||
id: '2026-08-18f',
|
||||
date: 'August 2026',
|
||||
items: [
|
||||
'This list now shows the month once per group instead of repeating it above every single entry.',
|
||||
'Sites: dropped the redundant title and hint line, so the list starts right where the other tabs do.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: '2026-08-18e',
|
||||
date: 'August 2026',
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import React from 'react';
|
|||
import { Modal, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
|
||||
|
||||
import {
|
||||
CHANGELOG,
|
||||
NEWEST_CHANGELOG_ID,
|
||||
unseenEntries,
|
||||
type ChangelogEntry,
|
||||
|
|
@ -48,6 +47,19 @@ export function WhatsNewModal() {
|
|||
if (NEWEST_CHANGELOG_ID) setLastSeenChangelog(NEWEST_CHANGELOG_ID).catch(() => {});
|
||||
}, []);
|
||||
|
||||
// Nagłówek miesiąca RAZ na grupę, nie przy każdym wpisie. Wcześniej 17 sierpniowych
|
||||
// wpisów drukowało „AUGUST 2026" 17 razy (zgłoszenie 2026-08-18). Wpisy są już
|
||||
// newest-first, więc kolejne z tym samym `date` po prostu doklejamy do bieżącej grupy.
|
||||
const months = React.useMemo(() => {
|
||||
const out: { date: string; items: string[] }[] = [];
|
||||
for (const e of entries) {
|
||||
const last = out[out.length - 1];
|
||||
if (last && last.date === e.date) last.items.push(...e.items);
|
||||
else out.push({ date: e.date, items: [...e.items] });
|
||||
}
|
||||
return out;
|
||||
}, [entries]);
|
||||
|
||||
if (!visible || entries.length === 0) return null;
|
||||
|
||||
return (
|
||||
|
|
@ -56,10 +68,10 @@ export function WhatsNewModal() {
|
|||
<View style={styles.card}>
|
||||
<Text style={styles.title}>What's new</Text>
|
||||
<ScrollView style={styles.scroll} contentContainerStyle={{ paddingBottom: 4 }}>
|
||||
{entries.map((e) => (
|
||||
<View key={e.id} style={styles.entry}>
|
||||
{CHANGELOG.length > 1 ? <Text style={styles.entryDate}>{e.date}</Text> : null}
|
||||
{e.items.map((it, i) => (
|
||||
{months.map((m) => (
|
||||
<View key={m.date} style={styles.month}>
|
||||
<Text style={styles.entryDate}>{m.date}</Text>
|
||||
{m.items.map((it, i) => (
|
||||
<View key={i} style={styles.itemRow}>
|
||||
<Text style={styles.bullet}>•</Text>
|
||||
<Text style={styles.itemText}>{it}</Text>
|
||||
|
|
@ -101,7 +113,7 @@ const styles = StyleSheet.create({
|
|||
marginBottom: 14,
|
||||
},
|
||||
scroll: { flexGrow: 0 },
|
||||
entry: { marginBottom: 14 },
|
||||
month: { marginBottom: 16 },
|
||||
entryDate: {
|
||||
color: theme.accentText,
|
||||
fontSize: 12,
|
||||
|
|
|
|||
|
|
@ -73,12 +73,6 @@ export function SitesScreen() {
|
|||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<View style={styles.headerRow}>
|
||||
<Text style={styles.headerLabel}>Sites</Text>
|
||||
<Text style={styles.headerCount}>{items.length}</Text>
|
||||
</View>
|
||||
<Text style={styles.hint}>tap a tube → newest scenes · tap the ★ → rating breakdown</Text>
|
||||
|
||||
<Toolbar>
|
||||
<SearchInput value={q} onChangeText={setQ} placeholder="search site…" />
|
||||
</Toolbar>
|
||||
|
|
@ -267,21 +261,6 @@ function RatingModal({ source, onClose }: { source: SourceOut | null; onClose: (
|
|||
const styles = StyleSheet.create({
|
||||
container: { flex: 1, backgroundColor: theme.bg, paddingHorizontal: SCREEN_PAD_H, paddingTop: SCREEN_PAD_TOP },
|
||||
|
||||
headerRow: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
paddingBottom: 4,
|
||||
},
|
||||
headerLabel: {
|
||||
color: theme.muted,
|
||||
fontSize: 12,
|
||||
textTransform: 'uppercase',
|
||||
letterSpacing: 1.2,
|
||||
fontWeight: '700',
|
||||
},
|
||||
headerCount: { color: theme.fg, fontSize: 22, fontWeight: '800' },
|
||||
hint: { color: theme.mutedDim, fontSize: 11, marginBottom: 12 },
|
||||
segment: { flexDirection: 'row', gap: 8, marginBottom: 12 },
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue