Skip to content
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

chore: mark workspace hooks and utils deprecated #111

Merged
merged 2 commits into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
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
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
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';
JoaoPedroPP marked this conversation as resolved.
Show resolved Hide resolved
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