UI - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: унификация shell карточки внешнего контура с внутренним peek

This commit is contained in:
DCCONSTRUCTIONS
2026-04-20 21:07:49 +03:00
parent 8bf6f2a510
commit ab2a5ffb9a
6 changed files with 563 additions and 78 deletions
@@ -9,21 +9,28 @@ import { observer } from "mobx-react";
import useSWR from "swr";
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import type { TNameDescriptionLoader } from "@plane/types";
import { ContentWrapper } from "@plane/ui";
import { useProjectExternalContours } from "@/hooks/store/use-project-external-contours";
import { useUser, useUserPermissions } from "@/hooks/store/user";
import { useAppRouter } from "@/hooks/use-app-router";
import { ExternalContoursIssueActionsHeader } from "./issue-header";
import { ExternalContoursPeekShell } from "./peek-shell";
import { ExternalContoursIssueMainContent } from "./issue-root";
type Props = {
workspaceSlug: string;
projectId: string;
inboxIssueId: string;
embedIssue?: boolean;
embedRemoveCurrentNotification?: () => void;
};
export const ExternalContoursContentRoot = observer(function ExternalContoursContentRoot(props: Props) {
const { workspaceSlug, projectId, inboxIssueId } = props;
const {
workspaceSlug,
projectId,
inboxIssueId,
embedIssue = false,
embedRemoveCurrentNotification,
} = props;
const router = useAppRouter();
const [isSubmitting, setIsSubmitting] = useState<TNameDescriptionLoader>("saved");
const [isDetailResolved, setIsDetailResolved] = useState(false);
@@ -81,28 +88,26 @@ export const ExternalContoursContentRoot = observer(function ExternalContoursCon
if (!contourRequest || !issue) return <></>;
return (
<div className="relative flex h-full w-full flex-col overflow-hidden pt-6">
<div className="z-[11] min-h-[52px] flex-shrink-0">
<ExternalContoursIssueActionsHeader
workspaceSlug={workspaceSlug}
sourceProjectId={projectId}
contourRequest={contourRequest}
isSubmitting={isSubmitting}
hasDirectTargetAccess={hasDirectTargetAccess}
/>
</div>
<ContentWrapper className="space-y-4 px-4 pb-4 pt-4">
<ExternalContoursIssueMainContent
workspaceSlug={workspaceSlug}
sourceProjectId={projectId}
contourRequest={contourRequest}
hasDirectTargetAccess={hasDirectTargetAccess}
isEditable={!!isEditable && !readOnly}
isSourceEditable={isSourceEditable}
isSubmitting={isSubmitting}
setIsSubmitting={setIsSubmitting}
/>
</ContentWrapper>
</div>
<ExternalContoursPeekShell
workspaceSlug={workspaceSlug}
projectId={projectId}
contourRequest={contourRequest}
hasDirectTargetAccess={hasDirectTargetAccess}
isSubmitting={isSubmitting}
embedIssue={embedIssue}
embedRemoveCurrentNotification={embedRemoveCurrentNotification}
onClose={() => router.replace(`/${workspaceSlug}/projects/${projectId}/external-contours?currentTab=${currentTab}`)}
>
<ExternalContoursIssueMainContent
workspaceSlug={workspaceSlug}
sourceProjectId={projectId}
contourRequest={contourRequest}
hasDirectTargetAccess={hasDirectTargetAccess}
isEditable={!!isEditable && !readOnly}
isSourceEditable={isSourceEditable}
isSubmitting={isSubmitting}
setIsSubmitting={setIsSubmitting}
/>
</ExternalContoursPeekShell>
);
});