diff --git a/web/package-lock.json b/web/package-lock.json
index 87210ddb0..8bb56fd90 100644
Binary files a/web/package-lock.json and b/web/package-lock.json differ
diff --git a/web/package.json b/web/package.json
index 823bd43cc..d57091cfd 100644
--- a/web/package.json
+++ b/web/package.json
@@ -11,7 +11,7 @@
"@types/react": "^16.9.23",
"@types/react-dom": "^16.9.5",
"@types/react-router-dom": "^5.1.3",
- "antd": "^3.26.13",
+ "antd": "^4.0.3",
"babel-plugin-import": "^1.13.0",
"customize-cra": "^0.9.1",
"react": "^16.13.0",
diff --git a/web/src/App.tsx b/web/src/App.tsx
index 586e45475..6d36cc739 100644
--- a/web/src/App.tsx
+++ b/web/src/App.tsx
@@ -1,4 +1,11 @@
-import { Icon, Layout, Menu, Tag } from "antd";
+import {
+ ApiOutlined,
+ DollarOutlined,
+ GithubOutlined,
+ TeamOutlined,
+ TwitterOutlined
+} from "@ant-design/icons";
+import { Layout, Menu, Tag } from "antd";
import React from "react";
import {
BrowserRouter as Router,
@@ -93,7 +100,7 @@ const Twitter = () => (
target="_blank"
rel="noopener noreferrer"
>
- Twitter
+ Twitter
);
@@ -106,7 +113,7 @@ const Community = () => (
target="_blank"
rel="noopener noreferrer"
>
- Community
+ Community
);
@@ -119,7 +126,7 @@ const GitHub = () => (
target="_blank"
rel="noopener noreferrer"
>
- GitHub
+ GitHub
);
@@ -132,7 +139,7 @@ const Api = () => (
target="_blank"
rel="noopener noreferrer"
>
- API
+ API
);
@@ -145,7 +152,7 @@ const Donate = () => (
target="_blank"
rel="noopener noreferrer"
>
- Donate
+ Donate
);
diff --git a/web/src/components/LinkButton.tsx b/web/src/components/LinkButton.tsx
index 1ad53baea..7a3fe5e82 100644
--- a/web/src/components/LinkButton.tsx
+++ b/web/src/components/LinkButton.tsx
@@ -7,7 +7,7 @@ interface Props {
text: string;
title?: string;
type?: ButtonType;
- icon?: string;
+ icon?: React.ReactNode;
}
export const LinkButton = (props: Props) =>
diff --git a/web/src/components/ListInfoButton.tsx b/web/src/components/ListInfoButton.tsx
index 02cee68dd..37013b331 100644
--- a/web/src/components/ListInfoButton.tsx
+++ b/web/src/components/ListInfoButton.tsx
@@ -1,4 +1,5 @@
-import { Button, Icon } from "antd";
+import { InfoCircleOutlined } from "@ant-design/icons";
+import { Button } from "antd";
import React from "react";
import { RouteComponentProps } from "react-router-dom";
import slugify from "slugify";
@@ -21,7 +22,7 @@ export const ListInfoButton = (props: RouteComponentProps & Props) => {
: props.history.push(listPath)
}
>
-
+
);
};
diff --git a/web/src/components/SubscribeButtons.tsx b/web/src/components/SubscribeButtons.tsx
index 4db0a71a9..8737f4828 100644
--- a/web/src/components/SubscribeButtons.tsx
+++ b/web/src/components/SubscribeButtons.tsx
@@ -1,3 +1,4 @@
+import { ImportOutlined } from "@ant-design/icons";
import { Button } from "antd";
import { ButtonType } from "antd/lib/button";
import React from "react";
@@ -52,7 +53,7 @@ const SubscribeButton = (props: SubscribeButtonProps) => {
}
type={buttonProps.type}
href={buttonProps.href}
title={buttonProps.title}
diff --git a/web/src/components/listInfoDrawer/ListInfoDrawer.tsx b/web/src/components/listInfoDrawer/ListInfoDrawer.tsx
index 7a83652d9..4ac25497d 100644
--- a/web/src/components/listInfoDrawer/ListInfoDrawer.tsx
+++ b/web/src/components/listInfoDrawer/ListInfoDrawer.tsx
@@ -1,26 +1,37 @@
import "./listInfoDrawer.css";
import { Divider, Drawer } from "antd";
-import ButtonGroup from "antd/lib/button/button-group";
+import {
+ DollarOutlined,
+ FileExclamationOutlined,
+ FormOutlined,
+ GithubOutlined,
+ HomeOutlined,
+ MailOutlined,
+ MessageOutlined,
+ SearchOutlined,
+ TeamOutlined
+} from "@ant-design/icons";
import React, { useEffect, useState } from "react";
-import { RouteComponentProps } from "react-router-dom";
-import { Language } from "../../interfaces/Language";
-import { License } from "../../interfaces/License";
-import { List } from "../../interfaces/List";
-import { Maintainer } from "../../interfaces/Maintainer";
-import { Software } from "../../interfaces/Software";
-import { Syntax } from "../../interfaces/Syntax";
-import { Tag } from "../../interfaces/Tag";
+import ButtonGroup from "antd/lib/button/button-group";
import { Description } from "../Description";
+import { Language } from "../../interfaces/Language";
import { LanguageCloud } from "../languageCloud";
+import { License } from "../../interfaces/License";
import { LicenseTag } from "../LicenseTag";
import { LinkButton } from "../LinkButton";
+import { List } from "../../interfaces/List";
+import { Maintainer } from "../../interfaces/Maintainer";
import { Maintainers } from "../maintainers";
import { PublishedDate } from "../PublishedDate";
+import { RouteComponentProps } from "react-router-dom";
+import { Software } from "../../interfaces/Software";
import { SoftwareCloud } from "../softwareCloud";
import { SubscribeButtons } from "../SubscribeButtons";
+import { Syntax } from "../../interfaces/Syntax";
import { SyntaxTag } from "../SyntaxTag";
+import { Tag } from "../../interfaces/Tag";
import { TagCloud } from "../tagCloud";
interface Props {
@@ -87,57 +98,57 @@ export const ListInfoDrawer = (props: RouteComponentProps & Props) => {
url={props.list.viewUrl}
text="View"
title={`View ${props.list.name} in its raw format`}
- icon="search"
+ icon={}
/>
}
/>
}
/>
{props.list.emailAddress && (
}
/>
)}
}
/>
}
/>
}
/>
}
/>
}
/>
diff --git a/web/src/components/listsTable/ListsTable.tsx b/web/src/components/listsTable/ListsTable.tsx
index 7409039d3..1689eac99 100644
--- a/web/src/components/listsTable/ListsTable.tsx
+++ b/web/src/components/listsTable/ListsTable.tsx
@@ -1,32 +1,33 @@
import "./listsTable.css";
-import { Table, Tag } from "antd";
import {
- PaginationConfig,
+ Key,
SorterResult,
TableCurrentDataSource
-} from "antd/lib/table";
+} from "antd/lib/table/interface";
import React, { useEffect, useState } from "react";
-import { RouteComponentProps } from "react-router";
-
+import { SoftwareCloud, SoftwareIcon } from "../softwareCloud";
+import { Table, Tag } from "antd";
import { useSearchColumnFilter, useTablePageSizer } from "../../hooks";
+
+import { Description } from "../Description";
import { Language } from "../../interfaces/Language";
+import { LanguageCloud } from "../languageCloud";
import { License } from "../../interfaces/License";
+import { LicenseTag } from "../LicenseTag";
import { List } from "../../interfaces/List";
+import { ListInfoButton } from "../ListInfoButton";
import { Maintainer } from "../../interfaces/Maintainer";
+import { MaintainerCloud } from "../maintainerCloud";
+import { PaginationConfig } from "antd/lib/pagination";
+import { RouteComponentProps } from "react-router";
import { Software } from "../../interfaces/Software";
import { Syntax } from "../../interfaces/Syntax";
-import { Tag as TagInterface } from "../../interfaces/Tag";
-import { nameof } from "../../utils";
-import { Description } from "../Description";
-import { LanguageCloud } from "../languageCloud";
-import { LicenseTag } from "../LicenseTag";
-import { ListInfoButton } from "../ListInfoButton";
-import { MaintainerCloud } from "../maintainerCloud";
-import { SoftwareCloud, SoftwareIcon } from "../softwareCloud";
import { SyntaxTag } from "../SyntaxTag";
import { TagCloud } from "../tagCloud";
+import { Tag as TagInterface } from "../../interfaces/Tag";
import { arraySorter } from "./arraySorter";
+import { nameof } from "../../utils";
import styles from "./ListsTable.module.css";
interface Props {
@@ -78,8 +79,8 @@ export const ListsTable = (props: RouteComponentProps & Props) => {
}}
onChange={(
_pagination: PaginationConfig,
- _filters: Partial>,
- _sorter: SorterResult,
+ _filters: Record,
+ _sorter: SorterResult | SorterResult[],
extra: TableCurrentDataSource
) => setVisibleLists(extra.currentDataSource)}
>
@@ -87,7 +88,7 @@ export const ListsTable = (props: RouteComponentProps & Props) => {
title="Info"
key="Info"
dataIndex={nameof("id")}
- width={tablePageSize.isNarrowWindow ? 43 : undefined}
+ width={62}
className={styles.nogrow}
fixed={tablePageSize.isNarrowWindow ? undefined : "left"}
render={(_id: number, list: List) => (
diff --git a/web/src/components/maintainers/Maintainers.tsx b/web/src/components/maintainers/Maintainers.tsx
index 12e235300..ee51c764a 100644
--- a/web/src/components/maintainers/Maintainers.tsx
+++ b/web/src/components/maintainers/Maintainers.tsx
@@ -1,6 +1,8 @@
import "./maintainers.css";
-import { Card, Icon } from "antd";
+import { HomeOutlined, MailOutlined, TwitterOutlined } from "@ant-design/icons";
+
+import { Card } from "antd";
import React from "react";
import { Maintainer } from "../../interfaces/Maintainer";
@@ -33,7 +35,7 @@ const MaintainerComponent = (props: MaintainerComponentProps) => {
target="_blank"
rel="noopener noreferrer"
>
-
+
);
}
@@ -45,7 +47,7 @@ const MaintainerComponent = (props: MaintainerComponentProps) => {
target="_blank"
rel="noopener noreferrer"
>
-
+
);
}
@@ -57,7 +59,7 @@ const MaintainerComponent = (props: MaintainerComponentProps) => {
target="_blank"
rel="noopener noreferrer"
>
-
+
);
}
diff --git a/web/src/hooks/useSearchColumnFilter.tsx b/web/src/hooks/useSearchColumnFilter.tsx
index b103d553d..2814ceb80 100644
--- a/web/src/hooks/useSearchColumnFilter.tsx
+++ b/web/src/hooks/useSearchColumnFilter.tsx
@@ -1,6 +1,7 @@
-import { Button, Icon, Input } from "antd";
-import { FilterDropdownProps } from "antd/lib/table";
+import { SearchOutlined } from "@ant-design/icons";
+import { Button, Input } from "antd";
import React, { useEffect, useState } from "react";
+import { FilterDropdownProps } from "antd/lib/table/interface";
interface FilterPropsState {
filterDropdown?:
@@ -45,7 +46,7 @@ export const useSearchColumnFilter = (dataIndex: string) => {