All files / client/src/views/event-log EventLogProgramItemCancelled.tsx

90.9% Statements 10/11
100% Branches 4/4
100% Functions 3/3
90.9% Lines 10/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                        356x     55x   55x 101x     55x 33x     55x 55x     55x       55x                                                                    
import { ReactElement } from "react";
import { useTranslation } from "react-i18next";
import { Link } from "react-router";
import { capitalize } from "remeda";
import { EventLogAction, EventLogItem } from "shared/types/models/eventLog";
import { useAppSelector } from "client/utils/hooks";
import { AppRoute } from "client/app/AppRoutes";
 
interface Props {
  eventLogItem: EventLogItem;
}
 
export const EventLogProgramItemCancelled = ({
  eventLogItem,
}: Props): ReactElement => {
  const { t } = useTranslation();
 
  const programItems = useAppSelector(
    (state) => state.allProgramItems.programItems,
  );
 
  const programItem = programItems.find(
    (p) => p.programItemId === eventLogItem.programItemId,
  );
 
  const programType = programItem?.programType ?? "other";
  const programTypeSingular = capitalize(
    t(`programTypeSingular.${programType}`),
  );
  const programTypeGenetive = capitalize(
    t(`programTypeGenetive.${programType}`),
  );
 
  const messageByAction: Partial<Record<EventLogAction, string>> = {
    [EventLogAction.PROGRAM_ITEM_CANCELLED]: t(
      "eventLogActions.programItemCancelled",
      { PROGRAM_TYPE: programTypeSingular },
    ),
    [EventLogAction.PROGRAM_ITEM_DELETED]: t(
      "eventLogActions.programItemDeleted",
      { PROGRAM_TYPE: programTypeSingular },
    ),
    [EventLogAction.PROGRAM_ITEM_NO_KONSTI_SIGNUP_ANYMORE]: t(
      "eventLogActions.programItemNoKonstiSignupAnymore",
      { PROGRAM_TYPE: programTypeGenetive },
    ),
    [EventLogAction.PROGRAM_ITEM_NO_LOTTERY_ANYMORE]: t(
      "eventLogActions.programItemNoLotteryAnymore",
      { PROGRAM_TYPE: programTypeSingular },
    ),
  };
 
  return (
    <div>
      <span>
        {messageByAction[eventLogItem.action]}{" "}
        {programItem ? (
          <Link to={`${AppRoute.PROGRAM_ITEM}/${eventLogItem.programItemId}`}>
            {programItem.title}
          </Link>
        ) : (
          eventLogItem.programItemId
        )}
      </span>
    </div>
  );
};