Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
33 changes: 11 additions & 22 deletions src/pages/workspace/WorkspaceAvatar.tsx
Original file line number Diff line number Diff line change
@@ -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<Policy>;
isLoadingApp: OnyxEntry<boolean>;
};
type WorkspaceAvatarProps = PlatformStackScreenProps<AuthScreensParamList, typeof SCREENS.WORKSPACE_AVATAR>;

type WorkspaceAvatarProps = WorkspaceAvatarOnyxProps & PlatformStackScreenProps<AuthScreensParamList, typeof SCREENS.WORKSPACE_AVATAR>;

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 (
<AttachmentModal
headerTitle={policy?.name ?? ''}
defaultOpen
source={UserUtils.getFullSizeAvatar(avatarURL, 0)}
source={getFullSizeAvatar(avatarURL, 0)}
onModalClose={Navigation.goBack}
isWorkspaceAvatar
originalFileName={policy?.originalFileName ?? policy?.id}
Expand All @@ -38,11 +34,4 @@ function WorkspaceAvatar({policy, isLoadingApp = true}: WorkspaceAvatarProps) {

WorkspaceAvatar.displayName = 'WorkspaceAvatar';

export default withOnyx<WorkspaceAvatarProps, WorkspaceAvatarOnyxProps>({
policy: {
key: ({route}) => `${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID ?? '-1'}`,
},
isLoadingApp: {
key: ONYXKEYS.IS_LOADING_APP,
},
})(WorkspaceAvatar);
export default WorkspaceAvatar;
34 changes: 14 additions & 20 deletions src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx
Original file line number Diff line number Diff line change
@@ -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<OnyxTypes.PersonalDetailsList>;
};

type WorkspaceOwnerChangeCheckProps = WorkspaceOwnerChangeCheckOnyxProps & {
type WorkspaceOwnerChangeCheckProps = {
/** The policy */
policy: OnyxEntry<OnyxTypes.Policy>;

Expand All @@ -31,24 +25,25 @@ type WorkspaceOwnerChangeCheckProps = WorkspaceOwnerChangeCheckOnyxProps & {
error: ValueOf<typeof CONST.POLICY.OWNERSHIP_ERRORS>;
};

function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}: WorkspaceOwnerChangeCheckProps) {
function WorkspaceOwnerChangeCheck({policy, accountID, error}: WorkspaceOwnerChangeCheckProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const [displayTexts, setDisplayTexts] = useState({
title: '',
text: '',
buttonText: '',
});
const personalDetails = usePersonalDetails();

const policyID = policy?.id ?? '-1';
const policyID = policy?.id;

const updateDisplayTexts = useCallback(() => {
const changeOwnerErrors = Object.keys(policy?.errorFields?.changeOwner ?? {});
if (error !== changeOwnerErrors.at(0)) {
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]);

Expand All @@ -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 (
Expand All @@ -86,8 +84,4 @@ function WorkspaceOwnerChangeCheck({personalDetails, policy, accountID, error}:

WorkspaceOwnerChangeCheck.displayName = 'WorkspaceOwnerChangeCheckPage';

export default withOnyx<WorkspaceOwnerChangeCheckProps, WorkspaceOwnerChangeCheckOnyxProps>({
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
})(WorkspaceOwnerChangeCheck);
export default WorkspaceOwnerChangeCheck;
Loading