mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add workspace filter for shared workspaces (#21310)
resolves coder/internal#1129 <img width="361" height="462" alt="Screenshot 2025-12-17 at 20 49 07" src="https://github.com/user-attachments/assets/e06843f0-15e4-41fc-b736-ccfaa303ee74" />
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import { mockApiError } from "testHelpers/entities";
|
||||
import { withDashboardProvider } from "testHelpers/storybook";
|
||||
import type { Meta, StoryObj } from "@storybook/react-vite";
|
||||
import {
|
||||
getDefaultFilterProps,
|
||||
MockMenu,
|
||||
} from "components/Filter/storyHelpers";
|
||||
import type { WorkspaceFilterState } from "./WorkspacesFilter";
|
||||
import { WorkspacesFilter } from "./WorkspacesFilter";
|
||||
|
||||
const defaultFilterProps = getDefaultFilterProps<WorkspaceFilterState>({
|
||||
query: "owner:me",
|
||||
menus: {
|
||||
user: MockMenu,
|
||||
template: MockMenu,
|
||||
status: MockMenu,
|
||||
organizations: MockMenu,
|
||||
},
|
||||
values: {
|
||||
owner: "me",
|
||||
template: undefined,
|
||||
status: undefined,
|
||||
},
|
||||
});
|
||||
|
||||
const meta: Meta<typeof WorkspacesFilter> = {
|
||||
title: "pages/WorkspacesPage/WorkspacesFilter",
|
||||
component: WorkspacesFilter,
|
||||
args: {
|
||||
filter: defaultFilterProps.filter,
|
||||
error: undefined,
|
||||
templateMenu: MockMenu,
|
||||
statusMenu: MockMenu,
|
||||
},
|
||||
decorators: [withDashboardProvider],
|
||||
};
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof WorkspacesFilter>;
|
||||
|
||||
export const Default: Story = {};
|
||||
|
||||
export const WithUserMenu: Story = {
|
||||
args: {
|
||||
userMenu: MockMenu,
|
||||
},
|
||||
};
|
||||
|
||||
export const WithOrganizations: Story = {
|
||||
args: {
|
||||
userMenu: MockMenu,
|
||||
organizationsMenu: MockMenu,
|
||||
},
|
||||
parameters: {
|
||||
showOrganizations: true,
|
||||
},
|
||||
};
|
||||
|
||||
export const Loading: Story = {
|
||||
args: {
|
||||
statusMenu: {
|
||||
...MockMenu,
|
||||
isInitializing: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const WithError: Story = {
|
||||
args: {
|
||||
error: mockApiError({
|
||||
message: "Invalid filter query",
|
||||
validations: [{ field: "filter", detail: "Invalid filter syntax" }],
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
export const WithDormantPreset: Story = {
|
||||
parameters: {
|
||||
features: ["advanced_template_scheduling"],
|
||||
},
|
||||
};
|
||||
@@ -29,6 +29,7 @@ const workspaceFilterQuery = {
|
||||
failed: "status:failed",
|
||||
dormant: "dormant:true",
|
||||
outdated: "outdated:true",
|
||||
shared: "shared:true",
|
||||
};
|
||||
|
||||
type FilterPreset = {
|
||||
@@ -59,6 +60,10 @@ const PRESET_FILTERS: FilterPreset[] = [
|
||||
query: workspaceFilterQuery.outdated,
|
||||
name: "Outdated workspaces",
|
||||
},
|
||||
{
|
||||
query: workspaceFilterQuery.shared,
|
||||
name: "Shared workspaces",
|
||||
},
|
||||
];
|
||||
|
||||
// Defined outside component so that the array doesn't get reconstructed each render
|
||||
|
||||
Reference in New Issue
Block a user