@databiosphere/findable-ui 50.0.0 → 50.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +7 -0
- package/lib/common/analytics/entities.d.ts +2 -0
- package/lib/common/analytics/entities.js +2 -0
- package/lib/components/Export/common/tracking.d.ts +8 -0
- package/lib/components/Export/common/tracking.js +12 -0
- package/lib/components/Export/components/ExportToTerra/exportToTerra.d.ts +2 -1
- package/lib/components/Export/components/ExportToTerra/exportToTerra.js +10 -5
- package/lib/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/components/FileManifestDownload/fileManifestDownload.js +7 -1
- package/package.json +1 -1
- package/src/common/analytics/entities.ts +2 -0
- package/src/components/Export/common/tracking.ts +14 -0
- package/src/components/Export/components/ExportToTerra/exportToTerra.tsx +13 -4
- package/src/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/components/FileManifestDownload/fileManifestDownload.tsx +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [50.1.0](https://github.com/DataBiosphere/findable-ui/compare/v50.0.0...v50.1.0) (2026-03-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add dataset-specific analytics events for exports ([#831](https://github.com/DataBiosphere/findable-ui/issues/831)) ([aea5262](https://github.com/DataBiosphere/findable-ui/commit/aea526241a92767f51ed7f8540869484502a1478))
|
|
9
|
+
|
|
3
10
|
## [50.0.0](https://github.com/DataBiosphere/findable-ui/compare/v49.6.0...v50.0.0) (2026-03-20)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -5,6 +5,8 @@ export type DataLayer = any;
|
|
|
5
5
|
export declare enum EVENT_NAME {
|
|
6
6
|
BULK_DOWNLOAD_REQUESTED = "bulk_download_requested",
|
|
7
7
|
CHAT_SUBMITTED = "chat_submitted",
|
|
8
|
+
DATASET_ANALYZE_IN_TERRA_REQUESTED = "dataset_analyze_in_terra_requested",
|
|
9
|
+
DATASET_FILE_MANIFEST_REQUESTED = "dataset_file_manifest_requested",
|
|
8
10
|
ENTITY_SELECTED = "entity_selected",
|
|
9
11
|
ENTITY_TABLE_PAGINATED = "entity_table_paginated",
|
|
10
12
|
ENTITY_TABLE_SORTED = "entity_table_sorted",
|
|
@@ -5,6 +5,8 @@ export var EVENT_NAME;
|
|
|
5
5
|
(function (EVENT_NAME) {
|
|
6
6
|
EVENT_NAME["BULK_DOWNLOAD_REQUESTED"] = "bulk_download_requested";
|
|
7
7
|
EVENT_NAME["CHAT_SUBMITTED"] = "chat_submitted";
|
|
8
|
+
EVENT_NAME["DATASET_ANALYZE_IN_TERRA_REQUESTED"] = "dataset_analyze_in_terra_requested";
|
|
9
|
+
EVENT_NAME["DATASET_FILE_MANIFEST_REQUESTED"] = "dataset_file_manifest_requested";
|
|
8
10
|
EVENT_NAME["ENTITY_SELECTED"] = "entity_selected";
|
|
9
11
|
EVENT_NAME["ENTITY_TABLE_PAGINATED"] = "entity_table_paginated";
|
|
10
12
|
EVENT_NAME["ENTITY_TABLE_SORTED"] = "entity_table_sorted";
|
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
* @param toolName - Tool name.
|
|
5
5
|
*/
|
|
6
6
|
export declare function trackBulkDownloadRequested(entity_name: string, toolName: string): void;
|
|
7
|
+
/**
|
|
8
|
+
* Executes event tracking for the dataset file manifest export.
|
|
9
|
+
*/
|
|
10
|
+
export declare function trackDatasetFileManifestRequested(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Executes event tracking for the dataset Terra export.
|
|
13
|
+
*/
|
|
14
|
+
export declare function trackDatasetExportToTerraRequested(): void;
|
|
7
15
|
/**
|
|
8
16
|
* Executes event tracking for the file manifest export.
|
|
9
17
|
* @param entity_name - Entity (tab) name.
|
|
@@ -12,6 +12,18 @@ export function trackBulkDownloadRequested(entity_name, toolName) {
|
|
|
12
12
|
[EVENT_PARAM.TOOL_NAME]: toolName,
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Executes event tracking for the dataset file manifest export.
|
|
17
|
+
*/
|
|
18
|
+
export function trackDatasetFileManifestRequested() {
|
|
19
|
+
track(EVENT_NAME.DATASET_FILE_MANIFEST_REQUESTED);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Executes event tracking for the dataset Terra export.
|
|
23
|
+
*/
|
|
24
|
+
export function trackDatasetExportToTerraRequested() {
|
|
25
|
+
track(EVENT_NAME.DATASET_ANALYZE_IN_TERRA_REQUESTED);
|
|
26
|
+
}
|
|
15
27
|
/**
|
|
16
28
|
* Executes event tracking for the file manifest export.
|
|
17
29
|
* @param entity_name - Entity (tab) name.
|
|
@@ -10,8 +10,9 @@ export interface ExportToTerraProps {
|
|
|
10
10
|
fileSummaryFacetName: string;
|
|
11
11
|
filters: Filters;
|
|
12
12
|
formFacet: FormFacet;
|
|
13
|
+
isDatasetExport?: boolean;
|
|
13
14
|
manifestDownloadFormat?: ManifestDownloadFormat;
|
|
14
15
|
manifestDownloadFormats: ManifestDownloadFormat[];
|
|
15
16
|
speciesFacetName: string;
|
|
16
17
|
}
|
|
17
|
-
export declare const ExportToTerra: ({ ExportForm, ExportToTerraStart, ExportToTerraSuccess, fileManifestState, fileSummaryFacetName, filters, formFacet, manifestDownloadFormat, manifestDownloadFormats, speciesFacetName, }: ExportToTerraProps) => JSX.Element;
|
|
18
|
+
export declare const ExportToTerra: ({ ExportForm, ExportToTerraStart, ExportToTerraSuccess, fileManifestState, fileSummaryFacetName, filters, formFacet, isDatasetExport, manifestDownloadFormat, manifestDownloadFormats, speciesFacetName, }: ExportToTerraProps) => JSX.Element;
|
|
@@ -6,10 +6,10 @@ import { useFileManifestFileCount } from "../../../../hooks/useFileManifest/useF
|
|
|
6
6
|
import { useFileManifestFormat } from "../../../../hooks/useFileManifest/useFileManifestFormat";
|
|
7
7
|
import { useRequestFileLocation } from "../../../../hooks/useRequestFileLocation";
|
|
8
8
|
import { useRequestManifest } from "../../../../hooks/useRequestManifest/useRequestManifest";
|
|
9
|
-
import { trackExportToTerraRequested } from "../../common/tracking";
|
|
9
|
+
import { trackDatasetExportToTerraRequested, trackExportToTerraRequested, } from "../../common/tracking";
|
|
10
10
|
import { ExportToTerraNotStarted } from "./components/ExportToTerraNotStarted/exportToTerraNotStarted";
|
|
11
11
|
import { ExportToTerraReady } from "./components/ExportToTerraReady/exportToTerraReady";
|
|
12
|
-
export const ExportToTerra = ({ ExportForm, ExportToTerraStart, ExportToTerraSuccess, fileManifestState, fileSummaryFacetName, filters, formFacet, manifestDownloadFormat, manifestDownloadFormats, speciesFacetName, }) => {
|
|
12
|
+
export const ExportToTerra = ({ ExportForm, ExportToTerraStart, ExportToTerraSuccess, fileManifestState, fileSummaryFacetName, filters, formFacet, isDatasetExport = false, manifestDownloadFormat, manifestDownloadFormats, speciesFacetName, }) => {
|
|
13
13
|
const { exploreState: { tabValue: entityList }, } = useExploreState();
|
|
14
14
|
useFileManifest(filters, fileSummaryFacetName);
|
|
15
15
|
useFileManifestFileCount(filters, speciesFacetName, fileSummaryFacetName);
|
|
@@ -18,9 +18,14 @@ export const ExportToTerra = ({ ExportForm, ExportToTerraStart, ExportToTerraSuc
|
|
|
18
18
|
const { data, isLoading, run } = useRequestFileLocation(requestUrl, requestMethod);
|
|
19
19
|
const exportURL = useExportToTerraResponseURL(requestParams, data);
|
|
20
20
|
return exportURL ? (_jsx(ExportToTerraReady, { ExportToTerraSuccess: ExportToTerraSuccess, exportURL: exportURL })) : (_jsx(ExportToTerraNotStarted, { ExportTerraForm: ExportForm, ExportToTerraStart: ExportToTerraStart, fileManifestFormatState: fileManifestFormatState, fileManifestState: fileManifestState, formFacet: formFacet, isLoading: isLoading, manifestDownloadFormats: manifestDownloadFormats, onRequestManifest: () => {
|
|
21
|
-
// Execute GA tracking
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
// Execute GA tracking.
|
|
22
|
+
if (isDatasetExport) {
|
|
23
|
+
trackDatasetExportToTerraRequested();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
trackExportToTerraRequested(entityList);
|
|
27
|
+
}
|
|
28
|
+
// Request manifest.
|
|
24
29
|
run();
|
|
25
30
|
} }));
|
|
26
31
|
};
|
|
@@ -4,6 +4,7 @@ import copy from "copy-to-clipboard";
|
|
|
4
4
|
import { useDownloadStatus } from "../../../../../../../../hooks/useDownloadStatus";
|
|
5
5
|
import { useFileManifestDownload } from "../../../../../../../../hooks/useFileManifest/useFileManifestDownload";
|
|
6
6
|
import { useLoginGuard } from "../../../../../../../../providers/loginGuard/hook";
|
|
7
|
+
import { trackDatasetFileManifestRequested } from "../../../../../../common/tracking";
|
|
7
8
|
import { BUTTON_PROPS } from "../../../../../../../common/Button/constants";
|
|
8
9
|
import { ButtonGroup } from "../../../../../../../common/ButtonGroup/buttonGroup";
|
|
9
10
|
import { ContentCopyIconSmall, DownloadIconSmall, } from "../../../../../../../common/CustomIcon/common/constants";
|
|
@@ -17,7 +18,12 @@ export const FileManifestDownload = ({ filters, }) => {
|
|
|
17
18
|
const { fileName, isIdle, isLoading, manifestURL, requestManifest } = useFileManifestDownload(filters);
|
|
18
19
|
// Prompt user for login before download and copy, if required.
|
|
19
20
|
const { requireLogin } = useLoginGuard();
|
|
20
|
-
return (_jsx(FluidPaper, { children: _jsxs(GridPaper, { children: [_jsx(SectionTitle, { children: "File Manifest" }), _jsxs(TableContainer, { children: [_jsx(Loading, { loading: isLoading, panelStyle: LOADING_PANEL_STYLE.INHERIT }), _jsx(GridTable, { gridTemplateColumns: "auto 1fr", children: _jsx(TableBody, { children: _jsx(TableRow, { children: isIdle || isLoading ? (_jsx(TableCell, { children: _jsx(Tooltip, { ...TOOLTIP_PROPS, title: message, children: _jsx("span", { children: _jsx(Button, { ...BUTTON_PROPS.PRIMARY_CONTAINED, disabled: disabled || isLoading, onClick: () =>
|
|
21
|
+
return (_jsx(FluidPaper, { children: _jsxs(GridPaper, { children: [_jsx(SectionTitle, { children: "File Manifest" }), _jsxs(TableContainer, { children: [_jsx(Loading, { loading: isLoading, panelStyle: LOADING_PANEL_STYLE.INHERIT }), _jsx(GridTable, { gridTemplateColumns: "auto 1fr", children: _jsx(TableBody, { children: _jsx(TableRow, { children: isIdle || isLoading ? (_jsx(TableCell, { children: _jsx(Tooltip, { ...TOOLTIP_PROPS, title: message, children: _jsx("span", { children: _jsx(Button, { ...BUTTON_PROPS.PRIMARY_CONTAINED, disabled: disabled || isLoading, onClick: () => {
|
|
22
|
+
requireLogin(() => {
|
|
23
|
+
trackDatasetFileManifestRequested();
|
|
24
|
+
requestManifest();
|
|
25
|
+
});
|
|
26
|
+
}, children: "Request link" }) }) }) })) : (_jsxs(_Fragment, { children: [manifestURL && (_jsx(TableCell, { children: _jsx(ButtonGroup, { Buttons: [
|
|
21
27
|
_jsx(Button, { download: true, href: manifestURL, children: _jsx(DownloadIconSmall, {}) }, "download"),
|
|
22
28
|
_jsx(Button, { onClick: () => copy(manifestURL), children: _jsx(ContentCopyIconSmall, {}) }, "copy"),
|
|
23
29
|
] }) })), _jsx(TableCell, { children: manifestURL
|
package/package.json
CHANGED
|
@@ -7,6 +7,8 @@ export type DataLayer = any;
|
|
|
7
7
|
export enum EVENT_NAME {
|
|
8
8
|
BULK_DOWNLOAD_REQUESTED = "bulk_download_requested",
|
|
9
9
|
CHAT_SUBMITTED = "chat_submitted",
|
|
10
|
+
DATASET_ANALYZE_IN_TERRA_REQUESTED = "dataset_analyze_in_terra_requested",
|
|
11
|
+
DATASET_FILE_MANIFEST_REQUESTED = "dataset_file_manifest_requested",
|
|
10
12
|
ENTITY_SELECTED = "entity_selected",
|
|
11
13
|
ENTITY_TABLE_PAGINATED = "entity_table_paginated",
|
|
12
14
|
ENTITY_TABLE_SORTED = "entity_table_sorted",
|
|
@@ -17,6 +17,20 @@ export function trackBulkDownloadRequested(
|
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Executes event tracking for the dataset file manifest export.
|
|
22
|
+
*/
|
|
23
|
+
export function trackDatasetFileManifestRequested(): void {
|
|
24
|
+
track(EVENT_NAME.DATASET_FILE_MANIFEST_REQUESTED);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Executes event tracking for the dataset Terra export.
|
|
29
|
+
*/
|
|
30
|
+
export function trackDatasetExportToTerraRequested(): void {
|
|
31
|
+
track(EVENT_NAME.DATASET_ANALYZE_IN_TERRA_REQUESTED);
|
|
32
|
+
}
|
|
33
|
+
|
|
20
34
|
/**
|
|
21
35
|
* Executes event tracking for the file manifest export.
|
|
22
36
|
* @param entity_name - Entity (tab) name.
|
|
@@ -9,7 +9,10 @@ import { useRequestFileLocation } from "../../../../hooks/useRequestFileLocation
|
|
|
9
9
|
import { useRequestManifest } from "../../../../hooks/useRequestManifest/useRequestManifest";
|
|
10
10
|
import { FileManifestState } from "../../../../providers/fileManifestState";
|
|
11
11
|
import { FormFacet, ManifestDownloadFormat } from "../../common/entities";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
trackDatasetExportToTerraRequested,
|
|
14
|
+
trackExportToTerraRequested,
|
|
15
|
+
} from "../../common/tracking";
|
|
13
16
|
import { ExportToTerraNotStarted } from "./components/ExportToTerraNotStarted/exportToTerraNotStarted";
|
|
14
17
|
import { ExportToTerraReady } from "./components/ExportToTerraReady/exportToTerraReady";
|
|
15
18
|
|
|
@@ -21,6 +24,7 @@ export interface ExportToTerraProps {
|
|
|
21
24
|
fileSummaryFacetName: string;
|
|
22
25
|
filters: Filters; // Initializes export to terra filters.
|
|
23
26
|
formFacet: FormFacet;
|
|
27
|
+
isDatasetExport?: boolean;
|
|
24
28
|
manifestDownloadFormat?: ManifestDownloadFormat;
|
|
25
29
|
manifestDownloadFormats: ManifestDownloadFormat[];
|
|
26
30
|
speciesFacetName: string;
|
|
@@ -34,6 +38,7 @@ export const ExportToTerra = ({
|
|
|
34
38
|
fileSummaryFacetName,
|
|
35
39
|
filters,
|
|
36
40
|
formFacet,
|
|
41
|
+
isDatasetExport = false,
|
|
37
42
|
manifestDownloadFormat,
|
|
38
43
|
manifestDownloadFormats,
|
|
39
44
|
speciesFacetName,
|
|
@@ -68,9 +73,13 @@ export const ExportToTerra = ({
|
|
|
68
73
|
isLoading={isLoading}
|
|
69
74
|
manifestDownloadFormats={manifestDownloadFormats}
|
|
70
75
|
onRequestManifest={(): void => {
|
|
71
|
-
// Execute GA tracking
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
// Execute GA tracking.
|
|
77
|
+
if (isDatasetExport) {
|
|
78
|
+
trackDatasetExportToTerraRequested();
|
|
79
|
+
} else {
|
|
80
|
+
trackExportToTerraRequested(entityList);
|
|
81
|
+
}
|
|
82
|
+
// Request manifest.
|
|
74
83
|
run();
|
|
75
84
|
}}
|
|
76
85
|
/>
|
|
@@ -5,6 +5,7 @@ import { Filters } from "../../../../../../../../common/entities";
|
|
|
5
5
|
import { useDownloadStatus } from "../../../../../../../../hooks/useDownloadStatus";
|
|
6
6
|
import { useFileManifestDownload } from "../../../../../../../../hooks/useFileManifest/useFileManifestDownload";
|
|
7
7
|
import { useLoginGuard } from "../../../../../../../../providers/loginGuard/hook";
|
|
8
|
+
import { trackDatasetFileManifestRequested } from "../../../../../../common/tracking";
|
|
8
9
|
import { BUTTON_PROPS } from "../../../../../../../common/Button/constants";
|
|
9
10
|
import { ButtonGroup } from "../../../../../../../common/ButtonGroup/buttonGroup";
|
|
10
11
|
import {
|
|
@@ -59,7 +60,12 @@ export const FileManifestDownload = ({
|
|
|
59
60
|
<Button
|
|
60
61
|
{...BUTTON_PROPS.PRIMARY_CONTAINED}
|
|
61
62
|
disabled={disabled || isLoading}
|
|
62
|
-
onClick={() =>
|
|
63
|
+
onClick={(): void => {
|
|
64
|
+
requireLogin(() => {
|
|
65
|
+
trackDatasetFileManifestRequested();
|
|
66
|
+
requestManifest();
|
|
67
|
+
});
|
|
68
|
+
}}
|
|
63
69
|
>
|
|
64
70
|
Request link
|
|
65
71
|
</Button>
|