@flozy/editor 11.0.3 → 11.0.4
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/dist/Editor/ChatEditor.js +17 -16
- package/dist/Editor/CommonEditor.js +129 -16
- package/dist/Editor/DialogWrapper.js +31 -25
- package/dist/Editor/Editor.css +36 -8
- package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
- package/dist/Editor/Elements/AI/Styles.js +1 -0
- package/dist/Editor/Elements/Accordion/Accordion.js +28 -22
- package/dist/Editor/Elements/Accordion/AccordionButton.js +12 -3
- package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
- package/dist/Editor/Elements/Attachments/AttachmentStyles.js +16 -0
- package/dist/Editor/Elements/Attachments/Attachments.js +153 -11
- package/dist/Editor/Elements/Attachments/AttachmentsButton.js +8 -3
- package/dist/Editor/Elements/Button/EditorButton.js +23 -7
- package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
- package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
- package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
- package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
- package/dist/Editor/Elements/Embed/Embed.js +36 -43
- package/dist/Editor/Elements/Embed/Image.js +236 -23
- package/dist/Editor/Elements/Embed/Video.js +245 -15
- package/dist/Editor/Elements/Form/Form.js +16 -10
- package/dist/Editor/Elements/Form/FormField.js +1 -1
- package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
- package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
- package/dist/Editor/Elements/FreeGrid/FreeGrid.js +31 -74
- package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +9 -5
- package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
- package/dist/Editor/Elements/FreeGrid/Options/More.js +7 -7
- package/dist/Editor/Elements/FreeGrid/helper.js +194 -0
- package/dist/Editor/Elements/FreeGrid/styles.js +15 -0
- package/dist/Editor/Elements/Grid/GridItem.js +1 -1
- package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
- package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +3 -2
- package/dist/Editor/Elements/Signature/SignaturePopup.js +15 -5
- package/dist/Editor/Elements/SimpleText/style.js +2 -2
- package/dist/Editor/Elements/Table/Table.js +3 -3
- package/dist/Editor/Elements/Title/title.js +6 -6
- package/dist/Editor/Elements/TopBanner/TopBanner.js +4 -2
- package/dist/Editor/Elements/TopBanner/TopBannerButton.js +5 -3
- package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
- package/dist/Editor/MiniEditor.js +2 -1
- package/dist/Editor/Styles/EditorStyles.js +19 -4
- package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
- package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
- package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
- package/dist/Editor/Toolbar/FormatTools/TextSize.js +33 -29
- package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +25 -23
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +25 -7
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +24 -8
- package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +70 -10
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +73 -14
- package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
- package/dist/Editor/Toolbar/PopupTool/index.js +4 -3
- package/dist/Editor/Toolbar/toolbarGroups.js +56 -10
- package/dist/Editor/assets/svg/BackIcon.js +18 -0
- package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
- package/dist/Editor/common/ColorPickerButton.js +38 -16
- package/dist/Editor/common/CustomColorPicker/index.js +130 -0
- package/dist/Editor/common/CustomColorPicker/style.js +53 -0
- package/dist/Editor/common/CustomDialog2/index.js +94 -0
- package/dist/Editor/common/CustomDialog2/style.js +67 -0
- package/dist/Editor/common/CustomSelect.js +43 -0
- package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
- package/dist/Editor/common/FontLoader/FontLoader.js +4 -0
- package/dist/Editor/common/Icon.js +28 -0
- package/dist/Editor/common/ImageSelector/ImageSelector.js +45 -7
- package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
- package/dist/Editor/common/ImageSelector/Styles.js +3 -9
- package/dist/Editor/common/LinkSettings/NavComponents.js +6 -2
- package/dist/Editor/common/MentionsPopup/index.js +9 -1
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
- package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
- package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +9 -1
- package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
- package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +11 -2
- package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
- package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
- package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -11
- package/dist/Editor/common/RnD/Utils/index.js +3 -1
- package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +52 -63
- package/dist/Editor/common/RnD/VirtualElement/helper.js +320 -130
- package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
- package/dist/Editor/common/RnD/index.js +61 -14
- package/dist/Editor/common/Shorthands/elements.js +62 -4
- package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
- package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +15 -2
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
- package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
- package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
- package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
- package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
- package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
- package/dist/Editor/common/StyleBuilder/index.js +8 -4
- package/dist/Editor/common/Uploader.js +125 -17
- package/dist/Editor/common/UploaderWithProgress.js +183 -0
- package/dist/Editor/common/iconslist.js +21 -0
- package/dist/Editor/commonStyle.js +67 -18
- package/dist/Editor/helper/index.js +10 -2
- package/dist/Editor/helper/textIndeces.js +58 -0
- package/dist/Editor/helper/theme.js +203 -2
- package/dist/Editor/hooks/useEditorTheme.js +153 -0
- package/dist/Editor/hooks/useMouseMove.js +9 -3
- package/dist/Editor/hooks/useThemeValues.js +63 -0
- package/dist/Editor/plugins/withEmbeds.js +12 -1
- package/dist/Editor/plugins/withHTML.js +3 -1
- package/dist/Editor/plugins/withTable.js +1 -1
- package/dist/Editor/service/fileupload.js +70 -0
- package/dist/Editor/theme/ThemeList.js +50 -173
- package/dist/Editor/theme/index.js +149 -0
- package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
- package/dist/Editor/themeSettings/buttons/index.js +300 -0
- package/dist/Editor/themeSettings/buttons/style.js +23 -0
- package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
- package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
- package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
- package/dist/Editor/themeSettings/fonts/index.js +240 -0
- package/dist/Editor/themeSettings/fonts/style.js +62 -0
- package/dist/Editor/themeSettings/icons.js +60 -0
- package/dist/Editor/themeSettings/index.js +380 -0
- package/dist/Editor/themeSettings/style.js +299 -0
- package/dist/Editor/themeSettingsAI/icons.js +96 -0
- package/dist/Editor/themeSettingsAI/index.js +355 -0
- package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
- package/dist/Editor/themeSettingsAI/style.js +332 -0
- package/dist/Editor/utils/SlateUtilityFunctions.js +191 -40
- package/dist/Editor/utils/accordion.js +67 -39
- package/dist/Editor/utils/button.js +1 -17
- package/dist/Editor/utils/draftToSlate.js +3 -2
- package/dist/Editor/utils/events.js +94 -89
- package/dist/Editor/utils/font.js +40 -37
- package/dist/Editor/utils/helper.js +98 -22
- package/package.json +4 -4
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +0 -454
@@ -1,13 +1,14 @@
|
|
1
1
|
import React, { useState } from "react";
|
2
2
|
import { ReactEditor } from "slate-react";
|
3
|
-
import
|
4
|
-
import { IconButton, Tooltip, Box, Popover } from "@mui/material";
|
3
|
+
import { IconButton, Tooltip, Box, Popover, useTheme } from "@mui/material";
|
5
4
|
import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions";
|
6
5
|
import ColorButtons from "./ColorButtons";
|
7
6
|
import ColorPickerStyles from "./Styles";
|
8
7
|
import colorWheel from "./colorWheel.png";
|
9
8
|
import "./ColorPicker.css";
|
10
9
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
10
|
+
import CustomColorPicker from "../../common/CustomColorPicker";
|
11
|
+
import { getSelectedElementColor } from "../../utils/helper";
|
11
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
12
13
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
13
14
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
@@ -25,7 +26,8 @@ const ColorPicker = props => {
|
|
25
26
|
classes,
|
26
27
|
forMiniTool,
|
27
28
|
openColorTool,
|
28
|
-
closeColorTool
|
29
|
+
closeColorTool,
|
30
|
+
type
|
29
31
|
} = props;
|
30
32
|
const {
|
31
33
|
theme
|
@@ -34,6 +36,7 @@ const ColorPicker = props => {
|
|
34
36
|
const [anchorEl, setAnchorEl] = useState(null);
|
35
37
|
const open = Boolean(anchorEl);
|
36
38
|
const pickerStyles = ColorPickerStyles(theme);
|
39
|
+
const muiTheme = useTheme();
|
37
40
|
const onOpen = e => {
|
38
41
|
e.preventDefault();
|
39
42
|
setAnchorEl(e.currentTarget);
|
@@ -58,7 +61,7 @@ const ColorPicker = props => {
|
|
58
61
|
setAnchorEl(null);
|
59
62
|
setSelection(null);
|
60
63
|
};
|
61
|
-
const activeColor = activeMark(editor, format) || DEFAULT_COLOR[format];
|
64
|
+
const activeColor = type === "textColor" ? getSelectedElementColor(editor, format, muiTheme) : activeMark(editor, format) || DEFAULT_COLOR[format];
|
62
65
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
63
66
|
children: [forMiniTool ? null : /*#__PURE__*/_jsx(Tooltip, {
|
64
67
|
title: title,
|
@@ -96,10 +99,10 @@ const ColorPicker = props => {
|
|
96
99
|
horizontal: "top"
|
97
100
|
},
|
98
101
|
sx: classes.colorPickerPopup,
|
99
|
-
children: /*#__PURE__*/_jsx(
|
102
|
+
children: /*#__PURE__*/_jsx(CustomColorPicker, {
|
100
103
|
gradient: true,
|
101
|
-
|
102
|
-
|
104
|
+
onChange: handleFormSubmit,
|
105
|
+
color: activeColor
|
103
106
|
})
|
104
107
|
})]
|
105
108
|
});
|
@@ -20,24 +20,26 @@ const ColorPickerStyles = theme => ({
|
|
20
20
|
background: `${theme?.palette?.editor?.miniToolBarBackground}`,
|
21
21
|
border: `1px solid ${theme?.palette?.editor?.miniToolBarBorder} !important`,
|
22
22
|
borderRadius: "7px !important",
|
23
|
-
padding: "0px
|
24
|
-
|
23
|
+
padding: "0px 10px",
|
24
|
+
"@media only screen and (max-width: 600px)": {
|
25
25
|
marginTop: "-40px"
|
26
26
|
}
|
27
27
|
}
|
28
28
|
},
|
29
29
|
colorButtonSingle: {
|
30
|
+
border: "1.5px solid #DCE4EC !important",
|
30
31
|
"&.active": {
|
31
|
-
"&:before": {
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
32
|
+
// "&:before": {
|
33
|
+
// content: '" "',
|
34
|
+
// position: "absolute",
|
35
|
+
// top: "-4px",
|
36
|
+
// left: "-4px",
|
37
|
+
// width: "calc(100% + 8px)",
|
38
|
+
// height: "calc(100% + 8px)",
|
39
|
+
// border: "2px solid #2563EB",
|
40
|
+
// borderRadius: "50%",
|
41
|
+
// },
|
42
|
+
outline: "2px solid #2563EB"
|
41
43
|
}
|
42
44
|
},
|
43
45
|
colorButtonsInner: {
|
@@ -59,7 +61,7 @@ const ColorPickerStyles = theme => ({
|
|
59
61
|
width: "24px",
|
60
62
|
height: "24px",
|
61
63
|
margin: "0px 4px",
|
62
|
-
border: "
|
64
|
+
border: "1.5px solid #DCE4EC"
|
63
65
|
}
|
64
66
|
},
|
65
67
|
colorPickerIcon: {
|
@@ -1,5 +1,4 @@
|
|
1
|
-
import React, { useState } from "react";
|
2
|
-
import { Transforms } from "slate";
|
1
|
+
import React, { useRef, useState } from "react";
|
3
2
|
import { ReactEditor } from "slate-react";
|
4
3
|
import Icon from "../../common/Icon";
|
5
4
|
import { isBlockActive } from "../../utils/SlateUtilityFunctions";
|
@@ -22,55 +21,45 @@ const Embed = ({
|
|
22
21
|
customProps,
|
23
22
|
icoBtnType
|
24
23
|
}) => {
|
25
|
-
const [
|
26
|
-
const [formData, setFormData] = useState({
|
27
|
-
url: "",
|
28
|
-
alt: "",
|
29
|
-
images: []
|
30
|
-
});
|
24
|
+
const [openSetttings, setUploadPopupOpen] = useState(false);
|
31
25
|
const [selection, setSelection] = useState();
|
32
26
|
const {
|
33
27
|
translation
|
34
28
|
} = customProps;
|
35
|
-
const
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
setFormData({
|
43
|
-
url: "",
|
44
|
-
alt: ""
|
45
|
-
});
|
46
|
-
}
|
47
|
-
handleClose();
|
48
|
-
};
|
29
|
+
const [uploadStatus, setUploadStatus] = useState({
|
30
|
+
isUploading: false,
|
31
|
+
uploadPercentage: 0,
|
32
|
+
fileName: null,
|
33
|
+
fileSize: null
|
34
|
+
});
|
35
|
+
const xhrRef = useRef(null);
|
49
36
|
const onToggle = e => {
|
50
37
|
e.preventDefault();
|
51
38
|
setSelection(editor.selection);
|
52
39
|
selection && ReactEditor.focus(editor);
|
53
|
-
|
40
|
+
setUploadPopupOpen(true);
|
54
41
|
};
|
55
42
|
const handleClose = () => {
|
56
|
-
|
43
|
+
setUploadPopupOpen(false);
|
57
44
|
};
|
58
|
-
const onSelectImage = img => {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
45
|
+
const onSelectImage = async img => {
|
46
|
+
if (img?.isUpload === false) {
|
47
|
+
insertEmbed(editor, {
|
48
|
+
url: img.embedURL,
|
49
|
+
isUploading: false,
|
50
|
+
isUpload: false
|
51
|
+
}, format);
|
52
|
+
} else {
|
53
|
+
insertEmbed(editor, {
|
54
|
+
url: "",
|
55
|
+
file: img.file,
|
56
|
+
isUploading: true,
|
57
|
+
isUpload: true,
|
58
|
+
fileName: img.file?.name,
|
59
|
+
fileSize: img.file?.size,
|
60
|
+
mimeType: img.file?.type
|
61
|
+
}, format);
|
69
62
|
}
|
70
|
-
handleFormSubmit({
|
71
|
-
...fd,
|
72
|
-
...extProps
|
73
|
-
});
|
74
63
|
};
|
75
64
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
76
65
|
children: [/*#__PURE__*/_jsx(ToolbarIcon, {
|
@@ -82,13 +71,17 @@ const Embed = ({
|
|
82
71
|
}),
|
83
72
|
icoBtnType: icoBtnType
|
84
73
|
}), /*#__PURE__*/_jsx(ImageSelector, {
|
85
|
-
open:
|
74
|
+
open: openSetttings,
|
86
75
|
onClose: handleClose,
|
87
76
|
customProps: customProps,
|
88
77
|
onSelectImage: onSelectImage,
|
89
|
-
title: EMBED_LABEL[lbT || format]
|
78
|
+
title: EMBED_LABEL[lbT || format],
|
79
|
+
setUploadStatus: setUploadStatus,
|
80
|
+
uploadStatus: uploadStatus,
|
81
|
+
xhrRef: xhrRef,
|
82
|
+
setUploadPopupOpen: setUploadPopupOpen,
|
83
|
+
fromEmbed: true
|
90
84
|
})]
|
91
85
|
});
|
92
86
|
};
|
93
|
-
export default Embed;
|
94
|
-
// export default styled(commonStyle)(Embed);
|
87
|
+
export default Embed;
|
@@ -1,10 +1,17 @@
|
|
1
|
-
import React, { useEffect, useState } from "react";
|
1
|
+
import React, { useEffect, useRef, useState } from "react";
|
2
2
|
import { useSlateStatic, ReactEditor } from "slate-react";
|
3
3
|
import { Node, Transforms, Editor } from "slate";
|
4
4
|
import AspectRatioIcon from "@mui/icons-material/AspectRatio";
|
5
|
+
import IconButton from "@mui/material/IconButton";
|
6
|
+
import Tooltip from "@mui/material/Tooltip";
|
7
|
+
import Box from "@mui/material/Box";
|
8
|
+
import useTheme from "@mui/material/styles/useTheme";
|
9
|
+
import useMediaQuery from "@mui/material/useMediaQuery";
|
10
|
+
import Grid from "@mui/material/Grid";
|
11
|
+
import CircularProgress from "@mui/material/CircularProgress";
|
12
|
+
import HighlightOffRoundedIcon from "@mui/icons-material/HighlightOffRounded";
|
5
13
|
import useResize from "../../utils/customHooks/useResize";
|
6
14
|
import EmbedPopup from "./EmbedPopup";
|
7
|
-
import { IconButton, Tooltip, Box, useTheme, useMediaQuery } from "@mui/material";
|
8
15
|
import { LinkIcon } from "../../common/iconslist";
|
9
16
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
10
17
|
import { getTRBLBreakPoints, getBreakPointsValue, groupByBreakpoint } from "../../helper/theme";
|
@@ -16,8 +23,11 @@ import { handleLinkType } from "../../utils/helper";
|
|
16
23
|
import { wrapThemeBreakpoints } from "../FreeGrid/breakpointConstants";
|
17
24
|
import useCommonStyle from "../../commonStyle";
|
18
25
|
import SettingsIcon from "../../assets/svg/SettingsIcon";
|
26
|
+
import ImageSelector from "../../common/ImageSelector/ImageSelector";
|
27
|
+
import { buildUpdateData } from "../../service/fileupload";
|
19
28
|
import { jsx as _jsx } from "react/jsx-runtime";
|
20
29
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
30
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
21
31
|
const ToolBar = ({
|
22
32
|
isEmpty,
|
23
33
|
onSettings,
|
@@ -67,27 +77,105 @@ const ImageContent = props => {
|
|
67
77
|
objectFit,
|
68
78
|
webAddress,
|
69
79
|
readOnly,
|
70
|
-
setOpenSettings,
|
71
80
|
handleImageClick,
|
72
81
|
onTouchEnd,
|
73
82
|
path,
|
74
83
|
theme,
|
75
84
|
classes,
|
76
|
-
translation
|
85
|
+
translation,
|
86
|
+
setUploadPopupOpen,
|
87
|
+
uploadStatus,
|
88
|
+
setUploadStatus,
|
89
|
+
uniqueId,
|
90
|
+
uploadTerminator,
|
91
|
+
editor
|
77
92
|
} = props;
|
78
|
-
|
93
|
+
const cancelUpload = e => {
|
94
|
+
e.stopPropagation();
|
95
|
+
uploadTerminator(uniqueId, setUploadStatus);
|
96
|
+
Transforms.setNodes(editor, {
|
97
|
+
isUpload: false,
|
98
|
+
isUploading: false,
|
99
|
+
file: null
|
100
|
+
}, {
|
101
|
+
at: path
|
102
|
+
});
|
103
|
+
};
|
104
|
+
return !url ? !readOnly ? /*#__PURE__*/_jsx(Box, {
|
79
105
|
component: "button",
|
80
106
|
className: "element-empty-btn",
|
81
107
|
contentEditable: false,
|
82
108
|
onClick: () => {
|
83
|
-
|
109
|
+
if (!uploadStatus?.isUploading) setUploadPopupOpen(true);
|
84
110
|
},
|
85
111
|
sx: {
|
86
112
|
...classes.emptyThumbBtn
|
87
113
|
},
|
88
|
-
children:
|
89
|
-
|
90
|
-
|
114
|
+
children: uploadStatus?.isUploading ? /*#__PURE__*/_jsxs(Grid, {
|
115
|
+
container: true,
|
116
|
+
direction: "row",
|
117
|
+
sx: {
|
118
|
+
justifyContent: "space-between",
|
119
|
+
alignItems: "center"
|
120
|
+
},
|
121
|
+
children: [/*#__PURE__*/_jsx(Grid, {
|
122
|
+
children: /*#__PURE__*/_jsxs(Grid, {
|
123
|
+
container: true,
|
124
|
+
direction: "row",
|
125
|
+
sx: {
|
126
|
+
justifyContent: "space-between",
|
127
|
+
alignItems: "center",
|
128
|
+
gap: 1
|
129
|
+
},
|
130
|
+
children: [/*#__PURE__*/_jsx(Grid, {
|
131
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
132
|
+
icon: "image"
|
133
|
+
})
|
134
|
+
}), /*#__PURE__*/_jsx(Grid, {
|
135
|
+
children: /*#__PURE__*/_jsxs(Box, {
|
136
|
+
display: "flex",
|
137
|
+
flexDirection: "column",
|
138
|
+
alignItems: "flex-start",
|
139
|
+
justifyContent: "space-between",
|
140
|
+
children: [/*#__PURE__*/_jsx(Box, {
|
141
|
+
className: "truncateText",
|
142
|
+
children: uploadStatus?.fileName
|
143
|
+
}), /*#__PURE__*/_jsxs(Box, {
|
144
|
+
display: "flex",
|
145
|
+
alignItems: "center",
|
146
|
+
gap: 1,
|
147
|
+
marginTop: 1,
|
148
|
+
children: [/*#__PURE__*/_jsx(Box, {
|
149
|
+
children: uploadStatus?.fileSize
|
150
|
+
}), /*#__PURE__*/_jsx(CircularProgress, {
|
151
|
+
variant: "determinate",
|
152
|
+
value: uploadStatus?.uploadPercentage ?? 0,
|
153
|
+
className: "circularProgress-cls",
|
154
|
+
size: 15,
|
155
|
+
thickness: 8
|
156
|
+
}), /*#__PURE__*/_jsx(Box, {
|
157
|
+
children: `${uploadStatus?.uploadPercentage?.toFixed(0) ?? 0}%`
|
158
|
+
})]
|
159
|
+
})]
|
160
|
+
})
|
161
|
+
})]
|
162
|
+
})
|
163
|
+
}), /*#__PURE__*/_jsx(Grid, {
|
164
|
+
children: /*#__PURE__*/_jsx(HighlightOffRoundedIcon, {
|
165
|
+
className: "uploadCancel",
|
166
|
+
sx: {
|
167
|
+
cursor: "pointer"
|
168
|
+
},
|
169
|
+
onClick: e => {
|
170
|
+
cancelUpload(e);
|
171
|
+
}
|
172
|
+
})
|
173
|
+
})]
|
174
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
175
|
+
children: [/*#__PURE__*/_jsx(Icon, {
|
176
|
+
icon: "image"
|
177
|
+
}), translation("Add Image")]
|
178
|
+
})
|
91
179
|
}) : /*#__PURE__*/_jsxs(Box, {
|
92
180
|
sx: {
|
93
181
|
color: "#64748B !important",
|
@@ -143,11 +231,20 @@ const Image = props => {
|
|
143
231
|
webAddress,
|
144
232
|
isNewTab,
|
145
233
|
linkType,
|
146
|
-
framePos
|
234
|
+
framePos,
|
235
|
+
file,
|
236
|
+
isUploading,
|
237
|
+
uniqueId,
|
238
|
+
fromFreeGrid
|
147
239
|
} = element;
|
148
240
|
const {
|
149
241
|
readOnly,
|
150
|
-
translation
|
242
|
+
translation,
|
243
|
+
services,
|
244
|
+
uploadFile,
|
245
|
+
resumeUploadState,
|
246
|
+
uploadTerminator,
|
247
|
+
isUploadInProgress = () => false
|
151
248
|
} = customProps;
|
152
249
|
const {
|
153
250
|
vertical,
|
@@ -162,6 +259,12 @@ const Image = props => {
|
|
162
259
|
const path = ReactEditor.findPath(editor, element);
|
163
260
|
const [openNav, setOpenNav] = useState(false);
|
164
261
|
const isEmpty = !url && !readOnly;
|
262
|
+
const [openUploadPopup, setUploadPopupOpen] = useState(false);
|
263
|
+
const [uploadStatus, setUploadStatus] = useState({
|
264
|
+
isUploading: false,
|
265
|
+
uploadPercentage: 0
|
266
|
+
});
|
267
|
+
const xhrRef = useRef(null);
|
165
268
|
const getSize = () => {
|
166
269
|
if (element?.size === undefined) {
|
167
270
|
return {
|
@@ -217,32 +320,120 @@ const Image = props => {
|
|
217
320
|
console.log(err);
|
218
321
|
}
|
219
322
|
};
|
323
|
+
const noUploadTracks = () => {
|
324
|
+
setUploadStatus({
|
325
|
+
isUploading: false,
|
326
|
+
uploadPercentage: 0,
|
327
|
+
fileName: null,
|
328
|
+
fileSize: null
|
329
|
+
});
|
330
|
+
Transforms.setNodes(editor, {
|
331
|
+
isUploading: false
|
332
|
+
}, {
|
333
|
+
at: path
|
334
|
+
});
|
335
|
+
};
|
336
|
+
useEffect(() => {
|
337
|
+
const isUploading = isUploadInProgress(uniqueId);
|
338
|
+
if (fromFreeGrid) {
|
339
|
+
if (isUploading) {
|
340
|
+
resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "image");
|
341
|
+
} else {
|
342
|
+
if (!isUploading) {
|
343
|
+
handleImageUpload({
|
344
|
+
file: file
|
345
|
+
});
|
346
|
+
}
|
347
|
+
}
|
348
|
+
}
|
349
|
+
}, [uniqueId, isUploading, file]);
|
220
350
|
useEffect(() => {
|
221
351
|
if (editor && ele && ele[1] !== undefined) {
|
222
352
|
const dom = ReactEditor.toDOMNode(editor, element);
|
223
353
|
setParentDOM(dom);
|
224
354
|
onLoad(getSize());
|
225
355
|
}
|
356
|
+
if (uniqueId && isUploading) {
|
357
|
+
resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "image");
|
358
|
+
} else if (file && isUploading) {
|
359
|
+
handleImageUpload({
|
360
|
+
file: file
|
361
|
+
});
|
362
|
+
}
|
226
363
|
}, []);
|
227
364
|
const onSettings = () => {
|
228
365
|
setOpenSettings(true);
|
229
366
|
};
|
230
367
|
const onSave = data => {
|
231
368
|
try {
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
369
|
+
if (!data?.url?.file) {
|
370
|
+
const updateData = buildUpdateData(data, url);
|
371
|
+
delete updateData.children;
|
372
|
+
Transforms.select(editor, path);
|
373
|
+
ReactEditor.focus(editor);
|
374
|
+
Transforms.setNodes(editor, {
|
375
|
+
...updateData,
|
376
|
+
isUpload: false,
|
377
|
+
isUploading: false,
|
378
|
+
file: null
|
379
|
+
}, {
|
380
|
+
at: path
|
381
|
+
});
|
382
|
+
onClose();
|
383
|
+
} else {
|
384
|
+
handleImageUpload({
|
385
|
+
file: data?.url?.file,
|
386
|
+
isUpload: true,
|
387
|
+
setUploadStatus,
|
388
|
+
services: services
|
389
|
+
});
|
390
|
+
onClose();
|
391
|
+
onSave("");
|
392
|
+
}
|
242
393
|
} catch (err) {
|
243
394
|
console.log(err);
|
244
395
|
}
|
245
396
|
};
|
397
|
+
const handleImageUpload = async uploadProp => {
|
398
|
+
try {
|
399
|
+
if (uploadProp?.isUpload === false) {
|
400
|
+
onSave(uploadProp?.embedURL);
|
401
|
+
} else {
|
402
|
+
const isAlreadyUploading = isUploadInProgress(uniqueId);
|
403
|
+
let result = {};
|
404
|
+
if (uploadProp?.file && !isAlreadyUploading) {
|
405
|
+
result = await services("uploadFile", uploadProp?.file);
|
406
|
+
}
|
407
|
+
const uploadUrl = result?.data?.[0];
|
408
|
+
if (uploadUrl) {
|
409
|
+
const id = !uniqueId ? crypto?.randomUUID() : uniqueId;
|
410
|
+
const fileEntry = {
|
411
|
+
...uploadProp,
|
412
|
+
xhrRef,
|
413
|
+
presidnedURL: uploadUrl,
|
414
|
+
status: "uploading"
|
415
|
+
};
|
416
|
+
uploadFile(id, fileEntry, setUploadStatus, onSave, "image");
|
417
|
+
if (!fromFreeGrid) {
|
418
|
+
Transforms.setNodes(editor, {
|
419
|
+
uniqueId: id,
|
420
|
+
isUploading: true
|
421
|
+
}, {
|
422
|
+
at: path
|
423
|
+
});
|
424
|
+
} else {
|
425
|
+
Transforms.setNodes(editor, {
|
426
|
+
isUploading: true
|
427
|
+
}, {
|
428
|
+
at: path
|
429
|
+
});
|
430
|
+
}
|
431
|
+
}
|
432
|
+
}
|
433
|
+
} catch (error) {
|
434
|
+
console.log(error);
|
435
|
+
}
|
436
|
+
};
|
246
437
|
const onClose = () => {
|
247
438
|
setOpenSettings(false);
|
248
439
|
};
|
@@ -324,7 +515,16 @@ const Image = props => {
|
|
324
515
|
path: path,
|
325
516
|
theme: theme,
|
326
517
|
classes: classes,
|
327
|
-
translation: translation
|
518
|
+
translation: translation,
|
519
|
+
setUploadPopupOpen: setUploadPopupOpen,
|
520
|
+
openUploadPopup: openUploadPopup,
|
521
|
+
uploadStatus: uploadStatus,
|
522
|
+
setUploadStatus: setUploadStatus,
|
523
|
+
xhrRef: xhrRef,
|
524
|
+
onClose: onClose,
|
525
|
+
uniqueId: uniqueId,
|
526
|
+
uploadTerminator: uploadTerminator,
|
527
|
+
editor: editor
|
328
528
|
}), url && frames[frame] ? /*#__PURE__*/_jsx(Box, {
|
329
529
|
component: "div",
|
330
530
|
className: "image-frame",
|
@@ -372,7 +572,20 @@ const Image = props => {
|
|
372
572
|
navValue: webAddress,
|
373
573
|
openInNewTab: isNewTab,
|
374
574
|
customProps: customProps
|
375
|
-
}) : null
|
575
|
+
}) : null, openUploadPopup && /*#__PURE__*/_jsx(ImageSelector, {
|
576
|
+
open: true,
|
577
|
+
title: "Image",
|
578
|
+
onClose: () => setUploadPopupOpen(false),
|
579
|
+
customProps: customProps,
|
580
|
+
onSelectImage: img => {
|
581
|
+
handleImageUpload(img);
|
582
|
+
setUploadPopupOpen(false);
|
583
|
+
},
|
584
|
+
openUploadPopup: openUploadPopup,
|
585
|
+
setUploadPopupOpen: setUploadPopupOpen,
|
586
|
+
setUploadStatus: setUploadStatus,
|
587
|
+
xhrRef: xhrRef
|
588
|
+
})]
|
376
589
|
});
|
377
590
|
};
|
378
591
|
export default Image;
|