import { Card } from "antd"; import { useEffect, useRef, useState } from "react"; import { IStudio } from "../auth/StudioName"; import type { IUser } from "../auth/User"; import { IChannel } from "../channel/Channel"; import { TContentType } from "../discussion/DiscussionCreate"; import { ITocPathNode } from "../corpus/TocPath"; import SentContent from "./SentEdit/SentContent"; import SentTab from "./SentEdit/SentTab"; import { IWbw } from "./Wbw/WbwWord"; import { ArticleMode } from "../article/Article"; import { TChannelType } from "../api/Channel"; import { useAppSelector } from "../../hooks"; import { currFocus } from "../../reducers/focus"; export interface IResNumber { translation?: number; nissaya?: number; commentary?: number; origin?: number; sim?: number; } export interface ISuggestionCount { suggestion?: number; discussion?: number; } export interface ISentence { id?: string; content: string | null; contentType?: TContentType; html: string; book: number; para: number; wordStart: number; wordEnd: number; editor: IUser; acceptor?: IUser; prEditAt?: string; channel: IChannel; studio?: IStudio; updateAt: string; createdAt?: string; suggestionCount?: ISuggestionCount; openInEditMode?: boolean; translationChannels?: string[]; } export interface ISentenceId { book: number; para: number; wordStart: number; wordEnd: number; } export interface IWidgetSentEditInner { id: string; book: number; para: number; wordStart: number; wordEnd: number; channels?: string[]; origin?: ISentence[]; translation?: ISentence[]; path?: ITocPathNode[]; layout?: "row" | "column"; tranNum?: number; nissayaNum?: number; commNum?: number; originNum: number; simNum?: number; compact?: boolean; mode?: ArticleMode; wbwProgress?: boolean; } export const SentEditInner = ({ id, book, para, wordStart, wordEnd, channels, origin, translation, path, layout = "column", tranNum, nissayaNum, commNum, originNum, simNum, compact = false, mode, wbwProgress = false, }: IWidgetSentEditInner) => { const [wbwData, setWbwData] = useState(); const [magicDict, setMagicDict] = useState(); const [magicDictLoading, setMagicDictLoading] = useState(false); const [isCompact, setIsCompact] = useState(compact); const [articleMode, setArticleMode] = useState(mode); const [loadedRes, setLoadedRes] = useState(); const [isFocus, setIsFocus] = useState(false); const focus = useAppSelector(currFocus); const divRef = useRef(null); useEffect(() => { if (focus) { if (focus.focus?.type === "sentence") { if (focus.focus.id === id) { setIsFocus(true); divRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest", }); } else { setIsFocus(false); } } } else { setIsFocus(false); } }, [focus, id]); useEffect(() => { const validRes = (value: ISentence, type: TChannelType) => value.channel.type === type && value.content && value.content.trim().length > 0; if (translation) { const res = { translation: translation.filter((value) => validRes(value, "translation") ).length, nissaya: translation.filter((value) => validRes(value, "nissaya")) .length, commentary: translation.filter((value) => validRes(value, "commentary")) .length, }; setLoadedRes(res); } }, [translation]); useEffect(() => { const content = origin?.find( (value) => value.contentType === "json" )?.content; if (content) { setWbwData(JSON.parse(content)); } }, []); const channelsId = translation?.map((item) => item.channel.id); return ( { setWbwData(data); }} onMagicDictDone={() => { setMagicDictLoading(false); setMagicDict(undefined); }} /> { setMagicDict(type); setMagicDictLoading(true); }} onCompact={(value: boolean) => setIsCompact(value)} onModeChange={(value: ArticleMode | undefined) => setArticleMode(value)} /> ); }; interface IWidgetSentEdit { props: string; } const Widget = ({ props }: IWidgetSentEdit) => { const prop = JSON.parse(atob(props)) as IWidgetSentEditInner; //console.log("sent data", prop); return ; }; export default Widget;