persist language preference; close #42
This commit is contained in:
parent
411a11f3d5
commit
00ec9f3d7e
3 changed files with 33 additions and 10 deletions
|
@ -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}</>;
|
||||
};
|
||||
|
|
|
@ -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}`;
|
||||
|
|
|
@ -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={{
|
||||
|
|
Reference in a new issue