From c665af4360348d13d831df4161ac5827741cab53 Mon Sep 17 00:00:00 2001 From: Shashwat Srivastava Date: Mon, 4 Jun 2018 17:32:43 +0530 Subject: [PATCH 01/24] jQuery Chat App --- {jquery-example => jquery-chat-example}/chat.css | 0 {jquery-example => jquery-chat-example}/chat.js | 0 {jquery-example => jquery-chat-example}/index.html | 0 {jquery-example => jquery-chat-example}/reset.css | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {jquery-example => jquery-chat-example}/chat.css (100%) rename {jquery-example => jquery-chat-example}/chat.js (100%) rename {jquery-example => jquery-chat-example}/index.html (100%) rename {jquery-example => jquery-chat-example}/reset.css (100%) diff --git a/jquery-example/chat.css b/jquery-chat-example/chat.css similarity index 100% rename from jquery-example/chat.css rename to jquery-chat-example/chat.css diff --git a/jquery-example/chat.js b/jquery-chat-example/chat.js similarity index 100% rename from jquery-example/chat.js rename to jquery-chat-example/chat.js diff --git a/jquery-example/index.html b/jquery-chat-example/index.html similarity index 100% rename from jquery-example/index.html rename to jquery-chat-example/index.html diff --git a/jquery-example/reset.css b/jquery-chat-example/reset.css similarity index 100% rename from jquery-example/reset.css rename to jquery-chat-example/reset.css From ccf4478b8cc50b8824665f00786d626d35291974 Mon Sep 17 00:00:00 2001 From: Shashwat Srivastava Date: Mon, 4 Jun 2018 19:25:03 +0530 Subject: [PATCH 02/24] Create README.md --- jquery-chat-example/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 jquery-chat-example/README.md diff --git a/jquery-chat-example/README.md b/jquery-chat-example/README.md new file mode 100644 index 0000000..895a2bb --- /dev/null +++ b/jquery-chat-example/README.md @@ -0,0 +1,2 @@ +## jQuery Chat App - Live Demo +- [Click here to view the live demo](https://demo.chatcamp.io/jquery-chat-example/index.html) From 2ef9de419357227b7b9d183dcd4dababb46b5634 Mon Sep 17 00:00:00 2001 From: Shashwat Srivastava Date: Tue, 5 Jun 2018 10:50:07 +0530 Subject: [PATCH 03/24] Update README.md --- widget-example/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/widget-example/README.md b/widget-example/README.md index 8004d7a..574212b 100644 --- a/widget-example/README.md +++ b/widget-example/README.md @@ -1,6 +1,9 @@ ## Chat Live Demo - [Click here to view the live demo](https://demo.chatcamp.io/widget-example/index.html?userId=1) +## ChatCamp JavaScript Documentation +- You may review our documentation here - [https://docs.chatcamp.io/docs/javascript-chat-quickstart](https://docs.chatcamp.io/docs/javascript-chat-quickstart). + ## How to Install - Run the following command to install dependencies: `npm install`. From 96cd8916905d9619ac71f419917995151fe8c41e Mon Sep 17 00:00:00 2001 From: Shashwat Srivastava Date: Tue, 5 Jun 2018 10:53:03 +0530 Subject: [PATCH 04/24] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d52bfbe..03291de 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ -# ChatCamp-ChatCamp-JavaScript-Examples -Sample apps for ChatCamp JavaScript SDK +# ChatCamp JavaScript Examples +Sample chat apps implemented using ChatCamp JavaScript SDK - Instant Messenger Demo: [Click to view demo](https://demo.chatcamp.io/widget-example/index.html?userId=1) +- jQuery Chat App Demo: [Click here to see the demo](https://demo.chatcamp.io/jquery-chat-example/index.html) + +# ChatCamp JavaScript Documentation +You may review our documentation here - [https://docs.chatcamp.io/docs/javascript-chat-quickstart](https://docs.chatcamp.io/docs/javascript-chat-quickstart). From 9790bb420f54fc5ab9f2e66bd461c6c6d25153cb Mon Sep 17 00:00:00 2001 From: Shashwat Srivastava Date: Tue, 12 Jun 2018 23:46:16 +0530 Subject: [PATCH 05/24] add UI kit to the example --- jquery-chat-example/chat.js | 10 +- widget-example/.env.development | 7 - widget-example/.env.production | 7 - widget-example/.eslintrc.json | 5 - widget-example/index.html | 47 ++ widget-example/package.json | 59 -- widget-example/public/chatcamp.png | Bin 88873 -> 0 bytes widget-example/public/favicon.png | Bin 3746 -> 0 bytes widget-example/public/icons8-attach-60.png | Bin 2417 -> 0 bytes widget-example/public/icons8-bot-80.png | Bin 3338 -> 0 bytes .../public/icons8-chevron-up-52-white.png | Bin 432 -> 0 bytes .../public/icons8-chevron-up-52.png | Bin 710 -> 0 bytes .../icons8-connection-status-off-96.png | Bin 2643 -> 0 bytes .../public/icons8-connection-status-on-96.png | Bin 2660 -> 0 bytes widget-example/public/icons8-customer-80.png | Bin 2404 -> 0 bytes .../public/icons8-delete-100-white-full.png | Bin 847 -> 0 bytes .../public/icons8-delete-100-white.png | Bin 847 -> 0 bytes widget-example/public/icons8-delete-100.png | Bin 820 -> 0 bytes widget-example/public/icons8-delete-64.png | Bin 613 -> 0 bytes widget-example/public/icons8-edit-90.png | Bin 843 -> 0 bytes .../public/icons8-fantasy-filled-100.png | Bin 3910 -> 0 bytes widget-example/public/icons8-happy-100.png | Bin 4397 -> 0 bytes widget-example/public/icons8-hashtag-50.png | Bin 387 -> 0 bytes .../public/icons8-minus-48-white.png | Bin 187 -> 0 bytes widget-example/public/icons8-minus-96.png | Bin 230 -> 0 bytes .../public/icons8-science-fiction-80.png | Bin 2290 -> 0 bytes widget-example/public/icons8-sent-60.png | Bin 1062 -> 0 bytes widget-example/public/icons8-sms-100-dark.png | Bin 1909 -> 0 bytes widget-example/public/icons8-sms-100.png | Bin 1357 -> 0 bytes .../public/icons8-sms-filled-100.png | Bin 1310 -> 0 bytes widget-example/public/index.html | 44 -- widget-example/public/manifest.json | 15 - widget-example/public/style.css | 531 ----------------- widget-example/src/App.js | 23 - widget-example/src/App.test.js | 8 - widget-example/src/Client.js | 22 - widget-example/src/api/AuthSvc.js | 167 ------ widget-example/src/api/InboxSvc.js | 5 - widget-example/src/api/StatisticsSvc.js | 5 - widget-example/src/api/index.js | 4 - widget-example/src/api/utils.js | 158 ----- widget-example/src/api/validate.js | 87 --- widget-example/src/common/index.js | 73 --- widget-example/src/components/Chat/index.js | 42 -- widget-example/src/components/Root/index.js | 109 ---- .../src/components/common/InputComponent.jsx | 122 ---- widget-example/src/components/index.js | 4 - widget-example/src/constants/icons.js | 21 - .../ChatApp/Components/AudioPlayer/index.js | 90 --- .../ChatApp/Components/AudioPlayer/style.scss | 270 --------- .../ChatApp/Components/AvatarWrapper/index.js | 31 - .../Components/AvatarWrapper/style.scss | 11 - .../Components/CannedResponse/index.js | 80 --- .../Components/CannedResponse/style.scss | 9 - .../ChatApp/Components/ChatCampIcon/index.js | 36 -- .../Components/ChatCampIcon/style.scss | 11 - .../Components/DesktopNotification/index.js | 59 -- .../ChatApp/Components/Emoji/index.js | 54 -- .../ChatApp/Components/Emoji/style.scss | 373 ------------ .../Components/GroupParticipantsList/index.js | 93 --- .../Components/HiddenChatWindow/index.js | 112 ---- .../Components/HiddenChatWindow/style.scss | 5 - .../ChatApp/Components/LeftPanel/index.js | 100 ---- .../ChatApp/Components/LeftPanel/style.scss | 54 -- .../ChatApp/Components/ListHeader/index.js | 187 ------ .../ChatApp/Components/ListHeader/style.scss | 68 --- .../ChatApp/Components/MessageAction/index.js | 163 ------ .../Components/MessageActionCard/index.js | 64 -- .../ChatApp/Components/Popover/index.js | 36 -- .../ChatApp/Components/ProfileCard/index.js | 56 -- .../ChatApp/Components/ProfileCard/style.scss | 3 - .../ChatApp/Components/ReadReceipt/index.js | 57 -- .../ChatApp/Components/Roster/index.js | 230 -------- .../ChatApp/Components/Roster/style.scss | 112 ---- .../ChatApp/Components/SmartChat/index.js | 114 ---- .../Components/SoundNotification/index.js | 45 -- .../ChatApp/Components/TitleAlert/index.js | 49 -- .../ChatApp/Components/WelcomeBubble/index.js | 69 --- .../Components/WelcomeBubble/style.scss | 81 --- .../ChatApp/Components/Window/index.js | 87 --- .../ChatApp/Components/Window/style.scss | 31 - .../ChatApp/Components/WindowContent/index.js | 411 ------------- .../Components/WindowContent/style.scss | 283 --------- .../Components/WindowFooter/index-backup.js | 335 ----------- .../ChatApp/Components/WindowFooter/index.js | 328 ----------- .../Components/WindowFooter/style.scss | 185 ------ .../ChatApp/Components/WindowHeader/index.js | 401 ------------- .../Components/WindowHeader/style.scss | 269 --------- .../src/containers/ChatApp/index.js | 189 ------ .../src/containers/ChatApp/reset.scss | 209 ------- .../src/containers/ChatApp/style.scss | 383 ------------ widget-example/src/containers/index.js | 12 - widget-example/src/index.js | 119 ---- widget-example/src/logo.svg | 7 - widget-example/src/middlewares/index.js | 551 ------------------ widget-example/src/reducers/index.js | 28 - widget-example/src/registerServiceWorker.js | 108 ---- widget-example/src/state/action-types.js | 70 --- widget-example/src/state/app/actions.js | 25 - widget-example/src/state/app/reducer.js | 53 -- widget-example/src/state/app/selectors.js | 20 - widget-example/src/state/auth/actions.js | 10 - widget-example/src/state/auth/reducer.js | 27 - widget-example/src/state/auth/selectors.js | 11 - .../src/state/groupChannels/actions.js | 145 ----- .../src/state/groupChannels/reducer.js | 114 ---- .../src/state/groupChannels/selectors.js | 6 - .../src/state/groupChannelsList/actions.js | 24 - .../src/state/groupChannelsList/reducer.js | 54 -- .../src/state/groupChannelsState/actions.js | 112 ---- .../src/state/groupChannelsState/reducer.js | 59 -- .../src/state/groupChannelsState/selectors.js | 6 - widget-example/src/state/login/actions.js | 18 - widget-example/src/state/login/reducer.js | 29 - widget-example/src/state/login/selectors.js | 6 - widget-example/src/state/messages/actions.js | 46 -- widget-example/src/state/messages/reducer.js | 25 - .../src/state/messages/selectors.js | 4 - .../src/state/onlineUsers/reducer.js | 22 - .../src/state/onlineUsers/selectors.js | 6 - .../src/state/openChannels/actions.js | 61 -- .../src/state/openChannels/reducer.js | 86 --- widget-example/src/state/settings/actions.js | 20 - widget-example/src/state/settings/reducer.js | 0 .../src/state/settings/selectors.js | 0 widget-example/src/state/smartChat/actions.js | 39 -- widget-example/src/state/smartChat/reducer.js | 32 - .../src/state/smartChat/selectors.js | 7 - widget-example/src/state/user/reducer.js | 28 - widget-example/src/state/user/selectors.js | 6 - widget-example/src/state/userList/actions.js | 19 - widget-example/src/state/userList/reducer.js | 28 - widget-example/src/styles/base.scss | 15 - widget-example/src/styles/index.scss | 1 - widget-example/src/styles/mixins.scss | 64 -- widget-example/src/styles/vars.scss | 30 - widget-example/src/utility/DetectBrowser.js | 47 -- widget-example/src/utility/ProcessMessage.js | 71 --- widget-example/src/utility/Translations.js | 34 -- widget-example/src/utility/UnicodeToImg.js | 182 ------ widget-example/src/utility/Utility.js | 343 ----------- widget-example/src/utility/UtilityTime.js | 236 -------- widget-example/src/utility/status.js | 20 - widget-example/src/variables.scss | 8 - 144 files changed, 51 insertions(+), 10451 deletions(-) delete mode 100644 widget-example/.env.development delete mode 100644 widget-example/.env.production delete mode 100644 widget-example/.eslintrc.json create mode 100644 widget-example/index.html delete mode 100644 widget-example/package.json delete mode 100644 widget-example/public/chatcamp.png delete mode 100644 widget-example/public/favicon.png delete mode 100644 widget-example/public/icons8-attach-60.png delete mode 100644 widget-example/public/icons8-bot-80.png delete mode 100644 widget-example/public/icons8-chevron-up-52-white.png delete mode 100644 widget-example/public/icons8-chevron-up-52.png delete mode 100644 widget-example/public/icons8-connection-status-off-96.png delete mode 100644 widget-example/public/icons8-connection-status-on-96.png delete mode 100644 widget-example/public/icons8-customer-80.png delete mode 100644 widget-example/public/icons8-delete-100-white-full.png delete mode 100644 widget-example/public/icons8-delete-100-white.png delete mode 100644 widget-example/public/icons8-delete-100.png delete mode 100644 widget-example/public/icons8-delete-64.png delete mode 100644 widget-example/public/icons8-edit-90.png delete mode 100644 widget-example/public/icons8-fantasy-filled-100.png delete mode 100644 widget-example/public/icons8-happy-100.png delete mode 100644 widget-example/public/icons8-hashtag-50.png delete mode 100644 widget-example/public/icons8-minus-48-white.png delete mode 100644 widget-example/public/icons8-minus-96.png delete mode 100644 widget-example/public/icons8-science-fiction-80.png delete mode 100644 widget-example/public/icons8-sent-60.png delete mode 100644 widget-example/public/icons8-sms-100-dark.png delete mode 100644 widget-example/public/icons8-sms-100.png delete mode 100644 widget-example/public/icons8-sms-filled-100.png delete mode 100644 widget-example/public/index.html delete mode 100644 widget-example/public/manifest.json delete mode 100644 widget-example/public/style.css delete mode 100644 widget-example/src/App.js delete mode 100644 widget-example/src/App.test.js delete mode 100644 widget-example/src/Client.js delete mode 100644 widget-example/src/api/AuthSvc.js delete mode 100644 widget-example/src/api/InboxSvc.js delete mode 100644 widget-example/src/api/StatisticsSvc.js delete mode 100644 widget-example/src/api/index.js delete mode 100644 widget-example/src/api/utils.js delete mode 100644 widget-example/src/api/validate.js delete mode 100644 widget-example/src/common/index.js delete mode 100644 widget-example/src/components/Chat/index.js delete mode 100644 widget-example/src/components/Root/index.js delete mode 100644 widget-example/src/components/common/InputComponent.jsx delete mode 100644 widget-example/src/components/index.js delete mode 100644 widget-example/src/constants/icons.js delete mode 100644 widget-example/src/containers/ChatApp/Components/AudioPlayer/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/AudioPlayer/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/AvatarWrapper/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/AvatarWrapper/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/CannedResponse/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/CannedResponse/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/ChatCampIcon/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/ChatCampIcon/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/DesktopNotification/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Emoji/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Emoji/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/GroupParticipantsList/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/HiddenChatWindow/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/HiddenChatWindow/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/LeftPanel/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/LeftPanel/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/ListHeader/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/ListHeader/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/MessageAction/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/MessageActionCard/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Popover/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/ProfileCard/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/ProfileCard/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/ReadReceipt/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Roster/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Roster/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/SmartChat/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/SoundNotification/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/TitleAlert/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WelcomeBubble/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WelcomeBubble/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/Window/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/Window/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowContent/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowContent/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowFooter/index-backup.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowFooter/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowFooter/style.scss delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowHeader/index.js delete mode 100644 widget-example/src/containers/ChatApp/Components/WindowHeader/style.scss delete mode 100644 widget-example/src/containers/ChatApp/index.js delete mode 100644 widget-example/src/containers/ChatApp/reset.scss delete mode 100644 widget-example/src/containers/ChatApp/style.scss delete mode 100644 widget-example/src/containers/index.js delete mode 100644 widget-example/src/index.js delete mode 100644 widget-example/src/logo.svg delete mode 100644 widget-example/src/middlewares/index.js delete mode 100644 widget-example/src/reducers/index.js delete mode 100644 widget-example/src/registerServiceWorker.js delete mode 100644 widget-example/src/state/action-types.js delete mode 100644 widget-example/src/state/app/actions.js delete mode 100644 widget-example/src/state/app/reducer.js delete mode 100644 widget-example/src/state/app/selectors.js delete mode 100644 widget-example/src/state/auth/actions.js delete mode 100644 widget-example/src/state/auth/reducer.js delete mode 100644 widget-example/src/state/auth/selectors.js delete mode 100644 widget-example/src/state/groupChannels/actions.js delete mode 100644 widget-example/src/state/groupChannels/reducer.js delete mode 100644 widget-example/src/state/groupChannels/selectors.js delete mode 100644 widget-example/src/state/groupChannelsList/actions.js delete mode 100644 widget-example/src/state/groupChannelsList/reducer.js delete mode 100644 widget-example/src/state/groupChannelsState/actions.js delete mode 100644 widget-example/src/state/groupChannelsState/reducer.js delete mode 100644 widget-example/src/state/groupChannelsState/selectors.js delete mode 100644 widget-example/src/state/login/actions.js delete mode 100644 widget-example/src/state/login/reducer.js delete mode 100644 widget-example/src/state/login/selectors.js delete mode 100644 widget-example/src/state/messages/actions.js delete mode 100644 widget-example/src/state/messages/reducer.js delete mode 100644 widget-example/src/state/messages/selectors.js delete mode 100644 widget-example/src/state/onlineUsers/reducer.js delete mode 100644 widget-example/src/state/onlineUsers/selectors.js delete mode 100644 widget-example/src/state/openChannels/actions.js delete mode 100644 widget-example/src/state/openChannels/reducer.js delete mode 100644 widget-example/src/state/settings/actions.js delete mode 100644 widget-example/src/state/settings/reducer.js delete mode 100644 widget-example/src/state/settings/selectors.js delete mode 100644 widget-example/src/state/smartChat/actions.js delete mode 100644 widget-example/src/state/smartChat/reducer.js delete mode 100644 widget-example/src/state/smartChat/selectors.js delete mode 100644 widget-example/src/state/user/reducer.js delete mode 100644 widget-example/src/state/user/selectors.js delete mode 100644 widget-example/src/state/userList/actions.js delete mode 100644 widget-example/src/state/userList/reducer.js delete mode 100644 widget-example/src/styles/base.scss delete mode 100644 widget-example/src/styles/index.scss delete mode 100644 widget-example/src/styles/mixins.scss delete mode 100644 widget-example/src/styles/vars.scss delete mode 100644 widget-example/src/utility/DetectBrowser.js delete mode 100644 widget-example/src/utility/ProcessMessage.js delete mode 100644 widget-example/src/utility/Translations.js delete mode 100644 widget-example/src/utility/UnicodeToImg.js delete mode 100644 widget-example/src/utility/Utility.js delete mode 100644 widget-example/src/utility/UtilityTime.js delete mode 100644 widget-example/src/utility/status.js delete mode 100644 widget-example/src/variables.scss diff --git a/jquery-chat-example/chat.js b/jquery-chat-example/chat.js index 556053c..a64f667 100644 --- a/jquery-chat-example/chat.js +++ b/jquery-chat-example/chat.js @@ -50,9 +50,6 @@ $(document).ready(function(){ o += '' } return o - // return '
' + message.user.displayName + '
' + message.text + '
'+ timeago().format(message.insertedAt*1000) +'
' - - // '
' + message.user.displayName + '

