terriajs
Version:
Geospatial data visualization platform.
61 lines • 3.54 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { useCallback, useEffect, useState } from "react";
import { comparer, reaction } from "mobx";
import { observer } from "mobx-react";
import { useTranslation } from "react-i18next";
import addedByUser from "../../Core/addedByUser";
import getPath from "../../Core/getPath";
import removeUserAddedData from "../../Models/Catalog/removeUserAddedData";
import CatalogGroup from "./CatalogGroup";
import DataCatalogMember from "./DataCatalogMember";
import { addRemoveButtonClicked, allMappableMembersInWorkbench } from "./DisplayGroupHelper";
const DataCatalogGroup = observer((props) => {
const { group, viewState, manageIsOpenLocally = false, userData = false, onActionButtonClicked, removable, terria, isTopLevel } = props;
const { t } = useTranslation();
const [isOpenLocal, setIsOpenLocal] = useState(false);
const isOpen = useCallback(() => {
if (manageIsOpenLocally) {
return isOpenLocal;
}
return group.isOpen;
}, [manageIsOpenLocally, isOpenLocal, group.isOpen]);
const clickGroup = useCallback(async () => {
if (manageIsOpenLocally) {
setIsOpenLocal(!isOpenLocal);
}
(await viewState.viewCatalogMember(group, !group.isOpen)).raiseError(viewState.terria);
}, [manageIsOpenLocally, isOpenLocal, group, viewState]);
const isSelected = useCallback(() => {
return addedByUser(group)
? viewState.userDataPreviewedItem === group
: viewState.previewedItem === group;
}, [group, viewState]);
const getNameOrPrettyUrl = useCallback(() => {
// Grab a name via nameInCatalog, if it's a blank string, try and generate one from the url
const nameInCatalog = group.nameInCatalog || "";
if (nameInCatalog !== "") {
return nameInCatalog;
}
const url = group.url || "";
// strip protocol
return url.replace(/^https?:\/\//, "");
}, [group]);
useEffect(() => {
const cleanupLoadMembersReaction = reaction(() => [group, isOpen()], ([currentGroup, isCurrentlyOpen]) => {
if (isCurrentlyOpen && currentGroup) {
currentGroup.loadMembers();
}
}, { equals: comparer.shallow, fireImmediately: true });
return () => cleanupLoadMembersReaction();
}, [group, isOpen]);
return (_jsx(CatalogGroup, { text: getNameOrPrettyUrl(), isPrivate: group.isPrivate, title: getPath(group, " → "), topLevel: isTopLevel, open: isOpen(), loading: group.isLoading || group.isLoadingMembers, emptyMessage: t("dataCatalog.groupEmpty"), onClick: clickGroup, removable: removable, removeUserAddedData: () => removeUserAddedData(terria, group), selected: isSelected(),
// Pass these next three props down to deal with displayGroup functionality
displayGroup: group.displayGroup, addRemoveButtonFunction: (event) => {
addRemoveButtonClicked(group, viewState, terria, event.shiftKey || event.ctrlKey);
}, allItemsLoaded: allMappableMembersInWorkbench(group.members || [], terria), children: isOpen()
? group.memberModels.map((item) => (_jsx(DataCatalogMember, { member: item, terria: terria, viewState: viewState, userData: userData, overrideOpen: manageIsOpenLocally, onActionButtonClicked: onActionButtonClicked }, item.uniqueId)))
: null }));
});
DataCatalogGroup.displayName = "DataCatalogGroup";
export default DataCatalogGroup;
//# sourceMappingURL=DataCatalogGroup.js.map