refactor(misc): Use hook version of completionMapping and sourceMapping everywhere

Also stopped exporting the mappings directly from respective files to enforce this
This commit is contained in:
2020-10-07 20:12:40 +05:30
parent 1741826d96
commit 7c5dc082e8
5 changed files with 14 additions and 14 deletions
+2 -3
View File
@@ -3,8 +3,7 @@ import React, { useState } from "react";
import { SourceViewer } from "./components/SourceViewer"; import { SourceViewer } from "./components/SourceViewer";
import { CompletionViewer } from "./components/CompletionViewer"; import { CompletionViewer } from "./components/CompletionViewer";
import { completionMapping } from "./logic/completionMapping"; import { useCompletionMapping } from "./logic/completionMapping";
import { sourceMapping } from "./logic/sourceMapping";
import { runEngine } from "./logic/runEngine"; import { runEngine } from "./logic/runEngine";
import "./tailwind.output.css"; import "./tailwind.output.css";
@@ -15,6 +14,7 @@ World!\`; abc()`;
function App() { function App() {
const [inputCode, setInputCode] = useState<string>(sampleInputCode); const [inputCode, setInputCode] = useState<string>(sampleInputCode);
const completionMapping = useCompletionMapping();
// useLayoutEffect(() => { // useLayoutEffect(() => {
runEngine(inputCode); runEngine(inputCode);
@@ -31,7 +31,6 @@ function App() {
<CompletionViewer <CompletionViewer
code={inputCode} code={inputCode}
completionDetails={completionMapping.completionDetails} completionDetails={completionMapping.completionDetails}
sourceMapping={sourceMapping}
/> />
</div> </div>
</div> </div>
@@ -1,18 +1,14 @@
import React from "react"; import React from "react";
import { ICompletionDetail } from "../../logic/completionMapping"; import { ICompletionDetail } from "../../logic/completionMapping";
import { TSourceMapping } from "../../logic/sourceMapping";
import { CompletionCardFull } from "../CompletionCard"; import { CompletionCardFull } from "../CompletionCard";
export function CompletionViewer(props: { export function CompletionViewer(props: {
code: string; code: string;
completionDetails: ICompletionDetail[]; completionDetails: ICompletionDetail[];
sourceMapping: TSourceMapping;
}) { }) {
const { code, completionDetails } = props; const { code, completionDetails } = props;
// function renderCompletionResult(inputCompletion: ICompletionDetail) {}
return ( return (
<div className=""> <div className="">
{/* Title for completion section */} {/* Title for completion section */}
+9 -4
View File
@@ -8,16 +8,17 @@ import {
Token, Token,
} from "../../types/prism-types"; } from "../../types/prism-types";
import { sourceMapping } from "../../logic/sourceMapping"; import { TSourceMapping, useSourceMapping } from "../../logic/sourceMapping";
import { import {
useCompletionMapping, useCompletionMapping,
ICompletionDetail, ICompletionDetail,
ICompletionMapping, TCompletionMapping,
} from "../../logic/completionMapping"; } from "../../logic/completionMapping";
function getCompletionFromSourceToken( function getCompletionFromSourceToken(
matcheeToken: Token, matcheeToken: Token,
completionMapping: ICompletionMapping completionMapping: TCompletionMapping,
sourceMapping: TSourceMapping
): ICompletionDetail | null { ): ICompletionDetail | null {
const matchingSourceDetails = sourceMapping.mappingArray.find( const matchingSourceDetails = sourceMapping.mappingArray.find(
({ token: tmpToken }) => matcheeToken === tmpToken ({ token: tmpToken }) => matcheeToken === tmpToken
@@ -72,7 +73,9 @@ function PreRenderer({
getLineProps, getLineProps,
getTokenProps, getTokenProps,
}: IPreRendererProps) { }: IPreRendererProps) {
const sourceMapping = useSourceMapping();
sourceMapping.reset(); sourceMapping.reset();
return ( return (
<pre className={`${className} px-4 py-2 overflow-auto`} style={style}> <pre className={`${className} px-4 py-2 overflow-auto`} style={style}>
{tokens.map((line, i) => ( {tokens.map((line, i) => (
@@ -123,6 +126,7 @@ function TokenRenderer({
getTokenProps, getTokenProps,
}: ITokenRendererProps) { }: ITokenRendererProps) {
const completionMapping = useCompletionMapping(); const completionMapping = useCompletionMapping();
const sourceMapping = useSourceMapping();
const refFn = sourceMapping.registerToken(token); const refFn = sourceMapping.registerToken(token);
if (isLastTokenInLine) { if (isLastTokenInLine) {
@@ -132,7 +136,8 @@ function TokenRenderer({
const onClickToken = (tmpToken: Token) => { const onClickToken = (tmpToken: Token) => {
const matchingCompletion = getCompletionFromSourceToken( const matchingCompletion = getCompletionFromSourceToken(
tmpToken, tmpToken,
completionMapping completionMapping,
sourceMapping
); );
if (matchingCompletion !== null) { if (matchingCompletion !== null) {
console.log( console.log(
+2 -2
View File
@@ -13,13 +13,13 @@ export interface ICompletionDetail {
completionValue: any; completionValue: any;
} }
export interface ICompletionMapping { export interface TCompletionMapping {
completionDetails: ICompletionDetail[]; completionDetails: ICompletionDetail[];
addCompletion(_: { node: Node; result: CompletionRecord }): void; addCompletion(_: { node: Node; result: CompletionRecord }): void;
reset(): void; reset(): void;
} }
export const completionMapping: ICompletionMapping = { const completionMapping: TCompletionMapping = {
completionDetails: [], completionDetails: [],
addCompletion({ node, result }) { addCompletion({ node, result }) {
const { start, end } = node; const { start, end } = node;
+1 -1
View File
@@ -17,7 +17,7 @@ export interface TSourceMapping {
getElementsInRange(start: number, end: number): HTMLElement[]; getElementsInRange(start: number, end: number): HTMLElement[];
} }
export const sourceMapping: TSourceMapping = { const sourceMapping: TSourceMapping = {
mappingArray: [], mappingArray: [],
lastEnd: 0, lastEnd: 0,
registerToken(t: Token) { registerToken(t: Token) {