@@ -25,6 +25,12 @@ type Props<T> = {
2525
2626type PublicCodeData = PublicCode | PublicCodeWithDeprecatedFields ;
2727
28+ function filterValidValues ( value : string [ ] | undefined , data : Array < { value : string ; text : string } > ) : string [ ] {
29+ if ( ! value || ! Array . isArray ( value ) ) return [ ] ;
30+ const validValues = data . map ( item => item . value ) ;
31+ return value . filter ( val => validValues . includes ( val ) ) ;
32+ }
33+
2834export default function EditorMultiselect <
2935 T extends FieldPathByValue < RequiredDeep < PublicCodeData > , Array < string > >
3036> ( { fieldName, required, data, filter, deprecated } : Props < T > ) : JSX . Element {
@@ -38,6 +44,14 @@ export default function EditorMultiselect<
3844 } ) ;
3945 const { t } = useTranslation ( ) ;
4046
47+ const filteredValue = filterValidValues ( value , data ) ;
48+
49+ useEffect ( ( ) => {
50+ if ( value && Array . isArray ( value ) && filteredValue . length !== value . length ) {
51+ onChange ( filteredValue ) ;
52+ }
53+ } , [ value , filteredValue , onChange ] ) ;
54+
4155 const label = t ( `publiccodeyml.${ fieldName } .label` ) ;
4256 const description = t ( `publiccodeyml.${ fieldName } .description` ) ;
4357 const errorMessage = get ( errors , `${ fieldName } .message` ) ;
@@ -82,7 +96,7 @@ export default function EditorMultiselect<
8296 id = { fieldName }
8397 onBlur = { onBlur }
8498 onChange = { ( arr ) => onChange ( arr . map ( ( e ) => e . value ) ) }
85- value = { value }
99+ value = { filteredValue }
86100 data = { data }
87101 dataKey = "value"
88102 textField = "text"
0 commit comments