@@ -5,7 +5,11 @@ import { Switch } from '../ui/switch'
55import { Label } from '../ui/label'
66import { Button } from '../ui/button'
77
8- import { useAddOns , useProjectOptions } from '../../store/project'
8+ import {
9+ useAddOns ,
10+ useProjectOptions ,
11+ useShowHostingOptions ,
12+ } from '../../store/project'
913
1014import ImportCustomAddOn from '../custom-add-on-dialog'
1115import AddOnInfoDialog from '../add-on-info-dialog'
@@ -21,10 +25,13 @@ const addOnTypeLabels: Record<string, string> = {
2125}
2226
2327export default function SelectedAddOns ( ) {
28+ const showHostingOptions = useShowHostingOptions ( )
2429 const { availableAddOns, addOnState, toggleAddOn, setAddOnOption } =
2530 useAddOns ( )
2631 const addOnOptions = useProjectOptions ( ( state ) => state . addOnOptions )
2732
33+ console . log ( 'showHostingOptions' , showHostingOptions )
34+
2835 const sortedAddOns = useMemo ( ( ) => {
2936 return availableAddOns . sort ( ( a , b ) => {
3037 const aPriority = a . priority ?? 0
@@ -57,74 +64,77 @@ export default function SelectedAddOns() {
5764 disabled = { configAddOn ? ! addOnState [ configAddOn . id ] ?. enabled : false }
5865 />
5966 < div className = "max-h-[60vh] overflow-y-auto space-y-2" >
60- { Object . keys ( addOnTypeLabels ) . map ( ( type ) => (
61- < Fragment key = { type } >
62- { sortedAddOns . filter ( ( addOn ) => addOn . type === type ) . length > 0 && (
63- < div
64- key = { `${ type } -add-ons` }
65- className = "block p-4 bg-gray-500/10 hover:bg-gray-500/20 rounded-lg transition-colors space-y-4 active"
66- >
67- < h3 className = "font-medium" > { addOnTypeLabels [ type ] } </ h3 >
68- < div className = "space-y-3" >
69- < div className = "flex flex-row flex-wrap" >
70- { sortedAddOns
71- . filter ( ( addOn ) => addOn . type === type )
72- . map ( ( addOn ) => (
73- < div key = { addOn . id } className = "w-1/2" >
74- < div className = "flex flex-row items-center justify-between" >
75- < div className = "p-1 flex flex-row items-center" >
76- < Switch
77- id = { addOn . id }
78- checked = { addOnState [ addOn . id ] . selected }
79- disabled = { ! addOnState [ addOn . id ] . enabled }
80- onCheckedChange = { ( ) => {
81- toggleAddOn ( addOn . id )
82- } }
83- />
84- < Label
85- htmlFor = { addOn . id }
86- className = "pl-2 font-semibold text-gray-300 flex items-center gap-2"
87- >
88- { addOn . smallLogo && (
89- < img
90- src = { `data:image/svg+xml,${ encodeURIComponent (
91- addOn . smallLogo ,
92- ) } `}
93- alt = { addOn . name }
94- className = "w-5"
95- />
96- ) }
97- { addOn . name }
98- </ Label >
99- </ div >
100- < div className = "flex items-center gap-1" >
101- { addOnState [ addOn . id ] . selected &&
102- addOn . options &&
103- Object . keys ( addOn . options ) . length > 0 && (
104- < Button
105- variant = "ghost"
106- size = "sm"
107- className = "h-6 w-6 p-0 text-gray-600 hover:text-gray-400"
108- onClick = { ( ) => setConfigAddOn ( addOn ) }
109- disabled = { ! addOnState [ addOn . id ] . enabled }
110- >
111- < SettingsIcon className = "w-4 h-4" />
112- </ Button >
113- ) }
114- < InfoIcon
115- className = "w-4 text-gray-600 cursor-pointer hover:text-gray-400"
116- onClick = { ( ) => setInfoAddOn ( addOn ) }
117- />
67+ { Object . keys ( addOnTypeLabels )
68+ . filter ( ( type ) => ( showHostingOptions ? true : type !== 'host' ) )
69+ . map ( ( type ) => (
70+ < Fragment key = { type } >
71+ { sortedAddOns . filter ( ( addOn ) => addOn . type === type ) . length >
72+ 0 && (
73+ < div
74+ key = { `${ type } -add-ons` }
75+ className = "block p-4 bg-gray-500/10 hover:bg-gray-500/20 rounded-lg transition-colors space-y-4 active"
76+ >
77+ < h3 className = "font-medium" > { addOnTypeLabels [ type ] } </ h3 >
78+ < div className = "space-y-3" >
79+ < div className = "flex flex-row flex-wrap" >
80+ { sortedAddOns
81+ . filter ( ( addOn ) => addOn . type === type )
82+ . map ( ( addOn ) => (
83+ < div key = { addOn . id } className = "w-1/2" >
84+ < div className = "flex flex-row items-center justify-between" >
85+ < div className = "p-1 flex flex-row items-center" >
86+ < Switch
87+ id = { addOn . id }
88+ checked = { addOnState [ addOn . id ] . selected }
89+ disabled = { ! addOnState [ addOn . id ] . enabled }
90+ onCheckedChange = { ( ) => {
91+ toggleAddOn ( addOn . id )
92+ } }
93+ />
94+ < Label
95+ htmlFor = { addOn . id }
96+ className = "pl-2 font-semibold text-gray-300 flex items-center gap-2"
97+ >
98+ { addOn . smallLogo && (
99+ < img
100+ src = { `data:image/svg+xml,${ encodeURIComponent (
101+ addOn . smallLogo ,
102+ ) } `}
103+ alt = { addOn . name }
104+ className = "w-5"
105+ />
106+ ) }
107+ { addOn . name }
108+ </ Label >
109+ </ div >
110+ < div className = "flex items-center gap-1" >
111+ { addOnState [ addOn . id ] . selected &&
112+ addOn . options &&
113+ Object . keys ( addOn . options ) . length > 0 && (
114+ < Button
115+ variant = "ghost"
116+ size = "sm"
117+ className = "h-6 w-6 p-0 text-gray-600 hover:text-gray-400"
118+ onClick = { ( ) => setConfigAddOn ( addOn ) }
119+ disabled = { ! addOnState [ addOn . id ] . enabled }
120+ >
121+ < SettingsIcon className = "w-4 h-4" />
122+ </ Button >
123+ ) }
124+ < InfoIcon
125+ className = "w-4 text-gray-600 cursor-pointer hover:text-gray-400"
126+ onClick = { ( ) => setInfoAddOn ( addOn ) }
127+ />
128+ </ div >
118129 </ div >
119130 </ div >
120- </ div >
121- ) ) }
131+ ) ) }
132+ </ div >
122133 </ div >
123134 </ div >
124- </ div >
125- ) }
126- </ Fragment >
127- ) ) }
135+ ) }
136+ </ Fragment >
137+ ) ) }
128138 </ div >
129139 < div className = "mt-4" >
130140 < ImportCustomAddOn />
0 commit comments