Commit c66190ac by asranov0003

feat: add cloading

parent 3f6cb44c
.cloading__spinner {
width: 25px;
height: 25px;
border: 3px solid rgba(0, 0, 0, 0.1);
border-left: 3px solid var(--primary-color);
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
\ No newline at end of file
import React from "react";
import "./CLoading.css";
const CLoading: React.FC = () => {
return <div className="cloading__spinner"></div>;
};
export default CLoading;
export { default } from "./CLoading";
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.notification__loading {
display: flex;
justify-content: center;
margin: 0.5rem 0;
}
.notifications__list { .notifications__list {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
......
...@@ -9,6 +9,7 @@ import { getList } from "../../stores/slices/notificationSlice"; ...@@ -9,6 +9,7 @@ import { getList } from "../../stores/slices/notificationSlice";
import { MdBlockFlipped } from "react-icons/md"; import { MdBlockFlipped } from "react-icons/md";
import { IoPhonePortraitOutline } from "react-icons/io5"; import { IoPhonePortraitOutline } from "react-icons/io5";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import CLoading from "../../components/CLoading";
const Notifications: React.FC = () => { const Notifications: React.FC = () => {
const { t } = useTranslation(); const { t } = useTranslation();
...@@ -22,7 +23,7 @@ const Notifications: React.FC = () => { ...@@ -22,7 +23,7 @@ const Notifications: React.FC = () => {
return { dateFrom, dateTo }; return { dateFrom, dateTo };
}; };
const { notifications } = useAppSelector( const { notifications, loading } = useAppSelector(
(state: RootState) => state.notification (state: RootState) => state.notification
); );
...@@ -34,26 +35,30 @@ const Notifications: React.FC = () => { ...@@ -34,26 +35,30 @@ const Notifications: React.FC = () => {
<div className="notifications"> <div className="notifications">
<h3 className="notification__title">{t("notification.title")}</h3> <h3 className="notification__title">{t("notification.title")}</h3>
<div className="notification__loading">
{loading && notifications.length === 0 && <CLoading />}
</div>
{!loading && notifications.length === 0 && (
<p>{t("notification.empty")}</p>
)}
<div className="notifications__list"> <div className="notifications__list">
{notifications.length > 0 ? ( {notifications.map((notification) => (
notifications.map((notification) => ( <div className="notification" key={notification.id}>
<div className="notification" key={notification.id}> <div className="notification__caption">
<div className="notification__caption"> <MdBlockFlipped className="notification__caption__icon" />
<MdBlockFlipped className="notification__caption__icon" /> <p>{notification.caption}</p>
<p>{notification.caption}</p> </div>
</div>
<p className="notification__text">{notification.text}</p>
<p className="notification__text">{notification.text}</p>
<div className="notification__date">
<div className="notification__date"> <IoPhonePortraitOutline className="notification__date__icon" />
<IoPhonePortraitOutline className="notification__date__icon" /> {new Date(notification.date).toLocaleString()}
{new Date(notification.date).toLocaleString()}
</div>
</div> </div>
)) </div>
) : ( ))}
<p>{t("notification.empty")}</p>
)}
</div> </div>
</div> </div>
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment