diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorDetailTabs.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorDetailTabs.tsx index 93f3d5c71..07b33859f 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorDetailTabs.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorDetailTabs.tsx @@ -1,6 +1,8 @@ 'use client'; +import { Comments } from '@/components/comments/Comments'; import { VendorRiskAssessmentView } from '@/components/vendor-risk-assessment/VendorRiskAssessmentView'; +import { CommentEntityType } from '@db'; import type { Member, User, Vendor } from '@db'; import type { Prisma } from '@prisma/client'; import { @@ -16,6 +18,7 @@ import { import { useState } from 'react'; import { VendorActions } from './VendorActions'; import { VendorPageClient } from './VendorPageClient'; +import { TaskItems } from '@/components/task-items/TaskItems'; // Vendor with risk assessment data merged from GlobalVendors type VendorWithRiskAssessment = Vendor & { @@ -73,6 +76,8 @@ export function VendorDetailTabs({ Overview Risk Assessment + Tasks + Comments ) } @@ -90,7 +95,6 @@ export function VendorDetailTabs({ onEditSheetOpenChange={setIsEditSheetOpen} /> - {riskAssessmentData ? ( @@ -115,6 +119,16 @@ export function VendorDetailTabs({ )} + {!isViewingTask && ( + + + + )} + {!isViewingTask && ( + + + + )} ); diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorHeader.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorHeader.tsx index 63e112456..87b3d1b66 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorHeader.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorHeader.tsx @@ -93,55 +93,51 @@ export function VendorHeader({ vendor, isEditSheetOpen, onEditSheetOpenChange }: return ( <> -
-
-

{vendor.name}

- {certifications.filter((cert) => cert.status === 'verified').length > 0 && ( -
- {certifications - .filter((cert) => { - // Only show verified certifications - return cert.status === 'verified'; - }) - .map((cert, index) => { - const IconComponent = getCertificationIcon(cert); - - if (!IconComponent) return null; - - const iconContent = ( -
+ {certifications.filter((cert) => cert.status === 'verified').length > 0 && ( +
+ {certifications + .filter((cert) => { + // Only show verified certifications + return cert.status === 'verified'; + }) + .map((cert, index) => { + const IconComponent = getCertificationIcon(cert); + + if (!IconComponent) return null; + + const iconContent = ( +
+ +
+ ); + + if (cert.url) { + return ( + - -
+ {iconContent} + ); + } - if (cert.url) { - return ( - - {iconContent} - - ); - } - - return
{iconContent}
; - })} -
- )} -
- {vendor.description &&

{vendor.description}

} + return
{iconContent}
; + })} +
+ )} {links.length > 0 && (
{links.map((link, index) => { diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorPageClient.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorPageClient.tsx index 41cfae33d..1b8879647 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorPageClient.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorPageClient.tsx @@ -1,9 +1,6 @@ 'use client'; -import { Comments } from '@/components/comments/Comments'; -import { TaskItems } from '@/components/task-items/TaskItems'; import { useVendor, type VendorResponse } from '@/hooks/use-vendors'; -import { CommentEntityType } from '@db'; import type { Member, User, Vendor } from '@db'; import type { Prisma } from '@prisma/client'; import { useMemo } from 'react'; @@ -102,10 +99,6 @@ export function VendorPageClient({
)} - - {!isViewingTask && ( - - )}
); diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx index f098df2b9..313960633 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Card, CardContent } from '@comp/ui/card'; import type { Member, User, Vendor } from '@db'; +import { Section } from '@trycompai/design-system'; import { UpdateSecondaryFieldsForm } from './update-secondary-fields-form'; export function SecondaryFields({ @@ -12,10 +12,8 @@ export function SecondaryFields({ assignees: (Member & { user: User })[]; }) { return ( - - - - - +
+ +
); } diff --git a/apps/app/src/components/comments/CommentRichTextField.tsx b/apps/app/src/components/comments/CommentRichTextField.tsx index d08fd646f..c9198e423 100644 --- a/apps/app/src/components/comments/CommentRichTextField.tsx +++ b/apps/app/src/components/comments/CommentRichTextField.tsx @@ -1,17 +1,17 @@ 'use client'; +import { createMentionExtension, type MentionUser } from '@comp/ui/editor'; +import { defaultExtensions } from '@comp/ui/editor/extensions'; import type { JSONContent } from '@tiptap/react'; -import { useEditor, EditorContent } from '@tiptap/react'; -import { useMemo, useEffect, useCallback } from 'react'; +import { EditorContent, useEditor } from '@tiptap/react'; import type { CSSProperties } from 'react'; +import { useCallback, useEffect, useMemo } from 'react'; +import { useDebouncedCallback } from 'use-debounce'; type EditorSizeStyle = CSSProperties & { '--editor-min-height': string; '--editor-height': string; }; -import { createMentionExtension, type MentionUser } from '@comp/ui/editor'; -import { useDebouncedCallback } from 'use-debounce'; -import { defaultExtensions } from '@comp/ui/editor/extensions'; interface CommentRichTextFieldProps { value: JSONContent | null; @@ -30,19 +30,16 @@ export function CommentRichTextField({ placeholder = 'Leave a comment... Mention users with @', onMentionSelect, }: CommentRichTextFieldProps) { - const editorSizeStyles: EditorSizeStyle = useMemo( - () => ({ - '--editor-min-height': '120px', - '--editor-height': 'auto', - }), - [], - ); + const editorSizeStyles: EditorSizeStyle = { + '--editor-min-height': '80px', + '--editor-height': 'auto', + }; // Search members for mention suggestions - use the members prop directly const searchMembers = useCallback( (query: string): MentionUser[] => { if (!members || members.length === 0) return []; - + // Show first 20 members immediately when query is empty if (!query || query.trim() === '') { return members.slice(0, 20); @@ -108,7 +105,8 @@ export function CommentRichTextField({ editorProps: { attributes: { class: - 'comment-editor prose-sm max-w-none focus:outline-none px-3 py-2 text-sm [&_p]:m-0 [&_p]:p-0 [&_p]:text-sm [&_p]:leading-normal', + 'comment-editor prose-sm max-w-none focus:outline-none p-6 text-sm [&_p]:m-0 [&_p]:p-0 [&_p]:text-sm [&_p]:leading-normal', + style: 'min-height: var(--editor-min-height, 240px);', }, }, }, @@ -131,9 +129,11 @@ export function CommentRichTextField({ }, [value, editor]); return ( -
+
); } - diff --git a/apps/app/src/components/risks/charts/RiskMatrixChart.tsx b/apps/app/src/components/risks/charts/RiskMatrixChart.tsx index 1a0caf1b0..eed49630e 100644 --- a/apps/app/src/components/risks/charts/RiskMatrixChart.tsx +++ b/apps/app/src/components/risks/charts/RiskMatrixChart.tsx @@ -63,7 +63,6 @@ const getRiskColor = (level: string) => { }; const probabilityLevels = ['Very Likely', 'Likely', 'Possible', 'Unlikely', 'Very Unlikely']; -const probabilityNumbers = ['5', '4', '3', '2', '1']; const probabilityLabels = [ 'Very Likely (5)', 'Likely (4)', @@ -183,7 +182,10 @@ export function RiskMatrixChart({
-
+
+
+ Likelihood +
@@ -194,11 +196,8 @@ export function RiskMatrixChart({ ))} {probabilityLevels.map((probability, rowIdx) => (
-
- {probabilityNumbers[rowIdx]} +
+ {probabilityLevels[rowIdx]}
{impactLevels.map((impact, colIdx) => { const cell = riskData.find( @@ -230,8 +229,11 @@ export function RiskMatrixChart({
))}
-
- {'Impact'} +
+
+
+ Impact +