AnnoucementsContainer.jsx 2.30 KiB
import React from "react";
import {
deleteAnnouncement,
loadAnnouncements,
markSeen,
updateAnnouncement,
} from "actions/announcements";
import AnnouncementEditModal from "components/annoucements/AnnouncementEditModal";
import AnnouncementList from "components/annoucements/AnnouncementList";
import { CardBody } from "components/cards";
import ErrorMessage from "components/ErrorMessage";
import ModalConfirm from "components/modals/ModalConfirm";
import { useItemActionConfirm } from "hooks";
import { AnnouncementStore, AuthStore } from "stores";
const AnnoucementsContainer = ({ className }) => {
const { 2: loadResult } = loadAnnouncements.useWatch();
const [
itemToDelete,
setItemToDelete,
onDeleteConfirm,
onDeleteCancel,
deleteState,
] = useItemActionConfirm(deleteAnnouncement);
const [
itemToEdit,
setItemToEdit,
onEditConfirm,
onEditCancel,
editState,
] = useItemActionConfirm(updateAnnouncement, (item, payload) => ({
item,
payload,
}));
const { isAuthenticated, user } = AuthStore.useState();
const items = AnnouncementStore.useState((state) =>
state.itemIds.map((id) => state.items[id])
);
return (
<div className={className}>
{loadResult && loadResult.error && (
<CardBody>
<ErrorMessage>
Oznámení se nepodařilo načíst: {loadResult.message}
</ErrorMessage>
</CardBody>
)}
<AnnouncementList
items={items}
canRunActions={isAuthenticated && user.role === "chairman"}
onDelete={setItemToDelete}
onEdit={setItemToEdit}
onSeen={markSeen}
/>
<ModalConfirm
isOpen={!!itemToDelete}
onConfirm={onDeleteConfirm}
onCancel={onDeleteCancel}
confirming={deleteState.loading}
error={deleteState.error}
title="Opravdu smazat?"
yesActionLabel="Smazat"
>
Tato akce je nevratná. Opravdu chcete toto oznámení smazat?
</ModalConfirm>
{itemToEdit && (
<AnnouncementEditModal
isOpen={true}
announcement={itemToEdit}
onConfirm={onEditConfirm}
onCancel={onEditCancel}
confirming={editState.loading}
error={editState.error}
/>
)}
</div>
);
};
export default AnnoucementsContainer;