Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ce4296c
save progress
eokoneyo Feb 13, 2025
0fa9b6e
idea validation
eokoneyo Feb 17, 2025
c3e6e2c
start levergaing new share options registry implementation
eokoneyo Feb 17, 2025
41a5ecb
start to converge into new implementation across usages of the share …
eokoneyo Feb 18, 2025
b112b9d
slight adjustments
eokoneyo Feb 18, 2025
109ad0b
use descriptive identifier for value that denotes publicAPI and embed…
eokoneyo Feb 19, 2025
11f8dc5
fix types
eokoneyo Feb 20, 2025
2bc6979
even more changes to toggleShareMenu signature
eokoneyo Feb 20, 2025
63fdffb
modify share registry backing data name
eokoneyo Feb 20, 2025
31f25dd
add implementation to back legacy share implementations
eokoneyo Feb 21, 2025
a861f1a
fix types
eokoneyo Feb 21, 2025
b6718da
type useShareTabsContext and tab contents correctly
eokoneyo Feb 21, 2025
b853b13
start on fixing tests
eokoneyo Feb 26, 2025
5768b46
start on aligning existing share integrations to match share plugin e…
eokoneyo Feb 26, 2025
1541b8f
more test fixes
eokoneyo Mar 3, 2025
5a82f71
clean up config provided by the reporting export share integration
eokoneyo Mar 3, 2025
312f19f
support async functions for delegatedShareUrlHandler
eokoneyo Mar 3, 2025
b533b70
remove unused config values passed from the export type
eokoneyo Mar 3, 2025
5256a01
fix errors from lint and type checks
eokoneyo Mar 7, 2025
b5883f5
actually select the export type for lens csv downloader helper
eokoneyo Mar 19, 2025
5bf0694
make adjustments to evaluate share url lazily in lens
eokoneyo Apr 5, 2025
8c853ce
fix types for render points
eokoneyo Apr 5, 2025
91c7dae
Merge branch 'main' into feat/share-rearchitecture
elasticmachine Apr 17, 2025
2c0e85c
Merge branch 'main' into feat/share-rearchitecture
elasticmachine Apr 20, 2025
0442b8d
attend to PR comment
eokoneyo Apr 23, 2025
021e2ec
Merge branch 'main' into feat/share-rearchitecture
elasticmachine Apr 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/

export { reportingExportModalProvider } from './share_context_menu/register_pdf_png_modal_reporting';
export { reportingCsvShareProvider as reportingCsvShareModalProvider } from './share_context_menu/register_csv_modal_reporting';
export {
reportingPDFExportProvider,
reportingPNGExportProvider,
} from './share_context_menu/register_pdf_png_modal_reporting';
export { reportingCsvExportProvider } from './share_context_menu/register_csv_modal_reporting';
export type { JobParamsProviderOptions, StartServices } from './share_context_menu';
export { getSharedComponents } from './shared';
export type { ReportingPublicComponents } from './shared';
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,32 @@ import React from 'react';
import { firstValueFrom } from 'rxjs';
import type { SerializedSearchSourceFields } from '@kbn/data-plugin/common';
import { FormattedMessage, InjectedIntl } from '@kbn/i18n-react';
import { ShareContext, ShareMenuItemV2 } from '@kbn/share-plugin/public';
import { ShareContext, type ExportShare } from '@kbn/share-plugin/public';
import { LocatorParams } from '@kbn/reporting-common/types';
import { getSearchCsvJobParams, CsvSearchModeParams } from '../shared/get_search_csv_job_params';
import type { ExportModalShareOpts } from '.';
import { checkLicense } from '../..';

