Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
coopwire-hypothesis
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
孙灵跃 Leon Sun
coopwire-hypothesis
Commits
e3945627
Unverified
Commit
e3945627
authored
Aug 27, 2019
by
Kyle Keating
Committed by
GitHub
Aug 27, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1327 from hypothesis/namespace-realtimeupdates-module
Namespace realtimeupdates module
parents
8017d7c1
7f3b8672
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
45 deletions
+52
-45
real-time-updates.js
src/sidebar/store/modules/real-time-updates.js
+52
-45
No files found.
src/sidebar/store/modules/real-time-updates.js
View file @
e3945627
...
...
@@ -26,42 +26,11 @@ function init() {
}
const
update
=
{
RECEIVE_REAL_TIME_UPDATES
(
state
,
{
updatedAnnotations
=
[],
deletedAnnotations
=
[]
}
)
{
const
pendingUpdates
=
{
...
state
.
pendingUpdates
};
const
pendingDeletions
=
{
...
state
.
pendingDeletions
};
updatedAnnotations
.
forEach
(
ann
=>
{
// In the sidebar, only save pending updates for annotations in the
// focused group, since we only display annotations from the focused
// group and reload all annotations and discard pending updates
// when switching groups.
if
(
ann
.
group
===
groupSelectors
.
focusedGroupId
(
state
)
||
!
viewerSelectors
.
isSidebar
(
state
)
)
{
pendingUpdates
[
ann
.
id
]
=
ann
;
}
});
deletedAnnotations
.
forEach
(
ann
=>
{
// Discard any pending but not-yet-applied updates for this annotation
delete
pendingUpdates
[
ann
.
id
];
// If we already have this annotation loaded, then record a pending
// deletion. We do not check the group of the annotation here because a)
// that information is not included with deletion notifications and b)
// even if the annotation is from the current group, it might be for a
// new annotation (saved in pendingUpdates and removed above), that has
// not yet been loaded.
if
(
annotationSelectors
.
annotationExists
(
state
,
ann
.
id
))
{
pendingDeletions
[
ann
.
id
]
=
true
;
}
});
return
{
pendingUpdates
,
pendingDeletions
};
RECEIVE_REAL_TIME_UPDATES
(
state
,
action
)
{
return
{
pendingUpdates
:
{
...
action
.
pendingUpdates
},
pendingDeletions
:
{
...
action
.
pendingDeletions
},
};
},
CLEAR_PENDING_UPDATES
()
{
...
...
@@ -114,11 +83,45 @@ const actions = actionTypes(update);
* @param {Annotation[]} args.updatedAnnotations
* @param {Annotation[]} args.deletedAnnotations
*/
function
receiveRealTimeUpdates
({
updatedAnnotations
,
deletedAnnotations
})
{
return
{
type
:
actions
.
RECEIVE_REAL_TIME_UPDATES
,
updatedAnnotations
,
deletedAnnotations
,
function
receiveRealTimeUpdates
({
updatedAnnotations
=
[],
deletedAnnotations
=
[],
})
{
return
(
dispatch
,
getState
)
=>
{
const
pendingUpdates
=
{
...
getState
().
realTimeUpdates
.
pendingUpdates
};
const
pendingDeletions
=
{
...
getState
().
realTimeUpdates
.
pendingDeletions
};
updatedAnnotations
.
forEach
(
ann
=>
{
// In the sidebar, only save pending updates for annotations in the
// focused group, since we only display annotations from the focused
// group and reload all annotations and discard pending updates
// when switching groups.
if
(
ann
.
group
===
groupSelectors
.
focusedGroupId
(
getState
().
base
)
||
!
viewerSelectors
.
isSidebar
(
getState
().
base
)
)
{
pendingUpdates
[
ann
.
id
]
=
ann
;
}
});
deletedAnnotations
.
forEach
(
ann
=>
{
// Discard any pending but not-yet-applied updates for this annotation
delete
pendingUpdates
[
ann
.
id
];
// If we already have this annotation loaded, then record a pending
// deletion. We do not check the group of the annotation here because a)
// that information is not included with deletion notifications and b)
// even if the annotation is from the current group, it might be for a
// new annotation (saved in pendingUpdates and removed above), that has
// not yet been loaded.
if
(
annotationSelectors
.
annotationExists
(
getState
().
base
,
ann
.
id
))
{
pendingDeletions
[
ann
.
id
]
=
true
;
}
});
dispatch
({
type
:
actions
.
RECEIVE_REAL_TIME_UPDATES
,
pendingUpdates
,
pendingDeletions
,
});
};
}
...
...
@@ -138,7 +141,7 @@ function clearPendingUpdates() {
* @return {{[id: string]: Annotation}}
*/
function
pendingUpdates
(
state
)
{
return
state
.
pendingUpdates
;
return
state
.
realTimeUpdates
.
pendingUpdates
;
}
/**
...
...
@@ -148,14 +151,17 @@ function pendingUpdates(state) {
* @return {{[id: string]: boolean}}
*/
function
pendingDeletions
(
state
)
{
return
state
.
pendingDeletions
;
return
state
.
realTimeUpdates
.
pendingDeletions
;
}
/**
* Return a total count of pending updates and deletions.
*/
const
pendingUpdateCount
=
createSelector
(
state
=>
[
state
.
pendingUpdates
,
state
.
pendingDeletions
],
state
=>
[
state
.
realTimeUpdates
.
pendingUpdates
,
state
.
realTimeUpdates
.
pendingDeletions
,
],
([
pendingUpdates
,
pendingDeletions
])
=>
Object
.
keys
(
pendingUpdates
).
length
+
Object
.
keys
(
pendingDeletions
).
length
);
...
...
@@ -165,11 +171,12 @@ const pendingUpdateCount = createSelector(
* has not yet been applied.
*/
function
hasPendingDeletion
(
state
,
id
)
{
return
state
.
pendingDeletions
.
hasOwnProperty
(
id
);
return
state
.
realTimeUpdates
.
pendingDeletions
.
hasOwnProperty
(
id
);
}
module
.
exports
=
{
init
,
namespace
:
'realTimeUpdates'
,
update
,
actions
:
{
receiveRealTimeUpdates
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment