From 4f7d117833c79a67238b7eb702ba36fa551edc60 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Tue, 26 Dec 2023 09:38:14 +0800 Subject: [PATCH 1/2] fix: Pop up window can be rolled when error message is long (#2995) fix: issue 337 --- .../neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss b/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss index ac08941983..28a879e2b2 100644 --- a/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss +++ b/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss @@ -23,7 +23,9 @@ line-height: 28px; margin: 0; color: var(--dialog-secondary-text-color); - word-break: break-word; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; } .actions { From 4af44eac23481d31296d4b2e11df6cd3b94b3521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Tue, 26 Dec 2023 15:23:11 +0800 Subject: [PATCH 2/2] feat: Remove rebuild index of separated indexer (#2990) feat: Remove rebuild indexer --- .../src/components/ClearCache/index.tsx | 69 ++----------------- .../src/components/DataSetting/index.tsx | 7 +- packages/neuron-ui/src/locales/en.json | 19 +---- packages/neuron-ui/src/locales/zh-tw.json | 19 +---- packages/neuron-ui/src/locales/zh.json | 19 +---- packages/neuron-ui/src/services/remote/app.ts | 2 +- .../neuron-ui/src/types/Controller/index.d.ts | 8 --- packages/neuron-wallet/src/controllers/api.ts | 4 +- .../neuron-wallet/src/services/indexer.ts | 12 +--- .../tests/services/indexer.test.ts | 40 +---------- 10 files changed, 17 insertions(+), 182 deletions(-) diff --git a/packages/neuron-ui/src/components/ClearCache/index.tsx b/packages/neuron-ui/src/components/ClearCache/index.tsx index 54511334c8..1007687528 100644 --- a/packages/neuron-ui/src/components/ClearCache/index.tsx +++ b/packages/neuron-ui/src/components/ClearCache/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useCallback, useState } from 'react' +import React, { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import Spinner from 'widgets/Spinner' import Dialog from 'widgets/Dialog' @@ -9,59 +9,23 @@ import { cacheClearDate } from 'services/localCache' import { isSuccessResponse, uniformTimeFormatter } from 'utils' import styles from './clearCache.module.scss' -const I18N_PATH = 'settings.clear-cache' -const IDs = { - submitClearCache: 'submit-clear-cache', - refreshCacheOption: 'refresh-cache-option', - rebuildCacheOption: 'rebuild-cache-option', -} - const ClearCacheDialog = ({ dispatch, className, btnClassName, - hideRebuild, }: { dispatch: StateDispatch className?: string btnClassName?: string - hideRebuild?: boolean }) => { const [t] = useTranslation() const [clearedDate, setClearedDate] = useState(cacheClearDate.load()) const [isClearing, setIsClearing] = useState(false) - const [isDialogOpen, setIsDialogOpen] = useState(false) - const [isRebuild, setIsRebuild] = useState(false) const [notice, setNotice] = useState('') - const showDialog = useCallback(() => { - setIsDialogOpen(true) - }, [setIsDialogOpen]) - - const dismissDialog = useCallback(() => { - setIsDialogOpen(false) - }, [setIsDialogOpen]) - - const toggleIsRebuild = useCallback( - (e: React.ChangeEvent) => { - setIsRebuild(e.target.checked) - }, - [setIsRebuild] - ) - - useEffect(() => { - if (isDialogOpen) { - /* eslint-disable-next-line no-unused-expressions */ - document.querySelector(`#${IDs.submitClearCache}`)?.focus() - } else { - setIsRebuild(false) - } - }, [isDialogOpen, setIsRebuild]) - const handleSubmit = useCallback(() => { - setIsDialogOpen(false) setIsClearing(true) - clearCellCache({ resetIndexerData: isRebuild }) + clearCellCache() .then(res => { if (isSuccessResponse(res) && res.result) { addPopup('clear-cache-successfully')(dispatch) @@ -74,7 +38,7 @@ const ClearCacheDialog = ({ .finally(() => { setIsClearing(false) }) - }, [dispatch, setClearedDate, setIsDialogOpen, isRebuild]) + }, [dispatch, setClearedDate]) return ( <> @@ -83,10 +47,10 @@ const ClearCacheDialog = ({ @@ -96,29 +60,6 @@ const ClearCacheDialog = ({

{t('settings.data.clearing-cache')}

- - -
- - {hideRebuild ? null : ( - - )} -
-
- setNotice('')} /> ) diff --git a/packages/neuron-ui/src/components/DataSetting/index.tsx b/packages/neuron-ui/src/components/DataSetting/index.tsx index 4b3d9709c6..19448cccd6 100644 --- a/packages/neuron-ui/src/components/DataSetting/index.tsx +++ b/packages/neuron-ui/src/components/DataSetting/index.tsx @@ -97,12 +97,7 @@ const DataSetting = () => {
{hiddenDataPath ? null : } - +
diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 032be96f9f..c66755a57d 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -413,28 +413,13 @@ "zh": "中文(简体)", "zh-TW": "中文(繁體)" }, - "clear-cache": { - "title": "Clear Cache", - "options": { - "refresh": { - "label": "Refresh" - }, - "rebuild": { - "label": "Fully rebuild index (cost extra 30 ~ 50 min)" - } - }, - "buttons": { - "cancel": "Cancel", - "ok": "OK" - } - }, "data": { "ckb-node-data": "CKB Node Config & Storage", "set": "Set", "cache": "Cache", "clear-cache-description": "Clear cache if you encounter data sync or balance display problems. Neuron will rescan block data.", - "cache-cleared-on": "Cache cleared on {{date}}", - "clear-cache": "Clear Cache", + "cache-cleared-on": "Refreshed cache on {{date}}", + "refresh": "Refresh", "clearing-cache": "Clearing Cache, please wait a moment", "clear-success": "Cache Cleared", "set-path": "Set Path", diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 675eaf99f3..77fe4fc8a3 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -407,28 +407,13 @@ "zh": "中文(简体)", "zh-TW": "中文(繁體)" }, - "clear-cache": { - "title": "清理緩存", - "options": { - "refresh": { - "label": "刷新緩存" - }, - "rebuild": { - "label": "重建索引 (需要 30 ~ 50 分鐘)" - } - }, - "buttons": { - "cancel": "取消", - "ok": "確認" - } - }, "data": { "ckb-node-data": "節點配置和數據", "set": "設置", "cache": "緩存", "clear-cache-description": "當資料同步或餘額顯示出現問題時,可以清理緩存,Neuron 會重新同步所有塊數據。", - "cache-cleared-on": "上次清理緩存時間 {{date}}", - "clear-cache": "清理緩存", + "cache-cleared-on": "上次刷新緩存時間 {{date}}", + "refresh": "刷新", "clearing-cache": "正在清除緩存中,請稍候", "clear-success": "已清除緩存", "set-path": "設置路徑", diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 339302dfe7..8d2a559241 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -406,28 +406,13 @@ "zh": "中文(简体)", "zh-TW": "中文(繁體)" }, - "clear-cache": { - "title": "清除缓存", - "options": { - "refresh": { - "label": "刷新缓存" - }, - "rebuild": { - "label": "重建索引 (需要 30 ~ 50 分钟)" - } - }, - "buttons": { - "cancel": "取消", - "ok": "确认" - } - }, "data": { "ckb-node-data": "节点配置和数据", "set": "设置", "cache": "缓存", "clear-cache-description": "当数据同步或余额显示出现问题时,可以清空缓存,Neuron 会重新同步所有块数据。", - "cache-cleared-on": "上次清空缓存时间 {{date}}", - "clear-cache": "清空缓存", + "cache-cleared-on": "上次刷新缓存时间 {{date}}", + "refresh": "刷新", "clearing-cache": "正在清除缓存中,请稍候", "clear-success": "已清除缓存", "set-path": "设置路径", diff --git a/packages/neuron-ui/src/services/remote/app.ts b/packages/neuron-ui/src/services/remote/app.ts index 5a0c65ae4a..1924b6331e 100644 --- a/packages/neuron-ui/src/services/remote/app.ts +++ b/packages/neuron-ui/src/services/remote/app.ts @@ -33,7 +33,7 @@ export type VerifyExternalCkbNodeRes = | undefined export const verifyExternalCkbNode = remoteApi('verify-external-ckb-node') -export const clearCellCache = remoteApi('clear-cache') +export const clearCellCache = remoteApi('clear-cache') export const invokeShowErrorMessage = remoteApi<{ title: string; content: string }>('show-error-message') export const invokeShowOpenDialog = remoteApi('show-open-dialog') diff --git a/packages/neuron-ui/src/types/Controller/index.d.ts b/packages/neuron-ui/src/types/Controller/index.d.ts index 33b3aab3b8..35ecc4f87b 100644 --- a/packages/neuron-ui/src/types/Controller/index.d.ts +++ b/packages/neuron-ui/src/types/Controller/index.d.ts @@ -311,14 +311,6 @@ declare namespace Controller { } type Response = TokenInfo[] } - - namespace ClearCache { - interface Params { - resetIndexerData: boolean - } - type Response = boolean - } - namespace GetSUDTTokenInfo { interface Params { tokenID: string diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index 239e9b36e1..0d92bb8294 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -596,8 +596,8 @@ export default class ApiController { new UpdateController(false).quitAndInstall() }) - handle('clear-cache', async (_, params: { resetIndexerData: boolean } | null) => { - await IndexerService.clearCache(params?.resetIndexerData) + handle('clear-cache', async () => { + await IndexerService.clearCache() return { status: ResponseCode.Success, result: true } }) diff --git a/packages/neuron-wallet/src/services/indexer.ts b/packages/neuron-wallet/src/services/indexer.ts index 19a5928f7e..6d37967b60 100644 --- a/packages/neuron-wallet/src/services/indexer.ts +++ b/packages/neuron-wallet/src/services/indexer.ts @@ -1,12 +1,9 @@ import path from 'path' import fs from 'fs' import logger from '../utils/logger' -import SyncedBlockNumber from '../models/synced-block-number' import { clean as cleanChain } from '../database/chain' import SettingsService from './settings' -import startMonitor, { stopMonitor } from './monitor' import { resetSyncTaskQueue } from '../block-sync-renderer' -import NetworksService from './networks' export default class IndexerService { private constructor() {} @@ -19,15 +16,8 @@ export default class IndexerService { return IndexerService.instance } - static clearCache = async (clearIndexerFolder = false) => { + static clearCache = async () => { await cleanChain() - - if (NetworksService.getInstance().getCurrent().readonly && clearIndexerFolder) { - await stopMonitor('ckb') - IndexerService.getInstance().clearData() - await new SyncedBlockNumber().setNextBlock(BigInt(0)) - await startMonitor('ckb', true) - } resetSyncTaskQueue.asyncPush(true) } diff --git a/packages/neuron-wallet/tests/services/indexer.test.ts b/packages/neuron-wallet/tests/services/indexer.test.ts index 5f1dad9236..36dc23b8aa 100644 --- a/packages/neuron-wallet/tests/services/indexer.test.ts +++ b/packages/neuron-wallet/tests/services/indexer.test.ts @@ -2,8 +2,6 @@ import IndexerService from '../../src/services/indexer' const existsSyncMock = jest.fn() const rmSyncMock = jest.fn() -const stopMonitorMock = jest.fn() -const getCurrentWalletMock = jest.fn() jest.mock('fs', () => { return { @@ -48,20 +46,6 @@ jest.mock('../../src/database/chain', () => ({ clean: () => jest.fn(), })) -jest.mock('../../src/services/monitor', () => { - function mockMonitor() {} - mockMonitor.stopMonitor = () => stopMonitorMock() - return mockMonitor -}) - -jest.mock('../../src/services/networks', () => ({ - getInstance() { - return { - getCurrent: getCurrentWalletMock, - } - }, -})) - const resetSyncTaskQueueAsyncPushMock = jest.fn() jest.mock('../../src/block-sync-renderer', () => ({ resetSyncTaskQueue: { @@ -75,8 +59,6 @@ describe('test IndexerService', () => { rmSyncMock.mockReset() setIndexerDataPathMock.mockReset() getIndexerDataPathMock.mockReset() - getCurrentWalletMock.mockReset() - stopMonitorMock.mockReset() }) describe('test remove old indexer data', () => { it('old indexer data path exist', () => { @@ -103,28 +85,8 @@ describe('test IndexerService', () => { beforeEach(() => { resetSyncTaskQueueAsyncPushMock.mockReset() }) - it('is external ckb node', async () => { - getCurrentWalletMock.mockReturnValue({ readonly: false }) + it('clear cache success', async () => { await IndexerService.clearCache() - expect(stopMonitorMock).toBeCalledTimes(0) - expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1) - }) - it('is internal ckb node', async () => { - getCurrentWalletMock.mockReturnValue({ readonly: true }) - await IndexerService.clearCache() - expect(stopMonitorMock).toBeCalledTimes(0) - expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1) - }) - it('clear indexer data with internal ckb node', async () => { - getCurrentWalletMock.mockReturnValue({ readonly: true }) - await IndexerService.clearCache(true) - expect(stopMonitorMock).toBeCalledTimes(1) - expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1) - }) - it('clear indexer data with external ckb node', async () => { - getCurrentWalletMock.mockReturnValue({ readonly: false }) - await IndexerService.clearCache(true) - expect(stopMonitorMock).toBeCalledTimes(0) expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1) }) })