Skip to content

Commit e88d011

Browse files
committed
feat: add button for install / run in extension detail page
1 parent 0e5d58d commit e88d011

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

view/app/extensions/[id]/page.tsx

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
'use client';
22

33
import { useEffect, useState } from 'react';
4-
import { useParams, useSearchParams } from 'next/navigation';
4+
import { useParams, useRouter, useSearchParams } from 'next/navigation';
55
import PageLayout from '@/components/layout/page-layout';
66
import { useTranslation } from '@/hooks/use-translation';
77
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
88
import { Skeleton } from '@/components/ui/skeleton';
99
import { Info, Terminal } from 'lucide-react';
10-
import { useGetExtensionQuery } from '@/redux/services/extensions/extensionsApi';
10+
import { useGetExtensionQuery, useRunExtensionMutation } from '@/redux/services/extensions/extensionsApi';
1111
import OverviewTab from './components/OverviewTab';
1212
import ExecutionsTab from './components/LogsTab';
13+
import { Button } from '@/components/ui/button';
14+
import ExtensionInput from '@/app/extensions/components/extension-input';
1315

1416
export default function ExtensionDetailsPage() {
1517
const { t } = useTranslation();
1618
const params = useParams();
1719
const search = useSearchParams();
20+
const router = useRouter();
1821
const id = (params?.id as string) || '';
1922

2023
const { data: extension, isLoading } = useGetExtensionQuery({ id });
2124
const [tab, setTab] = useState<string>('overview');
25+
const [runModalOpen, setRunModalOpen] = useState(false);
26+
const [runExtension, { isLoading: isRunning } ] = useRunExtensionMutation();
2227

2328
useEffect(() => {
2429
const exec = search?.get('exec');
@@ -46,6 +51,19 @@ export default function ExtensionDetailsPage() {
4651
</div>
4752
)}
4853
</div>
54+
<div>
55+
{isLoading ? (
56+
<Skeleton className="h-9 w-28" />
57+
) : (
58+
<Button
59+
className="min-w-[112px]"
60+
onClick={() => setRunModalOpen(true)}
61+
disabled={!extension || isRunning}
62+
>
63+
{extension?.extension_type === 'install' ? (t('extensions.install') || 'Install') : (t('extensions.run') || 'Run')}
64+
</Button>
65+
)}
66+
</div>
4967
</div>
5068

5169
<div className="mt-6">
@@ -70,6 +88,17 @@ export default function ExtensionDetailsPage() {
7088
</TabsContent>
7189
</Tabs>
7290
</div>
91+
<ExtensionInput
92+
open={runModalOpen}
93+
onOpenChange={setRunModalOpen}
94+
extension={extension}
95+
onSubmit={async (values) => {
96+
if (!extension) return;
97+
const exec = await runExtension({ extensionId: extension.extension_id, body: { variables: values } }).unwrap();
98+
setRunModalOpen(false);
99+
router.push(`/extensions/${extension.id}?exec=${exec.id}&openLogs=1`);
100+
}}
101+
/>
73102
</PageLayout>
74103
);
75104
}

0 commit comments

Comments
 (0)