Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#35715 workspace member details page #37715

Merged
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
35f5618
basic member details page added
burczu Mar 1, 2024
be52759
passing personal details, policy members and routes to details page
burczu Mar 5, 2024
69ee8a1
passing backTo parameter to the details route
burczu Mar 5, 2024
210d294
showing member details page title from its personal details
burczu Mar 5, 2024
8e0f762
showing avatar added
burczu Mar 5, 2024
6dc39ce
lint and prettier fixes
burczu Mar 5, 2024
9409582
remove from workspace button added
burczu Mar 5, 2024
ec5458b
removing member implementation added
burczu Mar 5, 2024
d50d4a4
Merge branch 'main' into feature/35715-workspace-member-details-page
burczu Mar 6, 2024
d916cae
after main merge fix
burczu Mar 6, 2024
8000440
role and profile buttons added
burczu Mar 6, 2024
e29e0b2
lint and prettier fixes
burczu Mar 6, 2024
b37abfe
role selection modal added
burczu Mar 6, 2024
f583fd4
role selection list added
burczu Mar 6, 2024
f24deca
changing role on the role selection modal added
burczu Mar 6, 2024
27f7917
policy name added as subtitle of the member detail page
burczu Mar 6, 2024
7a91ec8
transform scale helper introduced
burczu Mar 6, 2024
6775986
unnecessary padding removed
burczu Mar 6, 2024
07280c7
back to handled properly
burczu Mar 6, 2024
aa11bf3
using value to update workspace member role
burczu Mar 6, 2024
de3c302
switched to use correct menu item component
burczu Mar 6, 2024
a85b5e7
Merge branch 'main' into feature/35715-workspace-member-details-page
burczu Mar 7, 2024
dc7320e
backTo functionality fixed
burczu Mar 7, 2024
86bf243
navigation type issue fixed
burczu Mar 7, 2024
33509bb
state name adjusted
burczu Mar 7, 2024
1159171
event handler name adjusted
burczu Mar 7, 2024
f2b95c7
admin and paid policy access constraints added
burczu Mar 7, 2024
f78a65e
Merge branch 'main' into feature/35715-workspace-member-details-page
burczu Mar 7, 2024
dcd13bb
disabled showing RHN for non paid workspaces
burczu Mar 7, 2024
0140c46
selecting user on item press removed
burczu Mar 7, 2024
18d88ef
lint/prettier
burczu Mar 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,15 @@ const ROUTES = {
route: 'workspace/:policyID/tags',
getRoute: (policyID: string) => `workspace/${policyID}/tags` as const,
},
WORKSPACE_MEMBER_DETAILS: {
route: 'workspace/:policyID/members/:accountID',
getRoute: (policyID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`workspace/${policyID}/members/${accountID}`, backTo),
},
WORKSPACE_MEMBER_ROLE_SELECTION: {
route: 'workspace/:policyID/members/:accountID/role-selection',
getRoute: (policyID: string, accountID: number) => `workspace/${policyID}/members/${accountID}/role-selection` as const,
},

