fix: hiding deleted attributes in cards on dashboard

This commit is contained in:
2025-03-14 12:00:39 +04:00
parent 3e66d6300b
commit cb21ba7b18
2 changed files with 54 additions and 36 deletions

View File

@@ -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 (
<Flex direction={"column"}>
{cardSummary.attributes
.filter(cardAttr => (
cardAttr.attribute.isShownOnDashboard &&
cardAttr.value !== null &&
attributeIds.has(cardAttr.attribute.id)
))
.map(cardAttr => (
<Text c={"gray.6"} size={"sm"}>
{cardAttr.attribute.label}: {getAttrValueValue(cardAttr)}
</Text>
))
}
</Flex>
);
};
export default CardAttributesInSummaryItem;

View File

@@ -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<Props> = ({ cardSummary, color }) => {
return cardSummary.group && !cardSummary.group.billRequest;
};
const attributeValues = () => {
return (
<Flex direction={"column"}>
{cardSummary.attributes
.filter(cardAttr => cardAttr.attribute.isShownOnDashboard && cardAttr.value !== null)
.map(cardAttr => (
<Text c={"gray.6"} size={"sm"}>
{cardAttr.attribute.label}: {getAttrValueValue(cardAttr)}
</Text>
))
}
</Flex>
);
};
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 (
<div
onContextMenu={showContextMenu([
@@ -136,7 +103,7 @@ const CardSummaryItem: FC<Props> = ({ cardSummary, color }) => {
</Text>
</Flex>
)}
{attributeValues()}
<CardAttributesInSummaryItem cardSummary={cardSummary} />
{!cardSummary.group?.id && (
<CardTags cardId={cardSummary.id} tags={cardSummary.tags} />
)}