import { DetailedHTMLProps, InputHTMLAttributes } from 'react'; import { DIALOGS } from '~/redux/modal/constants'; export interface ITag { title: string; feature?: 'red' | 'blue' | 'green' | 'olive' | 'black'; } export type IInputTextProps = DetailedHTMLProps< InputHTMLAttributes, HTMLInputElement > & { wrapperClassName?: string; handler?: (value: string) => void; required?: boolean; title?: string; error?: string; can_negative?: boolean; status?: string; maskChar?: string; mask?: string; onRef?: (ref: any) => void; is_loading?: boolean; }; export type IIcon = string; export type ValueOf = T[keyof T]; export interface IDialogProps { onRequestClose: () => void; onDialogChange: (dialog: ValueOf) => void; } export interface IApiErrorResult { detail?: string; code?: string; } export interface IResultWithStatus { status: any; data?: Partial & IApiErrorResult; error?: string; debug?: string; } export type UUID = string; export type IUploadType = 'image' | 'text' | 'audio' | 'video' | 'other'; export interface IFile { id?: UUID; temp_id?: UUID; user_id?: UUID; node_id?: UUID; name: string; path: string; full_path: string; url: string; size: number; type: IUploadType; mime: string; createdAt?: string; updatedAt?: string; } export interface IFileWithUUID { temp_id?: UUID; file: File; subject?: string; target: string; type: string; } export interface IBlock { type: 'image' | 'text' | 'media' | 'youtube' | 'video'; files: UUID[]; content: string; embeds: string[]; } export interface INode { id?: UUID; user_id: UUID; title: string; files: IFile[]; cover: IFile; type: string; blocks: IBlock[]; brief?: { thumbnail?: string; description?: string; owner?: string; comments?: number; }; options: { flow: { display: 'single' | 'double' | 'quadro'; show_description: boolean; }; }; createdAt?: string; updatedAt?: string; } export type IUploadProgressHandler = (progressEvent: any) => void;