Skip to content

Commit db7fd7b

Browse files
authored
Merge pull request Expensify#65827 from allgandalf/fixMultiTagIssues
Fix copy text for import tags and remove redundant tag count for dependent tags
2 parents 4cb61d3 + 5b1d71a commit db7fd7b

14 files changed

Lines changed: 59 additions & 7 deletions

File tree

src/CONST/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ const CONST = {
260260
// Allowed extensions for spreadsheets import
261261
ALLOWED_SPREADSHEET_EXTENSIONS: ['xls', 'xlsx', 'csv', 'txt'],
262262

263+
// Allowed extensions for multilevel tag spreadsheets
264+
MULTILEVEL_TAG_ALLOWED_SPREADSHEET_EXTENSIONS: ['csv', 'tsv'],
265+
263266
// Allowed extensions for text files that are used as spreadsheets
264267
TEXT_SPREADSHEET_EXTENSIONS: ['txt', 'csv'],
265268

src/components/HTMLEngineProvider/BaseHTMLEngineProvider.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ function BaseHTMLEngineProvider({textSelectable = false, children, enableExperim
5858
},
5959
contentModel: HTMLContentModel.block,
6060
}),
61+
'muted-link': HTMLElementModel.fromCustomModel({
62+
tagName: 'muted-link',
63+
mixedUAStyles: {...styles.subTextFileUpload, ...styles.textSupporting},
64+
contentModel: HTMLContentModel.block,
65+
}),
6166
'muted-text': HTMLElementModel.fromCustomModel({
6267
tagName: 'muted-text',
6368
mixedUAStyles: {...styles.colorMuted, ...styles.mb0},
@@ -156,6 +161,7 @@ function BaseHTMLEngineProvider({textSelectable = false, children, enableExperim
156161
styles.h1,
157162
styles.blockquote,
158163
styles.onlyEmojisTextLineHeight,
164+
styles.subTextFileUpload,
159165
],
160166
);
161167
/* eslint-enable @typescript-eslint/naming-convention */

src/components/ImportSpreadsheet.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import FilePicker from './FilePicker';
2424
import HeaderWithBackButton from './HeaderWithBackButton';
2525
import * as Expensicons from './Icon/Expensicons';
2626
import ImageSVG from './ImageSVG';
27+
import RenderHTML from './RenderHTML';
2728
import ScreenWrapper from './ScreenWrapper';
2829
import Text from './Text';
2930

@@ -123,6 +124,20 @@ function ImportSpreadsheet({backTo, goTo}: ImportSpreadsheetProps) {
123124
});
124125
};
125126

