-
Notifications
You must be signed in to change notification settings - Fork 4.3k
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
Add preferences modal to site editor #39485
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,22 @@ | ||||||||||
/** | ||||||||||
* WordPress dependencies | ||||||||||
*/ | ||||||||||
import { useSelect, useDispatch } from '@wordpress/data'; | ||||||||||
import { ___unstablePreferencesModalBaseOption as BaseOption } from '@wordpress/interface'; | ||||||||||
import { store as preferencesStore } from '@wordpress/preferences'; | ||||||||||
|
||||||||||
export default function EnableFeature( props ) { | ||||||||||
const { featureName, ...remainingProps } = props; | ||||||||||
const isChecked = useSelect( ( select ) => | ||||||||||
select( preferencesStore ).get( 'core/edit-site', featureName ) | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Missing dependency. |
||||||||||
); | ||||||||||
const { toggle } = useDispatch( preferencesStore ); | ||||||||||
const onChange = () => toggle( 'core/edit-site', featureName ); | ||||||||||
return ( | ||||||||||
<BaseOption | ||||||||||
onChange={ onChange } | ||||||||||
isChecked={ isChecked } | ||||||||||
{ ...remainingProps } | ||||||||||
/> | ||||||||||
); | ||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/** | ||
* WordPress dependencies | ||
*/ | ||
import { | ||
PreferencesModal, | ||
PreferencesModalTabs, | ||
PreferencesModalSection, | ||
} from '@wordpress/interface'; | ||
import { useMemo } from '@wordpress/element'; | ||
import { __ } from '@wordpress/i18n'; | ||
|
||
/** | ||
* Internal dependencies | ||
*/ | ||
import EnableFeature from './enable-feature'; | ||
|
||
export default function EditSitePreferencesModal( { | ||
isModalActive, | ||
toggleModal, | ||
} ) { | ||
const sections = useMemo( () => [ | ||
{ | ||
name: 'general', | ||
tabLabel: __( 'General' ), | ||
content: ( | ||
<PreferencesModalSection | ||
title={ __( 'Appearance' ) } | ||
description={ __( | ||
'Customize options related to the block editor interface and editing flow.' | ||
) } | ||
> | ||
<EnableFeature | ||
featureName="focusMode" | ||
help={ __( | ||
'Highlights the current block and fades other content.' | ||
) } | ||
label={ __( 'Spotlight mode' ) } | ||
/> | ||
</PreferencesModalSection> | ||
), | ||
}, | ||
{ | ||
name: 'blocks', | ||
tabLabel: __( 'Blocks' ), | ||
content: ( | ||
<PreferencesModalSection | ||
title={ __( 'Block interactions' ) } | ||
description={ __( | ||
'Customize how you interact with blocks in the block library and editing canvas.' | ||
) } | ||
> | ||
<EnableFeature | ||
featureName="keepCaretInsideBlock" | ||
help={ __( | ||
'Aids screen readers by stopping text caret from leaving blocks.' | ||
) } | ||
label={ __( 'Contain text cursor inside block' ) } | ||
/> | ||
</PreferencesModalSection> | ||
), | ||
}, | ||
] ); | ||
if ( ! isModalActive ) { | ||
return null; | ||
} | ||
return ( | ||
<PreferencesModal closeModal={ toggleModal }> | ||
<PreferencesModalTabs sections={ sections } /> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It does still feel a bit empty with one setting per tab. I wonder if right now an option could be to not add the tabs until there are more settings later on, and instead render the two I don't know if the styles will work out of the box, but it might be possible to make some quick fixes there. Could be good to get some design feedback on it though. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think tabs will fill up faster now that we've modal. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should be pretty easy to get the block manager in there as well now. I think the component needs to be moved out of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, I added the second tab mainly thinking about the block manager which takes up a huge chunk of space 😄 Plus with #38317 there'll be at least one more item under Appearance soon. |
||
</PreferencesModal> | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd maybe just coerce this into a bool to be on the safe side 😄