Skip to content

Commit

Permalink
Merge pull request #715 from open-formulieren/issue/4600-changing-lan…
Browse files Browse the repository at this point in the history
…guage-doesnt-translate-some-links

[open-formulieren/open-forms#4600] Language switch now triggers an page reload
  • Loading branch information
sergei-maertens authored Oct 8, 2024
2 parents 1aede3f + 10a1ea4 commit 8ba7da2
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/sdk.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class OpenForm {
languageSelectorTarget,
displayComponents = {}, // TODO: document as unstable API
useHashRouting = false,
onLanguageChange,
} = opts;

this.targetNode = targetNode;
Expand All @@ -79,6 +80,7 @@ class OpenForm {
this.lang = lang;
this.displayComponents = {...defaultDisplayComponents, ...displayComponents};
this.useHashRouting = useHashRouting;
this.onLanguageChange = typeof onLanguageChange === 'function' ? onLanguageChange : undefined;

switch (typeof languageSelectorTarget) {
case 'string': {
Expand Down Expand Up @@ -173,6 +175,10 @@ class OpenForm {
}

async onLanguageChangeDone(newLanguagecode) {
if (this.onLanguageChange) {
this.onLanguageChange(newLanguagecode);
return;
}
this.formObject = await get(this.url);
this.render();
}
Expand Down
28 changes: 28 additions & 0 deletions src/sdk.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,34 @@ describe('OpenForm', () => {
expect(within(formRoot).getAllByText('English version').length).toBeGreaterThan(0);
});

it('should call the onLanguageChange callback on language change', async () => {
mswServer.use(...apiMocks);
const formRoot = document.createElement('div');
const target = document.createElement('div');
const onLanguageChangeMock = jest.fn();

const form = new OpenForm(formRoot, {
baseUrl: BASE_URL,
basePath: '',
formId: '81a22589-abce-4147-a2a3-62e9a56685aa',
languageSelectorTarget: target,
lang: 'nl',
onLanguageChange: onLanguageChangeMock,
});

await act(async () => await form.init());

// wait for the loader to be removed when all network requests have completed
await waitForElementToBeRemoved(() => within(formRoot).getByRole('status'));
expect(target).not.toBeEmptyDOMElement();

await act(async () => {
await form.onLanguageChangeDone('en');
});

expect(onLanguageChangeMock).toBeCalledWith('en');
});

it('should correctly set the formUrl', () => {
mswServer.use(...apiMocks);
const formRoot = document.createElement('div');
Expand Down

0 comments on commit 8ba7da2

Please sign in to comment.