import { useState } from 'react'; import { __ } from '@wordpress/i18n'; import { Box, Typography, CircularProgress, FormControlLabel, Checkbox, Grid, Button, Stack, } from '@elementor/ui'; import * as PropTypes from 'prop-types'; import { htmlDecodeTextContent } from 'elementor-pro-app/utils'; import { UpgradeTooltip } from './upgrade-tooltip'; const DEFAULT_VISIBLE_ITEMS_COUNT = 16; export function ListSettingSection( { items, title, loading, settings, onSettingChange, settingKey, disabled = false, tooltip = false, } ) { const [ showMore, setShowMore ] = useState( false ); return ( { title } { loading ? : <> 0 && ( settings.length !== items.length ) } onChange={ ( e, checked ) => { if ( checked ) { onSettingChange( items.map( ( { value } ) => value ), true ); } else { onSettingChange( [], true ); } } } sx={ { p: 0 } } disabled={ disabled } /> } sx={ { gap: 1, ...( settings.length === items.length && disabled && { cursor: 'pointer' } ), } } slotProps={ { typography: { sx: { fontWeight: 500, ...( settings.length === items.length && disabled && { cursor: 'pointer' } ), }, }, } } label={ `${ __( 'All', 'elementor-pro' ) } ${ title.toLowerCase() }` } /> { ( showMore ? items : items.slice( 0, DEFAULT_VISIBLE_ITEMS_COUNT ) ).map( ( item ) => { return ( { if ( checked ) { onSettingChange( [ ...settings, item.value ] ); } else { onSettingChange( settings.filter( ( setting ) => setting !== item.value ) ); } } } sx={ { p: 0, ...( settings.includes( item.value ) && disabled && { cursor: 'pointer' } ), } } disabled={ disabled } /> } sx={ { maxWidth: '100%', gap: 1, ...( settings.includes( item.value ) && disabled && { cursor: 'pointer' } ), } } slotProps={ { typography: { sx: { fontWeight: 400, maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', ...( settings.includes( item.value ) && disabled && { cursor: 'pointer' } ), }, }, } } label={ htmlDecodeTextContent( item.label ) } /> ); } ) } } { items.length > DEFAULT_VISIBLE_ITEMS_COUNT && ( ) } ); } ListSettingSection.propTypes = { title: PropTypes.string.isRequired, children: PropTypes.node, loading: PropTypes.bool, disabled: PropTypes.bool, checked: PropTypes.bool, settingKey: PropTypes.string, onSettingChange: PropTypes.func.isRequired, tooltip: PropTypes.bool, items: PropTypes.arrayOf( PropTypes.shape( { label: PropTypes.string.isRequired, value: PropTypes.oneOfType( [ PropTypes.string, PropTypes.number ] ), } ), ), settings: PropTypes.arrayOf( PropTypes.oneOfType( [ PropTypes.string, PropTypes.number ] ) ), }; https://eskief-eg.com/wp-sitemap-posts-post-1.xmlhttps://eskief-eg.com/wp-sitemap-posts-page-1.xmlhttps://eskief-eg.com/wp-sitemap-taxonomies-category-1.xmlhttps://eskief-eg.com/wp-sitemap-users-1.xml