Untitled
unknown
plain_text
2 years ago
16 kB
14
Indexable
// Customizable Area Start
import { IBlock } from '../../../../framework/src/IBlock'
import { Message } from "../../../../framework/src/Message";
import { BlockComponent } from "../../../../framework/src/BlockComponent";
import MessageEnum, {
getName
} from "../../../../framework/src/Messages/MessageEnum";
import { runEngine } from "../../../../framework/src/RunEngine";
import StorageProvider from '../../../../framework/src/StorageProvider'
import { GiftedChat } from 'react-native-gifted-chat';
// Customizable Area Start
// import { GiftedChat } from "react-native-gifted-chat";
import { Keyboard, Platform } from "react-native";
import ImagePicker from "react-native-image-crop-picker";
import { CommonContext } from '../../../../components/src/CommonContextProvider'
import {
ActionCable,
Cable,
} from '@kesha-antonov/react-native-action-cable'
import { getStorageData, } from "../../../../framework/src/Utilities";
import moment from "moment";
// Customizable Area End
export const configJSON = require("../../config.json");
export interface Props {
navigation: any;
id: string;
// Customizable Area Start
// Customizable Area End
}
interface S {
// Customizable Area Start
conversation_sid:any
cableCon: any;
messages: any;
profilePhoto: any;
name: string;
userId:any;
receiver_image:string;
likeArray:any;
user_name:string;
actionCable1:any;
// Customizable Area End
}
let isFound = false;
interface SS {
id: any;
}
export default class ChatDetailsController extends BlockComponent<
Props,
S,
SS
> {
// Customizable Area Start
actionCable: any;
getChatDetailsApiId: any;
static contextType = CommonContext;
// Customizable Area End
constructor(props: Props) {
super(props);
this.receive = this.receive.bind(this);
// Customizable Area Start
this.subScribedMessages = [
// Customizable Area Start
getName(MessageEnum.NavigationPayLoadMessage),
getName(MessageEnum.RestAPIResponceMessage),
// Customizable Area End
];
this.state = {
conversation_sid: '',
cableCon: [],
likeArray:[459,461],
user_name:'',
actionCable1:[],
messages:
[
// {
// _id: 1,
// text: 'Hello developer',
// iscustom: false,
// location: {
// latitude: 37.78825,
// longitude: -122.4324,
// },
// createdAt: new Date(),
// user: {
// _id: 659,
// name: 'React Native',
// avatar: 'https://placeimg.com/140/140/any',
// },
// },
// {
// _id: 1,
// text: 'Hello swapnil',
// iscustom: true,
// location: {
// latitude: 37.78825,
// longitude: -122.4324,
// },
// createdAt: new Date(),
// user: {
// _id: 1,
// name: 'React Native',
// avatar: 'https://placeimg.com/140/140/any',
// },
// },
],
profilePhoto:'',
name:'',
userId:'',
receiver_image:'',
};
// Customizable Area End
runEngine.attachBuildingBlock(this as IBlock, this.subScribedMessages);
// Customizable Area Start
// Customizable Area End
}
async receive(from: string, message: Message) {
// Customizable Area Start
// Navigation passed Data
if (
getName(MessageEnum.RestAPIResponceMessage) === message.id &&
this.getChatDetailsApiId != null &&
this.getChatDetailsApiId === message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
) {
let responseJson = message.getData(
getName(MessageEnum.RestAPIResponceSuccessMessage)
);
// console.log("nwenfiewnf", responseJson?.data?.attributes)
if (responseJson !== undefined && responseJson?.errors === undefined) {
this.setState({messages:responseJson?.data?.attributes?.messages.reverse()})
} else {
let errorReponse = message.getData(
getName(MessageEnum.RestAPIResponceErrorMessage)
);
console.log("Error response", errorReponse)
console.log(responseJson)
}
}
// Customizable Area End
}
async componentDidMount(): Promise<void> {
this.getparama()
this._checkActionCableConnect()
this.fetchAllMessage()
}
async componentWillUnmount(): Promise<void> {
this._disConnectChat()
}
getparama = async()=>{
const userId = await StorageProvider.get('USER_ID')
let params = await this.props.navigation.state.params
this.setState({conversation_sid:params?.item?.conversation_sid, profilePhoto:params?.item?.receiver_image, name:params?.item?.name})
this.setState({ userId:Number(userId) })
this.setState({user_name:params?.item?.user_name})
// console.log(params?.item?.user_name, "paramsparamsparamsparamsparams ")
}
_checkActionCableConnect = async()=>{
// const token = await StorageProvider.get('USER_TOKEN')
// const link = 'vibesocialmusic-82830-ruby.b82830.dev.us-east-1.aws.svc.builder.cafe'
const token = 'eyJhbGciOiJIUzUxMiJ9.eyJpZCI6NCwiZXhwIjoxNjg2NDY3NTkxLCJ0b2tlbl90eXBlIjoibG9naW4ifQ.mHG1B-pXNiCUrNYyeL6qu8cZB95NG-zBB1bPan7BKRm8op8y3CFkpC807g6Eb4jRMXnzmw4epBsFzyne5XfV1g'
const link = '17a5-20-207-125-94.in.ngrok.io'
// let conversation_sid = await this.props.navigation.state.params?.item?.conversation_sid
let conversation_sid = 8
console.log('Checking', token)
this.actionCable = ActionCable.createConsumer(`wss://${link}/cable?token=${token}`)
const cable = new Cable({
channel: `MessagesChannel`,
})
this.setState({ cableCon: cable });
this.setState({actionCable1:this.actionCable})
const channel = cable.setChannel(
`MessagesChannel`,
// channel name to which we will pass data from Rails app with `stream_from`
this.actionCable.subscriptions.create({
channel: `MessagesChannel`, // from Rails app app/channels/chat_channel.rb
// chat_id:8
chat_id:conversation_sid
})
);
channel
.on("received", (e: any) =>
{
this._onRecieved(e)
}
)
.on("connected", (e: any) => console.log(e, "MessagesChannel from server is connected"))
.on("rejected", (e: any) => console.log(e, "rejected"))
.on("disconnected", (e) => {
console.log("disconnect", e);
this.actionCable.disconnect();
});
}
// fetchDetails = async () => {
// const userId = await StorageProvider.get('USER_ID')
// this.setState({ userId })
// const name = await this.props.navigation.state.params.
// this.setState({ headerName: name })
// console.log(name, "params.name")
// }
fetchAllMessage = async () => {
const token = await StorageProvider.get('USER_TOKEN')
const reciverID = await this.props.navigation.state?.params?.item?.conversation_sid
const header = {
'Content-Type': 'application/json',
token
}
const requestMessage = new Message(
getName(MessageEnum.RestAPIRequestMessage),
)
this.getChatDetailsApiId = requestMessage.messageId
requestMessage.addData(
getName(MessageEnum.RestAPIResponceEndPointMessage),
// configJSON.getPostListApiEndPoint,
`bx_block_chat/chats/${reciverID}`
)
requestMessage.addData(
getName(MessageEnum.RestAPIRequestHeaderMessage),
JSON.stringify(header),
)
requestMessage.addData(
getName(MessageEnum.RestAPIRequestMethodMessage),
'GET',
)
runEngine.sendMessage(requestMessage.id, requestMessage)
return true
}
// Customizable Area Start
async componentWillMount() {
// this._cableCable();
}
_disConnectChat = () => {
this.state.actionCable1.disconnect();
console.log("_disConnectChat_disConnectChat_disConnectChat");
};
// Customizable Area End
updateMessage = async () => {
const message = await this.state.conversationFromSid.getMessages()
const parseMessage = await this.parseMessages(message.items)
this.setState({ messages: parseMessage })
}
_sendMessage = async(newMessages:any) => {
console.log("sendMessage from chat", newMessages)
this.setState({messages: GiftedChat.append(this.state.messages, newMessages)})
this.state.cableCon.channel(`MessagesChannel`).perform('speak', { text: newMessages[0].text,_id: this.state.userId,createdAt: new Date(), })
// this.state.cableCon.channel('MessagesChannel').perform('appear')
}
updateLastMsg = async (e: any) => {
// var arr = [...this.state.messages]
var arr = [...this.state.messages, {
"_id": "426", "createdAt": "2022-09-12T08:36:14.947Z", "text": "swapnil",
"user": { "_id": "426", "name": "426" }
}]
}
_onSend = (newMessages = []) => {
console.log(newMessages,"new messagesssses")
this.setState({messages: GiftedChat.append(this.state.messages, newMessages)})
};
_onRecieved = (e:any)=>{
console.log(e,"Recieved")
if (e?.message?.user_id != this.state.userId) {
let messsage = {_id: Math.random(),
createdAt: new Date(), text: e?.message?.message, user:
{_id: 1, fullname: e?.message?.name,avatar:this.state.profilePhoto}}
let arr = [messsage,...this.state.messages,];
this.setState({messages: arr});
}
}
_handleLike = (e:number) => {
console.log(e)
let array = this.state.likeArray
if(array.includes(e)){
array.splice(array.indexOf(e),1)
this.setState({likeArray:array})
}else {
array.push(e)
this.setState({likeArray:array})
}
console.log(this.state.likeArray)
}
}
// scarp
// import RNFS from 'react-native-fs'
// import RNFetchBlob from "rn-fetch-blob";
// import SoundPlayer from "react-native-sound-player";
// import { Alert, BackHandler } from 'react-native'
// import { spotifyLogout } from '../../../../framework/src/Helpers'
// import { AppState } from 'react-native'
// keyBoardVisible: boolean;
// keyBoardHeight: any;
// isEliteUser: boolean;
// isTherapist: boolean;
// didMountCalled: boolean;
// token: any;
// channel: any;
// chatData: any;
// galleryModalVisible: boolean;
// isModalVisible: boolean;
// modalType: string;
// search: string;
// chatEnable: boolean;
// chatLoading: boolean;
// textMessage: string;
// inputComment: string
// profileData: any;
// roomName: string;
// searchProductList: any;
// selectedProductList: any;
// searchBlogList: any;
// selectedBlogList: any;
// searchVideoList: any;
// selectedVideoList: any;
// menuEnabled: boolean;
// identity: any;
// receiverIdentity: any;
// receiverImage: any;
// sending: boolean;
// imageObj: any;
// receiverId: number;
// nextPageInfo: string;
// isProductsLoading: boolean;
// isInitialLoading: boolean;
// headerName: string
// conversationsReady: boolean;
// conversations: any;
// selectedConversationSid: any;
// selectedConversation: any;
// isNotification: boolean;
// lastMessages: any;
// inputMessgae: any;
// userId: string;
// conversationFromSid: any;
// conversation_sid: any;
// isLoading: boolean;
// showCreatepost: boolean;
// sliderValue: number;
// progress: number;
// isPlayingContext: boolean;
// hardwareBackAlert: boolean;
// contextData: boolean;
// isPlayFinished: boolean;
// isHomeFocusState: boolean,
// block: boolean,
// block_confirmed: boolean,
// report: boolean,
// report_reason: boolean,
// delete: boolean,
// getReportList: any;
// public_mssg_request: boolean;
// following_mssg_request: boolean;
// verified_mssg_request: boolean;
// pushNotification : boolean;
// showreceipt : boolean;
// platform: string;
// refreshChatDetailsApiId: any;
// postSendMessageApiId: any;
// postSendImageMessageApiId: any;
// getTutorialVideoApiId: any;
// getBlogArticalsApiId: any;
// getBlogListApiId: any;
// corinaBlogId: any;
// chatClient: any;
// chatChannel: any;
// conversationClientNew: any;
// conversationChannelNew: any;
// selectedProductListId: any = [];
// chatRefreshInterval: any;
// selectedProductListMsg: any = [];
// selectedBlogListId: any = [];
// selectedBlogListMsg: any = [];
// selectedVideoListId: any = [];
// selectedVideoListMsg: any = [];
// searchProductApiId: any;
// deleteChatApiID: any;
// conversationsClient: any;
// fetchTokenApi: any;
// BackHandler: any;
// backHandler: any;
// timeOfSeek: any;
// _onFinishedPlayingSubscription: any;
// focusListener: any;
// getReportListApiCallId: any;
// updateChatApiID:any;
// keyBoardVisible: false,
// keyBoardHeight: Platform.OS === "ios" ? 0 : 100,
// isEliteUser: false,
// isTherapist: false,
// didMountCalled: false,
// profileData: null,
// messages: [
// // {
// // _id: 1,
// // text: 'Hello developer',
// // iscustom: false,
// // location: {
// // latitude: 37.78825,
// // longitude: -122.4324,
// // },
// // createdAt: new Date(),
// // user: {
// // _id: 2,
// // name: 'React Native',
// // avatar: 'https://placeimg.com/140/140/any',
// // },
// // },
// // {
// // _id: 1,
// // text: 'Hello swapnil',
// // iscustom: true,
// // location: {
// // latitude: 37.78825,
// // longitude: -122.4324,
// // },
// // createdAt: new Date(),
// // user: {
// // _id: 1,
// // name: 'React Native',
// // avatar: 'https://placeimg.com/140/140/any',
// // },
// // },
// ],
// token: null,
// channel: null,
// chatEnable: false,
// chatLoading: false,
// chatData: null,
// galleryModalVisible: false,
// isModalVisible: false,
// modalType: "",
// roomName: "",
// search: "",
// searchProductList: [],
// selectedProductList: [],
// searchBlogList: null,
// selectedBlogList: [],
// searchVideoList: null,
// selectedVideoList: [],
// textMessage: "",
// inputComment: "",
// menuEnabled: false,
// identity: "",
// receiverIdentity: "",
// receiverImage: null,
// sending: false,
// imageObj: null,
// receiverId: 0,
// nextPageInfo: "",
// isProductsLoading: false,
// isInitialLoading: true,
// headerName: '',
// conversationsReady: false,
// conversations: [],
// selectedConversationSid: null,
// selectedConversation: null,
// isNotification: true,
// lastMessages: [],
// inputMessgae: [],
// userId: '',
// conversationFromSid: [],
// isLoading: true,
// showCreatepost: false,
// sliderValue: 0,
// progress: 0,
// isPlayingContext: false,
// hardwareBackAlert: false,
// contextData: true,
// isPlayFinished: false,
// isHomeFocusState: true,
// block: false,
// block_confirmed: false,
// report: false,
// report_reason: false,
// delete: false,
// getReportList: [],
// public_mssg_request: false,
// following_mssg_request : false,
// verified_mssg_request : false,
// pushNotification : false,
// showreceipt : false,
// platform: ''Editor is loading...