Skip to content

Commit

Permalink
Merge pull request #6032 from gooddata/jsc/f-1
Browse files Browse the repository at this point in the history
fix: disable presentation export for widgets without local id
  • Loading branch information
scavnickyj authored Mar 10, 2025
2 parents f03e5b9 + ed24c75 commit 2d97a0b
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 22 deletions.
2 changes: 2 additions & 0 deletions libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -4011,6 +4011,8 @@ export function getDefaultInsightMenuItems(intl: IntlShape, config: {
scheduleExportDisabled: boolean;
scheduleExportDisabledReason?: SchedulingDisabledReason;
scheduleExportManagementDisabled: boolean;
exportPdfPresentationDisabled: boolean;
exportPowerPointPresentationDisabled: boolean;
onExportXLSX: () => void;
onExportCSV: () => void;
onExportRawCSV: () => void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@
"comment": "Export whole KPI dashboard to PowerPoint",
"limit": 0
},
"options.menu.export.presentation.unsupported.oldWidget": {
"value": "Unable to export. Please resave the dashboard or contact your administrator.",
"comment": "Message that explains that old widget cannot be exported without resaving the dashboard",
"limit": 0
},
"options.menu.export.in.progress": {
"value": "Export is in progress. Wait until it is finished before exporting again.",
"comment": "Export whole KPI dashboard to PowerPoint",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,9 @@ describe("getTimezoneOffset", () => {
});

it("America/Nassau", () => {
const offset = getTimezoneOffset(now, "America/Nassau");
// Nassau has winter time, so fix was needed
const fixedDate = new Date("2022-01-01T00:00:00Z");
const offset = getTimezoneOffset(fixedDate, "America/Nassau");
expect(offset).toEqual(-18000000);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ export const useInsightExport = (config: {
const isExportRawVisible = settings.enableRawExports === true;
const isExportVisible = useDashboardSelector(selectSlideShowExportVisible);

const exportPdfPresentationDisabled = !!widget && !widget.localIdentifier;
const exportPowerPointPresentationDisabled = !!widget && !widget.localIdentifier;

return {
exportCSVEnabled,
exportXLSXEnabled,
Expand All @@ -155,5 +158,7 @@ export const useInsightExport = (config: {
onExportRawCSV,
onExportPdfPresentation,
onExportPowerPointPresentation,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ interface IExportOptionsProps extends IInsightMenuSubmenuComponentProps {
isExportVisible: boolean;
isExportRawVisible: boolean;
exportCSVRawDisabled: boolean;
exportPdfPresentationDisabled: boolean;
exportPowerPointPresentationDisabled: boolean;
onExportCSV: () => void;
onExportRawCSV: () => void;
onExportXLSX: () => void;
Expand All @@ -75,6 +77,8 @@ export const ExportOptions: React.FC<IExportOptionsProps> = ({
exportCsvDisabled,
exportXLSVDisabled,
exportCSVRawDisabled,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
isExportRawVisible,
isExportVisible,
onExportCSV,
Expand All @@ -88,6 +92,9 @@ export const ExportOptions: React.FC<IExportOptionsProps> = ({
const settings = useDashboardSelector(selectSettings);

const tooltip = getExportTooltip(execution, settings?.enableRawExports);
const presentationTooltip = intl.formatMessage({
id: "options.menu.export.presentation.unsupported.oldWidget",
});

return (
<>
Expand All @@ -96,26 +103,50 @@ export const ExportOptions: React.FC<IExportOptionsProps> = ({
<ItemsWrapper className="gd-configuration-export-options" smallItemsSpacing={true}>
{isExportVisible ? (
<>
<MenuItem
onClick={() => {
onClose();
onExportPdfPresentation();
}}
disabled={false}
className="gd-export-options-pdf-presentation"
icon="gd-icon-type-pdf"
messageId="options.menu.export.presentation.PDF"
/>
<MenuItem
onClick={() => {
onClose();
onExportPowerPointPresentation();
}}
disabled={false}
className="gd-export-options-pptx-presentation"
icon="gd-icon-type-slides"
messageId="options.menu.export.presentation.PPTX"
/>
{!exportPdfPresentationDisabled ? (
<MenuItem
onClick={() => {
onClose();
onExportPdfPresentation();
}}
disabled={exportPdfPresentationDisabled}
className="gd-export-options-pdf-presentation"
icon="gd-icon-type-pdf"
messageId="options.menu.export.presentation.PDF"
/>
) : (
<MenuItemWithBubble
className="gd-export-options-pdf-presentation"
icon="gd-icon-type-pdf"
disabled={exportPdfPresentationDisabled}
messageId="options.menu.export.presentation.PDF"
showBubble={true}
alignPoints={alignPoints}
bubbleTextId={presentationTooltip}
/>
)}
{!exportPowerPointPresentationDisabled ? (
<MenuItem
onClick={() => {
onClose();
onExportPowerPointPresentation();
}}
disabled={exportPowerPointPresentationDisabled}
className="gd-export-options-pptx-presentation"
icon="gd-icon-type-slides"
messageId="options.menu.export.presentation.PPTX"
/>
) : (
<MenuItemWithBubble
className="gd-export-options-pptx-presentation"
icon="gd-icon-type-slides"
disabled={exportPowerPointPresentationDisabled}
messageId="options.menu.export.presentation.PPTX"
showBubble={true}
alignPoints={alignPoints}
bubbleTextId={presentationTooltip}
/>
)}
<Header>{intl.formatMessage({ id: "options.menu.export.header.data" })}</Header>
</>
) : null}
Expand All @@ -135,7 +166,7 @@ export const ExportOptions: React.FC<IExportOptionsProps> = ({
) : (
<MenuItemWithBubble
className="gd-export-options-xlsx"
icon="gd-icon-type-sheep"
icon="gd-icon-type-sheet"
disabled={exportXLSVDisabled}
messageId="widget.options.menu.XLSX"
showBubble={true}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ export function getDefaultInsightMenuItems(
scheduleExportDisabled: boolean;
scheduleExportDisabledReason?: SchedulingDisabledReason;
scheduleExportManagementDisabled: boolean;
exportPdfPresentationDisabled: boolean;
exportPowerPointPresentationDisabled: boolean;
onExportXLSX: () => void;
onExportCSV: () => void;
onExportRawCSV: () => void;
Expand All @@ -56,6 +58,8 @@ export function getDefaultInsightMenuItems(
scheduleExportDisabled,
scheduleExportDisabledReason,
scheduleExportManagementDisabled,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
onExportCSV,
onExportRawCSV,
onExportXLSX,
Expand Down Expand Up @@ -120,6 +124,8 @@ export function getDefaultInsightMenuItems(
onExportXLSX={onExportXLSX}
onExportPowerPointPresentation={onExportPowerPointPresentation}
onExportPdfPresentation={onExportPdfPresentation}
exportPdfPresentationDisabled={exportPdfPresentationDisabled}
exportPowerPointPresentationDisabled={exportPowerPointPresentationDisabled}
/>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ export const ViewModeDashboardVisualizationSwitcherContent: React.FC<
onExportXLSX,
onExportPdfPresentation,
onExportPowerPointPresentation,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
} = useInsightExport({
widgetRef,
title: widgetTitle(activeVisualization) || intl.formatMessage({ id: "export.defaultTitle" }),
Expand Down Expand Up @@ -172,6 +174,8 @@ export const ViewModeDashboardVisualizationSwitcherContent: React.FC<
scheduleExportDisabled,
scheduleExportManagementDisabled,
scheduleExportDisabledReason,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
});
const toggleMenu = useCallback(() => {
if (isMenuOpen) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ const DefaultDashboardInsightWidgetCore: React.FC<
onExportXLSX,
onExportPdfPresentation,
onExportPowerPointPresentation,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
} = useInsightExport({
widgetRef,
title: widgetTitle(widget) || intl.formatMessage({ id: "export.defaultTitle" }),
Expand Down Expand Up @@ -125,6 +127,8 @@ const DefaultDashboardInsightWidgetCore: React.FC<
scheduleExportDisabled,
scheduleExportManagementDisabled,
scheduleExportDisabledReason,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
});
const toggleMenu = useCallback(() => {
if (isMenuOpen) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ type UseInsightMenuConfig = {
scheduleExportManagementDisabled: boolean;
scheduleExportDisabledReason?: SchedulingDisabledReason;
alertingDisabledReason?: AlertingDisabledReason;
exportPdfPresentationDisabled: boolean;
exportPowerPointPresentationDisabled: boolean;
};

export const useInsightMenu = (
Expand Down Expand Up @@ -90,6 +92,8 @@ function useDefaultMenuItems(config: UseInsightMenuConfig, setIsMenuOpen: Dispat
widget,
isExportRawVisible,
isExportVisible,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
} = config;

const intl = useIntl();
Expand Down Expand Up @@ -142,6 +146,8 @@ function useDefaultMenuItems(config: UseInsightMenuConfig, setIsMenuOpen: Dispat
alertingDisabled,
alertingDisabledReason,
canCreateAutomation,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
});
}, [
intl,
Expand Down Expand Up @@ -169,5 +175,7 @@ function useDefaultMenuItems(config: UseInsightMenuConfig, setIsMenuOpen: Dispat
canCreateAutomation,
isExportRawVisible,
isExporting,
exportPdfPresentationDisabled,
exportPowerPointPresentationDisabled,
]);
}

0 comments on commit 2d97a0b

Please sign in to comment.