Skip to content

Commit

Permalink
Remove recursive topic removal limit
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasnordquist committed Jul 22, 2019
1 parent 6781170 commit 39d87d5
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 37 deletions.
44 changes: 17 additions & 27 deletions app/src/actions/clearTopic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import { makePublishEvent, rendererEvents } from '../../../events'
import { moveSelectionUpOrDownwards } from './visibleTreeTraversal'
import { globalActions } from '.'

export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicClearLimit = 50) => async (
export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean) => async (
dispatch: Dispatch<any>,
getState: () => AppState
) => {
if (recursive) {
const topicCount = topic.childTopicCount()
const deleteLimitMessage =
topicCount > subtopicClearLimit ? ` You can only delete ${subtopicClearLimit} child topics at once.` : ''

const topicDelta = topic.hasMessage() ? -1 : 0
const childTopicsMessage =
Expand All @@ -23,7 +21,7 @@ export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicC
const confirmed = await dispatch(
globalActions.requestConfirmation(
'Confirm delete',
`Do you want to delete "${topic.path()}"${childTopicsMessage}?${deleteLimitMessage}`
`Do you want to delete "${topic.path()}"${childTopicsMessage}?`
)
)
if (!confirmed) {
Expand All @@ -38,27 +36,19 @@ export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicC
return
}
const publishEvent = makePublishEvent(connectionId)
const mqttMessage = {
topic: topic.path(),
payload: null,
retain: true,
qos: 0 as 0,
}
rendererEvents.emit(publishEvent, mqttMessage)
if (recursive) {
topic
.childTopics()
.filter(topic => Boolean(topic.message && topic.message.value))
.slice(0, subtopicClearLimit)
.forEach((topic, idx) => {
const mqttMessage = {
topic: topic.path(),
payload: null,
retain: true,
qos: 0 as 0,
}
// Rate limit deletion
setTimeout(() => rendererEvents.emit(publishEvent, mqttMessage), 20 * idx)
})
}
const topicsForPurging = recursive ? [topic, ...topic.childTopics()] : [topic]

topicsForPurging
.filter(t => t.path() !== '' && t.hasMessage())
.map(t => t.path())
.forEach((path, idx) => {
const mqttMessage = {
topic: path,
payload: null,
retain: true,
qos: 0 as 0,
}
// Rate limit deletion
setTimeout(() => rendererEvents.emit(publishEvent, mqttMessage), 20 * idx)
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,23 @@ export const RecursiveTopicDeleteButton = (props: {
if (props.node) {
event.stopPropagation()
event.preventDefault()
props.deleteTopicAction(props.node, true, deleteLimit)
props.deleteTopicAction(props.node, true, Infinity)
}
},
[props.node]
)

if (!props.node) {
return null
}
const deleteLimit = 50

const topicCount = props.node ? props.node.childTopicCount() : 0
if (topicCount === 0 || (props.node.message && topicCount === 1)) {
return null
}
return (
<Badge
badgeContent={<span style={{ whiteSpace: 'nowrap' }}>{topicCount >= deleteLimit ? '50+' : topicCount}</span>}
color="secondary"
>
<CustomIconButton onClick={onClick} tooltip={`Deletes up to ${deleteLimit} sub-topics with a single click`}>
<Badge badgeContent={<span style={{ whiteSpace: 'nowrap' }}>{topicCount}</span>} color="secondary">
<CustomIconButton onClick={onClick} tooltip={`Deletes ${topicCount} sub-topics with a single click`}>
<Delete color="action" />
</CustomIconButton>
</Badge>
Expand Down
4 changes: 2 additions & 2 deletions app/src/components/Sidebar/TopicPanel/TopicPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ const TopicPanel = (props: { node?: q.TreeNode<any>; actions: typeof sidebarActi
console.log(node && node.path())
const copyTopic = node ? <Copy value={node.path()} /> : null

const deleteTopic = useCallback((topic?: q.TreeNode<any>, recursive: boolean = false, maxCount = 50) => {
const deleteTopic = useCallback((topic?: q.TreeNode<any>, recursive: boolean = false) => {
if (!topic) {
return
}

props.actions.clearTopic(topic, recursive, maxCount)
props.actions.clearTopic(topic, recursive)
}, [])

return useMemo(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export function useDeleteKeyCallback(topic: q.TreeNode<any>, actions: typeof tre
if (event.keyCode === KeyCodes.delete || event.keyCode === KeyCodes.backspace) {
event.stopPropagation()
event.preventDefault()
actions.clearTopic(topic, true, 50)
actions.clearTopic(topic, true)
}
},
[topic]
Expand Down

0 comments on commit 39d87d5

Please sign in to comment.