Skip to content
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
6 changes: 4 additions & 2 deletions src/components/Search/SearchSingleSelectionPicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import useDebouncedState from '@hooks/useDebouncedState';
import useLocalize from '@hooks/useLocalize';
import Navigation from '@libs/Navigation/Navigation';
import type {OptionData} from '@libs/ReportUtils';
import {sortOptionsWithEmptyValue} from '@libs/SearchQueryUtils';
import ROUTES from '@src/ROUTES';
import type {Route} from '@src/ROUTES';
import SearchFilterPageFooterButtons from './SearchFilterPageFooterButtons';
Expand Down Expand Up @@ -34,7 +35,7 @@ function SearchSingleSelectionPicker({
shouldAutoSave,
shouldShowTextInput = true,
}: SearchSingleSelectionPickerProps) {
const {translate} = useLocalize();
const {translate, localeCompare} = useLocalize();

const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState('');
const [selectedItem, setSelectedItem] = useState<SearchSingleSelectionPickerItem | undefined>(initiallySelectedItem);
Expand All @@ -56,6 +57,7 @@ function SearchSingleSelectionPicker({
: [];
const remainingItemsSection = items
.filter((item) => item?.value !== initiallySelectedItem?.value && item?.name?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase()))
.sort((a, b) => sortOptionsWithEmptyValue(a.name.toString(), b.name.toString(), localeCompare))
.map((item) => ({
text: item.name,
keyForList: item.value,
Expand All @@ -82,7 +84,7 @@ function SearchSingleSelectionPicker({
],
noResultsFound: isEmpty,
};
}, [initiallySelectedItem, selectedItem?.value, items, pickerTitle, debouncedSearchTerm]);
}, [initiallySelectedItem, selectedItem?.value, items, pickerTitle, debouncedSearchTerm, localeCompare]);

const onSelectItem = useCallback(
(item: Partial<OptionData & SearchSingleSelectionPickerItem>) => {
Expand Down
1 change: 1 addition & 0 deletions src/components/SelectionList/BaseSelectionList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ function BaseSelectionList<TItem extends ListItem>({
onEndReached={onEndReached}
onEndReachedThreshold={onEndReachedThreshold}
style={style?.listStyle}
contentContainerStyle={styles.pb3}
Comment thread
situchan marked this conversation as resolved.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR introduced a regression (see #82415). Adding contentContainerStyle={styles.pb3} to BaseSelectionList without updating getSelectionListPopoverHeight caused filter popovers (View, Status, Type) on the Reports page to show an unnecessary scrollbar. Fixed in #82634.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apologies for the multiple comments — GitHub is behaving weirdly at the moment.

initialScrollIndex={initialFocusedIndex}
onScrollBeginDrag={onScrollBeginDrag}
maintainVisibleContentPosition={{disabled: disableMaintainingScrollPosition}}
Expand Down
4 changes: 2 additions & 2 deletions src/components/SelectionList/ListItem/TableListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,11 @@ function TableListItem<TItem extends ListItem>({
isFocused ? styles.sidebarLinkActiveText : styles.sidebarLinkText,
styles.sidebarLinkTextBold,
styles.pre,
item.alternateText ? styles.mb1 : null,
!item.shouldHideAlternateText && item.alternateText ? styles.mb1 : null,
styles.justifyContentCenter,
]}
/>
{!!item.alternateText && (
{!item.shouldHideAlternateText && !!item.alternateText && (
<TextWithTooltip
shouldShowTooltip={showTooltip}
text={item.alternateText}
Expand Down
3 changes: 3 additions & 0 deletions src/components/SelectionList/ListItem/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ type ListItem<K extends string | number = string> = {
/** Alternate text to display */
alternateText?: string | null;

/** Whether to force hide the alternate text even if it exists */
shouldHideAlternateText?: boolean;

/** Accessibility label for screen readers */
accessibilityLabel?: string;

Expand Down
24 changes: 16 additions & 8 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2384,16 +2384,24 @@ ${amount} für ${merchant} – ${date}`,
expenseRulesPage: {
title: 'Ausgabenregeln',
subtitle: 'Diese Regeln gelten für deine Ausgaben. Wenn du in einen Workspace einreichst, können die Workspace-Regeln diese gegebenenfalls außer Kraft setzen.',
findRule: 'Regel finden',
emptyRules: {title: 'Du hast noch keine Regeln erstellt', subtitle: 'Füge eine Regel hinzu, um Spesenberichte zu automatisieren.'},
changes: {
billable: (value: boolean) => `Ausgabe ${value ? 'verrechenbar' : 'nicht abrechenbar'} aktualisieren`,
category: (value: string) => `Kategorie auf „${value}“ aktualisieren`,
comment: (value: string) => `Beschreibung in „${value}“ ändern`,
merchant: (value: string) => `Händler aktualisieren auf „${value}“`,
reimbursable: (value: boolean) => `Ausgabe ${value ? 'erstattungsfähig' : 'nicht erstattungsfähig'} aktualisieren`,
report: (value: string) => `Zu einem Bericht mit dem Namen „${value}“ hinzufügen`,
tag: (value: string) => `Tag auf „${value}“ aktualisieren`,
tax: (value: string) => `Steuersatz auf ${value} aktualisieren`,
billableUpdate: (value: boolean) => `Ausgabe ${value ? 'verrechenbar' : 'nicht abrechenbar'} aktualisieren`,
categoryUpdate: (value: string) => `Kategorie auf „${value}“ aktualisieren`,
commentUpdate: (value: string) => `Beschreibung in „${value}“ ändern`,
merchantUpdate: (value: string) => `Händler aktualisieren auf „${value}“`,
reimbursableUpdate: (value: boolean) => `Ausgabe ${value ? 'erstattungsfähig' : 'nicht erstattungsfähig'} aktualisieren`,
tagUpdate: (value: string) => `Tag auf „${value}“ aktualisieren`,
taxUpdate: (value: string) => `Steuersatz auf ${value} aktualisieren`,
billable: (value: boolean) => `ausgabe ${value ? 'verrechenbar' : 'nicht abrechenbar'}`,
category: (value: string) => `kategorie auf „${value}“`,
comment: (value: string) => `beschreibung in „${value}“ ändern`,
merchant: (value: string) => `händler auf „${value}“`,
reimbursable: (value: boolean) => `ausgabe ${value ? 'erstattungsfähig' : 'nicht erstattungsfähig'}`,
tag: (value: string) => `tag auf „${value}“`,
tax: (value: string) => `steuersatz auf ${value}`,
report: (value: string) => `zu einem Bericht mit dem Namen „${value}“ hinzufügen`,
},
newRule: 'Neue Regel',
addRule: {
Expand Down
24 changes: 16 additions & 8 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2358,19 +2358,27 @@ const translations = {
expenseRulesPage: {
title: 'Expense rules',
subtitle: 'These rules will apply to your expenses. If you submit to a workspace, then the workspace rules may override them.',
findRule: 'Find rule',
emptyRules: {
title: "You haven't created any rules",
subtitle: 'Add a rule to automate expense reporting.',
},
changes: {
billable: (value: boolean) => `Update expense ${value ? 'billable' : 'non-billable'}`,
category: (value: string) => `Update category to "${value}"`,
comment: (value: string) => `Change description to "${value}"`,
merchant: (value: string) => `Update merchant to "${value}"`,
reimbursable: (value: boolean) => `Update expense ${value ? 'reimbursable' : 'non-reimbursable'}`,
report: (value: string) => `Add to a report named "${value}"`,
tag: (value: string) => `Update tag to "${value}"`,
tax: (value: string) => `Update tax rate to "${value}"`,
billableUpdate: (value: boolean) => `Update expense ${value ? 'billable' : 'non-billable'}`,
categoryUpdate: (value: string) => `Update category to "${value}"`,
commentUpdate: (value: string) => `Update description to "${value}"`,
merchantUpdate: (value: string) => `Update merchant to "${value}"`,
reimbursableUpdate: (value: boolean) => `Update expense ${value ? 'reimbursable' : 'non-reimbursable'}`,
tagUpdate: (value: string) => `Update tag to "${value}"`,
taxUpdate: (value: string) => `Update tax rate to "${value}"`,
billable: (value: boolean) => `expense ${value ? 'billable' : 'non-billable'}`,
category: (value: string) => `category to "${value}"`,
comment: (value: string) => `description to "${value}"`,
merchant: (value: string) => `merchant to "${value}"`,
reimbursable: (value: boolean) => `expense ${value ? 'reimbursable' : 'non-reimbursable'}`,
tag: (value: string) => `tag to "${value}"`,
tax: (value: string) => `tax rate to "${value}"`,
report: (value: string) => `add to a report named "${value}"`,
},
newRule: 'New rule',
addRule: {
Expand Down
24 changes: 16 additions & 8 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2087,19 +2087,27 @@ ${amount} para ${merchant} - ${date}`,
expenseRulesPage: {
title: 'Reglas de gastos',
subtitle: 'Estas reglas se aplicarán a tus gastos. Si los envías a un espacio de trabajo, las reglas del espacio de trabajo pueden anularlas.',
findRule: 'Encontrar regla',
emptyRules: {
title: 'Aún no has creado ninguna regla',
subtitle: 'Añade una regla para automatizar los informes de gastos.',
},
changes: {
billable: (value: boolean) => `Actualiza el gasto a ${value ? 'facturable' : 'no facturable'}`,
category: (value: string) => `Actualiza la categoría a "${value}"`,
comment: (value: string) => `Cambia la descripción a "${value}"`,
merchant: (value: string) => `Actualiza el comercio a "${value}"`,
reimbursable: (value: boolean) => `Actualiza el gasto a ${value ? 'reembolsable' : 'no reembolsable'}`,
report: (value: string) => `Añadir a un informe llamado "${value}"`,
tag: (value: string) => `Actualiza la etiqueta a "${value}"`,
tax: (value: string) => `Actualiza la tasa de impuesto a ${value}`,
billableUpdate: (value: boolean) => `Actualiza el gasto a ${value ? 'facturable' : 'no facturable'}`,
categoryUpdate: (value: string) => `Actualiza la categoría a "${value}"`,
commentUpdate: (value: string) => `Cambia la descripción a "${value}"`,
merchantUpdate: (value: string) => `Actualiza el comercio a "${value}"`,
reimbursableUpdate: (value: boolean) => `Actualiza el gasto a ${value ? 'reembolsable' : 'no reembolsable'}`,
tagUpdate: (value: string) => `Actualiza la etiqueta a "${value}"`,
taxUpdate: (value: string) => `Actualiza la tasa de impuesto a ${value}`,
billable: (value: boolean) => `el gasto a ${value ? 'facturable' : 'no facturable'}`,
category: (value: string) => `la categoría a "${value}"`,
comment: (value: string) => `la descripción a "${value}"`,
merchant: (value: string) => `el comercio a "${value}"`,
reimbursable: (value: boolean) => `el gasto a ${value ? 'reembolsable' : 'no reembolsable'}`,
tag: (value: string) => `la etiqueta a "${value}"`,
tax: (value: string) => `la tasa de impuesto a ${value}`,
report: (value: string) => `añadir a un informe llamado "${value}"`,
},
newRule: 'Nueva regla',
addRule: {
Expand Down
24 changes: 16 additions & 8 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2388,16 +2388,24 @@ ${amount} pour ${merchant} - ${date}`,
expenseRulesPage: {
title: 'Règles de dépenses',
subtitle: 'Ces règles s’appliqueront à vos notes de frais. Si vous soumettez à un espace de travail, alors les règles de l’espace de travail peuvent les remplacer.',
findRule: 'Trouver règle',
emptyRules: {title: 'Vous n’avez créé aucune règle', subtitle: 'Ajouter une règle pour automatiser la préparation des notes de frais.'},
changes: {
billable: (value: boolean) => `Mettre à jour la dépense ${value ? 'facturable' : 'non facturable'}`,
category: (value: string) => `Mettre à jour la catégorie en « ${value} »`,
comment: (value: string) => `Modifier la description en « ${value} »`,
merchant: (value: string) => `Mettre à jour le marchand en « ${value} »`,
reimbursable: (value: boolean) => `Mettre à jour la dépense ${value ? 'remboursable' : 'non remboursable'}`,
report: (value: string) => `Ajouter à un rapport nommé « ${value} »`,
tag: (value: string) => `Mettre à jour le tag sur « ${value} »`,
tax: (value: string) => `Mettre à jour le taux de taxe à ${value}`,
billableUpdate: (value: boolean) => `Mettre à jour la dépense ${value ? 'facturable' : 'non facturable'}`,
categoryUpdate: (value: string) => `Mettre à jour la catégorie en « ${value} »`,
commentUpdate: (value: string) => `Modifier la description en « ${value} »`,
merchantUpdate: (value: string) => `Mettre à jour le marchand en « ${value} »`,
reimbursableUpdate: (value: boolean) => `Mettre à jour la dépense ${value ? 'remboursable' : 'non remboursable'}`,
tagUpdate: (value: string) => `Mettre à jour le tag sur « ${value} »`,
taxUpdate: (value: string) => `Mettre à jour le taux de taxe à ${value}`,
billable: (value: boolean) => `à jour la dépense ${value ? 'facturable' : 'non facturable'}`,
category: (value: string) => `à jour la catégorie en « ${value} »`,
comment: (value: string) => `la description en « ${value} »`,
merchant: (value: string) => `à jour le marchand en « ${value} »`,
reimbursable: (value: boolean) => `à jour la dépense ${value ? 'remboursable' : 'non remboursable'}`,
tag: (value: string) => `à jour le tag sur « ${value} »`,
tax: (value: string) => `à jour le taux de taxe à ${value}`,
report: (value: string) => `ajouter à un rapport nommé « ${value} »`,
},
newRule: 'Nouvelle règle',
addRule: {
Expand Down
24 changes: 16 additions & 8 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2382,15 +2382,23 @@ ${amount} per ${merchant} - ${date}`,
title: 'Regole spesa',
subtitle: 'Queste regole si applicheranno alle tue spese. Se le invii a uno spazio di lavoro, le regole dello spazio di lavoro potrebbero sostituirle.',
emptyRules: {title: 'Non hai creato alcuna regola', subtitle: 'Aggiungi una regola per automatizzare la rendicontazione delle spese.'},
findRule: 'Trova regola',
changes: {
billable: (value: boolean) => `Aggiorna spesa ${value ? 'fatturabile' : 'non fatturabile'}`,
category: (value: string) => `Aggiorna categoria in "${value}"`,
comment: (value: string) => `Modifica la descrizione in "${value}"`,
merchant: (value: string) => `Aggiorna esercente in "${value}"`,
reimbursable: (value: boolean) => `Aggiorna la spesa ${value ? 'rimborsabile' : 'non rimborsabile'}`,
report: (value: string) => `Aggiungi a un report chiamato «${value}»`,
tag: (value: string) => `Aggiorna etichetta in "${value}"`,
tax: (value: string) => `Aggiorna l’aliquota fiscale a ${value}`,
billableUpdate: (value: boolean) => `Aggiorna spesa ${value ? 'fatturabile' : 'non fatturabile'}`,
categoryUpdate: (value: string) => `Aggiorna categoria in "${value}"`,
commentUpdate: (value: string) => `Modifica la descrizione in "${value}"`,
merchantUpdate: (value: string) => `Aggiorna esercente in "${value}"`,
reimbursableUpdate: (value: boolean) => `Aggiorna la spesa ${value ? 'rimborsabile' : 'non rimborsabile'}`,
tagUpdate: (value: string) => `Aggiorna etichetta in "${value}"`,
taxUpdate: (value: string) => `Aggiorna l’aliquota fiscale a ${value}`,
billable: (value: boolean) => `spesa ${value ? 'fatturabile' : 'non fatturabile'}`,
category: (value: string) => `categoria in "${value}"`,
comment: (value: string) => `la descrizione in "${value}"`,
merchant: (value: string) => `esercente in "${value}"`,
reimbursable: (value: boolean) => `la spesa ${value ? 'rimborsabile' : 'non rimborsabile'}`,
tag: (value: string) => `etichetta in "${value}"`,
tax: (value: string) => `l’aliquota fiscale a ${value}`,
report: (value: string) => `aggiungi a un report chiamato «${value}»`,
},
newRule: 'Nuova regola',
addRule: {
Expand Down
22 changes: 15 additions & 7 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2370,16 +2370,24 @@ ${merchant} への ${amount}(${date})`,
expenseRulesPage: {
title: '経費ルール',
subtitle: 'これらのルールはあなたの経費に適用されます。ワークスペースに提出する場合、そのワークスペースのルールがこれらより優先されることがあります。',
findRule: 'ルールを検索',
emptyRules: {title: 'ルールがまだ作成されていません', subtitle: '経費報告を自動化するルールを追加する。'},
changes: {
billable: (value: boolean) => `経費 ${value ? '請求対象' : '請求不可'} を更新`,
category: (value: string) => `カテゴリを「${value}」に更新`,
comment: (value: string) => `説明を「${value}」に変更`,
merchant: (value: string) => `支払先を「${value}」に更新`,
reimbursable: (value: boolean) => `経費 ${value ? '精算対象' : '非精算'} を更新`,
billableUpdate: (value: boolean) => `経費 ${value ? '請求対象' : '請求不可'} を更新`,
categoryUpdate: (value: string) => `カテゴリを「${value}」に更新`,
commentUpdate: (value: string) => `説明を「${value}」に変更`,
merchantUpdate: (value: string) => `支払先を「${value}」に更新`,
reimbursableUpdate: (value: boolean) => `経費 ${value ? '精算対象' : '非精算'} を更新`,
tagUpdate: (value: string) => `タグを「${value}」に更新`,
taxUpdate: (value: string) => `税率を${value}に更新`,
billable: (value: boolean) => `経費 ${value ? '請求対象' : '請求不可'}`,
category: (value: string) => `カテゴリを「${value}」`,
comment: (value: string) => `説明を「${value}」`,
merchant: (value: string) => `支払先を「${value}」`,
reimbursable: (value: boolean) => `経費 ${value ? '精算対象' : '非精算'}`,
tag: (value: string) => `タグを「${value}」`,
tax: (value: string) => `税率を「${value}」`,
report: (value: string) => `"${value}" という名前のレポートに追加`,
tag: (value: string) => `タグを「${value}」に更新`,
tax: (value: string) => `税率を${value}に更新`,
},
newRule: '新しいルール',
addRule: {
Expand Down
Loading
Loading