|
1001 | 1001 | overflow: hidden; |
1002 | 1002 | } |
1003 | 1003 |
|
1004 | | - .admin-suggestion-header { |
1005 | | - display: flex; |
1006 | | - justify-content: space-between; |
1007 | | - align-items: center; |
1008 | | - padding: 0.5rem 0.75rem; |
1009 | | - background: rgba(201, 162, 39, 0.1); |
1010 | | - border-bottom: 1px solid rgba(201, 162, 39, 0.15); |
1011 | | - } |
1012 | | - |
1013 | 1004 | .admin-suggestion-id { |
1014 | 1005 | font-family: monospace; |
1015 | 1006 | font-size: 0.7rem; |
|
1025 | 1016 | font-weight: 600; |
1026 | 1017 | } |
1027 | 1018 |
|
| 1019 | + .admin-suggestion-file { |
| 1020 | + font-size: 0.65rem; |
| 1021 | + padding: 0.15rem 0.4rem; |
| 1022 | + border-radius: 4px; |
| 1023 | + font-weight: 600; |
| 1024 | + background: rgba(99, 102, 241, 0.2); |
| 1025 | + color: #818cf8; |
| 1026 | + } |
| 1027 | + |
| 1028 | + .admin-suggestion-header { |
| 1029 | + display: flex; |
| 1030 | + justify-content: space-between; |
| 1031 | + align-items: center; |
| 1032 | + padding: 0.5rem 0.75rem; |
| 1033 | + background: rgba(201, 162, 39, 0.1); |
| 1034 | + border-bottom: 1px solid rgba(201, 162, 39, 0.15); |
| 1035 | + gap: 0.5rem; |
| 1036 | + flex-wrap: wrap; |
| 1037 | + } |
| 1038 | + |
1028 | 1039 | .admin-suggestion-body { |
1029 | 1040 | padding: 0.75rem; |
1030 | 1041 | } |
@@ -2801,10 +2812,10 @@ <h4><i class="fas fa-clipboard-list"></i> Sugestões (<span id="cart-count">0</s |
2801 | 2812 | const suggestions = parseIssueSuggestions(issue.body); |
2802 | 2813 |
|
2803 | 2814 | // Buscar dados originais do arquivo TSV para comparação |
| 2815 | + // Passa as sugestões completas para saber de qual arquivo cada uma veio |
2804 | 2816 | let originalData = []; |
2805 | 2817 | if (suggestions.length > 0) { |
2806 | | - const suggestionIds = suggestions.map(s => s.id); |
2807 | | - originalData = await fetchOriginalTexts(suggestionIds); |
| 2818 | + originalData = await fetchOriginalTexts(suggestions); |
2808 | 2819 | } |
2809 | 2820 |
|
2810 | 2821 | const created = new Date(issue.created_at).toLocaleString('pt-BR'); |
@@ -2847,19 +2858,23 @@ <h3><i class="fas fa-clipboard-check"></i> Revisão da Issue #${issue.number}</h |
2847 | 2858 | </div> |
2848 | 2859 | <div class="admin-suggestions-list" id="admin-suggestions-list"> |
2849 | 2860 | ${suggestions.map((sug, idx) => { |
2850 | | - const orig = originalData.find(o => o.id === sug.id); |
| 2861 | + // Buscar pelo ID E arquivo para evitar conflito de IDs duplicados |
| 2862 | + const orig = originalData.find(o => o.id === sug.id && o.file === sug.file) |
| 2863 | + || originalData.find(o => o.id === sug.id); // fallback |
2851 | 2864 | const originalText = orig?.originalText || '(não encontrado)'; |
2852 | 2865 | const currentTranslation = orig?.translatedText || ''; |
| 2866 | + const sourceFile = sug.file === 'translate_words_map_en_diff.tsv' ? 'Diff' : 'Main'; |
2853 | 2867 | |
2854 | 2868 | // Só mostra "Tradução Atual" se for DIFERENTE do original (já foi traduzido) |
2855 | 2869 | const hasCurrentTranslation = currentTranslation && |
2856 | 2870 | currentTranslation.trim() !== '' && |
2857 | 2871 | currentTranslation !== originalText; |
2858 | 2872 | |
2859 | 2873 | return ` |
2860 | | - <div class="admin-suggestion-item" data-index="${idx}"> |
| 2874 | + <div class="admin-suggestion-item" data-index="${idx}" data-file="${sug.file}"> |
2861 | 2875 | <div class="admin-suggestion-header"> |
2862 | 2876 | <span class="admin-suggestion-id"><i class="fas fa-fingerprint"></i> ${sug.id}</span> |
| 2877 | + <span class="admin-suggestion-file" title="Arquivo: ${sug.file}"><i class="fas fa-file-alt"></i> ${sourceFile}</span> |
2863 | 2878 | <span class="admin-suggestion-index">#${idx + 1} de ${suggestions.length}</span> |
2864 | 2879 | </div> |
2865 | 2880 | <div class="admin-suggestion-body"> |
@@ -2917,41 +2932,62 @@ <h3><i class="fas fa-clipboard-check"></i> Revisão da Issue #${issue.number}</h |
2917 | 2932 | } |
2918 | 2933 | } |
2919 | 2934 |
|
2920 | | - // Busca textos originais para comparação (de mainData E diffData) |
2921 | | - async function fetchOriginalTexts(ids) { |
| 2935 | + // Busca textos originais para comparação - CONSIDERA O ARQUIVO DE ORIGEM |
| 2936 | + // Recebe array de sugestões (com campo 'file') para buscar no array correto |
| 2937 | + async function fetchOriginalTexts(suggestions) { |
2922 | 2938 | const results = []; |
2923 | 2939 |
|
2924 | 2940 | // Se os dados não foram carregados ainda, aguardar carregamento |
2925 | 2941 | if (mainData.length === 0 && diffData.length === 0) { |
2926 | | - // Tentar carregar agora |
2927 | 2942 | await loadTranslationsIfNeeded(); |
2928 | 2943 | } |
2929 | 2944 |
|
2930 | | - // Buscar em AMBOS os arrays (main e diff) |
2931 | | - // pois a sugestão pode vir de qualquer arquivo |
2932 | | - const allLoadedData = [...mainData, ...diffData]; |
| 2945 | + // Mapear nome do arquivo para array de dados |
| 2946 | + const fileNameToData = { |
| 2947 | + 'translate_words_map_en.tsv': mainData, |
| 2948 | + 'translate_words_map_en_diff.tsv': diffData |
| 2949 | + }; |
2933 | 2950 |
|
2934 | | - if (allLoadedData.length > 0) { |
2935 | | - ids.forEach(id => { |
2936 | | - const found = allLoadedData.find(item => item.id === id); |
2937 | | - if (found) { |
| 2951 | + suggestions.forEach(sug => { |
| 2952 | + const id = sug.id; |
| 2953 | + const fileName = sug.file; |
| 2954 | + |
| 2955 | + // Determinar em qual array buscar baseado no arquivo da sugestão |
| 2956 | + let targetData = fileNameToData[fileName]; |
| 2957 | + |
| 2958 | + // Fallback: se não encontrar ou arquivo não especificado, busca em ambos |
| 2959 | + if (!targetData || targetData.length === 0) { |
| 2960 | + targetData = [...mainData, ...diffData]; |
| 2961 | + } |
| 2962 | + |
| 2963 | + const found = targetData.find(item => item.id === id); |
| 2964 | + if (found) { |
| 2965 | + results.push({ |
| 2966 | + id: found.id, |
| 2967 | + file: fileName, |
| 2968 | + originalText: found.originalText, |
| 2969 | + translatedText: found.translatedText |
| 2970 | + }); |
| 2971 | + } else { |
| 2972 | + // Não encontrado no arquivo específico - tentar no outro como fallback |
| 2973 | + const allData = [...mainData, ...diffData]; |
| 2974 | + const fallbackFound = allData.find(item => item.id === id); |
| 2975 | + if (fallbackFound) { |
| 2976 | + results.push({ |
| 2977 | + id: fallbackFound.id, |
| 2978 | + file: fileName, |
| 2979 | + originalText: fallbackFound.originalText, |
| 2980 | + translatedText: fallbackFound.translatedText |
| 2981 | + }); |
| 2982 | + } else { |
| 2983 | + // Realmente não encontrado |
2938 | 2984 | results.push({ |
2939 | | - id: found.id, |
2940 | | - originalText: found.originalText, |
2941 | | - translatedText: found.translatedText |
| 2985 | + id: id, |
| 2986 | + file: fileName, |
| 2987 | + originalText: '(não encontrado)', |
| 2988 | + translatedText: '' |
2942 | 2989 | }); |
2943 | 2990 | } |
2944 | | - }); |
2945 | | - } |
2946 | | - |
2947 | | - // Se ainda não encontrou, retornar placeholders |
2948 | | - ids.forEach(id => { |
2949 | | - if (!results.find(r => r.id === id)) { |
2950 | | - results.push({ |
2951 | | - id: id, |
2952 | | - originalText: '(carregando...)', |
2953 | | - translatedText: '' |
2954 | | - }); |
2955 | 2991 | } |
2956 | 2992 | }); |
2957 | 2993 |
|
|
0 commit comments