diff --git a/src/components/Button/ButtonDisabledWhenOffline.tsx b/src/components/Button/ButtonDisabledWhenOffline.tsx
new file mode 100644
index 000000000000..9b2bfd80a3bc
--- /dev/null
+++ b/src/components/Button/ButtonDisabledWhenOffline.tsx
@@ -0,0 +1,19 @@
+import useNetwork from '@hooks/useNetwork';
+import Button from '.';
+import type {ButtonProps} from '.';
+
+type ButtonDisabledWhenOfflineProps = ButtonProps & {
+ disabledWhenOffline?: boolean;
+};
+
+function ButtonDisabledWhenOffline({disabledWhenOffline = true, ...props}: ButtonDisabledWhenOfflineProps) {
+ const {isOffline} = useNetwork();
+ return (
+
+ );
+}
+export default ButtonDisabledWhenOffline;
diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx
index 7f9439298855..614cd398ec82 100644
--- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx
+++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx
@@ -5,6 +5,7 @@ import type {OnyxEntry} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
import Avatar from '@components/Avatar';
import Button from '@components/Button';
+import ButtonDisabledWhenOffline from '@components/Button/ButtonDisabledWhenOffline';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
@@ -16,15 +17,14 @@ import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
-import useNetwork from '@hooks/useNetwork';
import usePrevious from '@hooks/usePrevious';
import useStyleUtils from '@hooks/useStyleUtils';
import useThemeStyles from '@hooks/useThemeStyles';
-import * as CardUtils from '@libs/CardUtils';
-import * as CurrencyUtils from '@libs/CurrencyUtils';
+import {getAllCardsForWorkspace, getCardFeedIcon, getCompanyFeeds, maskCardNumber} from '@libs/CardUtils';
+import {convertToDisplayString} from '@libs/CurrencyUtils';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
-import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils';
-import * as PolicyUtils from '@libs/PolicyUtils';
+import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
+import {getWorkspaceAccountID} from '@libs/PolicyUtils';
import shouldRenderTransferOwnerButton from '@libs/shouldRenderTransferOwnerButton';
import Navigation from '@navigation/Navigation';
import type {SettingsNavigatorParamList} from '@navigation/types';
@@ -33,9 +33,9 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading';
import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading';
import variables from '@styles/variables';
-import * as Card from '@userActions/Card';
-import * as CompanyCards from '@userActions/CompanyCards';
-import * as Member from '@userActions/Policy/Member';
+import {setIssueNewCardStepAndData} from '@userActions/Card';
+import {openPolicyCompanyCardsPage} from '@userActions/CompanyCards';
+import {clearWorkspaceOwnerChangeFlow, isApprover as isApproverUserAction, removeMembers, requestWorkspaceOwnerChange, updateWorkspaceMembersRole} from '@userActions/Policy/Member';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
@@ -55,10 +55,9 @@ type WorkspaceMemberDetailsPageProps = Omit !feed.pending).length > 0;
+ const policyOwnerDisplayName = formatPhoneNumber(getDisplayNameOrDefault(ownerDetails)) ?? policy?.owner ?? '';
+ const hasMultipleFeeds = Object.values(getCompanyFeeds(cardFeeds)).filter((feed) => !feed.pending).length > 0;
- const workspaceCards = CardUtils.getAllCardsForWorkspace(workspaceAccountID);
+ const workspaceCards = getAllCardsForWorkspace(workspaceAccountID);
const hasWorkspaceCardsAssigned = !!workspaceCards && !!Object.values(workspaceCards).length;
useEffect(() => {
- CompanyCards.openPolicyCompanyCardsPage(policyID, workspaceAccountID);
+ openPolicyCompanyCardsPage(policyID, workspaceAccountID);
}, [policyID, workspaceAccountID]);
const memberCards = useMemo(() => {
@@ -97,7 +96,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
}, [accountID, workspaceCards]);
const confirmModalPrompt = useMemo(() => {
- const isApprover = Member.isApprover(policy, accountID);
+ const isApprover = isApproverUserAction(policy, accountID);
if (!isApprover) {
return translate('workspace.people.removeMemberPrompt', {memberName: displayName});
}
@@ -146,7 +145,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
};
const removeUser = useCallback(() => {
- Member.removeMembers([accountID], policyID);
+ removeMembers([accountID], policyID);
setIsRemoveMemberConfirmModalVisible(false);
}, [accountID, policyID]);
@@ -172,7 +171,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
}
const activeRoute = Navigation.getActiveRoute();
- Card.setIssueNewCardStepAndData({
+ setIssueNewCardStepAndData({
step: CONST.EXPENSIFY_CARD.STEP.CARD_TYPE,
data: {
assigneeEmail: memberLogin,
@@ -189,14 +188,14 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
const changeRole = useCallback(
({value}: ListItemType) => {
setIsRoleSelectionModalVisible(false);
- Member.updateWorkspaceMembersRole(policyID, [accountID], value);
+ updateWorkspaceMembersRole(policyID, [accountID], value);
},
[accountID, policyID],
);
const startChangeOwnershipFlow = useCallback(() => {
- Member.clearWorkspaceOwnerChangeFlow(policyID);
- Member.requestWorkspaceOwnerChange(policyID);
+ clearWorkspaceOwnerChangeFlow(policyID);
+ requestWorkspaceOwnerChange(policyID);
Navigation.navigate(ROUTES.WORKSPACE_OWNER_CHANGE_CHECK.getRoute(policyID, accountID, 'amountOwed' as ValueOf));
}, [accountID, policyID]);
@@ -246,10 +245,9 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
)}
{isSelectedMemberOwner && isCurrentUserAdmin && !isCurrentUserOwner ? (
shouldRenderTransferOwnerButton() && (
-