Reactions: switch from SDK to Commentron
## Issue - Closes 6481 "Use Commentron for react.List, react.React calls". - 5459 "Interact directly with commenting servers".
This commit is contained in:
parent
df8216e9d8
commit
cb0222981c
4 changed files with 125 additions and 23 deletions
51
flow-typed/Comment.js
vendored
51
flow-typed/Comment.js
vendored
|
@ -71,12 +71,33 @@ declare type CommentReactParams = {
|
||||||
remove?: boolean,
|
remove?: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type CommentReactListParams = {
|
declare type ReactionReactParams = {
|
||||||
comment_ids?: string,
|
comment_ids: string,
|
||||||
|
signature?: string,
|
||||||
|
signing_ts?: string,
|
||||||
|
remove?: boolean,
|
||||||
|
clear_types?: string,
|
||||||
|
type: string,
|
||||||
|
channel_id: string,
|
||||||
|
channel_name: string,
|
||||||
|
};
|
||||||
|
|
||||||
|
declare type ReactionReactResponse = {
|
||||||
|
Reactions: { [string]: { [string]: number} },
|
||||||
|
};
|
||||||
|
|
||||||
|
declare type ReactionListParams = {
|
||||||
|
comment_ids: string, // CSV of IDs
|
||||||
channel_id?: string,
|
channel_id?: string,
|
||||||
channel_name?: string,
|
channel_name?: string,
|
||||||
wallet_id?: string,
|
signature?: string,
|
||||||
react_types?: string,
|
signing_ts?: string,
|
||||||
|
types?: string,
|
||||||
|
};
|
||||||
|
|
||||||
|
declare type ReactionListResponse = {
|
||||||
|
my_reactions: Array<MyReactions>,
|
||||||
|
others_reactions: Array<OthersReactions>,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type CommentListParams = {
|
declare type CommentListParams = {
|
||||||
|
@ -113,6 +134,28 @@ declare type CommentByIdResponse = {
|
||||||
ancestors: Array<Comment>,
|
ancestors: Array<Comment>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare type CommentPinParams = {
|
||||||
|
comment_id: string,
|
||||||
|
channel_id: string,
|
||||||
|
channel_name: string,
|
||||||
|
remove?: boolean,
|
||||||
|
signature: string,
|
||||||
|
signing_ts: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
declare type CommentPinResponse = {
|
||||||
|
items: Comment, // "items" is an inherited typo to match SDK. Will be "item" in a new version.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare type CommentEditParams = {
|
||||||
|
comment: string,
|
||||||
|
comment_id: string,
|
||||||
|
signature: string,
|
||||||
|
signing_ts: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
declare type CommentEditResponse = Comment
|
||||||
|
|
||||||
declare type CommentAbandonParams = {
|
declare type CommentAbandonParams = {
|
||||||
comment_id: string,
|
comment_id: string,
|
||||||
creator_channel_id?: string,
|
creator_channel_id?: string,
|
||||||
|
|
|
@ -1458,6 +1458,8 @@
|
||||||
"Your channel is still being setup, try again in a few moments.": "Your channel is still being setup, try again in a few moments.",
|
"Your channel is still being setup, try again in a few moments.": "Your channel is still being setup, try again in a few moments.",
|
||||||
"Unable to delete this comment, please try again later.": "Unable to delete this comment, please try again later.",
|
"Unable to delete this comment, please try again later.": "Unable to delete this comment, please try again later.",
|
||||||
"Unable to edit this comment, please try again later.": "Unable to edit this comment, please try again later.",
|
"Unable to edit this comment, please try again later.": "Unable to edit this comment, please try again later.",
|
||||||
|
"No active channel selected.": "No active channel selected.",
|
||||||
|
"Unable to verify your channel. Please try again.": "Unable to verify your channel. Please try again.",
|
||||||
"Channel cannot be anonymous, please select a channel and try again.": "Channel cannot be anonymous, please select a channel and try again.",
|
"Channel cannot be anonymous, please select a channel and try again.": "Channel cannot be anonymous, please select a channel and try again.",
|
||||||
"Change to list layout": "Change to list layout",
|
"Change to list layout": "Change to list layout",
|
||||||
"Change to tile layout": "Change to tile layout",
|
"Change to tile layout": "Change to tile layout",
|
||||||
|
|
|
@ -18,6 +18,10 @@ const Comments = {
|
||||||
comment_abandon: (params: CommentAbandonParams) => fetchCommentsApi('comment.Abandon', params),
|
comment_abandon: (params: CommentAbandonParams) => fetchCommentsApi('comment.Abandon', params),
|
||||||
comment_create: (params: CommentCreateParams) => fetchCommentsApi('comment.Create', params),
|
comment_create: (params: CommentCreateParams) => fetchCommentsApi('comment.Create', params),
|
||||||
comment_by_id: (params: CommentByIdParams) => fetchCommentsApi('comment.ByID', params),
|
comment_by_id: (params: CommentByIdParams) => fetchCommentsApi('comment.ByID', params),
|
||||||
|
comment_pin: (params: CommentPinParams) => fetchCommentsApi('comment.Pin', params),
|
||||||
|
comment_edit: (params: CommentEditParams) => fetchCommentsApi('comment.Edit', params),
|
||||||
|
reaction_list: (params: ReactionListParams) => fetchCommentsApi('reaction.List', params),
|
||||||
|
reaction_react: (params: ReactionReactParams) => fetchCommentsApi('reaction.React', params),
|
||||||
setting_list: (params: SettingsParams) => fetchCommentsApi('setting.List', params),
|
setting_list: (params: SettingsParams) => fetchCommentsApi('setting.List', params),
|
||||||
setting_block_word: (params: BlockWordParams) => fetchCommentsApi('setting.BlockWord', params),
|
setting_block_word: (params: BlockWordParams) => fetchCommentsApi('setting.BlockWord', params),
|
||||||
setting_unblock_word: (params: BlockWordParams) => fetchCommentsApi('setting.UnBlockWord', params),
|
setting_unblock_word: (params: BlockWordParams) => fetchCommentsApi('setting.UnBlockWord', params),
|
||||||
|
|
|
@ -206,7 +206,7 @@ export function doSuperChatList(uri: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doCommentReactList(commentIds: Array<string>) {
|
export function doCommentReactList(commentIds: Array<string>) {
|
||||||
return (dispatch: Dispatch, getState: GetState) => {
|
return async (dispatch: Dispatch, getState: GetState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const activeChannelClaim = selectActiveChannelClaim(state);
|
const activeChannelClaim = selectActiveChannelClaim(state);
|
||||||
|
|
||||||
|
@ -214,17 +214,24 @@ export function doCommentReactList(commentIds: Array<string>) {
|
||||||
type: ACTIONS.COMMENT_REACTION_LIST_STARTED,
|
type: ACTIONS.COMMENT_REACTION_LIST_STARTED,
|
||||||
});
|
});
|
||||||
|
|
||||||
const params: CommentReactListParams = {
|
const params: ReactionListParams = {
|
||||||
comment_ids: commentIds.join(','),
|
comment_ids: commentIds.join(','),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (activeChannelClaim) {
|
if (activeChannelClaim) {
|
||||||
params['channel_name'] = activeChannelClaim.name;
|
const signatureData = await channelSignName(activeChannelClaim.claim_id, activeChannelClaim.name);
|
||||||
params['channel_id'] = activeChannelClaim.claim_id;
|
if (!signatureData) {
|
||||||
|
return dispatch(doToast({ isError: true, message: __('Unable to verify your channel. Please try again.') }));
|
||||||
}
|
}
|
||||||
|
|
||||||
return Lbry.comment_react_list(params)
|
params.channel_name = activeChannelClaim.name;
|
||||||
.then((result: CommentReactListResponse) => {
|
params.channel_id = activeChannelClaim.claim_id;
|
||||||
|
params.signature = signatureData.signature;
|
||||||
|
params.signing_ts = signatureData.signing_ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Comments.reaction_list(params)
|
||||||
|
.then((result: ReactionListResponse) => {
|
||||||
const { my_reactions: myReactions, others_reactions: othersReactions } = result;
|
const { my_reactions: myReactions, others_reactions: othersReactions } = result;
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_REACTION_LIST_COMPLETED,
|
type: ACTIONS.COMMENT_REACTION_LIST_COMPLETED,
|
||||||
|
@ -246,7 +253,7 @@ export function doCommentReactList(commentIds: Array<string>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doCommentReact(commentId: string, type: string) {
|
export function doCommentReact(commentId: string, type: string) {
|
||||||
return (dispatch: Dispatch, getState: GetState) => {
|
return async (dispatch: Dispatch, getState: GetState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const activeChannelClaim = selectActiveChannelClaim(state);
|
const activeChannelClaim = selectActiveChannelClaim(state);
|
||||||
const pendingReacts = selectPendingCommentReacts(state);
|
const pendingReacts = selectPendingCommentReacts(state);
|
||||||
|
@ -274,11 +281,19 @@ export function doCommentReact(commentId: string, type: string) {
|
||||||
const reactKey = `${commentId}:${activeChannelClaim.claim_id}`;
|
const reactKey = `${commentId}:${activeChannelClaim.claim_id}`;
|
||||||
const myReacts = makeSelectMyReactionsForComment(reactKey)(state);
|
const myReacts = makeSelectMyReactionsForComment(reactKey)(state);
|
||||||
const othersReacts = makeSelectOthersReactionsForComment(reactKey)(state);
|
const othersReacts = makeSelectOthersReactionsForComment(reactKey)(state);
|
||||||
const params: CommentReactParams = {
|
|
||||||
|
const signatureData = await channelSignName(activeChannelClaim.claim_id, activeChannelClaim.name);
|
||||||
|
if (!signatureData) {
|
||||||
|
return dispatch(doToast({ isError: true, message: __('Unable to verify your channel. Please try again.') }));
|
||||||
|
}
|
||||||
|
|
||||||
|
const params: ReactionReactParams = {
|
||||||
comment_ids: commentId,
|
comment_ids: commentId,
|
||||||
channel_name: activeChannelClaim.name,
|
channel_name: activeChannelClaim.name,
|
||||||
channel_id: activeChannelClaim.claim_id,
|
channel_id: activeChannelClaim.claim_id,
|
||||||
react_type: type,
|
signature: signatureData.signature,
|
||||||
|
signing_ts: signatureData.signing_ts,
|
||||||
|
type: type,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (myReacts.includes(type)) {
|
if (myReacts.includes(type)) {
|
||||||
|
@ -293,6 +308,7 @@ export function doCommentReact(commentId: string, type: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_REACT_STARTED,
|
type: ACTIONS.COMMENT_REACT_STARTED,
|
||||||
data: commentId + type,
|
data: commentId + type,
|
||||||
|
@ -312,8 +328,8 @@ export function doCommentReact(commentId: string, type: string) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Lbry.comment_react(params)
|
Comments.reaction_react(params)
|
||||||
.then((result: CommentReactListResponse) => {
|
.then((result: ReactionReactResponse) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_REACT_COMPLETED,
|
type: ACTIONS.COMMENT_REACT_COMPLETED,
|
||||||
data: commentId + type,
|
data: commentId + type,
|
||||||
|
@ -462,7 +478,7 @@ export function doCommentCreate(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doCommentPin(commentId: string, claimId: string, remove: boolean) {
|
export function doCommentPin(commentId: string, claimId: string, remove: boolean) {
|
||||||
return (dispatch: Dispatch, getState: GetState) => {
|
return async (dispatch: Dispatch, getState: GetState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const activeChannel = selectActiveChannelClaim(state);
|
const activeChannel = selectActiveChannelClaim(state);
|
||||||
|
|
||||||
|
@ -471,16 +487,25 @@ export function doCommentPin(commentId: string, claimId: string, remove: boolean
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const signedCommentId = await channelSignData(activeChannel.claim_id, commentId);
|
||||||
|
if (!signedCommentId) {
|
||||||
|
return dispatch(doToast({ isError: true, message: __('Unable to verify your channel. Please try again.') }));
|
||||||
|
}
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_PIN_STARTED,
|
type: ACTIONS.COMMENT_PIN_STARTED,
|
||||||
});
|
});
|
||||||
|
|
||||||
return Lbry.comment_pin({
|
const params: CommentPinParams = {
|
||||||
comment_id: commentId,
|
comment_id: commentId,
|
||||||
channel_name: activeChannel.name,
|
|
||||||
channel_id: activeChannel.claim_id,
|
channel_id: activeChannel.claim_id,
|
||||||
...(remove ? { remove: true } : {}),
|
channel_name: activeChannel.name,
|
||||||
})
|
remove: remove,
|
||||||
|
signature: signedCommentId.signature,
|
||||||
|
signing_ts: signedCommentId.signing_ts,
|
||||||
|
};
|
||||||
|
|
||||||
|
return Comments.comment_pin(params)
|
||||||
.then((result: CommentPinResponse) => {
|
.then((result: CommentPinResponse) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_PIN_COMPLETED,
|
type: ACTIONS.COMMENT_PIN_COMPLETED,
|
||||||
|
@ -577,15 +602,30 @@ export function doCommentUpdate(comment_id: string, comment: string) {
|
||||||
if (comment === '') {
|
if (comment === '') {
|
||||||
return doCommentAbandon(comment_id);
|
return doCommentAbandon(comment_id);
|
||||||
} else {
|
} else {
|
||||||
return (dispatch: Dispatch) => {
|
return async (dispatch: Dispatch, getState: GetState) => {
|
||||||
|
const state = getState();
|
||||||
|
|
||||||
|
const activeChannelClaim = selectActiveChannelClaim(state);
|
||||||
|
if (!activeChannelClaim) {
|
||||||
|
return dispatch(doToast({ isError: true, message: __('No active channel selected.') }));
|
||||||
|
}
|
||||||
|
|
||||||
|
const signedComment = await channelSignData(activeChannelClaim.claim_id, comment);
|
||||||
|
if (!signedComment) {
|
||||||
|
return dispatch(doToast({ isError: true, message: __('Unable to verify your channel. Please try again.') }));
|
||||||
|
}
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_UPDATE_STARTED,
|
type: ACTIONS.COMMENT_UPDATE_STARTED,
|
||||||
});
|
});
|
||||||
return Lbry.comment_update({
|
|
||||||
|
return Comments.comment_edit({
|
||||||
comment_id: comment_id,
|
comment_id: comment_id,
|
||||||
comment: comment,
|
comment: comment,
|
||||||
|
signature: signedComment.signature,
|
||||||
|
signing_ts: signedComment.signing_ts,
|
||||||
})
|
})
|
||||||
.then((result: CommentUpdateResponse) => {
|
.then((result: CommentEditResponse) => {
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_UPDATE_COMPLETED,
|
type: ACTIONS.COMMENT_UPDATE_COMPLETED,
|
||||||
|
@ -638,6 +678,19 @@ async function channelSignName(channelClaimId: string, channelName: string) {
|
||||||
return signedObject;
|
return signedObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function channelSignData(channelClaimId: string, data: string) {
|
||||||
|
let signedObject;
|
||||||
|
|
||||||
|
try {
|
||||||
|
signedObject = await Lbry.channel_sign({
|
||||||
|
channel_id: channelClaimId,
|
||||||
|
hexdata: toHex(data),
|
||||||
|
});
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
return signedObject;
|
||||||
|
}
|
||||||
|
|
||||||
// Hides a users comments from all creator's claims and prevent them from commenting in the future
|
// Hides a users comments from all creator's claims and prevent them from commenting in the future
|
||||||
function doCommentModToggleBlock(
|
function doCommentModToggleBlock(
|
||||||
unblock: boolean,
|
unblock: boolean,
|
||||||
|
|
Loading…
Reference in a new issue