diff --git a/src/__mocks__/settings.ts b/src/__mocks__/settings.ts index 07a7ffa..d875c11 100644 --- a/src/__mocks__/settings.ts +++ b/src/__mocks__/settings.ts @@ -1,4 +1,4 @@ -import { Setting } from '@models/setting' +import { Setting } from '@models/settings' export const settingItem: Setting = { id: 1, name: 'Push Mitteilungen' } diff --git a/src/components/Settings/LegalList.tsx b/src/components/Settings/LegalList.tsx index 0eb0f5b..155919e 100644 --- a/src/components/Settings/LegalList.tsx +++ b/src/components/Settings/LegalList.tsx @@ -1,13 +1,15 @@ import React from 'react' -import { StyleSheet, View } from 'react-native' +import { Linking, StyleSheet, View } from 'react-native' import { Ionicons } from '@expo/vector-icons' import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import HTML from 'react-native-render-html' import Touchable from '@components/UI/Touchable' +import Text from '@components/UI/Text' import { SettingsStackParamList } from '@navigations/SettingsNavigator' -import { Legal } from '@models/Legal' +import { Legal } from '@models/settings' +import { legalAddition } from '@data/settings' import { colors, defaultStyles, DefaultStyles } from '@styles/theme' interface Props { @@ -17,6 +19,8 @@ interface Props { const LegalList: React.FC = ({ data }) => { const navigation = useNavigation>() + const linkIcon = () => + return ( {data.map(item => ( @@ -27,10 +31,17 @@ const LegalList: React.FC = ({ data }) => { > - + {linkIcon()} ))} + + Linking.openURL(legalAddition.href)} testID="link-mail"> + + {legalAddition.name} + {linkIcon()} + + ) } diff --git a/src/components/Settings/SettingsList.tsx b/src/components/Settings/SettingsList.tsx index cc6b99d..1013be5 100644 --- a/src/components/Settings/SettingsList.tsx +++ b/src/components/Settings/SettingsList.tsx @@ -3,7 +3,7 @@ import { StyleSheet, View } from 'react-native' import Text from '@components/UI/Text' import Switch from '@components/UI/Switch' -import { Setting } from '@models/setting' +import { Setting } from '@models/settings' import { DefaultStyles, defaultStyles } from '@styles/theme' interface Props { diff --git a/src/components/Settings/__tests__/LegalList.test.tsx b/src/components/Settings/__tests__/LegalList.test.tsx index 64c78bc..979754f 100644 --- a/src/components/Settings/__tests__/LegalList.test.tsx +++ b/src/components/Settings/__tests__/LegalList.test.tsx @@ -1,7 +1,9 @@ import React from 'react' +import { Linking } from 'react-native' import { act, fireEvent, render } from '@testing-library/react-native' import LegalList from '../LegalList' +import { legalAddition } from '@data/settings' import { legalArray } from '@__mocks__/legal' export const mockedNavigate = jest.fn() @@ -31,4 +33,17 @@ describe('', () => { expect(mockedNavigate).toHaveBeenCalledTimes(1) }) + + it('should call the mailto link', () => { + const spy = jest.spyOn(Linking, 'openURL') + const { getByTestId } = render() + + act(() => { + fireEvent.press(getByTestId('link-mail')) + }) + + expect(spy).toBeCalledWith(legalAddition.href) + spy.mockReset() + spy.mockRestore() + }) }) diff --git a/src/components/Settings/__tests__/__snapshots__/LegalList.test.tsx.snap b/src/components/Settings/__tests__/__snapshots__/LegalList.test.tsx.snap index cf25e3a..9742b96 100644 --- a/src/components/Settings/__tests__/__snapshots__/LegalList.test.tsx.snap +++ b/src/components/Settings/__tests__/__snapshots__/LegalList.test.tsx.snap @@ -126,5 +126,47 @@ exports[` renders correctly 1`] = ` + + + + Anfrage stellen + + + + `; diff --git a/src/data/settings.ts b/src/data/settings.ts new file mode 100644 index 0000000..7999a13 --- /dev/null +++ b/src/data/settings.ts @@ -0,0 +1,27 @@ +import { Legal, LegalAddition, Setting } from '@models/settings' + +export const legalScreens: Legal[] = [ + { + id: 79, + title: { rendered: 'Impressum' }, + content: { rendered: '' }, + }, + { + id: 1105, + title: { rendered: 'Datenschutz' }, + content: { rendered: '' }, + }, +] + +export const legalAddition: LegalAddition = { + id: 1, + name: 'Anfrage stellen', + href: 'mailto:anfrage@convention-net.de', +} + +export const settingArray: Setting[] = [ + { + id: 1, + name: 'Push Mitteilungen', + }, +] diff --git a/src/models/legal.d.ts b/src/models/legal.d.ts deleted file mode 100644 index f94fad2..0000000 --- a/src/models/legal.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export declare interface Legal { - id: number - title: { - rendered: string - } - content: { - rendered: string - } -} diff --git a/src/models/setting.d.ts b/src/models/setting.d.ts deleted file mode 100644 index 9953cf6..0000000 --- a/src/models/setting.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare interface Setting { - id: number - name: string -} diff --git a/src/models/settings.d.ts b/src/models/settings.d.ts new file mode 100644 index 0000000..308846f --- /dev/null +++ b/src/models/settings.d.ts @@ -0,0 +1,20 @@ +export declare interface Setting { + id: number + name: string +} + +export declare interface Legal { + id: number + title: { + rendered: string + } + content: { + rendered: string + } +} + +export declare interface LegalAddition { + id: number + name: string + href: string +} diff --git a/src/screens/SettingsScreen.tsx b/src/screens/SettingsScreen.tsx index d10b00b..261c867 100644 --- a/src/screens/SettingsScreen.tsx +++ b/src/screens/SettingsScreen.tsx @@ -6,22 +6,17 @@ import { ScrollView, StyleSheet, View } from 'react-native' import LegalList from '@components/Settings/LegalList' import SocialList from '@components/Settings/SocialList' import { socialMediaChannels } from '@data/social' -import { Setting } from '@models/setting' -import { Legal } from '@models/legal' +import { legalScreens, settingArray } from '@data/settings' import { defaultStyles, DefaultStyles } from '@styles/theme' -export const settingArray: Setting[] = [{ id: 1, name: 'Push Mitteilungen' }] - -const legalScreens: Legal[] = [ - { id: 79, title: { rendered: 'Impressum' }, content: { rendered: '' } }, - { id: 1105, title: { rendered: 'Datenschutz' }, content: { rendered: '' } }, -] - const SettingsScreen: React.FC = () => { return ( - {/* */} + {/* + // TODO: Reactivate this setting after adding the push notifications + + */}