diff --git a/mobile/src/screens/PerformerScenesScreen.tsx b/mobile/src/screens/PerformerScenesScreen.tsx
index 4a07a5e..032f0ef 100644
--- a/mobile/src/screens/PerformerScenesScreen.tsx
+++ b/mobile/src/screens/PerformerScenesScreen.tsx
@@ -13,6 +13,7 @@ import {
Alert,
FlatList,
Pressable,
+ ScrollView,
StyleSheet,
Text,
View,
@@ -135,11 +136,16 @@ export function PerformerScenesScreen() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [navigation, name, isFavorite, addMutation.isPending, removeMutation.isPending]);
+ // Filtr tagu IN-PLACE (bug-report 0264a3ff: wybór tagu ma filtrować sceny tej
+ // aktorki w tym widoku, nie nawigować do osobnego ekranu). null = bez filtra.
+ const [selectedTag, setSelectedTag] = React.useState<{ slug: string; name: string } | null>(null);
+
const scenesQuery = useQuery({
- queryKey: ['performer-scenes', id],
+ queryKey: ['performer-scenes', id, selectedTag?.slug ?? null],
queryFn: () =>
client.listScenes({
performer_ids: [id],
+ tags: selectedTag ? [selectedTag.slug] : undefined,
sort: 'release_date',
per_page: 200,
// Sceny TPDB/StashDB bez tube-linków nie są usable — zawsze filtrujemy.
@@ -270,21 +276,31 @@ export function PerformerScenesScreen() {
{tab === 'scenes' && !!tagsQuery.data?.items.length && (
-
- {tagsQuery.data.items.map((t) => (
-
- navigation.push('TagScenes', { slug: t.slug, name: t.name })
- }
- >
-
- {t.name}
-
-
- ))}
-
+
+ {tagsQuery.data.items.map((t) => {
+ const active = selectedTag?.slug === t.slug;
+ return (
+
+ setSelectedTag(active ? null : { slug: t.slug, name: t.name })
+ }
+ >
+
+ {active ? `${t.name} ✕` : t.name}
+
+
+ );
+ })}
+
)}
}
@@ -418,10 +434,10 @@ const styles = StyleSheet.create({
actionBtnTextPrimary: { color: theme.accent, fontWeight: '700', fontSize: 12 },
tagRow: {
flexDirection: 'row',
- flexWrap: 'wrap',
gap: 6,
- marginHorizontal: 4,
- marginBottom: 10,
+ paddingHorizontal: 4,
+ paddingBottom: 10,
+ alignItems: 'center',
},
tagChip: {
backgroundColor: theme.card,
@@ -430,9 +446,11 @@ const styles = StyleSheet.create({
borderRadius: 14,
paddingVertical: 4,
paddingHorizontal: 10,
- maxWidth: 160,
+ maxWidth: 200,
},
+ tagChipActive: { backgroundColor: theme.accent, borderColor: theme.accent },
tagChipText: { color: theme.muted, fontSize: 12, fontWeight: '600' },
+ tagChipTextActive: { color: theme.fg, fontWeight: '700' },
tabRow: { flexDirection: 'row', gap: 8, marginBottom: 8 },
tabBtn: {
flex: 1,