diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index 8b3f8ef1f1..d2a28505e6 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -17,7 +17,6 @@ "accept_all": "", "accept_invitation": "", "accepted_invite": "", - "access_denied": "", "account_has_been_link_to_institution_account": "", "account_has_past_due_invoice_change_plan_warning": "", "account_managed_by_group_administrator": "", @@ -468,7 +467,6 @@ "hotkey_undo": "", "hotkeys": "", "i_want_to_stay": "", - "if_error_persists_try_relinking_provider": "", "ignore_validation_errors": "", "ill_take_it": "", "image_file": "", @@ -683,6 +681,7 @@ "on": "", "on_free_plan_upgrade_to_access_features": "", "only_group_admin_or_managers_can_delete_your_account": "", + "only_importer_can_refresh": "", "open_project": "", "optional": "", "or": "", @@ -936,6 +935,7 @@ "showing_x_out_of_n_projects": "", "showing_x_results": "", "showing_x_results_of_total": "", + "something_not_right": "", "something_went_wrong_loading_pdf_viewer": "", "something_went_wrong_processing_the_request": "", "something_went_wrong_rendering_pdf": "", @@ -1078,6 +1078,7 @@ "try_it_for_free": "", "try_premium_for_free": "", "try_recompile_project_or_troubleshoot": "", + "try_relinking_provider": "", "try_to_compile_despite_errors": "", "turn_off_link_sharing": "", "turn_on_link_sharing": "", diff --git a/services/web/frontend/js/features/file-view/components/file-view-header.js b/services/web/frontend/js/features/file-view/components/file-view-header.js index 154860390e..da1fbb93a6 100644 --- a/services/web/frontend/js/features/file-view/components/file-view-header.js +++ b/services/web/frontend/js/features/file-view/components/file-view-header.js @@ -7,6 +7,8 @@ import { formatTime, relativeDate } from '../../utils/format-date' import { postJSON } from '../../../infrastructure/fetch-json' import { useEditorContext } from '../../../shared/context/editor-context' import { useProjectContext } from '../../../shared/context/project-context' +import { useUserContext } from '../../../shared/context/user-context' +import { capitalize } from 'lodash' import importOverleafModules from '../../../../macros/import-overleaf-module.macro' import useAbortController from '../../../shared/hooks/use-abort-controller' @@ -40,6 +42,7 @@ export default function FileViewHeader({ file, storeReferencesKeys }) { const { permissionsLevel } = useEditorContext({ permissionsLevel: PropTypes.string, }) + const { id: userId } = useUserContext() const { t } = useTranslation() const [refreshing, setRefreshing] = useState(false) @@ -48,7 +51,9 @@ export default function FileViewHeader({ file, storeReferencesKeys }) { const { signal } = useAbortController() let fileInfo + let isImporter if (file.linkedFileData) { + isImporter = file.linkedFileData.importer_id === userId if (file.linkedFileData.provider === 'url') { fileInfo = (
@@ -117,9 +122,9 @@ export default function FileViewHeader({ file, storeReferencesKeys }) { ))} {file.linkedFileData && permissionsLevel !== 'readOnly' && ( +
)} diff --git a/services/web/locales/de.json b/services/web/locales/de.json index a19827b024..8a4fb71991 100644 --- a/services/web/locales/de.json +++ b/services/web/locales/de.json @@ -553,7 +553,6 @@ "how_to_insert_images": "So fügst du Bilder ein", "hundreds_templates_info": "Erstelle schöne Dokumente ausgehend von unserer Galerie mit LaTeX-Vorlagen für Zeitschriften, Konferenzen, Abschlussarbeiten, Berichte, Lebensläufe und vieles mehr.", "i_want_to_stay": "Ich möchte bleiben", - "if_error_persists_try_relinking_provider": "Wenn dieser Fehler weiterhin besteht, versuche, dein __provider__-Konto hier erneut zu verknüpfen", "if_have_existing_can_link": "Wenn du ein vorhandenes __appName__-Konto mit einer anderen E-Mail-Adresse hast, kannst du es mit deinem __institutionName__-Konto verknüpfen, indem du auf „__clickText__“ klickst.", "if_owner_can_link": "Wenn du das __appName__ Konto mit __email__ besitzt, kannst du es mit deinem institutionellen Konto __institutionName__ verknüpfen.", "ignore_and_continue_institution_linking": "Du kannst dies auch ignorieren und weiter zu __appName__ mit deinem __email__-Konto gehen.", diff --git a/services/web/locales/en.json b/services/web/locales/en.json index c4c19b124d..81d5b4c3d4 100644 --- a/services/web/locales/en.json +++ b/services/web/locales/en.json @@ -733,7 +733,6 @@ "how_to_insert_images": "How to insert images", "hundreds_templates_info": "Produce beautiful documents starting from our gallery of LaTeX templates for journals, conferences, theses, reports, CVs and much more.", "i_want_to_stay": "I want to stay", - "if_error_persists_try_relinking_provider": "If this error persists, try re-linking your __provider__ account here", "if_have_existing_can_link": "If you have an existing __appName__ account on another email, you can link it to your __institutionName__ account by clicking __clickText__.", "if_owner_can_link": "If you own the __appName__ account with __email__, you will be allowed to link it to your __institutionName__ institutional account.", "ignore_and_continue_institution_linking": "You can also ignore this and continue to __appName__ with your __email__ account.", @@ -1094,6 +1093,7 @@ "one_free_collab": "One free collaborator", "online_latex_editor": "Online LaTeX Editor", "only_group_admin_or_managers_can_delete_your_account": "Only your group admin or group managers will be able to delete your account.", + "only_importer_can_refresh": "Only the person who originally imported this __provider__ file can refresh it.", "open_a_file_on_the_left": "Open a file on the left", "open_as_template": "Open as Template", "open_project": "Open Project", @@ -1475,6 +1475,7 @@ "skip_to_content": "Skip to content", "sl_gives_you_free_stuff_see_progress_below": "When someone starts using __appName__ after your recommendation we’ll give you some free stuff to say thanks! Check your progress below.", "sl_included_history_of_changes_blurb": "__appName__ includes a history of all of your changes so you can see exactly who changed what, and when. This makes it extremely easy to keep up to date with any progress made by your collaborators and allows you to review recent work.", + "something_not_right": "Something’s not right", "something_went_wrong_canceling_your_subscription": "Something went wrong canceling your subscription. Please contact support.", "something_went_wrong_loading_pdf_viewer": "Something went wrong loading the PDF viewer. This might be caused by issues like <0>temporary network problems or an <0>outdated web browser. Please follow the <1>troubleshooting steps for access, loading and display problems. If the issue persists, please <2>let us know.", "something_went_wrong_processing_the_request": "Something went wrong processing the request", @@ -1681,6 +1682,7 @@ "try_now": "Try Now", "try_premium_for_free": "Try Premium for free", "try_recompile_project_or_troubleshoot": "Please try recompiling the project from scratch, and if that doesn’t help, follow our <0>troubleshooting guide.", + "try_relinking_provider": "It looks like you need to re-link your __provider__ account.", "try_to_compile_despite_errors": "Try to compile despite errors", "turn_off_link_sharing": "Turn off link sharing", "turn_on_link_sharing": "Turn on link sharing", diff --git a/services/web/locales/fr.json b/services/web/locales/fr.json index c7ee82a778..5705e94b54 100644 --- a/services/web/locales/fr.json +++ b/services/web/locales/fr.json @@ -458,7 +458,6 @@ "hotkeys": "Raccourcis clavier", "hundreds_templates_info": "Créez de magnifiques documents en vous basant sur notre galerie de modèles LaTeX pour les revues, conférences, thèses, rapports, CV et bien plus encore.", "i_want_to_stay": "Je veux rester", - "if_error_persists_try_relinking_provider": "Si cette erreur persiste, essayez de lier à nouveau votre compte ici", "if_have_existing_can_link": "Si vous avez déjà un compte __appName__ sur une autre adresse courriel, vous pouvez le lier à votre compte __institutionName__ en cliquant __clickText.", "if_owner_can_link": "Si vous possédez le compte __appName__ ayant pour adresse __email__, vous serez autorisé à le lier à votre compte institutionnel __institutionName__.", "ignore_and_continue_institution_linking": "Vous pouvez également ignorer ceci et continuer vers __appName__ avec votre compte __email__.", diff --git a/services/web/locales/zh-CN.json b/services/web/locales/zh-CN.json index 9cfab63a29..b932ff9810 100644 --- a/services/web/locales/zh-CN.json +++ b/services/web/locales/zh-CN.json @@ -454,7 +454,6 @@ "hotkeys": "快捷键", "hundreds_templates_info": "从我们的 LaTeX 模板库开始,为期刊、会议、论文、报告、简历等制作漂亮的文档。", "i_want_to_stay": "我要留下", - "if_error_persists_try_relinking_provider": "如果此错误仍然存在,请尝试在此处重新链接您的__provider__帐户", "if_have_existing_can_link": "如果您在另一封电子邮件中有一个现有的 __appName__ 帐户,您可以通过单击 __clickText__ 将其链接到您的 __institutionName__ 账户。", "if_owner_can_link": "如果您在__appName__拥有账户__email__,您可以将其链接到您的 __institutionName__ 机构帐户。", "ignore_and_continue_institution_linking": "您也可以忽略此项,然后继续在 __appName__ 上使用您的 __email__ 帐户。", diff --git a/services/web/test/frontend/features/file-view/components/file-view-header.test.js b/services/web/test/frontend/features/file-view/components/file-view-header.test.js index 6789462a3d..0973292327 100644 --- a/services/web/test/frontend/features/file-view/components/file-view-header.test.js +++ b/services/web/test/frontend/features/file-view/components/file-view-header.test.js @@ -27,6 +27,19 @@ describe('', function () { source_project_id: 'source-project-id', source_entity_path: '/source-entity-path.ext', provider: 'project_file', + importer_id: '123abd', + }, + created: new Date(2021, 1, 17, 3, 24).toISOString(), + } + + const notOrignalImporterFile = { + name: 'references.bib', + linkedFileData: { + v1_source_doc_id: 'v1-source-id', + source_project_id: 'source-project-id', + source_entity_path: '/source-entity-path.ext', + provider: 'project_file', + importer_id: '123abc', }, created: new Date(2021, 1, 17, 3, 24).toISOString(), } @@ -45,6 +58,7 @@ describe('', function () { name: 'example.tex', linkedFileData: { provider: 'zotero', + importer_id: '123abd', }, created: new Date(2021, 1, 17, 3, 24).toISOString(), } @@ -103,11 +117,13 @@ describe('', function () { {}} /> ) - fireEvent.click(screen.getByRole('button', { name: 'Refresh' })) + const refreshButton = screen.getByRole('button', { name: 'Refresh' }) + fireEvent.click(refreshButton) await waitForElementToBeRemoved(() => screen.getByText('Refreshing', { exact: false }) ) + await screen.findByText('Refresh') }) @@ -137,14 +153,38 @@ describe('', function () { /> ) - fireEvent.click(screen.getByRole('button', { name: 'Refresh' })) + const refreshButton = screen.getByRole('button', { name: 'Refresh' }) + fireEvent.click(refreshButton) await waitForElementToBeRemoved(() => screen.getByText('Refreshing', { exact: false }) ) expect(fetchMock.done()).to.be.true - expect(storeReferencesKeys).to.be.calledWith(reindexResponse.keys) + expect(storeReferencesKeys).to.have.been.calledWith(reindexResponse.keys) + }) + + it('Displays message when user is not original importer', function () { + renderWithEditorContext( + {}} + /> + ) + + const refreshButton = screen.getByRole('button', { name: 'Refresh' }) + if (refreshButton.disabled) { + const textBefore = screen.getByText( + 'Only the person who originally imported this', + { exact: false } + ) + expect(textBefore).to.exist + + const textAfter = screen.getByText('file can refresh it', { + exact: false, + }) + expect(textAfter).to.exist + } }) })