feat: 🎸 WIP Switch school platform

This commit is contained in:
Viktor Sarström 2021-11-12 21:42:53 +01:00
parent 1aaaeb64e3
commit 916ebc5e25
5 changed files with 28 additions and 22 deletions

View File

@ -7,36 +7,40 @@ import initHjarntorget from '@skolplattformen/api-hjarntorget'
import { ApiProvider } from '@skolplattformen/hooks' import { ApiProvider } from '@skolplattformen/hooks'
import { ApplicationProvider, IconRegistry } from '@ui-kitten/components' import { ApplicationProvider, IconRegistry } from '@ui-kitten/components'
import { EvaIconsPack } from '@ui-kitten/eva-icons' import { EvaIconsPack } from '@ui-kitten/eva-icons'
import React, { useContext } from 'react' import React, { useEffect, useState } from 'react'
import { StatusBar, useColorScheme } from 'react-native' import { StatusBar, useColorScheme } from 'react-native'
import { SafeAreaProvider } from 'react-native-safe-area-context' import { SafeAreaProvider } from 'react-native-safe-area-context'
import { AppNavigator } from './components/navigation.component' import { AppNavigator } from './components/navigation.component'
import { LanguageProvider } from './context/language/languageContext' import { LanguageProvider } from './context/language/languageContext'
import { import { SchoolPlatformProvider } from './context/schoolPlatform/schoolPlatformContext'
SchoolPlatformProvider,
SchoolPlatformContext,
} from './context/schoolPlatform/schoolPlatformContext'
import { default as customMapping } from './design/mapping.json' import { default as customMapping } from './design/mapping.json'
import { darkTheme, lightTheme } from './design/themes' import { darkTheme, lightTheme } from './design/themes'
import useSettingsStorage from './hooks/useSettingsStorage' import useSettingsStorage from './hooks/useSettingsStorage'
import { translations } from './utils/translation' import { translations } from './utils/translation'
import { Reporter } from '@skolplattformen/hooks'
import { Api } from '@skolplattformen/api'
const apiSkolplattformen = initSkolplattformen(fetch, CookieManager) const ApiList = new Map<string, Api>([
const apiHjarntorget = initHjarntorget(fetch, CookieManager) // @ts-expect-error Why is fetch failing here?
['stockholm-skolplattformen', initSkolplattformen(fetch, CookieManager)],
// @ts-expect-error Why is fetch failing here?
['goteborg-hjarntorget', initHjarntorget(fetch, CookieManager)],
])
const reporter = __DEV__ const reporter: Reporter | undefined = __DEV__
? { ? {
log: (message) => console.log(message), log: (message: string) => console.log(message),
error: (error, label) => console.error(label, error), error: (error: Error, label?: string) => console.error(label, error),
} }
: undefined : undefined
if (__DEV__) { if (__DEV__) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const DevMenu = require('react-native-dev-menu') const DevMenu = require('react-native-dev-menu')
DevMenu.addItem('Log AsyncStorage contents', () => logAsyncStorage()) DevMenu.addItem('Log AsyncStorage contents', () => logAsyncStorage())
} }
const safeJsonParse = (maybeJson) => { const safeJsonParse = (maybeJson: string) => {
if (maybeJson) { if (maybeJson) {
try { try {
return JSON.parse(maybeJson) return JSON.parse(maybeJson)
@ -63,17 +67,18 @@ const logAsyncStorage = async () => {
export default () => { export default () => {
const [usingSystemTheme] = useSettingsStorage('usingSystemTheme') const [usingSystemTheme] = useSettingsStorage('usingSystemTheme')
const [currentSchoolPlatform] = useSettingsStorage('currentSchoolPlatform')
const [theme] = useSettingsStorage('theme') const [theme] = useSettingsStorage('theme')
const systemTheme = useColorScheme() const systemTheme = useColorScheme()
const colorScheme = usingSystemTheme ? systemTheme : theme const colorScheme = usingSystemTheme ? systemTheme : theme
//const api = ApiList.get(currentSchoolPlatform)!
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const api = ApiList.get('goteborg-hjarntorget')!
return ( return (
<SchoolPlatformProvider> <SchoolPlatformProvider>
<ApiProvider <ApiProvider api={api} storage={AsyncStorage} reporter={reporter}>
api={apiSkolplattformen}
storage={AsyncStorage}
reporter={reporter}
>
<SafeAreaProvider> <SafeAreaProvider>
<StatusBar <StatusBar
backgroundColor={colorScheme === 'dark' ? '#2E3137' : '#FFF'} backgroundColor={colorScheme === 'dark' ? '#2E3137' : '#FFF'}
@ -83,6 +88,7 @@ export default () => {
<IconRegistry icons={EvaIconsPack} /> <IconRegistry icons={EvaIconsPack} />
<ApplicationProvider <ApplicationProvider
{...eva} {...eva}
// @ts-expect-error Unknown error
customMapping={customMapping} customMapping={customMapping}
theme={colorScheme === 'dark' ? darkTheme : lightTheme} theme={colorScheme === 'dark' ? darkTheme : lightTheme}
> >

View File

@ -20,7 +20,7 @@ export const LanguageContext = React.createContext<LanguageContextProps>({
interface Props { interface Props {
children: ReactNode children: ReactNode
data: any data: any
initialLanguageCode: string initialLanguageCode?: string
cache: any cache: any
} }

View File

@ -2,12 +2,11 @@ import useSettingsStorage from '../../hooks/useSettingsStorage'
import React, { createContext } from 'react' import React, { createContext } from 'react'
interface SchoolPlatformProps { interface SchoolPlatformProps {
currentSchoolPlatform: string currentSchoolPlatform?: string
changeSchoolPlatform: (platform: string) => void changeSchoolPlatform: (platform: string) => void
} }
const defaultState: SchoolPlatformProps = { const defaultState: SchoolPlatformProps = {
currentSchoolPlatform: 'stockholm-skolplattformen',
changeSchoolPlatform: (platform: string) => changeSchoolPlatform: (platform: string) =>
console.log('DEBUG ONLY: changing to', platform), console.log('DEBUG ONLY: changing to', platform),
} }

View File

@ -1,3 +1,4 @@
export * from './provider' export * from './provider'
export * from './context' export * from './context'
export * from './hooks' export * from './hooks'
export * from './types'

View File

@ -14,8 +14,8 @@ import {
import { Action, Reducer } from 'redux' import { Action, Reducer } from 'redux'
export interface Reporter { export interface Reporter {
log: (message: string) => void log?: (message: string) => void
error: (error: Error, label?: string) => void error?: (error: Error, label?: string) => void
} }
export interface IApiContext { export interface IApiContext {