![]() Server : LiteSpeed System : Linux premium84.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : claqxcrl ( 523) PHP Version : 8.1.32 Disable Function : NONE Directory : /home/claqxcrl/www/wp-content/plugins/extendify/src/Recommendations/state/ |
import { extractPluginSlugs } from '@recommendations/utils/extract-plugin-slugs'; import { getAllPlugins } from '@shared/api/wp'; import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; /* global jQuery */ const state = (set, get) => ({ query: null, searchPlugins: [], installedPlugins: [], searchPluginsLimit: 6, recommendationsLimit: 2, isSearchPluginsLoading: false, isSearchPluginsError: false, isInstalledPluginsLoading: false, isInstalledPluginsError: false, initialize: () => { get().startListeningToAjax(); get().fetchInstalledPlugins(); }, startListeningToAjax: () => { // Initial query is present if the page loaded is already a search. const initialQuery = new URLSearchParams(window.location.search).get('s'); if (initialQuery) { const searchResults = document.getElementById('plugin-filter'); const pluginSlugs = extractPluginSlugs(searchResults); set({ query: initialQuery, searchPlugins: pluginSlugs, }); } const parser = new DOMParser(); jQuery?.ajaxSetup({ beforeSend: (_, settings) => { const params = new URLSearchParams(settings.data); const action = params.get('action'); const search = params.get('s'); if (action !== 'search-install-plugins') { return; } settings.success = (xhr) => { const doingRedirect = typeof xhr === 'string' && xhr?.startsWith('<!DOCTYPE html>'); if (doingRedirect) { // plugin is attempting to redirect - trigger a search const i = window.jQuery('#search-plugins'); const value = i.val(); // either remove trailing space or add one i.val(value.endsWith(' ') ? value.trim() : value + ' '); i.trigger('keyup'); return; } try { const parsedData = parser.parseFromString( xhr?.data?.items || '', 'text/html', ); const pluginSlugs = extractPluginSlugs(parsedData); set({ searchPlugins: pluginSlugs, isSearchPluginsLoading: false, isSearchPluginsError: false, }); } catch (error) { set({ searchPlugins: [], isSearchPluginsLoading: false, isSearchPluginsError: true, }); } }; settings.error = () => { set({ searchPlugins: [], isSearchPluginsLoading: false, isSearchPluginsError: true, }); }; set({ query: search ? search : null, searchPlugins: [], isSearchPluginsLoading: !!search, isSearchPluginsError: false, }); }, }); }, fetchInstalledPlugins: async (force = false) => { if (get().installedPlugins.length && !force) { return; } try { set({ isInstalledPluginsLoading: true, isInstalledPluginsError: false, }); // Fetch installed plugins. const data = await getAllPlugins(); set({ installedPlugins: data?.map((plugin) => ({ // We are extracting only the slug because the `plugin` value // looks like `plugin-slug/plugin-file-name`. slug: plugin.plugin.split('/')[0], status: plugin.status, })), isInstalledPluginsLoading: false, isInstalledPluginsError: false, }); } catch (_) { set({ installedPlugins: [], isInstalledPluginsLoading: false, isInstalledPluginsError: true, }); } }, }); const createInitializedStore = () => { const store = create(devtools(state, { name: 'Extendify Plugin Search' })); store.getState().initialize(); return store; }; export const usePluginSearchStore = createInitializedStore();