// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import React, { useEffect, useState } from 'react'; import { Breakpoints } from '.'; import { ReactWidget } from '@jupyterlab/apputils'; import { ArrayExt } from '@phosphor/algorithm'; import { ISignal } from '@phosphor/signaling'; export class Body extends ReactWidget { constructor(model: Breakpoints.Model) { super(); this.model = model; this.addClass('jp-DebuggerBreakpoints-body'); } render() { return ; } readonly model: Breakpoints.Model; } const BreakpointsComponent = ({ model }: { model: Breakpoints.Model }) => { const [breakpoints, setBreakpoints] = useState(model.breakpoints); useEffect(() => { const updateBreakpoints = ( _: Breakpoints.Model, updates: Breakpoints.IBreakpoint[] ) => { if (ArrayExt.shallowEqual(breakpoints, updates)) { return; } setBreakpoints(updates); }; model.breakpointsChanged.connect(updateBreakpoints); return () => { model.breakpointsChanged.disconnect(updateBreakpoints); }; }); return (
{breakpoints.map((breakpoint: Breakpoints.IBreakpoint) => ( ))}
); }; const BreakpointComponent = ({ breakpoint, breakpointChanged }: { breakpoint: Breakpoints.IBreakpoint; breakpointChanged: ISignal; }) => { const [active, setActive] = useState(breakpoint.active); breakpoint.active = active; const setBreakpointEnabled = (state: boolean) => { setActive(state); }; useEffect(() => { const updateBreakpoints = ( _: Breakpoints.Model, updates: Breakpoints.IBreakpoint ) => { setBreakpointEnabled(updates.active); }; breakpointChanged.connect(updateBreakpoints); return () => { breakpointChanged.disconnect(updateBreakpoints); }; }); return (
{ setBreakpointEnabled(!active); }} type="checkbox" checked={active} /> {breakpoint.source.name} : {breakpoint.line}
); };