kollapsminoriteten/wp-content/plugins/jetpack/modules/search/customberg/hooks/use-search-options.js

76 lines
2.0 KiB
JavaScript
Raw Normal View History

2021-09-07 21:40:48 +02:00
/**
* External dependencies
*/
import { useMemo } from 'react';
/**
* WordPress dependencies
*/
import { useEntityProp } from '@wordpress/core-data';
/**
* Fetches values and setters for various search configuration values.
*
* @returns {object} values and setters
*/
export default function useSearchOptions() {
const [ theme, setTheme ] = useEntityProp( 'root', 'site', 'jetpack_search_color_theme' );
const [ resultFormat, setResultFormat ] = useEntityProp(
'root',
'site',
'jetpack_search_result_format'
);
const [ sort, setSort ] = useEntityProp( 'root', 'site', 'jetpack_search_default_sort' );
const [ trigger, setTrigger ] = useEntityProp( 'root', 'site', 'jetpack_search_overlay_trigger' );
const [ color, setColor ] = useEntityProp( 'root', 'site', 'jetpack_search_highlight_color' );
const [ sortEnabled, setSortEnabled ] = useEntityProp(
'root',
'site',
'jetpack_search_enable_sort'
);
const [ infiniteScroll, setInfiniteScroll ] = useEntityProp(
'root',
'site',
'jetpack_search_inf_scroll'
);
const [ showLogo, setShowLogo ] = useEntityProp(
'root',
'site',
'jetpack_search_show_powered_by'
);
const [ excludedPostTypesCsv, setExcludedPostTypesCsv ] = useEntityProp(
'root',
'site',
'jetpack_search_excluded_post_types'
);
// Excluded Post Types is stored as a CSV string in site options. Convert into array of strings.
// Caveat: csv can be an empty string, which can produces [ '' ] if only csv.split is used.
const excludedPostTypes = useMemo(
() => excludedPostTypesCsv?.split( ',' ).filter( type => type?.length > 0 ),
[ excludedPostTypesCsv ]
);
const setExcludedPostTypes = postTypesArr => setExcludedPostTypesCsv( postTypesArr.join( ',' ) );
return {
color,
excludedPostTypes,
infiniteScroll,
resultFormat,
setColor,
setExcludedPostTypes,
setInfiniteScroll,
setResultFormat,
setShowLogo,
setSort,
setSortEnabled,
setTheme,
setTrigger,
showLogo,
sort,
sortEnabled,
theme,
trigger,
};
}