# extendify/2.2.2/src/Library/hooks/usePatterns.js

Extendify, version 2.2.2. 50 lines.

- Page: https://pluginprobe.com/plugins/extendify/2.2.2/code/src/Library/hooks/usePatterns.js
- Raw: https://pluginprobe.com/plugins/extendify/2.2.2/raw/src/Library/hooks/usePatterns.js
- Modified: 2024-12-19T17:43:36+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/extendify/2.2.2/code/src/Library/hooks/usePatterns.js#L10-L20`.

```javascript
import { PATTERNS_HOST } from '@constants';
import useSWRInfinite from 'swr/infinite';

const fetcher = (url) => fetch(url).then((res) => res.json());

export const usePatterns = (incomingParams) => {
	const params = {
		siteType: undefined,
		category: undefined,
		wpVersion: window.extSharedData.wpVersion,
		lang: window.extSharedData.wpLanguage || null,
		showLocalizedCopy: window.extSharedData.showLocalizedCopy || null,
		...incomingParams,
	};

	const getKey = (pageIndex, previousPageData) => {
		if (!params.category) return null;
		if (previousPageData && !previousPageData.length) return null;

		const urlParams = new URLSearchParams({ page: pageIndex + 1 });

		Object.entries(params)
			.filter(([, value]) => value !== undefined)
			.forEach(([key, value]) => {
				urlParams.append(key, value);
			});

		return `${PATTERNS_HOST}/api/patterns?${urlParams.toString()}`;
	};

	const { data, error, isLoading, isValidating, mutate, size, setSize } =
		useSWRInfinite(getKey, fetcher, {
			initialSize: 2,
			revalidateFirstPage: false,
			revalidateIfStale: false,
			revalidateOnFocus: false,
			revalidateOnReconnect: false,
		});

	return {
		data,
		error,
		isLoading,
		isValidating,
		mutate,
		size,
		setSize,
	};
};

```
