@@ -2,6 +2,7 @@ import {createContext, type PropsWithChildren, useContext, useMemo} from 'react'
22import { useRequireAnchor } from './RequireAnchorContext'
33import { useRequireJpCoats } from './RequireJpCoatsContext'
44import { useRequireCosmo } from './contexts/cosmo-context'
5+ import { useSearchContext } from './contexts/search-context'
56import dmcNamedColorCodes from './assets/dmc-color-codes-names.json'
67import dmcNewJpCoatsColors from './assets/dmc-old-new-jp-coats-colors.json'
78import dmcCosmoColors from './assets/dmc-cosmo-colors.json'
@@ -20,6 +21,7 @@ export function ColorsProvider({children}: PropsWithChildren) {
2021 const { requireJpCoats} = useRequireJpCoats ( )
2122 const { requireCosmo} = useRequireCosmo ( )
2223 const { sortOption} = useSort ( )
24+ const { query, field} = useSearchContext ( )
2325 const dataByDmcCode = useMemo < Record < string , EmbroideryFlossColor > > ( ( ) => {
2426 const result : Record < string , EmbroideryFlossColor > = { }
2527 dmcNamedColorCodes . forEach ( data => {
@@ -50,19 +52,42 @@ export function ColorsProvider({children}: PropsWithChildren) {
5052 const contextProps = useMemo (
5153 ( ) => ( {
5254 colors : colors
53- . filter ( ( { anchorCode, cosmoCodes, jpCoatsOld, jpCoatsNew} ) => {
55+ . filter ( ( { anchorCode, cosmoCodes, jpCoatsOld, jpCoatsNew, dmcCode , dmcName } ) => {
5456 if ( requireAnchor && anchorCode === undefined ) return false
5557 if ( requireJpCoats && jpCoatsOld === undefined && jpCoatsNew === undefined ) {
5658 return false
5759 }
5860 if ( requireCosmo && ( cosmoCodes === undefined || cosmoCodes . length < 1 ) ) {
5961 return false
6062 }
63+ if ( query . trim ( ) !== '' ) {
64+ switch ( field ) {
65+ case 'dmcCode' :
66+ if ( ! dmcCode . startsWith ( query ) ) return false
67+ break
68+ case 'dmcName' :
69+ if ( ! dmcName . startsWith ( query ) ) return false
70+ break
71+ case 'anchor' :
72+ if ( anchorCode === undefined || ! anchorCode . startsWith ( query ) ) return false
73+ break
74+ case 'cosmo' :
75+ if ( cosmoCodes === undefined || cosmoCodes . length < 1 ) return false
76+ if ( ! cosmoCodes . some ( c => c . startsWith ( query ) ) ) return false
77+ break
78+ case 'jpcNew' :
79+ if ( jpCoatsNew === undefined || ! jpCoatsNew . startsWith ( query ) ) return false
80+ break
81+ case 'jpcOld' :
82+ if ( jpCoatsOld === undefined || ! jpCoatsOld . startsWith ( query ) ) return false
83+ break
84+ }
85+ }
6186 return true
6287 } )
6388 . sort ( colorCompareFunction ( sortOption ) ) ,
6489 } ) ,
65- [ colors , requireAnchor , requireCosmo , requireJpCoats , sortOption ]
90+ [ colors , field , query , requireAnchor , requireCosmo , requireJpCoats , sortOption ]
6691 )
6792 return < ColorsContext . Provider value = { contextProps } > { children } </ ColorsContext . Provider >
6893}
0 commit comments