diff options
author | Patroll <6214736+P4tr0ll@users.noreply.github.com> | 2023-10-04 19:31:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-04 10:31:43 -0700 |
commit | 9278822088d212c9bee6a40a6a8b773bc482242d (patch) | |
tree | 72751140ef2bda744a89fb457fa9398b72cae9ab /src/view/shell | |
parent | 2ba0c6a711a5e33f5dd0cdde23123cb336c8f991 (diff) | |
download | voidsky-9278822088d212c9bee6a40a6a8b773bc482242d.tar.zst |
Fix invite codes flash on desktop, use loading placeholder (#1591)
* Fix invite codes flashing untrue value before loaded * Add loading placeholder for right nav invites
Diffstat (limited to 'src/view/shell')
-rw-r--r-- | src/view/shell/Drawer.tsx | 54 | ||||
-rw-r--r-- | src/view/shell/desktop/RightNav.tsx | 72 |
2 files changed, 71 insertions, 55 deletions
diff --git a/src/view/shell/Drawer.tsx b/src/view/shell/Drawer.tsx index 51a846c4a..48341170c 100644 --- a/src/view/shell/Drawer.tsx +++ b/src/view/shell/Drawer.tsx @@ -426,32 +426,34 @@ const InviteCodes = observer(function InviteCodesImpl({ store.shell.openModal({name: 'invite-codes'}) }, [store, track]) return ( - <TouchableOpacity - testID="menuItemInviteCodes" - style={[styles.inviteCodes, style]} - onPress={onPress} - accessibilityRole="button" - accessibilityLabel={ - invitesAvailable === 1 - ? 'Invite codes: 1 available' - : `Invite codes: ${invitesAvailable} available` - } - accessibilityHint="Opens list of invite codes"> - <FontAwesomeIcon - icon="ticket" - style={[ - styles.inviteCodesIcon, - store.me.invitesAvailable > 0 ? pal.link : pal.textLight, - ]} - size={18} - /> - <Text - type="lg-medium" - style={store.me.invitesAvailable > 0 ? pal.link : pal.textLight}> - {formatCount(store.me.invitesAvailable)} invite{' '} - {pluralize(store.me.invitesAvailable, 'code')} - </Text> - </TouchableOpacity> + store.me.invitesAvailable !== null && ( + <TouchableOpacity + testID="menuItemInviteCodes" + style={[styles.inviteCodes, style]} + onPress={onPress} + accessibilityRole="button" + accessibilityLabel={ + invitesAvailable === 1 + ? 'Invite codes: 1 available' + : `Invite codes: ${invitesAvailable} available` + } + accessibilityHint="Opens list of invite codes"> + <FontAwesomeIcon + icon="ticket" + style={[ + styles.inviteCodesIcon, + store.me.invitesAvailable > 0 ? pal.link : pal.textLight, + ]} + size={18} + /> + <Text + type="lg-medium" + style={store.me.invitesAvailable > 0 ? pal.link : pal.textLight}> + {formatCount(store.me.invitesAvailable)} invite{' '} + {pluralize(store.me.invitesAvailable, 'code')} + </Text> + </TouchableOpacity> + ) ) }) diff --git a/src/view/shell/desktop/RightNav.tsx b/src/view/shell/desktop/RightNav.tsx index 84d7d7854..f0e986bf4 100644 --- a/src/view/shell/desktop/RightNav.tsx +++ b/src/view/shell/desktop/RightNav.tsx @@ -7,6 +7,7 @@ import {DesktopSearch} from './Search' import {DesktopFeeds} from './Feeds' import {Text} from 'view/com/util/text/Text' import {TextLink} from 'view/com/util/Link' +import {LoadingPlaceholder} from 'view/com/util/LoadingPlaceholder' import {FEEDBACK_FORM_URL, HELP_DESK_URL} from 'lib/constants' import {s} from 'lib/styles' import {useStores} from 'state/index' @@ -89,32 +90,41 @@ const InviteCodes = observer(function InviteCodesImpl() { const onPress = React.useCallback(() => { store.shell.openModal({name: 'invite-codes'}) }, [store]) + return ( - <TouchableOpacity - style={[styles.inviteCodes, pal.border]} - onPress={onPress} - accessibilityRole="button" - accessibilityLabel={ - invitesAvailable === 1 - ? 'Invite codes: 1 available' - : `Invite codes: ${invitesAvailable} available` - } - accessibilityHint="Opens list of invite codes"> - <FontAwesomeIcon - icon="ticket" - style={[ - styles.inviteCodesIcon, - store.me.invitesAvailable > 0 ? pal.link : pal.textLight, - ]} - size={16} - /> - <Text - type="md-medium" - style={store.me.invitesAvailable > 0 ? pal.link : pal.textLight}> - {formatCount(store.me.invitesAvailable)} invite{' '} - {pluralize(store.me.invitesAvailable, 'code')} available - </Text> - </TouchableOpacity> + <View style={[styles.separator, pal.border]}> + {store.me.invitesAvailable === null ? ( + <View style={[s.p10]}> + <LoadingPlaceholder width={186} height={32} style={[styles.br40]} /> + </View> + ) : ( + <TouchableOpacity + style={[styles.inviteCodes]} + onPress={onPress} + accessibilityRole="button" + accessibilityLabel={ + invitesAvailable === 1 + ? 'Invite codes: 1 available' + : `Invite codes: ${invitesAvailable} available` + } + accessibilityHint="Opens list of invite codes"> + <FontAwesomeIcon + icon="ticket" + style={[ + styles.inviteCodesIcon, + store.me.invitesAvailable > 0 ? pal.link : pal.textLight, + ]} + size={16} + /> + <Text + type="md-medium" + style={store.me.invitesAvailable > 0 ? pal.link : pal.textLight}> + {formatCount(store.me.invitesAvailable)} invite{' '} + {pluralize(store.me.invitesAvailable, 'code')} available + </Text> + </TouchableOpacity> + )} + </View> ) }) @@ -131,16 +141,20 @@ const styles = StyleSheet.create({ message: { paddingVertical: 18, - paddingHorizontal: 10, + paddingHorizontal: 12, }, messageLine: { marginBottom: 10, }, - inviteCodes: { + separator: { borderTopWidth: 1, - paddingHorizontal: 16, - paddingVertical: 12, + }, + br40: {borderRadius: 40}, + + inviteCodes: { + paddingHorizontal: 12, + paddingVertical: 16, flexDirection: 'row', alignItems: 'center', }, |