leumas-universal-crud-react
Version:
Leumas Universal CRUD to a dynamic Endpoint, Setup your own Dynamic Endpoint and Use Leumas API to send to your MONGO clusters
75 lines (63 loc) • 2.53 kB
JSX
import { useState, useEffect } from 'react';
import { editItem } from "./UniversalCrudHelpers";
import { AtomSpinner } from 'react-epic-spinners';
import { glassmorphic, neuromorphicInput2 } from "../../styles/tailwindStyles";
import {LeumasBaseStyle} from "../../styles/baseStyles.js"
const EditItem = ({ model, id, endpoint, data: propData , token }) => {
const [formData, setFormData] = useState({
model: model || "Endpoint",
id: id || '',
endpoint: "LeumasAPI",
data: propData || {}
});
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
if (!token) {
// Handle unauthenticated scenario here
}
}, [token]);
const handleChange = (e) => {
setFormData(prevState => ({ ...prevState, [e.target.name]: e.target.value }));
}
const handleEdit = async () => {
setIsLoading(true);
setError(null);
console.log("form data to submit " , formData)
try {
const editedItem = await editItem(formData.model, formData.id, formData.data, formData.endpoint, token);
setIsLoading(false);
console.log(editedItem);
} catch (error) {
setIsLoading(false);
setError("Failed to edit the item.");
console.error("Failed to edit the item:", error);
}
};
return (
<div className='flex flex-col gap-2'>
{
(!model || !id || !endpoint || !propData) && (
<div className={glassmorphic + " p-4 space-y-4 max-w-xs text-xs"}>
<input className={neuromorphicInput2} name="model" placeholder="Model" value={formData.model} onChange={handleChange} />
<input className={neuromorphicInput2} name="id" placeholder="ID" value={formData.id} onChange={handleChange} />
<input className={neuromorphicInput2} name="endpoint" placeholder="Endpoint" value={formData.endpoint} onChange={handleChange} />
<input className={neuromorphicInput2} name="data" placeholder="Data" value={formData.data} onChange={handleChange} />
</div>
)
}
<button className={LeumasBaseStyle} onClick={handleEdit}>Edit</button>
{isLoading && (
<div className="mt-4 flex justify-center">
<AtomSpinner color="blue" />
</div>
)}
{error && (
<div className="mt-4 bg-red-200 text-red-700 p-3 rounded-md">
{error}
</div>
)}
</div>
)
}
export default EditItem;