Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/components/site-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ function ButtonToRun( site: SiteDetails ) {
);
}
function SiteItem( { site }: { site: SiteDetails } ) {
const { selectedSite, setSelectedSiteId, loadingServer, isSiteDeleting } = useSiteDetails();
const { sites, selectedSite, setSelectedSiteId, loadingServer, isSiteDeleting } =
useSiteDetails();
const isSelected = site === selectedSite;
const { isSiteImporting, isSiteExporting } = useImportExport();
const { isSiteIdPulling, isSiteIdPushing } = useSyncSites();
Expand Down Expand Up @@ -160,6 +161,7 @@ function SiteItem( { site }: { site: SiteDetails } ) {
const ipcApi = getIpcApi();
const isLoading = loadingServer[ site.id ] || false;
const isAddingSite = site.isAddingSite || false;
const isAnySiteAdding = sites.some( ( s ) => s.isAddingSite );
const finderLabel = isWindows() ? __( 'File Explorer' ) : __( 'Finder' );
const editorLabel =
editor && supportedEditorConfig[ editor ] ? supportedEditorConfig[ editor ].label : null;
Expand All @@ -170,6 +172,7 @@ function SiteItem( { site }: { site: SiteDetails } ) {
isRunning: site.running,
isLoading,
isAddingSite,
isAnySiteAdding,
isSyncing,
finderLabel,
editorLabel,
Expand Down
6 changes: 4 additions & 2 deletions src/ipc-handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1190,6 +1190,7 @@ export function showSiteContextMenu(
isRunning: boolean;
isLoading: boolean;
isAddingSite: boolean;
isAnySiteAdding: boolean;
isSyncing: boolean;
finderLabel: string;
editorLabel: string | null;
Expand All @@ -1201,6 +1202,7 @@ export function showSiteContextMenu(
isRunning,
isLoading,
isAddingSite,
isAnySiteAdding,
isSyncing,
finderLabel,
editorLabel,
Expand Down Expand Up @@ -1369,7 +1371,7 @@ export function showSiteContextMenu(
menu.append(
new MenuItem( {
label: __( 'Copy site…' ),
enabled: ! isLoading && ! isAddingSite,
enabled: ! isLoading && ! isAnySiteAdding,
click: () => {
sendIpcEventToRendererWithWindow(
BrowserWindow.fromWebContents( event.sender ),
Expand All @@ -1386,7 +1388,7 @@ export function showSiteContextMenu(
menu.append(
new MenuItem( {
label: __( 'Delete site…' ),
enabled: ! isLoading && ! isAddingSite && ! isSyncing,
enabled: ! isLoading && ! isAnySiteAdding && ! isSyncing,
click: () => {
sendIpcEventToRendererWithWindow(
BrowserWindow.fromWebContents( event.sender ),
Expand Down
36 changes: 36 additions & 0 deletions src/tests/show-site-context-menu.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ describe( 'showSiteContextMenu', () => {

const baseContext = {
siteId: 'test-site-id',
isAnySiteAdding: false,
finderLabel: 'Finder',
editorLabel: 'VS Code',
terminalLabel: 'Terminal',
Expand Down Expand Up @@ -91,6 +92,7 @@ describe( 'showSiteContextMenu', () => {
isRunning: true,
isLoading: false,
isAddingSite: true,
isAnySiteAdding: true,
isSyncing: false,
} );

Expand All @@ -117,6 +119,7 @@ describe( 'showSiteContextMenu', () => {
isRunning: false,
isLoading: false,
isAddingSite: true,
isAnySiteAdding: true,
isSyncing: false,
} );

Expand All @@ -125,6 +128,39 @@ describe( 'showSiteContextMenu', () => {
} );
} );

describe( 'when another site is being added', () => {
it( 'should disable Copy and Delete but keep other items enabled', () => {
showSiteContextMenu( mockIpcMainInvokeEvent, {
...baseContext,
isRunning: true,
isLoading: false,
isAddingSite: false,
isAnySiteAdding: true,
isSyncing: false,
} );

const stopItem = menuItems.find( ( item ) => item.label === 'Stop' );
const openSiteItem = menuItems.find( ( item ) => item.label === 'Open site' );
const wpAdminItem = menuItems.find( ( item ) => item.label === 'WP admin' );
const finderItem = menuItems.find( ( item ) => item.label === 'Open in Finder' );
const editorItem = menuItems.find( ( item ) => item.label === 'Open in VS Code' );
const terminalItem = menuItems.find( ( item ) => item.label === 'Open in Terminal' );
const editItem = menuItems.find( ( item ) => item.label === 'Edit site…' );
const copyItem = menuItems.find( ( item ) => item.label === 'Copy site…' );
const deleteItem = menuItems.find( ( item ) => item.label === 'Delete site…' );

expect( stopItem?.enabled ).toBe( true );
expect( openSiteItem?.enabled ).toBe( true );
expect( wpAdminItem?.enabled ).toBe( true );
expect( finderItem?.enabled ).toBe( true );
expect( editorItem?.enabled ).toBe( true );
expect( terminalItem?.enabled ).toBe( true );
expect( editItem?.enabled ).toBe( true );
expect( copyItem?.enabled ).toBe( false );
expect( deleteItem?.enabled ).toBe( false );
} );
} );

describe( 'when site is stopped', () => {
it( 'should show Start menu item as enabled when not loading or adding site', () => {
showSiteContextMenu( mockIpcMainInvokeEvent, {
Expand Down