import { FieldSchema, StructureSchema } from '@ephox/boulder'; import { Throttler } from '@ephox/katamari'; import type { AlloyComponent } from '../../api/component/ComponentApi'; import * as Fields from '../../data/Fields'; import type { EventFormat, SimulatedEvent } from '../../events/SimulatedEvent'; import * as StreamingState from './StreamingState'; import type { StreamingConfig, StreamingState as StreamingStateType, ThrottleStreamingConfig } from './StreamingTypes'; const setup = (streamInfo: StreamingConfig, streamState: StreamingStateType) => { const sInfo = streamInfo.stream as ThrottleStreamingConfig; const throttler = Throttler.last(streamInfo.onStream, sInfo.delay); streamState.setTimer(throttler); return (component: AlloyComponent, simulatedEvent: SimulatedEvent) => { throttler.throttle(component, simulatedEvent); if (sInfo.stopEvent) { simulatedEvent.stop(); } }; }; export default [ FieldSchema.requiredOf('stream', StructureSchema.choose( 'mode', { throttle: [ FieldSchema.required('delay'), FieldSchema.defaulted('stopEvent', true), Fields.output('streams', { setup, state: StreamingState.throttle }) ] } )), FieldSchema.defaulted('event', 'input'), FieldSchema.option('cancelEvent'), Fields.onStrictHandler('onStream') ];