import { makeStyles } from '@mui/material/styles' import classnames from 'classnames' import { useFormikContext, Form, Formik, Field as FormikField } from 'formik' import * as R from 'ramda' import React, { useState, memo } from 'react' import PromptWhenDirty from 'src/components/PromptWhenDirty' import { H4 } from 'src/components/typography' import EditIconDisabled from 'src/styling/icons/action/edit/disabled.svg?react' import EditIcon from 'src/styling/icons/action/edit/enabled.svg?react' import FalseIcon from 'src/styling/icons/table/false.svg?react' import TrueIcon from 'src/styling/icons/table/true.svg?react' import * as Yup from 'yup' import { Link, IconButton } from 'src/components/buttons' import { RadioGroup } from 'src/components/inputs/formik' import { Table, TableBody, TableRow, TableCell } from 'src/components/table' import { booleanPropertiesTableStyles } from './BooleanPropertiesTable.styles' const useStyles = makeStyles(booleanPropertiesTableStyles) const BooleanCell = ({ name }) => { const { values } = useFormikContext() return values[name] === 'true' ? : } const BooleanPropertiesTable = memo( ({ title, disabled, data, elements, save, forcedEditing = false }) => { 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 [editing, setEditing] = useState(forcedEditing) const classes = useStyles() 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