/** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only * See the LICENSE file for details. */ import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { DuplicatePropertyIcon, DueDatePropertyIcon, LabelPropertyIcon, MembersPropertyIcon, PriorityPropertyIcon, StatePropertyIcon, } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; import type { TInboxDuplicateIssueDetails, TIssue } from "@plane/types"; import { ControlLink } from "@plane/ui"; import { generateWorkItemLink, getDate, renderFormattedPayloadDate } from "@plane/utils"; import { DateDropdown } from "@/components/dropdowns/date"; import { MemberDropdown } from "@/components/dropdowns/member/dropdown"; import { PriorityDropdown } from "@/components/dropdowns/priority"; import type { TIssueOperations } from "@/components/issues/issue-detail"; import { IssueLabel } from "@/components/issues/issue-detail/label"; import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; type Props = { workspaceSlug: string; projectId: string; issue: Partial; issueOperations: TIssueOperations; isEditable: boolean; duplicateIssueDetails: TInboxDuplicateIssueDetails | undefined; }; export const ExternalContoursIssueContentProperties = observer(function ExternalContoursIssueContentProperties(props: Props) { const { workspaceSlug, projectId, issue, issueOperations, isEditable, duplicateIssueDetails } = props; const { t } = useTranslation(); const router = useAppRouter(); const { currentProjectDetails } = useProject(); const minDate = issue.start_date ? getDate(issue.start_date) : null; minDate?.setDate(minDate.getDate()); if (!issue || !issue?.id) return <>; const duplicateWorkItemLink = generateWorkItemLink({ workspaceSlug: workspaceSlug?.toString(), projectId, issueId: duplicateIssueDetails?.id, projectIdentifier: currentProjectDetails?.identifier, sequenceId: duplicateIssueDetails?.sequence_id, }); return (
{t("external_contours_page.properties.section_title")}
{t("external_contours_page.properties.target_contour")}
{t("external_contours_page.properties.target_contour_placeholder")}
{t("assignees")}
issue?.id && issueOperations.update(workspaceSlug, projectId, issue.id, { assignee_ids: val })} disabled={!isEditable} projectId={projectId?.toString() ?? ""} placeholder={t("assignee")} multiple buttonVariant={(issue?.assignee_ids || []).length > 0 ? "transparent-without-text" : "transparent-with-text"} className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={`text-13 justify-between ${(issue?.assignee_ids || []).length > 0 ? "" : "text-placeholder"}`} hideIcon={issue.assignee_ids?.length === 0} dropdownArrow dropdownArrowClassName="hidden h-3.5 w-3.5 group-hover:inline" />
{t("priority")}
issue?.id && issueOperations.update(workspaceSlug, projectId, issue.id, { priority: val })} disabled={!isEditable} buttonVariant="border-with-text" className="w-3/5 flex-grow rounded-sm px-2 hover:bg-layer-1" buttonContainerClassName="w-full text-left" buttonClassName="h-auto w-min whitespace-nowrap" />
{t("due_date")}
issue?.id && issueOperations.update(workspaceSlug, projectId, issue.id, { target_date: val ? renderFormattedPayloadDate(val) : null, }) } minDate={minDate ?? undefined} disabled={!isEditable} buttonVariant="transparent-with-text" className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={`text-13 ${issue?.target_date ? "" : "text-placeholder"}`} hideIcon clearIconClassName="hidden h-3 w-3 group-hover:inline" />
{t("labels")}
{issue?.id && ( issue?.id && issueOperations.update(workspaceSlug, projectId, issue.id, { label_ids: val })} /> )}
{duplicateIssueDetails && (
{t("external_contours_page.properties.duplicate_of")}
router.push(duplicateWorkItemLink)} target="_self"> {`${currentProjectDetails?.identifier}-${duplicateIssueDetails?.sequence_id}`}
)}
); });