' + message.text + '

' + timeago().format(message.time) + '

' } var scrollToBottom = function() { @@ -78,10 +75,11 @@ $(document).ready(function(){ // Get Open Channel cc.OpenChannel.get(openChannelId, function(error, openChannel) { if(!error){ - console.log("Open Channel Successfully retrieved", openChannel) + // Join Open Channel openChannel.join(function(error) { $('.chat-room-name').html(openChannel.name) $('.chat-participants').html(openChannel.participantsCount + ' Participants') + // Get history of Open Channel let previousMessageListQuery = openChannel.createPreviousMessageListQuery(); previousMessageListQuery.load(50, null, function(previousMessageListQueryError, messages) { if(!previousMessageListQueryError){ @@ -98,8 +96,6 @@ $(document).ready(function(){ }) } }) - - $('#message-to-send') var channelListener = new cc.ChannelListener(); @@ -121,4 +117,6 @@ $(document).ready(function(){ sendMessage() }) + $('#message-to-send').attr('placeholder', 'You are logged in as ' + userDisplayName + '. Type your message here and press enter to send.') + }) diff --git a/widget-example/.env.development b/widget-example/.env.development deleted file mode 100644 index 42107d2..0000000 --- a/widget-example/.env.development +++ /dev/null @@ -1,7 +0,0 @@ -NODE_PATH=src -REACT_APP_PERF=true -REACT_APP_CHATCAMP_APP_ID=6346990561630613504 -REACT_APP_CHATCAMP_ACTION=FALSE -REACT_APP_CHATCAMP_LIST_PANEL_SHOW=TRUE -REACT_APP_CHATCAMP_LIST_PANEL_OPEN_DEFAULT = TRUE -REACT_APP_CHATCAMP_WELCOME_BUBBLE_SHOW=TRUE diff --git a/widget-example/.env.production b/widget-example/.env.production deleted file mode 100644 index 99bcf7e..0000000 --- a/widget-example/.env.production +++ /dev/null @@ -1,7 +0,0 @@ -NODE_PATH=src -REACT_APP_PERF=true -REACT_APP_CHATCAMP_APP_ID=6346990561630613504 -REACT_APP_CHATCAMP_ACTION=FALSE -REACT_APP_CHATCAMP_LIST_PANEL_SHOW=TRUE -REACT_APP_CHATCAMP_LIST_PANEL_OPEN_DEFAULT=TRUE -REACT_APP_CHATCAMP_WELCOME_BUBBLE_SHOW=TRUE diff --git a/widget-example/.eslintrc.json b/widget-example/.eslintrc.json deleted file mode 100644 index cc0f939..0000000 --- a/widget-example/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "react-app" - ] -} diff --git a/widget-example/index.html b/widget-example/index.html new file mode 100644 index 0000000..234c25f --- /dev/null +++ b/widget-example/index.html @@ -0,0 +1,47 @@ + + + + + + + + + + ChatCamp JavaScript SDK - Widget Example + + + + + +
+ + + + + diff --git a/widget-example/package.json b/widget-example/package.json deleted file mode 100644 index cad1737..0000000 --- a/widget-example/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "chatcamp-widget-example", - "homepage": "https://demo.chatcamp.io/widget-example", - "version": "1.0.0", - "description": "JavaScript Chat Widget Example", - "dependencies": { - "axios": "^0.17.1", - "bootstrap-sass": "^3.3.7", - "chatcamp": "^0.1.27", - "debug": "^3.1.0", - "emoji-mart": "^1.0.1", - "flow-bin": "^0.49.1", - "halogen": "^0.2.0", - "immutable": "^3.8.1", - "loaders.css": "^0.1.2", - "lodash": "^4.17.4", - "node-sass-chokidar": "0.0.3", - "npm-run-all": "^4.0.2", - "react": "^15.6.1", - "react-addons-shallow-compare": "^15.6.2", - "react-avatar": "^2.3.0", - "react-bootstrap": "^0.31.1", - "react-dom": "^15.6.1", - "react-intl": "^2.3.0", - "react-loaders": "^2.6.0", - "react-mic": "^9.0.0", - "react-mixin": "^3.0.5", - "react-player-controls": "^0.5.20", - "react-redux": "^5.0.5", - "react-scripts": "1.0.10", - "react-sound": "^1.2.0", - "react-textarea-autosize": "^5.1.0", - "react-timer-mixin": "^0.13.3", - "redux": "^3.7.1", - "redux-persist": "^5.6.12", - "redux-persist-transform-immutable": "^4.3.0", - "redux-thunk": "^2.2.0", - "semantic-ui-react": "^0.77.2", - "store2": "^2.5.1" - }, - "devDependencies": { - "cross-env": "^5.1.3", - "node-sass": "^4.5.3", - "react-addons-perf": "^15.4.2", - "redux-devtools-extension": "^2.13.2", - "why-did-you-update": "0.0.8" - }, - "scripts": { - "build-css": "node-sass-chokidar ./src/containers/ChatApp/style.scss --include-path ./node_modules -o src/", - "watch-css": "npm run build-css && node-sass-chokidar ./src/containers/ChatApp/style.scss --include-path ./node_modules -o src/ --watch --recursive", - "start-js": "cross-env NODE_PATH=src && react-scripts start", - "start": "npm-run-all -p watch-css start-js", - "build": "cross-env NODE_PATH=src && npm run build-css && react-scripts build", - "test": "react-scripts test --env=jsdom", - "eject": "react-scripts eject", - "flow": "flow", - "eslint-test": "eslint src" - } -} diff --git a/widget-example/public/chatcamp.png b/widget-example/public/chatcamp.png deleted file mode 100644 index e4f08033eaa4354af015798790bf16701f650e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88873 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

_C0U6^G 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�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

!^mg*yTf=aAB;Cl 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

