Omnichannel Live Chat Widget UI Components offers a re-usable component-based library to help create a custom chat widget that can be connected to the Dynamics 365 Customer Service experience.

Overview

Omnichannel Live Chat Widget UI Components

Release CI npm version npm
Release CI npm version npm

@microsoft/omnichannel-chat-widget is a React-based UI component library which allows you to build your own live chat widget experience using @microsoft/omnichannel-chat-sdk.

Table of Contents

  1. Introduction
  2. Installation
  3. Example Usage
  4. Components
  5. Telemetry
  6. Features

Introduction

Omnichannel Live Chat Widget UI Components offers a re-usable component-based library to help create a custom chat widget that can be connected to the Dynamics 365 Customer Service experience.

For more information about Live Chat Widget, see here.

Installation

npm i @microsoft/omnichannel-chat-sdk
npm i @microsoft/omnichannel-chat-widget

or

yarn add @microsoft/omnichannel-chat-sdk
yarn add @microsoft/omnichannel-chat-widget

The repo also contains the @microsoft/omnichannel-chat-components package, which is a collection of UI components. The @microsoft/omnichannel-chat-widget package is an integration of the Chat SDK and the UI components. To install the UI components separately, do

npm i @microsoft/omnichannel-chat-components

or

yarn add @microsoft/omnichannel-chat-components

Example Usage

The basic example below takes in the <LiveChatWidget/> component along with the Chat SDK to create a customized Omnichannel chat widget.

⚠️ The Chat SDK has to be initialized before being passed in.

import * as React from "react";

import LiveChatWidget from "@microsoft/omnichannel-chat-widget";
import { OmnichannelChatSDK } from "@microsoft/omnichannel-chat-sdk";
import ReactDOM from "react-dom";
//Below version numbers will help us to troubleshoot issues with specific package
import { version as chatSdkVersion } from "@microsoft/omnichannel-chat-sdk/package.json";
import { version as chatWidgetVersion } from "../package.json";
import { version as chatComponentVersion } from "@microsoft/omnichannel-chat-components/package.json";

const render = async () => {
    const omnichannelConfig = {
        orgId: "00000000-0000-0000-0000-000000000000", // dummy config
        orgUrl: "https://www.org-url.com", // dummy config
        widgetId: "00000000-0000-0000-0000-000000000000" // dummy config
    };
    const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
    await chatSDK.initialize(); // mandatory
    const chatConfig = await chatSDK.getLiveChatConfig();
    liveChatWidgetProps = {
        styleProps: {
            generalStyles: {
                width: "700px",
                height: "800px"
            }
        },
        headerProps: {
            controlProps: {
                hideMinimizeButton: true
            }
        },
        chatSDK: chatSDK, // mandatory
        chatConfig: chatConfig, // mandatory
        telemetryConfig: { //mandatory
            orgId: omnichannelConfig.orgId,
            orgUrl: omnichannelConfig.orgUrl,
            appId: omnichannelConfig.widgetId,
            OCChatSDKVersion: chatSdkVersion,
            chatComponentVersion: chatComponentVersion,
            chatWidgetVersion: chatWidgetVersion
        }
    };

    ReactDOM.render(
        <LiveChatWidget {...liveChatWidgetProps}/>,
        document.getElementById("my-container")
    );
};

render();

Components

Stateless UI Components

These are components that are included in the @microsoft/omnichannel-chat-components package.

Component Usage Interface
CallingContainerPane The container for voice and video feature in the chat widget ICallingContainerProps
ChatButton The button that appears on the user's portal that is designed to be the entry point for the user to initate chat IChatButtonProps
CommandButton A customizable button component that can be injected to the header and/or footer ICommandButtonProps
ConfirmationPane The default pane used when the Header close button is launched IConfirmationPaneProps
Footer The bottom container of the chat containing the download transcript, notification sound and email transcript buttons by default. IFooterProps
Header The top container of the chat containing the default minimize, close and title of the chat widget IHeaderProps
InputValidationPane A pop-up input pane with validation. In the default widget this is used as part of EmailTranscriptPane IInputValidationPaneProps
LoadingPane The default pane used after the chat button is clicked and before the chat loads completely ILoadingPaneProps
OutOfOfficeHoursPane The pane that is displayed when the chat is outside of operating hours set on admin side IOOOHPaneProps
PostChatSurveyPane The pane that holds the Customer Voice survey which would be used by the customer to input their chat experience, provide user ratings etc. It uses an IFrame to render the survey URL fetched from getPostChatSurveyContext call from OmniChannel ChatSDK. IPostChatSurveyPaneProps
PreChatSurveyPane The pane that holds the form which would be used by the customer to input helpful information for using the Support Chat before starting up the Chat Process. Makes use of AdaptiveCards IPreChatSurveyPaneProps
ProactiveChatSurveyPane A pane that holds more information than a normal chat button and can be configured to proactively pop up IProactiveChatPaneProps
ReconnectChatPane The pane that shows up when the customer is re-connecting to the chat to add additional conversation IReconnectChatPaneProps

