UNPKG

terriajs

Version:

Geospatial data visualization platform.

61 lines 3.54 kB
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