(r? 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 E01%@*aR2}S diff --git a/widget-example/public/icons8-attach-60.png b/widget-example/public/icons8-attach-60.png deleted file mode 100644 index bb9f19c49e260d5c2c8336dba2fb258730f24080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2417 zcmV-%36A!OP)I+>%R|7F29l;)Ys8wChDf)e zr9vCnoqfEy$3Iwf-hIpan0rxhbSMnNZLaISOhgUSF+pIjj>OxBCGV^)>{VE(v045(keE6nJCbO;FK}Lm> zR29DOFJ!jn*k`zcfRL&bIP6bnmy9K?=Jw*qUF#* zM330E{o>`uNh!xN^X~x+iO{FRFuY^gvSp`A&3jE&*z>%H0IWx$*n5hJ1pwQ&Uoi}0 z0)W#IdXQllE6bVts;{u``(FjH1wh{jodq!4ah%;1#F+tLSA=R;N{vXRQXdo>cU4zd zN_iK6R^*EfnR#9%VgaDbKe{dTC!+gGjk{`sJ zzp=4#$hvjw66M6sX0vV4Ya+U_)R-$O*z>&4FmndLV9oTD<2dOk!OZ0Qev@gMZSC#t zZJy^%E)_qKNJRe&z|19Y)D;ul*w{FPh%x|%Yo=!$$62BKr_*T(;747TpCBTy)EuU1 z-lS1&-8x2aMFg)}wdzLGH1`3xSu;In+x8OO-}n8M%$(HdqT34qgkgA>M!j8XOw|Po zA#N}XV-J8)nrTygef=W6(DyuV34kAKzNZYs_(8FGT3cI9BKl60W9C1U%CAo;he{xX z=$}X=b^sWwnYP!})jcwI?%Xg+c9oZFG~Y9(X--QflW!H9>-h2G3jy2~p>l>{>?oCE z)mB&t(XXbaW(yHb&`kS-Aeg&o(V`1c()ay&C@e3}DWzs4lgYmpn@dVL7C>{9Bcctq zZJ#WaXH^8Zwzis41ptwQYNUvALv_w=?r0 z0H2J|3cxJKadwuIZ;w|vkw~mTq1a2!JmfK4c@rRSF+b~rQdM7~%s^ONO@ z1$wx`Qp(4fd96kt&*gFxmoH!bj^;a-nfC*@Awn}VFLYh^m&N93YHAuBhT$RP|49MB z(~jd5Y;(mBTW~s^9;1{xiu~5hNz*hZCX>m${jjmI@eb284+6+5{g`>F>$>_4%fs5W zYim0@I}ZRDqnVzwZF@nb-OE_pk`TgBO0^(gY&(FNy4Z9&eT!0RA2hK7JC$h z5XRZFXEzejEX{Nz2!dJqo?a>9tnl5)|Fb))7YkjhoA(qD(XQIs+HVOV^fv2%!OUb? z)_P`sNHe|0%rk`$=c1$#!Vp4K(!8%+Ff&inuJ`CZ*=%+a^0%LV8;0>{sYg*txf;L% zjea8x!@FJAJ)`-Kvn=bRWm)Ha-~U;;`Nvt|TcQ_4^he!+nf3j0PcoT&uUJqi&_Ow;_A?m$Ez)2N~ia?kUYFtgC; zcL7XUzI=IJd@1GaM6?&c$0Kx@%jNPO_sb!UV7*<_-O9bMU0?R@`@X+`i1b&)55h2< z=DO~iQL?G2X(Ti6Lt%OOlBDh54!Lx}x0VD=sa4-+vR4)(sJT-nQ*y-T3_(`PJ=M0CwVkH?@wLU$86-%nYJ}d!1$G2VK|A6Dx$cA(zYTMxof&`uh5cYw0-K(kpoZ z3}ae%eqBc)PnH?>0yEEZT{mxwE7CIBSyxy0aGdh8V!=d|mlQMK+tSj~w>w|Qah@Qe z`;mXrr=yLTXX?i-MOsD&`t|DWJOqkx~w1 z=2roHRx>pRL69u=R-~i3xw$5r&29iNS2MLS^MrD%sB+MwCZ6y6cLF#JV4!9?N<@#_ zwq0_yec!(a7f&B<)lBazr6#3PslWFmM;$%xOQ+N62}-F=0ETKN2C$!*w-|J2p z2w*@NLplI#H%+s#)FE0maK*mU5<>K|ENdJtb{B~+*^%; jr5C;EMK5~s|A7AhlmL|yC33-L00000NkvXXu0mjfe6E== diff --git a/widget-example/public/icons8-bot-80.png b/widget-example/public/icons8-bot-80.png deleted file mode 100644 index 35b67b58ba57718b5a75527b990b37ea70b5fc53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3338 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 U@GuE(XaE2J07*qoM6N<$f^{Bda{vGU diff --git a/widget-example/public/icons8-chevron-up-52-white.png b/widget-example/public/icons8-chevron-up-52-white.png deleted file mode 100644 index d35efdb9a503149cfbb3faee50483973e93403b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg1|*MGNWTVBEX7WqAsj$Z!;#Vf4nJ zNUsNB#yF{oGC)De64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&bv<1i zLoyoQUfq~?$UwsNp}lP7jHVWrw?PTH_m|DAIAg~i$SrhcxwG)eRSFh;y}s4`Q+S{M z3T8VqCCE#2>6BNTGnhZ$`Q9P4fvN8RW5v1J`GJ-*)+v9O^gGUR?!g@^Lf`%7UBzBp zufc!j?}CP{>dR_E7?#Cc;qa+k!66~O^`G{PKN<;)Z*28{-L$i-W$cblZmXFo`{9P2 z^?Bp%zk?Jdp65hrBnWqD@?A~xOEx&Sds$>4}dc zxqVgg+mht{fxHIYR!QQ4g@)%M<_bN2vtxycM0yUl&g8y7Z)_NEU$F*xG{|dZ{cZD$ XO@Hs_{kXIg7`hCeu6{1-oD!M7w7Jq+AC_hL!MB085a)aszzKjG4&~?OdCQ^p z0>Bd~WhaDW&6OG7Wj2pLLZILX2F_y7mtF$mDr`<`SM|*j&Tfz@BlFUwhm(*AYfCKvjHQ%cyB^vh=MSkaGF~voj?y&U3l?C= svg{sX>?m|jBoc{4B9TZW68UfW1(J6Z9-@5vcK`qY07*qoM6N<$g79}V-~a#s diff --git a/widget-example/public/icons8-connection-status-off-96.png b/widget-example/public/icons8-connection-status-off-96.png deleted file mode 100644 index 64272559b8f74a80862f65b1452b95eaf74730e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2643 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 Sk@Q{w0000?JpHBUch41OiB%8Wa)?f>bn` zwp69n+B$ZoH?i7_Bi6C4+l$8P=!}X|X8NVmRxKk_>r@cN78FZ@Ks(cdh!6chwOAY=B)f&4cNPUo_WJ!2nxK^XnNS1EeqEIlQoT>%PJ!%E9{#bQ ze{cp_``4e8)EP-|1Wbs5H&^UP3gY|)!nXi7KvG-`m*-BQATyqfBrhp(ZlpImRcLAp z(9qJsq2q1ruWh0EY*(LLK$Z1fp3Xk%y?iP& zGZOj@8xB=CRNu<>{f+$V$SG6-IDyK&TOMAt(OB|>5HSOb*6(qpwREjjm2U$SW+!k* z>2%Vkc*mt%-`v5=J8Jmwcq;&^ym%_v^@F|NSjMbXvNq zI9Ha;OSdh!0&nkYU}IISb_YX(@TOY6+qOP<#W|Zo42f|Ai`MUPrM7gxj&ftH+sXaq zh2*8h8i`fYc$Vik9pqeR5YRUQoq?6x{mX(zg7spV6bDFc?tT{K##oP&2UgBCW*)%w zsc}5;g*o`#PC#ysaeJON7OWSe2Ck^6{0eZ7%VBZfO|!{L8sGhHBxEJ~xVLN;PRl}s z`){bIy47SnV+NKz{!W?*F96(DlFRg|ai&6@$Bc}4ZY`b`-Vj~4{PA5WreYa0u*Y&$ z04asp30ylb-Bg$%Svo(1g3JVfG>4^+nTlh?z!krGZ<@eeBEs$0Og9l?SOmDEG!GFF z^zQOs?Huh)XG9n=&~gS>1FoxQrjQYV``%DwCHp9vkpkfEcFJlKF>E(*sehYOk#7K8 z_n8d4-n2y9rN@E*bEZuRZ-m0R*@^uIDn$S@(jzx)8IFRCa4sUcz;12Z4HR@1Kt}S! zbshsr@9oG!$ZWf{4fMj236K=)wqJUTq{PJlAdqRdwuxa(9Dvtldxtk>JTd*b#M`ZH z!a(_-&r2Q?2DSloboCgJ9vhvX z)-7z;BL+yB$R zq54*U#(+EEHxIsAD}%DF74^y>mE>8;v|AZ@6=rk3^ll8%LcGc{|m-M|%3?aC*l z_n`XKzWJ>H87c7;G@WUuwy~ANb!IQUcElOCfn`trV@9Y)9!2C%z_LWh&rD+ej5PA5PMP?}6$-~rwD9lh zMvm6EpyBJX2i2D>hyHx?n#I-QkstHvmHDd@dffU;5mp0EON4p(XhOMTq$_$OI{OvHNwU}kcHms?5;FIn>d;(cyzy><@C30{B#3CgQW{o6bj zI_81~wsy(0sw__Mxw)lu4nB{|&U_~&v0fKnT2e^7*9{`2Zja}g3$-88z!gtamI2?i zETMdH0kPgo-@HEJJTa6nF2J$`;JepXRIM1Q?Vtu0t>5DkWgQ^J^Rh`xocQ;CBhAz) zu`HYup2|BUv~Hg*WZ=HRI+1LkZ!j4JNRIFKB4^;f!3<0X@O}yg%_F6M0->DuM>vBSm<-^F8Fbk5 zsl*%8e=#Kw+&7qk(*F@9%qM1?=a=!<94>XD29A>8gb>y<|rRVJ;;AUi}XlIlxfl@WbhtdO_(C=Xw7`dFy&s44=&m(&N zC=u|L@mGY$ULyHYdfujs?2IMHlCwA0J{ZAug)(OmjO06g z#NT-o$|)U#5!_ZNQ+5hQa34aMBH;d1jNrb6a!ONT1otVFW10gaxbN7vM_nztjr088L(= zMleh4e;)fl@q`h~)F+BZj9|9DP&{K;-Jm2e+<{ zDvp9q3bqptP73y8YiE=>=aQpFcFJq+0bYgiz5pdJMlgU*y}Ff-iBd`_rIb=iDW#O^ ZrN1A4qV*rK_rL%E002ovPDHLkV1kBJZ}R{E diff --git a/widget-example/public/icons8-delete-100-white.png b/widget-example/public/icons8-delete-100-white.png deleted file mode 100644 index fb742abe9fa7ee82e3ff2f7b30840271fa4a3bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)8gb>y<|rRVJ;;AUi}XlIlxfl@WbhtdO_(C=Xw7`dFy&s44=&m(&N zC=u|L@mGY$ULyHYdfujs?2IMHlCwA0J{ZAug)(OmjO06g z#NT-o$|)U#5!_ZNQ+5hQa34aMBH;d1jNrb6a!ONT1otVFW10gaxbN7vM_nztjr088L(= zMleh4e;)fl@q`h~)F+BZj9|9DP&{K;-Jm2e+<{ zDvp9q3bqptP73y8YiE=>=aQpFcFJq+0bYgiz5pdJMlgU*y}Ff-iBd`_rIb=iDW#O^ ZrN1A4qV*rK_rL%E002ovPDHLkV1kBJZ}R{E diff --git a/widget-example/public/icons8-delete-100.png b/widget-example/public/icons8-delete-100.png deleted file mode 100644 index 47cf150569ee59e9581fc634e9691c204946e1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmV-41Izr0P)kSlWAsbU;Cb))Q5h_SM!&XCYfdc5fKp)5fKp)5g*>x9>Ab#$7Bm&58%Gm00w=< z@tFK5z3>*mVffe&gLuanJTBW(3%>)f`)lFD@cDJA0Sx+#_%SJV^K}8>*JuE*J7v5x z4mcj0_oW9>6hkq{bCgt!i<(0LKBGLqXbkcc#e59%5T%(I)N_>PVo;A!nvFrJC=WG< zI#cs8=o0Nm=_UrX9HqM$)MAuwV^B*`9?^LWY9UH0#%0Z+ai#D!t@-crBPxr zUZ5DW1*{iEF;)_=Jc?qhEFd1`X~yryV(f6dNt6WwULWQA=;s+DWSrBLfca4rqmY2p zQ52)FfOHhasN@#YJL`SoYhNnO=*~5!J4HLAvQ(6&W4x(7zyd#U3@~;Wz9$96?niY0 zQOQTdpAn8dMe?E2jBdns2A`V>i2q5fos!A_Vo*Rl%5BL(J(v@N0u&{ySd3Gz^rc>T zRFs9zi9w38vL!J{QC4z?^-f4ol!exeL5gyw95E<$+Nz=?q++ajdZ(hyR3ZkYqTFRz zt4UXw-oEbu++_B zW00FDsTdaDuA=)WEybX2quist7}Q;qmSa#iQF@3$%}41e2BqFZ(tMO2V^AuJ+3TnD z9D|yP;voi^kK!o?nT_Hx2APXu_WBtGnTetpe^ig6i-Jv6zbM!@{JS%%U31Bh@lJUz yJ-{;*V~kOX#~@vLbxOxXL_|bHL_|bHT=)%t2PN1zE13lV0000<1PJy^uO09)VyEJTI{B{YN|NP3S3FywT-egM{77qy>#JU&a_b$EiNMU4W_QnZKLo z{}unj$oJja7T)oYrv!A1j4{A_u95e6sn3Ls zl<)@0Jvq%@YzZ>q9pU@kD5)rlq9}@@DCP458JdoZK*>4f00000NkvXXu0mjfzHARc diff --git a/widget-example/public/icons8-edit-90.png b/widget-example/public/icons8-edit-90.png deleted file mode 100644 index a065bf93a51a9bfba0301b0eb624728a23057274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901|%(3I5Gh##^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!X^2Brs|E{-7;ac}RO@AgfUIsP%)&9`}y(=440 z!C6zLzS;PNJ>tBZ*|MAs6X#A*DiaI(#DC_}ij&iNuP%5a!lml@?yKGR8u`1HbF1H3 zp4Tru|2*`*-1j@h^B(WHT%umet^@}A+!kLv_pqR1Lg__5PoE>UXV)0-@32YwdpO5P z{EY~w>zS=eIf6U*-rJ_!OkCd0uN0?UZ1#B1ah&2-@~s3mt`!wa3kjTwA7Q^ zX4i||d?_;fbN{a+&t{!J!+AUHU#OC`XL9tD$z?zP%oe)oDHJ{NwQKL%6K5A4342o3 zl%!o`9=B2SrvLLBXS(*zsh_B1JvZsQ+mjQ0N&a3UHv``|Jv!mHKRLbY%@^acXD5>H ze6~H^^jGxR{ravytrwp^net2GXPa%cS=XFKrSt_SBsGfIurLeG-}~#nN@@8rgn|Qy z^^C)3M%(;%o2j_=p6fd2hTqqeIbF?MEb@I91wY~Z5}~>I$kG#{M=a8E7X?0%V!4@L zyC~p^X2#|KHLm3+j0K+0-uh|T30;8~yEYx$`?s&U$zoI7mK@N)}GRZo0< z{Qs^<(MlmhJ+VZYIQFB@Zi)9Og$t(KmHL0!@coUL?+z2SIf@#7=GJb1xFbAA@9p{N zU0YmFc&A>g+P86OQ-}WAmmyuU9TmH0Ec}|Ykk)-(Ge+-bo?4 R2ABaDJYD@<);T3K0RVY^l~Diy diff --git a/widget-example/public/icons8-fantasy-filled-100.png b/widget-example/public/icons8-fantasy-filled-100.png deleted file mode 100644 index 5793516bc13a04aa7e335d3eaa7a1277fcb6254f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3910 zcmV-M54rG(P)WyTC;N08+{| zQp#Vcw;xu$9cUo70Jy8(PFxh^b?yMLrN6&_Z9Sd1Ce%+S}WIv!1?O z6a+vzogM=aa4$tYeYq$IK+L>5=X#rza!tLQx!?tnQr-mM?K!tDW9D1x<U0el9)yyG}g zBftC{RzmJHXG$`sv0Nzr}4gmD^^|f?%c8(Cy2Laqr zAj!XKt&L}qtJY&#O_=$UB?P$|z+M0!7DC)ZM33bEpq6Fb!EE#o`!me^s{oGWKNuMq z=}0D%VP?J)z}rgLxZ9+lEKONM06ODKqPMsA;YcKs9vvOMbZKenB>-(E zE+@?B>BGXNWi=<^=( z{U3lUiRjmv`9lCU!?5ioqIcQ0{Z$WTHRme}0D5|Q9*f80&jPr{FiS5H*#H(i7WGB| z-)81skNF<=DhBZSlylQ@?AS5x>FHSnFyJw(pMS!Q9@8^`(1{Z#e(1HJrt9|RGB-E( z5HhcnM&q#7`naErO)bdLqemA3{B6Dc$RnLjr#0 zf71)1wLVQm57pZbmjp9MDlyRXf&f4&mHIS*qNC~6f|)0^*3VU9Nhxn; zW=TX_0Q_9N9m?TpB6=tg2<)4hnmXmjKvM`3iA1b;Jif^lVH+}wQ;p0b5gh?AVcYhX zV7L|nG_W9jeSIw(H*V}_W(nX{yuR4eYm{kYh2_!Gk-h~2z-T^ zf1a7|L1spGHThp6+Mi4&ADo$)`S08Zbr;0ltfm0$0r0LG7x&Y2I{n^QEcS2N8{4;U zzoMn3l@WIVp3V{B zM6pCoBS{Ic92C2yrhF{Z18J%<`W(B0Oc1p(zE)MM|l$ za);qOfB~)b6Q*{QQp3#rFe-1ap3f2C+g>v__2i;bD#Fb9Vw@$St+s6&iy?#zR!0+eXevO$o*GUWj05g9CRe0kxl^{~eyP5f8 zdAH9J(Kg3%{@K)y5MpOF#c=6WO1-yIBTXZSQtD3ud_3>=0)VZyZ9i^mM+mW#h^j3H z0Dzf4TB(huXw;>Ye*z$X1Hl3_Z*?5!A3fL^LuMpivn{liW&L6_8vTy%{MB@(7AU3u z7zM;|UsDYw1^~D_5ty}iAc0w_A~#LRkTX69k9&cx&Klks?5_w@A45K$*GtC?-_ zcznjxM%`XnRS+XfkeMg*>?8mT7waNhmURdv4)|D><>egv3bfWw*|x0!T*u5bI5>Ev zY2LaBqLkX^PVm*DhNhVL4z0CQEWz~j^h*GWZ3%jzySw|#)o?^>{gl>vw6nAGN2YmJ z{gvhRf}${Qz`c+nqA{)Yp>hekySvvC(e3&7iRe@J-FKhSE)`RbA3vTpO}nZ!L@Bky z?FH3Bj07_)+qR9mwaH{Mip;#&G8=(FU|*s1tHr7b;)*ee+SJMfGY>hAW88Q?`skyt z0yvs?`^ePPl=17O7OaXOH5MaDM8jUh$imFaUTq$O($s{S3sP$_01Vr<9rKg9y}f-F zz)#%E7rVQ=|EX%8`J|?T2q6aDwd-1mvAa}nsvMJ(lMBo|>s}s+L?XtGZ>^}AAWEqn zZaAb$W?PG~NJLw;)<)AHWjKh;m}H^~wkoD3f+(eeHLe-EY}+n2sppAPr%pZLh5`J6 zUmL^2!=1y!!=2Uer|N>ZVoaenH6saNht}FCU2&3rLrKpM^LWrHH-L8&B070#_pMx}E02|h? zUoWfdQ!aao{Oya11xL7Q}vk|@z>i~WZmyPjWJ zN-0(2nz7T17yu9m1X`K71?D}xBoQSqyX-RGdkUC&tk^RmD*CJ(o*b(7A(uQnPoWn= zN_hh^y{jDna=W`PGxL6C-WQ9-o~@*e{{H^8?d|P9K=I%>uguNOy~Pb<>j`5)lv0YB zA3<#nil&HY%yeC+!1qED4c`nw$+9iR33VKE~? znxSUoBcD#%$LH6;aUW-)-w)Cmzi zhRj!T&KhPTrPM6|!puAXz}GJJ5-bqWEQ*BxD=J8{i;+c28P-~tUF*o{I*$Xmw$^^R zJVQj2%)DP~{W4JG$95wd>?`)XLQ+JuYc<3G0246)AeBmGJ1eWX6NmE3URgtg5O)$$ z!SfkaVAX0yB?N=P9wHheqW7WtaUWk{<_DPhV4%YJkr#4SYh52(?gui9PPTC-)# zmN%?fvnE7Dy8#$~X{`ufXXgD&OG{CsM%@i__Z)yXRakH#QUG?E>?mwhq?Fxm8#4y; z@Pj9b=%Cw16pfLU%Q-=$ly?F6oDW~i(ez^EQtN?XZUc6kclXM2UWow!6B82&BKjX!^dknaT#&0hdsmtSGpqASj4WE~C1x%an{mJ2Z?V^^i50N=a!aDj;d0PgYY+%d(O_3PK$#nPK_PLSEz*?DH(1%DscN-^`U3rP$B z&|1$C(YcL#%shSY;K7PM;kT?&cO2(S?zR>$J%j`^E5~sjsl<_HC6!9;&Hn91p{R(0 z^Hm;#wlu}uRIQOxehUD!*4I~Rt6;a+ahw?<+6>_PCGwtjBf4GCVgLXU9bo3FeB83= zIK;N?$J^T4u5kmlJc&%>wS>$E<0AmBaU3WAjNS!FAP_j%+S=+l(7;75auKimKj+d8 UCAm&3zW@LL07*qoM6N<$f|N={Z2$lO diff --git a/widget-example/public/icons8-happy-100.png b/widget-example/public/icons8-happy-100.png deleted file mode 100644 index 599df7b0979d04c69c39901224d963ac60feb693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4397 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 diff --git a/widget-example/public/icons8-hashtag-50.png b/widget-example/public/icons8-hashtag-50.png deleted file mode 100644 index 1c2b4b88b905582c5b2f3176d8830c21cee66c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-mSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E76o-U3d z8I5nR+2%1B3LO1tD711KA7_zW--PTZ96RG3rYuo({U;KkU3R$rqD8XEz4e8g{T~^A zdN-r9qr*ei;rK;8qw1_jobw}|70b?fyYfUwm&NA2QLbV?@35p-&pP4pS!v}H#RbO3 z*Q@Wn)Lv?``HnOo zDqPtmS~vCo*8UT3Ebm!=nsxsCgE#u7db=YZe?4+0{z>9KMXgD;K0tG(-?xcP33G9A b(X(KyS3j3^P6Ez`WT*pxSp4nJ zn8$)Jqhx~{kij5X;u=vBoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G6i`vJr;B4q z#hkYn5Arq`@UR?o=wElq)rq;|$yDKtXK#<6vX)5iH2;4-XDpFODLe)e{e>91rh88dh7!qVmTVg^2rAj2D zKtkhnZLrt&KIitwdhC6g-I>|liP-Pg?zwl)oO|Zn=iEC`p+Y&4V&9;#`LrtbJ;tJC z$C9F!Q7fkMTLD+8ZuG?J2TOG;0A7FVA0@d@B?2u{aiB#i4zx(g+Q3}=xBCX?FI@(K z`Cp#Rw8^!$<}Ws7kHB-6IvEIs85j!Fap|({`HM~29jM0mXGi{GQ+5Z|&z*zM>%r&q zP(OE$?fHvM+1tR|C)d)nd_mFj7n`z2;OCu+11(Z273KS20HvRqJG0(G80p8fHnXt`|5hNB#~{@J$aQI{M9 z>T_gySC{zL-rT-C*Mn0H&XmlgA7GGpol06q!yaq9gmTn~l- zIj2?kEI#~`$HL{cIDuo@K#$kAHQ_uDPp-b7duB|+=W*flxVU@zBsM;BA2s7VfLfpr zPTEp#dkq}pKuy$>04wIt!sp2xp87m4RxFq`{7-$Sl(vn9V;rcExd5}Ksb94Gvf(4MN=!R&*m>uGIwf?wH8K^|L|2iF22^eC;|5@0!F@YrkYxby3*g@*y3aJ!G-B zPIJZf02|EcwbBNz0a#T(huUf{wd1`!Qa>Aje_y>}L2YrkIBZikdlj=o2evwF?1 z2gc>kRPpuBYu7pOw~i69&t1iahFN1=SRS5u=uZCgNgwI<0_ey~X7!qmK+$+CRgkE; z8<)BZX6qy&ICZEwK4+VFss*;1DkfeJw*xMP7x}O11QJLu5+X530n;m zY=)E-`eNe0-}WeaDG*|z}kTTle9eg4cG1&^mFFqYn9;`l1u zZ?w-64*-Z#DX$F>*00-rdUhc?3#-C0wK?sYvxm1YZU@lCHC%uiH^S^3Qd^cGpX}bnS@2Yo!L#wbcK2_3{HG`7$GHq(| zw@f}g zjOKD-s`{PwyeW`g#-jOI_Go{BM(*2tik|On5x}Sedk4(VaOEn>vhd-v9b2# zWR1Y}&$dnP^Yyh4Z}6FxnktV^?v1vu`OT>>W+)TgvGZZ06H#PFpiy3t)HP0lX$skw ztGtjU0$2K5ebFj81k3|IM#(mh+jSBk9t}Sn7p)mss43UqoAw?`+oO_yCz8+H)lT}2 zS~1+r7^Ih1lzQ6j_Ot>-qmkuGn} z^1G4LxE?^$=yzZzVsva(X%0*;?~!c{$>n{$aZlUHoaH4;6*l&$2>i4qRT%&++ZuY5 z$j=i0QunAR2QO&_(-sm8tdtkBIMCRm;vxQKE@O1%GSX7^sAyrW3vgrv_6;nz93YgXT&Bwl*@iJn zy@P0Zochb2PeHf9^nq}Ui7scnol6>4b!Q}6EU)cdVPkW92dD+V`qus2IeEO@>P_)+ z_W-+I{Q#h&Wyg|*cIvi$f1r?<&N*o|GP;nEV;W}x`!`ssL{EHUC}O*6v)mZWJ&3l7 z?GDtDw*gwuf5!EJ@;k9N7~%N)p8+6>lXmO3y$xLHZ>{nAyzLE;DB=?#+kT6ziecj{w((yI>+qN z|GZN6ZzdR|pC?X_NT;4Ru0)_k920>zYXhAck(CIvh+`tK(gxn5I3@xsZQw166C!W` z7;mx-%(;qODx4637tLO%;DVion85)Ns9pqlpr(2pD<8NQw>!H@Mnp!VF;4vRBEi8B zfaw!Pc2V{S)T*z)fZ}{`aERk)F7RnrFR^$$BVQ~Q=UP`Uts~BpbG4xf2TE^oDrH}d zfxJF+DwK!+14~_Q6eD3vYybcN M07*qoM6N<$f=AR;hX4Qo diff --git a/widget-example/public/icons8-sent-60.png b/widget-example/public/icons8-sent-60.png deleted file mode 100644 index 8de96843ab811ce3b6d8f8f64142cca5f41f718d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1062 zcmV+>1ljwEP)7M+eQ?I|DTHB1P;(DXk?2fLPetIs01iCQ`zQC6<%ChV-|zn^B9E?hodbA=ii#VB zd%fNnfYuFPRZ`rs81vhd{uY2O0DlKTaIn3-y_DUu^1~=BBCiZX7D=u(8jV*~5Vwi2 zNmz5g3gSj#$8mnY)Gnnf_M1E3A?QCvtzRlo# zi7*NSK(E(31@IuFIp->FQ?vm4!ezr%s`vZ-UKoa1T}Ugeghk}Gh0BKfBC;OG@gGHs z&m+R)6e?~dOfpYlO(Eh|!b+(;QhFM>id$9b3?EHNxFC7hY&Lhh-R@c1lNp7BAZP(N zAo+FL$x?C(ASC(y`uh5RNl!9UI0%9#Bo6^ROgcdhq>A{B!aF-V4;zifp@=+5zrNf^ zBt9Wr(x}ejg5;r6s=u+Zac&wsA-uP@*N)@3?KqB0a#=){NV)*pBC8V;xK)*&Mi2xolCFq!Mi-?;vZIu8Np|qz!gO%+E26xZ8SzxYw#+GOP5?ah zJnz@*orMV75{BWu!CPYgV zwgo35@^rj2aZ3BXe`jG~;d5QAM5F`2bsT5BXte;`O*&5kUW>@qU@-XE_x*VM%bT9V zA5~s0f>8y=d@8REGetEMDNXV#0MAIaM(rHemhXW6akQMLU(KrV1|rGWj2@v3d?iQMBqfh3`=^iRd_1!j9vtW;LM& zxrl14ghk|W0gtC#MKxB!B=d}LA)*@Fy>uSJg^FtCAv_mRjZt`ifB&<~%gawQm}{=0 z8l&)VIDDLPj#7wfY*IRDI+sdRV-yyV+eWyQq8g(x$yLj@3~xllFRQ4=Cc>taegmK% zMbVGG@Bg38vhu^`9{yrV{~3Vqq9}Uq`~JTft|?b+gx`&|D=Dfm3OkPTjZ*4p)cm2U gqBS)&H8oY>Jp)eHA~ z1QtiQ932c02n5)b@M|%Fmm`B=5z!$JR%}!OKw`}aVUM~&S*H43SNBxx+Yezd4)c@G zBYa<{6~WK++E<(scQ@>oMz)ki-5Gx}BTr)6e{%E2Z1J zI^%7bd{R!KP#z8z)EHmP7(JHhGwLB*=vkGeX3dP*ZluQ(V#oXwuoeWuifi+H!ommZ zzP;t?tq~$1akm?D;uo3!hC11I`2{YO)=VaI%rvHi6c2n5<1O4ccP)NKJW{et1%LuJ z(B$IMy0^9P?H@mWkd`cg6|i4Ga~!1W5uCJ$b#@+V%uw%(OC!aKH0l@|lP7@Y>FH^D zQ&SV?opZH;?t`H{)h^dS{p0=ehi)c3Pg8^h1_qjl9TO9W^nDVK>}?~KkiVO*&tzp~ zN#B!$7(RE49BfS7jrVnK&mdcxtseuz1_C4+e*>?wIOsz8zNkqMMYQp}Bu5Z8Qxed$ z88Dgxy)6`t;q^Tko|4{9b=VYILtUL!z2LL=3eh50_>cMpRqGIU_(=Nmq_h6P&*b4OF-)6k$HvEoqoJv_s3|T{f9)@Yw8c1w zs}IPY+cDM257!dps8s6y{ipT4(ck`hXNq3(NOH-^fwe~Qx^54;D-{N1X`J3>o3y;7 z9oFrQgqXrl_JCi@=pf88u5HxzW(l?lOq8Fx1bs;z!WQ#75 zwU$>?yUJCyd0W?wjqIipBXA+vK4vO@b#0yhw^81PAYlerP zb#E7NBg*(11BVS1D9%=j(=W{aok_M)Hj}Eq`%*=A^H;JWji&6 zzhyORZ?37{_fK(NxL%6~I10x|e1APw(TwH>kC~ zfeW+S&!+OVMMEFTV^=734s?`|s^^@SE)-M}14!#dj5JsCLl<5ZQ2K+|0H#AVaDmod z|HEFU^~yPl+2gs>_YgR`$J~odHD#}&i$J57B!|ZgpPTVhNEa>Ce~q9@qJ{`EXe@GDMGyXo(66(sjes93HpO z{c>$zl=C*>ZQSzoV@b%lb>2U9{w_IY}+sQtkZc#(0nI3YT7GdDSCDaHniP_Q`B6l1;j*a%KzXl#^k^-Raoa*wD~6Pp-gZn9evyFFuP%ssIOfjZ)SQIg diff --git a/widget-example/public/icons8-sms-100.png b/widget-example/public/icons8-sms-100.png deleted file mode 100644 index 6e24618599a80dc537c0cb3366971e052fb3fa3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 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 diff --git a/widget-example/public/index.html b/widget-example/public/index.html deleted file mode 100644 index d7ccd9f..0000000 --- a/widget-example/public/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - ChatCamp JavaScript SDK - Widget Example - - - - -

- - - - diff --git a/widget-example/public/manifest.json b/widget-example/public/manifest.json deleted file mode 100644 index be607e4..0000000 --- a/widget-example/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "192x192", - "type": "image/png" - } - ], - "start_url": "./index.html", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/widget-example/public/style.css b/widget-example/public/style.css deleted file mode 100644 index def95f0..0000000 --- a/widget-example/public/style.css +++ /dev/null @@ -1,531 +0,0 @@ -.backgroundNone { - background: none !important; } - -@keyframes blinker { - 50% { - opacity: 0; } } - -.header-blink { - animation: blinker 1s linear infinite; - animation: blinker 1s linear 10; } - -.backgroundNone { - background: none !important; } - -.borderNone { - border: none !important; - resize: none; } - -.list-content { - height: calc(480px - 125px); - overflow-y: auto; } - @media screen and (max-width: 750px) { - .list-content { - height: calc(100% - 125px); } } - -.ifc-emoji-menu-tab { - display: inline-block; - width: 25px; - height: 25px; - background-image: url(//cdn.iflychat.com/img/international-emoji/emojisprite_0.png); - background-repeat: no-repeat; - background-position: 0px 0px; - background-size: 675px 175px; } - -.ifc-emoji-panel-header .nav-tabs > li { - width: 47px; - height: 36px; } - .ifc-emoji-panel-header .nav-tabs > li a { - padding: 0; - margin: 0; } - -.ifc-emoji-panel-header .list-panel { - width: 100%; - display: block; - padding: 10px 10px 0 10px; } - -.ifc-emoji-panel-header .list-panel > li { - display: inline-block; - width: 31px; - height: 31px; } - .ifc-emoji-panel-header .list-panel > li img { - cursor: pointer; } - -.emoji-mart, -.emoji-mart * { - box-sizing: border-box; } - -.emoji-mart { - font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif; - font-size: 16px; - display: inline-block; - color: #222427; - border: 1px solid #d9d9d9; - border-radius: 5px; - background: #fff; } - -.emoji-mart .emoji-mart-emoji { - padding: 6px; } - -.emoji-mart-bar:first-child { - border-top-left-radius: 5px; - border-top-right-radius: 5px; } - -.emoji-mart-bar:last-child { - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; } - -.emoji-mart-anchors { - display: flex; - justify-content: space-between; - padding: 0 6px; - color: #858585; } - -.emoji-mart-anchor { - position: relative; - flex: 1; - text-align: center; - padding: 12px 4px; - overflow: hidden; - transition: color .1s ease-out; } - -.emoji-mart-anchor:hover, -.emoji-mart-anchor-selected { - color: #464646; } - -.emoji-mart-anchor-selected .emoji-mart-anchor-bar { - bottom: 0; } - -.emoji-mart-anchor-bar { - position: absolute; - bottom: -3px; - left: 0; - width: 100%; - height: 3px; - background-color: #464646; } - -.emoji-mart-anchors i { - display: inline-block; - width: 100%; - max-width: 22px; } - -.emoji-mart-anchors svg { - fill: currentColor; - max-height: 18px; } - -.emoji-mart-scroll { - overflow-y: scroll; - height: 115px; - padding: 0 6px 6px 6px; - border: solid #d9d9d9; - border-width: 1px 0; } - @media screen and (max-width: 750px) { - .emoji-mart-scroll { - height: 190px; } } - -.emoji-mart-search { - font-size: 16px; - display: block; - width: 100%; - padding: .2em .6em; - margin-top: 6px; - border-radius: 25px; - border: 1px solid #d9d9d9; - outline: 0; } - -.emoji-mart-category .emoji-mart-emoji span { - z-index: 1; - position: relative; } - -.emoji-mart-category .emoji-mart-emoji:hover:before { - z-index: 0; - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #f4f4f4; - border-radius: 100%; } - -.emoji-mart-category-label { - z-index: 2; - position: relative; - position: -webkit-sticky; - top: 0; } - -.emoji-mart-category-label span { - display: block; - width: 100%; - font-weight: 500; - padding: 5px 6px; - background-color: #fff; - background-color: rgba(255, 255, 255, 0.95); - font-size: 13px; } - -.emoji-mart-emoji { - position: relative; - display: inline-block; - font-size: 0; } - -.emoji-mart-no-results { - font-size: 14px; - text-align: center; - padding-top: 70px; - color: #858585; } - -.emoji-mart-no-results span { - display: inline-block; - vertical-align: middle; } - -.emoji-mart-preview { - position: relative; - height: 70px; } - -.emoji-mart-preview-emoji, -.emoji-mart-preview-data, -.emoji-mart-preview-skins { - position: absolute; - top: 50%; - transform: translateY(-50%); } - -.emoji-mart-preview-emoji { - left: 12px; } - -.emoji-mart-preview-data { - left: 68px; - right: 12px; - word-break: break-word; } - -.emoji-mart-preview-skins { - right: 30px; - text-align: right; } - -.emoji-mart-preview-name { - font-size: 14px; } - -.emoji-mart-preview-shortname { - font-size: 12px; - color: #888; } - -.emoji-mart-preview-shortname + .emoji-mart-preview-shortname, -.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon, -.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon { - margin-left: .5em; } - -.emoji-mart-preview-emoticon { - font-size: 11px; - color: #bbb; } - -.emoji-mart-title span { - display: inline-block; - vertical-align: middle; } - -.emoji-mart-title .emoji-mart-emoji { - padding: 0; } - -.emoji-mart-title-label { - color: #999A9C; - font-size: 26px; - font-weight: 300; } - -.emoji-mart-skin-swatches { - font-size: 0; - padding: 2px 0; - border: 1px solid #d9d9d9; - border-radius: 12px; - background-color: #fff; } - -.emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch { - width: 16px; - padding: 0 2px; } - -.emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch-selected:after { - opacity: .75; } - -.emoji-mart-skin-swatch { - display: inline-block; - width: 0; - vertical-align: middle; - transition-property: width, padding; - transition-duration: .125s; - transition-timing-function: ease-out; } - -.emoji-mart-skin-swatch:nth-child(1) { - transition-delay: 0; } - -.emoji-mart-skin-swatch:nth-child(2) { - transition-delay: .03s; } - -.emoji-mart-skin-swatch:nth-child(3) { - transition-delay: .06s; } - -.emoji-mart-skin-swatch:nth-child(4) { - transition-delay: .09s; } - -.emoji-mart-skin-swatch:nth-child(5) { - transition-delay: .12s; } - -.emoji-mart-skin-swatch:nth-child(6) { - transition-delay: .15s; } - -.emoji-mart-skin-swatch-selected { - position: relative; - width: 16px; - padding: 0 2px; } - -.emoji-mart-skin-swatch-selected:after { - content: ""; - position: absolute; - top: 50%; - left: 50%; - width: 4px; - height: 4px; - margin: -2px 0 0 -2px; - background-color: #fff; - border-radius: 100%; - pointer-events: none; - opacity: 0; - transition: opacity .2s ease-out; } - -.emoji-mart-skin { - display: inline-block; - width: 100%; - padding-top: 100%; - max-width: 12px; - border-radius: 100%; } - -.emoji-mart-skin-tone-1 { - background-color: #ffc93a; } - -.emoji-mart-skin-tone-2 { - background-color: #fadcbc; } - -.emoji-mart-skin-tone-3 { - background-color: #e0bb95; } - -.emoji-mart-skin-tone-4 { - background-color: #bf8f68; } - -.emoji-mart-skin-tone-5 { - background-color: #9b643d; } - -.emoji-mart-skin-tone-6 { - background-color: #594539; } - -/* custom iFly CSS*/ -.emoji-mart-anchors { - display: block; - height: 38px; - line-height: 38px; - width: 100%; } - -.emoji-mart-anchor { - padding: 0px 1px; - flex: none; - width: 11%; - display: block; - float: left; } - -.emoji-mart-anchors i { - max-width: 18px; } - -.emoji-mart-scroll { - display: block; - width: 100%; } - -.emoji-mart-search { - font-size: 12px; - height: 22px; } - -.emoji-mart-category-label { - display: block; - height: 24px; - line-height: 24px; - margin-bottom: 10px; } - .emoji-mart-category-label span { - font-size: 13px; } - -.emoji-mart .emoji-mart-emoji { - height: 36px; } - -.emoji-mart-preview { - display: none; } - -.emoji-mart { - width: 100% !important; } - -.ifc-chat-window-message-body-message .emoji-mart-emoji { - height: 21px; - line-height: 21px; - vertical-align: middle; } - -.ifc-chat-list.desktop { - width: 100%; } - @media screen and (max-width: 750px) { - .ifc-chat-list.desktop { - height: 100%; } } - -.ifc-chat-list.mobile { - display: block; - position: fixed; - bottom: 0px; - width: 100%; - float: right; - right: 0; - bottom: 0; - height: 100%; } - -.list-inbox .list-inbox-header { - line-height: 23px; } - -.list-inbox .list-inbox-description { - line-height: 18px; - font-size: 14px; - margin-left: 51px; } - -.ifc-chat-window { - width: 100%; } - @media screen and (max-width: 750px) { - .ifc-chat-window { - height: 100%; } } - -.window-content { - height: calc(100% - 147px); - overflow-y: auto; } - -.ifc-chat-frame-list { - display: block; - position: absolute; - bottom: 0px; - width: 100%; - height: 480px; - border: 0; - box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.15); } - @media screen and (max-width: 750px) { - .ifc-chat-frame-list { - height: 100%; - width: 100%; - right: 0; } } - -.ifc-chat-frame-window { - display: block; - position: absolute; - bottom: 0px; - width: 100%; - float: right; - height: 480px; - border: 0; - box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.15); } - @media screen and (max-width: 750px) { - .ifc-chat-frame-window { - height: 100%; - width: 100%; - right: 0 !important; } } - -.ifc-chat-frame-list-min { - height: 47px; } - -.ifc-chat-frame-window-min { - height: 46px; } - -.ifc-chat-frame-launcher { - display: block; - position: fixed; - bottom: 30px; - width: 173px; - float: right; - right: 25px; - height: 36px; - border: 0; - box-shadow: 0 3px 15px 0 rgba(0, 0, 0, 0.25); } - -@keyframes ball-beat { - 50% { - opacity: 0.2; - transform: scale(0.75); } - 100% { - opacity: 1; - transform: scale(1); } } - -.ball-beat > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - animation-fill-mode: both; - display: inline-block; - animation: ball-beat 0.7s 0s infinite linear; } - .ball-beat > div:nth-child(2n-1) { - animation-delay: -0.35s !important; } - -.loader-hidden { - display: none; } - -.loader-active { - display: block; } - -.iflychat-popup { - display: block; - width: 100%; - height: 100%; - float: left; } - -#ifc-app-container { - position: fixed; - width: 100%; - height: 0; - bottom: 0; - right: 0; } - @media screen and (max-width: 750px) { - #ifc-app-container { - height: 100%; } } - -#ifc-app { - position: fixed; - width: 100%; - height: 0; - bottom: 0; - right: 0; } - @media screen and (max-width: 750px) { - #ifc-app { - height: 100%; } } - -.ifc-chat-list-container { - display: block; - float: right; - position: relative; - height: 20px; - bottom: 20px; - width: 320px; - margin: 0 20px 0 0; } - @media screen and (max-width: 750px) { - .ifc-chat-list-container { - height: 100%; - width: 100%; - margin: 0; - bottom: 0; } } - -.ifc-chat-window-container { - display: block; - float: right; - position: relative; - height: 20px; - bottom: 20px; - width: 320px; - margin: 0 20px 0 0; } - @media screen and (max-width: 750px) { - .ifc-chat-window-container { - height: 100%; - width: 100%; - margin: 0; - bottom: 0; - position: absolute; } } - -body > div:first-child, body > div:first-child > div:first-child { - height: inherit; } - -body a{ - cursor: pointer; -} diff --git a/widget-example/src/App.js b/widget-example/src/App.js deleted file mode 100644 index fa8cc87..0000000 --- a/widget-example/src/App.js +++ /dev/null @@ -1,23 +0,0 @@ -// @flow -import React, { Component } from 'react'; -import logo from './logo.svg'; -// import './App.css'; - -class App extends Component { - - render() { - return ( -
-
- logo -

Welcome to React

-
-

- To get started, edit src/App.js and save to reload. -

-
- ); - } -} - -export default App; diff --git a/widget-example/src/App.test.js b/widget-example/src/App.test.js deleted file mode 100644 index b84af98..0000000 --- a/widget-example/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -it('renders without crashing', () => { - const div = document.createElement('div'); - ReactDOM.render(, div); -}); diff --git a/widget-example/src/Client.js b/widget-example/src/Client.js deleted file mode 100644 index 9e00625..0000000 --- a/widget-example/src/Client.js +++ /dev/null @@ -1,22 +0,0 @@ -import chatcamp from 'chatcamp' -import Utility from 'utility/Utility'; -// let devMode = false; -// let logLevel = iflychat.Constants.LOG.ERROR; -// if (process.env.NODE_ENV !== 'production') { -// devMode = true; -// logLevel = iflychat.Constants.LOG.DEBUG; -// } - -let appId = process.env.REACT_APP_CHATCAMP_APP_ID - -if(Utility.getUrlQueryParams(window.location.href)['appId'] && Utility.getUrlQueryParams(window.location.href)['appId'][0]) { - appId = Utility.getUrlQueryParams(window.location.href)['appId'][0] -} - - -const cc = new chatcamp({ - appId: appId -}) -window.cc = cc -// TODO: Find a better method of sharing class instance -export default cc diff --git a/widget-example/src/api/AuthSvc.js b/widget-example/src/api/AuthSvc.js deleted file mode 100644 index 6e35dd1..0000000 --- a/widget-example/src/api/AuthSvc.js +++ /dev/null @@ -1,167 +0,0 @@ -import { post, get } from './utils' -import * as store from 'store2' - -export function getLocalToken () { - return store.get('auth_token') -} - -export function resetLocalToken () { - store.remove('auth_token') -} -export function setLocalToken (token) { - store.set('auth_token', token) -} - -export function getAccessToken () { - return store.get('access_token') -} - -export function resetAccessToken () { - store.remove('access_token') -} -export function setAccessToken (token) { - store.set('access_token', token) -} - -export function getApiKey () { - return store.get('api_key') -} - -export function resetApiKey () { - store.remove('api_key') -} - -export function setApiKey (token) { - store.set('api_key', token) -} -export function getAppId () { - return store.get('app_id') -} - -export function resetAppId () { - store.remove('app_id') -} -export function setAppId (token) { - store.set('app_id', token) -} - -export function isLoggedIn () { - return getLocalToken() !== null -} - -// export function getAppId () { -// return null; -// } - -export function isAppVerified () { - return false; -} - -export function getRecoveryEmailStatus () { - return false; -} - -export function getPasswordTokenStatus () { - return true; -} - -export async function loginAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/users.login', data) -} - -export async function logoutAPI () { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - // return post('/auth', data) - return get('/api/3.0/users.logout') -} - -export async function registerAppAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/app.create', data) -} - -export async function registerUserAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/users.register', data) -} - -export async function appVerifyAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/app.valid', data) -} - -export async function recoverPasswordAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/users.recoverPassword', data) -} - -export async function verifyResetPasswordTokenAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return get('/api/3.0/users.resetPassword?reset_token=' + data.reset_token + '&app_id=' + data.app_id) -} - -export async function resetPasswordAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/users.resetPassword', data) -} - -export async function emailConfirmAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return get('/api/3.0/users.confirm?confirmation_token=' + data.confirmation_token + '&app_id=' + data.app_id) -} - -export async function getApiKeyAPI (data) { - if (process.env.BUILD_DEMO) { - return { - ok: true, - token: 'Just_for_demo' - } - } - return post('/api/3.0/app.info', data) -} diff --git a/widget-example/src/api/InboxSvc.js b/widget-example/src/api/InboxSvc.js deleted file mode 100644 index f91b0f0..0000000 --- a/widget-example/src/api/InboxSvc.js +++ /dev/null @@ -1,5 +0,0 @@ -import {get} from './utils' - -export async function getInboxAPI () { - return get('https://jsonplaceholder.typicode.com/users') -} diff --git a/widget-example/src/api/StatisticsSvc.js b/widget-example/src/api/StatisticsSvc.js deleted file mode 100644 index bacb535..0000000 --- a/widget-example/src/api/StatisticsSvc.js +++ /dev/null @@ -1,5 +0,0 @@ -import {get} from './utils' - -export async function getStatisticsAPI () { - return get('https://jsonplaceholder.typicode.com/posts?userId=1') -} diff --git a/widget-example/src/api/index.js b/widget-example/src/api/index.js deleted file mode 100644 index 585ab1d..0000000 --- a/widget-example/src/api/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './AuthSvc' -export * from './InboxSvc' -export * from './StatisticsSvc' -export * from './utils' diff --git a/widget-example/src/api/utils.js b/widget-example/src/api/utils.js deleted file mode 100644 index ed70061..0000000 --- a/widget-example/src/api/utils.js +++ /dev/null @@ -1,158 +0,0 @@ -// Request utils, -// feel free to replace with your code -// (get, post are used in ApiServices) - -import { getLocalToken, getAccessToken } from 'api/AuthSvc' - -function requestWrapper (method) { - return async function (url, data = null, params = {}) { - let csrfTokenResult = await getCsrfToken('/api/3.0/csrf'); - let csrfToken = csrfTokenResult.data.value; - if (method === 'GET') { - // is it a GET? - // GET doesn't have data - params = data - data = null - } else if (data === Object(data)) { - // (data === Object(data)) === _.isObject(data) - data = JSON.stringify(data) - } else { - throw new Error(`XHR invalid, check ${method} on ${url}`) - } - - // default params for fetch = method + (Content-Type) - let defaults = { - credentials: "include", - method: method, - headers: { - 'Content-Type': 'application/json; charset=UTF-8', - 'X-CSRF-Token': csrfToken - } - } - - // check that req url is relative and request was sent to our domain - if (url.match(/^https?:\/\//gi) > -1) { - let token = getLocalToken() - if (token) { - defaults.headers['Authorization'] = `JWT ${token}` - } - const access_token = getAccessToken() - if(access_token) { - defaults.headers['X-Access-Token'] = access_token - } - url = window.BASE_API + url - } - - if (data) { - defaults.body = data - } - - let paramsObj = { ...defaults, headers: { ...params, ...defaults.headers } } - - return fetch(url, paramsObj).then(parseJSON).catch(err => { - console.error(err) - }) - } -} - - -async function getCsrfToken (url, data = null, params = {}) { - - // default params for fetch = method + (Content-Type) - let defaults = { - credentials: "include", - method: 'GET', - headers: { - 'Content-Type': 'application/json; charset=UTF-8' - } - } - - // check that req url is relative and request was sent to our domain - if (url.match(/^https?:\/\//gi) > -1) { - let token = getLocalToken() - if (token) { - defaults.headers['Authorization'] = `JWT ${token}` - } - url = window.BASE_API + url - } - - let paramsObj = { ...defaults, headers: { ...params, ...defaults.headers } } - - return fetch(url, paramsObj).then(parseJSON).catch(err => { - console.error(err) - }) -} - -// middlewares -// parse fetch json, add ok property and return request result - -/** - * 1. parse response - * 2. add "ok" property to result - * 3. return request result - * @param {Object} res - response from server - * @return {Object} response result with "ok" property - */ -async function parseJSON (res) { - let json - try { - json = await res.json() - } catch (e) { - return { data: {}, ok: false } - } - - // simplest validation ever, ahah :) - if (!res.ok) { - return { data: json, ok: false } - } - // resultOK - is a function with side effects - // It removes ok property from result object - return { data: json, ok: true } -} - -export const get = requestWrapper('GET') -export const post = requestWrapper('POST') -export const put = requestWrapper('PUT') -export const patch = requestWrapper('PATCH') -export const del = requestWrapper('DELETE') - -// USAGE: -// get('https://www.google.com', { -// Authorization: 'JWT LOL', -// headers: { -// 'Content-Type': 'text/html' -// } -// }) - -// FUNCTION WITH SIDE-EFFECTS -/** - * `parseJSON()` adds property "ok" - * that identicates that response is OK - * - * `resultOK`removes result.ok from result and returns "ok" property - * It widely used in `/actions/*` - * for choosing action to dispatch after request to API - * - * @param {Object} result - response result that - * @return {bool} - indicates was request successful or not - */ -export function resultOK (result) { - if (result) { - let ok = result.ok - delete result.ok - return ok // look at parseJSON - } else { - return false - } -} - -export function getAppIdFromURL() { - let parentUrl = window.parent.location.href; - if(parentUrl.toLowerCase().indexOf(".iflychat") > -1 || parentUrl.toLowerCase().indexOf(".localhost") > -1) { - parentUrl = parentUrl.replace(/(^\w+:|^)\/\//, ''); - let endIndex = parentUrl.indexOf(".iflychat") > -1 ? parentUrl.indexOf(".iflychat") : parentUrl.indexOf(".localhost"); - return parentUrl.substring(0,endIndex) - } else { - return null - } -} diff --git a/widget-example/src/api/validate.js b/widget-example/src/api/validate.js deleted file mode 100644 index fcee471..0000000 --- a/widget-example/src/api/validate.js +++ /dev/null @@ -1,87 +0,0 @@ -// Functions for validation, -// FEEL FREE TO REMOVE THIS FILE AND components/InputComponent.jsx, -export function maxSize (num, error = 'Value is too long') { - return function (value) { - if (value) { - return value.length > num ? error : true - } - } -} - -export function minSize (num, error = 'Value is too short') { - return function (value) { - if (value) { - return value.length < num ? error : true - } - } -} - -export function checkPasswords (t, error = 'Passwords donot match') { - return function (value) { - if (value) { - return value !== t.state.password ? error : true - } - } -} - -export function noSpace (str) { - // trully can't get why do we need this check, - // but without it on /profile/settings page we get error - if (str !== undefined && str.indexOf(' ') > -1 ) { - return `Spaces are not allowed` - } - // return !!str.match(/[^-\s]/g) - return true -} - -export function isRequired (str, field) { - if (str && str.length >= 0) { - return true - } - return `Please, enter your ${field}` -} - -export function latin (str) { - const latinRegex = /^([0-9a-z]+)$/i - if(!str.match(latinRegex)) { - return `Please, enter only alphanumeric characters` - } - return true -} - -export function number (str) { - return !!str.match(/\d+/g) -} - -export function email (str) { - const emailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - if(str && !str.match(emailRegex)) { - return `Please, enter correct email` - } - return true -} - -export function phone () { } - -export function composition (array) { - return function (value, field) { - for (var i = 0; i < array.length; i++) { - if (array[i](value, field) !== true) { - return array[i](value, field) - } - } - return false - } -} - -export default { - isRequired, - phone, - email, - noSpace, - number, - latin, - maxSize, - composition, - checkPasswords -} diff --git a/widget-example/src/common/index.js b/widget-example/src/common/index.js deleted file mode 100644 index a054812..0000000 --- a/widget-example/src/common/index.js +++ /dev/null @@ -1,73 +0,0 @@ -import * as React from 'react'; -// Devtools -import { composeWithDevTools } from 'redux-devtools-extension'; -// Redux stuff -import thunk from 'redux-thunk'; -import {iFlyMiddleWare} from 'middlewares' -import { createStore, applyMiddleware, compose } from 'redux'; -import { persistStore, persistReducer } from 'redux-persist' -import immutableTransform from 'redux-persist-transform-immutable' -import storage from 'redux-persist/lib/storage' - -// import { routerMiddleware } from 'react-router-redux'; -// Application -import { rootReducer } from 'reducers'; -import Root from 'components/Root'; -// import Chat from 'components/Chat'; -// import { Routing, history } from 'routing'; -const persistConfig = { - transforms: [immutableTransform()], - key: 'root', - storage, - whitelist: ['groupChannelsState', 'user', 'smartChat'] -} - - -const persistedReducer = persistReducer(persistConfig, rootReducer) - -export const configureStore = initialState => { - // const routerMiddlewareApplied = applyMiddleware(routerMiddleware(history)); - const thunkApplied = applyMiddleware(thunk); - const iFlyMiddleWareApplied = applyMiddleware(iFlyMiddleWare); - let middlewares = null; - - if (process.env.NODE_ENV === 'development') { - middlewares = composeWithDevTools(thunkApplied, iFlyMiddleWareApplied); - } else { - middlewares = compose(thunkApplied, iFlyMiddleWareApplied); - } - let store = createStore(persistedReducer, initialState , middlewares) - let persistor = persistStore(store) - - if (module.hot) { - module.hot.accept(() => { - // This fetch the new state of the above reducers. - const nextRootReducer = rootReducer - store.replaceReducer( - persistReducer(persistConfig, nextRootReducer) - ) - }) - } - - return {store, persistor} -}; - -export const configureRootComponent = storePersistor => { - const propsRoot = { - // routes: Routing, - // history, - storePersistor - }; - - return ; -}; - -// export const configureChatComponent = store => { -// const propsRoot = { -// routes: Routing, -// history, -// store -// }; -// -// return ; -// }; diff --git a/widget-example/src/components/Chat/index.js b/widget-example/src/components/Chat/index.js deleted file mode 100644 index d7485c2..0000000 --- a/widget-example/src/components/Chat/index.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { Component } from 'react'; -import { Provider } from 'react-redux'; -import { ConnectedRouter as Router } from 'react-router-redux'; -import {IntlProvider} from 'react-intl' -import ChatApp from 'containers/ChatApp' - -// addLocaleData(en); - -export default class Chat extends Component { - // static propTypes = { - // store: PropTypes.object, - // history: PropTypes.object, - // routes: PropTypes.func - // } - - render() { - const { store, history, routes } = this.props; - - return ( - - - - - {/*
Hello World
*/} -
-
-
- ) - - - // key={Math.random()} = hack for HMR from https://github.com/webpack/webpack-dev-server/issues/395 - // return ( - // - // - // - // - // - // - // - // ); - } -} diff --git a/widget-example/src/components/Root/index.js b/widget-example/src/components/Root/index.js deleted file mode 100644 index af53434..0000000 --- a/widget-example/src/components/Root/index.js +++ /dev/null @@ -1,109 +0,0 @@ -import React, { Component } from 'react'; -import { Provider } from 'react-redux'; -import { PersistGate } from 'redux-persist/integration/react' -import ChatApp from 'containers/ChatApp' -import Utility from 'utility/Utility' -import { - GROUP_CHANNELS_CLOSE, SMART_CHAT_CLOSE -} from 'state/action-types' -import * as Debug from 'debug'; -const debug = Debug('chatcamp:Root') -export default class Root extends Component { - // static propTypes = { - // store: PropTypes.object, - // history: PropTypes.object, - // routes: PropTypes.func - // } - - // /** - // * Checks Auth logic. Is user allowed to visit certain path? - // * @param {String} path next path to visit - // * @return {Bool} is user allowed to visit next location? - // * check RouteAuth component. - // */ - // authCheck(path) { - // const {store} = this.props - // const loggedIn = isLoggedIn(store.getState()) - // const appId = getAppId(store.getState()) - // const allowedAnonymousToVisitPath = ['/auth', '/register'] - // debug("appId", appId) - // // if(appId === null) { - // // return false - // // } else if (loggedIn && allowedAnonymousToVisitPath.includes(path)) { - // // return false - // // } else if (!loggedIn && !allowedAnonymousToVisitPath.includes(path)) { - // // return false - // // } - // - // if (loggedIn && allowedAnonymousToVisitPath.includes(path)) { - // return false - // } else if (!loggedIn && !allowedAnonymousToVisitPath.includes(path)) { - // return false - // } - // - // return true; - // } - // componentDidMount() { - // this.persistor.dispatch({ type: REHYDRATE }); - // } - - render() { - const { - storePersistor - // history, - // routes - } = this.props; - let store = storePersistor.store - let persistor = storePersistor.persistor - - const onBeforeLift = () => { - // take some action before the gate lifts. store has hydrated but app is not loaded yet - let appId = process.env.REACT_APP_CHATCAMP_APP_ID - - if(Utility.getUrlQueryParams(window.location.href)['appId'] && Utility.getUrlQueryParams(window.location.href)['appId'][0]) { - appId = Utility.getUrlQueryParams(window.location.href)['appId'][0] - } - - let userId; - if(window.ChatCampData && window.ChatCampData.userId){ - userId = window.ChatCampData.userId - } - if(Utility.getUrlQueryParams(window.location.href)['userId'] && Utility.getUrlQueryParams(window.location.href)['userId'][0]) { - userId = Utility.getUrlQueryParams(window.location.href)['userId'][0] - } - - // if user id or app id doesnt match then delete the groupchannelsState - if(store.getState().user.get("id", false)){ - debug("start user id"+ store.getState().user.get("id", false)) - if(userId !== store.getState().user.get("id") || appId !== store.getState().user.get("appId") || Utility.mobileCheck()){ - let storeChannels = store.getState().groupChannelsState.keySeq().toArray() - for(let i in storeChannels) - store.dispatch({ - type: GROUP_CHANNELS_CLOSE, - groupChannelsId: storeChannels[i] - }) - store.dispatch({ - type: SMART_CHAT_CLOSE - }) - } - } - - } - // const authProtection = this.authCheck.bind(this); - // const routesWithAuthProtection = routes(authProtection, appId); - - // key={Math.random()} = hack for HMR from https://github.com/webpack/webpack-dev-server/issues/395 - // return( - //
{this.props.client.messages.map(a => a.text)}
- // ) - return ( - - - {/* */} - - {/* */} - - - ); - } -} diff --git a/widget-example/src/components/common/InputComponent.jsx b/widget-example/src/components/common/InputComponent.jsx deleted file mode 100644 index b935c59..0000000 --- a/widget-example/src/components/common/InputComponent.jsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, {Component} from 'react' -import PropTypes from 'prop-types' -import {Input, Form, Label, Segment} from 'semantic-ui-react' -import {omit} from 'lodash' -import _ from 'lodash' - -// -export default class InputComponent extends Component { - constructor (props) { - super(props) - this.state = { - value: this.props.value - } - } - - static propTypes = { - validate: PropTypes.func, - connectToParent: PropTypes.func, - value: PropTypes.any, - error: PropTypes.string, - labelText: PropTypes.string, - label: PropTypes.string, - placeholder: PropTypes.string, - name: PropTypes.string, - type: PropTypes.string, - as: PropTypes.node, - action: PropTypes.any - } - - handleChange (event) { - let state = { - value: event.target.value - } - let {validate, name} = this.props - if (validate) { - state.error = validate(state.value, name) // if valid, then false! - this.props.connectToParent({name, ...state}) - } - this.setState(state) - } - - // We have similar code in `handleChange()` - componentWillMount () { - let {validate, value, name} = this.props - let error - if (validate) { - error = validate(value, name) - } - - this.setState({...this.state, error, value}) - } - - componentWillReceiveProps () { - // PROPS ERROR TO STATE ERROR - let {error} = this.props - if (error && error[0]) { - this.setState({ - error: error || null - }) - } - } - - shouldComponentUpdate(nextProps, nextState) { - return !_.isEqual(this.props, nextProps) || !_.isEqual(this.state, nextState); - } - - render () { - // STATE ERROR - const {error, value} = this.state - const {as} = this.props - // prop `as` - const propsToOmit = ['validate', 'error', 'connectToParent', 'as'] - - let propsForInput = { - ...this.props, - onChange: this.handleChange.bind(this), - value - } - - let RenderComponentAsProp - let propAsElemExists = false - - if (as) { - propAsElemExists = true - RenderComponentAsProp = as - } - - let propsForField - if (error) { - propsForField = {error: true} - } - propsForInput = omit(propsForInput, propsToOmit) - - // labelText(custom) - is a TEXT label - // label - is a BUTTON label - // check semantic-react docs - let labelTextComponent = null - if (propsForInput.labelText) { - labelTextComponent = - delete propsForInput.labelText - } - - return ( - // in semantic if input is a part of form, we can make it error-visible - // only throught the Form.Field error - ( - - - {labelTextComponent} - - {propAsElemExists - ? - : } - - {/* display tooltip with error */} - {error && } - - - ) - ) - } -} diff --git a/widget-example/src/components/index.js b/widget-example/src/components/index.js deleted file mode 100644 index d7b7330..0000000 --- a/widget-example/src/components/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import Root from './Root'; - - -export { Root } diff --git a/widget-example/src/constants/icons.js b/widget-example/src/constants/icons.js deleted file mode 100644 index 9ccb548..0000000 --- a/widget-example/src/constants/icons.js +++ /dev/null @@ -1,21 +0,0 @@ -export const ICONS = { - CLOSE: "M 14.40625 13 L 13 14.40625 L 23.625 25 L 13 35.59375 L 14.40625 37 L 25.0625 26.40625 L 35.6875 37 L 37.09375 35.59375 L 26.46875 25 L 37.09375 14.40625 L 35.6875 13 L 25.0625 23.59375 Z ", - - MINIMIZE: "M 5 11 L 5 13 L 19 13 L 19 11 Z ", - - HASHTAG: "M 18 9 L 17.25 17 L 10 17 L 9.8125 19 L 17.0625 19 L 15.84375 32 L 8.59375 32 L 8.40625 34 L 15.65625 34 L 15 41 L 17 41 L 17.65625 34 L 30.65625 34 L 30 41 L 32 41 L 32.65625 34 L 40.40625 34 L 40.59375 32 L 32.84375 32 L 34.0625 19 L 41.8125 19 L 42 17 L 34.25 17 L 35 9 L 33 9 L 32.25 17 L 19.25 17 L 20 9 Z M 19.0625 19 L 32.0625 19 L 30.84375 32 L 17.84375 32 Z ", - - MAXIMIZE: "M 13 6.171875 L 3.585938 15.585938 L 6.414063 18.414063 L 13 11.828125 L 19.585938 18.414063 L 22.414063 15.585938 Z ", - - CREATE: "M 22.828125 3 C 22.316375 3 21.804562 3.1954375 21.414062 3.5859375 L 19 6 L 24 11 L 26.414062 8.5859375 C 27.195062 7.8049375 27.195062 6.5388125 26.414062 5.7578125 L 24.242188 3.5859375 C 23.851688 3.1954375 23.339875 3 22.828125 3 z M 17 8 L 5.2597656 19.740234 C 5.2597656 19.740234 6.1775313 19.658 6.5195312 20 C 6.8615312 20.342 6.58 22.58 7 23 C 7.42 23.42 9.6438906 23.124359 9.9628906 23.443359 C 10.281891 23.762359 10.259766 24.740234 10.259766 24.740234 L 22 13 L 17 8 z M 4 23 L 3.0566406 25.671875 A 1 1 0 0 0 3 26 A 1 1 0 0 0 4 27 A 1 1 0 0 0 4.328125 26.943359 A 1 1 0 0 0 4.3378906 26.939453 L 4.3632812 26.931641 A 1 1 0 0 0 4.3691406 26.927734 L 7 26 L 5.5 24.5 L 4 23 z", - - ATTACH: "M 20.298828 3.0175781 C 18.825512 3.0175781 17.353643 3.60127 16.25 4.765625 L 8.2421875 13.212891 C 5.2480565 16.372538 5.2480565 21.451681 8.2421875 24.611328 A 1.0001 1.0001 0 0 0 8.5683594 24.839844 A 1.0001 1.0001 0 0 0 8.5742188 24.841797 C 11.590859 27.700431 16.296353 27.668482 19.193359 24.611328 L 24.826172 18.667969 A 1.0001 1.0001 0 1 0 23.375 17.292969 L 17.742188 23.236328 C 15.49041 25.612584 11.94709 25.612584 9.6953125 23.236328 C 7.4434435 20.859975 7.4434435 16.964243 9.6953125 14.587891 L 17.701172 6.140625 C 19.165887 4.5953351 21.433723 4.5953351 22.898438 6.140625 C 24.363005 7.6857612 24.363005 10.236114 22.898438 11.78125 L 15.611328 19.470703 C 14.932427 20.186459 13.941424 20.185929 13.263672 19.470703 C 12.585909 18.755466 12.585909 17.551174 13.263672 16.835938 L 19.125 10.650391 A 1.0001 1.0001 0 1 0 17.673828 9.2753906 L 11.810547 15.460938 C 10.39031 16.959701 10.39031 19.34694 11.810547 20.845703 A 1.0001 1.0001 0 0 0 12.146484 21.078125 C 13.587125 22.281634 15.739203 22.240836 17.0625 20.845703 L 24.349609 13.15625 C 26.465965 10.923472 26.496408 7.4292098 24.554688 5.0898438 A 1.0001 1.0001 0 0 0 24.349609 4.765625 C 23.245967 3.60127 21.772145 3.0175781 20.298828 3.0175781 z", - - SMILEY: "M 25 2 A 1.0001 1.0001 0 0 0 24.845703 2.015625 C 12.227069 2.100968 2 12.361472 2 25 C 2 37.691367 12.308633 48 25 48 C 37.691367 48 48 37.691367 48 25 C 48 12.362796 37.775013 2.1030941 25.158203 2.015625 A 1.0001 1.0001 0 0 0 25 2 z M 25 4 C 36.610633 4 46 13.389367 46 25 C 46 36.610633 36.610633 46 25 46 C 13.389367 46 4 36.610633 4 25 C 4 13.389367 13.389367 4 25 4 z M 17 18 A 3 3 0 0 0 14 21 A 3 3 0 0 0 17 24 A 3 3 0 0 0 20 21 A 3 3 0 0 0 17 18 z M 33 18 A 3 3 0 0 0 30 21 A 3 3 0 0 0 33 24 A 3 3 0 0 0 36 21 A 3 3 0 0 0 33 18 z M 11.957031 28.988281 A 1.0001 1.0001 0 0 0 11.185547 30.582031 C 11.185547 30.582031 16.416667 38 25 38 C 33.583333 38 38.814453 30.582031 38.814453 30.582031 A 1.0010463 1.0010463 0 0 0 37.185547 29.417969 C 37.185547 29.417969 32.416667 36 25 36 C 17.583333 36 12.814453 29.417969 12.814453 29.417969 A 1.0001 1.0001 0 0 0 11.957031 28.988281 z", - - SEND: "M 5 3 A 1 1 0 0 0 4 4 A 1 1 0 0 0 4.0371094 4.2675781 A 1 1 0 0 0 4.0390625 4.2734375 L 5 11 L 2 13 L 23 15 L 2 17 L 5 19 L 4.0390625 25.728516 A 1 1 0 0 0 4 26 A 1 1 0 0 0 5 27 A 1 1 0 0 0 5.3867188 26.919922 L 5.3886719 26.921875 L 5.4316406 26.900391 L 5.453125 26.890625 A 1 1 0 0 0 5.4707031 26.880859 L 27.390625 15.921875 L 27.392578 15.917969 A 1 1 0 0 0 28 15 A 1 1 0 0 0 27.390625 14.080078 A 1 1 0 0 0 27.390625 14.078125 L 27.388672 14.078125 L 5.4785156 3.1230469 A 1 1 0 0 0 5.3886719 3.078125 A 1 1 0 0 0 5 3 z", - - CHAT: "M 7 8 C 4.253906 8 2 10.253906 2 13 L 2 37 C 2 39.746094 4.253906 42 7 42 L 11.09375 42 C 11.230469 43.203125 11.214844 44.316406 10.90625 45.25 C 10.527344 46.398438 9.820313 47.363281 8.5 48.15625 C 8.128906 48.390625 7.957031 48.839844 8.070313 49.261719 C 8.183594 49.683594 8.5625 49.984375 9 50 C 13.242188 50 18.105469 47.785156 20.5625 42 L 43 42 C 45.746094 42 48 39.746094 48 37 L 48 13 C 48 10.253906 45.746094 8 43 8 Z M 7 10 L 43 10 C 44.65625 10 46 11.34375 46 13 L 46 37 C 46 38.65625 44.65625 40 43 40 L 20 40 C 19.582031 40 19.207031 40.261719 19.0625 40.65625 C 17.507813 44.898438 14.730469 46.917969 11.84375 47.65625 C 12.234375 47.097656 12.605469 46.507813 12.8125 45.875 C 13.332031 44.296875 13.289063 42.570313 12.96875 40.8125 C 12.878906 40.347656 12.476563 40.007813 12 40 L 7 40 C 5.34375 40 4 38.65625 4 37 L 4 13 C 4 11.34375 5.34375 10 7 10 Z M 15 22 C 13.355469 22 12 23.355469 12 25 C 12 26.644531 13.355469 28 15 28 C 16.644531 28 18 26.644531 18 25 C 18 23.355469 16.644531 22 15 22 Z M 25 22 C 23.355469 22 22 23.355469 22 25 C 22 26.644531 23.355469 28 25 28 C 26.644531 28 28 26.644531 28 25 C 28 23.355469 26.644531 22 25 22 Z M 35 22 C 33.355469 22 32 23.355469 32 25 C 32 26.644531 33.355469 28 35 28 C 36.644531 28 38 26.644531 38 25 C 38 23.355469 36.644531 22 35 22 Z M 15 24 C 15.5625 24 16 24.4375 16 25 C 16 25.5625 15.5625 26 15 26 C 14.4375 26 14 25.5625 14 25 C 14 24.4375 14.4375 24 15 24 Z M 25 24 C 25.5625 24 26 24.4375 26 25 C 26 25.5625 25.5625 26 25 26 C 24.4375 26 24 25.5625 24 25 C 24 24.4375 24.4375 24 25 24 Z M 35 24 C 35.5625 24 36 24.4375 36 25 C 36 25.5625 35.5625 26 35 26 C 34.4375 26 34 25.5625 34 25 C 34 24.4375 34.4375 24 35 24 Z ", - - STATUS:"M44,24c0,11.044-8.956,20-20,20S4,35.044,4,24S12.956,4,24,4S44,12.956,44,24z" -} diff --git a/widget-example/src/containers/ChatApp/Components/AudioPlayer/index.js b/widget-example/src/containers/ChatApp/Components/AudioPlayer/index.js deleted file mode 100644 index 440fc54..0000000 --- a/widget-example/src/containers/ChatApp/Components/AudioPlayer/index.js +++ /dev/null @@ -1,90 +0,0 @@ -/* global soundManager:false */ -import React, { Component } from 'react' -import Avatar from 'react-avatar' -import { Image } from 'semantic-ui-react' -import Sound from 'react-sound'; -import ProcessMessage from 'utility/ProcessMessage' -import DetectBrowser from 'utility/DetectBrowser'; -import { PlayButton, PauseButton, ProgressBar, TimeMarker, TimeMarkerType,FormattedTime } from 'react-player-controls' -import * as Debug from 'debug' -const debug = Debug('chatcamp:WindowContent') - -class AudioPlayer extends Component { - - state = { - soundPlay: "STOPPED", - soundPlayURL: "", - soundDuration: 0, - soundCurrentPosition: 0 - } - - componentDidMount () { - soundManager.setup({debugMode: false}); - } - - handleSoundPlay(soundURL) { - // debug("soundplay", soundURL) - this.setState({soundPlay: Sound.status.PLAYING, soundPlayURL: soundURL}) - } - - handleSoundPause(){ - this.setState({soundPlay: Sound.status.PAUSED}) - } - - handleOnFinishedPlaying = () => { - this.setState({soundPlay: Sound.status.STOPPED, soundPlayURL: ""}) - } - - handleOnLoading = (object) => { - // debug("handleOnLoading", object) - } - - handleOnLoad = (object) => { - // debug("handleOnLoad", object) - } - - handleOnPlaying = (object) => { - // debug("handleOnPlayiung", object.duration, object.position) - this.setState({soundCurrentPosition: Math.floor(object.position/1000), soundDuration: Math.floor(object.duration/1000)}) - } - - render () { - // debug("debug autoplay", this.state.soundPlay, this.props.url, this.props.id) - let player = []; - if(!DetectBrowser.detectIE()){ - if(this.state.soundPlay === Sound.status.PAUSED || this.state.soundPlay === Sound.status.STOPPED){ - player.push( this.handleSoundPlay(this.props.url)} />) - } - else{ - player.push( this.handleSoundPause()} - />) - } - - player.push() - player.push() - } - else{ - // IE render link instead of audio player - player.push(
) - } - return ( -
- {player} - {(this.state.soundPlay) && (this.props.url) &&} -
- ) - } - -} - -export default AudioPlayer diff --git a/widget-example/src/containers/ChatApp/Components/AudioPlayer/style.scss b/widget-example/src/containers/ChatApp/Components/AudioPlayer/style.scss deleted file mode 100644 index e924596..0000000 --- a/widget-example/src/containers/ChatApp/Components/AudioPlayer/style.scss +++ /dev/null @@ -1,270 +0,0 @@ -$icon-size: 30px; -$black: #3D463F; -$gray: #878C88; -$lightgray: #d3d3d3; -$white: #fefefe; -$blue: #0E52CE; -$green: #72D687; -$green: $primary-background; - -.cc-sound-player{ - display: block; - width: 230px; - border: 1px solid; - border-color: $green; - margin: 4px; - border-radius: 5px; - height: 42px; - box-sizing: border-box; - .ProgressBar{ - width: 145px!important; - display: inline-block; - margin-top: 16px; - } - .FormattedTime{ - position: relative; - display: inline-block; - width: 36px; - float: left; - height: 42px; - padding-top: 12px; - font-size: 13px; - box-sizing: border-box; - color: rgba($secondary-text, 0.45); - - } - } - .window-content .window-message .content .PlayButton, .window-content .window-message .content .PauseButton{ - padding: 6px; - border-radius: 300px; - border: 0; - background: 0; - display: inline-block; - margin-right: 0; - float: left; - } - - - - - // $color-hover: saturate(lighten($green, 10%), 20%); - // $color-active: desaturate(darken($green, 20%), 20%); - - $color-hover: desaturate(darken($green, 20%), 10%); - $color-active: fade-out($color-hover, 0.5); - - - // - // Buttons - // - - .PlayButton, - .PauseButton, - .PrevButton, - .NextButton, - .SoundOnButton, - .SoundOffButton { - margin-right: 10px; - padding: 8px; - background: $white; - border: 2px solid $green; - border-radius: 100%; - outline: none; - - &[disabled] { - opacity: 0.5; - } - - &.isEnabled { - cursor: pointer; - - &:hover { - border-color: $color-hover; - - .Icon-shape { - fill: $color-hover; - } - } - - &:active { - border-color: $color-active; - - .Icon-shape { - fill: $color-active; - } - } - } - } - - .Icon { - display: block; - width: $icon-size; - height: $icon-size; - } - - .Icon-shape { - fill: $green; - } - - - // - // Sliders - // - - .ProgressBar, - .VolumeSlider { - position: relative; - background: #eee; - border-radius: 4px; - &-elapsed, - &-value { - background: $gray; - border-radius: 4px; - } - - &-seek { - position: absolute; - cursor: pointer; - } - - &-handle { - position: absolute; - width: 16px; - height: 16px; - background: $green; - border-radius: 100%; - transform: scale(0); - transition: transform 0.2s; - } - - &.isSeekable, - &.isEnabled { - &:hover { - .ProgressBar-handle, - .VolumeSlider-handle { - transform: scale(1); - } - - .ProgressBar-intent, - .VolumeSlider-intent { - position: absolute; - background: rgba(0,0,0,0.1); - } - } - - .ProgressBar-elapsed, - .VolumeSlider-value { - background: $green; - } - } - } - - .ProgressBar { - height: 8px; - margin: 10px 0; - - &-elapsed { - height: 100%; - position: absolute; - top: 0; - left: 0; - } - - &-buffered { - height: 100%; - border-radius: 4px; - background: $lightgray; - } - - &-seek { - top: -6px; - right: 0; - bottom: -6px; - left: 0; - } - - &-handle { - top: 0; - margin: -4px 0 0 -8px; - } - - &.isSeekable { - &:hover { - .ProgressBar-handle { - transform: scale(1); - } - - .ProgressBar-intent { - top: 0; - left: 0; - height: 100%; - } - } - } - - &.isLoading { - opacity: 0.5; - background: #ccc; - animation: barLoading 2s infinite; - } - } - - .VolumeSlider { - // margin: 10px 0; - - &-value { - position: absolute; - } - - &.isHorizontal { - width: 100px; - height: 8px; - transition: width 0.3s, height 0.05s; - } - - &.isHorizontal &-value { - height: 100%; - left: 0; - } - - &.isHorizontal &-handle { - margin: -4px 0 0 -8px; - } - - &.isVertical { - width: 8px; - height: 100px; - transition: width 0.05s, height 0.3s; - } - - &.isVertical &-value { - bottom: 0; - width: 100%; - } - - &.isVertical &-handle { - left: 0; - margin: 0 0 -8px -4px; - } - - &-seek { - left: -6px; - top: 0; - right: -6px; - bottom: 0; - } - - &.isEnabled { - &:hover { - .VolumeSlider-handle { - transform: scale(1); - } - - .VolumeSlider-intent { - bottom: 0; - left: 0; - width: 100%; - } - } - } - } \ No newline at end of file diff --git a/widget-example/src/containers/ChatApp/Components/AvatarWrapper/index.js b/widget-example/src/containers/ChatApp/Components/AvatarWrapper/index.js deleted file mode 100644 index eea9617..0000000 --- a/widget-example/src/containers/ChatApp/Components/AvatarWrapper/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import React, { Component } from 'react' -import Avatar from 'react-avatar'; -import { Image } from 'semantic-ui-react' -class AvatarWrapper extends Component { - - render () { - - let avatar; - let size; - if(this.props.size){ - size = this.props.size - } - else{ - size = 36 - } - if(this.props.src){ - avatar = - } - else{ - avatar = - } - return ( -
- {avatar} -
- ) - } - -} - -export default AvatarWrapper diff --git a/widget-example/src/containers/ChatApp/Components/AvatarWrapper/style.scss b/widget-example/src/containers/ChatApp/Components/AvatarWrapper/style.scss deleted file mode 100644 index 560fe74..0000000 --- a/widget-example/src/containers/ChatApp/Components/AvatarWrapper/style.scss +++ /dev/null @@ -1,11 +0,0 @@ - -.cc-avatar-size-36{ - width: 36px!important; - height: 36px!important; - border-radius: 36px!important; -} -.cc-avatar-size-30{ - width: 30px!important; - height: 30px!important; - border-radius: 30px!important; -} diff --git a/widget-example/src/containers/ChatApp/Components/CannedResponse/index.js b/widget-example/src/containers/ChatApp/Components/CannedResponse/index.js deleted file mode 100644 index 7c63dd5..0000000 --- a/widget-example/src/containers/ChatApp/Components/CannedResponse/index.js +++ /dev/null @@ -1,80 +0,0 @@ -import React, { Component } from 'react' -import { Dropdown, Grid, Popup } from 'semantic-ui-react' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/groupChannels/actions' - -class CannedResponse extends Component { - state = { - canned_response: '' - } - - handleChange = (e, {name, value}) => { - this.setState({ [name]: value }) - this.props.actions.userMessage(this.props.id, value) - } - - render() { - - let options = [ - { - key: 'I am in a meeting', - text: 'I am in a meeting', - value: 'I am in a meeting', - }, - { - key: 'I will join shortly', - text: 'I will join shortly', - value: 'I will join shortly', - }, - { - key: 'I am on my way', - text: 'I am on my way', - value: 'I am on my way', - } - ] - - return ( - - - - - - {options.map(option => )} - - } - content='Canned Responses' - className="cc-theme cc-tooltips" - /> - {/* - - - {options.map(option => )} - - */} - - - ) - } -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch) //binds all the actions with dispatcher and returns them - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(CannedResponse) diff --git a/widget-example/src/containers/ChatApp/Components/CannedResponse/style.scss b/widget-example/src/containers/ChatApp/Components/CannedResponse/style.scss deleted file mode 100644 index 712f9eb..0000000 --- a/widget-example/src/containers/ChatApp/Components/CannedResponse/style.scss +++ /dev/null @@ -1,9 +0,0 @@ -.cc-canned-response{ - padding-left: 0px!important; - padding-right: 0px!important; -} -.cc-app-mobile{ - .cc-canned-response{ - padding-top: 24px!important; - } -} diff --git a/widget-example/src/containers/ChatApp/Components/ChatCampIcon/index.js b/widget-example/src/containers/ChatApp/Components/ChatCampIcon/index.js deleted file mode 100644 index bc0fffa..0000000 --- a/widget-example/src/containers/ChatApp/Components/ChatCampIcon/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import React, { Component } from 'react' -import { connect } from 'react-redux' - -class ChatCampIcon extends Component { - - state = {} - - render () { - - return ( - - - - ) - } - -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(ChatCampIcon) diff --git a/widget-example/src/containers/ChatApp/Components/ChatCampIcon/style.scss b/widget-example/src/containers/ChatApp/Components/ChatCampIcon/style.scss deleted file mode 100644 index b3af3a7..0000000 --- a/widget-example/src/containers/ChatApp/Components/ChatCampIcon/style.scss +++ /dev/null @@ -1,11 +0,0 @@ -.window-header, .cc-list-header, .chatcamp-welcome-bubble{ - .cc-icons{ - fill: rgba($primary-text, 1.0); - } -} -.window-footer{ - .cc-icons{ - fill: rgba($secondary-text, 0.48); - } - -} diff --git a/widget-example/src/containers/ChatApp/Components/DesktopNotification/index.js b/widget-example/src/containers/ChatApp/Components/DesktopNotification/index.js deleted file mode 100644 index 7f4ed68..0000000 --- a/widget-example/src/containers/ChatApp/Components/DesktopNotification/index.js +++ /dev/null @@ -1,59 +0,0 @@ -import { Component } from 'react' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/groupChannels/actions' -import client from 'Client' - - -class DesktopNotification extends Component { - state = { - groupChannelId: '' - } - - componentDidMount(){ - if (typeof Notification !== 'undefined') { - Notification.requestPermission(function(result) { - if (result === 'granted') { - } - else if (result === 'denied') { - } - }); - } - let {groupChannelId, user} = this.props - let channelListener = new client.ChannelListener(); - channelListener.onGroupChannelMessageReceived = function(groupChannel, message) { - if(groupChannelId === groupChannel.id){ - if(user.get("id") !== message.user.id){ - if(document.hasFocus() === false) { - if(typeof Notification !== 'undefined') { - let notificationRoom = new Notification(groupChannel.name, { - icon: groupChannel.avatarUrl, - body: message.user.displayName + ": " + message.text - }); - } - } - } - } - } - client.addChannelListener("DesktopNotification", channelListener) - } - - render() { - - return ( - null - ) - } -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch) //binds all the actions with dispatcher and returns them - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(DesktopNotification) diff --git a/widget-example/src/containers/ChatApp/Components/Emoji/index.js b/widget-example/src/containers/ChatApp/Components/Emoji/index.js deleted file mode 100644 index 84075f6..0000000 --- a/widget-example/src/containers/ChatApp/Components/Emoji/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import React, { Component } from 'react' -import UnicodeToImg from '../../../../utility/UnicodeToImg' -import {Picker} from "emoji-mart"; - -class Emoji extends Component { - constructor(props,context){ - super(props,context); - this.state = { - _emojiMart: null - }; - } - - componentWillMount() { - let t = this; - let __emojiMart = Picker; - t.setState({ - _emojiMart: __emojiMart - }); - } - - - - handleEmojiSet(){ - return UnicodeToImg.getEmojiSet("1"); - } - - render() { - let viewEmojiPanel; - - if(this.props.showEmojiPanel === true && typeof this.state._emojiMart !== 'undefined' && this.state._emojiMart !== null) { - viewEmojiPanel = - 'https://cdn.iflychat.com/img/international-emoji/v3.0.0/sheet_apple_32.png')} - emoji='point_up' /> - } else if(this.props.showEmojiPanel === true && (typeof this.state._emojiMart === 'undefined' || this.state._emojiMart === null)) { - } - - - return ( -
this.panelHeight = node}> - {viewEmojiPanel} -
- - ) - } - -} - -export default Emoji diff --git a/widget-example/src/containers/ChatApp/Components/Emoji/style.scss b/widget-example/src/containers/ChatApp/Components/Emoji/style.scss deleted file mode 100644 index 32ab252..0000000 --- a/widget-example/src/containers/ChatApp/Components/Emoji/style.scss +++ /dev/null @@ -1,373 +0,0 @@ -.ifc-emoji-menu-tab{ - display:inline-block; - width:25px;height:25px; - background-image:url(//cdn.iflychat.com/img/international-emoji/emojisprite_0.png); - background-repeat:no-repeat; - background-position:0px 0px;background-size:675px 175px; -} -.ifc-emoji-panel-header{ - .nav-tabs>li{ - width:47px; - height:36px; - a{ - padding:0; - margin:0; - } - } - .list-panel{ - width: 100%; - display: block; - padding: 10px 10px 0 10px; - } - .list-panel>li{ - display: inline-block; - width: 31px; - height: 31px; - img{ - cursor: pointer - } - } -} -.emoji-mart, -.emoji-mart * { - box-sizing: border-box; - line-height: 1.15; -} - -.emoji-mart { - font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif; - font-size: 16px; - display: inline-block; - color: #222427; - border: 1px solid #d9d9d9; - border-radius: 5px; - background: #fff; -} - -.emoji-mart .emoji-mart-emoji { - padding: 6px; -} - -.emoji-mart-bar { - border: 0 solid #d9d9d9; -} -.emoji-mart-bar:first-child { - border-bottom-width: 1px; - border-top-left-radius: 5px; - border-top-right-radius: 5px; -} -.emoji-mart-bar:last-child { - border-top-width: 1px; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; -} - -.emoji-mart-anchors { - display: flex; - flex-direction: row; - justify-content: space-between; - padding: 0 6px; - color: #858585; - line-height: 0; -} - -.emoji-mart-anchor { - position: relative; - display: block; - flex: 1 1 auto; - text-align: center; - padding: 12px 4px; - overflow: hidden; - transition: color .1s ease-out; -} -.emoji-mart-anchor:hover, -.emoji-mart-anchor-selected { - color: #464646; -} - -.emoji-mart-anchor-selected .emoji-mart-anchor-bar { - bottom: 0; -} - -.emoji-mart-anchor-bar { - position: absolute; - bottom: -3px; left: 0; - width: 100%; height: 3px; - background-color: #464646; -} - -.emoji-mart-anchors i { - display: inline-block; - width: 100%; - max-width: 22px; -} - -.emoji-mart-anchors svg { - fill: currentColor; - max-height: 18px; -} - -.emoji-mart-scroll { - overflow-y: scroll; - height: 270px; - padding: 0 6px 6px 6px; - will-change: transform; /* avoids "repaints on scroll" in mobile Chrome */ -} - -.emoji-mart-search { - margin-top: 6px; - padding: 0 6px; -} -.emoji-mart-search input { - font-size: 16px; - display: block; - width: 100%; - padding: .2em .6em; - border-radius: 25px; - border: 1px solid #d9d9d9; - outline: 0; -} - -.emoji-mart-category .emoji-mart-emoji span { - z-index: 1; - position: relative; - text-align: center; - cursor: default; -} - -.emoji-mart-category .emoji-mart-emoji:hover:before { - z-index: 0; - content: ""; - position: absolute; - top: 0; left: 0; - width: 100%; height: 100%; - background-color: #f4f4f4; - border-radius: 100%; -} - -.emoji-mart-category-label { - z-index: 2; - position: relative; - position: -webkit-sticky; - position: sticky; - top: 0; -} - -.emoji-mart-category-label span { - display: block; - width: 100%; - font-weight: 500; - padding: 5px 6px; - background-color: #fff; - background-color: rgba(255, 255, 255, .95); -} - -.emoji-mart-emoji { - position: relative; - display: inline-block; - font-size: 0; -} - -.emoji-mart-no-results { - font-size: 14px; - text-align: center; - padding-top: 70px; - color: #858585; -} -.emoji-mart-no-results .emoji-mart-category-label { - display: none; -} -.emoji-mart-no-results .emoji-mart-no-results-label { - margin-top: .2em; -} -.emoji-mart-no-results .emoji-mart-emoji:hover:before { - content: none; -} - -.emoji-mart-preview { - position: relative; - height: 70px; -} - -.emoji-mart-preview-emoji, -.emoji-mart-preview-data, -.emoji-mart-preview-skins { - position: absolute; - top: 50%; - transform: translateY(-50%); -} - -.emoji-mart-preview-emoji { - left: 12px; -} - -.emoji-mart-preview-data { - left: 68px; right: 12px; - word-break: break-all; -} - -.emoji-mart-preview-skins { - right: 30px; - text-align: right; -} - -.emoji-mart-preview-name { - font-size: 14px; -} - -.emoji-mart-preview-shortname { - font-size: 12px; - color: #888; -} -.emoji-mart-preview-shortname + .emoji-mart-preview-shortname, -.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon, -.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon { - margin-left: .5em; -} - -.emoji-mart-preview-emoticon { - font-size: 11px; - color: #bbb; -} - -.emoji-mart-title span { - display: inline-block; - vertical-align: middle; -} - -.emoji-mart-title .emoji-mart-emoji { - padding: 0; -} - -.emoji-mart-title-label { - color: #999A9C; - font-size: 26px; - font-weight: 300; -} - -.emoji-mart-skin-swatches { - font-size: 0; - padding: 2px 0; - border: 1px solid #d9d9d9; - border-radius: 12px; - background-color: #fff; -} - -.emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch { - width: 16px; - padding: 0 2px; -} - -.emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch-selected:after { - opacity: .75; -} - -.emoji-mart-skin-swatch { - display: inline-block; - width: 0; - vertical-align: middle; - transition-property: width, padding; - transition-duration: .125s; - transition-timing-function: ease-out; -} - -.emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s } -.emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s } -.emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s } -.emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s } -.emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s } -.emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s } - -.emoji-mart-skin-swatch-selected { - position: relative; - width: 16px; - padding: 0 2px; -} -.emoji-mart-skin-swatch-selected:after { - content: ""; - position: absolute; - top: 50%; left: 50%; - width: 4px; height: 4px; - margin: -2px 0 0 -2px; - background-color: #fff; - border-radius: 100%; - pointer-events: none; - opacity: 0; - transition: opacity .2s ease-out; -} - -.emoji-mart-skin { - display: inline-block; - width: 100%; padding-top: 100%; - max-width: 12px; - border-radius: 100%; -} - -.emoji-mart-skin-tone-1 { background-color: #ffc93a } -.emoji-mart-skin-tone-2 { background-color: #fadcbc } -.emoji-mart-skin-tone-3 { background-color: #e0bb95 } -.emoji-mart-skin-tone-4 { background-color: #bf8f68 } -.emoji-mart-skin-tone-5 { background-color: #9b643d } -.emoji-mart-skin-tone-6 { background-color: #594539 } - -/* custom iFly CSS*/ -// .emoji-mart-anchors { -// display: block; -// height: 38px; -// line-height: 38px; -// width: 100%; -// } -// .emoji-mart-anchor { -// padding: 0px 1px; -// flex: none; -// width: 11%; -// display: block; -// float: left; -// } -// .emoji-mart-anchors i { -// max-width: 18px; -// } -// .emoji-mart-scroll { -// display: block; -// width: 100%; -// } -// .emoji-mart-search { -// font-size: 12px; -// height: 22px; -// } -// .emoji-mart-category-label { -// display: block; -// height: 24px; -// line-height: 24px; -// margin-bottom: 10px; -// span{ -// font-size : 13px; -// } -// } -// .emoji-mart .emoji-mart-emoji { -// height: 36px; -// } -// // .emoji-mart-preview { -// // display: none; -// // } -.emoji-mart { - border: 0; -} -.emoji-mart-preview-emoticon { - display: none; -} -.emoji-mart-search input { - font-size: 14px; - color: #ddd; - line-height: 16px; -} -.emoji-mart-bar:first-child , .emoji-mart-bar:last-child { - border: none; -} -// .ifc-chat-window-message-body-message{ -// .emoji-mart-emoji{ -// height: 21px; -// line-height: 21px; -// vertical-align: middle; -// } -// } diff --git a/widget-example/src/containers/ChatApp/Components/GroupParticipantsList/index.js b/widget-example/src/containers/ChatApp/Components/GroupParticipantsList/index.js deleted file mode 100644 index f7ce3c2..0000000 --- a/widget-example/src/containers/ChatApp/Components/GroupParticipantsList/index.js +++ /dev/null @@ -1,93 +0,0 @@ -import React, { Component } from 'react' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/groupChannels/actions' -import { Icon, List, Image} from 'semantic-ui-react' -import _ from 'lodash' -import Immutable from 'immutable'; -import AvatarWrapper from 'containers/ChatApp/Components/AvatarWrapper' -import UtilityTime from 'utility/UtilityTime' -import ChatCampIcon from 'containers/ChatApp/Components/ChatCampIcon' -import {ICONS} from 'constants/icons' - -class GroupParticipantsList extends Component { - - state = { - - } - - render () { - - let inlineListStyle = { - width: "300px" - } - let inlineStyleDisplay ={ - display: "table-cell" - } - - let inlineStyleHeight ={ - lineHeight: "36px" - } - let inlineStyleHeightName ={ - lineHeight: "36px", - maxWidth: "140px", - whiteSpace: "nowrap", - overflowX: "hidden" - } - let inlineStyleHeightNameAdmin ={ - lineHeight: "36px", - maxWidth: "20px", - whiteSpace: "nowrap", - overflowX: "hidden", - fontSize:"17px" - } - let inlineStyleHeightImage ={ - lineHeight: "36px", - height: "36px", - position: "relative" - } - - return ( - - {this.props.groupChannels.getIn([this.props.id, 'participants'], Immutable.Map()).map((user, id) => { - return ( - - - - {/* } /> */} - - }/> - {/* */} - {/* - - - {user.displayName} - - {/* show admin from metadata*/} - { this.props.groupChannels.getIn([this.props.id, 'metadata'], Immutable.Map()) && this.props.groupChannels.getIn([this.props.id, 'metadata'], Immutable.Map()).admins && _.includes(JSON.parse(this.props.groupChannels.getIn([this.props.id, 'metadata'], Immutable.Map()).admins), user.id) && - - } - - {user.isOnline? :
{user.lastSeen === 0? "Not Joined":UtilityTime.getTime('3', user.lastSeen*1000)}
} - -
-
) - })} -
- ) - } - -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch) //binds all the actions with dispatcher and returns them - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(GroupParticipantsList) diff --git a/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/index.js b/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/index.js deleted file mode 100644 index a61b968..0000000 --- a/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/index.js +++ /dev/null @@ -1,112 +0,0 @@ -import React, { Component } from 'react' -import ReactDOM from 'react-dom' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/groupChannelsState/actions' -import { Button, Popup, List } from 'semantic-ui-react' - -class HiddenChatWindow extends Component { - - state = { - cacheMessages : {}, - isLoading: false, - modalMountNode: "" - } - - componentWillMount(){ - let node = document.getElementById("ifc-app") - this.setState({modalMountNode: node}) - } - - findLast(){ - let last = {}; - this.props.groupChannelsState.map((chatwindow, id) => { - if(chatwindow.getIn(["state"]) === "OPEN"){ - if(chatwindow.getIn(["type"]) === "open"){ - last.id = id; - last.type = "open"; - } - else if (chatwindow.getIn(["type"]) === "group"){ - last.id = id; - last.type = "group"; - } - } - }) - return last - } - - itemClick = (clickedID, chatWindow) => { - let last = this.findLast(); - if(last.type === "open"){ - this.props.actions.openChannelsHide(last.id) - } - else if(last.type === "group"){ - this.props.actions.groupChannelsHide(last.id) - } - if(chatWindow.getIn(["type"]) === "open"){ - this.props.actions.openChannelsOpen(clickedID) - } - else if(chatWindow.getIn(["type"]) === "group"){ - this.props.actions.groupChannelsOpen(clickedID) - } - } - - getName(id, chatWindow){ - // let name; - if(chatWindow.getIn(["type"]) === "open"){ - return this.props.openChannels.getIn([id, "name"]) - } - else if(chatWindow.getIn(["type"]) === "group"){ - let groupChannels = this.props.groupChannels - if( (groupChannels.getIn([id, "participantsCount"]) === 2 )&& (groupChannels.getIn([id, "isDistinct"]) === true)){ - let userId = this.props.user.get("id") - let participants = this.props.groupChannels.getIn([id, "participants"]) - for(let i in participants){ - if(participants[i].id !== userId){ - return participants[i].displayName - } - } - } - else{ - return this.props.groupChannels.getIn([id, "name"]) - - } - } - - // return name - } - - render () { - let hiddenWindows = [] - this.props.groupChannelsState.map((chatWindow, id) => { - if(chatWindow.getIn(["state"]) === "HIDDEN" ){ - hiddenWindows.push( {this.itemClick(id, chatWindow)}} key={"participant-content-list-" + id}>{this.getName(id, chatWindow)}) - } - }) - - let finalData = - {hiddenWindows} - - - let popupRightAdjustment = "0"; - let mainClass = "chatcamp-popup-hidden cc-theme"; - if(this.props.smartChat.get("type") === "popup"){ - popupRightAdjustment = String(345*this.props.position + 20*(this.props.position + 1)) + "px" - } - return ( - } content={finalData } className="cc-theme"/> - ) - } -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch) //binds all the actions with dispatcher and returns them - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(HiddenChatWindow) diff --git a/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/style.scss b/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/style.scss deleted file mode 100644 index ce9a99b..0000000 --- a/widget-example/src/containers/ChatApp/Components/HiddenChatWindow/style.scss +++ /dev/null @@ -1,5 +0,0 @@ -#ifc-app .chatcamp-popup-hidden { - position: fixed; - bottom : 0; - right: 20px; -} diff --git a/widget-example/src/containers/ChatApp/Components/LeftPanel/index.js b/widget-example/src/containers/ChatApp/Components/LeftPanel/index.js deleted file mode 100644 index 52449e5..0000000 --- a/widget-example/src/containers/ChatApp/Components/LeftPanel/index.js +++ /dev/null @@ -1,100 +0,0 @@ -import React, { Component } from 'react' -import ReactDOM from 'react-dom' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/userList/actions' -import * as groupChannelsListactions from 'state/groupChannelsList/actions' -import * as openChannelsactions from 'state/openChannels/actions' -import { Accordion, Tab } from 'semantic-ui-react' -import Roster from 'containers/ChatApp/Components/Roster' -import ListHeader from 'containers/ChatApp/Components/ListHeader' -import * as Debug from 'debug'; -const debug = Debug('chatcamp:LeftPanel') -// import './style.css' - -class LeftPanel extends Component { - - state = { - fileRef: null, - activeIndex:0 - } - - checkLoadMore = (e) => { - let node = ReactDOM.findDOMNode(this.handleContextRef); - if(node.clientHeight === (node.scrollHeight - node.scrollTop)) { - if(this.state.activeIndex === 2){ - this.props.actions.getUserList(20, this.props.userList.last().get("id")) - } - else if(this.state.activeIndex === 0){ - this.props.groupChannelsListactions.getList( this.props.groupChannelsList.last()) - } - else if(this.state.activeIndex === 1){ - debug("OC last", this.props.openChannels.last().get("id")) - this.props.openChannelsactions.getList( this.props.openChannels.last().get("id")) - } - } - - - // if(this.state.activeIndex === 2){ - // let node = ReactDOM.findDOMNode(this.handleContextRef); - // if(node.clientHeight === (node.scrollHeight - node.scrollTop)) { - // this.props.actions.getUserList(20, this.props.userList.last().get("id")) - // } - // } - // else if(this.state.activeIndex === 0){ - // let node = ReactDOM.findDOMNode(this.handleContextRef); - // if(node.clientHeight === (node.scrollHeight - node.scrollTop)) { - // this.props.groupChannelsListactions.getList( this.props.groupChannelsList.last()) - // } - // } - return false - } - - handleTabChange = (e, { activeIndex }) => this.setState({ activeIndex }) - - render () { - // const { getTotalRooms, getOnlineUsersCount } = this.props - const panels = [] - const getInboxSize = this.props.groupChannelsList.size - const getOnlineUsersCount = this.props.userList.size - const chatrooms = this.props.openChannels.size - - // panels.push({title: "CHATROOMS " + "(" + getTotalRooms + ")", content: {content: ("hello"), key: "rooms" }}) - const panes = [ - { menuItem: "RECENT " + "(" + getInboxSize + ")", render: () => }, - { menuItem: "ROOMS " + "(" + chatrooms + ")", render: () => }, - { menuItem: "USERS " + "(" + getOnlineUsersCount + ")", render: () => }, -] - - // panels.push({title: "CHATROOMS " + "(" + chatrooms + ")", content: {content: (), key: "chatroom" }}) - // - // panels.push({title: "RECENT CHATS " + "(" + getInboxSize + ")", content: {content: (), key: "inbox" }}) - // - // panels.push({title: "USERS " + "(" + getOnlineUsersCount + ")", content: {content: (), key: "users" }}) - - return( -
- - - this.handleContextRef = node} onScroll={this.checkLoadMore.bind(this)} onTabChange={this.handleTabChange} panes={panes} className="chatcamp-list-roster-horizontal" menu={{ secondary: true, pointing: true }} /> - {/* */} - -
- ) - } - -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch), - groupChannelsListactions: bindActionCreators(groupChannelsListactions, dispatch), - openChannelsactions: bindActionCreators(openChannelsactions, dispatch) //binds all the actions with dispatcher and returns them - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(LeftPanel) diff --git a/widget-example/src/containers/ChatApp/Components/LeftPanel/style.scss b/widget-example/src/containers/ChatApp/Components/LeftPanel/style.scss deleted file mode 100644 index 33a4292..0000000 --- a/widget-example/src/containers/ChatApp/Components/LeftPanel/style.scss +++ /dev/null @@ -1,54 +0,0 @@ -.chatcamp-list-roster{ - height: calc(100% - 47px); - overflow: auto; - background: white; -} -.cc-left-panel-inbox{ - // background: $primary-background; -} -.cc-smart-chat-panel{ - width: 350px; - height: 470px; - position: fixed; - right: 20px; - bottom: 0; - -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.06), 0 2px 5px 0 rgba(0,0,0,.2); - -moz-box-shadow: 0 1px 1px 0 rgba(0,0,0,.06), 0 2px 5px 0 rgba(0,0,0,.2); - box-shadow: 0 1px 1px 0 rgba(0,0,0,.06), 0 2px 5px 0 rgba(0,0,0,.2); - border-radius: 10px 10px 0 0!important; - z-index: 2147483646; -} - -.chatcamp-list-roster-horizontal{ - height: calc(100% - 50px); - overflow: auto; - display: block; - background-color: $secondary-background!important; - .menu{ - width: 100%!important; - margin-bottom: 0!important; - a.item{ - width: 33.3%!important; - box-sizing: border-box; - font-size: 13.6px; - } - } -} -.chatcamp-list-roster-horizontal-item{ - border: 0!important; - margin-right: 0!important; - margin-left: 0!important; - width: 100%!important; - box-sizing: border-box; -} - -.cc-app-mobile{ - .cc-smart-chat-panel{ - width: 100%; - height: 100%; - right: 0; - } - .chatcamp-list-roster-horizontal{ - height: calc(100% - 50px); - } -} diff --git a/widget-example/src/containers/ChatApp/Components/ListHeader/index.js b/widget-example/src/containers/ChatApp/Components/ListHeader/index.js deleted file mode 100644 index 4caf02f..0000000 --- a/widget-example/src/containers/ChatApp/Components/ListHeader/index.js +++ /dev/null @@ -1,187 +0,0 @@ -import React, { Component } from 'react' -import ReactDOM from 'react-dom' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/smartChat/actions' -import * as actionsUserList from 'state/userList/actions' -import * as actionsGroupChannels from 'state/groupChannels/actions' -import ChatCampIcon from 'containers/ChatApp/Components/ChatCampIcon' -import {ICONS} from 'constants/icons' -import * as Debug from 'debug' -import { Image, Segment, Popup, Modal, Input, Form, Label, Dropdown, Button, Message } from 'semantic-ui-react' -const debug = Debug('chatcamp:ListHeader') -class ListHeader extends Component { - - state = { - fileRef: null, - groupName: "", - groupParticipants: [], - showGroupNameError: false, - showGroupParticipantsError: false, - modalOpen: false, - modalMountNode: "" - } - - componentDidMount(){ - let node = document.getElementById("ifc-app") - this.setState({modalMountNode: node}) - } - - ifPopUp = () => { - if (this.props.smartChat.get("type") === "popup" || this.props.smartChat.get("type") === "inbox"){ - return true - } - else{ - return false - } - } - closeSmartChat = () => { - this.props.actions.smartChatClose() - } - - checkLoadMore = (e) => { - let parentNode = ReactDOM.findDOMNode(this.handleContextRef); - let node = parentNode.querySelector('.menu') - if(node.clientHeight === (node.scrollHeight - node.scrollTop)) { - this.props.actionsUserList.getUserList(5, this.props.userList.last().get("id")) - } - return false - } - - handleSubmit = (e) => { - let {groupName, groupParticipants} = this.state - if(groupName !== ""){ - if(groupParticipants.length > 0){ - groupParticipants.push(this.props.user.getIn(['id'])) - this.props.actionsGroupChannels.createChannel({groupChannelName: groupName, groupParticipants: groupParticipants, isDistinct: false}) - this.setState({groupName: "", groupParticipants: []}) - this.setState({modalOpen: false}) - } - else{ - this.setState({showGroupParticipantsError: true}) - } - } - else{ - this.setState({showGroupNameError: true}) - } - } - - handleGroupChange = (event) => { - this.setState({showGroupNameError: false}) - this.setState({ [event.target.name]: event.target.value }) - } - - handleParticipantChange = (event, data) => { - this.setState({showGroupParticipantsError: false}) - this.setState({ [data.name]: data.value }) - } - - // handleClose = (event, data) => { - // this.setState({groupName: "", groupParticipants: []}) - // } - buttonClick= () => { - this.setState({modalOpen: true}) - } - handleCancel = () => { - this.setState({groupName: "", groupParticipants: []}) - this.setState({modalOpen: false}) - } - - render () { - // let node = React.findDOMNode(this.textInputRef) - // console.log("node", node) - let sourceURL = process.env.PUBLIC_URL + "/" - let source = - let source_close = - let options = [] - let {groupName, groupParticipants, modalOpen, showGroupParticipantsError, showGroupNameError} = this.state - let nameError = - let participantsError = - this.props.userList.map((rosterItem) => { - if(rosterItem.getIn(['id']) !== this.props.user.getIn(['id'])){ - let id = rosterItem.getIn(['id']) - let name = rosterItem.getIn(['displayName']) - // let image = rosterItem.getIn(['avatarUrl']) - // options.push({key: id, value: id, image: image, text: name }) - options.push({key: id, value: id, text: name }) - } - }) - // console.log("domnode") - - return( - - {source}} - hideOnScroll - position='bottom left' - on='hover' className="cc-theme cc-tooltips"> - Create New Group Chat -
} - // onClose = {this.handleClose.bind(this)} - > - Create New Group Chat - - - {showGroupParticipantsError && participantsError} - {showGroupNameError && nameError} -
- - - - - - - this.handleContextRef = node} onScroll={this.checkLoadMore.bind(this)} placeholder='Add Participants' fluid multiple selection options={options} name= 'groupParticipants' value={groupParticipants} onChange={this.handleParticipantChange.bind(this)} /> - -
- - - Cancel - - - - Create - - -
-
-
- -
-
- - -
My Chats
- { this.ifPopUp() &&
- {this.closeSmartChat()}} className= "cc-list-header-close">{source_close}
} - hideOnScroll - position='bottom right' - on='hover' className="cc-theme cc-tooltips"> - - Close - - - } - - ) - } - -} - -function mapStateToProps(state) { - return state -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators(actions, dispatch), - actionsUserList: bindActionCreators(actionsUserList, dispatch), - actionsGroupChannels: bindActionCreators(actionsGroupChannels, dispatch) - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(ListHeader) diff --git a/widget-example/src/containers/ChatApp/Components/ListHeader/style.scss b/widget-example/src/containers/ChatApp/Components/ListHeader/style.scss deleted file mode 100644 index 8c0a32e..0000000 --- a/widget-example/src/containers/ChatApp/Components/ListHeader/style.scss +++ /dev/null @@ -1,68 +0,0 @@ -.cc-list-header{ -background-color: $primary-background!important; -width: 100%; -text-align: center; -border-radius: 0!important; -border-right: 2px solid $primary-text!important; -display: block; -box-sizing: border-box; -height: 50px; - .cc-list-header-text{ - font-size: 15px; - color: $primary-text; - display: inline-block; - margin-left: 9px!important; - font-weight: normal; - line-height: 22px; - } -} -.cc-widget{ - border: none!important; - margin-bottom: 0!important; - margin-top: 0!important; - padding: 12px 13px!important; - border: 1px solid $primary-background!important; - border-radius: 7px 7px 0 0!important; -} -.cc-list-header-image{ - display: inline-block!important; - width: 2px!important; - float: left; - margin-left: 9px; - cursor: pointer; - margin-top: 2px; -} -.cc-list-header-actions{ - *{ - cursor: pointer; - } - width: 22px; - float: right; - cursor: pointer; - height: 24px; - .cc-list-header-close{ - width: 22px; - height: 24px; - cursor: pointer; - } -} -.cc-create-group-modal{ - button.primary{ - background-color: $primary-background!important; - } - .buttons{ - float: right!important; - } -} -.cc-app-mobile{ - .cc-list-header-image{ - width: 26px!important; - padding-bottom: 6px; - } - .cc-list-header-text{ - font-size: 23px; - } - .cc-list-header-close{ - width: 26px; - } -} diff --git a/widget-example/src/containers/ChatApp/Components/MessageAction/index.js b/widget-example/src/containers/ChatApp/Components/MessageAction/index.js deleted file mode 100644 index 5ca8709..0000000 --- a/widget-example/src/containers/ChatApp/Components/MessageAction/index.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, { Component } from 'react' -import { Modal, Button, Icon, Dropdown, Grid, Segment } from 'semantic-ui-react' -import Textarea from 'react-textarea-autosize'; -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as actions from 'state/groupChannels/actions' -class MessageAction extends Component { - - state = { - products: [ - { - "$id": "2", - "ProductID": 44, - "Name": "Streaker Fitbit", - "Code": "SF001", - "ImageURL": "[\"http://streaklabs.in/UserImages/FitBit.jpg\"]", - "ShortDescription": "Streaker Fitbit", - "LongDescription": "Streaker Fitbit", - "CategoryID": 45, - "ShippingCost": 0, - "Status": 1, - "BrandID": 40 - }, - { - "$id": "3", - "ProductID": 43, - "Name": "Streaker Weighing Scale", - "Code": "SW001", - "ImageURL": "[\"http://streaklabs.in/UserImages/WeightingScale.jpg\"]", - "ShortDescription": "Streaker Weighing Scale", - "LongDescription": "Streaker Weighing Scale", - "CategoryID": 44, - "ShippingCost": 0, - "Status": 1, - "BrandID": 40 - }, - { - "$id": "4", - "ProductID": 42, - "Name": "Streaker Water Bottle", - "Code": "SB001", - "ImageURL": "[\"http://streaklabs.in/UserImages/WaterBottle.jpg\"]", - "ShortDescription": "Streaker Water Bottle", - "LongDescription": "Streaker Water Bottle", - "CategoryID": 43, - "ShippingCost": 0, - "Status": 1, - "BrandID": 40 - } - ], - selectedProductId: 44, - message: 'Check this out!', - modalOpen: false - } - - handleClick = (e, selection) => { - this.setState({ - selectedProductId: selection.value - }) - } - - handleChange = (e) => { - if(e.target.value !== '\n'){ - this.setState({ - message: e.target.value, - },function(){ - // this.props.actions.startTyping(this.props.id) - }) - } - } - - handleButtonClick = (e) => { - let {message, selectedProductId, products} = this.state - let product = null - - if(selectedProductId){ - for(let i in products) { - if(products[i]["ProductID"] === selectedProductId) { - product = products[i] - break - } - } - this.props.actions.actionMessage(this.props.id, message, product) - this.handleClose() - } - else if(!selectedProductId){ - alert("Please, select a product") - } - - } - - handleOpen = () => this.setState({ modalOpen: true }) - - handleClose = () => this.setState({ modalOpen: false }) - - componentDidMount() { - // axios.get('http://streaklabs.in:90//api/Ecommerce/GetAllProducts', { - // headers: {'Authorization': 'Bearer vJ-gKSwUh9yh5CWBFsrrVBIn9T9n9DgxNWnJsCmGJL8goOhJy3IJKx5a3e5M-Xe1P6qM-g558PF5wTce3NYNIhOoHC5-OLqlpuGzzE7-0BUUgRMFzV1yrFLgXDSnIEIl_PDbogoMcA6QxcUK2rz0NbppaWY--koJycDGq9lyVKKxU56Pltj9ntHm7jaPtHGyInaKX0ZWe1NBf514zFYZ1y45A5LTnzJx12e7rY79R6g-e-buUkpa56tQz5M8Ea7dqYHA1o-xyrzRc0RF9l4v26eKfnhrv_f07jBBflkpjCjJ0XMtV9WOW8iMz-a86ayF8Aqj8LQiHd1xFqedUAUjdrtm5rd-2B2VGEnCAJuSCi0CblLM7ltau1Ry6d7irbYjblVbvnydSNvYKccVO4mUWzujTfR8ishCFcsmuqAxp-Uvufh2mSw9CAIwlKI0iO4IgfO0KVlKzdp4YB2-ZA2GvkNCqIHDsGr8KK-HQ_23r8JLMQYn3Zjg_kztpu-sKKvhQJgxSa-mw0pvMDAvSKCjwg'} - // }).then(res => { - // debug("MODAL", res); - // }) - } - - render () { - let options = []; - this.state.products.map((product, key) => { - // let boundItemClick = this.handleClick.bind(this, product); - options.push ({ - key: product.ProductID, - value: product.ProductID, - image: JSON.parse(product.ImageURL)[0], - text: product.Name - }) - return true - }) - return (} open={this.state.modalOpen} - onClose={this.handleClose}> - Share Product - - - - - - - -