fix: 🐛 merge

This commit is contained in:
Viktor Sarström 2021-11-27 20:27:40 +01:00
commit d26fd62e5c
57 changed files with 1079 additions and 193 deletions

View File

@ -1,45 +1,45 @@
# name: Release
name: Release
# on:
# push:
# branches:
# - main
on:
push:
branches:
- main
# jobs:
# build:
jobs:
build:
# runs-on: ubuntu-latest
runs-on: ubuntu-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v2
steps:
- name: Checkout code
uses: actions/checkout@v2
# - name: Setup Node
# uses: actions/setup-node@v1
# with:
# node-version: '14.17.6'
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '14.17.6'
# - name: Setup timezone
# uses: zcong1993/setup-timezone@master
# with:
# timezone: Europe/Stockholm
- name: Setup timezone
uses: zcong1993/setup-timezone@master
with:
timezone: Europe/Stockholm
# - name: Install dependencies
# run: npx lerna bootstrap
- name: Install dependencies
run: yarn
# - name: Run linting and tests
# run: |
# yarn lint
# yarn test
# env:
# CI: true
- name: Run linting and tests
run: |
yarn lint
yarn test
env:
CI: true
# - name: Create release using semantic-release
# uses: cycjimmy/semantic-release-action@v2
# with:
# semantic_version: 17.1.1
# extra_plugins: |
# @semantic-release/changelog@5.0.1
# @semantic-release/git@9.0
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create release using semantic-release
uses: cycjimmy/semantic-release-action@v2
with:
semantic_version: 17.1.1
extra_plugins: |
@semantic-release/changelog@5.0.1
@semantic-release/git@9.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,3 +1,49 @@
## [2.2.1](https://github.com/kolplattformen/skolplattformen/compare/v2.2.0...v2.2.1) (2021-11-23)
### Bug Fixes
* 🐛 spelling of chinese traditional in chinese traditional ([a28fd97](https://github.com/kolplattformen/skolplattformen/commit/a28fd97fe7907a591dc92f5ddeccf1045b4f794b))
# [2.2.0](https://github.com/kolplattformen/skolplattformen/compare/v2.1.0...v2.2.0) (2021-11-23)
### Bug Fixes
* 🐛 Add languages to curriculum config ([b9302f9](https://github.com/kolplattformen/skolplattformen/commit/b9302f96faaf71c797ec335018d9952e26e9d267))
* 🐛 Clarify who's personal identity number to enter ([5028a85](https://github.com/kolplattformen/skolplattformen/commit/5028a85824f4d73ab8007caaeca32a439f4f360e)), closes [#526](https://github.com/kolplattformen/skolplattformen/issues/526)
* 🐛 fix crash when moment locale and language code differ ([623bf48](https://github.com/kolplattformen/skolplattformen/commit/623bf483b52a54a6199e6607248b948b775b6e7b))
* 🐛 Fixes crash when body od newItem is empty ([3e0fd14](https://github.com/kolplattformen/skolplattformen/commit/3e0fd1474a719382627270a1305110692f9ff99b))
* 🐛 Fixes failing tests (added skip), fixes lint + test ([d71c106](https://github.com/kolplattformen/skolplattformen/commit/d71c10607f6a4b89b582b81258fc9c0fc20bf2a8))
* 🐛 Fixes merge with main ([c54f2ff](https://github.com/kolplattformen/skolplattformen/commit/c54f2ffd05589ffbebba5e50b9aef4649bfa9b58))
* 🐛 Fixes tests ([d451cf1](https://github.com/kolplattformen/skolplattformen/commit/d451cf13afbf5e4d1fca43c45d3938d11503d394))
* 🐛 Upgraded async-storage from 1.5.2 to 1.5.9 ([0cd72f5](https://github.com/kolplattformen/skolplattformen/commit/0cd72f5d84bd76b846d99ac7995eba3bec154866))
* add missing package references ([d41e2e3](https://github.com/kolplattformen/skolplattformen/commit/d41e2e3efe278415f3afc462b721afbec4b6f1e2))
* failing html parsing ([2a2259a](https://github.com/kolplattformen/skolplattformen/commit/2a2259a2608ef7e9420d9d3fa59f55530d662ae9))
* images cropping on different devices ([#524](https://github.com/kolplattformen/skolplattformen/issues/524)) ([7c50988](https://github.com/kolplattformen/skolplattformen/commit/7c5098859b71f13ffdb9441b81e149b983355d9f))
* licenses extractor is used on the correct package.json ([d1de447](https://github.com/kolplattformen/skolplattformen/commit/d1de44775b9df6132af9974f6aaef09c5f2d678f))
* lint and prettier fixes ([169b536](https://github.com/kolplattformen/skolplattformen/commit/169b5365e94cd0ff5fe2aa9f28a7baebaeba899a))
* package.json name for app changed ([a867b11](https://github.com/kolplattformen/skolplattformen/commit/a867b116c802956b5f5a8b6ec55e64e6821eb475))
* remove unused e2e files ([97b4380](https://github.com/kolplattformen/skolplattformen/commit/97b438069a589abc37a96fe8c10ce23078b30e7b))
* rename and fix imports ([18ed862](https://github.com/kolplattformen/skolplattformen/commit/18ed8620af5b396eeed740058531ebafda4f8d64))
* some failing tests in hooks now works ([c122f28](https://github.com/kolplattformen/skolplattformen/commit/c122f281a9607d7a52b3a25718e93151ddd7768a))
* ui-kitten metro config ([5fdc3d7](https://github.com/kolplattformen/skolplattformen/commit/5fdc3d71adb8d9364c8c6b345de841f0f3f1de7c))
* update github workflow to run nx instead of lerna ([289c2f8](https://github.com/kolplattformen/skolplattformen/commit/289c2f848aec44da03692d4119aa9e1544dc9292))
### Features
* 🎸 activate norwegian ([cec7ddd](https://github.com/kolplattformen/skolplattformen/commit/cec7ddd8601309f752f9fe49298fcc96643599b7))
* 🎸 bump to version 2.0.4 ([6d762e7](https://github.com/kolplattformen/skolplattformen/commit/6d762e70076c292d952f1b626ea2925caaac78f9))
* 🎸 bump to version 2.0.4 ([078c946](https://github.com/kolplattformen/skolplattformen/commit/078c946a441a4227033c24acbb17807ea19a4dae))
* 🎸 Chinese (simplified and traditional) ([eed2a75](https://github.com/kolplattformen/skolplattformen/commit/eed2a7579c23629c0e8dbd8350fa971cec3753fb))
* 🎸 Japanese ([e5deadd](https://github.com/kolplattformen/skolplattformen/commit/e5deadd88084fba26a7b8dbc83664be376b76a51))
* 🎸 language updates for curriculum ([4d62d9e](https://github.com/kolplattformen/skolplattformen/commit/4d62d9e26987ae4840f81e1c1ad958a6905746c0))
* 🎸 Latin and fix for locales ([1c05196](https://github.com/kolplattformen/skolplattformen/commit/1c051961d695ebb2546f2a30991d01015e7c48fb))
* 🎸 Portuguese ([2f45cbd](https://github.com/kolplattformen/skolplattformen/commit/2f45cbdeb639cd43c6b13cff0a2f86a934b950dd))
* 🎸 Somali ([df8f2e3](https://github.com/kolplattformen/skolplattformen/commit/df8f2e378e76d1f4b8f4b0cfd55aba82626ccaa8))
* add nx build system ([d90cfd2](https://github.com/kolplattformen/skolplattformen/commit/d90cfd2a3b94b9845f809b65a96a72b10447651c))
# [2.1.0](https://github.com/kolplattformen/skolplattformen/compare/v2.0.0...v2.1.0) (2021-10-04)

View File

@ -126,6 +126,7 @@ If you're offended by this initiative, rest assured there is no reason to be —
- [Viktor Sarström](https://github.com/viktorlarsson)
- [Andreas Eriksson](https://github.com/whyer)
- [Kajetan Kazimierczak](https://github.com/kajetan-kazimierczak)
- [Karin Nygårds (artwork)](https://github.com/grishund)
- You?
## License

View File

@ -112,7 +112,7 @@ test('displays address of guardian', () => {
fireEvent.press(screen.getByTestId('ShowContactInfoButton'))
fireEvent.press(screen.getByText(/hem/i))
fireEvent.press(screen.getByText(/adress/i))
expect(Linking.openURL).toHaveBeenCalledWith(
'http://maps.apple.com/?daddr=Testgatan'
)

View File

@ -20,7 +20,6 @@ import { defaultStackStyling } from '../design/navigationThemes'
import usePersonalStorage from '../hooks/usePersonalStorage'
import { Layout as LayoutStyle, Sizing, Typography } from '../styles'
import { studentName } from '../utils/peopleHelpers'
// @ts-expect-error Fix when migrating to TSX
import { useSMS } from '../utils/SMS'
import { translate } from '../utils/translation'
import { AlertIcon } from './icon.component'
@ -139,7 +138,7 @@ const Absence = () => {
<View style={styles.wrap}>
<View style={styles.field}>
<Text style={styles.label}>
{translate('general.socialSecurityNumber')}
{translate('abscense.childsPersonalNumber')}
</Text>
<Input
testID="personalIdentityNumberInput"
@ -240,7 +239,7 @@ const Absence = () => {
</View>
</View>
)}
<Button onPress={handleSubmit} status="primary">
<Button onPress={() => handleSubmit()} status="primary">
{translate('general.send')}
</Button>
</View>

View File

@ -33,7 +33,6 @@ const randomWord = (
const randomIndex: number = Math.floor(Math.random() * keys.length)
const argumentKey: string = keys[randomIndex]
// @ts-expect-error Fix this later
return words[argumentKey]
}

View File

@ -146,6 +146,8 @@ const getRouteTitleFromName = (routeName: string) => {
return translate('navigation.menu')
case 'Classmates':
return translate('navigation.classmates')
default:
return ''
}
}

View File

@ -26,7 +26,7 @@ export const Classmates = () => {
const renderItemIcon = (props: IconProps) => (
<Icon {...props} name="people-outline" />
)
const [selected, setSelected] = React.useState()
const [selected, setSelected] = React.useState<Classmate>()
const renderItem = ({ item, index }: ListRenderItemInfo<Classmate>) => (
<ListItem
accessibilityLabel={`${translate('classmates.child')} ${index + 1}`}
@ -41,7 +41,7 @@ export const Classmates = () => {
<ContactMenu
contact={item}
selected={item === selected}
setSelected={setSelected}
setSelected={() => setSelected(undefined)}
/>
)}
/>

View File

@ -1,39 +1,108 @@
import { useApi } from '@skolplattformen/hooks'
import React, { useEffect, useState } from 'react'
import { Image as ImageBase, ImageStyle, StyleProp } from 'react-native'
import React, { useCallback, useEffect, useState } from 'react'
import {
Image as ImageBase,
ImageResizeMode,
ImageStyle,
StyleProp,
useWindowDimensions,
View,
} from 'react-native'
interface ImageProps {
src: string
style: StyleProp<ImageStyle>
/**
* Width of component. Defaults to window width
* Used to automatically calculate width
*/
componentWidth?: number
accessibilityIgnoresInvertColors: boolean
resizeMode?: ImageResizeMode
width?: number
height?: number
}
export const Image = ({
src,
style,
componentWidth = 0,
accessibilityIgnoresInvertColors,
resizeMode = 'contain',
}: ImageProps) => {
const { api } = useApi()
const [headers, setHeaders] = useState()
const { width: windowWidth } = useWindowDimensions()
const [dimensions, setDimensions] = useState({ width: 0, height: 0 })
const getHeaders = async (url: string) => {
const { headers: newHeaders } = await api.getSession(url)
setHeaders(newHeaders)
}
const debugImageName = getDebugImageName(src)
const prefetchImageInformation = useCallback(
async (url: string) => {
if (!url) return
const { headers: newHeaders } = await api.getSession(url)
console.log('[IMAGE] Getting image dimensions with headers', {
debugImageName,
newHeaders,
})
ImageBase.getSizeWithHeaders(
url,
newHeaders,
(w, h) => {
console.log('[IMAGE] Received image dimensions', {
debugImageName,
w,
h,
})
setDimensions({ width: w, height: h })
setHeaders(newHeaders)
},
(error) => {
console.error('[Image] Failed to get image dimensions', {
debugImageName,
error,
})
}
)
},
[api, debugImageName]
)
useEffect(() => {
getHeaders(src)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [src])
prefetchImageInformation(src)
}, [prefetchImageInformation, src])
return headers ? (
const compWidth = componentWidth || windowWidth
const scale = compWidth / dimensions.width
const scaledWidth = Math.round(dimensions.width * scale)
const scaledHeight = Math.round(dimensions.height * scale)
const imageSource =
resizeMode === 'cover'
? { uri: src, headers }
: { uri: src, headers, height: scaledHeight, width: scaledWidth }
return headers && scaledWidth && scaledHeight ? (
<ImageBase
accessibilityIgnoresInvertColors={accessibilityIgnoresInvertColors}
source={{
uri: src,
headers,
}}
source={imageSource}
resizeMode={resizeMode}
style={style}
/>
) : null
) : (
<View style={style} />
)
}
const getDebugImageName = (src: string) => {
try {
const split = src.split('/')
return split[split.length - 1]
} catch (e: any) {
console.log('FAILED', e.message)
return null
}
}

View File

@ -1,7 +1,8 @@
import { Text } from '@ui-kitten/components'
import React from 'react'
import { Linking, StyleSheet } from 'react-native'
import { Dimensions, Linking, StyleSheet } from 'react-native'
import MarkdownBase, { RenderRules } from 'react-native-markdown-display'
import { Sizing } from '../styles'
import { Image } from './image.component'
interface MarkdownProps {
@ -20,6 +21,9 @@ const rules: RenderRules = {
accessibilityIgnoresInvertColors
key={src}
src={url}
// TODO: Sizing.t5 should not be hardcoded here...
// Maybe measure the width from inside the component instead?
componentWidth={Dimensions.get('window').width - Sizing.t5 * 2}
style={styles.markdownImage}
/>
)
@ -52,5 +56,5 @@ export const Markdown = ({ style, children }: MarkdownProps) => {
}
const styles = StyleSheet.create({
markdownImage: { width: '100%', minHeight: 300 },
markdownImage: { width: '100%', borderRadius: 15 },
})

View File

@ -5,7 +5,7 @@ import { StyleService, Text, useStyleSheet } from '@ui-kitten/components'
import moment from 'moment'
import 'moment/locale/sv'
import React from 'react'
import { ScrollView, View } from 'react-native'
import { Dimensions, ImageStyle, ScrollView, View } from 'react-native'
import { NativeStackNavigationOptions } from 'react-native-screens/native-stack'
import { defaultStackStyling } from '../design/navigationThemes'
import { Layout, Sizing, Typography } from '../styles'
@ -79,8 +79,8 @@ export const NewsItem = ({ route }: NewsItemProps) => {
<Image
accessibilityIgnoresInvertColors={false}
src={newsItem.fullImageUrl}
// @ts-expect-error Fix later on
style={styles.image}
style={styles.image as ImageStyle}
componentWidth={Dimensions.get('screen').width - Sizing.t5 * 2}
/>
)}
</View>
@ -119,7 +119,6 @@ const themedStyles = StyleService.create({
},
image: {
width: '100%',
minHeight: 300,
marginTop: Sizing.t4,
borderRadius: 15,
},

View File

@ -4,7 +4,13 @@ import { NewsItem } from '@skolplattformen/api-skolplattformen'
import { StyleService, useStyleSheet } from '@ui-kitten/components'
import moment from 'moment'
import React, { ReactNode } from 'react'
import { Dimensions, Text, TouchableOpacity, View } from 'react-native'
import {
Dimensions,
ImageStyle,
Text,
TouchableOpacity,
View,
} from 'react-native'
import { Layout, Sizing, Typography } from '../styles'
import { useChild } from './childContext.component'
import { Image } from './image.component'
@ -39,8 +45,8 @@ export const NewsListItem = ({ item, children }: NewsListItemProps) => {
<Image
accessibilityIgnoresInvertColors={false}
src={item.fullImageUrl}
// @ts-expect-error Don't know why this linter breaks
style={styles.image}
resizeMode="cover"
style={styles.image as ImageStyle}
/>
) : null}
<View style={styles.text}>

View File

@ -104,7 +104,7 @@ export const Day = ({ weekDay, lunch, lessons }: DayProps) => {
}
export const Week = ({ child }: WeekProps) => {
moment.locale(LanguageService.getLanguageCode())
moment.locale(LanguageService.getLocale())
const days = moment.weekdaysShort().slice(1, 6)
const currentDayIndex = Math.min(moment().isoWeekday() - 1, 5)
const [selectedIndex, setSelectedIndex] = useState(currentDayIndex)

View File

@ -412,7 +412,7 @@ PODS:
- RNScreens (3.8.0):
- React-Core
- React-RCTImage
- RNSVG (12.1.0):
- RNSVG (12.1.1):
- React
- Toast (4.0.0)
- Yoga (1.14.0)
@ -662,7 +662,7 @@ SPEC CHECKSUMS:
RNLocalize: 74b82db20cc3895ccc25af992c644879bcec2815
RNReanimated: ad24db8af24e3fe1b5c462785bc3db8d5baae2ee
RNScreens: 6e1ea5787989f92b0671049b808aef64fa1ef98c
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
Yoga: aa0cb45287ebe1004c02a13f279c55a95f1572f4
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

View File

@ -462,7 +462,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
shellScript = "export NODE_BINARY=node\nexport ENTRY_FILE=index.js\nexport EXTRA_PACKAGER_ARGS=\"--entry-file apps/skolplattformen-sthlm/index.js\"\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
};
0D9913ADEC9198115BFBE990 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
@ -573,9 +573,9 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-app/Pods-app-frameworks.sh",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/double-conversion/double-conversion.framework/double-conversion",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL/OpenSSL.framework/OpenSSL",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes/hermes.framework/hermes",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
@ -595,9 +595,9 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-app-appTests/Pods-app-appTests-frameworks.sh",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/double-conversion/double-conversion.framework/double-conversion",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL/OpenSSL.framework/OpenSSL",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes/hermes.framework/hermes",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
@ -815,11 +815,11 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 164;
DEVELOPMENT_TEAM = 76DV673YHX;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = app/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.0.0;
@ -830,7 +830,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = se.kolplattformen.app;
PRODUCT_NAME = app;
PROVISIONING_PROFILE_SPECIFIER = "Skolplattformen App Store Development";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";

View File

@ -77,6 +77,8 @@
"valtio": "*",
"yup": "*"
},
"devDependencies": {},
"devDependencies": {
"react-native-clean-project": "*"
},
"private": true
}

View File

@ -11,10 +11,12 @@ import 'moment/locale/ja'
import 'moment/locale/nb'
import 'moment/locale/nl'
import 'moment/locale/pl'
import 'moment/locale/pt'
import 'moment/locale/ru'
import 'moment/locale/sv'
import 'moment/locale/uz-latn'
import 'moment/locale/zh-cn'
import { I18nManager } from 'react-native'
import { languages } from '../utils/translation'
const changeListeners: Record<string, any> = {}
@ -22,6 +24,7 @@ let allString: Record<string, any> = {}
let Strings: Record<string, any> = {}
let languageCode: string
let momentLocale: string
const rtlList: { [key: string]: boolean } = {
en: false,
@ -39,9 +42,15 @@ export const isRTL = (langCode: string) => {
return rtlList[langCode]
}
const getCorrespondingMomentLocale = (languageCode?: string): string => {
const lang = languages.find(({ langCode }) => langCode === languageCode)
return lang?.locale || 'sv'
}
export const LanguageService = {
get: () => Strings,
getLanguageCode: () => languageCode,
getLocale: () => momentLocale,
setAllData: ({ data }: { data: Record<string, any> }) => {
allString = data
},
@ -52,11 +61,12 @@ export const LanguageService = {
i18n.locale = langCode
I18nManager.forceRTL(isRTL(langCode))
}
moment.locale(langCode)
moment.locale(momentLocale)
},
setLanguageCode: ({ langCode }: { langCode?: string }) => {
if (langCode && allString[langCode]) {
languageCode = langCode
momentLocale = getCorrespondingMomentLocale(langCode)
Strings = merge(allString.sv, allString[langCode])
} else {
const dataKeys = Object.keys(allString)
@ -68,7 +78,6 @@ export const LanguageService = {
})
return Strings
},
onChange: ({ key }: { key: string }, cb: (langCode: string) => void) => {
const unsubscribe = () => {
delete changeListeners[key]

View File

@ -76,7 +76,9 @@
"settings": "Einstellungen",
"socialSecurityNumber": "Personenkennziffer",
"title": "Öppna skolplattformen",
"cancel": "Abbrechen"
"cancel": "Abbrechen",
"logoutAndClearPersonalData": "Ausloggen und persönliche Daten löschen",
"logoutAndClearAllDataInclSettings": "Ausloggen und alle Daten inkl. Einstellungen löschen"
},
"language": {
"changeLanguage": "Sprache ändern",
@ -94,7 +96,7 @@
"classmates": "Mitschüler"
},
"news": {
"backToChild": "Zurück zu Kind",
"backToChild": "Zurück zum Kind",
"noNewNewsItemsThisWeek": "Keine neuen Nachrichten diese Woche.",
"notificationTitle": "Nachricht: {{header}} ({{published}})",
"published": "Veröffentlicht",
@ -108,22 +110,35 @@
"notificationTitle": "Mitteilung: {{message}} ({{dateCreated}})"
},
"schedule": {
"gymBag": "Sporttasche",
"gymBag": "Turnbeutel",
"lunch": "Mittagessen",
"end": "Ende",
"start": "Anfang"
},
"contact": {
"a11y_show_contact_info_button_hint": "Zeigt Kontaktinformation an",
"home": "Heim",
"home": "Adresse",
"email": "E-Mail",
"sms": "SMS",
"call": "Anrufen",
"a11y_show_contact_info_button_label": "Kontaktinformationen anzeigen"
},
"classmates": {
"contactsForGuardiansFor": "Kontaktinformationen der Erziehungsberechtigte für",
"contactsForGuardiansFor": "Kontaktinformationen der Erziehungsberechtigten für",
"child": "Kind",
"class": "Klasse"
},
"settings": {
"appearance": "Modus",
"licenses": "Lizenzen",
"language": "Sprache",
"themeAuto": "Automatisch",
"useSystemTheme": "Systemmodus benutzen",
"settings": "Einstellungen",
"theme": "Modus"
},
"themes": {
"light": "Hell",
"dark": "Dunkel"
}
}

View File

@ -8,6 +8,7 @@
"abscense": {
"endTime": "End time",
"entireDay": "Whole day",
"childsPersonalNumber": "Child's personal identity number",
"invalidPersonalNumber": "Personal identity number invalid",
"personalNumberMissing": "Personal identity number missing",
"selectAbscenseEndTime": "Choose end time",
@ -104,7 +105,6 @@
"language": "Language",
"themeAuto": "Auto",
"useSystemTheme": "Use System Light/Dark Theme"
},
"themes": {
"light": "Light",
@ -141,6 +141,6 @@
"call": "Call",
"sms": "SMS",
"email": "E-mail",
"home": "Home"
"home": "Address"
}
}

View File

@ -54,7 +54,9 @@
"agile": "ágil",
"fantastic": "fantástica",
"cheap": "barato",
"better": "mejor"
"better": "mejor",
"homemade": "artesanal",
"open": "abierto"
},
"subtitle": "La alternativa {{word}}",
"placeholder_SocialSecurityNumber": "Tu personnummer",
@ -66,7 +68,9 @@
"OpenOnAnotherDevice": "Abra BankID en otro dispositivo",
"OpenManually": "Abrir BankID manualmente"
},
"loginAsTestUser": "Inicie sesión como usuario de pruebas"
"loginAsTestUser": "Inicie sesión como usuario de pruebas",
"a11y_change_language": "Elija su idioma",
"a11y_image_two_boys": "Fotografia de dos personas mirando su telefono movil"
},
"abscense": {
"title": "Informar ausencia",

View File

@ -8,7 +8,9 @@
"logout": "Se déconnecter",
"confirm": "Confirmer",
"changeLanguage": "Changer de langue",
"cancel": "Annuler"
"cancel": "Annuler",
"logoutAndClearPersonalData": "Se déconnecter et effacer les données personnelles",
"logoutAndClearAllDataInclSettings": "Se déconnecter et effacer toutes les données, y compris les paramètres"
},
"calender": {
"saveToCalenderError": "Un problème est survenu",
@ -61,7 +63,8 @@
"endTime": "Heure de fin",
"selectAbscenseEndTime": "Choisissez l'heure de la fin",
"entireDay": "Toute la journée",
"title": "Signaler une absence"
"title": "Signaler une absence",
"childsPersonalNumber": "Numéro national didentité de l'enfant"
},
"notifications": {
"notificationTitle": "Notification: {{message}} ({{dateCreated}})"
@ -109,7 +112,7 @@
},
"contact": {
"a11y_show_contact_info_button_hint": "Affiche les informations de contact",
"home": "Domicilr",
"home": "Adresse",
"email": "Courriel",
"sms": "Texto",
"call": "Appeler",
@ -125,5 +128,18 @@
"contactsForGuardiansFor": "Coordonnées des tuteurs pour",
"child": "Enfant",
"class": "Classe"
},
"settings": {
"settings": "Paramètres",
"useSystemTheme": "Utiliser le thème clair/sombre du système",
"language": "Langue",
"appearance": "Apparence",
"theme": "Thème",
"licenses": "Licences",
"themeAuto": "Automatique"
},
"themes": {
"light": "Clair",
"dark": "Sombre"
}
}

View File

@ -22,7 +22,9 @@
"loading": "Caricamento in corso…",
"confirm": "Conferma",
"changeLanguage": "Cambia lingua",
"cancel": "Interrompere"
"cancel": "Interrompere",
"logoutAndClearPersonalData": "Esci ed elimina i dati personali",
"logoutAndClearAllDataInclSettings": "Esci ed elimina tutti i dati, comprese le impostazioni"
},
"schedule": {
"end": "Finische",
@ -34,7 +36,8 @@
"notifications": "Notifiche",
"news": "Novità",
"menu": "Menù pranzo",
"calender": "Calendario"
"calender": "Calendario",
"classmates": "Compagni di classe"
},
"language": {
"changeLanguageButton": "Salva",
@ -113,6 +116,29 @@
"emptyText": "Non ho trovato nulla per questa settimana"
},
"contact": {
"a11y_show_contact_info_button_hint": "Mostra le informazioni di contatto"
"a11y_show_contact_info_button_hint": "Mostra le informazioni di contatto",
"call": "Chiama",
"sms": "SMS",
"email": "E-mail",
"home": "Indirizzo",
"a11y_show_contact_info_button_label": "Mostra le informazioni di contatto"
},
"settings": {
"settings": "Impostazioni",
"theme": "Tema",
"themeAuto": "Automatico",
"licenses": "Licenze",
"language": "Lingua",
"appearance": "Aspetto",
"useSystemTheme": "Usa il tema chiaro/scuro del sistema"
},
"themes": {
"light": "Chiaro",
"dark": "Scuro"
},
"classmates": {
"class": "Classe",
"child": "Bambino",
"contactsForGuardiansFor": "Informazioni di contatto per i tutori per"
}
}

View File

@ -60,7 +60,9 @@
"changeLanguage": "Endre språk",
"settings": "Innstillinger",
"send": "Send",
"cancel": "Avbryt"
"cancel": "Avbryt",
"logoutAndClearPersonalData": "Logg ut og tøm personlig data",
"logoutAndClearAllDataInclSettings": "Logg ut og tøm all data, inkludert innstillinger"
},
"news": {
"updated": "Oppdatert",
@ -81,7 +83,8 @@
"personalNumberMissing": "Personnummer mangler",
"invalidPersonalNumber": "Ugyldig personnummer",
"entireDay": "Hele dagen",
"endTime": "Slutt"
"endTime": "Slutt",
"childsPersonalNumber": "Barnets personnummer"
},
"abbrevations": {
"upperSecondarySchool": "Videregående",
@ -96,7 +99,8 @@
"notifications": "Merknader",
"news": "Nyheter",
"menu": "Meny",
"calender": "Kalender"
"calender": "Kalender",
"classmates": "Klassekamerater"
},
"menu": {
"emptyText": "Fant ikke noe denne uken",
@ -113,6 +117,29 @@
"start": "Start"
},
"contact": {
"a11y_show_contact_info_button_hint": "Vis kontaktinfo"
"a11y_show_contact_info_button_hint": "Vis kontaktinfo",
"call": "Ring",
"a11y_show_contact_info_button_label": "Vis kontaktinfo",
"sms": "SMS",
"email": "E-post",
"home": "Hjem"
},
"classmates": {
"contactsForGuardiansFor": "Foresattes kontaktinfo for",
"class": "Klasse",
"child": "Barn"
},
"settings": {
"settings": "Innstillinger",
"appearance": "Utseende",
"themeAuto": "Auto",
"theme": "Drakt",
"language": "Språk",
"licenses": "Lisenser",
"useSystemTheme": "Ifør systemets drakt"
},
"themes": {
"light": "Lys",
"dark": "Mørk"
}
}

View File

@ -8,6 +8,7 @@
"abscense": {
"endTime": "Czas zakończenia",
"entireDay": "Cały dzień",
"childsPersonalNumber": "Personnummer dziecka",
"invalidPersonalNumber": "Błąd w personnumerze",
"personalNumberMissing": "Brak personnumeru",
"selectAbscenseEndTime": "Wybierz czas zakończenia",

View File

@ -0,0 +1,144 @@
{
"abscense": {
"entireDay": "O dia inteiro",
"selectAbscenseStartTime": "Indique a hora de início",
"startTime": "Hora de início",
"title": "Reportar ausência",
"selectAbscenseEndTime": "Indique a hora de fim",
"endTime": "Hora de fim",
"invalidPersonalNumber": "Número de identidade pessoal inválido",
"personalNumberMissing": "Falta o número de identidade pessoal"
},
"auth": {
"bankid": {
"OpenManually": "Abrir BankID manualmente",
"OpenOnAnotherDevice": "Abrir BankID noutro dispositivo",
"Waiting": "A aguardar pelo BankID…",
"OpenOnThisDevice": "Abrir BankID neste dispositivo"
},
"loginAsTestUser": "Autenticar como utilizador em teste",
"loginFailed": "Não foi possível autenticar. Por favor tente novamente.",
"placeholder_SocialSecurityNumber": "O seu número de identidade pessoal",
"words": {
"agile": "ágil",
"better": "melhor",
"awaited": "esperada",
"free": "livre",
"cooler": "interessante",
"enlightened": "mais clara",
"fantastic": "fantástica",
"first": "inicial",
"homemade": "caseira",
"imperfect": "imperfeita",
"open": "aberta",
"simple": "fácil",
"working": "funcional",
"cheap": "barata",
"fun": "divertida",
"fast": "rápida",
"rebellious": "rebelde"
},
"subtitle": "A alternativa {{word}}",
"a11y_change_language": "Selecione o seu idioma",
"a11y_image_two_boys": "Fotografia de duas pessoas a verem os seus telemóveis",
"a11y_clear_social_security_input_field": "Limpar o campo do número de identificação pessoal",
"chooseLoginMethod": "Escolha o método de autenticação",
"a11y_select_login_method": "Selecione o método de autenticação"
},
"abbrevations": {
"compulsorySchool": "Escola primária / secundária inferior",
"leisureTimeCentre": "Cuidados pós-escolares",
"upperSecondarySchool": "Escola secundária superior",
"preSchool": "Pré-escola"
},
"calender": {
"showCalenderActions": "Mostrar ações do calendário",
"saveToCalenderError": "Algo correu mal",
"saveToCalenderSuccess": "✔️ Guardado no calendário",
"approveAccessToCalender": "Tem de autorizar o acesso ao seu calendário",
"saveToCalender": "Guardar no calendário"
},
"children": {
"loadingErrorHeading": "Ups!",
"loadingErrorInformationText": "Esta página não pode ser carregada. Tente novamente ou veja o estado atual em skolplattformen.org",
"noKids_description": "Não existem crianças registadas na cidade de Estocolmo para o seu número de identificação pessoal",
"noKids_title": "Sem crianças",
"tryAgain": "Tentar novamente",
"title": "Os seus filhos",
"viewStatus": "Ver estado em skolplattformen.org"
},
"general": {
"changeLanguage": "Alterar idioma",
"confirm": "Confirmar",
"loading": "A carregar…",
"logout": "Sair",
"logoutAndClearAllDataInclSettings": "Sair e limpar todos os dados, incluindo as configurações",
"send": "Enviar",
"socialSecurityNumber": "Número de identidade pessoal",
"title": "Öppna skolplattformen",
"logoutAndClearPersonalData": "Sair e limpar dados pessoais",
"cancel": "Cancelar",
"settings": "Configurações"
},
"language": {
"changeLanguage": "Alterar idioma",
"changeLanguageButton": "Guardar"
},
"menu": {
"emptyHeadline": "O menu do almoço parece um pouco vazio",
"emptyText": "Não consegui encontrar nada para esta semana"
},
"navigation": {
"calender": "Calendário",
"menu": "Almoço",
"news": "Notícias",
"notifications": "Notificações",
"classmates": "Colegas de turma"
},
"settings": {
"settings": "Configurações",
"useSystemTheme": "Usar o tema claro / escuro do sistema",
"appearance": "Aparência",
"theme": "Tema",
"licenses": "Licenças",
"language": "Idioma",
"themeAuto": "Automático"
},
"themes": {
"light": "Claro",
"dark": "Escuro"
},
"news": {
"backToChild": "Voltar à criança",
"noNewNewsItemsThisWeek": "Não há novidades esta semana.",
"notificationTitle": "Notícia: {{header}} ({{published}})",
"published": "Publicada",
"updated": "Atualizada",
"title": "Notícias de Skolplattformen",
"search": {
"placeholder": "Procurar nas notícias…"
}
},
"schedule": {
"start": "Início",
"end": "Fim",
"lunch": "Almoço",
"gymBag": "Saco de ginástica"
},
"classmates": {
"class": "Turma",
"child": "Criança",
"contactsForGuardiansFor": "Informações de contacto dos tutores para"
},
"contact": {
"call": "Ligar",
"email": "E-mail",
"home": "Morada",
"a11y_show_contact_info_button_hint": "Mostra informações de contacto",
"a11y_show_contact_info_button_label": "Mostrar informações de contacto",
"sms": "SMS"
},
"notifications": {
"notificationTitle": "Notificação: {{message}} ({{dateCreated}})"
}
}

View File

@ -8,6 +8,7 @@
"abscense": {
"endTime": "Sluttid",
"entireDay": "Heldag",
"childsPersonalNumber": "Barnets personnummer",
"invalidPersonalNumber": "Personnumret är ogiltigt",
"personalNumberMissing": "Personnummer saknas",
"selectAbscenseEndTime": "Välj sluttid",
@ -140,6 +141,6 @@
"call": "Ring",
"sms": "SMS",
"email": "Maila",
"home": "Hem"
"home": "Adress"
}
}

View File

@ -0,0 +1,144 @@
{
"abbrevations": {
"preSchool": "学前班",
"upperSecondarySchool": "高中",
"compulsorySchool": "小学/初中",
"leisureTimeCentre": "课后托管"
},
"abscense": {
"endTime": "结束时间",
"entireDay": "全天",
"selectAbscenseEndTime": "选择结束时间",
"selectAbscenseStartTime": "选择开始时间",
"title": "报告缺席情况",
"invalidPersonalNumber": "个人身份号码无效",
"personalNumberMissing": "缺少个人身份号码",
"startTime": "开始时间"
},
"auth": {
"bankid": {
"OpenManually": "手动打开 BankID",
"OpenOnAnotherDevice": "在另一台设备上打开 BankID",
"OpenOnThisDevice": "在本设备上打开 BankID",
"Waiting": "正在等待 BankID 响应…"
},
"loginAsTestUser": "以测试用户身份登录",
"loginFailed": "无法登录。请重试。",
"placeholder_SocialSecurityNumber": "你的个人身份号码",
"words": {
"agile": "轻快",
"awaited": "久违",
"better": "更佳",
"cheap": "价廉",
"cooler": "酷乐",
"enlightened": "开明",
"fantastic": "匪夷",
"fast": "迅捷",
"free": "自由",
"fun": "乐趣",
"homemade": "手制",
"open": "开放",
"rebellious": "逆流",
"simple": "简单",
"imperfect": "有瑕",
"first": "一流",
"working": "可用"
},
"subtitle": "{{word}}之选",
"a11y_clear_social_security_input_field": "清空个人身份号码栏",
"chooseLoginMethod": "选择登录方式",
"a11y_change_language": "选择您的语言",
"a11y_image_two_boys": "两个人看手机的图片",
"a11y_select_login_method": "选择登录方式"
},
"calender": {
"saveToCalender": "保存到日历中",
"saveToCalenderError": "出了点问题",
"saveToCalenderSuccess": "✔️ 已保存到日历中",
"showCalenderActions": "显示日历操作",
"approveAccessToCalender": "您必须允许访问日历"
},
"children": {
"loadingErrorHeading": "啊噢!",
"loadingErrorInformationText": "这个页面无法加载。请重试或在 skolplattformen.org 网站上查看当前状态。",
"noKids_title": "没有找到孩子",
"title": "您的孩子",
"tryAgain": "请重试",
"viewStatus": "在 skolplattformen.org 网站上查看状态",
"noKids_description": "您的个人身份号码下没有注册在斯德哥尔摩市的孩子"
},
"general": {
"cancel": "取消",
"changeLanguage": "更改语言",
"confirm": "确认",
"loading": "正在加载…",
"logout": "登出",
"logoutAndClearPersonalData": "登出并清除个人数据",
"logoutAndClearAllDataInclSettings": "登出并清除包括设置在内的所有数据",
"send": "发送",
"socialSecurityNumber": "个人身份号码",
"title": "开放学校平台",
"settings": "设置"
},
"language": {
"changeLanguage": "更改语言",
"changeLanguageButton": "保存"
},
"menu": {
"emptyHeadline": "午餐菜单看起来有点空",
"emptyText": "找不到有关这个星期的任何内容"
},
"navigation": {
"calender": "日历",
"menu": "午餐",
"news": "新闻",
"notifications": "通知",
"classmates": "同班同学"
},
"settings": {
"appearance": "外观",
"licenses": "许可证",
"language": "语言",
"themeAuto": "自动",
"useSystemTheme": "使用系统亮色/暗色主题",
"settings": "设置",
"theme": "主题"
},
"themes": {
"light": "亮色",
"dark": "暗色"
},
"news": {
"backToChild": "返回到孩子页面",
"noNewNewsItemsThisWeek": "这个星期没有新闻。",
"notificationTitle": "新闻:{{header}}{{published}}",
"published": "已发布",
"updated": "已更新",
"search": {
"placeholder": "在新闻中搜索…"
},
"title": "来自学校平台的新闻"
},
"notifications": {
"notificationTitle": "通知:{{message}}{{dateCreated}}"
},
"schedule": {
"start": "开始",
"end": "结束",
"lunch": "午餐",
"gymBag": "健身袋"
},
"classmates": {
"class": "课堂",
"child": "孩子",
"contactsForGuardiansFor": "监护人的联系信息"
},
"contact": {
"a11y_show_contact_info_button_hint": "显示联系信息",
"a11y_show_contact_info_button_label": "显示联系信息",
"sms": "短信",
"call": "电话",
"email": "电子邮箱",
"home": "家庭地址"
}
}

View File

@ -0,0 +1,144 @@
{
"abbrevations": {
"compulsorySchool": "小學/初中",
"leisureTimeCentre": "課後託管",
"preSchool": "學前班",
"upperSecondarySchool": "高中"
},
"abscense": {
"endTime": "結束時間",
"entireDay": "全天",
"invalidPersonalNumber": "個人身份號碼無效",
"personalNumberMissing": "缺少個人身份號碼",
"selectAbscenseEndTime": "選擇結束時間",
"selectAbscenseStartTime": "選擇開始時間",
"startTime": "開始時間",
"title": "報告缺席情況"
},
"auth": {
"bankid": {
"OpenManually": "手動開啟 BankID",
"OpenOnAnotherDevice": "在另一臺裝置上開啟 BankID",
"OpenOnThisDevice": "在本裝置上開啟 BankID",
"Waiting": "正在等待 BankID 響應…"
},
"chooseLoginMethod": "選擇登入方式",
"loginAsTestUser": "以測試使用者身份登入",
"loginFailed": "無法登入。請重試。",
"placeholder_SocialSecurityNumber": "你的個人身份號碼",
"subtitle": "{{word}}之選",
"words": {
"agile": "輕快",
"awaited": "久違",
"better": "更佳",
"cheap": "價廉",
"cooler": "酷樂",
"enlightened": "開明",
"fantastic": "匪夷",
"fast": "迅捷",
"first": "一流",
"free": "自由",
"fun": "樂趣",
"homemade": "手製",
"imperfect": "有瑕",
"open": "開放",
"rebellious": "逆流",
"simple": "簡單",
"working": "可用"
},
"a11y_change_language": "選擇您的語言",
"a11y_image_two_boys": "兩個人看手機的圖片",
"a11y_clear_social_security_input_field": "清空個人身份號碼欄",
"a11y_select_login_method": "選擇登入方式"
},
"calender": {
"approveAccessToCalender": "您必須允許訪問日曆",
"saveToCalender": "儲存到日曆中",
"saveToCalenderError": "出了點問題",
"saveToCalenderSuccess": "✔️ 已儲存到日曆中",
"showCalenderActions": "顯示日曆操作"
},
"children": {
"loadingErrorHeading": "啊噢!",
"loadingErrorInformationText": "這個頁面無法載入。請重試或在 skolplattformen.org 網站上檢視當前狀態。",
"noKids_description": "您的個人身份號碼下沒有註冊在斯德哥爾摩市的孩子",
"noKids_title": "沒有找到孩子",
"title": "您的孩子",
"tryAgain": "請重試",
"viewStatus": "在 skolplattformen.org 網站上檢視狀態"
},
"general": {
"cancel": "取消",
"changeLanguage": "更改語言",
"confirm": "確認",
"loading": "正在載入…",
"logout": "登出",
"logoutAndClearPersonalData": "登出並清除個人資料",
"logoutAndClearAllDataInclSettings": "登出並清除包括設定在內的所有資料",
"send": "傳送",
"settings": "設定",
"socialSecurityNumber": "個人身份號碼",
"title": "開放學校平臺"
},
"language": {
"changeLanguage": "更改語言",
"changeLanguageButton": "儲存"
},
"menu": {
"emptyHeadline": "午餐選單看起來有點空",
"emptyText": "找不到有關這個星期的任何內容"
},
"navigation": {
"calender": "日曆",
"menu": "午餐",
"news": "新聞",
"notifications": "通知",
"classmates": "同班同學"
},
"settings": {
"settings": "設定",
"appearance": "外觀",
"theme": "主題",
"licenses": "許可證",
"language": "語言",
"themeAuto": "自動",
"useSystemTheme": "使用系統亮色/暗色主題"
},
"themes": {
"light": "亮色",
"dark": "暗色"
},
"news": {
"backToChild": "返回到孩子頁面",
"noNewNewsItemsThisWeek": "這個星期沒有新聞。",
"notificationTitle": "新聞:{{header}}{{published}}",
"published": "已釋出",
"title": "來自學校平臺的新聞",
"updated": "已更新",
"search": {
"placeholder": "在新聞中搜索…"
}
},
"notifications": {
"notificationTitle": "通知:{{message}}{{dateCreated}}"
},
"schedule": {
"start": "開始",
"end": "結束",
"lunch": "午餐",
"gymBag": "健身袋"
},
"classmates": {
"class": "課堂",
"child": "孩子",
"contactsForGuardiansFor": "監護人的聯絡資訊"
},
"contact": {
"a11y_show_contact_info_button_hint": "顯示聯絡資訊",
"a11y_show_contact_info_button_label": "顯示聯絡資訊",
"call": "電話",
"sms": "簡訊",
"email": "電子郵箱",
"home": "家庭地址"
}
}

View File

@ -4,6 +4,17 @@
"outDir": "../../dist/out-tsc",
"types": ["node"]
},
"exclude": ["**/*.spec.ts", "**/*.spec.tsx"],
"exclude": [
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.spec.js",
"**/*.spec.jsx",
"**/*.test.ts",
"**/*.test.tsx",
"**/*.test.js",
"**/*.test.jsx",
"**/*.tests.ts",
"**/test-setup.ts"
],
"include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"]
}

View File

@ -2,6 +2,7 @@
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"noImplicitAny": false,
"jsx": "react-native",
"lib": ["dom", "esnext"],
"moduleResolution": "node",

View File

@ -4,6 +4,7 @@ interface Language {
langCode: string
languageName: string
languageLocalName: string
locale: string
active: boolean
}
@ -12,24 +13,42 @@ export const languages: Language[] = [
langCode: 'sv',
languageName: 'Swedish',
languageLocalName: 'Svenska',
locale: 'sv',
active: true,
},
{
langCode: 'ar',
languageName: 'Arabic',
languageLocalName: 'اَلْعَرَبِيَّةُ',
locale: 'ar',
active: true,
},
{
langCode: 'zh_Hant',
languageName: 'Chinese (traditional)',
languageLocalName: '繁體中文',
locale: 'zh-cn',
active: true,
},
{
langCode: 'zh_Hans',
languageName: 'Chinese (simplified)',
languageLocalName: '简体中文',
locale: 'zh-cn',
active: true,
},
{
langCode: 'nl',
languageName: 'Dutch',
languageLocalName: 'Nederlands',
locale: 'nl',
active: true,
},
{
langCode: 'en',
languageName: 'English',
languageLocalName: 'English',
locale: 'en',
active: true,
},
@ -37,6 +56,7 @@ export const languages: Language[] = [
langCode: 'de',
languageName: 'German',
languageLocalName: 'Deutsch',
locale: 'de',
active: true,
},
@ -44,60 +64,77 @@ export const languages: Language[] = [
langCode: 'fi',
languageName: 'Finnish',
languageLocalName: 'Suomi',
locale: 'fi',
active: true,
},
{
langCode: 'fr',
languageName: 'French',
languageLocalName: 'Français',
locale: 'fr',
active: true,
},
{
langCode: 'it',
languageName: 'Italian',
languageLocalName: 'Italiano',
locale: 'it',
active: true,
},
{
langCode: 'ja',
languageName: 'Japanese',
languageLocalName: '日本語',
active: false,
locale: 'ja',
active: true,
},
{
langCode: 'la',
languageName: 'Latin',
languageLocalName: 'Latina',
active: false,
locale: 'sv',
active: true,
},
{
langCode: 'nb_NO',
languageName: 'Norwegian Bokmål',
languageLocalName: 'Norsk bokmål',
active: false,
locale: 'nb',
active: true,
},
{
langCode: 'pl',
languageName: 'Polish',
languageLocalName: 'Polski',
locale: 'pl',
active: true,
},
{
langCode: 'pt',
languageName: 'Portuguese',
languageLocalName: 'Português',
locale: 'pt',
active: true,
},
{
langCode: 'ru',
languageName: 'Russian',
languageLocalName: 'русский',
locale: 'ru',
active: false,
},
{
langCode: 'so',
languageName: 'Somali',
languageLocalName: 'af-Soomaali',
active: false,
locale: 'sv',
active: true,
},
{
langCode: 'es',
languageName: 'Spanish',
languageLocalName: 'Español',
locale: 'es',
active: true,
},
]
@ -115,9 +152,12 @@ export const translations = {
nb_NO: require('../translations/nb_NO.json'),
nl: require('../translations/nl.json'),
pl: require('../translations/pl.json'),
pt: require('../translations/pt.json'),
ru: require('../translations/ru.json'),
so: require('../translations/so.json'),
sv: require('../translations/sv.json'),
zh_Hans: require('../translations/zh_Hans.json'),
zh_Hant: require('../translations/zh_Hant.json'),
}
export const translate = (key: string, options?: TranslateOptions) => {

View File

@ -1,3 +1,5 @@
import Link from './Link'
const Privacy = () => {
return (
<div>
@ -5,9 +7,9 @@ const Privacy = () => {
<h1>Öppna Skolplattformen</h1>
<h2>Integritetspolicy</h2>
<p>
"Öppna Skolplattformen", hädanefter "appen", byggdes av "No free beer
HB" som en kommersiell app. Appen hämtar all information från
Stockholms Stads skolplattform, hädanefter Skolplattformen, efter
"Öppna Skolplattformen", hädanefter "appen", byggs av "Not free beer
AB" som en kommersiell app. Appen hämtar all information från
Stockholms stads skolplattform, hädanefter Skolplattformen, efter
inloggning via BankID. Appens funktion är därmed direkt knuten till
att Skolplattformen fungerar. Vi kan endast ta ansvar för att vår kod
fungerar inte deras.
@ -82,7 +84,14 @@ const Privacy = () => {
du vill vara den säkra sidan kan du återbesöka den här sidan och
.
</p>
<p>Denna integritetspolicy gäller fr.o.m 2021-02-07</p>
<p>
Denna integritetspolicy gäller fr.o.m. 2021-09-13. Ändringar i denna
policy finns dokumenterade vår{' '}
<Link.External href="https://github.com/kolplattformen/skolplattformen/">
GitHub
</Link.External>
.
</p>
<h3>Kontakta oss</h3>
<p>
Tveka inte att kontakta oss om du har några frågor eller förslag till

View File

@ -1,3 +1,5 @@
import Link from './Link'
const QA = () => {
return (
<div className="header">
@ -86,10 +88,10 @@ const QA = () => {
<p>
Din information är lika säker som i Skolplattformen. Vi är
integritetsfanatiker och redogör för vår syn dataskydd i Öppna
skolplattformen i
<a href="https://skolplattformen.org/integritet">
skolplattformen i{' '}
<Link.Internal href="https://skolplattformen.org/integritet">
vår integritetspolicy
</a>
</Link.Internal>
.
</p>
<h3>Men ni hanterar ju personinformation?</h3>
@ -146,7 +148,7 @@ const QA = () => {
utifrån det. Om vi loggar in med ditt konto, till och med om du sitter
med och sköter inloggningen, lär vi se information vi inte har rätt
att se. Därför ser vi i dagsläget ingen möjlighet att hjälpa dig :( Vi
hoppas att Stockholms Stad kommer publicera dokumentation till sitt
hoppas att Stockholms stad kommer publicera dokumentation till sitt
API och även tillhandahålla säkra testmiljöer att vi och andra kan
utveckla de stöd som fler målgrupper behöver.
</p>
@ -247,7 +249,7 @@ const QA = () => {
de?
</h3>
<p>
Appen kostar 12 kronor. Intäkten registreras i handelsbolaget Not Free
Appen kostar 12 kronor. Intäkten registreras i aktiebolaget Not Free
Beer som ägs av tre av utvecklarna och går till att täcka kostnader
för inköp. Det täcker inte långa vägar den tid vi lagt ner. Med en
låg engångskostnad ökar vi chansen att vi orkar syssla med underhåll
@ -275,10 +277,10 @@ const QA = () => {
Vi är enormt tacksamma för alla buggrapporter och förslag vi får och
satsar mycket att snabbt som möjligt fixa de saker som dyker
upp. För att lite ordning försöker vi samla alla buggar och
önskemål samma ställe, Github.
<a href="https://github.com/kolplattformen/skolplattformen/issues">
önskemål samma ställe, Github.{' '}
<Link.External href="https://github.com/kolplattformen/skolplattformen/issues">
Klicka här
</a>{' '}
</Link.External>{' '}
för att se vilka funktioner och buggar vi redan har tagit emot och
jobbar .
</p>
@ -312,7 +314,7 @@ const QA = () => {
</p>
<h3>Kontakta oss</h3>
<p>
Tveka inte att kontakta oss. Skicka ett mail till
Tveka inte att kontakta oss. Skicka ett mail till{' '}
<a href="mailto:info@skolplattformen.org">dev@skolplattformen.org</a>.
</p>
</div>

View File

@ -1,6 +0,0 @@
import 'react-native-gesture-handler'
import { AppRegistry } from 'react-native'
import App from './apps/skolplattformen-sthlm/App'
import { name as appName } from './apps/skolplattformen-sthlm/app.json'
AppRegistry.registerComponent(appName, () => App)

View File

@ -310,7 +310,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
item: NewsItem
): Promise<NewsItem | undefined> {
if (this.isFake) {
return fakeResponse(fake.news(child).find((ni) => ni.id === item.id))
return fakeResponse(fake.news(child).find((ni) => ni.id === item.id) || {id: "", published: ""})
}
const url = routes.newsDetails(child.id, item.id)
const session = this.getRequestInit()

View File

@ -810,7 +810,7 @@ const data: any = {
intro:
'Vi kommer efter att förskoleklassen är slut arrangera olika vinteraktiviteter genom fridtidsverksamheten.',
body:
'## Vänligen ta med hjälm, skridskor eller stjärtlapp. Alla barn måste ha hjälm på sig samt varma kläder. Vi kommer åka i backen bakom skolbyggnaden samt använda isen som spolats vid Mullsjöskolan. Personal kommer finnas på plats samt att vi erbjuda varm dryck, frukt och lek för de barn som ej har hjälm eller lämpligt åkdon.',
'## Vänligen ta med hjälm, skridskor eller stjärtlapp.\n\n ![Bild](https://images.unsplash.com/photo-1495377701095-00261b767581?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=988&q=80)\n\n Alla barn måste ha hjälm på sig samt varma kläder. Vi kommer åka i backen bakom skolbyggnaden samt använda isen som spolats vid Mullsjöskolan. Personal kommer finnas på plats samt att vi erbjuda varm dryck, frukt och lek för de barn som ej har hjälm eller lämpligt åkdon.',
imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg',
fullImageUrl: 'https://unsplash.com/photos/yB_aiAWkm40',
imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.',

View File

@ -26,9 +26,16 @@ export const newsItem = ({
imageUrl: bannerImageUrl,
fullImageUrl: `${IMAGE_HOST}${bannerImageUrl}`,
imageAltText: altText,
body: toMarkdown(body),
body: toNonEmptyMarkdownString(body),
})
// Fixes https://github.com/kolplattformen/skolplattformen/issues/525
const toNonEmptyMarkdownString = (str: string): string => {
const res = toMarkdown(str);
if(res?.length == 0 ) return ' '
return res
}
const newsSort = (item1: NewsItem, item2: NewsItem): number => {
const m1 = item1.modified || item1.published
const m2 = item2.modified || item2.published

View File

@ -105,6 +105,9 @@ const overides = {
}
export const toMarkdown = (html?: string): string => {
if(html?.length == 0) return ''
const rearranged = rearrangeWhitespace(html)
const trimmed = clean(rearranged)
const markdown = h2m(trimmed, { overides, converter })

View File

@ -1,15 +1,15 @@
{
"subjects": {
"TN": "Zei­chen­spra­che",
"SVA": "Schewdishe als främdsprache",
"SV": "Schwedish",
"SL": "Handwerk",
"SVA": "Schwedisch als Fremdsprache",
"SV": "Schwedisch",
"SL": "Werken",
"SH": "Staats­bür­ger­kun­de",
"RE": "Re­li­gi­on",
"HI": "Historie",
"HI": "Geschichte",
"GE": "Geografie",
"NO": "Naturwissenschaftlichen Themen",
"SO": "Gesellschaftsorientierte Themen",
"NO": "Naturwissenschaften",
"SO": "Gesellschaftslehre",
"KE": "Chemie",
"FY": "Physik",
"BI": "Biologie",
@ -18,6 +18,12 @@
"IDH": "Sport und Gesundheit",
"HKK": "Hauswirtschaft",
"EN": "Englisch",
"BL": "Kunst"
"BL": "Kunst",
"TK": "Technik"
},
"misc": {
"PRANDIUM": "Mittagspause",
"LUNCH": "Mittagspause",
"RAST": "Pause"
}
}

View File

@ -22,6 +22,8 @@ const translations: Translations = {
la: require('./la.json'),
nb_NO: require('./nb_NO.json'),
pl: require('./pl.json'),
pt: require('./pt.json'),
zh_Hans: require('./zh_Hans.json'),
}
const languageList: string[] = Object.keys(translations)
export type Language = typeof languageList[number]

View File

@ -0,0 +1,124 @@
{
"subjects": {
"HKK": "Estudos domésticos e de consumo",
"BL": "Arte",
"EN": "Inglês",
"MA": "Matemática",
"MU": "Música",
"BI": "Biologia",
"FY": "Física",
"GE": "Geografia",
"NO": "Estudos científicos",
"KE": "Química",
"SO": "Temas de estudos sociais",
"IDH": "Educação física e saúde",
"TN": "Linguagem gestual",
"ES": "Estética",
"HI": "História",
"RE": "Religião",
"SH": "Educação cívica",
"SL": "Trabalhos manuais",
"SV": "Sueco",
"DA": "Estudos preparatórios de dança",
"JU": "Estudos judaicos",
"SVA": "Sueco como segunda língua",
"TK": "Tecnologia"
},
"traningsskolaSubjects": {
"VAA": "Atividades diárias",
"VEU": "Percepção",
"KOM": "Comunicação",
"MOT": "Coordenação física"
},
"languages": {
"KMR": "Curdo, norte",
"HUN": "Húngaro",
"BUL": "Búlgaro",
"ISL": "Islandês",
"KOR": "Coreano",
"SDH": "Curdo, sul",
"LIT": "Lituano",
"CKB": "Curdo, central",
"AMH": "Amárico",
"HYE": "Arménio",
"AYM": "Aimará",
"MYA": "Birmanês",
"DAN": "Dinamarquês",
"VLS": "Flamengo",
"HEB": "Hebraico",
"ITA": "Italiano",
"CAT": "Catalão",
"KUR": "Curdo",
"MLT": "Maltês",
"NOR": "Norueguês",
"RON": "Romeno",
"TIB": "Tibetano",
"UKR": "Ucraniano",
"AFR": "Africâner",
"SQI": "Albanês",
"BOS": "Bósnio",
"EST": "Estoniano",
"FIJ": "Fijiano",
"FIN": "Finlandês",
"FRA": "Francês",
"KAT": "Georgiano",
"GRE": "Grego",
"GUJ": "Gujarati",
"IND": "Indonésio",
"YID": "Iídiche",
"KAZ": "Cazaque",
"ZHO": "Chinês",
"NAN": "Chinês, min nan",
"ROP": "Crioulo",
"HRV": "Croata",
"FAS": "Persa",
"POR": "Português",
"RUS": "Russo",
"SLK": "Eslovaco",
"ARA": "Árabe",
"JPN": "Japonês",
"YUE": "Chinês, cantonês",
"LAV": "Letão",
"DEU": "Alemão",
"VIE": "Vietnamita",
"CMN": "Chinês, mandarim",
"MKD": "Macedónio",
"LAO": "Laociano",
"NLD": "Holandês",
"NEP": "Nepalês",
"HBS": "Servo-croata",
"SLV": "Esloveno",
"SPA": "Espanhol",
"CES": "Checo",
"TUR": "Turco",
"SPK": "Outro idioma"
},
"specialLanguages": {
"SVA": "O sueco como segunda língua",
"EN": "Inglês",
"FR": "Francês",
"IT": "Italiano",
"SV": "Sueco",
"PO": "Português",
"RY": "Russo",
"SAM": "Sami",
"SP": "Espanhol",
"TN": "Linguagem gestual",
"TY": "Alemão",
"FI": "Finlandês",
"JAP": "Japonês",
"KI": "Chinês"
},
"categories": {
"trainingSchool": "Escola obrigatória para crianças com graves dificuldades de aprendizagem",
"modernLanguages": "Idiomas modernos",
"unknown": "Desconhecido",
"misc": "Diversos"
},
"misc": {
"RAST": "Intervalo",
"MTID": "Tempo do mentor",
"LUNCH": "Almoço",
"PRANDIUM": "Almoço"
}
}

View File

@ -0,0 +1,71 @@
{
"subjects": {
"BL": "美术",
"HKK": "家庭和消费者研究",
"IDH": "体育与健康",
"MA": "数学",
"MU": "音乐",
"BI": "生物",
"FY": "物理",
"KE": "化学",
"SO": "社会研究项目",
"GE": "地理",
"HI": "历史",
"RE": "宗教学",
"SH": "公民学",
"SL": "手工课",
"SV": "瑞典语",
"SVA": "瑞典语(第二语言)",
"TN": "手语",
"TK": "技术",
"JU": "犹太学",
"ES": "美学",
"EN": "英语",
"NO": "科学研究",
"DA": "预备舞蹈研究"
},
"traningsskolaSubjects": {
"MOT": "身体协调",
"VAA": "日常活动",
"VEU": "感知课",
"KOM": "传媒学"
},
"specialLanguages": {
"EN": "英语",
"IT": "意大利语",
"JAP": "日语",
"KI": "汉语",
"PO": "葡萄牙语",
"SAM": "萨米语",
"SP": "西班牙语",
"SV": "瑞典语",
"SVA": "瑞典语(第二语言)",
"TN": "手语",
"TY": "德语",
"FR": "法语",
"RY": "俄语",
"FI": "芬兰语"
},
"languages": {
"ACE": "亚齐语",
"ACH": "阿科利语",
"SPK": "其他语言",
"ZUL": "祖鲁语",
"TUR": "土耳其语",
"DEU": "德语",
"UIG": "维吾尔语",
"UKR": "乌克兰语",
"HUN": "匈牙利语",
"URD": "乌尔都语",
"UZB": "乌兹别克语",
"VIE": "越南语",
"WOL": "沃洛夫语",
"YOR": "约鲁巴语、雅里巴语、约巴语"
},
"categories": {
"unknown": "未知",
"modernLanguages": "现代语言",
"trainingSchool": "重度学习障碍儿童义务教育学校",
"misc": "杂项"
}
}

View File

@ -191,8 +191,6 @@ describe('useCalendar(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -222,8 +220,6 @@ describe('useCalendar(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -223,8 +223,6 @@ describe('useChildList()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual(echildrenCache)
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -264,8 +262,6 @@ describe('useChildList()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual(echildrenCache)
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -176,8 +176,6 @@ describe('useClassmates(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -207,8 +205,6 @@ describe('useClassmates(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -174,8 +174,6 @@ describe('useEtjanstChildren()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -205,8 +203,6 @@ describe('useEtjanstChildren()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -172,8 +172,6 @@ describe('useMenu(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -202,8 +200,6 @@ describe('useMenu(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -172,8 +172,6 @@ describe('useNews(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -202,8 +200,6 @@ describe('useNews(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -192,8 +192,6 @@ describe('useNewsDetails(child, newsItem)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual({ ...cached })
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -223,8 +221,6 @@ describe('useNewsDetails(child, newsItem)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual({ ...cached })
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -176,8 +176,6 @@ describe('useNotifications(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -207,8 +205,6 @@ describe('useNotifications(child)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -192,8 +192,6 @@ describe('useSchedule(child, from, to)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -223,8 +221,6 @@ describe('useSchedule(child, from, to)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -178,8 +178,6 @@ describe('useSkola24Children()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ personGuid: '2' }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -209,8 +207,6 @@ describe('useSkola24Children()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ personGuid: '2' }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -191,8 +191,6 @@ describe('useTimetable(child, week, year, lang)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -222,8 +220,6 @@ describe('useTimetable(child, week, year, lang)', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual([{ id: 2 }])
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -162,8 +162,6 @@ describe('useUser()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual({ id: 2 })
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()
@ -192,8 +190,6 @@ describe('useUser()', () => {
expect(result.current.status).toEqual('loading')
expect(result.current.data).toEqual({ id: 2 })
jest.advanceTimersToNextTimer()
await waitForNextUpdate()
await waitForNextUpdate()
await waitForNextUpdate()

View File

@ -1,6 +1,6 @@
{
"name": "skolplattformen",
"version": "0.0.0",
"version": "2.2.1",
"license": "MIT",
"scripts": {
"start": "nx start",
@ -61,7 +61,7 @@
"react-native-safe-area-context": "^3.2.0",
"react-native-screens": "^3.3.0",
"react-native-simple-toast": "1.1.3",
"react-native-svg": "12.1.0",
"react-native-svg": "12.1.1",
"react-native-typography": "1.4.1",
"react-native-webview": "11.4.2",
"react-redux": "^7.2.3",
@ -128,6 +128,7 @@
"node-blob": "^0.0.2",
"node-fetch": "^2.6.1",
"prettier": "^2.3.1",
"react-native-clean-project": "^3.6.7",
"react-native-codegen": "0.0.7",
"react-native-oss-license": "^0.4.1",
"react-native-svg": "12.1.1",

View File

@ -12034,6 +12034,11 @@ react-native-calendar-events@2.2.0:
resolved "https://registry.npmjs.org/react-native-calendar-events/-/react-native-calendar-events-2.2.0.tgz"
integrity sha512-tNUbhT6Ief0JM4OQzQAaz1ri0+MCcAoHptBcEXCz2g7q3A05pg62PR2Dio4F9t2fCAD7Y2+QggdY1ycAsF3Tsg==
react-native-clean-project@^3.6.7:
version "3.6.7"
resolved "https://registry.yarnpkg.com/react-native-clean-project/-/react-native-clean-project-3.6.7.tgz#6d22ad22fe3a1e6efdb040eb66f9bdfb2273ac2e"
integrity sha512-GSJG1oNRJKtINPMzfHgRmu7HJs7phwgtwQ6GvyGARiySqQlU/bAc5zsI9rOeNPGlpgYongQtjOGdmqSpsWMJTw==
react-native-codegen@0.0.7:
version "0.0.7"
resolved "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.7.tgz"
@ -12163,10 +12168,10 @@ react-native-svg-transformer@0.14.3:
path-dirname "^1.0.2"
semver "^5.6.0"
react-native-svg@12.1.0:
version "12.1.0"
resolved "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.1.0.tgz"
integrity sha512-1g9qBRci7man8QsHoXn6tP3DhCDiypGgc6+AOWq+Sy+PmP6yiyf8VmvKuoqrPam/tf5x+ZaBT2KI0gl7bptZ7w==
react-native-svg@12.1.1:
version "12.1.1"
resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-12.1.1.tgz#5f292410b8bcc07bbc52b2da7ceb22caf5bcaaee"
integrity sha512-NIAJ8jCnXGCqGWXkkJ1GTzO4a3Md5at5sagYV8Vh4MXYnL4z5Rh428Wahjhh+LIjx40EE5xM5YtwyJBqOIba2Q==
dependencies:
css-select "^2.1.0"
css-tree "^1.0.0-alpha.39"