Skip to content
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
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ Note: there is a test account you can use. Get this from another developer if yo
- `HELPJUICE_KNOWLEDGE_BASE_URL` - Knowledge base page to make the Helpjuice "Visit Knowledge Base" page link to (example: `https://www.helpducks.org/mpdx`)
- `HELPJUICE_PARENT_CATEGORY` - The numerical value for the parent category within Helpjuice to search (example: `434642`)
- `HELPJUICE_CATEGORY_ID` - The numerical value for the category ID within Helpjuice which contains popular documents (example: `472031`)
- `HELP_WHATS_NEW_URL` - URL of a page explaining what is new in the new version of MPDX
- `HELP_WHATS_NEW_IMAGE_URL` - URL of an image for the What's New link
- `HELP_URL_COACHING_ACTIVITY` - Link to an article explaining the coaching activity table
- `HELP_URL_COACHING_APPOINTMENTS_AND_RESULTS` - Link to an article explaining the coaching appointments and results table
- `HELP_URL_SETUP_FIND_ORGANIZATION` - Link to an article explaining how to find an organization
Expand Down
2 changes: 0 additions & 2 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ const config: NextConfig = {
process.env.HELPJUICE_PARENT_CATEGORY ?? '434642',
HELPJUICE_CATEGORY_ID: process.env.HELPJUICE_CATEGORY_ID ?? '472031',
HELP_URL_COACHING_ACTIVITY: process.env.HELP_URL_COACHING_ACTIVITY,
HELP_WHATS_NEW_URL: process.env.HELP_WHATS_NEW_URL,
HELP_WHATS_NEW_IMAGE_URL: process.env.HELP_WHATS_NEW_IMAGE_URL,
HELP_URL_COACHING_APPOINTMENTS_AND_RESULTS:
process.env.HELP_URL_COACHING_APPOINTMENTS_AND_RESULTS,
HELP_URL_SETUP_FIND_ORGANIZATION:
Expand Down
23 changes: 0 additions & 23 deletions src/components/Layouts/Primary/NavBar/NavBar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,27 +56,4 @@ describe('NavBar', () => {

expect(queryByRole('link', { name: 'Dashboard' })).not.toBeInTheDocument();
});

describe("What's New link", () => {
it('is visible when HELP_WHATS_NEW_URL is set', () => {
process.env.HELP_WHATS_NEW_URL = '/new';
process.env.HELP_WHATS_NEW_IMAGE_URL = '/img.png';

const { getByRole } = render(<TestComponent openMobile />);

expect(
getByRole('link', { name: "Help logo What's New" }),
).toHaveAttribute('href', '/new');
});

it('is hidden when HELP_WHATS_NEW_URL is not set', () => {
process.env.HELP_WHATS_NEW_URL = '';

const { queryByRole } = render(<TestComponent openMobile />);

expect(
queryByRole('link', { name: "Help logo What's New" }),
).not.toBeInTheDocument();
});
});
});
1 change: 0 additions & 1 deletion src/components/Layouts/Primary/NavBar/NavBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ function reduceChildRoutes({
icon: item.icon,
key: item.title + depth,
title: item.title,
whatsNewLink: item.whatsNewLink,
};

if (item.items) {
Expand Down
12 changes: 0 additions & 12 deletions src/components/Layouts/Primary/NavBar/NavItem/NavItem.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,4 @@ describe('NavItem', () => {

expect(getByText(title)).toBeInTheDocument();
});

it("renders What's New link", () => {
process.env.HELP_WHATS_NEW_IMAGE_URL = '/img.png';

const { getByRole } = render(
<ThemeProvider theme={theme}>
<NavItem whatsNewLink title={title} />
</ThemeProvider>,
);

expect(getByRole('img')).toHaveAttribute('src', '/img.png');
});
});
10 changes: 0 additions & 10 deletions src/components/Layouts/Primary/NavBar/NavItem/NavItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ interface NavItemProps {
icon?: string;
open?: boolean;
title: string;
whatsNewLink?: boolean;
}

