diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-12-12 14:54:56 -0600 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-12-12 14:54:56 -0600 |
commit | b2239228e7ff5e2c9d6506803ffc12f3ef04378d (patch) | |
tree | c6307afa66929fb58729045f35d563ca44134faa /src/view/com/lightbox/Lightbox.tsx | |
parent | b32bf69be7879cb9d321d937d1f2410412bbab7a (diff) | |
download | voidsky-b2239228e7ff5e2c9d6506803ffc12f3ef04378d.tar.zst |
Add profile image lightbox
Diffstat (limited to 'src/view/com/lightbox/Lightbox.tsx')
-rw-r--r-- | src/view/com/lightbox/Lightbox.tsx | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/view/com/lightbox/Lightbox.tsx b/src/view/com/lightbox/Lightbox.tsx new file mode 100644 index 000000000..9432f0151 --- /dev/null +++ b/src/view/com/lightbox/Lightbox.tsx @@ -0,0 +1,62 @@ +import React from 'react' +import {StyleSheet, TouchableOpacity, View} from 'react-native' +import {observer} from 'mobx-react-lite' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import {useStores} from '../../../state' + +import * as models from '../../../state/models/shell-ui' + +import * as ProfileImageLightbox from './ProfileImage' + +export const Lightbox = observer(function Lightbox() { + const store = useStores() + + const onClose = () => { + store.shell.closeLightbox() + } + + if (!store.shell.isLightboxActive) { + return <View /> + } + + let element + if (store.shell.activeLightbox?.name === 'profile-image') { + element = ( + <ProfileImageLightbox.Component + {...(store.shell.activeLightbox as models.ProfileImageLightbox)} + /> + ) + } else { + return <View /> + } + + return ( + <> + <TouchableOpacity style={styles.bg} onPress={onClose} /> + <TouchableOpacity style={styles.xIcon} onPress={onClose}> + <FontAwesomeIcon icon="x" size={24} style={{color: '#fff'}} /> + </TouchableOpacity> + {element} + </> + ) +}) + +const styles = StyleSheet.create({ + bg: { + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0, + backgroundColor: '#000', + opacity: 0.9, + }, + xIcon: { + position: 'absolute', + top: 30, + right: 30, + }, + container: { + position: 'absolute', + }, +}) |