Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions frontend/src/lib/components/feed/MobileFilterSheet.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
import type {
ChannelAutoRule,
SavedSourceType,
SubscriptionSourceType,
DateAddedPreset,
ReadingLengthFilter,
SortOrder,
} from '$lib/types';
import { itemLabelsStore } from '$lib/stores/itemLabels.svelte';
import {
SAVED_SOURCE_OPTIONS,
TYPE_OPTIONS,
DATE_PRESET_OPTIONS_SHORT as DATE_PRESET_OPTIONS,
READING_LENGTH_OPTIONS_SHORT as READING_LENGTH_OPTIONS,
SAVED_SORT_OPTIONS_SHORT as SAVED_SORT_OPTIONS,
Expand Down Expand Up @@ -85,6 +87,7 @@
let chDomainPatterns = $state<string[]>([]);
let chSourceMode = $state<'all' | 'include'>('all');
let chSourceKeys = $state<Set<string>>(new Set());
let chTypeFilter = $state<Set<SubscriptionSourceType>>(new Set());
let chSaving = $state(false);
let chError = $state<string | null>(null);
let chNameManuallyEdited = $state(false);
Expand Down Expand Up @@ -210,6 +213,7 @@
chSavedDomainFilter = new Set(view.savedDomainFilter ?? []);
chSavedTagFilter = new Set(view.tagFilter ?? []);
chSortOrder = view.sortOrder;
chTypeFilter = new Set(view.typeFilter ?? []);
const isSmartChannel = !!view.autoRule;
if (isSmartChannel) {
chMode = 'smart';
Expand Down Expand Up @@ -243,6 +247,7 @@
chNameManuallyEdited = false;
chSourceMode = 'all';
chSourceKeys = new Set();
chTypeFilter = new Set();
chSavedSourceFilter = new Set();
chSavedDateFilter = '';
chSavedReadingLength = new Set();
Expand All @@ -264,6 +269,13 @@
chSourceKeys = next;
}

function toggleChTypeFilter(type: SubscriptionSourceType) {
const next = new Set(chTypeFilter);
if (next.has(type)) next.delete(type);
else next.add(type);
chTypeFilter = next;
}

async function handleChDelete() {
if (editingChannelId == null) return;
if (!confirm('Delete this channel?')) return;
Expand Down Expand Up @@ -306,6 +318,12 @@
sourceMode: isSmartMode ? ('include' as const) : chSourceMode,
sourceKeys: isSmartMode ? chMatchedSourceKeys : Array.from(chSourceKeys),
autoRule: isSmartMode ? chCurrentAutoRule : undefined,
typeFilter:
chMode === 'manual' && chSourceMode === 'include'
? undefined
: chTypeFilter.size > 0
? Array.from(chTypeFilter)
: undefined,
readFilter: 'unread' as const,
sortOrder: 'newest' as const,
};
Expand Down Expand Up @@ -891,6 +909,25 @@
{/if}
</div>
{/if}

{#if chChannelType === 'feed' && !(chMode === 'manual' && chSourceMode === 'include')}
<div class="sheet-section">
<div class="section-label">Content Types</div>
<div class="source-list">
{#each TYPE_OPTIONS as opt}
<label class="source-item">
<input
type="checkbox"
checked={chTypeFilter.has(opt.value)}
onchange={() => toggleChTypeFilter(opt.value)}
/>
<span class="source-name">{opt.label}</span>
</label>
{/each}
</div>
<p class="section-hint">Leave all unchecked to show all types</p>
</div>
{/if}
{/if}

{#if chError}
Expand Down Expand Up @@ -1139,6 +1176,13 @@
color: var(--color-text-secondary);
}

.section-hint {
margin: 0;
padding-left: 0.25rem;
font-size: 0.75rem;
color: var(--color-text-secondary);
}

.mark-all-btn {
display: flex;
align-items: center;
Expand Down
Loading