Skip to content

Commit 268921f

Browse files
committed
refact: import path aliases + type imports
1 parent e3ad8c0 commit 268921f

15 files changed

+59
-42
lines changed

src/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { type CSSProperties, useCallback, useMemo, useState } from "react";
22
import { Card, Divider, Layout, Steps, Typography } from "antd";
33

4-
import { PrimerPaletteContext } from "./lib/colors";
4+
import { PrimerPaletteContext } from "@lib/colors";
5+
import type { SNIPeDataset } from "@lib/datasets";
56
import DatasetStep from "./steps/dataset/DatasetStep";
67
import DiscoverStep from "./steps/discovery/DiscoverStep";
78
import Footer from "./Footer";
89

910
import logo from "./logo_square.svg";
10-
import { SNIPeDataset } from "./lib/datasets";
1111

1212
const { Title } = Typography;
1313

src/shared/Primer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { memo, useContext } from "react";
22
import { Popover, Tag } from "antd";
33
import { PlusCircleFilled, PlusCircleOutlined } from "@ant-design/icons";
44

5-
import { PrimerPaletteContext } from "../lib/colors";
5+
import { PrimerPaletteContext } from "@lib/colors";
66

77
export type PrimerAddedConfig = {
88
sometimes: boolean;

src/shared/TaxaFilterRadioSelector.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useEffect, useState } from "react";
22
import { Radio } from "antd";
3-
import type { SNIPeTargetMode } from "../lib/types";
3+
import type { SNIPeTargetMode } from "@lib/types";
44

55
type TaxaFilterRadioSelectorProps = {
66
includeOffTargetTaxa: boolean;

src/shared/TaxaModal.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { useEffect, useMemo, useState } from "react";
22

33
import { Input, Modal, Space, Table, type TableColumnsType, Tag } from "antd";
4-
import { ColumnsType } from "antd/es/table";
54

65
import Primer from "./Primer";
7-
import type { SNIPeDataset } from "../lib/datasets";
8-
import type { SNIPePrimerSet, SNIPeSearchParams } from "../lib/types";
6+
import type { SNIPeDataset } from "@lib/datasets";
7+
import type { SNIPePrimerSet, SNIPeSearchParams } from "@lib/types";
98

109
import TaxonWithGroupAndPathPopover from "./TaxonWithGroupAndPathPopover";
1110
import TaxaFilterRadioSelector from "./TaxaFilterRadioSelector";
@@ -98,7 +97,7 @@ const TaxaModal = ({ dataset, result, open, onCancel }: TaxaModalProps) => {
9897
render: (oT: boolean) =>
9998
oT ? <Tag color="green">On-target</Tag> : <Tag color="volcano">Off-target</Tag>,
10099
},
101-
] as ColumnsType<TaxonTableItem>)
100+
] as TableColumnsType<TaxonTableItem>)
102101
: []),
103102
],
104103
[dataset, primers, searchValue],

src/shared/TaxonWithGroupAndPathPopover.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { memo } from "react";
22
import { Popover } from "antd";
3-
import { COL_FINAL_ID, COL_TAXA_GROUP, type DatasetRecord, PRIMER_GROUPINGS } from "../lib/datasets";
4-
import { formatTaxon } from "../lib/utils";
3+
import { COL_FINAL_ID, COL_TAXA_GROUP, type DatasetRecord, PRIMER_GROUPINGS } from "@lib/datasets";
4+
import { formatTaxon } from "@lib/utils";
55

