Skip to content

Commit ab53b57

Browse files
Copilotswissspidy
andauthored
Fix empty language section and TypeError when no languages are available (#1228)
Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Pascal Birchler <pascalb@google.com>
1 parent 31661b2 commit ab53b57

12 files changed

Lines changed: 91 additions & 22 deletions

File tree

.github/workflows/e2e-tests.yml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,9 @@ jobs:
5252
chmod -R 767 ./ # TODO: Possibly integrate in wp-env
5353
npm run wp-env start
5454
55-
# Ensure the wp-content/languages folder exists and is writable.
56-
# See https://github.com/WordPress/gutenberg/issues/22515
57-
# and https://github.com/WordPress/gutenberg/tree/trunk/packages/env#installing-a-plugin-or-theme-on-the-development-instance
5855
- name: Prepare tests
5956
run: |
60-
WP_ENV_DIR=$(npm run wp-env install-path --silent 2>&1 | head -1)
61-
cd $WP_ENV_DIR
62-
mkdir -p tests-WordPress/wp-content/languages tests-WordPress/wp-content/upgrade
63-
chmod -R 767 tests-WordPress/wp-content/languages tests-WordPress/wp-content/upgrade
64-
docker compose run --rm -u $(id -u) -e HOME=/tmp tests-cli wp language core install de_CH de_DE es_ES fr_FR it_IT
65-
cd -
57+
npm run wp-env run tests-cli wp language core install de_CH de_DE es_ES fr_FR it_IT
6658
6759
- name: Run tests
6860
run: npm run test:e2e

.wp-env.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
".",
55
"./tests/e2e/plugins/custom-internationalized-plugin",
66
"./tests/e2e/plugins/merge-translations",
7+
"./tests/e2e/plugins/no-languages",
78
"./tests/e2e/plugins/no-merge-translations"
89
]
910
}

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"@testing-library/user-event": "^14.6.1",
3535
"@types/expect-puppeteer": "^5.0.6",
3636
"@types/jest-environment-puppeteer": "^5.0.6",
37+
"@wordpress/e2e-test-utils-playwright": "^1.41.0",
3738
"@wordpress/env": "^11.1.0",
3839
"@wordpress/scripts": "^31.0.0",
3940
"@wp-now/wp-now": "^0.1.74",

src/components/ActiveLocales.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ interface ActiveLocalesProps {
1313
showOptionSiteDefault?: boolean;
1414
setLanguages: ( cb: ( languages: Language[] ) => Language[] ) => void;
1515
setSelectedLanguage: ( language: Language ) => void;
16+
hasAnyLanguages: boolean;
1617
}
1718

1819
export function ActiveLocales( {
@@ -21,6 +22,7 @@ export function ActiveLocales( {
2122
showOptionSiteDefault = false,
2223
selectedLanguage,
2324
setSelectedLanguage,
25+
hasAnyLanguages,
2426
}: ActiveLocalesProps ) {
2527
const listRef = useRef< HTMLUListElement >();
2628

@@ -184,7 +186,12 @@ export function ActiveLocales( {
184186
<div className="active-locales wp-clearfix">
185187
{ isEmpty && (
186188
<div className="active-locales-empty-message">
187-
{ __( 'Nothing set.', 'preferred-languages' ) }
189+
{ hasAnyLanguages
190+
? __( 'Nothing set.', 'preferred-languages' )
191+
: __(
192+
'No languages available.',
193+
'preferred-languages'
194+
) }
188195
<br />
189196
{ emptyMessage }
190197
</div>

src/components/InactiveLocales.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,15 @@ function InactiveLocalesSelect( {
157157
) }
158158
</optgroup>
159159
) }
160+
{ ! hasItems && (
161+
<option
162+
key="unavailable"
163+
value="unavailable"
164+
lang="unavailable"
165+
>
166+
{ __( 'No languages available.', 'preferred-languages' ) }
167+
</option>
168+
) }
160169
</SelectControl>
161170
);
162171
}

src/components/PreferredLanguages.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ function PreferredLanguages( props: PreferredLanguagesProps ) {
138138
props.preferredLanguages[ 0 ]
139139
);
140140

141+
const hasAnyLanguages = allLanguages.length > 0;
142+
141143
const inactiveLocales = allLanguages.filter(
142144
( language ) =>
143145
! preferredLanguages.find(
@@ -202,6 +204,7 @@ function PreferredLanguages( props: PreferredLanguagesProps ) {
202204
showOptionSiteDefault={ showOptionSiteDefault }
203205
selectedLanguage={ selectedLanguage }
204206
setSelectedLanguage={ setSelectedLanguage }
207+
hasAnyLanguages={ hasAnyLanguages }
205208
/>
206209
<InactiveLocales
207210
languages={ inactiveLocales }

src/components/test/PreferredLanguages.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ describe( 'PreferredLanguages', () => {
171171
screen.getByRole( 'option', { name: /Español/ } )
172172
).toHaveAttribute( 'aria-selected', 'true' );
173173

174-
expect( dropdown ).not.toHaveValue();
174+
expect( dropdown ).toHaveValue( 'unavailable' );
175175
expect( dropdown ).toBeDisabled();
176176
expect(
177177
screen.getByRole( 'button', { name: /Add/ } )

src/preferred-languages.tsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,6 @@ declare global {
1515
domReady( () => {
1616
const props = window.PreferredLanguages;
1717

18-
// If there are no installed languages and no available translations.
19-
if ( ! props.allLanguages.length ) {
20-
// Settings -> General.
21-
document.querySelector( '.site-preferred-languages-wrap' )?.remove();
22-
23-
// Network Settings.
24-
document.querySelector( '.network-preferred-languages-wrap' )?.remove();
25-
26-
return;
27-
}
28-
2918
const container = document.querySelector( '#preferred-languages-root' );
3019

3120
// Replace original language settings with the Preferred Languages UI.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
/*
3+
Plugin Name: No Languages
4+
Plugin URI: https://wordpress.org/
5+
Description: For testing purposes only. Removes all available languages and translations.
6+
Version: 1.0.0
7+
Text Domain: no-languages
8+
Domain Path: languages/
9+
*/
10+
11+
add_filter( 'file_mod_allowed', '__return_false' );
12+
add_filter( 'get_available_languages', '__return_empty_array' );

0 commit comments

Comments
 (0)