mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-26 04:25:46 +02:00
fix(issues): render create picker trigger content (#5491)
This commit is contained in:
@@ -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} />;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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} />;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user