const StyledListItem = styled(ListItem)({
Expand Down Expand Up @@ -51,7 +50,6 @@ export const NavItem: FC<NavItemProps> = ({
icon,
open: openProp,
title,
whatsNewLink,
...rest
}) => {
const [open, setOpen] = useState<boolean>(openProp ?? false);
Expand Down Expand Up @@ -108,14 +106,6 @@ export const NavItem: FC<NavItemProps> = ({
{...rest}
>
{icon && <Icon path={icon} style={iconStyle} size="20" />}
{whatsNewLink && process.env.HELP_WHATS_NEW_IMAGE_URL && (
<img
src={process.env.HELP_WHATS_NEW_IMAGE_URL}
alt={t('Help logo')}
height={24}
style={{ marginRight: theme.spacing(1) }}
/>
)}
<Title>{title}</Title>
</LeafListItem>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,29 +260,6 @@ describe('NavMenu', () => {
expect(queryByRole('menuitem')).toBeNull();
});

describe("What's New link", () => {
it('is visible when HELP_WHATS_NEW_URL is set', () => {
process.env.HELP_WHATS_NEW_URL = '/new';
process.env.HELP_WHATS_NEW_IMAGE_URL = '/img.png';

const { getByRole } = render(<TestComponent />);

expect(
getByRole('menuitem', { name: "Help logo What's New" }),
).toHaveAttribute('href', '/new');
});

it('is hidden when HELP_WHATS_NEW_URL is not set', () => {
process.env.HELP_WHATS_NEW_URL = '';

const { queryByRole } = render(<TestComponent />);

expect(
queryByRole('menuitem', { name: "Help logo What's New" }),
).not.toBeInTheDocument();
});
});

it('test current tool id hook', () => {
const { getByTestId } = render(
<TestComponent
Expand Down
24 changes: 0 additions & 24 deletions src/components/Layouts/Primary/TopBar/Items/NavMenu/NavMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import { useRouter } from 'next/router';
import React, { useMemo, useState } from 'react';
import { Grid, ListItemText, MenuItem } from '@mui/material';
import { useTranslation } from 'react-i18next';
import { makeStyles } from 'tss-react/mui';
import { useLoadCoachingListQuery } from 'src/components/Coaching/LoadCoachingList.generated';
import { useNavPages } from 'src/hooks/useNavPages';
Expand Down Expand Up @@ -86,188 +85,165 @@
MergePeople = 'mergePeople',
}

const NavMenu: React.FC = () => {
const { t } = useTranslation();
const accountListId = useAccountListId();

const { classes } = useStyles();
const { data, loading } = useGetToolNotificationsQuery({
variables: { accountListId: accountListId ?? '' },
skip: !accountListId,
});
const { data: coachingData } = useLoadCoachingListQuery();

const coachingAccounts = coachingData?.coachingAccountLists;

const toolData: { [key: string]: { totalCount: number } } = {
[ToolName.FixCommitmentInfo]: data?.[ToolName.FixCommitmentInfo] ?? {
totalCount: 0,
},
[ToolName.FixMailingAddresses]: data?.[ToolName.FixMailingAddresses] ?? {
totalCount: 0,
},
[ToolName.FixSendNewsletter]: data?.[ToolName.FixSendNewsletter] ?? {
totalCount: 0,
},
[ToolName.FixEmailAddresses]: data?.[ToolName.FixEmailAddresses] ?? {
totalCount: 0,
},
[ToolName.FixPhoneNumbers]: data?.[ToolName.FixPhoneNumbers] ?? {
totalCount: 0,
},
[ToolName.MergeContacts]: data?.[ToolName.MergeContacts] ?? {
totalCount: 0,
},
[ToolName.MergePeople]: data?.[ToolName.MergePeople] ?? { totalCount: 0 },
};

const sum = useMemo<number>(() => {
return data
? Object.values(toolData).reduce(
(sum, toolContacts) => sum + toolContacts.totalCount,
0,
)
: 0;
}, [loading]);

const [reportsMenuOpen, setReportsMenuOpen] = useState(false);
const [hrToolsMenuOpen, setHrToolsMenuOpen] = useState(false);
const [toolsMenuOpen, setToolsMenuOpen] = useState(false);

const handleReportsMenuToggle = () => {
setReportsMenuOpen((prevOpen) => !prevOpen);
handleToolsMenuClose();
};

const handleReportsMenuClose = () => {
setReportsMenuOpen(false);
};

const handleHrToolsMenuToggle = () => {
setHrToolsMenuOpen((prevOpen) => !prevOpen);
handleToolsMenuClose();
};

const handleHrToolsMenuClose = () => {
setHrToolsMenuOpen(false);
};

const handleToolsMenuToggle = () => {
setToolsMenuOpen((prevOpen) => !prevOpen);
handleReportsMenuClose();
};

const handleToolsMenuClose = () => {
setToolsMenuOpen(false);
};
const { pathname } = useRouter();

const isCoaching = !!coachingAccounts?.totalCount;
const { navPages } = useNavPages(isCoaching);
const reports = navPages.find((page) => page.id === 'reports-page');
const hrTools = navPages.find((page) => page.id === 'hr-tools-page');
const mpdxTools = navPages.find((page) => page.id === 'mpdx-tools-page');

const coachingIndex = navPages.findIndex(
(page) => page.id === 'coaching-page',
);

return accountListId ? (
<Grid container item alignItems="center" xs="auto">
{navPages.map(
(page) =>
page.isDropdown === false && (
<Grid key={page.id} item className={classes.navListItem}>
<MenuItem
component={NextLink}
href={page.href ?? ''}
tabIndex={0}
className={classes.menuItem}
aria-current={pathname === page.pathname ? 'page' : undefined}
>
<ListItemText primary={page.title} />
</MenuItem>
</Grid>
),
)}

{reports && (
<NavMenuDropdown
page={reports}
menuOpen={reportsMenuOpen}
handleMenuToggle={handleReportsMenuToggle}
handleMenuClose={handleReportsMenuClose}
testId="ReportMenuToggle"
sum={sum}
toolData={toolData}
loading={loading}
isTool={false}
/>
)}
{hrTools && (
<NavMenuDropdown
page={hrTools}
menuOpen={hrToolsMenuOpen}
handleMenuToggle={handleHrToolsMenuToggle}
handleMenuClose={handleHrToolsMenuClose}
testId="HrToolsMenuToggle"
sum={sum}
toolData={toolData}
loading={loading}
isTool={false}
/>
)}
{mpdxTools && (
<NavMenuDropdown
page={mpdxTools}
menuOpen={toolsMenuOpen}
handleMenuToggle={handleToolsMenuToggle}
handleMenuClose={handleToolsMenuClose}
testId="ToolsMenuToggle"
sum={sum}
toolData={toolData}
loading={loading}
isTool={true}
/>
)}

{isCoaching && (
<Grid item className={classes.navListItem}>
<MenuItem
component={NextLink}
href={navPages[coachingIndex].href ?? ''}
tabIndex={0}
className={classes.menuItem}
aria-current={
pathname === navPages[coachingIndex].pathname ? 'page' : undefined
}
>
<ListItemText primary={navPages[coachingIndex].title} />
</MenuItem>
</Grid>
)}

Check notice on line 246 in src/components/Layouts/Primary/TopBar/Items/NavMenu/NavMenu.tsx

View check run for this annotation

CodeScene Delta Analysis / CodeScene Code Health Review (main)

✅ Getting better: Complex Method

NavMenu:React.FC decreases in cyclomatic complexity from 21 to 19, threshold = 15. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.

{process.env.HELP_WHATS_NEW_URL && (
<Grid item className={classes.navListItem}>
<MenuItem
component={NextLink}
href={process.env.HELP_WHATS_NEW_URL}
tabIndex={0}
className={classes.menuItem}
target="_blank"
>
{process.env.HELP_WHATS_NEW_IMAGE_URL && (
<img
src={process.env.HELP_WHATS_NEW_IMAGE_URL}
alt={t('Help logo')}
height={24}
style={{ marginRight: theme.spacing(1) }}
/>
)}
<ListItemText primary={t("What's New")} />
</MenuItem>
</Grid>
)}
</Grid>
) : null;
};
Expand Down
11 changes: 0 additions & 11 deletions src/hooks/useNavPages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
pathname?: string;
searchIcon?: ReactElement;
items?: Item[];
whatsNewLink?: boolean;
showInNav?: boolean;
showInSearchDialog?: boolean;
showInPanel?: boolean;
Expand Down Expand Up @@ -179,17 +178,7 @@
showInSearchDialog: true,
});
}

Check notice on line 181 in src/hooks/useNavPages.tsx

View check run for this annotation

CodeScene Delta Analysis / CodeScene Code Health Review (main)

✅ Getting better: Complex Method

useNavPages decreases in cyclomatic complexity from 19 to 18, threshold = 15. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.
if (process.env.HELP_WHATS_NEW_URL) {
navPages.push({
id: 'whats-new-page',
title: t("What's New"),
href: process.env.HELP_WHATS_NEW_URL,
whatsNewLink: true,
showInNav: true,
});
}

return navPages.filter((page) => !page.hideTab);
}, [
accountListId,
Expand Down
Loading