docbrown/app/javascript/chat/actionMessage.jsx
Sarthak Sharma f088a672de
[deploy] 🚀Feature: chat action messages if a member added, left or removed from the group (#7105)
* Feature 🚀 : Ability to delete messages in chat channels

- Sending message ID to frontend
- Deleting Message
- Use pusher to delete message realtime

* Minor Bug 🐞: Show message action only for current user

- User can delete or edit their own messages

* Test cases added

* Bug 🐞: Update message id for receiver

Message id was not sent to receiver by pusher

* Refactoring🛠: Message controller refactoring

* Test Cases📝 : Specs for Delete message added

* Feature 🚀 : Ability to edit messages

* Test Cases📝 : Specs for Edit message added

* added chat action field and backend logic

* 🚀Action Messages: Someone Joins | Leaves | Removed

* chat action messages made realtion

* remove redundancy, message helper added

* 🛠  Style of action message changed

* 🔩 Specs added

Co-authored-by: Parasgr-code <paras.gaur@skynox.tech>
2020-04-08 18:14:34 -04:00

90 lines
2.3 KiB
JavaScript

import { h } from 'preact';
import PropTypes from 'prop-types';
import { adjustTimestamp } from './util';
const ActionMessage = ({
user,
message,
color,
timestamp,
profileImageUrl,
onContentTrigger,
}) => {
const spanStyle = { color };
const messageArea = (
<span
className="chatmessagebody__message"
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: message }}
/>
);
return (
<div className="chatmessage chatmessage__action ">
<div className="chatmessage__profilepic">
<a
href={`/${user}`}
target="_blank"
rel="noopener noreferrer"
data-content="sidecar-user"
onClick={onContentTrigger}
>
<img
role="presentation"
className="chatmessagebody__profileimage"
src={profileImageUrl}
alt={`${user} profile`}
data-content="sidecar-user"
onClick={onContentTrigger}
/>
</a>
</div>
<div
role="presentation"
className="chatmessage__body"
onClick={onContentTrigger}
>
<div className="message__info__actions">
<div className="message__info">
<span
className="chatmessagebody__username not-dark-theme-text-compatible"
style={spanStyle}
>
<a
className="chatmessagebody__username--link"
href={`/${user}`}
target="_blank"
rel="noopener noreferrer"
data-content="sidecar-user"
onClick={onContentTrigger}
>
{user}
</a>
</span>
<span className="chatmessage__timestamp">
{`${adjustTimestamp(timestamp)}`}
</span>
</div>
</div>
<div className="chatmessage__bodytext">{messageArea}</div>
</div>
</div>
);
};
ActionMessage.propTypes = {
user: PropTypes.string.isRequired,
color: PropTypes.string.isRequired,
message: PropTypes.string.isRequired,
timestamp: PropTypes.string,
profileImageUrl: PropTypes.string,
onContentTrigger: PropTypes.func.isRequired,
};
ActionMessage.defaultProps = {
profileImageUrl: '',
timestamp: null,
};
export default ActionMessage;