lamassu-server/packages/admin-ui/src/pages/Customers/components/notes/NoteEdit.jsx
2025-05-12 14:55:22 +01:00

98 lines
2.9 KiB
JavaScript

import Paper from '@mui/material/Paper'
import { formatDurationWithOptions, intervalToDuration } from 'date-fns/fp'
import { Form, Formik, Field } from 'formik'
import { React, useRef } from 'react'
import { P } from 'src/components/typography'
import CancelIconInverse from 'src/styling/icons/button/cancel/white.svg?react'
import CancelIcon from 'src/styling/icons/button/cancel/zodiac.svg?react'
import SaveIconInverse from 'src/styling/icons/circle buttons/save/white.svg?react'
import SaveIcon from 'src/styling/icons/circle buttons/save/zodiac.svg?react'
import * as Yup from 'yup'
import { ActionButton } from 'src/components/buttons'
import { TextInput } from 'src/components/inputs/formik'
import { toTimezone } from 'src/utils/timezones'
const NoteEdit = ({ note, cancel, edit, timezone }) => {
const formRef = useRef()
const validationSchema = Yup.object().shape({
content: Yup.string(),
})
const initialValues = {
content: note.content,
}
return (
<Paper className="p-4">
<div className="flex flex-row justify-between items-center mb-4">
<P noMargin>
{`Last edited `}
{formatDurationWithOptions(
{ delimited: ', ' },
intervalToDuration({
start: toTimezone(new Date(note.lastEditedAt), timezone),
end: toTimezone(new Date(), timezone),
}),
)}
{` ago`}
</P>
<div className="flex flex-row items-center gap-2">
<ActionButton
color="primary"
type="button"
Icon={CancelIcon}
InverseIcon={CancelIconInverse}
onClick={cancel}>
{`Cancel`}
</ActionButton>
<ActionButton
color="primary"
type="submit"
form="edit-note"
Icon={SaveIcon}
InverseIcon={SaveIconInverse}>
{`Save changes`}
</ActionButton>
<ActionButton
color="primary"
type="button"
Icon={CancelIcon}
InverseIcon={CancelIconInverse}
onClick={() => formRef.current.setFieldValue('content', '')}>
{`Clear content`}
</ActionButton>
</div>
</div>
<Formik
validateOnChange={false}
validateOnBlur={false}
validationSchema={validationSchema}
initialValues={initialValues}
onSubmit={({ content }) =>
edit({
noteId: note.id,
newContent: content,
oldContent: note.content,
})
}
innerRef={formRef}>
<Form id="edit-note">
<Field
name="content"
component={TextInput}
InputProps={{ disableUnderline: true }}
size="sm"
autoComplete="off"
fullWidth
multiline={true}
rows={15}
/>
</Form>
</Formik>
</Paper>
)
}
export default NoteEdit