Jhernandez has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/353044 )

Change subject: Clear interaction after an event for it is logged in EL
......................................................................

Clear interaction after an event for it is logged in EL

Given that interactions end up with an event logged, there shouldn't be
a reason to keep an interaction active after it's corresponding final
event has been logged. See Tbayer's state graph.

This patch removes the current interaction if an event with that token
is logged, effectively finalizing it and making it impossible for the
token to be reused from the state tree again.

Bug: T161769
Bug: T163198
Change-Id: I99fd5716dc17da32929b6e8ae4aa164f9d84c387
---
M src/actions.js
M src/changeListeners/eventLogging.js
M src/reducers/eventLogging.js
M tests/node-qunit/reducers/eventLogging.test.js
4 files changed, 27 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Popups 
refs/changes/44/353044/1

diff --git a/src/actions.js b/src/actions.js
index aac7556..0cb8a28 100644
--- a/src/actions.js
+++ b/src/actions.js
@@ -299,11 +299,13 @@
  * Represents the queued event being logged `changeListeners/eventLogging.js`
  * change listener.
  *
+ * @param {Object} event
  * @return {Object}
  */
-actions.eventLogged = function () {
+actions.eventLogged = function ( event ) {
        return {
-               type: types.EVENT_LOGGED
+               type: types.EVENT_LOGGED,
+               event: event
        };
 };
 
diff --git a/src/changeListeners/eventLogging.js 
b/src/changeListeners/eventLogging.js
index 6b2d5b2..676248a 100644
--- a/src/changeListeners/eventLogging.js
+++ b/src/changeListeners/eventLogging.js
@@ -96,6 +96,8 @@
                        schema.log( $.extend( true, {}, eventLogging.baseData, 
event ) );
                }
 
-               boundActions.eventLogged();
+               boundActions.eventLogged(
+                       $.extend( true, {}, eventLogging.baseData, event )
+               );
        };
 };
diff --git a/src/reducers/eventLogging.js b/src/reducers/eventLogging.js
index a302ee5..fdc2594 100644
--- a/src/reducers/eventLogging.js
+++ b/src/reducers/eventLogging.js
@@ -105,7 +105,7 @@
  *  current state
  */
 module.exports = function ( state, action ) {
-       var nextCount,
+       var nextCount, newState,
                actionTypesWithTokens = [
                        actionTypes.FETCH_COMPLETE,
                        actionTypes.ABANDON_END,
@@ -141,10 +141,24 @@
                        } );
 
                case actionTypes.EVENT_LOGGED:
-                       return nextState( state, {
+                       newState = nextState( state, {
                                event: undefined
                        } );
 
+                       // If an event was logged with an interaction token, 
and it is still
+                       // the current interaction, finish the interaction 
since logging is
+                       // the exit point of the state machine and an 
interaction should never
+                       // be logged twice.
+                       if (
+                               action.event.linkInteractionToken &&
+                               state.interaction &&
+                               ( action.event.linkInteractionToken === 
state.interaction.token )
+                       ) {
+                               newState.interaction = null;
+                       }
+
+                       return newState;
+
                case actionTypes.FETCH_COMPLETE:
                        return nextState( state, {
                                interaction: nextState( state.interaction, {
diff --git a/tests/node-qunit/reducers/eventLogging.test.js 
b/tests/node-qunit/reducers/eventLogging.test.js
index 8cff446..cf04bc0 100644
--- a/tests/node-qunit/reducers/eventLogging.test.js
+++ b/tests/node-qunit/reducers/eventLogging.test.js
@@ -96,7 +96,8 @@
        };
 
        action = {
-               type: 'EVENT_LOGGED'
+               type: 'EVENT_LOGGED',
+               event: {}
        };
 
        assert.deepEqual(
@@ -621,7 +622,8 @@
        } );
 
        state = eventLogging( state, {
-               type: 'EVENT_LOGGED'
+               type: 'EVENT_LOGGED',
+               event: {}
        } );
 
        state = eventLogging( state, {

-- 
To view, visit https://gerrit.wikimedia.org/r/353044
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I99fd5716dc17da32929b6e8ae4aa164f9d84c387
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Popups
Gerrit-Branch: master
Gerrit-Owner: Jhernandez <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to