diff --git a/common/constants/navigation.js b/common/constants/navigation.js index 033443860..cdedf25d4 100644 --- a/common/constants/navigation.js +++ b/common/constants/navigation.js @@ -50,11 +50,6 @@ const getInvolved = { href: '/get_involved', }; -const codeSchools = { - name: 'Code Schools', - href: '/code_schools', -}; - const merchStore = { name: 'Merch Store', href: '/swag', @@ -82,7 +77,7 @@ const projectRebuild = { const servicesGroup = { ...services, - sublinks: [podcast, codeSchools, projectRebuild], + sublinks: [podcast, projectRebuild], }; const aboutUsGroup = { @@ -109,7 +104,7 @@ export const mobileNavItems = flattenDepth( // MARK: Footer items export const footerItems = { column1: [about, contact, faq, services], - column2: [chapters, codeSchools, jobs], + column2: [chapters, jobs], column3: [getInvolved, podcast, history, donate], column4: [ { diff --git a/components/Cards/SchoolCard/SchoolCard.js b/components/Cards/SchoolCard/SchoolCard.js deleted file mode 100644 index ab14a582e..000000000 --- a/components/Cards/SchoolCard/SchoolCard.js +++ /dev/null @@ -1,183 +0,0 @@ -import { arrayOf, bool, func, string, shape } from 'prop-types'; -import classNames from 'classnames'; -import Image from 'next/image'; -import Card from 'components/Cards/Card/Card'; -import OnlineIcon from 'static/images/icons/Custom/online.svg'; -import CampusIcon from 'static/images/icons/Custom/campus.svg'; -import HousingIcon from 'static/images/icons/Custom/housing.svg'; -import EquipmentIcon from 'static/images/icons/Custom/equipment.svg'; -import LinkButton from 'components/Buttons/LinkButton/LinkButton'; -import Button from 'components/Buttons/Button/Button'; -import Badge from 'components/Badge/Badge'; -import ScreenReaderOnly from 'components/ScreenReaderOnly/ScreenReaderOnly'; -import { SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON } from 'common/constants/testIDs'; -import styles from './SchoolCard.module.css'; - -export const ONLINE_ONLY = 'Online only'; -export const UNKNOWN = 'Unknown'; -export const MULTIPLE = 'Multiple locations'; - -export const getSchoolLocationText = (hasOnlyOnline, locations) => { - if (hasOnlyOnline) { - return ONLINE_ONLY; - } - - if (!Array.isArray(locations)) { - return 'Unknown'; - } - - if (locations.length === 1) { - const [location] = locations; - return `${location.city}, ${location.state}`; - } - - return 'Multiple locations'; -}; - -// eslint-disable-next-line react/prop-types -const LabelWithScreenReader = ({ isActive, label }) => ( - <> - {isActive ? 'Has ' : 'Does not have '} - {label} - -); - -SchoolCard.propTypes = { - hasHardwareIncluded: bool.isRequired, - hasHousing: bool, - hasOnline: bool.isRequired, - hasOnlyOnline: bool.isRequired, - // isFullTime: bool.isRequired, - isVetTecApproved: bool, - locations: arrayOf( - shape({ - city: string, - vaAccepted: bool.isRequired, - state: string, - }), - ).isRequired, - logoSource: string.isRequired, - name: string.isRequired, - website: string.isRequired, - toggleModal: func.isRequired, -}; - -SchoolCard.defaultProps = { - hasHousing: false, - isVetTecApproved: false, -}; - -function SchoolCard({ - name, - locations, - toggleModal, - isVetTecApproved, - logoSource, - hasOnline, - hasHousing, - hasOnlyOnline, - hasHardwareIncluded, - website, -}) { - const toggleModalClick = () => { - toggleModal({ name, locations }); - }; - - const hasGiBill = locations.some(location => location.vaAccepted); - const hasVetTec = isVetTecApproved; - - const badgeClassNames = isActive => - classNames(styles.badgeGroupItem, { [styles.active]: isActive, [styles.inactive]: !isActive }); - - return ( - - {/* Clearly express code school name to screen readers */} - -
{name}
-
- - {hasGiBill && ( -
- GI Bill -
- )} - - {hasVetTec && ( -
- Vet Tec -
- )} - - {hasVetTec && hasGiBill && ( -
- GI Bill -
- )} - -
- {`${name} -
- -
- } - icon={} - className={badgeClassNames(!hasOnlyOnline)} - /> - } - icon={ - - } - className={badgeClassNames(hasOnline)} - /> - } - icon={} - className={badgeClassNames(hasHousing)} - /> - - } - icon={} - className={badgeClassNames(hasHardwareIncluded)} - /> -
- -
- Campus Locations: - - {getSchoolLocationText(hasOnlyOnline, locations)} - - {locations.length > 1 && ( - - )} -
- -
- - Visit Website - -
-
- ); -} - -export default SchoolCard; diff --git a/components/Cards/SchoolCard/SchoolCard.module.css b/components/Cards/SchoolCard/SchoolCard.module.css deleted file mode 100644 index c048010bd..000000000 --- a/components/Cards/SchoolCard/SchoolCard.module.css +++ /dev/null @@ -1,200 +0,0 @@ -:global(#__next) .SchoolCard { - width: 330px; - font-family: var(--primaryFontFamily), sans-serif; - border: 1px solid var(--primary); - justify-content: normal; - padding: 0; - position: relative; - overflow: hidden; - - /* Hardcoded white background to match logo image background, which var(--white) does not match */ - background-color: #ffffff; -} - -@media screen and (--large-viewport) { - :global(#__next) .SchoolCard { - width: 300px; - } -} - -@media screen and (--small-viewport) { - :global(#__next) .SchoolCard { - width: 75vw; - } -} - -:global(#__next) .ribbon { - display: flex; - align-items: center; - justify-content: center; - margin: 0; - padding: 0.3rem 0 0.1rem; /* Add more padding on top to fix vertically center */ - background: var(--secondary); - color: var(--primary); - position: absolute; - top: 0; - right: 0; - text-transform: uppercase; - text-align: center; - transform: translateX(20%) translateY(0%) rotate(40deg); - transform-origin: top left; - z-index: 1; -} - -:global(#__next) .ribbon::before { - right: 100%; -} - -:global(#__next) .ribbon::after { - left: 100%; -} - -:global(#__next) .gi { - width: 85px; - background: var(--secondary); - color: var(--primary); -} - -:global(#__next) .gi::before, -:global(#__next) .gi::after, -:global(#__next) .dual::before, -:global(#__next) .dual::after { - content: ""; - position: absolute; - top: 0; - margin: 0 -1px; - width: 100%; - height: 100%; - background: var(--secondary); -} - -:global(#__next) .vettec { - width: 85px; - background: var(--primary); - color: var(--secondary); - padding: 1rem 0 0.1rem; -} - -:global(#__next) .vettec::before, -:global(#__next) .vettec::after { - content: ""; - position: absolute; - top: 0; - margin: 0 -1px; - width: 100%; - height: 100%; - background: var(--primary); -} - -:global(#__next) .dual { - width: 40px; - background: var(--secondary); - color: var(--primary); -} - -:global(#__next) .cardBrand { - padding: 0.25rem 0; - margin: 1.5rem 0; -} - -:global(#__next) .cardBrand > * { - vertical-align: middle; -} - -:global(#__next) .SchoolCard, -:global(#__next) .cardBlock { - box-sizing: border-box; -} - -:global(#__next) .cardBlock { - border-top: 1px solid var(--gray); - display: flex; - padding: 1rem 0.75rem; - width: 100%; -} - -:global(#__next) .cardBlockTitle { - font-weight: bold; - display: block; - margin-right: auto; - padding-right: 6px; - color: var(--secondary); -} - -:global(#__next) .cardBlockValue { - font-weight: normal; -} - -:global(#__next) .modalToggler { - min-width: auto; - text-transform: none; - padding: 2px 6px 0; - margin: -4px 0 0 7px; - letter-spacing: 0; - color: inherit; - background-color: var(--gray); - border: 2px solid var(--gray); -} - -:global(#__next) .modalToggler:hover { - background-color: transparent; - color: var(--secondary); - border-color: var(--gray); -} - -@media screen and (--large-viewport) { - :global(#__next) .modalToggler { - margin-top: -5px; - } -} - -:global(#__next) .badgeGroup { - display: grid; - padding: 0.75rem 0; - width: 100%; - grid-template: 50% 50% / 50% 50%; - justify-items: center; - align-items: center; -} - -:global(#__next) .active figcaption::after, -:global(#__next) .inactive figcaption::after { - position: absolute; - top: -0.75rem; - right: 1rem; - width: 1.25rem; -} - -:global(#__next) .active figcaption::after { - stroke: var(--successDeep); - content: url("/static/images/icons/Custom/check-circle.svg"); -} - -:global(#__next) .inactive figcaption::after { - stroke: var(--errorDeep); - content: url("/static/images/icons/Custom/x-circle.svg"); -} - -:global(#__next) .badgeGroupItem.inactive { - opacity: 0.75; -} - -:global(#__next) .badgeGroupItem.inactive figcaption::after { - opacity: 1; -} - -:global(#__next) .badgeGroupItem { - margin: 0.75rem 0; - position: relative; - width: 95px; - font-size: 15px; -} - -:global(#__next) .badgeGroupItem svg { - height: 32px; - margin: 0; -} - -:global(#__next) .badgeGroupItem figcaption { - margin-top: 10px; -} diff --git a/components/Cards/SchoolCard/__stories__/SchoolCard.stories.js b/components/Cards/SchoolCard/__stories__/SchoolCard.stories.js deleted file mode 100644 index 12d2e1e0b..000000000 --- a/components/Cards/SchoolCard/__stories__/SchoolCard.stories.js +++ /dev/null @@ -1,44 +0,0 @@ -import { s3 } from 'common/constants/urls'; - -import SchoolCard from '../SchoolCard'; - -export default { - component: SchoolCard, - title: 'Cards/SchoolCard', - argTypes: { toggleModal: { action: 'Modal opened!' } }, -}; - -const Template = arguments_ => ; - -// Default SchoolCard supplied with only required args -export const Default = Template.bind({}); -Default.args = { - hasHardwareIncluded: false, - hasOnline: true, - hasOnlyOnline: false, - locations: [{ city: 'CityName1', state: 'StateName1', vaAccepted: true }], - logoSource: `${s3}codeSchoolLogos/general_assembly.jpg`, - name: 'General Assembly', - website: 'https://generalassembly.com', -}; - -// SchoolCard supplied with multiple locations -export const WithMultipleLocations = Template.bind({}); -WithMultipleLocations.args = { - ...Default.args, - locations: [ - { city: 'CityName1', state: 'StateName1', vaAccepted: true }, - { city: 'CityName2', state: 'StateName2', vaAccepted: true }, - { city: 'CityName3', state: 'StateName3', vaAccepted: true }, - { city: 'CityName4', state: 'StateName4', vaAccepted: false }, - { city: 'CityName5', state: 'StateName5', vaAccepted: false }, - { city: 'CityName6', state: 'StateName6', vaAccepted: false }, - ], -}; - -// SchoolCard supplied with no locations -export const WithNoLocations = Template.bind({}); -WithNoLocations.args = { - ...Default.args, - locations: [], -}; diff --git a/components/Cards/SchoolCard/__tests__/SchoolCard.test.js b/components/Cards/SchoolCard/__tests__/SchoolCard.test.js deleted file mode 100644 index 032a248f3..000000000 --- a/components/Cards/SchoolCard/__tests__/SchoolCard.test.js +++ /dev/null @@ -1,96 +0,0 @@ -import { fireEvent, render } from '@testing-library/react'; -import createShallowSnapshotTest from 'test-utils/createShallowSnapshotTest'; -import { SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON } from 'common/constants/testIDs'; -import { s3 } from 'common/constants/urls'; -import SchoolCard, { getSchoolLocationText, ONLINE_ONLY, UNKNOWN, MULTIPLE } from '../SchoolCard'; - -const locations = [ - { - address1: '825 Battery Street', - address2: '3rd Floor', - city: 'San Francisco', - state: 'CA', - vaAccepted: true, - zip: 94111, - }, - { - address1: '123Battery Street', - address2: 'Ste 1', - city: 'San Diego', - state: 'CA', - vaAccepted: false, - zip: 90111, - }, -]; - -describe('SchoolCard', () => { - const toggleModal = jest.fn(); - - const requiredProps = { - hasHardwareIncluded: true, - hasHousing: true, - hasOnline: true, - hasOnlyOnline: false, - isFullTime: true, - locations, - logoSource: `${s3}/codeSchoolLogos/momentum.jpg`, - name: 'school name', - website: 'website', - toggleModal, - }; - - it('should render with required props', () => { - createShallowSnapshotTest(); - }); - - it('should open modal when clicking button', () => { - const { queryByTestId } = render(); - - expect(toggleModal).not.toHaveBeenCalled(); - - fireEvent.click(queryByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON)); - - expect(toggleModal).toHaveBeenCalledTimes(1); - }); - - it('should not render a button when passed a single location', () => { - const arrayOfOneLocation = [locations[0]]; - expect(arrayOfOneLocation.length).toBe(1); - - const { queryByTestId } = render( - , - ); - - expect(queryByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON)).toBeNull(); - }); - - it('should not render a button when passed no locations', () => { - const emptyArray = []; - expect(emptyArray.length).toBe(0); - - const { queryByTestId } = render(); - - expect(queryByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON)).toBeNull(); - }); -}); - -describe('getSchoolLocationText', () => { - const [firstLocation] = locations; - const { city, state } = firstLocation; - - it('returns expectedly with online-only school', () => { - expect(getSchoolLocationText(true, locations)).toBe(ONLINE_ONLY); - }); - - it('returns expectedly when locations is undefined and school is not online-only', () => { - expect(getSchoolLocationText(false, undefined)).toBe(UNKNOWN); - }); - - it('returns expectedly when passed multiple locations', () => { - expect(getSchoolLocationText(false, locations)).toBe(MULTIPLE); - }); - - it('returns expectedly when passed a single non-online location', () => { - expect(getSchoolLocationText(false, [firstLocation])).toBe(`${city}, ${state}`); - }); -}); diff --git a/components/Cards/SchoolCard/__tests__/__snapshots__/SchoolCard.test.js.snap b/components/Cards/SchoolCard/__tests__/__snapshots__/SchoolCard.test.js.snap deleted file mode 100644 index 57ba6fd97..000000000 --- a/components/Cards/SchoolCard/__tests__/__snapshots__/SchoolCard.test.js.snap +++ /dev/null @@ -1,128 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SchoolCard should render with required props 1`] = ` - - -
- school name -
-
-
- GI Bill -
-
- -
-
- } - isImageFirst={true} - label={ - - } - /> - - } - isImageFirst={true} - label={ - - } - /> - } - isImageFirst={true} - label={ - - } - /> - } - isImageFirst={true} - label={ - - } - /> -
-
- - Campus Locations: - - Multiple locations - -
-
- - Visit Website - -
-
-`; diff --git a/components/Footer/__tests__/__snapshots__/Footer.test.js.snap b/components/Footer/__tests__/__snapshots__/Footer.test.js.snap index 1040dda4f..268cb29dd 100644 --- a/components/Footer/__tests__/__snapshots__/Footer.test.js.snap +++ b/components/Footer/__tests__/__snapshots__/Footer.test.js.snap @@ -111,15 +111,6 @@ exports[`Footer should render with no props passed 1`] = ` -
  • - - - Code Schools - - -
  • { - const ReactSelectSelector = 'input#react-select-state_select-input'; - - describe('when the server responds successfully', () => { - beforeEach(() => { - cy.server(); - cy.visitAndWaitFor('/code_schools'); - cy.get('h1').should('have.text', 'Code Schools'); - }); - - it('renders many code school cards', () => { - // Arbitrary value, but it proves that the API is working and leading to rendered content - cy.findAllByTestId('SchoolCard').should('have.length.greaterThan', 30); - }); - - it('renders "Cincy Code IT Bootcamps" and "Tech Elevator" after filtering for Ohio', () => { - cy.get(ReactSelectSelector).type('Ohio', { force: true }); - cy.get(ReactSelectSelector).type('{enter}'); - - cy.findByTestId('SchoolCard Name: Cincy Code IT Bootcamps').should('exist'); - cy.findByTestId('SchoolCard Name: Tech Elevator').should('exist'); - }); - - it('only renders relevant schools after clicking on "Schools Accepting GI Bill"', () => { - cy.findByText('Schools Accepting GI Bill').click(); - - cy.findAllByTestId('SchoolCard').each(card => { - cy.wrap(card).findAllByTestId('GI Bill Ribbon').should('exist'); - }); - }); - - it('only renders code schools with an online option after clicking "Online Schools"', () => { - cy.findByText('Online Schools').click(); - - cy.findAllByTestId('SchoolCard').each(card => { - cy.wrap(card).findAllByTestId('School has online').should('exist'); - }); - }); - - it('renders no code school cards after filtering for Alaska', () => { - cy.get(ReactSelectSelector).type('Alaska', { force: true }); - cy.get(ReactSelectSelector).type('{enter}'); - - cy.findByTestId('SchoolCard').should('have.length', 0); - }); - - it('renders no school cards after filtering for Alaska then all after selecting all', () => { - cy.get(ReactSelectSelector).type('Alaska', { force: true }); - cy.get(ReactSelectSelector).type('{enter}'); - - cy.findByTestId('SchoolCard').should('have.length', 0); - - cy.findByText('All Schools').click(); - cy.findAllByTestId('SchoolCard').should('have.length.greaterThan', 30); - }); - - it('renders all cards after un-filtering Alaska', () => { - cy.get(ReactSelectSelector).type('Alaska', { force: true }); - cy.get(ReactSelectSelector).type('{enter}'); - cy.get(ReactSelectSelector).type('{backspace}'); - - cy.findAllByTestId('SchoolCard').should('have.length.greaterThan', 30); - }); - - it('renders all locations when opening the "view all" modal', () => { - cy.findAllByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON).first().click(); - cy.findByTestId(MODAL_CONTENT).should('exist').and('be.visible'); - cy.findAllByTestId(SCHOOL_LOCATION_LIST_ITEM).should('have.length.greaterThan', 1); - cy.findByTestId(CLOSE_BUTTON).click({ force: true }); - cy.findByTestId(MODAL_CONTENT).should('not.exist'); - }); - }); -}); diff --git a/cypress/e2e/modal.spec.js b/cypress/e2e/modal.spec.js deleted file mode 100644 index 25a596349..000000000 --- a/cypress/e2e/modal.spec.js +++ /dev/null @@ -1,36 +0,0 @@ -import { - CLOSE_BUTTON, - MODAL_CONTENT, - MODAL_OVERLAY, - SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON, -} from 'common/constants/testIDs'; - -describe('when the server responds successfully', () => { - beforeEach(() => { - cy.visitAndWaitFor('/code_schools'); - cy.get('h1').should('have.text', 'Code Schools'); - }); - - it('hides the rest of the app for accessibility purposes', () => { - cy.get('#__next').should('not.have.attr', 'aria-hidden'); - cy.findAllByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON).first().click(); - setTimeout(() => { - cy.get('#__next').should('have.attr', 'aria-hidden', 'true'); - }, 2000); - }); - - it('closes the modal when the x button is clicked', () => { - cy.findAllByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON).first().click(); - cy.findByTestId(MODAL_CONTENT).should('exist').and('be.visible'); - cy.findByTestId(CLOSE_BUTTON).click(); - cy.findByTestId(MODAL_CONTENT).should('not.exist'); - }); - - it('closes the modal when the overlay is clicked', () => { - cy.findAllByTestId(SCHOOL_CARD_LOCATION_LIST_MODAL_BUTTON).first().click(); - cy.findByTestId(MODAL_CONTENT).should('exist').and('be.visible'); - cy.findByTestId(MODAL_OVERLAY).click({ force: true }); - cy.findByTestId(MODAL_CONTENT).should('not.exist'); - cy.findByTestId(MODAL_OVERLAY).should('not.exist'); - }); -}); diff --git a/next-sitemap.config.js b/next-sitemap.config.js index fdf22ad8b..d62ecc9c7 100644 --- a/next-sitemap.config.js +++ b/next-sitemap.config.js @@ -1,4 +1,4 @@ -const priorities = { '/': '1.00', '/join': '1.00', '/code_schools': '1.00' }; +const priorities = { '/': '1.00', '/join': '1.00' }; /** @type {import('next-sitemap').IConfig} */ module.exports = { diff --git a/pages/code_schools.js b/pages/code_schools.js deleted file mode 100644 index 6785f6c93..000000000 --- a/pages/code_schools.js +++ /dev/null @@ -1,311 +0,0 @@ -import { useState } from 'react'; -import { array } from 'prop-types'; -import Head from 'components/head'; -import ThemedReactSelect from 'components/Form/Select/ThemedReactSelect'; -import HeroBanner from 'components/HeroBanner/HeroBanner'; -import Content from 'components/Content/Content'; -import FlatCard from 'components/Cards/FlatCard/FlatCard'; -import SchoolCard from 'components/Cards/SchoolCard/SchoolCard'; -import Button from 'components/Buttons/Button/Button'; -import OutboundLink from 'components/OutboundLink/OutboundLink'; -import Modal from 'components/Modal/Modal'; -import { getCodeSchoolsPromise } from 'common/constants/api'; -import States from 'common/constants/dropdown-states-values'; -import { ONE_DAY } from 'common/constants/unitsOfTime'; -import { SCHOOL_LOCATION_LIST_ITEM } from 'common/constants/testIDs'; -import edx from 'static/images/moocs/edx.jpg'; -import treehouse from 'static/images/moocs/treehouse.jpg'; -import udacity from 'static/images/moocs/udacity.jpg'; -import styles from 'styles/code_schools.module.css'; - -const pageTitle = 'Code Schools'; - -const moocSchools = [ - { - logo: edx, - name: 'edX', - url: 'https://edx.org', - text: 'Offers free courses with the option to pay for certificates/grading.', - }, - { - logo: treehouse, - name: 'Team Treehouse', - url: 'https://teamtreehouse.com', - text: 'Offers only paid programs, but we have licenses available.', - }, - { - logo: udacity, - name: 'Udacity', - url: 'https://udacity.com', - text: 'Offers free courses with the option to pay for certificates/grading.', - }, -]; - -export async function getStaticProps() { - const { data: allSchools } = await getCodeSchoolsPromise(); - - if (allSchools?.length <= 0) { - throw new Error('`getCodeSchoolsPromise` returned an empty list'); - } - - return { - props: { - allSchools, - }, - revalidate: ONE_DAY, - }; -} - -CodeSchools.propTypes = { - allSchools: array.isRequired, -}; - -function CodeSchools({ allSchools }) { - const [filteredSchools, setFilterSchools] = useState(allSchools); - const [selectedStates, setSelectedStates] = useState([]); - const [locationsModalInfo, setLocationsModalInfo] = useState({ name: '', locations: [] }); - - const handleModalOpen = ({ name, locations }) => setLocationsModalInfo({ name, locations }); - - const handleModalClose = () => setLocationsModalInfo({ name: '', locations: [] }); - - const filterOnline = () => { - const onlineSchools = allSchools.filter(school => school.hasOnline); - setFilterSchools(onlineSchools); - setSelectedStates([]); - }; - - const showAllSchools = () => { - setFilterSchools(allSchools); - setSelectedStates([]); - }; - - const filterState = selectedOptions => { - if (!selectedOptions) { - showAllSchools(); - return; - } - const states = selectedOptions.map(state => state.value); - const stateSchools = allSchools.filter(school => - school.locations.some(location => states.includes(location.state)), - ); - - if (states.length > 0) { - setFilterSchools(stateSchools); - setSelectedStates(selectedOptions); - } else { - showAllSchools(); - } - }; - - const filterVaApproved = () => { - const vaApproved = allSchools.filter(school => - school.locations.some(location => location.vaAccepted), - ); - setFilterSchools(vaApproved); - setSelectedStates([]); - }; - - const filterVetTecApproved = () => { - const vetTecApprovedSchools = allSchools.filter(school => school.isVetTecApproved); - setFilterSchools(vetTecApprovedSchools); - setSelectedStates([]); - }; - - const isModalOpen = Boolean(locationsModalInfo.name); - - return ( - <> - - - -

    - Whether you're trying to find out more about a chosen school, or are just gettting - started in your search, we're here to help. We've even partnered with some - schools to offer scholarships, and discounts for our members. -

    - -
    - - -
    - - -
    -
    What Are Code Schools?
    -

    - Code schools are accelerated learning programs that will prepare you for a career in - software development. Each school listed below ranges in length, vary in tuition - costs, and in programming languages. Desirable from an employer's standpoint, - code schools are founded by software developers who saw a need for more programmers - and aspired to teach the next generation. We encourage you to check out the schools - below, do your research, and ask fellow techies in our Slack Community. -

    -
    - -
    -
    What are MOOCs?
    -

    - Massive, Open, Online Courses (or MOOCs) are course study programs made available - over the internet! Typically there are start and end dates, but the work itself is - done at your own pace. MOOCs are usually free, but there are certain benefits to - paying for premium aspects of MOOCs. -

    -
    - -
    -
    What is VET TEC?
    -

    - This innovative new pilot program pairs eligible Veterans with market-leading - Training Providers offering the high-tech training and skills development sought by - employers. You will have your classes and training paid for by VA and will receive a - monthly housing stipend during your training. When you're accepted into the - program, you'll train in one of the five areas (computer software, information - science, computer programming, media application, or data processing) of high-tech - training. -

    - -

    - Please note that we update our database periodically according to the{' '} - - official list of VET TEC Providers - - , but we may display incorrect information in regards to VET TEC-approved programs. -
    - Last update: October 2nd, 2019. -

    - -

    - Interested in learning more? -
    - See{' '} - - the VA's website about VET TEC info. - -

    -
    - , - ]} - theme="white" - /> - - - All Schools - , - , - , - , -
    -
    Filter By State
    - -
    , -
    - {filteredSchools.map(school => ( - - ))} -
    , - ]} - /> - - ( - - <> - {mooc.text} -
    - - {mooc.name} - -
    - -
    - ))} - /> - - - <> -

    {locationsModalInfo.name} Campuses

    - -
      - {locationsModalInfo.locations.map(({ city, state }) => { - const location = `${city}, ${state}`; - - return ( -
    • - {location} -
    • - ); - })} -
    - -
    - - ); -} - -export default CodeSchools; diff --git a/pages/press.js b/pages/press.js index e7323df06..42f3b3ed6 100644 --- a/pages/press.js +++ b/pages/press.js @@ -54,12 +54,7 @@ function Press() {

    Code Schools

    - Firstly, if your code school's information is not listed on our directory, - please contact us at{' '} - - staff@operationcode.org - - . If your school has recently partnered with our organization and is seeking + If your school has recently partnered with our organization and is seeking information to write about it in a blog post, we recommend joining our Slack team to receive personal recommendations from our members, many of whom have attended various coding schools - perhaps yours! diff --git a/styles/code_schools.module.css b/styles/code_schools.module.css deleted file mode 100644 index 5ab86957a..000000000 --- a/styles/code_schools.module.css +++ /dev/null @@ -1,68 +0,0 @@ -.intro { - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; -} - -.intro .termDefinition { - margin: 1rem 2rem; - max-width: 500px; -} - -.filterContainer { - margin: 2rem 0; - width: 100%; -} - -.filterContainer > h5 { - text-align: center; -} - -.select { - margin: 0.5rem auto; - min-width: 20rem; - width: 90%; - max-width: 50rem; -} - -.schoolCardsWrapper { - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -.centered { - margin: 1rem 0; - text-align: center; -} - -.schoolLocationModal { - width: 500px; -} - -@media screen and (--small-viewport) { - .schoolLocationModal { - width: 100%; - } -} - -.schoolLocationModal > div { - width: 100%; -} - -.schoolLocalModalItem { - padding: 8px 10px; - border-bottom: 1px solid var(--gray); -} - -.schoolLocalModalItem:last-child { - border-bottom: 0; - margin-bottom: 15px; -} - -.schoolLocationList { - margin: 1rem 0; - padding: 0; - list-style: none; -}