Skip to content

Commit

Permalink
feat(settings): add a link to write an email to the convertion team
Browse files Browse the repository at this point in the history
resolves #51
  • Loading branch information
mheob committed Dec 8, 2020
1 parent d201940 commit 82c1cbb
Show file tree
Hide file tree
Showing 10 changed files with 125 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/__mocks__/settings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Setting } from '@models/setting'
import { Setting } from '@models/settings'

export const settingItem: Setting = { id: 1, name: 'Push Mitteilungen' }

Expand Down
17 changes: 14 additions & 3 deletions src/components/Settings/LegalList.tsx
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -17,6 +19,8 @@ interface Props {
const LegalList: React.FC<Props> = ({ data }) => {
const navigation = useNavigation<StackNavigationProp<SettingsStackParamList>>()

const linkIcon = () => <Ionicons name="ios-arrow-round-forward" size={20} color={colors.primaryColor} />

return (
<View style={styles.listContainer}>
{data.map(item => (
Expand All @@ -27,10 +31,17 @@ const LegalList: React.FC<Props> = ({ data }) => {
>
<View style={styles.listItemContainer}>
<HTML baseFontStyle={styles.text} html={item.title.rendered} />
<Ionicons name="ios-arrow-round-forward" size={20} color={colors.primaryColor} />
{linkIcon()}
</View>
</Touchable>
))}

<Touchable onPress={() => Linking.openURL(legalAddition.href)} testID="link-mail">
<View style={styles.listItemContainer}>
<Text>{legalAddition.name}</Text>
{linkIcon()}
</View>
</Touchable>
</View>
)
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/Settings/SettingsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
15 changes: 15 additions & 0 deletions src/components/Settings/__tests__/LegalList.test.tsx
Original file line number Diff line number Diff line change
@@ -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()
Expand Down Expand Up @@ -31,4 +33,17 @@ describe('<LegalList />', () => {

expect(mockedNavigate).toHaveBeenCalledTimes(1)
})

it('should call the mailto link', () => {
const spy = jest.spyOn(Linking, 'openURL')
const { getByTestId } = render(<LegalList data={legalArray} />)

act(() => {
fireEvent.press(getByTestId('link-mail'))
})

expect(spy).toBeCalledWith(legalAddition.href)
spy.mockReset()
spy.mockRestore()
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -126,5 +126,47 @@ exports[`<LegalList /> renders correctly 1`] = `
<Text />
</View>
</View>
<View
accessible={true}
focusable={true}
onClick={[Function]}
onResponderGrant={[Function]}
onResponderMove={[Function]}
onResponderRelease={[Function]}
onResponderTerminate={[Function]}
onResponderTerminationRequest={[Function]}
onStartShouldSetResponder={[Function]}
style={
Object {
"opacity": 1,
}
}
testID="link-mail"
>
<View
style={
Object {
"borderBottomColor": "#dfe3e8",
"borderBottomWidth": 1,
"flexDirection": "row",
"justifyContent": "space-between",
"paddingHorizontal": 15,
"paddingVertical": 10,
}
}
>
<Text
style={
Object {
"color": "#333333",
"fontFamily": "sans",
}
}
>
Anfrage stellen
</Text>
<Text />
</View>
</View>
</View>
`;
27 changes: 27 additions & 0 deletions src/data/settings.ts
Original file line number Diff line number Diff line change
@@ -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',
},
]
9 changes: 0 additions & 9 deletions src/models/legal.d.ts

This file was deleted.

4 changes: 0 additions & 4 deletions src/models/setting.d.ts

This file was deleted.

20 changes: 20 additions & 0 deletions src/models/settings.d.ts
Original file line number Diff line number Diff line change
@@ -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
}
15 changes: 5 additions & 10 deletions src/screens/SettingsScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<View style={styles.container}>
<ScrollView>
{/* <SettingsList data={settingArray} /> */}
{/*
// TODO: Reactivate this setting after adding the push notifications
<SettingsList data={settingArray} />
*/}
<LegalList data={legalScreens} />
<SocialList data={socialMediaChannels} />
</ScrollView>
Expand Down

0 comments on commit 82c1cbb

Please sign in to comment.