@flozy/editor 5.4.3 → 5.4.5

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 (192) hide show
  1. package/dist/Editor/ChatEditor.js +25 -34
  2. package/dist/Editor/CommonEditor.js +29 -15
  3. package/dist/Editor/Editor.css +104 -19
  4. package/dist/Editor/Elements/AI/AIInput.js +0 -1
  5. package/dist/Editor/Elements/AI/CustomSelect.js +17 -10
  6. package/dist/Editor/Elements/AI/PopoverAIInput.js +58 -52
  7. package/dist/Editor/Elements/AI/Styles.js +24 -6
  8. package/dist/Editor/Elements/Accordion/Accordion.js +8 -1
  9. package/dist/Editor/Elements/AppHeader/AppHeader.js +6 -6
  10. package/dist/Editor/Elements/Button/EditorButton.js +9 -2
  11. package/dist/Editor/Elements/Carousel/CarouselItem.js +11 -3
  12. package/dist/Editor/Elements/Color Picker/ColorButtons.js +7 -5
  13. package/dist/Editor/Elements/Color Picker/Styles.js +7 -3
  14. package/dist/Editor/Elements/Color Picker/defaultColors.js +2 -2
  15. package/dist/Editor/Elements/DataView/DataView.js +124 -0
  16. package/dist/Editor/Elements/DataView/DataViewButton.js +23 -0
  17. package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +67 -0
  18. package/dist/Editor/Elements/DataView/Layouts/DataTypes/CheckType.js +33 -0
  19. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +162 -0
  20. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SimpleSelect.js +40 -0
  21. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/styles.js +67 -0
  22. package/dist/Editor/Elements/DataView/Layouts/DataTypes/DateType.js +35 -0
  23. package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +39 -0
  24. package/dist/Editor/Elements/DataView/Layouts/DataTypes/NumberType.js +30 -0
  25. package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +30 -0
  26. package/dist/Editor/Elements/DataView/Layouts/DataTypes/SelectType.js +35 -0
  27. package/dist/Editor/Elements/DataView/Layouts/DataTypes/TextType.js +36 -0
  28. package/dist/Editor/Elements/DataView/Layouts/DataTypes/index.js +17 -0
  29. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseField.js +29 -0
  30. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseSort.js +38 -0
  31. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/index.js +74 -0
  32. package/dist/Editor/Elements/DataView/Layouts/FilterSort/index.js +64 -0
  33. package/dist/Editor/Elements/DataView/Layouts/FilterSort/styles.js +106 -0
  34. package/dist/Editor/Elements/DataView/Layouts/FilterView.js +174 -0
  35. package/dist/Editor/Elements/DataView/Layouts/Formula.js +29 -0
  36. package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +113 -0
  37. package/dist/Editor/Elements/DataView/Layouts/Options/AddProperty.js +37 -0
  38. package/dist/Editor/Elements/DataView/Layouts/Options/AllProperties.js +111 -0
  39. package/dist/Editor/Elements/DataView/Layouts/Options/ChangeProperty.js +60 -0
  40. package/dist/Editor/Elements/DataView/Layouts/Options/ColumnsList.js +36 -0
  41. package/dist/Editor/Elements/DataView/Layouts/Options/Constants.js +101 -0
  42. package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +160 -0
  43. package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +190 -0
  44. package/dist/Editor/Elements/DataView/Layouts/Options/FilterProperty.js +42 -0
  45. package/dist/Editor/Elements/DataView/Layouts/Options/PropertyList.js +30 -0
  46. package/dist/Editor/Elements/DataView/Layouts/Options/index.js +110 -0
  47. package/dist/Editor/Elements/DataView/Layouts/Options/styles.js +179 -0
  48. package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +112 -0
  49. package/dist/Editor/Elements/DataView/Layouts/TableView.js +227 -0
  50. package/dist/Editor/Elements/DataView/Layouts/ViewData.js +80 -0
  51. package/dist/Editor/Elements/DataView/Layouts/colStyles.js +10 -0
  52. package/dist/Editor/Elements/DataView/Layouts/index.js +25 -0
  53. package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +281 -0
  54. package/dist/Editor/Elements/DataView/Utils/globalSearch.js +15 -0
  55. package/dist/Editor/Elements/DataView/Utils/multiSortRows.js +74 -0
  56. package/dist/Editor/Elements/DataView/styles.js +154 -0
  57. package/dist/Editor/Elements/Divider/Divider.js +36 -20
  58. package/dist/Editor/Elements/Embed/Image.js +51 -16
  59. package/dist/Editor/Elements/Embed/Video.js +26 -3
  60. package/dist/Editor/Elements/Form/Form.js +39 -2
  61. package/dist/Editor/Elements/Form/FormElements/FormCheckbox.js +7 -1
  62. package/dist/Editor/Elements/Form/FormElements/FormDate.js +7 -1
  63. package/dist/Editor/Elements/Form/FormElements/FormEmail.js +7 -1
  64. package/dist/Editor/Elements/Form/FormElements/FormNumbers.js +7 -1
  65. package/dist/Editor/Elements/Form/FormElements/FormRadioButton.js +7 -1
  66. package/dist/Editor/Elements/Form/FormElements/FormText.js +7 -1
  67. package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +6 -1
  68. package/dist/Editor/Elements/Form/FormPopup.js +12 -9
  69. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +1 -1
  70. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +20 -1
  71. package/dist/Editor/Elements/FreeGrid/breakpointConstants.js +4 -4
  72. package/dist/Editor/Elements/FreeGrid/styles.js +2 -1
  73. package/dist/Editor/Elements/Grid/GridButton.js +2 -2
  74. package/dist/Editor/Elements/Grid/GridItem.js +47 -36
  75. package/dist/Editor/Elements/Grid/Styles.js +50 -0
  76. package/dist/Editor/Elements/Link/LinkButton.js +1 -1
  77. package/dist/Editor/Elements/List/CheckList.js +2 -1
  78. package/dist/Editor/Elements/Search/SearchAttachment.js +1 -0
  79. package/dist/Editor/Elements/Search/SearchButton.js +1 -0
  80. package/dist/Editor/Elements/Signature/Signature.css +1 -1
  81. package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +2 -2
  82. package/dist/Editor/Elements/Signature/SignaturePopup.js +17 -52
  83. package/dist/Editor/Elements/SimpleText/index.js +11 -3
  84. package/dist/Editor/Elements/SimpleText/style.js +20 -1
  85. package/dist/Editor/Elements/Table/AddRowCol.js +77 -0
  86. package/dist/Editor/Elements/Table/DragButton.js +142 -0
  87. package/dist/Editor/Elements/Table/DragStyles.js +70 -0
  88. package/dist/Editor/Elements/Table/Draggable.js +25 -0
  89. package/dist/Editor/Elements/Table/Droppable.js +53 -0
  90. package/dist/Editor/Elements/Table/Styles.js +88 -78
  91. package/dist/Editor/Elements/Table/Table.js +263 -140
  92. package/dist/Editor/Elements/Table/TableCell.js +365 -111
  93. package/dist/Editor/Elements/Table/TablePopup.js +9 -3
  94. package/dist/Editor/Elements/Table/TableRow.js +10 -2
  95. package/dist/Editor/Elements/Table/TableTool.js +101 -0
  96. package/dist/Editor/Elements/Table/tableHelper.js +71 -0
  97. package/dist/Editor/Elements/TopBanner/TopBanner.js +2 -1
  98. package/dist/Editor/MiniEditor.js +15 -1
  99. package/dist/Editor/Styles/EditorStyles.js +13 -4
  100. package/dist/Editor/Toolbar/FormatTools/BlockButton.js +10 -0
  101. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +7 -12
  102. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +26 -4
  103. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +3 -0
  104. package/dist/Editor/Toolbar/FormatTools/TextSize.js +5 -5
  105. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +3 -6
  106. package/dist/Editor/Toolbar/Mini/Styles.js +4 -1
  107. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/InfinityAITool.js +7 -3
  108. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +6 -4
  109. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +19 -15
  110. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +555 -57
  111. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +73 -16
  112. package/dist/Editor/Toolbar/PopupTool/index.js +3 -5
  113. package/dist/Editor/Toolbar/Toolbar.js +6 -0
  114. package/dist/Editor/Toolbar/toolbarGroups.js +4 -0
  115. package/dist/Editor/assets/svg/BrainIcon.js +2 -2
  116. package/dist/Editor/assets/svg/SettingsIcon.js +4 -4
  117. package/dist/Editor/assets/svg/TableIcons.js +220 -0
  118. package/dist/Editor/common/ColorPickerButton.js +85 -45
  119. package/dist/Editor/common/DnD/Draggable.js +2 -1
  120. package/dist/Editor/common/FontLoader/FontLoader.js +4 -4
  121. package/dist/Editor/common/Icon.js +23 -20
  122. package/dist/Editor/common/ImageSelector/Options/Upload.js +2 -1
  123. package/dist/Editor/common/ImageSelector/Styles.js +47 -6
  124. package/dist/Editor/common/ImageSelector/UploadStyles.js +18 -6
  125. package/dist/Editor/common/LinkSettings/NavComponents.js +2 -1
  126. package/dist/Editor/common/LinkSettings/index.js +2 -1
  127. package/dist/Editor/common/MentionsPopup/Styles.js +143 -8
  128. package/dist/Editor/common/MentionsPopup/index.js +1 -1
  129. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +108 -12
  130. package/dist/Editor/common/RnD/GuideLines/styles.js +3 -3
  131. package/dist/Editor/common/RnD/ShadowElement.js +1 -1
  132. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +14 -2
  133. package/dist/Editor/common/RnD/Utils/gridDropItem.js +9 -6
  134. package/dist/Editor/common/RnD/VirtualElement/index.js +5 -1
  135. package/dist/Editor/common/RnD/index.js +3 -2
  136. package/dist/Editor/common/Section/index.js +3 -3
  137. package/dist/Editor/common/Section/styles.js +5 -1
  138. package/dist/Editor/common/Select/index.js +20 -0
  139. package/dist/Editor/common/Select/styles.js +17 -0
  140. package/dist/Editor/common/Shorthands/elements.js +13 -1
  141. package/dist/Editor/common/StyleBuilder/fieldStyle.js +2 -1
  142. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +9 -3
  143. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +35 -7
  144. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -2
  145. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  146. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +2 -1
  147. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +1 -1
  148. package/dist/Editor/common/StyleBuilder/fieldTypes/icons.js +2 -0
  149. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  150. package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +79 -0
  151. package/dist/Editor/common/StyleBuilder/fieldTypes/radiusStyle.js +11 -11
  152. package/dist/Editor/common/StyleBuilder/fieldTypes/saveAsTemplate.js +22 -6
  153. package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +21 -2
  154. package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +20 -4
  155. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +12 -2
  156. package/dist/Editor/common/StyleBuilder/formStyle.js +268 -149
  157. package/dist/Editor/common/StyleBuilder/index.js +101 -20
  158. package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +4 -0
  159. package/dist/Editor/common/StyleBuilder/tableStyle.js +69 -25
  160. package/dist/Editor/common/SwipeableDrawer/style.js +15 -4
  161. package/dist/Editor/common/ToolbarIcon.js +1 -1
  162. package/dist/Editor/common/Uploader.js +46 -36
  163. package/dist/Editor/common/iconListV2.js +616 -60
  164. package/dist/Editor/common/iconslist.js +23 -17
  165. package/dist/Editor/commonStyle.js +417 -11
  166. package/dist/Editor/helper/deserialize/index.js +4 -1
  167. package/dist/Editor/helper/enforceDateFormat.js +41 -0
  168. package/dist/Editor/helper/index.js +17 -4
  169. package/dist/Editor/helper/theme.js +24 -1
  170. package/dist/Editor/hooks/useMouseMove.js +5 -2
  171. package/dist/Editor/hooks/useTable.js +210 -0
  172. package/dist/Editor/plugins/withCustomDeleteBackward.js +36 -4
  173. package/dist/Editor/plugins/withEmbeds.js +30 -26
  174. package/dist/Editor/plugins/withHTML.js +72 -11
  175. package/dist/Editor/plugins/withLayout.js +1 -0
  176. package/dist/Editor/utils/SlateUtilityFunctions.js +39 -12
  177. package/dist/Editor/utils/brains.js +1 -1
  178. package/dist/Editor/utils/button.js +4 -4
  179. package/dist/Editor/utils/chatEditor/SlateUtilityFunctions.js +75 -6
  180. package/dist/Editor/utils/customHooks/useResize.js +7 -4
  181. package/dist/Editor/utils/customHooks/useTableResize.js +6 -2
  182. package/dist/Editor/utils/dataView.js +43 -0
  183. package/dist/Editor/utils/embed.js +2 -1
  184. package/dist/Editor/utils/events.js +0 -1
  185. package/dist/Editor/utils/font.js +11 -4
  186. package/dist/Editor/utils/formfield.js +8 -4
  187. package/dist/Editor/utils/helper.js +103 -2
  188. package/dist/Editor/utils/insertNewLine.js +19 -1
  189. package/dist/Editor/utils/pageSettings.js +14 -2
  190. package/dist/Editor/utils/serializeToText.js +2 -0
  191. package/dist/Editor/utils/table.js +228 -24
  192. package/package.json +2 -2
