import IconButton from '@mui/material/IconButton' import { useFormikContext, Form, Formik, Field as FormikField } from 'formik' import * as R from 'ramda' import React, { useState, memo } from 'react' import PromptWhenDirty from '../PromptWhenDirty' import { H4 } from '../typography' import EditIconDisabled from '../../styling/icons/action/edit/disabled.svg?react' import EditIcon from '../../styling/icons/action/edit/enabled.svg?react' import FalseIcon from '../../styling/icons/table/false.svg?react' import TrueIcon from '../../styling/icons/table/true.svg?react' import * as Yup from 'yup' import { Link } from '../buttons' import { RadioGroup } from '../inputs/formik' import { Table, TableBody, TableRow, TableCell } from '../table' import SvgIcon from '@mui/material/SvgIcon' const BooleanCell = ({ name }) => { const { values } = useFormikContext() return values[name] === 'true' ? : } const BooleanPropertiesTable = memo( ({ title, disabled, data, elements, save, forcedEditing = false }) => { const [editing, setEditing] = useState(forcedEditing) const initialValues = R.fromPairs( elements.map(it => [it.name, data[it.name]?.toString() ?? 'false']), ) const validationSchema = Yup.object().shape( R.fromPairs( elements.map(it => [ it.name, Yup.mixed().oneOf(['true', 'false', true, false]).required(), ]), ), ) const innerSave = async values => { const toBoolean = num => R.equals(num, 'true') save(R.mapObjIndexed(toBoolean, R.filter(R.complement(R.isNil))(values))) setEditing(false) } const radioButtonOptions = [ { display: 'Yes', code: 'true' }, { display: 'No', code: 'false' }, ] return (
{({ resetForm }) => { return (

{title}

{editing ? (
Save { resetForm() setEditing(false) }} color="secondary"> Cancel
) : ( setEditing(true)}> {disabled ? : } )}
{elements.map((it, idx) => ( {it.display} {editing && ( )} {!editing && } ))}
) }}
) }, ) export default BooleanPropertiesTable