diff --git a/CHANGELOG.md b/CHANGELOG.md index 186930f33..4dd27b626 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## Unreleased +## Changed + +- Deleting unused strings and components (#1225) + ## Fixed - Styling issue preventing scrolling in the sidebar (#1216) diff --git a/public/translations/en.json b/public/translations/en.json index 0cfeb181d..545ae076a 100644 --- a/public/translations/en.json +++ b/public/translations/en.json @@ -58,13 +58,6 @@ "downloadHint": "Download your project files so you can use them offline and in a different code editor.", "downloadButton": "Download project" }, - "footer": { - "accessibility": "Accessibility", - "charityNameAndNumber": "Raspberry Pi Foundation UK registered charity 1129409", - "cookies": "Cookies", - "privacy": "Privacy", - "safeguarding": "Safeguarding" - }, "projectName": { "label": "Project name", "newProject": "New Project" @@ -73,12 +66,10 @@ "download": "Download", "downloadFileNameDefault": "my {{project_type}} project", "editorLogoAltText": "Editor logo", - "projects": "Your projects", "renameProject": "Edit project name", "renameSave": "Save project name", "save": "Save", - "loginToSave": "Log in to save", - "settings": "Settings" + "loginToSave": "Log in to save" }, "imagePanel": { "gallery": "Image Gallery" @@ -137,7 +128,6 @@ "notifications": { "close": "close", "loginPrompt": "To save this project and access it later, don't forget to log in or sign up!", - "projectRemixed": "Your remixed project has been saved", "projectRenamed": "You have renamed your project.", "projectSaved": "Your project has been saved", "savePrompt": "Save this project to access it later under \"Your projects\"." @@ -178,59 +168,9 @@ "buttonSplitTitle": "Split view" }, "project": { - "accessDeniedWithAuthModal": { - "embedded": { - "text": "Visit the Projects site for cool project ideas" - }, - "heading": "You can't access this project", - "newProject": "Create a new code project", - "projectsSiteLinkText": "Explore Projects site", - "text": "Visit the Projects site for cool project ideas or start coding in a new project." - }, "loading": "Loading", - "notFoundModal": { - "embedded": { - "text": "Visit the Projects site for cool project ideas" - }, - "heading": "This project does not exist", - "newProject": "Start new code project", - "projectsSiteLinkText": "Explore Projects site", - "text": "You can start coding in a new project, or visit the Projects site for cool project ideas." - }, "untitled": "Untitled project" }, - "projectHeader": { - "subTitle": "Code Editor", - "title": "Your projects", - "text": "Select a project to continue coding, view, or edit it." - }, - "projectList": { - "delete": "Delete", - "deleteLabel": "Delete project", - "empty": "No projects created yet", - "label": "Open project menu", - "loading": "Loading", - "loadingFailed": "Failed to load projects", - "newProject": "Create a new project", - "pagination": { - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "more": "Load more projects" - }, - "rename": "Rename", - "renameLabel": "Rename project", - "renameProjectModal": { - "cancel": "Do not save", - "heading": "Rename project", - "inputLabel": "Change the name of your project", - "save": "Save" - }, - "updated": "Edited", - "python_type": "Python", - "html_type": "HTML" - }, "projectTypes": { "html": "HTML/CSS", "python": "Python" diff --git a/public/translations/xx-XX.json b/public/translations/xx-XX.json index 3613cacf0..8fff1bf99 100644 --- a/public/translations/xx-XX.json +++ b/public/translations/xx-XX.json @@ -58,13 +58,6 @@ "downloadHint": "Laden Sie Ihre Projektdateien herunter, damit Sie sie offline und in einem anderen Code-Editor verwenden können.", "downloadButton": "Projekt herunterladen" }, - "footer": { - "accessibility": "Barrierefreiheit", - "charityNameAndNumber": "Raspberry Pi Foundation UK eingetragene Wohltätigkeitsorganisation 1129409", - "cookies": "Cookies", - "privacy": "Datenschutz", - "safeguarding": "Kinderschutz" - }, "projectName": { "label": "Projektname", "newProject": "Neues Projekt" @@ -73,12 +66,10 @@ "download": "Herunterladen", "downloadFileNameDefault": "mein {{project_type}} Projekt", "editorLogoAltText": "Editor-Logo", - "projects": "Ihre Projekte", "renameProject": "Projektnamen bearbeiten", "renameSave": "Projektnamen speichern", "save": "Speichern", - "loginToSave": "Zum Speichern anmelden", - "settings": "Einstellungen" + "loginToSave": "Zum Speichern anmelden" }, "imagePanel": { "gallery": "Bildergalerie" @@ -137,7 +128,6 @@ "notifications": { "close": "schließen", "loginPrompt": "Um dieses Projekt zu speichern und später darauf zuzugreifen, vergessen Sie nicht, sich anzumelden oder zu registrieren!", - "projectRemixed": "Ihr neu gemischtes Projekt wurde gespeichert", "projectRenamed": "Sie haben Ihr Projekt umbenannt.", "projectSaved": "Ihr Projekt wurde gespeichert", "savePrompt": "Speichern Sie dieses Projekt, um später unter „Ihre Projekte“ darauf zuzugreifen." @@ -178,59 +168,9 @@ "buttonSplitTitle": "Geteilte Ansicht" }, "project": { - "accessDeniedWithAuthModal": { - "embedded": { - "text": "Besuchen Sie die Projektseite für tolle Projektideen" - }, - "heading": "Sie können auf dieses Projekt nicht zugreifen", - "newProject": "Ein neues Code-Projekt erstellen", - "projectsSiteLinkText": "Projektseite erkunden", - "text": "Besuchen Sie die Projektseite für tolle Projektideen oder beginnen Sie mit dem Programmieren in einem neuen Projekt." - }, "loading": "Wird geladen", - "notFoundModal": { - "embedded": { - "text": "Besuchen Sie die Projektseite für tolle Projektideen" - }, - "heading": "Dieses Projekt existiert nicht", - "newProject": "Neues Code-Projekt starten", - "projectsSiteLinkText": "Projektseite erkunden", - "text": "Sie können mit dem Programmieren in einem neuen Projekt beginnen oder die Projektseite für tolle Projektideen besuchen." - }, "untitled": "Unbenanntes Projekt" }, - "projectHeader": { - "subTitle": "Code-Editor", - "title": "Ihre Projekte", - "text": "Wählen Sie ein Projekt aus, um mit dem Programmieren fortzufahren, es anzuzeigen oder zu bearbeiten." - }, - "projectList": { - "delete": "Löschen", - "deleteLabel": "Projekt löschen", - "empty": "Noch keine Projekte erstellt", - "label": "Projektmenü öffnen", - "loading": "Wird geladen", - "loadingFailed": "Fehler beim Laden der Projekte", - "newProject": "Neues Projekt erstellen", - "pagination": { - "first": "Erste Seite", - "last": "Letzte Seite", - "next": "Nächste Seite", - "previous": "Vorherige Seite", - "more": "Weitere Projekte laden" - }, - "rename": "Umbenennen", - "renameLabel": "Projekt umbenennen", - "renameProjectModal": { - "cancel": "Nicht speichern", - "heading": "Projekt umbenennen", - "inputLabel": "Ändern Sie den Namen Ihres Projekts", - "save": "Speichern" - }, - "updated": "Bearbeitet", - "python_type": "Python", - "html_type": "HTML" - }, "projectTypes": { "html": "HTML/CSS", "python": "Python" diff --git a/src/components/Modals/AccessDeniedWithAuthModal.jsx b/src/components/Modals/AccessDeniedWithAuthModal.jsx deleted file mode 100644 index 11ad413eb..000000000 --- a/src/components/Modals/AccessDeniedWithAuthModal.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from "react"; -import { useDispatch, useSelector } from "react-redux"; -import { useTranslation } from "react-i18next"; - -import Button from "../Button/Button"; -import "../../assets/stylesheets/Modal.scss"; -import { - closeAccessDeniedWithAuthModal, - syncProject, -} from "../../redux/EditorSlice"; -import { defaultPythonProject } from "../../utils/defaultProjects"; -import GeneralModal from "./GeneralModal"; - -const AccessDeniedWithAuthModal = (props) => { - const { - buttons = null, - text = null, - withCloseButton = true, - withClickToClose = true, - } = props; - const dispatch = useDispatch(); - const { t } = useTranslation(); - const user = useSelector((state) => state.auth.user); - - const isModalOpen = useSelector( - (state) => state.editor.accessDeniedWithAuthModalShowing, - ); - - const closeModal = () => dispatch(closeAccessDeniedWithAuthModal()); - - const createNewProject = async () => { - dispatch( - syncProject("save")({ - project: defaultPythonProject, - accessToken: user.access_token, - autosave: false, - }), - ); - }; - - return ( - , - - {t("project.accessDeniedWithAuthModal.projectsSiteLinkText")} - , - ] - } - defaultCallback={createNewProject} - /> - ); -}; - -export default AccessDeniedWithAuthModal; diff --git a/src/components/Modals/AccessDeniedWithAuthModal.test.js b/src/components/Modals/AccessDeniedWithAuthModal.test.js deleted file mode 100644 index b4deeedfe..000000000 --- a/src/components/Modals/AccessDeniedWithAuthModal.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import React from "react"; -import { fireEvent, render, screen, waitFor } from "@testing-library/react"; -import { Provider } from "react-redux"; -import configureStore from "redux-mock-store"; -import AccessDeniedWithAuthModal from "./AccessDeniedWithAuthModal"; -import { syncProject } from "../../redux/EditorSlice"; -import { defaultPythonProject } from "../../utils/defaultProjects"; - -jest.mock("../../redux/EditorSlice", () => ({ - ...jest.requireActual("../../redux/EditorSlice"), - syncProject: jest.fn((_) => jest.fn()), -})); - -const user = { - access_token: "39a09671-be55-4847-baf5-8919a0c24a25", - profile: { - user: "b48e70e2-d9ed-4a59-aee5-fc7cf09dbfaf", - }, -}; - -const middlewares = []; -const mockStore = configureStore(middlewares); - -describe("When accessDeniedWithAuthModalShowing is true", () => { - let store; - - beforeEach(() => { - const initialState = { - editor: { - accessDeniedWithAuthModalShowing: true, - }, - auth: { - user: user, - }, - }; - store = mockStore(initialState); - render( - -
- -
-
, - ); - }); - - test("Modal rendered", () => { - expect( - screen.queryByText("project.accessDeniedWithAuthModal.heading"), - ).toBeInTheDocument(); - }); - - test("Clicking new project creates a new project", async () => { - const newProjectLink = screen.queryByText( - "project.accessDeniedWithAuthModal.newProject", - ); - const saveAction = { type: "SAVE_PROJECT" }; - const saveProject = jest.fn(() => saveAction); - syncProject.mockImplementationOnce(jest.fn((_) => saveProject)); - fireEvent.click(newProjectLink); - await waitFor(() => - expect(saveProject).toHaveBeenCalledWith({ - project: defaultPythonProject, - accessToken: user.access_token, - autosave: false, - }), - ); - expect(store.getActions()[0]).toEqual(saveAction); - }); -}); diff --git a/src/components/Modals/NotFoundModal.jsx b/src/components/Modals/NotFoundModal.jsx deleted file mode 100644 index eb3a6e59b..000000000 --- a/src/components/Modals/NotFoundModal.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from "react"; -import { useDispatch, useSelector } from "react-redux"; -import { useTranslation } from "react-i18next"; - -import Button from "../Button/Button"; -import "../../assets/stylesheets/Modal.scss"; -import { closeNotFoundModal, syncProject } from "../../redux/EditorSlice"; -import { defaultPythonProject } from "../../utils/defaultProjects"; -import GeneralModal from "./GeneralModal"; - -const NotFoundModal = (props) => { - const { - buttons = null, - text = null, - withCloseButton = true, - withClickToClose = true, - } = props; - const dispatch = useDispatch(); - const { t } = useTranslation(); - const user = useSelector((state) => state.auth.user); - - const isModalOpen = useSelector((state) => state.editor.notFoundModalShowing); - const closeModal = () => dispatch(closeNotFoundModal()); - - const createNewProject = async () => { - if (user) { - dispatch( - syncProject("save")({ - project: defaultPythonProject, - accessToken: user.access_token, - autosave: false, - }), - ); - } - closeModal(); - }; - - return ( - , - - {t("project.notFoundModal.projectsSiteLinkText")} - , - ] - } - defaultCallback={createNewProject} - /> - ); -}; - -export default NotFoundModal; diff --git a/src/components/Modals/NotFoundModal.test.js b/src/components/Modals/NotFoundModal.test.js deleted file mode 100644 index e610785cf..000000000 --- a/src/components/Modals/NotFoundModal.test.js +++ /dev/null @@ -1,99 +0,0 @@ -import React from "react"; -import { fireEvent, render, screen, waitFor } from "@testing-library/react"; -import { Provider } from "react-redux"; -import configureStore from "redux-mock-store"; -import NotFoundModal from "./NotFoundModal"; -import { closeNotFoundModal, syncProject } from "../../redux/EditorSlice"; -import { defaultPythonProject } from "../../utils/defaultProjects"; - -jest.mock("../../redux/EditorSlice", () => ({ - ...jest.requireActual("../../redux/EditorSlice"), - syncProject: jest.fn((_) => jest.fn()), -})); - -const user = { - access_token: "39a09671-be55-4847-baf5-8919a0c24a25", - profile: { - user: "b48e70e2-d9ed-4a59-aee5-fc7cf09dbfaf", - }, -}; - -const middlewares = []; -const mockStore = configureStore(middlewares); - -describe("When logged in and notFoundModalShowing is true", () => { - let store; - - beforeEach(() => { - const initialState = { - editor: { - notFoundModalShowing: true, - }, - auth: { - user: user, - }, - }; - store = mockStore(initialState); - render( - -
- -
-
, - ); - }); - - test("Modal rendered", () => { - expect( - screen.queryByText("project.notFoundModal.heading"), - ).toBeInTheDocument(); - }); - - test("Clicking new project creates a new project", async () => { - const newProjectLink = screen.queryByText( - "project.notFoundModal.newProject", - ); - const saveAction = { type: "SAVE_PROJECT" }; - const saveProject = jest.fn(() => saveAction); - syncProject.mockImplementationOnce(jest.fn((_) => saveProject)); - fireEvent.click(newProjectLink); - await waitFor(() => - expect(saveProject).toHaveBeenCalledWith({ - project: defaultPythonProject, - accessToken: user.access_token, - autosave: false, - }), - ); - expect(store.getActions()[0]).toEqual(saveAction); - }); -}); - -describe("When not logged in", () => { - let store; - - beforeEach(() => { - const initialState = { - editor: { - notFoundModalShowing: true, - }, - auth: {}, - }; - store = mockStore(initialState); - }); - - test("Clicking new project closes the modal", () => { - render( - -
- -
-
, - ); - - const newProjectLink = screen.queryByText( - "project.notFoundModal.newProject", - ); - fireEvent.click(newProjectLink); - expect(store.getActions()).toEqual([closeNotFoundModal()]); - }); -}); diff --git a/src/components/Modals/NotFoundModalEmbedded.jsx b/src/components/Modals/NotFoundModalEmbedded.jsx deleted file mode 100644 index 3d43770c1..000000000 --- a/src/components/Modals/NotFoundModalEmbedded.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from "react"; -import { useTranslation } from "react-i18next"; - -import NotFoundModal from "./NotFoundModal"; - -const NotFoundModalEmbedded = (props) => { - const { t } = useTranslation(); - - return ( - - {t("project.notFoundModal.projectsSiteLinkText")} - , - ]} - text={[ - { - type: "paragraph", - content: t("project.notFoundModal.embedded.text"), - }, - ]} - /> - ); -}; - -export default NotFoundModalEmbedded; diff --git a/src/components/Modals/RenameProjectModal.jsx b/src/components/Modals/RenameProjectModal.jsx deleted file mode 100644 index ca462a7b6..000000000 --- a/src/components/Modals/RenameProjectModal.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import React, { useState } from "react"; -import { gql, useMutation } from "@apollo/client"; -import { useTranslation } from "react-i18next"; -import { useDispatch, useSelector } from "react-redux"; -import { closeRenameProjectModal } from "../../redux/EditorSlice"; -import { showRenamedMessage } from "../../utils/Notifications"; -import Button from "../Button/Button"; -import InputModal from "./InputModal"; - -export const RENAME_PROJECT_MUTATION = gql` - mutation RenameProject($id: String!, $name: String!) { - updateProject(input: { id: $id, name: $name }) { - project { - id - name - updatedAt - } - } - } -`; - -export const RenameProjectModal = () => { - const dispatch = useDispatch(); - const { t } = useTranslation(); - const isModalOpen = useSelector( - (state) => state.editor.renameProjectModalShowing, - ); - const project = useSelector((state) => state.editor.modals.renameProject); - const closeModal = () => dispatch(closeRenameProjectModal()); - - const [projectName, setProjectName] = useState(project.name); - - const onCompleted = () => { - closeModal(); - showRenamedMessage(); - }; - - // This can capture data, error, loading as per normal queries, but we're not - // using them yet. - const [renameProjectMutation] = useMutation(RENAME_PROJECT_MUTATION); - - const renameProject = () => { - renameProjectMutation({ - variables: { id: project.id, name: projectName }, - onCompleted: onCompleted, - }); - }; - - return ( - , -