cloudmr-ux 2.0.7 → 3.0.1

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 (206) hide show
  1. package/README.md +24 -24
  2. package/dist/CmrComponents/CmrButton/CmrButton.css +0 -0
  3. package/dist/CmrComponents/CmrButton/CmrButton.d.ts +4 -0
  4. package/dist/CmrComponents/CmrButton/CmrButton.js +30 -0
  5. package/dist/CmrComponents/CmrButton/index.d.ts +1 -0
  6. package/dist/CmrComponents/CmrButton/index.js +1 -0
  7. package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.css +29 -0
  8. package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.d.ts +14 -0
  9. package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.js +30 -0
  10. package/dist/CmrComponents/CmrCheckbox/index.d.ts +1 -0
  11. package/dist/CmrComponents/CmrCheckbox/index.js +1 -0
  12. package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.d.ts +8 -0
  13. package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.js +29 -0
  14. package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.scss +27 -0
  15. package/dist/CmrComponents/CmrInput/CmrInput.css +27 -0
  16. package/dist/CmrComponents/CmrInput/CmrInput.d.ts +17 -0
  17. package/dist/CmrComponents/CmrInput/CmrInput.js +29 -0
  18. package/dist/CmrComponents/CmrInput/index.d.ts +1 -0
  19. package/dist/CmrComponents/CmrInput/index.js +1 -0
  20. package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.css +25 -0
  21. package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.d.ts +15 -0
  22. package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.js +37 -0
  23. package/dist/CmrComponents/CmrRadioGroup/index.d.ts +1 -0
  24. package/dist/CmrComponents/CmrRadioGroup/index.js +1 -0
  25. package/dist/CmrComponents/CmrSelect/CmrSelect.css +1 -0
  26. package/dist/CmrComponents/CmrSelect/CmrSelect.d.ts +24 -0
  27. package/dist/CmrComponents/CmrSelect/CmrSelect.js +46 -0
  28. package/dist/CmrComponents/CmrSelect/index.d.ts +1 -0
  29. package/dist/CmrComponents/CmrSelect/index.js +1 -0
  30. package/dist/CmrComponents/checkbox/Checkbox.css +8 -0
  31. package/dist/CmrComponents/checkbox/Checkbox.d.ts +15 -0
  32. package/dist/CmrComponents/checkbox/Checkbox.js +25 -0
  33. package/dist/CmrComponents/collapse/Collapse.css +3 -0
  34. package/dist/CmrComponents/collapse/Collapse.d.ts +18 -0
  35. package/dist/CmrComponents/collapse/Collapse.js +87 -0
  36. package/dist/CmrComponents/dialogue/Confirmation.d.ts +20 -0
  37. package/dist/CmrComponents/dialogue/Confirmation.js +36 -0
  38. package/dist/CmrComponents/dialogue/DeletionDialog.d.ts +4 -0
  39. package/dist/CmrComponents/dialogue/DeletionDialog.js +39 -0
  40. package/dist/CmrComponents/dialogue/EditConfirmation.d.ts +13 -0
  41. package/dist/CmrComponents/dialogue/EditConfirmation.js +45 -0
  42. package/dist/CmrComponents/double-slider/DualSlider.d.ts +21 -0
  43. package/dist/CmrComponents/double-slider/DualSlider.js +152 -0
  44. package/dist/CmrComponents/double-slider/InvertibleDualSlider.d.ts +24 -0
  45. package/dist/CmrComponents/double-slider/InvertibleDualSlider.js +174 -0
  46. package/dist/CmrComponents/gui-slider/ControlledSlider.d.ts +9 -0
  47. package/dist/CmrComponents/gui-slider/ControlledSlider.js +96 -0
  48. package/dist/CmrComponents/gui-slider/Slider.d.ts +20 -0
  49. package/dist/CmrComponents/gui-slider/Slider.js +127 -0
  50. package/dist/CmrComponents/header/Header.d.ts +17 -0
  51. package/dist/CmrComponents/header/Header.js +90 -0
  52. package/dist/CmrComponents/header/Header.scss +32 -0
  53. package/dist/CmrComponents/input-number/InputNumber.css +0 -0
  54. package/dist/CmrComponents/input-number/InputNumber.d.ts +17 -0
  55. package/dist/CmrComponents/input-number/InputNumber.js +30 -0
  56. package/dist/CmrComponents/label/Label.css +13 -0
  57. package/dist/CmrComponents/label/Label.d.ts +9 -0
  58. package/dist/CmrComponents/label/Label.js +18 -0
  59. package/dist/CmrComponents/panel/Panel.css +5 -0
  60. package/dist/CmrComponents/panel/Panel.d.ts +12 -0
  61. package/dist/CmrComponents/panel/Panel.js +42 -0
  62. package/dist/CmrComponents/rename/edit.d.ts +7 -0
  63. package/dist/CmrComponents/rename/edit.js +117 -0
  64. package/dist/CmrComponents/select-upload/SelectUpload.css +26 -0
  65. package/dist/CmrComponents/select-upload/SelectUpload.d.ts +33 -0
  66. package/dist/CmrComponents/select-upload/SelectUpload.js +90 -0
  67. package/dist/CmrComponents/tk-dualrange/TKDualRange.d.ts +17 -0
  68. package/dist/CmrComponents/tk-dualrange/TKDualRange.js +65 -0
  69. package/dist/CmrComponents/tk-dualrange/tk-dual-range.css +140 -0
  70. package/dist/CmrComponents/tooltip/Tooltip.css +0 -0
  71. package/dist/CmrComponents/tooltip/Tooltip.d.ts +18 -0
  72. package/dist/CmrComponents/tooltip/Tooltip.js +30 -0
  73. package/dist/CmrComponents/upload/Upload.css +5 -0
  74. package/dist/CmrComponents/upload/Upload.d.ts +80 -0
  75. package/dist/CmrComponents/upload/Upload.js +185 -0
  76. package/dist/CmrComponents/upload/UploadWindow.d.ts +15 -0
  77. package/dist/CmrComponents/upload/UploadWindow.js +286 -0
  78. package/dist/CmrTable/CmrTable.css +26 -0
  79. package/dist/CmrTable/CmrTable.d.ts +13 -0
  80. package/dist/CmrTable/CmrTable.js +47 -0
  81. package/dist/CmrTabs/CmrTabs.d.ts +7 -0
  82. package/dist/CmrTabs/CmrTabs.js +64 -0
  83. package/dist/CmrTabs/tab.model.d.ts +12 -0
  84. package/dist/CmrTabs/tab.model.js +1 -0
  85. package/dist/core/app/main/Main.d.ts +6 -0
  86. package/dist/core/app/main/Main.js +18 -0
  87. package/dist/core/app/results/Logs.d.ts +1 -0
  88. package/dist/core/app/results/Logs.js +33 -0
  89. package/dist/core/app/results/PreprocessJob.d.ts +1 -0
  90. package/dist/core/app/results/PreprocessJob.js +100 -0
  91. package/dist/core/app/results/Results.d.ts +15 -0
  92. package/dist/core/app/results/Results.js +372 -0
  93. package/dist/core/app/results/Results.scss +92 -0
  94. package/dist/core/app/results/Rois.d.ts +11 -0
  95. package/dist/core/app/results/Rois.js +269 -0
  96. package/dist/core/app/settings/Settings.d.ts +1 -0
  97. package/dist/core/app/settings/Settings.js +109 -0
  98. package/dist/core/app/signin/ForgotPassword.d.ts +3 -0
  99. package/dist/core/app/signin/ForgotPassword.js +142 -0
  100. package/dist/core/app/signin/Register.d.ts +3 -0
  101. package/dist/core/app/signin/Register.js +126 -0
  102. package/dist/core/app/signin/Signin.d.ts +5 -0
  103. package/dist/core/app/signin/Signin.js +84 -0
  104. package/dist/core/app/signin/Signin.scss +86 -0
  105. package/dist/core/app/upload/Upload.d.ts +3 -0
  106. package/dist/core/app/upload/Upload.js +261 -0
  107. package/dist/core/app/upload/Upload.scss +0 -0
  108. package/dist/core/common/components/CmrColorPicker/CmrColorPicker.d.ts +8 -0
  109. package/dist/core/common/components/CmrColorPicker/CmrColorPicker.js +29 -0
  110. package/dist/core/common/components/CmrColorPicker/CmrColorPicker.scss +27 -0
  111. package/dist/core/common/components/NiivueTools/Niivue.css +8 -0
  112. package/dist/core/common/components/NiivueTools/Niivue.d.ts +14 -0
  113. package/dist/core/common/components/NiivueTools/Niivue.js +1270 -0
  114. package/dist/core/common/components/NiivueTools/NiivuePatcher.js +1875 -0
  115. package/dist/core/common/components/NiivueTools/components/ColorPicker.d.ts +5 -0
  116. package/dist/core/common/components/NiivueTools/components/ColorPicker.js +68 -0
  117. package/dist/core/common/components/NiivueTools/components/DrawPlatte.d.ts +10 -0
  118. package/dist/core/common/components/NiivueTools/components/DrawPlatte.js +88 -0
  119. package/dist/core/common/components/NiivueTools/components/DrawToolKit.d.ts +32 -0
  120. package/dist/core/common/components/NiivueTools/components/DrawToolKit.js +164 -0
  121. package/dist/core/common/components/NiivueTools/components/EraserPlatte.d.ts +10 -0
  122. package/dist/core/common/components/NiivueTools/components/EraserPlatte.js +43 -0
  123. package/dist/core/common/components/NiivueTools/components/Layer.d.ts +10 -0
  124. package/dist/core/common/components/NiivueTools/components/Layer.js +117 -0
  125. package/dist/core/common/components/NiivueTools/components/LayersPanel.d.ts +8 -0
  126. package/dist/core/common/components/NiivueTools/components/LayersPanel.js +108 -0
  127. package/dist/core/common/components/NiivueTools/components/LocationTable.d.ts +9 -0
  128. package/dist/core/common/components/NiivueTools/components/LocationTable.js +42 -0
  129. package/dist/core/common/components/NiivueTools/components/MaskPlatte.d.ts +10 -0
  130. package/dist/core/common/components/NiivueTools/components/MaskPlatte.js +123 -0
  131. package/dist/core/common/components/NiivueTools/components/NiivuePanel.d.ts +34 -0
  132. package/dist/core/common/components/NiivueTools/components/NiivuePanel.js +305 -0
  133. package/dist/core/common/components/NiivueTools/components/NumberPicker.d.ts +8 -0
  134. package/dist/core/common/components/NiivueTools/components/NumberPicker.js +40 -0
  135. package/dist/core/common/components/NiivueTools/components/SettingsPanel.d.ts +7 -0
  136. package/dist/core/common/components/NiivueTools/components/SettingsPanel.js +30 -0
  137. package/dist/core/common/components/NiivueTools/components/Switch.d.ts +5 -0
  138. package/dist/core/common/components/NiivueTools/components/Switch.js +26 -0
  139. package/dist/core/common/components/NiivueTools/components/Toolbar.d.ts +40 -0
  140. package/dist/core/common/components/NiivueTools/components/Toolbar.js +184 -0
  141. package/dist/core/common/components/NiivueTools/components/Toolbar.scss +39 -0
  142. package/dist/core/common/components/NiivueTools/components/stats.d.ts +2 -0
  143. package/dist/core/common/components/NiivueTools/components/stats.js +13 -0
  144. package/dist/core/common/components/NiivueTools/index.css +14 -0
  145. package/dist/core/common/components/NiivueTools/util.js +309 -0
  146. package/dist/core/common/components/footer/Footer.d.ts +3 -0
  147. package/dist/core/common/components/footer/Footer.js +20 -0
  148. package/dist/core/common/components/footer/Footer.scss +5 -0
  149. package/dist/core/common/utilities/AuthenticatedRequests.d.ts +16 -0
  150. package/dist/core/common/utilities/AuthenticatedRequests.js +158 -0
  151. package/dist/core/common/utilities/CalendarHelper.d.ts +5 -0
  152. package/dist/core/common/utilities/CalendarHelper.js +27 -0
  153. package/dist/core/common/utilities/DownloadFromText.d.ts +3 -0
  154. package/dist/core/common/utilities/DownloadFromText.js +20 -0
  155. package/dist/core/common/utilities/StoreToRequest.d.ts +1 -0
  156. package/dist/core/common/utilities/StoreToRequest.js +4 -0
  157. package/dist/core/common/utilities/SystemUtilities.d.ts +4 -0
  158. package/dist/core/common/utilities/SystemUtilities.js +79 -0
  159. package/dist/core/common/utilities/file-transformation/anonymize.d.ts +1 -0
  160. package/dist/core/common/utilities/file-transformation/anonymize.js +114 -0
  161. package/dist/core/common/utilities/file-transformation/utilities.d.ts +2 -0
  162. package/dist/core/common/utilities/file-transformation/utilities.js +23 -0
  163. package/dist/core/common/utilities/index.d.ts +25 -0
  164. package/dist/core/common/utilities/index.js +118 -0
  165. package/dist/core/common/utilities/parse-jwt.d.ts +1 -0
  166. package/dist/core/common/utilities/parse-jwt.js +14 -0
  167. package/dist/core/components/PasswordRequirements.d.ts +7 -0
  168. package/dist/core/components/PasswordRequirements.js +30 -0
  169. package/dist/core/config/AppConfig.d.ts +5 -0
  170. package/dist/core/config/AppConfig.js +42 -0
  171. package/dist/core/config/types.d.ts +40 -0
  172. package/dist/core/config/types.js +1 -0
  173. package/dist/core/features/authenticate/authenticateActionCreation.d.ts +46 -0
  174. package/dist/core/features/authenticate/authenticateActionCreation.js +326 -0
  175. package/dist/core/features/authenticate/authenticateSlice.d.ts +45 -0
  176. package/dist/core/features/authenticate/authenticateSlice.js +203 -0
  177. package/dist/core/features/data/dataActionCreation.d.ts +40 -0
  178. package/dist/core/features/data/dataActionCreation.js +340 -0
  179. package/dist/core/features/data/dataSlice.d.ts +37 -0
  180. package/dist/core/features/data/dataSlice.js +87 -0
  181. package/dist/core/features/jobs/jobActionCreation.d.ts +35 -0
  182. package/dist/core/features/jobs/jobActionCreation.js +242 -0
  183. package/dist/core/features/jobs/jobsSlice.d.ts +57 -0
  184. package/dist/core/features/jobs/jobsSlice.js +54 -0
  185. package/dist/core/features/rois/resultActionCreation.d.ts +21 -0
  186. package/dist/core/features/rois/resultActionCreation.js +114 -0
  187. package/dist/core/features/rois/resultSlice.d.ts +24 -0
  188. package/dist/core/features/rois/resultSlice.js +68 -0
  189. package/dist/core/features/rois/roiTypes.d.ts +44 -0
  190. package/dist/core/features/rois/roiTypes.js +1 -0
  191. package/dist/core/features/setup/setupActionCreation.d.ts +7 -0
  192. package/dist/core/features/setup/setupActionCreation.js +100 -0
  193. package/dist/core/index.d.ts +22 -0
  194. package/dist/core/index.js +27 -0
  195. package/dist/core/store/configureStore.d.ts +13 -0
  196. package/dist/core/store/configureStore.js +38 -0
  197. package/dist/core/store/hooks.d.ts +11 -0
  198. package/dist/core/store/hooks.js +5 -0
  199. package/dist/core/utils/passwordValidation.d.ts +25 -0
  200. package/dist/core/utils/passwordValidation.js +19 -0
  201. package/dist/index.d.ts +29 -329
  202. package/dist/index.js +26 -1402
  203. package/dist/style.css +47 -0
  204. package/package.json +309 -41
  205. package/dist/index.css +0 -170
  206. package/dist/index.mjs +0 -1354
