minor updates to headers

This commit is contained in:
Nate Kelley 2025-03-18 22:29:46 -06:00
parent c1a71faeb9
commit 0f3d4d46c0
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
19 changed files with 31 additions and 54 deletions

View File

@ -23,14 +23,12 @@ export const dashboardsGetDashboard = async ({ id, password }: DashboardSubscrib
};
export const dashboardsCreateDashboard = async (params: DashboardCreateRequest) => {
return await mainApi
.post<BusterDashboardResponse>('/dashboards', { params })
.then((res) => res.data);
return await mainApi.post<BusterDashboardResponse>('/dashboards', params).then((res) => res.data);
};
export const dashboardsUpdateDashboard = async (params: DashboardUpdateRequest) => {
return await mainApi
.put<BusterDashboardResponse>(`/dashboards/${params.id}`, { params })
.put<BusterDashboardResponse>(`/dashboards/${params.id}`, params)
.then((res) => res.data);
};

View File

@ -46,5 +46,5 @@ export const duplicateMetric = async (params: {
message_id: string;
share_with_same_people: boolean;
}) => {
return mainApi.post<BusterMetric>(`/metrics/duplicate`, { params }).then((res) => res.data);
return mainApi.post<BusterMetric>(`/metrics/duplicate`, params).then((res) => res.data);
};

View File

@ -35,7 +35,9 @@ export const DatasetsHeaderOptions: React.FC<{
if (datasetId) push(keyToRoute(datasetId, value.value));
});
return <AppSegmented options={options} value={selectedApp} onChange={onChangeSegment} />;
return (
<AppSegmented type="button" options={options} value={selectedApp} onChange={onChangeSegment} />
);
});
DatasetsHeaderOptions.displayName = 'DatasetsHeaderOptions';

View File

