From 29b87cafae3e36a43978b16dd170749bbd2a0a6e Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 13 六月 2025 14:05:04 +0800
Subject: [PATCH] no message
---
rsf-admin/src/page/components/EditableTextField.jsx | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/rsf-admin/src/page/components/EditableTextField.jsx b/rsf-admin/src/page/components/EditableTextField.jsx
new file mode 100644
index 0000000..696d51c
--- /dev/null
+++ b/rsf-admin/src/page/components/EditableTextField.jsx
@@ -0,0 +1,48 @@
+import { TextField, useUpdate, useNotify, useRefresh, useRecordContext, useTranslate, useGetResourceLabel } from 'react-admin';
+import { TextField as MuiTextField } from '@mui/material';
+import { useState } from 'react';
+
+const EditableTextField = ({ source, label, resource, isBlur }) => {
+ const record = useRecordContext();
+ const translate = useTranslate();
+ const [value, setValue] = useState(record[source]);
+ const [update] = useUpdate();
+ const notify = useNotify();
+ const refresh = useRefresh();
+ label = label ? label : ""
+ isBlur = isBlur == undefined ? false : isBlur
+
+ const handleBlur = () => {
+ isBlur ?
+ update(
+ resource,
+ { id: record.id, data: { [source]: value } },
+ {
+ onSuccess: () => {
+ const succ = translate('common.action.updateSucc')
+ notify(succ, { type: 'success' });
+ refresh();
+ },
+ onError: () => {
+ const failed = translate('common.action.updateSucc')
+ notify(failed, { type: 'error' });
+ setValue(record[source]);
+ }
+ }
+ ) :
+ {}
+ };
+
+ return (
+ <MuiTextField
+ value={value}
+ onChange={(e) => setValue(e.target.value)}
+ label={translate(label)}
+ onBlur={handleBlur}
+ fullWidth
+ />
+ );
+};
+
+
+export default EditableTextField;
\ No newline at end of file
--
Gitblit v1.9.1