import { action } from "mobx"; import { observer } from "mobx-react"; import { sortable } from "react-anything-sortable"; import { useTranslation } from "react-i18next"; import styled, { useTheme } from "styled-components"; import getPath from "../../Core/getPath"; import CatalogMemberMixin, { getName } from "../../ModelMixins/CatalogMemberMixin"; import MappableMixin from "../../ModelMixins/MappableMixin"; import ReferenceMixin from "../../ModelMixins/ReferenceMixin"; import CommonStrata from "../../Models/Definition/CommonStrata"; import { BaseModel } from "../../Models/Definition/Model"; import ViewState from "../../ReactViewModels/ViewState"; import Box, { BoxSpan } from "../../Styled/Box"; import { RawButton } from "../../Styled/Button"; import Checkbox from "../../Styled/Checkbox/Checkbox"; import Icon, { StyledIcon } from "../../Styled/Icon"; import { Li } from "../../Styled/List"; import { TextSpan } from "../../Styled/Text"; import Loader from "../Loader"; import PrivateIndicator from "../PrivateIndicator/PrivateIndicator"; import WorkbenchItemControls from "./Controls/WorkbenchItemControls"; interface IProps { item: BaseModel; onMouseDown(): void; onTouchStart(): void; viewState: ViewState; className: any; style: any; setWrapperState(): void; } const WorkbenchItemRaw: React.FC = observer((props) => { const { item, style, className, viewState, onMouseDown, onTouchStart } = props; const { t } = useTranslation(); const theme = useTheme(); const toggleDisplay = action(() => { if (!CatalogMemberMixin.isMixedInto(item)) return; item.setTrait( CommonStrata.user, "isOpenInWorkbench", !item.isOpenInWorkbench ); }); const toggleVisibility = action(() => { if (MappableMixin.isMixedInto(item)) { item.setTrait(CommonStrata.user, "show", !item.show); } }); /** If workbench item is CatalogMember use CatalogMemberTraits.isOpenInWorkbench * Otherwise, defaults to true */ const isOpen = !CatalogMemberMixin.isMixedInto(item) || item.isOpenInWorkbench; const isLoading = (CatalogMemberMixin.isMixedInto(item) && item.isLoading) || (ReferenceMixin.isMixedInto(item) && item.isLoadingReference); return ( {!(item as any).isMappable && !isLoading && ( )} {MappableMixin.isMixedInto(item) ? ( {getName(item)} ) : ( {getName(item)} )} {CatalogMemberMixin.isMixedInto(item) ? ( {item.isPrivate && ( )} {isOpen ? ( ) : ( )} ) : null} {isOpen && ( {isLoading ? ( ) : null} )} ); }); WorkbenchItemRaw.displayName = "WorkbenchItem"; const DraggableBox = styled(Box)` cursor: move; `; const StyledLi = styled(Li)` background: ${(p) => p.theme.darkWithOverlay}; color: ${(p) => p.theme.textLight}; border-radius: 8px; border: 1px solid ${(p) => p.theme.grey}; width: 100%; margin-bottom: 20px; &:last-child { margin-bottom: 0px; } `; export default sortable(WorkbenchItemRaw);