From d0b0f04a99ba3db047751676f4e74c91fd65d86e Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 20 Jun 2023 17:43:42 +0000 Subject: [PATCH 1/4] chore(site): remove new filter from experimental --- coderd/apidoc/docs.go | 6 +- coderd/apidoc/swagger.json | 8 +- codersdk/deployment.go | 7 +- docs/api/schemas.md | 1 - site/src/api/typesGenerated.ts | 8 +- site/src/components/Filter/filter.tsx | 2 + site/src/components/Filter/menu.ts | 2 + site/src/components/Filter/storyHelpers.ts | 34 +++ .../SearchBarWithFilter.stories.tsx | 47 ---- .../SearchBarWithFilter.test.tsx | 26 --- .../SearchBarWithFilter.tsx | 212 ------------------ site/src/pages/AuditPage/AuditPage.tsx | 27 +-- .../pages/AuditPage/AuditPageView.stories.tsx | 40 +--- site/src/pages/UsersPage/UsersPage.tsx | 27 +-- .../pages/UsersPage/UsersPageView.stories.tsx | 20 +- site/src/pages/UsersPage/UsersPageView.tsx | 23 +- .../pages/WorkspacesPage/WorkspacesPage.tsx | 3 - .../WorkspacesPageView.stories.tsx | 44 ++-- .../WorkspacesPage/WorkspacesPageView.tsx | 28 +-- 19 files changed, 105 insertions(+), 460 deletions(-) create mode 100644 site/src/components/Filter/storyHelpers.ts delete mode 100644 site/src/components/SearchBarWithFilter/SearchBarWithFilter.stories.tsx delete mode 100644 site/src/components/SearchBarWithFilter/SearchBarWithFilter.test.tsx delete mode 100644 site/src/components/SearchBarWithFilter/SearchBarWithFilter.tsx diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 6dcf803905317..1b71d1f98e5ce 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -7355,13 +7355,11 @@ const docTemplate = `{ "type": "string", "enum": [ "moons", - "workspace_actions", - "workspace_filter" + "workspace_actions" ], "x-enum-varnames": [ "ExperimentMoons", - "ExperimentWorkspaceActions", - "ExperimentWorkspaceFilter" + "ExperimentWorkspaceActions" ] }, "codersdk.Feature": { diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index ff59012a73714..10ec4adbde60b 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -6582,12 +6582,8 @@ }, "codersdk.Experiment": { "type": "string", - "enum": ["moons", "workspace_actions", "workspace_filter"], - "x-enum-varnames": [ - "ExperimentMoons", - "ExperimentWorkspaceActions", - "ExperimentWorkspaceFilter" - ] + "enum": ["moons", "workspace_actions"], + "x-enum-varnames": ["ExperimentMoons", "ExperimentWorkspaceActions"] }, "codersdk.Feature": { "type": "object", diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 6d293bde5f317..aa62aebba5cdd 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -1704,9 +1704,6 @@ const ( // https://github.com/coder/coder/milestone/19 ExperimentWorkspaceActions Experiment = "workspace_actions" - // New workspace filter - ExperimentWorkspaceFilter Experiment = "workspace_filter" - // Add new experiments here! // ExperimentExample Experiment = "example" ) @@ -1715,9 +1712,7 @@ const ( // users to opt-in to via --experimental='*'. // Experiments that are not ready for consumption by all users should // not be included here and will be essentially hidden. -var ExperimentsAll = Experiments{ - ExperimentWorkspaceFilter, -} +var ExperimentsAll = Experiments{} // Experiments is a list of experiments that are enabled for the deployment. // Multiple experiments may be enabled at the same time. diff --git a/docs/api/schemas.md b/docs/api/schemas.md index b907fd3dee469..6b7239a65be93 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2490,7 +2490,6 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | ------------------- | | `moons` | | `workspace_actions` | -| `workspace_filter` | ## codersdk.Feature diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index d8fa671603378..2bef0d528d7a2 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1342,12 +1342,8 @@ export const Entitlements: Entitlement[] = [ ] // From codersdk/deployment.go -export type Experiment = "moons" | "workspace_actions" | "workspace_filter" -export const Experiments: Experiment[] = [ - "moons", - "workspace_actions", - "workspace_filter", -] +export type Experiment = "moons" | "workspace_actions" +export const Experiments: Experiment[] = ["moons", "workspace_actions"] // From codersdk/deployment.go export type FeatureName = diff --git a/site/src/components/Filter/filter.tsx b/site/src/components/Filter/filter.tsx index 6e361c9d5e537..89e4532105983 100644 --- a/site/src/components/Filter/filter.tsx +++ b/site/src/components/Filter/filter.tsx @@ -74,6 +74,8 @@ export const useFilter = ({ } } +export type UseFilterResult = ReturnType + const parseFilterQuery = (filterQuery: string): FilterValues => { if (filterQuery === "") { return {} diff --git a/site/src/components/Filter/menu.ts b/site/src/components/Filter/menu.ts index a06df9fe6512f..35dac02a8a93f 100644 --- a/site/src/components/Filter/menu.ts +++ b/site/src/components/Filter/menu.ts @@ -101,3 +101,5 @@ export const useFilterMenu = ({ isSearching: searchOptionsQuery.isFetching, } } + +export type UseFilterMenuResult = ReturnType diff --git a/site/src/components/Filter/storyHelpers.ts b/site/src/components/Filter/storyHelpers.ts new file mode 100644 index 0000000000000..79aeb1b149280 --- /dev/null +++ b/site/src/components/Filter/storyHelpers.ts @@ -0,0 +1,34 @@ +import { action } from "@storybook/addon-actions" +import { UseFilterResult } from "./filter" +import { UseFilterMenuResult } from "./menu" + +export const MockMenu: UseFilterMenuResult = { + initialOption: undefined, + isInitializing: false, + isSearching: false, + query: "", + searchOptions: [], + selectedOption: undefined, + selectOption: action("selectOption"), + setQuery: action("updateQuery"), +} + +export const getDefaultFilterProps = ({ + query = "", + values, + menus, +}: { + query?: string + values: Record + menus: Record +}) => + ({ + filter: { + query, + update: () => action("update"), + debounceUpdate: action("debounce") as UseFilterResult["debounceUpdate"], + used: false, + values, + }, + menus, + } as TFilterProps) diff --git a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.stories.tsx b/site/src/components/SearchBarWithFilter/SearchBarWithFilter.stories.tsx deleted file mode 100644 index 98dde91134845..0000000000000 --- a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.stories.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Story } from "@storybook/react" -import { userFilterQuery, workspaceFilterQuery } from "../../utils/filters" -import { - SearchBarWithFilter, - SearchBarWithFilterProps, -} from "./SearchBarWithFilter" -import { mockApiError } from "testHelpers/entities" - -export default { - title: "components/SearchBarWithFilter", - component: SearchBarWithFilter, - args: { - filter: workspaceFilterQuery.me, - }, -} - -const Template: Story = (args) => ( - -) - -export const WithoutPresetFilters = Template.bind({}) - -export const WithPresetFilters = Template.bind({}) -WithPresetFilters.args = { - presetFilters: [ - { query: workspaceFilterQuery.me, name: "Your workspaces" }, - { query: "random query", name: "Random query" }, - ], -} - -export const WithError = Template.bind({}) -WithError.args = { - filter: "status:inactive", - presetFilters: [ - { query: userFilterQuery.active, name: "Active users" }, - { query: "random query", name: "Random query" }, - ], - error: mockApiError({ - message: "Invalid user search query.", - validations: [ - { - field: "status", - detail: `Query param "status" has invalid value: "inactive" is not a valid user status`, - }, - ], - }), -} diff --git a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.test.tsx b/site/src/components/SearchBarWithFilter/SearchBarWithFilter.test.tsx deleted file mode 100644 index 540f634701b4a..0000000000000 --- a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.test.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { screen } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { render } from "../../testHelpers/renderHelpers" -import { SearchBarWithFilter } from "./SearchBarWithFilter" - -// mock the debounce utility -jest.mock("just-debounce-it", () => - jest.fn((fn) => { - fn.cancel = jest.fn() - return fn - }), -) - -describe("SearchBarWithFilter", () => { - it("calls the onFilter handler on keystroke", async () => { - // When - const onFilter = jest.fn() - render() - - const searchInput = screen.getByRole("textbox") - await userEvent.type(searchInput, "workspace") // 9 characters - - // Then - expect(onFilter).toBeCalledTimes(9) // 9 characters - }) -}) diff --git a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.tsx b/site/src/components/SearchBarWithFilter/SearchBarWithFilter.tsx deleted file mode 100644 index 16cbcb83436c3..0000000000000 --- a/site/src/components/SearchBarWithFilter/SearchBarWithFilter.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import Button from "@mui/material/Button" -import Fade from "@mui/material/Fade" -import InputAdornment from "@mui/material/InputAdornment" -import Menu from "@mui/material/Menu" -import MenuItem from "@mui/material/MenuItem" -import OutlinedInput from "@mui/material/OutlinedInput" -import { makeStyles } from "@mui/styles" -import { Theme } from "@mui/material/styles" -import SearchIcon from "@mui/icons-material/Search" -import debounce from "just-debounce-it" -import { useCallback, useEffect, useRef, useState } from "react" -import { getValidationErrorMessage } from "../../api/errors" -import { CloseDropdown, OpenDropdown } from "../DropdownArrows/DropdownArrows" -import { Stack } from "../Stack/Stack" - -export const Language = { - filterName: "Filters", -} - -export interface SearchBarWithFilterProps { - filter?: string - onFilter: (query: string) => void - presetFilters?: PresetFilter[] - error?: unknown - docs?: string -} - -export interface PresetFilter { - name: string - query: string -} - -export const SearchBarWithFilter: React.FC< - React.PropsWithChildren -> = ({ filter, onFilter, presetFilters, error, docs }) => { - const styles = useStyles({ error: Boolean(error) }) - const searchInputRef = useRef(null) - const [value, setValue] = useState(filter) - useEffect(() => { - setValue(filter) - }, [filter]) - // debounce query string entry by user - // we want the dependency array empty here - // as we don't need to redefine the function - // eslint-disable-next-line react-hooks/exhaustive-deps -- see above - const debouncedOnFilter = useCallback( - debounce((debouncedQueryString: string) => { - onFilter(debouncedQueryString) - }, 300), - [], - ) - - const [anchorEl, setAnchorEl] = useState(null) - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget) - } - - const handleClose = () => { - setAnchorEl(null) - } - - const setPresetFilter = (query: string) => () => { - if (!searchInputRef.current) { - throw new Error("Search input not found.") - } - - onFilter(query) - // Update this to the input directly instead of create a new state and - // re-render the component since the onFilter is already calling the - // filtering process - searchInputRef.current.value = query - handleClose() - } - - const errorMessage = getValidationErrorMessage(error) - - return ( - - - {presetFilters && presetFilters.length > 0 && ( - - )} - -
- { - setValue(event.currentTarget.value) - debouncedOnFilter(event.currentTarget.value) - }} - inputRef={searchInputRef} - inputProps={{ - "aria-label": "Filter", - }} - startAdornment={ - - - - } - /> -
- - {presetFilters && presetFilters.length > 0 ? ( - - {presetFilters.map((presetFilter) => ( - - {presetFilter.name} - - ))} - {docs && ( - - View advanced filtering - - )} - - ) : null} -
- {errorMessage && ( - {errorMessage} - )} -
- ) -} - -interface StyleProps { - error?: boolean -} - -const useStyles = makeStyles((theme) => ({ - root: { - marginBottom: theme.spacing(2), - - "&:has(button) .MuiInputBase-root": { - borderTopLeftRadius: 0, - borderBottomLeftRadius: 0, - }, - }, - // necessary to expand the textField - // the length of the page (within the bordered filterContainer) - filterForm: { - width: "100%", - }, - buttonRoot: { - border: `1px solid ${theme.palette.divider}`, - borderRadius: `${theme.shape.borderRadius}px 0px 0px ${theme.shape.borderRadius}px`, - flexShrink: 0, - marginRight: -1, - - "&:hover": { - zIndex: 1, - }, - }, - errorRoot: { - color: theme.palette.error.main, - whiteSpace: "pre-wrap", - }, - inputStyles: { - height: "100%", - width: "100%", - color: theme.palette.primary.contrastText, - backgroundColor: theme.palette.background.paper, - - "& fieldset": { - borderColor: theme.palette.divider, - "&MuiOutlinedInput-root:hover, &MuiOutlinedInput-notchedOutline": { - borderColor: (props) => props.error && theme.palette.error.contrastText, - }, - }, - - "& .MuiInputBase-input": { - paddingTop: "inherit", - paddingBottom: "inherit", - // The same as the button - minHeight: 40, - }, - }, - searchIcon: { - color: theme.palette.text.secondary, - }, -})) diff --git a/site/src/pages/AuditPage/AuditPage.tsx b/site/src/pages/AuditPage/AuditPage.tsx index d4c5fc4e9c883..5b5bd41eb2cad 100644 --- a/site/src/pages/AuditPage/AuditPage.tsx +++ b/site/src/pages/AuditPage/AuditPage.tsx @@ -7,14 +7,12 @@ import { pageTitle } from "utils/page" import { AuditPageView } from "./AuditPageView" import { useUserFilterMenu } from "components/Filter/UserFilter" import { useFilter } from "components/Filter/filter" -import { useDashboard } from "components/Dashboard/DashboardProvider" import { usePagination } from "hooks" import { useQuery } from "@tanstack/react-query" import { getAuditLogs } from "api/api" import { useActionFilterMenu, useResourceTypeFilterMenu } from "./AuditFilter" const AuditPage: FC = () => { - const dashboard = useDashboard() const searchParamsResult = useSearchParams() const pagination = usePagination({ searchParamsResult }) const filter = useFilter({ @@ -73,22 +71,15 @@ const AuditPage: FC = () => { isNonInitialPage={nonInitialPage(searchParamsResult[0])} isAuditLogVisible={isAuditLogVisible} error={error} - filterProps={ - dashboard.experiments.includes("workspace_filter") - ? { - filter, - error, - menus: { - user: userMenu, - action: actionMenu, - resourceType: resourceTypeMenu, - }, - } - : { - filter: filter.query, - onFilter: filter.update, - } - } + filterProps={{ + filter, + error, + menus: { + user: userMenu, + action: actionMenu, + resourceType: resourceTypeMenu, + }, + }} /> ) diff --git a/site/src/pages/AuditPage/AuditPageView.stories.tsx b/site/src/pages/AuditPage/AuditPageView.stories.tsx index 94f00ab54d8c1..d41911ce70faf 100644 --- a/site/src/pages/AuditPage/AuditPageView.stories.tsx +++ b/site/src/pages/AuditPage/AuditPageView.stories.tsx @@ -1,41 +1,25 @@ -/* eslint-disable eslint-comments/disable-enable-pair -- ignore */ -/* eslint-disable @typescript-eslint/no-explicit-any -- We don't care about any here */ import { Meta, StoryObj } from "@storybook/react" import { MockAuditLog, MockAuditLog2, MockUser } from "testHelpers/entities" import { AuditPageView } from "./AuditPageView" -import { action } from "@storybook/addon-actions" import { WorkspacesPageView } from "pages/WorkspacesPage/WorkspacesPageView" import { ComponentProps } from "react" +import { MockMenu, getDefaultFilterProps } from "components/Filter/storyHelpers" -const mockMenu = { - initialOption: undefined, - isInitializing: false, - isSearching: false, - query: "", - searchOptions: [], - selectedOption: undefined, - selectOption: action("selectOption"), - setQuery: action("updateQuery"), -} +type FilterProps = ComponentProps["filterProps"] -const defaultFilterProps = { - filter: { - query: `owner:me`, - update: () => action("update"), - debounceUpdate: action("debounce") as any, - used: false, - values: { - username: MockUser.username, - action: undefined, - resource_type: undefined, - }, +const defaultFilterProps = getDefaultFilterProps({ + query: `owner:me`, + values: { + username: MockUser.username, + action: undefined, + resource_type: undefined, }, menus: { - user: mockMenu, - action: mockMenu, - resourceType: mockMenu, + user: MockMenu, + action: MockMenu, + resourceType: MockMenu, }, -} as ComponentProps["filterProps"] +}) const meta: Meta = { title: "pages/AuditPageView", diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index 07ce4f949d6aa..8150da4e2ee6c 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -18,7 +18,6 @@ import { ResetPasswordDialog } from "../../components/Dialogs/ResetPasswordDialo import { pageTitle } from "../../utils/page" import { UsersPageView } from "./UsersPageView" import { useStatusFilterMenu } from "./UsersFilter" -import { useDashboard } from "components/Dashboard/DashboardProvider" import { useFilter } from "components/Filter/filter" export const Language = { @@ -77,8 +76,6 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => { const me = useMe() - // New filter - const dashboard = useDashboard() const useFilterResult = useFilter({ searchParamsResult, onUpdate: () => { @@ -148,29 +145,19 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => { roles, }) }} - error={getUsersError} isUpdatingUserRoles={usersState.matches("updatingUserRoles")} isLoading={isLoading} canEditUsers={canEditUsers} paginationRef={paginationRef} isNonInitialPage={nonInitialPage(searchParams)} actorID={me.id} - filterProps={ - dashboard.experiments.includes("workspace_filter") - ? { - filter: useFilterResult, - error: getUsersError, - menus: { - status: statusMenu, - }, - } - : { - filter: usersState.context.filter, - onFilter: (query) => { - usersSend({ type: "UPDATE_FILTER", query }) - }, - } - } + filterProps={{ + filter: useFilterResult, + error: getUsersError, + menus: { + status: statusMenu, + }, + }} /> ["filterProps"] + +const defaultFilterProps = getDefaultFilterProps({ + query: "owner:me", + menus: { + status: MockMenu, + }, + values: { + status: "active", + }, +}) const meta: Meta = { title: "pages/UsersPageView", @@ -19,10 +32,7 @@ const meta: Meta = { roles: MockAssignableSiteRoles, count: 2, canEditUsers: true, - filterProps: { - onFilter: action("onFilter"), - filter: "", - }, + filterProps: defaultFilterProps, }, } diff --git a/site/src/pages/UsersPage/UsersPageView.tsx b/site/src/pages/UsersPage/UsersPageView.tsx index d47e44228a158..8dd13581a16aa 100644 --- a/site/src/pages/UsersPage/UsersPageView.tsx +++ b/site/src/pages/UsersPage/UsersPageView.tsx @@ -2,9 +2,7 @@ import { PaginationWidget } from "components/PaginationWidget/PaginationWidget" import { ComponentProps, FC } from "react" import { PaginationMachineRef } from "xServices/pagination/paginationXService" import * as TypesGen from "../../api/typesGenerated" -import { SearchBarWithFilter } from "../../components/SearchBarWithFilter/SearchBarWithFilter" import { UsersTable } from "../../components/UsersTable/UsersTable" -import { userFilterQuery } from "../../utils/filters" import { UsersFilter } from "./UsersFilter" import { PaginationStatus } from "components/PaginationStatus/PaginationStatus" @@ -16,7 +14,6 @@ export interface UsersPageViewProps { users?: TypesGen.User[] count?: number roles?: TypesGen.AssignableRoles[] - error?: unknown isUpdatingUserRoles?: boolean canEditUsers?: boolean isLoading?: boolean @@ -30,9 +27,7 @@ export interface UsersPageViewProps { user: TypesGen.User, roles: TypesGen.Role["name"][], ) => void - filterProps: - | ComponentProps - | ComponentProps + filterProps: ComponentProps paginationRef: PaginationMachineRef isNonInitialPage: boolean actorID: string @@ -49,7 +44,6 @@ export const UsersPageView: FC> = ({ onActivateUser, onResetUserPassword, onUpdateUserRoles, - error, isUpdatingUserRoles, canEditUsers, isLoading, @@ -58,22 +52,9 @@ export const UsersPageView: FC> = ({ isNonInitialPage, actorID, }) => { - const presetFilters = [ - { query: userFilterQuery.active, name: Language.activeUsersFilterName }, - { query: userFilterQuery.all, name: Language.allUsersFilterName }, - ] - return ( <> - {"onFilter" in filterProps ? ( - - ) : ( - - )} + { onChange: (option) => filter.update({ ...filter.values, status: option?.value }), }) - const dashboard = useDashboard() return ( <> @@ -58,7 +56,6 @@ const WorkspacesPage: FC = () => { null, } -const mockMenu = { - initialOption: undefined, - isInitializing: false, - isSearching: false, - query: "", - searchOptions: [], - selectedOption: undefined, - selectOption: action("selectOption"), - setQuery: action("updateQuery"), -} +type FilterProps = ComponentProps["filterProps"] -const defaultFilterProps = { - filter: { - query: `owner:me`, - update: () => action("update"), - debounceUpdate: action("debounce") as any, - used: false, - values: { - owner: MockUser.username, - template: undefined, - status: undefined, - }, - }, +const defaultFilterProps = getDefaultFilterProps({ + query: "owner:me", menus: { - user: mockMenu, - template: mockMenu, - status: mockMenu, + user: MockMenu, + template: MockMenu, + status: MockMenu, + }, + values: { + owner: MockUser.username, + template: undefined, + status: undefined, }, -} as ComponentProps["filterProps"] +}) const meta: Meta = { title: "pages/WorkspacesPageView", diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx index 72e8ea83113cc..bafe93770d51c 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx @@ -19,8 +19,6 @@ import { ImpendingDeletionBanner, Count } from "components/WorkspaceDeletion" import { ErrorAlert } from "components/Alert/ErrorAlert" import { WorkspacesFilter } from "./filter/filter" import { hasError, isApiValidationError } from "api/errors" -import { workspaceFilterQuery } from "utils/filters" -import { SearchBarWithFilter } from "components/SearchBarWithFilter/SearchBarWithFilter" import { PaginationStatus } from "components/PaginationStatus/PaginationStatus" export const Language = { @@ -32,24 +30,10 @@ export const Language = { template: "Template", } -const presetFilters = [ - { query: workspaceFilterQuery.me, name: Language.yourWorkspacesButton }, - { query: workspaceFilterQuery.all, name: Language.allWorkspacesButton }, - { - query: workspaceFilterQuery.running, - name: Language.runningWorkspacesButton, - }, - { - query: workspaceFilterQuery.failed, - name: "Failed workspaces", - }, -] - export interface WorkspacesPageViewProps { error: unknown workspaces?: Workspace[] count?: number - useNewFilter?: boolean filterProps: ComponentProps page: number limit: number @@ -67,7 +51,6 @@ export const WorkspacesPageView: FC< filterProps, onPageChange, onUpdateWorkspace, - useNewFilter, page, }) => { const { saveLocal, getLocal } = useLocalStorage() @@ -133,16 +116,7 @@ export const WorkspacesPageView: FC< count={Count.Multiple} /> - {useNewFilter ? ( - - ) : ( - - )} + Date: Tue, 20 Jun 2023 18:01:56 +0000 Subject: [PATCH 2/4] Fix audit page --- site/src/pages/AuditPage/AuditPageView.tsx | 33 ++-------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/site/src/pages/AuditPage/AuditPageView.tsx b/site/src/pages/AuditPage/AuditPageView.tsx index 05476646a709f..8aada9516c9ba 100644 --- a/site/src/pages/AuditPage/AuditPageView.tsx +++ b/site/src/pages/AuditPage/AuditPageView.tsx @@ -13,7 +13,6 @@ import { PageHeaderSubtitle, PageHeaderTitle, } from "components/PageHeader/PageHeader" -import { SearchBarWithFilter } from "components/SearchBarWithFilter/SearchBarWithFilter" import { Stack } from "components/Stack/Stack" import { TableLoader } from "components/TableLoader/TableLoader" import { Timeline } from "components/Timeline/Timeline" @@ -30,23 +29,6 @@ export const Language = { subtitle: "View events in your audit log.", } -const presetFilters = [ - { - query: "resource_type:workspace action:create", - name: "Created workspaces", - }, - { query: "resource_type:template action:create", name: "Added templates" }, - { query: "resource_type:user action:delete", name: "Deleted users" }, - { - query: "resource_type:workspace_build action:start build_reason:initiator", - name: "Builds started by a user", - }, - { - query: "resource_type:api_key action:login", - name: "User logins", - }, -] - export interface AuditPageViewProps { auditLogs?: AuditLog[] count?: number @@ -56,9 +38,7 @@ export interface AuditPageViewProps { isNonInitialPage: boolean isAuditLogVisible: boolean error?: Error | unknown - filterProps: - | ComponentProps - | ComponentProps + filterProps: ComponentProps } export const AuditPageView: FC = ({ @@ -91,16 +71,7 @@ export const AuditPageView: FC = ({ - {"onFilter" in filterProps ? ( - - ) : ( - - )} + Date: Wed, 21 Jun 2023 12:55:02 +0000 Subject: [PATCH 3/4] fix entities --- site/src/testHelpers/entities.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index f097ba2d84baf..1566f4a68ca40 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -1403,7 +1403,6 @@ export const MockEntitlementsWithScheduling: TypesGen.Entitlements = { export const MockExperiments: TypesGen.Experiment[] = [ "workspace_actions", "moons", - "workspace_filter", ] export const MockAuditLog: TypesGen.AuditLog = { From 720213a02cdffc9d3cab28b1bb40b78da45b6fc7 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Wed, 21 Jun 2023 13:11:11 +0000 Subject: [PATCH 4/4] Fix story --- .../pages/UsersPage/UsersPageView.stories.tsx | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/site/src/pages/UsersPage/UsersPageView.stories.tsx b/site/src/pages/UsersPage/UsersPageView.stories.tsx index c396d43c6f7e1..1b860d2d4e29f 100644 --- a/site/src/pages/UsersPage/UsersPageView.stories.tsx +++ b/site/src/pages/UsersPage/UsersPageView.stories.tsx @@ -66,14 +66,18 @@ export const EmptyPage = { export const Error = { args: { users: undefined, - error: mockApiError({ - message: "Invalid user search query.", - validations: [ - { - field: "status", - detail: `Query param "status" has invalid value: "inactive" is not a valid user status`, - }, - ], - }), + count: 0, + filterProps: { + ...defaultFilterProps, + error: mockApiError({ + message: "Invalid user search query.", + validations: [ + { + field: "status", + detail: `Query param "status" has invalid value: "inactive" is not a valid user status`, + }, + ], + }), + }, }, }