Skip to content

Commit

Permalink
Added refreshButton, shorter courseNames and sorting by dueDate/publi…
Browse files Browse the repository at this point in the history
…shed
  • Loading branch information
chekjun committed Jun 18, 2021
1 parent b547e8d commit af24fe5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 8 deletions.
8 changes: 8 additions & 0 deletions src/pages/githubAssessments/GitHubAssessmentListing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { GHAssessmentOverview } from './GitHubClassroom';

type GitHubAssessmentListingProps = {
assessmentOverviews?: GHAssessmentOverview[];
refreshAssessmentOverviews: () => void;
};

/**
Expand All @@ -42,6 +43,11 @@ const GitHubAssessmentListing: React.FC<GitHubAssessmentListingProps> = props =>
[]
);

const refreshButton = useMemo(
() => <Button icon={IconNames.REFRESH} onClick={props.refreshAssessmentOverviews} />,
[props.refreshAssessmentOverviews]
);

if (!props.assessmentOverviews) {
display = (
<>
Expand All @@ -53,6 +59,7 @@ const GitHubAssessmentListing: React.FC<GitHubAssessmentListingProps> = props =>
display = (
<>
{createAssessmentButton}
{refreshButton}
<NonIdealState title="There are no assessments." icon={IconNames.FLAME} />
</>
);
Expand All @@ -64,6 +71,7 @@ const GitHubAssessmentListing: React.FC<GitHubAssessmentListingProps> = props =>
display = (
<>
{createAssessmentButton}
{refreshButton}
{cards}
</>
);
Expand Down
35 changes: 27 additions & 8 deletions src/pages/githubAssessments/GitHubClassroom.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ const GitHubClassroom: React.FC<DispatchProps> = props => {
fetchAssessmentOverviews(octokit, selectedCourse, setTypes, setAssessmentOverviews);
};

const refreshAssessmentOverviews = () => {
if (octokit === undefined) {
return;
}

setAssessmentOverviews(undefined);
fetchAssessmentOverviews(octokit, selectedCourse, setTypes, setAssessmentOverviews);
};

const redirectToLogin = () => <Redirect to="/githubassessments/login" />;
const redirectToAssessments = () => (
<Redirect
Expand Down Expand Up @@ -125,7 +134,10 @@ const GitHubClassroom: React.FC<DispatchProps> = props => {
<Route
path={`/githubassessments/${assessmentTypeLink(type)}`}
render={() => (
<GitHubAssessmentListing assessmentOverviews={filteredAssessments} />
<GitHubAssessmentListing
assessmentOverviews={filteredAssessments}
refreshAssessmentOverviews={refreshAssessmentOverviews}
/>
)}
key={idx}
/>
Expand All @@ -152,16 +164,16 @@ async function fetchCourses(
setTypes: (types: string[]) => void,
setAssessmentOverviews: (assessmentOverviews: GHAssessmentOverview[]) => void
) {
const orgList: string[] = [];
const courses: string[] = [];
const results = (await octokit.orgs.listForAuthenticatedUser({ per_page: 100 })).data;
const orgs = results.filter(org => org.login.includes('source-academy-course')); // filter only organisations with 'source-academy-course' in name
orgs.forEach(org => {
orgList.push(org.login);
courses.push(org.login.replace('source-academy-course-', ''));
});
setCourses(orgList);
if (orgList.length > 0) {
setSelectedCourse(orgList[0]);
fetchAssessmentOverviews(octokit, orgList[0], setTypes, setAssessmentOverviews);
setCourses(courses);
if (courses.length > 0) {
setSelectedCourse(courses[0]);
fetchAssessmentOverviews(octokit, courses[0], setTypes, setAssessmentOverviews);
}
}

Expand Down Expand Up @@ -194,13 +206,14 @@ async function fetchAssessmentOverviews(
setAssessmentOverviews: (assessmentOverviews: GHAssessmentOverview[]) => void
) {
const userLogin = (await octokit.users.getAuthenticated()).data.login;
const orgLogin = 'source-academy-course-'.concat(selectedCourse);
type ListForAuthenticatedUserData = GetResponseDataTypeFromEndpointMethod<
typeof octokit.repos.listForAuthenticatedUser
>;
const userRepos: ListForAuthenticatedUserData = (
await octokit.repos.listForAuthenticatedUser({ per_page: 100 })
).data;
const courseRepos = userRepos.filter(repo => repo.owner!.login === selectedCourse);
const courseRepos = userRepos.filter(repo => repo.owner!.login === orgLogin);
const courseInfoRepo = courseRepos.find(repo => repo.name.includes('course-info'));

const assessmentOverviews: GHAssessmentOverview[] = [];
Expand Down Expand Up @@ -236,6 +249,10 @@ async function fetchAssessmentOverviews(

courseInfo.types.forEach((type: { typeName: string; assessments: [GitHubAssessment] }) => {
type.assessments.forEach((assessment: GitHubAssessment) => {
if (!assessment.published) {
return;
}

const prefixLogin = assessment.repoPrefix + '-' + userLogin;
const missionRepo = userRepos.find(repo => repo.name === prefixLogin);

Expand All @@ -262,6 +279,8 @@ async function fetchAssessmentOverviews(
dueDate: new Date(assessment.closeAt),
link: acceptLink
});

assessmentOverviews.sort((a, b) => (a.dueDate <= b.dueDate ? -1 : 1));
});
});
} else {
Expand Down

0 comments on commit af24fe5

Please sign in to comment.