fix: use all picker kinds when kind filter is set to 'all'
parseKindFilter returned undefined for 'all', causing useStreamPosts to fall back to the user's enabled feed-settings kinds instead of every kind in the kind picker list. Now kindsOverride always contains explicit kind numbers: all picker kinds when filter is 'all', or the specific selection otherwise.
This commit is contained in:
@@ -206,11 +206,11 @@ export function useStreamPosts(query: string, options: StreamPostsOptions) {
|
||||
} else if (options.mediaType === 'vines') {
|
||||
kinds = [22, 34236]; // shorts + vines
|
||||
} else if (options.mediaType === 'videos') {
|
||||
kinds = [1, 21, 22, ...enabledKinds.filter((k) => !isRepostKind(k))];
|
||||
kinds = [21, 22, ...enabledKinds.filter((k) => !isRepostKind(k))];
|
||||
} else if (options.mediaType === 'images') {
|
||||
kinds = [1, 20, ...enabledKinds.filter((k) => !isRepostKind(k))];
|
||||
kinds = [20, ...enabledKinds.filter((k) => !isRepostKind(k))];
|
||||
} else {
|
||||
kinds = [1, ...enabledKinds.filter((k) => !isRepostKind(k))];
|
||||
kinds = enabledKinds.filter((k) => !isRepostKind(k));
|
||||
}
|
||||
// Deduplicate
|
||||
kinds = [...new Set(kinds)];
|
||||
|
||||
@@ -255,14 +255,19 @@ export function SearchPage() {
|
||||
|
||||
const kindOptions = useMemo(() => buildKindOptions(), []);
|
||||
|
||||
// Resolve kindsOverride from the current kind filter state
|
||||
const kindsOverride = useMemo<number[] | undefined>(
|
||||
() => parseKindFilter(kindFilter, customKindText),
|
||||
[kindFilter, customKindText],
|
||||
// All kind numbers available in the picker — used as the "all kinds" default.
|
||||
const allKindNumbers = useMemo(() => kindOptions.map((o) => Number(o.value)), [kindOptions]);
|
||||
|
||||
// Resolve kindsOverride from the current kind filter state.
|
||||
// "all" means every kind in the picker list, not undefined (which would let
|
||||
// useStreamPosts fall back to only the user's enabled feed-settings kinds).
|
||||
const kindsOverride = useMemo<number[]>(
|
||||
() => kindFilter === 'all' ? allKindNumbers : (parseKindFilter(kindFilter, customKindText) ?? allKindNumbers),
|
||||
[kindFilter, customKindText, allKindNumbers],
|
||||
);
|
||||
|
||||
// Detect kind + media type conflict: a specific kind is selected AND a media type is set
|
||||
const hasKindMediaConflict = kindsOverride !== undefined && mediaType !== 'all';
|
||||
const hasKindMediaConflict = kindFilter !== 'all' && kindsOverride.length > 0 && mediaType !== 'all';
|
||||
|
||||
// Determine if any filter differs from the default
|
||||
const hasActiveFilters = !includeReplies || mediaType !== DEFAULT_FILTERS.mediaType ||
|
||||
@@ -294,7 +299,7 @@ export function SearchPage() {
|
||||
: ['protocol:nostr'];
|
||||
if (debouncedSearchQuery.trim()) parts.push(debouncedSearchQuery.trim());
|
||||
if (language !== 'global') parts.push(`language:${language}`);
|
||||
const isDedicatedKindQuery = !kindsOverride && (mediaType === 'vines' || mediaType === 'images' || mediaType === 'videos');
|
||||
const isDedicatedKindQuery = kindFilter === 'all' && (mediaType === 'vines' || mediaType === 'images' || mediaType === 'videos');
|
||||
if (!isDedicatedKindQuery && !hasKindMediaConflict) {
|
||||
if (mediaType === 'images') { parts.push('media:true'); parts.push('video:false'); }
|
||||
else if (mediaType === 'videos') parts.push('video:true');
|
||||
|
||||
Reference in New Issue
Block a user