Skip to content

Commit 187d1f2

Browse files
frano-mFran McDade
andauthored
feat: prevent dataset export if not authorized (#898) (#3610)
* feat: prevent dataset export if not authorized (#898) * fix: component config import from package (#898) --------- Co-authored-by: Fran McDade <franmcdade@Frans-MacBook-Pro.local>
1 parent 0a68ff2 commit 187d1f2

File tree

6 files changed

+116
-39
lines changed

6 files changed

+116
-39
lines changed

explorer/app/components/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export { Stack } from "@clevercanary/data-explorer-ui/lib/components/common/Stac
2323
export { StaticImage } from "@clevercanary/data-explorer-ui/lib/components/common/StaticImage/staticImage";
2424
export { StatusBadge } from "@clevercanary/data-explorer-ui/lib/components/common/StatusBadge/statusBadge";
2525
export { TagWarning } from "@clevercanary/data-explorer-ui/lib/components/common/Tag/tag.styles";
26+
export { ConditionalComponent } from "@clevercanary/data-explorer-ui/lib/components/ComponentCreator/components/ConditionalComponent/conditionalComponent";
2627
export { DetailViewTable } from "@clevercanary/data-explorer-ui/lib/components/Detail/components/DetailViewTable/detailViewTable";
2728
export { DownloadCurlCommandForm } from "@clevercanary/data-explorer-ui/lib/components/Export/components/DownloadCurlCommand/components/DownloadCurlCommandForm/downloadCurlCommandForm";
2829
export { DownloadCurlCommand } from "@clevercanary/data-explorer-ui/lib/components/Export/components/DownloadCurlCommand/downloadCurlCommand";

explorer/app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,29 @@ export const buildExportEntityToTerra = (
379379
};
380380
};
381381

382+
/**
383+
* Build props for entity related export warning FluidAlert component.
384+
* @param datasetsResponse - Response model return from datasets API (unused).
385+
* @param viewContext - View context.
386+
* @returns model to be used as props for the FluidAlert component.
387+
*/
388+
export const buildExportEntityWarning = (
389+
datasetsResponse: DatasetsResponse,
390+
viewContext: ViewContext
391+
): React.ComponentProps<typeof C.FluidAlert> => {
392+
const {
393+
authState: { isAuthorized },
394+
} = viewContext;
395+
const title = isAuthorized
396+
? "To export this dataset, please request access."
397+
: "To export this dataset, please sign in and, if necessary, request access.";
398+
return {
399+
severity: "warning",
400+
title,
401+
variant: "banner",
402+
};
403+
};
404+
382405
/**
383406
* Build props for export Hero component.
384407
* @param _ - Unused.
@@ -804,6 +827,32 @@ function mapCurrentQuery(
804827
];
805828
}
806829

830+
/**
831+
* Renders entity related export when the given datasests response is accessible.
832+
* @param datasetsResponse - Response model return from datasets API.
833+
* @returns model to be used as props for the ConditionalComponent component.
834+
*/
835+
export const renderExportEntity = (
836+
datasetsResponse: DatasetsResponse
837+
): React.ComponentProps<typeof C.ConditionalComponent> => {
838+
return {
839+
isIn: isDatasetAccessible(datasetsResponse),
840+
};
841+
};
842+
843+
/**
844+
* Renders entity related export warning when the given datasests response is not accessible.
845+
* @param datasetsResponse - Response model return from datasets API.
846+
* @returns model to be used as props for the ConditionalComponent component.
847+
*/
848+
export const renderExportEntityWarning = (
849+
datasetsResponse: DatasetsResponse
850+
): React.ComponentProps<typeof C.ConditionalComponent> => {
851+
return {
852+
isIn: !isDatasetAccessible(datasetsResponse),
853+
};
854+
};
855+
807856
/**
808857
* Returns value from a string array matching the given index.
809858
* @param arr - String array.
Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,73 @@
11
import { ComponentConfig } from "@clevercanary/data-explorer-ui/lib/config/entities";
22
import { DatasetsResponse } from "../../../../../app/apis/azul/anvil-cmg/common/responses";
33
import * as C from "../../../../../app/components";
4+
import * as MDX from "../../../../../app/content/anvil-cmg";
45
import * as V from "../../../../../app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders";
56

67
export const mainColumn: ComponentConfig[] = [
78
{
8-
component: C.ExportToTerra,
9-
viewBuilder: V.buildExportEntityToTerra,
10-
} as ComponentConfig<typeof C.ExportToTerra, DatasetsResponse>,
9+
/* Dataset is not accessible; render warning */
10+
children: [
11+
{
12+
children: [
13+
{
14+
component: C.FluidAlert,
15+
viewBuilder: V.buildExportEntityWarning,
16+
} as ComponentConfig<typeof C.FluidAlert, DatasetsResponse>,
17+
],
18+
component: C.BackPageContentSingleColumn,
19+
} as ComponentConfig<typeof C.BackPageContentSingleColumn>,
20+
],
21+
component: C.ConditionalComponent,
22+
viewBuilder: V.renderExportEntityWarning,
23+
} as ComponentConfig<typeof C.ConditionalComponent, DatasetsResponse>,
24+
{
25+
/* Dataset is accessible; render export entity */
26+
children: [
27+
/* mainColumn */
28+
{
29+
children: [
30+
{
31+
component: C.ExportToTerra,
32+
viewBuilder: V.buildExportEntityToTerra,
33+
} as ComponentConfig<typeof C.ExportToTerra, DatasetsResponse>,
34+
],
35+
component: C.BackPageContentMainColumn,
36+
} as ComponentConfig<typeof C.BackPageContentMainColumn>,
37+
/* sideColumn */
38+
{
39+
children: [
40+
{
41+
children: [
42+
{
43+
component: C.ExportCurrentQuery,
44+
viewBuilder: V.buildExportCurrentQuery,
45+
} as ComponentConfig<typeof C.ExportCurrentQuery>,
46+
{
47+
component: C.ExportSelectedDataSummary,
48+
viewBuilder: V.buildExportSelectedDataSummary,
49+
} as ComponentConfig<typeof C.ExportSelectedDataSummary>,
50+
],
51+
component: C.ExportSummary,
52+
} as ComponentConfig<typeof C.ExportSummary>,
53+
{
54+
children: [
55+
{
56+
children: [
57+
{
58+
component: MDX.DataReleasePolicy,
59+
} as ComponentConfig<typeof MDX.DataReleasePolicy>,
60+
],
61+
component: MDX.Section,
62+
} as ComponentConfig<typeof MDX.Section>,
63+
],
64+
component: C.FluidPaper,
65+
} as ComponentConfig<typeof C.FluidPaper>,
66+
],
67+
component: C.BackPageContentSideColumn,
68+
} as ComponentConfig<typeof C.BackPageContentSideColumn>,
69+
],
70+
component: C.ConditionalComponent,
71+
viewBuilder: V.renderExportEntity,
72+
} as ComponentConfig<typeof C.ConditionalComponent, DatasetsResponse>,
1173
];