⚠️ Because the components extend Microsoft's Fluent UI components, the base interface for all the styleProps in the above table is IStyle, which extends the IRawStyleBase interface, which is the most useful reference.

Stateful Components

Component Default Usage Interface
LiveChatWidget The default widget that stitches the UI components with Chat SDK ILiveChatWidgetProps

Some of the interfaces listed in the Stateless table have Stateful counterparts defined in the @microsoft/omnichannel-chat-widget package. For example, IConfirmationPaneStatefulProps extends IConfirmationPaneProps with additional attributes that only makes sense in the stateful context.

Default Props

For a list of all default props used in the default stateful widget, please see here. If you want to change a default prop, you need to explicitly set it and parse the object as the argument to <LiveChatWidget/>

Custom Components

There are two ways to custom the components provided in the library - 1) Replacing components using ComponentOverrides, and 2) Adding custom components in header and footer.

ComponentOverrides

Most sub-components and the default panes provided can be overriden. Components have "componentOverrides" as part of props interface, which consists of ReactNodes or strings for each part of the component. For example, the "ProactiveChatPane" component has a close button, and the close button can be overriden by creating a custom react node and setting it to the "closeButton" attribute of "componentOverrides" interface that is part of the props.

const customButton = (
    <button style={{
        background: "green",
        height: "80px",
        margin: "30px 15px 0 0",
        padding: "10px",
        width: "160px"
    }}>
        This is a custom button
    </button>
);

const liveChatWidgetProps = {
    proactiveChatPaneProps: {
        componentOverrides: {
            closeButton: customButton
        };
    };
}

Custom Components in Header and Footer

Header's and Footer's child components consist of three parts:

  1. "leftGroup" - adding child components at the left of the Header/Footer
  2. "middleGroup" - adding child components in the middle of the Header/Footer
  3. "rightGroup" - adding child components at the right of the Header/Footer

By default Header has the header icon and title on the left and minimize and close buttons on the right, and Footer has Download Transcript and Email Transcript buttons on the left and audio notification button on the right. These components can be overriden with ComponentOverrides. In addition, other custom child components can be added to both Header and Footer by creating custom react nodes and adding them to attributes "leftGroup", "middleGroup" or "rightGroup" of "controlProps".

const buttonStyleProps: IButtonStyles = {
    root: {
        color: "blue",
        height: 25,
        width: 25,
    }
};

const calendarIcon: IIconProps = { iconName: "Calendar" };
const calendarIconButton = <IconButton
    key="calendarIconButton"
    iconProps={calendarIcon}
    styles={buttonStyleProps}
    title="Calendar">
</IconButton>;

const emojiIcon: IIconProps = { iconName: "Emoji2" };
const emojiIconButton = <IconButton
    key="emojiIconButton"
    iconProps={emojiIcon}
    styles={buttonStyleProps}
    title="Sentiment">
</IconButton>;

const uploadIcon: IIconProps = { iconName: "Upload" };
const uploadIconButton = <IconButton
    key="uploadIconButton"
    iconProps={uploadIcon}
    styles={buttonStyleProps}
    title="Upload">
</IconButton>;

const customizedFooterProp: IFooterProps = {
    controlProps: {
        leftGroup: { children: [uploadIconButton] },
        middleGroup: { children: [calendarIconButton] },
        rightGroup: { children: [emojiIconButton] }
    }
};

📌 Note that WebChat hooks can also be used in any custom components.

See Also

Telemetry
Omnichannel Features
How to Add Visual Regression Tests
Security

