diff --git a/src/components/Dnd/Cards/CardAttributesInSummaryItem/CardAttributesInSummaryItem.tsx b/src/components/Dnd/Cards/CardAttributesInSummaryItem/CardAttributesInSummaryItem.tsx new file mode 100644 index 0000000..7534cd4 --- /dev/null +++ b/src/components/Dnd/Cards/CardAttributesInSummaryItem/CardAttributesInSummaryItem.tsx @@ -0,0 +1,51 @@ +import { CardAttributeSchema, CardSummary } from "../../../../client"; +import { Flex, Text } from "@mantine/core"; +import { formatDate, formatDateTime } from "../../../../types/utils.ts"; +import { useProjectsContext } from "../../../../contexts/ProjectsContext.tsx"; + +type Props = { + cardSummary: CardSummary; +} + +const CardAttributesInSummaryItem = ({ cardSummary }: Props) => { + const { selectedProject } = useProjectsContext(); + + const attributeIds = new Set(selectedProject?.attributes.map(attr => attr.id)); + + const getAttrValueValue = (cardAttr: CardAttributeSchema) => { + const value = cardAttr.value; + if (value === null) return; + + const type = cardAttr.attribute.type.type; + if (type === "datetime") { + return formatDateTime(value as string); + } + if (type === "date") { + return formatDate(value as string); + } + if (type === "bool") { + return value ? "да" : "нет"; + } + + return value; + }; + + return ( + + {cardSummary.attributes + .filter(cardAttr => ( + cardAttr.attribute.isShownOnDashboard && + cardAttr.value !== null && + attributeIds.has(cardAttr.attribute.id) + )) + .map(cardAttr => ( + + {cardAttr.attribute.label}: {getAttrValueValue(cardAttr)} + + )) + } + + ); +}; + +export default CardAttributesInSummaryItem; diff --git a/src/components/Dnd/Cards/CardSummaryItem/CardSummaryItem.tsx b/src/components/Dnd/Cards/CardSummaryItem/CardSummaryItem.tsx index 10e5632..be56a3a 100644 --- a/src/components/Dnd/Cards/CardSummaryItem/CardSummaryItem.tsx +++ b/src/components/Dnd/Cards/CardSummaryItem/CardSummaryItem.tsx @@ -1,5 +1,5 @@ import { FC } from "react"; -import { CardAttributeSchema, CardService, CardSummary } from "../../../../client"; +import { CardService, CardSummary } from "../../../../client"; import styles from "./CardSummaryItem.module.css"; import { ActionIcon, Badge, CopyButton, Flex, Image, Popover, rem, Text, ThemeIcon, Tooltip } from "@mantine/core"; @@ -12,7 +12,7 @@ import useCardSummaryState from "./useCardSummaryState.tsx"; import isModuleInProject, { Modules } from "../../../../modules/utils/isModuleInProject.ts"; import { useProjectsContext } from "../../../../contexts/ProjectsContext.tsx"; import CardTags from "../CardTags/CardTags.tsx"; -import { formatDate, formatDateTime } from "../../../../types/utils.ts"; +import CardAttributesInSummaryItem from "../CardAttributesInSummaryItem/CardAttributesInSummaryItem.tsx"; type Props = { cardSummary: CardSummary; @@ -40,39 +40,6 @@ const CardSummaryItem: FC = ({ cardSummary, color }) => { return cardSummary.group && !cardSummary.group.billRequest; }; - const attributeValues = () => { - return ( - - {cardSummary.attributes - .filter(cardAttr => cardAttr.attribute.isShownOnDashboard && cardAttr.value !== null) - .map(cardAttr => ( - - {cardAttr.attribute.label}: {getAttrValueValue(cardAttr)} - - )) - } - - ); - }; - - const getAttrValueValue = (cardAttr: CardAttributeSchema) => { - const value = cardAttr.value; - if (value === null) return; - - const type = cardAttr.attribute.type.type; - if (type === "datetime") { - return formatDateTime(value as string); - } - if (type === "date") { - return formatDate(value as string); - } - if (type === "bool") { - return value ? "да" : "нет"; - } - - return value; - }; - return (
= ({ cardSummary, color }) => { )} - {attributeValues()} + {!cardSummary.group?.id && ( )}