Skip to content
Snippets Groups Projects
PostList.jsx 2.44 KiB
import React from "react";
import classNames from "classnames";

import Post from "./Post";

const PostList = ({
  className,
  items,
  canThumb,
  canRunActions,
  onLike,
  onDislike,
  onHide,
  onBanUser,
  onAnnounceProcedureProposal,
  onAcceptProcedureProposal,
  onRejectProcedureProposal,
  onRejectProcedureProposalByChairman,
  onSeen,
  dimArchived,
}) => {
  const buildHandler = (responderFn) => (post) => (evt) => {
    evt.preventDefault();
    responderFn(post);
  };

  const onPostLike = buildHandler(onLike);
  const onPostDislike = buildHandler(onDislike);
  const onPostHide = buildHandler(onHide);
  const onPostBanUser = buildHandler(onBanUser);
  const onPostAnnounceProcedureProposal = buildHandler(
    onAnnounceProcedureProposal
  );
  const onPostAcceptProcedureProposal = buildHandler(onAcceptProcedureProposal);
  const onPostRejectProcedureProposal = buildHandler(onRejectProcedureProposal);
  const onPostRejectProcedureProposalByChairman = buildHandler(
    onRejectProcedureProposalByChairman
  );

  const onPostSeen = (post) => () => {
    onSeen(post);
  };

  return (
    <div className={classNames("space-y-px", className)}>
      {items
        .filter((item) => !item.hidden)
        .map((item) => (
          <Post
            key={item.id}
            datetime={item.datetime}
            author={item.author}
            type={item.type}
            state={item.state}
            content={item.content}
            ranking={item.ranking}
            historyLog={item.historyLog}
            modified={item.modified}
            seen={item.seen}
            archived={item.archived}
            dimIfArchived={dimArchived}
            canThumb={canThumb}
            canRunActions={canRunActions}
            onLike={onPostLike(item)}
            onDislike={onPostDislike(item)}
            onHide={onPostHide(item)}
            onBanUser={onPostBanUser(item)}
            onAnnounceProcedureProposal={onPostAnnounceProcedureProposal(item)}
            onAcceptProcedureProposal={onPostAcceptProcedureProposal(item)}
            onRejectProcedureProposal={onPostRejectProcedureProposal(item)}
            onRejectProcedureProposalByChairman={onPostRejectProcedureProposalByChairman(
              item
            )}
            onSeen={onPostSeen(item)}
          />
        ))}
      {!items.length && (
        <p>Nikdo zatím žádný příspěvek do rozpravy nepřidal. Budeš první?</p>
      )}
    </div>
  );
};

export default PostList;