Comments
  • Small fixes to support older browsers

    Small fixes to support older browsers

    2 Changes to support older browsers:

    1. Deep clone message object before calling postMessage to prevent errors
    2. Fixed missing import for BroadcastChannel (this was undefined in older versions of safari supported from v. 15.4)
    opened by pkaya89 4
  • Unable to initialize the chat widget

    Unable to initialize the chat widget

    When setting up the widget as described in the Basic example section, I'm running into the following issue. It appears that some component file is missing in the library.

    • From dev console Uncaught Error: Cannot find module './components/header/Header' at webpackMissingModule (ReactRefreshEntry.js:23:1) at Module../node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js (ReactRefreshEntry.js:23:1) at Module.options.factory (react refresh:6:1) at __webpack_require__ (bootstrap:24:1) at fn (hot module replacement:62:1) at Module../node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js (index.js:18:1) at Module.options.factory (react refresh:6:1) at __webpack_require__ (bootstrap:24:1) at fn (hot module replacement:62:1) at Module../src/index.js (App.js:27:1)

    • From compile log `Compiled with problems:X

    ERROR in ./src/index.js 55:40-54

    export 'default' (imported as 'LiveChatWidget') was not found in '@microsoft/omnichannel-chat-widget' (possible exports: BroadcastService, decodeComponentString, encodeComponentString)

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 1:0-63

    Module not found: Error: Can't resolve './components/header/Header' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'Header.js'? BREAKING CHANGE: The request './components/header/Header' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 2:0-63

    Module not found: Error: Can't resolve './components/footer/Footer' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'Footer.js'? BREAKING CHANGE: The request './components/footer/Footer' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 3:0-93

    Module not found: Error: Can't resolve './components/confirmationpane/ConfirmationPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'ConfirmationPane.js'? BREAKING CHANGE: The request './components/confirmationpane/ConfirmationPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 4:0-75

    Module not found: Error: Can't resolve './components/chatbutton/ChatButton' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'ChatButton.js'? BREAKING CHANGE: The request './components/chatbutton/ChatButton' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 5:0-102

    Module not found: Error: Can't resolve './components/inputvalidationpane/InputValidationPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'InputValidationPane.js'? BREAKING CHANGE: The request './components/inputvalidationpane/InputValidationPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 6:0-96

    Module not found: Error: Can't resolve './components/proactivechatpane/ProactiveChatPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'ProactiveChatPane.js'? BREAKING CHANGE: The request './components/proactivechatpane/ProactiveChatPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 7:0-96

    Module not found: Error: Can't resolve './components/reconnectchatpane/ReconnectChatPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'ReconnectChatPane.js'? BREAKING CHANGE: The request './components/reconnectchatpane/ReconnectChatPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 8:0-78

    Module not found: Error: Can't resolve './components/loadingpane/LoadingPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'LoadingPane.js'? BREAKING CHANGE: The request './components/loadingpane/LoadingPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 9:0-93

    Module not found: Error: Can't resolve './components/outofofficehourspane/OOOHPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'OOOHPane.js'? BREAKING CHANGE: The request './components/outofofficehourspane/OOOHPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 10:0-96

    Module not found: Error: Can't resolve './components/prechatsurveypane/PreChatSurveyPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'PreChatSurveyPane.js'? BREAKING CHANGE: The request './components/prechatsurveypane/PreChatSurveyPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 11:0-99

    Module not found: Error: Can't resolve './components/postchatsurveypane/PostChatSurveyPane' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'PostChatSurveyPane.js'? BREAKING CHANGE: The request './components/postchatsurveypane/PostChatSurveyPane' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 12:0-71

    Module not found: Error: Can't resolve './common/encodeComponentString' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'encodeComponentString.js'? BREAKING CHANGE: The request './common/encodeComponentString' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 13:0-71

    Module not found: Error: Can't resolve './common/decodeComponentString' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'decodeComponentString.js'? BREAKING CHANGE: The request './common/decodeComponentString' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 14:0-63

    Module not found: Error: Can't resolve './services/BroadcastService' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'BroadcastService.js'? BREAKING CHANGE: The request './services/BroadcastService' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 15:0-49

    Module not found: Error: Can't resolve './common/Constants' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'Constants.js'? BREAKING CHANGE: The request './common/Constants' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 16:0-93

    Module not found: Error: Can't resolve './components/callingcontainer/CallingContainer' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'CallingContainer.js'? BREAKING CHANGE: The request './components/callingcontainer/CallingContainer' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 17:0-109

    Module not found: Error: Can't resolve './components/callingcontainer/subcomponents/CurrentCall/CurrentCall' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'CurrentCall.js'? BREAKING CHANGE: The request './components/callingcontainer/subcomponents/CurrentCall/CurrentCall' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 18:0-112

    Module not found: Error: Can't resolve './components/callingcontainer/subcomponents/IncomingCall/IncomingCall' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'IncomingCall.js'? BREAKING CHANGE: The request './components/callingcontainer/subcomponents/IncomingCall/IncomingCall' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-components/lib/esm/index.js 19:0-91

    Module not found: Error: Can't resolve './components/callingcontainer/subcomponents/Timer/Timer' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-components/lib/esm' Did you mean 'Timer.js'? BREAKING CHANGE: The request './components/callingcontainer/subcomponents/Timer/Timer' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 2:0-62

    Module not found: Error: Can't resolve './hooks/useChatContextStore' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-widget/lib/esm' Did you mean 'useChatContextStore.js'? BREAKING CHANGE: The request './hooks/useChatContextStore' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 3:0-54

    Module not found: Error: Can't resolve './hooks/useChatSDKStore' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-widget/lib/esm' Did you mean 'useChatSDKStore.js'? BREAKING CHANGE: The request './hooks/useChatSDKStore' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 4:0-87

    Module not found: Error: Can't resolve './components/livechatwidget/LiveChatWidget' in '/Learn/custom-chat-widget/node_modules/@microsoft/omnichannel-chat-widget/lib/esm' Did you mean 'LiveChatWidget.js'? BREAKING CHANGE: The request './components/livechatwidget/LiveChatWidget' failed to resolve only because it was resolved as fully specified (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '.mjs' file, or a '.js' file where the package.json contains '"type": "module"'). The extension in the request is mandatory for it to be fully specified. Add the extension to the request.

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 5:0-112

    export 'encodeComponentString' (reexported as 'encodeComponentString') was not found in '@microsoft/omnichannel-chat-components' (module has no exports)

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 5:0-112

    export 'decodeComponentString' (reexported as 'decodeComponentString') was not found in '@microsoft/omnichannel-chat-components' (module has no exports)

    ERROR in ./node_modules/@microsoft/omnichannel-chat-widget/lib/esm/index.js 5:0-112

    export 'BroadcastService' (reexported as 'BroadcastService') was not found in '@microsoft/omnichannel-chat-components' (module has no exports)`

    opened by nithyasam 4
  • Playwright framework with sample live chat widget test for chat button #1

    Playwright framework with sample live chat widget test for chat button #1

    Playwright framework with sample live chat widget test for chat button

    For custom live chat widget, currently using sampleWidget from sample folder. as on required for test case will create configured script in automation_tests folder .

    Adding all tests files under automation_tests

    Run below command to execute automation tests,

    • npm run test:build : to build sampleWidget and run tests on latest sampleWidget script.
    • npm run test: to run tests on existing sampleWidget script.

    Please refer test [as screenshot image] 169195474-c91e0458-3ccd-49f4-9649-f285a9dfc0b4

    image
    opened by gitmahadev 3
  • implementation of ChatAdapterShim into V2

    implementation of ChatAdapterShim into V2

    Adaptation from PR -> https://dynamicscrm.visualstudio.com/OneCRM/_git/CRM.OmniChannel.LiveChatWidget/pullrequest/770410?_a=files

    Implementation of ChatAdapterShim and override when creating a new adapter.

    opened by elopezanaya 2
  • node-fetch vulnerability causing build pipeline failure

    node-fetch vulnerability causing build pipeline failure

    Our ADO build pipeline is failing at the Component Governance step due to High severity vulnerability in the Node-Fetch version 2.6.1. Component governance shows the due date to resolve this npm package 2022-06-16T20:09:00.2569253Z and since this deadline passed, build pipelines are failing and that stops us from deploying any changes related to the new LCW to staging or production.

    node-fetch is being used by package @azure/core-http and @azure/core-http is being used by two different packages:

    image

    Component Governance error:

    image

    opened by dhruveshsheladiya 2
  • Bump cross-fetch from 3.1.4 to 3.1.5 in /chat-widget

    Bump cross-fetch from 3.1.4 to 3.1.5 in /chat-widget

    Bumps cross-fetch from 3.1.4 to 3.1.5.

    Release notes

    Sourced from cross-fetch's releases.

    v3.1.5

    What's Changed

    New Contributors

    Full Changelog: https://github.com/lquixada/cross-fetch/compare/v3.1.4...v3.1.5

    Commits
    • c6089df chore(release): 3.1.5
    • a3b3a94 chore: updated node-fetch version to 2.6.7 (#124)
    • efed703 chore: updated node-fetch version to 2.6.5
    • 694ff77 refactor: removed ora from dependencies
    • efc5956 refactor: added .vscode to .gitignore
    • da605d5 refactor: renamed test/fetch/ to test/fetch-api/ and test/module/ to test/mod...
    • 0f0d51d chore: updated minor and patch versions of dev dependencies
    • c6e34ea refactor: removed sinon.js
    • f524a52 fix: yargs was incompatible with node 10
    • 7906fcf chore: updated dev dependencies
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 2
  • test issue

    test issue

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: [e.g. iOS]
    • Browser [e.g. chrome, safari]
    • Version [e.g. 22]

    Smartphone (please complete the following information):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here. A link to reproduce the issue or a repo that contains the repro is much appreciated.

    bug 
    opened by charliewang95 1
  • Bump loader-utils from 1.4.0 to 1.4.2 in /chat-widget

    Bump loader-utils from 1.4.0 to 1.4.2 in /chat-widget

    Bumps loader-utils from 1.4.0 to 1.4.2.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.2

    1.4.2 (2022-11-11)

    Bug Fixes

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    1.4.2 (2022-11-11)

    Bug Fixes

    1.4.1 (2022-11-07)

    Bug Fixes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump loader-utils from 1.4.0 to 1.4.1 in /chat-widget

    Bump loader-utils from 1.4.0 to 1.4.1 in /chat-widget

    Bumps loader-utils from 1.4.0 to 1.4.1.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    1.4.1 (2022-11-07)

    Bug Fixes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump loader-utils from 1.4.0 to 1.4.1 in /chat-components

    Bump loader-utils from 1.4.0 to 1.4.1 in /chat-components

    Bumps loader-utils from 1.4.0 to 1.4.1.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    1.4.1 (2022-11-07)

    Bug Fixes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Text color of hyperlinks in chat messages

    Text color of hyperlinks in chat messages

    The color applied to the text in messages from the bot/agent is not being applied to links. The links only appear in a white color that causes accessibility/visibility issues across different background colors/themes. See examples below:

    There is a link at the end of the message below that's not visible due to this issue: image

    As seen below, the issue is only for messages from the bot/agent. Messages from the user have the default text color for links: image

    opened by elishuwon-mitchell 1
  • Bump json5 from 1.0.1 to 1.0.2 in /chat-components

    Bump json5 from 1.0.1 to 1.0.2 in /chat-components

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump json5 from 1.0.1 to 1.0.2 in /chat-widget

    Bump json5 from 1.0.1 to 1.0.2 in /chat-widget

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump json5 from 2.2.1 to 2.2.3 in /chat-widget/automation_tests

    Bump json5 from 2.2.1 to 2.2.3 in /chat-widget/automation_tests

    Bumps json5 from 2.2.1 to 2.2.3.

    Release notes

    Sourced from json5's releases.

    v2.2.3

    v2.2.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).
    Changelog

    Sourced from json5's changelog.

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).
    Commits
    • c3a7524 2.2.3
    • 94fd06d docs: update CHANGELOG for v2.2.3
    • 3b8cebf docs(security): use GitHub security advisories
    • f0fd9e1 docs: publish a security policy
    • 6a91a05 docs(template): bug -> bug report
    • 14f8cb1 2.2.2
    • 10cc7ca docs: update CHANGELOG for v2.2.2
    • 7774c10 fix: add proto to objects and arrays
    • edde30a Readme: slight tweak to intro
    • 97286f8 Improve example in readme
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Multiple chat widget in Same browser

    Multiple chat widget in Same browser

    @sarojkpr Is it possible to have multiple chat widget in same browser? We tried to render multiple widgets in same browser but looks like because of Context both instances started sharing same conversation and messages as shown in below screenshot. Please let us know if there is any work around to achieve this use case. image

    Initially there was an issue in omnichannel-chat-sdk to load multiple instances in the widget which got resolved as part of enhancement in below ticket https://github.com/microsoft/omnichannel-chat-sdk/issues/145

    opened by ss-kumar 2
  • Cannot find the module

    Cannot find the module

    Tried to implement widget as in example (first I've tried with dummy config as in example and then with "real" config) and got the issue "Cannot find module './components/header/Header'" as a result.

    image
    opened by spawn004 2
Owner
Microsoft
Open source projects and samples from Microsoft
Microsoft
TikTokLive-Widget: A socket client/server program that exposes a widget with alerts (such as gifts, followers ...) for a specific user streaming on Tik Tok Live platform

TikTokLive-Widget: A socket client/server program that exposes a widget with alerts (such as gifts, followers ...) for a specific user streaming on Tik Tok Live platform

null 3 Dec 3, 2022
The leaderboard website displays scores submitted by different players. It also allows you to submit your score. I created this project using ES6 concepts. I connected to the Leadboard API service

Leaderboard App The leaderboard website displays scores submitted by different players. It also allows you to submit your score I created this project

Kwasi Antwi Baayeh 5 Dec 21, 2022
365 Days of study and preparation to get an internship and then a job at Google.

365DaysToGoogle 365 Days of study and preparation to get an internship and then a job at Google. Study Program Introduction Let's make a quick introdu

null 8 Jan 19, 2022
The front-end CSS framework for building experiences for Office and Microsoft 365.

Office UI Fabric Core The front-end framework for building experiences for Office and Office 365. Fabric is a responsive, mobile-first collection of s

Office Developer 3.7k Dec 20, 2022
A hub for web developers that offers a variety of tools to help with any developing needs.

WebDevHub - A place for developers WebDevHub is designed to be one central place for developers, that offers a variety of tools to help with any devel

Thomas Hamilton-Smith 87 Dec 11, 2022
Kuldeep 2 Jun 21, 2022
e-ONG, an authorial project, whose objective is to help ONGs to find people who need help or would like to help them

This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: npm start Runs the app in the developmen

Lucas Lima 2 Nov 11, 2022
This Photoshop script exports all top-level layers and groups to cropped PNG and JPEG files and creates a file usable in Tumult Hype 4 based on your Photoshop document.

Export To Hype (Photoshop Edition) This Photoshop script exports all top-level layers and groups to cropped PNG and JPEG files and creates a file usab

Max Ziebell 6 Nov 9, 2022
Chakra UI Animations is a dependancy which offers you pre-built animations for your Chakra UI components.

Chakra UI Animations Chakra UI Animations is a dependancy which offers you pre-built animations for your Chakra UI components. Installation yarn add @

Code Chemistry Inc. 9 Nov 19, 2022
It’s a Ticketing software for small companies which are into customer support.

What is VueTicket? The VueTicket is an Ticketing Application for small companies which are into customer support. Technologies Used • ASP.NET Core 5.0

Saineshwar Bageri 24 Nov 27, 2022
waitlyst.js provides in-app widgets for collecting customer feedback & product analytics.

waitlyst.js provides in-app widgets for collecting customer feedback & product analytics. Track every event on your app Understand your users and how

Indextrus 8 Dec 3, 2022
Analyzify's open-source guide & codes on Shopify Pixels & Customer Events. Follow this repo to stay up-to-date with the new pixels.

Shopify Customer Events & Shopify Pixels Shopify has announced yet another phenomenal feature: Shopify Customer Events also known as Shopify Pixels. O

Analyzify 8 Dec 8, 2022
Mekna'7, a subsidiary of the ONCF group, which provides bus services to cities not served by train, needs to set up a computer system by creating a database for managing customer reservations.

Online-bus-ticket-reservation Introduction Hello everyone, this is a project that I have done for assignment. This project is a simple online bus tick

Hala Ziani 5 Oct 25, 2022
Simple shopping cart prototype which shows how React components and Redux can be used to build a friendly user experience with instant visual updates and scalable code in e-commerce applications.

This simple shopping cart prototype shows how React components and Redux can be used to build a friendly user experience with instant visual updates a

Ivan Kuznietsov 3 Feb 8, 2022
A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch screens with a resolution of 1024x600 connected to a Raspberry Pi.

EDStatusPanel A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch scr

marcus-s 24 Oct 4, 2022
Utility for authorizing user in a connected app, creating JWT to authenticate against it, and perform a sample callout.

Question: What is this for? Answer: When configuring a Salesforce Connected app to use certificates to authenticate you will use JSON Web Tokens to a

null 4 Jun 15, 2022
Get a verse(an aya) from the Quran during your coding session 💻 , stay connected with the words of Allah. 🕋

Ayat ?? Get a verse(an aya) from the Quran during your coding session ?? stay connected with the words of Allah. ?? ?? Release Notes 1.0.0 Get random

Hussam Adil 27 Jan 2, 2023
Talk to anyone connected to your network, be it LAN or your hotspot. Doesn't require internet.

Apophis CLI to talk to anyone connected to your network, be it LAN or your hotspot. Doesn't require internet. Installation Make sure you have NodeJS (

Saurav Pal 3 Oct 16, 2022