@syncfusion/ej2-filemanager 19.4.56 → 20.1.52-10459

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 (208) hide show
  1. package/.eslintrc.json +20 -3
  2. package/README.md +54 -43
  3. package/dist/ej2-filemanager.min.js +1 -0
  4. package/dist/ej2-filemanager.umd.min.js +1 -10
  5. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es2015.js +2371 -664
  7. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  8. package/dist/es6/ej2-filemanager.es5.js +2440 -714
  9. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  10. package/dist/global/ej2-filemanager.min.js +1 -10
  11. package/dist/global/ej2-filemanager.min.js.map +1 -1
  12. package/dist/global/index.d.ts +0 -9
  13. package/helpers/e2e/filemanagerHelper.js +183 -166
  14. package/package.json +71 -71
  15. package/src/file-manager/actions/breadcrumb-bar.js +1 -5
  16. package/src/file-manager/actions/index.d.ts +1 -0
  17. package/src/file-manager/actions/index.js +1 -0
  18. package/src/file-manager/actions/toolbar.d.ts +1 -0
  19. package/src/file-manager/actions/toolbar.js +135 -20
  20. package/src/file-manager/actions/virtualization.d.ts +93 -0
  21. package/src/file-manager/actions/virtualization.js +279 -0
  22. package/src/file-manager/base/file-manager-model.d.ts +161 -28
  23. package/src/file-manager/base/file-manager.d.ts +182 -28
  24. package/src/file-manager/base/file-manager.js +254 -29
  25. package/src/file-manager/base/interface.d.ts +329 -3
  26. package/src/file-manager/base/interface.js +0 -1
  27. package/src/file-manager/common/operations.d.ts +7 -0
  28. package/src/file-manager/common/operations.js +830 -185
  29. package/src/file-manager/common/utility.d.ts +46 -3
  30. package/src/file-manager/common/utility.js +249 -73
  31. package/src/file-manager/index.d.ts +1 -0
  32. package/src/file-manager/index.js +1 -0
  33. package/src/file-manager/layout/details-view.d.ts +10 -0
  34. package/src/file-manager/layout/details-view.js +204 -94
  35. package/src/file-manager/layout/large-icons-view.d.ts +4 -2
  36. package/src/file-manager/layout/large-icons-view.js +122 -73
  37. package/src/file-manager/layout/navigation-pane.d.ts +2 -0
  38. package/src/file-manager/layout/navigation-pane.js +97 -73
  39. package/src/file-manager/models/column-model.d.ts +23 -5
  40. package/src/file-manager/models/column.d.ts +21 -2
  41. package/src/file-manager/models/column.js +6 -0
  42. package/src/file-manager/models/default-locale.js +0 -1
  43. package/src/file-manager/models/details-view-settings-model.d.ts +1 -1
  44. package/src/file-manager/models/details-view-settings.js +8 -3
  45. package/src/file-manager/models/navigation-pane-settings.d.ts +8 -8
  46. package/src/file-manager/models/search-settings.d.ts +5 -0
  47. package/src/file-manager/models/toolbar-settings-model.d.ts +177 -2
  48. package/src/file-manager/models/toolbar-settings.d.ts +157 -2
  49. package/src/file-manager/models/toolbar-settings.js +64 -2
  50. package/src/file-manager/models/upload-settings-model.d.ts +13 -0
  51. package/src/file-manager/models/upload-settings.d.ts +12 -0
  52. package/src/file-manager/models/upload-settings.js +3 -0
  53. package/src/file-manager/pop-up/context-menu.d.ts +2 -1
  54. package/src/file-manager/pop-up/context-menu.js +111 -36
  55. package/src/file-manager/pop-up/dialog.d.ts +1 -2
  56. package/src/file-manager/pop-up/dialog.js +19 -40
  57. package/src/global.js +1 -1
  58. package/styles/bootstrap-dark-lite.css +1058 -0
  59. package/styles/bootstrap-dark-lite.scss +16 -0
  60. package/styles/bootstrap-dark.css +371 -665
  61. package/styles/bootstrap-dark.scss +17 -1
  62. package/styles/bootstrap-lite.css +1040 -0
  63. package/styles/bootstrap-lite.scss +16 -0
  64. package/styles/bootstrap.css +353 -644
  65. package/styles/bootstrap.scss +17 -1
  66. package/styles/bootstrap4-lite.css +1068 -0
  67. package/styles/bootstrap4-lite.scss +16 -0
  68. package/styles/bootstrap4.css +381 -680
  69. package/styles/bootstrap4.scss +17 -1
  70. package/styles/bootstrap5-dark-lite.css +1078 -0
  71. package/styles/bootstrap5-dark-lite.scss +16 -0
  72. package/styles/bootstrap5-dark.css +377 -695
  73. package/styles/bootstrap5-dark.scss +17 -1
  74. package/styles/bootstrap5-lite.css +1078 -0
  75. package/styles/bootstrap5-lite.scss +16 -0
  76. package/styles/bootstrap5.3-lite.css +1035 -0
  77. package/styles/bootstrap5.3-lite.scss +16 -0
  78. package/styles/bootstrap5.3.css +1603 -0
  79. package/styles/bootstrap5.3.scss +17 -0
  80. package/styles/bootstrap5.css +377 -695
  81. package/styles/bootstrap5.scss +17 -1
  82. package/styles/fabric-dark-lite.css +1039 -0
  83. package/styles/fabric-dark-lite.scss +16 -0
  84. package/styles/fabric-dark.css +358 -642
  85. package/styles/fabric-dark.scss +17 -1
  86. package/styles/fabric-lite.css +1039 -0
  87. package/styles/fabric-lite.scss +16 -0
  88. package/styles/fabric.css +357 -641
  89. package/styles/fabric.scss +17 -1
  90. package/styles/file-manager/_all.scss +1 -1
  91. package/styles/file-manager/_bds-definition.scss +236 -0
  92. package/styles/file-manager/_bigger.scss +758 -0
  93. package/styles/file-manager/_bootstrap-dark-definition.scss +6 -2
  94. package/styles/file-manager/_bootstrap-definition.scss +6 -2
  95. package/styles/file-manager/_bootstrap4-definition.scss +6 -2
  96. package/styles/file-manager/_bootstrap5-definition.scss +21 -16
  97. package/styles/file-manager/_bootstrap5.3-definition.scss +242 -0
  98. package/styles/file-manager/_fabric-dark-definition.scss +6 -2
  99. package/styles/file-manager/_fabric-definition.scss +6 -2
  100. package/styles/file-manager/_fluent-dark-definition.scss +1 -0
  101. package/styles/file-manager/_fluent-definition.scss +26 -22
  102. package/styles/file-manager/_fluent2-definition.scss +255 -0
  103. package/styles/file-manager/_fusionnew-definition.scss +241 -0
  104. package/styles/file-manager/_highcontrast-definition.scss +6 -2
  105. package/styles/file-manager/_highcontrast-light-definition.scss +6 -2
  106. package/styles/file-manager/_layout.scss +373 -912
  107. package/styles/file-manager/_material-dark-definition.scss +7 -2
  108. package/styles/file-manager/_material-definition.scss +7 -2
  109. package/styles/file-manager/_material3-dark-definition.scss +1 -0
  110. package/styles/file-manager/_material3-definition.scss +235 -0
  111. package/styles/file-manager/_tailwind-definition.scss +20 -16
  112. package/styles/file-manager/_theme.scss +130 -99
  113. package/styles/file-manager/bootstrap-dark.css +371 -665
  114. package/styles/file-manager/bootstrap-dark.scss +2 -1
  115. package/styles/file-manager/bootstrap.css +353 -644
  116. package/styles/file-manager/bootstrap.scss +2 -1
  117. package/styles/file-manager/bootstrap4.css +381 -680
  118. package/styles/file-manager/bootstrap4.scss +2 -1
  119. package/styles/file-manager/bootstrap5-dark.css +377 -695
  120. package/styles/file-manager/bootstrap5-dark.scss +2 -1
  121. package/styles/file-manager/bootstrap5.3.css +1603 -0
  122. package/styles/file-manager/bootstrap5.3.scss +17 -0
  123. package/styles/file-manager/bootstrap5.css +377 -695
  124. package/styles/file-manager/bootstrap5.scss +2 -1
  125. package/styles/file-manager/fabric-dark.css +358 -642
  126. package/styles/file-manager/fabric-dark.scss +2 -1
  127. package/styles/file-manager/fabric.css +357 -641
  128. package/styles/file-manager/fabric.scss +2 -1
  129. package/styles/file-manager/fluent-dark.css +1616 -0
  130. package/styles/file-manager/fluent-dark.scss +17 -0
  131. package/styles/file-manager/fluent.css +1615 -0
  132. package/styles/file-manager/fluent.scss +17 -0
  133. package/styles/file-manager/fluent2.css +1886 -0
  134. package/styles/file-manager/fluent2.scss +17 -0
  135. package/styles/file-manager/highcontrast-light.css +354 -644
  136. package/styles/file-manager/highcontrast-light.scss +2 -1
  137. package/styles/file-manager/highcontrast.css +377 -647
  138. package/styles/file-manager/highcontrast.scss +2 -1
  139. package/styles/file-manager/icons/_bds.scss +235 -0
  140. package/styles/file-manager/icons/_bootstrap.scss +0 -1
  141. package/styles/file-manager/icons/_bootstrap4.scss +0 -1
  142. package/styles/file-manager/icons/_bootstrap5.3.scss +235 -0
  143. package/styles/file-manager/icons/_fabric-dark.scss +0 -1
  144. package/styles/file-manager/icons/_fabric.scss +0 -1
  145. package/styles/file-manager/icons/_fluent-dark.scss +1 -0
  146. package/styles/file-manager/icons/_fluent.scss +19 -19
  147. package/styles/file-manager/icons/_fluent2.scss +235 -0
  148. package/styles/file-manager/icons/_fusionnew.scss +235 -0
  149. package/styles/file-manager/icons/_material3-dark.scss +1 -0
  150. package/styles/file-manager/icons/_material3.scss +235 -0
  151. package/styles/file-manager/icons/_tailwind.scss +49 -49
  152. package/styles/file-manager/material-dark.css +392 -671
  153. package/styles/file-manager/material-dark.scss +2 -1
  154. package/styles/file-manager/material.css +391 -654
  155. package/styles/file-manager/material.scss +2 -1
  156. package/styles/file-manager/material3-dark.css +1633 -0
  157. package/styles/file-manager/material3-dark.scss +18 -0
  158. package/styles/file-manager/material3.css +1635 -0
  159. package/styles/file-manager/material3.scss +18 -0
  160. package/styles/file-manager/tailwind-dark.css +369 -686
  161. package/styles/file-manager/tailwind-dark.scss +2 -1
  162. package/styles/file-manager/tailwind.css +369 -686
  163. package/styles/file-manager/tailwind.scss +2 -1
  164. package/styles/fluent-dark-lite.css +1037 -0
  165. package/styles/fluent-dark-lite.scss +16 -0
  166. package/styles/fluent-dark.css +1616 -0
  167. package/styles/fluent-dark.scss +17 -0
  168. package/styles/fluent-lite.css +1036 -0
  169. package/styles/fluent-lite.scss +16 -0
  170. package/styles/fluent.css +1615 -0
  171. package/styles/fluent.scss +17 -0
  172. package/styles/fluent2-lite.css +1272 -0
  173. package/styles/fluent2-lite.scss +16 -0
  174. package/styles/fluent2.css +1886 -0
  175. package/styles/fluent2.scss +17 -0
  176. package/styles/highcontrast-light-lite.css +1039 -0
  177. package/styles/highcontrast-light-lite.scss +16 -0
  178. package/styles/highcontrast-light.css +354 -644
  179. package/styles/highcontrast-light.scss +17 -1
  180. package/styles/highcontrast-lite.css +1059 -0
  181. package/styles/highcontrast-lite.scss +16 -0
  182. package/styles/highcontrast.css +377 -647
  183. package/styles/highcontrast.scss +17 -1
  184. package/styles/material-dark-lite.css +1092 -0
  185. package/styles/material-dark-lite.scss +16 -0
  186. package/styles/material-dark.css +392 -671
  187. package/styles/material-dark.scss +17 -1
  188. package/styles/material-lite.css +1097 -0
  189. package/styles/material-lite.scss +16 -0
  190. package/styles/material.css +391 -654
  191. package/styles/material.scss +17 -1
  192. package/styles/material3-dark-lite.css +1090 -0
  193. package/styles/material3-dark-lite.scss +16 -0
  194. package/styles/material3-dark.css +1633 -0
  195. package/styles/material3-dark.scss +19 -0
  196. package/styles/material3-lite.css +1092 -0
  197. package/styles/material3-lite.scss +16 -0
  198. package/styles/material3.css +1635 -0
  199. package/styles/material3.scss +19 -0
  200. package/styles/tailwind-dark-lite.css +1060 -0
  201. package/styles/tailwind-dark-lite.scss +16 -0
  202. package/styles/tailwind-dark.css +369 -686
  203. package/styles/tailwind-dark.scss +17 -1
  204. package/styles/tailwind-lite.css +1060 -0
  205. package/styles/tailwind-lite.scss +16 -0
  206. package/styles/tailwind.css +369 -686
  207. package/styles/tailwind.scss +17 -1
  208. package/CHANGELOG.md +0 -466
