Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

refactor: replace deprecated Popovers which open on click#19709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
aqandrew merged 64 commits intomainfromaqandrew/replace-popover
Sep 24, 2025
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
64 commits
Select commitHold shift + click to select a range
fba9492
refactor: replace Popover with Tooltip in AgentLatency
aqandrewAug 28, 2025
e230f38
refactor: replace PopoverTrigger with TooltipTrigger in AgentStatus
aqandrewAug 28, 2025
75c9fdf
refactor: replace PopoverTrigger with TooltipTrigger in
aqandrewAug 28, 2025
bea24d8
fix: remove HelpTooltipText from AgentLatency (div inside p)
aqandrewAug 28, 2025
9e6fa0c
fix: add TooltipProvider to AuditHelpTooltip
aqandrewAug 28, 2025
303222b
fix: add TooltipProvider to ConnectionLogHelpTooltip,
aqandrewAug 28, 2025
f835cb1
fix: add TooltipProvider to PublishTemplateVersionDialog
aqandrewAug 28, 2025
dd7e233
fix: add TooltipProvider to TemplateHelpTooltip
aqandrewAug 29, 2025
d397fff
fix: add TooltipProvider to WorkspaceHelpTooltip
aqandrewAug 29, 2025
6134bad
fix: add TooltipProvider to WorkspaceOurdatedTooltip
aqandrewAug 29, 2025
ad562be
fix: add TooltipProvider to SubAgentOutdatedTooltip
aqandrewAug 29, 2025
d30170c
fix: add TooltipProvider to EditRolesButton
aqandrewAug 29, 2025
4438af8
fix: add TooltipProvider to AutoCreateMissingGroupsHelpTooltip and
aqandrewAug 29, 2025
00b70ea
refactor: extract TooltipProvder to definition of HelpTooltip
aqandrewAug 29, 2025
c59daf3
refactor: remove extract TooltipProvider from DevContainerStartError
aqandrewAug 29, 2025
3aeaa49
test: add PublishDTemplateVersionDialog story
aqandrewAug 29, 2025
eaf3baf
chore: remove unused import
aqandrewAug 29, 2025
c93e092
refactor: rename Tooltip to MUITooltip
aqandrewAug 29, 2025
ef6cceb
refactor: replace Popover in OwnerBreadcrumb, WorkspaceBreadcrumb,
aqandrewAug 29, 2025
c142b5a
chore: check:fix
aqandrewAug 29, 2025
143e33e
Merge branch 'main' into aqandrew/replace-popover-in-helptooltip
aqandrewAug 29, 2025
d22a040
chore: lint:fix
aqandrewAug 29, 2025
2ff9e66
test: expect elements + text content rendered by HelpTooltip
aqandrewAug 29, 2025
ed5bf98
Revert "refactor: rename Tooltip to MUITooltip"
aqandrewAug 29, 2025
ff6c794
refactor: replace deprecated Popover in IconField
aqandrewAug 30, 2025
9887b09
refactor: move default collisionPadding from HelpTooltip to Popover
aqandrewSep 2, 2025
d859688
refactor: replace deprecated Popover in SelectMenu
aqandrewSep 3, 2025
bda70b2
style: prettier
aqandrewSep 3, 2025
6a37c49
refactor: replace deprecated Popover in DeploymentDropdown
aqandrewSep 3, 2025
6921bbe
style: prettier
aqandrewSep 3, 2025
423bddc
refactor: replace deprecated Popover in UserDropdown
aqandrewSep 3, 2025
81a70f3
refactor: remove redundant open state var from UserDropdown
aqandrewSep 3, 2025
949698b
refactor: replace deprecated Popover in UserDropdownContent.test
aqandrewSep 3, 2025
8207137
refactor: replace deprecated Popover in PortForwardButton
aqandrewSep 3, 2025
a6cf0da
refactor: replace deprecated Popover in EditRolesButton
aqandrewSep 3, 2025
183d163
refactor: replace deprecated Popover in ProvisionerTagsPopover
aqandrewSep 3, 2025
1242cbe
refactor: replace deprecated Popover in WorkspacesButton
aqandrewSep 3, 2025
1f9acc3
refactor: replace deprecated Popover in BuildParametersPopover
aqandrewSep 3, 2025
244792a
refactor: extract TemplateInsightsControls component
aqandrewSep 4, 2025
07fd1e2
test: use set past dateRange
aqandrewSep 4, 2025
8bd2cd0
test: add play functions to TemplateInsightsControls.stories
aqandrewSep 4, 2025
bdacfb1
refactor: replace deprecated Popover in DateRange
aqandrewSep 4, 2025
9e7b432
fix: remove unknown props from PopoverContent
aqandrewSep 4, 2025
5ba7da8
chore: check:fix
aqandrewSep 4, 2025
85611c3
refactor: don't export ClassName type
aqandrewSep 4, 2025
259e8a3
test: expect elements rendered by Popover
aqandrewSep 5, 2025
d5a6d18
chore: rm 1rem comment
aqandrewSep 6, 2025
e0f4f4c
Merge branch 'main' into aqandrew/replace-popover
aqandrewSep 9, 2025
e5ab08d
fix: left-align EditRolesButton's PopoverContent
aqandrewSep 9, 2025
189fe0b
fix: restore BuildParametersPopover's background/border color
aqandrewSep 9, 2025
431b828
fix: prevent SelectMenuContent className from being overwritten
aqandrewSep 9, 2025
f6a3098
fix: apply SelectFilter styles now that SelectMenuContent doesn't render
aqandrewSep 9, 2025
8785d6b
fix: softcode SelectMenuContent width
aqandrewSep 9, 2025
ffc7aa8
fix: make default SelectMenuContent font size 14px
aqandrewSep 9, 2025
cf7b88f
chore: remove unused searchStyles
aqandrewSep 9, 2025
8c6c3fc
refactor: export PopoverContentProps, PopoverTriggerProps, and
aqandrewSep 9, 2025
005256a
chore: check:fix
aqandrewSep 9, 2025
018c654
refactor: change `style` prop to `css`
aqandrewSep 11, 2025
eca5477
refactor: style UserDropdownContent with Tailwind
aqandrewSep 24, 2025
9a12e1b
refactor: use span for deployment id
aqandrewSep 24, 2025
1f89beb
refactor: type setIsOpen as void function
aqandrewSep 24, 2025
3a77cef
test: select DebugButton/RetryButton by text
aqandrewSep 24, 2025
dad5ada
test: select popovers with findByText instead of getByText
aqandrewSep 24, 2025
59e9e0f
Merge branch 'main' into aqandrew/replace-popover
aqandrewSep 24, 2025
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
8 changes: 4 additions & 4 deletionssite/src/components/Filter/SelectFilter.stories.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite";
import { Avatar } from "components/Avatar/Avatar";
import { useState } from "react";
import { action } from "storybook/actions";
import { expect, userEvent, within } from "storybook/test";
import { expect,screen,userEvent, within } from "storybook/test";
import {
SelectFilter,
type SelectFilterOption,
Expand DownExpand Up@@ -88,7 +88,7 @@ export const SelectingOption: Story = {
const canvas = within(canvasElement);
const button = canvas.getByRole("button");
await userEvent.click(button);
const option =canvas.getByText("Option 25");
const option =screen.getByText("Option 25");
await userEvent.click(option);
await expect(button).toHaveTextContent("Option 25");
},
Expand All@@ -102,7 +102,7 @@ export const UnselectingOption: Story = {
const canvas = within(canvasElement);
const button = canvas.getByRole("button");
await userEvent.click(button);
const menu =canvasElement.querySelector<HTMLElement>("[role=menu]")!;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

muuuuch better

aqandrew reacted with laugh emoji
const menu =screen.getByRole("menu");
const option = within(menu).getByText("Option 26");
await userEvent.click(option);
await expect(button).toHaveTextContent("All options");
Expand DownExpand Up@@ -140,7 +140,7 @@ export const SearchingOption: Story = {
const canvas = within(canvasElement);
const button = canvas.getByRole("button");
await userEvent.click(button);
const search =canvas.getByLabelText("Search options");
const search =screen.getByLabelText("Search options");
await userEvent.type(search, "option-2");
},
};
20 changes: 10 additions & 10 deletionssite/src/components/Filter/SelectFilter.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,9 +10,9 @@ import {
SelectMenuTrigger,
} from "components/SelectMenu/SelectMenu";
import { type FC, type ReactNode, useState } from "react";
import { cn } from "utils/cn";

const BASE_WIDTH = 200;
const POPOVER_WIDTH = 320;

export type SelectFilterOption = {
startIcon?: ReactNode;
Expand DownExpand Up@@ -60,15 +60,15 @@ export const SelectFilter: FC<SelectFilterProps> = ({
</SelectMenuButton>
</SelectMenuTrigger>
<SelectMenuContent
horizontal="right"
css={{
"& .MuiPaper-root": {
//When including selectFilterSearch, we aim for the width to be as
// wide as possible.
width: selectFilterSearch ? "100%" : undefined,
maxWidth: POPOVER_WIDTH,
minWidth: width,
},
align="end"
className={cn([
// When including selectFilterSearch, we aim for the width to be as
//wide as possible.
selectFilterSearch && "w-full",
"max-w-[320px]",
])}
style={{
minWidth: width,
}}
>
{selectFilterSearch}
Expand Down
25 changes: 11 additions & 14 deletionssite/src/components/IconField/IconField.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,13 +3,13 @@ import InputAdornment from "@mui/material/InputAdornment";
import TextField, { type TextFieldProps } from "@mui/material/TextField";
import { visuallyHidden } from "@mui/utils";
import { Button } from "components/Button/Button";
import { ExternalImage } from "components/ExternalImage/ExternalImage";
import { Loader } from "components/Loader/Loader";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "components/deprecated/Popover/Popover";
import { ExternalImage } from "components/ExternalImage/ExternalImage";
import { Loader } from "components/Loader/Loader";
} from "components/Popover/Popover";
import { ChevronDownIcon } from "lucide-react";
import { type FC, lazy, Suspense, useState } from "react";

Expand DownExpand Up@@ -80,24 +80,21 @@ export const IconField: FC<IconFieldProps> = ({

<Global
styles={css`
em-emoji-picker {
--rgb-background: ${theme.palette.background.paper};
--rgb-input: ${theme.palette.primary.main};
--rgb-color: ${theme.palette.text.primary};

// Hack to prevent the right side from being cut off
width: 350px;
}
`}
em-emoji-picker {
--rgb-background: ${theme.palette.background.paper};
--rgb-input: ${theme.palette.primary.main};
--rgb-color: ${theme.palette.text.primary};
}
`}
/>
<Popover open={open} onOpenChange={setOpen}>
<PopoverTrigger>
<PopoverTrigger asChild>
<Button variant="outline" size="lg" className="flex-shrink-0">
Emoji
<ChevronDownIcon />
</Button>
</PopoverTrigger>
<PopoverContent id="emoji"horizontal="right">
<PopoverContent id="emoji"side="bottom" align="end" className="w-min">
<Suspense fallback={<Loader />}>
<EmojiPicker
onEmojiSelect={(emoji) => {
Expand Down
7 changes: 7 additions & 0 deletionssite/src/components/Popover/Popover.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,10 +10,16 @@ import {
} from "react";
import { cn } from "utils/cn";

export type PopoverContentProps = PopoverPrimitive.PopoverContentProps;

export type PopoverTriggerProps = PopoverPrimitive.PopoverTriggerProps;

export const Popover = PopoverPrimitive.Root;

export const PopoverTrigger = PopoverPrimitive.Trigger;

export const PopoverClose = PopoverPrimitive.PopoverClose;

export const PopoverContent = forwardRef<
ElementRef<typeof PopoverPrimitive.Content>,
ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
Expand All@@ -23,6 +29,7 @@ export const PopoverContent = forwardRef<
ref={ref}
align={align}
sideOffset={sideOffset}
collisionPadding={16}
className={cn(
`z-50 w-72 rounded-md border border-solid bg-surface-primary
text-content-primary shadow-md outline-none
Expand Down
20 changes: 17 additions & 3 deletionssite/src/components/SelectMenu/SelectMenu.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,8 +4,10 @@ import { Button, type ButtonProps } from "components/Button/Button";
import {
Popover,
PopoverContent,
type PopoverContentProps,
PopoverTrigger,
} from "components/deprecated/Popover/Popover";
type PopoverTriggerProps,
} from "components/Popover/Popover";
import {
SearchField,
type SearchFieldProps,
Expand All@@ -24,9 +26,21 @@ import { cn } from "utils/cn";

export const SelectMenu = Popover;

export const SelectMenuTrigger = PopoverTrigger;
export const SelectMenuTrigger: FC<PopoverTriggerProps> = (props) => {
return <PopoverTrigger asChild {...props} />;
};

export const SelectMenuContent = PopoverContent;
export const SelectMenuContent: FC<PopoverContentProps> = (props) => {
return (
<PopoverContent
{...props}
className={cn(
"w-auto bg-surface-secondary border-surface-quaternary overflow-y-auto text-sm",
props.className,
)}
/>
);
};

type SelectMenuButtonProps = ButtonProps & {
startIcon?: React.ReactNode;
Expand Down
2 changes: 1 addition & 1 deletionsite/src/hooks/useClassName.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { css } from "@emotion/css";
import { type Theme, useTheme } from "@emotion/react";
import { type DependencyList, useMemo } from "react";

exporttype ClassName = (cssFn: typeof css, theme: Theme) => string;
type ClassName = (cssFn: typeof css, theme: Theme) => string;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

this means we're getting closer!! excited to see this old hack gone

aqandrew and Parkreiner reacted with heart emoji

/**
* @deprecated This hook was used as an escape hatch to generate class names
Expand Down
121 changes: 53 additions & 68 deletionssite/src/modules/dashboard/Navbar/DeploymentDropdown.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
import { css, type Interpolation, type Theme, useTheme } from "@emotion/react";
import { css, type Interpolation, type Theme } from "@emotion/react";
import MenuItem from "@mui/material/MenuItem";
import { Button } from "components/Button/Button";
import {
Popover,
PopoverClose,
PopoverContent,
PopoverTrigger,
usePopover,
} from "components/deprecated/Popover/Popover";
} from "components/Popover/Popover";
import { ChevronDownIcon } from "lucide-react";
import { linkToAuditing } from "modules/navigation";
import type { FC } from "react";
Expand All@@ -27,8 +27,6 @@ export const DeploymentDropdown: FC<DeploymentDropdownProps> = ({
canViewConnectionLog,
canViewHealth,
}) => {
const theme = useTheme();

if (
!canViewAuditLog &&
!canViewConnectionLog &&
Expand All@@ -41,22 +39,16 @@ export const DeploymentDropdown: FC<DeploymentDropdownProps> = ({

return (
<Popover>
<PopoverTrigger>
<PopoverTrigger asChild>
<Button variant="outline" size="lg">
Admin settings
<ChevronDownIcon className="text-content-primary !size-icon-xs" />
</Button>
</PopoverTrigger>

<PopoverContent
horizontal="right"
css={{
".MuiPaper-root": {
minWidth: "auto",
width: 180,
boxShadow: theme.shadows[6],
},
}}
align="end"
className="bg-surface-secondary border-surface-quaternary w-[180px] min-w-auto"
>
<DeploymentDropdownContent
canViewDeployment={canViewDeployment}
Expand All@@ -77,79 +69,72 @@ const DeploymentDropdownContent: FC<DeploymentDropdownProps> = ({
canViewHealth,
canViewConnectionLog,
}) => {
const popover = usePopover();

const onPopoverClose = () => popover.setOpen(false);

return (
<nav>
{canViewDeployment && (
<MenuItem
component={NavLink}
to="/deployment"
css={styles.menuItem}
onClick={onPopoverClose}
>
Deployment
</MenuItem>
<PopoverClose asChild>
<MenuItem component={NavLink} to="/deployment" css={styles.menuItem}>
Deployment
</MenuItem>
</PopoverClose>
)}
{canViewOrganizations && (
<MenuItem
component={NavLink}
to="/organizations"
css={styles.menuItem}
onClick={onPopoverClose}
>
Organizations
</MenuItem>
<PopoverClose asChild>
<MenuItem
component={NavLink}
to="/organizations"
css={styles.menuItem}
>
Organizations
</MenuItem>
</PopoverClose>
)}
{canViewAuditLog && (
<MenuItem
component={NavLink}
to={linkToAuditing}
css={styles.menuItem}
onClick={onPopoverClose}
>
Audit Logs
</MenuItem>
<PopoverClose asChild>
<MenuItem
component={NavLink}
to={linkToAuditing}
css={styles.menuItem}
>
Audit Logs
</MenuItem>
</PopoverClose>
)}
{canViewConnectionLog && (
<MenuItem
component={NavLink}
to="/connectionlog"
css={styles.menuItem}
onClick={onPopoverClose}
>
Connection Logs
</MenuItem>
<PopoverClose asChild>
<MenuItem
component={NavLink}
to="/connectionlog"
css={styles.menuItem}
>
Connection Logs
</MenuItem>
</PopoverClose>
)}
{canViewHealth && (
<MenuItem
component={NavLink}
to="/health"
css={styles.menuItem}
onClick={onPopoverClose}
>
Healthcheck
</MenuItem>
<PopoverClose asChild>
<MenuItem component={NavLink} to="/health" css={styles.menuItem}>
Healthcheck
</MenuItem>
</PopoverClose>
)}
</nav>
);
};

const styles = {
menuItem: (theme) => css`
text-decoration: none;
color: inherit;
gap: 8px;
padding: 8px 20px;
font-size: 14px;
text-decoration: none;
color: inherit;
gap: 8px;
padding: 8px 20px;
font-size: 14px;

&:hover {
background-color: ${theme.palette.action.hover};
transition: background-color 0.3s ease;
}
`,
&:hover {
background-color: ${theme.palette.action.hover};
transition: background-color 0.3s ease;
}
`,
menuItemIcon: (theme) => ({
color: theme.palette.text.secondary,
width: 20,
Expand Down
Loading
Loading

[8]ページ先頭

©2009-2025 Movatter.jp