From 491af9430a865a24a931d13a083f6b160f1d31a0 Mon Sep 17 00:00:00 2001 From: Erik Engervall Date: Thu, 22 Apr 2021 13:33:43 +0200 Subject: [PATCH] Return objects from contexts to simplify naming Signed-off-by: Erik Engervall --- .../src/GitHubReleaseManager.tsx | 4 ++-- .../src/cards/Cards.test.tsx | 8 ++++++-- .../github-release-manager/src/cards/Cards.tsx | 4 ++-- .../src/cards/CreateRc/CreateRc.test.tsx | 12 +++++++++--- .../src/cards/CreateRc/CreateRc.tsx | 4 ++-- .../src/cards/Info/Info.test.tsx | 4 +++- .../src/cards/Info/Info.tsx | 3 +-- .../src/cards/Patch/Patch.test.tsx | 4 +++- .../src/cards/Patch/Patch.tsx | 2 +- .../src/cards/Patch/PatchBody.test.tsx | 8 ++++++-- .../src/cards/Patch/PatchBody.tsx | 4 ++-- .../src/cards/PromoteRc/PromoteRcBody.test.tsx | 8 ++++++-- .../src/cards/PromoteRc/PromoteRcBody.tsx | 4 ++-- .../src/cards/RepoDetailsForm/Owner.test.tsx | 15 +++++++++------ .../src/cards/RepoDetailsForm/Owner.tsx | 4 ++-- .../src/cards/RepoDetailsForm/Repo.test.tsx | 15 +++++++++------ .../src/cards/RepoDetailsForm/Repo.tsx | 4 ++-- .../RepoDetailsForm/VersioningStrategy.test.tsx | 4 +++- .../cards/RepoDetailsForm/VersioningStrategy.tsx | 2 +- .../src/contexts/PluginApiClientContext.ts | 8 +++++--- .../src/contexts/ProjectContext.ts | 10 +++++++--- .../src/contexts/RefetchContext.ts | 13 +++++++------ 22 files changed, 90 insertions(+), 54 deletions(-) diff --git a/plugins/github-release-manager/src/GitHubReleaseManager.tsx b/plugins/github-release-manager/src/GitHubReleaseManager.tsx index 64b7ebb028..ff77e8bbe4 100644 --- a/plugins/github-release-manager/src/GitHubReleaseManager.tsx +++ b/plugins/github-release-manager/src/GitHubReleaseManager.tsx @@ -81,8 +81,8 @@ export function GitHubReleaseManager(props: GitHubReleaseManagerProps) { } return ( - - + +
diff --git a/plugins/github-release-manager/src/cards/Cards.test.tsx b/plugins/github-release-manager/src/cards/Cards.test.tsx index 8be47b4d59..8546c09cef 100644 --- a/plugins/github-release-manager/src/cards/Cards.test.tsx +++ b/plugins/github-release-manager/src/cards/Cards.test.tsx @@ -21,10 +21,14 @@ import { mockApiClient, mockCalverProject } from '../test-helpers/test-helpers'; import { TEST_IDS } from '../test-helpers/test-ids'; jest.mock('../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: () => mockApiClient, + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: () => ({ + project: mockCalverProject, + }), })); import { Cards } from './Cards'; diff --git a/plugins/github-release-manager/src/cards/Cards.tsx b/plugins/github-release-manager/src/cards/Cards.tsx index 22d7a8e884..0b4149212e 100644 --- a/plugins/github-release-manager/src/cards/Cards.tsx +++ b/plugins/github-release-manager/src/cards/Cards.tsx @@ -35,8 +35,8 @@ export function Cards({ }: { components: GitHubReleaseManagerProps['components']; }) { - const pluginApiClient = usePluginApiClientContext(); - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const [refetchTrigger, setRefetchTrigger] = useState(0); const { gitHubBatchInfo } = useGetGitHubBatchInfo({ pluginApiClient, diff --git a/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx b/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx index 084754ce06..98bf4903ac 100644 --- a/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx +++ b/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx @@ -30,10 +30,14 @@ import { TEST_IDS } from '../../test-helpers/test-ids'; import { useCreateRc } from './hooks/useCreateRc'; jest.mock('../../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: () => mockApiClient, + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: jest.fn(() => ({ + project: mockCalverProject, + })), })); jest.mock('../../helpers/getRcGitHubInfo', () => ({ getRcGitHubInfo: () => mockNextGitHubInfoSemver, @@ -65,7 +69,9 @@ describe('CreateRc', () => { }); it('should display select element for semver', () => { - (useProjectContext as jest.Mock).mockReturnValue(mockSemverProject); + (useProjectContext as jest.Mock).mockReturnValue({ + project: mockSemverProject, + }); const { getByTestId } = render( { - const pluginApiClient = usePluginApiClientContext(); - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const classes = useStyles(); const [semverBumpLevel, setSemverBumpLevel] = useState<'major' | 'minor'>( diff --git a/plugins/github-release-manager/src/cards/Info/Info.test.tsx b/plugins/github-release-manager/src/cards/Info/Info.test.tsx index 4656c4a4e0..2ca2b45576 100644 --- a/plugins/github-release-manager/src/cards/Info/Info.test.tsx +++ b/plugins/github-release-manager/src/cards/Info/Info.test.tsx @@ -24,7 +24,9 @@ import { } from '../../test-helpers/test-helpers'; jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: () => ({ + project: mockCalverProject, + }), })); import { Info } from './Info'; diff --git a/plugins/github-release-manager/src/cards/Info/Info.tsx b/plugins/github-release-manager/src/cards/Info/Info.tsx index 5830046bad..72a61a38e6 100644 --- a/plugins/github-release-manager/src/cards/Info/Info.tsx +++ b/plugins/github-release-manager/src/cards/Info/Info.tsx @@ -34,8 +34,7 @@ interface InfoCardProps { } export const Info = ({ releaseBranch, latestRelease }: InfoCardProps) => { - const project = useProjectContext(); - + const { project } = useProjectContext(); const classes = useStyles(); return ( diff --git a/plugins/github-release-manager/src/cards/Patch/Patch.test.tsx b/plugins/github-release-manager/src/cards/Patch/Patch.test.tsx index a9ac2d31a5..2f7f170d9f 100644 --- a/plugins/github-release-manager/src/cards/Patch/Patch.test.tsx +++ b/plugins/github-release-manager/src/cards/Patch/Patch.test.tsx @@ -24,7 +24,9 @@ import { import { TEST_IDS } from '../../test-helpers/test-ids'; jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: () => ({ + project: mockCalverProject, + }), })); import { Patch } from './Patch'; diff --git a/plugins/github-release-manager/src/cards/Patch/Patch.tsx b/plugins/github-release-manager/src/cards/Patch/Patch.tsx index 2f184277a1..dc3ca1c5b8 100644 --- a/plugins/github-release-manager/src/cards/Patch/Patch.tsx +++ b/plugins/github-release-manager/src/cards/Patch/Patch.tsx @@ -40,7 +40,7 @@ export const Patch = ({ releaseBranch, successCb, }: PatchProps) => { - const project = useProjectContext(); + const { project } = useProjectContext(); const classes = useStyles(); function Body() { diff --git a/plugins/github-release-manager/src/cards/Patch/PatchBody.test.tsx b/plugins/github-release-manager/src/cards/Patch/PatchBody.test.tsx index 2d8025bd3f..be9ea1ce45 100644 --- a/plugins/github-release-manager/src/cards/Patch/PatchBody.test.tsx +++ b/plugins/github-release-manager/src/cards/Patch/PatchBody.test.tsx @@ -28,10 +28,14 @@ import { } from '../../test-helpers/test-helpers'; jest.mock('../../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: jest.fn(() => mockApiClient), + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: () => ({ + project: mockCalverProject, + }), })); jest.mock('./hooks/usePatch', () => ({ usePatch: () => ({ diff --git a/plugins/github-release-manager/src/cards/Patch/PatchBody.tsx b/plugins/github-release-manager/src/cards/Patch/PatchBody.tsx index 6f112cf013..ec7b6ab1f3 100644 --- a/plugins/github-release-manager/src/cards/Patch/PatchBody.tsx +++ b/plugins/github-release-manager/src/cards/Patch/PatchBody.tsx @@ -65,8 +65,8 @@ export const PatchBody = ({ successCb, tagParts, }: PatchBodyProps) => { - const pluginApiClient = usePluginApiClientContext(); - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const [checkedCommitIndex, setCheckedCommitIndex] = useState(-1); const githubDataResponse = useAsync(async () => { diff --git a/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.test.tsx b/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.test.tsx index 573e85bf10..51724a1e22 100644 --- a/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.test.tsx +++ b/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.test.tsx @@ -25,10 +25,14 @@ import { import { TEST_IDS } from '../../test-helpers/test-ids'; jest.mock('../../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: jest.fn(() => mockApiClient), + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: () => ({ + project: mockCalverProject, + }), })); jest.mock('./hooks/usePromoteRc', () => ({ usePromoteRc: () => ({ diff --git a/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.tsx b/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.tsx index 88d1ccbf79..bfdfd1a976 100644 --- a/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.tsx +++ b/plugins/github-release-manager/src/cards/PromoteRc/PromoteRcBody.tsx @@ -33,8 +33,8 @@ interface PromoteRcBodyProps { } export const PromoteRcBody = ({ rcRelease, successCb }: PromoteRcBodyProps) => { - const pluginApiClient = usePluginApiClientContext(); - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const classes = useStyles(); const releaseVersion = rcRelease.tagName.replace('rc-', 'version-'); diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.test.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.test.tsx index e673c39c59..da95f5fa50 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.test.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.test.tsx @@ -31,10 +31,14 @@ jest.mock('react-router', () => ({ })), })); jest.mock('../../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: jest.fn(() => mockApiClient), + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: jest.fn(() => ({ + project: mockCalverProject, + })), })); import { useProjectContext } from '../../contexts/ProjectContext'; @@ -55,10 +59,9 @@ describe('Owner', () => { }); it('should render select for empty owners', async () => { - (useProjectContext as jest.Mock).mockImplementation(() => ({ - ...mockCalverProject, - owner: '', - })); + (useProjectContext as jest.Mock).mockReturnValue({ + project: { ...mockCalverProject, owner: '' }, + }); const { getAllByTestId, getByTestId } = render( , diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.tsx index 4c040cac4f..3cd2be6f7e 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/Owner.tsx @@ -33,10 +33,10 @@ import { useProjectContext } from '../../contexts/ProjectContext'; import { useQueryHandler } from '../../hooks/useQueryHandler'; export function Owner({ username }: { username: string }) { - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const formClasses = useFormClasses(); const navigate = useNavigate(); - const pluginApiClient = usePluginApiClientContext(); const { getQueryParamsWithUpdates } = useQueryHandler(); const { loading, error, value } = useAsync(() => pluginApiClient.getOwners()); diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.test.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.test.tsx index a5b7fca25a..ab6c98ea5f 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.test.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.test.tsx @@ -31,10 +31,14 @@ jest.mock('react-router', () => ({ })), })); jest.mock('../../contexts/PluginApiClientContext', () => ({ - usePluginApiClientContext: jest.fn(() => mockApiClient), + usePluginApiClientContext: () => ({ + pluginApiClient: mockApiClient, + }), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockCalverProject), + useProjectContext: jest.fn(() => ({ + project: mockCalverProject, + })), })); import { useProjectContext } from '../../contexts/ProjectContext'; @@ -53,10 +57,9 @@ describe('Repo', () => { }); it('should render select for empty repo', async () => { - (useProjectContext as jest.Mock).mockImplementation(() => ({ - ...mockCalverProject, - repo: '', - })); + (useProjectContext as jest.Mock).mockReturnValue({ + project: { ...mockCalverProject, repo: '' }, + }); const { getAllByTestId, getByTestId } = render(); diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.tsx index 57a339ab81..cb08a651cb 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/Repo.tsx @@ -33,8 +33,8 @@ import { useProjectContext } from '../../contexts/ProjectContext'; import { useQueryHandler } from '../../hooks/useQueryHandler'; export function Repo() { - const pluginApiClient = usePluginApiClientContext(); - const project = useProjectContext(); + const { pluginApiClient } = usePluginApiClientContext(); + const { project } = useProjectContext(); const navigate = useNavigate(); const formClasses = useFormClasses(); const { getQueryParamsWithUpdates } = useQueryHandler(); diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.test.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.test.tsx index bc27ea4ce1..4d36b26ed6 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.test.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.test.tsx @@ -31,7 +31,9 @@ jest.mock('react-router', () => ({ })), })); jest.mock('../../contexts/ProjectContext', () => ({ - useProjectContext: jest.fn(() => mockSemverProject), + useProjectContext: () => ({ + project: mockSemverProject, + }), })); import { VersioningStrategy } from './VersioningStrategy'; diff --git a/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.tsx b/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.tsx index 29db87b0c4..67ca47f566 100644 --- a/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.tsx +++ b/plugins/github-release-manager/src/cards/RepoDetailsForm/VersioningStrategy.tsx @@ -31,7 +31,7 @@ import { VERSIONING_STRATEGIES } from '../../constants/constants'; export function VersioningStrategy() { const navigate = useNavigate(); - const project = useProjectContext(); + const { project } = useProjectContext(); const { getParsedQuery, getQueryParamsWithUpdates } = useQueryHandler(); useEffect(() => { diff --git a/plugins/github-release-manager/src/contexts/PluginApiClientContext.ts b/plugins/github-release-manager/src/contexts/PluginApiClientContext.ts index 1954321644..2d4c9f27ac 100644 --- a/plugins/github-release-manager/src/contexts/PluginApiClientContext.ts +++ b/plugins/github-release-manager/src/contexts/PluginApiClientContext.ts @@ -20,15 +20,17 @@ import { IPluginApiClient } from '../api/PluginApiClient'; import { GitHubReleaseManagerError } from '../errors/GitHubReleaseManagerError'; export const PluginApiClientContext = createContext< - IPluginApiClient | undefined + { pluginApiClient: IPluginApiClient } | undefined >(undefined); export const usePluginApiClientContext = () => { - const pluginApiClient = useContext(PluginApiClientContext); + const { pluginApiClient } = useContext(PluginApiClientContext) ?? {}; if (!pluginApiClient) { throw new GitHubReleaseManagerError('pluginApiClient not found'); } - return pluginApiClient; + return { + pluginApiClient, + }; }; diff --git a/plugins/github-release-manager/src/contexts/ProjectContext.ts b/plugins/github-release-manager/src/contexts/ProjectContext.ts index d115c469fa..bd8e78c53b 100644 --- a/plugins/github-release-manager/src/contexts/ProjectContext.ts +++ b/plugins/github-release-manager/src/contexts/ProjectContext.ts @@ -49,14 +49,18 @@ export interface Project { isProvidedViaProps: boolean; } -export const ProjectContext = createContext(undefined); +export const ProjectContext = createContext<{ project: Project } | undefined>( + undefined, +); export const useProjectContext = () => { - const project = useContext(ProjectContext); + const { project } = useContext(ProjectContext) ?? {}; if (!project) { throw new GitHubReleaseManagerError('project not found'); } - return project; + return { + project, + }; }; diff --git a/plugins/github-release-manager/src/contexts/RefetchContext.ts b/plugins/github-release-manager/src/contexts/RefetchContext.ts index 4b9d82a17e..344df3d9a5 100644 --- a/plugins/github-release-manager/src/contexts/RefetchContext.ts +++ b/plugins/github-release-manager/src/contexts/RefetchContext.ts @@ -18,12 +18,13 @@ import { createContext, useContext } from 'react'; import { GitHubReleaseManagerError } from '../errors/GitHubReleaseManagerError'; -export interface Refetch { - refetchTrigger: number; - setRefetchTrigger: React.Dispatch>; -} - -export const RefetchContext = createContext(undefined); +export const RefetchContext = createContext< + | { + refetchTrigger: number; + setRefetchTrigger: React.Dispatch>; + } + | undefined +>(undefined); export const useRefetchContext = () => { const refetch = useContext(RefetchContext);