@@ -25,6 +25,7 @@ interface MainCardProps {
2525 onExportImage ?: ( ) => void ;
2626 zoomingEnabled ?: boolean ;
2727 onZoomToggle ?: ( ) => void ;
28+ loading ?: boolean ;
2829}
2930
3031export default function MainCard ( {
@@ -39,6 +40,7 @@ export default function MainCard({
3940 onExportImage,
4041 zoomingEnabled,
4142 onZoomToggle,
43+ loading,
4244} : MainCardProps ) {
4345 const [ repoUrl , setRepoUrl ] = useState ( "" ) ;
4446 const [ error , setError ] = useState ( "" ) ;
@@ -53,6 +55,12 @@ export default function MainCard({
5355 }
5456 } , [ username , repo ] ) ;
5557
58+ useEffect ( ( ) => {
59+ if ( loading ) {
60+ setActiveDropdown ( null ) ;
61+ }
62+ } , [ loading ] ) ;
63+
5664 const handleSubmit = ( e : React . FormEvent ) => {
5765 e . preventDefault ( ) ;
5866 setError ( "" ) ;
@@ -109,90 +117,97 @@ export default function MainCard({
109117 { /* Dropdowns Container */ }
110118 { ! isHome && (
111119 < div className = "space-y-4" >
112- { /* Buttons Container */ }
113- < div className = "flex flex-col items-center gap-4 sm:flex-row sm:gap-4" >
114- { showCustomization &&
115- onModify &&
116- onRegenerate &&
117- lastGenerated && (
118- < button
119- onClick = { ( e ) => {
120- e . preventDefault ( ) ;
121- handleDropdownToggle ( "customize" ) ;
122- } }
123- className = { `flex items-center justify-between gap-2 rounded-md border-[3px] border-black px-4 py-2 font-medium text-black transition-colors sm:max-w-[250px] ${
124- activeDropdown === "customize"
125- ? "bg-purple-400"
126- : "bg-purple-300 hover:bg-purple-400"
127- } `}
128- >
129- < span > Customize Diagram</ span >
130- { activeDropdown === "customize" ? (
131- < ChevronUp size = { 20 } />
132- ) : (
133- < ChevronDown size = { 20 } />
120+ { /* Only show buttons and dropdowns when not loading */ }
121+ { ! loading && (
122+ < >
123+ { /* Buttons Container */ }
124+ < div className = "flex flex-col items-center gap-4 sm:flex-row sm:gap-4" >
125+ { showCustomization &&
126+ onModify &&
127+ onRegenerate &&
128+ lastGenerated && (
129+ < button
130+ onClick = { ( e ) => {
131+ e . preventDefault ( ) ;
132+ handleDropdownToggle ( "customize" ) ;
133+ } }
134+ className = { `flex items-center justify-between gap-2 rounded-md border-[3px] border-black px-4 py-2 font-medium text-black transition-colors sm:max-w-[250px] ${
135+ activeDropdown === "customize"
136+ ? "bg-purple-400"
137+ : "bg-purple-300 hover:bg-purple-400"
138+ } `}
139+ >
140+ < span > Customize Diagram</ span >
141+ { activeDropdown === "customize" ? (
142+ < ChevronUp size = { 20 } />
143+ ) : (
144+ < ChevronDown size = { 20 } />
145+ ) }
146+ </ button >
134147 ) }
135- </ button >
136- ) }
137-
138- { onCopy && lastGenerated && onExportImage && (
139- < div className = "flex flex-col items-center justify-center gap-2" >
140- < button
141- onClick = { ( e ) => {
142- e . preventDefault ( ) ;
143- handleDropdownToggle ( "export" ) ;
144- } }
145- className = { `flex items-center justify-between gap-2 rounded-md border-[3px] border-black px-4 py-2 font-medium text-black transition-colors sm:max-w-[250px] ${
146- activeDropdown === "export"
147- ? "bg-purple-400"
148- : "bg-purple-300 hover:bg-purple-400"
149- } `}
150- >
151- < span > Export Diagram</ span >
152- { activeDropdown === "export" ? (
153- < ChevronUp size = { 20 } />
154- ) : (
155- < ChevronDown size = { 20 } />
156- ) }
157- </ button >
148+
149+ { onCopy && lastGenerated && onExportImage && (
150+ < div className = "flex flex-col items-center justify-center gap-2" >
151+ < button
152+ onClick = { ( e ) => {
153+ e . preventDefault ( ) ;
154+ handleDropdownToggle ( "export" ) ;
155+ } }
156+ className = { `flex items-center justify-between gap-2 rounded-md border-[3px] border-black px-4 py-2 font-medium text-black transition-colors sm:max-w-[250px] ${
157+ activeDropdown === "export"
158+ ? "bg-purple-400"
159+ : "bg-purple-300 hover:bg-purple-400"
160+ } `}
161+ >
162+ < span > Export Diagram</ span >
163+ { activeDropdown === "export" ? (
164+ < ChevronUp size = { 20 } />
165+ ) : (
166+ < ChevronDown size = { 20 } />
167+ ) }
168+ </ button >
169+ </ div >
170+ ) }
171+ { lastGenerated && (
172+ < >
173+ < label className = "font-medium text-black" >
174+ Enable Zoom
175+ </ label >
176+ < Switch
177+ checked = { zoomingEnabled }
178+ onCheckedChange = { onZoomToggle }
179+ />
180+ </ >
181+ ) }
158182 </ div >
159- ) }
160- { lastGenerated && (
161- < >
162- < label className = "font-medium text-black" > Enable Zoom</ label >
163- < Switch
164- checked = { zoomingEnabled }
165- onCheckedChange = { onZoomToggle }
166- />
167- </ >
168- ) }
169- </ div >
170183
171- { /* Dropdown Content */ }
172- < div
173- className = { `transition-all duration-200 ${
174- activeDropdown
175- ? "pointer-events-auto max-h-[500px] opacity-100"
176- : "pointer-events-none max-h-0 opacity-0"
177- } `}
178- >
179- { activeDropdown === "customize" && (
180- < CustomizationDropdown
181- onModify = { onModify ! }
182- onRegenerate = { onRegenerate ! }
183- lastGenerated = { lastGenerated ! }
184- isOpen = { true }
185- />
186- ) }
187- { activeDropdown === "export" && (
188- < ExportDropdown
189- onCopy = { onCopy ! }
190- lastGenerated = { lastGenerated ! }
191- onExportImage = { onExportImage ! }
192- isOpen = { true }
193- />
194- ) }
195- </ div >
184+ { /* Dropdown Content */ }
185+ < div
186+ className = { `transition-all duration-200 ${
187+ activeDropdown
188+ ? "pointer-events-auto max-h-[500px] opacity-100"
189+ : "pointer-events-none max-h-0 opacity-0"
190+ } `}
191+ >
192+ { activeDropdown === "customize" && (
193+ < CustomizationDropdown
194+ onModify = { onModify ! }
195+ onRegenerate = { onRegenerate ! }
196+ lastGenerated = { lastGenerated ! }
197+ isOpen = { true }
198+ />
199+ ) }
200+ { activeDropdown === "export" && (
201+ < ExportDropdown
202+ onCopy = { onCopy ! }
203+ lastGenerated = { lastGenerated ! }
204+ onExportImage = { onExportImage ! }
205+ isOpen = { true }
206+ />
207+ ) }
208+ </ div >
209+ </ >
210+ ) }
196211 </ div >
197212 ) }
198213
0 commit comments