@@ -1,9 +1,11 @@
1
- import { Ajax, createElement, select, extend } from '@syncfusion/ej2-base';
1
+ import { Ajax, Fetch, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';
2
2
  import { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';
3
3
  import * as events from '../base/constant';
4
4
  import { createDialog, createExtDialog } from '../pop-up/dialog';
5
- import { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getParentPath, getPathObject } from '../common/utility';
6
- import { generatePath } from '../common/utility';
5
+ import { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';
6
+ import { generatePath, getAccessDetails } from '../common/utility';
7
+ import { getUid } from '@syncfusion/ej2-grids';
8
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
9
  /**
8
10
  * Function to read the content from given path in File Manager.
9
11
  *
@@ -14,14 +16,12 @@ import { generatePath } from '../common/utility';
14
16
  * @private
15
17
  */
16
18
  export function read(parent, event, path) {
17
- // eslint-disable-next-line
18
19
  var itemData = parent.itemData;
19
20
  for (var i = 0; i < itemData.length; i++) {
20
21
  if (isNOU(getValue('hasChild', itemData[i]))) {
21
22
  setValue('hasChild', false, itemData[i]);
22
23
  }
23
24
  }
24
- // eslint-disable-next-line
25
25
  var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };
26
26
  createAjax(parent, data, readSuccess, event);
27
27
  }
@@ -34,7 +34,6 @@ export function read(parent, event, path) {
34
34
  * @private
35
35
  */
36
36
  export function createFolder(parent, itemName) {
37
- // eslint-disable-next-line
38
37
  var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };
39
38
  createAjax(parent, data, createSuccess, itemName);
40
39
  }
@@ -47,11 +46,8 @@ export function createFolder(parent, itemName) {
47
46
  * @private
48
47
  */
49
48
  export function filter(parent, event) {
50
- // eslint-disable-next-line
51
49
  var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };
52
- // eslint-disable-next-line
53
50
  var filterData;
54
- // eslint-disable-next-line
55
51
  var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;
56
52
  createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));
57
53
  }
@@ -83,9 +79,8 @@ export function rename(parent, path, itemNewName) {
83
79
  newName = fPath.replace(path, '') + itemNewName;
84
80
  }
85
81
  }
