@selfcommunity/react-ui 0.7.0-alpha.354 → 0.7.0-alpha.356

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.
@@ -1,44 +1,74 @@
1
+ import { SCMessageFileType } from '@selfcommunity/types';
1
2
  export const pdfImagePlaceholder = 'data:image/png;base64,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';
3
+ export const videoPlaceholder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAACYUlEQVR4nO3cvWoUURjG8T/YrGAROzFi5Q1oa+Fd2Jp02tiGpPcCvAE/+mxAvIpEsfILBat0ogtJsBKfsDA2h4zuTDL7vjvn+cHTHrLPO3POptgDZmZmZmZmZmZmZmZmZmZpXAU2gT3gM3ACaEVy0vzN0+YzrLFCLgM7wCxBkbqgzD/LNjAhuevAQYLCNFDeATdJ6gZwmKAkDZzD5rOm23beJihHS8pBtu1oJ0EpWnLmZ8J53AOeAx+bvATu9P22M6YDVwtm1nz2Li4B94E3LWv+Bh51HcBmgjIUlI0FO7oCPAa+LbDmfAh3uwxgL0ERCsruf7q5BjwBfnRc91WXAXxNUISCMv9n7Sy3gKfAr57rfu8ygOMERSgoR2f08Rr4cwFrL0yVpzTUuq1UeUoeAB5A+FMpvwHxxchbUHw58hkw/pSGWreVKk/JA8ADCH8q5Tcgvhh5C4ovRz4Dxp/SUOu2UuUpeQB4AOFPpfwGxBcjb0Hx5chnwPhTGmrdVqo8JQ8ADyD8qZTfgPhi5C0ovhz5DBh/SkOt20qVp+QB4AGEP5XyGxBfjLwFxZcjnwHjT2modVup8pQ8ADyA8KdSfgPii5G3oPhyVMMZcJSgBNX8I70vCYpQUD5l+JnqNEERqvmH2hsJilBQHmS4qqDWyzp+9rjKbJHLOh7Sw3aCQrTkbHH+62qeAe+BD8AL4HbfxSYjv6pMRfazXdg0t17RlWXrJL60bz9BSarx0r6/Js2ZMBvZgbuVcdv5l7XmK+q0+Ydlla61OW7+5t3mq+ZKXdxqZmZmZmZmZmZmZmZmZkZ3p+uwFZYL7fr1AAAAAElFTkSuQmCC';
4
+ export const documentPlaceholder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAuUlEQVR4nO3WQQpCMRRD0axCxP0vSRRXExE6EMHBl5e09uVCcSiHBi2Q/isKzw3AeQcIATwAXJyQ6uwYiiH3t0/pzNSQE4Cr42YohsCFoQFiwdAEkWNohLySYdwQGWYGRIKZBSnHOP7Zj7zNtoCw4gtnx0BGuZHimGl1mxaLz7cCaTctVwyk241Q9Cv1WSDtpuWKgXS7EeathbUeja4YyCg3UhwzrVGmVRwzrVGmteq0uMj5uW0gCeaeAHHCuEhTlUIAAAAASUVORK5CYII=';
5
+ export const audioPlaceHolder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAABVElEQVR4nO3Xu0rEUBDG8b8PoJUXrAT3EWxsrOztLHwISwtRK1sVS7e1tbQWLBWs3EJ8BhsFr4WMBKaQRV3WnJlkwnwwBAI5OT/OJSeQiRUxqjtgvgsQ8caIlkWbrhgxhAy+XWcLv8MVMgPceo2MGELwxIgxxA0jDhAXjDhBzDHiCKlihvGGmGGagJhgmoIUx1gfUcapQYmXlkydg2arII30QxLSwRFZB/rAAbAJzEWFPAwt2BdgH5iMBnn8ZQd6Ba6A5egQ0TrsCuQoEuQZWAE2gFPgIyrkaejeArAHnAOrkSHjRhKiyRHRTABvXZhaa/p8KMgisAWcAGfANfAZDbIEvP/x0at2Lo9+1G5gd8TXu/rnDgHZHgE5jgLp6Tr4CXEPTEda7D09yV4CN8AFsANM1elAW7bfUpGEaHJECkdyamlyahWO5NTSSMvq3+kMJINzvgAzxLJFazyrgQAAAABJRU5ErkJggg==';
2
6
  const MAX_WIDTH = 1920;