explorer/site-config/anvil-cmg/dev/detail/dataset/exportSideColumn.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

explorer/site-config/anvil-cmg/dev/index/datasetsEntityConfig.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
ANVIL_CMG_CATEGORY_LABEL,
1414
} from "../../category";
1515
import { mainColumn as exportMainColumn } from "../detail/dataset/exportMainColumn";
16-
import { sideColumn as exportSideColumn } from "../detail/dataset/exportSideColumn";
1716
import { mainColumn } from "../detail/dataset/overviewMainColumn";
1817
import { sideColumn } from "../detail/dataset/overviewSideColumn";
1918
import { top } from "../detail/dataset/top";
@@ -37,7 +36,6 @@ export const datasetsEntityConfig: EntityConfig<DatasetsResponse> = {
3736
label: "Export",
3837
mainColumn: exportMainColumn,
3938
route: "export-to-terra",
40-
sideColumn: exportSideColumn,
4139
},
4240
],
4341
top: top,

explorer/site-config/anvil-cmg/dev/listView/listHero.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
ComponentConfig,
33
ComponentsConfig,
4-
} from "../../../../../../data-explorer/packages/data-explorer-ui/src/config/entities";
4+
} from "@clevercanary/data-explorer-ui/lib/config/entities";
55
import * as C from "../../../../app/components";
66
import * as T from "../../../../app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders";
77

0 commit comments

Comments
 (0)