selectList supports array of objects instead of object

This commit is contained in:
Amit Fainholts
2022-01-27 11:40:38 +02:00
parent b73bb69491
commit 5aa16eaf56
2 changed files with 31 additions and 24 deletions

View File

@@ -39,7 +39,7 @@ export const AddUserModal: FC<AddUserModalProps> = ({isOpen, onCloseModal, userD
useEffect(() => { useEffect(() => {
(async () => { (async () => {
try { try {
const workspacesList = {"default":true} //await api.getWorkspaces() const workspacesList = [{"default":true}] //await api.getWorkspaces()
setWorkspaces(workspacesList) setWorkspaces(workspacesList)
} catch (e) { } catch (e) {
@@ -75,7 +75,8 @@ export const AddUserModal: FC<AddUserModalProps> = ({isOpen, onCloseModal, userD
const generateLink = () => { const generateLink = () => {
try { try {
api.genareteInviteLink(userDataModel) api.genareteInviteLink(userDataModel)
console.log(workspaces);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }

View File

@@ -12,58 +12,64 @@ export interface Props {
tabelClassName tabelClassName
} }
const SelectList: React.FC<Props> = ({valuesListInput,tableName,multiSelect=true,searchValue="",setValues,tabelClassName}) => { export type ValuesListInput = {
const [valuesList, setValuesList] = useState(valuesListInput); key: string;
value: string;
isChecked: boolean;
}[]
const toggleValues = (value) => { const SelectList: React.FC<Props> = ({valuesListInput ,tableName,multiSelect=true,searchValue="",setValues,tabelClassName}) => {
const [valuesList, setValuesList] = useState(valuesListInput as ValuesListInput);
const toggleValues = (checkedKey) => {
if (!multiSelect){ if (!multiSelect){
unToggleAll(value); unToggleAll(checkedKey);
} }
else { else {
const newValues = {...valuesList}; const newValues: ValuesListInput = [...valuesList];
newValues[value] = !valuesList[value]; newValues[checkedKey].isChecked = !valuesList[checkedKey].isChecked;
setValuesList(newValues); setValuesList(newValues);
setValues(newValues); setValues(newValues);
} }
} }
const unToggleAll = (value) => { const unToggleAll = (checkedKey) => {
const newValues = {}; const newValues = [];
Object.keys(valuesList).forEach(key => { valuesList.forEach(valueList => {
if (key !== value) if (valueList.key !== checkedKey)
newValues[key] = false; newValues[checkedKey] = false;
else else
newValues[key] = true; newValues[checkedKey] = true;
}) })
setValuesList(newValues); setValuesList(newValues);
setValues(newValues); setValues(newValues);
} }
const toggleAll = () => { const toggleAll = () => {
const isChecked = Object.values(valuesList).every(tap => tap === true); const isChecked = valuesList.every(valueTap => valueTap.isChecked === true);
setAllCheckedValue(!isChecked); setAllCheckedValue(!isChecked);
} }
const setAllCheckedValue = (isTap: boolean) => { const setAllCheckedValue = (isTap: boolean) => {
const newValues = {}; const newValues = [];
Object.keys(valuesList).forEach(key => { valuesList.forEach(valueList => {
newValues[key] = isTap; newValues[valueList.key] = isTap;
}) })
setValuesList(newValues); setValuesList(newValues);
setValues(newValues); setValues(newValues);
} }
const tableHead = multiSelect ? <tr style={{borderBottomWidth: "2px"}}> const tableHead = multiSelect ? <tr style={{borderBottomWidth: "2px"}}>
<th style={{width: 50}}><Checkbox checked={Object.values(valuesList).every(tap => tap === true)} <th style={{width: 50}}><Checkbox checked={valuesList.every(valueTap => valueTap.isChecked === false)}
onToggle={toggleAll}/></th> onToggle={toggleAll}/></th>
<th>{tableName}</th> <th>{tableName}</th>
</tr> : </tr> :
<tr style={{borderBottomWidth: "2px"}}> <tr style={{borderBottomWidth: "2px"}}>
<th>{tableName}</th> <th>{tableName}</th>
</tr> </tr>
const filteredValues = useMemo(() => { const filteredValues = useMemo(() => {
return Object.keys(valuesList).filter((listValue) => listValue.includes(searchValue)); return valuesList.filter((listValue) => listValue.value.includes(searchValue));
},[valuesList, searchValue]) },[valuesList, searchValue])
return <div className={tabelClassName + " select-list-table"}> return <div className={tabelClassName + " select-list-table"}>
@@ -73,10 +79,10 @@ const SelectList: React.FC<Props> = ({valuesListInput,tableName,multiSelect=true
</thead> </thead>
<tbody> <tbody>
{filteredValues?.map(listValue => { {filteredValues?.map(listValue => {
return <tr key={listValue}> return <tr key={listValue.key}>
<td style={{width: 50}}> <td style={{width: 50}}>
{multiSelect && <Checkbox checked={valuesList[listValue]} onToggle={() => toggleValues(listValue)}/>} {multiSelect && <Checkbox checked={valuesList[listValue.key].isChecked} onToggle={() => toggleValues(listValue.key)}/>}
{!multiSelect && <Radio checked={valuesList[listValue]} onToggle={() => toggleValues(listValue)}/>} {!multiSelect && <Radio checked={valuesList[listValue.key].isChecked} onToggle={() => toggleValues(listValue.key)}/>}
</td> </td>
<td>{listValue}</td> <td>{listValue}</td>
</tr> </tr>