From cbd2659f984ec89d1c8e160f6104550756a19959 Mon Sep 17 00:00:00 2001 From: jorgemike Date: Tue, 1 Apr 2025 10:13:32 -0600 Subject: [PATCH] fix components --- src/components/checkbox-option-group.tsx | 60 ++++++++++++++---------- src/components/radio-option-group.tsx | 4 +- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/components/checkbox-option-group.tsx b/src/components/checkbox-option-group.tsx index c4464d0..ccaf435 100644 --- a/src/components/checkbox-option-group.tsx +++ b/src/components/checkbox-option-group.tsx @@ -1,46 +1,58 @@ import React from "react"; -export interface RadioOption { +export interface CheckboxOption { label: string; value: T; disabled?: boolean; } -interface RadioOptionGroupProps { +interface CheckboxOptionGroupProps { name: string; - options: RadioOption[]; - selectedValue?: T; - onChange: (option: RadioOption) => void; + options: CheckboxOption[]; + selectedValues: T[]; + onChange: (option: CheckboxOption) => void; + maxSelected?: number; disabled?: boolean; className?: string; } -export default function RadioOptionGroup({ +export default function CheckboxOptionGroup({ name, options, - selectedValue, + selectedValues, onChange, + maxSelected, disabled = false, className = "", -}: RadioOptionGroupProps) { +}: CheckboxOptionGroupProps) { + const isSelected = (value: T) => selectedValues.includes(value); + return (
- {options.map((option, index) => ( - - ))} + {options.map((option, index) => { + const checked = isSelected(option.value); + const limitReached = + maxSelected !== undefined && + selectedValues.length >= maxSelected && + !checked; + + return ( + + ); + })}
); } diff --git a/src/components/radio-option-group.tsx b/src/components/radio-option-group.tsx index cc2bc2c..c4464d0 100644 --- a/src/components/radio-option-group.tsx +++ b/src/components/radio-option-group.tsx @@ -10,7 +10,7 @@ interface RadioOptionGroupProps { name: string; options: RadioOption[]; selectedValue?: T; - onChange: (value: T) => void; + onChange: (option: RadioOption) => void; disabled?: boolean; className?: string; } @@ -36,7 +36,7 @@ export default function RadioOptionGroup({ className="form-check-input me-2" disabled={disabled || option.disabled} checked={option.value === selectedValue} - onChange={() => onChange(option.value)} + onChange={() => onChange(option)} /> {option.label}