nicecode-v2/packages/biz/src/adapter/BigImageModalAdapter/index.tsx
2024-01-17 19:25:13 +08:00

141 lines
3.8 KiB
TypeScript

/**
* 适配老的大屏组件数据格式传入
*/
import React from 'react';
import { AlgorithmVersionStr, HumanProperty, ObjectType, Rect, IScreenshotButtonProp } from '@zhst/types'
import { VideoViewProps, ImgViewProps, VideoViewRef, ImgViewRef } from '@zhst/meta'
export type TAB_TYPE = 'COMPATER' | 'NORMAL' | 'TRACK';
export type MODEL_TYPE = 'VIDEO' | 'IMAGE';
export interface CarouselProps {
hasPre?: boolean;
hasNext?: boolean;
selectIndex: number;
setSelectIndex: React.Dispatch<React.SetStateAction<number>>;
dataSource: Array<{
key: string;
url: string;
}>;
}
export type ISelectItem = Partial<Omit<ImgViewProps, 'screenshotButtonRender'>> &
Partial<Omit<VideoViewProps, 'screenshotButtonRender'>>;
export interface HeaderProps {
value: TAB_TYPE;
onChange: (type: TAB_TYPE) => void;
tabsFilter: TAB_TYPE[];
}
export interface ParamProps {
tab: string;
selectItem: ISelectItem;
imgViewRef: React.MutableRefObject<ImgViewRef>;
VideoViewRef: React.MutableRefObject<VideoViewRef>;
model: MODEL_TYPE;
setModel: React.Dispatch<React.SetStateAction<MODEL_TYPE>>;
/* 可观测值 */
scale$: number;
showCrop$: boolean;
}
export interface BigImageData {
//imageKey 小图
extendRectList: (Rect & { algorithmVersion: AlgorithmVersionStr; imageKey: string })[];
rectList: (Rect & { algorithmVersion: AlgorithmVersionStr; imageKey: string })[];
attachImg: { url: string; label: '形体' | '人脸' }[];
odRect: Rect;
imageKey: string; //大图
imgSummary: string; //摘要图
objectExtImageKey: string; //比对到的目标图扩展图 === imgSummary
attributeList: { label: string; list: any[] }[];
archiveImages?: any;
spaceName: string;
objectType: ObjectType;
objectId: string; //这张摘要本身的Id
bodyObjectId?: string;
faceObjectId?: string; //这张摘要下的人脸Id(如果有)
sourceObjectId?: string; //这张摘要上游的形体Id(如果有)
cameraId: string;
cameraName: string;
selectIndex: number;
humanProperty: HumanProperty;
qualityScore?: number; //人脸质量分
score: number; //相似度
timestamp: string;
bodyImageUrl: string;
faceImageUrl: string;
algorithmVersion: AlgorithmVersionStr;
bodySpaceName: string;
faceSpaceName: string;
solutionId?: string;
[index: string]: any;
}
interface IOldImageData {
visible?: boolean;
defaultModel?: MODEL_TYPE;
onClose?: () => void;
isLoading?: boolean;
hasPre?: boolean;
hasNext?: boolean;
selectIndex?: number;
onSelectIndexChange?: (i: number) => void;
dataSource: BigImageData[];
dataSources: BigImageData[];
relatedData?: BigImageData[];
transformPropFunc: (item: any) => ISelectItem;
transformVideoPropFunc: (
item: ISelectItem
) => Promise<Omit<VideoViewProps, 'screenshotButtonRender'>>;
screenshotButtonRender?: (screenshotButtonProp: IScreenshotButtonProp) => React.ReactElement;
showTool?: boolean;
showCarousel?: boolean;
imgViewProp?: Partial<ImgViewProps>;
videoViewProp?: Partial<VideoViewProps>;
ToolProps?: Partial<ToolProps>;
nullDialogProp?: {
emptyText?: string;
};
showHeader?: boolean;
tabsFilter?: TAB_TYPE[];
useVirtual?: boolean;
loadNext?: (i: number) => Promise<void>;
loadPre?: (i: number) => Promise<void>;
children: React.ReactNode;
title?: string;
specialTitle?: string;
isRelated?: boolean;
carouselProp?: Partial<CarouselProps>;
}
export interface ToolProps {
renderRight?: (props: ParamProps) => React.ReactNode;
renderLeft?: (props: ParamProps) => React.ReactNode;
renderVideoBtn?: boolean;
param: ParamProps;
disableVideo: boolean;
}
export interface ImageModalDataProps {
targetData: []
compactData: []
}
const adapter = (data: IOldImageData): ImageModalDataProps => {
return {
targetData: [],
compactData: [],
}
}
export default adapter