86
- // eslint-disable-next-line
87
82
  var data = {
88
- action: 'rename', path: path, name: name, newName: newName, data: parent.itemData
83
+ action: 'rename', path: path, name: name, newName: newName, data: parent.itemData, showFileExtension: parent.showFileExtension
89
84
  };
90
85
  createAjax(parent, data, renameSuccess, path);
91
86
  }
@@ -102,10 +97,7 @@ export function rename(parent, path, itemNewName) {
102
97
  * @returns {void}
103
98
  * @private
104
99
  */
105
- export function paste(parent, path, names, targetPath, pasteOperation,
106
- // eslint-disable-next-line
107
- renameItems, actionRecords) {
108
- // eslint-disable-next-line
100
+ export function paste(parent, path, names, targetPath, pasteOperation, renameItems, actionRecords) {
109
101
  var data = {
110
102
  action: pasteOperation, path: path, targetData: parent.itemData[0],
111
103
  targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords
@@ -124,7 +116,6 @@ renameItems, actionRecords) {
124
116
  * @private
125
117
  */
126
118
  export function Delete(parent, items, path, operation) {
127
- // eslint-disable-next-line
128
119
  var data = { action: operation, path: path, names: items, data: parent.itemData };
129
120
  createAjax(parent, data, deleteSuccess, path);
130
121
  }
@@ -140,26 +131,420 @@ export function Delete(parent, items, path, operation) {
140
131
  * @private
141
132
  */
142
133
  export function GetDetails(parent, names, path, operation) {
143
- // eslint-disable-next-line
144
134
  var data = { action: operation, path: path, names: names, data: parent.itemData };
145
135
  createAjax(parent, data, detailsSuccess, path, operation);
146
136
  }
147
137
  /**
148
- * Function for createAjax in File Manager.
138
+ * Function for getDateFormat in File Manager.
139
+ *
140
+ * @param {IFileManager} parent - specifies the parent element.
141
+ * @returns {void}
142
+ * @private
143
+ */
144
+ function getDateFormat(parent) {
145
+ var columns = parent.detailsViewSettings.columns;
146
+ var dateFormat;
147
+ if (!columns) {
148
+ return null;
149
+ }
150
+ for (var i = 0; i < columns.length; i++) {
151
+ if (columns[i].field === '_fm_modified') {
152
+ if (!isNOU(columns[i].format)) {
153
+ dateFormat = columns[i].format.toString();
154
+ }
155
+ break;
156
+ }
157
+ }
158
+ return dateFormat;
159
+ }
160
+ /**
161
+ * Checks whether fileSystemData is enabled.
162
+ *
163
+ * @param {IFileManager} parent - specifies the parent element.
164
+ * @returns {boolean} - returns the boolean value.
165
+ */
166
+ export function isFileSystemData(parent) {
167
+ var isFileSystemData = parent.fileSystemData.length >= 0 && isNOU(parent.ajaxSettings.url);
168
+ return isFileSystemData;
169
+ }
170
+ /**
171
+ * Function to check whether file already exist or not.
172
+ *
173
+ * @param {Record<string, any>} fileSystemData - specifies the file data.
174
+ * @param {string} name - specifies the name.
175
+ * @returns {boolean} - returns the boolean value.
176
+ * @private
177
+ */
178
+ function isFileExists(fileSystemData, name) {
179
+ var isExists = fileSystemData.some(function (item) { return item.name === name; });
180
+ return isExists;
181
+ }
182
+ /**
183
+ * Function to find the index value of a file or folder.
184
+ *
185
+ * @param {IFileManager} parent - specifies the parent element.
186
+ * @param {number} id - specifies the id.
187
+ * @returns {number} - returns the index value.
188
+ * @private
189
+ */
190
+ function findIndexById(parent, id) {
191
+ var index = parent.fileSystemData.findIndex(function (item) { return String(item.id) === String(id); });
192
+ return index;
193
+ }
194
+ /**
195
+ * Function to get the entire data of a file or folder using id value.
196
+ *
197
+ * @param {IFileManager} parent - specifies the parent element.
198
+ * @param {number | string} id - specifies the id.
199
+ * @returns {Object} - returns the data.
200
+ * @private
201
+ */
202
+ function filterById(parent, id) {
203
+ var data = parent.fileSystemData.filter(function (item) { return String(item.id) === String(id); })[0];
204
+ return data;
205
+ }
206
+ /**
207
+ * Function to get the entire data of a file or folder for a parent.
208
+ *
209
+ * @param {IFileManager} parent - specifies the parent element.
210
+ * @param {number | string} parentId - specifies the parent id.
211
+ * @returns {Object[]} - returns the data.
212
+ * @private
213
+ */
214
+ function filterByParent(parent, parentId) {
215
+ var data = parent.fileSystemData.filter(function (item) { return String(item.parentId) === String(parentId); });
216
+ return data;
217
+ }
218
+ /**
219
+ * Function to create a new copied file or folder.
220
+ *
221
+ * @param {Record<string, any>} data - specifies the file or folder data.
222
+ * @param {Record<string, any>} target - specifies the target data.
223
+ * @param {string} itemName - specifies the item name.
224
+ * @param {boolean} isCopy - specifies the copy operation.
225
+ * @returns {Record<string, Object>} - returns the data.
226
+ * @private
227
+ */
228
+ function createNewItem(data, target, itemName, isCopy) {
229
+ var newItem = {};
230
+ //Construct the new folder details.
231
+ for (var key in data) {
232
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
233
+ newItem[key] = null;
234
+ }
235
+ }
236
+ var currentDate = new Date();
237
+ var folderPath = target.id !== 0 ? target.filterPath + target.name : '\\';
238
+ Object.assign(newItem, {
239
+ dateCreated: currentDate,
240
+ dateModified: currentDate,
241
+ filterPath: folderPath,
242
+ hasChild: isCopy ? data.hasChild : false,
243
+ id: getUid(itemName === null ? data.name : itemName),
244
+ isFile: isCopy ? data.isFile : false,
245
+ name: itemName === null ? data.name : itemName,
246
+ parentId: target.id,
247
+ size: isCopy ? data.size : 0,
248
+ type: isCopy ? data.type : ''
249
+ });
250
+ return newItem;
251
+ }
252
+ /**
253
+ * Function to create an error response.
254
+ *
255
+ * @param {IFileManager} parent - specifies the parent element.
256
+ * @param {string} message - specifies the error message.
257
+ * @param {string} code - specifies the error code.
258
+ * @param {Object[]} fileName - specifies the file name.
259
+ * @returns {void}
260
+ * @private
261
+ */
262
+ function createErrorObject(parent, message, code, fileName) {
263
+ parent.responseData = {
264
+ cwd: null,
265
+ details: null,
266
+ error: {
267
+ code: code,
268
+ message: message,
269
+ fileExists: fileName != null ? fileName : null
270
+ },
271
+ files: null
272
+ };
273
+ }
274
+ /**
275
+ * Function to trigger folder creation.
149
276
  *
150
277
  * @param {IFileManager} parent - specifies the parent element.
151
278
  * @param {Object} data - specifies the data.
152
- * @param {Function} fn - specifies the fn.
153
- * @param {string} event - specifies the event.
154
- * @param {string} operation - specifies the operation.
155
- * @param {string} targetPath - specifies the target path.
279
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
280
+ * @returns {void}
281
+ * @private
282
+ */
283
+ function triggerFolderCreation(parent, data, eventArgs) {
284
+ var createEventArgs = {
285
+ folderName: getValue('name', data),
286
+ cancel: false,
287
+ path: getValue('path', data),
288
+ parentFolder: getValue('data', data)
289
+ };
290
+ parent.trigger('beforeFolderCreate', createEventArgs, function (args) {
291
+ if (args.cancel) {
292
+ eventArgs.cancel = true;
293
+ return;
294
+ }
295
+ if (isFileSystemData(parent)) {
296
+ if (!isFileExists(parent.fileSystemData, args.folderName)) {
297
+ var data_1 = args.parentFolder[0];
298
+ var newObject = createNewItem(data_1, data_1, args.folderName, false);
299
+ parent.fileSystemData.push(newObject);
300
+ }
301
+ else {
302
+ var message = 'A file or folder with the name ' + args.folderName + ' already exists.';
303
+ createErrorObject(parent, message, '400', null);
304
+ }
305
+ }
306
+ });
307
+ }
308
+ /**
309
+ * Function to trigger delete operation.
310
+ *
311
+ * @param {IFileManager} parent - specifies the parent element.
312
+ * @param {Object} data - specifies the data.
313
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
314
+ * @returns {void}
315
+ * @private
316
+ */
317
+ function triggerDeleteOperation(parent, data, eventArgs) {
318
+ var deleteEventArgs = {
319
+ cancel: false,
320
+ itemData: getValue('data', data),
321
+ path: getValue('path', data)
322
+ };
323
+ parent.trigger('beforeDelete', deleteEventArgs, function (args) {
324
+ if (args.cancel) {
325
+ eventArgs.cancel = true;
326
+ return;
327
+ }
328
+ if (isFileSystemData(parent)) {
329
+ args.itemData.forEach(function (itemData) {
330
+ var index = findIndexById(parent, itemData.id);
331
+ if (index !== -1) {
332
+ parent.fileSystemData.splice(index, 1);
333
+ }
334
+ if (!itemData.isFile) {
335
+ var subItems = parent.fileSystemData.filter(function (obj) { return obj.filterPath.includes(itemData.name); });
336
+ subItems.forEach(function (subItem) {
337
+ var index = findIndexById(parent, subItem.id);
338
+ if (index !== -1) {
339
+ parent.fileSystemData.splice(index, 1);
340
+ }
341
+ });
342
+ }
343
+ });
344
+ }
345
+ });
346
+ }
347
+ /**
348
+ * Function to trigger rename operation.
349
+ *
350
+ * @param {IFileManager} parent - specifies the parent element.
351
+ * @param {Object} data - specifies the data.
352
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
353
+ * @returns {void}
354
+ * @private
355
+ */
356
+ function triggerRenameOperation(parent, data, eventArgs) {
357
+ var renameEventArgs = {
358
+ cancel: false,
359
+ newName: getValue('newName', data),
360
+ itemData: getValue('data', data),
361
+ path: getValue('path', data)
362
+ };
363
+ parent.trigger('beforeRename', renameEventArgs, function (args) {
364
+ if (args.cancel) {
365
+ eventArgs.cancel = true;
366
+ return;
367
+ }
368
+ if (isFileSystemData(parent)) {
369
+ if (!isFileExists(parent.fileSystemData, args.newName)) {
370
+ var fileData = filterById(parent, args.itemData[0].id);
371
+ fileData.name = args.newName;
372
+ }
373
+ else {
374
+ var message = 'Cannot rename' + args.itemData[0].name + 'to' + args.newName + ': destination already exists.';
375
+ createErrorObject(parent, message, '400', null);
376
+ }
377
+ }
378
+ });
379
+ }
380
+ /**
381
+ * Function to trigger move or copy operation.
382
+ *
383
+ * @param {IFileManager} parent - specifies the parent element.
384
+ * @param {Object} data - specifies the data.
385
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
156
386
  * @returns {void}
157
387
  * @private
158
388
  */
159
- function createAjax(
160
- // eslint-disable-next-line
161
- parent, data, fn, event, operation, targetPath) {
162
- // eslint-disable-next-line
389
+ function triggerMoveOrCopyOperation(parent, data, eventArgs) {
390
+ var moveEventArgs = {
391
+ cancel: false,
392
+ itemData: getValue('data', data),
393
+ isCopy: getValue('action', data) === 'copy' ? true : false,
394
+ path: getValue('path', data),
395
+ targetData: getValue('targetData', data),
396
+ targetPath: getValue('targetPath', data)
397
+ };
398
+ parent.trigger('beforeMove', moveEventArgs, function (args) {
399
+ if (args.cancel) {
400
+ eventArgs.cancel = true;
401
+ return;
402
+ }
403
+ if (isFileSystemData(parent)) {
404
+ var message = 'File Already Exists';
405
+ var action = getValue('action', data);
406
+ var itemPermission = getAccessDetails(parent, args.itemData, action, false);
407
+ var pathPermission = getAccessDetails(parent, [args.targetData], action, true);
408
+ var file_1 = [];
409
+ parent.pasteNodes = [];
410
+ if (itemPermission === '' && pathPermission === '') {
411
+ if (args.isCopy) {
412
+ var folderSubItems_1 = filterByParent(parent, args.targetData.id);
413
+ var copiedFolders = args.itemData;
414
+ copiedFolders.forEach(function (itemData) {
415
+ if (!isFileExists(folderSubItems_1, itemData.name) || getValue('renameFiles', data).length > 0) {
416
+ if (getValue('renameFiles', data).length > 0) {
417
+ var names = itemData.name.split('.');
418
+ var name_1 = itemData.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';
419
+ copyFolderItems(parent, itemData, args.targetData, name_1);
420
+ parent.responseData.error = null;
421
+ parent.existingFileCount++;
422
+ return;
423
+ }
424
+ copyFolderItems(parent, itemData, args.targetData, null);
425
+ }
426
+ else {
427
+ file_1.push(itemData.name);
428
+ }
429
+ });
430
+ if (file_1.length > 0) {
431
+ createErrorObject(parent, message, '400', file_1);
432
+ }
433
+ return;
434
+ }
435
+ var target = args.targetData;
436
+ var getTargetFiles = filterByParent(parent, target.id);
437
+ for (var i = 0; i < args.itemData.length; i++) {
438
+ var currItem = args.itemData[i];
439
+ if (!isFileExists(getTargetFiles, currItem.name) || getValue('renameFiles', data).length > 0) {
440
+ if (!target.hasChild) {
441
+ target.hasChild = !currItem.isFile;
442
+ }
443
+ if (!currItem.isFile) {
444
+ //Check whether the source folder include other sub folders or not.
445
+ var subItems = currItem.parentId !== 0
446
+ ? filterByParent(parent, currItem.parentID) : [];
447
+ var itemData = filterById(parent, currItem.parentId);
448
+ itemData.hasChild = subItems.length > 1 ? true : false;
449
+ }
450
+ var fileData = filterById(parent, currItem.id);
451
+ if (getValue('renameFiles', data).length > 0) {
452
+ var names = currItem.name.split('.');
453
+ currItem.name = currItem.name.includes('.') ? names[0] + '(' + parent.existingFileCount + ').' + names[1] : names[0] + '(' + parent.existingFileCount + ')';
454
+ fileData.name = currItem.name;
455
+ parent.responseData.error = null;
456
+ parent.existingFileCount++;
457
+ parent.dropData = target;
458
+ parent.dropPath = args.path;
459
+ var pathArray = args.targetPath.replace(/^\/|\/$/g, '').split('/');
460
+ target = filterById(parent, pathArray[pathArray.length - 1]);
461
+ }
462
+ fileData.parentId = target.id;
463
+ fileData.filterPath = target.id === 0 ? '\\' : target.filterPath + target.name + '\\';
464
+ }
465
+ else {
466
+ file_1.push(currItem.name);
467
+ }
468
+ }
469
+ if (file_1.length > 0) {
470
+ createErrorObject(parent, message, '400', file_1);
471
+ }
472
+ }
473
+ }
474
+ });
475
+ }
476
+ /**
477
+ * Function to trigger search operation.
478
+ *
479
+ * @param {IFileManager} parent - specifies the parent element.
480
+ * @param {Object} data - specifies the data.
481
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
482
+ * @returns {void}
483
+ * @private
484
+ */
485
+ function triggerSearchOperation(parent, data, eventArgs) {
486
+ var searchEventArgs = {
487
+ searchResults: getValue('data', data),
488
+ cancel: false,
489
+ path: getValue('path', data),
490
+ searchText: getValue('searchString', data),
491
+ caseSensitive: getValue('caseSensitive', data),
492
+ showHiddenItems: getValue('showHiddenItems', data)
493
+ };
494
+ parent.trigger('search', searchEventArgs, function (args) {
495
+ setValue('data', args.searchResults, data);
496
+ if (args.cancel) {
497
+ eventArgs.cancel = true;
498
+ }
499
+ });
500
+ }
501
+ /**
502
+ * Function to trigger client side events.
503
+ *
504
+ * @param {IFileManager} parent - specifies the parent element.
505
+ * @param {Object} data - specifies the data.
506
+ * @param {BeforeSendEventArgs} eventArgs - specifies the eventArgs.
507
+ * @returns {void}
508
+ * @private
509
+ */
510
+ function triggerClientEvents(parent, data, eventArgs) {
511
+ switch (getValue('action', data)) {
512
+ case 'create': {
513
+ triggerFolderCreation(parent, data, eventArgs);
514
+ break;
515
+ }
516
+ case 'delete': {
517
+ triggerDeleteOperation(parent, data, eventArgs);
518
+ break;
519
+ }
520
+ case 'rename': {
521
+ triggerRenameOperation(parent, data, eventArgs);
522
+ break;
523
+ }
524
+ case 'move':
525
+ case 'copy': {
526
+ triggerMoveOrCopyOperation(parent, data, eventArgs);
527
+ break;
528
+ }
529
+ case 'search': {
530
+ triggerSearchOperation(parent, data, eventArgs);
531
+ break;
532
+ }
533
+ }
534
+ }
535
+ /**
536
+ * Creates an AJAX request for the file manager.
537
+ *
538
+ * @param {IFileManager} parent - The parent file manager instance.
539
+ * @param {Object} data - The data object for the AJAX request.
540
+ * @param {Function} fn - The callback function to be executed after the AJAX request.
541
+ * @param {string} [event] - The event type for the AJAX request.
542
+ * @param {string} [operation] - The operation type for the AJAX request.
543
+ * @param {string} [targetPath] - The target path for the AJAX request.
544
+ * @returns {void}
545
+ * @private
546
+ */
547
+ function createAjax(parent, data, fn, event, operation, targetPath) {
163
548
  var ajaxSettings = {
164
549
  url: parent.ajaxSettings.url,
165
550
  type: 'POST',
@@ -172,9 +557,70 @@ parent, data, fn, event, operation, targetPath) {
172
557
  beforeSend: null
173
558
  };
174
559
  var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };
560
+ triggerClientEvents(parent, data, eventArgs);
175
561
  parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {
176
562
  if (!beforeSendArgs.cancel) {
177
563
  parent.notify(events.beforeRequest, {});
564
+ if (isFileSystemData(parent)) {
565
+ var filePath = event === 'node-expand' || event === 'finalize-end' ? getValue('path', data) : parent.path;
566
+ var pathArray = filePath.replace(/^\/|\/$/g, '').split('/');
567
+ var idValue = event === 'rename-end-parent' || (event === 'path-changed' && getValue('data', data).length !== 0)
568
+ || (event === 'paste-end' && (parent.targetModule === 'largeiconsview' || parent.targetModule === 'detailsview'))
569
+ ? getValue('data', data)[0].id : pathArray[pathArray.length - 1];
570
+ var action = getValue('action', data);
571
+ var isFileOperation = (action === 'move' || action === 'rename' || action === 'copy' || action === 'delete' || action === 'search') && event !== 'rename-end';
572
+ if (action === 'read' || action === 'create' || event === 'rename-end') {
573
+ var rootId = parent.fileSystemData
574
+ .filter(function (item) { return isNOU(item.parentId); })
575
+ .length > 0
576
+ ? parent.fileSystemData
577
+ .filter(function (item) { return isNOU(item.parentId); })[0].id
578
+ : 0;
579
+ parent.responseData = {
580
+ cwd: filterById(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue),
581
+ details: null,
582
+ error: null,
583
+ files: filterByParent(parent, parent.path === '/' && event !== 'node-expand' && event !== 'rename-end-parent' ? rootId : idValue)
584
+ };
585
+ if (isNOU(parent.responseData.cwd)) {
586
+ var message = 'Cannot load empty data within the File Manager.';
587
+ createErrorObject(parent, message, '400', null);
588
+ }
589
+ }
590
+ else if (isFileOperation && parent.responseData.error === null) {
591
+ var itemData = action === 'search' || action === 'delete' ? getValue('data', data) : [];
592
+ if (itemData.length === 0) {
593
+ itemData = getValue('data', data).map(function (item) { return filterById(parent, item.id); });
594
+ }
595
+ parent.responseData = {
596
+ cwd: null,
597
+ details: null,
598
+ error: null,
599
+ files: itemData
600
+ };
601
+ }
602
+ else if (getValue('action', data) === 'details') {
603
+ var itemData = getValue('data', data);
604
+ var details = itemData[0];
605
+ var isMultipleFiles = itemData.length > 1;
606
+ var itemNames = itemData.map(function (item) { return item.name; });
607
+ var totalSize = isMultipleFiles ? getSize(itemData.reduce(function (accumulator, currentObject) { return accumulator + (currentObject.size || 0); }, 0)) : getSize(details.size);
608
+ var path = (parent.pathNames.includes(details.name) ? parent.pathNames.join('/') : parent.pathNames.join('/') + '/' + details.name);
609
+ parent.responseData.details = Object.assign({
610
+ location: isMultipleFiles ? null : path,
611
+ multipleFiles: isMultipleFiles,
612
+ name: itemNames.join(', '),
613
+ size: totalSize
614
+ }, isMultipleFiles ? {} : {
615
+ created: details.dateCreated,
616
+ isFile: details.isFile,
617
+ modified: details.dateModified,
618
+ permission: details.permission
619
+ });
620
+ }
621
+ performReadOperation(parent, parent.responseData, fn, data, event, operation, targetPath, beforeSendArgs);
622
+ return;
623
+ }
178
624
  var ajax = new Ajax({
179
625
  url: getValue('url', beforeSendArgs.ajaxSettings),
180
626
  type: getValue('type', beforeSendArgs.ajaxSettings),
@@ -199,60 +645,7 @@ parent, data, fn, event, operation, targetPath) {
199
645
  if (typeof (result) === 'string') {
200
646
  result = JSON.parse(result);
201
647
  }
202
- parent.notify(events.afterRequest, { action: 'success' });
203
- var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];
204
- if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {
205
- result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;
206
- setValue('_fm_id', id, result.cwd);
207
- setValue(id, result.cwd, parent.feParent);
208
- if (!isNOU(result.files) || result.error.code === '401') {
209
- if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {
210
- // eslint-disable-next-line
211
- var root = getValue(parent.pathId[0], parent.feParent);
212
- parent.pathNames[0] = getValue('name', root);
213
- parent.hasId = !isNOU(getValue('id', root));
214
- }
215
- if (event === 'finalize-end') {
216
- generatePath(parent);
217
- }
218
- }
219
- }
220
- if (!isNOU(result.files)) {
221
- setDateObject(result.files);
222
- for (var i = 0, len = result.files.length; i < len; i++) {
223
- // eslint-disable-next-line
224
- var item = result.files[i];
225
- setValue('_fm_iconClass', fileType(item), item);
226
- }
227
- if (getValue('action', data) === 'read') {
228
- setNodeId(result, id);
229
- setValue(id, result.files, parent.feFiles);
230
- }
231
- }
232
- if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {
233
- var rootName = parent.rootAliasName || getValue('name', result.details);
234
- var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\');
235
- if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {
236
- if (getValue('names', data).length === 0) {
237
- setValue('name', rootName, result.details);
238
- location_1 = rootName;
239
- }
240
- else {
241
- location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\')), rootName);
242
- }
243
- }
244
- else {
245
- location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\')), rootName);
246
- }
247
- setValue('location', location_1, result.details);
248
- }
249
- fn(parent, result, event, operation, targetPath);
250
- if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end')) {
251
- parent.notify(events.searchTextChange, result);
252
- }
253
- if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {
254
- getValue('onSuccess', beforeSendArgs.ajaxSettings)();
255
- }
648
+ performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs);
256
649
  },
257
650
  onFailure: function () {
258
651
  var result = {
@@ -270,6 +663,117 @@ parent, data, fn, event, operation, targetPath) {
270
663
  }
271
664
  });
272
665
  }
666
+ /**
667
+ * Function to get file size.
668
+ *
669
+ * @param {number} size - specifies the size.
670
+ * @returns {string} - returns the size.
671
+ * @private
672
+ */
673
+ function getSize(size) {
674
+ var hz;
675
+ if (size < 1024) {
676
+ hz = size + ' B';
677
+ }
678
+ else if (size < 1024 * 1024) {
679
+ hz = (size / 1024).toFixed(2) + ' KB';
680
+ }
681
+ else if (size < 1024 * 1024 * 1024) {
682
+ hz = (size / 1024 / 1024).toFixed(2) + ' MB';
683
+ }
684
+ else {
685
+ hz = (size / 1024 / 1024 / 1024).toFixed(2) + ' GB';
686
+ }
687
+ return hz;
688
+ }
689
+ /**
690
+ * Function to perform read operation.
691
+ *
692
+ * @param {IFileManager} parent - specifies the parent element.
693
+ * @param {ReadArgs} result - specifies the result.
694
+ * @param {Function} fn - specifies the function.
695
+ * @param {Object} data - specifies the data.
696
+ * @param {string} event - specifies the event.
697
+ * @param {string} operation - specifies the operation.
698
+ * @param {string} targetPath - specifies the targetPath.
699
+ * @param {BeforeSendEventArgs} beforeSendArgs - specifies the eventArgs.
700
+ * @returns {void}
701
+ * @private
702
+ */
703
+ function performReadOperation(parent, result, fn, data, event, operation, targetPath, beforeSendArgs) {
704
+ parent.notify(events.afterRequest, { action: 'success' });
705
+ var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];
706
+ if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {
707
+ result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;
708
+ setValue('_fm_id', id, result.cwd);
709
+ setValue(id, result.cwd, parent.feParent);
710
+ if (!isNOU(result.files) || result.error.code === '401') {
711
+ if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {
712
+ var root = getValue(parent.pathId[0], parent.feParent);
713
+ parent.pathNames[0] = getValue('name', root);
714
+ parent.hasId = !isNOU(getValue('id', root));
715
+ }
716
+ if (event === 'finalize-end') {
717
+ generatePath(parent);
718
+ }
719
+ }
720
+ }
721
+ var intl = new Internationalization(parent.locale);
722
+ if (!isNOU(result.files)) {
723
+ setDateObject(result.files, intl, getDateFormat(parent));
724
+ for (var i = 0, len = result.files.length; i < len; i++) {
725
+ var item = result.files[i];
726
+ setValue('_fm_iconClass', fileType(item), item);
727
+ }
728
+ if (getValue('action', data) === 'read' || isFileSystemData(parent) && getValue('action', data) === 'search') {
729
+ setNodeId(result, id);
730
+ setValue(id, result.files, parent.feFiles);
731
+ }
732
+ }
733
+ if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {
734
+ var rootName = parent.rootAliasName || getValue('name', result.details);
735
+ var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\');
736
+ if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {
737
+ if (getValue('names', data).length === 0) {
738
+ setValue('name', rootName, result.details);
739
+ location_1 = rootName;
740
+ }
741
+ else {
742
+ location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\')), rootName);
743
+ }
744
+ }
745
+ else {
746
+ location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\')), rootName);
747
+ }
748
+ setValue('location', location_1, result.details);
749
+ }
750
+ fn(parent, result, event, operation, targetPath);
751
+ if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {
752
+ parent.notify(events.searchTextChange, result);
753
+ }
754
+ if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {
755
+ getValue('onSuccess', beforeSendArgs.ajaxSettings)();
756
+ }
757
+ }
758
+ /**
759
+ * Function to copy operation.
760
+ *
761
+ * @param {IFileManager} parent - specifies the parent element.
762
+ * @param {Object} data - specifies the data.
763
+ * @param {string} target - specifies the target.
764
+ * @param {string} itemName - specifies the item name.
765
+ * @returns {void}
766
+ * @private
767
+ */
768
+ function copyFolderItems(parent, data, target, itemName) {
769
+ var newObject = createNewItem(data, target, itemName, true);
770
+ parent.fileSystemData.push(newObject);
771
+ parent.pasteNodes.push(newObject.id);
772
+ var copiedItems = filterByParent(parent, data.id);
773
+ for (var i = 0; i < copiedItems.length; i++) {
774
+ copyFolderItems(parent, copiedItems[i], newObject, null);
775
+ }
776
+ }
273
777
  /**
274
778
  * Function for trigger Ajax failure in File Manager.
275
779
  *
@@ -283,9 +787,7 @@ parent, data, fn, event, operation, targetPath) {
283
787
  * @returns {void}
284
788
  * @private
285
789
  */
286
- function triggerAjaxFailure(
287
- // eslint-disable-next-line
288
- parent, beforeSendArgs, fn, result, event, operation, targetPath) {
790
+ function triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath) {
289
791
  parent.notify(events.afterRequest, { action: 'failure' });
290
792
  fn(parent, result, event, operation, targetPath);
291
793
  if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {
@@ -302,19 +804,28 @@ parent, beforeSendArgs, fn, result, event, operation, targetPath) {
302
804
  * @private
303
805
  */
304
806
  function readSuccess(parent, result, event) {
305
- if (!isNOU(result.files)) {
306
- parent.notify(event, result);
307
- parent.notify(events.selectionChanged, {});
308
- var args = { action: 'read', result: result };
309
- parent.trigger('success', args);
310
- }
311
- else {
312
- if (result.error.code === '401') {
313
- result.files = [];
807
+ try {
808
+ if (!isNOU(result.files)) {
314
809
  parent.notify(event, result);
315
810
  parent.notify(events.selectionChanged, {});
811
+ var args = { action: 'read', result: result };
812
+ parent.trigger('success', args);
813
+ }
814
+ else {
815
+ if (!isNOU(result.error) && result.error.code === '401') {
816
+ result.files = [];
817
+ parent.notify(event, result);
818
+ parent.notify(events.selectionChanged, {});
819
+ }
820
+ onFailure(parent, result, 'read');
821
+ parent.setProperties({ path: parent.oldPath }, true);
822
+ parent.pathNames.pop();
316
823
  }
317
- onFailure(parent, result, 'read');
824
+ }
825
+ catch (error) {
826
+ handleCatchError(parent, error, 'read');
827
+ parent.setProperties({ path: parent.oldPath }, true);
828
+ parent.pathNames.pop();
318
829
  }
319
830
  if (parent.isDragDrop && parent.isDropEnd) {
320
831
  if (parent.droppedObjects.length !== 0) {
@@ -359,8 +870,14 @@ function createSuccess(parent, result, itemName) {
359
870
  if (parent.dialogObj && parent.dialogObj.visible) {
360
871
  parent.dialogObj.hide();
361
872
  }
362
- parent.createdItem = result.files[0];
873
+ parent.createdItem = isFileSystemData(parent) ? result.files[result.files.length - 1] : result.files[0];
363
874
  parent.breadcrumbbarModule.searchObj.value = '';
875
+ var createEventArgs = {
876
+ folderName: itemName,
877
+ path: parent.path,
878
+ parentFolder: parent.itemData
879
+ };
880
+ parent.trigger('folderCreate', createEventArgs);
364
881
  var args = { action: 'create', result: result };
365
882
  parent.trigger('success', args);
366
883
  parent.itemData = [getPathObject(parent)];
@@ -401,54 +918,73 @@ function createSuccess(parent, result, itemName) {
401
918
  *
402
919
  * @param {IFileManager} parent - specifies the parent element.
403
920
  * @param {ReadArgs} result - specifies the result.
404
- * @param {string} path - specifies the path
405
921
  * @returns {void}
406
922
  * @private
407
923
  */
408
- function renameSuccess(parent, result, path) {
409
- if (!isNOU(result.files)) {
410
- if (!isNOU(parent.dialogObj)) {
411
- parent.dialogObj.hide();
412
- }
413
- var args = { action: 'rename', result: result };
414
- parent.trigger('success', args);
415
- parent.renamedItem = result.files[0];
416
- if (parent.activeModule === 'navigationpane') {
417
- parent.pathId.pop();
418
- parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];
419
- read(parent, events.renameEndParent, getParentPath(parent.path));
420
- }
421
- else {
422
- parent.itemData = [getPathObject(parent)];
423
- if (parent.breadcrumbbarModule.searchObj.value !== '') {
424
- Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);
924
+ function renameSuccess(parent, result) {
925
+ try {
926
+ if (!isNOU(result.files)) {
927
+ if (!isNOU(parent.dialogObj)) {
928
+ parent.dialogObj.hide();
929
+ }
930
+ var args = { action: 'rename', result: result };
931
+ parent.trigger('success', args);
932
+ parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;
933
+ var renameEventArgs = {
934
+ newName: parent.renamedItem.name,
935
+ itemData: parent.renamedItem,
936
+ path: parent.path
937
+ };
938
+ parent.trigger('rename', renameEventArgs);
939
+ if (parent.activeModule === 'navigationpane') {
940
+ parent.pathId.pop();
941
+ parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];
942
+ read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\/g, '/'));
943
+ parent.itemData[0] = parent.renamedItem;
944
+ if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {
945
+ parent.pathNames[parent.pathNames.length - 1] = parent.renameText;
946
+ }
947
+ read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\/g, '/') + parent.renamedItem.name + '/');
948
+ parent.renamedItem = null;
425
949
  }
426
950
  else {
427
- if (parent.isFiltered) {
428
- filter(parent, events.renameEnd);
951
+ parent.itemData = [getPathObject(parent)];
952
+ if (parent.breadcrumbbarModule.searchObj.value !== '') {
953
+ Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);
429
954
  }
430
955
  else {
431
- read(parent, events.renameEnd, parent.path);
956
+ if (parent.isFiltered) {
957
+ filter(parent, events.renameEnd);
958
+ }
959
+ else {
960
+ read(parent, events.renameEnd, parent.path);
961
+ }
432
962
  }
433
963
  }
434
964
  }
435
- }
436
- else {
437
- if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {
438
- var ele = select('#rename', parent.dialogObj.element);
439
- var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '"' + parent.currentItemText + '"');
440
- error = error.replace('{1}', '"' + ele.value + '"');
441
- ele.parentElement.nextElementSibling.innerHTML = error;
442
- var args = { action: 'rename', error: result.error };
443
- parent.trigger('failure', args);
444
- }
445
965
  else {
446
- if (!isNOU(parent.dialogObj)) {
447
- parent.dialogObj.hide();
966
+ if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {
967
+ var ele = select('#rename', parent.dialogObj.element);
968
+ var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '"' + parent.currentItemText + '"');
969
+ error = error.replace('{1}', '"' + ele.value + '"');
970
+ ele.parentElement.nextElementSibling.innerHTML = error;
971
+ var args = { action: 'rename', error: result.error };
972
+ parent.trigger('failure', args);
973
+ }
974
+ else {
975
+ if (!isNOU(parent.dialogObj)) {
976
+ parent.dialogObj.hide();
977
+ }
978
+ onFailure(parent, result, 'rename');
448
979
  }
449
- onFailure(parent, result, 'rename');
450
980
  }
451
981
  }
982
+ catch (error) {
983
+ if (!isNOU(parent.dialogObj)) {
984
+ parent.dialogObj.hide();
985
+ }
986
+ handleCatchError(parent, error, 'rename');
987
+ }
452
988
  }
453
989
  /* istanbul ignore next */
454
990
  /**
@@ -462,28 +998,41 @@ function renameSuccess(parent, result, path) {
462
998
  * @private
463
999
  */
464
1000
  function pasteSuccess(parent, result, path, operation) {
465
- if (result.error && result.error.fileExists) {
466
- parent.fileLength = 0;
467
- if (!isNOU(result.files)) {
468
- parent.isPasteError = true;
1001
+ try {
1002
+ var moveorcopyEventArgs = {
1003
+ itemData: result.files,
1004
+ isCopy: operation === 'copy' ? true : false,
1005
+ path: path,
1006
+ targetData: parent.itemData[0],
1007
+ targetPath: parent.path
1008
+ };
1009
+ parent.trigger('move', moveorcopyEventArgs);
1010
+ if (result.error && result.error.fileExists) {
1011
+ parent.fileLength = 0;
1012
+ if (!isNOU(result.files)) {
1013
+ parent.isPasteError = true;
1014
+ doPasteUpdate(parent, operation, result);
1015
+ }
1016
+ createExtDialog(parent, 'DuplicateItems', result.error.fileExists);
1017
+ if (result.error.code === '404') {
1018
+ createDialog(parent, 'Error', result);
1019
+ }
1020
+ }
1021
+ else if (!result.error && !isNOU(result.files)) {
1022
+ parent.isPasteError = false;
469
1023
  doPasteUpdate(parent, operation, result);
470
1024
  }
471
- createExtDialog(parent, 'DuplicateItems', result.error.fileExists);
472
- if (result.error.code === '404') {
1025
+ else if (result.error && !isNOU(result.files)) {
1026
+ parent.isPasteError = true;
1027
+ doPasteUpdate(parent, operation, result);
473
1028
  createDialog(parent, 'Error', result);
474
1029
  }
1030
+ else {
1031
+ onFailure(parent, result, operation);
1032
+ }
475
1033
  }
476
- else if (!result.error && !isNOU(result.files)) {
477
- parent.isPasteError = false;
478
- doPasteUpdate(parent, operation, result);
479
- }
480
- else if (result.error && !isNOU(result.files)) {
481
- parent.isPasteError = true;
482
- doPasteUpdate(parent, operation, result);
483
- createDialog(parent, 'Error', result);
484
- }
485
- else {
486
- onFailure(parent, result, operation);
1034
+ catch (error) {
1035
+ handleCatchError(parent, error, operation);
487
1036
  }
488
1037
  }
489
1038
  /**
@@ -496,20 +1045,30 @@ function pasteSuccess(parent, result, path, operation) {
496
1045
  * @private
497
1046
  */
498
1047
  function deleteSuccess(parent, result, path) {
499
- if (!isNOU(result.files)) {
500
- parent.setProperties({ path: path }, true);
501
- parent.itemData = [getPathObject(parent)];
502
- read(parent, events.deleteEnd, parent.path);
503
- if (result.error) {
504
- onFailure(parent, result, 'delete');
1048
+ try {
1049
+ var deleteEventArgs = {
1050
+ itemData: result.files,
1051
+ path: path
1052
+ };
1053
+ parent.trigger('delete', deleteEventArgs);
1054
+ if (!isNOU(result.files)) {
1055
+ parent.setProperties({ path: path }, true);
1056
+ parent.itemData = [getPathObject(parent)];
1057
+ read(parent, events.deleteEnd, parent.path);
1058
+ if (result.error) {
1059
+ onFailure(parent, result, 'delete');
1060
+ }
1061
+ else {
1062
+ var args = { action: 'delete', result: result };
1063
+ parent.trigger('success', args);
1064
+ }
505
1065
  }
506
1066
  else {
507
- var args = { action: 'delete', result: result };
508
- parent.trigger('success', args);
1067
+ onFailure(parent, result, 'delete');
509
1068
  }
510
1069
  }
511
- else {
512
- onFailure(parent, result, 'delete');
1070
+ catch (error) {
1071
+ handleCatchError(parent, error, 'delete');
513
1072
  }
514
1073
  }
515
1074
  /**
@@ -525,13 +1084,18 @@ function deleteSuccess(parent, result, path) {
525
1084
  function detailsSuccess(
526
1085
  // eslint:disable-next-line
527
1086
  parent, result, path, operation) {
528
- if (!isNOU(result.details)) {
529
- createDialog(parent, operation, null, result.details);
530
- var args = { action: 'details', result: result };
531
- parent.trigger('success', args);
1087
+ try {
1088
+ if (!isNOU(result.details)) {
1089
+ createDialog(parent, operation, null, result.details);
1090
+ var args = { action: 'details', result: result };
1091
+ parent.trigger('success', args);
1092
+ }
1093
+ else {
1094
+ onFailure(parent, result, 'details');
1095
+ }
532
1096
  }
533
- else {
534
- onFailure(parent, result, 'details');
1097
+ catch (error) {
1098
+ handleCatchError(parent, error, 'details');
535
1099
  }
536
1100
  }
537
1101
  /**
@@ -560,10 +1124,7 @@ function onFailure(parent, result, action) {
560
1124
  * @returns {void}
561
1125
  * @private
562
1126
  */
563
- export function Search(
564
- // eslint:disable-next-line
565
- parent, event, path, searchString, showHiddenItems, caseSensitive) {
566
- // eslint-disable-next-line
1127
+ export function Search(parent, event, path, searchString, showHiddenItems, caseSensitive) {
567
1128
  var data = {
568
1129
  action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,
569
1130
  data: parent.itemData
@@ -581,13 +1142,18 @@ parent, event, path, searchString, showHiddenItems, caseSensitive) {
581
1142
  * @private
582
1143
  */
583
1144
  function searchSuccess(parent, result, event) {
584
- if (!isNOU(result.files)) {
585
- parent.notify(event, result);
586
- var args = { action: 'search', result: result };
587
- parent.trigger('success', args);
1145
+ try {
1146
+ if (!isNOU(result.files)) {
1147
+ parent.notify(event, result);
1148
+ var args = { action: 'search', result: result };
1149
+ parent.trigger('success', args);
1150
+ }
1151
+ else {
1152
+ onFailure(parent, result, 'search');
1153
+ }
588
1154
  }
589
- else {
590
- onFailure(parent, result, 'search');
1155
+ catch (error) {
1156
+ handleCatchError(parent, error, 'search');
591
1157
  }
592
1158
  }
593
1159
  /* istanbul ignore next */
@@ -602,23 +1168,102 @@ function searchSuccess(parent, result, event) {
602
1168
  */
603
1169
  export function Download(parent, path, items) {
604
1170
  var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;
605
- // eslint-disable-next-line
606
1171
  var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };
607
- var eventArgs = { data: data, cancel: false };
1172
+ var ajaxSettings = {
1173
+ url: downloadUrl,
1174
+ type: 'POST',
1175
+ contentType: 'application/json',
1176
+ responseType: 'blob',
1177
+ data: JSON.stringify(data),
1178
+ onSuccess: null,
1179
+ onFailure: null,
1180
+ beforeSend: null
1181
+ };
1182
+ var eventArgs = { data: data, cancel: false, useFormPost: true, ajaxSettings: ajaxSettings };
608
1183
  parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {
609
1184
  if (!downloadArgs.cancel) {
610
- var form = createElement('form', {
611
- id: parent.element.id + '_downloadForm',
612
- attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }
613
- });
614
- var input = createElement('input', {
615
- id: parent.element.id + '_hiddenForm',
616
- attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }
617
- });
618
- form.appendChild(input);
619
- parent.element.appendChild(form);
620
- document.forms.namedItem('downloadForm').submit();
621
- parent.element.removeChild(form);
1185
+ if (downloadArgs.useFormPost) {
1186
+ var form = createElement('form', {
1187
+ id: parent.element.id + '_downloadForm',
1188
+ attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }
1189
+ });
1190
+ var input = createElement('input', {
1191
+ id: parent.element.id + '_hiddenForm',
1192
+ attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }
1193
+ });
1194
+ form.appendChild(input);
1195
+ parent.element.appendChild(form);
1196
+ document.forms.namedItem('downloadForm').submit();
1197
+ parent.element.removeChild(form);
1198
+ }
1199
+ else {
1200
+ try {
1201
+ var contentDisposition_1;
1202
+ var fileName_1;
1203
+ var fetch_1 = new Fetch({
1204
+ url: getValue('url', downloadArgs.ajaxSettings),
1205
+ type: getValue('type', downloadArgs.ajaxSettings),
1206
+ contentType: getValue('contentType', downloadArgs.ajaxSettings),
1207
+ responseType: getValue('responseType', downloadArgs.ajaxSettings),
1208
+ beforeSend: getValue('beforeSend', downloadArgs.ajaxSettings),
1209
+ onLoad: function (e) {
1210
+ contentDisposition_1 = e.headers.get('Content-Disposition');
1211
+ if (contentDisposition_1) {
1212
+ var filenameMatch = contentDisposition_1.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
1213
+ var extractedFilename = filenameMatch && filenameMatch[1];
1214
+ fileName_1 = extractedFilename ? extractedFilename.replace(/['"]/g, '') : fileName_1;
1215
+ }
1216
+ else {
1217
+ fileName_1 = parent.itemData.length > 1 ? 'files.zip' : getValue('isFile', parent.itemData[0]) ? getValue('name', parent.itemData[0]) : getValue('name', parent.itemData[0]) + '.zip';
1218
+ }
1219
+ },
1220
+ onSuccess: function (e) {
1221
+ parent.trigger('success', downloadArgs);
1222
+ var blob = e;
1223
+ var blobUrl = URL.createObjectURL(blob);
1224
+ var link = document.createElement('a');
1225
+ link.href = blobUrl;
1226
+ link.download = fileName_1;
1227
+ document.body.appendChild(link);
1228
+ link.click();
1229
+ document.body.removeChild(link);
1230
+ },
1231
+ onFailure: function (e) {
1232
+ var result = {
1233
+ error: {
1234
+ code: e.status.toString(),
1235
+ message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.downloadUrl
1236
+ }
1237
+ };
1238
+ createDialog(parent, 'Error', result);
1239
+ parent.trigger('failure', downloadArgs);
1240
+ }
1241
+ });
1242
+ fetch_1.send(JSON.stringify(downloadArgs.data));
1243
+ }
1244
+ catch (error) {
1245
+ handleCatchError(parent, error, 'download');
1246
+ }
1247
+ }
622
1248
  }
623
1249
  });
624
1250
  }
1251
+ /**
1252
+ * Function for on catch handler in File Manager.
1253
+ *
1254
+ * @param {IFileManager} parent - specifies the parent element.
1255
+ * @param {any} error - specifies the catch error.
1256
+ * @param {string} action - specifies the action.
1257
+ * @returns {void}
1258
+ * @private
1259
+ */
1260
+ function handleCatchError(parent, error, action) {
1261
+ var errorResult = {
1262
+ files: null,
1263
+ error: {
1264
+ message: error.message,
1265
+ fileExists: null
1266
+ }
1267
+ };
1268
+ onFailure(parent, errorResult, action);
1269
+ }