# wp-ultimate-post-grid/4.0.1/assets/js/shared/Api/Template.js

WP Ultimate Post Grid, version 4.0.1. 71 lines.

- Page: https://pluginprobe.com/plugins/wp-ultimate-post-grid/4.0.1/code/assets/js/shared/Api/Template.js
- Raw: https://pluginprobe.com/plugins/wp-ultimate-post-grid/4.0.1/raw/assets/js/shared/Api/Template.js
- Modified: 2020-07-22T13:11:56+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/wp-ultimate-post-grid/4.0.1/code/assets/js/shared/Api/Template.js#L10-L20`.

```javascript
import ApiWrapper from 'Shared/ApiWrapper';

const templateEndpoint = wpupg_admin.endpoints.template;
const debounceTime = 500;

let previewPromises = [];
let previewRequests = {};
let previewRequestsTimer = null;

export default {
    previewShortcode(uid, shortcode, item) {
        previewRequests[uid] = shortcode;

        clearTimeout(previewRequestsTimer);
        previewRequestsTimer = setTimeout(() => {
            this.previewShortcodes( item );
        }, debounceTime);

        return new Promise( r => previewPromises.push( r ) );
    },
    previewShortcodes( item ) {
        const thesePromises = previewPromises;
        const theseRequests = previewRequests;
        previewPromises = [];
        previewRequests = {};

        const data = {
            shortcodes: theseRequests,
            item,
        };

        fetch(`${templateEndpoint}/preview`, {
            method: 'POST',
            headers: {
                'X-WP-Nonce': wpupg_admin.api_nonce,
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            credentials: 'same-origin',
            body: JSON.stringify(data),
        }).then(response => {
            return response.json().then(json => {
                let result = response.ok ? json.preview : {};

                thesePromises.forEach( r => r( result ) );
            });
        });
    },
    save(template) {
        const data = {
            template,
        };

        return ApiWrapper.call( templateEndpoint, 'POST', data );
    },
    delete(slug) {
        const data = {
            slug,
        };

        return ApiWrapper.call( templateEndpoint, 'DELETE', data );
    },
    searchItems( input ) {
        const data = {
            input,
        };

        return ApiWrapper.call( `${templateEndpoint}/preview-item`, 'POST', data );
    },
};

```
