feat(native-participants-pane) ui fixes
This commit is contained in:
parent
eb1add681f
commit
e7280e5040
|
@ -1108,6 +1108,7 @@
|
||||||
"passwordField": "Enter meeting password",
|
"passwordField": "Enter meeting password",
|
||||||
"passwordJoinButton": "Join",
|
"passwordJoinButton": "Join",
|
||||||
"reject": "Reject",
|
"reject": "Reject",
|
||||||
|
"rejectAll": "Reject all",
|
||||||
"toggleLabel": "Enable lobby"
|
"toggleLabel": "Enable lobby"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,17 +31,17 @@ export const LobbyParticipantItem = ({ participant: p }: Props) => {
|
||||||
participant = { p }
|
participant = { p }
|
||||||
videoMuteState = { MediaState.ForceMuted }>
|
videoMuteState = { MediaState.ForceMuted }>
|
||||||
<Button
|
<Button
|
||||||
labelStyle = { styles.participantActionButtonText }
|
labelStyle = { styles.participantActionsButtonText }
|
||||||
mode = 'contained'
|
mode = 'contained'
|
||||||
onPress = { admit }
|
onPress = { admit }
|
||||||
style = { styles.participantActionButton }>
|
style = { styles.participantActionsButtonAdmit }>
|
||||||
{t('lobby.admit')}
|
{t('lobby.admit')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
labelStyle = { styles.participantActionButtonText }
|
labelStyle = { styles.participantActionsButtonText }
|
||||||
mode = 'contained'
|
mode = 'contained'
|
||||||
onPress = { reject }
|
onPress = { reject }
|
||||||
style = { styles.participantActionButton }>
|
style = { styles.participantActionsButtonReject }>
|
||||||
{t('lobby.reject')}
|
{t('lobby.reject')}
|
||||||
</Button>
|
</Button>
|
||||||
</ParticipantItem>
|
</ParticipantItem>
|
||||||
|
|
|
@ -13,20 +13,20 @@ export const LobbyParticipantList = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<View style = { styles.lobbyList }>
|
||||||
<View style = { styles.lobbyListContainer } >
|
<View style = { styles.lobbyListDetails } >
|
||||||
<Text style = { styles.lobbyListDescription }>
|
<Text style = { styles.lobbyListDescription }>
|
||||||
{t('participantsPane.headings.lobby',
|
{t('participantsPane.headings.lobby',
|
||||||
{ count: participants.length })}
|
{ count: participants.length })}
|
||||||
</Text>
|
</Text>
|
||||||
<View style = { styles.lobbyListActions }>
|
<View style = { styles.lobbyListActions }>
|
||||||
<Button
|
<Button
|
||||||
labelStyle = { styles.allParticipantActionButton }
|
labelStyle = { styles.allParticipantActionsButton }
|
||||||
mode = 'text'>
|
mode = 'text'>
|
||||||
{t('lobby.admitAll')}
|
{t('lobby.admitAll')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
labelStyle = { styles.allParticipantActionButton }
|
labelStyle = { styles.allParticipantActionsButton }
|
||||||
mode = 'text'>
|
mode = 'text'>
|
||||||
{t('lobby.rejectAll')}
|
{t('lobby.rejectAll')}
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -37,6 +37,6 @@ export const LobbyParticipantList = () => {
|
||||||
key = { p.id }
|
key = { p.id }
|
||||||
participant = { p } />)
|
participant = { p } />)
|
||||||
)}
|
)}
|
||||||
</>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -80,13 +80,13 @@ function ParticipantItem({
|
||||||
</Text>
|
</Text>
|
||||||
{ p.local ? <Text style = { styles.isLocal }>({t('chat.you')})</Text> : null }
|
{ p.local ? <Text style = { styles.isLocal }>({t('chat.you')})</Text> : null }
|
||||||
</View>
|
</View>
|
||||||
{ p.local ? <Text style = { styles.participantActions }> ({ children }) </Text> : null }
|
|
||||||
<View style = { styles.participantStatesContainer } >
|
<View style = { styles.participantStatesContainer } >
|
||||||
{p.raisedHand && <RaisedHandIndicator />}
|
{p.raisedHand && <RaisedHandIndicator />}
|
||||||
<View style = { styles.participantStateVideo }>{VideoStateIcons[videoMuteState]}</View>
|
<View style = { styles.participantStateVideo }>{VideoStateIcons[videoMuteState]}</View>
|
||||||
<View style = { styles.participantStateAudio }>{AudioStateIcons[audioMuteState]}</View>
|
<View style = { styles.participantStateAudio }>{AudioStateIcons[audioMuteState]}</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
{ p.local ? <Text style = { styles.participantActions }> { children } </Text> : null }
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ import { View } from 'react-native';
|
||||||
import { Button, withTheme } from 'react-native-paper';
|
import { Button, withTheme } from 'react-native-paper';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
|
|
||||||
|
import { hideDialog } from '../../../base/dialog';
|
||||||
import { Icon, IconClose, IconHorizontalPoints } from '../../../base/icons';
|
import { Icon, IconClose, IconHorizontalPoints } from '../../../base/icons';
|
||||||
import { JitsiModal } from '../../../base/modal';
|
import { JitsiModal } from '../../../base/modal';
|
||||||
import { close } from '../../actions.any';
|
|
||||||
|
|
||||||
import { LobbyParticipantList } from './LobbyParticipantList';
|
import { LobbyParticipantList } from './LobbyParticipantList';
|
||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
|
@ -33,7 +33,7 @@ type Props = {
|
||||||
function ParticipantsPane({ theme }: Props) {
|
function ParticipantsPane({ theme }: Props) {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const closePane = useCallback(
|
const closePane = useCallback(
|
||||||
() => dispatch(close()),
|
() => dispatch(hideDialog()),
|
||||||
[ dispatch ]);
|
[ dispatch ]);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { palette } = theme;
|
const { palette } = theme;
|
||||||
|
@ -64,9 +64,7 @@ function ParticipantsPane({ theme }: Props) {
|
||||||
<View style = { styles.footer }>
|
<View style = { styles.footer }>
|
||||||
<Button
|
<Button
|
||||||
color = { palette.text01 }
|
color = { palette.text01 }
|
||||||
compact = { true }
|
|
||||||
contentStyle = { styles.muteAllContent }
|
contentStyle = { styles.muteAllContent }
|
||||||
onPress = { closePane }
|
|
||||||
style = { styles.muteAllButton } >
|
style = { styles.muteAllButton } >
|
||||||
{ t('participantsPane.actions.muteAll') }
|
{ t('participantsPane.actions.muteAll') }
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -79,7 +77,6 @@ function ParticipantsPane({ theme }: Props) {
|
||||||
src = { IconHorizontalPoints } />)
|
src = { IconHorizontalPoints } />)
|
||||||
}
|
}
|
||||||
mode = 'contained'
|
mode = 'contained'
|
||||||
onPress = { closePane }
|
|
||||||
style = { styles.moreButton }
|
style = { styles.moreButton }
|
||||||
theme = {{
|
theme = {{
|
||||||
colors: {
|
colors: {
|
||||||
|
|
|
@ -38,17 +38,4 @@ class ParticipantsPaneButton extends AbstractButton<Props, *> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export default translate(connect()(ParticipantsPaneButton));
|
||||||
* Maps part of the redux state to the component's props.
|
|
||||||
*
|
|
||||||
* @param {Object} state - The redux store/state.
|
|
||||||
* @returns {Props}
|
|
||||||
*/
|
|
||||||
function mapStateToProps(state: Object) {
|
|
||||||
|
|
||||||
return {
|
|
||||||
state
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default translate(connect(mapStateToProps)(ParticipantsPaneButton));
|
|
||||||
|
|
|
@ -1,19 +1,9 @@
|
||||||
import BaseTheme from '../../../base/ui/components/BaseTheme.native';
|
import BaseTheme from '../../../base/ui/components/BaseTheme.native';
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The style for participant actions.
|
|
||||||
*/
|
|
||||||
const participantActions = {
|
|
||||||
alignItems: 'center',
|
|
||||||
zIndex: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The style for participant states.
|
* The style for participant states.
|
||||||
*/
|
*/
|
||||||
const participantState = {
|
const participantState = {
|
||||||
alignItems: 'center',
|
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
justifyContent: 'center'
|
justifyContent: 'center'
|
||||||
};
|
};
|
||||||
|
@ -35,7 +25,6 @@ const container = {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
height: 72,
|
|
||||||
paddingRight: 16,
|
paddingRight: 16,
|
||||||
width: '100%'
|
width: '100%'
|
||||||
};
|
};
|
||||||
|
@ -77,17 +66,19 @@ const buttonContent = {
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
participantActions: {
|
participantActions: {
|
||||||
...participantActions
|
position: 'absolute',
|
||||||
|
right: 0,
|
||||||
|
zIndex: 1
|
||||||
},
|
},
|
||||||
|
|
||||||
participantActionsHover: {
|
participantActionsHover: {
|
||||||
...participantActions,
|
|
||||||
backgroundColor: '#292929',
|
backgroundColor: '#292929',
|
||||||
bottom: 1,
|
bottom: 1,
|
||||||
display: 'none',
|
display: 'none',
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
right: 8,
|
right: 8,
|
||||||
top: 0,
|
top: 0,
|
||||||
|
zIndex: 1,
|
||||||
after: {
|
after: {
|
||||||
backgroundColor: 'linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, #292929 100%)',
|
backgroundColor: 'linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, #292929 100%)',
|
||||||
content: '',
|
content: '',
|
||||||
|
@ -103,31 +94,40 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
participantActionsPermanent: {
|
participantActionsPermanent: {
|
||||||
...participantActions,
|
display: 'flex',
|
||||||
display: 'flex'
|
zIndex: 1
|
||||||
},
|
},
|
||||||
|
|
||||||
participantActionButton: {
|
participantActionsButtonAdmit: {
|
||||||
backgroundColor: BaseTheme.palette.action01,
|
backgroundColor: BaseTheme.palette.action01,
|
||||||
borderRadius: BaseTheme.shape.borderRadius
|
borderRadius: BaseTheme.shape.borderRadius,
|
||||||
|
height: 32
|
||||||
},
|
},
|
||||||
|
|
||||||
participantActionButtonText: {
|
participantActionsButtonReject: {
|
||||||
...BaseTheme.typography.labelRegular
|
backgroundColor: BaseTheme.palette.action01,
|
||||||
|
borderRadius: BaseTheme.shape.borderRadius,
|
||||||
|
height: 32
|
||||||
},
|
},
|
||||||
|
|
||||||
allParticipantActionButton: {
|
participantActionsButtonText: {
|
||||||
|
},
|
||||||
|
|
||||||
|
allParticipantActionsButton: {
|
||||||
...BaseTheme.typography.labelRegular,
|
...BaseTheme.typography.labelRegular,
|
||||||
color: BaseTheme.palette.action01
|
color: BaseTheme.palette.action01,
|
||||||
|
textTransform: 'capitalize'
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
participantContainer: {
|
participantContainer: {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
|
borderBottomColor: BaseTheme.palette.field01Hover,
|
||||||
|
borderBottomWidth: 2,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
marginRight: BaseTheme.spacing[6],
|
height: 64,
|
||||||
paddingLeft: 8,
|
width: '100%'
|
||||||
paddingRight: 8
|
|
||||||
},
|
},
|
||||||
|
|
||||||
participantContent: {
|
participantContent: {
|
||||||
|
@ -135,19 +135,16 @@ export default {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
flexWrap: 'wrap',
|
flexWrap: 'wrap',
|
||||||
height: 64,
|
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
paddingLeft: BaseTheme.spacing[2],
|
|
||||||
paddingTop: BaseTheme.spacing[4],
|
|
||||||
width: '100%'
|
width: '100%'
|
||||||
},
|
},
|
||||||
|
|
||||||
participantNameContainer: {
|
participantNameContainer: {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
marginRight: BaseTheme.spacing[3],
|
marginLeft: BaseTheme.spacing[2],
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
width: '50%'
|
width: 232
|
||||||
},
|
},
|
||||||
|
|
||||||
participantName: {
|
participantName: {
|
||||||
|
@ -165,9 +162,7 @@ export default {
|
||||||
|
|
||||||
participantStatesContainer: {
|
participantStatesContainer: {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row'
|
||||||
justifyItems: 'space-between',
|
|
||||||
marginLeft: 'auto'
|
|
||||||
},
|
},
|
||||||
|
|
||||||
participantStateAudio: {
|
participantStateAudio: {
|
||||||
|
@ -175,8 +170,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
participantStateVideo: {
|
participantStateVideo: {
|
||||||
...participantState,
|
...participantState
|
||||||
marginRight: 8
|
|
||||||
},
|
},
|
||||||
|
|
||||||
raisedHandIndicator: {
|
raisedHandIndicator: {
|
||||||
|
@ -191,20 +185,26 @@ export default {
|
||||||
...flexContent,
|
...flexContent,
|
||||||
top: 4
|
top: 4
|
||||||
},
|
},
|
||||||
|
lobbyList: {
|
||||||
|
marginLeft: 16,
|
||||||
|
marginRight: 16
|
||||||
|
},
|
||||||
|
|
||||||
|
lobbyListDetails: {
|
||||||
|
alignItems: 'center',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'row',
|
||||||
|
width: '100%'
|
||||||
|
},
|
||||||
|
|
||||||
lobbyListDescription: {
|
lobbyListDescription: {
|
||||||
color: BaseTheme.palette.text01,
|
color: BaseTheme.palette.text01,
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
padding: BaseTheme.spacing[2]
|
width: 188
|
||||||
},
|
|
||||||
|
|
||||||
lobbyListContainer: {
|
|
||||||
...container
|
|
||||||
},
|
},
|
||||||
|
|
||||||
lobbyListActions: {
|
lobbyListActions: {
|
||||||
flexDirection: 'row',
|
flexDirection: 'row'
|
||||||
marginLeft: 'auto'
|
|
||||||
},
|
},
|
||||||
|
|
||||||
header: {
|
header: {
|
||||||
|
|
Loading…
Reference in New Issue