export const reportingCsvShareProvider = ({
export const reportingCsvExportProvider = ({
apiClient,
application,
license,
startServices$,
}: ExportModalShareOpts) => {
const getShareMenuItems = ({ objectType, sharingData, toasts }: ShareContext) => {
if ('search' !== objectType) {
return [];
}: ExportModalShareOpts): ExportShare => {
const getShareMenuItems = ({
objectType,
sharingData,
toasts,
}: ShareContext): ReturnType<ExportShare['config']> => {
const licenseCheck = checkLicense(license.check('reporting', 'basic'));
const licenseToolTipContent = licenseCheck.message;
const licenseHasCsvReporting = licenseCheck.showLinks;
const licenseDisabled = !licenseCheck.enableLinks;

const capabilityHasCsvReporting = application.capabilities.discover_v2?.generateCsv === true;

if (!(licenseHasCsvReporting && capabilityHasCsvReporting)) {
return null;
}

const getSearchSource = sharingData.getSearchSource as ({
Expand Down Expand Up @@ -58,15 +69,6 @@ export const reportingCsvShareProvider = ({
};
};

const shareActions: ShareMenuItemV2[] = [];

const licenseCheck = checkLicense(license.check('reporting', 'basic'));
const licenseToolTipContent = licenseCheck.message;
const licenseHasCsvReporting = licenseCheck.showLinks;
const licenseDisabled = !licenseCheck.enableLinks;

const capabilityHasCsvReporting = application.capabilities.discover_v2?.generateCsv === true;

const generateReportingJobCSV = ({ intl }: { intl: InjectedIntl }) => {
const { reportType, decoratedJobParams } = getSearchCsvJobParams({
apiClient,
Expand Down Expand Up @@ -120,66 +122,50 @@ export const reportingCsvShareProvider = ({
});
};

if (licenseHasCsvReporting && capabilityHasCsvReporting) {
const panelTitle = i18n.translate(
'reporting.share.contextMenu.export.csvReportsButtonLabel',
{
defaultMessage: 'Export',
}
);

const reportingUrl = new URL(window.location.origin);

const { reportType, decoratedJobParams } = getSearchCsvJobParams({
apiClient,
searchModeParams: getSearchModeParams(true),
title: sharingData.title as string,
});

const relativePath = apiClient.getReportingPublicJobPath(reportType, decoratedJobParams);

const absoluteUrl = new URL(relativePath, window.location.href).toString();

shareActions.push({
shareMenuItem: {
name: panelTitle,
toolTipContent: licenseToolTipContent,
disabled: licenseDisabled,
['data-test-subj']: 'Export',
},
helpText: (
<FormattedMessage
id="reporting.share.csv.reporting.helpTextCSV"
defaultMessage="Export a CSV of this {objectType}."
values={{ objectType }}
/>
),
reportType,
label: 'CSV',
copyURLButton: {
id: 'reporting.share.modalContent.csv.copyUrlButtonLabel',
dataTestSubj: 'shareReportingCopyURL',
label: 'Post URL',
},
generateExportButton: (
<FormattedMessage
id="reporting.share.generateButtonLabelCSV"
data-test-subj="generateReportButton"
defaultMessage="Generate CSV"
/>
),
generateExport: generateReportingJobCSV,
generateExportUrl: () => absoluteUrl,
generateCopyUrl: reportingUrl,
renderCopyURLButton: true,
});
}

return shareActions;
const panelTitle = i18n.translate('reporting.share.contextMenu.export.csvReportsButtonLabel', {
defaultMessage: 'Export',
});

const { reportType, decoratedJobParams } = getSearchCsvJobParams({
apiClient,
searchModeParams: getSearchModeParams(true),
title: sharingData.title as string,
});

const relativePath = apiClient.getReportingPublicJobPath(reportType, decoratedJobParams);

const absoluteUrl = new URL(relativePath, window.location.href).toString();

return {
name: panelTitle,
toolTipContent: licenseToolTipContent,
exportType: reportType,
label: 'CSV',
disabled: licenseDisabled,
generateAssetExport: generateReportingJobCSV,
generateAssetURIValue: () => absoluteUrl,
helpText: (
<FormattedMessage
id="reporting.share.csv.reporting.helpTextCSV"
defaultMessage="Export a CSV of this {objectType}."
values={{ objectType }}
/>
),
generateExportButton: (
<FormattedMessage
id="reporting.share.generateButtonLabelCSV"
data-test-subj="generateReportButton"
defaultMessage="Generate CSV"
/>
),
renderCopyURIButton: true,
};
};

return {
shareType: 'integration',
id: 'csvReportsModal',
getShareMenuItems,
groupId: 'export',
config: getShareMenuItems,
};
};
Loading