Skip to content

Redesign: rename gameboards to question decks #1381

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Apr 14, 2025
Merged
2 changes: 1 addition & 1 deletion src/app/components/elements/StudentDashboard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ const MyIsaacPanel = ({assignmentsCount, quizzesCount}: MyIsaacPanelProps) => {
return <div className='w-100 dashboard-panel'>
<h4>More in My Isaac</h4>
<div className="d-flex flex-column">
<Link to="/my_gameboards" className="panel-my-isaac-link">
<Link to={PATHS.MY_GAMEBOARDS} className="panel-my-isaac-link">
My question decks
</Link>
<Link to="/assignments" className="panel-my-isaac-link">
Expand Down
6 changes: 3 additions & 3 deletions src/app/components/elements/list-groups/ListView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from "react";
import { AbstractListViewItem, AbstractListViewItemProps, ListViewTagProps } from "./AbstractListViewItem";
import { ShortcutResponse, ViewingContext } from "../../../../IsaacAppTypes";
import { determineAudienceViews } from "../../../services/userViewingContext";
import { DOCUMENT_TYPE, documentTypePathPrefix, getThemeFromContextAndTags, SEARCH_RESULT_TYPE, Subject, TAG_ID, TAG_LEVEL, tags } from "../../../services";
import { DOCUMENT_TYPE, documentTypePathPrefix, getThemeFromContextAndTags, PATHS, SEARCH_RESULT_TYPE, Subject, TAG_ID, TAG_LEVEL, tags } from "../../../services";
import { ListGroup, ListGroupItem, ListGroupItemProps, ListGroupProps } from "reactstrap";
import { TitleIconProps } from "../PageTitle";
import { AffixButton } from "../AffixButton";
Expand Down Expand Up @@ -109,7 +109,7 @@ export const QuizListViewItem = ({item, isQuizSetter, ...rest}: {item: QuizSumma
export const QuestionPackListViewItem = ({item, ...rest}: {item: ShortcutResponse}) => {
const breadcrumb = tags.getByIdsAsHierarchy((item.tags || []) as TAG_ID[]).map(tag => tag.title);
const itemSubject = tags.getSpecifiedTag(TAG_LEVEL.subject, item.tags as TAG_ID[])?.id as Subject;
const url = `/gameboards#${item.id}`;
const url = `${PATHS.GAMEBOARD}#${item.id}`;

return <AbstractListViewItem
icon={{type: "hex", icon: "icon-question", size: "lg"}}
Expand All @@ -126,7 +126,7 @@ export const QuickQuizListViewItem = ({item, ...rest}: {item: ShortcutResponse})
const breadcrumb = tags.getByIdsAsHierarchy((item.tags || []) as TAG_ID[]).map(tag => tag.title);
const audienceViews: ViewingContext[] = determineAudienceViews(item.audience);
const itemSubject = tags.getSpecifiedTag(TAG_LEVEL.subject, item.tags as TAG_ID[])?.id as Subject;
const url = `/gameboards#${item.id}`;
const url = `${PATHS.GAMEBOARD}#${item.id}`;

return <AbstractListViewItem
icon={{type: "hex", icon: "icon-question", size: "lg"}}
Expand Down
4 changes: 2 additions & 2 deletions src/app/components/site/phy/NavigationMenuPhy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Accordion, AccordionBody, AccordionHeader, AccordionItem, Dropdown, Dro
import { Spacer } from "../../elements/Spacer";
import { MainSearchInput } from "../../elements/SearchInputs";
import classNames from "classnames";
import { HUMAN_STAGES, HUMAN_SUBJECTS, LearningStage, PHY_NAV_STAGES, PHY_NAV_SUBJECTS, Subject, above, below, isFullyDefinedContext, isSingleStageContext, isTeacherOrAbove, isValidStageSubjectPair, useDeviceSize } from "../../../services";
import { HUMAN_STAGES, HUMAN_SUBJECTS, LearningStage, PATHS, PHY_NAV_STAGES, PHY_NAV_SUBJECTS, Subject, above, below, isFullyDefinedContext, isSingleStageContext, isTeacherOrAbove, isValidStageSubjectPair, useDeviceSize } from "../../../services";
import { selectors, useAppSelector } from "../../../state";
import { LoginLogoutButton } from "./HeaderPhy";
import { useAssignmentsCount } from "../../navigation/NavigationBar";
Expand Down Expand Up @@ -293,7 +293,7 @@ const ContentNavProfile = ({toggleMenu}: {toggleMenu: () => void}) => {
<div className="d-flex flex-column flex-sm-row">
<div>
{isTeacherOrAbove(user) && <h5>STUDENT</h5>}
<NavigationItemClose href="/my_gameboards">
<NavigationItemClose href={PATHS.MY_GAMEBOARDS}>
My question decks
</NavigationItemClose>
<NavigationItemClose href="/assignments" className="d-flex align-items-center">
Expand Down
3 changes: 2 additions & 1 deletion src/app/components/site/phy/RoutesPhy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,8 @@ export const RoutesPhy = [

// Legacy Routes
<Redirect key={key++} exact from="/mission" to="/about" />,
<Redirect key={key++} exact from="/boards" to="/my_gameboards" />,
<Redirect key={key++} exact from="/boards" to={PATHS.MY_GAMEBOARDS} />,
<Redirect key={key++} exact from="/my_gameboards" to={PATHS.MY_GAMEBOARDS} />,
<Redirect key={key++} exact from="/game_builder" to={PATHS.GAMEBOARD_BUILDER} />,
<Redirect key={key++} exact from="/board/:id" to={`${PATHS.GAMEBOARD}#:id`} />,
<Redirect key={key++} exact from="/gcsebook" to="/books/phys_book_gcse" />,
Expand Down
6 changes: 3 additions & 3 deletions src/app/services/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1124,14 +1124,14 @@ export const NEWS_PODS_PER_PAGE = 12; // <= api.MAX_PODS_TO_RETURN (if lower, th

export const PATHS = siteSpecific({
ASSIGNMENT_PROGRESS: "/assignment_progress",
MY_GAMEBOARDS: "/my_gameboards",
MY_GAMEBOARDS: "/my_question_decks",
MY_ASSIGNMENTS: "/assignments",
QUESTION_FINDER: "/questions",
GAMEBOARD_FILTER: "/gameboards/new",
GAMEBOARD: "/gameboards",
SET_ASSIGNMENTS: "/set_assignments",
GAMEBOARD_BUILDER: "/gameboard_builder",
ADD_GAMEBOARD: "/add_gameboard",
GAMEBOARD_BUILDER: "/question_deck_builder",
ADD_GAMEBOARD: "/add_question_deck",
PREVIEW_TEST: "/test/preview",
TEST: "/test/assignment",
}, {
Expand Down
8 changes: 4 additions & 4 deletions src/app/services/searchResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,10 @@ const siteShortcuts: SearchShortcut[] = siteSpecific([
type: SEARCH_RESULT_TYPE.SHORTCUT
}, {
id: "my_gameboards",
title: "My Gameboards",
terms: ["gameboards", "gameboard", "my gameboards"],
summary: "View your saved gameboards.",
url: "/my_gameboards",
title: "My Question Decks",
terms: ["gameboards", "gameboard", "my gameboards", "question deck", "question decks", "my question decks"],
summary: "View your saved question decks.",
url: PATHS.MY_GAMEBOARDS,
hash: "my_gameboards",
type: SEARCH_RESULT_TYPE.SHORTCUT
}, {
Expand Down
10 changes: 5 additions & 5 deletions src/app/state/slices/api/gameboardApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import {isaacApi} from "./baseApi";
import {AssignmentBoardOrder, Boards, NumberOfBoards} from "../../../../IsaacAppTypes";
import {GameboardDTO, GameboardListDTO, IsaacWildcard} from "../../../../IsaacApiTypes";
import {onQueryLifecycleEvents} from "./utils";
import {isPhy, QUESTION_CATEGORY, siteSpecific} from "../../../services";
import {isPhy, PATHS, QUESTION_CATEGORY, siteSpecific} from "../../../services";
import {logAction} from "../../actions/logging";

export const gameboardApi = isaacApi.injectEndpoints({
endpoints: (build) => ({

getGameboards: build.query<Boards, {startIndex: number, limit: NumberOfBoards, sort: AssignmentBoardOrder}>({
query: ({startIndex, limit, sort}) => ({
url: "/gameboards/user_gameboards",
url: `${PATHS.GAMEBOARD}/user_gameboards`,
params: {"start_index": startIndex, limit, sort}
}),
providesTags: (result) => result ? ["AllGameboards", ...result.boards.map(b => ({type: "Gameboard" as const, id: b.id}))] : [],
Expand All @@ -32,7 +32,7 @@ export const gameboardApi = isaacApi.injectEndpoints({
// TODO MT handle requesting new gameboard if local storage is also null
getGameboardById: build.query<GameboardDTO, string | null>({
query: (boardId) => ({
url: `/gameboards/${boardId}`
url: `${PATHS.GAMEBOARD}/${boardId}`
}),
providesTags: (result) => result && result.id ? [{type: "Gameboard", id: result.id}] : []
}),
Expand Down Expand Up @@ -81,7 +81,7 @@ export const gameboardApi = isaacApi.injectEndpoints({
.join(",");
}
return {
url: "/gameboards",
url: PATHS.GAMEBOARD,
params
};
},
Expand Down Expand Up @@ -115,7 +115,7 @@ export const gameboardApi = isaacApi.injectEndpoints({

unlinkUserFromGameboard: build.mutation<void, string>({
query: (boardId) => ({
url: `/gameboards/user_gameboards/${boardId}`,
url: `${PATHS.GAMEBOARD}/user_gameboards/${boardId}`,
method: "DELETE",
}),
invalidatesTags: (_, error, boardId) => !error ? [{type: "Gameboard", id: boardId}] : [],
Expand Down
4 changes: 2 additions & 2 deletions src/mocks/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ import {
mockQuestionFinderResults,
mockConceptPage
} from "./data";
import {API_PATH} from "../app/services";
import {API_PATH, PATHS} from "../app/services";
import {produce} from "immer";
import {School} from "../IsaacAppTypes";

export const handlers = [
http.get(API_PATH + "/gameboards/user_gameboards", ({request}) => {
http.get(API_PATH + `${PATHS.GAMEBOARD}/user_gameboards`, ({request}) => {
const url = new URL(request.url);
const startIndexStr = url.searchParams.get("start_index");
const startIndex = (startIndexStr && parseInt(startIndexStr)) || 0;
Expand Down
2 changes: 1 addition & 1 deletion src/test/services/navigation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ describe("Breadcrumb trails", () => {
const expected = [
{
title: "Maths Stage 1 - Revision & Practice",
to: "/gameboards#ft_core_2018"
to: `${PATHS.GAMEBOARD}#ft_core_2018`
}
];

Expand Down