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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions client/dashboard/components/page-header/index.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,24 +72,26 @@ export const FullExample: Story = {
<Button variant="secondary" __next40pxDefaultSize>
Preview
</Button>
<DropdownMenu
icon={ moreVertical }
label="More actions"
toggleProps={ { __next40pxDefaultSize: true } }
>
{ () => (
<>
<MenuGroup>
<MenuItem>Import</MenuItem>
<MenuItem>Export</MenuItem>
<MenuItem>Settings</MenuItem>
</MenuGroup>
<MenuGroup>
<MenuItem>Help</MenuItem>
</MenuGroup>
</>
) }
</DropdownMenu>
<PageHeader.ActionMenu>
<DropdownMenu
icon={ moreVertical }
label="More actions"
toggleProps={ { __next40pxDefaultSize: true } }
>
{ () => (
<>
<MenuGroup>
<MenuItem>Import</MenuItem>
<MenuItem>Export</MenuItem>
<MenuItem>Settings</MenuItem>
</MenuGroup>
<MenuGroup>
<MenuItem>Help</MenuItem>
</MenuGroup>
</>
) }
</DropdownMenu>
</PageHeader.ActionMenu>
</>
),
},
Expand Down
14 changes: 14 additions & 0 deletions client/dashboard/components/page-header/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useMatches } from '@tanstack/react-router';
import { isValidElement } from 'react';
import { SectionHeader } from '../section-header';
import type { PageHeaderProps } from './types';

Expand All @@ -13,6 +14,17 @@ const PageTitle = () => {
return title;
};

/**
* ActionMenu is a specialized wrapper around DropdownMenu for use in PageHeader actions.
*/
const ActionMenu = ( { children }: { children: React.ReactElement | null } ) => {
if ( ! isValidElement( children ) ) {
return null;
}

return <div style={ { marginInlineStart: 'auto' } }>{ children }</div>;
};

/**
* The PageHeader component provides a structured introduction to a page or section,
* combining a title, optional description, and contextual actions. It can include
Expand All @@ -35,3 +47,5 @@ export const PageHeader = ( props: PageHeaderProps ) => {
/>
);
};

PageHeader.ActionMenu = ActionMenu;
26 changes: 14 additions & 12 deletions client/dashboard/domains/domain-dns/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -310,18 +310,20 @@ export default function DomainDns() {
>
{ __( 'Add record' ) }
</Button>
<DnsActionsMenu
hasDefaultARecords={ hasDefaultARecordsValue }
hasDefaultCnameRecord={ hasDefaultCnameRecordValue }
hasDefaultEmailRecords={ hasDefaultEmailRecordsValue }
onRestoreDefaultARecords={ () => setIsRestoreDefaultARecordsDialogOpen( true ) }
onRestoreDefaultCnameRecord={ () =>
setIsRestoreDefaultCnameRecordDialogOpen( true )
}
onRestoreDefaultEmailRecords={ () =>
setIsRestoreDefaultEmailRecordsDialogOpen( true )
}
/>
<PageHeader.ActionMenu>
<DnsActionsMenu
hasDefaultARecords={ hasDefaultARecordsValue }
hasDefaultCnameRecord={ hasDefaultCnameRecordValue }
hasDefaultEmailRecords={ hasDefaultEmailRecordsValue }
onRestoreDefaultARecords={ () => setIsRestoreDefaultARecordsDialogOpen( true ) }
onRestoreDefaultCnameRecord={ () =>
setIsRestoreDefaultCnameRecordDialogOpen( true )
}
onRestoreDefaultEmailRecords={ () =>
setIsRestoreDefaultEmailRecordsDialogOpen( true )
}
/>
</PageHeader.ActionMenu>
</HStack>
}
description={ <DnsDescription /> }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1090,7 +1090,9 @@ export default function PurchaseSettings() {
{ __( 'Upgrade' ) }
</Button>
) }
<PurchaseActionMenu purchase={ purchase } />
<PageHeader.ActionMenu>
<PurchaseActionMenu purchase={ purchase } />
</PageHeader.ActionMenu>
</HStack>
)
}
Expand Down
30 changes: 15 additions & 15 deletions client/dashboard/sites/overview/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -197,21 +197,21 @@ function SiteOverview( {
}

return (
<HStack justify="space-between">
<HStack justify={ isSmallViewport ? 'flex-start' : 'flex-end' } style={ { width: 'auto' } }>
<StagingSiteSyncDropdown siteSlug={ siteSlug } />
<Button
ref={ wpAdminButtonRef }
__next40pxDefaultSize
variant="primary"
href={ site.options.admin_url }
icon={ wordpress }
>
{ __( 'WP Admin' ) }
</Button>
</HStack>
<SiteActionMenu site={ site } />
</HStack>
<>
<StagingSiteSyncDropdown siteSlug={ siteSlug } />
<Button
ref={ wpAdminButtonRef }
__next40pxDefaultSize
variant="primary"
href={ site.options.admin_url }
icon={ wordpress }
>
{ __( 'WP Admin' ) }
</Button>
<PageHeader.ActionMenu>
<SiteActionMenu site={ site } />
</PageHeader.ActionMenu>
</>
);
};

Expand Down