Skip to content

Commit 7eb487c

Browse files
committed
fix/517: checks on invalid categories
1 parent 8b3656e commit 7eb487c

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/app/components/EditorMultiselect.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ type Props<T> = {
2525

2626
type 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+
2834
export 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"

src/app/linter/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@ import PublicCode, {
1616
defaultPiattaforme,
1717
defaultRiuso,
1818
} from "../contents/publiccode";
19+
import categories from "../contents/categories";
1920
import { removeEmpty } from "./remove-empty";
2021

22+
function validateCategories(categoriesArray: string[]): string[] {
23+
return categoriesArray.filter(category => categories.includes(category as any));
24+
}
25+
2126
function sortDescription({
2227
genericName,
2328
localisedName,
@@ -79,7 +84,7 @@ export default function linter({
7984
releaseDate,
8085
logo,
8186
platforms: clone(platforms),
82-
categories: clone(categories),
87+
categories: validateCategories(categories) as (typeof categories)[number][],
8388
usedBy: clone(usedBy),
8489
roadmap,
8590
developmentStatus,

0 commit comments

Comments
 (0)