@mbs-dev/react-editor 1.12.0 → 1.13.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/dist/Editor.js CHANGED
@@ -89,32 +89,8 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
89
89
  return formdata;
90
90
  },
91
91
  isSuccess: function (e) {
92
- var _a, _b;
93
- var err = (_a = (typeof (e === null || e === void 0 ? void 0 : e.error) === 'number' ? e.error : undefined)) !== null && _a !== void 0 ? _a : (typeof ((_b = e === null || e === void 0 ? void 0 : e.data) === null || _b === void 0 ? void 0 : _b.error) === 'number' ? e.data.error : undefined);
94
- if ((e === null || e === void 0 ? void 0 : e.success) === true)
95
- return true;
96
- if (typeof err === 'number')
97
- return err === 0;
98
- return false;
99
- },
100
- getMessage: function (e) {
101
- var _a, _b;
102
- var msg = (_a = e === null || e === void 0 ? void 0 : e.msg) !== null && _a !== void 0 ? _a : (_b = e === null || e === void 0 ? void 0 : e.data) === null || _b === void 0 ? void 0 : _b.msg;
103
- return typeof msg === 'string' ? msg : '';
104
- },
105
- process: function (resp) {
106
- var payload = (resp === null || resp === void 0 ? void 0 : resp.data) ? resp.data : resp;
107
- var files = Array.isArray(payload === null || payload === void 0 ? void 0 : payload.files) ? payload.files : [];
108
- var error = payload === null || payload === void 0 ? void 0 : payload.error;
109
- var msg = payload === null || payload === void 0 ? void 0 : payload.msg;
110
- return {
111
- files: files,
112
- error: typeof error === 'number' ? String(error) : (error !== null && error !== void 0 ? error : ''),
113
- msg: typeof msg === 'string' ? msg : '',
114
- };
115
- },
116
- defaultHandlerSuccess: function (data) {
117
92
  var _this = this;
93
+ var _a;
118
94
  var fn = this.jodit;
119
95
  var restoreToLastCaret = function () {
120
96
  var _a, _b;
@@ -148,51 +124,51 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
148
124
  selectionRef.current = null;
149
125
  }
150
126
  };