127+
const getTextForImportModal = () => {
128+
let text = '';
129+
if (spreadsheet?.isImportingMultiLevelTags) {
130+
text = isSmallScreenWidth ? translate('spreadsheet.chooseSpreadsheetMultiLevelTag') : translate('spreadsheet.dragAndDropMultiLevelTag');
131+
} else {
132+
text = isSmallScreenWidth ? translate('spreadsheet.chooseSpreadsheet') : translate('spreadsheet.dragAndDrop');
133+
}
134+
return text;
135+
};
136+
137+
const acceptableFileTypes = spreadsheet?.isImportingMultiLevelTags
138+
? CONST.MULTILEVEL_TAG_ALLOWED_SPREADSHEET_EXTENSIONS.map((extension) => `.${extension}`).join(',')
139+
: CONST.ALLOWED_SPREADSHEET_EXTENSIONS.map((extension) => `.${extension}`).join(',');
140+
126141
const desktopView = (
127142
<>
128143
<View onLayout={({nativeEvent}) => setFileTopPosition(PixelRatio.roundToNearestPixel((nativeEvent.layout as DOMRect).top))}>
@@ -139,12 +154,10 @@ function ImportSpreadsheet({backTo, goTo}: ImportSpreadsheetProps) {
139154
// eslint-disable-next-line react-compiler/react-compiler, react/jsx-props-no-spreading
140155
{...panResponder.panHandlers}
141156
>
142-
<Text style={[styles.textFileUpload, styles.mb1]}>{translate('spreadsheet.upload')}</Text>
143-
<Text style={[styles.subTextFileUpload, styles.textSupporting]}>
144-
{isSmallScreenWidth ? translate('spreadsheet.chooseSpreadsheet') : translate('spreadsheet.dragAndDrop')}
145-
</Text>
157+
<Text style={[styles.textFileUpload, styles.mb1]}>{spreadsheet?.isImportingMultiLevelTags ? translate('spreadsheet.import') : translate('spreadsheet.upload')}</Text>
158+
<RenderHTML html={getTextForImportModal()} />
146159
</View>
147-
<FilePicker acceptableFileTypes={CONST.ALLOWED_SPREADSHEET_EXTENSIONS.map((extension) => `.${extension}`).join(',')}>
160+
<FilePicker acceptableFileTypes={acceptableFileTypes}>
148161
{({openPicker}) => (
149162
<Button
150163
success

src/languages/de.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,8 +924,11 @@ const translations = {
924924
},
925925
spreadsheet: {
926926
upload: 'Eine Tabelle hochladen',
927+
import: 'Tabellenkalkulation importieren',
927928
dragAndDrop: 'Ziehen Sie Ihre Tabelle hierher oder wählen Sie unten eine Datei aus. Unterstützte Formate: .csv, .txt, .xls und .xlsx.',
929+
dragAndDropMultiLevelTag: `<muted-link>Ziehen Sie Ihre Tabelle hierher oder wählen Sie unten eine Datei aus. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Erfahren Sie mehr</a> über unterstützte Dateiformate.</muted-link>`,
928930
chooseSpreadsheet: 'Wählen Sie eine Tabellenkalkulationsdatei zum Importieren aus. Unterstützte Formate: .csv, .txt, .xls und .xlsx.',
931+
chooseSpreadsheetMultiLevelTag: `<muted-link>Wählen Sie eine Tabellenkalkulationsdatei zum Importieren aus. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Erfahren Sie mehr</a> über unterstützte Dateiformate.</muted-link>`,
929932
fileContainsHeader: 'Datei enthält Spaltenüberschriften',
930933
column: ({name}: SpreadSheetColumnParams) => `Spalte ${name}`,
931934
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `Ups! Ein erforderliches Feld ("${fieldName}") wurde nicht zugeordnet. Bitte überprüfen und erneut versuchen.`,

src/languages/en.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,8 +912,11 @@ const translations = {
912912
},
913913
spreadsheet: {
914914
upload: 'Upload a spreadsheet',
915+
import: 'Import spreadsheet',
915916
dragAndDrop: 'Drag and drop your spreadsheet here, or choose a file below. Supported formats: .csv, .txt, .xls, and .xlsx.',
917+
dragAndDropMultiLevelTag: `<muted-link>Drag and drop your spreadsheet here, or choose a file below. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Learn more</a> about supported file formats.</muted-link>`,
916918
chooseSpreadsheet: 'Select a spreadsheet file to import. Supported formats: .csv, .txt, .xls, and .xlsx.',
919+
chooseSpreadsheetMultiLevelTag: `<muted-link>Select a spreadsheet file to import. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Learn more</a> about supported file formats.</muted-link>`,
917920
fileContainsHeader: 'File contains column headers',
918921
column: ({name}: SpreadSheetColumnParams) => `Column ${name}`,
919922
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `Oops! A required field ("${fieldName}") hasn't been mapped. Please review and try again.`,

src/languages/es.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,8 +906,11 @@ const translations = {
906906
},
907907
spreadsheet: {
908908
upload: 'Importar',
909+
import: 'Importar hoja de cálculo',
909910
dragAndDrop: 'Arrastra y suelta un archivo de hoja de cálculo aquí',
910-
chooseSpreadsheet: 'Subir',
911+
dragAndDropMultiLevelTag: `<muted-link>Arrastra y suelta un archivo de hoja de cálculo aquí, o elige un archivo a continuación. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Aprende más</a> sobre los formatos de archivo soportados.</muted-link>`,
912+
chooseSpreadsheet: 'Elige un archivo de hoja de cálculo para importar. Los formatos soportados son .csv, .txt, .xls y .xlsx.',
913+
chooseSpreadsheetMultiLevelTag: `<muted-link>Elige un archivo de hoja de cálculo para importar. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Aprende más</a> sobre los formatos de archivo soportados.</muted-link>`,
911914
fileContainsHeader: 'El archivo contiene encabezados',
912915
column: ({name}: SpreadSheetColumnParams) => `Columna ${name}`,
913916
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `¡Vaya! Un campo obligatorio ("${fieldName}") no ha sido mapeado. Por favor, revisa e inténtalo de nuevo.`,

src/languages/fr.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,8 +927,11 @@ const translations = {
927927
},
928928
spreadsheet: {
929929
upload: 'Télécharger une feuille de calcul',
930+
import: 'Importer une feuille de calcul',
930931
dragAndDrop: 'Faites glisser et déposez votre feuille de calcul ici, ou choisissez un fichier ci-dessous. Formats pris en charge : .csv, .txt, .xls et .xlsx.',
932+
dragAndDropMultiLevelTag: `<muted-link>Faites glisser et déposez votre feuille de calcul ici, ou choisissez un fichier ci-dessous. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">En savoir plus</a> sur les formats de fichier pris en charge.</muted-link>`,
931933
chooseSpreadsheet: 'Sélectionnez un fichier de feuille de calcul à importer. Formats pris en charge : .csv, .txt, .xls et .xlsx.',
934+
chooseSpreadsheetMultiLevelTag: `<muted-link>Sélectionnez un fichier de feuille de calcul à importer. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">En savoir plus</a> sur les formats de fichier pris en charge.</muted-link>`,
932935
fileContainsHeader: 'Le fichier contient des en-têtes de colonnes',
933936
column: ({name}: SpreadSheetColumnParams) => `Colonne ${name}`,
934937
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `Oups ! Un champ requis (« ${fieldName} ») n'a pas été mappé. Veuillez vérifier et réessayer.`,

src/languages/it.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,8 +922,11 @@ const translations = {
922922
},
923923
spreadsheet: {
924924
upload: 'Carica un foglio di calcolo',
925+
import: 'Importa foglio di calcolo',
925926
dragAndDrop: 'Trascina e rilascia il tuo foglio di calcolo qui, oppure scegli un file qui sotto. Formati supportati: .csv, .txt, .xls e .xlsx.',
927+
dragAndDropMultiLevelTag: `<muted-link>Trascina e rilascia il tuo foglio di calcolo qui, oppure scegli un file qui sotto. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Scopri di più</a> sui formati di file supportati.</muted-link>`,
926928
chooseSpreadsheet: 'Seleziona un file di foglio di calcolo da importare. Formati supportati: .csv, .txt, .xls e .xlsx.',
929+
chooseSpreadsheetMultiLevelTag: `<muted-link>Seleziona un file di foglio di calcolo da importare. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Scopri di più</a> sui formati di file supportati.</muted-link>`,
927930
fileContainsHeader: 'Il file contiene intestazioni di colonna',
928931
column: ({name}: SpreadSheetColumnParams) => `Colonna ${name}`,
929932
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `Ops! Un campo obbligatorio ("${fieldName}") non è stato mappato. Si prega di controllare e riprovare.`,

src/languages/ja.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,11 @@ const translations = {
925925
},
926926
spreadsheet: {
927927
upload: 'スプレッドシートをアップロード',
928+
import: 'スプレッドシートをインポート',
928929
dragAndDrop: 'スプレッドシートをここにドラッグ&ドロップするか、以下のファイルを選択してください。対応フォーマット: .csv, .txt, .xls, および .xlsx。',
930+
dragAndDropMultiLevelTag: `<muted-link>スプレッドシートをここにドラッグ&ドロップするか、以下のファイルを選択してください。 <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">詳細</a> をご覧ください。`,
929931
chooseSpreadsheet: 'インポートするスプレッドシートファイルを選択してください。サポートされている形式: .csv, .txt, .xls, および .xlsx。',
932+
chooseSpreadsheetMultiLevelTag: `<muted-link>インポートするスプレッドシートファイルを選択してください。 <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">詳細</a> をご覧ください。`,
930933
fileContainsHeader: 'ファイルには列ヘッダーが含まれています。',
931934
column: ({name}: SpreadSheetColumnParams) => `列 ${name}`,
932935
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `おっと!必須フィールド("${fieldName}")がマッピングされていません。確認して再試行してください。`,

src/languages/nl.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,8 +922,11 @@ const translations = {
922922
},
923923
spreadsheet: {
924924
upload: 'Upload een spreadsheet',
925+
import: 'Spreadsheet importeren',
925926
dragAndDrop: 'Sleep uw spreadsheet hierheen, of kies een bestand hieronder. Ondersteunde formaten: .csv, .txt, .xls, en .xlsx.',
927+
dragAndDropMultiLevelTag: `<muted-link>Sleep uw spreadsheet hierheen, of kies een bestand hieronder. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Lees meer</a> over ondersteunde bestandsformaten.</muted-link>`,
926928
chooseSpreadsheet: 'Selecteer een spreadsheetbestand om te importeren. Ondersteunde formaten: .csv, .txt, .xls, en .xlsx.',
929+
chooseSpreadsheetMultiLevelTag: `<muted-link>Selecteer een spreadsheetbestand om te importeren. <a href="${CONST.IMPORT_SPREADSHEET.MULTI_LEVEL_TAGS_ARTICLE_LINK}">Lees meer</a> over ondersteunde bestandsformaten.</muted-link>`,
927930
fileContainsHeader: 'Bestand bevat kolomkoppen',
928931
column: ({name}: SpreadSheetColumnParams) => `Kolom ${name}`,
929932
fieldNotMapped: ({fieldName}: SpreadFieldNameParams) => `Oeps! Een verplicht veld ("${fieldName}") is niet toegewezen. Controleer het en probeer het opnieuw.`,

0 commit comments

Comments
 (0)