skolplattformen-backup/packages/app/components/modalWebView.component.tsx

93 lines
2.3 KiB
TypeScript
Raw Normal View History

import { useApi } from '@skolplattformen/api-hooks'
2021-02-20 08:38:08 +00:00
import { Text } from '@ui-kitten/components'
2021-01-26 11:02:24 +00:00
import URI from 'jsuri'
2021-03-11 16:45:45 +00:00
import React, { useEffect, useState } from 'react'
2021-02-20 08:38:08 +00:00
import { Modal, StyleSheet, TouchableOpacity, View } from 'react-native'
import { SafeAreaView } from 'react-native-safe-area-context'
import { WebView } from 'react-native-webview'
2021-02-20 08:38:08 +00:00
import { CloseIcon } from './icon.component'
2021-01-26 11:02:24 +00:00
2021-03-26 08:38:15 +00:00
interface ModalWebViewProps {
url: string
sharedCookiesEnabled: boolean
2021-03-26 08:38:15 +00:00
onClose: () => void
}
export const ModalWebView = ({
url,
onClose,
sharedCookiesEnabled,
}: ModalWebViewProps) => {
2021-02-20 08:38:08 +00:00
const [modalVisible, setModalVisible] = React.useState(true)
const { api } = useApi()
2021-03-11 16:45:45 +00:00
const [headers, setHeaders] = useState()
useEffect(() => {
const getHeaders = async (urlToGetSessionFor: string) => {
if (sharedCookiesEnabled) return
const { headers: newHeaders } = await api.getSession(urlToGetSessionFor)
setHeaders(newHeaders)
}
getHeaders(url)
}, [url, sharedCookiesEnabled, api])
2021-03-11 16:45:45 +00:00
2021-01-26 11:02:24 +00:00
const uri = new URI(url)
const closeModal = () => {
setModalVisible(false)
onClose()
}
2021-01-26 11:02:24 +00:00
return (
<Modal
animationType="slide"
statusBarTranslucent={true}
visible={modalVisible}
2021-02-20 08:38:08 +00:00
onRequestClose={closeModal}
>
2021-01-26 11:02:24 +00:00
<SafeAreaView style={styles.container}>
<View style={styles.headerWrapper}>
<View style={styles.header}>
<Text category="s1">{uri.host()}</Text>
<TouchableOpacity onPress={closeModal}>
2021-02-20 08:38:08 +00:00
<CloseIcon style={styles.icon} fill="#333333" />
2021-01-26 11:02:24 +00:00
</TouchableOpacity>
</View>
</View>
{(headers || sharedCookiesEnabled) && (
<WebView
style={styles.webview}
source={{ uri: url, headers }}
sharedCookiesEnabled={sharedCookiesEnabled}
/>
2021-03-11 16:45:45 +00:00
)}
2021-01-26 11:02:24 +00:00
</SafeAreaView>
</Modal>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
2021-01-26 11:02:24 +00:00
},
headerWrapper: {
backgroundColor: '#333333',
padding: 5,
},
header: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
paddingHorizontal: 10,
paddingVertical: 4,
backgroundColor: '#ffffff',
borderRadius: 5,
},
icon: {
width: 30,
height: 30,
},
webview: {},
2021-01-26 11:02:24 +00:00
})