From c1cb5499fa9693fdeb91af6af960a5168b33f1fe Mon Sep 17 00:00:00 2001 From: devchenyan Date: Sun, 23 Feb 2025 20:50:47 +0800 Subject: [PATCH 1/8] feat: Optimize data migration --- .../DataSetting/dataSetting.module.scss | 34 ++++- .../src/components/DataSetting/hooks.ts | 44 ++++-- .../src/components/DataSetting/index.tsx | 56 +++++-- .../src/components/ModifyPathDialog/index.tsx | 128 ++++++++++++++++ .../modifyPathDialog.module.scss | 96 ++++++++++++ .../src/components/Settings/index.tsx | 2 +- .../neuron-ui/src/containers/Main/index.tsx | 15 +- packages/neuron-ui/src/locales/ar.json | 18 ++- packages/neuron-ui/src/locales/en.json | 18 ++- packages/neuron-ui/src/locales/es.json | 18 ++- packages/neuron-ui/src/locales/fr.json | 18 ++- packages/neuron-ui/src/locales/zh-tw.json | 18 ++- packages/neuron-ui/src/locales/zh.json | 18 ++- packages/neuron-ui/src/styles/theme.scss | 2 +- packages/neuron-ui/src/widgets/Icons/More.svg | 5 + packages/neuron-ui/src/widgets/Icons/icon.tsx | 2 + .../widgets/MigrateCkbDataDialog/index.tsx | 140 ++++++++++-------- .../migrateCkbDataDialog.module.scss | 97 ++++++------ 18 files changed, 565 insertions(+), 164 deletions(-) create mode 100644 packages/neuron-ui/src/components/ModifyPathDialog/index.tsx create mode 100644 packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss create mode 100644 packages/neuron-ui/src/widgets/Icons/More.svg diff --git a/packages/neuron-ui/src/components/DataSetting/dataSetting.module.scss b/packages/neuron-ui/src/components/DataSetting/dataSetting.module.scss index e260687f30..e90dea89ae 100644 --- a/packages/neuron-ui/src/components/DataSetting/dataSetting.module.scss +++ b/packages/neuron-ui/src/components/DataSetting/dataSetting.module.scss @@ -50,14 +50,16 @@ .itemBtn { color: var(--secondary-text-color); - padding: 0 16px; - flex-shrink: 0; + padding: 0 8px; border-radius: 8px; height: 100%; background: var(--input-disabled-color); border: 1px solid var(--divide-line-color); &:hover:not([disabled]) { - color: var(--primary-color); + g, + path { + stroke: var(--primary-color); + } } &[disabled] { cursor: not-allowed; @@ -160,3 +162,29 @@ word-break: normal; white-space: normal; } + +.moreTooltip { + height: 100%; +} + +.moreTip { + margin-top: 4px; + margin-left: 60px; +} + +.actions { + button { + background: none; + font-size: 14px; + line-height: 30px; + color: var(--main-text-color); + border: none; + text-align: left; + display: flex; + align-items: center; + cursor: pointer; + &:hover { + color: var(--primary-color); + } + } +} diff --git a/packages/neuron-ui/src/components/DataSetting/hooks.ts b/packages/neuron-ui/src/components/DataSetting/hooks.ts index e945e4823d..2b039046e7 100644 --- a/packages/neuron-ui/src/components/DataSetting/hooks.ts +++ b/packages/neuron-ui/src/components/DataSetting/hooks.ts @@ -18,21 +18,27 @@ export const useDataPath = (network?: State.Network) => { } }) }, [network?.id]) - const onSetting = useCallback(() => { - invokeShowOpenDialog({ - buttonLabel: t('settings.data.set', { lng: navigator.language }), - properties: ['openDirectory', 'createDirectory', 'promptToCreate', 'treatPackageAsDirectory'], - }).then(res => { - if (isSuccessResponse(res) && !res.result?.canceled && res.result?.filePaths?.length) { - setCurrentPath(res.result?.filePaths?.[0]) - stopProcessMonitor(type).then(stopRes => { - if (isSuccessResponse(stopRes)) { - setIsDialogOpen(true) - } - }) - } - }) - }, [t, type]) + + const onSetting = useCallback( + (onSuccess?: (path: string) => void) => { + invokeShowOpenDialog({ + buttonLabel: t('settings.data.set', { lng: navigator.language }), + properties: ['openDirectory', 'createDirectory', 'promptToCreate', 'treatPackageAsDirectory'], + }).then(res => { + if (isSuccessResponse(res) && !res.result?.canceled && res.result?.filePaths?.length) { + const path = res.result?.filePaths?.[0] + setCurrentPath(path) + stopProcessMonitor(type).then(stopRes => { + if (isSuccessResponse(stopRes)) { + onSuccess?.(path) + } + }) + } + }) + }, + [t, type] + ) + const onCancel = useCallback(() => { startProcessMonitor(type).then(res => { if (isSuccessResponse(res)) { @@ -40,6 +46,7 @@ export const useDataPath = (network?: State.Network) => { } }) }, [setIsDialogOpen, type]) + const onConfirm = useCallback( (dataPath: string) => { setPrevPath(dataPath) @@ -47,6 +54,12 @@ export const useDataPath = (network?: State.Network) => { }, [setIsDialogOpen, setPrevPath] ) + + const openDialog = useCallback(() => { + setCurrentPath('') + setIsDialogOpen(true) + }, [setIsDialogOpen, setCurrentPath]) + return { prevPath, currentPath, @@ -54,6 +67,7 @@ export const useDataPath = (network?: State.Network) => { onCancel, onConfirm, isDialogOpen, + openDialog, } } diff --git a/packages/neuron-ui/src/components/DataSetting/index.tsx b/packages/neuron-ui/src/components/DataSetting/index.tsx index 6c284eff8c..652d70f8c1 100644 --- a/packages/neuron-ui/src/components/DataSetting/index.tsx +++ b/packages/neuron-ui/src/components/DataSetting/index.tsx @@ -5,8 +5,8 @@ import { useDispatch, useState as useGlobalState } from 'states' import { shell } from 'electron' import Tooltip from 'widgets/Tooltip' import { NetworkType } from 'utils/const' -import { Attention } from 'widgets/Icons/icon' -import MigrateCkbDataDialog from 'widgets/MigrateCkbDataDialog' +import { Attention, More } from 'widgets/Icons/icon' +import ModifyPathDialog from 'components/ModifyPathDialog' import { useDataPath } from './hooks' import styles from './dataSetting.module.scss' @@ -28,9 +28,33 @@ const PathItem = ({ - + + {[ + { + label: 'settings.data.browse-local-files', + onClick: openPath, + }, + { + label: 'settings.data.modify-path', + onClick: handleClick, + }, + ].map(({ label, onClick }) => ( + + ))} + + } + trigger="click" + > + + ) } @@ -43,7 +67,7 @@ const DataSetting = () => { settings: { networks = [] }, } = useGlobalState() const network = useMemo(() => networks.find(n => n.id === networkID), [networkID, networks]) - const { onSetting, prevPath, currentPath, isDialogOpen, onCancel, onConfirm } = useDataPath(network) + const { isDialogOpen, openDialog, onSetting, prevPath, currentPath, onCancel, onConfirm } = useDataPath(network) const openPath = useCallback(() => { if (prevPath) { @@ -52,6 +76,7 @@ const DataSetting = () => { }, [prevPath]) const isLightClient = network?.type === NetworkType.Light const hiddenDataPath = isLightClient || !network?.readonly + return ( <>
@@ -82,17 +107,20 @@ const DataSetting = () => {
- {hiddenDataPath ? null : } + {hiddenDataPath ? null : }
- + + {isDialogOpen && ( + + )} ) } diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx new file mode 100644 index 0000000000..f115da1009 --- /dev/null +++ b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx @@ -0,0 +1,128 @@ +import React, { useState, useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import Dialog from 'widgets/Dialog' +import Button from 'widgets/Button' +import AlertDialog from 'widgets/AlertDialog' +import MigrateCkbDataDialog from 'widgets/MigrateCkbDataDialog' +import { setCkbNodeDataPath } from 'services/remote' +import { Attention } from 'widgets/Icons/icon' +import { isSuccessResponse } from 'utils' +import styles from './modifyPathDialog.module.scss' + +const requiredDiskSpace = '158' + +const ModifyPathDialog = ({ + prevPath, + currentPath, + onCancel, + onConfirm, + onSetting, +}: { + onCancel?: () => void + prevPath: string + currentPath: string + onConfirm: (dataPath: string) => void + onSetting: (onSuccess?: (path: string) => void) => void +}) => { + const [t] = useTranslation() + const [isMigrateOpen, setIsMigrateOpen] = useState(false) + const [failureMessage, setFailureMessage] = useState('') + const [isRetainPreviousData, setIsRetainPreviousData] = useState(false) + + const handleResynchronize = useCallback(async () => { + setFailureMessage('') + onSetting(path => { + setCkbNodeDataPath({ + dataPath: path, + clearCache: true, + }).then(res => { + if (isSuccessResponse(res)) { + onConfirm(path) + } else { + setFailureMessage(typeof res.message === 'string' ? res.message : res.message.content!) + } + }) + }) + }, [onSetting, onConfirm]) + + if (isMigrateOpen) { + return ( + setIsMigrateOpen(false)} + onConfirm={onConfirm} + /> + ) + } + + if (isRetainPreviousData) { + return ( + setIsRetainPreviousData(false)} + onConfirm={() => setIsMigrateOpen(true)} + confirmText={t('wizard.next')} + className={styles.dialog} + disabled={!currentPath} + > +
+
+ + {t('settings.data.modify-path-notice', { requiredDiskSpace })} +
+ +
+

{currentPath}

+ +
+
+
+ ) + } + + return ( + <> + +
+
+ + {t('settings.data.modify-path-notice', { requiredDiskSpace })} +
+

{t('settings.data.modify-path-content')}

+ +
+
+
+
+ setFailureMessage('')} + /> + + ) +} + +ModifyPathDialog.displayName = 'ModifyPathDialog' + +export default ModifyPathDialog diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss b/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss new file mode 100644 index 0000000000..df17436b21 --- /dev/null +++ b/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss @@ -0,0 +1,96 @@ +@import '../../styles/mixin.scss'; + +.passwordInput { + margin-top: 16px; +} + +.dialog { + width: 700px; +} + +.tip { + color: var(--warn-text-color); + background: var(--warn-background-color); + margin: -20px -16px 0; + display: flex; + align-items: center; + justify-content: center; + height: 32px; + font-size: 12px; + gap: 4px; + font-weight: 500; + border-bottom: 1px solid var(--warn-border-color); +} + +.label { + font-weight: 500; + color: var(--main-text-color); + font-size: 14px; +} + +.copy { + display: flex; + align-items: center; + margin-left: 6px; +} + +.notice { + @include dialog-copy-animation; +} + +.modifyTip { + max-width: 450px; + margin: 0 auto; + text-align: center; + margin-top: 16px; + font-size: 14px; + line-height: 24px; + color: var(--main-text-color); +} + +.footer { + background: var(--secondary-background-color); + padding: 24px 0 20px; + @include dialog-footer; + + button { + padding: 0 20px; + } + + button:nth-child(2) { + margin-left: 24px; + } +} + +.pathItem { + display: flex; + align-items: center; + justify-content: space-between; + width: 488px; + height: 40px; + margin: 24px auto 0; + background: var(--secondary-background-color); + border: 1px solid var(--divide-line-color); + border-radius: 8px; + button { + height: 100%; + border-radius: 0 8px 8px 0; + min-width: 60px; + border: none; + border-left: 1px solid var(--divide-line-color); + background: var(--input-disabled-color); + cursor: pointer; + color: var(--secondary-text-color); + &:hover { + color: var(--primary-color); + } + } + p { + padding: 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 0 16px; + color: var(--input-hint-color); + } +} diff --git a/packages/neuron-ui/src/components/Settings/index.tsx b/packages/neuron-ui/src/components/Settings/index.tsx index 4f2dc6276f..60ce717a25 100644 --- a/packages/neuron-ui/src/components/Settings/index.tsx +++ b/packages/neuron-ui/src/components/Settings/index.tsx @@ -116,7 +116,7 @@ const Settings = () => { useOnLocalStorageChange(onChange) return ( - +
{items.map(([title, marginTop, ItemCmp]) => (
diff --git a/packages/neuron-ui/src/containers/Main/index.tsx b/packages/neuron-ui/src/containers/Main/index.tsx index ac887ec701..8555aef211 100644 --- a/packages/neuron-ui/src/containers/Main/index.tsx +++ b/packages/neuron-ui/src/containers/Main/index.tsx @@ -195,13 +195,14 @@ const MainContent = () => { onConfirm={needConfirm ? onMigrate : onContinueSync} onChangeDataPath={setNewCkbDataPath} /> - + {isMigrateDataDialogShow && ( + + )} + + + + diff --git a/packages/neuron-ui/src/widgets/Icons/icon.tsx b/packages/neuron-ui/src/widgets/Icons/icon.tsx index 062596ad18..bfb84cbda1 100644 --- a/packages/neuron-ui/src/widgets/Icons/icon.tsx +++ b/packages/neuron-ui/src/widgets/Icons/icon.tsx @@ -65,6 +65,7 @@ import { ReactComponent as UploadSvg } from './Upload.svg' import { ReactComponent as PrivateKeySvg } from './PrivateKey.svg' import { ReactComponent as DAODepositSvg } from './DAODeposit.svg' import { ReactComponent as DAOWithdrawalSvg } from './DAOWithdrawal.svg' +import { ReactComponent as MoreSvg } from './More.svg' import styles from './icon.module.scss' @@ -146,3 +147,4 @@ export const Upload = WrapSvg(UploadSvg) export const PrivateKey = WrapSvg(PrivateKeySvg) export const DAODeposit = WrapSvg(DAODepositSvg) export const DAOWithdrawal = WrapSvg(DAOWithdrawalSvg) +export const More = WrapSvg(MoreSvg) diff --git a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx index 536c1b17ff..a7ed779196 100644 --- a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx +++ b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx @@ -1,90 +1,102 @@ -import React, { useCallback, useRef, useState } from 'react' +import React, { useCallback, useState, useEffect, useRef } from 'react' +import { showPageNotice, useDispatch } from 'states' import Dialog from 'widgets/Dialog' +import { shell } from 'electron' import { useTranslation } from 'react-i18next' import { setCkbNodeDataPath } from 'services/remote' import { isSuccessResponse } from 'utils' -import { Attention } from 'widgets/Icons/icon' import Button from 'widgets/Button' import AlertDialog from 'widgets/AlertDialog' import styles from './migrateCkbDataDialog.module.scss' const MigrateCkbDataDialog = ({ - show, prevPath, currentPath, onCancel, onConfirm, }: { - show: boolean prevPath: string currentPath: string onCancel: () => void onConfirm: (dataPath: string) => void }) => { const [t] = useTranslation() - const resyncRef = useRef(null) + const dispatch = useDispatch() const [failureMessage, setFailureMessage] = useState('') - const [savingType, setSavingType] = useState() - const startSync = useCallback( - (syncType: string) => { - setFailureMessage('') - setSavingType(syncType) - setCkbNodeDataPath({ - dataPath: currentPath, - clearCache: syncType === 'resync', - }) - .then(res => { - if (isSuccessResponse(res)) { - onConfirm(currentPath) - } else { - setFailureMessage(typeof res.message === 'string' ? res.message : res.message.content!) - } - }) - .finally(() => { - setSavingType(undefined) - }) - }, - [currentPath, onConfirm] - ) - const onActionClick = useCallback( - (e: React.MouseEvent) => { - if (e.currentTarget.dataset.syncType) { - startSync(e.currentTarget.dataset.syncType) + const [isSaving, setIsSaving] = useState(false) + const timerRef = useRef(null) + const [seconds, setSeconds] = useState(5) + + const openPath = (e: React.SyntheticEvent) => { + const btn = (e.target as HTMLButtonElement)?.closest('button') + if (btn?.dataset?.path) { + shell.openPath(btn?.dataset?.path) + } + } + + useEffect(() => { + if (seconds !== 0) { + timerRef.current = setTimeout(() => { + setSeconds(seconds - 1) + }, 1000) + } + + return () => { + if (timerRef.current) { + clearTimeout(timerRef.current) } - }, - [startSync] - ) + } + }, [seconds]) + + const handleMigrate = useCallback(() => { + setFailureMessage('') + setIsSaving(true) + setCkbNodeDataPath({ + dataPath: currentPath, + clearCache: false, + }) + .then(res => { + if (isSuccessResponse(res)) { + showPageNotice(t('settings.data.migrate-data-successful'))(dispatch) + onConfirm(currentPath) + } else { + setFailureMessage(typeof res.message === 'string' ? res.message : res.message.content!) + } + }) + .finally(() => { + setIsSaving(false) + }) + }, [currentPath, onConfirm, dispatch]) + return ( <> - +
-
{t('settings.data.remove-ckb-data-tip', { prevPath, currentPath })}
-
- - {t('settings.data.resync-ckb-node-describe')} -
- -
- +
+
+

{t('settings.data.migrate-step-2')}

+ +
+
+

{t('settings.data.migrate-step-3')}

+
@@ -94,9 +106,7 @@ const MigrateCkbDataDialog = ({ message={failureMessage} type="warning" onCancel={() => setFailureMessage('')} - onOk={() => { - startSync('resync') - }} + onOk={handleMigrate} /> ) diff --git a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/migrateCkbDataDialog.module.scss b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/migrateCkbDataDialog.module.scss index 7a63ba0859..f0b20a171f 100644 --- a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/migrateCkbDataDialog.module.scss +++ b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/migrateCkbDataDialog.module.scss @@ -1,68 +1,61 @@ @import '../../styles/mixin.scss'; .dialogContainer { - max-width: 700px; + width: 680px; color: var(--main-text-color); font-size: 14px; line-height: 24px; + display: flex; + flex-direction: column; - .attention { - display: flex; - justify-content: center; - align-items: center; - padding: 8px; - width: 80%; - margin: 32px auto 0; - background: var(--warn-background-color); - border: 1px solid rgba(252, 136, 0, 0.2); - border-radius: 4px; - font-weight: 500; - font-size: 12px; - line-height: 24px; - color: var(--warn-text-color); + .title { + text-align: center; + color: var(--main-text-color); + margin: 0; + } - @media (prefers-color-scheme: dark) { - border: none; - } + .noticeWrap { + margin: 16px auto 0; + border-radius: 8px; + background: var(--fourth-background-color); + padding: 12px 16px 12px 30px; + position: relative; - svg { - margin-right: 4px; - width: 14px; + &::before { + content: ''; + height: 66px; + width: 2px; + background: var(--primary-color); + position: absolute; + left: 16px; + top: 24px; } - } -} - -.footer { - padding: 24px 0; - @include dialog-footer; - --footer-background-color: #ecf9f0; - @media (prefers-color-scheme: dark) { - --footer-background-color: #2d3534; - } - .footerBtn { - padding: 0 20px; - background: var(--footer-background-color); - color: var(--primary-color); - &:not([disabled]) { - &:hover, - &:focus { - background-color: var(--footer-background-color); - color: color-mix(in srgb, #000000 20%, var(--primary-color)); + div { + display: flex; + gap: 8px; + padding: 3px 0; + position: relative; + &::before { + content: ''; + height: 10px; + width: 10px; + border-radius: 100%; + background: var(--primary-color); + position: absolute; + left: -18px; + top: 10px; } - - &:active { - background-color: var(--footer-background-color); - color: color-mix(in srgb, #000000 20%, var(--primary-color)); + p { + margin: 0; + line-height: 24px; } - } - &:last-of-type { - margin-left: 24px; - } - svg { - g, - path { - fill: var(--primary-color); + + button { + height: auto; + padding: 0; + min-width: 0; + font-size: 14px; } } } From e7cf4599931fc9464819f74df725a08dace2a905 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Mon, 24 Feb 2025 18:41:34 +0800 Subject: [PATCH 2/8] feat: getCkbNodeDataNeedSize --- .../src/components/ModifyPathDialog/index.tsx | 19 +++++++++++++------ packages/neuron-ui/src/locales/ar.json | 2 +- packages/neuron-ui/src/locales/en.json | 2 +- packages/neuron-ui/src/locales/es.json | 2 +- packages/neuron-ui/src/locales/fr.json | 2 +- packages/neuron-ui/src/locales/zh-tw.json | 2 +- packages/neuron-ui/src/locales/zh.json | 2 +- packages/neuron-ui/src/services/remote/app.ts | 1 + .../src/services/remote/remoteApiWrapper.ts | 1 + packages/neuron-wallet/src/controllers/api.ts | 7 +++++++ 10 files changed, 28 insertions(+), 12 deletions(-) diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx index f115da1009..4981b07bed 100644 --- a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx +++ b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx @@ -1,16 +1,14 @@ -import React, { useState, useCallback } from 'react' +import React, { useState, useCallback, useEffect } from 'react' import { useTranslation } from 'react-i18next' import Dialog from 'widgets/Dialog' import Button from 'widgets/Button' import AlertDialog from 'widgets/AlertDialog' import MigrateCkbDataDialog from 'widgets/MigrateCkbDataDialog' -import { setCkbNodeDataPath } from 'services/remote' +import { setCkbNodeDataPath, getCkbNodeDataNeedSize } from 'services/remote' import { Attention } from 'widgets/Icons/icon' import { isSuccessResponse } from 'utils' import styles from './modifyPathDialog.module.scss' -const requiredDiskSpace = '158' - const ModifyPathDialog = ({ prevPath, currentPath, @@ -28,6 +26,15 @@ const ModifyPathDialog = ({ const [isMigrateOpen, setIsMigrateOpen] = useState(false) const [failureMessage, setFailureMessage] = useState('') const [isRetainPreviousData, setIsRetainPreviousData] = useState(false) + const [needSize, setNeedSize] = useState(0) + + useEffect(() => { + getCkbNodeDataNeedSize().then(res => { + if (isSuccessResponse(res)) { + setNeedSize(res.result!) + } + }) + }, []) const handleResynchronize = useCallback(async () => { setFailureMessage('') @@ -71,7 +78,7 @@ const ModifyPathDialog = ({
- {t('settings.data.modify-path-notice', { requiredDiskSpace })} + {t('settings.data.modify-path-notice', { needSize })}
@@ -97,7 +104,7 @@ const ModifyPathDialog = ({
- {t('settings.data.modify-path-notice', { requiredDiskSpace })} + {t('settings.data.modify-path-notice', { needSize })}

{t('settings.data.modify-path-content')}

diff --git a/packages/neuron-ui/src/locales/ar.json b/packages/neuron-ui/src/locales/ar.json index 7bbb74257d..d167bfab76 100644 --- a/packages/neuron-ui/src/locales/ar.json +++ b/packages/neuron-ui/src/locales/ar.json @@ -502,7 +502,7 @@ "ckb-node-storage": "تخزين عقدة CKB", "browse-local-files": "تصفح الملفات المحلية", "modify-path": "تعديل المسار", - "modify-path-notice": "يرجى التأكد من أن المساحة المتبقية على القرص أكبر من {{requiredDiskSpace}} جيجابايت لتخزين بيانات عقدة CKB.", + "modify-path-notice": "يرجى التأكد من أن المساحة المتبقية على القرص أكبر من {{needSize}} جيجابايت لتخزين بيانات عقدة CKB.", "modify-path-content": "يمكنك اختيار مسار جديد لإعادة المزامنة أو نقل البيانات السابقة لمتابعة المزامنة.", "resynchronize": "إعادة المزامنة", "retain-previous-data": "احتفظ بالبيانات السابقة", diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index a26ce5e5bd..9137f5954b 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -502,7 +502,7 @@ "ckb-node-storage": "CKB Node Storage", "browse-local-files": "Browse Local Files", "modify-path": "Modify Path", - "modify-path-notice": "Please ensure the remaining disk space is greater than {{requiredDiskSpace}} G for storing CKB Node Data.", + "modify-path-notice": "Please ensure the remaining disk space is greater than {{needSize}} G for storing CKB Node Data.", "modify-path-content": "You can choose a new path to resynchronize or migrate previous data to continue synchronization.", "resynchronize": "Resynchronize", "retain-previous-data": "Retain previous data", diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index c95603d4f7..94e3ff7865 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -485,7 +485,7 @@ "ckb-node-storage": "Almacenamiento de Nodo CKB", "browse-local-files": "Explorar archivos locales", "modify-path": "Modificar ruta", - "modify-path-notice": "Por favor, asegúrese de que el espacio disponible en el disco sea mayor a {{requiredDiskSpace}} GB para almacenar los datos del Nodo CKB.", + "modify-path-notice": "Por favor, asegúrese de que el espacio disponible en el disco sea mayor a {{needSize}} GB para almacenar los datos del Nodo CKB.", "modify-path-content": "Puedes elegir una nueva ruta para volver a sincronizar o migrar los datos anteriores para continuar la sincronización.", "resynchronize": "Volver a sincronizar", "retain-previous-data": "Conservar datos anteriores", diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 45c2dcd84c..50844a9260 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -492,7 +492,7 @@ "ckb-node-storage": "Stockage du noeud CKB", "browse-local-files": "Parcourir les fichiers locaux", "modify-path": "Modifier le chemin", - "modify-path-notice": "Veuillez vous assurer que l'espace disque restant est supérieur à {{requiredDiskSpace}} Go pour stocker les données du nœud CKB.", + "modify-path-notice": "Veuillez vous assurer que l'espace disque restant est supérieur à {{needSize}} Go pour stocker les données du nœud CKB.", "modify-path-content": "Vous pouvez choisir un nouveau chemin pour resynchroniser ou migrer les données précédentes afin de continuer la synchronisation.", "resynchronize": "Resynchroniser", "retain-previous-data": "Conserver les données précédentes", diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 2134bb9eb8..8422a6faab 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -496,7 +496,7 @@ "ckb-node-storage": "CKB節點數據", "browse-local-files": "瀏覽本地檔案", "modify-path": "修改路徑", - "modify-path-notice": "請確保剩餘的磁碟空間大於 {{requiredDiskSpace}} GB 以存儲 CKB 節點資料。", + "modify-path-notice": "請確保剩餘的磁碟空間大於 {{needSize}} GB 以存儲 CKB 節點資料。", "modify-path-content": "您可以選擇一個新路徑重新同步或遷移以前的資料以繼續同步。", "resynchronize": "重新同步", "retain-previous-data": "保留先前的資料", diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 50dc8ddd00..e40aae324f 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -495,7 +495,7 @@ "ckb-node-storage": "CKB节点数据", "browse-local-files": "浏览本地文件", "modify-path": "修改路径", - "modify-path-notice": "请确保剩余的磁盘空间大于 {{requiredDiskSpace}} GB 以存储 CKB 节点数据。", + "modify-path-notice": "请确保剩余的磁盘空间大于 {{needSize}} GB 以存储 CKB 节点数据。", "modify-path-content": "您可以选择一个新路径重新同步或迁移以前的数据以继续同步。", "resynchronize": "重新同步", "retain-previous-data": "保留以前的数据", diff --git a/packages/neuron-ui/src/services/remote/app.ts b/packages/neuron-ui/src/services/remote/app.ts index 48a16e2962..80034993df 100644 --- a/packages/neuron-ui/src/services/remote/app.ts +++ b/packages/neuron-ui/src/services/remote/app.ts @@ -16,6 +16,7 @@ export const openInWindow = remoteApi('open-in-wi export const requestOpenInExplorer = remoteApi('request-open-in-explorer') export const handleViewError = remoteApi('handle-view-error') export const setLocale = remoteApi<(typeof LOCALES)[number]>('set-locale') +export const getCkbNodeDataNeedSize = remoteApi('get-ckb-node-data-need-size') export const getCkbNodeDataPath = remoteApi('get-ckb-node-data-path') export const setCkbNodeDataPath = remoteApi<{ dataPath: string; clearCache?: boolean; onlySetPath?: boolean }, string>( 'set-ckb-node-data-path' diff --git a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts index 69bc7c1711..af1d9b6f04 100644 --- a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts +++ b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts @@ -42,6 +42,7 @@ type Action = | 'open-context-menu' | 'get-all-displays-size' | 'show-message-box' + | 'get-ckb-node-data-need-size' | 'get-ckb-node-data-path' | 'set-ckb-node-data-path' | 'stop-process-monitor' diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index 4486ef3da1..2b7ac932c4 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -781,6 +781,13 @@ export default class ApiController { } }) + handle('get-ckb-node-data-need-size', () => { + return { + status: ResponseCode.Success, + result: Math.ceil(+process.env.CKB_NODE_DATA_SIZE! * 1.2), + } + }) + handle('get-ckb-node-data-path', () => { return { status: ResponseCode.Success, From 1313145c9740573fe6fe2f11a683b44f1c937bbf Mon Sep 17 00:00:00 2001 From: devchenyan Date: Tue, 25 Feb 2025 10:12:00 +0800 Subject: [PATCH 3/8] fix: comments --- .../neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx | 9 +++++---- packages/neuron-wallet/src/controllers/api.ts | 5 +++-- packages/neuron-wallet/src/utils/const.ts | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx index a7ed779196..7dde0c1424 100644 --- a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx +++ b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx @@ -28,10 +28,11 @@ const MigrateCkbDataDialog = ({ const [seconds, setSeconds] = useState(5) const openPath = (e: React.SyntheticEvent) => { - const btn = (e.target as HTMLButtonElement)?.closest('button') - if (btn?.dataset?.path) { - shell.openPath(btn?.dataset?.path) - } + const elm = e.target + if (!(elm instanceof HTMLButtonElement)) return + const { path } = elm.dataset + if (!path) return + shell.openPath(path) } useEffect(() => { diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index 2b7ac932c4..ae66eebee7 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -19,6 +19,7 @@ import fs from 'fs' import env from '../env' import { showWindow } from './app/show-window' import CommonUtils from '../utils/common' +import { CKB_NODE_DATA_SIZE_BUFFER_RATIO } from '../utils/const' import { NetworkType, Network } from '../models/network' import { ConnectionStatusSubject } from '../models/subjects/node' import NetworksService from '../services/networks' @@ -767,7 +768,7 @@ export default class ApiController { status: ResponseCode.Success, result: { isFirstSync: SettingsService.getInstance().isFirstSync && currentNetwork.type === NetworkType.Default, - needSize: Math.ceil(+process.env.CKB_NODE_DATA_SIZE! * 1.2), + needSize: Math.ceil(+process.env.CKB_NODE_DATA_SIZE! * CKB_NODE_DATA_SIZE_BUFFER_RATIO), ckbNodeDataPath: SettingsService.getInstance().getNodeDataPath(), }, } @@ -784,7 +785,7 @@ export default class ApiController { handle('get-ckb-node-data-need-size', () => { return { status: ResponseCode.Success, - result: Math.ceil(+process.env.CKB_NODE_DATA_SIZE! * 1.2), + result: Math.ceil(+process.env.CKB_NODE_DATA_SIZE! * CKB_NODE_DATA_SIZE_BUFFER_RATIO), } }) diff --git a/packages/neuron-wallet/src/utils/const.ts b/packages/neuron-wallet/src/utils/const.ts index 9059715d05..28ed3e21c6 100644 --- a/packages/neuron-wallet/src/utils/const.ts +++ b/packages/neuron-wallet/src/utils/const.ts @@ -18,6 +18,7 @@ export const START_WITHOUT_INDEXER = -4 export const DEFAULT_ARGS_LENGTH = 42 export const LOCKTIME_ARGS_LENGTH = 58 export const CHEQUE_ARGS_LENGTH = 82 +export const CKB_NODE_DATA_SIZE_BUFFER_RATIO = 1.2 export enum ResponseCode { Fail, From 462d477a0994b718dfae053182f44a677fbf6ce3 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 26 Feb 2025 10:53:23 +0800 Subject: [PATCH 4/8] fix: text --- packages/neuron-ui/src/locales/ar.json | 2 +- packages/neuron-ui/src/locales/en.json | 2 +- packages/neuron-ui/src/locales/es.json | 2 +- packages/neuron-ui/src/locales/fr.json | 2 +- packages/neuron-ui/src/locales/zh-tw.json | 2 +- packages/neuron-ui/src/locales/zh.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/neuron-ui/src/locales/ar.json b/packages/neuron-ui/src/locales/ar.json index d167bfab76..fece483b23 100644 --- a/packages/neuron-ui/src/locales/ar.json +++ b/packages/neuron-ui/src/locales/ar.json @@ -513,7 +513,7 @@ "migrate-confirm": "تأكيد ({{seconds}} ثانية)", "migrate-step-1": "افتح مسار تخزين بيانات عقدة CKB السابقة.", "migrate-step-2": "افتح المسار الذي تم تعيينه حديثًا.", - "migrate-step-3": "انسخ جميع ملفات بيانات عقدة CKB إلى المسار الجديد.", + "migrate-step-3": "نسخ جميع الملفات إلى المسار الجديد.", "click-here": "انقر هنا", "migrate-data-successful": "تم نقل البيانات بنجاح" } diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 9137f5954b..fa6c540b54 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -513,7 +513,7 @@ "migrate-confirm": "Confirm ({{seconds}}s)", "migrate-step-1": "Open the storage path of the previous CKB node data.", "migrate-step-2": "Open the newly set path.", - "migrate-step-3": "Copies all CKB node data files to the new path.", + "migrate-step-3": "Copies all files to the new path.", "click-here": "Click Here", "migrate-data-successful": "Migrate data successful" } diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index 94e3ff7865..114dccf0cd 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -496,7 +496,7 @@ "migrate-confirm": "Confirmar ({{seconds}}s)", "migrate-step-1": "Abrir la ruta de almacenamiento de los datos anteriores del Nodo CKB.", "migrate-step-2": "Abrir la nueva ruta establecida.", - "migrate-step-3": "Copiar todos los archivos de datos del Nodo CKB a la nueva ruta.", + "migrate-step-3": "Copiar todos los archivos al nuevo camino.", "click-here": "Haz clic aquí", "migrate-data-successful": "Migración de datos exitosa" } diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 50844a9260..41102e89a1 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -503,7 +503,7 @@ "migrate-confirm": "Confirmer ({{seconds}}s)", "migrate-step-1": "Ouvrir le chemin de stockage des données précédentes du nœud CKB.", "migrate-step-2": "Ouvrir le nouveau chemin défini.", - "migrate-step-3": "Copier tous les fichiers de données du nœud CKB vers le nouveau chemin.", + "migrate-step-3": "Copier tous les fichiers vers le nouveau chemin.", "click-here": "Cliquez ici", "migrate-data-successful": "Migration des données réussie" } diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 8422a6faab..ce94331310 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -507,7 +507,7 @@ "migrate-confirm": "確認 ({{seconds}}秒)", "migrate-step-1": "打開先前 CKB 節點資料的儲存路徑。", "migrate-step-2": "打開新設置的路徑。", - "migrate-step-3": "將所有 CKB 節點資料檔案複製到新路徑。", + "migrate-step-3": "將所有檔案複製到新路徑。", "click-here": "點擊這裡", "migrate-data-successful": "資料遷移成功" } diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index e40aae324f..7d578e6b1a 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -506,7 +506,7 @@ "migrate-confirm": "确认 ({{seconds}}秒)", "migrate-step-1": "打开以前 CKB 节点数据的存储路径。", "migrate-step-2": "打开新设置的路径。", - "migrate-step-3": "将所有 CKB 节点数据文件复制到新路径。", + "migrate-step-3": "将所有文件复制到新路径。", "click-here": "点击这里", "migrate-data-successful": "数据迁移成功" } From e3e65282314f54956164a84819acd95f8e54b6d3 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 26 Feb 2025 10:56:45 +0800 Subject: [PATCH 5/8] fix: text --- packages/neuron-ui/src/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index fa6c540b54..65b6731c35 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -513,7 +513,7 @@ "migrate-confirm": "Confirm ({{seconds}}s)", "migrate-step-1": "Open the storage path of the previous CKB node data.", "migrate-step-2": "Open the newly set path.", - "migrate-step-3": "Copies all files to the new path.", + "migrate-step-3": "Copy all files to the new path.", "click-here": "Click Here", "migrate-data-successful": "Migrate data successful" } From 5ae3639eca7042f06b1bb52c77446b20dacda954 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Thu, 27 Feb 2025 12:15:12 +0800 Subject: [PATCH 6/8] fix --- .../src/components/DataSetting/hooks.ts | 6 +++ .../src/components/DataSetting/index.tsx | 45 ++++++++++++++++--- .../src/components/ModifyPathDialog/index.tsx | 30 ++++++------- .../modifyPathDialog.module.scss | 14 ------ .../src/components/Settings/index.tsx | 2 +- packages/neuron-ui/src/locales/ar.json | 7 ++- packages/neuron-ui/src/locales/en.json | 6 ++- packages/neuron-ui/src/locales/es.json | 7 ++- packages/neuron-ui/src/locales/fr.json | 7 ++- packages/neuron-ui/src/locales/zh-tw.json | 7 ++- packages/neuron-ui/src/locales/zh.json | 7 ++- .../src/widgets/AlertDialog/index.tsx | 12 ++++- .../neuron-ui/src/widgets/Button/index.tsx | 1 - .../neuron-ui/src/widgets/Dialog/index.tsx | 7 ++- .../widgets/MigrateCkbDataDialog/index.tsx | 11 +++-- 15 files changed, 112 insertions(+), 57 deletions(-) diff --git a/packages/neuron-ui/src/components/DataSetting/hooks.ts b/packages/neuron-ui/src/components/DataSetting/hooks.ts index 2b039046e7..1df113502a 100644 --- a/packages/neuron-ui/src/components/DataSetting/hooks.ts +++ b/packages/neuron-ui/src/components/DataSetting/hooks.ts @@ -47,6 +47,11 @@ export const useDataPath = (network?: State.Network) => { }) }, [setIsDialogOpen, type]) + const onResync = useCallback(async () => { + await stopProcessMonitor(type) + return startProcessMonitor(type) + }, [type]) + const onConfirm = useCallback( (dataPath: string) => { setPrevPath(dataPath) @@ -68,6 +73,7 @@ export const useDataPath = (network?: State.Network) => { onConfirm, isDialogOpen, openDialog, + onResync, } } diff --git a/packages/neuron-ui/src/components/DataSetting/index.tsx b/packages/neuron-ui/src/components/DataSetting/index.tsx index 652d70f8c1..c9cbb8ecea 100644 --- a/packages/neuron-ui/src/components/DataSetting/index.tsx +++ b/packages/neuron-ui/src/components/DataSetting/index.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo } from 'react' +import React, { useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import ClearCache from 'components/ClearCache' import { useDispatch, useState as useGlobalState } from 'states' @@ -6,7 +6,10 @@ import { shell } from 'electron' import Tooltip from 'widgets/Tooltip' import { NetworkType } from 'utils/const' import { Attention, More } from 'widgets/Icons/icon' +import Toast from 'widgets/Toast' import ModifyPathDialog from 'components/ModifyPathDialog' +import AlertDialog from 'widgets/AlertDialog' +import { isSuccessResponse } from 'utils' import { useDataPath } from './hooks' import styles from './dataSetting.module.scss' @@ -66,17 +69,31 @@ const DataSetting = () => { chain: { networkID }, settings: { networks = [] }, } = useGlobalState() + const [notice, setNotice] = useState('') + const [showLostDialog, setShowLostDialog] = useState(false) const network = useMemo(() => networks.find(n => n.id === networkID), [networkID, networks]) - const { isDialogOpen, openDialog, onSetting, prevPath, currentPath, onCancel, onConfirm } = useDataPath(network) + const { isDialogOpen, openDialog, onSetting, prevPath, currentPath, onCancel, onConfirm, onResync } = + useDataPath(network) const openPath = useCallback(() => { - if (prevPath) { - shell.openPath(prevPath!) - } - }, [prevPath]) + shell.openPath(prevPath).then(res => { + if (res) { + setShowLostDialog(true) + } + }) + }, [prevPath, onResync]) const isLightClient = network?.type === NetworkType.Light const hiddenDataPath = isLightClient || !network?.readonly + const handleResync = useCallback(() => { + setShowLostDialog(false) + onResync().then(res => { + if (isSuccessResponse(res)) { + openPath() + } + }) + }, [openPath]) + return ( <>
@@ -119,8 +136,24 @@ const DataSetting = () => { onCancel={onCancel} onConfirm={onConfirm} onSetting={onSetting} + setNotice={setNotice} /> )} + + {showLostDialog && ( + setShowLostDialog(false)} + /> + )} + + setNotice('')} /> ) } diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx index 4981b07bed..e721df2f35 100644 --- a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx +++ b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx @@ -1,7 +1,6 @@ import React, { useState, useCallback, useEffect } from 'react' import { useTranslation } from 'react-i18next' import Dialog from 'widgets/Dialog' -import Button from 'widgets/Button' import AlertDialog from 'widgets/AlertDialog' import MigrateCkbDataDialog from 'widgets/MigrateCkbDataDialog' import { setCkbNodeDataPath, getCkbNodeDataNeedSize } from 'services/remote' @@ -15,12 +14,14 @@ const ModifyPathDialog = ({ onCancel, onConfirm, onSetting, + setNotice, }: { onCancel?: () => void prevPath: string currentPath: string onConfirm: (dataPath: string) => void onSetting: (onSuccess?: (path: string) => void) => void + setNotice: (notice: string) => void }) => { const [t] = useTranslation() const [isMigrateOpen, setIsMigrateOpen] = useState(false) @@ -36,7 +37,7 @@ const ModifyPathDialog = ({ }) }, []) - const handleResynchronize = useCallback(async () => { + const handleResync = useCallback(async () => { setFailureMessage('') onSetting(path => { setCkbNodeDataPath({ @@ -50,7 +51,7 @@ const ModifyPathDialog = ({ } }) }) - }, [onSetting, onConfirm]) + }, [onSetting, onConfirm, setFailureMessage]) if (isMigrateOpen) { return ( @@ -59,6 +60,8 @@ const ModifyPathDialog = ({ currentPath={currentPath} onCancel={() => setIsMigrateOpen(false)} onConfirm={onConfirm} + onClose={onCancel} + setNotice={setNotice} /> ) } @@ -74,6 +77,7 @@ const ModifyPathDialog = ({ confirmText={t('wizard.next')} className={styles.dialog} disabled={!currentPath} + onClose={onCancel} >
@@ -82,7 +86,7 @@ const ModifyPathDialog = ({
-

{currentPath}

+

{currentPath || 'path/to/ckb_node_data'}

@@ -97,9 +101,14 @@ const ModifyPathDialog = ({ setIsRetainPreviousData(true)} + confirmProps={{ type: 'dashed' }} + cancelText={t('settings.data.resync')} + onCancel={handleResync} + cancelProps={{ type: 'dashed' }} >
@@ -107,15 +116,6 @@ const ModifyPathDialog = ({ {t('settings.data.modify-path-notice', { needSize })}

{t('settings.data.modify-path-content')}

- -
-
{ useOnLocalStorageChange(onChange) return ( - +
{items.map(([title, marginTop, ItemCmp]) => (
diff --git a/packages/neuron-ui/src/locales/ar.json b/packages/neuron-ui/src/locales/ar.json index fece483b23..4db7f4715e 100644 --- a/packages/neuron-ui/src/locales/ar.json +++ b/packages/neuron-ui/src/locales/ar.json @@ -504,7 +504,6 @@ "modify-path": "تعديل المسار", "modify-path-notice": "يرجى التأكد من أن المساحة المتبقية على القرص أكبر من {{needSize}} جيجابايت لتخزين بيانات عقدة CKB.", "modify-path-content": "يمكنك اختيار مسار جديد لإعادة المزامنة أو نقل البيانات السابقة لمتابعة المزامنة.", - "resynchronize": "إعادة المزامنة", "retain-previous-data": "احتفظ بالبيانات السابقة", "set-a-new-path": "تعيين مسار جديد", "browse": "تصفح", @@ -515,7 +514,11 @@ "migrate-step-2": "افتح المسار الذي تم تعيينه حديثًا.", "migrate-step-3": "نسخ جميع الملفات إلى المسار الجديد.", "click-here": "انقر هنا", - "migrate-data-successful": "تم نقل البيانات بنجاح" + "migrate-data-successful": "تم نقل البيانات بنجاح", + "resync": "إعادة المزامنة", + "retry": "إعادة المحاولة", + "sync-file-lost": "تم فقدان ملف المزامنة", + "sync-file-lost-notice": "يرجى استعادة الملف والمحاولة مرة أخرى، أو إعادة المزامنة." } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 65b6731c35..5d04457bc6 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -504,7 +504,6 @@ "modify-path": "Modify Path", "modify-path-notice": "Please ensure the remaining disk space is greater than {{needSize}} G for storing CKB Node Data.", "modify-path-content": "You can choose a new path to resynchronize or migrate previous data to continue synchronization.", - "resynchronize": "Resynchronize", "retain-previous-data": "Retain previous data", "set-a-new-path": "Set a new path", "browse": "Browse", @@ -515,7 +514,10 @@ "migrate-step-2": "Open the newly set path.", "migrate-step-3": "Copy all files to the new path.", "click-here": "Click Here", - "migrate-data-successful": "Migrate data successful" + "resync": "Resync", + "retry": "Retry", + "sync-file-lost": "Sync file lost", + "sync-file-lost-notice": "Please recover and retry, or resync." } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index 114dccf0cd..0f43ff79b4 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -487,7 +487,6 @@ "modify-path": "Modificar ruta", "modify-path-notice": "Por favor, asegúrese de que el espacio disponible en el disco sea mayor a {{needSize}} GB para almacenar los datos del Nodo CKB.", "modify-path-content": "Puedes elegir una nueva ruta para volver a sincronizar o migrar los datos anteriores para continuar la sincronización.", - "resynchronize": "Volver a sincronizar", "retain-previous-data": "Conservar datos anteriores", "set-a-new-path": "Establecer una nueva ruta", "browse": "Explorar", @@ -498,7 +497,11 @@ "migrate-step-2": "Abrir la nueva ruta establecida.", "migrate-step-3": "Copiar todos los archivos al nuevo camino.", "click-here": "Haz clic aquí", - "migrate-data-successful": "Migración de datos exitosa" + "migrate-data-successful": "Migración de datos exitosa", + "resync": "Reiniciar sincronización", + "retry": "Reintentar", + "sync-file-lost": "Archivo de sincronización perdido", + "sync-file-lost-notice": "Por favor, recupere el archivo e intente de nuevo, o reinicie la sincronización." } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 41102e89a1..6776fc2b30 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -494,7 +494,6 @@ "modify-path": "Modifier le chemin", "modify-path-notice": "Veuillez vous assurer que l'espace disque restant est supérieur à {{needSize}} Go pour stocker les données du nœud CKB.", "modify-path-content": "Vous pouvez choisir un nouveau chemin pour resynchroniser ou migrer les données précédentes afin de continuer la synchronisation.", - "resynchronize": "Resynchroniser", "retain-previous-data": "Conserver les données précédentes", "set-a-new-path": "Définir un nouveau chemin", "browse": "Parcourir", @@ -505,7 +504,11 @@ "migrate-step-2": "Ouvrir le nouveau chemin défini.", "migrate-step-3": "Copier tous les fichiers vers le nouveau chemin.", "click-here": "Cliquez ici", - "migrate-data-successful": "Migration des données réussie" + "migrate-data-successful": "Migration des données réussie", + "resync": "Resynchroniser", + "retry": "Réessayer", + "sync-file-lost": "Fichier de synchronisation perdu", + "sync-file-lost-notice": "Veuillez récupérer le fichier et réessayer, ou resynchroniser." } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index ce94331310..c32eadcd08 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -498,7 +498,6 @@ "modify-path": "修改路徑", "modify-path-notice": "請確保剩餘的磁碟空間大於 {{needSize}} GB 以存儲 CKB 節點資料。", "modify-path-content": "您可以選擇一個新路徑重新同步或遷移以前的資料以繼續同步。", - "resynchronize": "重新同步", "retain-previous-data": "保留先前的資料", "set-a-new-path": "設置新路徑", "browse": "瀏覽", @@ -509,7 +508,11 @@ "migrate-step-2": "打開新設置的路徑。", "migrate-step-3": "將所有檔案複製到新路徑。", "click-here": "點擊這裡", - "migrate-data-successful": "資料遷移成功" + "migrate-data-successful": "資料遷移成功", + "resync": "重新同步", + "retry": "重試", + "sync-file-lost": "同步文件遺失", + "sync-file-lost-notice": "請恢復文件並重試,或重新同步。" } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 7d578e6b1a..72b2537eb2 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -497,7 +497,6 @@ "modify-path": "修改路径", "modify-path-notice": "请确保剩余的磁盘空间大于 {{needSize}} GB 以存储 CKB 节点数据。", "modify-path-content": "您可以选择一个新路径重新同步或迁移以前的数据以继续同步。", - "resynchronize": "重新同步", "retain-previous-data": "保留以前的数据", "set-a-new-path": "设置新路径", "browse": "浏览", @@ -508,7 +507,11 @@ "migrate-step-2": "打开新设置的路径。", "migrate-step-3": "将所有文件复制到新路径。", "click-here": "点击这里", - "migrate-data-successful": "数据迁移成功" + "migrate-data-successful": "数据迁移成功", + "resync": "重新同步", + "retry": "重试", + "sync-file-lost": "同步文件丢失", + "sync-file-lost-notice": "请恢复文件并重试,或重新同步。" } }, "password-request": { diff --git a/packages/neuron-ui/src/widgets/AlertDialog/index.tsx b/packages/neuron-ui/src/widgets/AlertDialog/index.tsx index 4955d0fac2..b0d5320a85 100644 --- a/packages/neuron-ui/src/widgets/AlertDialog/index.tsx +++ b/packages/neuron-ui/src/widgets/AlertDialog/index.tsx @@ -18,6 +18,10 @@ const AlertDialog = ({ onOk, onCancel, action, + cancelText, + okText, + cancelProps, + okProps, }: { show?: boolean title?: string @@ -26,6 +30,10 @@ const AlertDialog = ({ onOk?: () => void onCancel?: () => void action?: Action + cancelText?: string + okText?: string + cancelProps?: object + okProps?: object }) => { const [t] = useTranslation() const dialogRef = useRef(null) @@ -47,9 +55,9 @@ const AlertDialog = ({
{actions.map(v => v === 'cancel' ? ( -
diff --git a/packages/neuron-ui/src/widgets/Button/index.tsx b/packages/neuron-ui/src/widgets/Button/index.tsx index a94e5c186d..b29a61b5e9 100644 --- a/packages/neuron-ui/src/widgets/Button/index.tsx +++ b/packages/neuron-ui/src/widgets/Button/index.tsx @@ -36,7 +36,6 @@ const Button = React.forwardRef( data-type={type} onClick={onClick} aria-label={label} - title={label} disabled={disabled || loading} {...rest} > diff --git a/packages/neuron-ui/src/widgets/Dialog/index.tsx b/packages/neuron-ui/src/widgets/Dialog/index.tsx index b4c6621faa..b793125381 100644 --- a/packages/neuron-ui/src/widgets/Dialog/index.tsx +++ b/packages/neuron-ui/src/widgets/Dialog/index.tsx @@ -11,6 +11,7 @@ interface DialogProps { subTitle?: string onConfirm?: (e: React.FormEvent) => void onCancel?: () => void + onClose?: () => void confirmText?: string cancelText?: string disabled?: boolean | undefined @@ -34,6 +35,7 @@ const Dialog = ({ subTitle, onConfirm, onCancel, + onClose, disabled, confirmText, cancelText, @@ -81,7 +83,8 @@ const Dialog = ({ className={`${styles.dialogWrap} ${className}`} onKeyDown={e => { if (e.key === 'Escape' && enableCloseWithEsc) { - onCancel?.() + // eslint-disable-next-line no-unused-expressions + onClose ? onClose() : onCancel?.() } else if (e.key === 'Enter' && showFooter && showConfirm) { handleConfirm(e) } @@ -94,7 +97,7 @@ const Dialog = ({ {title} {subTitle ? {subTitle} : null}
- +
) : null}
{children}
diff --git a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx index 7dde0c1424..3589351406 100644 --- a/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx +++ b/packages/neuron-ui/src/widgets/MigrateCkbDataDialog/index.tsx @@ -1,5 +1,4 @@ import React, { useCallback, useState, useEffect, useRef } from 'react' -import { showPageNotice, useDispatch } from 'states' import Dialog from 'widgets/Dialog' import { shell } from 'electron' import { useTranslation } from 'react-i18next' @@ -14,14 +13,17 @@ const MigrateCkbDataDialog = ({ currentPath, onCancel, onConfirm, + onClose, + setNotice, }: { prevPath: string currentPath: string onCancel: () => void onConfirm: (dataPath: string) => void + onClose?: () => void + setNotice?: (notice: string) => void }) => { const [t] = useTranslation() - const dispatch = useDispatch() const [failureMessage, setFailureMessage] = useState('') const [isSaving, setIsSaving] = useState(false) const timerRef = useRef(null) @@ -58,8 +60,8 @@ const MigrateCkbDataDialog = ({ }) .then(res => { if (isSuccessResponse(res)) { - showPageNotice(t('settings.data.migrate-data-successful'))(dispatch) onConfirm(currentPath) + setNotice?.(t('settings.data.migrate-data-successful')) } else { setFailureMessage(typeof res.message === 'string' ? res.message : res.message.content!) } @@ -67,7 +69,7 @@ const MigrateCkbDataDialog = ({ .finally(() => { setIsSaving(false) }) - }, [currentPath, onConfirm, dispatch]) + }, [currentPath, onConfirm, setNotice]) return ( <> @@ -79,6 +81,7 @@ const MigrateCkbDataDialog = ({ onCancel={onCancel} onConfirm={handleMigrate} disabled={isSaving || !!seconds} + onClose={onClose} >

{t('settings.data.migrate-previous-ckb-node-data-notice')}

From 913bb730aff9636e58d5fb2d7023c5633889786b Mon Sep 17 00:00:00 2001 From: devchenyan Date: Thu, 27 Feb 2025 18:26:11 +0800 Subject: [PATCH 7/8] fix: ui --- packages/neuron-ui/src/components/ModifyPathDialog/index.tsx | 2 +- .../components/ModifyPathDialog/modifyPathDialog.module.scss | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx index e721df2f35..f8c5f5a87a 100644 --- a/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx +++ b/packages/neuron-ui/src/components/ModifyPathDialog/index.tsx @@ -86,7 +86,7 @@ const ModifyPathDialog = ({
-

{currentPath || 'path/to/ckb_node_data'}

+

{currentPath || 'path/to/ckb_node_data'}

diff --git a/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss b/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss index 9ea915254c..5c75df38ce 100644 --- a/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss +++ b/packages/neuron-ui/src/components/ModifyPathDialog/modifyPathDialog.module.scss @@ -71,12 +71,15 @@ color: var(--primary-color); } } + .path { + color: var(--input-hint-color); + } p { padding: 0; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; padding: 0 16px; - color: var(--input-hint-color); + color: var(--disable-button-text-color); } } From a04b76eb08fa89b712652b40b3221bc1598c3cfe Mon Sep 17 00:00:00 2001 From: devchenyan Date: Fri, 28 Feb 2025 15:35:37 +0800 Subject: [PATCH 8/8] fix: lang --- packages/neuron-ui/src/locales/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 5d04457bc6..b9548e064b 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -514,6 +514,7 @@ "migrate-step-2": "Open the newly set path.", "migrate-step-3": "Copy all files to the new path.", "click-here": "Click Here", + "migrate-data-successful": "Migrate data successful", "resync": "Resync", "retry": "Retry", "sync-file-lost": "Sync file lost",