To fix Storybook, make <Message>
take renderReactionPicker
This commit is contained in:
parent
58c18ac420
commit
84ac7dd2df
11 changed files with 53 additions and 14 deletions
|
@ -47,6 +47,8 @@ const renderEmojiPicker: Props['renderEmojiPicker'] = ({
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const renderReactionPicker: Props['renderReactionPicker'] = () => <div />;
|
||||||
|
|
||||||
const MessageAudioContainer: React.FC<AudioAttachmentProps> = props => {
|
const MessageAudioContainer: React.FC<AudioAttachmentProps> = props => {
|
||||||
const [active, setActive] = React.useState<{
|
const [active, setActive] = React.useState<{
|
||||||
id?: string;
|
id?: string;
|
||||||
|
@ -135,6 +137,7 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
|
||||||
? ReadStatus.Read
|
? ReadStatus.Read
|
||||||
: overrideProps.readStatus,
|
: overrideProps.readStatus,
|
||||||
renderEmojiPicker,
|
renderEmojiPicker,
|
||||||
|
renderReactionPicker,
|
||||||
renderAudioAttachment,
|
renderAudioAttachment,
|
||||||
replyToMessage: action('replyToMessage'),
|
replyToMessage: action('replyToMessage'),
|
||||||
retrySend: action('retrySend'),
|
retrySend: action('retrySend'),
|
||||||
|
|
|
@ -63,7 +63,7 @@ import {
|
||||||
} from '../../types/Colors';
|
} from '../../types/Colors';
|
||||||
import { createRefMerger } from '../_util';
|
import { createRefMerger } from '../_util';
|
||||||
import { emojiToData } from '../emoji/lib';
|
import { emojiToData } from '../emoji/lib';
|
||||||
import { SmartReactionPicker } from '../../state/smart/ReactionPicker';
|
import type { SmartReactionPicker } from '../../state/smart/ReactionPicker';
|
||||||
import { getCustomColorStyle } from '../../util/getCustomColorStyle';
|
import { getCustomColorStyle } from '../../util/getCustomColorStyle';
|
||||||
import { offsetDistanceModifier } from '../../util/popperUtil';
|
import { offsetDistanceModifier } from '../../util/popperUtil';
|
||||||
|
|
||||||
|
@ -197,6 +197,9 @@ export type PropsHousekeeping = {
|
||||||
disableScroll?: boolean;
|
disableScroll?: boolean;
|
||||||
collapseMetadata?: boolean;
|
collapseMetadata?: boolean;
|
||||||
renderAudioAttachment: (props: AudioAttachmentProps) => JSX.Element;
|
renderAudioAttachment: (props: AudioAttachmentProps) => JSX.Element;
|
||||||
|
renderReactionPicker: (
|
||||||
|
props: React.ComponentProps<typeof SmartReactionPicker>
|
||||||
|
) => JSX.Element;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PropsActions = {
|
export type PropsActions = {
|
||||||
|
@ -1319,6 +1322,7 @@ export class Message extends React.PureComponent<Props, State> {
|
||||||
isTapToView,
|
isTapToView,
|
||||||
reactToMessage,
|
reactToMessage,
|
||||||
renderEmojiPicker,
|
renderEmojiPicker,
|
||||||
|
renderReactionPicker,
|
||||||
replyToMessage,
|
replyToMessage,
|
||||||
selectedReaction,
|
selectedReaction,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
@ -1459,22 +1463,22 @@ export class Message extends React.PureComponent<Props, State> {
|
||||||
this.popperPreventOverflowModifier(),
|
this.popperPreventOverflowModifier(),
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
{({ ref, style }) => (
|
{({ ref, style }) =>
|
||||||
<SmartReactionPicker
|
renderReactionPicker({
|
||||||
ref={ref}
|
ref,
|
||||||
style={style}
|
style,
|
||||||
selected={selectedReaction}
|
selected: selectedReaction,
|
||||||
onClose={this.toggleReactionPicker}
|
onClose: this.toggleReactionPicker,
|
||||||
onPick={emoji => {
|
onPick: emoji => {
|
||||||
this.toggleReactionPicker(true);
|
this.toggleReactionPicker(true);
|
||||||
reactToMessage(id, {
|
reactToMessage(id, {
|
||||||
emoji,
|
emoji,
|
||||||
remove: emoji === selectedReaction,
|
remove: emoji === selectedReaction,
|
||||||
});
|
});
|
||||||
}}
|
},
|
||||||
renderEmojiPicker={renderEmojiPicker}
|
renderEmojiPicker,
|
||||||
/>
|
})
|
||||||
)}
|
}
|
||||||
</Popper>,
|
</Popper>,
|
||||||
reactionPickerRoot
|
reactionPickerRoot
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -75,6 +75,7 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
|
||||||
reactToMessage: action('reactToMessage'),
|
reactToMessage: action('reactToMessage'),
|
||||||
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
||||||
renderEmojiPicker: () => <div />,
|
renderEmojiPicker: () => <div />,
|
||||||
|
renderReactionPicker: () => <div />,
|
||||||
replyToMessage: action('replyToMessage'),
|
replyToMessage: action('replyToMessage'),
|
||||||
retrySend: action('retrySend'),
|
retrySend: action('retrySend'),
|
||||||
showContactDetail: action('showContactDetail'),
|
showContactDetail: action('showContactDetail'),
|
||||||
|
|
|
@ -68,6 +68,7 @@ export type PropsBackboneActions = Pick<
|
||||||
| 'reactToMessage'
|
| 'reactToMessage'
|
||||||
| 'renderAudioAttachment'
|
| 'renderAudioAttachment'
|
||||||
| 'renderEmojiPicker'
|
| 'renderEmojiPicker'
|
||||||
|
| 'renderReactionPicker'
|
||||||
| 'replyToMessage'
|
| 'replyToMessage'
|
||||||
| 'retrySend'
|
| 'retrySend'
|
||||||
| 'showContactDetail'
|
| 'showContactDetail'
|
||||||
|
@ -271,6 +272,7 @@ export class MessageDetail extends React.Component<Props> {
|
||||||
reactToMessage,
|
reactToMessage,
|
||||||
renderAudioAttachment,
|
renderAudioAttachment,
|
||||||
renderEmojiPicker,
|
renderEmojiPicker,
|
||||||
|
renderReactionPicker,
|
||||||
replyToMessage,
|
replyToMessage,
|
||||||
retrySend,
|
retrySend,
|
||||||
showContactDetail,
|
showContactDetail,
|
||||||
|
@ -319,6 +321,7 @@ export class MessageDetail extends React.Component<Props> {
|
||||||
reactToMessage={reactToMessage}
|
reactToMessage={reactToMessage}
|
||||||
renderAudioAttachment={renderAudioAttachment}
|
renderAudioAttachment={renderAudioAttachment}
|
||||||
renderEmojiPicker={renderEmojiPicker}
|
renderEmojiPicker={renderEmojiPicker}
|
||||||
|
renderReactionPicker={renderReactionPicker}
|
||||||
replyToMessage={replyToMessage}
|
replyToMessage={replyToMessage}
|
||||||
retrySend={retrySend}
|
retrySend={retrySend}
|
||||||
showForwardMessageModal={showForwardMessageModal}
|
showForwardMessageModal={showForwardMessageModal}
|
||||||
|
|
|
@ -66,6 +66,7 @@ const defaultMessageProps: MessagesProps = {
|
||||||
reactToMessage: action('default--reactToMessage'),
|
reactToMessage: action('default--reactToMessage'),
|
||||||
readStatus: ReadStatus.Read,
|
readStatus: ReadStatus.Read,
|
||||||
renderEmojiPicker: () => <div />,
|
renderEmojiPicker: () => <div />,
|
||||||
|
renderReactionPicker: () => <div />,
|
||||||
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
||||||
replyToMessage: action('default--replyToMessage'),
|
replyToMessage: action('default--replyToMessage'),
|
||||||
retrySend: action('default--retrySend'),
|
retrySend: action('default--retrySend'),
|
||||||
|
|
|
@ -387,6 +387,7 @@ const renderItem = (
|
||||||
id=""
|
id=""
|
||||||
isSelected={false}
|
isSelected={false}
|
||||||
renderEmojiPicker={() => <div />}
|
renderEmojiPicker={() => <div />}
|
||||||
|
renderReactionPicker={() => <div />}
|
||||||
item={items[id]}
|
item={items[id]}
|
||||||
i18n={i18n}
|
i18n={i18n}
|
||||||
interactionMode="keyboard"
|
interactionMode="keyboard"
|
||||||
|
|
|
@ -32,6 +32,10 @@ const renderEmojiPicker: TimelineItemProps['renderEmojiPicker'] = ({
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const renderReactionPicker: TimelineItemProps['renderReactionPicker'] = () => (
|
||||||
|
<div />
|
||||||
|
);
|
||||||
|
|
||||||
const renderContact = (conversationId: string) => (
|
const renderContact = (conversationId: string) => (
|
||||||
<React.Fragment key={conversationId}>{conversationId}</React.Fragment>
|
<React.Fragment key={conversationId}>{conversationId}</React.Fragment>
|
||||||
);
|
);
|
||||||
|
@ -86,6 +90,7 @@ const getDefaultProps = () => ({
|
||||||
renderContact,
|
renderContact,
|
||||||
renderUniversalTimerNotification,
|
renderUniversalTimerNotification,
|
||||||
renderEmojiPicker,
|
renderEmojiPicker,
|
||||||
|
renderReactionPicker,
|
||||||
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
renderAudioAttachment: () => <div>*AudioAttachment*</div>,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,10 @@ type PropsActionsType = MessageActionsType &
|
||||||
|
|
||||||
export type PropsType = PropsLocalType &
|
export type PropsType = PropsLocalType &
|
||||||
PropsActionsType &
|
PropsActionsType &
|
||||||
Pick<AllMessageProps, 'renderEmojiPicker' | 'renderAudioAttachment'>;
|
Pick<
|
||||||
|
AllMessageProps,
|
||||||
|
'renderEmojiPicker' | 'renderAudioAttachment' | 'renderReactionPicker'
|
||||||
|
>;
|
||||||
|
|
||||||
export class TimelineItem extends React.PureComponent<PropsType> {
|
export class TimelineItem extends React.PureComponent<PropsType> {
|
||||||
public render(): JSX.Element | null {
|
public render(): JSX.Element | null {
|
||||||
|
|
|
@ -13,12 +13,17 @@ import { StateType } from '../reducer';
|
||||||
import { getIntl, getInteractionMode } from '../selectors/user';
|
import { getIntl, getInteractionMode } from '../selectors/user';
|
||||||
import { renderAudioAttachment } from './renderAudioAttachment';
|
import { renderAudioAttachment } from './renderAudioAttachment';
|
||||||
import { renderEmojiPicker } from './renderEmojiPicker';
|
import { renderEmojiPicker } from './renderEmojiPicker';
|
||||||
|
import { renderReactionPicker } from './renderReactionPicker';
|
||||||
import { getContactNameColorSelector } from '../selectors/conversations';
|
import { getContactNameColorSelector } from '../selectors/conversations';
|
||||||
|
|
||||||
export { Contact } from '../../components/conversation/MessageDetail';
|
export { Contact } from '../../components/conversation/MessageDetail';
|
||||||
export type OwnProps = Omit<
|
export type OwnProps = Omit<
|
||||||
MessageDetailProps,
|
MessageDetailProps,
|
||||||
'i18n' | 'interactionMode' | 'renderAudioAttachment' | 'renderEmojiPicker'
|
| 'i18n'
|
||||||
|
| 'interactionMode'
|
||||||
|
| 'renderAudioAttachment'
|
||||||
|
| 'renderEmojiPicker'
|
||||||
|
| 'renderReactionPicker'
|
||||||
>;
|
>;
|
||||||
|
|
||||||
const mapStateToProps = (
|
const mapStateToProps = (
|
||||||
|
@ -81,6 +86,7 @@ const mapStateToProps = (
|
||||||
reactToMessage,
|
reactToMessage,
|
||||||
renderAudioAttachment,
|
renderAudioAttachment,
|
||||||
renderEmojiPicker,
|
renderEmojiPicker,
|
||||||
|
renderReactionPicker,
|
||||||
replyToMessage,
|
replyToMessage,
|
||||||
retrySend,
|
retrySend,
|
||||||
showContactDetail,
|
showContactDetail,
|
||||||
|
|
|
@ -33,6 +33,7 @@ import { SmartHeroRow } from './HeroRow';
|
||||||
import { SmartTimelineLoadingRow } from './TimelineLoadingRow';
|
import { SmartTimelineLoadingRow } from './TimelineLoadingRow';
|
||||||
import { renderAudioAttachment } from './renderAudioAttachment';
|
import { renderAudioAttachment } from './renderAudioAttachment';
|
||||||
import { renderEmojiPicker } from './renderEmojiPicker';
|
import { renderEmojiPicker } from './renderEmojiPicker';
|
||||||
|
import { renderReactionPicker } from './renderReactionPicker';
|
||||||
|
|
||||||
import { getOwn } from '../../util/getOwn';
|
import { getOwn } from '../../util/getOwn';
|
||||||
import { assert } from '../../util/assert';
|
import { assert } from '../../util/assert';
|
||||||
|
@ -77,6 +78,7 @@ function renderItem(
|
||||||
id={messageId}
|
id={messageId}
|
||||||
onHeightChange={createBoundOnHeightChange(onHeightChange, messageId)}
|
onHeightChange={createBoundOnHeightChange(onHeightChange, messageId)}
|
||||||
renderEmojiPicker={renderEmojiPicker}
|
renderEmojiPicker={renderEmojiPicker}
|
||||||
|
renderReactionPicker={renderReactionPicker}
|
||||||
renderAudioAttachment={renderAudioAttachment}
|
renderAudioAttachment={renderAudioAttachment}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
10
ts/state/smart/renderReactionPicker.tsx
Normal file
10
ts/state/smart/renderReactionPicker.tsx
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
// Copyright 2021 Signal Messenger, LLC
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
import React, { ComponentProps } from 'react';
|
||||||
|
|
||||||
|
import { SmartReactionPicker } from './ReactionPicker';
|
||||||
|
|
||||||
|
export const renderReactionPicker = (
|
||||||
|
props: ComponentProps<typeof SmartReactionPicker>
|
||||||
|
): JSX.Element => <SmartReactionPicker {...props} />;
|
Loading…
Add table
Add a link
Reference in a new issue