mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
refactor(Dashboard): Fetch dashboard screenshot via dedicated endpoint (#29272)
This commit is contained in:
@@ -1,74 +0,0 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import { SyntheticEvent } from 'react';
|
||||
import domToPdf from 'dom-to-pdf';
|
||||
import { kebabCase } from 'lodash';
|
||||
import { logging, t } from '@superset-ui/core';
|
||||
import { addWarningToast } from 'src/components/MessageToasts/actions';
|
||||
|
||||
/**
|
||||
* generate a consistent file stem from a description and date
|
||||
*
|
||||
* @param description title or description of content of file
|
||||
* @param date date when file was generated
|
||||
*/
|
||||
const generateFileStem = (description: string, date = new Date()) =>
|
||||
`${kebabCase(description)}-${date.toISOString().replace(/[: ]/g, '-')}`;
|
||||
|
||||
/**
|
||||
* Create an event handler for turning an element into an image
|
||||
*
|
||||
* @param selector css selector of the parent element which should be turned into image
|
||||
* @param description name or a short description of what is being printed.
|
||||
* Value will be normalized, and a date as well as a file extension will be added.
|
||||
* @param isExactSelector if false, searches for the closest ancestor that matches selector.
|
||||
* @returns event handler
|
||||
*/
|
||||
export default function downloadAsPdf(
|
||||
selector: string,
|
||||
description: string,
|
||||
isExactSelector = false,
|
||||
) {
|
||||
return (event: SyntheticEvent) => {
|
||||
const elementToPrint = isExactSelector
|
||||
? document.querySelector(selector)
|
||||
: event.currentTarget.closest(selector);
|
||||
|
||||
if (!elementToPrint) {
|
||||
return addWarningToast(
|
||||
t('PDF download failed, please refresh and try again.'),
|
||||
);
|
||||
}
|
||||
|
||||
const options = {
|
||||
margin: 10,
|
||||
filename: `${generateFileStem(description)}.pdf`,
|
||||
image: { type: 'jpeg', quality: 1 },
|
||||
html2canvas: { scale: 2 },
|
||||
excludeClassNames: ['header-controls'],
|
||||
};
|
||||
return domToPdf(elementToPrint, options)
|
||||
.then(() => {
|
||||
// nothing to be done
|
||||
})
|
||||
.catch((e: Error) => {
|
||||
logging.error('PDF generation failed', e);
|
||||
});
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user