Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Auto-sort imports in TypeScript #160

Merged
merged 3 commits into from
Jul 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion frontend/.ladle/components.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { GlobalProvider } from "@ladle/react";
import { StaticRouter } from "react-router-dom/server";

import type { GlobalProvider } from "@ladle/react";

import "../lib/ui/style/index.css";
import "./override.css";

Expand Down
16 changes: 16 additions & 0 deletions frontend/.prettierrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
printWidth: 100,
plugins: ["@trivago/prettier-plugin-sort-imports"],
importOrder: [
"^react.*$", // anything react
"<THIRD_PARTY_MODULES>", // node_modules
"^ladle/.*$", // ladle
"^app/.*$", // app
"^@kiesraad/.*$", // lib
"^(\\.||\\.\\.)/.*$", // local imports
],
importOrderSeparation: true, // ensures new line separation between sorted import declarations group
importOrderSortSpecifiers: true, // sorts the specifiers in an import declarations
importOrderGroupNamespaceSpecifiers: true, // sorts the namespace specifiers to the top of the import group
importOrderCaseInsensitive: true, // enable case-insensitivity (because CamelCase)
};
1 change: 1 addition & 0 deletions frontend/app/app.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { expect, test } from "vitest";

test("it is an app", () => {
expect(true).toBe(true);
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BottomBar, Button, InputField } from "@kiesraad/ui";
import { useNavigate } from "react-router-dom";

import { BottomBar, Button, InputField } from "@kiesraad/ui";

interface FormElements extends HTMLFormControlsCollection {
username: HTMLInputElement;
password: HTMLInputElement;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";
import { userEvent } from "@testing-library/user-event";
import { afterEach, describe, expect, test, vi } from "vitest";

import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";

import {
Election,
PoliticalGroup,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/**
* @vitest-environment jsdom
*/

import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";
import { userEvent } from "@testing-library/user-event";
import { afterEach, describe, expect, test, vi } from "vitest";

import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";

import {
POLLING_STATION_DATA_ENTRY_REQUEST_BODY,
PollingStationFormController,
} from "@kiesraad/api";
import { electionMock } from "@kiesraad/api-mocks";

import { DifferencesForm } from "./DifferencesForm";

const Component = (
Expand Down
4 changes: 2 additions & 2 deletions frontend/app/component/form/differences/DifferencesForm.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as React from "react";
import { useBlocker } from "react-router-dom";

import { useDifferences, DifferencesCounts, useErrorsAndWarnings } from "@kiesraad/api";
import { Button, InputGrid, Feedback, BottomBar, InputGridRow, useTooltip } from "@kiesraad/ui";
import { DifferencesCounts, useDifferences, useErrorsAndWarnings } from "@kiesraad/api";
import { BottomBar, Button, Feedback, InputGrid, InputGridRow, useTooltip } from "@kiesraad/ui";
import { usePositiveNumberInputMask, usePreventFormEnterSubmit } from "@kiesraad/util";

interface FormElements extends HTMLFormControlsCollection {
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/component/form/login/LoginForm.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BottomBar, Button, InputField } from "@kiesraad/ui";
import { useNavigate } from "react-router-dom";

import { BottomBar, Button, InputField } from "@kiesraad/ui";

interface FormElements extends HTMLFormControlsCollection {
username: HTMLInputElement;
password: HTMLInputElement;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { describe, expect, test } from "vitest";
import { userEvent } from "@testing-library/user-event";
import { render, screen } from "app/test/unit";
import { describe, expect, test } from "vitest";

import { PollingStationChoiceForm } from "app/component/form/polling_station_choice/PollingStationChoiceForm.tsx";
import { render, screen } from "app/test/unit";

describe("Test PollingStationChoiceForm", () => {
test("Form field entry and buttons", async () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Badge, BottomBar, Button, InputField } from "@kiesraad/ui";
import { useNavigate } from "react-router-dom";

import { IconChevronRight } from "@kiesraad/icon";
import { Badge, BottomBar, Button, InputField } from "@kiesraad/ui";

interface FormElements extends HTMLFormControlsCollection {
number: HTMLInputElement;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { overrideOnce, render, screen } from "app/test/unit";
import { userEvent } from "@testing-library/user-event";
import { afterEach, describe, expect, test, vi } from "vitest";

import { overrideOnce, render, screen } from "app/test/unit";

import { RecountedForm } from "./RecountedForm";

describe("Test RecountedForm", () => {
Expand Down
2 changes: 1 addition & 1 deletion frontend/app/component/form/recounted/RecountedForm.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as React from "react";
import { useState } from "react";
import { useNavigate } from "react-router-dom";

import { BottomBar, Button, Feedback } from "@kiesraad/ui";
import { useState } from "react";

interface FormElements extends HTMLFormControlsCollection {
yes: HTMLInputElement;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/**
* @vitest-environment jsdom
*/

import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";
import { userEvent } from "@testing-library/user-event";
import { afterEach, describe, expect, test, vi } from "vitest";

import { getUrlMethodAndBody, overrideOnce, render, screen } from "app/test/unit";

import {
POLLING_STATION_DATA_ENTRY_REQUEST_BODY,
PollingStationFormController,
} from "@kiesraad/api";
import { electionMock } from "@kiesraad/api-mocks";

import { VotersAndVotesForm } from "./VotersAndVotesForm";

const Component = (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import * as React from "react";
import { useBlocker } from "react-router-dom";

import { useVotersAndVotes, VotersAndVotesValues, useErrorsAndWarnings } from "@kiesraad/api";
import { Button, InputGrid, Feedback, BottomBar, InputGridRow, useTooltip } from "@kiesraad/ui";
import { useErrorsAndWarnings, useVotersAndVotes, VotersAndVotesValues } from "@kiesraad/api";
import { BottomBar, Button, Feedback, InputGrid, InputGridRow, useTooltip } from "@kiesraad/ui";
import { usePositiveNumberInputMask, usePreventFormEnterSubmit } from "@kiesraad/util";
import { useBlocker } from "react-router-dom";

interface FormElements extends HTMLFormControlsCollection {
poll_card_count: HTMLInputElement;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Link, useLocation, useParams } from "react-router-dom";

import { useElection } from "@kiesraad/api";
import { ProgressList } from "@kiesraad/ui";

import { Link, useLocation, useParams } from "react-router-dom";

export function PollingStationProgress() {
const { pollingStationId, listNumber } = useParams();
const { election } = useElection();
Expand Down
5 changes: 3 additions & 2 deletions frontend/app/main.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import ReactDOM from "react-dom/client";
import { StrictMode } from "react";
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";

import { ApiProvider, ElectionListProvider, ElectionProvider } from "@kiesraad/api";

// ignore in prod
import { startMockAPI } from "./msw-mock-api.ts";
import { routes } from "./routes.tsx";
import { ApiProvider, ElectionListProvider, ElectionProvider } from "@kiesraad/api";

const rootDiv = document.getElementById("root");
if (!rootDiv) throw new Error("Root div not found");
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/HomePage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MockTest } from "app/component/MockTest";
import { Link } from "react-router-dom";

import { MockTest } from "app/component/MockTest";

export function HomePage() {
return (
<div style={{ padding: "32px" }}>
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/RootLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { AppFrame } from "@kiesraad/ui";
import { Outlet } from "react-router-dom";

import { AppFrame } from "@kiesraad/ui";

export function RootLayout() {
return (
<AppFrame>
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/input/InputLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Footer } from "app/component/footer/Footer";
import { Outlet } from "react-router-dom";

import { Footer } from "app/component/footer/Footer";

export function InputLayout() {
return (
<div className="app-layout">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { useParams } from "react-router-dom";

import { useElection } from "@kiesraad/api";
import { CandidatesVotesForm } from "app/component/form/candidates_votes_form/CandidatesVotesForm";

import { useElection } from "@kiesraad/api";

export function CandidatesVotesPage() {
const { listNumber } = useParams();
const { election } = useElection();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { render } from "app/test/unit";
import { describe, expect, test } from "vitest";

import { render } from "app/test/unit";

import { ElectionListProvider, ElectionProvider } from "@kiesraad/api";

import { PollingStationLayout } from "./PollingStationLayout";

describe("PollingStationLayout", () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { useState } from "react";
import { Outlet, useParams } from "react-router-dom";

import { PollingStationProgress } from "app/component/pollingstation/PollingStationProgress";

import { PollingStationFormController, useElection } from "@kiesraad/api";
import { IconCross } from "@kiesraad/icon";
import { Badge, Button, Modal, PollingStationNumber, WorkStationNumber } from "@kiesraad/ui";
import { PollingStationProgress } from "app/component/pollingstation/PollingStationProgress";

export function PollingStationLayout() {
const { pollingStationId } = useParams();
Expand Down
6 changes: 4 additions & 2 deletions frontend/app/module/input/page/InputHomePage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Alert, WorkStationNumber } from "@kiesraad/ui";
import { PollingStationChoiceForm } from "app/component/form/polling_station_choice/PollingStationChoiceForm.tsx";
import { useState } from "react";

import { PollingStationChoiceForm } from "app/component/form/polling_station_choice/PollingStationChoiceForm.tsx";

import { Alert, WorkStationNumber } from "@kiesraad/ui";

export function InputHomePage() {
const [showAlert, setShowAlert] = useState(true);

Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/overview/OverviewLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Footer } from "app/component/footer/Footer";
import { Outlet } from "react-router-dom";

import { Footer } from "app/component/footer/Footer";

export function OverviewLayout() {
return (
<div className="app-layout">
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/overview/page/OverviewPage.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { useNavigate } from "react-router-dom";
import { WorkStationNumber } from "@kiesraad/ui";

import {
IconCheckHeart,
IconCheckVerified,
IconChevronRight,
IconClock,
IconHourglass,
} from "@kiesraad/icon";
import { WorkStationNumber } from "@kiesraad/ui";

export function OverviewPage() {
const navigate = useNavigate();
Expand Down
6 changes: 4 additions & 2 deletions frontend/app/module/user/page/AccountSetupPage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Alert, WorkStationNumber } from "@kiesraad/ui";
import { AccountSetupForm } from "app/component/form/account_setup/AccountSetupForm";
import { useState } from "react";

import { AccountSetupForm } from "app/component/form/account_setup/AccountSetupForm";

import { Alert, WorkStationNumber } from "@kiesraad/ui";

export function AccountSetupPage() {
const [showAlert, setShowAlert] = useState(true);

Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/user/page/LoginPage.test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { render } from "app/test/unit";
import { describe, expect, test } from "vitest";

import { LoginPage } from "app/module/user";
import { render } from "app/test/unit";

describe("LoginPage", () => {
test("Enter form field values", () => {
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/module/user/page/LoginPage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { WorkStationNumber } from "@kiesraad/ui";
import { LoginForm } from "app/component/form/login/LoginForm";

import { WorkStationNumber } from "@kiesraad/ui";

export function LoginPage() {
return (
<>
Expand Down
5 changes: 3 additions & 2 deletions frontend/app/routes.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import { createRoutesFromElements, Route } from "react-router-dom";

import { HomePage } from "./module/HomePage";
import {
CandidatesVotesPage,
DifferencesPage,
InputLayout,
InputHomePage,
InputLayout,
PollingStationLayout,
RecountedPage,
VotersAndVotesPage,
} from "./module/input";
import { OverviewLayout, OverviewPage } from "./module/overview";
import { RootLayout } from "./module/RootLayout";
import { AccountSetupPage, LoginPage, LoginLayout, UserHomePage } from "./module/user";
import { AccountSetupPage, LoginLayout, LoginPage, UserHomePage } from "./module/user";

export const routes = createRoutesFromElements(
<Route element={<RootLayout />}>
Expand Down
1 change: 1 addition & 0 deletions frontend/app/test/unit/Providers.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as React from "react";
import { createMemoryRouter, RouterProvider } from "react-router-dom";

import { ApiProvider } from "@kiesraad/api";

export const Providers = ({ children }: { children: React.ReactNode }) => {
Expand Down
1 change: 0 additions & 1 deletion frontend/app/test/unit/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
*
* Copyright Oxide Computer Company
*/

import { http, HttpResponse } from "msw";
import { setupServer } from "msw/node";

Expand Down
1 change: 0 additions & 1 deletion frontend/app/test/unit/setup.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import "@testing-library/jest-dom/vitest";

import { cleanup, configure } from "@testing-library/react";
import { afterAll, afterEach, beforeAll } from "vitest";
import failOnConsole from "vitest-fail-on-console";
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/test/unit/test-utils.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { ReactElement } from "react";
import { Providers } from "./Providers";

import { render, RenderOptions } from "@testing-library/react";

import { Providers } from "./Providers";

const customRender = (ui: ReactElement, options?: Omit<RenderOptions, "wrapper">) =>
render(ui, { wrapper: Providers, ...options });

Expand Down
2 changes: 2 additions & 0 deletions frontend/lib/api-mocks/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { http, type HttpHandler, HttpResponse } from "msw";

import {
DataEntryResponse,
Election,
Expand All @@ -9,6 +10,7 @@ import {
VotersCounts,
VotesCounts,
} from "@kiesraad/api";

import { electionMockData, electionsMockData, politicalGroupMockData } from "./ElectionMockData.ts";

export const electionMock = electionMockData as Required<Election>;
Expand Down
4 changes: 3 additions & 1 deletion frontend/lib/api/ApiClient.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { describe, expect, test } from "vitest";
import { ApiClient } from "./ApiClient";

import { overrideOnce } from "app/test/unit";

import { ApiClient } from "./ApiClient";

describe("ApiClient", () => {
test("200 response is parsed as success", async () => {
overrideOnce("post", "/api/polling_stations/1/data_entries/1", 200, { fizz: "buzz" });
Expand Down
Loading