feat(PBI-96/T-1071): DisabledFolderBanner + integratie (P2-fix)
- components/product-docs/disabled-folder-banner.tsx: server-component banner met AlertTriangle, status-blocked-tokens, en link naar settings. Tekst legt uit: "lezen mag, nieuwe/edit kan niet, delete wél (cleanup)". - Integratie in folder-page: render banner als !isFolderEnabled; de bestaande conditional verbergt de "Nieuwe doc"-knop al. - Integratie in detail-page: render banner als !isFolderEnabled; de bestaande conditional verbergt de Edit-knop al. Delete blijft zichtbaar voor cleanup (zoals plan §C.4 voorschrijft). - ST-D is hiermee compleet — alle 5 UI-tasks gereed. Directe URLs naar disabled folders blijven leesbaar (P2-review-fix volledig). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a59c35b9ae
commit
a892ff83ca
3 changed files with 50 additions and 0 deletions
|
|
@ -19,6 +19,7 @@ import { FOLDER_LABELS } from '@/components/product-docs/product-docs-index'
|
|||
import { ProductDocViewer } from '@/components/product-docs/product-doc-viewer'
|
||||
import { ProductDocEditor } from '@/components/product-docs/product-doc-editor'
|
||||
import { DeleteProductDocButton } from '@/components/product-docs/delete-product-doc-button'
|
||||
import { DisabledFolderBanner } from '@/components/product-docs/disabled-folder-banner'
|
||||
|
||||
interface Props {
|
||||
params: Promise<{ id: string; folder: string; slug: string }>
|
||||
|
|
@ -113,6 +114,8 @@ export default async function ProductDocDetailPage({
|
|||
)}
|
||||
</div>
|
||||
|
||||
{!isFolderEnabled && <DisabledFolderBanner productId={id} />}
|
||||
|
||||
{isEditMode ? (
|
||||
<ProductDocEditor
|
||||
docId={doc.id}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import {
|
|||
type ProductDocListRow,
|
||||
} from '@/components/product-docs/product-docs-folder-list'
|
||||
import { NewProductDocDialog } from '@/components/product-docs/new-product-doc-dialog'
|
||||
import { DisabledFolderBanner } from '@/components/product-docs/disabled-folder-banner'
|
||||
|
||||
interface Props {
|
||||
params: Promise<{ id: string; folder: string }>
|
||||
|
|
@ -91,6 +92,8 @@ export default async function ProductDocsFolderPage({ params }: Props) {
|
|||
)}
|
||||
</div>
|
||||
|
||||
{!isFolderEnabled && <DisabledFolderBanner productId={id} />}
|
||||
|
||||
<ProductDocsFolderList productId={id} folderApi={folderApi} docs={rows} />
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
44
components/product-docs/disabled-folder-banner.tsx
Normal file
44
components/product-docs/disabled-folder-banner.tsx
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
// Banner voor pages die naar een disabled folder verwijzen. Server-component.
|
||||
//
|
||||
// P2-review-fix uit
|
||||
// docs/recommendations/product-docs-storage-system-review-2026-05-16.md:
|
||||
// disabled folder is "verborgen maar leesbaar" — directe URLs blijven werken,
|
||||
// maar mutaties zijn uitgeschakeld in de UI. Banner maakt de staat zichtbaar.
|
||||
|
||||
import Link from 'next/link'
|
||||
import { AlertTriangle } from 'lucide-react'
|
||||
|
||||
import { debugProps } from '@/lib/debug'
|
||||
|
||||
interface Props {
|
||||
productId: string
|
||||
}
|
||||
|
||||
export function DisabledFolderBanner({ productId }: Props) {
|
||||
return (
|
||||
<div
|
||||
className="rounded-md border border-status-blocked/30 bg-status-blocked/10 p-3 flex items-start gap-2"
|
||||
{...debugProps(
|
||||
'disabled-folder-banner',
|
||||
'DisabledFolderBanner',
|
||||
'components/product-docs/disabled-folder-banner.tsx',
|
||||
)}
|
||||
>
|
||||
<AlertTriangle className="size-4 text-status-blocked shrink-0 mt-0.5" />
|
||||
<div className="text-xs space-y-1 flex-1">
|
||||
<p className="font-medium text-status-blocked">Folder uitgeschakeld</p>
|
||||
<p className="text-muted-foreground">
|
||||
Deze folder staat uit in de instellingen. Bestaande docs blijven
|
||||
leesbaar; nieuwe docs kunnen niet worden aangemaakt en bestaande
|
||||
kunnen niet worden bewerkt. Verwijderen is wel mogelijk voor cleanup.
|
||||
</p>
|
||||
<Link
|
||||
href={`/products/${productId}/docs/settings`}
|
||||
className="inline-block text-primary hover:underline mt-1"
|
||||
>
|
||||
Folder-instellingen openen →
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue