From bf1b08344cd972e0ab09ffa1f059616d24f5e845 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Thu, 25 Sep 2025 10:59:24 -0600 Subject: [PATCH] table content copy --- apps/web/src/api/asset_interfaces/index.ts | 1 - .../collections/AddToCollectionModal.tsx | 25 ++++++++++--------- .../components/features/icons/assetIcons.tsx | 1 - .../MetricChartCard/MetricChartCard.tsx | 11 ++++---- .../elements/MetricElement/MetricContent.tsx | 6 +++++ apps/web/src/styles/styles.css | 2 +- .../src/type-utilities/pagination.ts | 4 +-- 7 files changed, 28 insertions(+), 22 deletions(-) diff --git a/apps/web/src/api/asset_interfaces/index.ts b/apps/web/src/api/asset_interfaces/index.ts index 584aae590..bf6113131 100644 --- a/apps/web/src/api/asset_interfaces/index.ts +++ b/apps/web/src/api/asset_interfaces/index.ts @@ -7,7 +7,6 @@ export type * from './datasources'; export type * from './metric'; export type * from './permission'; export type * from './permission_groups'; -export type * from './search'; export type * from './sql'; export type * from './teams'; export type * from './terms'; diff --git a/apps/web/src/components/features/collections/AddToCollectionModal.tsx b/apps/web/src/components/features/collections/AddToCollectionModal.tsx index e16451095..dfb36b625 100644 --- a/apps/web/src/components/features/collections/AddToCollectionModal.tsx +++ b/apps/web/src/components/features/collections/AddToCollectionModal.tsx @@ -1,6 +1,6 @@ +import type { SearchTextResponse } from '@buster/server-shared/search'; import type { ShareAssetType } from '@buster/server-shared/share'; import React, { useLayoutEffect, useMemo, useState } from 'react'; -import type { BusterSearchResult } from '@/api/asset_interfaces/search'; import { useAddAndRemoveAssetsFromCollection, useGetCollection, @@ -33,8 +33,9 @@ export const AddToCollectionModal: React.FC<{ const { data: searchResults } = useSearch({ query: debouncedSearchTerm, - asset_types: ['metric_file', 'dashboard_file'], - num_results: 100, + assetTypes: ['metric_file', 'dashboard_file'], + page_size: 50, + page: 1, }); const [selectedAssets, setSelectedAssets] = useState([]); @@ -42,13 +43,13 @@ export const AddToCollectionModal: React.FC<{ return selectedAssets.map((asset) => asset.id); }, [selectedAssets]); - const columns = useMemo['columns']>( + const columns = useMemo['columns']>( () => [ { title: 'Name', - dataIndex: 'name', - render: (name, data) => { - const Icon = assetTypeToIcon(data.type) || ASSET_ICONS.metrics; + dataIndex: 'title', + render: (name, record) => { + const Icon = assetTypeToIcon(record.assetType) || ASSET_ICONS.metrics; return (
@@ -61,7 +62,7 @@ export const AddToCollectionModal: React.FC<{ }, { title: 'Updated', - dataIndex: 'updated_at', + dataIndex: 'updatedAt', width: 140, render: (value: string) => { return formatDate({ @@ -74,10 +75,10 @@ export const AddToCollectionModal: React.FC<{ [] ); - const rows: BusterListRowItem[] = useMemo(() => { + const rows: BusterListRowItem[] = useMemo(() => { return ( - searchResults?.map((asset) => ({ - id: asset.id, + searchResults?.data?.map((asset) => ({ + id: asset.assetId, data: asset, })) || [] ); @@ -86,7 +87,7 @@ export const AddToCollectionModal: React.FC<{ const createKeySearchResultMap = useMemoizedFn(() => { const map = new Map(); rows.forEach((asset) => { - if (asset.data?.type) map.set(asset.id, { type: asset.data?.type, id: asset.id }); + if (asset.data?.assetType) map.set(asset.id, { type: asset.data?.assetType, id: asset.id }); }); return map; }); diff --git a/apps/web/src/components/features/icons/assetIcons.tsx b/apps/web/src/components/features/icons/assetIcons.tsx index 21d4fb171..6a7236394 100644 --- a/apps/web/src/components/features/icons/assetIcons.tsx +++ b/apps/web/src/components/features/icons/assetIcons.tsx @@ -11,7 +11,6 @@ import { SquareChart, Table, } from '@/components/ui/icons'; -import type { iconProps } from '@/components/ui/icons/NucleoIconOutlined/iconProps'; import SquareChartPlus from '@/components/ui/icons/NucleoIconOutlined/square-chart-plus'; export const ASSET_ICONS = { diff --git a/apps/web/src/components/features/metrics/MetricChartCard/MetricChartCard.tsx b/apps/web/src/components/features/metrics/MetricChartCard/MetricChartCard.tsx index a3f1b9bcd..e3562063a 100644 --- a/apps/web/src/components/features/metrics/MetricChartCard/MetricChartCard.tsx +++ b/apps/web/src/components/features/metrics/MetricChartCard/MetricChartCard.tsx @@ -16,7 +16,6 @@ export type MetricChartCardProps = { metricId: string; versionNumber: number | undefined; readOnly?: boolean; - className?: string; attributes?: DraggableAttributes; listeners?: DraggableSyntheticListeners; headerSecondaryContent?: React.ReactNode; @@ -25,7 +24,7 @@ export type MetricChartCardProps = { renderChartContent?: boolean; // we do this to avoid expensive rendering if off screen disableTooltip?: boolean; cacheDataId?: string; -}; +} & React.HTMLAttributes; const stableMetricSelect = ({ chart_config, @@ -62,6 +61,7 @@ export const MetricChartCard = React.memo( renderChartContent = true, disableTooltip, cacheDataId, + ...rest }, ref ) => { @@ -102,6 +102,7 @@ export const MetricChartCard = React.memo( errorData={errorData} isTable={isTable} className={className} + {...rest} > ; const MetricViewChartCardContainer = React.forwardRef< HTMLDivElement, MetricViewChartCardContainerProps ->(({ children, loadingData, hasData, errorData, isTable, className }, ref) => { +>(({ children, loadingData, hasData, errorData, isTable, className, ...divProps }, ref) => { const cardClass = React.useMemo(() => { if (loadingData || errorData || !hasData) return 'h-full max-h-[600px]'; if (isTable) return 'h-full'; @@ -161,6 +161,7 @@ const MetricViewChartCardContainer = React.forwardRef<
) => { + e.stopPropagation(); + }); + return ( ) } + onCopy={handleCopy} /> ); } diff --git a/apps/web/src/styles/styles.css b/apps/web/src/styles/styles.css index a3e6769d1..3345b9523 100644 --- a/apps/web/src/styles/styles.css +++ b/apps/web/src/styles/styles.css @@ -56,5 +56,5 @@ th { strong, b { - @apply font-semibold + @apply font-semibold; } diff --git a/packages/server-shared/src/type-utilities/pagination.ts b/packages/server-shared/src/type-utilities/pagination.ts index 7f858d510..806fecfa1 100644 --- a/packages/server-shared/src/type-utilities/pagination.ts +++ b/packages/server-shared/src/type-utilities/pagination.ts @@ -18,6 +18,6 @@ export const PaginatedResponseSchema = (schema: z.ZodType) => export type PaginatedResponse = z.infer>>; export const PaginatedRequestSchema = z.object({ - page: z.coerce.number().min(1).optional().default(1).optional(), - page_size: z.coerce.number().min(1).max(5000).default(250).optional(), + page: z.coerce.number().min(1).optional().default(1), + page_size: z.coerce.number().min(1).max(5000).default(250), });