From 8a1e608f3e14a25a9f22f64736846dc84ff8899f Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 30 Aug 2020 13:56:32 -0500 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E2=9C=A8=20re-enable=20langs=20co?= =?UTF-8?q?lumn=20sort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/listsTable/ListsTable.tsx | 12 ++++++--- web/src/components/listsTable/arraySorter.ts | 28 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/web/src/components/listsTable/ListsTable.tsx b/web/src/components/listsTable/ListsTable.tsx index 870c9ab37..44f106427 100644 --- a/web/src/components/listsTable/ListsTable.tsx +++ b/web/src/components/listsTable/ListsTable.tsx @@ -25,7 +25,7 @@ import { Software } from "../../interfaces/Software"; import { Syntax } from "../../interfaces/Syntax"; import { TagCloud } from "../tagCloud"; import { Tag as TagInterface } from "../../interfaces/Tag"; -import { arraySorter } from "./arraySorter"; +import { arraySorter, languageArraySorter } from "./arraySorter"; import { nameof } from "../../utils"; import styles from "./ListsTable.module.css"; import { TablePaginationConfig } from "antd/lib/table"; @@ -228,9 +228,13 @@ export const ListsTable = (props: RouteComponentProps & Props) => { title="Languages" key="Languages" dataIndex={nameof("languageIso6391s")} - // sorter={(a, b) => - // arraySorter(a.languageIso6391s, b.languageIso6391s, languages) - // } + sorter={(a, b) => + languageArraySorter( + a.languageIso6391s, + b.languageIso6391s, + languages + ) + } width={129} className={styles.nogrow} filters={languages.map((l) => ({ diff --git a/web/src/components/listsTable/arraySorter.ts b/web/src/components/listsTable/arraySorter.ts index 17a5a8a62..e09246b94 100644 --- a/web/src/components/listsTable/arraySorter.ts +++ b/web/src/components/listsTable/arraySorter.ts @@ -1,3 +1,5 @@ +import { Language } from "../../interfaces/Language"; + interface ArraySortableEntity { id: number; name: string; @@ -28,3 +30,29 @@ export const arraySorter = ( : 1 : -1 : 1; + +export const languageArraySorter = ( + a: string[], + b: string[], + entities: Language[] +) => + a && a.length + ? b && b.length + ? a.length === b.length + ? entities + .filter((e: Language) => a.includes(e.iso6391)) + .map((e: Language) => e.name) + .join() + .toLowerCase() > + entities + .filter((e: Language) => b.includes(e.iso6391)) + .map((e: Language) => e.name) + .join() + .toLowerCase() + ? 1 + : -1 + : a.length > b.length + ? -1 + : 1 + : -1 + : 1;