3
- function dataURLtoFile(dataUrl, fileName) {
7
+ export function isSupportedVideoFormat(filename) {
8
+ const extension = filename.split('.').pop().toLowerCase();
9
+ const supportedFormats = ['mp4', 'webm', 'ogv', 'mp3', 'm3u8', 'mpd'];
10
+ return supportedFormats.includes(extension);
11
+ }
12
+ function dataURLtoFile(dataUrl, file) {
4
13
  let arr = dataUrl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
5
- const _fileName = fileName.endsWith('.pdf') ? fileName.replace(/\.pdf$/, '.jpeg') : fileName;
14
+ const _fileName = file.file && file.file.type.startsWith(SCMessageFileType.DOCUMENT) ? file.file.name.replace(/(\.[^.]+)$/, '.jpeg') : file.name;
6
15
  while (n--) {
7
16
  u8arr[n] = bstr.charCodeAt(n);
8
17
  }
9
18
  return new File([u8arr], _fileName, { type: mime });
10
19
  }
11
- export function pdfToJpeg(url, fileName) {
20
+ export function createAudioThumbnail(file) {
21
+ return new Promise(function (resolve, reject) {
22
+ try {
23
+ resolve(dataURLtoFile(audioPlaceHolder, file));
24
+ }
25
+ catch (e) {
26
+ reject(e);
27
+ console.log(e);
28
+ }
29
+ });
30
+ }
31
+ export function createDocumentThumbnail(url, file) {
12
32
  const pdfjsLib = require('pdfjs-dist/webpack');
13
33
  return new Promise(function (resolve, reject) {
14
34
  try {
15
- const canvas = document.createElement('canvas');
16
- const ctx = canvas.getContext('2d');
17
- // Load the PDF file
18
- pdfjsLib
19
- .getDocument(url)
20
- .promise.then((pdf) => {
21
- // Get the first page of the PDF
22
- return pdf.getPage(1);
23
- })
24
- .then((page) => {
25
- // Set the canvas dimensions to match the PDF page dimensions
26
- const viewport = page.getViewport({ scale: 1 });
27
- canvas.width = viewport.width;
28
- canvas.height = viewport.height;
29
- // Render the PDF page onto the canvas
30
- const renderContext = {
31
- canvasContext: ctx,
32
- viewport: viewport
33
- };
34
- return page.render(renderContext).promise;
35
- })
36
- .then(() => {
37
- // Convert the canvas to an image
38
- const thumbnailUrl = canvas.toDataURL('image/jpeg', 1);
39
- // Resolve the Promise with the generated value
40
- resolve(dataURLtoFile(thumbnailUrl, fileName));
41
- });
35
+ if (!file.file.name.endsWith('.pdf')) {
36
+ resolve(dataURLtoFile(documentPlaceholder, file));
37
+ }
38
+ else {
39
+ const canvas = document.createElement('canvas');
40
+ const ctx = canvas.getContext('2d');
41
+ // Load the PDF file
42
+ pdfjsLib
43
+ .getDocument(url)
44
+ .promise.then((pdf) => {
45
+ // Get the first page of the PDF
46
+ return pdf.getPage(1);
47
+ })
48
+ .then((page) => {
49
+ // Set the canvas dimensions to match the PDF page dimensions
50
+ const viewport = page.getViewport({ scale: 1 });
51
+ canvas.width = viewport.width;
52
+ canvas.height = viewport.height;
53
+ // Render the PDF page onto the canvas
54
+ const renderContext = {
55
+ canvasContext: ctx,
56
+ viewport: viewport
57
+ };
58
+ return page.render(renderContext).promise;
59
+ })
60
+ .then(() => {
61
+ // Convert the canvas to an image
62
+ const thumbnailUrl = canvas.toDataURL('image/jpeg', 1);
63
+ // Resolve the Promise with the generated value
64
+ resolve(dataURLtoFile(thumbnailUrl, file));
65
+ })
66
+ .catch((error) => {
67
+ console.error('Error converting PDF to JPEG:', error);
68
+ reject(error);
69
+ return Promise.reject(error);
70
+ });
71
+ }
42
72
  }
43
73
  catch (e) {
44
74
  reject(e);
@@ -63,7 +93,7 @@ export function createThumbnail(file) {
63
93
  ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
64
94
  const thumbnailData = canvas.toDataURL('image/jpeg', 0.5);
65
95
  // Resolve the Promise with the generated value
66
- resolve(dataURLtoFile(thumbnailData, file.name));
96
+ resolve(dataURLtoFile(thumbnailData, file));
67
97
  };
68
98
  img.src = event.target.result;
69
99
  };
@@ -76,25 +106,30 @@ export function createThumbnail(file) {
76
106
  }
77
107
  });
78
108
  }
79
- export function createVideoThumbnail(file, fileName) {
109
+ export function createVideoThumbnail(fileUrl, file) {
80
110
  return new Promise(function (resolve, reject) {
81
111
  try {
82
112
  const video = document.createElement('video');
83
- video.src = file;
113
+ video.src = fileUrl;
84
114
  video.crossOrigin = '*';
85
- video.addEventListener('seeked', function () {
86
- const canvas = document.createElement('canvas');
87
- canvas.width = MAX_WIDTH;
88
- //to keep aspect ratio
89
- const scaleSize = MAX_WIDTH / video.videoWidth;
90
- canvas.height = video.videoHeight * scaleSize;
91
- const ctx = canvas.getContext('2d');
92
- // Draw the canvas
93
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
94
- const thumbnailUrl = canvas.toDataURL('image/jpeg', 0.5);
95
- // Resolve the Promise with the generated value
96
- resolve(dataURLtoFile(thumbnailUrl, fileName));
97
- });
115
+ if (!isSupportedVideoFormat(file.file.name)) {
116
+ resolve(dataURLtoFile(videoPlaceholder, file));
117
+ }
118
+ else {
119
+ video.addEventListener('seeked', function () {
120
+ const canvas = document.createElement('canvas');
121
+ canvas.width = MAX_WIDTH;
122
+ //to keep aspect ratio
123
+ const scaleSize = MAX_WIDTH / video.videoWidth;
124
+ canvas.height = video.videoHeight * scaleSize;
125
+ const ctx = canvas.getContext('2d');
126
+ // Draw the canvas
127
+ ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
128
+ const thumbnailUrl = canvas.toDataURL('image/jpeg', 0.5);
129
+ // Resolve the Promise with the generated value
130
+ resolve(dataURLtoFile(thumbnailUrl, file));
131
+ });
132
+ }
98
133
  video.currentTime = 1;
99
134
  }
100
135
  catch (e) {