Skip to content

Commit 3e66d91

Browse files
authored
Merge pull request #2 from hexawulf/public-view-system
fix: Prevent empty values in PublicHome select filters
2 parents c42980c + 82e70bf commit 3e66d91

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

client/src/pages/PublicHome.tsx

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { Button } from '@/components/ui/button'; // Adjust path
88
import { type Snippet } from '@shared/schema'; // Adjust path
99
import Layout from '@/components/Layout'; // Adjust path for Layout component
1010

11+
const ALL_ITEMS_VALUE = "_ALL_"; // Define placeholder for "All" options
12+
1113
const PublicHome: React.FC = () => {
1214
const [snippets, setSnippets] = useState<Snippet[]>([]);
1315
const [allSnippets, setAllSnippets] = useState<Snippet[]>([]); // Store all fetched snippets for client-side filtering
@@ -52,11 +54,15 @@ const PublicHome: React.FC = () => {
5254
const languages = new Set<string>();
5355
const tags = new Set<string>();
5456
data.forEach(snippet => {
55-
if (snippet.language) languages.add(snippet.language);
56-
snippet.tags?.forEach(tag => tags.add(tag));
57+
if (snippet.language && snippet.language.trim() !== '') { languages.add(snippet.language); }
58+
snippet.tags?.forEach(tag => {
59+
if (tag && tag.trim() !== '') {
60+
tags.add(tag);
61+
}
62+
});
5763
});
58-
setAvailableLanguages(['', ...Array.from(languages)]); // Add empty option for "All"
59-
setAvailableTags(['', ...Array.from(tags)]); // Add empty option for "All"
64+
setAvailableLanguages([ALL_ITEMS_VALUE, ...Array.from(languages)]);
65+
setAvailableTags([ALL_ITEMS_VALUE, ...Array.from(tags)]);
6066

6167
} catch (err) {
6268
setError(err instanceof Error ? err.message : 'An unknown error occurred.');
@@ -80,11 +86,11 @@ const PublicHome: React.FC = () => {
8086
);
8187
}
8288

83-
if (selectedLanguage) {
89+
if (selectedLanguage && selectedLanguage !== ALL_ITEMS_VALUE) {
8490
filtered = filtered.filter(snippet => snippet.language === selectedLanguage);
8591
}
8692

87-
if (selectedTag) {
93+
if (selectedTag && selectedTag !== ALL_ITEMS_VALUE) {
8894
filtered = filtered.filter(snippet => snippet.tags?.includes(selectedTag));
8995
}
9096

@@ -145,8 +151,11 @@ const PublicHome: React.FC = () => {
145151
</SelectTrigger>
146152
<SelectContent>
147153
{availableLanguages.map(lang => (
148-
<SelectItem key={lang || 'all-langs'} value={lang}>
149-
{lang || 'All Languages'}
154+
<SelectItem
155+
key={lang === ALL_ITEMS_VALUE ? 'all-langs-key' : lang}
156+
value={lang}
157+
>
158+
{lang === ALL_ITEMS_VALUE ? 'All Languages' : lang}
150159
</SelectItem>
151160
))}
152161
</SelectContent>
@@ -163,8 +172,11 @@ const PublicHome: React.FC = () => {
163172
</SelectTrigger>
164173
<SelectContent>
165174
{availableTags.map(tag => (
166-
<SelectItem key={tag || 'all-tags'} value={tag}>
167-
{tag || 'All Tags'}
175+
<SelectItem
176+
key={tag === ALL_ITEMS_VALUE ? 'all-tags-key' : tag}
177+
value={tag}
178+
>
179+
{tag === ALL_ITEMS_VALUE ? 'All Tags' : tag}
168180
</SelectItem>
169181
))}
170182
</SelectContent>

0 commit comments

Comments
 (0)