From 7c5dc082e8c0bb405d62e971ca4e456bb05edad2 Mon Sep 17 00:00:00 2001 From: bendtherules Date: Wed, 7 Oct 2020 20:12:40 +0530 Subject: [PATCH] refactor(misc): Use hook version of completionMapping and sourceMapping everywhere Also stopped exporting the mappings directly from respective files to enforce this --- src/App.tsx | 5 ++--- .../CompletionViewer/CompletionViewer.tsx | 4 ---- src/components/SourceViewer/SourceViewer.tsx | 13 +++++++++---- src/logic/completionMapping.ts | 4 ++-- src/logic/sourceMapping.tsx | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 8c0e94c..f01f886 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,8 +3,7 @@ import React, { useState } from "react"; import { SourceViewer } from "./components/SourceViewer"; import { CompletionViewer } from "./components/CompletionViewer"; -import { completionMapping } from "./logic/completionMapping"; -import { sourceMapping } from "./logic/sourceMapping"; +import { useCompletionMapping } from "./logic/completionMapping"; import { runEngine } from "./logic/runEngine"; import "./tailwind.output.css"; @@ -15,6 +14,7 @@ World!\`; abc()`; function App() { const [inputCode, setInputCode] = useState(sampleInputCode); + const completionMapping = useCompletionMapping(); // useLayoutEffect(() => { runEngine(inputCode); @@ -31,7 +31,6 @@ function App() { diff --git a/src/components/CompletionViewer/CompletionViewer.tsx b/src/components/CompletionViewer/CompletionViewer.tsx index 9c5277c..c898cab 100644 --- a/src/components/CompletionViewer/CompletionViewer.tsx +++ b/src/components/CompletionViewer/CompletionViewer.tsx @@ -1,18 +1,14 @@ import React from "react"; import { ICompletionDetail } from "../../logic/completionMapping"; -import { TSourceMapping } from "../../logic/sourceMapping"; import { CompletionCardFull } from "../CompletionCard"; export function CompletionViewer(props: { code: string; completionDetails: ICompletionDetail[]; - sourceMapping: TSourceMapping; }) { const { code, completionDetails } = props; - // function renderCompletionResult(inputCompletion: ICompletionDetail) {} - return (
{/* Title for completion section */} diff --git a/src/components/SourceViewer/SourceViewer.tsx b/src/components/SourceViewer/SourceViewer.tsx index ef36e1d..10d3098 100644 --- a/src/components/SourceViewer/SourceViewer.tsx +++ b/src/components/SourceViewer/SourceViewer.tsx @@ -8,16 +8,17 @@ import { Token, } from "../../types/prism-types"; -import { sourceMapping } from "../../logic/sourceMapping"; +import { TSourceMapping, useSourceMapping } from "../../logic/sourceMapping"; import { useCompletionMapping, ICompletionDetail, - ICompletionMapping, + TCompletionMapping, } from "../../logic/completionMapping"; function getCompletionFromSourceToken( matcheeToken: Token, - completionMapping: ICompletionMapping + completionMapping: TCompletionMapping, + sourceMapping: TSourceMapping ): ICompletionDetail | null { const matchingSourceDetails = sourceMapping.mappingArray.find( ({ token: tmpToken }) => matcheeToken === tmpToken @@ -72,7 +73,9 @@ function PreRenderer({ getLineProps, getTokenProps, }: IPreRendererProps) { + const sourceMapping = useSourceMapping(); sourceMapping.reset(); + return (
       {tokens.map((line, i) => (
@@ -123,6 +126,7 @@ function TokenRenderer({
   getTokenProps,
 }: ITokenRendererProps) {
   const completionMapping = useCompletionMapping();
+  const sourceMapping = useSourceMapping();
 
   const refFn = sourceMapping.registerToken(token);
   if (isLastTokenInLine) {
@@ -132,7 +136,8 @@ function TokenRenderer({
   const onClickToken = (tmpToken: Token) => {
     const matchingCompletion = getCompletionFromSourceToken(
       tmpToken,
-      completionMapping
+      completionMapping,
+      sourceMapping
     );
     if (matchingCompletion !== null) {
       console.log(
diff --git a/src/logic/completionMapping.ts b/src/logic/completionMapping.ts
index 911f8e3..b3e8c53 100644
--- a/src/logic/completionMapping.ts
+++ b/src/logic/completionMapping.ts
@@ -13,13 +13,13 @@ export interface ICompletionDetail {
   completionValue: any;
 }
 
-export interface ICompletionMapping {
+export interface TCompletionMapping {
   completionDetails: ICompletionDetail[];
   addCompletion(_: { node: Node; result: CompletionRecord }): void;
   reset(): void;
 }
 
-export const completionMapping: ICompletionMapping = {
+const completionMapping: TCompletionMapping = {
   completionDetails: [],
   addCompletion({ node, result }) {
     const { start, end } = node;
diff --git a/src/logic/sourceMapping.tsx b/src/logic/sourceMapping.tsx
index c6fd67a..bc6b58e 100644
--- a/src/logic/sourceMapping.tsx
+++ b/src/logic/sourceMapping.tsx
@@ -17,7 +17,7 @@ export interface TSourceMapping {
   getElementsInRange(start: number, end: number): HTMLElement[];
 }
 
-export const sourceMapping: TSourceMapping = {
+const sourceMapping: TSourceMapping = {
   mappingArray: [],
   lastEnd: 0,
   registerToken(t: Token) {