File "use-kit.js"
Full Path: /home/warrior1/public_html/languages/wp-content/plugins/elementor/app/modules/kit-library/assets/js/hooks/use-kit.js
File size: 1.39 KB
MIME-type: text/x-java
Charset: utf-8
import Kit from '../models/kit';
import { KEY as LIST_KEY } from './use-kits';
import { useCallback } from 'react';
import { useQuery, useQueryClient } from 'react-query';
export const KEY = 'kit';
export default function useKit( id ) {
// A function that returns existing data from the kit list for a placeholder data before the kit request will resolved.
const placeholderDataCallback = usePlaceholderDataCallback( id );
return useQuery( [ KEY, id ], fetchKitItem, {
placeholderData: placeholderDataCallback,
},
);
}
/**
* Return placeholder function for kit query.
*
* @param {*} id
* @return {function(): (undefined|*)} placeholder
*/
function usePlaceholderDataCallback( id ) {
const queryClient = useQueryClient();
return useCallback( () => {
const placeholder = queryClient.getQueryData( LIST_KEY )
?.find( ( kit ) => {
return kit.id === id;
} );
if ( ! placeholder ) {
return;
}
return placeholder;
}, [ queryClient, id ] );
}
/**
* Fetch kit
*
* @param {Object} root0
* @param {Object} root0.queryKey
* @param {*} root0.queryKey.0
* @param {string} root0.queryKey.1
* @return {Promise<Kit>} kit
*/
// eslint-disable-next-line no-unused-vars
function fetchKitItem( { queryKey: [ _, id ] } ) {
return $e.data.get( 'kits/index', { id }, { refresh: true } )
.then( ( response ) => response.data )
.then( ( { data } ) => Kit.createFromResponse( data ) );
}