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