diff --git a/UI/src/components/role-picker/actions.js b/UI/src/components/role-picker/actions.js
index f39ede1..b259ae5 100644
--- a/UI/src/components/role-picker/actions.js
+++ b/UI/src/components/role-picker/actions.js
@@ -69,7 +69,8 @@ export const constructView = id => (dispatch, getState) => {
rolesSelected: selected,
originalRolesSelected: selected,
hidden: false,
- isEditingMessage: false
+ isEditingMessage: false,
+ messageBuffer: ''
}
})
@@ -112,26 +113,36 @@ export const updateRoles = roles => ({
data: roles
})
-export const openMessageEditor = ({
- type: Symbol.for('rp: set message editor state'),
- data: true
-})
+export const openMessageEditor = id => (dispatch, getState) => {
+ const message = getState().servers.getIn([id, 'message'])
+ dispatch(editServerMessage(id, message))
+ dispatch({
+ type: Symbol.for('rp: set message editor state'),
+ data: true
+ })
+}
export const saveServerMessage = id => async (dispatch, getState) => {
- const message = getState().servers.getIn([id, 'message'])
+ const message = getState().rolePicker.get('messageBuffer')
await superagent.patch(`/api/server/${id}`).send({ message })
+ dispatch(closeMessageEditor)
dispatch({
- type: Symbol.for('rp: set message editor state'),
- data: false
+ type: Symbol.for('server: edit message'),
+ data: {
+ id,
+ message
+ }
})
}
export const editServerMessage = (id, message) => ({
- type: Symbol.for('server: edit message'),
- data: {
- id,
- message
- }
+ type: Symbol.for('rp: edit message buffer'),
+ data: message
+})
+
+export const closeMessageEditor = ({
+ type: Symbol.for('rp: set message editor state'),
+ data: false
})
diff --git a/UI/src/components/role-picker/index.js b/UI/src/components/role-picker/index.js
index dce058d..ab5c641 100644
--- a/UI/src/components/role-picker/index.js
+++ b/UI/src/components/role-picker/index.js
@@ -31,6 +31,10 @@ class RolePicker extends Component {
}
}
+ get serverId () {
+ return this.props.server.get('id')
+ }
+
isSelected = id => {
return this.props.data.getIn([ 'rolesSelected', id ])
}
@@ -42,23 +46,29 @@ class RolePicker extends Component {
editServerMessage = (e) => {
const { dispatch } = this.props
- dispatch(Actions.editServerMessage(this.props.server.get('id'), e.target.value))
+ dispatch(Actions.editServerMessage(this.serverId, e.target.value))
}
saveServerMessage = (e) => {
const { dispatch } = this.props
- dispatch(Actions.saveServerMessage(this.props.server.get('id')))
+ dispatch(Actions.saveServerMessage(this.serverId))
}
openMessageEditor = () => {
const { dispatch } = this.props
- dispatch(Actions.openMessageEditor)
+ dispatch(Actions.openMessageEditor(this.serverId))
+ }
+
+ closeMessageEditor = () => {
+ const { dispatch } = this.props
+ dispatch(Actions.closeMessageEditor)
}
renderServerMessage (server) {
const isEditing = this.props.data.get('isEditingMessage')
const roleManager = server.getIn(['perms', 'canManageRoles'])
const msg = server.get('message')
+ const msgBuffer = this.props.data.get('messageBuffer')
console.log(msg, roleManager, isEditing, this.props.data.toJS())
@@ -83,9 +93,10 @@ class RolePicker extends Component {
return
}
diff --git a/UI/src/reducers/role-picker.js b/UI/src/reducers/role-picker.js
index 1038508..a64452c 100644
--- a/UI/src/reducers/role-picker.js
+++ b/UI/src/reducers/role-picker.js
@@ -4,6 +4,7 @@ const initialState = Map({
hidden: true, // should the view be hidden?
// emptyRoles: true, // helps derender roles so there's no visible element state change
isEditingMessage: false,
+ messageBuffer: '',
viewMap: OrderedMap({}), // roles in categories
originalRolesSelected: Map({}), // Map -- original roles for diffing against selected
rolesSelected: Map({}) // Map -- new roles for diffing
@@ -30,9 +31,10 @@ export default (state = initialState, { type, data }) => {
return state.set('rolesSelected', state.get('originalRolesSelected'))
case Symbol.for('rp: set message editor state'):
- console.log(state.set('isEditingMessage', data))
return state.set('isEditingMessage', data)
-
+
+ case Symbol.for('rp: edit message buffer'):
+ return state.set('messageBuffer', data)
// case Symbol.for('rp: zero role picker'):
// return initialState