import type { AtomToken, AtomUpdateEvent, TimelineEvent, TransactionOutcomeEvent, TransactionToken, } from "atom.io" import { stringifyJson } from "atom.io/foundations/json" import { discoverType, prettyJson } from "atom.io/introspection" import * as React from "react" /* eslint-disable no-console */ const AtomUpdateFC: React.FC<{ serialNumber: number atomUpdate: AtomUpdateEvent> }> = ({ atomUpdate }) => { return (
{ console.log(atomUpdate) }} onKeyUp={() => { console.log(atomUpdate) }} > {atomUpdate.token.key}: { prettyJson.diff( atomUpdate.update.oldValue, atomUpdate.update.newValue, ).summary }
) } const TransactionUpdateFC: React.FC<{ serialNumber: number transactionUpdate: TransactionOutcomeEvent> }> = ({ serialNumber, transactionUpdate }) => { return (

{serialNumber}

params: {transactionUpdate.params.map((param, index) => { return (
{ console.log(transactionUpdate) }} onKeyUp={() => { console.log(transactionUpdate) }} > {discoverType(param)}: {typeof param === `object` && param !== null && `type` in param && `target` in param ? JSON.stringify(param.type) : JSON.stringify(param)}
) })}
output: {discoverType(transactionUpdate.output)} {transactionUpdate.output ? ( : {JSON.stringify(transactionUpdate.output)} ) : null}
impact: {transactionUpdate.subEvents .filter( (txSubEvent) => txSubEvent.type !== `molecule_creation` && txSubEvent.type !== `molecule_disposal` && txSubEvent.type !== `molecule_transfer` && txSubEvent.type !== `atom_creation` && txSubEvent.type !== `atom_disposal` && !txSubEvent.token.key.startsWith(`👁‍🗨`), ) .map((update, index) => { switch (update.type) { case `atom_update`: return ( ) case `transaction_outcome`: return ( ) case `molecule_creation`: case `molecule_disposal`: case `molecule_transfer`: case `atom_creation`: case `atom_disposal`: return null } })}
) } export const TimelineUpdateFC: React.FC<{ timelineUpdate: TimelineEvent serialNumber: number }> = ({ timelineUpdate, serialNumber }) => { return timelineUpdate.type === `atom_update` || timelineUpdate.type === `selector_update` || timelineUpdate.type === `transaction_outcome` ? (

{timelineUpdate.timestamp}: {timelineUpdate.type} ( {timelineUpdate.token.key})

{timelineUpdate.type === `transaction_outcome` ? ( timelineUpdate.subEvents .filter( (subEvent) => subEvent.type !== `molecule_creation` && subEvent.type !== `molecule_disposal` && subEvent.type !== `molecule_transfer` && subEvent.type !== `atom_creation` && subEvent.type !== `atom_disposal` && !subEvent.token.key.startsWith(`👁‍🗨`), ) .map((subEvent, index) => { switch (subEvent.type) { case `atom_update`: return ( ) case `transaction_outcome`: return ( ) case `molecule_creation`: case `molecule_disposal`: case `molecule_transfer`: case `atom_creation`: case `atom_disposal`: return null } }) ) : timelineUpdate.type === `selector_update` ? ( timelineUpdate.subEvents .filter( (atomUpdateEvent) => !atomUpdateEvent.token.key.startsWith(`👁‍🗨`), ) .map((event, index) => { switch (event.type) { case `atom_update`: return ( ) case `atom_creation`: return null } }) ) : timelineUpdate.type === `atom_update` ? ( ) : null}
) : null } export const article: { AtomUpdate: typeof AtomUpdateFC TransactionUpdate: typeof TransactionUpdateFC TimelineUpdate: typeof TimelineUpdateFC } = { AtomUpdate: AtomUpdateFC, TransactionUpdate: TransactionUpdateFC, TimelineUpdate: TimelineUpdateFC, }