@onehat/ui 0.3.208 → 0.3.211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onehat/ui",
3
- "version": "0.3.208",
3
+ "version": "0.3.211",
4
4
  "description": "Base UI for OneHat apps",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -552,19 +552,21 @@ function Form(props) {
552
552
 
553
553
  let isRequired = false,
554
554
  requiredIndicator = null;
555
- if (getIsRequired) {
556
- isRequired = getIsRequired(formGetValues, formState);
557
- } else if (validatorToUse?.fields && validatorToUse.fields[name]?.exclusiveTests?.required) {
558
- // submitted validator
559
- isRequired = true;
560
- } else if ((propertyDef?.validator?.spec && !propertyDef.validator.spec.optional) ||
561
- (propertyDef?.requiredIfPhantom && isPhantom) ||
562
- (propertyDef?.requiredIfNotPhantom && !isPhantom)) {
563
- // property definition
564
- isRequired = true;
565
- }
566
- if (isRequired) {
567
- requiredIndicator = <Text color="#f00" fontSize="30px" pr={1}>*</Text>;
555
+ if (!isMultiple) { // Don't require fields if editing multiple records
556
+ if (getIsRequired) {
557
+ isRequired = getIsRequired(formGetValues, formState);
558
+ } else if (validatorToUse?.fields && validatorToUse.fields[name]?.exclusiveTests?.required) {
559
+ // submitted validator
560
+ isRequired = true;
561
+ } else if ((propertyDef?.validator?.spec && !propertyDef.validator.spec.optional) ||
562
+ (propertyDef?.requiredIfPhantom && isPhantom) ||
563
+ (propertyDef?.requiredIfNotPhantom && !isPhantom)) {
564
+ // property definition
565
+ isRequired = true;
566
+ }
567
+ if (isRequired) {
568
+ requiredIndicator = <Text color="#f00" fontSize="30px" pr={1}>*</Text>;
569
+ }
568
570
  }
569
571
  if (!disableLabels && label && editorType !== EDITOR_TYPE__INLINE) {
570
572
  const labelProps = {};
@@ -414,20 +414,26 @@ export default function withEditor(WrappedComponent, isTree = false) {
414
414
  setIsEditorShown(false);
415
415
  });
416
416
  },
417
- calculateEditorMode = () => {
418
- let mode = editorMode;
419
- if (!canEditorViewOnly && userCanEdit) {
420
- if (selection.length > 1) {
421
- if (!disableEdit) {
422
- // For multiple entities selected, change it to edit multiple mode
423
- mode = EDITOR_MODE__EDIT;
424
- }
425
- } else if (selection.length === 1 && !selection[0].isDestroyed && selection[0].isPhantom) {
426
- if (!disableAdd) {
427
- // When a phantom entity is selected, change it to add mode.
428
- mode = EDITOR_MODE__ADD;
417
+ calculateEditorMode = (isIgnoreNextSelectionChange = false) => {
418
+ // calculateEditorMode gets called only on selection changes
419
+ let mode;
420
+ if (isIgnoreNextSelectionChange) {
421
+ mode = editorMode;
422
+ if (!canEditorViewOnly && userCanEdit) {
423
+ if (selection.length > 1) {
424
+ if (!disableEdit) {
425
+ // For multiple entities selected, change it to edit multiple mode
426
+ mode = EDITOR_MODE__EDIT;
427
+ }
428
+ } else if (selection.length === 1 && !selection[0].isDestroyed && selection[0].isPhantom) {
429
+ if (!disableAdd) {
430
+ // When a phantom entity is selected, change it to add mode.
431
+ mode = EDITOR_MODE__ADD;
432
+ }
429
433
  }
430
434
  }
435
+ } else {
436
+ mode = selection.length > 1 ? EDITOR_MODE__EDIT : EDITOR_MODE__VIEW;
431
437
  }
432
438
  return mode;
433
439
  },
@@ -462,16 +468,7 @@ export default function withEditor(WrappedComponent, isTree = false) {
462
468
  }, []);
463
469
 
464
470
  useEffect(() => {
465
- // When selection changes, set the mode appropriately
466
- let mode;
467
- if (isIgnoreNextSelectionChange) {
468
- // on selection change from doAdd/doDuplicate/etc, calculate whether to put Editor in "add" or "edit" mode
469
- mode = calculateEditorMode();
470
- } else {
471
- // Most of the time, if selection changed, put the Editor in "view" mode
472
- mode = EDITOR_MODE__VIEW;
473
- }
474
- setEditorMode(mode);
471
+ setEditorMode(calculateEditorMode(isIgnoreNextSelectionChange));
475
472
 
476
473
  setIsIgnoreNextSelectionChange(false);
477
474
  setLastSelection(selection);
@@ -492,11 +489,7 @@ export default function withEditor(WrappedComponent, isTree = false) {
492
489
  // NOTE: If I don't calculate this on the fly for selection changes,
493
490
  // we see a flash of the previous state, since useEffect hasn't yet run.
494
491
  // (basically redo what's in the useEffect, above)
495
- if (isIgnoreNextSelectionChange) {
496
- editorMode = calculateEditorMode();
497
- } else {
498
- editorMode = EDITOR_MODE__VIEW;
499
- }
492
+ editorMode = calculateEditorMode(isIgnoreNextSelectionChange);
500
493
  }
501
494
 
502
495
  return <WrappedComponent
@@ -16,7 +16,8 @@ import ChartLine from '../Icons/ChartLine.js';
16
16
  import Pdf from '../Icons/Pdf.js';
17
17
  import Excel from '../Icons/Excel.js';
18
18
  import UiGlobals from '../../UiGlobals.js';
19
- import qs from 'qs';
19
+ import downloadInBackground from '../../Functions/downloadInBackground.js';
20
+ import downloadWithFetch from '../../Functions/downloadWithFetch.js';
20
21
  import _ from 'lodash';
21
22
 
22
23
  const
@@ -38,36 +39,8 @@ function Report(props) {
38
39
  showReportHeaders = true,
39
40
  h = '300px',
40
41
  } = props,
41
- styles = UiGlobals.styles,
42
42
  url = UiGlobals.baseURL + 'Reports/getReport',
43
43
  buttons = [],
44
- downloadInBackground = (data) => {
45
- const a = document.createElement('A');
46
- a.href = url + '?' + qs.stringify(data);
47
- a.download = true;
48
- document.body.appendChild(a);
49
- a.click();
50
- document.body.removeChild(a);
51
- },
52
- downloadWithFetch = (data) => {
53
- const options = {
54
- method: 'POST',
55
- headers: {
56
- 'Content-Type': 'application/json',
57
- },
58
- body: JSON.stringify(data),
59
- };
60
- fetch(url, options)
61
- .then( res => res.blob() )
62
- .then( blob => {
63
- const
64
- winName = 'ReportWindow',
65
- opts = 'resizable=yes,height=600,width=800,location=0,menubar=0,scrollbars=1',
66
- externalWindow = window.open('', winName, opts),
67
- file = externalWindow.URL.createObjectURL(blob);
68
- externalWindow.location.assign(file);
69
- });
70
- },
71
44
  getReport = (reportType, data) => {
72
45
  const params = {
73
46
  report_id: reportId,
@@ -78,10 +51,21 @@ function Report(props) {
78
51
  };
79
52
 
80
53
  if (reportType === EXCEL) {
81
- downloadInBackground(params);
54
+ downloadInBackground(url, params);
82
55
  } else {
83
56
  // opens a new window
84
- downloadWithFetch(params);
57
+ const win = window.open('');
58
+ win.document.write('<html><head><title>Downloading</title></head><body><img style="position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);" src="' +
59
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAABkCAIAAAD/pVUqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmYzNTRlZmM3MCwgMjAyMy8xMS8wOS0xMjowNTo1MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDc4MDYwODdFNUZGMTFFRUIxOUJGNTc2RTUzMEJGN0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDc4MDYwODhFNUZGMTFFRUIxOUJGNTc2RTUzMEJGN0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENzgwNjA4NUU1RkYxMUVFQjE5QkY1NzZFNTMwQkY3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENzgwNjA4NkU1RkYxMUVFQjE5QkY1NzZFNTMwQkY3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Prs4AtcAABFASURBVHja7J0tcBzHFoXlVw84UGEJVJgDZZZAmSVQZglcMwfaLGUW08ey0GY2tJkEHRbBhEUwYTZMmN6pPZVb1909PTOrv13p+4Bqdqan53b3nTO3f2Z05+zsbAcAAG4W/6EKAAAQdwAAQNwBAABxBwAAxB0AABB3AADEHQAAEHcAAEDcAQAAcQcAAMQdAABxBwAAxB0AABB3AABA3AEAAHEHAADEHQAAcQcAAMQdAAAQdwAAuET+SxVsGnfu3IntDfz35RtuHgBsQeT+6NGjBw8e3L9//06F9j98+PD58+cnJye04iaghvjiiy/UNE+fPqU2AK4/Dtvk4CsHiR329/efPHlyeHhI5H6N5knZT09Pvf3q1asb0xwARO7XGTMqileYT3NeIx8+fIjtUHkAQNxHeP/+/dm/aPvo6GixWOzu7kaC5XIpiadFr4uffvopOlJqGioE4Jo72dsyLNO0U9GiBP34+DhLzJMnT7a7SbZ2QvV0xcHBAfcVAOJ+ATJ3//79mFZVLP/HH3/kiB5xv1XmAYC5CWPur169yrH869ev6zSK7h89euTlHOLTTz9VyL9cLuuUkUYUY8d6hMSh+ipxSDnkn76KsgoD9Ffbaw9MTy9LmP306dMHDx4oZaw1ev78eR4lr7tESqBkUSJdMfeQmqIfNPevUQ82I5ZLaUM/tV+V37wWAOzk4GtjmW5nXpuxWCzyoffv33cGCvb393/99decPo/q/Pzzz/lQDCsLJcuHjo6OikN5pEj51JdW96K49Gip55ZFdIa/hwzQzqGuT66BwrzR/XPrYcgM1UA24wwAmvp5M8Q93+3SuKyG+tl/vHkkJ07J/YBCwfMjJF+lMMBSlcWoc+k8Udwv9RplyYbp0MGKnH5vb68woKPs/chgdP+seuibkQ9xDwPcZHHPgXNOnAVFyijhjvRZKJWsed1CwQuJyTIaF5LuNBMrga7uRT5FLDyx1OuVRSqpZ5LSDD0kit6J5D5Lf1xFha2Xrs8S91n1UBTW9svyouuAuAPcRnHPO+vYUD9zAJjlL6tYfYmQvyyLkVUMCmV7lOHQyE9xaKjUa5eliRS/+TDIwybNXkWh73PFfWI95MLWfYtiNRT3MECTm/zhsDwBKEUouvn6mWUiT5DmwDYyiY0IOWPPyclJTE42Bx+KeDNL5MTPJ6xdlqHR+aYBebu+Sl2QuUysh35hWUQPcIsmVHPIGaFolrBiJDqGGpojMHl/DBdEbgokixGY5vxe3/jO0eahtcsSR1VFEtPmqP30q0yM0Kc34uhgWtMMIneA2zIsk6O55sDI3EvE2IsfFSGd/hlHPXcaEWgeW7hYcT9PWUbf6rqQq1yguI+agbgD3IphmWJt++iSkimEXnsVdgwUOKiM0NL7Y0hhA1/O9JL2Yh2hyBOnAHDzuAnivlwuY8h7d3c3dDnrV/NNmbyzeCSETCuNMg/5drJI7NH2yOfyxH29skjW81SBv8nzZEVT3HMlXOPHv0YLCwA3X9wlXvkD4nn+LUtt8+3KvLMW98hHCu6UXiqe4/qTFZHD5YXD65Uld2gUreeZyaZoZvuHXvS9gjZtTmgj9wDz2N4x93rVc7FsLs+y1ivq9DNrWb18MBQ8rpLffQ0BihHtYqV23/jO0eah9coydJU8+zp0lfrF0fotqksac+8XtrMc06s8XRV6HNZLOUcTxDvAStN8bxaACdULFvejhG7+5nLA+m7MYqTtWHqhjc6LP4XEhG7GGz15hUwxuXpJ4r5eWbLix7OnSL8zMJO88+8Ky6jzul9ySeJeLNuPzypMeYkpF61+QWw0QZ58bnoFAOJ+weI+2pGf+H2S/RWdeH8ovN35+Jvy+T0gZzKr27GGuK9RlkIKlbg5K5CvUrwOVpCnNC5P3M8+/ghEbcPE2muqcz9BUT8IBCDu1ybukrPiBfpaozvznEOd9zrKq18lzSpTfIXmMsR9vbI00y8Wi863t1Sfze+6aKc0d+jEixX3YnAm21Dsnxu55wohcgfE/XrQ3dWcotR+Sa3uzOmjov6YiadJPS/qAYf+WZ0vRJ59vLg+j9hcnrivVxZZbkVz3O2CZI2uXxTSnryiRoqp9H5yXJm42wyV1HotY7RtUzsdJrmEC+vVQc3OXCeB9rhZlYYxd9hqNvqfdQA0F336i/mW4P44EgBLIQG2g7zylX/pB4C4w5bh/7tUfNfs4cOHsQB/d3eXj4gBDPFfqgA2kJN/6aQpXssCACJ32HT6Xy32uh3CdoAOTKjC5ur78fHx6elpfIFgb2/PS/UPDw+J2QEQdwCAWwfDMgAAiDsAACDuAACAuAMAAOIOAACIOwAA4g4AAIg7AAAg7gAAgLgDAADiDgCAuFMFAACI+6bw+++/P3v2rP+9743i9evXMnijTPrfCm8fHx/LvL/++mviuXPTbzWX4WxX7w+5ubcl55tq2NWwuf+sY7lcDmnHYrH48OGDNj7//PPO6U55sSatnacMvvav1Bb2//3331GBquq7d+9+9tlnE7Oam367OD093Vl9YTjaru9sW+EPubkvtiDiq6++2sB2nFhk2S9/vnfvHuJ+RXz99dfe+PPPP3/55ZeDg4O4GaQpDqO2SFzkPfv7+5tjjxz6n3/+iQrUbfDJJ5/Mum1mpd+uOF1h9eHhYa6rC3e2K/aHorkvtiA7q3+fsmntOL3Iiu71cELcr46oa4m7/hahgWKrvj9dxr/pWTtP6cUm3ADZ/uKenKs1m/asukDsb1kURp1t8/3h8iTY1XUZfYKrKfKG3Ju3S9xz7dePXz2WJS7+N5tqRSX49ttvI5ki/ePjYwVfekLo9Hfv3nkYQb2B4iHx7Nkz7VG3wD91ls59/PixG1tX8VNdCXKe3q9tBbBNA2y2Dsn1I3wIB9IemaQEykeH9lfMtWduERRoh/3FPdnxb5mqUvz222+5Aov0neLYHh9SehkZz+zYv7e3p/11E3eynVL/qoTTFdrWid98882U68Y4uMdqXY19Z7M9zlZV5P8V1XTjIX+wtTqqfJSDGkXW+uh0f9Dpb9++/fHHH3MBVUXKsJbgfpPZWjW6ak8pdS1lFRVYWOsOXDNAbjbBrGaVt+inNvw/uYqadxt99913PipLlD7qqn7q1E2vHNwte7tCFtqYoQYdcubNZDsmVIsRAD+T1ZzyAFe99rx58yYPGjj2VzNov1pCLiJhqvVLDWypCiGL/HdW/6bZfpnzjATy/iED5Cjq2ssz5IvyGOUc52r7xYsXPtHursRhw3R75hYh22/3jUHzoWEHm6pb8csvv3QF+vScvl8cbfuQHyoxir1cLpXGp+gmzFWXLz2U7ZT6133odtfpE6+ri1oNVbTDFcph1Nn005MZSq+KkqKFnRP9QafLWguZKlmGaY/TTPcHN4quog0ZqZ2yWW1XN3e/bsNabchamaRz7TxhrbINa4cmD5pNMKVZ/RBVzkqjQzbGclzUvB+QL1++1F+ZqgLmys9FHmr6GOx1c6v5Og065MxE7usPnIniCelnslru+++/d2Di53yOO9xm2vAdO5S/byEjl9Vz3oFG5KNLR1bhxL6R9LdpgOMa+U30ErQnnExepRMXi4Vzk4sofFD6uNUn2jO3CNl+Gx+PTBendlbdhy5jofs5fb840l/dDK6HaETdJDrlhx9+cNVpW/VTXLqfbb/+fRPm+p94Xe1X/paSYlSw42wy1TGyy+jwPHvsqD8oN4WfUf+6ioug9NP9wSapTS2atkQJHHXm5u7XrRQ5W+vLRfzrc7NLKH3tOUNNMKVZ9SDx+KGLIKJyipq3OERnVHlKlOVykVsUeajpldJPoNxeQw3adGYi9/MOnBUjenYCPdvdVHFLFI/0YlhtyviPfcj5q/m1EfO6Oc+mAT7qXqfaPru1/NVHdas4fIisdlfkO3a6PXNPyXWiio170h3euk+tNDq3PhTppxTHXfvcdo7LourqEe3RbDv1L5stFoWsTLluc4Sq72xRS/n03NHs+4POdUmzPjoSr1de9htXecqqYkQo2i6au1+3SqZss7W+VsQ3IruEzyqqcagJRpvV/QPF4MXcW66cONdVfW9FLmyofxS53/QepandvtmghTMj7ueN3GvvcRBaPDxzHOrhPN8n2lAspudzM/9oVzWqfMueZyfTg1pHY+Ai8gznaD695UZq/uwu8hUPXMbN4N7feeyZe0phfyFhzZ61TNXN0FziFulHi6ObxJ3ceL56QzlrQwZ7wWutAv1sO/UfI7xN1e5ft+lvfWezJZYPhYcK+lTJOdu+P6iB+mHgdH+wloV+5enE3Nz9uvUTJQcQeQiutrY5aTnUBKPN6tm14skxNPphw3Ju2dRc5E7T1w+nToPWzsywzHnn4pvrqeuBgnCm7HDuTauF3AurZ7riZvBomn/q3lMbK58YzymcuFg/m5f6uhefPbueuiyMjzhuuj1zi1DYn2+DZt/IZjcXO+b0o8VRncgePVm9uFC64NrQbeMTPVpa5DCabaf+hxRhynUjWXF6x9l8aY+nq7o8Ulxn2PeH4nIugjV0oj8UgyfFVWrVG6pb98nqlULRz4jt7EjFw2moCaY0azFNXRQqL6gv5pCKSshF7jR9/XDqNGjtzIj7eYdlCompR+HrODT/VHuoJTy011zG4AE4+YoDFrW6vUQbefox8qzXz8ZwZ+4V9n06H1VuRaw0as/cIhR1kgfN7fp15C6rmuI+lH6oOA42X7586a66BeLx48ez3CBn269/F63pSFOu68Uws5ytWLzUfBZO94cInyMmneufTY/thMBF3Ra9FtfbUA9PsXxzJdvazVoXoehuhk/Wi+hUb17cUhS50/R+QhQt3mnQwpkZljnvsEzhlHWk2VGuHN42pSoClgiLYk/d4wtfaRpgFykG/uSCHt9wtva8vP7h3bt3OhTRwUR75hahqJM8yD60VEZ75Pr1CGNOP1qcbKFtkw3NbItbqJNtv/5dxrrjPOW6ITHTnS2kdogp/pCH1z2uLeHIyyUn+mcxYBJd3tzc/bq9uyJP4epQnFsou2LYZgQw1ARzmzU/V5qOmi8dY+W2Pxe50/T1FMtog2Zn9ugNkfs6NKdrhoKU8OyYLfFwp7YVbDYHWMM/lCB6uNrj1y9z+jwDU4euWTp1y8lj3rx54zVtOlH7I5aRH8uhvWZA/uHFwrEMY7o9c4tQTB7m/m/d1w5T1ZN98eKFNpSVcvDUVk7fL45O11V0rhfkWYyUg5JFtg6N8xrq0Wz79a8iK5z0uR489c4p142b1lOX2h51NiWTrKifrtKpVr00OwcWU/zBKmlH9UKamFSc6A/FUqidj18hzs3dr1vZpqy8gESH/DNyVtFknppV+1XJtrkOC4aaoH/pWrvzLFFE2TFH6kxkjy6hy3mqNg/aZHEfavoYXleaWMDTbNCmM3vFqt8DQNwvYDa1+QJh4ROxrNAOpKP1qqxCTUJedbliYCHn2fTCbIAXCei6XlAl3/Wa2dAO7TleoW2vuGoKa9+euUXI9ucJvU4nOoJKubXfrMl9/NHi+BZyXOP9NkB/dV85W5tat0u/lvr1r2Rxrn+6iz3lup40092re9vL70adzZk73LbSFa056g+LxUKm6qJulKajruEP8Qpx0dz9uvVDxYpprcyrRb2qXWXxk16mNr99NtQE/Ut7dq14jhYDYjkiidjfpYv3j+oid5pehqmttT+qvdmgQ87sttjAt3PNnbOzsx0AgO3Br4vruXhTP113K8bcAQDqPv0N/igp4g4AtxR/SYZ6QNwB4KZF7pv/aZdrhzF3AAAidwAAQNwBAABxBwAAxB0AABB3AADEHQAAEHcAAEDcAQAAcQcAAMQdAABxpwoAABB3AABA3AEAAHEHAADEHQAAEHcAAMQdAAAQdwAA2CD+L8AAWAIaVcm7yd0AAAAASUVORK5CYII=' +
60
+ '"></body></html>');
61
+ const options = {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Content-Type': 'application/json',
65
+ },
66
+ body: JSON.stringify(params),
67
+ };
68
+ downloadWithFetch(url, options, win);
85
69
  }
86
70
  };
87
71
 
@@ -34,6 +34,12 @@ function UploadsDownloadsWindow(props) {
34
34
  [importFile, setImportFile] = useState(null),
35
35
  [width, height] = useAdjustedWindowSize(400, 450),
36
36
  onDownload = (isTemplate = false) => {
37
+
38
+ const win = window.open('');
39
+ win.document.write('<html><head><title>Downloading</title></head><body><img style="position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);" src="' +
40
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAABkCAIAAAD/pVUqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmYzNTRlZmM3MCwgMjAyMy8xMS8wOS0xMjowNTo1MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDc4MDYwODdFNUZGMTFFRUIxOUJGNTc2RTUzMEJGN0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDc4MDYwODhFNUZGMTFFRUIxOUJGNTc2RTUzMEJGN0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENzgwNjA4NUU1RkYxMUVFQjE5QkY1NzZFNTMwQkY3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENzgwNjA4NkU1RkYxMUVFQjE5QkY1NzZFNTMwQkY3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Prs4AtcAABFASURBVHja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' +
41
+ '"></body></html>');
42
+
37
43
  const
38
44
  baseURL = Repository.api.baseURL,
39
45
  filters = Repository.filters.reduce((result, current) => {
@@ -61,7 +67,7 @@ function UploadsDownloadsWindow(props) {
61
67
  }),
62
68
  headers: _.merge({ 'Content-Type': 'application/json' }, Repository.headers),
63
69
  },
64
- fetchWindow = downloadWithFetch(url, options),
70
+ fetchWindow = downloadWithFetch(url, options, win),
65
71
  interval = setInterval(function() {
66
72
  const cookie = Cookies.get(download_token);
67
73
  if (fetchWindow.window && cookie) {
@@ -0,0 +1,11 @@
1
+ import qs from 'qs';
2
+
3
+ const downloadInBackground = (url, data) => {
4
+ const a = document.createElement('A');
5
+ a.href = url + '?' + qs.stringify(data);
6
+ a.download = true;
7
+ document.body.appendChild(a);
8
+ a.click();
9
+ document.body.removeChild(a);
10
+ };
11
+ export default downloadInBackground;
@@ -1,13 +1,16 @@
1
- const downloadWithFetch = (url, options = {}) => {
1
+ const downloadWithFetch = (url, options = {}, win = null) => {
2
2
  let obj = {};
3
3
  fetch(url, options)
4
4
  .then( res => res.blob() )
5
5
  .then( blob => {
6
- const
7
- winName = 'ReportWindow',
8
- opts = 'resizable=yes,height=600,width=800,location=0,menubar=0,scrollbars=1',
9
- win = window.open('', winName, opts),
10
- file = win.URL.createObjectURL(blob);
6
+ if (!win) {
7
+ const
8
+ winName = 'Download',
9
+ opts = 'resizable=yes,height=100,width=50,location=0,menubar=0,scrollbars=0';
10
+ win = window.open('', winName, opts);
11
+ }
12
+
13
+ const file = win.URL.createObjectURL(blob);
11
14
  obj.window = win;
12
15
  win.location.assign(file);
13
16
  });