diff --git a/frontend/playwright-tests/internal_routes.ci.spec.ts b/frontend/playwright-tests/internal_routes.ci.spec.ts index 48c10b1667..6daac6e73a 100644 --- a/frontend/playwright-tests/internal_routes.ci.spec.ts +++ b/frontend/playwright-tests/internal_routes.ci.spec.ts @@ -46,11 +46,21 @@ test('About Us Page Loads', async ({ page }) => { expect(accessibilityScanResults.violations).toEqual([]) }) -test('Terms of Use Page Loads', async ({ page }) => { +test('Terms of Use Page Loads and Renders Correctly', async ({ page }) => { await page.goto('/termsofuse', { waitUntil: 'commit' }) - const mainSection = page.locator('main#main') - const mainHeading = mainSection.locator('h2#main') + const mainSection = page.locator('section#main-content') + await expect(mainSection).toBeVisible() + const mainHeading = mainSection.locator('h1#main') await expect(mainHeading).toHaveText('Terms of Use') + const termsList = mainSection.locator('ul') + await expect(termsList).toBeVisible() + const firstTerm = termsList.locator('li#tou-0') + const firstTermHeading = firstTerm.locator('h2') + await expect(firstTermHeading).toHaveText('Privacy Policy') + const firstTermParagraph = firstTerm.locator('p') + await expect(firstTermParagraph).toContainText( + 'The Health Equity Tracker (HET)', + ) const accessibilityScanResults = await new AxeBuilder({ page }).analyze() expect(accessibilityScanResults.violations).toEqual([]) }) diff --git a/frontend/src/pages/Landing/LandingPage.tsx b/frontend/src/pages/Landing/LandingPage.tsx index 6268ca44ad..51bea1d99e 100644 --- a/frontend/src/pages/Landing/LandingPage.tsx +++ b/frontend/src/pages/Landing/LandingPage.tsx @@ -116,8 +116,8 @@ function LandingPage() { alt='various charts from the health equity tracker' className='absolute top-0 right-0 bottom-0 z-0 float-right mx-24 max-w-4xl opacity-35 xs:opacity-15 sm:opacity-15 md:opacity-15' > -
-

+
+

Where will the
Health Equity Tracker
take you? diff --git a/frontend/src/pages/Methodology/methodologySections/AgeAdjustmentLink.tsx b/frontend/src/pages/Methodology/methodologySections/AgeAdjustmentLink.tsx index e2b0453835..6b31d6e4d3 100644 --- a/frontend/src/pages/Methodology/methodologySections/AgeAdjustmentLink.tsx +++ b/frontend/src/pages/Methodology/methodologySections/AgeAdjustmentLink.tsx @@ -280,7 +280,7 @@ const AgeAdjustmentLink = () => {

Age-Adjustment Example: HIV Deaths

diff --git a/frontend/src/pages/News/AllPosts.tsx b/frontend/src/pages/News/AllPosts.tsx index 209089505c..dba6f55c40 100644 --- a/frontend/src/pages/News/AllPosts.tsx +++ b/frontend/src/pages/News/AllPosts.tsx @@ -1,24 +1,15 @@ import { useEffect, useState } from 'react' import { Helmet } from 'react-helmet-async' import { useQuery } from 'react-query' -import { Link } from 'react-router-dom' import HetPostsLoading from '../../styles/HetComponents/HetPostsLoading' import { ARTICLES_KEY, REACT_QUERY_OPTIONS, fetchNewsData, } from '../../utils/blogUtils' -import { - NEWS_PAGE_LINK, - SHARE_YOUR_STORY_TAB_LINK, -} from '../../utils/internalRoutes' -import { LinkWithStickyParams, useUrlSearchParams } from '../../utils/urlutils' -import SignupSection from '../ui/SignupSection' -import ArticleFilters from './ArticleFilters' +import { useUrlSearchParams } from '../../utils/urlutils' import type { Article } from './ArticleTypes' import NewsAndStoriesPreviewCardOutlined from './NewsAndStoriesPreviewCardOutlined' -import NewsPreviewCard from './NewsPreviewCard' -import PinnedArticles from './PinnedArticles' export const ARTICLES_TERM = 'Articles' @@ -123,108 +114,60 @@ function AllPosts() { setCategories(Array.from(allCategoriesSet) as string[]) }, [data?.data]) - - // featured "sticky" articles - const pinnedArticles = data?.data?.filter((post: Article) => post?.sticky) - return (
News - Health Equity Tracker -
-
- - -
-
-
-
- {/* show featured card with "sticky" articles marked PIN TO TOP if any */} - {selectedAuthor?.length === 0 && - selectedCategory?.length === 0 && ( - - )} - - {/* if there is a filter in place, show breadcrumbs type menu */} - {(selectedAuthor || selectedCategory) && ( - <> - - {ARTICLES_TERM} - - - › - - - )} - - {selectedAuthor?.length > 0 && `Author: ${selectedAuthor}`} - {selectedCategory?.length > 0 && - `Category: ${selectedCategory}`} - -
- - {/* all posts matching client applied filters */} -
- {filteredArticles?.slice(5, -1).map((post: any) => { - return ( -
-
- -
-
- ) - })} -
- -
- {isLoading && ( - <> - -
- Updating articles... -
- - )} - {error && !isLoading && ( -
-
- Problem updating articles. +
+
+
+ + {selectedAuthor?.length > 0 && `Author: ${selectedAuthor}`} + {selectedCategory?.length > 0 && `Category: ${selectedCategory}`} + +
+ + {/* all posts matching client applied filters */} +
+ {filteredArticles?.slice(5, -1).map((post: any) => { + return ( +
+
+
-
- )} -
+ ) + })}
-
-
-
-
-
-
- -
-
- +
+ {isLoading && ( + <> + +
+ Updating articles... +
+ + )} + {error && !isLoading && ( +
+
+ Problem updating articles. +
+ +
+ )}
- -
) } diff --git a/frontend/src/pages/News/ArticleFilters.tsx b/frontend/src/pages/News/ArticleFilters.tsx deleted file mode 100644 index bc36facc8a..0000000000 --- a/frontend/src/pages/News/ArticleFilters.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Link } from 'react-router-dom' -import { NEWS_PAGE_LINK } from '../../utils/internalRoutes' - -type FilterType = 'author' | 'category' - -// pretty string for filter box heading -const filterHeaderMap: Record = { - author: 'Authors', - category: 'Categories', -} - -interface ArticleFiltersProps { - filterType: FilterType - filterOptions: string[] -} - -export default function ArticleFilters(props: ArticleFiltersProps) { - return ( -
- {/* FILTER BOX HEADING */} -

