summaryrefslogtreecommitdiff
path: root/frontend/src/components/modals
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/modals')
-rw-r--r--frontend/src/components/modals/MultiplePluginsInstallModal.tsx37
-rw-r--r--frontend/src/components/modals/PluginInstallModal.tsx66
2 files changed, 68 insertions, 35 deletions
diff --git a/frontend/src/components/modals/MultiplePluginsInstallModal.tsx b/frontend/src/components/modals/MultiplePluginsInstallModal.tsx
index ba49ba92..9c86f3db 100644
--- a/frontend/src/components/modals/MultiplePluginsInstallModal.tsx
+++ b/frontend/src/components/modals/MultiplePluginsInstallModal.tsx
@@ -3,7 +3,7 @@ import { FC, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { FaCheck, FaDownload } from 'react-icons/fa';
-import { InstallType } from '../../plugin';
+import { InstallType, InstallTypeTranslationMapping } from '../../plugin';
interface MultiplePluginsInstallModalProps {
requests: { name: string; version: string; hash: string; install_type: InstallType }[];
@@ -12,13 +12,7 @@ interface MultiplePluginsInstallModalProps {
closeModal?(): void;
}
-// values are the JSON keys used in the translation file
-const InstallTypeTranslationMapping = {
- [InstallType.INSTALL]: 'install',
- [InstallType.REINSTALL]: 'reinstall',
- [InstallType.UPDATE]: 'update',
-} as const satisfies Record<InstallType, string>;
-
+// IMPORTANT! Keep in sync with `t(...)` comments below
type TitleTranslationMapping = 'mixed' | (typeof InstallTypeTranslationMapping)[InstallType];
const MultiplePluginsInstallModal: FC<MultiplePluginsInstallModalProps> = ({
@@ -70,6 +64,8 @@ const MultiplePluginsInstallModal: FC<MultiplePluginsInstallModalProps> = ({
if (requests.every(({ install_type }) => install_type === InstallType.INSTALL)) return 'install';
if (requests.every(({ install_type }) => install_type === InstallType.REINSTALL)) return 'reinstall';
if (requests.every(({ install_type }) => install_type === InstallType.UPDATE)) return 'update';
+ if (requests.every(({ install_type }) => install_type === InstallType.DOWNGRADE)) return 'downgrade';
+ if (requests.every(({ install_type }) => install_type === InstallType.OVERWRITE)) return 'overwrite';
return 'mixed';
}, [requests]);
@@ -86,14 +82,35 @@ const MultiplePluginsInstallModal: FC<MultiplePluginsInstallModalProps> = ({
onCancel={async () => {
await onCancel();
}}
- strTitle={<div>{t(`MultiplePluginsInstallModal.title.${installTypeGrouped}`, { count: requests.length })}</div>}
- strOKButtonText={t(`MultiplePluginsInstallModal.ok_button.${loading ? 'loading' : 'idle'}`)}
+ strTitle={
+ <div>
+ {
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('MultiplePluginsInstallModal.title.install', { count: n })
+ // t('MultiplePluginsInstallModal.title.reinstall', { count: n })
+ // t('MultiplePluginsInstallModal.title.update', { count: n })
+ // t('MultiplePluginsInstallModal.title.downgrade', { count: n })
+ // t('MultiplePluginsInstallModal.title.overwrite', { count: n })
+ // t('MultiplePluginsInstallModal.title.mixed', { count: n })
+ t(`MultiplePluginsInstallModal.title.${installTypeGrouped}`, { count: requests.length })
+ }
+ </div>
+ }
+ strOKButtonText={
+ loading ? t('MultiplePluginsInstallModal.ok_button.loading') : t('MultiplePluginsInstallModal.ok_button.idle')
+ }
>
<div>
{t('MultiplePluginsInstallModal.confirm')}
<ul style={{ listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '4px' }}>
{requests.map(({ name, version, install_type, hash }, i) => {
const installTypeStr = InstallTypeTranslationMapping[install_type];
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('MultiplePluginsInstallModal.description.install')
+ // t('MultiplePluginsInstallModal.description.reinstall')
+ // t('MultiplePluginsInstallModal.description.update')
+ // t('MultiplePluginsInstallModal.description.downgrade')
+ // t('MultiplePluginsInstallModal.description.overwrite')
const description = t(`MultiplePluginsInstallModal.description.${installTypeStr}`, {
name,
version,
diff --git a/frontend/src/components/modals/PluginInstallModal.tsx b/frontend/src/components/modals/PluginInstallModal.tsx
index 227bd818..16419d91 100644
--- a/frontend/src/components/modals/PluginInstallModal.tsx
+++ b/frontend/src/components/modals/PluginInstallModal.tsx
@@ -2,13 +2,13 @@ import { ConfirmModal, Navigation, ProgressBarWithInfo, QuickAccessTab } from '@
import { FC, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import TranslationHelper, { TranslationClass } from '../../utils/TranslationHelper';
+import { InstallType, InstallTypeTranslationMapping } from '../../plugin';
interface PluginInstallModalProps {
artifact: string;
version: string;
hash: string;
- installType: number;
+ installType: InstallType;
onOK(): void;
onCancel(): void;
closeModal?(): void;
@@ -44,6 +44,8 @@ const PluginInstallModal: FC<PluginInstallModalProps> = ({
};
}, []);
+ const installTypeTranslationKey = InstallTypeTranslationMapping[installType];
+
return (
<ConfirmModal
bOKDisabled={loading}
@@ -59,12 +61,15 @@ const PluginInstallModal: FC<PluginInstallModalProps> = ({
}}
strTitle={
<div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', width: '100%' }}>
- <TranslationHelper
- transClass={TranslationClass.PLUGIN_INSTALL_MODAL}
- transText="title"
- i18nArgs={{ artifact: artifact }}
- installType={installType}
- />
+ {
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('PluginInstallModal.install.title')
+ // t('PluginInstallModal.reinstall.title')
+ // t('PluginInstallModal.update.title')
+ // t('PluginInstallModal.downgrade.title')
+ // t('PluginInstallModal.overwrite.title')
+ t(`PluginInstallModal.${installTypeTranslationKey}.title`, { artifact: artifact })
+ }
{loading && (
<div style={{ marginLeft: 'auto' }}>
<ProgressBarWithInfo
@@ -80,33 +85,44 @@ const PluginInstallModal: FC<PluginInstallModalProps> = ({
strOKButtonText={
loading ? (
<div>
- <TranslationHelper
- transClass={TranslationClass.PLUGIN_INSTALL_MODAL}
- transText="button_processing"
- installType={installType}
- />
+ {
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('PluginInstallModal.install.button_processing')
+ // t('PluginInstallModal.reinstall.button_processing')
+ // t('PluginInstallModal.update.button_processing')
+ // t('PluginInstallModal.downgrade.button_processing')
+ // t('PluginInstallModal.overwrite.button_processing')
+ t(`PluginInstallModal.${installTypeTranslationKey}.button_processing`)
+ }
</div>
) : (
<div>
- <TranslationHelper
- transClass={TranslationClass.PLUGIN_INSTALL_MODAL}
- transText="button_idle"
- installType={installType}
- />
+ {
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('PluginInstallModal.install.button_idle')
+ // t('PluginInstallModal.reinstall.button_idle')
+ // t('PluginInstallModal.update.button_idle')
+ // t('PluginInstallModal.downgrade.button_idle')
+ // t('PluginInstallModal.overwrite.button_idle')
+ t(`PluginInstallModal.${installTypeTranslationKey}.button_idle`)
+ }
</div>
)
}
>
<div>
- <TranslationHelper
- transClass={TranslationClass.PLUGIN_INSTALL_MODAL}
- transText="desc"
- i18nArgs={{
+ {
+ // IMPORTANT! These comments are not cosmetic and are needed for `extracttext` task to work
+ // t('PluginInstallModal.install.desc')
+ // t('PluginInstallModal.reinstall.desc')
+ // t('PluginInstallModal.update.desc')
+ // t('PluginInstallModal.downgrade.desc')
+ // t('PluginInstallModal.overwrite.desc')
+ t(`PluginInstallModal.${installTypeTranslationKey}.desc`, {
artifact: artifact,
version: version,
- }}
- installType={installType}
- />
+ })
+ }
</div>
{hash == 'False' && <span style={{ color: 'red' }}>{t('PluginInstallModal.no_hash')}</span>}
</ConfirmModal>