Skip to content

Commit 531b6e0

Browse files
authored
Merge pull request #132 from oasisprotocol/mz/helpSection
Add help section to create flow
2 parents eccbda9 + b4361f7 commit 531b6e0

File tree

8 files changed

+139
-76
lines changed

8 files changed

+139
-76
lines changed

src/pages/CreateApp/AgentStep.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ export const AgentStep: FC<AgentStepProps> = ({
2424
selectedTemplateId,
2525
}) => {
2626
return (
27-
<CreateLayout currentStep={2} selectedTemplateName={selectedTemplateName}>
27+
<CreateLayout
28+
currentStep={2}
29+
selectedTemplateName={selectedTemplateName}
30+
selectedTemplateId={selectedTemplateId}
31+
>
2832
<CreateFormHeader title="Setup Agent" />
2933

3034
{selectedTemplateId === 'tgbot' && (

src/pages/CreateApp/AgentStepHints.tsx

Lines changed: 0 additions & 66 deletions
This file was deleted.

src/pages/CreateApp/BuildStep.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import { CreateFormNavigation } from './CreateFormNavigation'
55
import { BuildForm } from '../../components/BuildForm'
66
import { BuildFormData } from '../../types/build-form.ts'
77

8-
type AgentStepProps = {
8+
type BuildStepProps = {
99
handleNext: () => void
1010
handleBack: () => void
1111
build?: BuildFormData
1212
setAppDataForm: (data: { build: BuildFormData }) => void
1313
selectedTemplateName?: string
14+
selectedTemplateId?: string
1415
selectedTemplateRequirements?: {
1516
tee: 'tdx' | 'sgx' | undefined
1617
cpus: number | undefined
@@ -19,12 +20,13 @@ type AgentStepProps = {
1920
}
2021
}
2122

22-
export const BuildStep: FC<AgentStepProps> = ({
23+
export const BuildStep: FC<BuildStepProps> = ({
2324
handleNext,
2425
handleBack,
2526
build,
2627
setAppDataForm,
2728
selectedTemplateName,
29+
selectedTemplateId,
2830
selectedTemplateRequirements,
2931
}) => {
3032
const onSubmit = (values: BuildFormData) => {
@@ -33,7 +35,11 @@ export const BuildStep: FC<AgentStepProps> = ({
3335
}
3436

3537
return (
36-
<CreateLayout currentStep={3} selectedTemplateName={selectedTemplateName}>
38+
<CreateLayout
39+
currentStep={3}
40+
selectedTemplateName={selectedTemplateName}
41+
selectedTemplateId={selectedTemplateId}
42+
>
3743
<CreateFormHeader title="Configure machine" />
3844

3945
<BuildForm

src/pages/CreateApp/CreateLayout.tsx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { FC, ReactNode } from 'react'
2+
import { useState, useEffect } from 'react'
23
import { Header } from '../../components/Layout/Header'
34
import { Footer } from '../../components/Layout/Footer'
45
import {
@@ -9,14 +10,30 @@ import {
910
} from '@oasisprotocol/ui-library/src/components/ui/sidebar'
1011
import { Layout } from '@oasisprotocol/ui-library/src/components/ui/layout'
1112
import { SidebarItemLabel } from './SidebarItemLabel'
13+
import { HelpWidget } from './HelpWidget'
1214

1315
type CreateLayoutProps = {
1416
children: ReactNode
1517
currentStep?: number
1618
selectedTemplateName?: string
19+
selectedTemplateId?: string
1720
}
1821

19-
export const CreateLayout: FC<CreateLayoutProps> = ({ children, currentStep = 1, selectedTemplateName }) => {
22+
export const CreateLayout: FC<CreateLayoutProps> = ({
23+
children,
24+
currentStep = 1,
25+
selectedTemplateName,
26+
selectedTemplateId,
27+
}) => {
28+
const [isHelpPanelExpanded, setIsHelpPanelExpanded] = useState(() => {
29+
const saved = localStorage.getItem('help-expanded')
30+
return saved ? JSON.parse(saved) : false
31+
})
32+
33+
useEffect(() => {
34+
localStorage.setItem('help-expanded', JSON.stringify(isHelpPanelExpanded))
35+
}, [isHelpPanelExpanded])
36+
2037
const sidebarItems = [
2138
{ label: 'Input metadata', active: currentStep === 1 },
2239
{ label: 'Setup agent', active: currentStep === 2 },
@@ -51,7 +68,12 @@ export const CreateLayout: FC<CreateLayoutProps> = ({ children, currentStep = 1,
5168
}
5269
>
5370
<div className="flex-1 p-6 h-full">
54-
<div className="flex-1 flex flex-col md:flex-row items-start h-full">
71+
<div className="flex-1 flex flex-col items-start h-full relative">
72+
<HelpWidget
73+
selectedTemplateId={selectedTemplateId}
74+
isExpanded={isHelpPanelExpanded}
75+
setIsExpanded={setIsHelpPanelExpanded}
76+
/>
5577
<div className="max-w-lg mx-auto px-8 py-12 flex flex-col gap-8 items-center w-full">
5678
{children}
5779
</div>

src/pages/CreateApp/HelpWidget.tsx

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { type FC } from 'react'
2+
import ReactMarkdown from 'react-markdown'
3+
import { Button } from '@oasisprotocol/ui-library/src/components/ui/button'
4+
import { ChevronRight, HelpCircle } from 'lucide-react'
5+
import { cn } from '@oasisprotocol/ui-library/src/lib/utils'
6+
import xAgentDocs from '../../../templates/x-agent/README.md?raw'
7+
import tbotDocs from '../../../templates/tgbot/README.md?raw'
8+
import hlCopyTraderDocs from '../../../templates/hl-copy-trader/README.md?raw'
9+
10+
type HelpWidgetProps = {
11+
selectedTemplateId?: string
12+
isExpanded: boolean
13+
setIsExpanded: (expanded: boolean) => void
14+
}
15+
16+
export const HelpWidget: FC<HelpWidgetProps> = ({ selectedTemplateId, isExpanded, setIsExpanded }) => {
17+
const getMarkdownForTemplate = (templateId: string) => {
18+
switch (templateId) {
19+
case 'tgbot':
20+
return tbotDocs
21+
case 'x-agent':
22+
return xAgentDocs
23+
case 'hl-copy-trader':
24+
return hlCopyTraderDocs
25+
default:
26+
return ''
27+
}
28+
}
29+
30+
if (!selectedTemplateId) {
31+
return null
32+
}
33+
34+
const markdown = getMarkdownForTemplate(selectedTemplateId)
35+
36+
if (!markdown) {
37+
return null
38+
}
39+
40+
return (
41+
<>
42+
<div
43+
className={cn('right-0 top-26 md:top-16 h-[calc(100vh-8rem)] flex', !isExpanded ? 'hidden' : 'fixed')}
44+
>
45+
<div className="bg-background border-l border-border transition-transform duration-300 ease-in-out flex flex-col w-[min(380px,100vw)]">
46+
<div className="flex items-center justify-between p-4 border-b bg-card">
47+
<div className="flex items-center gap-2">
48+
<HelpCircle className="h-4 w-4" />
49+
<span className="text-sm font-medium">Template Guide</span>
50+
</div>
51+
<Button
52+
variant="ghost"
53+
size="sm"
54+
onClick={() => setIsExpanded(false)}
55+
className="h-8 w-8 p-0 hover:bg-muted"
56+
title="Close panel"
57+
>
58+
<ChevronRight className="h-4 w-4" />
59+
</Button>
60+
</div>
61+
62+
<div className="flex-1 overflow-y-auto p-4">
63+
{/* prose classes https://github.com/tailwindlabs/tailwindcss-typography */}
64+
<div className="prose prose-sm dark:prose-invert max-w-none">
65+
<ReactMarkdown>{markdown}</ReactMarkdown>
66+
</div>
67+
</div>
68+
</div>
69+
</div>
70+
<Button
71+
variant="secondary"
72+
onClick={() => setIsExpanded(!isExpanded)}
73+
className={cn('absolute top-0 right-0 transition-all duration-300', {
74+
'opacity-0 pointer-events-none': isExpanded,
75+
'opacity-100': !isExpanded,
76+
})}
77+
>
78+
Need help?
79+
</Button>
80+
</>
81+
)
82+
}

src/pages/CreateApp/MetadataStep.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ type MetadataStepProps = {
1212
setAppDataForm: (data: { metadata: MetadataFormData }) => void
1313
metadata?: MetadataFormData
1414
selectedTemplateName?: string
15+
selectedTemplateId?: string
1516
}
1617

1718
export const MetadataStep: FC<MetadataStepProps> = ({
1819
handleNext,
1920
setAppDataForm,
2021
metadata,
2122
selectedTemplateName,
23+
selectedTemplateId,
2224
}) => {
2325
const form = useForm<MetadataFormData>({
2426
resolver: zodResolver(metadataFormSchema),
@@ -43,7 +45,11 @@ export const MetadataStep: FC<MetadataStepProps> = ({
4345
}
4446

4547
return (
46-
<CreateLayout currentStep={1} selectedTemplateName={selectedTemplateName}>
48+
<CreateLayout
49+
currentStep={1}
50+
selectedTemplateName={selectedTemplateName}
51+
selectedTemplateId={selectedTemplateId}
52+
>
4753
<CreateFormHeader
4854
title="Input Metadata"
4955
description="All data you provide here will be visible publicly on-chain."

src/pages/CreateApp/PaymentStep.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@ import { useNetwork } from '../../hooks/useNetwork.ts'
1414
import { sapphire, sapphireTestnet } from 'viem/chains'
1515
import { useTicker } from '../../hooks/useTicker'
1616

17-
type AgentStepProps = {
17+
type PaymentStepProps = {
1818
handleNext: () => void
1919
handleBack: () => void
2020
selectedTemplateName?: string
21+
selectedTemplateId?: string
2122
appData?: AppData
2223
}
2324

24-
export const PaymentStep: FC<AgentStepProps> = ({
25+
export const PaymentStep: FC<PaymentStepProps> = ({
2526
handleNext,
2627
handleBack,
2728
selectedTemplateName,
29+
selectedTemplateId,
2830
appData,
2931
}) => {
3032
const { address } = useAccount()
@@ -61,7 +63,11 @@ export const PaymentStep: FC<AgentStepProps> = ({
6163
}
6264

6365
return (
64-
<CreateLayout currentStep={4} selectedTemplateName={selectedTemplateName}>
66+
<CreateLayout
67+
currentStep={4}
68+
selectedTemplateName={selectedTemplateName}
69+
selectedTemplateId={selectedTemplateId}
70+
>
6571
<CreateFormHeader
6672
title="Payment"
6773
description={

src/pages/CreateApp/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export const Create: FC = () => {
4242
metadata={appData?.metadata}
4343
setAppDataForm={setAppDataForm}
4444
selectedTemplateName={selectedTemplate?.name}
45+
selectedTemplateId={selectedTemplate?.id}
4546
/>
4647
)}
4748
{currentStep === 2 && (
@@ -61,6 +62,7 @@ export const Create: FC = () => {
6162
build={appData?.build}
6263
setAppDataForm={setAppDataForm}
6364
selectedTemplateName={selectedTemplate?.name}
65+
selectedTemplateId={selectedTemplate?.id}
6466
selectedTemplateRequirements={{
6567
tee: selectedTemplate?.yaml.rofl.tee as 'tdx' | 'sgx' | undefined,
6668
cpus: selectedTemplate?.yaml.rofl.resources.cpus as number | undefined,
@@ -75,6 +77,7 @@ export const Create: FC = () => {
7577
handleBack={handleBack}
7678
appData={appData}
7779
selectedTemplateName={selectedTemplate?.name}
80+
selectedTemplateId={selectedTemplate?.id}
7881
/>
7982
)}
8083
{currentStep === 5 && <BootstrapStep appData={appData} template={selectedTemplate} />}

0 commit comments

Comments
 (0)