@isartech/chat
Version:
A reusable native webcomponent that can be initiated with parameters such as an endpoint url and styles in any environment based on web technologies.
195 lines (175 loc) • 7.17 kB
TypeScript
import { EventName } from '@lit/react';
import * as React_2 from 'react';
export declare type CartAction = {
type: "PRODUCT_INCREMENT";
payload: IsarTechProduct.Product;
} | {
type: "PRODUCT_DECREMENT";
payload: IsarTechProduct.Product;
} | {
type: "PRODUCT_INCREMENT_BULK";
payload: IsarTechProduct.Product;
} | {
type: "PRODUCT_DECREMENT_BULK";
payload: IsarTechProduct.Product;
};
export declare const CartApiContext: React_2.Context<{
incrementWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
decrementWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
incrementBulkWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
decrementBulkWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
}>;
export declare const CartContext: React_2.Context<{
cart: Map<string, IsarTechProduct.Product>;
}>;
export declare const CartDispatch: React_2.Context<React_2.Dispatch<CartAction>>;
export declare type CartEventHandlers = {
onProductIncrement: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductDecrement: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductIncrementBulk: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductDecrementBulk: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
};
export declare const cartReducer: (state: {
cart: Map<string, IsarTechProduct.Product>;
}, action: CartAction) => {
cart: Map<string, IsarTechProduct.Product>;
};
declare const _default: React_2.FC<IsartechChatProps>;
export default _default;
export declare type EventMap = {
changeQuantity: EventName<CustomEvent<IsarTechProduct.Product>>;
changeBulkQuantity: EventName<CustomEvent<IsarTechProduct.Product>>;
onProductIncrement: EventName<CustomEvent<IsarTechProduct.Product>>;
onProductDecrement: EventName<CustomEvent<IsarTechProduct.Product>>;
onProductIncrementBulk: EventName<CustomEvent<IsarTechProduct.Product>>;
onProductDecrementBulk: EventName<CustomEvent<IsarTechProduct.Product>>;
};
/**
* Props for the IsartechChatReact component
* These map to the web component's attributes and properties
*/
export declare interface IsartechChatProps {
url?: string;
language?: string;
themeColor?: string;
isartechId?: string;
isartechKey?: string;
conversationId?: string;
userId?: string;
marketId?: string | number;
tenantId?: string | number;
countryId?: string | number;
districtId?: string | number;
country?: string;
tenant?: string;
district?: string;
market?: string;
model?: string;
isCartExternal?: boolean;
onProductIncrement?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductDecrement?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductIncrementBulk?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
onProductDecrementBulk?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
changeQuantity?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
changeBulkQuantity?: (ev: CustomEvent<IsarTechProduct.Product>) => void | Promise<void>;
className?: string;
style?: React_2.CSSProperties;
children?: React_2.ReactNode;
}
export declare const IsartechChatReact: React_2.FC<IsartechChatProps>;
declare namespace IsarTechProduct {
const EVENT_CHANGE_QUANTITY: "change-quantity";
const EVENT_CHANGE_QUANTITY_BULK: "change-quantity-bulk";
const EVENT_PRODUCT_CLICK: "product-click";
const EVENT_INCREMENT: "product-increment";
const EVENT_DECREMENT: "product-decrement";
const EVENT_INCREMENT_BULK: "product-increment-bulk";
const EVENT_DECREMENT_BULK: "product-decrement-bulk";
const ELEMENT_TAG: "it-product";
type Product = Attributes & {
name: string;
};
interface Attributes {
name: string;
quantity: number;
bulkQuantity: number;
itemId: string;
messageId: string;
slug: string;
in_stock: boolean;
brand: string;
price: string;
query: string;
description?: string;
category?: string;
points?: string;
priceUnit?: string;
displayUnit?: string;
bundleUnit?: string;
weight?: string;
weightUnit?: string;
origin?: string;
imgURL?: string;
weighted?: boolean;
weightIncrement?: number;
maxWeightPerOrder?: number;
minWeightPerOrder?: number;
defaultWeightCount?: number;
source?: string;
score?: number;
original_price?: number | string;
preferred_cuts?: PreferredCuts;
discount_type?: string;
condition_value?: string;
currency?: string;
benefit_value?: string;
bulk_step?: number;
}
interface CutPattern {
id: number;
image: string;
default: boolean;
name_ar: string;
name_en: string;
}
interface PreferredCuts {
name: string;
cut_type: string;
cut_patterns: CutPattern[];
important_text_ar: string;
important_text_en: string;
}
interface ProductEvent extends Event {
detail: Attributes;
}
interface ProductEventMap {
CHANGE_QUANTITY: ProductEvent;
PRODUCT_CLICK: ProductEvent;
}
{};
}
export declare const IsartechProvider: React_2.FC<IsartechProviderProps>;
export declare interface IsartechProviderProps {
children: React_2.ReactNode;
initialState?: {
cart: Map<string, IsarTechProduct.Product>;
};
onBeforeIncrement?: (product: IsarTechProduct.Product) => Promise<IsarTechProduct.Product>;
onBeforeDecrement?: (product: IsarTechProduct.Product) => Promise<IsarTechProduct.Product>;
onBeforeIncrementBulk?: (product: IsarTechProduct.Product) => Promise<IsarTechProduct.Product>;
onBeforeDecrementBulk?: (product: IsarTechProduct.Product) => Promise<IsarTechProduct.Product>;
onError?: (error: Error, operation: 'increment' | 'decrement' | 'incrementBulk' | 'decrementBulk', product: IsarTechProduct.Product) => void;
}
export declare type Product = IsarTechProduct.Product;
export declare const setCart: () => React_2.Dispatch<CartAction>;
export declare const useCart: () => {
cart: Map<string, IsarTechProduct.Product>;
};
export declare const useCartApi: () => {
incrementWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
decrementWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
incrementBulkWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
decrementBulkWithHook: (product: IsarTechProduct.Product) => Promise<boolean>;
};
export declare const useCartEventHandlers: () => CartEventHandlers;
export { }