gab-social/app/javascript/gabsocial/features/chat_conversation_create.js

86 lines
2.4 KiB
JavaScript

import React from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { fetchChatConversationAccountSuggestions } from '../actions/chats'
import { createChatConversation } from '../actions/chat_conversations'
import Account from '../components/account'
import Button from '../components/button'
import Input from '../components/input'
import Form from '../components/form'
import Text from '../components/text'
class ChatConversationCreate extends React.PureComponent {
state = {
query: '',
}
onChange = (query) => {
this.setState({ query })
this.props.onChange(query)
}
handleOnCreateChatConversation = (accountId) => {
console.log("handleOnCreateChatConversation:", accountId)
this.props.onCreateChatConversation(accountId)
}
render() {
const { query, suggestionsIds } = this.props
return (
<Form>
<div className={[_s.d, _s.px15, _s.pt10].join(' ')}>
<Input
title='Search for a user'
value={query}
onChange={this.onChange}
/>
</div>
<div className={[_s.d, _s.pt10].join(' ')}>
<div className={[_s.d].join(' ')}>
<Text weight='bold' size='small' color='secondary' className={[_s.d, _s.px15, _s.ml15, _s.mt5, _s.mb15].join(' ')}>
Search results ({suggestionsIds.size})
</Text>
{
suggestionsIds &&
suggestionsIds.map((accountId) => (
<Account
compact
key={`remove-from-list-${accountId}`}
id={accountId}
onActionClick={() => this.handleOnCreateChatConversation(accountId)}
actionIcon='add'
/>
))
}
</div>
</div>
</Form>
)
}
}
const mapStateToProps = (state) => ({
suggestionsIds: state.getIn(['chats', 'createChatConversationSuggestionIds']),
})
const mapDispatchToProps = (dispatch) => ({
onChange: (value) => {
console.log("value", value)
dispatch(fetchChatConversationAccountSuggestions(value))
},
onCreateChatConversation: (accountId) => {
dispatch(createChatConversation(accountId))
},
})
ChatConversationCreate.propTypes = {
onChange: PropTypes.func.isRequired,
onCreateChatConversation: PropTypes.func.isRequired,
isModal: PropTypes.bool,
}
export default connect(mapStateToProps, mapDispatchToProps)(ChatConversationCreate)