66
const formatRecordPath = (rec: DatasetRecord) => (
77
<>

src/steps/dataset/DatasetStep.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import {
1818
} from "antd";
1919
import type { RcFile, UploadChangeParam } from "antd/es/upload/interface";
2020
import { ApartmentOutlined, ArrowRightOutlined, ExperimentOutlined, UploadOutlined } from "@ant-design/icons";
21-
import { createDataset, type SNIPeDataset } from "../../lib/datasets";
22-
import Primer from "../../shared/Primer";
23-
import TaxaModal from "../../shared/TaxaModal";
21+
import { createDataset, type SNIPeDataset } from "@lib/datasets";
22+
import Primer from "@shared/Primer";
23+
import TaxaModal from "@shared/TaxaModal";
2424

2525
const { Paragraph, Text } = Typography;
2626

src/steps/discovery/ChartDownloadButtons.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { MutableRefObject } from "react";
22
import { Button } from "antd";
33
import { DownloadOutlined } from "@ant-design/icons";
4-
import { downloadChart } from "../../download";
4+
import { downloadChart } from "@/download";
55

66
type ChartDownloadButtonsProps<T> = {
77
chartRef: MutableRefObject<T | null>;

src/steps/discovery/CumulativePrimerSetCoverageChart.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import {
1616
} from "recharts";
1717
import type { NameType, ValueType } from "recharts/types/component/DefaultTooltipContent";
1818

19-
import { supergroupOrGroupColor } from "../../lib/colors";
19+
import { supergroupOrGroupColor } from "@lib/colors";
2020
import ChartDownloadButtons from "./ChartDownloadButtons";
21-
import TaxaFilterRadioSelector from "../../shared/TaxaFilterRadioSelector";
22-
import { SNIPeDataset } from "../../lib/datasets";
23-
import { SNIPeResults, SNIPeSearchParams } from "../../lib/types";
21+
import TaxaFilterRadioSelector from "@shared/TaxaFilterRadioSelector";
22+
import { SNIPeDataset } from "@lib/datasets";
23+
import { SNIPeResults, SNIPeSearchParams } from "@lib/types";
2424

2525
type CustomTooltipProps = TooltipProps<ValueType, NameType> & {
2626
currentBar?: string;

src/steps/discovery/DiscoverStep.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ import { ArrowLeftOutlined, BarChartOutlined, SearchOutlined } from "@ant-design
3535
import CumulativePrimerSetCoverageChart from "./CumulativePrimerSetCoverageChart";
3636
import ResultsTabs from "./ResultsTabs";
3737

38-
import { PrimerPaletteContext } from "../../lib/colors";
39-
import type { SNIPeDataset } from "../../lib/datasets";
40-
import { SNIPeSearchParams } from "../../lib/types";
38+
import { PrimerPaletteContext } from "@lib/colors";
39+
import type { SNIPeDataset } from "@lib/datasets";
40+
import type { SNIPeSearchParams } from "@lib/types";
4141

4242
const { Title } = Typography;
4343

src/steps/discovery/PrimerSet.tsx

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import { type CSSProperties, Fragment, useCallback, useState } from "react";
1+
import { type CSSProperties, Fragment, useCallback, useMemo, useState } from "react";
22

33
import difference from "set.prototype.difference";
44

55
import { Button, Card, Space, Statistic, Typography } from "antd";
66
import { DownloadOutlined, MinusCircleOutlined, PlusCircleOutlined } from "@ant-design/icons";
77

8-
import Primer from "../../shared/Primer";
9-
import TaxaModal from "../../shared/TaxaModal";
8+
import Primer from "@shared/Primer";
9+
import TaxaModal from "@shared/TaxaModal";
1010
import TaxaByPrimerModal from "./TaxaByPrimerModal";
1111
import TaxonWithGroupAndPathPopover from "../../shared/TaxonWithGroupAndPathPopover";
1212

1313
import {
14-
BasePrimerGroupingRecord,
14+
type BasePrimerGroupingRecord,
1515
CSV_HEADER,
16-
IntermediateLongFormDatasetRecord,
16+
type IntermediateLongFormDatasetRecord,
1717
RESOLUTIONS_WITH_SPECIES,
1818
type SNIPeDataset,
19-
} from "../../lib/datasets";
20-
import type { SNIPePrimerCombinationResult, SNIPePrimerSet, SNIPeSearchParams } from "../../lib/types";
21-
import { pluralize, serializeCSVRow } from "../../lib/utils";
19+
} from "@lib/datasets";
20+
import type { SNIPePrimerCombinationResult, SNIPePrimerSet, SNIPeSearchParams } from "@lib/types";
21+
import { pluralize, serializeCSVRow } from "@lib/utils";
2222

2323
const { Title } = Typography;
2424

@@ -33,20 +33,27 @@ type ChangedTaxaSetsProps = {
3333
nextNPrimers: number;
3434
};
3535

36+
const nChanged = (ct: ChangedTaxaSet) => ct.added.length + ct.removed.length;
37+
3638
const ChangedTaxaSets = ({ dataset, changedTaxaSets, nextNPrimers }: ChangedTaxaSetsProps) => {
37-
const nChangedTaxa = Array.from(new Set(changedTaxaSets.map((nts) => nts.added.length + nts.removed.length)));
38-
const allAdditions = changedTaxaSets.every((nts) => nts.removed.length === 0);
39+
const sortedChangedTaxaSets = useMemo(
40+
() => [...changedTaxaSets].sort((a, b) => nChanged(a) - nChanged(b)),
41+
[changedTaxaSets],
42+
);
43+
44+
const nChangedTaxa = Array.from(new Set(sortedChangedTaxaSets.map(nChanged)));
45+
const allAdditions = sortedChangedTaxaSets.every((nts) => nts.removed.length === 0);
3946

4047
return (
41-
<details open={changedTaxaSets[0].added.length + changedTaxaSets[0].removed.length < 8}>
48+
<details open={sortedChangedTaxaSets[0].added.length + sortedChangedTaxaSets[0].removed.length < 8}>
4249
<summary style={{ cursor: "pointer" }}>
4350
{allAdditions ? "Adds" : "Changes"} {nChangedTaxa.join(" or ")}
4451
{allAdditions ? " new " : " "}
4552
{pluralize("taxon", Math.max(...nChangedTaxa))} vs. with {nextNPrimers}{" "}
4653
{pluralize("primer", nextNPrimers)}
4754
</summary>
4855
<>
49-
{changedTaxaSets.map((nts, ntsIndex) => (
56+
{sortedChangedTaxaSets.map((nts, ntsIndex) => (
5057
<Fragment key={`taxa-set-${ntsIndex}`}>
5158
{nts.added.map((t, ti) => (
5259
<Fragment key={t}>
@@ -66,7 +73,7 @@ const ChangedTaxaSets = ({ dataset, changedTaxaSets, nextNPrimers }: ChangedTaxa
6673
</span>
6774
</Fragment>
6875
))}
69-
{ntsIndex < changedTaxaSets.length - 1 ? (
76+
{ntsIndex < sortedChangedTaxaSets.length - 1 ? (
7077
<div>
7178
<strong>— OR —</strong>
7279
</div>

src/steps/discovery/PrimerSetEulerDiagram.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { CSSProperties } from "react";
22
import { createVennJSAdapter, VennDiagram } from "@upsetjs/react";
33
import { layout } from "@upsetjs/venn.js";
44
import { lab } from "d3-color";
5-
import type { SNIPePrimerSet } from "../../lib/types";
5+
import type { SNIPePrimerSet } from "@lib/types";
66

77
const vennJSAdapter = createVennJSAdapter(layout);
88

src/steps/discovery/ResultsTabs.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { Modal, Tabs } from "antd";
44
import PrimerSet from "./PrimerSet";
55
import PrimerSetEulerDiagram from "./PrimerSetEulerDiagram";
66

7-
import type { SNIPeDataset } from "../../lib/datasets";
8-
import type { SNIPePrimerSet, SNIPeResults, SNIPeSearchParams } from "../../lib/types";
9-
import { pluralize } from "../../lib/utils";
7+
import type { SNIPeDataset } from "@lib/datasets";
8+
import type { SNIPePrimerSet, SNIPeResults, SNIPeSearchParams } from "@lib/types";
9+
import { pluralize } from "@lib/utils";
1010

1111
const primerCountPhrase = (nPrimers: number) => `${nPrimers} ${pluralize("Primer", nPrimers)}`;
1212

src/steps/discovery/TaxaByPrimerModal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import { Col, Empty, Modal, Row, Space } from "antd";
44
import groupBy from "lodash/groupBy";
55
import { Bar, BarChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
66

7-
import { supergroupOrGroupColor } from "../../lib/colors";
8-
import { COL_SUPERGROUP, COL_TAXA_GROUP, type DatasetRecord, type SNIPeDataset } from "../../lib/datasets";
9-
import type { SNIPePrimerSet, SNIPeSearchParams, SNIPeTargetMode } from "../../lib/types";
7+
import { supergroupOrGroupColor } from "@lib/colors";
8+
import { COL_SUPERGROUP, COL_TAXA_GROUP, type DatasetRecord, type SNIPeDataset } from "@lib/datasets";
9+
import type { SNIPePrimerSet, SNIPeSearchParams, SNIPeTargetMode } from "@lib/types";
1010

1111
import ChartDownloadButtons from "./ChartDownloadButtons";
12-
import TaxaFilterRadioSelector from "../../shared/TaxaFilterRadioSelector";
12+
import TaxaFilterRadioSelector from "@shared/TaxaFilterRadioSelector";
1313

1414
type TaxaByPrimerModalProps = {
1515
dataset: SNIPeDataset;

tsconfig.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
"moduleResolution": "bundler",
55
"target": "es2015",
66

7+
"paths": {
8+
"@/*": ["src/*"],
9+
"@lib/*": ["src/lib/*"],
10+
"@shared/*": ["src/shared/*"],
11+
},
12+
713
"outDir": "./dist/",
814
"sourceMap": true,
915
"allowJs": true,

webpack.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ const config = {
6262
],
6363
},
6464
resolve: {
65+
alias: {
66+
"@": path.resolve(__dirname, "src"),
67+
"@lib": path.resolve(__dirname, "src/lib"),
68+
"@shared": path.resolve(__dirname, "src/shared"),
69+
},
6570
extensions: ["*", ".ts", ".tsx", ".js", ".jsx"]
6671
},
6772
watchOptions: {

0 commit comments

Comments
 (0)