PromucFlow_constructor/app/client/src/actions/commentActions.ts

261 lines
6.3 KiB
TypeScript
Raw Normal View History

Initialise comments (#3328) * Initial scaffolding for comments CRUD APIs * add actions * add assets * state management for existing comments and creating new * add ui components * add overlay comments wrapper to baseWidget * add toggle comment mode button at editor header * trigger tests * Disallow commenting as someone else * Add applicationId for comments * lint * Add overlay blacklist to prevent component interaction while adding comments * Comment thread style updates * Placeholder comment context menu * Controlled comment thread visibility for making new comments visible by default * Update comment type description * Reset input on save * Resolve comment thread button ui * fix close on esc key, dont create new comment on outside click * Submit on enter * add emoji picker * Attempt at adding a websocket server in Java * CRUD APIs for comment threads * Add API for getting all threads in application * Move types to a separate file * Initial commit for real time server (RTS) * Add script to start RTS * Fix position property * Use create comment thread API * Use add comment to thread API * Add custom cursor * Dispatch logout init on 401 errors * Allow CORS for real time connection * Add more logs to RTS * Fix construction of MongoClient * WIP: Real time comments * Enable comments * Minor updates * Read backend API base URL from environment * Escape to reset comments mode * Set popover position as auto and boundary as scroll parent * Disable warning * Added permissions for comment threads * Add resolved API for comment threads * Migration to set commenting permission on existing apps * Fix updates bringing the RTS down * Show view latest button, scroll to bottom on creating a new comment * Cleanup comment reducer * Move to typescript for RTS * Add missing server.ts and tsconfig files * Resolve / unresolve comment * Scaffold app comments * Minor fixes: comment on top of all widgets, add toggle button at viewer header * Reconnect socket on creating a new app, set connected status in store * Retry socket connection flow * Integration tests for comments with api mocks using msw * Fix circular depependency * rm file * Minor cleanup and comments * Minor refactors: move isScrolledToBottom to common hooks, decouple prevent interactions overlay from comments wrapper * Use policies when pushing updates in RTS * ENV var to set if comments are enabled * Fix: check if editor/viewer is initialised before waiting for init action * Add tests for comments reducer * Revert "ENV var to set if comments are enabled" This reverts commit 988efeaa69d378d943a387e1e73510334958adc5. * Enable comments for users with appsmith email * lint * fix * Try running a socket.io server inside backend * Update comment reducer tests * Init mentions within comments * Fix comment thread updates with email rooms * Minor fixes * Refactors / review suggestions * lint * increase cache limit for builds * Comment out tests for feature that's under development * Add Dockerfile for RTS * Fix policies missing for first comment in threads * Use draftJS for comments input with mentions support * fix fixtures * Use thread's policies when querying for threads * Update socket.io to v4 * Add support for richer body with mentions * Update comment body type to RawDraftContentState * fix stale method * Fix mentions search * Minor cleanups * Comment context menu and thread UI updates * revert: Scaffold app comments * Yarn dependencies * Delete comment using id api added * Init app comments * Add test for creating thread * Api for delete comment with id * Test comment creation response and policies * Copy comment links * Fix reset editor state * Delete valid comment testcase added * Delete comment TC : code refactor * Don't allow creating comments with an empty body * Pin comments WIP[] * Ignore dependency-reduced-pom.xml files from VCS * Cleanup of some dev-only files, for review * Delete comment * Update socket.io to v4 in RTS * Pin and resolve comment thread object added in commentThread * Pin and resolve comment thread object added in commentThread * Update comment thread API * Added creationTime and updationTime in comment thread response * Added creationTime and updationTime in comment thread response * Added human readable id to comment threads, fallback to username for null name in user document * Refactor * lint * fix test, rm duplicate selector * comment out saga used for dev * CommentThread viewed status, username fallback for getName=null, username field added in pin & resolve status * lint * trigger tests Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com> Co-authored-by: Abhijeet <abhi.nagarnaik@gmail.com>
2021-04-29 10:33:51 +00:00
import { ReduxActionTypes } from "constants/ReduxActionConstants";
import { COMMENT_EVENTS_CHANNEL } from "constants/CommentConstants";
import { options as filterOptions } from "comments/AppComments/AppCommentsFilterPopover";
Initialise comments (#3328) * Initial scaffolding for comments CRUD APIs * add actions * add assets * state management for existing comments and creating new * add ui components * add overlay comments wrapper to baseWidget * add toggle comment mode button at editor header * trigger tests * Disallow commenting as someone else * Add applicationId for comments * lint * Add overlay blacklist to prevent component interaction while adding comments * Comment thread style updates * Placeholder comment context menu * Controlled comment thread visibility for making new comments visible by default * Update comment type description * Reset input on save * Resolve comment thread button ui * fix close on esc key, dont create new comment on outside click * Submit on enter * add emoji picker * Attempt at adding a websocket server in Java * CRUD APIs for comment threads * Add API for getting all threads in application * Move types to a separate file * Initial commit for real time server (RTS) * Add script to start RTS * Fix position property * Use create comment thread API * Use add comment to thread API * Add custom cursor * Dispatch logout init on 401 errors * Allow CORS for real time connection * Add more logs to RTS * Fix construction of MongoClient * WIP: Real time comments * Enable comments * Minor updates * Read backend API base URL from environment * Escape to reset comments mode * Set popover position as auto and boundary as scroll parent * Disable warning * Added permissions for comment threads * Add resolved API for comment threads * Migration to set commenting permission on existing apps * Fix updates bringing the RTS down * Show view latest button, scroll to bottom on creating a new comment * Cleanup comment reducer * Move to typescript for RTS * Add missing server.ts and tsconfig files * Resolve / unresolve comment * Scaffold app comments * Minor fixes: comment on top of all widgets, add toggle button at viewer header * Reconnect socket on creating a new app, set connected status in store * Retry socket connection flow * Integration tests for comments with api mocks using msw * Fix circular depependency * rm file * Minor cleanup and comments * Minor refactors: move isScrolledToBottom to common hooks, decouple prevent interactions overlay from comments wrapper * Use policies when pushing updates in RTS * ENV var to set if comments are enabled * Fix: check if editor/viewer is initialised before waiting for init action * Add tests for comments reducer * Revert "ENV var to set if comments are enabled" This reverts commit 988efeaa69d378d943a387e1e73510334958adc5. * Enable comments for users with appsmith email * lint * fix * Try running a socket.io server inside backend * Update comment reducer tests * Init mentions within comments * Fix comment thread updates with email rooms * Minor fixes * Refactors / review suggestions * lint * increase cache limit for builds * Comment out tests for feature that's under development * Add Dockerfile for RTS * Fix policies missing for first comment in threads * Use draftJS for comments input with mentions support * fix fixtures * Use thread's policies when querying for threads * Update socket.io to v4 * Add support for richer body with mentions * Update comment body type to RawDraftContentState * fix stale method * Fix mentions search * Minor cleanups * Comment context menu and thread UI updates * revert: Scaffold app comments * Yarn dependencies * Delete comment using id api added * Init app comments * Add test for creating thread * Api for delete comment with id * Test comment creation response and policies * Copy comment links * Fix reset editor state * Delete valid comment testcase added * Delete comment TC : code refactor * Don't allow creating comments with an empty body * Pin comments WIP[] * Ignore dependency-reduced-pom.xml files from VCS * Cleanup of some dev-only files, for review * Delete comment * Update socket.io to v4 in RTS * Pin and resolve comment thread object added in commentThread * Pin and resolve comment thread object added in commentThread * Update comment thread API * Added creationTime and updationTime in comment thread response * Added creationTime and updationTime in comment thread response * Added human readable id to comment threads, fallback to username for null name in user document * Refactor * lint * fix test, rm duplicate selector * comment out saga used for dev * CommentThread viewed status, username fallback for getName=null, username field added in pin & resolve status * lint * trigger tests Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com> Co-authored-by: Abhijeet <abhi.nagarnaik@gmail.com>
2021-04-29 10:33:51 +00:00
import {
CommentThread,
CommentEventPayload,
CreateCommentThreadPayload,
CreateCommentThreadRequest,
AddCommentToCommentThreadSuccessPayload,
AddCommentToCommentThreadRequestPayload,
NewCommentEventPayload,
NewCommentThreadPayload,
} from "entities/Comments/CommentsInterfaces";
import { RawDraftContentState } from "draft-js";
Initialise comments (#3328) * Initial scaffolding for comments CRUD APIs * add actions * add assets * state management for existing comments and creating new * add ui components * add overlay comments wrapper to baseWidget * add toggle comment mode button at editor header * trigger tests * Disallow commenting as someone else * Add applicationId for comments * lint * Add overlay blacklist to prevent component interaction while adding comments * Comment thread style updates * Placeholder comment context menu * Controlled comment thread visibility for making new comments visible by default * Update comment type description * Reset input on save * Resolve comment thread button ui * fix close on esc key, dont create new comment on outside click * Submit on enter * add emoji picker * Attempt at adding a websocket server in Java * CRUD APIs for comment threads * Add API for getting all threads in application * Move types to a separate file * Initial commit for real time server (RTS) * Add script to start RTS * Fix position property * Use create comment thread API * Use add comment to thread API * Add custom cursor * Dispatch logout init on 401 errors * Allow CORS for real time connection * Add more logs to RTS * Fix construction of MongoClient * WIP: Real time comments * Enable comments * Minor updates * Read backend API base URL from environment * Escape to reset comments mode * Set popover position as auto and boundary as scroll parent * Disable warning * Added permissions for comment threads * Add resolved API for comment threads * Migration to set commenting permission on existing apps * Fix updates bringing the RTS down * Show view latest button, scroll to bottom on creating a new comment * Cleanup comment reducer * Move to typescript for RTS * Add missing server.ts and tsconfig files * Resolve / unresolve comment * Scaffold app comments * Minor fixes: comment on top of all widgets, add toggle button at viewer header * Reconnect socket on creating a new app, set connected status in store * Retry socket connection flow * Integration tests for comments with api mocks using msw * Fix circular depependency * rm file * Minor cleanup and comments * Minor refactors: move isScrolledToBottom to common hooks, decouple prevent interactions overlay from comments wrapper * Use policies when pushing updates in RTS * ENV var to set if comments are enabled * Fix: check if editor/viewer is initialised before waiting for init action * Add tests for comments reducer * Revert "ENV var to set if comments are enabled" This reverts commit 988efeaa69d378d943a387e1e73510334958adc5. * Enable comments for users with appsmith email * lint * fix * Try running a socket.io server inside backend * Update comment reducer tests * Init mentions within comments * Fix comment thread updates with email rooms * Minor fixes * Refactors / review suggestions * lint * increase cache limit for builds * Comment out tests for feature that's under development * Add Dockerfile for RTS * Fix policies missing for first comment in threads * Use draftJS for comments input with mentions support * fix fixtures * Use thread's policies when querying for threads * Update socket.io to v4 * Add support for richer body with mentions * Update comment body type to RawDraftContentState * fix stale method * Fix mentions search * Minor cleanups * Comment context menu and thread UI updates * revert: Scaffold app comments * Yarn dependencies * Delete comment using id api added * Init app comments * Add test for creating thread * Api for delete comment with id * Test comment creation response and policies * Copy comment links * Fix reset editor state * Delete valid comment testcase added * Delete comment TC : code refactor * Don't allow creating comments with an empty body * Pin comments WIP[] * Ignore dependency-reduced-pom.xml files from VCS * Cleanup of some dev-only files, for review * Delete comment * Update socket.io to v4 in RTS * Pin and resolve comment thread object added in commentThread * Pin and resolve comment thread object added in commentThread * Update comment thread API * Added creationTime and updationTime in comment thread response * Added creationTime and updationTime in comment thread response * Added human readable id to comment threads, fallback to username for null name in user document * Refactor * lint * fix test, rm duplicate selector * comment out saga used for dev * CommentThread viewed status, username fallback for getName=null, username field added in pin & resolve status * lint * trigger tests Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com> Co-authored-by: Abhijeet <abhi.nagarnaik@gmail.com>
2021-04-29 10:33:51 +00:00
export const setCommentThreadsRequest = () => ({
type: ReduxActionTypes.SET_COMMENT_THREADS_REQUEST,
});
// todo remove (for dev)
export const setCommentThreadsSuccess = (payload: any) => ({
type: ReduxActionTypes.SET_COMMENT_THREADS_SUCCESS,
payload,
});
// todo remove (for dev)
export const initCommentThreads = () => ({
type: ReduxActionTypes.INIT_COMMENT_THREADS,
});
export const commentEvent = (payload: CommentEventPayload) => ({
type: COMMENT_EVENTS_CHANNEL,
payload,
});
export const createUnpublishedCommentThreadRequest = (
payload: Partial<CreateCommentThreadRequest>,
) => ({
type: ReduxActionTypes.CREATE_UNPUBLISHED_COMMENT_THREAD_REQUEST,
payload,
});
export const createUnpublishedCommentThreadSuccess = (
payload: Record<string, Partial<CreateCommentThreadRequest>>,
) => ({
type: ReduxActionTypes.CREATE_UNPUBLISHED_COMMENT_THREAD_SUCCESS,
payload,
});
export const removeUnpublishedCommentThreads = () => ({
type: ReduxActionTypes.REMOVE_UNPUBLISHED_COMMENT_THREAD_REQUEST,
payload: null,
});
export const createCommentThreadRequest = (
payload: CreateCommentThreadPayload,
) => ({
type: ReduxActionTypes.CREATE_COMMENT_THREAD_REQUEST,
payload,
});
export const createCommentThreadSuccess = (payload: CommentThread) => ({
type: ReduxActionTypes.CREATE_COMMENT_THREAD_SUCCESS,
payload,
});
export const addCommentToThreadRequest = (
payload: AddCommentToCommentThreadRequestPayload,
) => ({
type: ReduxActionTypes.ADD_COMMENT_TO_THREAD_REQUEST,
payload,
});
export const addCommentToThreadSuccess = (
payload: AddCommentToCommentThreadSuccessPayload,
) => ({
type: ReduxActionTypes.ADD_COMMENT_TO_THREAD_SUCCESS,
payload,
});
export const setCommentMode = (payload: boolean) => ({
type: ReduxActionTypes.SET_COMMENT_MODE,
payload,
});
export const fetchApplicationCommentsRequest = () => ({
type: ReduxActionTypes.FETCH_APPLICATION_COMMENTS_REQUEST,
});
export const fetchApplicationCommentsSuccess = (
payload: Array<CommentThread>,
) => ({
type: ReduxActionTypes.FETCH_APPLICATION_COMMENTS_SUCCESS,
payload,
});
export const newCommentEvent = (payload: NewCommentEventPayload) => ({
type: ReduxActionTypes.NEW_COMMENT_EVENT,
payload,
});
export const newCommentThreadEvent = (payload: NewCommentThreadPayload) => ({
type: ReduxActionTypes.NEW_COMMENT_THREAD_EVENT,
payload,
});
export const setCommentResolutionRequest = (payload: {
threadId: string;
resolved: boolean;
}) => ({
type: ReduxActionTypes.SET_COMMENT_THREAD_RESOLUTION_REQUEST,
payload,
});
export const updateCommentThreadSuccess = (
payload: Partial<CommentThread>,
) => ({
type: ReduxActionTypes.UPDATE_COMMENT_THREAD_SUCCESS,
payload,
});
export const updateCommentThreadEvent = (payload: Partial<CommentThread>) => ({
type: ReduxActionTypes.UPDATE_COMMENT_THREAD_EVENT,
payload,
});
export const pinCommentThreadRequest = (payload: {
threadId: string;
pin: boolean;
}) => ({
Initialise comments (#3328) * Initial scaffolding for comments CRUD APIs * add actions * add assets * state management for existing comments and creating new * add ui components * add overlay comments wrapper to baseWidget * add toggle comment mode button at editor header * trigger tests * Disallow commenting as someone else * Add applicationId for comments * lint * Add overlay blacklist to prevent component interaction while adding comments * Comment thread style updates * Placeholder comment context menu * Controlled comment thread visibility for making new comments visible by default * Update comment type description * Reset input on save * Resolve comment thread button ui * fix close on esc key, dont create new comment on outside click * Submit on enter * add emoji picker * Attempt at adding a websocket server in Java * CRUD APIs for comment threads * Add API for getting all threads in application * Move types to a separate file * Initial commit for real time server (RTS) * Add script to start RTS * Fix position property * Use create comment thread API * Use add comment to thread API * Add custom cursor * Dispatch logout init on 401 errors * Allow CORS for real time connection * Add more logs to RTS * Fix construction of MongoClient * WIP: Real time comments * Enable comments * Minor updates * Read backend API base URL from environment * Escape to reset comments mode * Set popover position as auto and boundary as scroll parent * Disable warning * Added permissions for comment threads * Add resolved API for comment threads * Migration to set commenting permission on existing apps * Fix updates bringing the RTS down * Show view latest button, scroll to bottom on creating a new comment * Cleanup comment reducer * Move to typescript for RTS * Add missing server.ts and tsconfig files * Resolve / unresolve comment * Scaffold app comments * Minor fixes: comment on top of all widgets, add toggle button at viewer header * Reconnect socket on creating a new app, set connected status in store * Retry socket connection flow * Integration tests for comments with api mocks using msw * Fix circular depependency * rm file * Minor cleanup and comments * Minor refactors: move isScrolledToBottom to common hooks, decouple prevent interactions overlay from comments wrapper * Use policies when pushing updates in RTS * ENV var to set if comments are enabled * Fix: check if editor/viewer is initialised before waiting for init action * Add tests for comments reducer * Revert "ENV var to set if comments are enabled" This reverts commit 988efeaa69d378d943a387e1e73510334958adc5. * Enable comments for users with appsmith email * lint * fix * Try running a socket.io server inside backend * Update comment reducer tests * Init mentions within comments * Fix comment thread updates with email rooms * Minor fixes * Refactors / review suggestions * lint * increase cache limit for builds * Comment out tests for feature that's under development * Add Dockerfile for RTS * Fix policies missing for first comment in threads * Use draftJS for comments input with mentions support * fix fixtures * Use thread's policies when querying for threads * Update socket.io to v4 * Add support for richer body with mentions * Update comment body type to RawDraftContentState * fix stale method * Fix mentions search * Minor cleanups * Comment context menu and thread UI updates * revert: Scaffold app comments * Yarn dependencies * Delete comment using id api added * Init app comments * Add test for creating thread * Api for delete comment with id * Test comment creation response and policies * Copy comment links * Fix reset editor state * Delete valid comment testcase added * Delete comment TC : code refactor * Don't allow creating comments with an empty body * Pin comments WIP[] * Ignore dependency-reduced-pom.xml files from VCS * Cleanup of some dev-only files, for review * Delete comment * Update socket.io to v4 in RTS * Pin and resolve comment thread object added in commentThread * Pin and resolve comment thread object added in commentThread * Update comment thread API * Added creationTime and updationTime in comment thread response * Added creationTime and updationTime in comment thread response * Added human readable id to comment threads, fallback to username for null name in user document * Refactor * lint * fix test, rm duplicate selector * comment out saga used for dev * CommentThread viewed status, username fallback for getName=null, username field added in pin & resolve status * lint * trigger tests Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com> Co-authored-by: Abhijeet <abhi.nagarnaik@gmail.com>
2021-04-29 10:33:51 +00:00
type: ReduxActionTypes.PIN_COMMENT_THREAD_REQUEST,
payload,
});
export const pinCommentThreadSuccess = (payload: {
threadId: string;
applicationId: string;
}) => ({
type: ReduxActionTypes.PIN_COMMENT_THREAD_SUCCESS,
payload,
});
export const deleteCommentRequest = (payload: {
commentId: string;
threadId: string;
}) => ({
type: ReduxActionTypes.DELETE_COMMENT_REQUEST,
payload,
});
export const deleteCommentSuccess = (payload: {
threadId: string;
commentId: string;
}) => ({
type: ReduxActionTypes.DELETE_COMMENT_SUCCESS,
payload,
});
export const setShouldShowResolvedComments = (payload: boolean) => ({
type: ReduxActionTypes.SET_SHOULD_SHOW_RESOLVED_COMMENTS,
payload,
});
export const setAppCommentsFilter = (
payload: typeof filterOptions[number]["value"],
) => ({
type: ReduxActionTypes.SET_APP_COMMENTS_FILTER,
payload,
});
export const resetVisibleThread = (threadId?: string) => ({
type: ReduxActionTypes.RESET_VISIBLE_THREAD,
payload: threadId,
});
export const setVisibleThread = (threadId: string) => ({
type: ReduxActionTypes.SET_VISIBLE_THREAD,
payload: threadId,
});
export const markThreadAsReadRequest = (threadId: string) => ({
type: ReduxActionTypes.MARK_THREAD_AS_READ_REQUEST,
payload: { threadId },
});
export const editCommentRequest = ({
body,
commentId,
commentThreadId,
}: {
commentThreadId: string;
commentId: string;
body: RawDraftContentState;
}) => ({
type: ReduxActionTypes.EDIT_COMMENT_REQUEST,
payload: {
body,
commentId,
commentThreadId,
},
});
export const updateCommentSuccess = (payload: {
comment: Comment;
commentThreadId: string;
}) => ({
type: ReduxActionTypes.EDIT_COMMENT_SUCCESS,
payload,
});
export const deleteCommentThreadRequest = (commentThreadId: string) => ({
type: ReduxActionTypes.DELETE_THREAD_REQUEST,
payload: commentThreadId,
});
export const deleteCommentThreadSuccess = (payload: {
commentThreadId: string;
appId: string;
}) => ({
type: ReduxActionTypes.DELETE_THREAD_SUCCESS,
payload,
});
export const addCommentReaction = (payload: {
emoji: string;
commentId: string;
}) => ({
type: ReduxActionTypes.ADD_COMMENT_REACTION,
payload,
});
export const removeCommentReaction = (payload: {
emoji: string;
commentId: string;
}) => ({
type: ReduxActionTypes.REMOVE_COMMENT_REACTION,
payload,
});
export const updateCommentEvent = (payload: Comment) => ({
type: ReduxActionTypes.UPDATE_COMMENT_EVENT,
payload,
});
export const showCommentsIntroCarousel = () => ({
type: ReduxActionTypes.SHOW_COMMENTS_INTRO_CAROUSEL,
payload: undefined,
});
export const hideCommentsIntroCarousel = () => ({
type: ReduxActionTypes.HIDE_COMMENTS_INTRO_CAROUSEL,
payload: undefined,
});
export const setAreCommentsEnabled = (flag: boolean) => ({
type: ReduxActionTypes.SET_ARE_COMMENTS_ENABLED,
payload: flag,
});