@@ -0,0 +1,340 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import axios from "axios";
38
+ import { createAsyncThunk } from "@reduxjs/toolkit";
39
+ import { getEndpoints, getAppConfig } from "../../config/AppConfig";
40
+ import { getFileExtension } from "../../common/utilities/file-transformation/utilities";
41
+ import { is_safe_twix } from "../../common/utilities/file-transformation/anonymize";
42
+ import { AuthenticatedHttpClient } from "../../common/utilities/AuthenticatedRequests";
43
+ export var getUploadedData = createAsyncThunk("GET_UPLOADED_DATA", function () { return __awaiter(void 0, void 0, void 0, function () {
44
+ var endpoints, config, data, e_1;
45
+ return __generator(this, function (_a) {
46
+ switch (_a.label) {
47
+ case 0:
48
+ endpoints = getEndpoints();
49
+ config = getAppConfig();
50
+ _a.label = 1;
51
+ case 1:
52
+ _a.trys.push([1, 3, , 4]);
53
+ return [4 /*yield*/, AuthenticatedHttpClient.get(endpoints.DATA_API)];
54
+ case 2:
55
+ data = (_a.sent()).data;
56
+ return [2 /*return*/, data];
57
+ case 3:
58
+ e_1 = _a.sent();
59
+ console.log(e_1);
60
+ return [2 /*return*/, undefined];
61
+ case 4: return [2 /*return*/];
62
+ }
63
+ });
64
+ }); });
65
+ export var renameUploadedData = createAsyncThunk("RENAME_UPLOADED_DATA", function (_a) {
66
+ var fileId = _a.fileId, newName = _a.newName, is_demo_data = _a.is_demo_data;
67
+ return __awaiter(void 0, void 0, void 0, function () {
68
+ var endpoints, payload, response, e_2;
69
+ return __generator(this, function (_b) {
70
+ switch (_b.label) {
71
+ case 0:
72
+ endpoints = getEndpoints();
73
+ _b.label = 1;
74
+ case 1:
75
+ _b.trys.push([1, 3, , 4]);
76
+ payload = {
77
+ fileid: fileId,
78
+ filename: newName
79
+ };
80
+ if (is_demo_data !== undefined && is_demo_data !== null) {
81
+ payload.is_demo_data = is_demo_data;
82
+ }
83
+ return [4 /*yield*/, AuthenticatedHttpClient.post(endpoints.DATA_RENAME_API, payload)];
84
+ case 2:
85
+ response = _b.sent();
86
+ return [2 /*return*/, response.data];
87
+ case 3:
88
+ e_2 = _b.sent();
89
+ throw e_2;
90
+ case 4: return [2 /*return*/];
91
+ }
92
+ });
93
+ });
94
+ });
95
+ export var deleteUploadedData = createAsyncThunk("DELETE_UPLOADED_DATA", function (_a) {
96
+ var fileId = _a.fileId;
97
+ return __awaiter(void 0, void 0, void 0, function () {
98
+ var endpoints, response, e_3;
99
+ return __generator(this, function (_b) {
100
+ switch (_b.label) {
101
+ case 0:
102
+ endpoints = getEndpoints();
103
+ _b.label = 1;
104
+ case 1:
105
+ _b.trys.push([1, 3, , 4]);
106
+ return [4 /*yield*/, AuthenticatedHttpClient.post("".concat(endpoints.DATA_DELETE_API, "/").concat(fileId))];
107
+ case 2:
108
+ response = _b.sent();
109
+ return [2 /*return*/, response.data];
110
+ case 3:
111
+ e_3 = _b.sent();
112
+ throw e_3;
113
+ case 4: return [2 /*return*/];
114
+ }
115
+ });
116
+ });
117
+ });
118
+ export var uploadData = createAsyncThunk("UploadData", function (_a, thunkAPI) {
119
+ var uploadToken = _a.uploadToken, file = _a.file, fileAlias = _a.fileAlias, onProgress = _a.onProgress, onUploaded = _a.onUploaded, uploadTarget = _a.uploadTarget;
120
+ return __awaiter(void 0, void 0, void 0, function () {
121
+ var FILE_CHUNK_SIZE, payload, uploadPartWithRetries_1, initResponse, _b, uploadId, partUrls_1, Key, fileParts, i, part, totalSize_1, totalUploadedParts_1, uploadedParts, endpoints, finalizeResponse, e_4;
122
+ return __generator(this, function (_c) {
123
+ switch (_c.label) {
124
+ case 0:
125
+ console.log("start the upload uploadData");
126
+ _c.label = 1;
127
+ case 1:
128
+ _c.trys.push([1, 6, , 7]);
129
+ FILE_CHUNK_SIZE = 10 * 1024 * 1024;
130
+ return [4 /*yield*/, createPayload(uploadToken, file, fileAlias)];
131
+ case 2:
132
+ payload = _c.sent();
133
+ console.log("payload created", payload);
134
+ if (payload === undefined)
135
+ return [2 /*return*/, {
136
+ code: 403,
137
+ response: "file not found",
138
+ file: undefined,
139
+ uploadTarget: uploadTarget
140
+ }];
141
+ if (payload.lambdaFile === undefined)
142
+ return [2 /*return*/, {
143
+ code: 403,
144
+ response: "data not allowed",
145
+ file: undefined,
146
+ uploadTarget: uploadTarget
147
+ }];
148
+ // Set upload progress to 0 if progress handler available
149
+ if (onProgress)
150
+ onProgress(0);
151
+ uploadPartWithRetries_1 = function (partUrl, part, cancelTokenSource, index, retries) {
152
+ if (retries === void 0) { retries = 2; }
153
+ return __awaiter(void 0, void 0, void 0, function () {
154
+ var response, error_1, newCancelTokenSource;
155
+ return __generator(this, function (_a) {
156
+ switch (_a.label) {
157
+ case 0:
158
+ _a.trys.push([0, 2, , 7]);
159
+ return [4 /*yield*/, axios.put(partUrl, part, {
160
+ headers: {
161
+ "Content-Type": ""
162
+ },
163
+ onUploadProgress: function (progressEvent) {
164
+ totalUploadedParts_1[index] = progressEvent.loaded;
165
+ var totalUploaded = totalUploadedParts_1.reduce(function (a, b) { return a + b; }, 0);
166
+ var totalProgress = totalUploaded / totalSize_1;
167
+ if (onProgress)
168
+ onProgress(totalProgress);
169
+ },
170
+ cancelToken: cancelTokenSource.token
171
+ })];
172
+ case 1:
173
+ response = _a.sent();
174
+ console.log(response);
175
+ return [2 /*return*/, response];
176
+ case 2:
177
+ error_1 = _a.sent();
178
+ if (!axios.isCancel(error_1)) return [3 /*break*/, 3];
179
+ console.log("Upload cancelled:", partUrl);
180
+ return [3 /*break*/, 6];
181
+ case 3:
182
+ if (!(retries > 0)) return [3 /*break*/, 5];
183
+ console.log("Retrying upload for part: ".concat(partUrl, ", attempts remaining: ").concat(retries));
184
+ cancelTokenSource.cancel("Cancelling the current request before retry.");
185
+ newCancelTokenSource = axios.CancelToken.source();
186
+ return [4 /*yield*/, uploadPartWithRetries_1(partUrl, part, newCancelTokenSource, index, retries - 1)];
187
+ case 4: return [2 /*return*/, _a.sent()];
188
+ case 5: throw error_1;
189
+ case 6: return [3 /*break*/, 7];
190
+ case 7: return [2 /*return*/];
191
+ }
192
+ });
193
+ });
194
+ };
195
+ console.log(payload);
196
+ console.log("Uploading to destination", payload.destination);
197
+ return [4 /*yield*/, AuthenticatedHttpClient.post(payload.destination, payload.lambdaFile, payload.config)];
198
+ case 3:
199
+ initResponse = _c.sent();
200
+ console.log(initResponse);
201
+ _b = initResponse.data, uploadId = _b.uploadId, partUrls_1 = _b.partUrls, Key = _b.Key;
202
+ fileParts = [];
203
+ for (i = 0; i < file.size; i += FILE_CHUNK_SIZE) {
204
+ part = file.slice(i, i + FILE_CHUNK_SIZE);
205
+ fileParts.push(part);
206
+ console.log(part);
207
+ }
208
+ totalSize_1 = payload.file.size;
209
+ totalUploadedParts_1 = new Array(fileParts.length).fill(0);
210
+ return [4 /*yield*/, Promise.all(fileParts.map(function (part, index) { return __awaiter(void 0, void 0, void 0, function () {
211
+ var partUrl, cancelTokenSource, partResponse, etag;
212
+ return __generator(this, function (_a) {
213
+ switch (_a.label) {
214
+ case 0:
215
+ partUrl = partUrls_1[index];
216
+ cancelTokenSource = axios.CancelToken.source();
217
+ return [4 /*yield*/, uploadPartWithRetries_1(partUrl, part, cancelTokenSource, index)];
218
+ case 1:
219
+ partResponse = _a.sent();
220
+ etag = partResponse === null || partResponse === void 0 ? void 0 : partResponse.headers["etag"];
221
+ console.log(partResponse);
222
+ console.log(partResponse === null || partResponse === void 0 ? void 0 : partResponse.headers);
223
+ console.log(etag);
224
+ return [2 /*return*/, {
225
+ partNumber: index + 1,
226
+ etag: etag.replace(/"/g, "")
227
+ }];
228
+ }
229
+ });
230
+ }); }))];
231
+ case 4:
232
+ uploadedParts = _c.sent();
233
+ endpoints = getEndpoints();
234
+ return [4 /*yield*/, AuthenticatedHttpClient.post(endpoints.DATA_UPLOAD_FINALIZE, {
235
+ uploadId: uploadId,
236
+ parts: uploadedParts,
237
+ Key: Key
238
+ }, payload.config)];
239
+ case 5:
240
+ finalizeResponse = _c.sent();
241
+ console.log(finalizeResponse);
242
+ console.log("all uploads completed");
243
+ console.log("------", onUploaded);
244
+ if (onUploaded)
245
+ onUploaded(initResponse, file);
246
+ console.log("uploaded");
247
+ // Refresh uploaded data
248
+ thunkAPI.dispatch(getUploadedData());
249
+ console.log("refreshed");
250
+ return [2 /*return*/, {
251
+ code: 200,
252
+ response: initResponse.data.response,
253
+ file: payload.lambdaFile,
254
+ uploadTarget: uploadTarget
255
+ }];
256
+ case 6:
257
+ e_4 = _c.sent();
258
+ console.log("Following error encountered during uploading:");
259
+ console.error(e_4);
260
+ return [2 /*return*/, {
261
+ code: 500,
262
+ response: e_4.response,
263
+ file: undefined,
264
+ uploadTarget: uploadTarget
265
+ }];
266
+ case 7: return [2 /*return*/];
267
+ }
268
+ });
269
+ });
270
+ });
271
+ var ALLOWED_EXTENSIONS = [
272
+ "nii",
273
+ "nii.gz",
274
+ "mha",
275
+ "mhd",
276
+ "mrd",
277
+ "npx",
278
+ "npy",
279
+ "pkl",
280
+ "mat",
281
+ "dat",
282
+ "h5",
283
+ "png",
284
+ "jpg",
285
+ "jpeg",
286
+ ];
287
+ var createPayload = function (uploadToken, file, fileAlias) { return __awaiter(void 0, void 0, void 0, function () {
288
+ var fileExtension, lowerExt, fileType, isSafe, lambdaFile, UploadHeaders, endpoints;
289
+ return __generator(this, function (_a) {
290
+ switch (_a.label) {
291
+ case 0:
292
+ if (!file)
293
+ return [2 /*return*/, undefined];
294
+ fileExtension = getFileExtension(file.name);
295
+ lowerExt = fileExtension.toLowerCase();
296
+ fileType = file.type || "application/octet-stream";
297
+ // Validate extension
298
+ if (!ALLOWED_EXTENSIONS.includes(lowerExt)) {
299
+ alert("This file type \".".concat(fileExtension, "\" is not allowed."));
300
+ return [2 /*return*/, { lambdaFile: undefined, file: undefined }];
301
+ }
302
+ if (!(lowerExt === "dat")) return [3 /*break*/, 2];
303
+ console.log("checking for PHI data");
304
+ return [4 /*yield*/, is_safe_twix(file)];
305
+ case 1:
306
+ isSafe = _a.sent();
307
+ if (!isSafe) {
308
+ alert("This file contains PHI data. Please anonymize the file before uploading");
309
+ return [2 /*return*/, undefined];
310
+ }
311
+ _a.label = 2;
312
+ case 2:
313
+ lambdaFile = {
314
+ filename: fileAlias,
315
+ filetype: fileType,
316
+ filesize: "".concat(file.size),
317
+ filemd5: "",
318
+ file: {
319
+ name: file.name,
320
+ lastModified: file.lastModified,
321
+ size: file.size,
322
+ type: file.type
323
+ }
324
+ };
325
+ UploadHeaders = {
326
+ headers: {
327
+ "Content-Type": "application/json",
328
+ "X-Api-Key": uploadToken
329
+ }
330
+ };
331
+ endpoints = getEndpoints();
332
+ return [2 /*return*/, {
333
+ destination: endpoints.DATA_UPLOAD_INIT,
334
+ lambdaFile: lambdaFile,
335
+ file: file,
336
+ config: UploadHeaders
337
+ }];
338
+ }
339
+ });
340
+ }); };
@@ -0,0 +1,37 @@
1
+ import { PayloadAction } from '@reduxjs/toolkit';
2
+ export interface UploadedFile {
3
+ id: number;
4
+ fileName: string;
5
+ link: string;
6
+ md5?: string;
7
+ size: string;
8
+ status: string;
9
+ createdAt: string;
10
+ updatedAt: string;
11
+ database: string;
12
+ location: string;
13
+ renamingPending?: boolean;
14
+ deletionPending?: boolean;
15
+ is_demo_data?: boolean;
16
+ }
17
+ interface DataState {
18
+ files: Array<UploadedFile>;
19
+ loading: boolean;
20
+ }
21
+ export declare const dataSlice: import("@reduxjs/toolkit").Slice<DataState, {
22
+ renameData(state: DataState, action: PayloadAction<{
23
+ index: number;
24
+ alias: string;
25
+ }>): void;
26
+ deleteData(state: DataState, action: PayloadAction<{
27
+ index: number;
28
+ }>): void;
29
+ }, "data", "data", import("@reduxjs/toolkit").SliceSelectors<DataState>>;
30
+ export declare const renameData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
31
+ index: number;
32
+ alias: string;
33
+ }, "data/renameData">, deleteData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
34
+ index: number;
35
+ }, "data/deleteData">;
36
+ declare const _default: import("redux").Reducer<DataState, import("redux").UnknownAction, DataState>;
37
+ export default _default;
@@ -0,0 +1,87 @@
1
+ var _a;
2
+ import { createSlice } from '@reduxjs/toolkit';
3
+ import { deleteUploadedData, getUploadedData, renameUploadedData } from './dataActionCreation';
4
+ import { convertTimestamp } from '../../common/utilities/CalendarHelper';
5
+ var initialState = {
6
+ files: [],
7
+ loading: true
8
+ };
9
+ export var dataSlice = createSlice({
10
+ name: 'data',
11
+ initialState: initialState,
12
+ reducers: {
13
+ renameData: function (state, action) {
14
+ state.files[action.payload.index].fileName = action.payload.alias;
15
+ },
16
+ deleteData: function (state, action) {
17
+ state.files.splice(action.payload.index, 1);
18
+ }
19
+ },
20
+ extraReducers: function (builder) { return (builder.addCase(getUploadedData.pending, function (state, action) {
21
+ state.loading = true;
22
+ }),
23
+ builder.addCase(getUploadedData.fulfilled, function (state, action) {
24
+ var data = [];
25
+ var payloadData = action.payload;
26
+ if (payloadData == undefined)
27
+ return;
28
+ if (payloadData.length > 0) {
29
+ payloadData.forEach(function (element) {
30
+ data.push({
31
+ id: element.id,
32
+ fileName: element.filename,
33
+ link: element.link,
34
+ md5: element.md5,
35
+ size: element.size,
36
+ status: (element.status == 'notavailable') ? 'not available' : element.status,
37
+ createdAt: convertTimestamp(element.created_at),
38
+ updatedAt: convertTimestamp(element.updated_at),
39
+ database: element.database,
40
+ location: element.location,
41
+ renamingPending: false,
42
+ is_demo_data: element.is_demo_data
43
+ });
44
+ });
45
+ }
46
+ state.files = data;
47
+ state.loading = false;
48
+ }),
49
+ builder.addCase(renameUploadedData.pending, function (state, action) {
50
+ var id = action.meta.arg.fileId;
51
+ for (var _i = 0, _a = state.files; _i < _a.length; _i++) {
52
+ var file = _a[_i];
53
+ if (file.id == id) {
54
+ file.renamingPending = true;
55
+ }
56
+ }
57
+ }),
58
+ builder.addCase(renameUploadedData.fulfilled, function (state, action) {
59
+ var id = action.meta.arg.fileId;
60
+ for (var _i = 0, _a = state.files; _i < _a.length; _i++) {
61
+ var file = _a[_i];
62
+ if (file.id == id) {
63
+ delete file.renamingPending;
64
+ }
65
+ }
66
+ }),
67
+ builder.addCase(deleteUploadedData.pending, function (state, action) {
68
+ var id = action.meta.arg.fileId;
69
+ for (var _i = 0, _a = state.files; _i < _a.length; _i++) {
70
+ var file = _a[_i];
71
+ if (file.id == id) {
72
+ file.deletionPending = true;
73
+ }
74
+ }
75
+ }),
76
+ builder.addCase(deleteUploadedData.fulfilled, function (state, action) {
77
+ var id = action.meta.arg.fileId;
78
+ for (var _i = 0, _a = state.files; _i < _a.length; _i++) {
79
+ var file = _a[_i];
80
+ if (file.id == id) {
81
+ delete file.deletionPending;
82
+ }
83
+ }
84
+ })); }
85
+ });
86
+ export var renameData = (_a = dataSlice.actions, _a.renameData), deleteData = _a.deleteData;
87
+ export default dataSlice.reducer;
@@ -0,0 +1,35 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { Job } from "./jobsSlice";
3
+ export declare const getUpstreamJobs: import("@reduxjs/toolkit").AsyncThunk<any, void, import("@reduxjs/toolkit").AsyncThunkConfig>;
4
+ export declare const renameUpstreamJob: import("@reduxjs/toolkit").AsyncThunk<void, {
5
+ jobReference: Job;
6
+ }, import("@reduxjs/toolkit").AsyncThunkConfig>;
7
+ export declare const deleteUpstreamJob: import("@reduxjs/toolkit").AsyncThunk<void, {
8
+ jobId: string;
9
+ }, import("@reduxjs/toolkit").AsyncThunkConfig>;
10
+ type uploadJobParameters = {
11
+ uploadToken: string;
12
+ file: File;
13
+ fileAlias: string;
14
+ onProgress?: (progress: number) => void;
15
+ uploadTarget?: string;
16
+ onUploaded?: (res: AxiosResponse, file: File) => void;
17
+ };
18
+ export declare const uploadJob: import("@reduxjs/toolkit").AsyncThunk<{
19
+ code: number;
20
+ response: any;
21
+ file: {
22
+ filename: string;
23
+ filetype: string;
24
+ filesize: string;
25
+ filemd5: string;
26
+ file: File;
27
+ };
28
+ uploadTarget: string | undefined;
29
+ } | {
30
+ code: number;
31
+ response: any;
32
+ file: undefined;
33
+ uploadTarget: string | undefined;
34
+ }, uploadJobParameters, import("@reduxjs/toolkit").AsyncThunkConfig>;
35
+ export {};