@mbs-dev/react-editor 1.11.0 → 1.12.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,8 +89,32 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
89
89
  return formdata;
90
90
  },
91
91
  isSuccess: function (e) {
92
- var _this = this;
93
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
+ var _this = this;
94
118
  var fn = this.jodit;
95
119
  var restoreToLastCaret = function () {
96
120
  var _a, _b;
@@ -124,78 +148,51 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
124
148
  selectionRef.current = null;
125
149
  }
126
150
  };
127
- var normalizedFiles = (function () {
128
- var _a, _b, _c;
129
- var raw = (_c = (_a = (Array.isArray(e === null || e === void 0 ? void 0 : e.files) ? e.files : null)) !== null && _a !== void 0 ? _a : (Array.isArray((_b = e === null || e === void 0 ? void 0 : e.data) === null || _b === void 0 ? void 0 : _b.files) ? e.data.files : null)) !== null && _c !== void 0 ? _c : [];
130
- return raw
131
- .map(function (item) {
132
- var _a;
133
- if (typeof item === 'string')
134
- return { file: item };
135
- if (item && typeof item === 'object') {
136
- return {
137
- file: String((_a = item.file) !== null && _a !== void 0 ? _a : ''),
138
- origineFileName: item.origineFileName ? String(item.origineFileName) : undefined,
139
- };
140
- }
141
- return { file: '' };
142
- })
143
- .filter(function (x) { return !!x.file; });
144
- })();
145
- if (normalizedFiles.length) {
146
- normalizedFiles.forEach(function (_a) {
147
- var _b;
148
- var file = _a.file, origineFileName = _a.origineFileName;
149
- var src = imageUrl ? "".concat(imageUrl, "/").concat(file) : file;
150
- restoreToLastCaret();
151
- if (isImageByExtension(file, _this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
152
- var tagName = 'img';
153
- var elm = fn.createInside.element(tagName);
154
- elm.setAttribute('src', src);
155
- fn.s.insertImage(elm, null, fn.o.imageDefaultWidth);
156
- refreshSavedRange();
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);
157
190
  }
158
- else {
159
- var tagName = 'a';
160
- var elm = fn.createInside.element(tagName);
161
- elm.setAttribute('href', src);
162
- elm.setAttribute('target', '_blank');
163
- elm.setAttribute('rel', 'noopener noreferrer');
164
- elm.textContent = origineFileName || getDisplayNameFromPath(file);
165
- fn.s.insertNode(elm);
166
- if ((_b = fn === null || fn === void 0 ? void 0 : fn.s) === null || _b === void 0 ? void 0 : _b.setCursorAfter) {
167
- try {
168
- fn.s.setCursorAfter(elm);
169
- }
170
- catch (_c) {
171
- }
172
- }
173
- refreshSavedRange();
191
+ catch (_c) {
174
192
  }
175
- });
176
- }
177
- 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);
178
- if ((e === null || e === void 0 ? void 0 : e.success) === true)
179
- return true;
180
- if (typeof err === 'number')
181
- return err === 0;
182
- return false;
183
- },
184
- getMessage: function (e) {
185
- var _a, _b;
186
- 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;
187
- return typeof msg === 'string' ? msg : '';
188
- },
189
- process: function (resp) {
190
- var payload = (resp === null || resp === void 0 ? void 0 : resp.data) ? resp.data : resp;
191
- var files = Array.isArray(payload === null || payload === void 0 ? void 0 : payload.files) ? payload.files : [];
192
- var error = payload === null || payload === void 0 ? void 0 : payload.error;
193
- var msg = payload === null || payload === void 0 ? void 0 : payload.msg;
194
- return {
195
- files: files,
196
- error: typeof error === 'number' ? String(error) : (error !== null && error !== void 0 ? error : ''),
197
- msg: typeof msg === 'string' ? msg : '',
198
- };
193
+ }
194
+ refreshSavedRange();
195
+ });
199
196
  },
200
197
  error: function (e) {
201
198
  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.11.0",
3
+ "version": "1.12.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,6 +56,35 @@ 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 {
59
88
  const fn = this.jodit;
60
89
 
61
90
  const restoreToLastCaret = () => {
@@ -70,7 +99,6 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
70
99
  }
71
100
  }
