Deselect message history message when topic selection changes

Fixes #93
This commit is contained in:
Thomas Nordquist
2019-04-15 16:45:58 +02:00
parent d24dc41024
commit 38819b0e0a
5 changed files with 70 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
import * as q from '../../../backend/src/Model' import * as q from '../../../backend/src/Model'
import { Dispatch } from 'redux' import { ActionTypes } from '../reducers/Sidebar'
import { AppState } from '../reducers' import { AppState } from '../reducers'
import { Dispatch } from 'redux'
import { makePublishEvent, rendererEvents } from '../../../events' import { makePublishEvent, rendererEvents } from '../../../events'
export const clearRetainedTopic = () => (dispatch: Dispatch<any>, getState: () => AppState) => { export const clearRetainedTopic = () => (dispatch: Dispatch<any>, getState: () => AppState) => {
@@ -12,6 +13,13 @@ export const clearRetainedTopic = () => (dispatch: Dispatch<any>, getState: () =
dispatch(clearTopic(selectedTopic, false)) dispatch(clearTopic(selectedTopic, false))
} }
export const setCompareMessage = (message?: q.Message) => (dispatch: Dispatch<any>) => {
dispatch({
message,
type: ActionTypes.SIDEBAR_SET_COMPARE_MESSAGE,
})
}
export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicClearLimit = 50) => (dispatch: Dispatch<any>, getState: () => AppState) => { export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicClearLimit = 50) => (dispatch: Dispatch<any>, getState: () => AppState) => {
const { connectionId } = getState().connection const { connectionId } = getState().connection
if (!connectionId) { if (!connectionId) {
@@ -25,7 +33,6 @@ export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean, subtopicC
retain: true, retain: true,
qos: 0 as 0, qos: 0 as 0,
} }
console.log('deleting', topic.path())
rendererEvents.emit(publishEvent, mqttMessage) rendererEvents.emit(publishEvent, mqttMessage)
if (recursive) { if (recursive) {

View File

@@ -1,5 +1,6 @@
import * as q from '../../../backend/src/Model' import * as q from '../../../backend/src/Model'
import { ActionTypes } from '../reducers/Tree' import { ActionTypes } from '../reducers/Tree'
import { ActionTypes as SidebarActionTypes } from '../reducers/Sidebar'
import { AnyAction, Dispatch } from 'redux' import { AnyAction, Dispatch } from 'redux'
import { AppState } from '../reducers' import { AppState } from '../reducers'
import { batchActions } from 'redux-batched-actions' import { batchActions } from 'redux-batched-actions'
@@ -40,6 +41,11 @@ const debouncedSelectTopic = debounce((topic: q.TreeNode<TopicViewModel>, dispat
type: ActionTypes.TREE_SELECT_TOPIC, type: ActionTypes.TREE_SELECT_TOPIC,
} }
dispatch({
type: SidebarActionTypes.SIDEBAR_SET_COMPARE_MESSAGE,
message: undefined,
})
if (setTopicDispatch) { if (setTopicDispatch) {
dispatch(batchActions([selectTreeTopicDispatch, setTopicDispatch])) dispatch(batchActions([selectTreeTopicDispatch, setTopicDispatch]))
} else { } else {

View File

@@ -36,12 +36,11 @@ interface Props {
settingsActions: typeof settingsActions settingsActions: typeof settingsActions
classes: any classes: any
lastUpdate: number lastUpdate: number
}
interface State {
compareMessage?: q.Message compareMessage?: q.Message
} }
interface State {}
class ValuePanel extends React.Component<Props, State> { class ValuePanel extends React.Component<Props, State> {
constructor(props: Props) { constructor(props: Props) {
super(props) super(props)
@@ -58,7 +57,7 @@ class ValuePanel extends React.Component<Props, State> {
<ValueRenderer <ValueRenderer
message={node.message} message={node.message}
messageHistory={node.messageHistory} messageHistory={node.messageHistory}
compareWith={this.state.compareMessage} compareWith={this.props.compareMessage}
/> />
) )
} }
@@ -138,10 +137,10 @@ class ValuePanel extends React.Component<Props, State> {
} }
private handleMessageHistorySelect = (message: q.Message) => { private handleMessageHistorySelect = (message: q.Message) => {
if (message !== this.state.compareMessage) { if (message !== this.props.compareMessage) {
this.setState({ compareMessage: message }) this.props.sidebarActions.setCompareMessage(message)
} else { } else {
this.setState({ compareMessage: undefined }) this.props.sidebarActions.setCompareMessage(undefined)
} }
} }
@@ -163,7 +162,7 @@ class ValuePanel extends React.Component<Props, State> {
{this.renderValue()} {this.renderValue()}
</React.Suspense> </React.Suspense>
</div> </div>
<div><MessageHistory onSelect={this.handleMessageHistorySelect} selected={this.state.compareMessage} node={this.props.node} /></div> <div><MessageHistory onSelect={this.handleMessageHistorySelect} selected={this.props.compareMessage} node={this.props.node} /></div>
</ExpansionPanelDetails> </ExpansionPanelDetails>
</ExpansionPanel> </ExpansionPanel>
) )
@@ -181,6 +180,7 @@ const mapStateToProps = (state: AppState) => {
return { return {
valueRendererDisplayMode: state.settings.get('valueRendererDisplayMode'), valueRendererDisplayMode: state.settings.get('valueRendererDisplayMode'),
node: state.tree.get('selectedTopic'), node: state.tree.get('selectedTopic'),
compareMessage: state.sidebar.get('compareMessage'),
} }
} }

View File

@@ -0,0 +1,44 @@
import * as q from '../../../backend/src/Model'
import { Action } from 'redux'
import { createReducer } from './lib'
import { Record } from 'immutable'
interface SidebarModel {
compareMessage?: q.Message
}
const initialStateFactory = Record<SidebarModel>({
compareMessage: undefined,
})
export type Action = SetCompareMessage
export enum ActionTypes {
SIDEBAR_SET_COMPARE_MESSAGE = 'SIDEBAR_SET_COMPARE_MESSAGE',
SIDEBAR_RESET_STORE = 'SIDEBAR_RESET_STORE',
}
export type SidebarState = Record<SidebarModel>
const actions: {[s: string]: (state: SidebarState, action: Action) => SidebarState} = {
SIDEBAR_SET_COMPARE_MESSAGE: setCompareMessage,
SIDEBAR_RESET_STORE: resetStore,
}
export const sidebarReducer = createReducer(initialStateFactory(), actions)
export interface SetCompareMessage {
type: ActionTypes.SIDEBAR_SET_COMPARE_MESSAGE
message?: q.Message
}
function setCompareMessage(state: SidebarState, action: SetCompareMessage): SidebarState {
return state.set('compareMessage', action.message)
}
export interface ResetStore {
type: ActionTypes.SIDEBAR_RESET_STORE
}
function resetStore(): SidebarState {
return initialStateFactory()
}

View File

@@ -5,6 +5,7 @@ import { GlobalState, globalState } from './Global'
import { publishReducer, PublishState } from './Publish' import { publishReducer, PublishState } from './Publish'
import { Record } from 'immutable' import { Record } from 'immutable'
import { settingsReducer, SettingsState } from './Settings' import { settingsReducer, SettingsState } from './Settings'
import { sidebarReducer, SidebarState } from './Sidebar'
import { treeReducer, TreeState } from './Tree' import { treeReducer, TreeState } from './Tree'
export interface AppState { export interface AppState {
@@ -12,6 +13,7 @@ export interface AppState {
tree: TreeState tree: TreeState
settings: Record<SettingsState>, settings: Record<SettingsState>,
publish: PublishState publish: PublishState
sidebar: SidebarState,
connection: ConnectionState connection: ConnectionState
connectionManager: ConnectionManagerState connectionManager: ConnectionManagerState
} }
@@ -19,6 +21,7 @@ export interface AppState {
export default combineReducers({ export default combineReducers({
globalState, globalState,
publish: publishReducer, publish: publishReducer,
sidebar: sidebarReducer,
connection: connectionReducer, connection: connectionReducer,
settings: settingsReducer, settings: settingsReducer,
tree: treeReducer, tree: treeReducer,