diff --git a/src/pages/workspace/WorkspaceAvatar.tsx b/src/pages/workspace/WorkspaceAvatar.tsx index 3b4fd7b7a51f..5247d13e9f48 100644 --- a/src/pages/workspace/WorkspaceAvatar.tsx +++ b/src/pages/workspace/WorkspaceAvatar.tsx @@ -1,31 +1,27 @@ import React from 'react'; -import type {OnyxEntry} from 'react-native-onyx'; -import {withOnyx} from 'react-native-onyx'; import AttachmentModal from '@components/AttachmentModal'; +import useOnyx from '@hooks/useOnyx'; +import usePolicy from '@hooks/usePolicy'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {AuthScreensParamList} from '@libs/Navigation/types'; -import * as ReportUtils from '@libs/ReportUtils'; -import * as UserUtils from '@libs/UserUtils'; +import {getDefaultWorkspaceAvatar} from '@libs/ReportUtils'; +import {getFullSizeAvatar} from '@libs/UserUtils'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; -import type {Policy} from '@src/types/onyx'; -type WorkspaceAvatarOnyxProps = { - policy: OnyxEntry; - isLoadingApp: OnyxEntry; -}; +type WorkspaceAvatarProps = PlatformStackScreenProps; -type WorkspaceAvatarProps = WorkspaceAvatarOnyxProps & PlatformStackScreenProps; - -function WorkspaceAvatar({policy, isLoadingApp = true}: WorkspaceAvatarProps) { - const avatarURL = (policy?.avatarURL ?? '') ? (policy?.avatarURL ?? '') : ReportUtils.getDefaultWorkspaceAvatar(policy?.name ?? ''); +function WorkspaceAvatar({route}: WorkspaceAvatarProps) { + const policy = usePolicy(route?.params?.policyID); + const [isLoadingApp = false] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initWithStoredValues: false}); + const avatarURL = (policy?.avatarURL ?? '') ? (policy?.avatarURL ?? '') : getDefaultWorkspaceAvatar(policy?.name ?? ''); return ( ({ - policy: { - key: ({route}) => `${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID ?? '-1'}`, - }, - isLoadingApp: { - key: ONYXKEYS.IS_LOADING_APP, - }, -})(WorkspaceAvatar); +export default WorkspaceAvatar; diff --git a/src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx b/src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx index 83458c3ad74a..4d1be70f65d7 100644 --- a/src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx +++ b/src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx @@ -1,26 +1,20 @@ import React, {useCallback, useEffect, useState} from 'react'; import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; -import {withOnyx} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import Button from '@components/Button'; +import {usePersonalDetails} from '@components/OnyxListItemProvider'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as WorkspaceSettingsUtils from '@libs/WorkspacesSettingsUtils'; +import {clearWorkspaceOwnerChangeFlow, requestWorkspaceOwnerChange} from '@libs/actions/Policy/Member'; +import {getOwnershipChecksDisplayText} from '@libs/WorkspacesSettingsUtils'; import Navigation from '@navigation/Navigation'; -import * as MemberActions from '@userActions/Policy/Member'; import CONST from '@src/CONST'; -import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; -type WorkspaceOwnerChangeCheckOnyxProps = { - /** Personal details of all users */ - personalDetails: OnyxEntry; -}; - -type WorkspaceOwnerChangeCheckProps = WorkspaceOwnerChangeCheckOnyxProps & { +type WorkspaceOwnerChangeCheckProps = { /** The policy */ policy: OnyxEntry; @@ -31,7 +25,7 @@ type WorkspaceOwnerChangeCheckProps = WorkspaceOwnerChangeCheckOnyxProps & { error: ValueOf; }; -function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: WorkspaceOwnerChangeCheckProps) { +function WorkspaceOwnerChangeCheck({policy, accountID, error}: WorkspaceOwnerChangeCheckProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const [displayTexts, setDisplayTexts] = useState({ @@ -39,8 +33,9 @@ function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: text: '', buttonText: '', }); + const personalDetails = usePersonalDetails(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const updateDisplayTexts = useCallback(() => { const changeOwnerErrors = Object.keys(policy?.errorFields?.changeOwner ?? {}); @@ -48,7 +43,7 @@ function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: return; } - const texts = WorkspaceSettingsUtils.getOwnershipChecksDisplayText(error, translate, policy, personalDetails?.[accountID]?.login); + const texts = getOwnershipChecksDisplayText(error, translate, policy, personalDetails?.[accountID]?.login); setDisplayTexts(texts); }, [accountID, error, personalDetails, policy, translate]); @@ -57,15 +52,18 @@ function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: }, [updateDisplayTexts]); const confirm = useCallback(() => { + if (!policyID) { + return; + } if (error === CONST.POLICY.OWNERSHIP_ERRORS.HAS_FAILED_SETTLEMENTS || error === CONST.POLICY.OWNERSHIP_ERRORS.FAILED_TO_CLEAR_BALANCE) { // cannot transfer ownership if there are failed settlements, or we cannot clear the balance - MemberActions.clearWorkspaceOwnerChangeFlow(policyID); + clearWorkspaceOwnerChangeFlow(policyID); Navigation.goBack(); Navigation.navigate(ROUTES.WORKSPACE_MEMBER_DETAILS.getRoute(policyID, accountID)); return; } - MemberActions.requestWorkspaceOwnerChange(policyID); + requestWorkspaceOwnerChange(policyID); }, [accountID, error, policyID]); return ( @@ -86,8 +84,4 @@ function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: WorkspaceOwnerChangeCheck.displayName = 'WorkspaceOwnerChangeCheckPage'; -export default withOnyx({ - personalDetails: { - key: ONYXKEYS.PERSONAL_DETAILS_LIST, - }, -})(WorkspaceOwnerChangeCheck); +export default WorkspaceOwnerChangeCheck;