UNPKG

mdl-shoplet-ts

Version:

TypeScript client SDK for the headless micro CRM, Minddale.

106 lines (105 loc) 5.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ShopletClient = void 0; const minddale_client_1 = require("./minddale.client"); const mdl_identifi_ts_1 = require("mdl-identifi-ts"); class ShopletClient extends minddale_client_1.MinddaleClient { constructor(apiKey, baseUrl = minddale_client_1.MinddaleClient.BASE_URL) { super(apiKey, baseUrl); this.apiKey = apiKey; this.baseUrl = baseUrl; this.identifiClient = new mdl_identifi_ts_1.IdentifiClient(apiKey, baseUrl); const host = typeof window !== 'undefined' ? window.location.host : 'default'; this.cartKey = `MDL_SHPL_CART_ID@${host}`; this.cartId = this.identifiClient.getItemFromLocalStorage(this.cartKey) ?? ''; } async addCartItem(shoplet) { try { window.dispatchEvent(new CustomEvent('mdl-shpl-add-to-cart', { detail: { success: false, payload: '' } })); this.cartId = this.identifiClient.getItemFromLocalStorage(this.cartKey) ?? ''; if (!this.cartId) { const createCartUrl = new URL(ShopletClient.ENDPOINT, this.baseUrl); const createCartResponse = await this.put(createCartUrl.toString(), {}); if (!createCartResponse.success || !createCartResponse.payload) { const errResponse = { success: false, message: createCartResponse.message || 'Failed to create cart', }; window.dispatchEvent(new CustomEvent('mdl-shpl-error', { detail: errResponse })); return errResponse; } this.cartId = createCartResponse.payload; this.identifiClient.saveJsonToLocalStorage(this.cartKey, this.cartId); } shoplet.cartId = this.cartId; const url = new URL(`${ShopletClient.ENDPOINT}/item`, this.baseUrl); const response = await this.put(url.toString(), shoplet); if (response.success && response.payload) { this.identifiClient.saveJsonToLocalStorage(this.cartKey, response.payload); window.dispatchEvent(new CustomEvent('mdl-shpl-add-to-cart', { detail: response })); } return response; } catch (error) { const errResponse = { success: false, message: error.message || 'Unexpected error occurred', }; window.dispatchEvent(new CustomEvent('mdl-shpl-error', { detail: errResponse })); return errResponse; } } async addCartMembership(membership) { try { window.dispatchEvent(new CustomEvent('mdl-shpl-add-to-cart', { detail: { success: false, payload: '' } })); this.cartId = this.identifiClient.getItemFromLocalStorage(this.cartKey) ?? ''; if (!this.cartId) { const createCartUrl = new URL(ShopletClient.ENDPOINT, this.baseUrl); const createCartResponse = await this.put(createCartUrl.toString(), {}); if (!createCartResponse.success || !createCartResponse.payload) { const errResponse = { success: false, message: createCartResponse.message || 'Failed to create cart', }; window.dispatchEvent(new CustomEvent('mdl-shpl-error', { detail: errResponse })); return errResponse; } this.cartId = createCartResponse.payload; this.identifiClient.saveJsonToLocalStorage(this.cartKey, this.cartId); } membership.cartId = this.cartId; membership.type = 'SUBSCRIPTION'; const url = new URL(`${ShopletClient.ENDPOINT}/item`, this.baseUrl); const response = await this.put(url.toString(), membership); if (response.success && response.payload) { this.identifiClient.saveJsonToLocalStorage(this.cartKey, response.payload); window.dispatchEvent(new CustomEvent('mdl-shpl-add-to-cart', { detail: response })); } return response; } catch (error) { const errResponse = { success: false, message: error.message || 'Unexpected error occurred', }; window.dispatchEvent(new CustomEvent('mdl-shpl-error', { detail: errResponse })); return errResponse; } } async removeCartItem(itemId) { try { const url = `${ShopletClient.ENDPOINT}/${itemId}`; const response = await this.delete(url); if (response.success) window.dispatchEvent(new CustomEvent('mdl-shpl-remove-from-cart', { detail: response })); return response; } catch (error) { const errResponse = { success: false, message: error.message || 'Unexpected error occurred' }; window.dispatchEvent(new CustomEvent('mdl-shpl-error', { detail: errResponse })); return errResponse; } } } exports.ShopletClient = ShopletClient; ShopletClient.ENDPOINT = '/api/open/minddale/v1/shoplet/cart';