import { applySwitcheroo } from '../designApplication'; import { ColorSet } from '../dataModels'; import { ComponentBase, ComponentState } from './componentBase'; export type ProgressCircleState = ComponentState & { _type_: 'ProgressCircle-builtin'; progress?: number | null; color?: ColorSet; }; export class ProgressCircleComponent extends ComponentBase { state: Required; createElement(): HTMLElement { let element = document.createElement('div'); element.innerHTML = ` `; element.classList.add('rio-progress-circle'); return element; } updateElement( deltaState: ProgressCircleState, latentComponents: Set ): void { super.updateElement(deltaState, latentComponents); // Apply the progress if (deltaState.progress !== undefined) { if (deltaState.progress === null) { this.element.classList.add('spinning'); } else { this.element.classList.remove('spinning'); let fullCircle = 40 * Math.PI; this.element.style.setProperty( '--dasharray', `${deltaState.progress * fullCircle}, ${ (1 - deltaState.progress) * fullCircle }` ); } } // Apply the color if (deltaState.color !== undefined) { applySwitcheroo( this.element, deltaState.color === 'keep' ? 'bump' : deltaState.color ); } } }