refactor: använd moment för all datumhantering (#227)

This commit is contained in:
Rickard Natt och Dag 2021-03-30 20:54:28 +02:00 committed by GitHub
parent 9d8b6ddd18
commit 11dc1e1d17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 23 additions and 28 deletions

View File

@ -10,6 +10,10 @@ import CookieManager from '@react-native-community/cookies'
import AsyncStorage from '@react-native-async-storage/async-storage' import AsyncStorage from '@react-native-async-storage/async-storage'
import { StatusBar } from 'react-native' import { StatusBar } from 'react-native'
import { useBackgroundBlur } from './utils/blur' import { useBackgroundBlur } from './utils/blur'
import moment from 'moment'
import 'moment/locale/sv'
moment.locale('sv')
const api = init(fetch, CookieManager) const api = init(fetch, CookieManager)

View File

@ -2,15 +2,12 @@ import { useCalendar } from '@skolplattformen/api-hooks'
import { CalendarItem } from '@skolplattformen/embedded-api' import { CalendarItem } from '@skolplattformen/embedded-api'
import { Divider, List, ListItem, Text } from '@ui-kitten/components' import { Divider, List, ListItem, Text } from '@ui-kitten/components'
import moment from 'moment' import moment from 'moment'
import 'moment/locale/sv'
import React from 'react' import React from 'react'
import { Image, ListRenderItemInfo, StyleSheet, View } from 'react-native' import { Image, ListRenderItemInfo, StyleSheet, View } from 'react-native'
import { useChild } from './childContext.component' import { useChild } from './childContext.component'
import { CalendarOutlineIcon } from './icon.component' import { CalendarOutlineIcon } from './icon.component'
import { SaveToCalendar } from './saveToCalendar.component' import { SaveToCalendar } from './saveToCalendar.component'
moment.locale('sv')
export const Calendar = () => { export const Calendar = () => {
const child = useChild() const child = useChild()
const { data } = useCalendar(child) const { data } = useCalendar(child)

View File

@ -9,7 +9,6 @@ import {
} from '@skolplattformen/api-hooks' } from '@skolplattformen/api-hooks'
import { Child } from '@skolplattformen/embedded-api' import { Child } from '@skolplattformen/embedded-api'
import { Avatar, Button, Card, Text } from '@ui-kitten/components' import { Avatar, Button, Card, Text } from '@ui-kitten/components'
import { DateTime } from 'luxon'
import moment from 'moment' import moment from 'moment'
import React from 'react' import React from 'react'
import { StyleSheet, View } from 'react-native' import { StyleSheet, View } from 'react-native'
@ -45,8 +44,8 @@ export const ChildListItem = ({ child, color }: ChildListItemProps) => {
const { data: calendar, status: calendarStatus } = useCalendar(child) const { data: calendar, status: calendarStatus } = useCalendar(child)
const { data: schedule } = useSchedule( const { data: schedule } = useSchedule(
child, child,
DateTime.local().toISO(), moment().toISOString(),
DateTime.local().plus({ days: 7 }).toISO() moment().add(7, 'days').toISOString()
) )
const notificationsThisWeek = notifications.filter((n) => const notificationsThisWeek = notifications.filter((n) =>

View File

@ -1,8 +1,8 @@
import { useNavigation } from '@react-navigation/native' import { useNavigation } from '@react-navigation/native'
import { StackNavigationProp } from '@react-navigation/stack' import { StackNavigationProp } from '@react-navigation/stack'
import { NewsItem } from '@skolplattformen/embedded-api' import { NewsItem } from '@skolplattformen/embedded-api'
import { DateTime } from 'luxon'
import React from 'react' import React from 'react'
import moment from 'moment'
import { Dimensions, StyleSheet, Text, View } from 'react-native' import { Dimensions, StyleSheet, Text, View } from 'react-native'
import { TouchableOpacity } from 'react-native-gesture-handler' import { TouchableOpacity } from 'react-native-gesture-handler'
import { useChild } from './childContext.component' import { useChild } from './childContext.component'
@ -25,9 +25,7 @@ export const NewsListItem = ({ item }: NewsListItemProps) => {
const child = useChild() const child = useChild()
const hasDate = item.published || item.modified const hasDate = item.published || item.modified
const displayDate = hasDate const displayDate = hasDate ? moment(hasDate).fromNow() : null
? DateTime.fromISO(hasDate).toRelative({ locale: 'sv', style: 'long' })
: null
return ( return (
<TouchableOpacity <TouchableOpacity

View File

@ -1,9 +1,9 @@
import { Notification as NotificationType } from '@skolplattformen/embedded-api' import { Notification as NotificationType } from '@skolplattformen/embedded-api'
import { Card, Text } from '@ui-kitten/components' import { Card, Text } from '@ui-kitten/components'
import { DateTime } from 'luxon'
import React from 'react' import React from 'react'
import { StyleSheet, View } from 'react-native' import { StyleSheet, View } from 'react-native'
import { ModalWebView } from './modalWebView.component' import { ModalWebView } from './modalWebView.component'
import moment from 'moment'
interface NotificationProps { interface NotificationProps {
item: NotificationType item: NotificationType
@ -14,9 +14,9 @@ export const Notification = ({ item }: NotificationProps) => {
const open = () => setIsOpen(true) const open = () => setIsOpen(true)
const close = () => setIsOpen(false) const close = () => setIsOpen(false)
const displayDate = DateTime.fromISO(item.dateCreated).toRelative({ const displayDate = item.dateCreated
locale: 'sv', ? moment(item.dateCreated).fromNow()
}) : null
return ( return (
<> <>

View File

@ -24,14 +24,13 @@
"@react-navigation/native": "5.9.3", "@react-navigation/native": "5.9.3",
"@react-navigation/stack": "5.14.3", "@react-navigation/stack": "5.14.3",
"@skolplattformen/api-hooks": "2.0.0", "@skolplattformen/api-hooks": "2.0.0",
"@skolplattformen/embedded-api": "^2.1.3", "@skolplattformen/embedded-api": "^2.1.7",
"@ui-kitten/components": "5.0.0", "@ui-kitten/components": "5.0.0",
"@ui-kitten/eva-icons": "5.0.0", "@ui-kitten/eva-icons": "5.0.0",
"buffer": "6.0.3", "buffer": "6.0.3",
"formik": "2.2.6", "formik": "2.2.6",
"hermes-engine": "0.7.2", "hermes-engine": "0.7.2",
"jsuri": "1.3.1", "jsuri": "1.3.1",
"luxon": "1.26.0",
"personnummer": "3.1.1", "personnummer": "3.1.1",
"react": "17.0.1", "react": "17.0.1",
"react-native": "0.64.0", "react-native": "0.64.0",
@ -62,7 +61,6 @@
"@testing-library/react-native": "7.1.0", "@testing-library/react-native": "7.1.0",
"@types/jest": "^26.0.22", "@types/jest": "^26.0.22",
"@types/jsuri": "^1.3.30", "@types/jsuri": "^1.3.30",
"@types/luxon": "^1.26.2",
"@types/markdown-it": "^12.0.1", "@types/markdown-it": "^12.0.1",
"@types/react-native": "^0.64.1", "@types/react-native": "^0.64.1",
"@ui-kitten/metro-config": "5.0.0", "@ui-kitten/metro-config": "5.0.0",

View File

@ -1,5 +1,9 @@
import 'react-native-gesture-handler/jestSetup' import 'react-native-gesture-handler/jestSetup'
import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock' import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock'
import moment from 'moment'
import 'moment/locale/sv'
moment.locale('sv')
jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage) jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage)

View File

@ -11,7 +11,7 @@
"moduleResolution": "node", "moduleResolution": "node",
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"esModuleInterop": true, "esModuleInterop": true,
"skipLibCheck": false, "skipLibCheck": true,
"resolveJsonModule": true "resolveJsonModule": true
}, },
"exclude": [ "exclude": [

View File

@ -1456,10 +1456,10 @@
react-redux "^7.2.2" react-redux "^7.2.2"
redux "^4.0.5" redux "^4.0.5"
"@skolplattformen/embedded-api@^2.1.3": "@skolplattformen/embedded-api@^2.1.7":
version "2.1.3" version "2.1.7"
resolved "https://registry.yarnpkg.com/@skolplattformen/embedded-api/-/embedded-api-2.1.3.tgz#10ec310563f7f4fd7b90445f58dc4d9f1bf07466" resolved "https://registry.yarnpkg.com/@skolplattformen/embedded-api/-/embedded-api-2.1.7.tgz#a9a8fef51c3765f1c3dc0ae2dc14af4ec0f3a520"
integrity sha512-UdQQMKR9+rpiT1ieutHYOc9FuDAF/Selp1hMd8T8iRofwT/pNFhoYcLKRsctwGX65g4pXv5/lbwEBnEHyzKXqg== integrity sha512-uKo4zal5pylqh4PefKogbBGGXYTr3Rpd2VNjnPrbx54PexoIcduQGw0lEtGcp3XHQXiw1fyEglWVgT9djD6www==
dependencies: dependencies:
"@types/he" "^1.1.1" "@types/he" "^1.1.1"
camelcase-keys "^6.2.2" camelcase-keys "^6.2.2"
@ -1714,11 +1714,6 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008"
integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==
"@types/luxon@^1.26.2":
version "1.26.2"
resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-1.26.2.tgz#656c24c1af3d41b8854700dc94ed556b9b6ce2f8"
integrity sha512-2pvzy4LuxBMBBLAbml6PDcJPiIeZQ0Hqj3PE31IxkNI250qeoRMDovTrHXeDkIL4auvtarSdpTkLHs+st43EYQ==
"@types/markdown-it@^12.0.1": "@types/markdown-it@^12.0.1":
version "12.0.1" version "12.0.1"
resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.0.1.tgz#8391e19fea4796ff863edda55800c7e669beb358" resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.0.1.tgz#8391e19fea4796ff863edda55800c7e669beb358"
@ -6023,7 +6018,7 @@ lru-cache@^6.0.0:
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
luxon@1.26.0, luxon@^1.25.0: luxon@^1.25.0:
version "1.26.0" version "1.26.0"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.26.0.tgz#d3692361fda51473948252061d0f8561df02b578" resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.26.0.tgz#d3692361fda51473948252061d0f8561df02b578"
integrity sha512-+V5QIQ5f6CDXQpWNICELwjwuHdqeJM1UenlZWx5ujcRMc9venvluCjFb4t5NYLhb6IhkbMVOxzVuOqkgMxee2A== integrity sha512-+V5QIQ5f6CDXQpWNICELwjwuHdqeJM1UenlZWx5ujcRMc9venvluCjFb4t5NYLhb6IhkbMVOxzVuOqkgMxee2A==