Skip to content

Commit 503b047

Browse files
Merge pull request #66 from quick123official/feature/keys_history
Feature/keys history
2 parents 26cce03 + 75a12c4 commit 503b047

File tree

10 files changed

+281
-66
lines changed

10 files changed

+281
-66
lines changed

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "QuickRedis",
3-
"version": "2.4.2",
3+
"version": "2.5.0",
44
"private": true,
55
"description": "QuickRedis",
66
"author": "https://quick123.net/",
@@ -31,6 +31,11 @@
3131
"pack:linux": "electron-builder -l -p never",
3232
"pack:all": "electron-builder -mwl"
3333
},
34+
"jest": {
35+
"moduleNameMapper": {
36+
"@/(.*)": "<rootDir>/src/$1"
37+
}
38+
},
3439
"build": {
3540
"extends": null,
3641
"files": [

src/pages/HostContent/index.js

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class HostContent extends Component {
7979
Log.error("[cmd=info] Keyspace error", err);
8080
return;
8181
}
82-
let dbTabs = [];
82+
let dbIndexMap = new Map();
8383
try {
8484
let infos = res.split("\n");
8585
infos.shift();
@@ -94,8 +94,8 @@ class HostContent extends Component {
9494
if (dbname.startsWith("db")) {
9595
dbIndex = parseInt(dbname.substring(2));
9696
}
97-
dbTabs.push({
98-
key: "" + i,
97+
dbIndexMap.set(dbIndex, {
98+
key: "" + dbIndex,
9999
dbIndex: dbIndex,
100100
title: dbname,
101101
total: thirdSplitString[1],
@@ -104,14 +104,19 @@ class HostContent extends Component {
104104
} catch (error) {
105105
Log.error("[cmd=info] Keyspace split error", error);
106106
}
107+
let dbTabs = [];
107108
if (dbTabs.length === 0) {
108109
for (let i = 0; i < 16; i++) {
109-
dbTabs.push({
110-
key: "" + i,
111-
dbIndex: i,
112-
title: i,
113-
total: i,
114-
});
110+
let dbIndexObj = dbIndexMap.get(i);
111+
if (dbIndexObj === undefined || dbIndexObj === null) {
112+
dbIndexObj = {
113+
key: "" + i,
114+
dbIndex: i,
115+
title: "db" + i,
116+
total: 0,
117+
};
118+
}
119+
dbTabs.push(dbIndexObj);
115120
}
116121
}
117122
this.setState({ dbTabs: dbTabs });
@@ -195,7 +200,7 @@ class HostContent extends Component {
195200
}}
196201
>
197202
{this.hostKeyShowType ===
198-
HOST_KEY_SHOW_TYPE.TREE ? (
203+
HOST_KEY_SHOW_TYPE.TREE ? (
199204
<HostKeyTree
200205
node={this.props.node}
201206
db={tab.dbIndex}
@@ -211,7 +216,7 @@ class HostContent extends Component {
211216
""
212217
)}
213218
{this.hostKeyShowType ===
214-
HOST_KEY_SHOW_TYPE.TABLE ? (
219+
HOST_KEY_SHOW_TYPE.TABLE ? (
215220
<HostKey
216221
node={this.props.node}
217222
db={tab.dbIndex}
@@ -229,7 +234,7 @@ class HostContent extends Component {
229234
</div>
230235
<div style={{ paddingLeft: "20px" }}>
231236
{redisKeyType ===
232-
REDIS_DATA_TYPE.STRING ? (
237+
REDIS_DATA_TYPE.STRING ? (
233238
<HostKeyString
234239
redisKey={redisKey}
235240
redisKeyType={redisKeyType}
@@ -242,7 +247,7 @@ class HostContent extends Component {
242247
""
243248
)}
244249
{redisKeyType ===
245-
REDIS_DATA_TYPE.ZSET ? (
250+
REDIS_DATA_TYPE.ZSET ? (
246251
<HostKeySortSet
247252
redisKey={redisKey}
248253
redisKeyType={redisKeyType}
@@ -255,7 +260,7 @@ class HostContent extends Component {
255260
""
256261
)}
257262
{redisKeyType ===
258-
REDIS_DATA_TYPE.SET ? (
263+
REDIS_DATA_TYPE.SET ? (
259264
<HostKeySet
260265
redisKey={redisKey}
261266
redisKeyType={redisKeyType}
@@ -268,7 +273,7 @@ class HostContent extends Component {
268273
""
269274
)}
270275
{redisKeyType ===
271-
REDIS_DATA_TYPE.HASH ? (
276+
REDIS_DATA_TYPE.HASH ? (
272277
<HostKeyHash
273278
redisKey={redisKey}
274279
redisKeyType={redisKeyType}
@@ -281,7 +286,7 @@ class HostContent extends Component {
281286
""
282287
)}
283288
{redisKeyType ===
284-
REDIS_DATA_TYPE.LIST ? (
289+
REDIS_DATA_TYPE.LIST ? (
285290
<HostKeyList
286291
redisKey={redisKey}
287292
redisKeyType={redisKeyType}

src/pages/HostKey/index.js

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ import {
88
Select,
99
Form,
1010
Tooltip,
11+
AutoComplete,
1112
} from "antd";
1213
import { message } from "antd";
1314
import { SearchOutlined } from "@ant-design/icons";
1415
import { REDIS_DATA_TYPE, REDIS_DATA_SHOW } from "@/utils/constant";
15-
import "@/pages/CommonCss/zebra.css";
16+
import KeysHistoryService from "@/services/KeysHistoryService";
1617
import Log from "@/services/LogService";
18+
import "@/pages/CommonCss/zebra.css";
1719
import intl from "react-intl-universal";
1820
const { Search } = Input;
1921
const { Option } = Select;
2022
/**
21-
*host 管理
23+
* table 显示 keys
2224
*
2325
* @class HostKey
2426
* @extends {Component}
@@ -60,6 +62,7 @@ class HostKey extends Component {
6062
searchDisable: false,
6163
selectedRowKey: "",
6264
createKeyMadal: { visible: false, keyType: REDIS_DATA_TYPE.STRING },
65+
autoCompleteOptions: [],
6366
};
6467
searchInput = React.createRef();
6568
componentDidMount() {
@@ -87,10 +90,10 @@ class HostKey extends Component {
8790
*
8891
* @param {*} pattern
8992
* @param {*} cursor
90-
* @param {*} existKey
93+
* @param {*} originalKey
9194
* @memberof HostKey
9295
*/
93-
loadRedisDataByPattern(pattern, cursor, existKey) {
96+
loadRedisDataByPattern(pattern, cursor, originalKey) {
9497
let redis = this.props.node.redis;
9598
redis.scan(
9699
cursor,
@@ -106,14 +109,14 @@ class HostKey extends Component {
106109
"[cmd=HostKey] loadRedisDataByPattern error",
107110
pattern,
108111
cursor,
109-
existKey,
112+
originalKey,
110113
err
111114
);
112115
return;
113116
}
114117
let data = [];
115118
for (let i = 0; i < res[1].length; i++) {
116-
if (res[1][i] === existKey) {
119+
if (res[1][i] === originalKey) {
117120
continue;
118121
}
119122
data.push({
@@ -127,6 +130,10 @@ class HostKey extends Component {
127130
tableData: tableData,
128131
tableTotal: tableData.length,
129132
});
133+
// 如果key存在,则添加到搜索历史记录
134+
let host = this.props.node.data.host;
135+
let port = this.props.node.data.port;
136+
KeysHistoryService.addKeysHistory(host, port, originalKey);
130137
}
131138
this.setState({ searchDisable: false });
132139
}
@@ -165,13 +172,15 @@ class HostKey extends Component {
165172
key: key,
166173
name: key,
167174
});
168-
if (data.length !== 0) {
169-
let tableData = [...this.state.tableData, ...data];
170-
this.setState({
171-
tableData: tableData,
172-
tableTotal: tableData.length,
173-
});
174-
}
175+
// 如果key存在,则添加到搜索历史记录
176+
let host = this.props.node.data.host;
177+
let port = this.props.node.data.port;
178+
KeysHistoryService.addKeysHistory(host, port, key);
179+
let tableData = [...this.state.tableData, ...data];
180+
this.setState({
181+
tableData: tableData,
182+
tableTotal: tableData.length,
183+
});
175184
}
176185
this.loadRedisDataByPattern(pattern, cursor, key);
177186
},
@@ -376,6 +385,19 @@ class HostKey extends Component {
376385
}
377386
form.resetFields();
378387
}
388+
389+
onAutoCompleteSelect = (data) => {
390+
this.setState({ autoCompleteOptions: [] });
391+
};
392+
393+
onAutoCompleteChange = (data) => {
394+
// 如果key存在,则添加到搜索历史记录
395+
let host = this.props.node.data.host;
396+
let port = this.props.node.data.port;
397+
let keyHistoryArr = KeysHistoryService.searchKey(host, port, data);
398+
this.setState({ autoCompleteOptions: keyHistoryArr });
399+
};
400+
379401
render() {
380402
return (
381403
<div>
@@ -387,14 +409,21 @@ class HostKey extends Component {
387409
placement="right"
388410
title={intl.get("common.search.tooltip.limit")}
389411
>
390-
<Search
391-
ref={this.searchInput}
392-
onSearch={this.searchKey.bind(this)}
393-
enterButton={
394-
<Button icon={<SearchOutlined />}></Button>
395-
}
396-
disabled={this.state.searchDisable}
397-
/>
412+
<AutoComplete
413+
options={this.state.autoCompleteOptions}
414+
onSelect={this.onAutoCompleteSelect.bind(this)}
415+
onChange={this.onAutoCompleteChange.bind(this)}
416+
style={{ width: "100%" }}
417+
>
418+
<Search
419+
ref={this.searchInput}
420+
onSearch={this.searchKey.bind(this)}
421+
enterButton={
422+
<Button icon={<SearchOutlined />}></Button>
423+
}
424+
disabled={this.state.searchDisable}
425+
/>
426+
</AutoComplete>
398427
</Tooltip>
399428
<Table
400429
// columns={columns}

src/pages/HostKeyHash/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class HostKeyHash extends Component {
132132
// table 加载状态
133133
loading: false,
134134
// table 新增修改的对话框
135-
modal: { forceRender: true, visible: false, type: 0 },
135+
modal: { visible: false, type: 0 },
136136
// table 搜索key
137137
search: { field: "*" },
138138
total: 0,
@@ -487,7 +487,7 @@ class HostKeyHash extends Component {
487487
visible={this.state.modal.visible}
488488
onOk={this.handleModalOk.bind(this)}
489489
onCancel={this.handleModalCancel.bind(this)}
490-
forceRender={this.state.modal.forceRender}
490+
forceRender={true}
491491
width={"60%"}
492492
height={"40%"}
493493
>

src/pages/HostKeyList/index.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class HostKeyList extends Component {
119119
// table 加载状态
120120
loading: false,
121121
// table 新增修改的对话框
122-
modal: { forceRender: true, visible: false, type: 0 },
122+
modal: { visible: false, type: 0 },
123123
total: 0,
124124
};
125125
/**
@@ -310,14 +310,20 @@ class HostKeyList extends Component {
310310
.lpush(redisKey, member)
311311
.then(this.pushMemberCallBack(redisKey), (err) => {
312312
message.error("" + err);
313-
Log.error("[cmd=HostKeyList] handleModalOk lpush error", err);
313+
Log.error(
314+
"[cmd=HostKeyList] handleModalOk lpush error",
315+
err
316+
);
314317
});
315318
} else if (insertType === "1") {
316319
redis
317320
.rpush(redisKey, member)
318321
.then(this.pushMemberCallBack(redisKey), (err) => {
319322
message.error("" + err);
320-
Log.error("[cmd=HostKeyList] handleModalOk rpush error", err);
323+
Log.error(
324+
"[cmd=HostKeyList] handleModalOk rpush error",
325+
err
326+
);
321327
});
322328
}
323329
}
@@ -330,7 +336,6 @@ class HostKeyList extends Component {
330336
// 关闭modal
331337
this.setState({
332338
modal: {
333-
forceRender: true,
334339
visible: false,
335340
type: this.state.modal.type,
336341
},
@@ -414,7 +419,7 @@ class HostKeyList extends Component {
414419
onOk={this.handleModalOk.bind(this)}
415420
onCancel={this.handleModalCancel.bind(this)}
416421
okButtonProps={{ disabled: this.state.modal.type === 1 }}
417-
forceRender={this.state.modal.forceRender}
422+
forceRender={true}
418423
width={"60%"}
419424
height={"40%"}
420425
>

src/pages/HostKeySet/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class HostKeySet extends Component {
120120
// table 加载状态
121121
loading: false,
122122
// table 新增修改的对话框
123-
modal: { forceRender: true, visible: false, type: 0 },
123+
modal: { visible: false, type: 0 },
124124
// table 搜索key
125125
search: { searchMember: "*" },
126126
total: 0,
@@ -447,7 +447,7 @@ class HostKeySet extends Component {
447447
onOk={this.handleModalOk.bind(this)}
448448
onCancel={this.handleModalCancel.bind(this)}
449449
okButtonProps={{ disabled: this.state.modal.type === 1 }}
450-
forceRender={this.state.modal.forceRender}
450+
forceRender={true}
451451
width={"60%"}
452452
height={"40%"}
453453
>

src/pages/HostKeySortSet/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class HostKeySortSet extends Component {
129129
// table 加载状态
130130
loading: false,
131131
// table 新增修改的对话框
132-
modal: { forceRender: true, visible: false, type: 0 },
132+
modal: { visible: false, type: 0 },
133133
// table 搜索key
134134
search: { searchMember: "", isSearchIng: false },
135135
total: 0,
@@ -539,7 +539,7 @@ class HostKeySortSet extends Component {
539539
visible={this.state.modal.visible}
540540
onOk={this.handleModalOk.bind(this)}
541541
onCancel={this.handleModalCancel.bind(this)}
542-
forceRender={this.state.modal.forceRender}
542+
forceRender={true}
543543
width={"60%"}
544544
height={"40%"}
545545
>

0 commit comments

Comments
 (0)