type Coordinates = { x: number | null; y: number | null; }; type CreatePolylineType = ( ( penCoordinates: Coordinates, color: string, opacity: number, strokeWidth: number, ) => SVGPolylineElement ); type CompletePathType = ( (pathElement: SVGPolylineElement | null, penCoordinates: Coordinates) => void ); export const createPolyline: CreatePolylineType = (penCoordinates, color, opacity, strokeWidth) => { const path = document.createElementNS('http://www.w3.org/2000/svg', 'polyline'); path.setAttribute('fill', 'none'); path.setAttribute('stroke', color); path.setAttribute('stroke-width', strokeWidth.toString()); path.setAttribute('stroke-opacity', (opacity * 0.01).toString()); path.setAttribute('points', `${penCoordinates.x},${penCoordinates.y}`); return path; }; export const completePath: CompletePathType = (pathElement, penCoordinates) => { if (pathElement && penCoordinates.x) { let points = pathElement.getAttribute('points') || ''; points += ` ${penCoordinates.x},${penCoordinates.y}`; pathElement.setAttribute('points', points); } };