forked from QuantumNous/new-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusage-mode-step.tsx
More file actions
129 lines (119 loc) · 4.35 KB
/
Copy pathusage-mode-step.tsx
File metadata and controls
129 lines (119 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import { Building2, Home, Presentation } from 'lucide-react'
import type { ComponentType } from 'react'
import type { UseFormReturn } from 'react-hook-form'
import { useTranslation } from 'react-i18next'
import {
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@/components/ui/form'
import { Label } from '@/components/ui/label'
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'
import { cn } from '@/lib/utils'
import type { SetupFormValues, SetupUsageMode } from '../types'
interface UsageModeStepProps {
form: UseFormReturn<SetupFormValues>
}
const USAGE_MODE_OPTIONS: Array<{
value: SetupUsageMode
titleKey: string
descriptionKey: string
icon: ComponentType<{ className?: string }>
}> = [
{
value: 'external',
titleKey: 'External operations',
descriptionKey:
'Serve multiple users or teams with billing and quota control.',
icon: Building2,
},
{
value: 'self',
titleKey: 'Personal use',
descriptionKey:
'Best for single-tenant deployments. Pricing and billing options stay hidden.',
icon: Home,
},
{
value: 'demo',
titleKey: 'Demo site',
descriptionKey:
'Showcase core capabilities with demo credentials and limited access.',
icon: Presentation,
},
]
export function UsageModeStep({ form }: UsageModeStepProps) {
const { t } = useTranslation()
return (
<FormField
control={form.control}
name='usageMode'
render={({ field }) => (
<FormItem>
<FormLabel>{t('How will you use the platform?')}</FormLabel>
<FormControl>
<RadioGroup
value={field.value}
onValueChange={(value) => {
form.clearErrors('usageMode')
field.onChange(value as SetupUsageMode)
}}
className='grid gap-3 sm:grid-cols-3'
>
{USAGE_MODE_OPTIONS.map(
({ value, titleKey, descriptionKey, icon: Icon }) => {
return (
<Label
key={value}
htmlFor={`usage-mode-${value}`}
className={cn(
'hover:border-primary/40 focus-within:border-primary/50 has-data-[checked]:border-primary has-data-[checked]:ring-primary/20 group bg-card border-muted flex cursor-pointer flex-col gap-3 rounded-xl border p-4 font-normal transition-all has-data-[checked]:ring-2'
)}
>
<div className='flex items-center gap-3'>
<RadioGroupItem
id={`usage-mode-${value}`}
value={value}
className='mt-1'
/>
<div>
<Label
htmlFor={`usage-mode-${value}`}
className='text-base leading-none font-semibold'
>
{t(titleKey)}
</Label>
<p className='text-muted-foreground mt-2 text-sm'>
{t(descriptionKey)}
</p>
</div>
<Icon className='text-muted-foreground/70 group-hover:text-primary group-focus-within:text-primary group-has-data-[checked]:text-primary ml-auto size-5 shrink-0 transition' />
</div>
</Label>
)
}
)}
</RadioGroup>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
)
}