Files
supabase/studio/components/grid/utils/common.ts
2022-07-08 12:46:46 +08:00

54 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')
}
}