Skip to content

Commit 590c791

Browse files
Merge pull request #140 from fbartho/fb/message-simple-configurability
[Feature] MessageSimple: Add Formal Override Points to provide Alternate Components
2 parents 2b701ff + a27a9cf commit 590c791

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

src/components/MessageSimple/index.js

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import React from 'react';
22
import styled from '@stream-io/styled-components';
33
import { themed } from '../../styles/theme';
44

5-
import { MessageStatus } from './MessageStatus';
6-
import { MessageContent } from './MessageContent';
7-
import { MessageAvatar } from './MessageAvatar';
8-
import { MessageSystem } from '../MessageSystem';
5+
import { MessageAvatar as DefaultMessageAvatar } from './MessageAvatar';
6+
import { MessageContent as DefaultMessageContent } from './MessageContent';
7+
import { MessageStatus as DefaultMessageStatus } from './MessageStatus';
8+
import { MessageSystem as DefaultMessageSystem } from '../MessageSystem';
99

1010
import PropTypes from 'prop-types';
1111

@@ -31,6 +31,26 @@ const Container = styled.View`
3131
export const MessageSimple = themed(
3232
class MessageSimple extends React.PureComponent {
3333
static propTypes = {
34+
/** Custom UI component for the avatar next to a message */
35+
MessageAvatar: PropTypes.oneOfType([
36+
PropTypes.node,
37+
PropTypes.elementType,
38+
]),
39+
/** Custom UI component for message content */
40+
MessageContent: PropTypes.oneOfType([
41+
PropTypes.node,
42+
PropTypes.elementType,
43+
]),
44+
/** Custom UI component for message status (delivered/read) */
45+
MessageStatus: PropTypes.oneOfType([
46+
PropTypes.node,
47+
PropTypes.elementType,
48+
]),
49+
/** Custom UI component for Messages of type "system" */
50+
MessageSystem: PropTypes.oneOfType([
51+
PropTypes.node,
52+
PropTypes.elementType,
53+
]),
3454
/** Custom UI component for message text */
3555
MessageText: PropTypes.oneOfType([PropTypes.node, PropTypes.elementType]),
3656
/** enabled reactions, this is usually set by the parent component based on channel configs */
@@ -177,6 +197,10 @@ export const MessageSimple = themed(
177197
repliesEnabled: true,
178198
forceAlign: false,
179199
showMessageStatus: true,
200+
MessageAvatar: DefaultMessageAvatar,
201+
MessageContent: DefaultMessageContent,
202+
MessageStatus: DefaultMessageStatus,
203+
MessageSystem: DefaultMessageSystem,
180204
};
181205

182206
static themePath = 'message';
@@ -188,6 +212,10 @@ export const MessageSimple = themed(
188212
groupStyles,
189213
forceAlign,
190214
showMessageStatus,
215+
MessageAvatar,
216+
MessageContent,
217+
MessageStatus,
218+
MessageSystem,
191219
} = this.props;
192220

193221
let pos;

types/index.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,14 @@ export interface MessageUIComponentProps
488488
* */
489489
forceAlign: string | boolean;
490490
showMessageStatus: boolean;
491+
/** Custom UI component for the avatar next to a message */
492+
MessageAvatar?: React.ElementType<MessageAvatarUIComponentProps>;
493+
/** Custom UI component for message content */
494+
MessageContent?: React.ElementType<MessageContentUIComponentProps>;
495+
/** Custom UI component for message status (delivered/read) */
496+
MessageStatus?: React.ElementType<MessageStatusUIComponentProps>;
497+
/** Custom UI component for Messages of type "system" */
498+
MessageSystem?: React.ElementType<MessageSystemProps>;
491499
/** Custom UI component for message text */
492500
MessageText?: React.ElementType<MessageTextProps>;
493501
/** https://github.com/beefe/react-native-actionsheet/blob/master/lib/styles.js */

0 commit comments

Comments
 (0)