fix(issues): render create picker trigger content (#5491)

This commit is contained in:
Jiayuan Zhang
2026-07-16 08:42:00 +08:00
committed by GitHub
parent f8654b37c0
commit 0ec7c22901
3 changed files with 61 additions and 2 deletions

View File

@@ -66,10 +66,12 @@ interface AssigneePickerProps {
* itself), so trigger-less callers stay eager.
*/
export function AssigneePicker(props: AssigneePickerProps) {
const hasDeferredTriggerContent =
props.trigger !== undefined || props.triggerRender?.props.children != null;
const canDefer =
props.open === undefined &&
props.onOpenChange === undefined &&
(props.trigger !== undefined || props.triggerRender !== undefined);
hasDeferredTriggerContent;
if (!canDefer) {
return <AssigneePickerImpl {...props} />;
}

View File

@@ -0,0 +1,55 @@
// @vitest-environment jsdom
import { cleanup, screen } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import { renderWithI18n } from "../../../test/i18n";
import { PillButton } from "../../../common/pill-button";
import { AssigneePicker } from "./assignee-picker";
import { PriorityPicker } from "./priority-picker";
vi.mock("@tanstack/react-query", async (importOriginal) => ({
...(await importOriginal<typeof import("@tanstack/react-query")>()),
useQuery: () => ({ data: [] }),
}));
vi.mock("@multica/core/auth", () => ({
useAuthStore: (selector: (state: { user: null }) => unknown) =>
selector({ user: null }),
}));
vi.mock("@multica/core/hooks", () => ({
useWorkspaceId: () => "workspace-1",
}));
vi.mock("@multica/core/workspace/hooks", () => ({
useActorName: () => ({ getActorName: () => "Unknown" }),
}));
afterEach(cleanup);
describe("deferred picker triggers", () => {
it("renders generated content when triggerRender only supplies an empty shell", () => {
renderWithI18n(
<>
<PriorityPicker
priority="none"
onUpdate={() => {}}
triggerRender={<PillButton />}
/>
<AssigneePicker
assigneeType={null}
assigneeId={null}
onUpdate={() => {}}
triggerRender={<PillButton />}
/>
</>,
);
expect(
screen.getByRole("button", { name: "No priority" }),
).toBeInTheDocument();
expect(
screen.getByRole("button", { name: "Unassigned" }),
).toBeInTheDocument();
});
});

View File

@@ -33,11 +33,13 @@ interface PriorityPickerProps {
* on first interaction. See `DeferredPopup` for why.
*/
export function PriorityPicker(props: PriorityPickerProps) {
const hasDeferredTriggerContent =
props.trigger !== undefined || props.triggerRender?.props.children != null;
const canDefer =
props.open === undefined &&
props.onOpenChange === undefined &&
!props.defaultOpen &&
(props.trigger !== undefined || props.triggerRender !== undefined);
hasDeferredTriggerContent;
if (!canDefer) {
return <PriorityPickerImpl {...props} />;
}