diff --git a/packages/web/components/templates/article/SetLabelsControl.tsx b/packages/web/components/templates/article/SetLabelsControl.tsx index 04deb2b09..34e4306e6 100644 --- a/packages/web/components/templates/article/SetLabelsControl.tsx +++ b/packages/web/components/templates/article/SetLabelsControl.tsx @@ -285,9 +285,13 @@ export function SetLabelsControl(props: SetLabelsControlProps): JSX.Element { if (!labels) { return [] } - return labels.filter((label) => { - return label.name.toLowerCase().includes(filterText.toLowerCase()) - }) + return labels + .filter((label) => { + return label.name.toLowerCase().includes(filterText.toLowerCase()) + }) + .sort((left: Label, right: Label) => { + return left.name.localeCompare(right.name) + }) }, [labels, filterText]) // Move focus through the labels list on tab or arrow up/down keys diff --git a/packages/web/pages/settings/labels.tsx b/packages/web/pages/settings/labels.tsx index 79823d9e5..52267abec 100644 --- a/packages/web/pages/settings/labels.tsx +++ b/packages/web/pages/settings/labels.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useEffect, useMemo, useState } from 'react' import { PrimaryLayout } from '../../components/templates/PrimaryLayout' import { Button } from '../../components/elements/Button' import { styled, theme } from '../../components/tokens/stitches.config' @@ -162,6 +162,12 @@ export default function LabelsPage(): JSX.Element { applyStoredTheme(false) + const sortedLabels = useMemo(() => { + return labels.sort((left: Label, right: Label) => + left.name.localeCompare(right.name) + ) + }, [labels]) + useEffect(() => { const handleResizeWindow = () => setWindowWidth(window.innerWidth) if (windowWidth === 0) { @@ -362,9 +368,9 @@ export default function LabelsPage(): JSX.Element { ) ) : null} - {labels - ? labels.map((label, i) => { - const isLastChild = i === labels.length - 1 + {sortedLabels + ? sortedLabels.map((label, i) => { + const isLastChild = i === sortedLabels.length - 1 const isFirstChild = i === 0 const cardProps = { label: label,