// 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}
);
};