e20d222183
- Prisma schema: added `changelog Json @default("[]")` to Block model
- Migration: 20260324141120_add_changelog_field
- Seed: 8 blocks with actual versions (v1.0–v1.2) and changelog entries
- API: PATCH /blocks/by-path accepts changelog field
- CORS: accept any localhost port (regex pattern)
- BlockChangelog component: renders version history from API or fallback
- BlockMetaBar: loads changelog from API, passes to BlockChangelog
- Removed "API офлайн" text, replaced with subtle gray dot
- Added defaultChangelog prop for offline fallback
- Block pages: removed hardcoded changelog JSX, use defaultChangelog prop
- Updated SPRINTS.md with completed tasks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
"use client";
|
||
|
||
export interface ChangelogEntry {
|
||
version: string;
|
||
date: string;
|
||
changes: string[];
|
||
}
|
||
|
||
interface BlockChangelogProps {
|
||
changelog: ChangelogEntry[];
|
||
}
|
||
|
||
export function BlockChangelog({ changelog }: BlockChangelogProps) {
|
||
if (!changelog || changelog.length === 0) return null;
|
||
|
||
return (
|
||
<section className="space-y-3">
|
||
<h2 className="font-semibold text-base" style={{ color: "var(--bb-text)" }}>
|
||
История версий
|
||
</h2>
|
||
<div className="space-y-2 text-sm" style={{ color: "var(--bb-text-muted)" }}>
|
||
{changelog.map((entry) => (
|
||
<div
|
||
key={entry.version}
|
||
className="p-3 rounded-lg"
|
||
style={{ background: "var(--bb-sidebar-bg)", border: "1px solid var(--bb-border)" }}
|
||
>
|
||
<p className="font-semibold text-xs mb-1" style={{ color: "var(--bb-text)" }}>
|
||
{entry.version} — {entry.date}
|
||
</p>
|
||
<ul className="list-disc list-inside space-y-0.5 text-xs">
|
||
{entry.changes.map((change, i) => (
|
||
<li key={i}>{change}</li>
|
||
))}
|
||
</ul>
|
||
</div>
|
||
))}
|
||
</div>
|
||
</section>
|
||
);
|
||
}
|