@visns-studio/visns-components 3.8.4 → 3.8.6

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.
@@ -977,13 +977,11 @@ function Field({
977
977
  return (
978
978
  <div
979
979
  style={{
980
+ position: 'relative', // Parent container positioned relatively
980
981
  display: 'inline-flex',
981
982
  alignItems: 'center',
982
983
  cursor: 'pointer',
983
984
  }}
984
- onClick={() => {
985
- fileImageInputRef.current.click();
986
- }}
987
985
  >
988
986
  <input
989
987
  type="file"
@@ -991,7 +989,15 @@ function Field({
991
989
  className={inputClass[settings.id]} // Assuming inputClass is defined elsewhere in your code
992
990
  onChange={onChange}
993
991
  ref={fileImageInputRef}
994
- style={{ display: 'none' }} // Hide the file input
992
+ style={{
993
+ position: 'absolute',
994
+ left: 0,
995
+ top: 0,
996
+ width: '100%',
997
+ height: '100%',
998
+ opacity: 0, // Make the input invisible
999
+ cursor: 'pointer',
1000
+ }}
995
1001
  />
996
1002
  {inputValue.imageSrc ? (
997
1003
  <img
@@ -1004,7 +1010,7 @@ function Field({
1004
1010
  />
1005
1011
  ) : (
1006
1012
  <img
1007
- src="data:image/png;base64,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"
1013
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAJ3UlEQVR4nO3b60/aXhwG8KflJijIJQgTt8y5mLkxl73w//8HzBbdXLLFqJsg3rjKnUJ/L0wJpYUC9ovbL8/nlRbac077tOf0tCiHh4c6iFymPncF6P+JwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEsFgkQgGi0QwWCSCwSIRDBaJYLBIBINFIhgsEvEfmhiBahNiQpEAAAAASUVORK5CYII="
1008
1014
  alt="Placeholder"
1009
1015
  />
1010
1016
  )}
@@ -72,6 +72,16 @@ const renderValue = (field, data) => {
72
72
  }
73
73
  };
74
74
 
75
+ const slugify = (text) => {
76
+ return text
77
+ .toString()
78
+ .toLowerCase()
79
+ .trim()
80
+ .replace(/\s+/g, '-') // Replace spaces with -
81
+ .replace(/[^\w\-]+/g, '') // Remove all non-word chars
82
+ .replace(/\-\-+/g, '-'); // Replace multiple - with single -
83
+ };
84
+
75
85
  const GenericDynamic = ({
76
86
  data,
77
87
  fetchData,
@@ -284,17 +294,38 @@ const GenericDynamic = ({
284
294
  };
285
295
 
286
296
  const handleDownloadForm = async (item, label, data) => {
287
- // Show loading toast and keep its ID
288
297
  const toastId = toast.loading('Downloading form...');
289
298
 
290
299
  try {
291
- const res = await Download(setting.download, 'POST', {
300
+ // Assuming Download returns an object with { data: Blob, headers: Headers }
301
+ const response = await Download(setting.download, 'POST', {
292
302
  data: item,
293
303
  dynamicData: data,
294
304
  label: label,
295
305
  });
296
306
 
297
- if (res.data) {
307
+ if (response && response.data) {
308
+ const contentDisposition = response.headers.get(
309
+ 'Content-Disposition'
310
+ );
311
+ let filename = null; // Default to null, letting saveAs decide the filename
312
+
313
+ if (contentDisposition) {
314
+ const filenameMatch = contentDisposition.match(
315
+ /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
316
+ );
317
+ if (filenameMatch && filenameMatch[1]) {
318
+ filename = filenameMatch[1].replace(/['"]/g, ''); // Remove potential quotes
319
+ }
320
+ }
321
+
322
+ // Perform the download using FileSaver.js
323
+ if (filename) {
324
+ saveAs(response.data, filename);
325
+ } else {
326
+ saveAs(response.data); // No filename extracted, let FileSaver handle it
327
+ }
328
+
298
329
  // Update loading toast to a success message before closing it
299
330
  toast.update(toastId, {
300
331
  render: 'Download successful!',
@@ -303,26 +334,15 @@ const GenericDynamic = ({
303
334
  autoClose: 5000,
304
335
  closeButton: true,
305
336
  });
306
- // Perform the download
307
-
308
- // const fileName = slugify(label) + '.pdf';
309
- // saveAs(res.data, fileName);
310
- saveAs(res.data);
311
337
  } else {
312
- // Update the toast to show an error message
313
- toast.update(toastId, {
314
- render: 'Error downloading form',
315
- type: 'error',
316
- isLoading: false,
317
- autoClose: 5000,
318
- closeButton: true,
319
- });
338
+ // Handle the case where there is no data in the response
339
+ throw new Error('No data received from the server');
320
340
  }
321
341
  } catch (err) {
322
342
  console.error(err);
323
343
  // Update the toast to show an error message
324
344
  toast.update(toastId, {
325
- render: 'Error downloading form',
345
+ render: 'Error downloading form: ' + err.message,
326
346
  type: 'error',
327
347
  isLoading: false,
328
348
  autoClose: 5000,
package/package.json CHANGED
@@ -54,7 +54,7 @@
54
54
  "react-dom": "^17.0.1"
55
55
  },
56
56
  "name": "@visns-studio/visns-components",
57
- "version": "3.8.4",
57
+ "version": "3.8.6",
58
58
  "description": "Various packages to assist in the development of our Custom Applications.",
59
59
  "main": "index.js",
60
60
  "scripts": {