Skip to content

Commit 4a6f4d5

Browse files
authored
[ReviewEntries] Use localeCompare for all text column sorts (#3724)
1 parent 454c1ae commit 4a6f4d5

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/goals/ReviewEntries/ReviewEntriesTable/index.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ export default function ReviewEntriesTable(props: {
123123
const { definitionsEnabled, grammaticalInfoEnabled } = useAppSelector(
124124
(state: StoreState) => state.currentProjectState.project
125125
);
126+
const vernLang = useAppSelector(
127+
(state: StoreState) =>
128+
state.currentProjectState.project.vernacularWritingSystem.bcp47
129+
);
126130

127131
const autoResetPageIndexRef = useRef(true);
128132
const rowVirtualizerInstanceRef = useRef<MRT_RowVirtualizer>(null);
@@ -225,6 +229,7 @@ export default function ReviewEntriesTable(props: {
225229
header: t("reviewEntries.columns.vernacular"),
226230
id: ColumnId.Vernacular,
227231
size: BaselineColumnSize - 40,
232+
sortingFn: sf.sortingFnVernacular(vernLang),
228233
}),
229234

230235
// Senses column
@@ -332,6 +337,7 @@ export default function ReviewEntriesTable(props: {
332337
header: t("reviewEntries.columns.note"),
333338
id: ColumnId.Note,
334339
size: BaselineColumnSize - 40,
340+
sortingFn: sf.sortingFnNote,
335341
}),
336342

337343
// Flag column

src/goals/ReviewEntries/ReviewEntriesTable/sortingFn.ts

+11
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ function compareDomains(a: SemanticDomain[], b: SemanticDomain[]): number {
6464

6565
/* Custom `sortingFn` functions for `MaterialReactTable` columns. */
6666

67+
/** Takes vernacular language bcp47 string.
68+
* Returns a function that localCompares the vernacular forms. */
69+
export const sortingFnVernacular =
70+
(lang: string): MRT_SortingFn<Word> =>
71+
(a, b) =>
72+
a.original.vernacular.localeCompare(b.original.vernacular, lang);
73+
6774
/** Concatenates all sense definition texts for each word, then compares strings. */
6875
export const sortingFnDefinitions: MRT_SortingFn<Word> = (a, b) =>
6976
definitionString(a.original.senses).localeCompare(
@@ -87,6 +94,10 @@ export const sortingFnDomains: MRT_SortingFn<Word> = (a, b) =>
8794
gatherDomains(b.original.senses)
8895
);
8996

97+
/** Compares note text. */
98+
export const sortingFnNote: MRT_SortingFn<Word> = (a, b) =>
99+
a.original.note.text.localeCompare(b.original.note.text);
100+
90101
/** Compares flags: `.active = true` before `= false`, then `.text` alphabetically. */
91102
export const sortingFnFlag: MRT_SortingFn<Word> = (a, b) =>
92103
compareFlags(a.original.flag, b.original.flag);

0 commit comments

Comments
 (0)