Skip to content

Commit

Permalink
Merge 23d4e37 into 872bed5
Browse files Browse the repository at this point in the history
  • Loading branch information
chekjun committed Jun 15, 2021
2 parents 872bed5 + 23d4e37 commit 99ee902
Show file tree
Hide file tree
Showing 15 changed files with 510 additions and 530 deletions.
18 changes: 9 additions & 9 deletions src/commons/application/Application.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import Achievement from '../../pages/achievement/AchievementContainer';
import Contributors from '../../pages/contributors/Contributors';
import Disabled from '../../pages/disabled/Disabled';
import GitHubAssessmentWorkspaceContainer from '../../pages/githubAssessments/GitHubAssessmentWorkspaceContainer';
import GitHubMissionListing from '../../pages/githubAssessments/GitHubMissionListing';
import GitHubClassroom from '../../pages/githubAssessments/GitHubClassroom';
import GitHubCallback from '../../pages/githubCallback/GitHubCallback';
import Login from '../../pages/login/LoginContainer';
import MissionControlContainer from '../../pages/missionControl/MissionControlContainer';
Expand Down Expand Up @@ -149,21 +149,21 @@ const Application: React.FC<ApplicationProps> = props => {
<Route path="/sourcecast/:sourcecastId?" component={SourcecastContainer} />
{Constants.enableGitHubAssessments && (
<Route
path="/githubassessments/missions"
path="/githubassessments/editor"
component={GitHubAssessmentWorkspaceContainer}
/>
)}
{Constants.enableGitHubAssessments && (
<Route
path="/githubassessments/:selectedType?"
component={() => (
<GitHubMissionListing
<GitHubClassroom
handleGitHubLogIn={props.handleGitHubLogIn}
handleGitHubLogOut={props.handleGitHubLogOut}
/>
)}
/>
)}
{Constants.enableGitHubAssessments && (
<Route
path="/githubassessments/editor"
component={GitHubAssessmentWorkspaceContainer}
/>
)}
<Route path="/callback/github" component={GitHubCallback} />
<Route exact path="/interactive-sicp" render={redirectToSicp} />
<Route path="/interactive-sicp/:section" component={Sicp} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ exports[`Application renders correctly 1`] = `
<Route path=\\"/playground\\" component={[Function: C] { displayName: 'withRouter(Connect(Playground))', WrappedComponent: [Function: Playground], propTypes: { wrappedComponentRef: [Function: bound checkType] { isRequired: [Function: bound checkType] } } }} />
<Route path=\\"/contributors\\" component={[function]} />
<Route path=\\"/sourcecast/:sourcecastId?\\" component={[Function: C] { displayName: 'withRouter(Connect(Sourcecast))', WrappedComponent: [Function: Sourcecast], propTypes: { wrappedComponentRef: [Function: bound checkType] { isRequired: [Function: bound checkType] } } }} />
<Route path=\\"/githubassessments/missions\\" component={[Function: component]} />
<Route path=\\"/githubassessments/editor\\" component={[Function: C] { displayName: 'withRouter(Connect(GitHubAssessmentWorkspace))', WrappedComponent: [Function: GitHubAssessmentWorkspace], propTypes: { wrappedComponentRef: [Function: bound checkType] { isRequired: [Function: bound checkType] } } }} />
<Route path=\\"/githubassessments/:selectedType?\\" component={[Function: component]} />
<Route path=\\"/callback/github\\" component={[Function: GitHubCallback]} />
<Route exact={true} path=\\"/interactive-sicp\\" render={[Function: redirectToSicp]} />
<Route path=\\"/interactive-sicp/:section\\" component={[Function: Sicp]} />
Expand Down
2 changes: 1 addition & 1 deletion src/commons/controlBar/github/ControlBarGitHubButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import controlButton from '../../ControlButton';
import Constants from '../../utils/Constants';

export type ControlBarGitHubButtonsProps = {
loggedInAs: Octokit;
loggedInAs: Octokit | undefined;
githubSaveInfo: { repoName: string; filePath: string };
onClickOpen?: () => void;
onClickSave?: () => void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as React from 'react';
import { useSelector } from 'react-redux';
import { useMediaQuery } from 'react-responsive';

import { OverallState } from '../../application/ApplicationTypes';
import controlButton from '../../ControlButton';
import Constants from '../../utils/Constants';

Expand All @@ -20,7 +21,7 @@ export type ControlBarGitHubLoginButtonProps = {
export const ControlBarGitHubLoginButton: React.FC<ControlBarGitHubLoginButtonProps> = props => {
const isMobileBreakpoint = useMediaQuery({ maxWidth: Constants.mobileBreakpoint });
const isLoggedIn =
useSelector((store: any) => store.session.githubOctokitObject).octokit !== undefined;
useSelector((store: OverallState) => store.session.githubOctokitObject).octokit !== undefined;

const loginButton = isLoggedIn
? controlButton('Log Out', IconNames.GIT_BRANCH, props.onClickLogOut)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as React from 'react';
import { useSelector } from 'react-redux';
import { useMediaQuery } from 'react-responsive';

import { OverallState } from '../application/ApplicationTypes';
import controlButton from '../ControlButton';
import Constants from '../utils/Constants';

Expand All @@ -21,7 +22,7 @@ export const ControlBarGitHubMobileLoginButton: React.FC<ControlBarGitHubMobileL
props => {
const isMobileBreakpoint = useMediaQuery({ maxWidth: Constants.mobileBreakpoint });
const isLoggedIn =
useSelector((store: any) => store.session.githubOctokitObject).octokit !== undefined;
useSelector((store: OverallState) => store.session.githubOctokitObject).octokit !== undefined;

const loginButton = isLoggedIn
? controlButton('Log Out', IconNames.GIT_BRANCH, props.onClickLogOut)
Expand Down
12 changes: 3 additions & 9 deletions src/commons/navigationBar/NavigationBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,12 @@ import classNames from 'classnames';
import * as React from 'react';
import { useMediaQuery } from 'react-responsive';
import { NavLink, Route, Switch } from 'react-router-dom';
import SicpNavigationBar from 'src/commons/navigationBar/subcomponents/SicpNavigationBar';

import SicpNavigationBar from '../../commons/navigationBar/subcomponents/SicpNavigationBar';
import { Role } from '../application/ApplicationTypes';
import Dropdown from '../dropdown/Dropdown';
import Constants from '../utils/Constants';
import AcademyNavigationBar from './subcomponents/AcademyNavigationBar';
import GitHubAssessmentsNavigationBar from './subcomponents/GitHubAssessmentsNavigationBar';
import NavigationBarMobileSideMenu from './subcomponents/NavigationBarMobileSideMenu';

type NavigationBarProps = DispatchProps & StateProps;
Expand Down Expand Up @@ -225,10 +224,10 @@ const NavigationBar: React.FC<NavigationBarProps> = props => {
<NavLink
activeClassName={Classes.ACTIVE}
className={classNames('NavigationBar__link', Classes.BUTTON, Classes.MINIMAL)}
to="/githubassessments/missions"
to="/githubassessments/classroom"
>
<Icon icon={IconNames.BRIEFCASE} />
<div className="navbar-button-text">GitHub Assessments</div>
<div className="navbar-button-text">Classroom</div>
</NavLink>
)}

Expand Down Expand Up @@ -302,11 +301,6 @@ const NavigationBar: React.FC<NavigationBarProps> = props => {
</Navbar>

<Switch>
<Route path="/githubassessments">
{Constants.enableGitHubAssessments && !isMobileBreakpoint && desktopMenuOpen && (
<GitHubAssessmentsNavigationBar {...props} />
)}
</Route>
<Route path="/interactive-sicp/:section?">
<SicpNavigationBar />
</Route>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ exports[`NavigationBar renders "Not logged in" correctly 1`] = `
Playground
</div>
</NavLink>
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/githubassessments/missions\\">
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/githubassessments/classroom\\">
<Blueprint3.Icon icon=\\"briefcase\\" />
<div className=\\"navbar-button-text\\">
GitHub Assessments
Classroom
</div>
</NavLink>
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/interactive-sicp/index\\">
Expand All @@ -52,9 +52,6 @@ exports[`NavigationBar renders "Not logged in" correctly 1`] = `
</Blueprint3.NavbarGroup>
</Blueprint3.Navbar>
<Switch>
<Route path=\\"/githubassessments\\">
<GitHubAssessmentsNavigationBar handleLogOut={[Function: handleLogOut]} handleGitHubLogIn={[Function: handleGitHubLogIn]} handleGitHubLogOut={[Function: handleGitHubLogOut]} title=\\"Source Academy\\" />
</Route>
<Route path=\\"/interactive-sicp/:section?\\">
<SicpNavigationBar />
</Route>
Expand Down Expand Up @@ -85,10 +82,10 @@ exports[`NavigationBar renders correctly with student role 1`] = `
Playground
</div>
</NavLink>
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/githubassessments/missions\\">
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/githubassessments/classroom\\">
<Blueprint3.Icon icon=\\"briefcase\\" />
<div className=\\"navbar-button-text\\">
GitHub Assessments
Classroom
</div>
</NavLink>
<NavLink activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\" to=\\"/interactive-sicp/index\\">
Expand Down Expand Up @@ -125,9 +122,6 @@ exports[`NavigationBar renders correctly with student role 1`] = `
</Blueprint3.NavbarGroup>
</Blueprint3.Navbar>
<Switch>
<Route path=\\"/githubassessments\\">
<GitHubAssessmentsNavigationBar handleLogOut={[Function: handleLogOut]} handleGitHubLogIn={[Function: handleGitHubLogIn]} handleGitHubLogOut={[Function: handleGitHubLogOut]} role=\\"student\\" title=\\"Source Academy\\" />
</Route>
<Route path=\\"/interactive-sicp/:section?\\">
<SicpNavigationBar />
</Route>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,42 +1,103 @@
import { Alignment, Classes, Icon, Navbar, NavbarGroup } from '@blueprintjs/core';
import {
Alignment,
Button,
Classes,
Icon,
InputGroup,
Menu,
MenuItem,
Navbar,
NavbarGroup
} from '@blueprintjs/core';
import { IconNames } from '@blueprintjs/icons';
import { Popover2 } from '@blueprintjs/popover2';
import { Octokit } from '@octokit/rest';
import classNames from 'classnames';
import * as React from 'react';
import { NavLink } from 'react-router-dom';

import { ControlBarGitHubLoginButton } from '../../controlBar/github/ControlBarGitHubLoginButton';

type OwnProps = {
handleGitHubLogIn: any;
handleGitHubLogOut: any;
type GitHubAssessmentsNavigationBarProps = DispatchProps & StateProps;

type DispatchProps = {
handleGitHubLogIn: () => void;
handleGitHubLogOut: () => void;
};

type StateProps = {
octokit: Octokit | undefined;
courses: string[];
selectedCourse: string;
setSelectedCourse: (course: string) => void;
typeNames: string[];
};

/**
* The white navbar for the website. Should only be displayed when using GitHub-hosted missions.
*
* @param props Component properties
*/
const GitHubAssessmentsNavigationBar: React.FunctionComponent<OwnProps> = props => (
<Navbar className="NavigationBar secondary-navbar">
<NavbarGroup align={Alignment.LEFT}>
<NavLink
to={`/githubassessments/missions`}
activeClassName={Classes.ACTIVE}
className={classNames('NavigationBar__link', Classes.BUTTON, Classes.MINIMAL)}
>
<Icon icon={IconNames.FLAME} />
<div className="navbar-button-text hidden-xs hidden-sm">Missions</div>
</NavLink>
</NavbarGroup>

<NavbarGroup align={Alignment.RIGHT}>
<ControlBarGitHubLoginButton
key="github"
onClickLogIn={props.handleGitHubLogIn}
onClickLogOut={props.handleGitHubLogOut}
/>
</NavbarGroup>
</Navbar>
);
const GitHubAssessmentsNavigationBar: React.FC<GitHubAssessmentsNavigationBarProps> = props => {
const handleClick = (e: any) => {
handleChange(e);
};

const handleChange = (e: any) => {
props.setSelectedCourse(e.target.innerText);
};

return (
<Navbar className="NavigationBar secondary-navbar">
<NavbarGroup align={Alignment.LEFT}>
{props.typeNames.map(typeName => {
return (
<NavLink
key={typeName}
exact={true}
to={{
pathname: `${typeName}`,
state: props.selectedCourse
}}
activeClassName={Classes.ACTIVE}
className={classNames('NavigationBar__link', Classes.BUTTON, Classes.MINIMAL)}
>
<Icon icon={IconNames.FLAME} />
<div className="navbar-button-text hidden-xs hidden-sm">{typeName}</div>
</NavLink>
);
})}
</NavbarGroup>
<NavbarGroup align={Alignment.RIGHT}>
{props.octokit !== undefined && (
<InputGroup
key="courseselect"
disabled={true}
leftElement={
<Popover2
content={
<Menu>
{props.courses.map((course: string) => (
<MenuItem key={course} onClick={handleClick} text={course} />
))}
</Menu>
}
placement={'bottom-end'}
>
<Button minimal={true} rightIcon="caret-down" />
</Popover2>
}
placeholder={'Select Course'}
onChange={handleChange}
value={props.selectedCourse}
/>
)}
<ControlBarGitHubLoginButton
key="loginlogout"
onClickLogIn={props.handleGitHubLogIn}
onClickLogOut={props.handleGitHubLogOut}
/>
</NavbarGroup>
</Navbar>
);
};

export default GitHubAssessmentsNavigationBar;
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { Octokit } from '@octokit/rest';
import { shallow } from 'enzyme';

import GitHubAssessmentsNavigationBar from '../GitHubAssessmentsNavigationBar';

const props = {
handleGitHubLogIn: () => {},
handleGitHubLogOut: () => {}
handleGitHubLogOut: () => {},
octokit: new Octokit(undefined),
courses: [],
selectedCourse: '',
setSelectedCourse: () => {},
typeNames: []
};

test('Navbar renders correctly', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,9 @@

exports[`Navbar renders correctly 1`] = `
"<Blueprint3.Navbar className=\\"NavigationBar secondary-navbar\\">
<Blueprint3.NavbarGroup align=\\"left\\">
<NavLink to=\\"/githubassessments/missions\\" activeClassName=\\"bp3-active\\" className=\\"NavigationBar__link bp3-button bp3-minimal\\">
<Blueprint3.Icon icon=\\"flame\\" />
<div className=\\"navbar-button-text hidden-xs hidden-sm\\">
Missions
</div>
</NavLink>
</Blueprint3.NavbarGroup>
<Blueprint3.NavbarGroup align=\\"left\\" />
<Blueprint3.NavbarGroup align=\\"right\\">
<Blueprint3.InputGroup disabled={true} leftElement={{...}} placeholder=\\"Select Course\\" onChange={[Function: handleChange]} value=\\"\\" />
<ControlBarGitHubLoginButton onClickLogIn={[Function: handleGitHubLogIn]} onClickLogOut={[Function: handleGitHubLogOut]} />
</Blueprint3.NavbarGroup>
</Blueprint3.Navbar>"
Expand Down
2 changes: 0 additions & 2 deletions src/commons/sagas/GitHubPersistenceSaga.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import RepositoryDialog, { RepositoryDialogProps } from '../gitHubOverlay/Reposi
import { actions } from '../utils/ActionsHelper';
import Constants from '../utils/Constants';
import { promisifyDialog } from '../utils/DialogHelper';
import { history } from '../utils/HistoryHelper';
import { showSuccessMessage, showWarningMessage } from '../utils/NotificationsHelper';

export function* GitHubPersistenceSaga(): SagaIterator {
Expand Down Expand Up @@ -63,7 +62,6 @@ function* githubLogoutSaga() {

yield put(actions.removeGitHubOctokitObject());
yield call(showSuccessMessage, `Logged out from GitHub`, 1000);
yield call(history.push, '/githubassessments/missions');
}

function* githubOpenFile(): any {
Expand Down
Loading

0 comments on commit 99ee902

Please sign in to comment.