build_app
This commit is contained in:
parent
244ff6d140
commit
9cc0007aed
|
@ -46,6 +46,9 @@ public class BuilderService {
|
||||||
public void callotherService() {
|
public void callotherService() {
|
||||||
|
|
||||||
// ADD OTHER SERVICE
|
// ADD OTHER SERVICE
|
||||||
|
addCustomMenu( "Test1", "Transcations");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
package com.realnet.test1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.test1.Entity.Test1;
|
||||||
|
import com.realnet.test1.Services.Test1Service ;
|
||||||
|
@RequestMapping(value = "/Test1")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class Test1Controller {
|
||||||
|
@Autowired
|
||||||
|
private Test1Service Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Test1")
|
||||||
|
public Test1 Savedata(@RequestBody Test1 data) {
|
||||||
|
Test1 save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Test1/{id}")
|
||||||
|
public Test1 update(@RequestBody Test1 data,@PathVariable Integer id ) {
|
||||||
|
Test1 update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Test1/getall/page")
|
||||||
|
public Page<Test1> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Test1> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Test1")
|
||||||
|
public List<Test1> getdetails() {
|
||||||
|
List<Test1> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Test1")
|
||||||
|
public List<Test1> getallwioutsec() {
|
||||||
|
List<Test1> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Test1/{id}")
|
||||||
|
public Test1 getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Test1 get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Test1/{id}")
|
||||||
|
public void delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.realnet.test1.Entity;
|
||||||
|
import lombok.*;
|
||||||
|
import com.realnet.WhoColumn.Extension;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Data
|
||||||
|
public class Test1 extends Extension {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String namemm;
|
||||||
|
|
||||||
|
@Column(length = 2000)
|
||||||
|
private String descriptionmm;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.realnet.test1.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.test1.Entity.Test1;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface Test1Repository extends JpaRepository<Test1, Integer> {
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.realnet.test1.Services;
|
||||||
|
import com.realnet.test1.Repository.Test1Repository;
|
||||||
|
import com.realnet.test1.Entity.Test1;import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import com.realnet.SequenceGenerator.Service.SequenceService;
|
||||||
|
import com.realnet.Notification.Entity.NotificationService;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class Test1Service {
|
||||||
|
@Autowired
|
||||||
|
private Test1Repository Repository;
|
||||||
|
@Autowired
|
||||||
|
private AppUserServiceImpl userService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Test1 Savedata(Test1 data) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Test1 save = Repository.save(data);
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get all with pagination
|
||||||
|
public Page<Test1> getAllWithPagination(Pageable page) {
|
||||||
|
return Repository.findAll(page);
|
||||||
|
}
|
||||||
|
public List<Test1> getdetails() {
|
||||||
|
return (List<Test1>) Repository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Test1 getdetailsbyId(Integer id) {
|
||||||
|
return Repository.findById(id).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void delete_by_id(Integer id) {
|
||||||
|
Repository.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Test1 update(Test1 data,Integer id) {
|
||||||
|
Test1 old = Repository.findById(id).get();
|
||||||
|
old.setNamemm(data.getNamemm());
|
||||||
|
|
||||||
|
old.setDescriptionmm(data.getDescriptionmm());
|
||||||
|
|
||||||
|
final Test1 test = Repository.save(old);
|
||||||
|
return test;}
|
||||||
|
public AppUser getUser() {
|
||||||
|
AppUser user = userService.getLoggedInUser();
|
||||||
|
return user;
|
||||||
|
|
||||||
|
}}
|
|
@ -0,0 +1,2 @@
|
||||||
|
CREATE TABLE db.Test1(id BIGINT NOT NULL AUTO_INCREMENT, Namemm VARCHAR(400), Descriptionmm VARCHAR(400), PRIMARY KEY (id));
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import Test1 from "./components/BuilderComponents/test1/Test1/Test1";
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { Routes, Route } from "react-router-dom";
|
import { Routes, Route } from "react-router-dom";
|
||||||
import { BrowserRouter as Router } from 'react-router-dom';
|
import { BrowserRouter as Router } from 'react-router-dom';
|
||||||
|
@ -41,6 +43,9 @@ const App = () => {
|
||||||
|
|
||||||
|
|
||||||
{/* buildercomponents */}
|
{/* buildercomponents */}
|
||||||
|
<Route path="/Test1" element={<Test1 />} />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</Routes>
|
</Routes>
|
||||||
|
|
|
@ -0,0 +1,733 @@
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import axios from "axios";
|
||||||
|
import {
|
||||||
|
Button,
|
||||||
|
Dialog,
|
||||||
|
DialogActions,
|
||||||
|
DialogContent,
|
||||||
|
DialogTitle,
|
||||||
|
Snackbar,
|
||||||
|
Alert,
|
||||||
|
Typography,
|
||||||
|
TextField,
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableContainer,
|
||||||
|
TableHead,
|
||||||
|
TableRow,
|
||||||
|
TablePagination,
|
||||||
|
Paper,
|
||||||
|
IconButton,
|
||||||
|
InputAdornment,
|
||||||
|
} from "@mui/material";
|
||||||
|
import { makeStyles } from "@mui/styles";
|
||||||
|
import SearchIcon from "@mui/icons-material/Search";
|
||||||
|
|
||||||
|
const API_URL = `${process.env.REACT_APP_API_URL}/Testrm5/Testrm5`;
|
||||||
|
const token = localStorage.getItem("authToken");
|
||||||
|
// Custom styles using makeStyles
|
||||||
|
const useStyles = makeStyles((theme) => ({
|
||||||
|
tableHeader: {
|
||||||
|
backgroundColor: "#000000",
|
||||||
|
color: "#ffffff",
|
||||||
|
},
|
||||||
|
searchContainer: {
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
},
|
||||||
|
searchInput: {
|
||||||
|
marginRight: theme.spacing(2),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
tableContainer: {
|
||||||
|
marginTop: theme.spacing(2),
|
||||||
|
},
|
||||||
|
dialogContent: {
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
gap: theme.spacing(2),
|
||||||
|
},
|
||||||
|
formControl: {
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
margin: theme.spacing(1),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
const EntityTable = () => {
|
||||||
|
const classes = useStyles();
|
||||||
|
const [data, setData] = useState([]);
|
||||||
|
const [filteredData, setFilteredData] = useState([]);
|
||||||
|
const [newEntity, setNewEntity] = useState({
|
||||||
|
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import axios from "axios";
|
||||||
|
import {
|
||||||
|
Button,
|
||||||
|
Dialog,
|
||||||
|
DialogActions,
|
||||||
|
DialogContent,
|
||||||
|
DialogTitle,
|
||||||
|
Snackbar,
|
||||||
|
Alert,
|
||||||
|
Typography,
|
||||||
|
TextField,
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableContainer,
|
||||||
|
TableHead,
|
||||||
|
TableRow,
|
||||||
|
TablePagination,
|
||||||
|
Paper,
|
||||||
|
IconButton,
|
||||||
|
InputAdornment,
|
||||||
|
} from "@mui/material";
|
||||||
|
import { makeStyles } from "@mui/styles";
|
||||||
|
import SearchIcon from "@mui/icons-material/Search";
|
||||||
|
|
||||||
|
const API_URL = `${process.env.REACT_APP_API_URL}/Testrm5/Testrm5`;
|
||||||
|
const token = localStorage.getItem("authToken");
|
||||||
|
// Custom styles using makeStyles
|
||||||
|
const useStyles = makeStyles((theme) => ({
|
||||||
|
tableHeader: {
|
||||||
|
backgroundColor: "#000000",
|
||||||
|
color: "#ffffff",
|
||||||
|
},
|
||||||
|
searchContainer: {
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
},
|
||||||
|
searchInput: {
|
||||||
|
marginRight: theme.spacing(2),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
tableContainer: {
|
||||||
|
marginTop: theme.spacing(2),
|
||||||
|
},
|
||||||
|
dialogContent: {
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
gap: theme.spacing(2),
|
||||||
|
},
|
||||||
|
formControl: {
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
margin: theme.spacing(1),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
const EntityTable = () => {
|
||||||
|
const classes = useStyles();
|
||||||
|
const [data, setData] = useState([]);
|
||||||
|
const [filteredData, setFilteredData] = useState([]);
|
||||||
|
const [newEntity, setNewEntity] = useState({
|
||||||
|
|
||||||
|
namemm: "",
|
||||||
|
|
||||||
|
descriptionmm: "",
|
||||||
|
|
||||||
|
});
|
||||||
|
const [editEntity, setEditEntity] = useState(null);
|
||||||
|
const [showEditModal, setShowEditModal] = useState(false);
|
||||||
|
const [showAddModal, setShowAddModal] = useState(false);
|
||||||
|
const [showDeleteModal, setShowDeleteModal] = useState(false);
|
||||||
|
const [deleteEntityId, setDeleteEntityId] = useState(null);
|
||||||
|
const [currentPage, setCurrentPage] = useState(0);
|
||||||
|
const [itemsPerPage] = useState(5); // Adjust this value as needed
|
||||||
|
const [searchQuery, setSearchQuery] = useState("");
|
||||||
|
const [openSnackbar, setOpenSnackbar] = useState(false);
|
||||||
|
const [snackbarMessage, setSnackbarMessage] = useState("");
|
||||||
|
const [snackbarSeverity, setSnackbarSeverity] = useState("success");
|
||||||
|
|
||||||
|
const handlePageChange = (event, newPage) => {
|
||||||
|
setCurrentPage(newPage);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetchData();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
handleSearch();
|
||||||
|
}, [searchQuery, data]);
|
||||||
|
|
||||||
|
const fetchData = async () => {
|
||||||
|
try {
|
||||||
|
const response = await axios.get(API_URL, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
setData(response.data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching data:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDelete = async () => {
|
||||||
|
try {
|
||||||
|
await axios.delete(`${API_URL}/${deleteEntityId}`, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setSnackbarMessage("Successfully deleted!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
setShowDeleteModal(false);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error deleting data:", error);
|
||||||
|
setSnackbarMessage("Failed to delete!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleAdd = async () => {
|
||||||
|
try {
|
||||||
|
await axios.post(API_URL, newEntity, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setNewEntity({
|
||||||
|
|
||||||
|
});
|
||||||
|
const [editEntity, setEditEntity] = useState(null);
|
||||||
|
const [showEditModal, setShowEditModal] = useState(false);
|
||||||
|
const [showAddModal, setShowAddModal] = useState(false);
|
||||||
|
const [showDeleteModal, setShowDeleteModal] = useState(false);
|
||||||
|
const [deleteEntityId, setDeleteEntityId] = useState(null);
|
||||||
|
const [currentPage, setCurrentPage] = useState(0);
|
||||||
|
const [itemsPerPage] = useState(5); // Adjust this value as needed
|
||||||
|
const [searchQuery, setSearchQuery] = useState("");
|
||||||
|
const [openSnackbar, setOpenSnackbar] = useState(false);
|
||||||
|
const [snackbarMessage, setSnackbarMessage] = useState("");
|
||||||
|
const [snackbarSeverity, setSnackbarSeverity] = useState("success");
|
||||||
|
|
||||||
|
const handlePageChange = (event, newPage) => {
|
||||||
|
setCurrentPage(newPage);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetchData();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
handleSearch();
|
||||||
|
}, [searchQuery, data]);
|
||||||
|
|
||||||
|
const fetchData = async () => {
|
||||||
|
try {
|
||||||
|
const response = await axios.get(API_URL, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
setData(response.data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching data:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDelete = async () => {
|
||||||
|
try {
|
||||||
|
await axios.delete(`${API_URL}/${deleteEntityId}`, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setSnackbarMessage("Successfully deleted!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
setShowDeleteModal(false);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error deleting data:", error);
|
||||||
|
setSnackbarMessage("Failed to delete!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleAdd = async () => {
|
||||||
|
try {
|
||||||
|
await axios.post(API_URL, newEntity, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setNewEntity({
|
||||||
|
|
||||||
|
namemm: "",
|
||||||
|
|
||||||
|
descriptionmm: "",
|
||||||
|
|
||||||
|
});
|
||||||
|
setShowAddModal(false);
|
||||||
|
setSnackbarMessage("Successfully added!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error adding data:", error);
|
||||||
|
setSnackbarMessage("Failed to add!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChange = (e) => {
|
||||||
|
const { name, value } = e.target;
|
||||||
|
setNewEntity({ ...newEntity, [name]: value });
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEditChange = (e) => {
|
||||||
|
const { name, value } = e.target;
|
||||||
|
setEditEntity({ ...editEntity, [name]: value });
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = (entity) => {
|
||||||
|
setEditEntity(entity);
|
||||||
|
setShowEditModal(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleUpdate = async () => {
|
||||||
|
try {
|
||||||
|
await axios.put(`${API_URL}/${editEntity.id}`, editEntity, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setShowEditModal(false);
|
||||||
|
setSnackbarMessage("Successfully updated!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error updating data:", error);
|
||||||
|
setSnackbarMessage("Failed to update!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSearch = () => {
|
||||||
|
const filtered = data.filter(
|
||||||
|
(entity) =>
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
setShowAddModal(false);
|
||||||
|
setSnackbarMessage("Successfully added!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error adding data:", error);
|
||||||
|
setSnackbarMessage("Failed to add!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChange = (e) => {
|
||||||
|
const { name, value } = e.target;
|
||||||
|
setNewEntity({ ...newEntity, [name]: value });
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEditChange = (e) => {
|
||||||
|
const { name, value } = e.target;
|
||||||
|
setEditEntity({ ...editEntity, [name]: value });
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = (entity) => {
|
||||||
|
setEditEntity(entity);
|
||||||
|
setShowEditModal(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleUpdate = async () => {
|
||||||
|
try {
|
||||||
|
await axios.put(`${API_URL}/${editEntity.id}`, editEntity, {
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
});
|
||||||
|
fetchData();
|
||||||
|
setShowEditModal(false);
|
||||||
|
setSnackbarMessage("Successfully updated!");
|
||||||
|
setSnackbarSeverity("success");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error updating data:", error);
|
||||||
|
setSnackbarMessage("Failed to update!");
|
||||||
|
setSnackbarSeverity("error");
|
||||||
|
setOpenSnackbar(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSearch = () => {
|
||||||
|
const filtered = data.filter(
|
||||||
|
(entity) =>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
entity.namemm.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
entity.descriptionmm.toLowerCase().includes(searchQuery.toLowerCase()) );
|
||||||
|
setFilteredData(filtered);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="container mt-5">
|
||||||
|
<Typography variant="h4" gutterBottom>
|
||||||
|
Entity Table
|
||||||
|
</Typography>
|
||||||
|
<div className={classes.searchContainer}>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="primary"
|
||||||
|
onClick={() => setShowAddModal(true)}
|
||||||
|
className={classes.button}
|
||||||
|
>
|
||||||
|
Add Entity
|
||||||
|
</Button>
|
||||||
|
<TextField
|
||||||
|
className={classes.searchInput}
|
||||||
|
label="Search"
|
||||||
|
variant="outlined"
|
||||||
|
size="small"
|
||||||
|
value={searchQuery}
|
||||||
|
onChange={(e) => setSearchQuery(e.target.value)}
|
||||||
|
InputProps={{
|
||||||
|
endAdornment: (
|
||||||
|
<InputAdornment position="end">
|
||||||
|
<IconButton>
|
||||||
|
<SearchIcon />
|
||||||
|
</IconButton>
|
||||||
|
</InputAdornment>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<TableContainer component={Paper} className={classes.tableContainer}>
|
||||||
|
<Table>
|
||||||
|
<TableHead>
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
|
||||||
|
);
|
||||||
|
setFilteredData(filtered);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="container mt-5">
|
||||||
|
<Typography variant="h4" gutterBottom>
|
||||||
|
Entity Table
|
||||||
|
</Typography>
|
||||||
|
<div className={classes.searchContainer}>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="primary"
|
||||||
|
onClick={() => setShowAddModal(true)}
|
||||||
|
className={classes.button}
|
||||||
|
>
|
||||||
|
Add Entity
|
||||||
|
</Button>
|
||||||
|
<TextField
|
||||||
|
className={classes.searchInput}
|
||||||
|
label="Search"
|
||||||
|
variant="outlined"
|
||||||
|
size="small"
|
||||||
|
value={searchQuery}
|
||||||
|
onChange={(e) => setSearchQuery(e.target.value)}
|
||||||
|
InputProps={{
|
||||||
|
endAdornment: (
|
||||||
|
<InputAdornment position="end">
|
||||||
|
<IconButton>
|
||||||
|
<SearchIcon />
|
||||||
|
</IconButton>
|
||||||
|
</InputAdornment>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<TableContainer component={Paper} className={classes.tableContainer}>
|
||||||
|
<Table>
|
||||||
|
<TableHead>
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
|
||||||
|
<th>namemm</th>
|
||||||
|
|
||||||
|
<th>descriptionmm</th>
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
</TableHead>
|
||||||
|
<TableBody>
|
||||||
|
{filteredData
|
||||||
|
.slice(
|
||||||
|
currentPage * itemsPerPage,
|
||||||
|
(currentPage + 1) * itemsPerPage
|
||||||
|
)
|
||||||
|
.map((entity) => (
|
||||||
|
<TableRow key={entity.id}>
|
||||||
|
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
</TableHead>
|
||||||
|
<TableBody>
|
||||||
|
{filteredData
|
||||||
|
.slice(
|
||||||
|
currentPage * itemsPerPage,
|
||||||
|
(currentPage + 1) * itemsPerPage
|
||||||
|
)
|
||||||
|
.map((entity) => (
|
||||||
|
<TableRow key={entity.id}>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td>{entity.namemm}</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td>{entity.descriptionmm}</td>
|
||||||
|
|
||||||
|
|
||||||
|
<TableCell>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="warning"
|
||||||
|
size="small"
|
||||||
|
className={classes.button}
|
||||||
|
onClick={() => handleEdit(entity)}
|
||||||
|
>
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="error"
|
||||||
|
size="small"
|
||||||
|
className={classes.button}
|
||||||
|
onClick={() => {
|
||||||
|
setDeleteEntityId(entity.id);
|
||||||
|
setShowDeleteModal(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
))}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
</TableContainer>
|
||||||
|
<TablePagination
|
||||||
|
rowsPerPageOptions={[5, 10, 25]}
|
||||||
|
component="div"
|
||||||
|
count={filteredData.length}
|
||||||
|
rowsPerPage={itemsPerPage}
|
||||||
|
page={currentPage}
|
||||||
|
onPageChange={handlePageChange}
|
||||||
|
/>
|
||||||
|
<Dialog open={showEditModal} onClose={() => setShowEditModal(false)}>
|
||||||
|
<DialogTitle>Edit Entity</DialogTitle>
|
||||||
|
<DialogContent className={classes.dialogContent}>
|
||||||
|
|
||||||
|
|
||||||
|
<TableCell>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="warning"
|
||||||
|
size="small"
|
||||||
|
className={classes.button}
|
||||||
|
onClick={() => handleEdit(entity)}
|
||||||
|
>
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="error"
|
||||||
|
size="small"
|
||||||
|
className={classes.button}
|
||||||
|
onClick={() => {
|
||||||
|
setDeleteEntityId(entity.id);
|
||||||
|
setShowDeleteModal(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
))}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
</TableContainer>
|
||||||
|
<TablePagination
|
||||||
|
rowsPerPageOptions={[5, 10, 25]}
|
||||||
|
component="div"
|
||||||
|
count={filteredData.length}
|
||||||
|
rowsPerPage={itemsPerPage}
|
||||||
|
page={currentPage}
|
||||||
|
onPageChange={handlePageChange}
|
||||||
|
/>
|
||||||
|
<Dialog open={showEditModal} onClose={() => setShowEditModal(false)}>
|
||||||
|
<DialogTitle>Edit Entity</DialogTitle>
|
||||||
|
<DialogContent className={classes.dialogContent}>
|
||||||
|
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
fullWidth
|
||||||
|
margin="normal"
|
||||||
|
label="Namemm"
|
||||||
|
variant="outlined"
|
||||||
|
name="namemm"
|
||||||
|
value={newEntity.namemm}
|
||||||
|
onChange={handleChange}
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
fullWidth
|
||||||
|
margin="normal"
|
||||||
|
label="Descriptionmm"
|
||||||
|
variant="outlined"
|
||||||
|
name="descriptionmm"
|
||||||
|
value={newEntity.descriptionmm}
|
||||||
|
onChange={handleChange}
|
||||||
|
multiline
|
||||||
|
rows={4}
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowEditModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleUpdate} color="primary">
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Dialog open={showAddModal} onClose={() => setShowAddModal(false)}>
|
||||||
|
<DialogTitle>Add Entity</DialogTitle>
|
||||||
|
<DialogContent className={classes.dialogContent}>
|
||||||
|
|
||||||
|
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowEditModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleUpdate} color="primary">
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Dialog open={showAddModal} onClose={() => setShowAddModal(false)}>
|
||||||
|
<DialogTitle>Add Entity</DialogTitle>
|
||||||
|
<DialogContent className={classes.dialogContent}>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
label="Namemm"
|
||||||
|
variant="outlined"
|
||||||
|
fullWidth
|
||||||
|
name="namemm"
|
||||||
|
value={newEntity.namemm}
|
||||||
|
onChange={handleChange}
|
||||||
|
className={classes.formControl}
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
label="Descriptionmm"
|
||||||
|
variant="outlined"
|
||||||
|
fullWidth
|
||||||
|
name="descriptionmm"
|
||||||
|
value={newEntity.descriptionmm}
|
||||||
|
onChange={handleChange}
|
||||||
|
className={classes.formControl}
|
||||||
|
/>
|
||||||
|
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowAddModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleAdd} color="primary">
|
||||||
|
Add
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Dialog open={showDeleteModal} onClose={() => setShowDeleteModal(false)}>
|
||||||
|
<DialogTitle>Confirm Delete</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<Typography>Are you sure you want to delete this entity?</Typography>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowDeleteModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleDelete} color="primary">
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Snackbar
|
||||||
|
open={openSnackbar}
|
||||||
|
autoHideDuration={6000}
|
||||||
|
onClose={() => setOpenSnackbar(false)}
|
||||||
|
>
|
||||||
|
<Alert
|
||||||
|
onClose={() => setOpenSnackbar(false)}
|
||||||
|
severity={snackbarSeverity}
|
||||||
|
>
|
||||||
|
{snackbarMessage}
|
||||||
|
</Alert>
|
||||||
|
</Snackbar>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default EntityTable;
|
||||||
|
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowAddModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleAdd} color="primary">
|
||||||
|
Add
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Dialog open={showDeleteModal} onClose={() => setShowDeleteModal(false)}>
|
||||||
|
<DialogTitle>Confirm Delete</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<Typography>Are you sure you want to delete this entity?</Typography>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => setShowDeleteModal(false)} color="primary">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleDelete} color="primary">
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
<Snackbar
|
||||||
|
open={openSnackbar}
|
||||||
|
autoHideDuration={6000}
|
||||||
|
onClose={() => setOpenSnackbar(false)}
|
||||||
|
>
|
||||||
|
<Alert
|
||||||
|
onClose={() => setOpenSnackbar(false)}
|
||||||
|
severity={snackbarSeverity}
|
||||||
|
>
|
||||||
|
{snackbarMessage}
|
||||||
|
</Alert>
|
||||||
|
</Snackbar>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default EntityTable;
|
||||||
|
|
Loading…
Reference in New Issue