diff --git a/backend/services/browser_service.go b/backend/services/browser_service.go
index 9d26af9..50feb11 100644
--- a/backend/services/browser_service.go
+++ b/backend/services/browser_service.go
@@ -562,47 +562,59 @@ func (b *browserService) GetKeySummary(param types.KeySummaryParam) (resp types.
client, ctx := item.client, item.ctx
key := strutil.DecodeRedisKey(param.Key)
- var keyType string
- var dur time.Duration
- keyType, err = client.Type(ctx, key).Result()
+
+ pipe := client.Pipeline()
+ typeVal := pipe.Type(ctx, key)
+ ttlVal := pipe.TTL(ctx, key)
+ sizeVal := pipe.MemoryUsage(ctx, key, 0)
+ _, err = pipe.Exec(ctx)
if err != nil {
resp.Msg = err.Error()
return
}
- if keyType == "none" {
+ if typeVal.Err() != nil {
+ resp.Msg = typeVal.Err().Error()
+ return
+ }
+ data := types.KeySummary{
+ Type: strings.ToLower(typeVal.Val()),
+ Size: sizeVal.Val(),
+ }
+ if data.Type == "none" {
resp.Msg = "key not exists"
return
}
- var data types.KeySummary
- data.Type = strings.ToLower(keyType)
- if dur, err = client.TTL(ctx, key).Result(); err != nil {
+ if ttlVal.Err() != nil {
data.TTL = -1
} else {
- if dur < 0 {
+ if ttlVal.Val() < 0 {
data.TTL = -1
} else {
- data.TTL = int64(dur.Seconds())
+ data.TTL = int64(ttlVal.Val().Seconds())
}
}
- data.Size, _ = client.MemoryUsage(ctx, key, 0).Result()
switch data.Type {
case "string":
- data.Length, _ = client.StrLen(ctx, key).Result()
+ data.Length, err = client.StrLen(ctx, key).Result()
case "list":
- data.Length, _ = client.LLen(ctx, key).Result()
+ data.Length, err = client.LLen(ctx, key).Result()
case "hash":
- data.Length, _ = client.HLen(ctx, key).Result()
+ data.Length, err = client.HLen(ctx, key).Result()
case "set":
- data.Length, _ = client.SCard(ctx, key).Result()
+ data.Length, err = client.SCard(ctx, key).Result()
case "zset":
- data.Length, _ = client.ZCard(ctx, key).Result()
+ data.Length, err = client.ZCard(ctx, key).Result()
case "stream":
- data.Length, _ = client.XLen(ctx, key).Result()
+ data.Length, err = client.XLen(ctx, key).Result()
default:
- resp.Msg = "unknown key type"
+ err = errors.New("unknown key type")
+ }
+
+ if err != nil {
+ resp.Msg = err.Error()
return
}
diff --git a/frontend/src/components/content_value/ContentValueHash.vue b/frontend/src/components/content_value/ContentValueHash.vue
index 40fca3d..d2fe5fc 100644
--- a/frontend/src/components/content_value/ContentValueHash.vue
+++ b/frontend/src/components/content_value/ContentValueHash.vue
@@ -205,12 +205,13 @@ const actionColumn = {
onEdit: () => startEdit(index + 1, row.k, row.v),
onDelete: async () => {
try {
- const { removed, success, msg } = await browserStore.removeHashField(
- props.name,
- props.db,
- keyName.value,
- row.k,
- )
+ const { removed, success, msg } = await browserStore.removeHashField({
+ server: props.name,
+ db: props.db,
+ key: keyName.value,
+ field: row.k,
+ reload: false,
+ })
if (success) {
props.value.splice(index, 1)
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.k }))
diff --git a/frontend/src/components/content_value/ContentValueList.vue b/frontend/src/components/content_value/ContentValueList.vue
index 6a370df..584a1a8 100644
--- a/frontend/src/components/content_value/ContentValueList.vue
+++ b/frontend/src/components/content_value/ContentValueList.vue
@@ -183,14 +183,13 @@ const actionColumn = {
},
onDelete: async () => {
try {
- const { success, msg } = await browserStore.removeListItem(
- props.name,
- props.db,
- keyName.value,
+ const { success, msg } = await browserStore.removeListItem({
+ server: props.name,
+ db: props.db,
+ key: keyName.value,
index,
- )
+ })
if (success) {
- props.value.splice(index, 1)
$message.success(i18n.t('dialogue.delete_key_succ', { key: `#${index + 1}` }))
} else {
$message.error(msg)
diff --git a/frontend/src/components/content_value/ContentValueSet.vue b/frontend/src/components/content_value/ContentValueSet.vue
index 8074bdb..716c6c1 100644
--- a/frontend/src/components/content_value/ContentValueSet.vue
+++ b/frontend/src/components/content_value/ContentValueSet.vue
@@ -180,14 +180,13 @@ const actionColumn = {
},
onDelete: async () => {
try {
- const { success, msg } = await browserStore.removeSetItem(
- props.name,
- props.db,
- keyName.value,
- row.v,
- )
+ const { success, msg } = await browserStore.removeSetItem({
+ server: props.name,
+ db: props.db,
+ key: keyName.value,
+ value: row.v,
+ })
if (success) {
- // props.value.splice(index, 1)
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.v }))
} else {
$message.error(msg)
diff --git a/frontend/src/components/content_value/ContentValueStream.vue b/frontend/src/components/content_value/ContentValueStream.vue
index 0bc2240..d344b68 100644
--- a/frontend/src/components/content_value/ContentValueStream.vue
+++ b/frontend/src/components/content_value/ContentValueStream.vue
@@ -120,12 +120,12 @@ const actionColumn = {
},
onDelete: async () => {
try {
- const { success, msg } = await browserStore.removeStreamValues(
- props.name,
- props.db,
- keyName.value,
- row.id,
- )
+ const { success, msg } = await browserStore.removeStreamValues({
+ server: props.name,
+ db: props.db,
+ key: keyName.value,
+ ids: row.id,
+ })
if (success) {
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.id }))
} else {
diff --git a/frontend/src/components/content_value/ContentValueString.vue b/frontend/src/components/content_value/ContentValueString.vue
index b9a1ba8..64ba1da 100644
--- a/frontend/src/components/content_value/ContentValueString.vue
+++ b/frontend/src/components/content_value/ContentValueString.vue
@@ -145,7 +145,6 @@ const onSave = async () => {
decode: viewAs.decode,
})
if (success) {
- // await browserStore.loadKeyDetail({ server: props.name, db: props.db, key: keyName.value })
$message.success(i18n.t('interface.save_value_succ'))
} else {
$message.error(msg)
diff --git a/frontend/src/components/content_value/ContentValueZSet.vue b/frontend/src/components/content_value/ContentValueZSet.vue
index bbeb2a3..bac9ca9 100644
--- a/frontend/src/components/content_value/ContentValueZSet.vue
+++ b/frontend/src/components/content_value/ContentValueZSet.vue
@@ -227,14 +227,13 @@ const actionColumn = {
onEdit: () => startEdit(index + 1, row.s, row.v),
onDelete: async () => {
try {
- const { success, msg } = await browserStore.removeZSetItem(
- props.name,
- props.db,
- keyName.value,
- row.v,
- )
+ const { success, msg } = await browserStore.removeZSetItem({
+ server: props.name,
+ db: props.db,
+ key: keyName.value,
+ value: row.v,
+ })
if (success) {
- // props.value.splice(index, 1)
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.v }))
} else {
$message.error(msg)
diff --git a/frontend/src/components/dialogs/AddFieldsDialog.vue b/frontend/src/components/dialogs/AddFieldsDialog.vue
index 961ec77..a934efb 100644
--- a/frontend/src/components/dialogs/AddFieldsDialog.vue
+++ b/frontend/src/components/dialogs/AddFieldsDialog.vue
@@ -9,7 +9,7 @@ import AddListValue from '@/components/new_value/AddListValue.vue'
import AddHashValue from '@/components/new_value/AddHashValue.vue'
import AddZSetValue from '@/components/new_value/AddZSetValue.vue'
import NewStreamValue from '@/components/new_value/NewStreamValue.vue'
-import { isEmpty, size, slice } from 'lodash'
+import { get, isEmpty, size, slice } from 'lodash'
import useBrowserStore from 'stores/browser.js'
import useTabStore from 'stores/tab.js'
@@ -22,7 +22,7 @@ const newForm = reactive({
type: '',
opType: 0,
value: null,
- reload: true,
+ reload: false,
})
const addValueComponent = {
@@ -89,88 +89,102 @@ const onAdd = async () => {
value = defaultValue[type]
}
const keyName = isEmpty(keyCode) ? key : keyCode
- let updated = false
+ let success = false
+ let msg = ''
switch (type) {
case types.LIST:
{
let data
if (newForm.opType === 1) {
- data = await browserStore.prependListItem({ server, db, key: keyName, values: value })
+ data = await browserStore.prependListItem({
+ server,
+ db,
+ key: keyName,
+ values: value,
+ reload: newForm.reload,
+ })
} else {
- data = await browserStore.appendListItem({ server, db, key: keyName, values: value })
- }
- const { success, msg } = data
- if (success) {
- updated = true
- $message.success(i18n.t('dialogue.handle_succ'))
- } else {
- $message.error(msg)
+ data = await browserStore.appendListItem({
+ server,
+ db,
+ key: keyName,
+ values: value,
+ reload: newForm.reload,
+ })
}
+ success = get(data, 'success')
+ msg = get(data, 'msg')
}
break
case types.HASH:
{
- const { success, msg } = await browserStore.addHashField(server, db, keyName, newForm.opType, value)
- if (success) {
- updated = true
- $message.success(i18n.t('dialogue.handle_succ'))
- } else {
- $message.error(msg)
- }
+ const data = await browserStore.addHashField({
+ server,
+ db,
+ key: keyName,
+ action: newForm.opType,
+ fieldItems: value,
+ reload: newForm.reload,
+ })
+ success = get(data, 'success')
+ msg = get(data, 'msg')
}
break
case types.SET:
{
- const { success, msg } = await browserStore.addSetItem(server, db, keyName, value)
- if (success) {
- updated = true
- $message.success(i18n.t('dialogue.handle_succ'))
- } else {
- $message.error(msg)
- }
+ const data = await browserStore.addSetItem({
+ server,
+ db,
+ key: keyName,
+ value,
+ reload: newForm.reload,
+ })
+ success = get(data, 'success')
+ msg = get(data, 'msg')
}
break
case types.ZSET:
{
- const { success, msg } = await browserStore.addZSetItem(server, db, keyName, newForm.opType, value)
- if (success) {
- updated = true
- $message.success(i18n.t('dialogue.handle_succ'))
- } else {
- $message.error(msg)
- }
+ const data = await browserStore.addZSetItem({
+ server,
+ db,
+ key: keyName,
+ action: newForm.opType,
+ vs: value,
+ reload: newForm.reload,
+ })
+ success = get(data, 'success')
+ msg = get(data, 'msg')
}
break
case types.STREAM:
{
if (size(value) > 2) {
- const { success, msg } = await browserStore.addStreamValue(
+ const data = await browserStore.addStreamValue({
server,
db,
- keyName,
- value[0],
- slice(value, 1),
- )
- if (success) {
- updated = true
- $message.success(i18n.t('dialogue.handle_succ'))
- } else {
- $message.error(msg)
- }
+ key: keyName,
+ id: value[0],
+ values: slice(value, 1),
+ reload: newForm.reload,
+ })
+ success = get(data, 'success')
+ msg = get(data, 'msg')
}
}
break
}
- if (updated) {
- if (newForm.reload) {
- browserStore.reloadKey({ server, db, key: keyName })
- }
+ if (success) {
+ $message.success(i18n.t('dialogue.handle_succ'))
+ } else if (!isEmpty(msg)) {
+ $message.error(msg)
}
+
dialogStore.closeAddFieldsDialog()
} catch (e) {
$message.error(e.message)
diff --git a/frontend/src/components/dialogs/NewKeyDialog.vue b/frontend/src/components/dialogs/NewKeyDialog.vue
index 73e5876..0770ad6 100644
--- a/frontend/src/components/dialogs/NewKeyDialog.vue
+++ b/frontend/src/components/dialogs/NewKeyDialog.vue
@@ -46,7 +46,7 @@ const options = computed(() => {
label: t,
}))
})
-const addValueComponent = {
+const newValueComponent = {
[types.STRING]: NewStringValue,
[types.HASH]: NewHashValue,
[types.LIST]: NewListValue,
@@ -136,7 +136,7 @@ const onAdd = async () => {
if (success) {
// select current key
tabStore.setSelectedKeys(server, nodeKey)
- browserStore.loadKeySummary({ server, db, key })
+ browserStore.loadKeySummary({ server, db, key, clearValue: true })
} else if (!isEmpty(msg)) {
$message.error(msg)
}
@@ -206,7 +206,7 @@ const onClose = () => {
-
+
diff --git a/frontend/src/components/sidebar/BrowserPane.vue b/frontend/src/components/sidebar/BrowserPane.vue
index 1cfcc17..3d9b4e8 100644
--- a/frontend/src/components/sidebar/BrowserPane.vue
+++ b/frontend/src/components/sidebar/BrowserPane.vue
@@ -166,7 +166,7 @@ const handleSelectDB = async (db) => {
await browserStore.openDatabase(props.server, db)
await nextTick()
await connectionStore.saveLastDB(props.server, db)
- tabStore.upsertTab({ server: props.server, db })
+ tabStore.upsertTab({ server: props.server, db, clearValue: true })
// browserTreeRef.value?.resetExpandKey(props.server, db)
fullyLoaded.value = await browserStore.loadMoreKeys(props.server, db)
browserTreeRef.value?.refreshTree()
diff --git a/frontend/src/components/sidebar/BrowserTree.vue b/frontend/src/components/sidebar/BrowserTree.vue
index 48497af..5dfe772 100644
--- a/frontend/src/components/sidebar/BrowserTree.vue
+++ b/frontend/src/components/sidebar/BrowserTree.vue
@@ -288,6 +288,7 @@ const onUpdateSelectedKeys = (keys, options) => {
server: props.server,
db,
key: redisKey,
+ clearValue: true,
})
}
return
diff --git a/frontend/src/stores/browser.js b/frontend/src/stores/browser.js
index 6fcb392..ed57691 100644
--- a/frontend/src/stores/browser.js
+++ b/frontend/src/stores/browser.js
@@ -413,9 +413,10 @@ const useBrowserStore = defineStore('browser', {
* @param {string} server
* @param {number} db
* @param {string|number[]} [key] null or blank indicate that update tab to display normal content (blank content or server status)
+ * @param {boolean} [clearValue]
* @return {Promise}
*/
- async loadKeySummary({ server, db, key }) {
+ async loadKeySummary({ server, db, key, clearValue }) {
try {
const tab = useTabStore()
if (!isEmpty(key)) {
@@ -438,6 +439,7 @@ const useBrowserStore = defineStore('browser', {
key: k,
size,
length,
+ clearValue,
})
return
} else {
@@ -458,9 +460,9 @@ const useBrowserStore = defineStore('browser', {
ttl: -1,
key: null,
keyCode: null,
- value: null,
size: 0,
length: 0,
+ clearValue,
})
} catch (e) {
$message.error('')
@@ -511,7 +513,7 @@ const useBrowserStore = defineStore('browser', {
const tab = useTabStore()
try {
tab.updateLoading({ server, db, loading: true })
- await this.loadKeySummary({ server, db, key })
+ await this.loadKeySummary({ server, db, key, clearValue: true })
await this.loadKeyDetail({ server, db, key, decode, format, matchPattern, reset: true })
} finally {
tab.updateLoading({ server, db, loading: false })
@@ -1065,6 +1067,8 @@ const useBrowserStore = defineStore('browser', {
}
const tab = useTabStore()
tab.updateValue({ server, db, key, value })
+
+ this.loadKeySummary({ server, db, key })
return {
success,
nodeKey: `${server}/db${db}#${ConnectionType.RedisValue}/${key}`,
@@ -1096,6 +1100,7 @@ const useBrowserStore = defineStore('browser', {
* @param {formatTypes} [retFormat]
* @param {boolean} [refresh]
* @param {number} [index] index for retrieve affect entries quickly
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean, [updated]: {}}>}
*/
async setHash({
@@ -1110,6 +1115,7 @@ const useBrowserStore = defineStore('browser', {
retDecode,
retFormat,
index,
+ reload,
}) {
try {
const { data, success, msg } = await SetHashValue({
@@ -1150,6 +1156,12 @@ const useBrowserStore = defineStore('browser', {
index: [index],
})
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success, updated }
} else {
return { success, msg }
@@ -1166,9 +1178,10 @@ const useBrowserStore = defineStore('browser', {
* @param {string|number[]} key
* @param {number }action 0:ignore duplicated fields 1:overwrite duplicated fields
* @param {string[]} fieldItems field1, value1, filed2, value2...
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean, [updated]: [], [added]: []}>}
*/
- async addHashField(server, db, key, action, fieldItems) {
+ async addHashField({ server, db, key, action, fieldItems, reload }) {
try {
const { data, success, msg } = await AddHashField(server, db, key, action, fieldItems)
if (success) {
@@ -1180,6 +1193,12 @@ const useBrowserStore = defineStore('browser', {
if (!isEmpty(added)) {
tab.insertValueEntries({ server, db, key, type: 'hash', entries: added })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success, updated, added }
} else {
return { success: false, msg }
@@ -1195,9 +1214,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number[]} key
* @param {string} field
+ * @param {boolean} reload
* @returns {Promise<{[msg]: {}, success: boolean, [removed]: string[]}>}
*/
- async removeHashField(server, db, key, field) {
+ async removeHashField({ server, db, key, field, reload }) {
try {
const { data, success, msg } = await SetHashValue({ server, db, key, field, newField: '' })
if (success) {
@@ -1206,6 +1226,12 @@ const useBrowserStore = defineStore('browser', {
// const tab = useTabStore()
// tab.removeValueEntries({ server, db, key, type: 'hash', entries: removed })
// }
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success, removed }
} else {
return { success, msg }
@@ -1215,32 +1241,16 @@ const useBrowserStore = defineStore('browser', {
}
},
- /**
- * insert list item
- * @param {string} connName
- * @param {number} db
- * @param {string|number[]} key
- * @param {int} action 0: push to head, 1: push to tail
- * @param {string[]}values
- * @returns {Promise<*|{msg, success: boolean}>}
- */
- async addListItem(connName, db, key, action, values) {
- try {
- return AddListItem(connName, db, key, action, values)
- } catch (e) {
- return { success: false, msg: e.message }
- }
- },
-
/**
* prepend item to head of list
* @param {string} server
* @param {number} db
* @param {string|number[]} key
* @param {string[]} values
+ * @param {boolean} reload
* @returns {Promise<{[msg]: string, success: boolean, [item]: []}>}
*/
- async prependListItem({ server, db, key, values }) {
+ async prependListItem({ server, db, key, values, reload }) {
try {
const { data, success, msg } = await AddListItem(server, db, key, 0, values)
if (success) {
@@ -1255,6 +1265,12 @@ const useBrowserStore = defineStore('browser', {
entries: left,
prepend: true,
})
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
}
return { success, item: left }
} else {
@@ -1271,9 +1287,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number[]} key
* @param {string[]} values
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean, [item]: any[]}>}
*/
- async appendListItem({ server, db, key, values }) {
+ async appendListItem({ server, db, key, values, reload }) {
try {
const { data, success, msg } = await AddListItem(server, db, key, 1, values)
if (success) {
@@ -1289,6 +1306,12 @@ const useBrowserStore = defineStore('browser', {
entries: right,
prepend: false,
})
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
}
return { success, item: right }
} else {
@@ -1310,6 +1333,7 @@ const useBrowserStore = defineStore('browser', {
* @param {formatTypes} format
* @param {decodeTypes} [retDecode]
* @param {formatTypes} [retFormat]
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
async updateListItem({
@@ -1322,6 +1346,7 @@ const useBrowserStore = defineStore('browser', {
format = formatTypes.RAW,
retDecode,
retFormat,
+ reload,
}) {
try {
const { data, success, msg } = await SetListItem({
@@ -1358,6 +1383,12 @@ const useBrowserStore = defineStore('browser', {
entries: removedIndex,
})
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success, msg }
@@ -1373,9 +1404,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number[]} key
* @param {number} index
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean, [removed]: string[]}>}
*/
- async removeListItem(server, db, key, index) {
+ async removeListItem({ server, db, key, index, reload }) {
try {
const { data, success, msg } = await SetListItem({ server, db, key, index })
if (success) {
@@ -1390,6 +1422,12 @@ const useBrowserStore = defineStore('browser', {
type: 'list',
entries: removedIndexes,
})
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
}
return { success, removed }
} else {
@@ -1406,9 +1444,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number} key
* @param {string|string[]} value
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
- async addSetItem(server, db, key, value) {
+ async addSetItem({ server, db, key, value, reload }) {
try {
if ((!value) instanceof Array) {
value = [value]
@@ -1420,6 +1459,12 @@ const useBrowserStore = defineStore('browser', {
const tab = useTabStore()
tab.insertValueEntries({ server, db, key, type: 'set', entries: added })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success, msg }
@@ -1440,6 +1485,7 @@ const useBrowserStore = defineStore('browser', {
* @param {formatTypes} [format]
* @param {decodeTypes} [retDecode]
* @param {formatTypes} [retFormat]
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
async updateSetItem({
@@ -1452,6 +1498,7 @@ const useBrowserStore = defineStore('browser', {
format = formatTypes.RAW,
retDecode,
retFormat,
+ reload,
}) {
try {
const { data, success, msg } = await UpdateSetItem({
@@ -1475,6 +1522,12 @@ const useBrowserStore = defineStore('browser', {
if (!isEmpty(added)) {
tab.insertValueEntries({ server, db, key, type: 'set', entries: added })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success: false, msg }
@@ -1490,9 +1543,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number[]} key
* @param {string} value
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
- async removeSetItem(server, db, key, value) {
+ async removeSetItem({ server, db, key, value, reload }) {
try {
const { data, success, msg } = await SetSetItem(server, db, key, true, [value])
if (success) {
@@ -1502,6 +1556,12 @@ const useBrowserStore = defineStore('browser', {
const removedValues = map(removed, 'v')
tab.removeValueEntries({ server, db, key, type: 'set', entries: removedValues })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success, msg }
@@ -1518,9 +1578,10 @@ const useBrowserStore = defineStore('browser', {
* @param {string|number[]} key
* @param {number} action
* @param {Object.} vs value: score
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
- async addZSetItem(server, db, key, action, vs) {
+ async addZSetItem({ server, db, key, action, vs, reload }) {
try {
const { data, success, msg } = await AddZSetValue(server, db, key, action, vs)
if (success) {
@@ -1532,6 +1593,12 @@ const useBrowserStore = defineStore('browser', {
if (!isEmpty(updated)) {
tab.updateValueEntries({ server, db, key, type: 'zset', entries: updated })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success, msg }
@@ -1554,6 +1621,7 @@ const useBrowserStore = defineStore('browser', {
* @param {decodeTypes} [retDecode]
* @param {formatTypes} [retFormat]
* @param {number} [index] index for retrieve affect entries quickly
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
async updateZSetItem({
@@ -1568,6 +1636,7 @@ const useBrowserStore = defineStore('browser', {
retDecode,
retFormat,
index,
+ reload,
}) {
try {
const { data, success, msg } = await UpdateZSetValue({
@@ -1598,6 +1667,12 @@ const useBrowserStore = defineStore('browser', {
if (!isEmpty(replaced)) {
tab.replaceValueEntries({ server, db, key, type: 'zset', entries: replaced, index: [index] })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success, updated, removed }
} else {
return { success, msg }
@@ -1613,9 +1688,10 @@ const useBrowserStore = defineStore('browser', {
* @param {number} db
* @param {string|number[]} key
* @param {string} value
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean, [removed]: []}>}
*/
- async removeZSetItem(server, db, key, value) {
+ async removeZSetItem({ server, db, key, value, reload }) {
try {
const { data, success, msg } = await UpdateZSetValue({ server, db, key, value, newValue: '', score: 0 })
if (success) {
@@ -1625,6 +1701,12 @@ const useBrowserStore = defineStore('browser', {
const removeValues = map(removed, 'v')
tab.removeValueEntries({ server, db, key, type: 'zset', entries: removeValues })
}
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success, removed }
} else {
return { success, msg }
@@ -1641,9 +1723,10 @@ const useBrowserStore = defineStore('browser', {
* @param {string|number[]} key
* @param {string} id
* @param {string[]} values field1, value1, filed2, value2...
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: string, success: boolean}>}
*/
- async addStreamValue(server, db, key, id, values) {
+ async addStreamValue({ server, db, key, id, values, reload }) {
try {
const { data = {}, success, msg } = await AddStreamValue(server, db, key, id, values)
if (success) {
@@ -1657,6 +1740,12 @@ const useBrowserStore = defineStore('browser', {
type: 'stream',
entries: added,
})
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
}
return { success }
} else {
@@ -1669,21 +1758,28 @@ const useBrowserStore = defineStore('browser', {
/**
* remove stream field
- * @param {string} connName
+ * @param {string} server
* @param {number} db
* @param {string|number[]} key
* @param {string[]|string} ids
+ * @param {boolean} [reload]
* @returns {Promise<{[msg]: {}, success: boolean}>}
*/
- async removeStreamValues(connName, db, key, ids) {
+ async removeStreamValues({ server, db, key, ids, reload }) {
if (typeof ids === 'string') {
ids = [ids]
}
try {
- const { data = {}, success, msg } = await RemoveStreamValues(connName, db, key, ids)
+ const { data = {}, success, msg } = await RemoveStreamValues(server, db, key, ids)
if (success) {
const tab = useTabStore()
- tab.removeValueEntries({ server: connName, db, key, type: 'stream', entries: ids })
+ tab.removeValueEntries({ server, db, key, type: 'stream', entries: ids })
+ if (reload === true) {
+ this.reloadKey({ server, db, key })
+ } else {
+ // reload summary only
+ this.loadKeySummary({ server, db, key })
+ }
return { success }
} else {
return { success, msg }
diff --git a/frontend/src/stores/tab.js b/frontend/src/stores/tab.js
index e5d8a4e..d962d78 100644
--- a/frontend/src/stores/tab.js
+++ b/frontend/src/stores/tab.js
@@ -162,7 +162,7 @@ const useTabStore = defineStore('tab', {
},
openBlank(server) {
- this.upsertTab({ server })
+ this.upsertTab({ server, clearValue: true })
},
/**
@@ -177,9 +177,10 @@ const useTabStore = defineStore('tab', {
* @param {number} [size]
* @param {number} [length]
* @param {string} [matchPattern]
+ * @param {boolean} [clearValue]
* @param {*} [value]
*/
- upsertTab({ subTab, server, db, type, ttl, key, keyCode, size, length, matchPattern = '' }) {
+ upsertTab({ subTab, server, db, type, ttl, key, keyCode, size, length, matchPattern = '', clearValue }) {
let tabIndex = findIndex(this.tabList, { name: server })
if (tabIndex === -1) {
this.tabList.push({
@@ -213,7 +214,9 @@ const useTabStore = defineStore('tab', {
tab.size = size
tab.length = length
tab.matchPattern = matchPattern
- tab.value = undefined
+ if (clearValue === true) {
+ tab.value = undefined
+ }
}
this._setActivatedIndex(tabIndex, true, subTab)
// this.activatedTab = tab.name
@@ -224,14 +227,16 @@ const useTabStore = defineStore('tab', {
* @param {string} server
* @param {number} db
* @param {string} key
- * @param {*} value
+ * @param {*} [value]
* @param {string} [format]
* @param {string] [decode]
* @param {string} [matchPattern]
* @param {boolean} [reset]
* @param {boolean} [end] keep end status if not set
+ * @param {number} [size]
+ * @param {number} [length]
*/
- updateValue({ server, db, key, value, format, decode, matchPattern, reset, end }) {
+ updateValue({ server, db, key, value, format, decode, matchPattern, reset, end, size = -1, length = -1 }) {
const tabData = find(this.tabList, { name: server, db, key })
if (tabData == null) {
return
@@ -240,6 +245,12 @@ const useTabStore = defineStore('tab', {
tabData.format = format || tabData.format
tabData.decode = decode || tabData.decode
tabData.matchPattern = matchPattern || ''
+ if (size >= 0) {
+ tabData.size = size
+ }
+ if (length >= 0) {
+ tabData.length = length
+ }
if (typeof end === 'boolean') {
tabData.end = end
}