// Referral program promotion
REFERRAL_DETAILS_MODAL: {
route: 'referral/:contentType',
Expand Down
2 changes: 2 additions & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@ const SCREENS = {
NAME: 'Workspace_Profile_Name',
CATEGORY_SETTINGS: 'Category_Settings',
CATEGORIES_SETTINGS: 'Categories_Settings',
MEMBER_DETAILS: 'Workspace_Member_Details',
MEMBER_DETAILS_ROLE_SELECTION: 'Workspace_Member_Details_Role_Selection',
},

EDIT_REQUEST: {
Expand Down
3 changes: 3 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1805,6 +1805,9 @@ export default {
genericFailureMessage: 'An error occurred removing a user from the workspace, please try again.',
removeMembersPrompt: 'Are you sure you want to remove these members?',
removeMembersTitle: 'Remove members',
removeMemberButtonTitle: 'Remove from workspace',
removeMemberPrompt: ({memberName}) => `Are you sure you want to remove ${memberName}`,
removeMemberTitle: 'Remove member',
makeMember: 'Make member',
makeAdmin: 'Make admin',
selectAll: 'Select all',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1829,6 +1829,9 @@ export default {
genericFailureMessage: 'Se ha producido un error al intentar eliminar a un usuario del espacio de trabajo. Por favor, inténtalo más tarde.',
removeMembersPrompt: '¿Estás seguro de que deseas eliminar a estos miembros?',
removeMembersTitle: 'Eliminar miembros',
removeMemberButtonTitle: 'Quitar del espacio de trabajo',
removeMemberPrompt: ({memberName}) => `¿Estás seguro de que deseas eliminar a ${memberName}`,
removeMemberTitle: 'Eliminar miembro',
makeMember: 'Hacer miembro',
makeAdmin: 'Hacer administrador',
selectAll: 'Seleccionar todo',
Expand Down
2 changes: 2 additions & 0 deletions src/libs/Navigation/AppNavigator/ModalStackNavigators.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,8 @@ const SettingsModalStackNavigator = createModalStackNavigator<SettingsNavigatorP
[SCREENS.WORKSPACE.CURRENCY]: () => require('../../../pages/workspace/WorkspaceProfileCurrencyPage').default as React.ComponentType,
[SCREENS.WORKSPACE.CATEGORY_SETTINGS]: () => require('../../../pages/workspace/categories/CategorySettingsPage').default as React.ComponentType,
[SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: () => require('../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default as React.ComponentType,
[SCREENS.WORKSPACE.MEMBER_DETAILS]: () => require('../../../pages/workspace/members/WorkspaceMemberDetailsPage').default as React.ComponentType,
[SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: () => require('../../../pages/workspace/members/WorkspaceMemberDetailsRoleSelectionPage').default as React.ComponentType,
[SCREENS.REIMBURSEMENT_ACCOUNT]: () => require('../../../pages/ReimbursementAccount/ReimbursementAccountPage').default as React.ComponentType,
[SCREENS.GET_ASSISTANCE]: () => require('../../../pages/GetAssistancePage').default as React.ComponentType,
[SCREENS.SETTINGS.TWO_FACTOR_AUTH]: () => require('../../../pages/settings/Security/TwoFactorAuth/TwoFactorAuthPage').default as React.ComponentType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import SCREENS from '@src/SCREENS';
const CENTRAL_PANE_TO_RHP_MAPPING: Partial<Record<CentralPaneName, string[]>> = {
[SCREENS.WORKSPACE.PROFILE]: [SCREENS.WORKSPACE.NAME, SCREENS.WORKSPACE.CURRENCY, SCREENS.WORKSPACE.DESCRIPTION, SCREENS.WORKSPACE.SHARE],
[SCREENS.WORKSPACE.REIMBURSE]: [SCREENS.WORKSPACE.RATE_AND_UNIT, SCREENS.WORKSPACE.RATE_AND_UNIT_RATE, SCREENS.WORKSPACE.RATE_AND_UNIT_UNIT],
[SCREENS.WORKSPACE.MEMBERS]: [SCREENS.WORKSPACE.INVITE, SCREENS.WORKSPACE.INVITE_MESSAGE],
[SCREENS.WORKSPACE.MEMBERS]: [SCREENS.WORKSPACE.INVITE, SCREENS.WORKSPACE.INVITE_MESSAGE, SCREENS.WORKSPACE.MEMBER_DETAILS, SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION],
[SCREENS.WORKSPACE.WORKFLOWS]: [SCREENS.WORKSPACE.WORKFLOWS_APPROVER, SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY, SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET],
[SCREENS.WORKSPACE.CATEGORIES]: [SCREENS.WORKSPACE.CATEGORY_SETTINGS, SCREENS.WORKSPACE.CATEGORIES_SETTINGS],
};
Expand Down
6 changes: 6 additions & 0 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,12 @@ const config: LinkingOptions<RootStackParamList>['config'] = {
[SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: {
path: ROUTES.WORKSPACE_CATEGORIES_SETTINGS.route,
},
[SCREENS.WORKSPACE.MEMBER_DETAILS]: {
path: ROUTES.WORKSPACE_MEMBER_DETAILS.route,
},
[SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: {
path: ROUTES.WORKSPACE_MEMBER_ROLE_SELECTION.route,
},
[SCREENS.REIMBURSEMENT_ACCOUNT]: {
path: ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.route,
exact: true,
Expand Down
13 changes: 13 additions & 0 deletions src/libs/Navigation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ type CentralPaneNavigatorParamList = {
[SCREENS.WORKSPACE.MEMBERS]: {
policyID: string;
};
[SCREENS.WORKSPACE.MEMBER_DETAILS]: {
policyID: string;
};
[SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: {
policyID: string;
};
[SCREENS.WORKSPACE.CATEGORIES]: {
policyID: string;
};
Expand Down Expand Up @@ -204,6 +210,13 @@ type SettingsNavigatorParamList = {
[SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: {
policyID: string;
};
[SCREENS.WORKSPACE.MEMBER_DETAILS]: {
accountID: string;
backTo: Routes;
};
[SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: {
accountID: string;
};
[SCREENS.GET_ASSISTANCE]: {
backTo: Routes;
};
Expand Down
22 changes: 15 additions & 7 deletions src/pages/workspace/WorkspaceMembersPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,19 @@ function WorkspaceMembersPage({policyMembers, personalDetails, route, policy, se
[selectedEmployees, addUser, removeUser],
);

/** Opens the member details page */
const openMemberDetails = useCallback(
(item: MemberOption) => {
if (!isPolicyAdmin) {
Navigation.navigate(ROUTES.PROFILE.getRoute(item.accountID));
return;
}

Navigation.navigate(ROUTES.WORKSPACE_MEMBER_DETAILS.getRoute(route.params.policyID, item.accountID, route.path));
},
[isPolicyAdmin, route.params.policyID, route.path],
);

/**
* Dismisses the errors on one item
*/
Expand Down Expand Up @@ -523,13 +536,8 @@ function WorkspaceMembersPage({policyMembers, personalDetails, route, policy, se
disableKeyboardShortcuts={removeMembersConfirmModalVisible}
headerMessage={getHeaderMessage()}
headerContent={getHeaderContent()}
onSelectRow={(item) => {
if (!isPolicyAdmin) {
Navigation.navigate(ROUTES.PROFILE.getRoute(item.accountID));
return;
}
toggleUser(item.accountID);
}}
onSelectRow={openMemberDetails}
onCheckboxPress={(item) => toggleUser(item.accountID)}
onSelectAll={() => toggleAllUsers(data)}
onDismissError={dismissError}
showLoadingPlaceholder={!isOfflineAndNoMemberDataAvailable && (!OptionsListUtils.isPersonalDetailsReady(personalDetails) || isEmptyObject(policyMembers))}
Expand Down
147 changes: 147 additions & 0 deletions src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
import type {StackScreenProps} from '@react-navigation/stack';
import React, {useCallback} from 'react';
import {View} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import {withOnyx} from 'react-native-onyx';
import Avatar from '@components/Avatar';
import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
import Button from '@components/Button';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import * as UserUtils from '@libs/UserUtils';
import Navigation from '@navigation/Navigation';
import type {SettingsNavigatorParamList} from '@navigation/types';
import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading';
import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading';
import * as Policy from '@userActions/Policy';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type SCREENS from '@src/SCREENS';
import type {PersonalDetails, PersonalDetailsList} from '@src/types/onyx';

type WorkspacePolicyOnyxProps = {
/** Personal details of all users */
personalDetails: OnyxEntry<PersonalDetailsList>;
};

type WorkspaceMemberDetailsPageProps = WithPolicyAndFullscreenLoadingProps & WorkspacePolicyOnyxProps & StackScreenProps<SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.MEMBER_DETAILS>;

function WorkspaceMemberDetailsPage({personalDetails, policyMembers, policy, route}: WorkspaceMemberDetailsPageProps) {
const styles = useThemeStyles();
const theme = useTheme();
const {translate} = useLocalize();

const [removeMemberConfirmModalVisible, setRemoveMemberConfirmModalVisible] = React.useState(false);

const accountID = Number(route?.params?.accountID) ?? 0;
const backTo = route?.params?.backTo;

const member = policyMembers?.[accountID];
const details = personalDetails?.[accountID] ?? ({} as PersonalDetails);
const avatar = details.avatar ?? UserUtils.getDefaultAvatar();
const fallbackIcon = details.fallbackIcon ?? '';
const displayName = details.displayName ?? '';

const askForConfirmationToRemove = () => {
setRemoveMemberConfirmModalVisible(true);
};

const removeUser = useCallback(() => {
Policy.removeMembers([accountID], route.params.policyID);
setRemoveMemberConfirmModalVisible(false);
Navigation.goBack(backTo);
}, [accountID, backTo, route.params.policyID]);

const redirectToProfile = useCallback(() => {
Navigation.navigate(ROUTES.PROFILE.getRoute(accountID));
}, [accountID]);

const openRoleSelectionModal = useCallback(() => {
Navigation.navigate(ROUTES.WORKSPACE_MEMBER_ROLE_SELECTION.getRoute(route.params.policyID, accountID));
}, [accountID, route.params.policyID]);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are not checking if user is workspace member or not, ref: #41492

return (
<ScreenWrapper testID={WorkspaceMemberDetailsPage.displayName}>
<FullPageNotFoundView>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to block these views if the user is not an admin. We can reuse AdminPolicyAccessOrNotFoundWrapper and PaidPolicyAccessOrNotFoundWrapper

Copy link
Contributor Author

@burczu burczu Mar 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added, but are you sure this feature should be available only for Paid Workspaces? I must have missed this requirement...
Should I also disable showing RHN when pressing on the member item if its non Paid Workspace?

Copy link
Contributor Author

@burczu burczu Mar 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@luacmartins ok, I think disabling RHN for non Paid Workspace is most reasonable - I've made this change, so now:

  • for Paid Workspaces, when user presses the checkbox, the item is selected and when user presses the whole item it shows the Member Details modal
  • for Non Paid Workspaces, pressing the whole item, as well as pressing the checkbox just selects the item

Please see the recording:

Screen.Recording.2024-03-07.at.14.30.22.mov

What do you think?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for Non Paid Workspaces, pressing the whole item, as well as pressing the checkbox just selects the item

Personally I don't like that there would be variability in pressing the whole item triggering the select action or not. I think we should limit selecting a row to just engaging with the checkbox, no matter what the case is. Curious if @Expensify/design agrees here.

So basically, let's not try to get tricky with using the whole row as a trigger action for the select box. Just make it so that you can only ever use the select box to select a row. For non-paid workspaces, just make the rest of the row non-tappable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shawnborton makes sense to me - I'll change it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally agree @shawnborton.

<HeaderWithBackButton
title={displayName}
subtitle={policy?.name}
onBackButtonPress={() => Navigation.goBack(backTo)}
/>
<View style={[styles.containerWithSpaceBetween, styles.pointerEventsBoxNone, styles.justifyContentStart]}>
<View style={styles.avatarSectionWrapper}>
<OfflineWithFeedback pendingAction={details.pendingFields?.avatar}>
<Avatar
containerStyles={[styles.avatarXLarge, styles.mv5, styles.noOutline]}
imageStyles={[styles.avatarXLarge]}
source={UserUtils.getAvatar(avatar, accountID)}
size={CONST.AVATAR_SIZE.XLARGE}
fallbackIcon={fallbackIcon}
/>
</OfflineWithFeedback>
{Boolean(details.displayName ?? '') && (
<Text
style={[styles.textHeadline, styles.pre, styles.mb6, styles.w100, styles.textAlignCenter]}
numberOfLines={1}
>
{displayName}
</Text>
)}
<Button
text={translate('workspace.people.removeMemberButtonTitle')}
onPress={askForConfirmationToRemove}
medium
icon={Expensicons.RemoveMembers}
iconStyles={{transform: [{scale: 0.8}]}}
style={styles.mv5}
/>
<ConfirmModal
danger
title={translate('workspace.people.removeMemberTitle')}
isVisible={removeMemberConfirmModalVisible}
onConfirm={removeUser}
onCancel={() => setRemoveMemberConfirmModalVisible(false)}
prompt={translate('workspace.people.removeMemberPrompt', {memberName: displayName})}
confirmText={translate('common.remove')}
cancelText={translate('common.cancel')}
/>
</View>
<View style={styles.w100}>
<MenuItemWithTopDescription
title={member?.role === CONST.POLICY.ROLE.ADMIN ? translate('common.admin') : translate('common.member')}
description={translate('common.role')}
shouldShowRightIcon
onPress={openRoleSelectionModal}
/>
<MenuItemWithTopDescription
title={translate('common.profile')}
shouldShowRightIcon
icon={Expensicons.Info}
iconFill={theme.icon}
onPress={redirectToProfile}
/>
</View>
</View>
</FullPageNotFoundView>
</ScreenWrapper>
);
}

WorkspaceMemberDetailsPage.displayName = 'WorkspaceMemberDetailsPage';

export default withPolicyAndFullscreenLoading(
withOnyx<WorkspaceMemberDetailsPageProps, WorkspacePolicyOnyxProps>({
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
})(WorkspaceMemberDetailsPage),
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import type {StackScreenProps} from '@react-navigation/stack';
import React from 'react';
import {View} from 'react-native';
import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import ScreenWrapper from '@components/ScreenWrapper';
import SelectionList from '@components/SelectionList';
import RadioListItem from '@components/SelectionList/RadioListItem';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import Navigation from '@navigation/Navigation';
import type {SettingsNavigatorParamList} from '@navigation/types';
import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading';
import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading';
import * as Policy from '@userActions/Policy';
import CONST from '@src/CONST';
import type SCREENS from '@src/SCREENS';

type WorkspaceMemberDetailsPageProps = WithPolicyAndFullscreenLoadingProps & StackScreenProps<SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION>;

function WorkspaceMemberDetailsRoleSelectionPage({policyMembers, route}: WorkspaceMemberDetailsPageProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();

const accountID = Number(route?.params?.accountID) ?? 0;
const member = policyMembers?.[accountID];

const items = [
{
value: CONST.POLICY.ROLE.ADMIN,
text: translate('common.admin'),
isSelected: member?.role === CONST.POLICY.ROLE.ADMIN,
keyForList: CONST.POLICY.ROLE.ADMIN,
},
{
value: CONST.POLICY.ROLE.USER,
text: translate('common.member'),
isSelected: member?.role === CONST.POLICY.ROLE.USER,
keyForList: CONST.POLICY.ROLE.USER,
},
];

const changeRole = () => {
if (!member) {
return;
}

const newRole = member.role === CONST.POLICY.ROLE.ADMIN ? CONST.POLICY.ROLE.USER : CONST.POLICY.ROLE.ADMIN;
Policy.updateWorkspaceMembersRole(route.params.policyID, [accountID], newRole);
Navigation.goBack();
};

return (
<ScreenWrapper testID={WorkspaceMemberDetailsRoleSelectionPage.displayName}>
<FullPageNotFoundView>
<HeaderWithBackButton
title={translate('common.role')}
onBackButtonPress={() => Navigation.goBack()}
/>
<View style={[styles.containerWithSpaceBetween, styles.pointerEventsBoxNone]}>
<SelectionList
sections={[{data: items, indexOffset: 0}]}
ListItem={RadioListItem}
onSelectRow={changeRole}
initiallyFocusedOptionKey={items.find((item) => item.isSelected)?.keyForList}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see the tick mark for the very first time i open a member with the new changes

Screen.Recording.2024-03-06.at.5.26.50.PM.mov

Copy link
Contributor Author

@burczu burczu Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this a member that was invited right before? there is known issue that we need to address regarding this... the same problem is with bulk actions and "Make admin" option for freshly invited members (before refreshing the page) - I think there was some bug for it

Copy link
Contributor Author

@burczu burczu Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is related comment: #37748 (comment) - we agreed to fix this while working on inviting new members here: #37199 (comment)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it.

/>
</View>
</FullPageNotFoundView>
</ScreenWrapper>
);
}

WorkspaceMemberDetailsRoleSelectionPage.displayName = 'WorkspaceMemberDetailsRoleSelectionPage';

export default withPolicyAndFullscreenLoading(WorkspaceMemberDetailsRoleSelectionPage);
Loading