Пример #1
0
	configureOlark: function( wpcomOlarkConfig = {}, dispatch ) {
		var userData = user.get(),
			updateDetailsEvents = [
				'api.chat.onReady',
				'api.chat.onOperatorsAway',
				'api.chat.onOperatorsAvailable',
				'api.chat.onBeginConversation',
				'api.chat.onMessageToVisitor',
				'api.chat.onMessageToOperator',
				'api.chat.onCommandFromOperator',
			],
			olarkExpandedEvents = [
				'api.box.onShow',
				'api.box.onExpand',
				'api.box.onHide',
				'api.box.onShrink',
				'api.chat.onMessageToVisitor',
			],
			updateFormattingEvents = [
				'api.chat.onReady',
				'api.chat.onBeginConversation',
				'api.chat.onMessageToVisitor',
				'api.chat.onMessageToOperator',
				'api.chat.onCommandFromOperator',
				'api.chat.onOfflineMessageToOperator',
			];

		olarkEvents.initialize();

		olarkEvents.once( 'api.chat.onReady', olarkActions.setReady );
		olarkEvents.once( 'api.chat.onReady', () => dispatch( olarkReady() ) );
		olarkEvents.on( 'api.chat.onOperatorsAway', olarkActions.setOperatorsAway );
		olarkEvents.on( 'api.chat.onOperatorsAway', () => dispatch( operatorsAway() ) );
		olarkEvents.on( 'api.chat.onOperatorsAvailable', olarkActions.setOperatorsAvailable );
		olarkEvents.on( 'api.chat.onOperatorsAvailable', () => dispatch( operatorsAvailable() ) );

		olarkExpandedEvents.forEach( this.hookExpansionEventToStoreSync.bind( this ) );

		updateDetailsEvents.forEach( eventName =>
			olarkEvents.on( eventName, olarkActions.updateDetails )
		);

		updateFormattingEvents.forEach( eventName =>
			olarkEvents.on( eventName, () => {
				// Using setTimeout here so that we can call updateOlarkFormatting on the next tick, after the event has fired and all event handlers are processed.
				setTimeout(
					() => this.updateOlarkFormatting( userData.display_name, userData.avatar_URL ),
					0
				);
			} )
		);

		debug( 'Olark code loaded, beginning configuration' );

		olarkEvents.on( 'api.chat.onCommandFromOperator', event => {
			if ( event.command.name === 'end' ) {
				olarkActions.sendNotificationToVisitor(
					i18n.translate( "Your live chat has ended. We'll send a transcript to %(email)s.", {
						args: { email: userData.email },
					} )
				);
			}
		} );

		this.setOlarkOptions( userData, wpcomOlarkConfig );

		dispatch( setChatAvailability( wpcomOlarkConfig.availability ) );
	},
Пример #2
0
	configureOlark: function( wpcomOlarkConfig = {} ) {
		var userData = user.get(),
			siteUrl = this.getSiteUrl(),
			updateDetailsEvents = [
				'api.chat.onReady',
				'api.chat.onOperatorsAway',
				'api.chat.onOperatorsAvailable',
				'api.chat.onBeginConversation',
				'api.chat.onMessageToVisitor',
				'api.chat.onMessageToOperator',
				'api.chat.onCommandFromOperator'
			],
			olarkExpandedEvents = [
				'api.box.onShow',
				'api.box.onExpand',
				'api.box.onHide',
				'api.box.onShrink',
				'api.chat.onMessageToVisitor'
			],
			updateFormattingEvents = [
				'api.chat.onReady',
				'api.chat.onBeginConversation',
				'api.chat.onMessageToVisitor',
				'api.chat.onMessageToOperator',
				'api.chat.onCommandFromOperator',
				'api.chat.onOfflineMessageToOperator'
			];

		olarkEvents.initialize();

		olarkEvents.once( 'api.chat.onReady', olarkActions.setReady );
		olarkEvents.on( 'api.chat.onOperatorsAway', olarkActions.setOperatorsAway );
		olarkEvents.on( 'api.chat.onOperatorsAvailable', olarkActions.setOperatorsAvailable );

		olarkExpandedEvents.forEach( this.hookExpansionEventToStoreSync.bind( this ) );

		updateDetailsEvents.forEach( eventName => olarkEvents.on( eventName, olarkActions.updateDetails ) );

		updateFormattingEvents.forEach( eventName => olarkEvents.on( eventName, () => {
			// Using setTimeout here so that we can call updateOlarkFormatting on the next tick, after the event has fired and all event handlers are processed.
			setTimeout( () => this.updateOlarkFormatting( userData.display_name, userData.avatar_URL ), 0 );
		} ) );

		debug( 'Olark code loaded, beginning configuration' );

		olarkEvents.on( 'api.chat.onCommandFromOperator', ( event ) => {
			if ( event.command.name === 'end' ) {
				olarkActions.sendNotificationToVisitor( i18n.translate(
					"Your live chat has ended. We'll send a transcript to %(email)s.",
					{ args: { email: userData.email } }
				) );
			}
		} );

		this.setOlarkOptions( userData, wpcomOlarkConfig );
		this.updateLivechatActiveCookie();
		this.bindBeginConversationEvent( userData, siteUrl );

		if ( config.isEnabled( 'help' ) ) {
			// Only show the chatbox when a user is having a conversation. Chat will now be initiated only from the help/contact page
			olarkApi( 'api.visitor.getDetails', ( details ) => details.isConversing ? this.showChatBox() : olarkActions.hideBox() );
		} else {
			this.showChatBox();
		}
	},