mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-04-25 12:19:10 +00:00
feat(UI/picker): use a buffer to edit the server message
This commit is contained in:
parent
e174de5021
commit
5036795742
3 changed files with 44 additions and 20 deletions
|
@ -69,7 +69,8 @@ export const constructView = id => (dispatch, getState) => {
|
||||||
rolesSelected: selected,
|
rolesSelected: selected,
|
||||||
originalRolesSelected: selected,
|
originalRolesSelected: selected,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
isEditingMessage: false
|
isEditingMessage: false,
|
||||||
|
messageBuffer: ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -112,26 +113,36 @@ export const updateRoles = roles => ({
|
||||||
data: roles
|
data: roles
|
||||||
})
|
})
|
||||||
|
|
||||||
export const openMessageEditor = ({
|
export const openMessageEditor = id => (dispatch, getState) => {
|
||||||
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().servers.getIn([id, 'message'])
|
||||||
|
dispatch(editServerMessage(id, message))
|
||||||
await superagent.patch(`/api/server/${id}`).send({ message })
|
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: Symbol.for('rp: set message editor state'),
|
type: Symbol.for('rp: set message editor state'),
|
||||||
data: false
|
data: true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const editServerMessage = (id, message) => ({
|
export const saveServerMessage = id => async (dispatch, getState) => {
|
||||||
|
const message = getState().rolePicker.get('messageBuffer')
|
||||||
|
|
||||||
|
await superagent.patch(`/api/server/${id}`).send({ message })
|
||||||
|
|
||||||
|
dispatch(closeMessageEditor)
|
||||||
|
dispatch({
|
||||||
type: Symbol.for('server: edit message'),
|
type: Symbol.for('server: edit message'),
|
||||||
data: {
|
data: {
|
||||||
id,
|
id,
|
||||||
message
|
message
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const editServerMessage = (id, message) => ({
|
||||||
|
type: Symbol.for('rp: edit message buffer'),
|
||||||
|
data: message
|
||||||
|
})
|
||||||
|
|
||||||
|
export const closeMessageEditor = ({
|
||||||
|
type: Symbol.for('rp: set message editor state'),
|
||||||
|
data: false
|
||||||
})
|
})
|
||||||
|
|
|
@ -31,6 +31,10 @@ class RolePicker extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get serverId () {
|
||||||
|
return this.props.server.get('id')
|
||||||
|
}
|
||||||
|
|
||||||
isSelected = id => {
|
isSelected = id => {
|
||||||
return this.props.data.getIn([ 'rolesSelected', id ])
|
return this.props.data.getIn([ 'rolesSelected', id ])
|
||||||
}
|
}
|
||||||
|
@ -42,23 +46,29 @@ class RolePicker extends Component {
|
||||||
|
|
||||||
editServerMessage = (e) => {
|
editServerMessage = (e) => {
|
||||||
const { dispatch } = this.props
|
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) => {
|
saveServerMessage = (e) => {
|
||||||
const { dispatch } = this.props
|
const { dispatch } = this.props
|
||||||
dispatch(Actions.saveServerMessage(this.props.server.get('id')))
|
dispatch(Actions.saveServerMessage(this.serverId))
|
||||||
}
|
}
|
||||||
|
|
||||||
openMessageEditor = () => {
|
openMessageEditor = () => {
|
||||||
const { dispatch } = this.props
|
const { dispatch } = this.props
|
||||||
dispatch(Actions.openMessageEditor)
|
dispatch(Actions.openMessageEditor(this.serverId))
|
||||||
|
}
|
||||||
|
|
||||||
|
closeMessageEditor = () => {
|
||||||
|
const { dispatch } = this.props
|
||||||
|
dispatch(Actions.closeMessageEditor)
|
||||||
}
|
}
|
||||||
|
|
||||||
renderServerMessage (server) {
|
renderServerMessage (server) {
|
||||||
const isEditing = this.props.data.get('isEditingMessage')
|
const isEditing = this.props.data.get('isEditingMessage')
|
||||||
const roleManager = server.getIn(['perms', 'canManageRoles'])
|
const roleManager = server.getIn(['perms', 'canManageRoles'])
|
||||||
const msg = server.get('message')
|
const msg = server.get('message')
|
||||||
|
const msgBuffer = this.props.data.get('messageBuffer')
|
||||||
|
|
||||||
console.log(msg, roleManager, isEditing, this.props.data.toJS())
|
console.log(msg, roleManager, isEditing, this.props.data.toJS())
|
||||||
|
|
||||||
|
@ -83,9 +93,10 @@ class RolePicker extends Component {
|
||||||
return <section>
|
return <section>
|
||||||
<div className="role-picker__header">
|
<div className="role-picker__header">
|
||||||
<h3>Server Message</h3>
|
<h3>Server Message</h3>
|
||||||
<div uk-tooltip='' title='Save Server Message' onClick={this.saveServerMessage} style={{color: 'var(--c-green)'}} uk-icon="icon: check; scale: 1.1" />
|
<div uk-tooltip='' title='Save Server Message' onClick={this.saveServerMessage} style={{cursor: 'pointer', color: 'var(--c-green)'}} uk-icon="icon: check; ratio: 1.4" />
|
||||||
|
<div uk-tooltip='' title='Discard Edits' onClick={this.closeMessageEditor} style={{cursor: 'pointer', color: 'var(--c-red)', marginLeft: 10}} uk-icon="icon: trash; ratio: 0.9" />
|
||||||
</div>
|
</div>
|
||||||
<textarea className="uk-width-1-2 uk-textarea role-picker__msg-editor" rows="3" onChange={this.editServerMessage} value={msg} />
|
<textarea className="uk-width-1-2 uk-textarea role-picker__msg-editor" rows="3" onChange={this.editServerMessage} value={msgBuffer} />
|
||||||
</section>
|
</section>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ const initialState = Map({
|
||||||
hidden: true, // should the view be hidden?
|
hidden: true, // should the view be hidden?
|
||||||
// emptyRoles: true, // helps derender roles so there's no visible element state change
|
// emptyRoles: true, // helps derender roles so there's no visible element state change
|
||||||
isEditingMessage: false,
|
isEditingMessage: false,
|
||||||
|
messageBuffer: '',
|
||||||
viewMap: OrderedMap({}), // roles in categories
|
viewMap: OrderedMap({}), // roles in categories
|
||||||
originalRolesSelected: Map({}), // Map<role id, bool> -- original roles for diffing against selected
|
originalRolesSelected: Map({}), // Map<role id, bool> -- original roles for diffing against selected
|
||||||
rolesSelected: Map({}) // Map<role id, bool> -- new roles for diffing
|
rolesSelected: Map({}) // Map<role id, bool> -- new roles for diffing
|
||||||
|
@ -30,9 +31,10 @@ export default (state = initialState, { type, data }) => {
|
||||||
return state.set('rolesSelected', state.get('originalRolesSelected'))
|
return state.set('rolesSelected', state.get('originalRolesSelected'))
|
||||||
|
|
||||||
case Symbol.for('rp: set message editor state'):
|
case Symbol.for('rp: set message editor state'):
|
||||||
console.log(state.set('isEditingMessage', data))
|
|
||||||
return 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'):
|
// case Symbol.for('rp: zero role picker'):
|
||||||
// return initialState
|
// return initialState
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue