diff --git a/frontend/src/scenes/popup/PopupDefaultPage.jsx b/frontend/src/scenes/popup/PopupDefaultPage.jsx
index 5da97c27..4d60e02e 100644
--- a/frontend/src/scenes/popup/PopupDefaultPage.jsx
+++ b/frontend/src/scenes/popup/PopupDefaultPage.jsx
@@ -1,94 +1,31 @@
-import React, { useState, useEffect } from 'react';
-import CreateActivityButton from "../../components/Button/CreateActivityButton/CreateActivityButton";
-import { ACTIVITY_TYPES } from "../../data/CreateActivityButtonData";
-import ParagraphCSS from "../../components/ParagraphCSS/ParagraphCSS";
+import React from 'react';
+import DefaultPageTemplate from '../../templates/DefaultPageTemplate/DefaultPageTemplate';
+import { getPopups, deletePopup } from '../../services/popupServices';
import { useNavigate } from 'react-router-dom';
-import GuideMainPageTemplate from "../../templates/GuideMainPageTemplate/GuideMainPageTemplate";
-import { getPopups } from "../../services/popupServices";
import { ACTIVITY_TYPES_INFO } from '../../data/GuideMainPageData';
-import { deletePopup } from '../../services/popupServices';
-import toastEmitter, { TOAST_EMITTER_KEY } from '../../utils/toastEmitter';
const PopupDefaultPage = () => {
const navigate = useNavigate();
- const [popups, setPopups] = useState([]);
- const [selectedItem, setSelectedItem] = useState(null);
- const [isPopupOpen, setPopupOpen] = useState(false);
- const [popupToDelete, setPopupToDelete] = useState();
- const [popupDeleted, setPopupDeleted] = useState(false);
- const handleSelect = (idItem) => {
- setSelectedItem(idItem);
- };
-
- const handleDelete = async () => {
- await deletePopup(popupToDelete)
- setPopupOpen(false);
- setPopupDeleted(prevState => !prevState);
- toastEmitter.emit(TOAST_EMITTER_KEY, 'This popup is removed')
- };
-
- const handleOpenPopup = (id) => {
- setPopupToDelete(id)
- setPopupOpen(true);
- };
-
- const handleClosePopup = () => {
- setPopupOpen(false);
- };
+ const getPopupDetails = (popup) => ({
+ title: `Popup ${popup.id}`,
+ text: popup.header,
+ });
- const navigateToCreate = () => {
- navigate('/popup/create');
+ const navigateToCreate = (state) => {
+ navigate('/popup/create', state);
};
- useEffect(() => {
- const fetchPopups = async () => {
- try {
- const popupData = await getPopups();
- setPopups(popupData);
- } catch (error) {
- console.error("Failed to fetch popups:", error);
- }
- };
-
- fetchPopups();
- }, [popupDeleted]);
-
- const style = {
- display: "flex",
- flexDirection: "column",
- width: "100%",
- justifyContent: "center",
- alignItems: "center",
- };
-
- const items = popups.map(popups => ({
- idItem: popups.id,
- title: `Popup ${popups.id}`,
- text: popups.header,
- onDelete: () => handleOpenPopup(popups.id), // Placeholder for delete function
- onEdit: () => navigate('/popup/create', {state:{isEdit:true, id: popups.id}}),
- }));
-
-
return (
- <>
- {popups.length === 0 ? (
-
- ) : (
-
- )}
- >
+
);
-}
+};
export default PopupDefaultPage;
diff --git a/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.css b/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.css
new file mode 100644
index 00000000..57af479b
--- /dev/null
+++ b/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.css
@@ -0,0 +1,20 @@
+.fade-in {
+ animation: fadeIn 0.4s;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ }
+
+
+@keyframes fadeIn {
+ 0% { opacity: 0; }
+ 100% { opacity: 1; }
+ }
+
+ .placeholder-style {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ justify-content: center;
+ align-items: center;
+}
diff --git a/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.jsx b/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.jsx
index 0d8a6e33..33587832 100644
--- a/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.jsx
+++ b/frontend/src/templates/DefaultPageTemplate/DefaultPageTemplate.jsx
@@ -1,22 +1,27 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
-import HomePageTemplate from '../HomePageTemplate/HomePageTemplate';
import ParagraphCSS from '../../components/ParagraphCSS/ParagraphCSS';
import GuideMainPageTemplate from '../GuideMainPageTemplate/GuideMainPageTemplate';
import CreateActivityButton from '../../components/Button/CreateActivityButton/CreateActivityButton';
import toastEmitter, { TOAST_EMITTER_KEY } from '../../utils/toastEmitter';
+import './DefaultPageTemplate.css'
const DefaultPageTemplate = ({ getItems, deleteItem, navigateToCreate, itemType, itemTypeInfo, getItemDetails }) => {
const [items, setItems] = useState([]);
const [isPopupOpen, setPopupOpen] = useState(false);
const [itemToDelete, setItemToDelete] = useState();
const [itemDeleted, setItemDeleted] = useState(false);
+ const [loading, setLoading] = useState(true);
+ const [load, setLoad] = useState(true)
const handleDelete = async () => {
await deleteItem(itemToDelete);
setPopupOpen(false);
+ if(items.length > 1){
+ setLoad(false);
+ }
setItemDeleted(prevState => !prevState);
- toastEmitter.emit(TOAST_EMITTER_KEY, 'This banner is removed');
+ toastEmitter.emit(TOAST_EMITTER_KEY, `This ${itemType.slice(0, -1)} is removed`);
};
const handleOpenPopup = (id) => {
@@ -31,23 +36,21 @@ const DefaultPageTemplate = ({ getItems, deleteItem, navigateToCreate, itemType,
useEffect(() => {
const fetchData = async () => {
try {
+ if(load){
+ setLoading(true);
+ }
const data = await getItems();
setItems(data);
} catch (error) {
console.error(`Failed to fetch ${itemType.toLowerCase()}s:`, error);
+ } finally {
+ setLoading(false);
+ setLoad(true);
}
};
fetchData();
}, [itemDeleted]);
- const style = {
- display: "flex",
- flexDirection: "column",
- width: "100%",
- justifyContent: "center",
- alignItems: "center",
- };
-
const mappedItems = items.map(item => ({
idItem: item.id,
...getItemDetails(item),
@@ -57,20 +60,26 @@ const DefaultPageTemplate = ({ getItems, deleteItem, navigateToCreate, itemType,
return (
<>
- {items.length === 0 ? (
-
+ {loading ? (
+
) : (
-
+
+ {items.length === 0 ? (
+
+ ) : (
+
+ )}
+
)}
>
);
@@ -85,4 +94,4 @@ DefaultPageTemplate.propTypes = {
getItemDetails: PropTypes.func.isRequired,
};
-export default DefaultPageTemplate;
+export default DefaultPageTemplate;
\ No newline at end of file