Skip to content

fix: filter "add group member" by organization #14404

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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 26, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Add Storybook for groups page
This ensures it is using the right endpoint for the add member dropdown.
  • Loading branch information
code-asher committed Aug 23, 2024
commit fd02c23fb689db47bbce07ba40630f836b9b9403
10 changes: 8 additions & 2 deletions site/src/api/queries/groups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const groups = (organization: string) => {
} satisfies UseQueryOptions<Group[]>;
};

const getGroupQueryKey = (organization: string, groupName: string) => [
export const getGroupQueryKey = (organization: string, groupName: string) => [
"organization",
organization,
"group",
Expand Down Expand Up @@ -77,9 +77,15 @@ export function groupsForUser(organization: string, userId: string) {
} as const satisfies UseQueryOptions<Group[], unknown, readonly Group[]>;
}

export const groupPermissionsKey = (groupId: string) => [
"group",
groupId,
"permissions",
];

export const groupPermissions = (groupId: string) => {
return {
queryKey: ["group", groupId, "permissions"],
queryKey: groupPermissionsKey(groupId),
queryFn: () =>
API.checkAuthorization({
checks: {
Expand Down
8 changes: 7 additions & 1 deletion site/src/api/queries/organizations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,16 @@ export const deleteOrganization = (queryClient: QueryClient) => {
};
};

export const organizationMembersKey = (id: string) => [
"organization",
id,
"members",
];

export const organizationMembers = (id: string) => {
return {
queryFn: () => API.getOrganizationMembers(id),
queryKey: ["organization", id, "members"],
queryKey: organizationMembersKey(id),
};
};

Expand Down
2 changes: 1 addition & 1 deletion site/src/components/UserAutocomplete/UserAutocomplete.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const UserAutocomplete: FC<UserAutocompleteProps> = (props) => {

const usersQuery = useQuery({
...users({
q: filter !== undefined ? prepareQuery(encodeURI(filter)) : "",
q: prepareQuery(encodeURI(filter ?? "")),
limit: 25,
}),
enabled: filter !== undefined,
Expand Down
132 changes: 132 additions & 0 deletions site/src/pages/ManagementSettingsPage/GroupsPage/GroupPage.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
import type { Meta, StoryObj } from "@storybook/react";
import { userEvent, within } from "@storybook/test";
import { getGroupQueryKey, groupPermissionsKey } from "api/queries/groups";
import { organizationMembersKey } from "api/queries/organizations";
import { reactRouterParameters } from "storybook-addon-remix-react-router";
import {
MockDefaultOrganization,
MockGroup,
MockOrganizationMember,
MockOrganizationMember2,
} from "testHelpers/entities";
import GroupPage from "./GroupPage";

const meta: Meta<typeof GroupPage> = {
title: "pages/OrganizationGroupsPage/GroupPage",
component: GroupPage,
parameters: {
reactRouter: reactRouterParameters({
location: {
pathParams: {
organization: MockDefaultOrganization.name,
groupName: MockGroup.name,
},
},
routing: { path: "/organizations/:organization/groups/:groupName" },
}),
},
};

const groupQuery = (data: unknown) => ({
key: getGroupQueryKey(MockDefaultOrganization.name, MockGroup.name),
data,
});

const permissionsQuery = (data: unknown, id?: string) => ({
key: groupPermissionsKey(id ?? MockGroup.id),
data,
});

const membersQuery = (data: unknown) => ({
key: organizationMembersKey(MockDefaultOrganization.id),
data,
});

export default meta;
type Story = StoryObj<typeof GroupPage>;

export const LoadingGroup: Story = {
parameters: {
queries: [groupQuery(null), permissionsQuery({})],
},
};

// Will show a 404 because the query is not mocked.
export const GroupError: Story = {
parameters: {
queries: [permissionsQuery({})],
},
};

export const LoadingPermissions: Story = {
parameters: {
queries: [groupQuery(MockGroup), permissionsQuery(null)],
},
};

export const NoUpdatePermission: Story = {
parameters: {
queries: [
groupQuery(MockGroup),
permissionsQuery({ canUpdateGroup: false }),
],
},
};

export const EveryoneGroup: Story = {
parameters: {
queries: [
groupQuery({
...MockGroup,
// The everyone group has the same ID as the organization.
id: MockDefaultOrganization.id,
}),
permissionsQuery({ canUpdateGroup: true }, MockDefaultOrganization.id),
],
},
};

// Will show a 404 because the query is not mocked.
export const MembersError: Story = {
parameters: {
queries: [
groupQuery(MockGroup),
permissionsQuery({ canUpdateGroup: true }),
],
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await userEvent.click(canvas.getByRole("button", { name: "Open" }));
},
};

export const NoMembers: Story = {
parameters: {
queries: [
groupQuery({
...MockGroup,
members: [],
}),
permissionsQuery({ canUpdateGroup: true }),
membersQuery([]),
],
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await userEvent.click(canvas.getByRole("button", { name: "Open" }));
},
};

export const FiltersByMembers: Story = {
parameters: {
queries: [
groupQuery(MockGroup),
permissionsQuery({ canUpdateGroup: true }),
membersQuery([MockOrganizationMember, MockOrganizationMember2]),
],
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await userEvent.click(canvas.getByRole("button", { name: "Open" }));
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,7 @@ export const GroupPage: FC = () => {
const groupQuery = useQuery(group(organization, groupName));
const groupData = groupQuery.data;
const { data: permissions } = useQuery(
groupData !== undefined
? groupPermissions(groupData.id)
: { enabled: false },
groupData ? groupPermissions(groupData.id) : { enabled: false },
);
const addMemberMutation = useMutation(addMember(queryClient));
const removeMemberMutation = useMutation(removeMember(queryClient));
Expand Down
Loading