From 08b33ad6fed6d9865e5d8593efb2ac3c44c0fb28 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 20 Jun 2023 20:04:18 +0200 Subject: [PATCH 1/2] feat(compass-crud): add bloated docs insight to the document list --- package-lock.json | 2 + .../document-list/document-actions-group.tsx | 43 ++++++++- .../src/components/signal-popover.tsx | 25 +++-- packages/compass-crud/package.json | 1 + .../src/components/editable-document.tsx | 18 +++- .../src/components/readonly-document.tsx | 17 +++- .../compass-crud/src/stores/crud-store.ts | 92 +++++++++++++++---- .../compass-field-store/src/stores/store.js | 8 +- .../src/stores/store.spec.js | 4 +- packages/hadron-document/src/document.ts | 1 + 10 files changed, 167 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e8f3fabdfa..5e5465ad731 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41935,6 +41935,7 @@ "react-dom": "^17.0.2", "reflux": "^0.4.1", "reflux-state-mixin": "github:mongodb-js/reflux-state-mixin", + "semver": "^7.5.2", "sinon": "^8.1.1" }, "peerDependencies": { @@ -57128,6 +57129,7 @@ "react-dom": "^17.0.2", "reflux": "^0.4.1", "reflux-state-mixin": "github:mongodb-js/reflux-state-mixin", + "semver": "^7.5.2", "sinon": "^8.1.1" } }, diff --git a/packages/compass-components/src/components/document-list/document-actions-group.tsx b/packages/compass-components/src/components/document-list/document-actions-group.tsx index 0b35de05910..12792ed52b9 100644 --- a/packages/compass-components/src/components/document-list/document-actions-group.tsx +++ b/packages/compass-components/src/components/document-list/document-actions-group.tsx @@ -1,12 +1,15 @@ import React, { useEffect, useRef, useState } from 'react'; -import { css } from '@leafygreen-ui/emotion'; +import { css, cx } from '@leafygreen-ui/emotion'; import { spacing } from '@leafygreen-ui/tokens'; import { Button, Icon } from '../leafygreen'; import { Tooltip } from '../tooltip'; +import type { Signal } from '../signal-popover'; +import { SignalPopover } from '../signal-popover'; const actionsGroupContainer = css({ position: 'absolute', display: 'flex', + alignItems: 'center', gap: spacing[2], width: '100%', top: spacing[2] + spacing[1], @@ -22,6 +25,24 @@ const actionsGroupItem = css({ const actionsGroupItemSeparator = css({ flex: '1 0 auto', + pointerEvents: 'none', +}); + +const actionsGroupIdle = css({ + '& > button': { + display: 'none', + }, +}); + +const actionsGroupHovered = css({ + '& > button': { + display: 'block', + }, +}); + +// Insight icon is always visible, even when action buttons are not +const actionsGroupSignalPopover = css({ + display: 'block !important', }); function useElementParentHoverState( @@ -59,6 +80,7 @@ const DocumentActionsGroup: React.FunctionComponent< onClone?: () => void; onRemove?: () => void; onlyShowOnHover?: boolean; + insights?: Signal | Signal[]; } & ( | { onExpand?: never; expanded?: never } | { onExpand: () => void; expanded: boolean } @@ -71,10 +93,13 @@ const DocumentActionsGroup: React.FunctionComponent< onExpand, expanded, onlyShowOnHover = true, + insights, }) => { + const [signalOpened, setSignalOpened] = useState(false); const conatinerRef = useRef(null); const isHovered = useElementParentHoverState(conatinerRef); const [showCopyButtonTooltip, setShowCopyButtonTooltip] = useState(false); + const isActive = isHovered || signalOpened; useEffect(() => { if (showCopyButtonTooltip === true) { @@ -90,10 +115,10 @@ const DocumentActionsGroup: React.FunctionComponent< return (
{onExpand && ( )} + {insights && ( +
+ +
+ )} {onEdit && (