@pega/cosmos-react-social 2.0.0-dev.18.0 → 2.0.0-dev.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/lib/components/Chat/Chat.js +4 -4
  2. package/lib/components/Chat/Chat.js.map +1 -1
  3. package/lib/components/Chat/ChatBody.js +2 -2
  4. package/lib/components/Chat/ChatBody.js.map +1 -1
  5. package/lib/components/Chat/ChatComposer.js +12 -12
  6. package/lib/components/Chat/ChatComposer.js.map +1 -1
  7. package/lib/components/Chat/ChatHeader.js +3 -3
  8. package/lib/components/Chat/ChatHeader.js.map +1 -1
  9. package/lib/components/Chat/ChatTranscript.js +5 -5
  10. package/lib/components/Chat/ChatTranscript.js.map +1 -1
  11. package/lib/components/Chat/Message.js +13 -13
  12. package/lib/components/Chat/Message.js.map +1 -1
  13. package/lib/components/Chat/MessageList.js +7 -7
  14. package/lib/components/Chat/MessageList.js.map +1 -1
  15. package/lib/components/Chat/RepeatingView.js +5 -5
  16. package/lib/components/Chat/RepeatingView.js.map +1 -1
  17. package/lib/components/Chat/SuggestedReplyPicker.js +9 -9
  18. package/lib/components/Chat/SuggestedReplyPicker.js.map +1 -1
  19. package/lib/components/Chat/SystemMessage.js +2 -2
  20. package/lib/components/Chat/SystemMessage.js.map +1 -1
  21. package/lib/components/Chat/TranscriptMessage.js +3 -3
  22. package/lib/components/Chat/TranscriptMessage.js.map +1 -1
  23. package/lib/components/Chat/TypeIndicator.js +1 -1
  24. package/lib/components/Chat/TypeIndicator.js.map +1 -1
  25. package/lib/components/Email/Email.js +23 -23
  26. package/lib/components/Email/Email.js.map +1 -1
  27. package/lib/components/Email/Email.types.d.ts +26 -31
  28. package/lib/components/Email/Email.types.d.ts.map +1 -1
  29. package/lib/components/Email/Email.types.js.map +1 -1
  30. package/lib/components/Email/EmailComposer.d.ts +4 -4
  31. package/lib/components/Email/EmailComposer.d.ts.map +1 -1
  32. package/lib/components/Email/EmailComposer.js +132 -120
  33. package/lib/components/Email/EmailComposer.js.map +1 -1
  34. package/lib/components/Email/EmailConversation.js +5 -5
  35. package/lib/components/Email/EmailConversation.js.map +1 -1
  36. package/lib/components/Email/EmailEntity.d.ts.map +1 -1
  37. package/lib/components/Email/EmailEntity.js +10 -2
  38. package/lib/components/Email/EmailEntity.js.map +1 -1
  39. package/lib/components/Email/EmailSelector.d.ts +14 -0
  40. package/lib/components/Email/EmailSelector.d.ts.map +1 -0
  41. package/lib/components/Email/EmailSelector.js +62 -0
  42. package/lib/components/Email/EmailSelector.js.map +1 -0
  43. package/lib/components/Email/EmailShell.js +9 -9
  44. package/lib/components/Email/EmailShell.js.map +1 -1
  45. package/lib/components/Email/EmailSummaryItem.js +4 -4
  46. package/lib/components/Email/EmailSummaryItem.js.map +1 -1
  47. package/lib/components/Email/EmailSummaryList.js +7 -7
  48. package/lib/components/Email/EmailSummaryList.js.map +1 -1
  49. package/lib/components/Feed/Feed.js +5 -5
  50. package/lib/components/Feed/Feed.js.map +1 -1
  51. package/lib/components/Feed/FeedAttachments.js +4 -4
  52. package/lib/components/Feed/FeedAttachments.js.map +1 -1
  53. package/lib/components/Feed/FeedContent.js +1 -1
  54. package/lib/components/Feed/FeedContent.js.map +1 -1
  55. package/lib/components/Feed/FeedModalList.js +1 -1
  56. package/lib/components/Feed/FeedModalList.js.map +1 -1
  57. package/lib/components/Feed/FeedNewPost.js +4 -4
  58. package/lib/components/Feed/FeedNewPost.js.map +1 -1
  59. package/lib/components/Feed/FeedNewPostTypeMenu.js +9 -9
  60. package/lib/components/Feed/FeedNewPostTypeMenu.js.map +1 -1
  61. package/lib/components/Feed/FeedPost.d.ts.map +1 -1
  62. package/lib/components/Feed/FeedPost.js +26 -16
  63. package/lib/components/Feed/FeedPost.js.map +1 -1
  64. package/lib/components/Feed/FeedReply.d.ts.map +1 -1
  65. package/lib/components/Feed/FeedReply.js +18 -12
  66. package/lib/components/Feed/FeedReply.js.map +1 -1
  67. package/lib/components/Feed/FeedReplyInput.js +5 -5
  68. package/lib/components/Feed/FeedReplyInput.js.map +1 -1
  69. package/lib/components/Feed/FeedRichText.js +2 -2
  70. package/lib/components/Feed/FeedRichText.js.map +1 -1
  71. package/lib/components/HashtagButton/HashtagButton.js +1 -1
  72. package/lib/components/HashtagButton/HashtagButton.js.map +1 -1
  73. package/lib/components/MentionButton/MentionButton.d.ts.map +1 -1
  74. package/lib/components/MentionButton/MentionButton.js +1 -1
  75. package/lib/components/MentionButton/MentionButton.js.map +1 -1
  76. package/package.json +5 -5
  77. package/lib/components/Feed/utils.d.ts +0 -3
  78. package/lib/components/Feed/utils.d.ts.map +0 -1
  79. package/lib/components/Feed/utils.js +0 -19
  80. package/lib/components/Feed/utils.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { MouseEventHandler, ReactNode, Ref } from 'react';
2
- import { BaseProps, AvatarProps, SentimentProps, FileDisplayProps, FileUploadItemProps, ForwardProps, OmitStrict, MenuProps, MenuItemProps } from '@pega/cosmos-react-core';
3
- import { SelectProps } from '@pega/cosmos-react-core/lib/components/Select/Select';
4
- import { RichTextEditorProps } from '@pega/cosmos-react-rte';
2
+ import { BaseProps, AvatarProps, SentimentProps, FileDisplayProps, FileUploadItemProps, OmitStrict, MenuProps, MenuItemProps, TooltipProps, NoChildrenProp } from '@pega/cosmos-react-core';
5
3
  export interface Suggestion {
6
4
  /** Suggestion title */
7
5
  title: string;
6
+ /** Suggestion value */
7
+ content: string;
8
8
  /** Suggestion id */
9
9
  id: string;
10
10
  }
@@ -23,7 +23,7 @@ export interface EntityHighlightMapping {
23
23
  type: string;
24
24
  name: string;
25
25
  variant: number;
26
- description: string;
26
+ description: TooltipProps['children'];
27
27
  }
