import React, { useState } from 'react'; import { EventField as EventFieldType, SchemaFieldProps, VevContentEvent } from '@vev/utils'; import { SilkeBox } from '../../silke-box'; import { SilkeTextSmall } from '../../silke-text'; import { SilkeAlertBanner } from '../../silke-alert-banner'; import { SilkeTag } from '../../silke-tag'; import { SilkeIcon } from '../../silke-icon'; import ObjectField from './object-field'; const headerStyle = { cursor: 'pointer', fontWeight: '600', alignItems: 'center', }; const EventField = ({ value = [], onChange, context, disabled, readonly, }: SchemaFieldProps) => { const [toggle, setToggle] = useState(false); const pageEvents = context.events?.filter((event) => event.page === context.currentPage?.key); const otherEvents = context.events?.filter( (event) => event.page !== context.currentPage?.key || !event.page, ); const renderEvents = (events: VevContentEvent[]) => { const grouped = events.reduce( (res, curr) => { const { key } = curr.content; if (!res[key]) res[key] = []; res[key].push(curr); return res; }, {} as { [key: string]: VevContentEvent[] }, ); return Object.keys(grouped).map((key, i) => { const name = events.find((e) => e.content.key === key)?.content?.name; return ( {name} {grouped[key].map((event, i) => { const curr = `${event.content.key}:${event.type}`; return ( e.key === curr) ? 'green' : 'dark'} onClick={() => { if (value.find((e) => e.key === curr)) { return onChange(value.filter((v) => v.key !== curr)); } onChange([...value, { key: curr }]); }} > {event.description} {value.find((v) => v.key === curr) && event.args && ( v.key === curr)?.args} onChange={(val) => { const currIndex = value.map((v) => v.key).indexOf(curr); value[currIndex] = { key: curr, args: val, }; currIndex >= 0 && onChange(value); }} label="Arguments" context={context} /> )} ); })} ); }); }; return ( {pageEvents?.length ? ( Events on current page {renderEvents(pageEvents)} {otherEvents?.length && ( setToggle(!toggle)} style={headerStyle}> Events on other pages{' '} {toggle && renderEvents(otherEvents)} )} ) : ( )} ); }; export default EventField;