11import * as Sentry from '@sentry/electron/renderer' ;
2+ import { Icon } from '@wordpress/components' ;
23import { __ } from '@wordpress/i18n' ;
34import {
45 archive ,
56 code ,
67 desktop ,
78 pencil ,
9+ info ,
810 layout ,
911 navigation ,
1012 page ,
@@ -16,15 +18,19 @@ import {
1618import { useI18n } from '@wordpress/react-i18n' ;
1719import { useState } from 'react' ;
1820import { ArrowIcon } from 'src/components/arrow-icon' ;
21+ import Button from 'src/components/button' ;
1922import { ButtonsSection , ButtonsSectionProps } from 'src/components/buttons-section' ;
23+ import { useContentTabs } from 'src/hooks/use-content-tabs' ;
2024import { useSiteDetails } from 'src/hooks/use-site-details' ;
2125import { useThemeDetails } from 'src/hooks/use-theme-details' ;
2226import { isWindows } from 'src/lib/app-globals' ;
2327import { cx } from 'src/lib/cx' ;
2428import { getIpcApi } from 'src/lib/get-ipc-api' ;
2529import { supportedEditorConfig } from 'src/modules/user-settings/lib/editor' ;
2630import { getTerminalName } from 'src/modules/user-settings/lib/terminal' ;
31+ import { useAppDispatch } from 'src/stores' ;
2732import { useGetUserEditorQuery , useGetUserTerminalQuery } from 'src/stores/installed-apps-api' ;
33+ import { connectedSitesActions , useConnectedSitesData } from 'src/stores/sync' ;
2834
2935interface ContentTabOverviewProps {
3036 selectedSite : SiteDetails ;
@@ -181,6 +187,36 @@ function ShortcutsSection( { selectedSite }: Pick< ContentTabOverviewProps, 'sel
181187 return < ButtonsSection buttonsArray = { buttonsArray } title = { __ ( 'Open in…' ) } /> ;
182188}
183189
190+ function PublishBanner ( {
191+ selectedSite : _selectedSite ,
192+ } : Pick < ContentTabOverviewProps , 'selectedSite' > ) {
193+ const { __ } = useI18n ( ) ;
194+ const dispatch = useAppDispatch ( ) ;
195+ const { setSelectedTab } = useContentTabs ( ) ;
196+ const { connectedSites } = useConnectedSitesData ( ) ;
197+
198+ const handlePublishClick = ( ) => {
199+ // Navigate to Sync tab and open modal with 'push' mode
200+ setSelectedTab ( 'sync' ) ;
201+ dispatch ( connectedSitesActions . openModal ( 'push' ) ) ;
202+ } ;
203+
204+ // Only show banner if site has no connected sites
205+ if ( connectedSites . length > 0 ) {
206+ return null ;
207+ }
208+
209+ return (
210+ < div className = "w-full flex items-center gap-3 px-4 py-3 rounded-sm bg-a8c-gray-0 border border-a8c-gray-5" >
211+ < Icon icon = { info } size = { 20 } className = "text-a8c-blue-50 flex-shrink-0" />
212+ < p className = "flex-1 text-black" > { __ ( 'Your site is ready for publishing' ) } </ p >
213+ < Button variant = "primary" onClick = { handlePublishClick } disabled = { false } >
214+ { __ ( 'Publish site' ) }
215+ </ Button >
216+ </ div >
217+ ) ;
218+ }
219+
184220export function ContentTabOverview ( { selectedSite } : ContentTabOverviewProps ) {
185221 const [ isThumbnailError , setIsThumbnailError ] = useState ( false ) ;
186222 const { __ } = useI18n ( ) ;
@@ -260,6 +296,7 @@ export function ContentTabOverview( { selectedSite }: ContentTabOverviewProps )
260296 </ div >
261297 </ div >
262298 < div className = "flex flex-1 flex-col justify-start items-start gap-8" >
299+ < PublishBanner selectedSite = { selectedSite } />
263300 < CustomizeSection
264301 selectedSite = { selectedSite }
265302 themeDetails = { themeDetails }
0 commit comments