import * as React from 'react';
import { useContext, useMemo, CSSProperties, FunctionComponent } from 'react';
import { EditorViewContext } from '../../contexts/EditorViewContext';
import { LayoutInfoContext } from '../../contexts/LayoutInfoContext';
import { px } from '../../utilities';
import { WritingMode } from '../../config/writingMode';
import { LineNumber } from './components/LineNumber';
import './LineNumbers.css';
// type LineNumberProps = {
// lineNumber?: number;
// top: string;
// decorations: ViewModelDecoration[];
// right: string;
// width: number;
// };
// function LineNumber(props: LineNumberProps) {
// const { top, lineNumber, right, width } = props;
// const style: CSSProperties = {
// position: 'absolute',
// top,
// right,
// width: px(width),
// textAlign: 'right',
// };
// return
{lineNumber}
;
// }
type LineNumbersProps = {
// renderingContext: RenderingContext;
};
export const LineNumbers: FunctionComponent = (props) => {
const { renderingContext: ctx, writingMode } = useContext(EditorViewContext);
const { layoutInfo } = useContext(LayoutInfoContext);
const lineNumbersWidth = useMemo(() => {
return layoutInfo.lineNumbersWidth;
}, [layoutInfo]);
const decorationsWidth = useMemo(() => {
return layoutInfo.decorationsWidth;
}, [layoutInfo]);
const result = useMemo(() => {
const lineNumbers: JSX.Element[] = [];
if (!ctx) {
return [];
}
const { viewportData } = ctx;
const { startLineNumber, endLineNumber, relativeVerticalOffset } =
viewportData;
const decorations = ctx.getDecorationsInViewport();
for (
let lineNumber = startLineNumber;
lineNumber <= endLineNumber;
++lineNumber
) {
// const lineIndex = lineNumber - visibleStartLineNumber;
const lineIndex = lineNumber - startLineNumber;
const modelPosition =
viewportData.convertViewPositionToModelPosition(lineNumber);
const modelLineNumber =
modelPosition.column !== 1 ? undefined : modelPosition.lineNumber;
const lineNumberDecorations = decorations.filter(
(value) =>
value.options.isWholeLine &&
value.range.startLineNumber === lineNumber
);
lineNumbers.push(
);
}
return lineNumbers;
}, [ctx]);
return <>{result}>;
};