import { useMemo } from 'react' import { ActionEncodeContext, ActionKeyAndDataNoId, UnifiedCosmosMsg, } from '@dao-dao/types' import { decodeMessages, decodeRawDataForDisplay } from '@dao-dao/utils' import { useActionsEncoder } from '../../contexts/ActionsEncoder' import { ActionsEncoderProvider } from '../../providers/ActionsEncoder' import { ErrorPage } from '../error' import { RawJsonDisplay, RawJsonDisplayProps } from '../RawJsonDisplay' export type RawActionsRendererProps = | { /** * This likely comes from a form field array that holds the action data. */ actionKeysAndData: ActionKeyAndDataNoId[] /** * Encode context. */ encodeContext: ActionEncodeContext /** * Existing messages to display. */ messages?: never } | { /** * Existing messages to display. */ messages: UnifiedCosmosMsg[] /** * This likely comes from a form field array that holds the action data. */ actionKeysAndData?: never /** * Encode context. */ encodeContext?: never } export const RawActionsRenderer = (props: RawActionsRendererProps) => props.actionKeysAndData ? ( ) : ( ) const RawActionsRendererEncoder = () => { const encoder = useActionsEncoder() return ( <> {encoder.errored ? ( ) : encoder.ready ? ( ) : ( )} ) } export const RawActionsRendererMessages = ({ messages, ...props }: { messages: any[] } & Omit) => { const value = useMemo(() => { const decoded = decodeMessages(messages).map(decodeRawDataForDisplay) return JSON.stringify(decoded.length === 1 ? decoded[0] : decoded, null, 2) }, [messages]) return }