151
- var list = (Array.isArray(data === null || data === void 0 ? void 0 : data.files) ? data.files : [])
152
- .map(function (item) {
153
- var _a;
154
- if (typeof item === 'string')
155
- return { file: item };
156
- if (item && typeof item === 'object') {
157
- return {
158
- file: String((_a = item.file) !== null && _a !== void 0 ? _a : ''),
159
- origineFileName: typeof item.origineFileName === 'string' ? item.origineFileName : undefined,
160
- };
161
- }
162
- return { file: '' };
163
- })
164
- .filter(function (x) { return !!x.file; });
165
- if (!list.length)
166
- return;
167
- list.forEach(function (_a) {
168
- var _b;
169
- var file = _a.file, origineFileName = _a.origineFileName;
170
- var src = imageUrl ? "".concat(imageUrl, "/").concat(file) : file;
171
- restoreToLastCaret();
172
- if (isImageByExtension(file, _this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
173
- var tagName_1 = 'img';
174
- var elm_1 = fn.createInside.element(tagName_1);
175
- elm_1.setAttribute('src', src);
176
- fn.s.insertImage(elm_1, null, fn.o.imageDefaultWidth);
177
- refreshSavedRange();
178
- return;
179
- }
180
- var tagName = 'a';
181
- var elm = fn.createInside.element(tagName);
182
- elm.setAttribute('href', src);
183
- elm.setAttribute('target', '_blank');
184
- elm.setAttribute('rel', 'noopener noreferrer');
185
- elm.textContent = origineFileName || getDisplayNameFromPath(file);
186
- fn.s.insertNode(elm);
187
- if ((_b = fn === null || fn === void 0 ? void 0 : fn.s) === null || _b === void 0 ? void 0 : _b.setCursorAfter) {
188
- try {
189
- fn.s.setCursorAfter(elm);
127
+ if (((_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.files) && e.data.files.length) {
128
+ e.data.files.forEach(function (filename) {
129
+ var _a;
130
+ var src = imageUrl ? "".concat(imageUrl, "/").concat(filename) : filename;
131
+ restoreToLastCaret();
132
+ if (isImageByExtension(filename, _this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
133
+ var tagName = 'img';
134
+ var elm = fn.createInside.element(tagName);
135
+ elm.setAttribute('src', src);
136
+ fn.s.insertImage(elm, null, fn.o.imageDefaultWidth);
137
+ refreshSavedRange();
190
138
  }
191
- catch (_c) {
139
+ else {
140
+ var tagName = 'a';
141
+ var elm = fn.createInside.element(tagName);
142
+ elm.setAttribute('href', src);
143
+ elm.setAttribute('target', '_blank');
144
+ elm.setAttribute('rel', 'noopener noreferrer');
145
+ elm.textContent = getDisplayNameFromPath(filename);
146
+ fn.s.insertNode(elm);
147
+ if ((_a = fn === null || fn === void 0 ? void 0 : fn.s) === null || _a === void 0 ? void 0 : _a.setCursorAfter) {
148
+ try {
149
+ fn.s.setCursorAfter(elm);
150
+ }
151
+ catch (_b) {
152
+ }
153
+ }
154
+ refreshSavedRange();
192
155
  }
193
- }
194
- refreshSavedRange();
195
- });
156
+ });
157
+ }
158
+ return !!(e === null || e === void 0 ? void 0 : e.success);
159
+ },
160
+ getMessage: function (e) {
161
+ var _a;
162
+ return ((_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.messages) && Array.isArray(e.data.messages) ? e.data.messages.join('') : '';
163
+ },
164
+ process: function (resp) {
165
+ var files = [];
166
+ files.unshift(resp === null || resp === void 0 ? void 0 : resp.data);
167
+ return {
168
+ files: resp === null || resp === void 0 ? void 0 : resp.data,
169
+ error: resp === null || resp === void 0 ? void 0 : resp.msg,
170
+ msg: resp === null || resp === void 0 ? void 0 : resp.msg,
171
+ };
196
172
  },
197
173
  error: function (e) {
198
174
  this.j.e.fire('errorMessage', e.message, 'error', 4000);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mbs-dev/react-editor",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "description": "react editor",
5
5
  "main": "dist/index.js",
6
6
  "types": "types/index.d.ts",
package/src/Editor.tsx CHANGED
@@ -56,35 +56,6 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
56
56
  return formdata;
57
57
  },
58
58
  isSuccess(this: any, e: any): boolean {
59
- const err =
60
- (typeof e?.error === 'number' ? e.error : undefined) ??
61
- (typeof e?.data?.error === 'number' ? e.data.error : undefined);
62
-
63
- if (e?.success === true) return true;
64
- if (typeof err === 'number') return err === 0;
65
-
66
- return false;
67
- },
68
- getMessage(e: any): string {
69
- const msg = e?.msg ?? e?.data?.msg;
70
- return typeof msg === 'string' ? msg : '';
71
- },
72
- process(resp: any): { files: any[]; error: string; msg: string } {
73
- const payload = resp?.data ? resp.data : resp;
74
-
75
- const files = Array.isArray(payload?.files) ? payload.files : [];
76
- const error = payload?.error;
77
- const msg = payload?.msg;
78
-
79
- return {
80
- files,
81
- error: typeof error === 'number' ? String(error) : (error ?? ''),
82
- msg: typeof msg === 'string' ? msg : '',
83
- };
84
- },
85
-
86
- // ✅ FIX: handle insertion here to avoid default handler inserting "undefined[object Object]"
87
- defaultHandlerSuccess(this: any, data: any): void {
88
59
  const fn = this.jodit;
89
60
 
90
61
  const restoreToLastCaret = () => {
@@ -99,6 +70,7 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
99
70
  }
100
71
  }
101
72
 
73
+ // fallback: jodit internal save/restore
102
74
  if (fn?.s?.focus) fn.s.focus();
103
75
  if (fn?.s?.restore) {
104
76
  try {
@@ -120,59 +92,58 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
120
92
  }
121
93
  };
122
94
 
123
- const list: Array<{ file: string; origineFileName?: string }> = (Array.isArray(data?.files) ? data.files : [])
124
- .map((item: any) => {
125
- if (typeof item === 'string') return { file: item };
126
- if (item && typeof item === 'object') {
127
- return {
128
- file: String(item.file ?? ''),
129
- origineFileName: typeof item.origineFileName === 'string' ? item.origineFileName : undefined,
130
- };
131
- }
132
- return { file: '' };
133
- })
134
- .filter((x: { file: any; }) => !!x.file);
135
-
136
- if (!list.length) return;
137
-
138
- list.forEach(({ file, origineFileName }) => {
139
- const src = imageUrl ? `${imageUrl}/${file}` : file;
140
-
141
- // ✅ Restore caret BEFORE inserting anything (image or file)
142
- restoreToLastCaret();
143
-
144
- // ✅ If it's an image => insert <img> (no filename display)
145
- if (isImageByExtension(file, this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
146
- const tagName = 'img';
147
- const elm = fn.createInside.element(tagName);
148
- elm.setAttribute('src', src);
149
- fn.s.insertImage(elm as HTMLImageElement, null, fn.o.imageDefaultWidth);
150
- refreshSavedRange();
151
- return;
152
- }
153
-
154
- // ✅ Otherwise insert <a> and display origineFileName (files only)
155
- const tagName = 'a';
156
- const elm = fn.createInside.element(tagName);
157
- elm.setAttribute('href', src);
158
- elm.setAttribute('target', '_blank');
159
- elm.setAttribute('rel', 'noopener noreferrer');
160
- elm.textContent = origineFileName || getDisplayNameFromPath(file);
161
-
162
- fn.s.insertNode(elm);
95
+ if (e?.data?.files && e.data.files.length) {
96
+ e.data.files.forEach((filename: string) => {
97
+ const src = imageUrl ? `${imageUrl}/${filename}` : filename;
98
+
99
+ // ✅ Restore caret BEFORE inserting anything (image or file)
100
+ restoreToLastCaret();
101
+
102
+ // ✅ If it's an image => insert <img>, otherwise insert <a href="...">
103
+ if (isImageByExtension(filename, this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
104
+ const tagName = 'img';
105
+ const elm = fn.createInside.element(tagName);
106
+ elm.setAttribute('src', src);
107
+ fn.s.insertImage(elm as HTMLImageElement, null, fn.o.imageDefaultWidth);
108
+ refreshSavedRange();
109
+ } else {
110
+ const tagName = 'a';
111
+ const elm = fn.createInside.element(tagName);
112
+ elm.setAttribute('href', src);
113
+ elm.setAttribute('target', '_blank');
114
+ elm.setAttribute('rel', 'noopener noreferrer');
115
+ elm.textContent = getDisplayNameFromPath(filename);
116
+
117
+ fn.s.insertNode(elm);
118
+
119
+ if (fn?.s?.setCursorAfter) {
120
+ try {
121
+ fn.s.setCursorAfter(elm);
122
+ } catch {
123
+ // ignore
124
+ }
125
+ }
163
126
 
164
- if (fn?.s?.setCursorAfter) {
165
- try {
166
- fn.s.setCursorAfter(elm);
167
- } catch {
168
- // ignore
127
+ refreshSavedRange();
169
128
  }
170
- }
129
+ });
130
+ }
171
131
 
172
- refreshSavedRange();
173
- });
132
+ return !!e?.success;
133
+ },
134
+ getMessage(e: any): string {
135
+ return e?.data?.messages && Array.isArray(e.data.messages) ? e.data.messages.join('') : '';
174
136
  },
137
+ process(resp: any): { files: any[]; error: string; msg: string } {
138
+ const files: any[] = [];
139
+ files.unshift(resp?.data);
175
140
 
141
+ return {
142
+ files: resp?.data,
143
+ error: resp?.msg,
144
+ msg: resp?.msg,
145
+ };
146
+ },
176
147
  error(this: any, e: Error): void {
177
148
  this.j.e.fire('errorMessage', e.message, 'error', 4000);
178
149
  },
package/types/Editor.d.ts CHANGED
@@ -19,7 +19,6 @@ export declare const uploaderConfig: (apiUrl?: string, imageUrl?: string, select
19
19
  error: string;
20
20
  msg: string;
21
21
  };
22
- defaultHandlerSuccess(this: any, data: any): void;
23
22
  error(this: any, e: Error): void;
24
23
  defaultHandlerError(this: any, e: any): void;
25
24
  };