mdl-shoplet-ts
Version:
TypeScript client SDK for the headless micro CRM, Minddale.
106 lines (105 loc) • 5.29 kB
JavaScript
"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';