Show procurement project editor in request detail modal
All checks were successful
Deploy production / deploy (push) Successful in 15m39s

This commit is contained in:
lizerk 2026-11-10 18:49:14 +03:00
parent 8be419c03b
commit f29e7413c1
2 changed files with 24 additions and 13 deletions

View File

@ -15,7 +15,6 @@ import { ProjectSelectMenu } from "@/components/ui/ProjectSelectMenu";
import { useUser } from "@/contexts/UserContext";
import Link from "next/link";
import { ProcurementRequestDetailContent } from "@/components/procurement/ProcurementRequestDetailContent";
import ProcurementProjectsQuickEditor from "@/components/procurement/ProcurementProjectsQuickEditor";
import { ProcurementTaskLinks } from "@/components/procurement/ProcurementTaskLinks";
import ProcurementStatsPanel from "@/components/procurement/ProcurementStatsPanel";
import ProcurementSuppliersPanel from "@/components/procurement/ProcurementSuppliersPanel";
@ -2027,18 +2026,6 @@ export default function ProcurementPage() {
</span>
) : null}
</div>
<div className="mt-3">
<ProcurementProjectsQuickEditor
key={selectedRequest.id}
request={selectedRequest}
onSaved={async () => {
await Promise.all([
refreshOne(selectedRequest.id),
loadPage1(),
]);
}}
/>
</div>
<p className="app-text-wrap mt-2 text-sm text-[var(--foreground)]">
<span className="app-text-muted">Описание: </span>
{selectedRequest.description || "—"}
@ -2132,6 +2119,10 @@ export default function ProcurementPage() {
currentUserId={user?.id}
request={selectedRequest}
displayUserName={displayUserName}
onProjectsSaved={async () => {
await refreshOne(selectedRequest.id);
await loadPage1();
}}
canProcessItems={Boolean(
selectedRequest.can_current_user_process_items,
)}
@ -2971,6 +2962,10 @@ export default function ProcurementPage() {
currentUserId={user?.id}
request={resolvedDetail}
displayUserName={displayUserName}
onProjectsSaved={async () => {
await refreshOne(resolvedDetail.id);
await loadPage1();
}}
canProcessItems={Boolean(
resolvedDetail.can_current_user_process_items,
)}
@ -3228,6 +3223,10 @@ export default function ProcurementPage() {
currentUserId={user?.id}
request={selectedRequest}
displayUserName={displayUserName}
onProjectsSaved={async () => {
await refreshOne(selectedRequest.id);
await loadPage1();
}}
canProcessItems={Boolean(
selectedRequest.can_current_user_process_items,
)}

View File

@ -25,6 +25,7 @@ import {
import { RequestAvatar } from "@/components/requests/RequestAvatar";
import { ProcurementCommentAttachment } from "@/components/procurement/ProcurementCommentAttachment";
import { ProcurementRequestHistory } from "@/components/procurement/ProcurementRequestHistory";
import ProcurementProjectsQuickEditor from "@/components/procurement/ProcurementProjectsQuickEditor";
import {
CommentComposer,
CommentDeleteButton,
@ -53,6 +54,7 @@ interface ProcurementRequestDetailContentProps {
fallbackEmail?: string | null,
) => string;
canProcessItems?: boolean;
onProjectsSaved?: () => Promise<void>;
busyKey?: string | null;
canDeleteAnyComment?: boolean;
onUpdateItem?: (
@ -1861,6 +1863,7 @@ export function ProcurementRequestDetailContent({
request,
displayUserName,
canProcessItems = false,
onProjectsSaved,
busyKey,
canDeleteAnyComment = false,
onUpdateItem,
@ -1990,6 +1993,15 @@ export function ProcurementRequestDetailContent({
<div
className={wideLayout ? "procurement-detail-layout-grid" : "space-y-3"}
>
{onProjectsSaved ? (
<div className={wideLayout ? "procurement-detail-layout-full" : ""}>
<ProcurementProjectsQuickEditor
key={request.id}
request={request}
onSaved={onProjectsSaved}
/>
</div>
) : null}
{!wideLayout ? (
<div className="app-surface rounded-xl p-4">
<p className="text-sm font-semibold text-[var(--foreground)]">