persist language preference; close #42

This commit is contained in:
Nathan Wang 2020-07-13 22:57:56 -07:00
parent 411a11f3d5
commit 00ec9f3d7e
3 changed files with 33 additions and 10 deletions

View file

@ -12,11 +12,21 @@ export const LanguageSection = props => {
if (type === 'JavaSection') sections['java'] = child;
if (type === 'PySection') sections['py'] = child;
});
const languages = {
cpp: 'C++',
java: 'Java',
py: 'Python',
};
if (!sections.hasOwnProperty(lang)) {
return (
<div>
This section isn't yet available in your chosen language: {lang}. Please
choose a different default language.
<div className="p-4 bg-red-100 text-red-800 rounded">
<b>
This section isn't yet available in your chosen language:{' '}
{languages[lang]}.
</b>{' '}
Please choose a different default language for now. Feel free to file a
request to add support for {languages[lang]} using the "Contact Us"
button.
</div>
);
}
@ -24,13 +34,13 @@ export const LanguageSection = props => {
};
export const CPPSection = props => {
return <div>{props.children}</div>;
return <>{props.children}</>;
};
export const JavaSection = props => {
return <div>{props.children}</div>;
return <>{props.children}</>;
};
export const PySection = props => {
return <div>{props.children}</div>;
return <>{props.children}</>;
};

View file

@ -2,6 +2,8 @@ import * as React from 'react';
import Dots from '../Dots';
import Tooltip from '../tooltip/Tooltip';
import TextTooltip from '../tooltip/TextTooltip';
import { useContext } from 'react';
import UserSettingsContext from '../../context/UserSettingsContext';
export function ResourcesListComponent(props) {
const embedded = props.embedded;
@ -44,7 +46,6 @@ export function ResourcesListComponent(props) {
const books = {
CPH: '/CPH.pdf',
PAPS: 'https://www.csc.kth.se/~jsannemo/slask/main.pdf',
IUSACO: 'https://darrenyao.com/usacobook/java.pdf',
CP1:
'https://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf',
};
@ -91,10 +92,18 @@ export const sourceTooltip = {
};
export function ResourceComponent(props) {
const userSettings = useContext(UserSettingsContext);
const source = props.source;
let url = props.url;
if (!url) {
if (source in books) {
if (source === 'IUSACO') {
if (userSettings.primaryLang === 'java') {
url = 'https://darrenyao.com/usacobook/java.pdf';
} else {
url = 'https://darrenyao.com/usacobook/cpp.pdf';
}
} else if (source in books) {
url = books[source];
} else
throw `No URL. Did you make a typo in the source (${source})? Resource title: ${props.title}`;

View file

@ -1,5 +1,6 @@
import { createContext, useCallback, useState } from 'react';
import { createContext } from 'react';
import * as React from 'react';
import useStickyState from '../hooks/useStickyState';
const UserSettingsContext = createContext({
primaryLang: 'cpp',
@ -7,7 +8,10 @@ const UserSettingsContext = createContext({
});
export const UserSettingsProvider = ({ children }) => {
const [primaryLang, setPrimaryLang] = useState('cpp');
const [primaryLang, setPrimaryLang] = useStickyState(
'cpp',
'user-primary-lang'
);
return (
<UserSettingsContext.Provider
value={{