Skip to content

Commit

Permalink
Merge pull request #111 from sahil143/deprecate-workpsace
Browse files Browse the repository at this point in the history
chore: mark workspace hooks and utils deprecated
  • Loading branch information
sahil143 authored Feb 13, 2025
2 parents 93f0fc3 + 819c0d6 commit fc997b2
Show file tree
Hide file tree
Showing 30 changed files with 118 additions and 29 deletions.
4 changes: 2 additions & 2 deletions config/jest.setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ jest.mock('../src/components/Workspace/useWorkspaceInfo', () => ({
...jest.requireActual('../src/components/Workspace/useWorkspaceInfo'),
}));

jest.mock('../src/components/Namespace/useNamespaceInfo', () => ({
jest.mock('../src/shared/providers/Namespace/useNamespaceInfo', () => ({
__esModule: true,
...jest.requireActual('../src/components/Namespace/useNamespaceInfo'),
...jest.requireActual('../src/shared/providers/Namespace/useNamespaceInfo'),
}));

jest.mock('../src/utils/rbac', () => ({
Expand Down
2 changes: 1 addition & 1 deletion src/components/Applications/ApplicationListView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ import { IMPORT_PATH } from '../../routes/paths';
import { Table } from '../../shared';
import AppEmptyState from '../../shared/components/empty-state/AppEmptyState';
import FilteredEmptyState from '../../shared/components/empty-state/FilteredEmptyState';
import { useNamespace } from '../../shared/providers/Namespace';
import { ApplicationKind } from '../../types';
import { useApplicationBreadcrumbs } from '../../utils/breadcrumb-utils';
import { useAccessReviewForModel } from '../../utils/rbac';
import { ButtonWithAccessTooltip } from '../ButtonWithAccessTooltip';
import { useNamespace } from '../Namespace/useNamespaceInfo';
import PageLayout from '../PageLayout/PageLayout';
import { ApplicationListHeader } from './ApplicationListHeader';
import ApplicationListRow from './ApplicationListRow';
Expand Down
4 changes: 2 additions & 2 deletions src/components/Applications/switcher/ApplicationSwitcher.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import {
APPLICATION_LIST_PATH,
IMPORT_PATH,
} from '../../../routes/paths';
import { ContextMenuItem, ContextSwitcher } from '../../../shared/components';
import { useNamespace } from '../../../shared/providers/Namespace';
import { useAccessReviewForModel } from '../../../utils/rbac';
import { ButtonWithAccessTooltip } from '../../ButtonWithAccessTooltip';
import { ContextMenuItem, ContextSwitcher } from '../../ContextSwitcher';
import { useNamespace } from '../../Namespace/useNamespaceInfo';

export const ApplicationSwitcher: React.FC<
React.PropsWithChildren<{ selectedApplication?: string }>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ImportForm/GitImportForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { Form, PageSection } from '@patternfly/react-core';
import { Formik, FormikHelpers } from 'formik';
import { useBombinoUrl } from '../../hooks/useUIInstance';
import { APPLICATION_DETAILS_PATH } from '../../routes/paths';
import { useNamespace } from '../../shared/providers/Namespace';
import { AnalyticsProperties, TrackEvents, useTrackEvent } from '../../utils/analytics';
import { useNamespace } from '../Namespace/useNamespaceInfo';
import ApplicationSection from './ApplicationSection/ApplicationSection';
import { ComponentSection } from './ComponentSection/ComponentSection';
import GitImportActions from './GitImportActions';
Expand Down
2 changes: 1 addition & 1 deletion src/components/ImportForm/SecretSection/SecretSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import { Base64 } from 'js-base64';
import { useSecrets } from '../../../hooks/useSecrets';
import { SecretModel } from '../../../models';
import TextColumnField from '../../../shared/components/formik-fields/text-column-field/TextColumnField';
import { useNamespace } from '../../../shared/providers/Namespace';
import { BuildTimeSecret, SecretType } from '../../../types';
import { AccessReviewResources } from '../../../types/rbac';
import { useAccessReviewForModels } from '../../../utils/rbac';
import { ButtonWithAccessTooltip } from '../../ButtonWithAccessTooltip';
import { useModalLauncher } from '../../modal/ModalProvider';
import { useNamespace } from '../../Namespace/useNamespaceInfo';
import { SecretModalLauncher } from '../../Secrets/SecretModalLauncher';
import { ImportFormValues } from '../type';

Expand Down
2 changes: 1 addition & 1 deletion src/components/Overview/IntroBanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import { useApplications } from '../../hooks/useApplications';
import { ApplicationModel, ComponentModel } from '../../models';
import { APPLICATION_LIST_PATH, IMPORT_PATH } from '../../routes/paths';
import ExternalLink from '../../shared/components/links/ExternalLink';
import { useNamespace } from '../../shared/providers/Namespace';
import { AccessReviewResources } from '../../types';
import { useAccessReviewForModels } from '../../utils/rbac';
import { ButtonWithAccessTooltip } from '../ButtonWithAccessTooltip';
import { useNamespace } from '../Namespace/useNamespaceInfo';
import { SignupStatus } from '../SignUp/signup-utils';
import SignupButton from '../SignUp/SignupButton';
import { useSignupStatus } from '../SignUp/useSignupStatus';
Expand Down
2 changes: 1 addition & 1 deletion src/components/Secrets/SecretsForm/ApplicationDropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { useField } from 'formik';
import { useApplications } from '../../../hooks/useApplications';
import DropdownField from '../../../shared/components/formik-fields/DropdownField';
import { useNamespace } from '../../Namespace/useNamespaceInfo';
import { useNamespace } from '../../../shared/providers/Namespace';

type ApplicationDropdownProps = Omit<
React.ComponentProps<typeof DropdownField>,
Expand Down
2 changes: 1 addition & 1 deletion src/components/Secrets/SecretsListView/SecretsListView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import { useSecrets } from '../../../hooks/useSecrets';
import { SecretModel } from '../../../models';
import AppEmptyState from '../../../shared/components/empty-state/AppEmptyState';
import FilteredEmptyState from '../../../shared/components/empty-state/FilteredEmptyState';
import { useNamespace } from '../../../shared/providers/Namespace';
import { useAccessReviewForModel } from '../../../utils/rbac';
import { ButtonWithAccessTooltip } from '../../ButtonWithAccessTooltip';
import { useNamespace } from '../../Namespace/useNamespaceInfo';
import SecretsList from './SecretsList';

const SecretsListView: React.FC = () => {
Expand Down
6 changes: 5 additions & 1 deletion src/components/Workspace/WorkspaceSwitcher.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import React from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { ContextMenuItem, ContextSwitcher } from '../ContextSwitcher';
import { ContextMenuItem, ContextSwitcher } from '../../shared/components';
import { useWorkspaceInfo } from './useWorkspaceInfo';
import { createWorkspaceQueryOptions } from './utils';

/**
*
* @deprecated
*/
export const WorkspaceSwitcher: React.FC<
React.PropsWithChildren<{ selectedWorkspace?: string }>
> = () => {
Expand Down
6 changes: 6 additions & 0 deletions src/components/Workspace/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import { LoaderFunction } from 'react-router-dom';
import { queryWorkspaces } from './utils';

/**
* @deprecated in favor of Namespaces
*/
export const workspaceLoader: LoaderFunction = async () => {
const workspaces = await queryWorkspaces();
return { data: workspaces };
};

/**
* @deprecated in favor of Namespaces
*/
export { WorkspaceProvider } from './workspace-context';
8 changes: 8 additions & 0 deletions src/components/Workspace/useWorkspaceInfo.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import { useContext } from 'react';
// remove eslint disable once migration to namespace is done
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import type { useNamespace } from '../../shared/providers/Namespace';
import { WorkspaceContext } from './workspace-context';

/**
* @deprecated Migrate to Namespaces
* use {@link useNamespace}
*
*/
export const useWorkspaceInfo = () => useContext(WorkspaceContext);
43 changes: 43 additions & 0 deletions src/components/Workspace/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,60 @@ import { queryClient } from '../../k8s/query/core';
import { WorkspaceModel } from '../../models';
import { Workspace } from '../../types';

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
const LOCAL_STORAGE_WORKSPACE_KEY = 'lastUsedWorkspace';

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const WORKSPACE_QUERY_KEY = 'workspaces';

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getLastUsedWorkspace = (): string => {
return localStorage.getItem(LOCAL_STORAGE_WORKSPACE_KEY);
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const setLastUsedWorkspace = (workspace: string) => {
localStorage.setItem(LOCAL_STORAGE_WORKSPACE_KEY, workspace);
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
const createWorkspaceQueryKey = (name?: string) => {
return [WORKSPACE_QUERY_KEY, ...(name ? [name] : [])];
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getHomeWorkspace = (workspaces: Workspace[]) =>
workspaces?.find((w) => w?.status?.type === 'home');

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getDefaultNsForWorkspace = (obj: Workspace) => {
return obj?.status?.namespaces.find((n) => n.type === 'default');
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getWorkspaceForNamespace = (workspaces: Workspace[], namespace) => {
return workspaces?.find((w) => w.status?.namespaces?.some((ns) => ns.name === namespace));
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
function fetchWorkspaces(): Promise<Workspace[]>;
function fetchWorkspaces(name: string): Promise<Workspace>;
function fetchWorkspaces(name?: string): Promise<Workspace | Workspace[]> {
Expand All @@ -39,6 +66,9 @@ function fetchWorkspaces(name?: string): Promise<Workspace | Workspace[]> {
: K8sGetResource<Workspace>({ model: WorkspaceModel, queryOptions: { name } });
}

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export function createWorkspaceQueryOptions(): UseQueryOptions<Workspace[]>;
export function createWorkspaceQueryOptions(name: string): UseQueryOptions<Workspace>;
export function createWorkspaceQueryOptions(
Expand All @@ -58,12 +88,18 @@ export function createWorkspaceQueryOptions(
});
}

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export function invalidateWorkspaceQuery(): Promise<void>;
export function invalidateWorkspaceQuery(name: string): Promise<void>;
export async function invalidateWorkspaceQuery(name?: string): Promise<void> {
return await queryClient.invalidateQueries({ queryKey: createWorkspaceQueryKey(name) });
}

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getNamespaceUsingWorspaceFromQueryCache = async (
workspace: string,
): Promise<string | undefined> => {
Expand All @@ -74,6 +110,10 @@ export const getNamespaceUsingWorspaceFromQueryCache = async (
}),
)?.name;
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const getWorkspaceUsingNamespaceFromQueryCache = async (
namespace: string,
): Promise<string | undefined> => {
Expand All @@ -86,6 +126,9 @@ export const getWorkspaceUsingNamespaceFromQueryCache = async (
)?.metadata?.name;
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/utils.ts)
*/
export const queryWorkspaces = () => {
return queryClient.ensureQueryData(createWorkspaceQueryOptions());
};
9 changes: 9 additions & 0 deletions src/components/Workspace/workspace-context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import {
setLastUsedWorkspace,
} from './utils';

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/namespace-context.ts)
*/
export type WorkspaceContextData = {
namespace: string;
workspace: string;
Expand All @@ -22,6 +25,9 @@ export type WorkspaceContextData = {
workspaces: Workspace[];
};

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/namespace-context.ts)
*/
export const WorkspaceContext = React.createContext<WorkspaceContextData>({
namespace: '',
workspace: '',
Expand All @@ -31,6 +37,9 @@ export const WorkspaceContext = React.createContext<WorkspaceContextData>({
lastUsedWorkspace: getLastUsedWorkspace(),
});

/**
* @deprecated in favor of [Namespace](../../shared/providers/Namespace/namespace-context.ts)
*/
export const WorkspaceProvider: React.FC<React.PropsWithChildren> = ({ children }) => {
const { data: workspaces, isLoading: workspaceLoading } = useQuery(createWorkspaceQueryOptions());
const params = useParams<RouterParams>();
Expand Down
1 change: 1 addition & 0 deletions src/k8s/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export * from './hooks';
export * from './query';
export * from './query/core';
export * from './fetch';
export * from './k8s-fetch';
export * from './k8s-utils';
2 changes: 1 addition & 1 deletion src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import {
IntegrationTestsListView,
} from '../components/IntegrationTests/IntegrationTestsListView';
import { ModalProvider } from '../components/modal/ModalProvider';
import { namespaceLoader, NamespaceProvider } from '../components/Namespace';
import { Overview } from '../components/Overview/Overview';
import {
PipelineRunDetailsLayout,
Expand Down Expand Up @@ -85,6 +84,7 @@ import {
import { workspaceLoader, WorkspaceProvider } from '../components/Workspace';
import { HttpError } from '../k8s/error';
import ErrorEmptyState from '../shared/components/empty-state/ErrorEmptyState';
import { namespaceLoader, NamespaceProvider } from '../shared/providers/Namespace';
import applicationRoutes from './page-routes/application';
import workspaceRoutes from './page-routes/workspace';
import { RouteErrorBoundry } from './RouteErrorBoundary';
Expand Down
7 changes: 7 additions & 0 deletions src/routes/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
export const RouterParams = {
/**
* @deprecated
* Existing usages are permitted for backward compatibility;
* however, please avoid adding new references
*
* use [useNamespace](../shared/providers/Namespace)
*/
workspaceName: 'workspaceName',
applicationName: 'applicationName',
integrationTestName: 'integrationTestName',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { act, fireEvent, render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
import { useLocalStorage } from '../../hooks/useLocalStorage';
import { useLocalStorage } from '../../../hooks/useLocalStorage';
import { ContextSwitcher } from './ContextSwitcher';

jest.mock('../../hooks/useLocalStorage', () => ({
jest.mock('../../../hooks/useLocalStorage', () => ({
useLocalStorage: jest.fn(() => [{}, jest.fn()]),
}));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { Dropdown, DropdownToggle } from '@patternfly/react-core/deprecated';
import { EllipsisHIcon } from '@patternfly/react-icons/dist/esm/icons/ellipsis-h-icon';
import '././ContextSwitcher.scss';
import { useLocalStorage } from '../../hooks/useLocalStorage';
import { useLocalStorage } from '../../../hooks/useLocalStorage';
import { ContextMenuListItem, filteredItems, findItemByKey } from './context-switcher-utils';

const LOCAL_STORAGE_KEY = 'context-switcher';
Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions src/shared/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './timestamp';
export * from './markdown-view';
export * from './help-tooltip';
export * from './pipeline-run-logs';
export * from './ContextSwitcher';
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import { useQuery } from '@tanstack/react-query';
import { screen, waitFor, render } from '@testing-library/react';
import { createReactRouterMock, createUseWorkspaceInfoMock } from '../../../utils/test-utils';
import { createReactRouterMock, createUseWorkspaceInfoMock } from '../../../../utils/test-utils';
import { NamespaceProvider, NamespaceContext } from '../namespace-context';

jest.mock('react-router-dom', () => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export const namespaceLoader: LoaderFunction = async () => {
};

export { NamespaceProvider } from './namespace-context';
export * from './useNamespaceInfo';
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import * as React from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { Bullseye, Button, Spinner } from '@patternfly/react-core';
import { useQuery } from '@tanstack/react-query';
import { APPLICATION_LIST_PATH } from '../../routes/paths';
import { RouterParams } from '../../routes/utils';
import ErrorEmptyState from '../../shared/components/empty-state/ErrorEmptyState';
import { NamespaceKind } from '../../types';
import { useWorkspaceInfo } from '../Workspace/useWorkspaceInfo';
import { useWorkspaceInfo } from '../../../components/Workspace/useWorkspaceInfo';
import { APPLICATION_LIST_PATH } from '../../../routes/paths';
import { RouterParams } from '../../../routes/utils';
import { NamespaceKind } from '../../../types';
import ErrorEmptyState from '../../components/empty-state/ErrorEmptyState';
import { createNamespaceQueryOptions, getLastUsedNamespace, setLastUsedNamespace } from './utils';

export type NamespaceContextData = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { useContext } from 'react';
import { useQuery } from '@tanstack/react-query';
import { NamespaceContext } from './namespace-context';
import { createNamespaceQueryOptions } from './utils';

export const useNamespaceInfo = () => useContext(NamespaceContext);

export const useNamespace = () => useNamespaceInfo().namespace;

export const useNamespacesQuery = () => useQuery(createNamespaceQueryOptions());
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { queryOptions as _createQueryOptions, UseQueryOptions } from '@tanstack/react-query';
import { K8sGetResource, K8sListResourceItems } from '../../k8s/k8s-fetch';
import { queryClient } from '../../k8s/query/core';
import { NamespaceModel } from '../../models';
import { NamespaceKind } from '../../types';
import { K8sGetResource, K8sListResourceItems, queryClient } from '../../../k8s';
import { NamespaceModel } from '../../../models';
import { NamespaceKind } from '../../../types';

const LOCAL_STORAGE_NAMESPACE_KEY = 'lastUsedNamespace';

Expand Down
Loading

0 comments on commit fc997b2

Please sign in to comment.