diff --git a/src/charts.test.ts b/src/charts.test.ts index e859ecbc3..5c2cce708 100644 --- a/src/charts.test.ts +++ b/src/charts.test.ts @@ -1,6 +1,5 @@ import { Spreadsheet, - sortSpreadsheet, tryParseCells, tryParseNumber, VALID_SPREADSHEET, @@ -119,29 +118,4 @@ describe("charts", () => { expect(values).toEqual([61, -60, 85, -67, 54, 95]); }); }); - - describe("sortSpreadsheet", () => { - it("sorts strictly numerical labels columns in ascending order", () => { - const spreadsheet = [ - ["x", "y"], - ["1°", "1"], - ["9°", "2"], - ["3°", "3"], - ["6°", "4"], - ]; - - const result = tryParseCells(spreadsheet); - - expect(result.type).toBe(VALID_SPREADSHEET); - - const { title, labels, values } = sortSpreadsheet( - (result as { type: typeof VALID_SPREADSHEET; spreadsheet: Spreadsheet }) - .spreadsheet, - ); - - expect(title).toEqual("y"); - expect(labels).toEqual(["1°", "3°", "6°", "9°"]); - expect(values).toEqual([1, 3, 4, 2]); - }); - }); }); diff --git a/src/charts.ts b/src/charts.ts index 032964a1e..16e25873a 100644 --- a/src/charts.ts +++ b/src/charts.ts @@ -36,8 +36,11 @@ type ParseSpreadsheetResult = | { type: typeof NOT_SPREADSHEET; reason: string } | { type: typeof VALID_SPREADSHEET; spreadsheet: Spreadsheet }; +/** + * @private exported for testing + */ export const tryParseNumber = (s: string): number | null => { - const match = /^([-+]?)[$€£¥₩]?([-+]?)([\d.,]+)[%°]?$/.exec(s); + const match = /^([-+]?)[$€£¥₩]?([-+]?)([\d.,]+)[%]?$/.exec(s); if (!match) { return null; } @@ -162,32 +165,6 @@ export const tryParseSpreadsheet = (text: string): ParseSpreadsheetResult => { return result; }; -export const sortSpreadsheet = (spreadsheet: Spreadsheet) => { - const rows = [] as { label: string; value: number }[]; - if (spreadsheet.labels == null || spreadsheet.values == null) { - return spreadsheet; - } - if (spreadsheet.labels.every((val) => tryParseNumber(val))) { - for (let i = 0; i < spreadsheet.labels.length; i++) { - rows.push({ - label: spreadsheet.labels[i], - value: spreadsheet.values[i], - }); - } - rows.sort((a, b) => { - const aParsed = tryParseNumber(a.label)!; - const bParsed = tryParseNumber(b.label)!; - return aParsed - bParsed; - }); - const newSpreadsheet = {} as Spreadsheet; - newSpreadsheet.title = spreadsheet.title; - newSpreadsheet.labels = rows.flatMap((row) => row.label); - newSpreadsheet.values = rows.flatMap((row) => row.value); - return newSpreadsheet; - } - return spreadsheet; -}; - const bgColors = getAllColorsSpecificShade(DEFAULT_CHART_COLOR_INDEX); // Put all the common properties here so when the whole chart is selected diff --git a/src/components/PasteChartDialog.tsx b/src/components/PasteChartDialog.tsx index 4c9496573..b5da1bf68 100644 --- a/src/components/PasteChartDialog.tsx +++ b/src/components/PasteChartDialog.tsx @@ -1,13 +1,7 @@ import oc from "open-color"; import React, { useLayoutEffect, useRef, useState } from "react"; import { trackEvent } from "../analytics"; -import { - ChartElements, - renderSpreadsheet, - sortSpreadsheet, - Spreadsheet, - tryParseNumber, -} from "../charts"; +import { ChartElements, renderSpreadsheet, Spreadsheet } from "../charts"; import { ChartType } from "../element/types"; import { t } from "../i18n"; import { exportToSvg } from "../scene/export"; @@ -22,7 +16,6 @@ import { getContainerElement, redrawTextBoundingBox, } from "../element/textElement"; -import { CheckboxItem } from "./CheckboxItem"; type OnInsertChart = (chartType: ChartType, elements: ChartElements) => void; @@ -31,7 +24,6 @@ const ChartPreviewBtn = (props: { chartType: ChartType; selected: boolean; onClick: OnInsertChart; - sortChartLabels: boolean; }) => { const previewRef = useRef(null); const [chartElements, setChartElements] = useState( @@ -51,10 +43,12 @@ const ChartPreviewBtn = (props: { return; } - const spreadsheet = props.sortChartLabels - ? sortSpreadsheet(props.spreadsheet) - : props.spreadsheet; - elements = renderSpreadsheet(props.chartType, spreadsheet, 0, 0); + elements = renderSpreadsheet( + props.chartType, + props.spreadsheet, + 0, + 0, + ); elements.forEach( (el) => isTextElement(el) && @@ -85,12 +79,7 @@ const ChartPreviewBtn = (props: { previewNode.replaceChildren(); }; })(); - }, [ - props.spreadsheet, - props.chartType, - props.selected, - props.sortChartLabels, - ]); + }, [props.spreadsheet, props.chartType, props.selected]); return (