Files
supabase/studio/components/grid/utils/common.ts
T
2022-05-25 16:50:33 -02:30

58 lines
1.4 KiB
TypeScript

import { SupaColumn, SupaRow } from '../types';
export function deepClone(obj: unknown) {
try {
return JSON.parse(JSON.stringify(obj));
} catch (e) {
throw e;
}
}
export function exportRowsToCsv(
columns: SupaColumn[],
rows: SupaRow[],
separator: string = ','
) {
const keys = columns.map(x => x.name) || [];
const csv =
keys.join(separator) +
'\n' +
rows
.map(row => {
return keys
.map(k => {
let cell = row[k] === null || row[k] === undefined ? '' : row[k];
cell =
cell instanceof Date
? cell.toLocaleString()
: typeof cell == 'object' || Array.isArray(cell)
? JSON.stringify(cell).replace(/"/g, '""')
: cell.toString().replace(/"/g, '""');
if (cell.search(/("|,|\n)/g) >= 0) {
cell = `"${cell}"`;
}
return cell;
})
.join(separator);
})
.join('\n');
return csv;
}
export function formatClipboardValue(value: any) {
if (value === null) return '';
if (typeof value == 'object' || Array.isArray(value)) {
return JSON.stringify(value);
}
return value;
}
export const copyToClipboard = (str: string, callback = () => {}) => {
const focused = window.document.hasFocus();
if (focused) {
window.navigator?.clipboard?.writeText(str).then(callback);
} else {
console.warn('Unable to copy to clipboard');
}
};