@fileverse-dev/fortune-react 1.2.26 → 1.2.27

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.
@@ -9,7 +9,7 @@ import FormulaSearch from "../../components/SheetOverlay/FormulaSearch";
9
9
  import FormulaHint from "../../components/SheetOverlay/FormulaHint";
10
10
  import usePrevious from "../../hooks/usePrevious";
11
11
  import { LucideIcon } from "../../components/SheetOverlay/LucideIcon";
12
- import { countCommasBeforeCursor } from "../../components/SheetOverlay/helper";
12
+ import { countCommasBeforeCursor, isLetterNumberPattern, moveCursorToEnd } from "../../components/SheetOverlay/helper";
13
13
  var FxEditor = function FxEditor() {
14
14
  var _a, _b, _c;
15
15
  var hideFormulaHintLocal = localStorage.getItem("formulaMore") === "true";
@@ -81,6 +81,26 @@ var FxEditor = function FxEditor() {
81
81
  });
82
82
  }
83
83
  }, [context.config, context.luckysheet_select_save, context.luckysheetfile, context.currentSheetId, refs.globalCache, setContext]);
84
+ var getActiveFormula = useCallback(function () {
85
+ return document.querySelector(".luckysheet-formula-search-item-active");
86
+ }, []);
87
+ var insertSelectedFormula = useCallback(function (formulaName) {
88
+ if (/^=[a-zA-Z]+$/.test(refs.fxInput.current.innerText)) {
89
+ var ht = "<span dir=\"auto\" class=\"luckysheet-formula-text-color\">=</span><span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span><span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>");
90
+ refs.fxInput.current.innerHTML = ht;
91
+ var cellEditor = document.getElementById("luckysheet-rich-text-editor");
92
+ if (cellEditor) {
93
+ cellEditor.innerHTML = ht;
94
+ }
95
+ moveCursorToEnd(refs.fxInput.current);
96
+ setContext(function (draftCtx) {
97
+ draftCtx.functionCandidates = [];
98
+ draftCtx.defaultCandidates = [];
99
+ draftCtx.functionHint = formulaName;
100
+ });
101
+ return;
102
+ }
103
+ }, [setContext]);
84
104
  var onKeyDown = useCallback(function (e) {
85
105
  var _a;
86
106
  if (context.allowEdit === false) {
@@ -94,6 +114,54 @@ var FxEditor = function FxEditor() {
94
114
  if (key === "ArrowLeft" || key === "ArrowRight") {
95
115
  e.stopPropagation();
96
116
  }
117
+ if (e.key === "Enter" && context.luckysheetCellUpdate.length > 0) {
118
+ if (e.altKey || e.metaKey) {
119
+ document.execCommand("insertHTML", false, "\n ");
120
+ document.execCommand("delete", false);
121
+ e.stopPropagation();
122
+ } else {
123
+ var event_1 = e;
124
+ selectActiveFormulaOnClick(event_1);
125
+ }
126
+ return;
127
+ }
128
+ if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0) {
129
+ if (document.getElementById("luckysheet-formula-search-c")) {
130
+ var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
131
+ var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
132
+ var previousItem = activeItem ? activeItem.previousElementSibling : null;
133
+ while (previousItem && !previousItem.classList.contains("luckysheet-formula-search-item")) {
134
+ previousItem = previousItem.previousElementSibling;
135
+ }
136
+ if (!previousItem) {
137
+ var items = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelectorAll(".luckysheet-formula-search-item");
138
+ var lastItem = items === null || items === void 0 ? void 0 : items[items.length - 1];
139
+ previousItem = lastItem || null;
140
+ }
141
+ clearSearchItemActiveClass();
142
+ if (previousItem) {
143
+ previousItem.classList.add("luckysheet-formula-search-item-active");
144
+ }
145
+ }
146
+ e.preventDefault();
147
+ } else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0) {
148
+ if (document.getElementById("luckysheet-formula-search-c")) {
149
+ var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
150
+ var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
151
+ var nextItem = activeItem ? activeItem.nextElementSibling : null;
152
+ while (nextItem && !nextItem.classList.contains("luckysheet-formula-search-item")) {
153
+ nextItem = nextItem.nextElementSibling;
154
+ }
155
+ if (!nextItem) {
156
+ nextItem = (formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item")) || null;
157
+ }
158
+ clearSearchItemActiveClass();
159
+ if (nextItem) {
160
+ nextItem.classList.add("luckysheet-formula-search-item-active");
161
+ }
162
+ }
163
+ e.preventDefault();
164
+ }
97
165
  setContext(function (draftCtx) {
98
166
  if (context.luckysheetCellUpdate.length > 0) {
99
167
  switch (key) {
@@ -196,6 +264,24 @@ var FxEditor = function FxEditor() {
196
264
  }
197
265
  return true;
198
266
  }, [context.config, context.luckysheet_select_save, context.luckysheetfile, context.currentSheetId, isHidenRC]);
267
+ var selectActiveFormulaOnClick = useCallback(function (e) {
268
+ var _a, _b, _c;
269
+ if (e.target.className.includes("sign-fortune")) return;
270
+ recentText.current = (_a = refs.fxInput) === null || _a === void 0 ? void 0 : _a.current.innerText;
271
+ var formulaName = (_c = (_b = getActiveFormula()) === null || _b === void 0 ? void 0 : _b.querySelector(".luckysheet-formula-search-func")) === null || _c === void 0 ? void 0 : _c.textContent;
272
+ var lastSpanText = getLastInputSpanText();
273
+ if (formulaName && !isLetterNumberPattern(lastSpanText)) {
274
+ insertSelectedFormula(formulaName);
275
+ e.preventDefault();
276
+ e.stopPropagation();
277
+ }
278
+ }, [getActiveFormula, insertSelectedFormula]);
279
+ var clearSearchItemActiveClass = useCallback(function () {
280
+ var activeFormula = getActiveFormula();
281
+ if (activeFormula) {
282
+ activeFormula.classList.remove("luckysheet-formula-search-item-active");
283
+ }
284
+ }, [getActiveFormula]);
199
285
  return /*#__PURE__*/React.createElement("div", {
200
286
  className: "fortune-fx-editor"
201
287
  }, /*#__PURE__*/React.createElement(NameBox, null), /*#__PURE__*/React.createElement("div", {
@@ -236,9 +322,13 @@ var FxEditor = function FxEditor() {
236
322
  if (document.getElementById("luckysheet-formula-search-c")) {
237
323
  var hoveredItem = e.target.closest(".luckysheet-formula-search-item");
238
324
  if (!hoveredItem) return;
325
+ clearSearchItemActiveClass();
239
326
  hoveredItem.classList.add("luckysheet-formula-search-item-active");
240
327
  }
241
328
  e.preventDefault();
329
+ },
330
+ onMouseDown: function onMouseDown(e) {
331
+ selectActiveFormulaOnClick(e);
242
332
  }
243
333
  })), /*#__PURE__*/React.createElement("div", {
244
334
  className: "fx-hint"
@@ -164,6 +164,10 @@ var InputBox = function InputBox() {
164
164
  if (/^=[a-zA-Z]+$/.test(inputRef.current.innerText)) {
165
165
  var ht = "<span dir=\"auto\" class=\"luckysheet-formula-text-color\">=</span><span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span><span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>");
166
166
  inputRef.current.innerHTML = ht;
167
+ var fxEditor = document.getElementById("luckysheet-functionbox-cell");
168
+ if (fxEditor) {
169
+ fxEditor.innerHTML = ht;
170
+ }
167
171
  moveCursorToEnd(inputRef.current);
168
172
  setContext(function (draftCtx) {
169
173
  draftCtx.functionCandidates = [];
@@ -90,6 +90,26 @@ var FxEditor = function FxEditor() {
90
90
  });
91
91
  }
92
92
  }, [context.config, context.luckysheet_select_save, context.luckysheetfile, context.currentSheetId, refs.globalCache, setContext]);
93
+ var getActiveFormula = (0, _react.useCallback)(function () {
94
+ return document.querySelector(".luckysheet-formula-search-item-active");
95
+ }, []);
96
+ var insertSelectedFormula = (0, _react.useCallback)(function (formulaName) {
97
+ if (/^=[a-zA-Z]+$/.test(refs.fxInput.current.innerText)) {
98
+ var ht = "<span dir=\"auto\" class=\"luckysheet-formula-text-color\">=</span><span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span><span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>");
99
+ refs.fxInput.current.innerHTML = ht;
100
+ var cellEditor = document.getElementById("luckysheet-rich-text-editor");
101
+ if (cellEditor) {
102
+ cellEditor.innerHTML = ht;
103
+ }
104
+ (0, _helper.moveCursorToEnd)(refs.fxInput.current);
105
+ setContext(function (draftCtx) {
106
+ draftCtx.functionCandidates = [];
107
+ draftCtx.defaultCandidates = [];
108
+ draftCtx.functionHint = formulaName;
109
+ });
110
+ return;
111
+ }
112
+ }, [setContext]);
93
113
  var onKeyDown = (0, _react.useCallback)(function (e) {
94
114
  var _a;
95
115
  if (context.allowEdit === false) {
@@ -103,6 +123,54 @@ var FxEditor = function FxEditor() {
103
123
  if (key === "ArrowLeft" || key === "ArrowRight") {
104
124
  e.stopPropagation();
105
125
  }
126
+ if (e.key === "Enter" && context.luckysheetCellUpdate.length > 0) {
127
+ if (e.altKey || e.metaKey) {
128
+ document.execCommand("insertHTML", false, "\n ");
129
+ document.execCommand("delete", false);
130
+ e.stopPropagation();
131
+ } else {
132
+ var event_1 = e;
133
+ selectActiveFormulaOnClick(event_1);
134
+ }
135
+ return;
136
+ }
137
+ if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0) {
138
+ if (document.getElementById("luckysheet-formula-search-c")) {
139
+ var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
140
+ var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
141
+ var previousItem = activeItem ? activeItem.previousElementSibling : null;
142
+ while (previousItem && !previousItem.classList.contains("luckysheet-formula-search-item")) {
143
+ previousItem = previousItem.previousElementSibling;
144
+ }
145
+ if (!previousItem) {
146
+ var items = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelectorAll(".luckysheet-formula-search-item");
147
+ var lastItem = items === null || items === void 0 ? void 0 : items[items.length - 1];
148
+ previousItem = lastItem || null;
149
+ }
150
+ clearSearchItemActiveClass();
151
+ if (previousItem) {
152
+ previousItem.classList.add("luckysheet-formula-search-item-active");
153
+ }
154
+ }
155
+ e.preventDefault();
156
+ } else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0) {
157
+ if (document.getElementById("luckysheet-formula-search-c")) {
158
+ var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
159
+ var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
160
+ var nextItem = activeItem ? activeItem.nextElementSibling : null;
161
+ while (nextItem && !nextItem.classList.contains("luckysheet-formula-search-item")) {
162
+ nextItem = nextItem.nextElementSibling;
163
+ }
164
+ if (!nextItem) {
165
+ nextItem = (formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item")) || null;
166
+ }
167
+ clearSearchItemActiveClass();
168
+ if (nextItem) {
169
+ nextItem.classList.add("luckysheet-formula-search-item-active");
170
+ }
171
+ }
172
+ e.preventDefault();
173
+ }
106
174
  setContext(function (draftCtx) {
107
175
  if (context.luckysheetCellUpdate.length > 0) {
108
176
  switch (key) {
@@ -205,6 +273,24 @@ var FxEditor = function FxEditor() {
205
273
  }
206
274
  return true;
207
275
  }, [context.config, context.luckysheet_select_save, context.luckysheetfile, context.currentSheetId, isHidenRC]);
276
+ var selectActiveFormulaOnClick = (0, _react.useCallback)(function (e) {
277
+ var _a, _b, _c;
278
+ if (e.target.className.includes("sign-fortune")) return;
279
+ recentText.current = (_a = refs.fxInput) === null || _a === void 0 ? void 0 : _a.current.innerText;
280
+ var formulaName = (_c = (_b = getActiveFormula()) === null || _b === void 0 ? void 0 : _b.querySelector(".luckysheet-formula-search-func")) === null || _c === void 0 ? void 0 : _c.textContent;
281
+ var lastSpanText = getLastInputSpanText();
282
+ if (formulaName && !(0, _helper.isLetterNumberPattern)(lastSpanText)) {
283
+ insertSelectedFormula(formulaName);
284
+ e.preventDefault();
285
+ e.stopPropagation();
286
+ }
287
+ }, [getActiveFormula, insertSelectedFormula]);
288
+ var clearSearchItemActiveClass = (0, _react.useCallback)(function () {
289
+ var activeFormula = getActiveFormula();
290
+ if (activeFormula) {
291
+ activeFormula.classList.remove("luckysheet-formula-search-item-active");
292
+ }
293
+ }, [getActiveFormula]);
208
294
  return /*#__PURE__*/_react.default.createElement("div", {
209
295
  className: "fortune-fx-editor"
210
296
  }, /*#__PURE__*/_react.default.createElement(_NameBox.default, null), /*#__PURE__*/_react.default.createElement("div", {
@@ -245,9 +331,13 @@ var FxEditor = function FxEditor() {
245
331
  if (document.getElementById("luckysheet-formula-search-c")) {
246
332
  var hoveredItem = e.target.closest(".luckysheet-formula-search-item");
247
333
  if (!hoveredItem) return;
334
+ clearSearchItemActiveClass();
248
335
  hoveredItem.classList.add("luckysheet-formula-search-item-active");
249
336
  }
250
337
  e.preventDefault();
338
+ },
339
+ onMouseDown: function onMouseDown(e) {
340
+ selectActiveFormulaOnClick(e);
251
341
  }
252
342
  })), /*#__PURE__*/_react.default.createElement("div", {
253
343
  className: "fx-hint"
@@ -173,6 +173,10 @@ var InputBox = function InputBox() {
173
173
  if (/^=[a-zA-Z]+$/.test(inputRef.current.innerText)) {
174
174
  var ht = "<span dir=\"auto\" class=\"luckysheet-formula-text-color\">=</span><span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span><span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>");
175
175
  inputRef.current.innerHTML = ht;
176
+ var fxEditor = document.getElementById("luckysheet-functionbox-cell");
177
+ if (fxEditor) {
178
+ fxEditor.innerHTML = ht;
179
+ }
176
180
  (0, _helper.moveCursorToEnd)(inputRef.current);
177
181
  setContext(function (draftCtx) {
178
182
  draftCtx.functionCandidates = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/fortune-react",
3
- "version": "1.2.26",
3
+ "version": "1.2.27",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "module": "es/index.js",
@@ -16,7 +16,7 @@
16
16
  "tsc": "tsc"
17
17
  },
18
18
  "dependencies": {
19
- "@fileverse-dev/fortune-core": "1.2.26",
19
+ "@fileverse-dev/fortune-core": "1.2.27",
20
20
  "@fileverse/ui": "^4.1.7-patch-40",
21
21
  "@tippyjs/react": "^4.2.6",
22
22
  "@types/regenerator-runtime": "^0.13.6",