diff --git a/app/src/actions/Sidebar.ts b/app/src/actions/Sidebar.ts index 07c48dd..c790876 100644 --- a/app/src/actions/Sidebar.ts +++ b/app/src/actions/Sidebar.ts @@ -1,6 +1,7 @@ import * as q from '../../../backend/src/Model' -import { Dispatch } from 'redux' +import { ActionTypes } from '../reducers/Sidebar' import { AppState } from '../reducers' +import { Dispatch } from 'redux' import { makePublishEvent, rendererEvents } from '../../../events' export const clearRetainedTopic = () => (dispatch: Dispatch, getState: () => AppState) => { @@ -12,6 +13,13 @@ export const clearRetainedTopic = () => (dispatch: Dispatch, getState: () = dispatch(clearTopic(selectedTopic, false)) } +export const setCompareMessage = (message?: q.Message) => (dispatch: Dispatch) => { + dispatch({ + message, + type: ActionTypes.SIDEBAR_SET_COMPARE_MESSAGE, + }) +} + export const clearTopic = (topic: q.TreeNode, recursive: boolean, subtopicClearLimit = 50) => (dispatch: Dispatch, getState: () => AppState) => { const { connectionId } = getState().connection if (!connectionId) { @@ -25,7 +33,6 @@ export const clearTopic = (topic: q.TreeNode, recursive: boolean, subtopicC retain: true, qos: 0 as 0, } - console.log('deleting', topic.path()) rendererEvents.emit(publishEvent, mqttMessage) if (recursive) { diff --git a/app/src/actions/Tree.ts b/app/src/actions/Tree.ts index 2758529..7f4ac67 100644 --- a/app/src/actions/Tree.ts +++ b/app/src/actions/Tree.ts @@ -1,5 +1,6 @@ import * as q from '../../../backend/src/Model' import { ActionTypes } from '../reducers/Tree' +import { ActionTypes as SidebarActionTypes } from '../reducers/Sidebar' import { AnyAction, Dispatch } from 'redux' import { AppState } from '../reducers' import { batchActions } from 'redux-batched-actions' @@ -40,6 +41,11 @@ const debouncedSelectTopic = debounce((topic: q.TreeNode, dispat type: ActionTypes.TREE_SELECT_TOPIC, } + dispatch({ + type: SidebarActionTypes.SIDEBAR_SET_COMPARE_MESSAGE, + message: undefined, + }) + if (setTopicDispatch) { dispatch(batchActions([selectTreeTopicDispatch, setTopicDispatch])) } else { diff --git a/app/src/components/Sidebar/ValueRenderer/ValuePanel.tsx b/app/src/components/Sidebar/ValueRenderer/ValuePanel.tsx index 139d056..5955218 100644 --- a/app/src/components/Sidebar/ValueRenderer/ValuePanel.tsx +++ b/app/src/components/Sidebar/ValueRenderer/ValuePanel.tsx @@ -36,12 +36,11 @@ interface Props { settingsActions: typeof settingsActions classes: any lastUpdate: number -} - -interface State { compareMessage?: q.Message } +interface State {} + class ValuePanel extends React.Component { constructor(props: Props) { super(props) @@ -58,7 +57,7 @@ class ValuePanel extends React.Component { ) } @@ -138,10 +137,10 @@ class ValuePanel extends React.Component { } private handleMessageHistorySelect = (message: q.Message) => { - if (message !== this.state.compareMessage) { - this.setState({ compareMessage: message }) + if (message !== this.props.compareMessage) { + this.props.sidebarActions.setCompareMessage(message) } else { - this.setState({ compareMessage: undefined }) + this.props.sidebarActions.setCompareMessage(undefined) } } @@ -163,7 +162,7 @@ class ValuePanel extends React.Component { {this.renderValue()} -
+
) @@ -181,6 +180,7 @@ const mapStateToProps = (state: AppState) => { return { valueRendererDisplayMode: state.settings.get('valueRendererDisplayMode'), node: state.tree.get('selectedTopic'), + compareMessage: state.sidebar.get('compareMessage'), } } diff --git a/app/src/reducers/Sidebar.ts b/app/src/reducers/Sidebar.ts new file mode 100644 index 0000000..c72871d --- /dev/null +++ b/app/src/reducers/Sidebar.ts @@ -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({ + 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 + +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() +} diff --git a/app/src/reducers/index.ts b/app/src/reducers/index.ts index cf57cf6..da29eeb 100644 --- a/app/src/reducers/index.ts +++ b/app/src/reducers/index.ts @@ -5,6 +5,7 @@ import { GlobalState, globalState } from './Global' import { publishReducer, PublishState } from './Publish' import { Record } from 'immutable' import { settingsReducer, SettingsState } from './Settings' +import { sidebarReducer, SidebarState } from './Sidebar' import { treeReducer, TreeState } from './Tree' export interface AppState { @@ -12,6 +13,7 @@ export interface AppState { tree: TreeState settings: Record, publish: PublishState + sidebar: SidebarState, connection: ConnectionState connectionManager: ConnectionManagerState } @@ -19,6 +21,7 @@ export interface AppState { export default combineReducers({ globalState, publish: publishReducer, + sidebar: sidebarReducer, connection: connectionReducer, settings: settingsReducer, tree: treeReducer,