diff --git a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx new file mode 100644 index 0000000000000..f2fc79c071f6a --- /dev/null +++ b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx @@ -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({ + query: "owner:me", + menus: { + user: MockMenu, + template: MockMenu, + status: MockMenu, + organizations: MockMenu, + }, + values: { + owner: "me", + template: undefined, + status: undefined, + }, +}); + +const meta: Meta = { + title: "pages/WorkspacesPage/WorkspacesFilter", + component: WorkspacesFilter, + args: { + filter: defaultFilterProps.filter, + error: undefined, + templateMenu: MockMenu, + statusMenu: MockMenu, + }, + decorators: [withDashboardProvider], +}; + +export default meta; +type Story = StoryObj; + +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"], + }, +}; diff --git a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx index 8f45143ffa068..697d55a154f52 100644 --- a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx +++ b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx @@ -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