docbrown/app/javascript/CommentSubscription/commentSubscriptionUtilities.jsx
Nick Taylor a71d78df6e
[deploy] Add comment subscription component to article page (#7205)
* wip

* Right aligned the comment subscription panel.

* Cleaned up the comment area on the article page so it uses crayon margin classes.

* Updated tests

* Removed old UI for comment subscriptions.

* Made Discussion text bigger and bolder.

* Fixed some layout issues as per PR comments.

* Fixed some layout issues as per PR comments.

* Updated Storybook stories, tests and snapshots

* wip

* Everything works now, just need to integrate snackbar.

* Removed setTimeout I was debugging with.

* Using the new utilities/http/request utility now.

* Added the <SnackbarPoller />

* Now when unsubscribed, the subscription type resets to all comments.

* Removed overflow hidden from .home CSS class so comment subscription component displays properly.

* Now unsuccessful subscribes/unsubscribes error properly.

* Changed button text from Done to Subscribe

* Merged the <SnackbarPoller /> component into the <Snackbar /> component.

* Fixed a propType issue.

* Fixed a test.

* Removed snackbar tests for now. Need to figure out polling in tests.

* Now comment subscription component is only loaded for logged on users.

* Added a comment.

* Updated some storybook stories.

* Fixed a small formatting issue.

* Reduced snackbar item lifespans to 3 seconds.

* Extracted <CogIcon /> to it's own file because other features are going to need it.

* Added some Storybook stories and tests for the <CogIcon /> component.

* Revert "Extracted <CogIcon /> to it's own file because other features are going to need it."

This reverts commit b30406a50e491c53c3dce5be03bcdf8112b043df.

* Put back <CogIcon /> component.

* Added some error handling if the component doesn't load.

* Moving some things around.

* Rename the article pack file.

* Changed wording from "article" to "post".

* Fixed false negative CSS issue. It was a dangling div tag.

* Add the option to add an optional close button to snackbar items.

* Fixed z-index of subscription type options panel so it is always visible on mobile.

* Reworked the comment subsciption utilities a bit.

* Added test for comment subscription utilities.

* Fixed a broken test from a refactor.

* Added more tests for comment subscription utiltities.

* Fixed comments footer bottom padding.

* Fixed issue with stale find in comment subscription test.

* Update app/javascript/packs/articlePage.jsx

Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>

* Update app/assets/stylesheets/article-show.scss

Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>

* Changed close button wording to Dismiss.

* Fixed padding to use utility variable instead.

* Added missing import for SASS file.

Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
2020-05-05 12:50:30 -04:00

69 lines
1.6 KiB
JavaScript

import { request } from '../utilities/http/request';
/**
* Gets the comment subscription status for a given article.
*
* @param {number} articleId
*
* @returns {string} The subscription status.
*/
export async function getCommentSubscriptionStatus(articleId) {
try {
const response = await request(
`/notification_subscriptions/Article/${articleId}`,
);
const subscriptionStatus = await response.json();
return subscriptionStatus;
} catch (error) {
return new Error('An error occurred, please try again');
}
}
/**
* Set's the subscription status for a given article.
*
* @param {number} articleId
* @param {string} subscriptionType
*
* @returns {string} A friendly message in regards to subscription status.
*/
export async function setCommentSubscriptionStatus(
articleId,
subscriptionType,
) {
let message;
try {
const response = await request(
`/notification_subscriptions/Article/${articleId}`,
{
method: 'POST',
body: JSON.stringify({ config: subscriptionType }),
},
);
// true means you're subscribed, false means unsubscribed
const subscribed = await response.json();
if (typeof subscribed !== 'boolean') {
message = 'An error occurred, please try again';
return message;
}
message = 'You have been unsubscribed from comments for this post';
if (subscribed) {
message = `You have been subscribed to ${subscriptionType.replace(
/_/g,
' ',
)}`;
}
} catch (error) {
message = 'An error occurred, please try again';
}
return message;
}