/** * WordPress dependencies */ import { Button, CheckboxControl } from '@safe-wordpress/components'; import { useDispatch, useSelect } from '@safe-wordpress/data'; import { useState } from '@safe-wordpress/element'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { store as NC_DATA } from '@nelio-content/data'; import type { Role, RoleId } from '@nelio-content/types'; /** * Internal dependencies */ import { store as NC_CUSTOM_STATUSES } from '~/nelio-content-pages/settings/custom-statuses/store'; import clsx from 'clsx'; export const RolesSettings = (): JSX.Element => { const roles = useSelect( ( select ) => select( NC_DATA ).getRoles(), [] ); const attrs = useSelect( ( select ) => select( NC_CUSTOM_STATUSES ).getEditingStatus(), [] ); const { editStatus } = useDispatch( NC_CUSTOM_STATUSES ); const isAdminRole = ( role: Role ) => role.isAdmin; const [ checkedRoles, setCheckedRoles ] = useState< RoleId[] >( roles .filter( ( r ) => 'all-roles' === attrs.roles || attrs.roles.includes( r.id ) || isAdminRole( r ) ) .map( ( r ) => r.id ) ); if ( attrs.roles === 'all-roles' ) { return ( <>

{ _x( 'This status can be assigned by users of any role.', 'user', 'nelio-content' ) }

); } return ( <>

{ _x( 'Choose which user roles can assign this status to a post:', 'user', 'nelio-content' ) }

); }; // ============ // HELPER VIEWS // ============ type RoleProps = { readonly id: RoleId; readonly isChecked: boolean; readonly isDisabled: boolean; readonly onChange: ( checked: boolean ) => void; }; const Role = ( { id, isChecked, onChange, isDisabled, }: RoleProps ): JSX.Element | null => { const role = useSelect( ( select ) => select( NC_DATA ).getRole( id ), [ id ] ); if ( ! role ) { return null; } const { name } = role; return (
  • ); };