@zohoim/chat-components 1.0.11 → 1.1.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.
- package/README.md +8 -0
- package/es/AttachmentHandler/AttachmentHandler.js +84 -0
- package/es/AttachmentHandler/css/AttachmentHandler.module.css +27 -0
- package/es/AttachmentHandler/index.js +1 -0
- package/es/AttachmentHandler/props/defaultProps.js +10 -0
- package/es/AttachmentHandler/props/propTypes.js +17 -0
- package/es/AttachmentPreview/AttachmentPreview.js +121 -0
- package/es/AttachmentPreview/css/AttachmentPreview.module.css +39 -0
- package/es/AttachmentPreview/index.js +1 -0
- package/es/AttachmentPreview/props/defaultProps.js +9 -0
- package/es/AttachmentPreview/props/propTypes.js +33 -0
- package/es/AttachmentPreviewBody/AttachmentPreviewBody.js +97 -0
- package/es/AttachmentPreviewBody/css/AttachmentPreviewBody.module.css +75 -0
- package/es/AttachmentPreviewBody/index.js +1 -0
- package/es/AttachmentPreviewBody/props/defaultProps.js +7 -0
- package/es/AttachmentPreviewBody/props/propTypes.js +20 -0
- package/es/AttachmentPreviewHeader/AttachmentPreviewHeader.js +84 -0
- package/es/AttachmentPreviewHeader/css/AttachmentPreviewHeader.module.css +47 -0
- package/es/AttachmentPreviewHeader/index.js +1 -0
- package/es/AttachmentPreviewHeader/props/defaultProps.js +7 -0
- package/es/AttachmentPreviewHeader/props/propTypes.js +16 -0
- package/es/Emoji/Emoji.js +72 -0
- package/es/Emoji/css/Emoji.module.css +48 -0
- package/es/Emoji/css/cssJSLogic.js +18 -0
- package/es/Emoji/index.js +1 -0
- package/es/Emoji/props/defaultProps.js +8 -0
- package/es/Emoji/props/propTypes.js +16 -0
- package/es/EmojiPopup/EmojiPopup.js +115 -0
- package/es/EmojiPopup/css/EmojiPopup.module.css +55 -0
- package/es/EmojiPopup/index.js +1 -0
- package/es/EmojiPopup/props/defaultProps.js +11 -0
- package/es/EmojiPopup/props/propTypes.js +21 -0
- package/es/Emojis/Emojis.js +81 -0
- package/es/Emojis/index.js +1 -0
- package/es/Emojis/props/defaultProps.js +10 -0
- package/es/Emojis/props/propTypes.js +20 -0
- package/es/EmojisEmptyState/EmojisEmptyState.js +50 -0
- package/es/EmojisEmptyState/css/EmojisEmptyState.module.css +18 -0
- package/es/EmojisEmptyState/index.js +1 -0
- package/es/EmojisEmptyState/props/defaultProps.js +9 -0
- package/es/EmojisEmptyState/props/propTypes.js +8 -0
- package/es/EmojisFooter/EmojisFooter.js +71 -0
- package/es/EmojisFooter/css/EmojisFooter.module.css +40 -0
- package/es/EmojisFooter/index.js +1 -0
- package/es/EmojisFooter/props/defaultProps.js +7 -0
- package/es/EmojisFooter/props/propTypes.js +12 -0
- package/es/EmojisHeader/EmojisHeader.js +65 -0
- package/es/EmojisHeader/css/EmojisHeader.module.css +36 -0
- package/es/EmojisHeader/index.js +1 -0
- package/es/EmojisHeader/props/defaultProps.js +8 -0
- package/es/EmojisHeader/props/propTypes.js +13 -0
- package/es/EmojisList/EmojisList.js +130 -0
- package/es/EmojisList/css/EmojisList.module.css +50 -0
- package/es/EmojisList/css/cssJSLogic.js +25 -0
- package/es/EmojisList/index.js +1 -0
- package/es/EmojisList/props/defaultProps.js +10 -0
- package/es/EmojisList/props/propTypes.js +20 -0
- package/es/MessageActionsMore/MessageActionsMore.js +2 -2
- package/es/MessageActionsMore/props/propTypes.js +5 -2
- package/es/MessageActionsWrapper/MessageActionsWrapper.js +1 -1
- package/es/Theme/ThemeAssets.js +2 -2
- package/es/Theme/ThemeWrapper.js +20 -7
- package/es/Theme/TooltipWrapper.js +1 -1
- package/es/Theme/props/defaultProps.js +2 -1
- package/es/Theme/props/propTypes.js +2 -1
- package/es/Theme/themeVariables/dark/blueTheme.js +18 -1
- package/es/Theme/themeVariables/dark/commonColorVariable.js +20 -1
- package/es/Theme/themeVariables/dark/greenTheme.js +18 -1
- package/es/Theme/themeVariables/dark/orangeTheme.js +18 -1
- package/es/Theme/themeVariables/dark/redTheme.js +18 -1
- package/es/Theme/themeVariables/dark/yellowTheme.js +18 -1
- package/es/Theme/themeVariables/light/blueTheme.js +22 -1
- package/es/Theme/themeVariables/light/commonColorVariable.js +19 -0
- package/es/Theme/themeVariables/light/greenTheme.js +18 -1
- package/es/Theme/themeVariables/light/orangeTheme.js +18 -1
- package/es/Theme/themeVariables/light/redTheme.js +18 -1
- package/es/Theme/themeVariables/light/yellowTheme.js +18 -1
- package/es/Theme/themeVariables/pureDark/blueTheme.js +18 -1
- package/es/Theme/themeVariables/pureDark/commonColorVariable.js +20 -1
- package/es/Theme/themeVariables/pureDark/greenTheme.js +18 -1
- package/es/Theme/themeVariables/pureDark/orangeTheme.js +18 -1
- package/es/Theme/themeVariables/pureDark/redTheme.js +18 -1
- package/es/Theme/themeVariables/pureDark/yellowTheme.js +18 -1
- package/es/Theme/utils/getThemeConfigurations.js +1 -1
- package/es/constants/index.js +8 -1
- package/es/constants/propConstants/editorPropConstants.js +3 -0
- package/es/constants/propConstants/popupPropConstants.js +2 -0
- package/es/im/IMAttachmentHandler/IMAttachmentHandler.js +50 -0
- package/es/im/IMAttachmentHandler/index.js +1 -0
- package/es/im/IMAttachmentHandler/props/defaultProps.js +10 -0
- package/es/im/IMAttachmentHandler/props/propTypes.js +28 -0
- package/es/im/ReplyComposer/ReplyComposer.js +153 -0
- package/es/im/ReplyComposer/css/ReplyComposer.module.css +10 -0
- package/es/im/ReplyComposer/css/cssJSLogic.js +13 -0
- package/es/im/ReplyComposer/index.js +1 -0
- package/es/im/ReplyComposer/props/defaultProps.js +7 -0
- package/es/im/ReplyComposer/props/propTypes.js +60 -0
- package/es/im/ReplyComposerFooter/ReplyComposerFooter.js +41 -0
- package/es/im/ReplyComposerFooter/css/ReplyComposerFooter.module.css +10 -0
- package/es/im/ReplyComposerFooter/index.js +1 -0
- package/es/im/ReplyComposerFooter/props/defaultProps.js +8 -0
- package/es/im/ReplyComposerFooter/props/propTypes.js +17 -0
- package/es/im/ReplyEditor/ReplyEditor.js +103 -0
- package/es/im/ReplyEditor/css/ReplyEditor.module.css +50 -0
- package/es/im/ReplyEditor/css/cssJSLogic.js +10 -0
- package/es/im/ReplyEditor/index.js +1 -0
- package/es/im/ReplyEditor/props/defaultProps.js +8 -0
- package/es/im/ReplyEditor/props/propTypes.js +27 -0
- package/es/im/ReplyEditorExtensions/ReplyEditorExtensions.js +149 -0
- package/es/im/ReplyEditorExtensions/css/ReplyEditorExtensions.module.css +5 -0
- package/es/im/ReplyEditorExtensions/index.js +1 -0
- package/es/im/ReplyEditorExtensions/props/defaultProps.js +6 -0
- package/es/im/ReplyEditorExtensions/props/propTypes.js +16 -0
- package/es/im/ReplyEditorSuggestions/ReplyEditorSuggestions.js +95 -0
- package/es/im/ReplyEditorSuggestions/css/ReplyEditorSuggestions.module.css +8 -0
- package/es/im/ReplyEditorSuggestions/index.js +1 -0
- package/es/im/ReplyEditorSuggestions/props/defaultProps.js +6 -0
- package/es/im/ReplyEditorSuggestions/props/propTypes.js +21 -0
- package/es/im/ReplyEditorSuggestionsPopup/ReplyEditorSuggestionsPopup.js +93 -0
- package/es/im/ReplyEditorSuggestionsPopup/css/ReplyEditorSuggestionsPopup.module.css +7 -0
- package/es/im/ReplyEditorSuggestionsPopup/index.js +1 -0
- package/es/im/ReplyEditorSuggestionsPopup/props/defaultProps.js +10 -0
- package/es/im/ReplyEditorSuggestionsPopup/props/propTypes.js +21 -0
- package/es/im/index.js +8 -1
- package/es/index.js +13 -2
- package/es/rte/Editor/Editor.js +80 -0
- package/es/rte/Editor/css/Editor.module.css +17 -0
- package/es/rte/Editor/index.js +1 -0
- package/es/rte/Editor/props/defaultProps.js +21 -0
- package/es/rte/Editor/props/propTypes.js +52 -0
- package/es/rte/index.js +1 -0
- package/package.json +7 -7
- package/es/Theme/constants/index.js +0 -41
package/README.md
CHANGED
|
@@ -10,6 +10,14 @@ In this Library, We Provide Some Basic Message Components to Build Your Chat App
|
|
|
10
10
|
|
|
11
11
|
> import MessageBubble from '@zohoim/chat-components/es/MessageBubble/MessageBubble’;
|
|
12
12
|
|
|
13
|
+
# 1.1.0
|
|
14
|
+
|
|
15
|
+
- **Editor** new component added
|
|
16
|
+
- **ReplyEditor** new component added
|
|
17
|
+
- **ReplyComposer** new component added
|
|
18
|
+
- **EmojiPopup** new component added
|
|
19
|
+
- **AttachmentPreview** new component added
|
|
20
|
+
|
|
13
21
|
# 1.0.11
|
|
14
22
|
|
|
15
23
|
- changes for retaining hover actions
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
/** ** Component *** */
|
|
4
|
+
|
|
5
|
+
import IconButton from '@zohodesk/dot/es/IconButton/IconButton';
|
|
6
|
+
import { Container } from '@zohodesk/components/es/Layout';
|
|
7
|
+
/** ** Hooks *** */
|
|
8
|
+
|
|
9
|
+
import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
|
|
10
|
+
import useAttachmentHandler from '@zohoim/chat-components-hooks/es/AttachmentHandler/useAttachmentHandler';
|
|
11
|
+
/** ** Constants *** */
|
|
12
|
+
|
|
13
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
14
|
+
import attachmentHandlerDefaultProps from "./props/defaultProps";
|
|
15
|
+
import attachmentHandlerPropTypes from "./props/propTypes";
|
|
16
|
+
/** ** Methods *** */
|
|
17
|
+
|
|
18
|
+
import renderHandler from '@zohoim/chat-components-utils/es/common/renderHandler';
|
|
19
|
+
/** ** Styles *** */
|
|
20
|
+
|
|
21
|
+
import style from "./css/AttachmentHandler.module.css";
|
|
22
|
+
export default function AttachmentHandler(props) {
|
|
23
|
+
const {
|
|
24
|
+
customStyle,
|
|
25
|
+
iconName,
|
|
26
|
+
iconSize,
|
|
27
|
+
iconTitle,
|
|
28
|
+
renderCustomIcon,
|
|
29
|
+
getRef: propGetRef,
|
|
30
|
+
supportedFileTypes,
|
|
31
|
+
isMultiAttachment,
|
|
32
|
+
onAttach: propOnAttach,
|
|
33
|
+
customProps = dummyObject
|
|
34
|
+
} = props;
|
|
35
|
+
const {
|
|
36
|
+
inputProps = dummyObject
|
|
37
|
+
} = customProps;
|
|
38
|
+
const {
|
|
39
|
+
onAttach,
|
|
40
|
+
onAttachmentClick,
|
|
41
|
+
getRef
|
|
42
|
+
} = useAttachmentHandler({
|
|
43
|
+
onAttach: propOnAttach,
|
|
44
|
+
getRef: propGetRef
|
|
45
|
+
});
|
|
46
|
+
/* External customization */
|
|
47
|
+
|
|
48
|
+
const newStyle = useMergeStyle(style, customStyle);
|
|
49
|
+
const inputEl = useMemo(() => /*#__PURE__*/React.createElement("input", {
|
|
50
|
+
ref: getRef,
|
|
51
|
+
accept: supportedFileTypes,
|
|
52
|
+
hidden: true,
|
|
53
|
+
multiple: isMultiAttachment,
|
|
54
|
+
onChange: onAttach,
|
|
55
|
+
size: "1",
|
|
56
|
+
type: "file",
|
|
57
|
+
...inputProps
|
|
58
|
+
}), [supportedFileTypes, getRef, onAttach, isMultiAttachment, inputProps]);
|
|
59
|
+
const customIcon = useMemo(() => {
|
|
60
|
+
/* Render Custom Icon */
|
|
61
|
+
const icon = renderHandler(renderCustomIcon)({
|
|
62
|
+
onClick: onAttachmentClick
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
if (icon) {
|
|
66
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, icon, inputEl);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return null;
|
|
70
|
+
}, [renderCustomIcon, onAttachmentClick, inputEl]);
|
|
71
|
+
return /*#__PURE__*/React.createElement(Container, {
|
|
72
|
+
alignBox: "column"
|
|
73
|
+
}, customIcon || /*#__PURE__*/React.createElement(IconButton, {
|
|
74
|
+
className: newStyle.iconButton,
|
|
75
|
+
iconClass: newStyle.icon,
|
|
76
|
+
iconName: iconName,
|
|
77
|
+
iconSize: iconSize,
|
|
78
|
+
onClick: onAttachmentClick,
|
|
79
|
+
title: iconTitle
|
|
80
|
+
}, inputEl));
|
|
81
|
+
}
|
|
82
|
+
AttachmentHandler.propTypes = attachmentHandlerPropTypes;
|
|
83
|
+
AttachmentHandler.defaultProps = attachmentHandlerDefaultProps;
|
|
84
|
+
AttachmentHandler.displayName = 'AttachmentHandler';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** ** Styles *** */
|
|
2
|
+
|
|
3
|
+
.attachmentHandler {
|
|
4
|
+
/** ** Use this class for css customisation *** */
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[dir=ltr] .iconButton {
|
|
8
|
+
margin-right: var(--zd_size5) ;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[dir=rtl] .iconButton {
|
|
12
|
+
margin-left: var(--zd_size5) ;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.icon {
|
|
16
|
+
color: initial;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
.icon :global .path1:before {
|
|
21
|
+
color: var(--imlib_chat_components_emojiPopup_ttIcon_path1_color) !important;
|
|
22
|
+
opacity: 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.icon :global .path2:before {
|
|
26
|
+
color: var(--imlib_chat_components_emojiPopup_ttIcon_path2_color) !important;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as AttachmentHandler } from "./AttachmentHandler";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** ** Constants *** */
|
|
2
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
3
|
+
const attachmentHandlerDefaultProps = {
|
|
4
|
+
customStyle: dummyObject,
|
|
5
|
+
iconName: 'ZD-TT-image',
|
|
6
|
+
iconSize: '14',
|
|
7
|
+
iconTitle: 'Upload',
|
|
8
|
+
isMultiAttachment: false
|
|
9
|
+
};
|
|
10
|
+
export default attachmentHandlerDefaultProps;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
const attachmentHandlerPropTypes = {
|
|
4
|
+
customStyle: PropTypes.object,
|
|
5
|
+
iconName: PropTypes.string.isRequired,
|
|
6
|
+
iconSize: PropTypes.number,
|
|
7
|
+
iconTitle: PropTypes.string,
|
|
8
|
+
renderCustomIcon: PropTypes.func,
|
|
9
|
+
getRef: PropTypes.func,
|
|
10
|
+
supportedFileTypes: PropTypes.string,
|
|
11
|
+
isMultiAttachment: PropTypes.bool,
|
|
12
|
+
onAttach: PropTypes.func.isRequired,
|
|
13
|
+
customProps: PropTypes.shape({
|
|
14
|
+
inputProps: PropTypes.object
|
|
15
|
+
})
|
|
16
|
+
};
|
|
17
|
+
export default attachmentHandlerPropTypes;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
|
|
3
|
+
/** ** Libraries *** */
|
|
4
|
+
import React, { useMemo } from 'react';
|
|
5
|
+
/** ** Components *** */
|
|
6
|
+
|
|
7
|
+
import { Container, Box } from '@zohodesk/components/es/Layout';
|
|
8
|
+
import AttachmentPreviewHeader from "../AttachmentPreviewHeader/AttachmentPreviewHeader";
|
|
9
|
+
import AttachmentPreviewBody from "../AttachmentPreviewBody/AttachmentPreviewBody";
|
|
10
|
+
/** ** Hooks *** */
|
|
11
|
+
|
|
12
|
+
import { useZIndex } from '@zohodesk/components/es/Provider/ZindexProvider';
|
|
13
|
+
import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
|
|
14
|
+
import useAttachmentPreview from '@zohoim/chat-components-hooks/es/AttachmentPreview/useAttachmentPreview';
|
|
15
|
+
import useAttachmentPreviewEditor from '@zohoim/chat-components-hooks/es/AttachmentPreview/useAttachmentPreviewEditor';
|
|
16
|
+
/** ** Constants *** */
|
|
17
|
+
|
|
18
|
+
import attachmentPreviewDefaultProps from "./props/defaultProps";
|
|
19
|
+
import attachmentPreviewPropTypes from "./props/propTypes";
|
|
20
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
21
|
+
import { mediaTypes } from '@zohoim/chat-components-utils/es/constants/messageConstants';
|
|
22
|
+
/** ** Styles *** */
|
|
23
|
+
|
|
24
|
+
import style from "./css/AttachmentPreview.module.css";
|
|
25
|
+
const {
|
|
26
|
+
IMAGE
|
|
27
|
+
} = mediaTypes;
|
|
28
|
+
export default function AttachmentPreview(props) {
|
|
29
|
+
const {
|
|
30
|
+
customStyle,
|
|
31
|
+
isDescriptionNeeded,
|
|
32
|
+
files,
|
|
33
|
+
customProps,
|
|
34
|
+
onSubmit,
|
|
35
|
+
onCancel,
|
|
36
|
+
texts,
|
|
37
|
+
descriptionDetails,
|
|
38
|
+
onDescriptionChange: propOnDescriptionChange,
|
|
39
|
+
needCloseOnEscape,
|
|
40
|
+
needUploadOnEnter,
|
|
41
|
+
needAutoZindex
|
|
42
|
+
} = props;
|
|
43
|
+
const {
|
|
44
|
+
editorProps = dummyObject,
|
|
45
|
+
attachmentPreviewHeaderProps = dummyObject,
|
|
46
|
+
attachmentPreviewBodyProps = dummyObject
|
|
47
|
+
} = customProps || dummyObject;
|
|
48
|
+
const {
|
|
49
|
+
submitText = 'Submit',
|
|
50
|
+
cancelText = 'Cancel',
|
|
51
|
+
placeHolder = 'Add a description for the image'
|
|
52
|
+
} = texts || dummyObject;
|
|
53
|
+
/* External customization */
|
|
54
|
+
|
|
55
|
+
const newStyle = useMergeStyle(style, customStyle);
|
|
56
|
+
const getNextIndex = useZIndex();
|
|
57
|
+
const {
|
|
58
|
+
selectedFile,
|
|
59
|
+
isShow,
|
|
60
|
+
description,
|
|
61
|
+
onDescriptionChange,
|
|
62
|
+
onEscape
|
|
63
|
+
} = useAttachmentPreview({
|
|
64
|
+
files,
|
|
65
|
+
onDescriptionChange: propOnDescriptionChange,
|
|
66
|
+
descriptionDetails,
|
|
67
|
+
needCloseOnEscape,
|
|
68
|
+
onCancel
|
|
69
|
+
});
|
|
70
|
+
const {
|
|
71
|
+
onEditorKeyDown
|
|
72
|
+
} = useAttachmentPreviewEditor({
|
|
73
|
+
editorProps,
|
|
74
|
+
onPreviewPopupKeyDown: onEscape,
|
|
75
|
+
needUploadOnEnter,
|
|
76
|
+
onSubmit
|
|
77
|
+
});
|
|
78
|
+
const {
|
|
79
|
+
fileName,
|
|
80
|
+
formattedFileSize: fileSize,
|
|
81
|
+
attachmentURL,
|
|
82
|
+
fileFormat,
|
|
83
|
+
mediaType,
|
|
84
|
+
attachmentId
|
|
85
|
+
} = selectedFile;
|
|
86
|
+
const isImageFile = useMemo(() => mediaType === IMAGE, [mediaType]);
|
|
87
|
+
return isShow ? /*#__PURE__*/React.createElement(Container, {
|
|
88
|
+
align: "both",
|
|
89
|
+
alignBox: "column",
|
|
90
|
+
className: newStyle.attachmentPreview,
|
|
91
|
+
style: needAutoZindex ? {
|
|
92
|
+
zIndex: `${getNextIndex()}`
|
|
93
|
+
} : {}
|
|
94
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
95
|
+
className: newStyle.uploadPrev
|
|
96
|
+
}, /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(AttachmentPreviewHeader, {
|
|
97
|
+
cancelText: cancelText,
|
|
98
|
+
fileName: fileName,
|
|
99
|
+
fileSize: fileSize,
|
|
100
|
+
onCancel: onCancel,
|
|
101
|
+
onSubmit: onSubmit,
|
|
102
|
+
submitText: submitText,
|
|
103
|
+
...attachmentPreviewHeaderProps
|
|
104
|
+
})), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(AttachmentPreviewBody, {
|
|
105
|
+
attachmentId: attachmentId,
|
|
106
|
+
attachmentURL: attachmentURL,
|
|
107
|
+
description: description,
|
|
108
|
+
editorProps: editorProps,
|
|
109
|
+
fileFormat: fileFormat,
|
|
110
|
+
isDescriptionNeeded: isDescriptionNeeded,
|
|
111
|
+
isImageFile: isImageFile,
|
|
112
|
+
mediaType: mediaType,
|
|
113
|
+
onDescriptionChange: onDescriptionChange,
|
|
114
|
+
onEditorKeyDown: onEditorKeyDown,
|
|
115
|
+
placeHolder: placeHolder,
|
|
116
|
+
...attachmentPreviewBodyProps
|
|
117
|
+
})))) : null;
|
|
118
|
+
}
|
|
119
|
+
AttachmentPreview.propTypes = attachmentPreviewPropTypes;
|
|
120
|
+
AttachmentPreview.defaultProps = attachmentPreviewDefaultProps;
|
|
121
|
+
AttachmentPreview.displayName = 'AttachmentPreview';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** ** Styles *** */
|
|
2
|
+
.attachmentPreview {
|
|
3
|
+
position: fixed;
|
|
4
|
+
top: 0 ;
|
|
5
|
+
bottom: 0 ;
|
|
6
|
+
z-index: 2;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
background-color: rgba(42, 45, 54, 0.94);
|
|
9
|
+
}
|
|
10
|
+
[dir=ltr] .attachmentPreview {
|
|
11
|
+
animation: scaleIn 0.3s ease;
|
|
12
|
+
right: 0 ;
|
|
13
|
+
left: 0 ;
|
|
14
|
+
}
|
|
15
|
+
[dir=rtl] .attachmentPreview {
|
|
16
|
+
animation: scaleIn 0.3s ease;
|
|
17
|
+
left: 0 ;
|
|
18
|
+
right: 0 ;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@keyframes scaleIn {
|
|
22
|
+
0% {
|
|
23
|
+
-webkit-transform: scale(0.9);
|
|
24
|
+
transform: scale(0.9);
|
|
25
|
+
opacity: .7
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
100% {
|
|
29
|
+
-webkit-transform: scale(1);
|
|
30
|
+
transform: scale(1);
|
|
31
|
+
opacity: 1
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.uploadPrev {
|
|
36
|
+
width: 100% ;
|
|
37
|
+
max-width: 43.75rem;
|
|
38
|
+
border-radius: 5px;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as AttachmentPreview } from "./AttachmentPreview";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** ** Constants *** */
|
|
2
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
3
|
+
const attachmentPreviewDefaultProps = {
|
|
4
|
+
customStyle: dummyObject,
|
|
5
|
+
needCloseOnEscape: true,
|
|
6
|
+
needUploadOnEnter: true,
|
|
7
|
+
needAutoZindex: true
|
|
8
|
+
};
|
|
9
|
+
export default attachmentPreviewDefaultProps;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
const attachmentPreviewPropTypes = {
|
|
4
|
+
customStyle: PropTypes.object,
|
|
5
|
+
isDescriptionNeeded: PropTypes.bool,
|
|
6
|
+
files: PropTypes.arrayOf(PropTypes.shape({
|
|
7
|
+
id: PropTypes.string,
|
|
8
|
+
name: PropTypes.string,
|
|
9
|
+
size: PropTypes.string,
|
|
10
|
+
type: PropTypes.string,
|
|
11
|
+
url: PropTypes.string
|
|
12
|
+
})).isRequired,
|
|
13
|
+
customProps: PropTypes.shape({
|
|
14
|
+
attachmentIconProps: PropTypes.object,
|
|
15
|
+
cancelButtonProps: PropTypes.object,
|
|
16
|
+
editorProps: PropTypes.object,
|
|
17
|
+
submitButtonProps: PropTypes.object
|
|
18
|
+
}),
|
|
19
|
+
onSubmit: PropTypes.func,
|
|
20
|
+
onCancel: PropTypes.func,
|
|
21
|
+
texts: PropTypes.shape({
|
|
22
|
+
cancelText: PropTypes.string,
|
|
23
|
+
editText: PropTypes.string,
|
|
24
|
+
placeHolder: PropTypes.string,
|
|
25
|
+
submitText: PropTypes.string
|
|
26
|
+
}).isRequired,
|
|
27
|
+
descriptionDetails: PropTypes.object,
|
|
28
|
+
onDescriptionChange: PropTypes.func,
|
|
29
|
+
needCloseOnEscape: PropTypes.bool,
|
|
30
|
+
needUploadOnEnter: PropTypes.bool,
|
|
31
|
+
needAutoZindex: PropTypes.bool
|
|
32
|
+
};
|
|
33
|
+
export default attachmentPreviewPropTypes;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
/** ** Components *** */
|
|
4
|
+
|
|
5
|
+
import { Container } from '@zohodesk/components/es/Layout';
|
|
6
|
+
import ReplyComposer from "../im/ReplyComposer/ReplyComposer";
|
|
7
|
+
import AttachmentIcon from "../AttachmentIcon/AttachmentIcon";
|
|
8
|
+
/** ** Hooks *** */
|
|
9
|
+
|
|
10
|
+
import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
|
|
11
|
+
/** ** Constants *** */
|
|
12
|
+
|
|
13
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
14
|
+
import attachmentPreviewBodyDefaultProps from "./props/defaultProps";
|
|
15
|
+
import attachmentPreviewBodyPropTypes from "./props/propTypes";
|
|
16
|
+
/** ** Styles *** */
|
|
17
|
+
|
|
18
|
+
import style from "./css/AttachmentPreviewBody.module.css";
|
|
19
|
+
export default function AttachmentPreviewBody(props) {
|
|
20
|
+
const {
|
|
21
|
+
customStyle,
|
|
22
|
+
customProps,
|
|
23
|
+
isImageFile,
|
|
24
|
+
attachmentURL,
|
|
25
|
+
fileFormat,
|
|
26
|
+
mediaType,
|
|
27
|
+
isDescriptionNeeded,
|
|
28
|
+
description,
|
|
29
|
+
attachmentId,
|
|
30
|
+
onDescriptionChange,
|
|
31
|
+
onEditorKeyDown,
|
|
32
|
+
placeHolder,
|
|
33
|
+
editorProps
|
|
34
|
+
} = props;
|
|
35
|
+
const {
|
|
36
|
+
attachmentIconProps = dummyObject
|
|
37
|
+
} = customProps || {};
|
|
38
|
+
/* External customization */
|
|
39
|
+
|
|
40
|
+
const newStyle = useMergeStyle(style, customStyle);
|
|
41
|
+
const iconCustomStyle = useMemo(() => ({
|
|
42
|
+
icon: newStyle.attachmentIcon
|
|
43
|
+
}), [newStyle.attachmentIcon]);
|
|
44
|
+
const modifiedEditorProps = useMemo(() => {
|
|
45
|
+
const {
|
|
46
|
+
customProps,
|
|
47
|
+
customStyle: replyComposerCustomStyle
|
|
48
|
+
} = editorProps || dummyObject;
|
|
49
|
+
const {
|
|
50
|
+
replyEditorProps
|
|
51
|
+
} = customProps || dummyObject;
|
|
52
|
+
const {
|
|
53
|
+
customStyle = dummyObject
|
|
54
|
+
} = replyEditorProps || dummyObject;
|
|
55
|
+
return { ...editorProps,
|
|
56
|
+
customStyle: {
|
|
57
|
+
replyComposer: newStyle.replyComposer,
|
|
58
|
+
...replyComposerCustomStyle
|
|
59
|
+
},
|
|
60
|
+
customProps: { ...customProps,
|
|
61
|
+
replyEditorProps: { ...replyEditorProps,
|
|
62
|
+
customStyle: {
|
|
63
|
+
editorWrapper: newStyle.editorWrapper,
|
|
64
|
+
editableDiv: newStyle.editableDiv,
|
|
65
|
+
...customStyle
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}, [editorProps, newStyle.replyComposer, newStyle.editorWrapper, newStyle.editableDiv]);
|
|
71
|
+
return /*#__PURE__*/React.createElement(Container, {
|
|
72
|
+
align: "both",
|
|
73
|
+
alignBox: "column",
|
|
74
|
+
className: `${newStyle.zoomContent} ${newStyle.imgContent}`
|
|
75
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
76
|
+
className: newStyle.fileContainer
|
|
77
|
+
}, isImageFile ? /*#__PURE__*/React.createElement("img", {
|
|
78
|
+
alt: "",
|
|
79
|
+
className: newStyle.imgZoomOut,
|
|
80
|
+
src: attachmentURL
|
|
81
|
+
}) : /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(AttachmentIcon, {
|
|
82
|
+
customStyle: iconCustomStyle,
|
|
83
|
+
fileFormat: fileFormat,
|
|
84
|
+
mediaType: mediaType,
|
|
85
|
+
...attachmentIconProps
|
|
86
|
+
}))), isDescriptionNeeded ? /*#__PURE__*/React.createElement(ReplyComposer, {
|
|
87
|
+
content: description,
|
|
88
|
+
id: `${attachmentId}_Attach_Editor`,
|
|
89
|
+
onChange: onDescriptionChange,
|
|
90
|
+
onKeyDown: onEditorKeyDown,
|
|
91
|
+
placeHolder: placeHolder,
|
|
92
|
+
...modifiedEditorProps
|
|
93
|
+
}) : null);
|
|
94
|
+
}
|
|
95
|
+
AttachmentPreviewBody.propTypes = attachmentPreviewBodyPropTypes;
|
|
96
|
+
AttachmentPreviewBody.defaultProps = attachmentPreviewBodyDefaultProps;
|
|
97
|
+
AttachmentPreviewBody.displayName = 'AttachmentPreviewBody';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** ** Styles *** */
|
|
2
|
+
.attachmentIcon {
|
|
3
|
+
width: var(--zd_size60) !important;
|
|
4
|
+
height: var(--zd_size60) !important;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.replyComposer {
|
|
8
|
+
width: 100% ;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.editorWrapper {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
height: 100% ;
|
|
15
|
+
width: 100% ;
|
|
16
|
+
padding: 0 ;
|
|
17
|
+
margin-top: var(--zd_size40) ;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.editableDiv {
|
|
21
|
+
min-height: var(--zd_size48) !important;
|
|
22
|
+
max-height: var(--zd_size48) !important;
|
|
23
|
+
background-color: transparent !important;
|
|
24
|
+
border: 0 !important;
|
|
25
|
+
border-bottom: 1px solid
|
|
26
|
+
var(--imlib_chat_components_attachmentPreviewBody_editor_border_color) !important;
|
|
27
|
+
padding: 0 !important;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.editableDiv:hover {
|
|
31
|
+
border-color: var(
|
|
32
|
+
--imlib_chat_components_attachmentPreviewBody_editor_border_hover_color
|
|
33
|
+
) !important;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.editableDiv:focus {
|
|
37
|
+
border-color: var(
|
|
38
|
+
--imlib_chat_components_attachmentPreviewBody_editor_border_active_color
|
|
39
|
+
) !important;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.imgContent,
|
|
43
|
+
.zoomContent {
|
|
44
|
+
overflow: auto;
|
|
45
|
+
position: relative;
|
|
46
|
+
box-sizing: border-box;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.imgContent, .zoomContent {
|
|
50
|
+
background-color: var(--imlib_chat_components_attachmentPreviewBody_bg_color);
|
|
51
|
+
padding: var(--zd_size40);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
[dir=ltr] .imgContent, [dir=ltr] .zoomContent {
|
|
55
|
+
border-bottom-left-radius: var(--zd_size5);
|
|
56
|
+
border-bottom-right-radius: var(--zd_size5);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
[dir=rtl] .imgContent, [dir=rtl] .zoomContent {
|
|
60
|
+
border-bottom-right-radius: var(--zd_size5);
|
|
61
|
+
border-bottom-left-radius: var(--zd_size5);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.fileContainer {
|
|
65
|
+
height: var(--zd_size225);
|
|
66
|
+
composes: dflex from '~@zohodesk/components/es/common/common.module.css';
|
|
67
|
+
composes: alignVertical from '~@zohodesk/components/es/common/common.module.css';
|
|
68
|
+
composes: alignHorizontal from '~@zohodesk/components/es/common/common.module.css';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.imgZoomOut {
|
|
72
|
+
width: auto ;
|
|
73
|
+
max-width: 100% ;
|
|
74
|
+
max-height: 100% ;
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as AttachmentPreviewBody } from "./AttachmentPreviewBody";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
const attachmentPreviewBodyPropTypes = {
|
|
4
|
+
customStyle: PropTypes.object,
|
|
5
|
+
customProps: PropTypes.shape({
|
|
6
|
+
attachmentIconProps: PropTypes.object
|
|
7
|
+
}),
|
|
8
|
+
isImageFile: PropTypes.bool,
|
|
9
|
+
attachmentURL: PropTypes.string,
|
|
10
|
+
fileFormat: PropTypes.string,
|
|
11
|
+
mediaType: PropTypes.string,
|
|
12
|
+
isDescriptionNeeded: PropTypes.bool,
|
|
13
|
+
description: PropTypes.string,
|
|
14
|
+
attachmentId: PropTypes.string,
|
|
15
|
+
onDescriptionChange: PropTypes.func,
|
|
16
|
+
onEditorKeyDown: PropTypes.func,
|
|
17
|
+
placeHolder: PropTypes.string,
|
|
18
|
+
editorProps: PropTypes.object
|
|
19
|
+
};
|
|
20
|
+
export default attachmentPreviewBodyPropTypes;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** ** Libraries *** */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
/** ** Components *** */
|
|
4
|
+
|
|
5
|
+
import { Container, Box } from '@zohodesk/components/es/Layout';
|
|
6
|
+
import Button from '@zohodesk/components/es/Button/Button';
|
|
7
|
+
/** ** Hooks *** */
|
|
8
|
+
|
|
9
|
+
import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
|
|
10
|
+
/** ** Constants *** */
|
|
11
|
+
|
|
12
|
+
import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
|
|
13
|
+
import attachmentPreviewHeaderDefaultProps from "./props/defaultProps";
|
|
14
|
+
import attachmentPreviewHeaderPropTypes from "./props/propTypes";
|
|
15
|
+
/** ** Styles *** */
|
|
16
|
+
|
|
17
|
+
import style from "./css/AttachmentPreviewHeader.module.css";
|
|
18
|
+
export default function AttachmentPreviewHeader(props) {
|
|
19
|
+
const {
|
|
20
|
+
customStyle,
|
|
21
|
+
fileName,
|
|
22
|
+
fileSize,
|
|
23
|
+
submitText,
|
|
24
|
+
cancelText,
|
|
25
|
+
onSubmit,
|
|
26
|
+
onCancel,
|
|
27
|
+
customProps
|
|
28
|
+
} = props;
|
|
29
|
+
const {
|
|
30
|
+
submitButtonProps = dummyObject,
|
|
31
|
+
cancelButtonProps = dummyObject
|
|
32
|
+
} = customProps || {};
|
|
33
|
+
/* External customization */
|
|
34
|
+
|
|
35
|
+
const newStyle = useMergeStyle(style, customStyle);
|
|
36
|
+
return /*#__PURE__*/React.createElement(Container, {
|
|
37
|
+
align: "vertical",
|
|
38
|
+
alignBox: "row",
|
|
39
|
+
className: newStyle.imgPreviewerheader,
|
|
40
|
+
isCover: false
|
|
41
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
42
|
+
flexible: true
|
|
43
|
+
}, /*#__PURE__*/React.createElement(Container, {
|
|
44
|
+
align: "vertical",
|
|
45
|
+
alignBox: "row"
|
|
46
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
47
|
+
flexible: true
|
|
48
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
49
|
+
className: newStyle.imgName,
|
|
50
|
+
title: fileName
|
|
51
|
+
}, fileName), /*#__PURE__*/React.createElement("div", {
|
|
52
|
+
className: newStyle.imgSize
|
|
53
|
+
}, fileSize)))), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Container, {
|
|
54
|
+
align: "vertical",
|
|
55
|
+
alignBox: "row",
|
|
56
|
+
className: newStyle.navIcon,
|
|
57
|
+
isCover: false
|
|
58
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
59
|
+
className: newStyle.attachBtn
|
|
60
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
61
|
+
disabled: false,
|
|
62
|
+
isBold: true,
|
|
63
|
+
onClick: onSubmit,
|
|
64
|
+
palette: "primaryFilled",
|
|
65
|
+
rounded: false,
|
|
66
|
+
size: "medium",
|
|
67
|
+
status: "none",
|
|
68
|
+
text: submitText,
|
|
69
|
+
...submitButtonProps
|
|
70
|
+
})), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
|
|
71
|
+
disabled: false,
|
|
72
|
+
isBold: true,
|
|
73
|
+
onClick: onCancel,
|
|
74
|
+
palette: "secondary",
|
|
75
|
+
rounded: false,
|
|
76
|
+
size: "medium",
|
|
77
|
+
status: "none",
|
|
78
|
+
text: cancelText,
|
|
79
|
+
...cancelButtonProps
|
|
80
|
+
})))));
|
|
81
|
+
}
|
|
82
|
+
AttachmentPreviewHeader.propTypes = attachmentPreviewHeaderPropTypes;
|
|
83
|
+
AttachmentPreviewHeader.defaultProps = attachmentPreviewHeaderDefaultProps;
|
|
84
|
+
AttachmentPreviewHeader.displayName = 'AttachmentPreviewHeader';
|