28
28
  export interface EmailProps extends BaseProps {
29
29
  /** Ref to the element */
@@ -91,31 +91,34 @@ export interface EmailConversationProps extends BaseProps {
91
91
  /** Callback when email conversation is expanded */
92
92
  onExpand?: () => void;
93
93
  }
94
- export interface EmailComposerProps extends Pick<EmailProps, 'attachments' | 'suggestions' | 'onSuggestionClick'>, BaseProps {
95
- /** Header of the email */
96
- header?: string;
97
- /** Object containing full list of email participants */
98
- participants: EmailUser[];
99
- /** Object containing the props to render the from drop down */
100
- from: SelectProps;
94
+ export interface EmailComposerData extends Pick<EmailComposerProps, 'cc' | 'bcc' | 'subject' | 'bodyContent' | 'attachments'> {
101
95
  /** Array to hold the initial participants that should be default initialized in To address. */
102
- to?: EmailUser['emailAddress'][];
96
+ to: EmailUser['emailAddress'][];
97
+ }
98
+ export declare type EmailResponseType = 'reply' | 'replyAll' | 'forward';
99
+ export interface EmailDirectRecipients {
100
+ /** To address/addresses in case of reply response type on email. */
101
+ reply: EmailUser['emailAddress'][];
102
+ /** To address/addresses in case of replyAll response type on email. */
103
+ replyAll: EmailUser['emailAddress'][];
104
+ /** To address/addresses in case of forward response type on email. */
105
+ forward?: EmailUser['emailAddress'][];
106
+ }
107
+ export interface EmailComposerProps extends Pick<EmailProps, 'attachments' | 'suggestions' | 'onSuggestionClick'>, BaseProps, NoChildrenProp {
108
+ /** Object containing full list of email participants. */
109
+ participants: EmailUser[];
110
+ /** Object to hold initial to address/addresses based on different action types. */
111
+ to?: EmailDirectRecipients;
103
112
  /** Array to hold the initial participants that should be default initialized in Cc address. */
104
113
  cc?: EmailUser['emailAddress'][];
105
114
  /** Array to hold the initial participants that should be default initialized in Bcc address. */
106
115
  bcc?: EmailUser['emailAddress'][];
107
116
  /** Object containing the props to render the subject input */
108
117
  subject: string;
109
- /** Region to hold primary email composer fields */
110
- primaryMoreFields?: ReactNode;
111
- /** Region to hold secondary email composer fields */
112
- secondaryMoreFields?: ReactNode;
113
- /** Object containing the props to render the email body rte */
114
- body: RichTextEditorProps & ForwardProps;
118
+ /** Body content of the email */
119
+ bodyContent: string;
115
120
  /** Callback when email needs to be sent */
116
- onSend: () => void;
117
- /** Callback when attachment icon is clicked */
118
- onAddAttachment?: () => void;
121
+ onSend: (data: EmailComposerData) => void;
119
122
  /** List of attachments */
120
123
  attachments?: FileUploadItemProps[];
121
124
  /** Max number of attachments to be allowed in Email composer.
@@ -127,20 +130,12 @@ export interface EmailComposerProps extends Pick<EmailProps, 'attachments' | 'su
127
130
  footerMoreActions?: ReactNode;
128
131
  /** Templates for drafting email */
129
132
  templates?: Record<string, string>;
130
- /** Callback when replying to only from address */
131
- onReply?: () => void;
132
- /** Callback when replying to all participants */
133
- onReplyAll?: () => void;
134
133
  /** Callback when cancel composing */
135
134
  onCancel: () => void;
136
- /** Whether email composer opened after clicking reply or reply all */
137
- isReplyAll: boolean;
138
135
  /** Ref to the element */
139
136
  ref?: Ref<HTMLDivElement>;
140
- }
141
- export interface EmailComposerParticipantsProps {
142
- key: string;
143
- value: EmailUser;
137
+ /** Email action types */
138
+ responseType?: EmailResponseType;
144
139
  }
145
140
  export interface EmailShellProps extends BaseProps {
146
141
  /** ref to the element */
@@ -1 +1 @@
1
- {"version":3,"file":"Email.types.d.ts","sourceRoot":"","sources":["../../../src/components/Email/Email.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Email.types.d.ts","sourceRoot":"","sources":["../../../src/components/Email/Email.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Email.types.js","sourceRoot":"","sources":["../../../src/components/Email/Email.types.ts"],"names":[],"mappings":"","sourcesContent":["import { MouseEventHandler, ReactNode, Ref } from 'react';\n\nimport {\n BaseProps,\n AvatarProps,\n SentimentProps,\n FileDisplayProps,\n FileUploadItemProps,\n ForwardProps,\n OmitStrict,\n MenuProps,\n MenuItemProps\n} from '@pega/cosmos-react-core';\nimport { SelectProps } from '@pega/cosmos-react-core/lib/components/Select/Select';\nimport { RichTextEditorProps } from '@pega/cosmos-react-rte';\n\nexport interface Suggestion {\n /** Suggestion title */\n title: string;\n /** Suggestion id */\n id: string;\n}\n\nexport interface EmailUser {\n /** Short name of the User */\n shortName: string;\n /** Full name of the User */\n fullName: string;\n /** Email of the User */\n emailAddress: string;\n /** Avatar props of the User */\n avatarProps?: Partial<AvatarProps>;\n}\n\nexport interface EntityHighlightMapping {\n value: string;\n type: string;\n name: string;\n variant: number;\n description: string;\n}\n\nexport interface EmailProps extends BaseProps {\n /** Ref to the element */\n ref?: Ref<HTMLDivElement>;\n /** Unique ID for this email record */\n id: string;\n /** Timestamp of this email as ISO8601 string, timestamp or native Date object. */\n timeStamp: Date | number | string;\n /** From email */\n from: EmailUser;\n /** To email */\n to: EmailUser[];\n /** Carbon copy of email users list */\n cc?: EmailUser[];\n /** Blind carbon copy of email users list */\n bcc?: EmailUser[];\n /** Sentiment */\n sentiment?: SentimentProps;\n /** Subject of the email */\n subject?: string;\n /** Body */\n body?: ReactNode | string;\n /** Entity highlight mapping */\n entityHighlightMapping?: EntityHighlightMapping[];\n /** onReply callback */\n onReply: (id: EmailProps['id']) => void;\n /** onForward Callback */\n onForward: (id: EmailProps['id']) => void;\n /** onReply callback */\n onReplyAll?: (id: EmailProps['id']) => void;\n /** List of suggestions */\n suggestions?: Suggestion[];\n /** Callback that triggers on click of tag */\n onSuggestionClick?: (id: EmailProps['id'], suggestionId: Suggestion['id']) => void;\n /** Actions region */\n actions?: ReactNode;\n /** Flag that indicates if email is unread\n * @default false\n */\n unRead?: boolean;\n /** Attachments list */\n attachments?: FileDisplayProps[];\n}\n\nexport interface EmailConversationProps extends BaseProps {\n /** ref to the element */\n ref?: Ref<HTMLLIElement>;\n /** Unique ID for this email conversation record */\n id: string;\n /** List of mails */\n emails: EmailProps[];\n /** Sender(s) of this email conversation */\n from: EmailUser;\n /** Recipient(s) of this email conversation */\n to: EmailUser[];\n /** Count of unread emails */\n unReadEmailCount?: number;\n /** Timestamp of this conversation as ISO8601 string, timestamp or native Date object. */\n timeStamp: Date | string | number;\n /** Flag that indicates if email conversation is expanded */\n isCollapsed?: boolean;\n /** Flag to set if conversation is spun off from forwarded email */\n isForwarded?: boolean;\n /** Callback when email conversation is collapsed */\n onCollapse?: () => void;\n /** Callback when email conversation is expanded */\n onExpand?: () => void;\n}\n\nexport interface EmailComposerProps\n extends Pick<EmailProps, 'attachments' | 'suggestions' | 'onSuggestionClick'>,\n BaseProps {\n /** Header of the email */\n header?: string;\n /** Object containing full list of email participants */\n participants: EmailUser[];\n /** Object containing the props to render the from drop down */\n from: SelectProps;\n /** Array to hold the initial participants that should be default initialized in To address. */\n to?: EmailUser['emailAddress'][];\n /** Array to hold the initial participants that should be default initialized in Cc address. */\n cc?: EmailUser['emailAddress'][];\n /** Array to hold the initial participants that should be default initialized in Bcc address. */\n bcc?: EmailUser['emailAddress'][];\n /** Object containing the props to render the subject input */\n subject: string;\n /** Region to hold primary email composer fields */\n primaryMoreFields?: ReactNode;\n /** Region to hold secondary email composer fields */\n secondaryMoreFields?: ReactNode;\n /** Object containing the props to render the email body rte */\n body: RichTextEditorProps & ForwardProps;\n /** Callback when email needs to be sent */\n onSend: () => void;\n /** Callback when attachment icon is clicked */\n onAddAttachment?: () => void;\n /** List of attachments */\n attachments?: FileUploadItemProps[];\n /** Max number of attachments to be allowed in Email composer.\n * If zero is passed, add attachments icon will be hidden. same rule applies if prop is not passed.\n * If attachments added are >= maxAttachments, add attachments icon will be disabled.\n */\n maxAttachments?: number;\n /** Region to show more actions in footer */\n footerMoreActions?: ReactNode;\n /** Templates for drafting email */\n templates?: Record<string, string>;\n /** Callback when replying to only from address */\n onReply?: () => void;\n /** Callback when replying to all participants */\n onReplyAll?: () => void;\n /** Callback when cancel composing */\n onCancel: () => void;\n /** Whether email composer opened after clicking reply or reply all */\n isReplyAll: boolean;\n /** Ref to the element */\n ref?: Ref<HTMLDivElement>;\n}\n\nexport interface EmailComposerParticipantsProps {\n key: string;\n value: EmailUser;\n}\n\nexport interface EmailShellProps extends BaseProps {\n /** ref to the element */\n ref?: Ref<HTMLDivElement>;\n /** Region for header */\n headerProps?: {\n /** Region for actions */\n actions?: ReactNode;\n /** Subject of the email conversations list */\n subject?: string;\n };\n /** Email conversations */\n conversations?: EmailConversationProps[];\n /** Shows only one conversation at a time */\n autoCollapse?: boolean;\n}\n\nexport interface EmailSummaryItemProps extends BaseProps {\n /** Id of each summary item */\n id: string;\n /** List of from participant names of the conversations */\n activeParticipants: EmailUser[];\n /** Email body of last email in the email */\n message: string;\n /** Timestamp of the latest email */\n timeStamp: Date | string | number;\n /** Top topic of an email */\n topic: string;\n /** Sentiment */\n sentiment?: SentimentProps;\n /** Urgency of an email */\n urgency?: number;\n /** Total number of unread emails in the email */\n unreadEmailCount?: number;\n /** Is the email currently active */\n active?: boolean;\n /** On click of email item */\n onClick: MouseEventHandler;\n /** ref to the element */\n ref?: Ref<HTMLButtonElement>;\n}\n\nexport interface Filter {\n /** Sets DOM id for the control and associates label element via 'for' attribute. */\n id: string;\n /** Pass a string or a fragment with an Icon and string for the filter label. */\n label: ReactNode;\n /**\n * Disables the filter.\n * @default false\n */\n disabled?: boolean;\n /**\n * Sets on prop via onFilterChange.\n * @default false\n */\n on?: boolean;\n}\n\nexport interface EmailSummaryListProps extends BaseProps {\n /** List of email categories */\n categories: MenuProps['items'];\n /** Handles category change */\n onCategoryClick?: MenuItemProps['onClick'];\n /** List of EmailItems items */\n items: OmitStrict<EmailSummaryItemProps, 'onClick' | 'active'>[];\n /** Total number of unread email count */\n unreadEmailCount?: number;\n /** A set of filters to apply to the email inbox. */\n filters?: Filter[];\n /** A callback that runs when a filter is clicked. */\n onFilterChange?: (filterId: Filter['id'], on: boolean) => void;\n /** onClick of list item */\n onItemClick: (id: EmailSummaryItemProps['id']) => void;\n /** ref to the element */\n ref?: Ref<HTMLDivElement>;\n}\n\nexport interface EmailEntityProps extends BaseProps {\n entity: EntityHighlightMapping;\n ref?: Ref<HTMLElement>;\n}\n"]}
1
+ {"version":3,"file":"Email.types.js","sourceRoot":"","sources":["../../../src/components/Email/Email.types.ts"],"names":[],"mappings":"","sourcesContent":["import { MouseEventHandler, ReactNode, Ref } from 'react';\n\nimport {\n BaseProps,\n AvatarProps,\n SentimentProps,\n FileDisplayProps,\n FileUploadItemProps,\n OmitStrict,\n MenuProps,\n MenuItemProps,\n TooltipProps,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\n\nexport interface Suggestion {\n /** Suggestion title */\n title: string;\n /** Suggestion value */\n content: string;\n /** Suggestion id */\n id: string;\n}\n\nexport interface EmailUser {\n /** Short name of the User */\n shortName: string;\n /** Full name of the User */\n fullName: string;\n /** Email of the User */\n emailAddress: string;\n /** Avatar props of the User */\n avatarProps?: Partial<AvatarProps>;\n}\n\nexport interface EntityHighlightMapping {\n value: string;\n type: string;\n name: string;\n variant: number;\n description: TooltipProps['children'];\n}\n\nexport interface EmailProps extends BaseProps {\n /** Ref to the element */\n ref?: Ref<HTMLDivElement>;\n /** Unique ID for this email record */\n id: string;\n /** Timestamp of this email as ISO8601 string, timestamp or native Date object. */\n timeStamp: Date | number | string;\n /** From email */\n from: EmailUser;\n /** To email */\n to: EmailUser[];\n /** Carbon copy of email users list */\n cc?: EmailUser[];\n /** Blind carbon copy of email users list */\n bcc?: EmailUser[];\n /** Sentiment */\n sentiment?: SentimentProps;\n /** Subject of the email */\n subject?: string;\n /** Body */\n body?: ReactNode | string;\n /** Entity highlight mapping */\n entityHighlightMapping?: EntityHighlightMapping[];\n /** onReply callback */\n onReply: (id: EmailProps['id']) => void;\n /** onForward Callback */\n onForward: (id: EmailProps['id']) => void;\n /** onReply callback */\n onReplyAll?: (id: EmailProps['id']) => void;\n /** List of suggestions */\n suggestions?: Suggestion[];\n /** Callback that triggers on click of tag */\n onSuggestionClick?: (id: EmailProps['id'], suggestionId: Suggestion['id']) => void;\n /** Actions region */\n actions?: ReactNode;\n /** Flag that indicates if email is unread\n * @default false\n */\n unRead?: boolean;\n /** Attachments list */\n attachments?: FileDisplayProps[];\n}\n\nexport interface EmailConversationProps extends BaseProps {\n /** ref to the element */\n ref?: Ref<HTMLLIElement>;\n /** Unique ID for this email conversation record */\n id: string;\n /** List of mails */\n emails: EmailProps[];\n /** Sender(s) of this email conversation */\n from: EmailUser;\n /** Recipient(s) of this email conversation */\n to: EmailUser[];\n /** Count of unread emails */\n unReadEmailCount?: number;\n /** Timestamp of this conversation as ISO8601 string, timestamp or native Date object. */\n timeStamp: Date | string | number;\n /** Flag that indicates if email conversation is expanded */\n isCollapsed?: boolean;\n /** Flag to set if conversation is spun off from forwarded email */\n isForwarded?: boolean;\n /** Callback when email conversation is collapsed */\n onCollapse?: () => void;\n /** Callback when email conversation is expanded */\n onExpand?: () => void;\n}\n\nexport interface EmailComposerData\n extends Pick<EmailComposerProps, 'cc' | 'bcc' | 'subject' | 'bodyContent' | 'attachments'> {\n /** Array to hold the initial participants that should be default initialized in To address. */\n to: EmailUser['emailAddress'][];\n}\n\nexport type EmailResponseType = 'reply' | 'replyAll' | 'forward';\n\nexport interface EmailDirectRecipients {\n /** To address/addresses in case of reply response type on email. */\n reply: EmailUser['emailAddress'][];\n /** To address/addresses in case of replyAll response type on email. */\n replyAll: EmailUser['emailAddress'][];\n /** To address/addresses in case of forward response type on email. */\n forward?: EmailUser['emailAddress'][];\n}\n\nexport interface EmailComposerProps\n extends Pick<EmailProps, 'attachments' | 'suggestions' | 'onSuggestionClick'>,\n BaseProps,\n NoChildrenProp {\n /** Object containing full list of email participants. */\n participants: EmailUser[];\n /** Object to hold initial to address/addresses based on different action types. */\n to?: EmailDirectRecipients;\n /** Array to hold the initial participants that should be default initialized in Cc address. */\n cc?: EmailUser['emailAddress'][];\n /** Array to hold the initial participants that should be default initialized in Bcc address. */\n bcc?: EmailUser['emailAddress'][];\n /** Object containing the props to render the subject input */\n subject: string;\n /** Body content of the email */\n bodyContent: string;\n /** Callback when email needs to be sent */\n onSend: (data: EmailComposerData) => void;\n /** List of attachments */\n attachments?: FileUploadItemProps[];\n /** Max number of attachments to be allowed in Email composer.\n * If zero is passed, add attachments icon will be hidden. same rule applies if prop is not passed.\n * If attachments added are >= maxAttachments, add attachments icon will be disabled.\n */\n maxAttachments?: number;\n /** Region to show more actions in footer */\n footerMoreActions?: ReactNode;\n /** Templates for drafting email */\n templates?: Record<string, string>;\n /** Callback when cancel composing */\n onCancel: () => void;\n /** Ref to the element */\n ref?: Ref<HTMLDivElement>;\n /** Email action types */\n responseType?: EmailResponseType;\n}\nexport interface EmailShellProps extends BaseProps {\n /** ref to the element */\n ref?: Ref<HTMLDivElement>;\n /** Region for header */\n headerProps?: {\n /** Region for actions */\n actions?: ReactNode;\n /** Subject of the email conversations list */\n subject?: string;\n };\n /** Email conversations */\n conversations?: EmailConversationProps[];\n /** Shows only one conversation at a time */\n autoCollapse?: boolean;\n}\n\nexport interface EmailSummaryItemProps extends BaseProps {\n /** Id of each summary item */\n id: string;\n /** List of from participant names of the conversations */\n activeParticipants: EmailUser[];\n /** Email body of last email in the email */\n message: string;\n /** Timestamp of the latest email */\n timeStamp: Date | string | number;\n /** Top topic of an email */\n topic: string;\n /** Sentiment */\n sentiment?: SentimentProps;\n /** Urgency of an email */\n urgency?: number;\n /** Total number of unread emails in the email */\n unreadEmailCount?: number;\n /** Is the email currently active */\n active?: boolean;\n /** On click of email item */\n onClick: MouseEventHandler;\n /** ref to the element */\n ref?: Ref<HTMLButtonElement>;\n}\n\nexport interface Filter {\n /** Sets DOM id for the control and associates label element via 'for' attribute. */\n id: string;\n /** Pass a string or a fragment with an Icon and string for the filter label. */\n label: ReactNode;\n /**\n * Disables the filter.\n * @default false\n */\n disabled?: boolean;\n /**\n * Sets on prop via onFilterChange.\n * @default false\n */\n on?: boolean;\n}\n\nexport interface EmailSummaryListProps extends BaseProps {\n /** List of email categories */\n categories: MenuProps['items'];\n /** Handles category change */\n onCategoryClick?: MenuItemProps['onClick'];\n /** List of EmailItems items */\n items: OmitStrict<EmailSummaryItemProps, 'onClick' | 'active'>[];\n /** Total number of unread email count */\n unreadEmailCount?: number;\n /** A set of filters to apply to the email inbox. */\n filters?: Filter[];\n /** A callback that runs when a filter is clicked. */\n onFilterChange?: (filterId: Filter['id'], on: boolean) => void;\n /** onClick of list item */\n onItemClick: (id: EmailSummaryItemProps['id']) => void;\n /** ref to the element */\n ref?: Ref<HTMLDivElement>;\n}\n\nexport interface EmailEntityProps extends BaseProps {\n entity: EntityHighlightMapping;\n ref?: Ref<HTMLElement>;\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { FunctionComponent } from 'react';
2
- import { Icon, ForwardProps } from '@pega/cosmos-react-core';
2
+ import { Icon } from '@pega/cosmos-react-core';
3
3
  import { EmailComposerProps } from './Email.types';
4
4
  export declare const StyledEmailComposer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
- export declare const StyledReplyIcon: typeof Icon;
6
- export declare const StyledCCButton: import("styled-components").StyledComponent<FunctionComponent<import("@pega/cosmos-react-core").ButtonProps & ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
7
- declare const EmailComposer: FunctionComponent<EmailComposerProps & ForwardProps>;
5
+ export declare const StyledResponseTypeIcon: typeof Icon;
6
+ export declare const StyledToggleButton: import("styled-components").StyledComponent<FunctionComponent<import("@pega/cosmos-react-core").ButtonProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
7
+ declare const EmailComposer: FunctionComponent<EmailComposerProps>;
8
8
  export default EmailComposer;
9
9
  //# sourceMappingURL=EmailComposer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailComposer.d.ts","sourceRoot":"","sources":["../../../src/components/Email/EmailComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAKlB,MAAM,OAAO,CAAC;AAIf,OAAO,EAIL,IAAI,EAKJ,YAAY,EAMb,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,kBAAkB,EAAa,MAAM,eAAe,CAAC;AAiG9D,eAAO,MAAM,mBAAmB,yGAAe,CAAC;AAEhD,eAAO,MAAM,eAAe,EAAE,OAAO,IAInC,CAAC;AAIH,eAAO,MAAM,cAAc,mLAKzB,CAAC;AAIH,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAwLvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"EmailComposer.d.ts","sourceRoot":"","sources":["../../../src/components/Email/EmailComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EASlB,MAAM,OAAO,CAAC;AAGf,OAAO,EAGL,IAAI,EAUL,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,kBAAkB,EAAa,MAAM,eAAe,CAAC;AAK9D,eAAO,MAAM,mBAAmB,yGAAe,CAAC;AAEhD,eAAO,MAAM,sBAAsB,EAAE,OAAO,IAI1C,CAAC;AAIH,eAAO,MAAM,kBAAkB,qNAK7B,CAAC;AAmBH,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,CAmSxD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,151 +1,163 @@
1
1
  import { createElement as _createElement } from "react";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { forwardRef, useState, useMemo } from 'react';
3
+ import { forwardRef, useState, useMemo, useRef, useCallback, useEffect } from 'react';
4
4
  import styled, { css } from 'styled-components';
5
- import Select from '@pega/cosmos-react-core/lib/components/Select/Select';
6
- import { Button, ComboBox, Flex, Icon, registerIcon, Text, useI18n, Option, defaultThemeProp, FileUploadItem, MenuButton, useConsolidatedRef } from '@pega/cosmos-react-core';
7
- import Input from '@pega/cosmos-react-core/lib/components/Input/Input';
5
+ import { Button, Flex, Icon, registerIcon, useI18n, Option, defaultThemeProp, FileUploadItem, MenuButton, Select, Input } from '@pega/cosmos-react-core';
8
6
  import { RichTextEditor } from '@pega/cosmos-react-rte';
9
7
  import * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';
10
- registerIcon(paperClipIcon);
11
- const useEmailDataProvider = (participants, defaultSelected = []) => {
12
- const escapeChars = /[.*+\-?^${}()|[\]\\]/g;
13
- const getFilterRegex = (inputValue) => {
14
- return new RegExp(`^${inputValue.replace(escapeChars, '\\$&')}`, 'i');
15
- };
16
- const [emailUsers, setEmailUsers] = useState(participants.map((participant) => {
17
- return {
18
- ...participant,
19
- selected: defaultSelected.includes(participant.emailAddress)
20
- };
21
- }));
22
- const [emailFilterValue, setEmailFilterValue] = useState('');
23
- const filterRegex = useMemo(() => getFilterRegex(emailFilterValue), [emailFilterValue]);
24
- const emailsToRender = useMemo(() => {
25
- return (emailFilterValue
26
- ? emailUsers.filter(({ emailAddress, fullName, shortName }) => {
27
- return (filterRegex.test(emailAddress) ||
28
- filterRegex.test(fullName) ||
29
- filterRegex.test(shortName));
30
- })
31
- : emailUsers).map(({ emailAddress, fullName, selected }) => {
32
- return {
33
- id: emailAddress,
34
- primary: fullName,
35
- secondary: [emailAddress],
36
- selected: !!selected
37
- };
38
- });
39
- }, [emailUsers, filterRegex]);
40
- const selectedEmailUsers = useMemo(() => {
41
- return emailUsers
42
- .filter(emailAddress => emailAddress.selected)
43
- .map(({ emailAddress }) => {
44
- return {
45
- text: emailAddress,
46
- id: emailAddress
47
- };
48
- });
49
- }, [emailUsers]);
50
- const toggleSelectedEmailUser = (id) => {
51
- setEmailUsers(prevEmailUsers => {
52
- return prevEmailUsers.map(emailUser => {
53
- if (emailUser.emailAddress === id) {
54
- return {
55
- ...emailUser,
56
- selected: !emailUser.selected
57
- };
58
- }
59
- return emailUser;
60
- });
61
- });
62
- };
63
- return {
64
- value: emailFilterValue,
65
- onChange: (e) => {
66
- setEmailFilterValue(e.target.value);
67
- },
68
- onBlur: () => {
69
- setEmailFilterValue('');
70
- },
71
- menu: {
72
- items: emailsToRender,
73
- accent: filterRegex,
74
- onItemClick: toggleSelectedEmailUser
75
- },
76
- selected: {
77
- items: selectedEmailUsers,
78
- onRemove: toggleSelectedEmailUser
79
- }
80
- };
81
- };
8
+ import * as replyAllIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/reply-all.icon';
9
+ import * as replyIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/reply.icon';
10
+ import * as forwardIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/forward.icon';
11
+ import EmailSelector from './EmailSelector';
12
+ registerIcon(paperClipIcon, replyAllIcon, replyIcon, forwardIcon);
82
13
  export const StyledEmailComposer = styled.div ``;
83
- export const StyledReplyIcon = styled(Icon)(({ theme }) => {
14
+ export const StyledResponseTypeIcon = styled(Icon)(({ theme }) => {
84
15
  return css `
85
16
  color: ${theme.base.palette.interactive};
86
17
  `;
87
18
  });
88
- StyledReplyIcon.defaultProps = defaultThemeProp;
89
- export const StyledCCButton = styled(Button)(({ theme }) => {
19
+ StyledResponseTypeIcon.defaultProps = defaultThemeProp;
20
+ export const StyledToggleButton = styled(Button)(({ theme }) => {
90
21
  return css `
91
22
  margin-block-start: calc(2 * ${theme.base.spacing});
92
23
  color: ${theme.base.palette.interactive};
93
24
  `;
94
25
  });
95
- StyledCCButton.defaultProps = defaultThemeProp;
96
- const EmailComposer = forwardRef((props, ref) => {
97
- const { onReply, onReplyAll, isReplyAll, participants, from, to, cc, bcc, body, primaryMoreFields, secondaryMoreFields, maxAttachments = 0, attachments = [], onAddAttachment, onCancel, onSend, footerMoreActions, templates, ...restProps } = props;
98
- const [subject, setSubject] = useState(props.subject);
99
- const [showCC, setShowCC] = useState(false);
100
- const [showBCC, setShowBCC] = useState(false);
101
- const [selectedTemplate, setSelectedTemplate] = useState('');
102
- const toEmailAddresses = useEmailDataProvider(participants, to);
103
- const ccEmailAddresses = useEmailDataProvider(participants, cc);
104
- const bccEmailAddresses = useEmailDataProvider(participants, bcc);
105
- const children = templates && Object.keys(templates).map(option => _jsx(Option, { children: option }, option));
106
- const header = subject || props.header;
107
- const onSubjectChange = (e) => {
108
- setSubject(e.target.value);
26
+ StyledToggleButton.defaultProps = defaultThemeProp;
27
+ const responseTypeIcons = {
28
+ reply: 'reply',
29
+ replyAll: 'reply-all',
30
+ forward: 'forward'
31
+ };
32
+ const rteToolbar = [
33
+ 'inline-styling',
34
+ 'headers',
35
+ 'lists',
36
+ 'images',
37
+ 'cut-copy-paste',
38
+ 'indentation'
39
+ ];
40
+ const EmailComposer = forwardRef(({ participants, cc, bcc, bodyContent, maxAttachments = 0, onCancel, onSend, to, footerMoreActions, templates, ...restProps }, ref) => {
41
+ const t = useI18n();
42
+ const [responseType, setResponseType] = useState(restProps.responseType);
43
+ const [showCC, setShowCC] = useState(restProps.responseType !== 'reply' && !!cc && cc.length > 0);
44
+ const [showBCC, setShowBCC] = useState(restProps.responseType !== 'reply' && !!bcc && bcc.length > 0);
45
+ const [subject, setSubject] = useState(restProps.subject);
46
+ const [autoReplyTemplate, setAutoReplyTemplate] = useState('');
47
+ const [attachments, setAttachments] = useState(restProps.attachments || []);
48
+ const rteEditorRef = useRef(null);
49
+ const fileUploadInputRef = useRef(null);
50
+ // inserts selected template in RTE
51
+ useEffect(() => {
52
+ if (templates?.[autoReplyTemplate]) {
53
+ rteEditorRef?.current?.clear();
54
+ setTimeout(() => {
55
+ rteEditorRef?.current?.insertHtml(templates?.[autoReplyTemplate], false);
56
+ }, 0);
57
+ }
58
+ }, [autoReplyTemplate]);
59
+ // resets To | CC | BCC combobox selection and toggles fields on responseType change reply | replyAll | forward
60
+ useEffect(() => {
61
+ setShowCC(responseType === 'replyAll' ? !!cc && cc.length > 0 : false);
62
+ setShowBCC(responseType === 'replyAll' && !!bcc && bcc?.length > 0 ? !!bcc : false);
63
+ }, [responseType]);
64
+ const templateOptions = useMemo(() => templates && Object.keys(templates).map(option => _jsx(Option, { children: option }, option)), [templates]);
65
+ const responseTypeMenuData = useMemo(() => {
66
+ const menuItems = [
67
+ {
68
+ id: 'reply',
69
+ primary: t('reply'),
70
+ visual: _jsx(StyledResponseTypeIcon, { name: responseTypeIcons.reply }, void 0),
71
+ selected: responseType === 'reply',
72
+ onClick: () => {
73
+ setResponseType('reply');
74
+ }
75
+ },
76
+ {
77
+ id: 'replyAll',
78
+ primary: t('reply_all'),
79
+ visual: _jsx(StyledResponseTypeIcon, { name: responseTypeIcons.replyAll }, void 0),
80
+ selected: responseType === 'replyAll',
81
+ onClick: () => {
82
+ setResponseType('replyAll');
83
+ }
84
+ }
85
+ ];
86
+ return {
87
+ menuItems,
88
+ selectedResponseType: menuItems.find(item => item.selected)?.primary || menuItems[0].primary,
89
+ selectedResponseTypeIcon: (responseType && responseTypeIcons[responseType]) || responseTypeIcons.reply
90
+ };
91
+ }, [responseType]);
92
+ const onImageAdded = (image, id) => {
93
+ const src = URL.createObjectURL(image);
94
+ rteEditorRef.current?.appendImage({ src, alt: image.name }, id);
109
95
  };
110
- const rteRef = useConsolidatedRef(body.ref);
111
- const onTemplateChange = (e) => {
112
- setSelectedTemplate(e.target.value);
113
- if (templates?.[e.target.value]) {
114
- rteRef.current?.insertText(templates[e.target.value]);
96
+ const onSubjectChange = useCallback((e) => {
97
+ setSubject(e.target.value);
98
+ }, []);
99
+ const onTemplateChange = useCallback((e) => {
100
+ setAutoReplyTemplate(e.target.value);
101
+ }, []);
102
+ const onAttachmentDelete = useCallback((name) => {
103
+ setAttachments(prevAttachments => prevAttachments.filter(item => item.name !== name));
104
+ }, []);
105
+ const onFileChange = useCallback((e) => {
106
+ if (e.target.files) {
107
+ setAttachments(prevAttachments => [
108
+ ...prevAttachments,
109
+ ...Array.from(e.target.files).map(file => ({
110
+ name: file.name,
111
+ file
112
+ }))
113
+ ]);
114
+ }
115
+ }, []);
116
+ const [toAddresses, setToAddresses] = useState(to?.[responseType] || []);
117
+ const [ccAddresses, setCcAddresses] = useState(cc);
118
+ const [bccAddresses, setBccAddresses] = useState(bcc);
119
+ const selectedItems = (selections, label) => {
120
+ if (label === 'To') {
121
+ setToAddresses(selections);
122
+ }
123
+ if (label === 'Cc') {
124
+ setCcAddresses(selections);
125
+ }
126
+ if (label === 'Bcc') {
127
+ setBccAddresses(selections);
115
128
  }
116
129
  };
117
- const t = useI18n();
118
- return (_jsxs(Flex, Object.assign({ as: StyledEmailComposer, ref: ref }, restProps, { container: {
130
+ const handleSend = useCallback(() => {
131
+ onSend({
132
+ to: toAddresses,
133
+ cc: showCC ? ccAddresses : undefined,
134
+ bcc: showBCC ? bccAddresses : undefined,
135
+ subject,
136
+ bodyContent: rteEditorRef.current?.getHtml() || '',
137
+ attachments
138
+ });
139
+ }, [toAddresses, ccAddresses, bccAddresses, subject, attachments, showCC, showBCC]);
140
+ return (_jsxs(Flex, { as: StyledEmailComposer, ref: ref, ...restProps, container: {
119
141
  gap: 2,
120
142
  direction: 'column'
121
- } }, { children: [_jsx(Text, Object.assign({ variant: 'h4', "aria-label": `${t('email_header')} ${header}` }, { children: header }), void 0), _jsx("div", { children: _jsx(MenuButton, { text: isReplyAll ? t('reply_all') : t('reply'), variant: 'link', icon: isReplyAll ? 'reply-all' : 'reply', menu: {
122
- items: [
123
- {
124
- primary: t('reply_all'),
125
- id: 'reply all',
126
- visual: _jsx(StyledReplyIcon, { name: 'reply-all' }, void 0),
127
- onClick: onReplyAll
128
- },
129
- {
130
- primary: t('reply'),
131
- id: 'reply',
132
- visual: _jsx(StyledReplyIcon, { name: 'reply' }, void 0),
133
- onClick: onReply
134
- }
135
- ]
136
- } }, void 0) }, void 0), _jsxs(Flex, Object.assign({ container: {
143
+ }, children: [_jsx("div", { children: responseType !== 'forward' && (_jsx(MenuButton, { text: responseTypeMenuData.selectedResponseType, variant: 'link', icon: responseTypeMenuData.selectedResponseTypeIcon, menu: {
144
+ mode: 'single-select',
145
+ items: responseTypeMenuData.menuItems
146
+ } }, void 0)) }, void 0), _jsxs(Flex, { container: {
137
147
  alignItems: 'start',
138
148
  gap: 0.5
139
- } }, { children: [_jsx(Flex, Object.assign({ container: {
149
+ }, children: [_jsx(Flex, { container: {
140
150
  gap: 1,
141
151
  direction: 'column'
142
152
  }, item: {
143
153
  grow: 1
144
- } }, { children: to && _jsx(ComboBox, Object.assign({}, toEmailAddresses, { label: t('to'), mode: 'multi-select', required: true }), void 0) }), void 0), !showCC && (_jsx("span", { children: _jsx(StyledCCButton, Object.assign({ variant: 'simple', onClick: () => setShowCC(true), icon: true }, { children: t('cc') }), void 0) }, void 0)), !showBCC && (_jsx("span", { children: _jsx(StyledCCButton, Object.assign({ variant: 'simple', onClick: () => setShowBCC(true), icon: true }, { children: t('bcc') }), void 0) }, void 0))] }), void 0), showCC && _jsx(ComboBox, Object.assign({}, ccEmailAddresses, { label: t('cc'), mode: 'multi-select' }), void 0), showBCC && _jsx(ComboBox, Object.assign({}, bccEmailAddresses, { label: t('bcc'), mode: 'multi-select' }), void 0), _jsx(Input, { value: subject, onChange: onSubjectChange, label: t('subject') }, void 0), _jsx(Select, Object.assign({ onChange: onTemplateChange, label: t('auto_reply'), value: selectedTemplate }, { children: _jsxs(_Fragment, { children: [_jsx(Option, { children: t('insert') }, void 0), children] }, void 0) }), void 0), primaryMoreFields, _jsx(RichTextEditor, Object.assign({ autoFocus: true }, body, { ref: rteRef, defaultValue: selectedTemplate, labelHidden: true, label: t('email_message') }), void 0), secondaryMoreFields, attachments.length > 0 && (_jsx(Flex, Object.assign({ container: { gap: 1, wrap: 'wrap' } }, { children: attachments.map(attachment => (_createElement(FileUploadItem, { ...attachment, key: attachment.name }))) }), void 0)), _jsxs(Flex, Object.assign({ container: {
154
+ }, children: _jsx(EmailSelector, { participants: participants, defaultSelections: to?.[responseType], label: t('to'), mode: 'multi-select', required: true, selections: selectedItems }, void 0) }, void 0), !showCC && (_jsx(StyledToggleButton, { variant: 'simple', onClick: () => setShowCC(true), icon: true, children: t('cc') }, void 0)), !showBCC && (_jsx(StyledToggleButton, { variant: 'simple', onClick: () => setShowBCC(true), icon: true, children: t('bcc') }, void 0))] }, void 0), showCC && (_jsx(EmailSelector, { participants: participants, defaultSelections: cc, label: t('cc'), mode: 'multi-select', selections: selectedItems }, void 0)), showBCC && (_jsx(EmailSelector, { selections: selectedItems, participants: participants, defaultSelections: bcc, label: t('bcc'), mode: 'multi-select' }, void 0)), _jsx(Input, { value: subject, onChange: onSubjectChange, label: t('subject') }, void 0), _jsx(Select, { onChange: onTemplateChange, label: t('auto_reply'), value: autoReplyTemplate, children: _jsxs(_Fragment, { children: [_jsx(Option, { children: t('insert') }, void 0), templateOptions] }, void 0) }, void 0), _jsx(RichTextEditor, { autoFocus: true, ref: rteEditorRef, toolbar: rteToolbar, onImageAdded: onImageAdded, labelHidden: true, label: t('email_message'), defaultValue: bodyContent }, void 0), attachments.length > 0 && (_jsx(Flex, { container: { gap: 1, wrap: 'wrap' }, children: attachments.map(attachment => (_createElement(FileUploadItem, { ...attachment, key: attachment.name, onDelete: onAttachmentDelete }))) }, void 0)), _jsxs(Flex, { container: {
145
155
  gap: 1
146
- } }, { children: [_jsxs(Flex, Object.assign({ container: true, item: { grow: 1 } }, { children: [_jsx(Button, Object.assign({ variant: 'secondary', onClick: onCancel }, { children: t('cancel') }), void 0), footerMoreActions] }), void 0), _jsxs(Flex, Object.assign({ container: true }, { children: [maxAttachments > 0 && (_jsx(Button, Object.assign({ onClick: attachments.length < maxAttachments ? onAddAttachment : undefined, variant: 'link', label: attachments.length >= maxAttachments
156
+ }, children: [_jsxs(Flex, { container: true, item: { grow: 1 }, children: [_jsx(Button, { variant: 'secondary', onClick: onCancel, children: t('cancel') }, void 0), footerMoreActions] }, void 0), _jsxs(Flex, { container: true, children: [maxAttachments > 0 && (_jsx(Button, { onClick: attachments.length < maxAttachments
157
+ ? () => fileUploadInputRef.current?.click()
158
+ : undefined, variant: 'link', label: attachments.length >= maxAttachments
147
159
  ? t('email_disable_attachment', [maxAttachments])
148
- : t('email_add_attachment', [maxAttachments]) }, { children: _jsx(Icon, { name: 'paper-clip' }, void 0) }), void 0)), _jsx(Button, Object.assign({ variant: 'primary', onClick: onSend }, { children: t('send') }), void 0)] }), void 0)] }), void 0)] }), void 0));
160
+ : t('email_add_attachment', [maxAttachments]), children: _jsx(Icon, { name: 'paper-clip' }, void 0) }, void 0)), _jsx(Button, { variant: 'primary', onClick: handleSend, children: t('send') }, void 0)] }, void 0)] }, void 0), _jsx("input", { type: 'file', style: { display: 'none' }, ref: fileUploadInputRef, onChange: onFileChange }, void 0)] }, void 0));
149
161
  });
150
162
  export default EmailComposer;
151
163
  //# sourceMappingURL=EmailComposer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailComposer.js","sourceRoot":"","sources":["../../../src/components/Email/EmailComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useMemo\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Select from '@pega/cosmos-react-core/lib/components/Select/Select';\nimport {\n Button,\n ComboBox,\n Flex,\n Icon,\n registerIcon,\n Text,\n useI18n,\n Option,\n ForwardProps,\n defaultThemeProp,\n FileUploadItem,\n MenuButton,\n ComboBoxProps,\n useConsolidatedRef\n} from '@pega/cosmos-react-core';\nimport Input from '@pega/cosmos-react-core/lib/components/Input/Input';\nimport { RichTextEditor } from '@pega/cosmos-react-rte';\nimport * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';\n\nimport { EmailComposerProps, EmailUser } from './Email.types';\n\nregisterIcon(paperClipIcon);\n\ninterface EmailUserWithSelection extends EmailUser {\n selected?: boolean;\n}\n\nconst useEmailDataProvider: (\n participants: EmailComposerProps['participants'],\n defaultSelected?: string[]\n) => ComboBoxProps = (participants, defaultSelected = []) => {\n const escapeChars = /[.*+\\-?^${}()|[\\]\\\\]/g;\n\n const getFilterRegex = (inputValue: string) => {\n return new RegExp(`^${inputValue.replace(escapeChars, '\\\\$&')}`, 'i');\n };\n\n const [emailUsers, setEmailUsers] = useState<EmailUserWithSelection[]>(\n participants.map((participant: EmailUser) => {\n return {\n ...(participant as EmailUser),\n selected: defaultSelected.includes(participant.emailAddress)\n };\n }) as EmailUserWithSelection[]\n );\n\n const [emailFilterValue, setEmailFilterValue] = useState('');\n\n const filterRegex = useMemo(() => getFilterRegex(emailFilterValue), [emailFilterValue]);\n\n const emailsToRender = useMemo(() => {\n return (\n emailFilterValue\n ? emailUsers.filter(({ emailAddress, fullName, shortName }) => {\n return (\n filterRegex.test(emailAddress) ||\n filterRegex.test(fullName) ||\n filterRegex.test(shortName)\n );\n })\n : emailUsers\n ).map(({ emailAddress, fullName, selected }) => {\n return {\n id: emailAddress,\n primary: fullName,\n secondary: [emailAddress],\n selected: !!selected\n };\n });\n }, [emailUsers, filterRegex]);\n\n const selectedEmailUsers = useMemo(() => {\n return emailUsers\n .filter(emailAddress => emailAddress.selected)\n .map(({ emailAddress }) => {\n return {\n text: emailAddress,\n id: emailAddress\n };\n });\n }, [emailUsers]);\n\n const toggleSelectedEmailUser = (id: string) => {\n setEmailUsers(prevEmailUsers => {\n return prevEmailUsers.map(emailUser => {\n if (emailUser.emailAddress === id) {\n return {\n ...emailUser,\n selected: !emailUser.selected\n };\n }\n return emailUser;\n });\n });\n };\n\n return {\n value: emailFilterValue,\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n setEmailFilterValue(e.target.value);\n },\n onBlur: () => {\n setEmailFilterValue('');\n },\n menu: {\n items: emailsToRender,\n accent: filterRegex,\n onItemClick: toggleSelectedEmailUser\n },\n selected: {\n items: selectedEmailUsers,\n onRemove: toggleSelectedEmailUser\n }\n };\n};\n\nexport const StyledEmailComposer = styled.div``;\n\nexport const StyledReplyIcon: typeof Icon = styled(Icon)(({ theme }) => {\n return css`\n color: ${theme.base.palette.interactive};\n `;\n});\n\nStyledReplyIcon.defaultProps = defaultThemeProp;\n\nexport const StyledCCButton = styled(Button)(({ theme }) => {\n return css`\n margin-block-start: calc(2 * ${theme.base.spacing});\n color: ${theme.base.palette.interactive};\n `;\n});\n\nStyledCCButton.defaultProps = defaultThemeProp;\n\nconst EmailComposer: FunctionComponent<EmailComposerProps & ForwardProps> = forwardRef(\n (props: PropsWithoutRef<EmailComposerProps>, ref: EmailComposerProps['ref']) => {\n const {\n onReply,\n onReplyAll,\n isReplyAll,\n participants,\n from,\n to,\n cc,\n bcc,\n body,\n primaryMoreFields,\n secondaryMoreFields,\n maxAttachments = 0,\n attachments = [],\n onAddAttachment,\n onCancel,\n onSend,\n footerMoreActions,\n templates,\n ...restProps\n } = props;\n\n const [subject, setSubject] = useState(props.subject);\n\n const [showCC, setShowCC] = useState(false);\n const [showBCC, setShowBCC] = useState(false);\n const [selectedTemplate, setSelectedTemplate] = useState('');\n\n const toEmailAddresses = useEmailDataProvider(participants, to);\n const ccEmailAddresses = useEmailDataProvider(participants, cc);\n const bccEmailAddresses = useEmailDataProvider(participants, bcc);\n\n const children =\n templates && Object.keys(templates).map(option => <Option key={option}>{option}</Option>);\n\n const header = subject || props.header;\n\n const onSubjectChange = (e: ChangeEvent<HTMLInputElement>) => {\n setSubject(e.target.value);\n };\n\n const rteRef = useConsolidatedRef(body.ref);\n\n const onTemplateChange = (e: ChangeEvent<HTMLSelectElement>) => {\n setSelectedTemplate(e.target.value);\n if (templates?.[e.target.value]) {\n rteRef.current?.insertText(templates[e.target.value]);\n }\n };\n\n const t = useI18n();\n\n return (\n <Flex\n as={StyledEmailComposer}\n ref={ref}\n {...restProps}\n container={{\n gap: 2,\n direction: 'column'\n }}\n >\n <Text variant='h4' aria-label={`${t('email_header')} ${header}`}>\n {header}\n </Text>\n <div>\n <MenuButton\n text={isReplyAll ? t('reply_all') : t('reply')}\n variant='link'\n icon={isReplyAll ? 'reply-all' : 'reply'}\n menu={{\n items: [\n {\n primary: t('reply_all'),\n id: 'reply all',\n visual: <StyledReplyIcon name='reply-all' />,\n onClick: onReplyAll\n },\n {\n primary: t('reply'),\n id: 'reply',\n visual: <StyledReplyIcon name='reply' />,\n onClick: onReply\n }\n ]\n }}\n />\n </div>\n\n <Flex\n container={{\n alignItems: 'start',\n gap: 0.5\n }}\n >\n <Flex\n container={{\n gap: 1,\n direction: 'column'\n }}\n item={{\n grow: 1\n }}\n >\n {to && <ComboBox {...toEmailAddresses} label={t('to')} mode='multi-select' required />}\n </Flex>\n {!showCC && (\n <span>\n <StyledCCButton variant='simple' onClick={() => setShowCC(true)} icon>\n {t('cc')}\n </StyledCCButton>\n </span>\n )}\n {!showBCC && (\n <span>\n <StyledCCButton variant='simple' onClick={() => setShowBCC(true)} icon>\n {t('bcc')}\n </StyledCCButton>\n </span>\n )}\n </Flex>\n {showCC && <ComboBox {...ccEmailAddresses} label={t('cc')} mode='multi-select' />}\n {showBCC && <ComboBox {...bccEmailAddresses} label={t('bcc')} mode='multi-select' />}\n\n <Input value={subject} onChange={onSubjectChange} label={t('subject')} />\n\n <Select onChange={onTemplateChange} label={t('auto_reply')} value={selectedTemplate}>\n <>\n <Option>{t('insert')}</Option>\n {children}\n </>\n </Select>\n {primaryMoreFields}\n <RichTextEditor\n autoFocus\n {...body}\n ref={rteRef}\n defaultValue={selectedTemplate}\n labelHidden\n label={t('email_message')}\n />\n {secondaryMoreFields}\n {attachments.length > 0 && (\n <Flex container={{ gap: 1, wrap: 'wrap' }}>\n {attachments.map(attachment => (\n <FileUploadItem {...attachment} key={attachment.name} />\n ))}\n </Flex>\n )}\n <Flex\n container={{\n gap: 1\n }}\n >\n <Flex container item={{ grow: 1 }}>\n <Button variant='secondary' onClick={onCancel}>\n {t('cancel')}\n </Button>\n {footerMoreActions}\n </Flex>\n <Flex container>\n {maxAttachments > 0 && (\n <Button\n onClick={attachments.length < maxAttachments ? onAddAttachment : undefined}\n variant='link'\n label={\n attachments.length >= maxAttachments\n ? t('email_disable_attachment', [maxAttachments])\n : t('email_add_attachment', [maxAttachments])\n }\n >\n <Icon name='paper-clip' />\n </Button>\n )}\n <Button variant='primary' onClick={onSend}>\n {t('send')}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n );\n }\n);\n\nexport default EmailComposer;\n"]}
1
+ {"version":3,"file":"EmailComposer.js","sourceRoot":"","sources":["../../../src/components/Email/EmailComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useMemo,\n useRef,\n useCallback,\n useEffect,\n ReactNode\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Button,\n Flex,\n Icon,\n registerIcon,\n useI18n,\n Option,\n defaultThemeProp,\n FileUploadItem,\n MenuButton,\n FileUploadItemProps,\n Select,\n Input\n} from '@pega/cosmos-react-core';\nimport { RichTextEditor, RichTextEditorProps, RichTextEditorState } from '@pega/cosmos-react-rte';\nimport * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';\nimport * as replyAllIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/reply-all.icon';\nimport * as replyIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/reply.icon';\nimport * as forwardIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/forward.icon';\n\nimport { EmailComposerProps, EmailUser } from './Email.types';\nimport EmailSelector from './EmailSelector';\n\nregisterIcon(paperClipIcon, replyAllIcon, replyIcon, forwardIcon);\n\nexport const StyledEmailComposer = styled.div``;\n\nexport const StyledResponseTypeIcon: typeof Icon = styled(Icon)(({ theme }) => {\n return css`\n color: ${theme.base.palette.interactive};\n `;\n});\n\nStyledResponseTypeIcon.defaultProps = defaultThemeProp;\n\nexport const StyledToggleButton = styled(Button)(({ theme }) => {\n return css`\n margin-block-start: calc(2 * ${theme.base.spacing});\n color: ${theme.base.palette.interactive};\n `;\n});\n\nStyledToggleButton.defaultProps = defaultThemeProp;\n\nconst responseTypeIcons = {\n reply: 'reply',\n replyAll: 'reply-all',\n forward: 'forward'\n};\n\nconst rteToolbar: RichTextEditorProps['toolbar'] = [\n 'inline-styling',\n 'headers',\n 'lists',\n 'images',\n 'cut-copy-paste',\n 'indentation'\n];\n\nconst EmailComposer: FunctionComponent<EmailComposerProps> = forwardRef(\n (\n {\n participants,\n cc,\n bcc,\n bodyContent,\n maxAttachments = 0,\n onCancel,\n onSend,\n to,\n footerMoreActions,\n templates,\n ...restProps\n }: PropsWithoutRef<EmailComposerProps>,\n ref: EmailComposerProps['ref']\n ) => {\n const t = useI18n();\n const [responseType, setResponseType] = useState(restProps.responseType);\n const [showCC, setShowCC] = useState(\n restProps.responseType !== 'reply' && !!cc && cc.length > 0\n );\n const [showBCC, setShowBCC] = useState(\n restProps.responseType !== 'reply' && !!bcc && bcc.length > 0\n );\n const [subject, setSubject] = useState(restProps.subject);\n const [autoReplyTemplate, setAutoReplyTemplate] = useState('');\n const [attachments, setAttachments] = useState(restProps.attachments || []);\n\n const rteEditorRef = useRef<RichTextEditorState>(null);\n const fileUploadInputRef = useRef<HTMLInputElement>(null);\n\n // inserts selected template in RTE\n useEffect(() => {\n if (templates?.[autoReplyTemplate]) {\n rteEditorRef?.current?.clear();\n setTimeout(() => {\n rteEditorRef?.current?.insertHtml(templates?.[autoReplyTemplate], false);\n }, 0);\n }\n }, [autoReplyTemplate]);\n\n // resets To | CC | BCC combobox selection and toggles fields on responseType change reply | replyAll | forward\n useEffect(() => {\n setShowCC(responseType === 'replyAll' ? !!cc && cc.length > 0 : false);\n setShowBCC(responseType === 'replyAll' && !!bcc && bcc?.length > 0 ? !!bcc : false);\n }, [responseType]);\n\n const templateOptions = useMemo(\n () =>\n templates && Object.keys(templates).map(option => <Option key={option}>{option}</Option>),\n [templates]\n );\n\n const responseTypeMenuData = useMemo(() => {\n const menuItems = [\n {\n id: 'reply',\n primary: t('reply'),\n visual: <StyledResponseTypeIcon name={responseTypeIcons.reply} />,\n selected: responseType === 'reply',\n onClick: () => {\n setResponseType('reply');\n }\n },\n {\n id: 'replyAll',\n primary: t('reply_all'),\n visual: <StyledResponseTypeIcon name={responseTypeIcons.replyAll} />,\n selected: responseType === 'replyAll',\n onClick: () => {\n setResponseType('replyAll');\n }\n }\n ];\n return {\n menuItems,\n selectedResponseType:\n menuItems.find(item => item.selected)?.primary || menuItems[0].primary,\n selectedResponseTypeIcon:\n (responseType && responseTypeIcons[responseType]) || responseTypeIcons.reply\n };\n }, [responseType]);\n\n const onImageAdded: RichTextEditorProps['onImageAdded'] = (image: File, id: string) => {\n const src = URL.createObjectURL(image);\n rteEditorRef.current?.appendImage({ src, alt: image.name }, id);\n };\n\n const onSubjectChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSubject(e.target.value);\n }, []);\n\n const onTemplateChange = useCallback((e: ChangeEvent<HTMLSelectElement>) => {\n setAutoReplyTemplate(e.target.value);\n }, []);\n\n const onAttachmentDelete = useCallback((name: FileUploadItemProps['name']) => {\n setAttachments(prevAttachments => prevAttachments.filter(item => item.name !== name));\n }, []);\n\n const onFileChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n setAttachments(prevAttachments => [\n ...prevAttachments,\n ...Array.from(e.target.files!).map(file => ({\n name: file.name,\n file\n }))\n ]);\n }\n }, []);\n\n const [toAddresses, setToAddresses] = useState<EmailUser['emailAddress'][]>(\n to?.[responseType!] || []\n );\n const [ccAddresses, setCcAddresses] = useState<EmailUser['emailAddress'][]>(\n cc as EmailUser['emailAddress'][]\n );\n const [bccAddresses, setBccAddresses] = useState<EmailUser['emailAddress'][]>(\n bcc as EmailUser['emailAddress'][]\n );\n\n const selectedItems = (selections: EmailUser['emailAddress'][], label: ReactNode) => {\n if (label === 'To') {\n setToAddresses(selections);\n }\n if (label === 'Cc') {\n setCcAddresses(selections);\n }\n if (label === 'Bcc') {\n setBccAddresses(selections);\n }\n };\n const handleSend = useCallback(() => {\n onSend({\n to: toAddresses,\n cc: showCC ? ccAddresses : undefined,\n bcc: showBCC ? bccAddresses : undefined,\n subject,\n bodyContent: rteEditorRef.current?.getHtml() || '',\n attachments\n });\n }, [toAddresses, ccAddresses, bccAddresses, subject, attachments, showCC, showBCC]);\n\n return (\n <Flex\n as={StyledEmailComposer}\n ref={ref}\n {...restProps}\n container={{\n gap: 2,\n direction: 'column'\n }}\n >\n <div>\n {responseType !== 'forward' && (\n <MenuButton\n text={responseTypeMenuData.selectedResponseType}\n variant='link'\n icon={responseTypeMenuData.selectedResponseTypeIcon}\n menu={{\n mode: 'single-select',\n items: responseTypeMenuData.menuItems\n }}\n />\n )}\n </div>\n\n <Flex\n container={{\n alignItems: 'start',\n gap: 0.5\n }}\n >\n <Flex\n container={{\n gap: 1,\n direction: 'column'\n }}\n item={{\n grow: 1\n }}\n >\n <EmailSelector\n participants={participants}\n defaultSelections={to?.[responseType!]}\n label={t('to')}\n mode='multi-select'\n required\n selections={selectedItems}\n />\n </Flex>\n {!showCC && (\n <StyledToggleButton variant='simple' onClick={() => setShowCC(true)} icon>\n {t('cc')}\n </StyledToggleButton>\n )}\n {!showBCC && (\n <StyledToggleButton variant='simple' onClick={() => setShowBCC(true)} icon>\n {t('bcc')}\n </StyledToggleButton>\n )}\n </Flex>\n\n {showCC && (\n <EmailSelector\n participants={participants}\n defaultSelections={cc}\n label={t('cc')}\n mode='multi-select'\n selections={selectedItems}\n />\n )}\n {showBCC && (\n <EmailSelector\n selections={selectedItems}\n participants={participants}\n defaultSelections={bcc}\n label={t('bcc')}\n mode='multi-select'\n />\n )}\n\n <Input value={subject} onChange={onSubjectChange} label={t('subject')} />\n\n <Select onChange={onTemplateChange} label={t('auto_reply')} value={autoReplyTemplate}>\n <>\n <Option>{t('insert')}</Option>\n {templateOptions}\n </>\n </Select>\n <RichTextEditor\n autoFocus\n ref={rteEditorRef}\n toolbar={rteToolbar}\n onImageAdded={onImageAdded}\n labelHidden\n label={t('email_message')}\n defaultValue={bodyContent}\n />\n {attachments.length > 0 && (\n <Flex container={{ gap: 1, wrap: 'wrap' }}>\n {attachments.map(attachment => (\n <FileUploadItem {...attachment} key={attachment.name} onDelete={onAttachmentDelete} />\n ))}\n </Flex>\n )}\n <Flex\n container={{\n gap: 1\n }}\n >\n <Flex container item={{ grow: 1 }}>\n <Button variant='secondary' onClick={onCancel}>\n {t('cancel')}\n </Button>\n {footerMoreActions}\n </Flex>\n <Flex container>\n {maxAttachments > 0 && (\n <Button\n onClick={\n attachments.length < maxAttachments\n ? () => fileUploadInputRef.current?.click()\n : undefined\n }\n variant='link'\n label={\n attachments.length >= maxAttachments\n ? t('email_disable_attachment', [maxAttachments])\n : t('email_add_attachment', [maxAttachments])\n }\n >\n <Icon name='paper-clip' />\n </Button>\n )}\n <Button variant='primary' onClick={handleSend}>\n {t('send')}\n </Button>\n </Flex>\n </Flex>\n <input\n type='file'\n style={{ display: 'none' }}\n ref={fileUploadInputRef}\n onChange={onFileChange}\n />\n </Flex>\n );\n }\n);\n\nexport default EmailComposer;\n"]}