| import React, { useState, useRef, useEffect, useMemo } from "react"; | 
| import { | 
|     Edit, | 
|     SimpleForm, | 
|     FormDataConsumer, | 
|     useTranslate, | 
|     TextInput, | 
|     NumberInput, | 
|     BooleanInput, | 
|     DateInput, | 
|     SelectInput, | 
|     ReferenceInput, | 
|     ReferenceArrayInput, | 
|     AutocompleteInput, | 
|     SaveButton, | 
|     Toolbar, | 
|     Labeled, | 
|     NumberField, | 
|     required, | 
|     useRecordContext, | 
|     DeleteButton, | 
| } from 'react-admin'; | 
| import { useWatch, useFormContext } from "react-hook-form"; | 
| import { Stack, Grid, Box, Typography } from '@mui/material'; | 
| import * as Common from '@/utils/common'; | 
| import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; | 
| import EditBaseAside from "@/page/components/EditBaseAside"; | 
| import CustomerTopToolBar from "@/page/components/EditTopToolBar"; | 
| import MemoInput from "@/page/components/MemoInput"; | 
| import StatusSelectInput from "@/page/components/StatusSelectInput"; | 
|   | 
| const FormToolbar = () => { | 
|     const { getValues } = useFormContext(); | 
|   | 
|     return ( | 
|         <Toolbar sx={{ justifyContent: 'space-between' }}> | 
|             <SaveButton /> | 
|             <DeleteButton mutationMode="optimistic" /> | 
|         </Toolbar> | 
|     ) | 
| } | 
|   | 
| const OperationRecordEdit = () => { | 
|     const translate = useTranslate(); | 
|   | 
|     return ( | 
|         <Edit | 
|             redirect="list" | 
|             mutationMode={EDIT_MODE} | 
|             actions={<CustomerTopToolBar />} | 
|             aside={<EditBaseAside />} | 
|         > | 
|             <SimpleForm | 
|                 shouldUnregister | 
|                 warnWhenUnsavedChanges | 
|                 toolbar={<FormToolbar />} | 
|                 mode="onTouched" | 
|                 defaultValues={{}} | 
|             // validate={(values) => { }} | 
|             > | 
|                 <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> | 
|                     <Grid item xs={12} md={8}> | 
|                         <Typography variant="h6" gutterBottom> | 
|                             {translate('common.edit.title.main')} | 
|                         </Typography> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.namespace" | 
|                                 source="namespace" | 
|                                 parse={v => v} | 
|                                 autoFocus | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.url" | 
|                                 source="url" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.appkey" | 
|                                 source="appkey" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.timestamp" | 
|                                 source="timestamp" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.clientIp" | 
|                                 source="clientIp" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.request" | 
|                                 source="request" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.response" | 
|                                 source="response" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <NumberInput | 
|                                 label="table.field.operationRecord.spendTime" | 
|                                 source="spendTime" | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <TextInput | 
|                                 label="table.field.operationRecord.err" | 
|                                 source="err" | 
|                                 parse={v => v} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <SelectInput | 
|                                 label="table.field.operationRecord.result" | 
|                                 source="result" | 
|                                 choices={[ | 
|                                     { id: 1, name: '成功' }, | 
|                                     { id: 0, name: '失败' }, | 
|                                 ]} | 
|                             /> | 
|                         </Stack> | 
|                         <Stack direction='row' gap={2}> | 
|                             <ReferenceInput | 
|                                 source="userId" | 
|                                 reference="user" | 
|                                 perPage={REFERENCE_INPUT_PAGESIZE} | 
|                             > | 
|                                 <AutocompleteInput | 
|                                     label="table.field.operationRecord.userId" | 
|                                     optionText="nickname" | 
|                                     filterToQuery={(val) => ({ nickname: val })} | 
|                                 /> | 
|                             </ReferenceInput> | 
|                         </Stack> | 
|   | 
|                     </Grid> | 
|                     <Grid item xs={12} md={4}> | 
|                         <Typography variant="h6" gutterBottom> | 
|                             {translate('common.edit.title.common')} | 
|                         </Typography> | 
|                         <StatusSelectInput /> | 
|                         <Box mt="2em" /> | 
|                         <MemoInput /> | 
|                     </Grid> | 
|                 </Grid> | 
|             </SimpleForm> | 
|         </Edit > | 
|     ) | 
| } | 
|   | 
| export default OperationRecordEdit; |