Page MenuHomePhabricator

D13262.id45267.diff
No OneTemporary

D13262.id45267.diff

diff --git a/native/profile/linked-devices-bottom-sheet.react.js b/native/profile/linked-devices-bottom-sheet.react.js
--- a/native/profile/linked-devices-bottom-sheet.react.js
+++ b/native/profile/linked-devices-bottom-sheet.react.js
@@ -27,6 +27,7 @@
export type LinkedDevicesBottomSheetParams = {
+deviceID: string,
+ +shouldDisplayRemoveButton: boolean,
};
type Props = {
@@ -38,7 +39,7 @@
const {
navigation,
route: {
- params: { deviceID },
+ params: { deviceID, shouldDisplayRemoveButton },
},
} = props;
@@ -133,6 +134,18 @@
);
}, [insets.bottom, setContentHeight]);
+ let removeDeviceButton;
+ if (shouldDisplayRemoveButton) {
+ removeDeviceButton = (
+ <Button
+ style={styles.removeButtonContainer}
+ onPress={confirmDeviceRemoval}
+ >
+ <Text style={styles.removeButtonText}>Remove device</Text>
+ </Button>
+ );
+ }
+
return (
<BottomSheet ref={bottomSheetRef} onClosed={goBack}>
<View
@@ -140,12 +153,7 @@
ref={removeDeviceContainerRef}
onLayout={onLayout}
>
- <Button
- style={styles.removeButtonContainer}
- onPress={confirmDeviceRemoval}
- >
- <Text style={styles.removeButtonText}>Remove device</Text>
- </Button>
+ {removeDeviceButton}
</View>
</BottomSheet>
);
diff --git a/native/profile/linked-devices-list-item.react.js b/native/profile/linked-devices-list-item.react.js
--- a/native/profile/linked-devices-list-item.react.js
+++ b/native/profile/linked-devices-list-item.react.js
@@ -19,10 +19,17 @@
+platformDetails: ?IdentityPlatformDetails,
+isPrimary: boolean,
+isThisDevice: boolean,
+ +shouldAllowDeviceRemoval: boolean,
};
function LinkedDevicesListItem(props: Props): React.Node {
- const { deviceID, platformDetails, isPrimary, isThisDevice } = props;
+ const {
+ deviceID,
+ platformDetails,
+ isPrimary,
+ isThisDevice,
+ shouldAllowDeviceRemoval,
+ } = props;
const styles = useStyles(unboundStyles);
const colors = useColors();
@@ -34,9 +41,10 @@
name: LinkedDevicesBottomSheetRouteName,
params: {
deviceID,
+ shouldDisplayRemoveButton: shouldAllowDeviceRemoval,
},
});
- }, [deviceID, navigate]);
+ }, [deviceID, navigate, shouldAllowDeviceRemoval]);
const deviceType = platformDetails?.deviceType;
diff --git a/native/profile/linked-devices.react.js b/native/profile/linked-devices.react.js
--- a/native/profile/linked-devices.react.js
+++ b/native/profile/linked-devices.react.js
@@ -24,17 +24,23 @@
item,
index,
thisDeviceID,
+ allowEdits,
}: {
+item: DeviceIDAndPlatformDetails,
+index: number,
+thisDeviceID: ?string,
+ +allowEdits: boolean,
...
}) {
+ const isPrimary = index === 0;
+ const isThisDevice = item.deviceID === thisDeviceID;
+ const shouldAllowDeviceRemoval = allowEdits && !isPrimary && !isThisDevice;
return (
<LinkedDevicesListItem
{...item}
isPrimary={index === 0}
isThisDevice={item.deviceID === thisDeviceID}
+ shouldAllowDeviceRemoval={shouldAllowDeviceRemoval}
/>
);
}
@@ -48,18 +54,22 @@
const userDevicesInfos: $ReadOnlyArray<DeviceIDAndPlatformDetails> =
useSelector(getOwnPeerDevices);
+ const primaryDeviceID = userDevicesInfos[0].deviceID;
const identityContext = React.useContext(IdentityClientContext);
invariant(identityContext, 'identity context not set');
const { getAuthMetadata } = identityContext;
const [thisDeviceID, setThisDeviceID] = React.useState<?string>(null);
+ const [shouldAllowEdits, setShouldAllowEdits] =
+ React.useState<boolean>(false);
React.useEffect(() => {
void (async () => {
const { deviceID } = await getAuthMetadata();
setThisDeviceID(deviceID);
+ setShouldAllowEdits(deviceID === primaryDeviceID);
})();
- }, [getAuthMetadata]);
+ }, [getAuthMetadata, primaryDeviceID]);
const separatorComponent = React.useCallback(
() => <View style={styles.separator} />,
@@ -73,7 +83,12 @@
<FlatList
data={userDevicesInfos}
renderItem={({ item, index }) =>
- renderDeviceListItem({ item, index, thisDeviceID })
+ renderDeviceListItem({
+ item,
+ index,
+ thisDeviceID,
+ allowEdits: shouldAllowEdits,
+ })
}
keyExtractor={keyExtractor}
contentContainerStyle={styles.deviceListContentContainer}
@@ -82,12 +97,13 @@
</View>
),
[
- separatorComponent,
- userDevicesInfos,
styles.container,
styles.header,
styles.deviceListContentContainer,
+ userDevicesInfos,
+ separatorComponent,
thisDeviceID,
+ shouldAllowEdits,
],
);

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 23, 5:29 PM (14 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2571745
Default Alt Text
D13262.id45267.diff (4 KB)

Event Timeline