Common.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { saveAs } from 'file-saver';
  2. import { Parser } from '@json2csv/plainjs';
  3. export const copyToCommand = (
  4. value: string,
  5. classSelector?: string,
  6. cb?: () => void
  7. ) => {
  8. const element = classSelector
  9. ? document.querySelector(`.${classSelector}`)
  10. : document.body;
  11. const input = document.createElement('textarea');
  12. input.value = value;
  13. element?.appendChild(input);
  14. input.select();
  15. if (document.execCommand('copy')) {
  16. document.execCommand('copy');
  17. cb && cb();
  18. }
  19. element?.removeChild(input);
  20. };
  21. export const generateId = (prefix = 'id') =>
  22. `${prefix}_${Math.random().toString(36).substr(2, 16)}`;
  23. export const formatNumber = (number: number): string => {
  24. return new Intl.NumberFormat().format(number);
  25. };
  26. /**
  27. * Only use in dev env
  28. * Parent component props is optional but required in child component. Need throw some error
  29. * @param text
  30. */
  31. export const throwErrorForDev = (text: string) => {
  32. throw new Error(text);
  33. };
  34. export const generateHashCode = (source: string) => {
  35. let hash = 0,
  36. i,
  37. chr;
  38. if (source.length === 0) return hash;
  39. for (i = 0; i < source.length; i++) {
  40. chr = source.charCodeAt(i);
  41. hash = (hash << 5) - hash + chr;
  42. hash |= 0; // Convert to 32bit integer
  43. }
  44. return hash.toString();
  45. };
  46. export const generateIdByHash = (salt?: string) => {
  47. return generateHashCode(`${new Date().getTime().toString()}-${salt}`);
  48. };
  49. export const generateVector = (dim: number) => {
  50. return Array.from({ length: dim }).map(() => Math.random());
  51. };
  52. export const cloneObj = (obj: any) => {
  53. return JSON.parse(JSON.stringify(obj));
  54. };
  55. export const sleep = (ms: number) => {
  56. return new Promise(resolve => setTimeout(resolve, ms));
  57. };
  58. export const detectItemType = (item: unknown) => {
  59. if (Array.isArray(item)) {
  60. return 'array';
  61. } else if (typeof item === 'string') {
  62. return 'string';
  63. } else if (typeof item === 'number') {
  64. return 'number';
  65. } else if (typeof item === 'boolean') {
  66. return 'bool';
  67. } else if (typeof item === 'object' && item !== null) {
  68. return 'json';
  69. } else {
  70. return 'unknown';
  71. }
  72. };
  73. export const saveCsvAs = (csvObj: any, as: string) => {
  74. try {
  75. const opts = {};
  76. const parser = new Parser(opts);
  77. const csv = parser.parse(csvObj);
  78. const csvData = new Blob([csv], {
  79. type: 'text/csv;charset=utf-8',
  80. });
  81. saveAs(csvData, as);
  82. } catch (err) {
  83. console.error(err);
  84. }
  85. };