- {filterHeaderMap[props.filterType]} -

- - {/* LIST OF LINKED FILTERS (IF ANY) */} -
    - {props.filterOptions.length > 0 && - props.filterOptions.map((filter) => { - return ( -
  • - - {filter} - -
  • - ) - })} - {/* ALWAYS DISPLAY ALL POSTS LINK */} -
  • - - All Posts - -
  • -
-
- ) -} diff --git a/frontend/src/pages/News/PinnedArticles.tsx b/frontend/src/pages/News/PinnedArticles.tsx deleted file mode 100644 index 7ad05eeebc..0000000000 --- a/frontend/src/pages/News/PinnedArticles.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import type { Article } from './ArticleTypes' -import NewsPreviewCard from './NewsPreviewCard' - -export const ARTICLES_TERM = 'Articles' - -interface PinnedArticlesProps { - articles: Article[] -} - -export default function PinnedArticles(props: PinnedArticlesProps) { - const { articles } = props - - return articles?.length > 0 ? ( -
-
- Featured: -
-
- {articles.map((post: any) => { - return ( -
- -
- ) - })} -
-
- ) : ( - <> - ) -} diff --git a/frontend/src/pages/TermsOfUsePage/TermsOfUsePage.tsx b/frontend/src/pages/TermsOfUsePage/TermsOfUsePage.tsx index 1ae0c33e3f..5bf601f771 100644 --- a/frontend/src/pages/TermsOfUsePage/TermsOfUsePage.tsx +++ b/frontend/src/pages/TermsOfUsePage/TermsOfUsePage.tsx @@ -1,163 +1,107 @@ import { Helmet } from 'react-helmet-async' -function TermsOfUsePage() { +interface TermsContent { + title: string + paragraphs: React.ReactNode | string +} + +const termsOfUseContent: TermsContent[] = [ + { + title: 'Privacy Policy', + paragraphs: [ + `The Health Equity Tracker (HET), a project of the Satcher Health Leadership Institute (SHLI) at Morehouse School of Medicine (MSM), is committed to protecting your online privacy. The only information HET obtains about individual visitors to this web application is information supplied voluntarily by visitors. This policy outlines HET's practices regarding the collection and use of your personal information during your visit to our web application.`, + ], + }, + { + title: 'Personally Provided Information', + paragraphs: [ + `In general, you can visit the Health Equity Tracker without revealing any personal information. If you choose to provide us with personal information by sending an email or submitting a news article for us to review and potentially publish, we use that information to respond to your message and help provide you with requested information or material. HET does not give, share, sell, or transfer any personal information to third parties unless required by law.`, + ], + }, + { + title: 'Email and Phone Communications', + paragraphs: [ + `Email communications sent to us via contact forms on our site or through phone calls may be shared with a customer service representative, employee, HET partner, or subject matter expert best qualified to address your inquiry. We make every effort to respond in a timely fashion once communications are received.`, + ], + }, + { + title: 'Collection of Technical Information', + paragraphs: [ + `The Health Equity Tracker uses IP addresses (the Internet address of your computer) to help diagnose problems with our servers and administer our site. We run statistical software to identify heavily used parts of our site and analyze our audience composition. However, we do not link IP addresses to anything personally identifiable.`, + `Like many other web applications, the Health Equity Tracker uses cookies. This is typically done to recognize you and your access privileges on the site. These cookies are stored on your computer, never contain personal data, and cannot be accessed remotely by anybody other than certain HET staffers.`, + `While aggregate statistical reports may be generated based on site usage, no personally identifiable information will ever be disseminated to any unaffiliated third party.`, + ], + }, + { + title: 'Security', + paragraphs: [ + `While no computing environment can be 100% secure, HET is committed to maintaining as secure a technical environment as feasible given current technological capabilities. As a SHLI project within MSM, HET complies with all state and federal statutes requiring additional safeguards for certain types of information, including personally identifiable information and protected health information.`, + ], + }, + { + title: 'Links to Other Sites', + paragraphs: [ + `Please note that some pages within the Health Equity Tracker may contain links to external websites not managed by HET, SHLI, or MSM. These links are provided for user convenience. HET does not review, control, or take responsibility for the content of these websites. Once you visit a link to another site, you are subject to the privacy policy of that new website.`, + ], + }, + { + title: 'Changes to our Privacy Policy', + paragraphs: [ + `We may change the terms and conditions of our Privacy Policy at any time by posting revisions on the Health Equity Tracker website. By accessing or using the HET website, you agree to be bound by all the terms and conditions of our Privacy Policy as posted at the time of your access or use. If you do not agree to the terms of this Privacy Policy or any revised statement, please exit the site immediately.`, + ], + }, + { + title: 'Complaint Process', + paragraphs: ( + <> + If you have a complaint or problem with the Health Equity Tracker + website, or if you believe your privacy rights have been violated, + please email us at{' '} + + info@healthequitytracker.org + + . Please indicate the reason for contacting us. The core HET team will + review your complaint for response or resolution. + + ), + }, + { + title: 'Disclaimer', + paragraphs: [ + `No data protection method or combination of methods can be guaranteed as completely secure. The Health Equity Tracker is not responsible for and will not be held liable for disclosures of your personal information due to transmission errors or unauthorized acts of third parties. HET does not guarantee the privacy of confidential information transmitted to its website should you choose not to use the appropriate secure online forms provided. By using this website, you agree to the terms and conditions outlined in this Terms of Use statement.`, + ], + }, +] + +export default function TermsOfUsePage() { return ( <> Terms of Use - Health Equity Tracker -
-
-

- Terms of Use -

-
-
    -
  • -

    - Privacy Policy -

    -

    - Morehouse School of Medicine’s (MSM) Health Equity Tracker (HET) - is committed to protecting your online privacy. The only - information MSM’s HET obtains about individual visitors to this - web site is information supplied voluntarily by the visitor. This - policy outlines the practices of MSM regarding the collection and - use of your personal information from your visit to our web site. -

    -
  • -
  • -

    - Personally Provided Information -

    -

    - In general, you can visit official MSM web sites, such as the - Health Equity Tracker, without revealing any personal information. - If you choose to provide us with any personal information by - sending an email or by filling out a form with your personal - information and submitting it through a MSM web site, we use that - information to respond to your message and to help us provide you - with information or material that you request. We do not give, - share, sell or transfer any personal information to a third party - unless required by law. -

    -
  • -
  • -

    - Email and Phone Communications -

    -

    - Email communication that you send to us via contact forms on our - sites or through phone calls may be shared with a customer service - representative, employee, HET partners or medical expert that is - most able to address your inquiry. We make every effort to respond - in a timely fashion once communications are received. -

    -
  • -
  • -

    - Collection of Technical Information -

    -

    - MSM and the HET use IP addresses (the Internet address of your - computer) to help diagnose problems with our servers and to - administer our site. For instance, we run statistical software to - identify those parts of our site that are more heavily used and - which portion of our audience comes from within the MSM network. - But, we do not link IP addresses to anything personally - identifiable. -

    -

    - Like many other web sites, portions of MSM’s HET web site might - use cookies. This is typically done to recognize you and your - access privileges on the MSM web site. For instance, using cookies - prevents the user from needing to constantly reenter a password on - every site of MSM. These cookies get stored on your computer and - never contain personal data and cannot be accessed remotely by - anybody other than MSM. -

    -

    - While aggregate statistical reports may be generated based on site - usage, no personally identifiable information will ever be - disseminated to any unaffiliated third party. -

    -
  • -
  • -

    Security

    -

    - While no computing environment can be 100% secure, it is MSM’s - goal to maintain as secure a technical environment as feasible - given the current state of capabilities and technologies. MSM will - comply with all state and federal statutes requiring additional - safeguards for certain types of information, such as students’ - personally identifiable information and patients’ protected health - information. -

    -
  • -
  • -

    - Links to Other Sites -

    -

    - Please note that some pages within MSM web site, for the - convenience of users, are linked to web sites not managed by the - institution or HET. MSM does not review, control or take - responsibility for the content of these web sites. Once you link - to another site, you are subject to the privacy policy of the new - web site. -

    -
  • -
  • -

    - Changes to our Privacy Policy -

    -

    - We may change the terms and conditions of our Privacy Policy at - any time by posting revisions on the MSM and HET web site. By - accessing or using the MSM and HET web site, you agree to be bound - by all the terms and conditions of our Privacy Policy as posted on - the MSM and HET web site at the time of your access or use. If you - do not agree to the terms of this Privacy Policy or any revised - statement, please exit the site immediately. -

    -
  • -
  • -

    - Complaint Process -

    -

    - If you have a complaint or problem with the HET website, or if you - believe your privacy rights have been violated from the HET - website, you may email us at HET@msm.edu. Please indicate the - reason for contacting us. The HET Communications and Dissemination - Core will review your complaint for response or resolution. -

    -
  • -
  • -

    - Disclaimer -

    -

    - No data protection method or combination of methods can be - guaranteed as completely secure. MSM nor HET are responsible for - and will not be held liable for disclosures of your personal - information due to errors in transmissions or unauthorized acts of - third parties. MSM nor HET guarantee the privacy of your - confidential information transmitted to its web site should you - choose not to use the appropriate secure on-line forms provided in - the relevant pages of the web site. By using this web site you - agree to the terms and conditions outlined in this Privacy Policy - statement. -

    -
  • +
    +

    + Terms of Use +

    +
      + {termsOfUseContent.map((tou, index) => ( +
    • +

      + {tou.title} +

      +

      + {tou.paragraphs} +

      +
    • + ))}
    -
    ) } - -export default TermsOfUsePage diff --git a/frontend/src/pages/ui/SignupSection.tsx b/frontend/src/pages/ui/SignupSection.tsx deleted file mode 100644 index 37d706978d..0000000000 --- a/frontend/src/pages/ui/SignupSection.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { - ABOUT_US_PAGE_LINK, - SHARE_YOUR_STORY_TAB_LINK, -} from '../../utils/internalRoutes' -import { LinkWithStickyParams } from '../../utils/urlutils' - -import HetEmailSignup from '../../styles/HetComponents/HetEmailSignup' - -export default function SignupSection() { - return ( -
    -

    - Please{' '} - - contact us - {' '} - with any questions or concerns, and{' '} - - consider sharing your own story - - . -

    -

    - For more information about health equity, please sign up for our Satcher - Health Leadership Institute newsletter. -

    - -
    - ) -} diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index 8d2b8cabe5..a9aca6c650 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -62,6 +62,7 @@ export default { bigHeader: '3rem', biggerHeader: '3.125rem', biggestHeader: '4rem', + heroHeader: '4.5rem' }, // TODO: improve this hack that convinces TS that Tailwind can use z index numbers (not only strings) zIndex: ThemeZIndexValues as Record as Record<