@@ -8,6 +8,8 @@ import { Button } from '@/components/ui/button'; // Adjust path
88import { type Snippet } from '@shared/schema' ; // Adjust path
99import Layout from '@/components/Layout' ; // Adjust path for Layout component
1010
11+ const ALL_ITEMS_VALUE = "_ALL_" ; // Define placeholder for "All" options
12+
1113const 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