mirror of https://github.com/buster-so/buster.git
minor updates to headers
This commit is contained in:
parent
c1a71faeb9
commit
0f3d4d46c0
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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} />
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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'
|
||||
},
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -85,7 +85,6 @@ export const ChatItemsContainer: React.FC<{
|
|||
return date;
|
||||
}
|
||||
},
|
||||
{ dataIndex: 'dataset_name', title: 'Dataset', width: 115 },
|
||||
{
|
||||
dataIndex: 'is_shared',
|
||||
title: 'Sharing',
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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]);
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -91,6 +91,7 @@ const DatasetFilters: React.FC<{
|
|||
<AppSegmented
|
||||
options={options}
|
||||
value={datasetFilter}
|
||||
type="button"
|
||||
onChange={(value) => {
|
||||
setDatasetFilter(value.value);
|
||||
}}
|
||||
|
|
|
@ -162,7 +162,7 @@ export const useMetricRunSQL = () => {
|
|||
|
||||
await saveMetric({
|
||||
id: metricId,
|
||||
sql: sql,
|
||||
sql,
|
||||
save_draft: true
|
||||
});
|
||||
|
||||
|
|
|
@ -82,7 +82,6 @@ export const MetricItemsContainer: React.FC<{
|
|||
return date;
|
||||
}
|
||||
},
|
||||
{ dataIndex: 'dataset_name', title: 'Dataset', width: 115 },
|
||||
{
|
||||
dataIndex: 'is_shared',
|
||||
title: 'Sharing',
|
||||
|
|
|
@ -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"
|
||||
/>
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
}
|
||||
|
||||
.scroll-shadow-container {
|
||||
position: relative;
|
||||
@apply relative;
|
||||
|
||||
.scroll-header {
|
||||
|
|
Loading…
Reference in New Issue