diff --git a/src/languages/de.ts b/src/languages/de.ts index 3bf6eb8ebcb8..fdba26950e9c 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -3025,6 +3025,7 @@ ${ whenClearStatus: 'Wann sollen wir deinen Status löschen?', vacationDelegate: 'Urlaubsvertreter', setVacationDelegate: `Legen Sie eine Urlaubsvertretung fest, die Berichte in Ihrer Abwesenheit in Ihrem Namen genehmigt.`, + cannotSetVacationDelegate: `Du kannst keinen Urlaubsvertreter festlegen, da du derzeit der Vertreter für die folgenden Mitglieder bist:`, vacationDelegateError: 'Beim Aktualisieren deines Urlaubsvertreters ist ein Fehler aufgetreten.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `als Urlaubsvertretung von ${nameOrEmail}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `an ${submittedToName} als Urlaubsvertreter für ${vacationDelegateName}`, diff --git a/src/languages/en.ts b/src/languages/en.ts index fc3b9e4cbd34..f0584e579984 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2987,6 +2987,7 @@ const translations = { whenClearStatus: 'When should we clear your status?', vacationDelegate: 'Vacation delegate', setVacationDelegate: `Set a vacation delegate to approve reports on your behalf while you're out of office.`, + cannotSetVacationDelegate: `You can't set a vacation delegate because you're currently the delegate for the following members:`, vacationDelegateError: 'There was an error updating your vacation delegate.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `as ${nameOrEmail}'s vacation delegate`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `to ${submittedToName} as vacation delegate for ${vacationDelegateName}`, diff --git a/src/languages/es.ts b/src/languages/es.ts index 3a370bfc8e2c..f1c0969a234b 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2683,6 +2683,7 @@ ${amount} para ${merchant} - ${date}`, whenClearStatus: '¿Cuándo deberíamos borrar tu estado?', vacationDelegate: 'Delegado de vacaciones', setVacationDelegate: 'Configura un delegado de vacaciones para aprobar informes en tu nombre mientras estás fuera de la oficina.', + cannotSetVacationDelegate: `No puedes establecer un delegado de vacaciones porque actualmente eres el delegado de los siguientes miembros:`, vacationDelegateError: 'Hubo un error al actualizar tu delegado de vacaciones.', asVacationDelegate: ({nameOrEmail: managerName}) => `como delegado de vacaciones de ${managerName}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}) => `a ${submittedToName} como delegado de vacaciones de ${vacationDelegateName}`, diff --git a/src/languages/fr.ts b/src/languages/fr.ts index db35ff171216..638507fbc349 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -3030,6 +3030,7 @@ ${ whenClearStatus: 'Quand devons-nous effacer votre statut ?', vacationDelegate: 'Délégué de vacances', setVacationDelegate: `Définissez un délégué de vacances pour approuver les rapports en votre nom pendant que vous êtes absent du bureau.`, + cannotSetVacationDelegate: `Vous ne pouvez pas définir un délégué de vacances car vous êtes actuellement le délégué des membres suivants :`, vacationDelegateError: 'Une erreur s’est produite lors de la mise à jour de votre délégué de vacances.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `en tant que délégué de vacances de ${nameOrEmail}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => diff --git a/src/languages/it.ts b/src/languages/it.ts index ca5530401bca..c9123686172c 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -3014,6 +3014,7 @@ ${ whenClearStatus: 'Quando dovremmo cancellare il tuo stato?', vacationDelegate: 'Delegato ferie', setVacationDelegate: `Imposta un delegato per le vacanze che approvi i report per tuo conto mentre sei fuori ufficio.`, + cannotSetVacationDelegate: `Non puoi impostare un delegato per le ferie perché al momento sei il delegato per i seguenti membri:`, vacationDelegateError: "Si è verificato un errore durante l'aggiornamento del tuo delegato per le ferie.", asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `come delegato per le vacanze di ${nameOrEmail}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `a ${submittedToName} come delegato per le ferie di ${vacationDelegateName}`, diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 04ae3d174601..2e7a4c4127a0 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -3007,6 +3007,7 @@ ${ whenClearStatus: 'ステータスをいつクリアしますか?', vacationDelegate: '休暇代理人', setVacationDelegate: `休暇中に代理承認者を設定して、不在の間にあなたの代わりにレポートを承認してもらいましょう。`, + cannotSetVacationDelegate: `現在、次のメンバーの代理人になっているため、休暇代理人を設定できません:`, vacationDelegateError: '休暇代理人の更新中にエラーが発生しました。', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `${nameOrEmail} の休暇代理として`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `${vacationDelegateName} の休暇代理人として ${submittedToName} に`, diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 06e93f0ab145..6e69a05be202 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -3011,6 +3011,7 @@ ${ whenClearStatus: 'Wanneer moeten we je status wissen?', vacationDelegate: 'Vakantie-gemachtigde', setVacationDelegate: `Stel een vervangende goedkeurder in om rapporten namens jou te accorderen terwijl je afwezig bent.`, + cannotSetVacationDelegate: `Je kunt geen vakantiedelegaat instellen omdat je momenteel de delegaat bent voor de volgende leden:`, vacationDelegateError: 'Er is een fout opgetreden bij het bijwerken van je vervanger tijdens vakantie.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `als ${nameOrEmail}'s plaatsvervanger tijdens vakantie`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `aan ${submittedToName} als vakantiemachtiging voor ${vacationDelegateName}`, diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e55050b7811c..c0f915bdca92 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -3008,6 +3008,7 @@ ${ whenClearStatus: 'Kiedy powinniśmy wyczyścić Twój status?', vacationDelegate: 'Zastępca urlopowy', setVacationDelegate: `Ustaw zastępcę na czas urlopu, aby zatwierdzał raporty w Twoim imieniu, gdy jesteś poza biurem.`, + cannotSetVacationDelegate: `Nie możesz ustawić delegata urlopowego, ponieważ obecnie jesteś delegatem dla następujących członków:`, vacationDelegateError: 'Wystąpił błąd podczas aktualizowania Twojego zastępcy urlopowego.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `jako zastępca urlopowy ${nameOrEmail}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `do ${submittedToName} jako zastępca urlopowy dla ${vacationDelegateName}`, diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 66f72484e656..b631d7d7b043 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -3007,6 +3007,7 @@ ${ whenClearStatus: 'Quando devemos limpar seu status?', vacationDelegate: 'Delegado de férias', setVacationDelegate: `Defina um delegado de férias para aprovar relatórios em seu nome enquanto você estiver fora do escritório.`, + cannotSetVacationDelegate: `Você não pode definir um delegado de férias porque atualmente é o delegado dos seguintes membros:`, vacationDelegateError: 'Ocorreu um erro ao atualizar o seu delegado de férias.', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `como representante de férias de ${nameOrEmail}`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d7e82bb95e7b..3b33e4d71769 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -2969,6 +2969,7 @@ ${ whenClearStatus: '我们应何时清除你的状态?', vacationDelegate: '休假代理', setVacationDelegate: `设置一个休假代理,在你不在办公室时代你审批报销报告。`, + cannotSetVacationDelegate: `由于你目前是以下成员的代理人,因此无法设置休假代理人:`, vacationDelegateError: '更新你的休假代理时出错。', asVacationDelegate: ({nameOrEmail}: VacationDelegateParams) => `作为 ${nameOrEmail} 的休假代理`, toAsVacationDelegate: ({submittedToName, vacationDelegateName}: SubmittedToVacationDelegateParams) => `作为 ${vacationDelegateName} 的休假代理,提交给 ${submittedToName}`, diff --git a/src/pages/settings/Profile/CustomStatus/StatusPage.tsx b/src/pages/settings/Profile/CustomStatus/StatusPage.tsx index 20f8cce5b6c0..1e4bedb0b7fe 100644 --- a/src/pages/settings/Profile/CustomStatus/StatusPage.tsx +++ b/src/pages/settings/Profile/CustomStatus/StatusPage.tsx @@ -60,6 +60,7 @@ function StatusPage() { const [vacationDelegate] = useOnyx(ONYXKEYS.NVP_PRIVATE_VACATION_DELEGATE, {canBeMissing: true}); const hasVacationDelegate = !!vacationDelegate?.delegate; + const hasActiveDelegations = (vacationDelegate?.delegatorFor?.length ?? 0) > 0; const vacationDelegatePersonalDetails = getPersonalDetailByEmail(vacationDelegate?.delegate ?? ''); const formattedDelegateLogin = formatPhoneNumber(vacationDelegatePersonalDetails?.login ?? ''); @@ -189,6 +190,32 @@ function StatusPage() { const {inputCallbackRef, inputRef} = useAutoFocusInput(); const fallbackVacationDelegateLogin = formattedDelegateLogin === '' ? vacationDelegate?.delegate : formattedDelegateLogin; + const renderDelegatorList = () => { + if (!vacationDelegate?.delegatorFor) { + return null; + } + + return vacationDelegate.delegatorFor.map((delegatorEmail) => { + const delegatorDetails = getPersonalDetailByEmail(delegatorEmail); + const formattedLogin = formatPhoneNumber(delegatorDetails?.login ?? ''); + const displayLogin = formattedLogin || delegatorEmail; + + return ( + + ); + }); + }; + return ( - {translate('statusPage.setVacationDelegate')} - {hasVacationDelegate && {translate('statusPage.vacationDelegate')}} - {hasVacationDelegate ? ( - clearVacationDelegateError(vacationDelegate?.previousDelegate)} - > - Navigation.navigate(ROUTES.SETTINGS_VACATION_DELEGATE)} - containerStyle={styles.pr2} - /> - + {translate('statusPage.vacationDelegate')} + {hasActiveDelegations ? ( + + {translate('statusPage.cannotSetVacationDelegate')} + {renderDelegatorList()} + ) : ( - - Navigation.navigate(ROUTES.SETTINGS_VACATION_DELEGATE)} - containerStyle={styles.pr2} - /> + + {translate('statusPage.setVacationDelegate')} + {hasVacationDelegate && {translate('statusPage.vacationDelegate')}} + {hasVacationDelegate ? ( + clearVacationDelegateError(vacationDelegate?.previousDelegate)} + > + Navigation.navigate(ROUTES.SETTINGS_VACATION_DELEGATE)} + containerStyle={styles.pr2} + /> + + ) : ( + + Navigation.navigate(ROUTES.SETTINGS_VACATION_DELEGATE)} + containerStyle={styles.pr2} + /> + + )} )} diff --git a/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx b/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx index 2d09aa9960f7..6048000a9823 100644 --- a/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx +++ b/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx @@ -18,6 +18,7 @@ import {formatPhoneNumber} from '@libs/LocalePhoneNumber'; import Navigation from '@libs/Navigation/Navigation'; import {getHeaderMessage} from '@libs/OptionsListUtils'; import {getPersonalDetailByEmail} from '@libs/PersonalDetailsUtils'; +import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -35,6 +36,7 @@ function VacationDelegatePage() { const [vacationDelegate] = useOnyx(ONYXKEYS.NVP_PRIVATE_VACATION_DELEGATE, {canBeMissing: true}); const currentVacationDelegate = vacationDelegate?.delegate; const delegatePersonalDetails = getPersonalDetailByEmail(currentVacationDelegate ?? ''); + const hasActiveDelegations = (vacationDelegate?.delegatorFor?.length ?? 0) > 0; const icons = useMemoizedLazyExpensifyIcons(['FallbackAvatar']); const excludeLogins = useMemo( @@ -164,6 +166,10 @@ function VacationDelegatePage() { searchInServer(debouncedSearchTerm); }, [debouncedSearchTerm]); + if (hasActiveDelegations) { + return ; + } + return ( <>