@@ -0,0 +1,80 @@
1
+ import React from "react";
2
+ import { Box } from "@mui/material";
3
+ import { useDataView } from "../Providers/DataViewProvider";
4
+ import ColumnView from "./ColumnView";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ import { jsxs as _jsxs } from "react/jsx-runtime";
7
+ const RenderRow = props => {
8
+ const {
9
+ rowIndex,
10
+ row,
11
+ properties,
12
+ onSelect,
13
+ selected,
14
+ readOnly
15
+ } = props;
16
+ const showProperties = properties?.filter(f => f.visible);
17
+ return showProperties?.map((property, i) => {
18
+ return /*#__PURE__*/_jsx(ColumnView, {
19
+ needAnchor: i === 0,
20
+ row: row,
21
+ rowIndex: rowIndex,
22
+ property: property,
23
+ onSelect: onSelect,
24
+ selected: selected,
25
+ readOnly: readOnly
26
+ }, `${property.key}_${i}`);
27
+ });
28
+ };
29
+ const ViewData = props => {
30
+ const {
31
+ attributes,
32
+ children,
33
+ customProps
34
+ } = props;
35
+ const {
36
+ readOnly
37
+ } = customProps || {};
38
+ const {
39
+ properties,
40
+ rows,
41
+ selectedRows,
42
+ setSelectedRows
43
+ } = useDataView();
44
+ const onSelect = (id, checked) => {
45
+ if (checked) {
46
+ setSelectedRows([...selectedRows, id]);
47
+ } else {
48
+ setSelectedRows([...selectedRows?.filter(f => f !== id)]);
49
+ }
50
+ };
51
+ return /*#__PURE__*/_jsxs(Box, {
52
+ component: "tbody",
53
+ ...attributes,
54
+ contentEditable: false,
55
+ children: [rows?.map((row, i) => {
56
+ return /*#__PURE__*/_jsx(Box, {
57
+ component: "tr",
58
+ className: "tv-act-row",
59
+ children: /*#__PURE__*/_jsx(RenderRow, {
60
+ rowIndex: row?.id,
61
+ row: row,
62
+ properties: properties,
63
+ onSelect: onSelect,
64
+ selected: selectedRows?.includes(row?.id),
65
+ readOnly: readOnly
66
+ })
67
+ }, i);
68
+ }), /*#__PURE__*/_jsx("tr", {
69
+ style: {
70
+ visibility: "hidden",
71
+ display: "none"
72
+ },
73
+ "aria-hidden": "true",
74
+ children: /*#__PURE__*/_jsx("td", {
75
+ children: children
76
+ })
77
+ })]
78
+ });
79
+ };
80
+ export default ViewData;
@@ -0,0 +1,10 @@
1
+ const useColumnStyles = theme => ({
2
+ root: {
3
+ zIndex: 1000,
4
+ marginTop: "20px !important",
5
+ [theme?.breakpoints?.between("xs", "md")]: {
6
+ left: "-32px !important"
7
+ }
8
+ }
9
+ });
10
+ export default useColumnStyles;
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import TableView from "./TableView";
3
+ import { useDataView } from "../Providers/DataViewProvider";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { Fragment as _Fragment } from "react/jsx-runtime";
6
+ const LAYOUT_COMPONENT = {
7
+ table: TableView
8
+ };
9
+ const LayoutView = props => {
10
+ const {
11
+ readOnly,
12
+ children
13
+ } = props;
14
+ const {
15
+ layoutType
16
+ } = useDataView();
17
+ const Layout = LAYOUT_COMPONENT[layoutType] || LAYOUT_COMPONENT["table"];
18
+ return /*#__PURE__*/_jsx(_Fragment, {
19
+ children: /*#__PURE__*/_jsx(Layout, {
20
+ readOnly: readOnly,
21
+ children: children
22
+ })
23
+ });
24
+ };
25
+ export default LayoutView;
@@ -0,0 +1,281 @@
1
+ import React, { createContext, useContext, useEffect, useState } from "react";
2
+ import { Editor, Transforms, Node } from "slate";
3
+ import { PROPERTY_DEFAULTS } from "../Layouts/Options/Constants";
4
+ import multiSortRows from "../Utils/multiSortRows";
5
+ import globalSearch from "../Utils/globalSearch";
6
+
7
+ // Data View context
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ const DataViewContext = /*#__PURE__*/createContext();
10
+ export const useDataView = () => useContext(DataViewContext);
11
+ const DEFAULT_PROPERTIES = [{
12
+ key: "column1",
13
+ label: "Name",
14
+ dataType: "text"
15
+ }, {
16
+ key: "column2",
17
+ label: "Status",
18
+ dataType: "select",
19
+ options: ["Active", "Inactive"]
20
+ }, {
21
+ key: "column3",
22
+ label: "Agree?",
23
+ dataType: "checkbox"
24
+ }];
25
+
26
+ // Combined provider
27
+ export const DataViewProvider = ({
28
+ children,
29
+ ...props
30
+ }) => {
31
+ const {
32
+ data: initialData,
33
+ path,
34
+ editor,
35
+ users: peoples
36
+ } = props;
37
+ const dataViewNode = Node.get(editor, path);
38
+ const [layouts, setLayouts] = useState(initialData?.layouts || []);
39
+ const [seletectedLayout, setSelectedLayout] = useState({
40
+ ...(layouts[0] || {})
41
+ });
42
+ const [layoutType, setLayoutType] = useState(seletectedLayout?.type || "table");
43
+ const [properties, setProperties] = useState(initialData?.properties || [...DEFAULT_PROPERTIES]);
44
+ const [sort, setSort] = useState(seletectedLayout?.sort || []);
45
+ const [filter, setFilter] = useState(seletectedLayout?.filter || []);
46
+ const [rows, setRows] = useState(initialData?.rows || []);
47
+ const [selectedRows, setSelectedRows] = useState([]);
48
+ const [search, setSearch] = useState("");
49
+ const users = peoples?.map(m => {
50
+ return {
51
+ value: m?.name
52
+ };
53
+ });
54
+
55
+ // for undo and redo
56
+ // minimal added for perforamnce issue avoid
57
+ useEffect(() => {
58
+ setRows(dataViewNode?.rows);
59
+ }, [dataViewNode?.rows?.length]);
60
+ useEffect(() => {
61
+ setProperties(dataViewNode?.properties);
62
+ }, [dataViewNode?.properties?.length]);
63
+
64
+ // re-order when sort val changes
65
+ useEffect(() => {
66
+ if ((sort?.length > 0 || search) && rows?.length > 0) {
67
+ const reOrderRows = sort?.length > 0 ? multiSortRows(initialData?.rows, sort, properties) : [...initialData?.rows];
68
+ setRows(globalSearch(reOrderRows, search));
69
+ } else {
70
+ // reset to default order
71
+ setRows(globalSearch(initialData?.rows || [], search));
72
+ }
73
+ }, [sort, search]);
74
+ const onAddProperty = (data, overrides = {}) => {
75
+ try {
76
+ const {
77
+ type
78
+ } = data;
79
+ const key = `col_${new Date().getTime()}`;
80
+ const newProperty = {
81
+ ...(PROPERTY_DEFAULTS[type] || {}),
82
+ ...overrides,
83
+ key: key,
84
+ type
85
+ };
86
+ const updatedProperties = [...properties, {
87
+ ...newProperty
88
+ }];
89
+ Transforms.setNodes(editor, {
90
+ properties: [...updatedProperties]
91
+ }, {
92
+ at: path
93
+ });
94
+ setProperties([...updatedProperties]);
95
+ return newProperty;
96
+ } catch (err) {
97
+ console.log(err);
98
+ }
99
+ };
100
+ const onUpdateProperty = (data, isDelete = false) => {
101
+ try {
102
+ const {
103
+ key
104
+ } = data;
105
+ let up = {
106
+ ...data
107
+ };
108
+ const updatedProperties = properties?.map(m => {
109
+ if (m.key === key) {
110
+ up = {
111
+ ...m,
112
+ ...data
113
+ };
114
+ return up;
115
+ }
116
+ return m;
117
+ });
118
+ if (isDelete) {
119
+ const deleteIndex = updatedProperties.findIndex(f => f.key === key);
120
+ updatedProperties.splice(deleteIndex, 1);
121
+ }
122
+ Transforms.setNodes(editor, {
123
+ properties: [...updatedProperties]
124
+ }, {
125
+ at: path
126
+ });
127
+ setProperties([...updatedProperties]);
128
+ return up;
129
+ } catch (err) {
130
+ console.log(err);
131
+ }
132
+ };
133
+ const onChange = (rowIndex, rowData) => {
134
+ try {
135
+ const updatedRows = rows?.map(m => {
136
+ if (m?.id === rowIndex) {
137
+ m = {
138
+ ...m,
139
+ ...rowData
140
+ };
141
+ }
142
+ return m;
143
+ });
144
+ Transforms.setNodes(editor, {
145
+ rows: [...updatedRows]
146
+ }, {
147
+ at: path
148
+ });
149
+ setRows(updatedRows);
150
+ } catch (err) {
151
+ console.log(err);
152
+ }
153
+ };
154
+ const onAddRow = () => {
155
+ try {
156
+ const newRow = properties?.reduce((a, b) => {
157
+ a[b.key] = "";
158
+ return a;
159
+ }, {
160
+ id: `row_${new Date().getTime()}`
161
+ });
162
+ const updatedRows = [...rows, newRow];
163
+ Transforms.setNodes(editor, {
164
+ rows: [...updatedRows]
165
+ }, {
166
+ at: path
167
+ });
168
+ setRows(updatedRows);
169
+ } catch (err) {
170
+ console.log(err);
171
+ }
172
+ };
173
+ const formatSort = (sorts = [], sortData, isDelete = false) => {
174
+ let upSort = [];
175
+ const isUpdate = sorts?.find(f => f.key === sortData?.key);
176
+ if (isUpdate) {
177
+ // update if any
178
+ upSort = sorts?.map(m => {
179
+ if (m.key === sortData.key) {
180
+ // if update col
181
+ if (sortData["newKey"]) {
182
+ sortData["key"] = sortData["newKey"];
183
+ delete sortData["newKey"];
184
+ }
185
+ return {
186
+ ...sortData
187
+ };
188
+ }
189
+ return m;
190
+ });
191
+ } else {
192
+ upSort = [...sorts, {
193
+ ...sortData
194
+ }];
195
+ }
196
+
197
+ // if no sort
198
+ if (sorts?.length === 0 && !isDelete) {
199
+ upSort = [{
200
+ ...sortData
201
+ }];
202
+ }
203
+
204
+ // if delete
205
+ if (isDelete) {
206
+ const deleteIndex = upSort.findIndex(f => f.key === sortData.key);
207
+ upSort.splice(deleteIndex, 1);
208
+ }
209
+ return upSort;
210
+ };
211
+ const onUpdateSort = (sortData = {}, isDelete = false, deleteAll = false) => {
212
+ try {
213
+ let upSort = {};
214
+ const updatedLayouts = layouts?.map((m, i) => {
215
+ if (seletectedLayout?.key === m.key) {
216
+ upSort = !deleteAll ? formatSort(m?.sort || [], sortData, isDelete) : [];
217
+ return {
218
+ ...m,
219
+ sort: [...upSort]
220
+ };
221
+ }
222
+ return m;
223
+ });
224
+ Transforms.setNodes(editor, {
225
+ layouts: [...updatedLayouts]
226
+ }, {
227
+ at: path
228
+ });
229
+ setLayouts(updatedLayouts);
230
+ setSort(upSort);
231
+ } catch (err) {
232
+ console.log(err);
233
+ }
234
+ };
235
+ const onDeleteRows = () => {
236
+ try {
237
+ const updatedRows = [...rows].filter(f => selectedRows.includes(f.id) === false);
238
+ Transforms.setNodes(editor, {
239
+ rows: [...updatedRows]
240
+ }, {
241
+ at: path
242
+ });
243
+ setRows(updatedRows);
244
+ setSelectedRows([]);
245
+ } catch (err) {
246
+ console.log(err);
247
+ }
248
+ };
249
+ const onSearch = e => {
250
+ setSearch(e?.target?.value);
251
+ };
252
+ const value = {
253
+ layoutType,
254
+ setLayoutType,
255
+ properties,
256
+ setProperties,
257
+ rows,
258
+ setRows,
259
+ onAddProperty,
260
+ layouts,
261
+ setLayouts,
262
+ onUpdateProperty,
263
+ onChange,
264
+ onAddRow,
265
+ users: users,
266
+ onUpdateSort,
267
+ sort,
268
+ filter,
269
+ setSelectedLayout,
270
+ setFilter,
271
+ selectedRows,
272
+ setSelectedRows,
273
+ onDeleteRows,
274
+ search,
275
+ onSearch
276
+ };
277
+ return /*#__PURE__*/_jsx(DataViewContext.Provider, {
278
+ value: value,
279
+ children: children
280
+ });
281
+ };
@@ -0,0 +1,15 @@
1
+ const globalSearch = (array, searchTerm) => {
2
+ if (!searchTerm) {
3
+ return array;
4
+ }
5
+ const lowerCaseSearchTerm = searchTerm.toLowerCase();
6
+ return array.filter(item => Object.values(item).some(value => {
7
+ if (typeof value === "string" && value) {
8
+ return value?.toLowerCase().includes(lowerCaseSearchTerm);
9
+ } else if (Array.isArray(value)) {
10
+ return value?.map(m => m?.value).some(d => d.toLowerCase().includes(lowerCaseSearchTerm));
11
+ }
12
+ return false;
13
+ }));
14
+ };
15
+ export default globalSearch;
@@ -0,0 +1,74 @@
1
+ function sortByDate(a, b) {
2
+ const dateA = new Date(a);
3
+ const dateB = new Date(b);
4
+
5
+ // Check if both dates are valid
6
+ const isValidA = !isNaN(dateA.getTime());
7
+ const isValidB = !isNaN(dateB.getTime());
8
+ if (isValidA && isValidB) {
9
+ // Compare valid dates
10
+ return dateA - dateB;
11
+ } else if (isValidA) {
12
+ // Invalid date in `b` pushes `a` before `b`
13
+ return -1;
14
+ } else if (isValidB) {
15
+ // Invalid date in `a` pushes `b` before `a`
16
+ return 1;
17
+ } else {
18
+ // Both are invalid, maintain their relative order
19
+ return 0;
20
+ }
21
+ }
22
+
23
+ /**
24
+ * Multi-sort rows based on multiple criteria.
25
+ * @param {Array} rows - Array of row objects.
26
+ * @param {Array} criteria - Array of sort criteria [{key, sortBy}].
27
+ * @param {Object} columnConfig - Column configurations with data types.
28
+ */
29
+ const multiSortRows = (rows, criteria, columnConfig) => {
30
+ return rows.slice().sort((a, b) => {
31
+ for (let {
32
+ key,
33
+ operator
34
+ } of criteria) {
35
+ const column = columnConfig.find(col => col.key === key);
36
+ if (!column) continue;
37
+ const dataType = column.type;
38
+ const valueA = a[key];
39
+ const valueB = b[key];
40
+ let comparison = 0;
41
+ switch (dataType) {
42
+ case "text":
43
+ comparison = valueA.localeCompare(valueB, undefined, {
44
+ sensitivity: "base"
45
+ });
46
+ break;
47
+ case "number":
48
+ comparison = parseInt(valueA || 0) - parseInt(valueB || 0);
49
+ break;
50
+ case "select":
51
+ case "multi-select":
52
+ if (Array.isArray(valueA) && Array.isArray(valueB)) {
53
+ comparison = Array.isArray(valueA) ? valueA?.map(m => m?.value).join(", ").localeCompare(valueB?.map(m => m?.value).join(", "), undefined, {
54
+ sensitivity: "base"
55
+ }) : 0;
56
+ }
57
+ break;
58
+ case "date":
59
+ comparison = sortByDate(valueA, valueB);
60
+ break;
61
+ case "check":
62
+ return valueA && operator === "desc" ? 1 : -1;
63
+ default:
64
+ break;
65
+ }
66
+ if (comparison !== 0) {
67
+ return operator === "asc" ? comparison : -comparison;
68
+ }
69
+ }
70
+ return 0; // Rows are equal based on all criteria
71
+ });
72
+ };
73
+
74
+ export default multiSortRows;
@@ -0,0 +1,154 @@
1
+ const useDataViewStyles = (theme, appTheme) => ({
2
+ root: {
3
+ width: "100%",
4
+ overflowX: "auto",
5
+ marginTop: "8px",
6
+ "& table": {
7
+ width: "100%",
8
+ "& th.fe-tv-ap-ico": {
9
+ width: "50px"
10
+ }
11
+ },
12
+ "& table th": {
13
+ cursor: "pointer",
14
+ width: "200px"
15
+ },
16
+ "& table, th, td": {
17
+ border: "1px solid black",
18
+ borderCollapse: "collapse"
19
+ },
20
+ "& .react-datepicker-wrapper": {
21
+ width: "100%",
22
+ "& input": {
23
+ padding: "6px 12px"
24
+ }
25
+ },
26
+ "& .MuiInputBase-root": {
27
+ "& fieldset": {
28
+ border: "none"
29
+ }
30
+ },
31
+ // filter view
32
+ "& .fe-tv-fv": {
33
+ marginBottom: "8px",
34
+ "& .mr": {
35
+ marginRight: "4px"
36
+ },
37
+ [theme?.breakpoints?.between("xs", "md")]: {
38
+ display: "flex",
39
+ flexDirection: "column"
40
+ }
41
+ },
42
+ "& .tv-act-row": {
43
+ "& .tv-tr-pop": {
44
+ opacity: 0,
45
+ "&.active": {
46
+ opacity: 1
47
+ },
48
+ "& .tv-ck-box": {
49
+ "& svg": {
50
+ color: appTheme?.palette?.editor?.tv_border
51
+ },
52
+ "&.Mui-checked": {
53
+ "& svg": {
54
+ color: "rgba(37, 99, 235, 1)"
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "&:hover": {
60
+ "& .tv-tr-pop": {
61
+ opacity: 1
62
+ }
63
+ }
64
+ }
65
+ },
66
+ filterView: {
67
+ display: "flex",
68
+ justifyContent: "space-between",
69
+ alignItems: "center",
70
+ "& .MuiButtonBase-root": {
71
+ padding: "6px",
72
+ marginLeft: "4px",
73
+ width: "29px",
74
+ height: "29px",
75
+ "&.active": {
76
+ color: "rgba(37, 99, 235, 1)"
77
+ }
78
+ },
79
+ "& .tv-sb": {
80
+ display: "flex",
81
+ border: "1px solid transparent",
82
+ width: "24px",
83
+ transition: "width 1s",
84
+ "&.open": {
85
+ width: "fit-content",
86
+ border: `1px solid ${appTheme?.palette?.editor?.tv_border}`,
87
+ boxShadow: "0px 4px 18px 0px #0000000D",
88
+ borderRadius: "8px"
89
+ },
90
+ "& input": {
91
+ paddingBottom: "0px",
92
+ fontSize: "14px"
93
+ }
94
+ },
95
+ "& .tv-title-wrpr, .tv-fi-wrpr": {
96
+ display: "flex",
97
+ "& button": {
98
+ color: appTheme?.palette?.editor?.tv_text
99
+ },
100
+ "& input": {
101
+ color: appTheme?.palette?.editor?.tv_text
102
+ }
103
+ },
104
+ "& .tv-title-wrpr": {
105
+ width: "80%",
106
+ marginRight: "8px",
107
+ "& .MuiInputBase-root": {
108
+ width: "100%"
109
+ },
110
+ "& .MuiInputBase-input": {
111
+ paddingBottom: "0px",
112
+ fontWeight: "bold",
113
+ fontSize: "16px"
114
+ },
115
+ [theme?.breakpoints?.between("xs", "md")]: {
116
+ width: "100%",
117
+ marginRight: "0px"
118
+ }
119
+ },
120
+ "& .tv-fi-wrpr": {
121
+ [theme?.breakpoints?.between("xs", "md")]: {
122
+ width: "100%",
123
+ justifyContent: "end"
124
+ }
125
+ }
126
+ },
127
+ basicMenu: {
128
+ "& .MuiPaper-root": {
129
+ padding: "0px 6px",
130
+ width: "150px",
131
+ border: `1px solid ${appTheme?.palette?.editor?.tv_border}`,
132
+ borderRadius: "8px",
133
+ background: appTheme?.palette?.editor?.tv_pop_bg,
134
+ color: appTheme?.palette?.editor?.tv_text_primary,
135
+ "& .MuiButtonBase-root": {
136
+ fontSize: "14px",
137
+ "& svg": {
138
+ width: "16px",
139
+ height: "16px",
140
+ color: `${appTheme?.palette?.editor?.tv_text}`
141
+ },
142
+ "&:hover": {
143
+ background: appTheme?.palette?.editor?.tv_hover_bg,
144
+ borderRadius: "8px",
145
+ color: `${appTheme?.palette?.editor?.tv_hover_text} !important`,
146
+ "& svg": {
147
+ color: `${appTheme?.palette?.editor?.tv_hover_text} !important`
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ });
154
+ export default useDataViewStyles;