@ -14,7 +14,7 @@ export default async function EmbedLayout({ children }: { children: React.ReactN
<BusterReactQueryProvider>
<BusterAssetsProvider>
<BusterPosthogProvider>
<main className="bg-background flex min-h-screen w-full">
<main className="bg-background flex min-h-screen w-full flex-col">
<div className="max-h-screen flex-1 overflow-hidden">{children}</div>
</main>
</BusterPosthogProvider>

View File

@ -123,7 +123,7 @@ export const ShareMenuContentPublish: React.FC<{
return (
<div className="">
<div className="space-y-3 pb-3">
<div className="space-y-3">
{publicly_accessible ? (
<>
<IsPublishedInfo isPublished={publicly_accessible} />

View File

@ -35,7 +35,7 @@ const AvatarFallback = React.forwardRef<
<AvatarPrimitive.Fallback
ref={ref}
className={cn(
'bg-gray-light/60 text-background flex h-full w-full items-center justify-center rounded-full text-xs leading-0',
'bg-gray-light/60 text-background text-2xs flex h-full w-full items-center justify-center rounded-full leading-0',
className
)}
{...props}

View File

@ -5,15 +5,15 @@ import { Minus, Check } from '../icons';
import { cva, type VariantProps } from 'class-variance-authority';
const checkboxVariants = cva(
'peer relative h-4 w-4 shrink-0 rounded-sm border focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed',
'peer relative h-4 w-4 shrink-0 rounded-sm border focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed',
{
variants: {
variant: {
default:
' ring-offset-background focus-visible:ring-ring data-[state=unchecked]:border-gray-light data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:disabled:bg-primary data-[state=checked]:text-background hover:bg-gray-light/20'
' data-[state=unchecked]:border-border data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:disabled:bg-primary data-[state=checked]:text-background hover:bg-gray-light/20'
},
size: {
default: 'h-4 w-4 text-[10px]',
default: 'h-3.5 w-3.5 text-[10px]',
sm: 'h-3 w-3 text-[8px]',
lg: 'h-5 w-5 text-base'
},

View File

@ -22,7 +22,7 @@ export const ListEmptyStateWithButton: React.FC<{
marginTop: '25vh'
}}>
<div className="flex w-[350px] flex-col justify-center space-y-3">
<Title as="h4" className="text-center [text-wrap:balance]">
<Title as="h4" className="leading-1.3 text-center [text-wrap:balance]">
{title}
</Title>

View File

@ -91,7 +91,7 @@ export const SidebarItem: React.FC<
})}>
{icon}
</span>
<span className="truncate">{label}</span>
<span className="leading-1.3 truncate">{label}</span>
</div>
{onRemove && (
<Button

View File

@ -85,7 +85,6 @@ export const ChatItemsContainer: React.FC<{
return date;
}
},
{ dataIndex: 'dataset_name', title: 'Dataset', width: 115 },
{
dataIndex: 'is_shared',
title: 'Sharing',

View File

@ -9,9 +9,8 @@ import { FavoriteStar } from '@/components/features/list/FavoriteStar';
import { ShareMenu } from '@/components/features/ShareMenu';
import { BusterCollection, ShareAssetType } from '@/api/asset_interfaces';
import { useMemoizedFn } from '@/hooks';
import { measureTextWidth } from '@/lib/canvas';
import { type BreadcrumbItem, Breadcrumb } from '@/components/ui/breadcrumb';
import { Dots, Pencil, Plus, ShareAllRight, Trash } from '@/components/ui/icons';
import { Dots, Pencil, Plus, ShareAllRight, ShareRight, Trash } from '@/components/ui/icons';
import { useDeleteCollection, useUpdateCollection } from '@/api/buster_rest/collections';
export const CollectionsIndividualHeader: React.FC<{
@ -21,14 +20,9 @@ export const CollectionsIndividualHeader: React.FC<{
isFetched: boolean;
}> = ({ openAddTypeModal, setOpenAddTypeModal, collection, isFetched }) => {
const { mutateAsync: updateCollection, isPending: isUpdatingCollection } = useUpdateCollection();
const [editingTitle, setEditingTitle] = React.useState(false);
const collectionTitle = collection?.name || 'No collection title';
const textWidth = useMemo(() => {
return measureTextWidth(collectionTitle);
}, [collectionTitle, editingTitle]);
const onSetTitleValue = useMemoizedFn((value: string) => {
updateCollection({
id: collection?.id!,
@ -37,13 +31,13 @@ export const CollectionsIndividualHeader: React.FC<{
});
return (
<div className="flex h-full w-full items-center justify-between space-x-3 overflow-hidden">
<div className="flex h-full items-center space-x-1 overflow-hidden">
<>
<div className="flex h-full items-center space-x-3 overflow-hidden">
<CollectionBreadcrumb collectionName={collectionTitle} />
{collection && (
<div className="flex items-center space-x-0">
<ThreeDotDropdown collection={collection} setEditingTitle={setEditingTitle} />
<div className="flex items-center space-x-3">
<ThreeDotDropdown collection={collection} />
<FavoriteStar
id={collection.id}
type={ShareAssetType.COLLECTION}
@ -60,7 +54,7 @@ export const CollectionsIndividualHeader: React.FC<{
setOpenAddTypeModal={setOpenAddTypeModal}
/>
)}
</div>
</>
);
};
@ -79,7 +73,7 @@ const ContentRight: React.FC<{
assetType={ShareAssetType.COLLECTION}
assetId={collection.id}
shareAssetConfig={collection}>
<Button variant="ghost" prefix={<ShareAllRight />} />
<Button variant="ghost" prefix={<ShareRight />} />
</ShareMenu>
<Button prefix={<Plus />} onClick={onButtonClick}>
Add to collection
@ -91,8 +85,7 @@ ContentRight.displayName = 'ContentRight';
const ThreeDotDropdown: React.FC<{
collection: BusterCollection;
setEditingTitle: (editing: boolean) => void;
}> = React.memo(({ collection, setEditingTitle }) => {
}> = React.memo(({ collection }) => {
const onChangePage = useAppLayoutContextSelector((s) => s.onChangePage);
const { mutateAsync: deleteCollection, isPending: isDeletingCollection } = useDeleteCollection();
@ -117,11 +110,11 @@ const ThreeDotDropdown: React.FC<{
label: 'Rename collection',
icon: <Pencil />,
onClick: () => {
setEditingTitle(true);
//
}
}
],
[collection.id, deleteCollection, onChangePage, setEditingTitle]
[collection.id, deleteCollection, onChangePage]
);
return (

View File

@ -46,9 +46,7 @@ const DashboardMetricItemBase: React.FC<{
if (metric.error) {
return metric.error;
}
if (metric.code === null && isMetricFetched) {
return 'No code was generated for this request';
}
return undefined;
}, [metric.error, metric.code]);

View File

@ -1,9 +1,7 @@
'use client';
import { useUserConfigContextSelector } from '@/context/Users';
import { DashboardViewProps } from '../config';
import React, { useState } from 'react';
import { ShareRole } from '@/api/asset_interfaces/share';
import { useMemoizedFn } from '@/hooks';
import { DashboardEditTitles } from './DashboardEditTitle';
import { DashboardContentController } from './DashboardContentController';
@ -17,23 +15,15 @@ export const DashboardViewDashboardController: React.FC<DashboardViewProps> = ({
dashboardId,
readOnly = false
}) => {
const isAnonymousUser = useUserConfigContextSelector((state) => state.isAnonymousUser);
const { data: dashboardResponse } = useGetDashboard(dashboardId);
const { mutateAsync: onUpdateDashboard } = useUpdateDashboard();
const { mutateAsync: onUpdateDashboardConfig } = useUpdateDashboardConfig();
const [openAddContentModal, setOpenAddContentModal] = useState(false);
const allowEdit =
!readOnly && dashboardResponse?.permission !== ShareRole.VIEWER && !isAnonymousUser;
const metrics = dashboardResponse?.metrics;
const dashboard = dashboardResponse?.dashboard;
const onOpenAddContentModal = useMemoizedFn(() => {
setOpenAddContentModal(true);
});
return (
<div className="flex flex-col space-y-3 overflow-y-auto p-10">
<div className="flex h-full flex-col space-y-3 overflow-y-auto p-10">
<DashboardEditTitles
onUpdateDashboard={onUpdateDashboard}
dashboardId={dashboardId}
@ -46,7 +36,7 @@ export const DashboardViewDashboardController: React.FC<DashboardViewProps> = ({
metrics={metrics}
dashboard={dashboard}
onUpdateDashboardConfig={onUpdateDashboardConfig}
onOpenAddContentModal={onOpenAddContentModal}
onOpenAddContentModal={() => {}}
readOnly={readOnly}
/>
</div>

View File

@ -91,6 +91,7 @@ const DatasetFilters: React.FC<{
<AppSegmented
options={options}
value={datasetFilter}
type="button"
onChange={(value) => {
setDatasetFilter(value.value);
}}

View File

@ -162,7 +162,7 @@ export const useMetricRunSQL = () => {
await saveMetric({
id: metricId,
sql: sql,
sql,
save_draft: true
});

View File

@ -82,7 +82,6 @@ export const MetricItemsContainer: React.FC<{
return date;
}
},
{ dataIndex: 'dataset_name', title: 'Dataset', width: 115 },
{
dataIndex: 'is_shared',
title: 'Sharing',

View File

@ -9,12 +9,12 @@ import { useGetMetricsList } from '@/api/buster_rest/metrics';
export const MetricListContainer: React.FC<{}> = ({}) => {
const [filters, setFilters] = useState<VerificationStatus[]>([]);
const { data: metricList, isFetching, isFetched } = useGetMetricsList({ status: filters });
const { data: metricList, isFetched } = useGetMetricsList({ status: filters });
return (
<AppPageLayout header={<MetricListHeader filters={filters} onSetFilters={setFilters} />}>
<MetricItemsContainer
metrics={metricList || []}
metrics={metricList}
loading={!isFetched}
className="flex-col overflow-hidden"
/>

View File

@ -81,7 +81,5 @@ export const cspPolicyMiddleware = (request: NextRequest) => {
request.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
request.headers.set('frame-ancestors', '*');
console.log('request.headers', isEmbedRoute ? 'embed' : 'default', request.headers);
return request;
};

View File

@ -7,7 +7,6 @@
}
.scroll-shadow-container {
position: relative;
@apply relative;
.scroll-header {