index.js
2 years ago
useAuthors.js
3 years ago
useDebounceState.js
4 years ago
useDeviceAttributes.js
2 years ago
useDeviceType.js
2 years ago
useInnerBlocksCount.js
4 years ago
useRecordsReducer.js
3 years ago
useSelectedBlockElements.js
2 years ago
useStyleIndicator.js
2 years ago
useTaxonomies.js
4 years ago
useTaxonomyRecords.js
3 years ago
useStyleIndicator.js
35 lines
| 1 | import { useReducer, useMemo, useRef, useEffect } from '@wordpress/element'; |
| 2 | import { applyFilters } from '@wordpress/hooks'; |
| 3 | |
| 4 | function reducer( state, action ) { |
| 5 | return { |
| 6 | ...state, |
| 7 | [ action.type ]: action.value, |
| 8 | }; |
| 9 | } |
| 10 | |
| 11 | export function useStyleIndicator( computedStyles, panelControls, content = '', deviceAttributes = {} ) { |
| 12 | const [ controlGlobalStyle, dispatchControlGlobalStyle ] = useReducer( reducer, panelControls ); |
| 13 | |
| 14 | const styleSources = applyFilters( |
| 15 | 'generateblocks.editor.panel.computedStyleSources', |
| 16 | {}, |
| 17 | computedStyles, |
| 18 | Object.keys( controlGlobalStyle ), |
| 19 | deviceAttributes, |
| 20 | ); |
| 21 | const hasGlobalStyle = useMemo( () => { |
| 22 | return Object.values( controlGlobalStyle ).some( ( control ) => control === true ); |
| 23 | }, [ controlGlobalStyle ] ); |
| 24 | |
| 25 | const prevContentLength = useRef( 0 ); |
| 26 | const currentContentLength = content ? content.length : 0; |
| 27 | const contentWasUpdated = prevContentLength.current !== currentContentLength; |
| 28 | |
| 29 | useEffect( () => { |
| 30 | prevContentLength.current = currentContentLength; |
| 31 | }, [ content ] ); |
| 32 | |
| 33 | return { dispatchControlGlobalStyle, styleSources, hasGlobalStyle, contentWasUpdated }; |
| 34 | } |
| 35 |