Compare commits
No commits in common. "b66fec50750182a76263fc4fd580dea0c116897c" and "4734c809d75538d24508a9d1f9f681d164c07db1" have entirely different histories.
b66fec5075
...
4734c809d7
|
|
@ -16,9 +16,6 @@ interface ReleaseDetailPageProps {
|
|||
params: Promise<{
|
||||
id: string;
|
||||
}>;
|
||||
searchParams: Promise<{
|
||||
tab?: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
const typeColors: Record<string, string> = {
|
||||
|
|
@ -43,12 +40,10 @@ function getStatusColor(status: string) {
|
|||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
export default async function ReleaseDetailPage({ params, searchParams }: ReleaseDetailPageProps) {
|
||||
export default async function ReleaseDetailPage({ params }: ReleaseDetailPageProps) {
|
||||
const { id } = await params;
|
||||
const { tab } = await searchParams;
|
||||
const releaseId = parseInt(id);
|
||||
const release = await getReleaseById(releaseId);
|
||||
const activeTab = tab === 'verify' ? 'verify' : 'deploy';
|
||||
|
||||
if (!release) {
|
||||
notFound();
|
||||
|
|
@ -191,17 +186,13 @@ export default async function ReleaseDetailPage({ params, searchParams }: Releas
|
|||
|
||||
{/* Matrix View (for active) */}
|
||||
{release.status === 'active' && (
|
||||
<Tabs defaultValue={activeTab}>
|
||||
<Tabs defaultValue="deploy">
|
||||
<TabsList>
|
||||
<TabsTrigger value="deploy" asChild>
|
||||
<Link href={`/releases/${releaseId}?tab=deploy`}>
|
||||
Deploy ({stats.done + stats.skipped}/{stats.total})
|
||||
</Link>
|
||||
<TabsTrigger value="deploy">
|
||||
Deploy ({stats.done + stats.skipped}/{stats.total})
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="verify" asChild>
|
||||
<Link href={`/releases/${releaseId}?tab=verify`}>
|
||||
Verify
|
||||
</Link>
|
||||
<TabsTrigger value="verify">
|
||||
Verify
|
||||
</TabsTrigger>
|
||||
</TabsList>
|
||||
|
||||
|
|
|
|||
|
|
@ -45,9 +45,8 @@ export function ReleaseMatrixClient({ stepsByCluster, category, releaseId }: Rel
|
|||
const handleActionComplete = () => {
|
||||
setRefreshKey(prev => prev + 1);
|
||||
setIsPanelOpen(false);
|
||||
// Refresh the page to get updated data, preserving the current tab
|
||||
const currentUrl = new URL(window.location.href);
|
||||
window.location.href = currentUrl.toString();
|
||||
// Refresh the page to get updated data
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
// Server actions wrapped in async functions
|
||||
|
|
|
|||
|
|
@ -17,42 +17,6 @@ import {
|
|||
DialogTrigger,
|
||||
} from '@/components/ui/dialog';
|
||||
|
||||
// Copy button with subtle feedback
|
||||
function CopyButton({ text }: { text: string }) {
|
||||
const [copied, setCopied] = useState(false);
|
||||
|
||||
const handleCopy = async () => {
|
||||
await navigator.clipboard.writeText(text);
|
||||
setCopied(true);
|
||||
setTimeout(() => setCopied(false), 1500);
|
||||
};
|
||||
|
||||
return (
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={handleCopy}
|
||||
className={`h-7 px-2 transition-colors duration-200 ${
|
||||
copied
|
||||
? 'text-green-600 bg-green-50 hover:bg-green-100 hover:text-green-700'
|
||||
: 'text-slate-500 hover:text-slate-700'
|
||||
}`}
|
||||
>
|
||||
{copied ? (
|
||||
<>
|
||||
<Check className="w-3.5 h-3.5 mr-1" />
|
||||
Copied
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Copy className="w-3.5 h-3.5 mr-1" />
|
||||
Copy
|
||||
</>
|
||||
)}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
interface StepDetailPanelProps {
|
||||
step: any;
|
||||
template: any;
|
||||
|
|
@ -259,7 +223,15 @@ export function StepDetailPanel({
|
|||
<div className="flex items-center justify-between mb-2">
|
||||
<label className="text-sm font-medium text-slate-500">Content</label>
|
||||
{!isEditing && (
|
||||
<CopyButton text={step.content} />
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => navigator.clipboard.writeText(step.content)}
|
||||
className="h-7 px-2 text-slate-500 hover:text-slate-700"
|
||||
>
|
||||
<Copy className="w-3.5 h-3.5 mr-1" />
|
||||
Copy
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue