@@ -6,6 +6,7 @@ import { ScriptCard } from './ScriptCard';
66import { ScriptDetailModal } from './ScriptDetailModal' ;
77import { CategorySidebar } from './CategorySidebar' ;
88import { FilterBar , type FilterState } from './FilterBar' ;
9+ import type { ScriptCard as ScriptCardType } from '~/types/script' ;
910
1011
1112interface ScriptsGridProps {
@@ -34,7 +35,7 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
3435 ) ;
3536
3637 // Extract categories from metadata
37- const categories = React . useMemo ( ( ) => {
38+ const categories = React . useMemo ( ( ) : string [ ] => {
3839 if ( ! scriptCardsData ?. success || ! scriptCardsData . metadata ?. categories ) return [ ] ;
3940
4041 return ( scriptCardsData . metadata . categories as any [ ] )
@@ -45,11 +46,11 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
4546 } , [ scriptCardsData ] ) ;
4647
4748 // Get GitHub scripts with download status (deduplicated)
48- const combinedScripts = React . useMemo ( ( ) => {
49+ const combinedScripts = React . useMemo ( ( ) : ScriptCardType [ ] => {
4950 if ( ! scriptCardsData ?. success ) return [ ] ;
5051
5152 // Use Map to deduplicate by slug/name
52- const scriptMap = new Map ( ) ;
53+ const scriptMap = new Map < string , ScriptCardType > ( ) ;
5354
5455 scriptCardsData . cards ?. forEach ( script => {
5556 if ( script ?. name && script ?. slug ) {
@@ -69,7 +70,7 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
6970 } , [ scriptCardsData ] ) ;
7071
7172 // Count scripts per category (using deduplicated scripts)
72- const categoryCounts = React . useMemo ( ( ) => {
73+ const categoryCounts = React . useMemo ( ( ) : Record < string , number > => {
7374 if ( ! scriptCardsData ?. success ) return { } ;
7475
7576 const counts : Record < string , number > = { } ;
@@ -83,8 +84,8 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
8384 combinedScripts . forEach ( script => {
8485 if ( script . categoryNames && script . slug ) {
8586 const countedCategories = new Set < string > ( ) ;
86- script . categoryNames . forEach ( ( categoryName : any ) => {
87- if ( categoryName && counts [ categoryName ] !== undefined && ! countedCategories . has ( categoryName ) ) {
87+ script . categoryNames . forEach ( ( categoryName : unknown ) => {
88+ if ( typeof categoryName === 'string' && counts [ categoryName ] !== undefined && ! countedCategories . has ( categoryName ) ) {
8889 countedCategories . add ( categoryName ) ;
8990 counts [ categoryName ] ++ ;
9091 }
@@ -93,11 +94,11 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
9394 } ) ;
9495
9596 return counts ;
96- } , [ categories , combinedScripts ] ) ;
97+ } , [ categories , combinedScripts , scriptCardsData ?. success ] ) ;
9798
9899
99100 // Update scripts with download status
100- const scriptsWithStatus = React . useMemo ( ( ) => {
101+ const scriptsWithStatus = React . useMemo ( ( ) : ScriptCardType [ ] => {
101102 return combinedScripts . map ( script => {
102103 if ( ! script ?. name ) {
103104 return script ; // Return as-is if invalid
@@ -120,7 +121,7 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
120121 } , [ combinedScripts , localScriptsData ] ) ;
121122
122123 // Filter scripts based on all filters and category
123- const filteredScripts = React . useMemo ( ( ) => {
124+ const filteredScripts = React . useMemo ( ( ) : ScriptCardType [ ] => {
124125 let scripts = scriptsWithStatus ;
125126
126127 // Filter by search query (use filters.searchQuery instead of deprecated searchQuery)
@@ -136,7 +137,7 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
136137 const name = ( script . name ?? '' ) . toLowerCase ( ) ;
137138 const slug = ( script . slug ?? '' ) . toLowerCase ( ) ;
138139
139- return name . includes ( query ) || slug . includes ( query ) ;
140+ return name . includes ( query ) ?? slug . includes ( query ) ;
140141 } ) ;
141142 }
142143 }
0 commit comments