From a496169741bb75d332fcade7c48620e663518763 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Mon, 17 Mar 2025 11:43:25 -0600 Subject: [PATCH] updates --- .../features/ShareMenu/AccessDropdown.tsx | 2 +- .../features/ShareMenu/ShareMenu.tsx | 2 +- .../ShareMenu/ShareMenuContent.stories.tsx | 114 ++++++++++++++++++ .../features/ShareMenu/ShareMenuContent.tsx | 5 +- .../{publicHelpers.ts => helpers.ts} | 0 .../components/features/ShareMenu/index.ts | 1 - .../MetricThreeDotMenu.tsx | 4 +- web/tsconfig.json | 2 +- 8 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 web/src/components/features/ShareMenu/ShareMenuContent.stories.tsx rename web/src/components/features/ShareMenu/{publicHelpers.ts => helpers.ts} (100%) diff --git a/web/src/components/features/ShareMenu/AccessDropdown.tsx b/web/src/components/features/ShareMenu/AccessDropdown.tsx index fe80f610b..5ecc5d57b 100644 --- a/web/src/components/features/ShareMenu/AccessDropdown.tsx +++ b/web/src/components/features/ShareMenu/AccessDropdown.tsx @@ -1,6 +1,6 @@ import React, { useMemo } from 'react'; import { ShareRole } from '@/api/asset_interfaces'; -import { DropdownItem, DropdownItems, DropdownLabel } from '@/components/ui/dropdown'; +import { DropdownItem, DropdownLabel } from '@/components/ui/dropdown'; import { Text } from '@/components/ui/typography'; import { useMemoizedFn } from '@/hooks'; import { Separator } from '@/components/ui/seperator'; diff --git a/web/src/components/features/ShareMenu/ShareMenu.tsx b/web/src/components/features/ShareMenu/ShareMenu.tsx index 96316aebb..916c79f96 100644 --- a/web/src/components/features/ShareMenu/ShareMenu.tsx +++ b/web/src/components/features/ShareMenu/ShareMenu.tsx @@ -6,7 +6,7 @@ import { AppTooltip } from '@/components/ui/tooltip'; import { useMemoizedFn } from '@/hooks'; import { BusterShare, ShareAssetType } from '@/api/asset_interfaces'; import { ShareMenuContent } from './ShareMenuContent'; -import { isShareMenuVisible } from './publicHelpers'; +import { isShareMenuVisible } from './helpers'; import { ShareMenuTopBar, ShareMenuTopBarOptions } from './ShareMenuTopBar'; import { createBusterRoute, BusterRoutes } from '@/routes'; import { useBusterNotifications } from '@/context/BusterNotifications'; diff --git a/web/src/components/features/ShareMenu/ShareMenuContent.stories.tsx b/web/src/components/features/ShareMenu/ShareMenuContent.stories.tsx new file mode 100644 index 000000000..b7ff526cf --- /dev/null +++ b/web/src/components/features/ShareMenu/ShareMenuContent.stories.tsx @@ -0,0 +1,114 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { ShareMenuContent } from './ShareMenuContent'; +import { BusterShare, ShareAssetType, ShareRole } from '@/api/asset_interfaces'; +import { ShareMenuTopBarOptions } from './ShareMenuTopBar'; + +const meta: Meta = { + title: 'Features/Share/ShareMenuContent', + component: ShareMenuContent, + parameters: { + layout: 'centered' + }, + decorators: [ + (Story) => ( +
+ +
+ ) + ] +}; + +export default meta; +type Story = StoryObj; + +const mockShareAssetConfig: BusterShare = { + sharingKey: 'test-key', + individual_permissions: [ + { + email: 'test@example.com', + role: ShareRole.VIEWER, + id: '1', + name: 'Test User' + } + ], + team_permissions: [ + { + name: 'Engineering', + id: 'team-1', + role: ShareRole.EDITOR + } + ], + organization_permissions: [], + password_secret_id: null, + public_expiry_date: null, + public_enabled_by: null, + publicly_accessible: false, + public_password: null, + permission: ShareRole.OWNER +}; + +export const ShareTab: Story = { + args: { + shareAssetConfig: mockShareAssetConfig, + assetId: 'test-asset-id', + assetType: ShareAssetType.METRIC, + selectedOptions: ShareMenuTopBarOptions.Share, + onCopyLink: () => console.log('Copy link clicked'), + setOpenShareWithGroupAndTeam: () => console.log('Open share with group and team'), + goBack: () => console.log('Go back clicked') + } +}; + +export const PublishTab: Story = { + args: { + ...ShareTab.args, + selectedOptions: ShareMenuTopBarOptions.Publish + } +}; + +export const EmbedTab: Story = { + args: { + ...ShareTab.args, + selectedOptions: ShareMenuTopBarOptions.Embed + } +}; + +export const ShareWithGroupAndTeamTab: Story = { + args: { + ...ShareTab.args, + selectedOptions: ShareMenuTopBarOptions.ShareWithGroupAndTeam + } +}; + +export const DashboardAsset: Story = { + args: { + ...ShareTab.args, + assetType: ShareAssetType.DASHBOARD + } +}; + +export const CollectionAsset: Story = { + args: { + ...ShareTab.args, + assetType: ShareAssetType.COLLECTION + } +}; + +export const WithPublicAccess: Story = { + args: { + ...ShareTab.args, + shareAssetConfig: { + ...mockShareAssetConfig, + publicly_accessible: true, + public_password: 'test-password', + public_expiry_date: '2024-12-31T23:59:59Z' + } + } +}; diff --git a/web/src/components/features/ShareMenu/ShareMenuContent.tsx b/web/src/components/features/ShareMenu/ShareMenuContent.tsx index 03d5c84c8..4d496e4b8 100644 --- a/web/src/components/features/ShareMenu/ShareMenuContent.tsx +++ b/web/src/components/features/ShareMenu/ShareMenuContent.tsx @@ -1,7 +1,6 @@ -import { type BusterShare, ShareRole, ShareAssetType } from '@/api/asset_interfaces'; -import React, { useState } from 'react'; +import { type BusterShare, ShareAssetType } from '@/api/asset_interfaces'; +import React from 'react'; import { ShareMenuTopBarOptions } from './ShareMenuTopBar'; -import { useMemoizedFn } from '@/hooks'; import { ShareMenuContentBody } from './ShareMenuContentBody'; export const ShareMenuContent: React.FC<{ diff --git a/web/src/components/features/ShareMenu/publicHelpers.ts b/web/src/components/features/ShareMenu/helpers.ts similarity index 100% rename from web/src/components/features/ShareMenu/publicHelpers.ts rename to web/src/components/features/ShareMenu/helpers.ts diff --git a/web/src/components/features/ShareMenu/index.ts b/web/src/components/features/ShareMenu/index.ts index 84c504278..cacbd95c8 100644 --- a/web/src/components/features/ShareMenu/index.ts +++ b/web/src/components/features/ShareMenu/index.ts @@ -1,2 +1 @@ export * from './ShareMenu'; -export * from './publicHelpers'; diff --git a/web/src/layouts/ChatLayout/FileContainer/FileContainerHeader/MetricContainerHeaderButtons/MetricThreeDotMenu.tsx b/web/src/layouts/ChatLayout/FileContainer/FileContainerHeader/MetricContainerHeaderButtons/MetricThreeDotMenu.tsx index da58fbeb2..19f60509b 100644 --- a/web/src/layouts/ChatLayout/FileContainer/FileContainerHeader/MetricContainerHeaderButtons/MetricThreeDotMenu.tsx +++ b/web/src/layouts/ChatLayout/FileContainer/FileContainerHeader/MetricContainerHeaderButtons/MetricThreeDotMenu.tsx @@ -412,9 +412,7 @@ const useDeleteMetricSelectMenu = ({ metricId }: { metricId: string }) => { }; const useRenameMetricSelectMenu = ({ metricId }: { metricId: string }) => { - const { mutateAsync: updateMetric } = useUpdateMetric(); const onSetFileView = useChatLayoutContextSelector((x) => x.onSetFileView); - return useMemo( () => ({ label: 'Rename metric', @@ -444,6 +442,6 @@ export const useShareMenuSelectMenu = ({ metricId }: { metricId: string }) => { icon: , items: [
SWAG
] }), - [] + [metricId] ); }; diff --git a/web/tsconfig.json b/web/tsconfig.json index a7edb7372..216d08519 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -25,5 +25,5 @@ } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules", "**/*.stories.tsx", "**/*.stories.ts"] + "exclude": ["node_modules"] }