1
0
mirror of https://github.com/lana-k/sqliteviz.git synced 2025-12-07 02:28:54 +08:00

copy png to clipboard #50

This commit is contained in:
lana-k
2021-08-20 21:45:05 +02:00
parent 949e6b626e
commit ead861b610
12 changed files with 346 additions and 36 deletions

40
src/lib/chartHelper.js Normal file
View File

@@ -0,0 +1,40 @@
import dereference from 'react-chart-editor/lib/lib/dereference'
import plotly from 'plotly.js'
export function getOptionsFromDataSources (dataSources) {
if (!dataSources) {
return []
}
return Object.keys(dataSources).map(name => ({
value: name,
label: name
}))
}
export function getOptionsForSave (state, dataSources) {
// we don't need to save the data, only settings
// so we modify state.data using dereference
const stateCopy = JSON.parse(JSON.stringify(state))
const emptySources = {}
for (const key in dataSources) {
emptySources[key] = []
}
dereference(stateCopy.data, emptySources)
return stateCopy
}
export async function getImageDataUrl (element, type) {
const chartElement = element.querySelector('.js-plotly-plot')
return await plotly.toImage(chartElement, {
format: type,
width: null,
height: null
})
}
export default {
getOptionsFromDataSources,
getOptionsForSave,
getImageDataUrl
}

View File

@@ -1,8 +1,30 @@
import Lib from 'plotly.js/src/lib'
import dataUrlToBlob from 'dataurl-to-blob'
async function _copyBlob(blob) {
await navigator.clipboard.write([
new ClipboardItem({
[blob.type]: blob
})
])
}
export default {
async copyCsv (str) {
await navigator.clipboard.writeText(str)
Lib.notifier('CSV copied to clipboard successfully', 'long')
},
async copyCanvas (canvas, type) {
canvas.toBlob(async (blob) => {
await _copyBlob(blob)
Lib.notifier('Image copied to clipboard successfully', 'long')
}, 'image/png', 1)
},
async copyFromDataUrl (url) {
const blob = dataUrlToBlob(url)
await _copyBlob(blob)
Lib.notifier('Image copied to clipboard successfully', 'long')
}
}