mirror of https://github.com/buster-so/buster.git
import pngs
This commit is contained in:
parent
8c7f9bdfe1
commit
2d6e243d93
Binary file not shown.
Before Width: | Height: | Size: 940 B After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
@ -25,6 +25,7 @@ export const GlobalSearchModalBase = ({
|
||||||
onChangeValue={onChangeValue}
|
onChangeValue={onChangeValue}
|
||||||
onSelect={onSelect}
|
onSelect={onSelect}
|
||||||
onViewSearchItem={onViewSearchItem}
|
onViewSearchItem={onViewSearchItem}
|
||||||
|
placeholder="Search..."
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
import type { SearchTextData } from '@buster/server-shared/search';
|
||||||
|
import { faker } from '@faker-js/faker';
|
||||||
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||||
|
import { GlobalSearchSecondaryContent } from './GlobalSearchSecondaryContent';
|
||||||
|
|
||||||
|
const meta: Meta<typeof GlobalSearchSecondaryContent> = {
|
||||||
|
title: 'Features/Search/GlobalSearchSecondaryContent',
|
||||||
|
component: GlobalSearchSecondaryContent,
|
||||||
|
parameters: {
|
||||||
|
layout: 'centered',
|
||||||
|
},
|
||||||
|
tags: ['autodocs'],
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof meta>;
|
||||||
|
|
||||||
|
const mockSearchTextData: SearchTextData = {
|
||||||
|
assetId: '123e4567-e89b-12d3-a456-426614174000',
|
||||||
|
assetType: 'chat',
|
||||||
|
title: 'Revenue Analysis Q4 2024',
|
||||||
|
additionalText: 'This is a comprehensive analysis of Q4 revenue trends',
|
||||||
|
updatedAt: new Date().toISOString(),
|
||||||
|
screenshotBucketKey: 'screenshots/mock-screenshot.png',
|
||||||
|
screenshotUrl: faker.image.url({
|
||||||
|
width: 1024,
|
||||||
|
height: 1024,
|
||||||
|
}),
|
||||||
|
ancestors: {
|
||||||
|
chats: [
|
||||||
|
{
|
||||||
|
id: '456e7890-e89b-12d3-a456-426614174001',
|
||||||
|
title: 'Parent Chat',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
dashboards: [
|
||||||
|
{
|
||||||
|
id: '789e0123-e89b-12d3-a456-426614174002',
|
||||||
|
title: 'Executive Dashboard',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
reports: [],
|
||||||
|
collections: [],
|
||||||
|
},
|
||||||
|
createdBy: {
|
||||||
|
id: 'abc123',
|
||||||
|
name: 'John Doe',
|
||||||
|
email: 'john.doe@example.com',
|
||||||
|
avatarUrl: faker.image.url({
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Default: Story = {
|
||||||
|
args: {
|
||||||
|
selectedItem: mockSearchTextData,
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,5 +1,9 @@
|
||||||
import type { SearchTextData } from '@buster/server-shared/search';
|
import type { SearchTextData } from '@buster/server-shared/search';
|
||||||
import type React from 'react';
|
import type React from 'react';
|
||||||
|
import SkeletonSearchChat from '@/assets/png/skeleton-search-chat.png';
|
||||||
|
import SkeletonSearchDashboard from '@/assets/png/skeleton-search-dashboard.png';
|
||||||
|
import SkeletonSearchMetric from '@/assets/png/skeleton-search-metric.png';
|
||||||
|
import SkeletonSearchReport from '@/assets/png/skeleton-search-report.png';
|
||||||
|
|
||||||
export type GlobalSearchSecondaryContentProps = {
|
export type GlobalSearchSecondaryContentProps = {
|
||||||
selectedItem: SearchTextData;
|
selectedItem: SearchTextData;
|
||||||
|
@ -8,6 +12,52 @@ export type GlobalSearchSecondaryContentProps = {
|
||||||
export const GlobalSearchSecondaryContent: React.FC<GlobalSearchSecondaryContentProps> = ({
|
export const GlobalSearchSecondaryContent: React.FC<GlobalSearchSecondaryContentProps> = ({
|
||||||
selectedItem,
|
selectedItem,
|
||||||
}) => {
|
}) => {
|
||||||
const { assetId, assetType, title, ancestors, updatedAt, screenshotBucketKey } = selectedItem;
|
const {
|
||||||
return <div>GlobalSearchSecondaryContent</div>;
|
assetId,
|
||||||
|
assetType,
|
||||||
|
title,
|
||||||
|
ancestors,
|
||||||
|
updatedAt,
|
||||||
|
screenshotBucketKey,
|
||||||
|
screenshotUrl,
|
||||||
|
createdBy,
|
||||||
|
} = selectedItem;
|
||||||
|
console.log(selectedItem);
|
||||||
|
return (
|
||||||
|
<div className="p-3 min-w-[420px] min-h-[420px]">
|
||||||
|
<ScreenshotImage screenshotUrl={screenshotUrl} assetType={assetType} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const ScreenshotImage = ({
|
||||||
|
screenshotUrl,
|
||||||
|
assetType,
|
||||||
|
}: {
|
||||||
|
screenshotUrl: string | null | undefined;
|
||||||
|
assetType: SearchTextData['assetType'];
|
||||||
|
}) => {
|
||||||
|
let imageUrl = screenshotUrl;
|
||||||
|
if (!imageUrl) {
|
||||||
|
if (assetType === 'chat') {
|
||||||
|
imageUrl = SkeletonSearchChat;
|
||||||
|
} else if (assetType === 'metric_file') {
|
||||||
|
imageUrl = SkeletonSearchMetric;
|
||||||
|
} else if (assetType === 'dashboard_file') {
|
||||||
|
imageUrl = SkeletonSearchDashboard;
|
||||||
|
} else if (assetType === 'report_file') {
|
||||||
|
imageUrl = SkeletonSearchReport;
|
||||||
|
} else if (assetType === 'collection') {
|
||||||
|
imageUrl = SkeletonSearchMetric;
|
||||||
|
} else {
|
||||||
|
const _exhaustiveCheck: never = assetType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<img
|
||||||
|
src={screenshotUrl || SkeletonSearchMetric}
|
||||||
|
alt="Screenshot"
|
||||||
|
className="w-full h-full object-cover"
|
||||||
|
/>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {
|
||||||
TextSearchResultSchema,
|
TextSearchResultSchema,
|
||||||
} from '@buster/database/schema-types';
|
} from '@buster/database/schema-types';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
import { UserInfoResponseSchema } from '../access-controls';
|
||||||
import { AssetTypeSchema } from '../assets';
|
import { AssetTypeSchema } from '../assets';
|
||||||
import {
|
import {
|
||||||
PaginatedRequestSchema,
|
PaginatedRequestSchema,
|
||||||
|
@ -50,6 +51,7 @@ export const SearchTextRequestSchema = z
|
||||||
export const SearchTextDataSchema = TextSearchResultSchema.extend({
|
export const SearchTextDataSchema = TextSearchResultSchema.extend({
|
||||||
ancestors: AssetAncestorsSchema.optional(),
|
ancestors: AssetAncestorsSchema.optional(),
|
||||||
screenshotUrl: z.string().optional(),
|
screenshotUrl: z.string().optional(),
|
||||||
|
createdBy: UserInfoResponseSchema.optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type { AssetAncestors } from '@buster/database/schema-types';
|
export type { AssetAncestors } from '@buster/database/schema-types';
|
||||||
|
|
Loading…
Reference in New Issue