fix: hiding deleted attributes in cards on dashboard
This commit is contained in:
@@ -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;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { CardAttributeSchema, CardService, CardSummary } from "../../../../client";
|
import { CardService, CardSummary } from "../../../../client";
|
||||||
import styles from "./CardSummaryItem.module.css";
|
import styles from "./CardSummaryItem.module.css";
|
||||||
|
|
||||||
import { ActionIcon, Badge, CopyButton, Flex, Image, Popover, rem, Text, ThemeIcon, Tooltip } from "@mantine/core";
|
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 isModuleInProject, { Modules } from "../../../../modules/utils/isModuleInProject.ts";
|
||||||
import { useProjectsContext } from "../../../../contexts/ProjectsContext.tsx";
|
import { useProjectsContext } from "../../../../contexts/ProjectsContext.tsx";
|
||||||
import CardTags from "../CardTags/CardTags.tsx";
|
import CardTags from "../CardTags/CardTags.tsx";
|
||||||
import { formatDate, formatDateTime } from "../../../../types/utils.ts";
|
import CardAttributesInSummaryItem from "../CardAttributesInSummaryItem/CardAttributesInSummaryItem.tsx";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
cardSummary: CardSummary;
|
cardSummary: CardSummary;
|
||||||
@@ -40,39 +40,6 @@ const CardSummaryItem: FC<Props> = ({ cardSummary, color }) => {
|
|||||||
return cardSummary.group && !cardSummary.group.billRequest;
|
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 (
|
return (
|
||||||
<div
|
<div
|
||||||
onContextMenu={showContextMenu([
|
onContextMenu={showContextMenu([
|
||||||
@@ -136,7 +103,7 @@ const CardSummaryItem: FC<Props> = ({ cardSummary, color }) => {
|
|||||||
</Text>
|
</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
)}
|
)}
|
||||||
{attributeValues()}
|
<CardAttributesInSummaryItem cardSummary={cardSummary} />
|
||||||
{!cardSummary.group?.id && (
|
{!cardSummary.group?.id && (
|
||||||
<CardTags cardId={cardSummary.id} tags={cardSummary.tags} />
|
<CardTags cardId={cardSummary.id} tags={cardSummary.tags} />
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user