Skip to content

Commit

Permalink
tsify data catalog tab
Browse files Browse the repository at this point in the history
  • Loading branch information
zoran995 committed Feb 19, 2025
1 parent 696ce33 commit 8c9c696
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 99 deletions.
4 changes: 0 additions & 4 deletions lib/ReactViews/ExplorerWindow/Tabs.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,6 @@ class Tabs extends React.Component {
idInCategory: member.uniqueId,
panel: (
<DataCatalogTab
terria={this.props.terria}
viewState={this.props.viewState}
items={member.memberModels || [member]}
searchPlaceholder={t("addData.searchPlaceholderWhole")}
/>
Expand All @@ -90,8 +88,6 @@ class Tabs extends React.Component {
category: "data-catalog",
panel: (
<DataCatalogTab
terria={this.props.terria}
viewState={this.props.viewState}
items={this.props.terria.catalog.group.memberModels}
searchPlaceholder={t("addData.searchPlaceholder")}
/>
Expand Down
160 changes: 75 additions & 85 deletions lib/ReactViews/ExplorerWindow/Tabs/DataCatalogTab.tsx
Original file line number Diff line number Diff line change
@@ -1,104 +1,94 @@
import { computed, runInAction, makeObservable } from "mobx";
import { runInAction } from "mobx";
import { observer } from "mobx-react";
import PropTypes from "prop-types";
import React from "react";
import { withTranslation } from "react-i18next";
import { withTheme } from "styled-components";
import { useTranslation } from "react-i18next";
import Box from "../../../Styled/Box";
import DataCatalog from "../../DataCatalog/DataCatalog";
import DataPreview from "../../Preview/DataPreview";
import Breadcrumbs from "../../Search/Breadcrumbs";
import SearchBox, { DEBOUNCE_INTERVAL } from "../../Search/SearchBox.jsx";
import Styles from "./data-catalog-tab.scss";
import Breadcrumbs from "../../Search/Breadcrumbs";
import Box from "../../../Styled/Box";
import { useViewState } from "../../Context";

// The DataCatalog Tab
@observer
class DataCatalogTab extends React.Component {
static propTypes = {
terria: PropTypes.object,
viewState: PropTypes.object,
items: PropTypes.array,
searchPlaceholder: PropTypes.string,
onActionButtonClicked: PropTypes.func,
theme: PropTypes.object,
t: PropTypes.func.isRequired
};
interface DataCatalogTabProps {
items?: unknown[];
searchPlaceholder?: string;
onActionButtonClicked?: () => void;
}

constructor(props) {
super(props);
makeObservable(this);
}
const DataCatalogTab = observer(function DataCatalogTab(
props: DataCatalogTabProps
) {
const viewState = useViewState();
const { t } = useTranslation();

@computed
get searchPlaceholder() {
const { t } = this.props;
return this.props.searchPlaceholder || t("addData.searchPlaceholder");
}
const {
searchState,
previewedItem: previewed,
breadcrumbsShown: showBreadcrumbs,
terria
} = viewState;

changeSearchText(newText) {
const searchPlaceholder =
props.searchPlaceholder || t("addData.searchPlaceholder");

const changeSearchText = (newText: string) => {
runInAction(() => {
this.props.viewState.searchState.catalogSearchText = newText;
viewState.searchState.catalogSearchText = newText;
});
}
};

search() {
this.props.viewState.searchState.searchCatalog();
}
const search = () => {
viewState.searchState.searchCatalog();
};

render() {
const terria = this.props.terria;
const searchState = this.props.viewState.searchState;
const previewed = this.props.viewState.previewedItem;
const showBreadcrumbs = this.props.viewState.breadcrumbsShown;
return (
<div className={Styles.root}>
<Box fullHeight column>
<Box fullHeight overflow="hidden">
<Box className={Styles.dataExplorer} styledWidth="40%">
{/* ~TODO: Put this back once we add a MobX DataCatalogSearch Provider~ */}
{/* TODO2: Implement a more generic MobX DataCatalogSearch */}
{searchState.catalogSearchProvider && (
<SearchBox
searchText={searchState.catalogSearchText}
onSearchTextChanged={(val) => this.changeSearchText(val)}
onDoSearch={() => this.search()}
placeholder={this.searchPlaceholder}
debounceDuration={
terria.catalogReferencesLoaded &&
searchState.catalogSearchProvider
? searchState.catalogSearchProvider
.debounceDurationOnceLoaded
: DEBOUNCE_INTERVAL
}
/>
)}
<DataCatalog
terria={this.props.terria}
viewState={this.props.viewState}
onActionButtonClicked={this.props.onActionButtonClicked}
items={this.props.items}
/>
</Box>
<Box styledWidth="60%">
<DataPreview
terria={terria}
viewState={this.props.viewState}
previewed={previewed}
return (
<div className={Styles.root}>
<Box fullHeight column>
<Box fullHeight overflow="hidden">
<Box className={Styles.dataExplorer} styledWidth="40%">
{/* ~TODO: Put this back once we add a MobX DataCatalogSearch Provider~ */}
{/* TODO2: Implement a more generic MobX DataCatalogSearch */}
{searchState.catalogSearchProvider && (
<SearchBox
searchText={searchState.catalogSearchText}
onSearchTextChanged={changeSearchText}
onDoSearch={() => search()}
placeholder={searchPlaceholder}
debounceDuration={
terria.catalogReferencesLoaded &&
searchState.catalogSearchProvider
? (searchState.catalogSearchProvider as any)
.debounceDurationOnceLoaded
: DEBOUNCE_INTERVAL
}
/>
</Box>
)}
<DataCatalog
terria={terria}
viewState={viewState}
onActionButtonClicked={props.onActionButtonClicked}
items={props.items}
/>
</Box>

{showBreadcrumbs && (
<Breadcrumbs
terria={this.props.terria}
viewState={this.props.viewState}
<Box styledWidth="60%">
<DataPreview
terria={terria}
viewState={viewState}
previewed={previewed}
/>
)}
</Box>
</Box>
</div>
);
}
}

export default withTranslation()(withTheme(DataCatalogTab));
{showBreadcrumbs && (
<Breadcrumbs
terria={terria}
viewState={viewState}
previewed={previewed}
/>
)}
</Box>
</div>
);
});

export default DataCatalogTab;
22 changes: 12 additions & 10 deletions test/ReactViews/Search/BreadcrumbsSpec.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { create } from "react-test-renderer";
import { runInAction } from "mobx";
import React from "react";
import { act } from "react-dom/test-utils";
import Terria from "../../../lib/Models/Terria";
import { ThemeProvider } from "styled-components";
import CatalogGroup from "../../../lib/Models/Catalog/CatalogGroup";
import Terria from "../../../lib/Models/Terria";
import ViewState from "../../../lib/ReactViewModels/ViewState";
import Breadcrumbs from "../../../lib/ReactViews/Search/Breadcrumbs";
import DataCatalogTab from "../../../lib/ReactViews/ExplorerWindow/Tabs/DataCatalogTab";
import Icon from "../../../lib/Styled/Icon";
import { ThemeProvider } from "styled-components";
import Breadcrumbs from "../../../lib/ReactViews/Search/Breadcrumbs";
import { terriaTheme } from "../../../lib/ReactViews/StandardUserInterface";
import { runInAction } from "mobx";
import Icon from "../../../lib/Styled/Icon";
import { createWithContexts } from "../withContext";

describe("Breadcrumbs", function () {
let terria: Terria;
Expand All @@ -35,9 +35,10 @@ describe("Breadcrumbs", function () {
await viewState.viewCatalogMember(catalogGroup);

act(() => {
testRenderer = create(
testRenderer = createWithContexts(
viewState,
<ThemeProvider theme={terriaTheme}>
<DataCatalogTab terria={terria} viewState={viewState} />
<DataCatalogTab />
</ThemeProvider>
);
});
Expand All @@ -59,9 +60,10 @@ describe("Breadcrumbs", function () {
expect(viewState.userDataPreviewedItem).toBeUndefined();

act(() => {
testRenderer = create(
testRenderer = createWithContexts(
viewState,
<ThemeProvider theme={terriaTheme}>
<DataCatalogTab terria={terria} viewState={viewState} />
<DataCatalogTab />
</ThemeProvider>
);
});
Expand Down

0 comments on commit 8c9c696

Please sign in to comment.