/* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React, { useContext, useMemo, useState } from "react"; import { IContent, MatrixEvent } from "matrix-js-sdk/src/matrix"; import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool"; import MatrixClientContext from "../../../../contexts/MatrixClientContext"; import { EventEditor, EventViewer, eventTypeField, IEditorProps, stringify } from "./Event"; import FilteredList from "./FilteredList"; import { _td, TranslationKey } from "../../../../languageHandler"; export const AccountDataEventEditor: React.FC = ({ mxEvent, onBack }) => { const cli = useContext(MatrixClientContext); const fields = useMemo(() => [eventTypeField(mxEvent?.getType())], [mxEvent]); const onSend = async ([eventType]: string[], content?: IContent): Promise => { await cli.setAccountData(eventType, content || {}); }; const defaultContent = mxEvent ? stringify(mxEvent.getContent()) : undefined; return ; }; export const RoomAccountDataEventEditor: React.FC = ({ mxEvent, onBack }) => { const context = useContext(DevtoolsContext); const cli = useContext(MatrixClientContext); const fields = useMemo(() => [eventTypeField(mxEvent?.getType())], [mxEvent]); const onSend = async ([eventType]: string[], content?: IContent): Promise => { await cli.setRoomAccountData(context.room.roomId, eventType, content || {}); }; const defaultContent = mxEvent ? stringify(mxEvent.getContent()) : undefined; return ; }; interface IProps extends IDevtoolsProps { events: Map; Editor: React.FC; actionLabel: TranslationKey; } const BaseAccountDataExplorer: React.FC = ({ events, Editor, actionLabel, onBack, setTool }) => { const [query, setQuery] = useState(""); const [event, setEvent] = useState(null); if (event) { const onBack = (): void => { setEvent(null); }; return ; } const onAction = async (): Promise => { setTool(actionLabel, Editor); }; return ( {Array.from(events.entries()).map(([eventType, ev]) => { const onClick = (): void => { setEvent(ev); }; return ( ); })} ); }; export const AccountDataExplorer: React.FC = ({ onBack, setTool }) => { const cli = useContext(MatrixClientContext); return ( ); }; export const RoomAccountDataExplorer: React.FC = ({ onBack, setTool }) => { const context = useContext(DevtoolsContext); return ( ); };