Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Settings page to include "Other" section #6501

Merged
merged 30 commits into from
Sep 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
5621ad8
Remove mobile redirect toggle from Onboarding Wizard
delawski Jul 30, 2021
0a47e53
Add mobile redirection toggle to new Other Settings section
delawski Jul 30, 2021
e8b226f
Move `UserContextProvider` to general components directory
delawski Jul 30, 2021
5e77d90
Add `User` context and Dev Tools section to Settings page
delawski Jul 30, 2021
07b7697
Fix e2e test
delawski Jul 30, 2021
a1dfcd0
Open "Other" panel before searching for mobile redirect toggle
delawski Jul 30, 2021
041ba12
Wait for "Other" panel before attempting to click it
delawski Jul 30, 2021
490dfc9
Updated headings within the Other section of Settings
jwold Jul 30, 2021
87fc3b1
Update developer-tools.js
jwold Jul 30, 2021
0516198
Remove unused import
delawski Aug 16, 2021
f32516a
Update snapshots
delawski Aug 16, 2021
c14d740
Add unit test for loading state
delawski Aug 16, 2021
06833b6
Fix Other settings box spacing
delawski Aug 16, 2021
9948aa7
Fix E2E test
delawski Aug 16, 2021
f51a83d
Add E2E test for dev tools toggle
delawski Aug 16, 2021
bcd1e67
Apply suggestions from code review
delawski Aug 19, 2021
a7c7cf1
Update Jest snapshot
delawski Aug 19, 2021
a1f9b31
Improve dev tools toggle description
delawski Aug 20, 2021
2f7d0b5
Allow user-related changes on Options page
delawski Sep 3, 2021
ca6a642
Fix typo
pierlon Sep 3, 2021
bbadaf2
Update param description
pierlon Sep 3, 2021
39fe4b5
Merge branch 'develop' of github.com:ampproject/amp-wp into feature/5…
westonruter Sep 9, 2021
121ca24
Add missing tests for OptionsMenu
westonruter Sep 9, 2021
ba02cab
Enable mobile redirection by default
westonruter Sep 10, 2021
7162a05
Set current screen to fix test_enqueue_assets_right_hook_suffix
westonruter Sep 10, 2021
aafb4b1
Update assets/src/settings-page/developer-tools.js
delawski Sep 10, 2021
418ec3c
Update `users` resource prop and its description
delawski Sep 10, 2021
ca79001
Fix the unit test
delawski Sep 10, 2021
acfab6f
Try fixing failing E2E test
delawski Sep 10, 2021
4b3a89a
Improve prop name and description
delawski Sep 13, 2021
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
34 changes: 34 additions & 0 deletions assets/src/components/dev-tools-toggle/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* WordPress dependencies
*/
import { useContext } from '@wordpress/element';
import { __ } from '@wordpress/i18n';

/**
* Internal dependencies
*/
import { AMPSettingToggle } from '../amp-setting-toggle';
import { User } from '../user-context-provider';
import { Loading } from '../loading';

export function DevToolsToggle() {
const {
developerToolsOption,
fetchingUser,
setDeveloperToolsOption,
} = useContext( User );

if ( fetchingUser ) {
return <Loading />;
}

return (
<AMPSettingToggle
checked={ true === developerToolsOption }
title={ __( 'Enable Developer Tools', 'amp' ) }
onChange={ () => {
setDeveloperToolsOption( ! developerToolsOption );
} }
/>
);
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 90 additions & 0 deletions assets/src/components/dev-tools-toggle/test/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/**
* External dependencies
*/
import { act } from 'react-dom/test-utils';
import { create } from 'react-test-renderer';

/**
* WordPress dependencies
*/
import { render } from '@wordpress/element';

/**
* Internal dependencies
*/
import { DevToolsToggle } from '../';
import { UserContextProvider } from '../../user-context-provider';

jest.mock( '../../user-context-provider' );

let container;

describe( 'DevToolsToggle', () => {
beforeEach( () => {
container = document.createElement( 'div' );
document.body.appendChild( container );
} );

afterEach( () => {
document.body.removeChild( container );
container = null;
} );

it( 'matches snapshot', () => {
const wrapper = create(
<UserContextProvider>
<DevToolsToggle />
</UserContextProvider>,
);
expect( wrapper.toJSON() ).toMatchSnapshot();
} );

it( 'renders a loading spinner when a user data is fetched', () => {
act( () => {
render(
<UserContextProvider fetchingUser={ true }>
<DevToolsToggle />
</UserContextProvider>,
container,
);
} );
expect( container.querySelector( '.amp-spinner-container' ) ).not.toBeNull();
} );

it( 'matches snapshot for the loading state', () => {
const wrapper = create(
<UserContextProvider fetchingUser={ true }>
<DevToolsToggle />
</UserContextProvider>,
);
expect( wrapper.toJSON() ).toMatchSnapshot();
} );

it( 'can be toggled', () => {
act( () => {
render(
<UserContextProvider>
<DevToolsToggle />
</UserContextProvider>,
container,
);
} );
expect( container.querySelector( 'input:checked' ) ).toBeNull();

act(
() => {
container.querySelector( 'input' ).dispatchEvent( new global.MouseEvent( 'click' ) );
},
);

expect( container.querySelector( 'input:checked' ) ).not.toBeNull();

act(
() => {
container.querySelector( 'input' ).dispatchEvent( new global.MouseEvent( 'click' ) );
},
);

expect( container.querySelector( 'input:checked' ) ).toBeNull();
} );
} );
26 changes: 8 additions & 18 deletions assets/src/components/redirect-toggle/index.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
/**
* External dependencies
*/
import PropTypes from 'prop-types';

/**
* WordPress dependencies
*/
Expand All @@ -15,23 +10,18 @@ import { __ } from '@wordpress/i18n';
import { Options } from '../options-context-provider';
import { AMPSettingToggle } from '../amp-setting-toggle';

export function RedirectToggle( { direction = 'bottom' } ) {
export function RedirectToggle() {
const { editedOptions, updateOptions } = useContext( Options );

const { mobile_redirect: mobileRedirect } = editedOptions;

return (
<div className={ `selectable selectable--${ direction }` }>
<AMPSettingToggle
checked={ true === mobileRedirect }
title={ __( 'Redirect mobile visitors to AMP', 'amp' ) }
onChange={ () => {
updateOptions( { mobile_redirect: ! mobileRedirect } );
} }
/>
</div>
<AMPSettingToggle
checked={ true === mobileRedirect }
title={ __( 'Redirect mobile visitors to AMP', 'amp' ) }
onChange={ () => {
updateOptions( { mobile_redirect: ! mobileRedirect } );
} }
/>
);
}
RedirectToggle.propTypes = {
direction: PropTypes.oneOf( [ 'bottom', 'left' ] ),
};

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion assets/src/components/unsaved-changes-warning/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { __ } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import { User } from '../../onboarding-wizard/components/user-context-provider';
import { User } from '../user-context-provider';
import { Options } from '../options-context-provider';

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,16 @@ export const User = createContext();
/**
* MOCK.
*
* @param {Object} props
* @param {any} props.children
* @param {Object} props
* @param {any} props.children
* @param {boolean} props.fetchingUser
*/
export function UserContextProvider( { children } ) {
export function UserContextProvider( { children, fetchingUser } ) {
return (
<User.Provider value={
{
savingDeveloperToolsOption: false,
fetchingUser,
}
}>
{ children }
Expand All @@ -29,4 +31,5 @@ export function UserContextProvider( { children } ) {
}
UserContextProvider.propTypes = {
children: PropTypes.any,
fetchingUser: PropTypes.bool,
};
Loading