Skip to content

Commit 7950d0e

Browse files
authored
Merge branch 'develop' into alpha/skip-unidentified-inputs
2 parents 90b8faf + 4af44ea commit 7950d0e

File tree

11 files changed

+20
-183
lines changed

11 files changed

+20
-183
lines changed

packages/neuron-ui/src/components/ClearCache/index.tsx

+5-64
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useCallback, useState } from 'react'
1+
import React, { useCallback, useState } from 'react'
22
import { useTranslation } from 'react-i18next'
33
import Spinner from 'widgets/Spinner'
44
import Dialog from 'widgets/Dialog'
@@ -9,59 +9,23 @@ import { cacheClearDate } from 'services/localCache'
99
import { isSuccessResponse, uniformTimeFormatter } from 'utils'
1010
import styles from './clearCache.module.scss'
1111

12-
const I18N_PATH = 'settings.clear-cache'
13-
const IDs = {
14-
submitClearCache: 'submit-clear-cache',
15-
refreshCacheOption: 'refresh-cache-option',
16-
rebuildCacheOption: 'rebuild-cache-option',
17-
}
18-
1912
const ClearCacheDialog = ({
2013
dispatch,
2114
className,
2215
btnClassName,
23-
hideRebuild,
2416
}: {
2517
dispatch: StateDispatch
2618
className?: string
2719
btnClassName?: string
28-
hideRebuild?: boolean
2920
}) => {
3021
const [t] = useTranslation()
3122
const [clearedDate, setClearedDate] = useState(cacheClearDate.load())
3223
const [isClearing, setIsClearing] = useState(false)
33-
const [isDialogOpen, setIsDialogOpen] = useState(false)
34-
const [isRebuild, setIsRebuild] = useState(false)
3524
const [notice, setNotice] = useState('')
3625

37-
const showDialog = useCallback(() => {
38-
setIsDialogOpen(true)
39-
}, [setIsDialogOpen])
40-
41-
const dismissDialog = useCallback(() => {
42-
setIsDialogOpen(false)
43-
}, [setIsDialogOpen])
44-
45-
const toggleIsRebuild = useCallback(
46-
(e: React.ChangeEvent<HTMLInputElement>) => {
47-
setIsRebuild(e.target.checked)
48-
},
49-
[setIsRebuild]
50-
)
51-
52-
useEffect(() => {
53-
if (isDialogOpen) {
54-
/* eslint-disable-next-line no-unused-expressions */
55-
document.querySelector<HTMLButtonElement>(`#${IDs.submitClearCache}`)?.focus()
56-
} else {
57-
setIsRebuild(false)
58-
}
59-
}, [isDialogOpen, setIsRebuild])
60-
6126
const handleSubmit = useCallback(() => {
62-
setIsDialogOpen(false)
6327
setIsClearing(true)
64-
clearCellCache({ resetIndexerData: isRebuild })
28+
clearCellCache()
6529
.then(res => {
6630
if (isSuccessResponse(res) && res.result) {
6731
addPopup('clear-cache-successfully')(dispatch)
@@ -74,7 +38,7 @@ const ClearCacheDialog = ({
7438
.finally(() => {
7539
setIsClearing(false)
7640
})
77-
}, [dispatch, setClearedDate, setIsDialogOpen, isRebuild])
41+
}, [dispatch, setClearedDate])
7842

7943
return (
8044
<>
@@ -83,10 +47,10 @@ const ClearCacheDialog = ({
8347
<button
8448
type="button"
8549
className={`${btnClassName} ${styles.clearBtn}`}
86-
onClick={showDialog}
50+
onClick={handleSubmit}
8751
disabled={isClearing}
8852
>
89-
{t('settings.data.clear-cache')}
53+
{t('settings.data.refresh')}
9054
</button>
9155
</div>
9256

@@ -96,29 +60,6 @@ const ClearCacheDialog = ({
9660
<p>{t('settings.data.clearing-cache')}</p>
9761
</div>
9862
</Dialog>
99-
100-
<Dialog
101-
show={isDialogOpen}
102-
title={t(`${I18N_PATH}.title`)}
103-
onConfirm={handleSubmit}
104-
onCancel={dismissDialog}
105-
confirmText={t('settings.data.confirm-clear')}
106-
confirmProps={{ id: IDs.submitClearCache }}
107-
>
108-
<div className={styles.options}>
109-
<label htmlFor={IDs.refreshCacheOption}>
110-
<input type="checkbox" id={IDs.refreshCacheOption} checked disabled />
111-
<span className={styles.highlight}>{t(`${I18N_PATH}.options.refresh.label`)}</span>
112-
</label>
113-
{hideRebuild ? null : (
114-
<label htmlFor={IDs.rebuildCacheOption}>
115-
<input type="checkbox" id={IDs.rebuildCacheOption} checked={isRebuild} onChange={toggleIsRebuild} />
116-
<span>{t(`${I18N_PATH}.options.rebuild.label`)}</span>
117-
</label>
118-
)}
119-
</div>
120-
</Dialog>
121-
12263
<Toast content={notice} onDismiss={() => setNotice('')} />
12364
</>
12465
)

packages/neuron-ui/src/components/DataSetting/index.tsx

+1-6
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,7 @@ const DataSetting = () => {
9797
</div>
9898
<div className={styles.rightContainer}>
9999
{hiddenDataPath ? null : <PathItem path={prevPath} openPath={openPath} handleClick={onSetting} />}
100-
<ClearCache
101-
className={styles.item}
102-
btnClassName={styles.itemBtn}
103-
dispatch={dispatch}
104-
hideRebuild={isLightClient}
105-
/>
100+
<ClearCache className={styles.item} btnClassName={styles.itemBtn} dispatch={dispatch} />
106101
</div>
107102
</div>
108103

packages/neuron-ui/src/locales/en.json

+2-17
Original file line numberDiff line numberDiff line change
@@ -413,28 +413,13 @@
413413
"zh": "中文(简体)",
414414
"zh-TW": "中文(繁體)"
415415
},
416-
"clear-cache": {
417-
"title": "Clear Cache",
418-
"options": {
419-
"refresh": {
420-
"label": "Refresh"
421-
},
422-
"rebuild": {
423-
"label": "Fully rebuild index (cost extra 30 ~ 50 min)"
424-
}
425-
},
426-
"buttons": {
427-
"cancel": "Cancel",
428-
"ok": "OK"
429-
}
430-
},
431416
"data": {
432417
"ckb-node-data": "CKB Node Config & Storage",
433418
"set": "Set",
434419
"cache": "Cache",
435420
"clear-cache-description": "Clear cache if you encounter data sync or balance display problems. Neuron will rescan block data.",
436-
"cache-cleared-on": "Cache cleared on {{date}}",
437-
"clear-cache": "Clear Cache",
421+
"cache-cleared-on": "Refreshed cache on {{date}}",
422+
"refresh": "Refresh",
438423
"clearing-cache": "Clearing Cache, please wait a moment",
439424
"clear-success": "Cache Cleared",
440425
"set-path": "Set Path",

packages/neuron-ui/src/locales/zh-tw.json

+2-17
Original file line numberDiff line numberDiff line change
@@ -407,28 +407,13 @@
407407
"zh": "中文(简体)",
408408
"zh-TW": "中文(繁體)"
409409
},
410-
"clear-cache": {
411-
"title": "清理緩存",
412-
"options": {
413-
"refresh": {
414-
"label": "刷新緩存"
415-
},
416-
"rebuild": {
417-
"label": "重建索引 (需要 30 ~ 50 分鐘)"
418-
}
419-
},
420-
"buttons": {
421-
"cancel": "取消",
422-
"ok": "確認"
423-
}
424-
},
425410
"data": {
426411
"ckb-node-data": "節點配置和數據",
427412
"set": "設置",
428413
"cache": "緩存",
429414
"clear-cache-description": "當資料同步或餘額顯示出現問題時,可以清理緩存,Neuron 會重新同步所有塊數據。",
430-
"cache-cleared-on": "上次清理緩存時間 {{date}}",
431-
"clear-cache": "清理緩存",
415+
"cache-cleared-on": "上次刷新緩存時間 {{date}}",
416+
"refresh": "刷新",
432417
"clearing-cache": "正在清除緩存中,請稍候",
433418
"clear-success": "已清除緩存",
434419
"set-path": "設置路徑",

packages/neuron-ui/src/locales/zh.json

+2-17
Original file line numberDiff line numberDiff line change
@@ -406,28 +406,13 @@
406406
"zh": "中文(简体)",
407407
"zh-TW": "中文(繁體)"
408408
},
409-
"clear-cache": {
410-
"title": "清除缓存",
411-
"options": {
412-
"refresh": {
413-
"label": "刷新缓存"
414-
},
415-
"rebuild": {
416-
"label": "重建索引 (需要 30 ~ 50 分钟)"
417-
}
418-
},
419-
"buttons": {
420-
"cancel": "取消",
421-
"ok": "确认"
422-
}
423-
},
424409
"data": {
425410
"ckb-node-data": "节点配置和数据",
426411
"set": "设置",
427412
"cache": "缓存",
428413
"clear-cache-description": "当数据同步或余额显示出现问题时,可以清空缓存,Neuron 会重新同步所有块数据。",
429-
"cache-cleared-on": "上次清空缓存时间 {{date}}",
430-
"clear-cache": "清空缓存",
414+
"cache-cleared-on": "上次刷新缓存时间 {{date}}",
415+
"refresh": "刷新",
431416
"clearing-cache": "正在清除缓存中,请稍候",
432417
"clear-success": "已清除缓存",
433418
"set-path": "设置路径",

packages/neuron-ui/src/services/remote/app.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export type VerifyExternalCkbNodeRes =
3333
| undefined
3434
export const verifyExternalCkbNode = remoteApi<void, VerifyExternalCkbNodeRes>('verify-external-ckb-node')
3535

36-
export const clearCellCache = remoteApi<Controller.ClearCache.Params>('clear-cache')
36+
export const clearCellCache = remoteApi<void, boolean>('clear-cache')
3737

3838
export const invokeShowErrorMessage = remoteApi<{ title: string; content: string }>('show-error-message')
3939
export const invokeShowOpenDialog = remoteApi<OpenDialogOptions, OpenDialogReturnValue>('show-open-dialog')

packages/neuron-ui/src/types/Controller/index.d.ts

-8
Original file line numberDiff line numberDiff line change
@@ -311,14 +311,6 @@ declare namespace Controller {
311311
}
312312
type Response = TokenInfo[]
313313
}
314-
315-
namespace ClearCache {
316-
interface Params {
317-
resetIndexerData: boolean
318-
}
319-
type Response = boolean
320-
}
321-
322314
namespace GetSUDTTokenInfo {
323315
interface Params {
324316
tokenID: string

packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
line-height: 28px;
2424
margin: 0;
2525
color: var(--dialog-secondary-text-color);
26-
word-break: break-word;
26+
white-space: pre-wrap;
27+
word-wrap: break-word;
28+
overflow-wrap: break-word;
2729
}
2830

2931
.actions {

packages/neuron-wallet/src/controllers/api.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,8 @@ export default class ApiController {
596596
new UpdateController(false).quitAndInstall()
597597
})
598598

599-
handle('clear-cache', async (_, params: { resetIndexerData: boolean } | null) => {
600-
await IndexerService.clearCache(params?.resetIndexerData)
599+
handle('clear-cache', async () => {
600+
await IndexerService.clearCache()
601601
return { status: ResponseCode.Success, result: true }
602602
})
603603

packages/neuron-wallet/src/services/indexer.ts

+1-11
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import path from 'path'
22
import fs from 'fs'
33
import logger from '../utils/logger'
4-
import SyncedBlockNumber from '../models/synced-block-number'
54
import { clean as cleanChain } from '../database/chain'
65
import SettingsService from './settings'
7-
import startMonitor, { stopMonitor } from './monitor'
86
import { resetSyncTaskQueue } from '../block-sync-renderer'
9-
import NetworksService from './networks'
107

118
export default class IndexerService {
129
private constructor() {}
@@ -19,15 +16,8 @@ export default class IndexerService {
1916
return IndexerService.instance
2017
}
2118

22-
static clearCache = async (clearIndexerFolder = false) => {
19+
static clearCache = async () => {
2320
await cleanChain()
24-
25-
if (NetworksService.getInstance().getCurrent().readonly && clearIndexerFolder) {
26-
await stopMonitor('ckb')
27-
IndexerService.getInstance().clearData()
28-
await new SyncedBlockNumber().setNextBlock(BigInt(0))
29-
await startMonitor('ckb', true)
30-
}
3121
resetSyncTaskQueue.asyncPush(true)
3222
}
3323

packages/neuron-wallet/tests/services/indexer.test.ts

+1-39
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import IndexerService from '../../src/services/indexer'
22

33
const existsSyncMock = jest.fn()
44
const rmSyncMock = jest.fn()
5-
const stopMonitorMock = jest.fn()
6-
const getCurrentWalletMock = jest.fn()
75

86
jest.mock('fs', () => {
97
return {
@@ -48,20 +46,6 @@ jest.mock('../../src/database/chain', () => ({
4846
clean: () => jest.fn(),
4947
}))
5048

51-
jest.mock('../../src/services/monitor', () => {
52-
function mockMonitor() {}
53-
mockMonitor.stopMonitor = () => stopMonitorMock()
54-
return mockMonitor
55-
})
56-
57-
jest.mock('../../src/services/networks', () => ({
58-
getInstance() {
59-
return {
60-
getCurrent: getCurrentWalletMock,
61-
}
62-
},
63-
}))
64-
6549
const resetSyncTaskQueueAsyncPushMock = jest.fn()
6650
jest.mock('../../src/block-sync-renderer', () => ({
6751
resetSyncTaskQueue: {
@@ -75,8 +59,6 @@ describe('test IndexerService', () => {
7559
rmSyncMock.mockReset()
7660
setIndexerDataPathMock.mockReset()
7761
getIndexerDataPathMock.mockReset()
78-
getCurrentWalletMock.mockReset()
79-
stopMonitorMock.mockReset()
8062
})
8163
describe('test remove old indexer data', () => {
8264
it('old indexer data path exist', () => {
@@ -103,28 +85,8 @@ describe('test IndexerService', () => {
10385
beforeEach(() => {
10486
resetSyncTaskQueueAsyncPushMock.mockReset()
10587
})
106-
it('is external ckb node', async () => {
107-
getCurrentWalletMock.mockReturnValue({ readonly: false })
88+
it('clear cache success', async () => {
10889
await IndexerService.clearCache()
109-
expect(stopMonitorMock).toBeCalledTimes(0)
110-
expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1)
111-
})
112-
it('is internal ckb node', async () => {
113-
getCurrentWalletMock.mockReturnValue({ readonly: true })
114-
await IndexerService.clearCache()
115-
expect(stopMonitorMock).toBeCalledTimes(0)
116-
expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1)
117-
})
118-
it('clear indexer data with internal ckb node', async () => {
119-
getCurrentWalletMock.mockReturnValue({ readonly: true })
120-
await IndexerService.clearCache(true)
121-
expect(stopMonitorMock).toBeCalledTimes(1)
122-
expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1)
123-
})
124-
it('clear indexer data with external ckb node', async () => {
125-
getCurrentWalletMock.mockReturnValue({ readonly: false })
126-
await IndexerService.clearCache(true)
127-
expect(stopMonitorMock).toBeCalledTimes(0)
12890
expect(resetSyncTaskQueueAsyncPushMock).toBeCalledTimes(1)
12991
})
13092
})

0 commit comments

Comments
 (0)