72
101
 
73
- // fallback: jodit internal save/restore
74
102
  if (fn?.s?.focus) fn.s.focus();
75
103
  if (fn?.s?.restore) {
76
104
  try {
@@ -92,91 +120,59 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
92
120
  }
93
121
  };
94
122
 
95
- const normalizedFiles: Array<{ file: string; origineFileName?: string }> = (() => {
96
- const raw =
97
- (Array.isArray(e?.files) ? e.files : null) ??
98
- (Array.isArray(e?.data?.files) ? e.data.files : null) ??
99
- [];
100
-
101
- return raw
102
- .map((item: any) => {
103
- if (typeof item === 'string') return { file: item };
104
- if (item && typeof item === 'object') {
105
- return {
106
- file: String(item.file ?? ''),
107
- origineFileName: item.origineFileName ? String(item.origineFileName) : undefined,
108
- };
109
- }
110
- return { file: '' };
111
- })
112
- .filter((x: { file: any; }) => !!x.file);
113
- })();
114
-
115
- if (normalizedFiles.length) {
116
- normalizedFiles.forEach(({ file, origineFileName }) => {
117
- const src = imageUrl ? `${imageUrl}/${file}` : file;
118
-
119
- // ✅ Restore caret BEFORE inserting anything (image or file)
120
- restoreToLastCaret();
121
-
122
- // ✅ If it's an image => insert <img>, otherwise insert <a href="...">
123
- if (isImageByExtension(file, this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
124
- const tagName = 'img';
125
- const elm = fn.createInside.element(tagName);
126
- elm.setAttribute('src', src);
127
- fn.s.insertImage(elm as HTMLImageElement, null, fn.o.imageDefaultWidth);
128
- refreshSavedRange();
129
- } else {
130
- const tagName = 'a';
131
- const elm = fn.createInside.element(tagName);
132
- elm.setAttribute('href', src);
133
- elm.setAttribute('target', '_blank');
134
- elm.setAttribute('rel', 'noopener noreferrer');
135
-
136
- // ✅ Display origineFileName (new response), fallback to previous logic
137
- elm.textContent = origineFileName || getDisplayNameFromPath(file);
138
-
139
- fn.s.insertNode(elm);
140
-
141
- if (fn?.s?.setCursorAfter) {
142
- try {
143
- fn.s.setCursorAfter(elm);
144
- } catch {
145
- // ignore
146
- }
147
- }
148
-
149
- refreshSavedRange();
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
+ };
150
131
  }
151
- });
152
- }
153
-
154
- const err =
155
- (typeof e?.error === 'number' ? e.error : undefined) ??
156
- (typeof e?.data?.error === 'number' ? e.data.error : undefined);
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
+ }
157
153
 
158
- if (e?.success === true) return true;
159
- if (typeof err === 'number') return err === 0;
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);
160
161
 
161
- return false;
162
- },
163
- getMessage(e: any): string {
164
- const msg = e?.msg ?? e?.data?.msg;
165
- return typeof msg === 'string' ? msg : '';
166
- },
167
- process(resp: any): { files: any[]; error: string; msg: string } {
168
- const payload = resp?.data ? resp.data : resp;
162
+ fn.s.insertNode(elm);
169
163
 
170
- const files = Array.isArray(payload?.files) ? payload.files : [];
171
- const error = payload?.error;
172
- const msg = payload?.msg;
164
+ if (fn?.s?.setCursorAfter) {
165
+ try {
166
+ fn.s.setCursorAfter(elm);
167
+ } catch {
168
+ // ignore
169
+ }
170
+ }
173
171
 
174
- return {
175
- files,
176
- error: typeof error === 'number' ? String(error) : (error ?? ''),
177
- msg: typeof msg === 'string' ? msg : '',
178
- };
172
+ refreshSavedRange();
173
+ });
179
174
  },
175
+
180
176
  error(this: any, e: Error): void {
181
177
  this.j.e.fire('errorMessage', e.message, 'error', 4000);
182
178
  },
package/types/Editor.d.ts CHANGED
@@ -19,6 +19,7 @@ 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;
22
23
  error(this: any, e: Error): void;
23
24
  defaultHandlerError(this: any, e: any): void;
24
25
  };