diff --git a/.eslintignore b/.eslintignore index 6fecd9d9b..8a8c3a213 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,4 +11,5 @@ plugins/* !plugins/coral-plugin-mod !plugins/coral-plugin-love !plugins/coral-plugin-viewing-options +!plugins/coral-plugin-comment-content node_modules diff --git a/.gitignore b/.gitignore index abd490356..b3e0eaa73 100644 --- a/.gitignore +++ b/.gitignore @@ -24,5 +24,6 @@ plugins/* !plugins/coral-plugin-mod !plugins/coral-plugin-love !plugins/coral-plugin-viewing-options +!plugins/coral-plugin-comment-content **/node_modules/* diff --git a/bin/cli-assets b/bin/cli-assets index 97b5b043c..4805bead0 100755 --- a/bin/cli-assets +++ b/bin/cli-assets @@ -8,9 +8,12 @@ const program = require('./commander'); const parseDuration = require('ms'); const Table = require('cli-table'); const AssetModel = require('../models/asset'); +const CommentModel = require('../models/comment'); +const AssetsService = require('../services/assets'); const mongoose = require('../services/mongoose'); const scraper = require('../services/scraper'); const util = require('./util'); +const inquirer = require('inquirer'); // Register the shutdown criteria. util.onshutdown([ @@ -20,65 +23,112 @@ util.onshutdown([ /** * Lists all the assets registered in the database. */ -function listAssets() { - AssetModel - .find({}) - .sort({'created_at': 1}) - .then((asset) => { - let table = new Table({ - head: [ - 'ID', - 'Title', - 'URL' - ] - }); +async function listAssets() { + try { + let assets = await AssetModel.find({}).sort({'created_at': 1}); - asset.forEach((asset) => { - table.push([ - asset.id, - asset.title ? asset.title : '', - asset.url ? asset.url : '' - ]); - }); - - console.log(table.toString()); - util.shutdown(); - }) - .catch((err) => { - console.error(err); - util.shutdown(1); + let table = new Table({ + head: [ + 'ID', + 'Title', + 'URL' + ] }); + + assets.forEach((asset) => { + table.push([ + asset.id, + asset.title ? asset.title : '', + asset.url ? asset.url : '' + ]); + }); + + console.log(table.toString()); + util.shutdown(); + } catch (e) { + console.error(e); + util.shutdown(1); + } } -function refreshAssets(ageString) { - const now = new Date().getTime(); - const ageMs = parseDuration(ageString); - const age = new Date(now - ageMs); +async function refreshAssets(ageString) { + try { + const now = new Date().getTime(); + const ageMs = parseDuration(ageString); + const age = new Date(now - ageMs); - AssetModel.find({ - $or: [ - { - scraped: { - $lte: age + let assets = await AssetModel.find({ + $or: [ + { + scraped: { + $lte: age + } + }, + { + scraped: null } - }, - { - scraped: null - } - ] - }) + ] + }); - // Queue all the assets for scraping. - .then((assets) => Promise.all(assets.map(scraper.create))) + // Queue all the assets for scraping. + await Promise.all(assets.map(scraper.create)); - .then(() => { console.log('Assets were queued to be scraped'); util.shutdown(); - }) - .catch((err) => { - console.error(err); + } catch (e) { + console.error(e); util.shutdown(1); - }); + } +} + +async function updateURL(assetID, assetURL) { + try { + await AssetsService.updateURL(assetID, assetURL); + + console.log(`Asset ${assetID} was updated to have url ${assetURL}.`); + util.shutdown(); + } catch (e) { + console.error(e); + util.shutdown(1); + } +} + +async function merge(srcID, dstID) { + try { + + // Grab the assets... + let [srcAsset, dstAsset] = await AssetsService.findByIDs([srcID, dstID]); + if (!srcAsset || !dstAsset) { + throw new Error('Not all assets indicated by id exist, cannot merge'); + } + + // Count the affected resources... + let srcCommentCount = await CommentModel.find({asset_id: srcID}).count(); + + console.log(`Now going to update ${srcCommentCount} comments and delete the source Asset[${srcID}].`); + + let {confirm} = await inquirer.prompt([ + { + type: 'confirm', + name: 'confirm', + message: 'Proceed with merge', + default: false + } + ]); + + if (confirm) { + + // Perform the merge! + await AssetsService.merge(srcID, dstID); + } else { + console.warn('Aborting merge'); + } + + util.shutdown(0); + } catch (e) { + console.error(e); + util.shutdown(1); + } } //============================================================================== @@ -95,6 +145,16 @@ program .description('queues the assets that exceed the age requested') .action(refreshAssets); +program + .command('update-url ') + .description('update the URL of an asset') + .action(updateURL); + +program + .command('merge ') + .description('merges two assets together by moving comments from src to dst and deleting the src asset') + .action(merge); + program.parse(process.argv); // If there is no command listed, output help. diff --git a/client/coral-admin/src/components/ui/Header.css b/client/coral-admin/src/components/ui/Header.css index 7cb68ecbf..d99a7f295 100644 --- a/client/coral-admin/src/components/ui/Header.css +++ b/client/coral-admin/src/components/ui/Header.css @@ -77,7 +77,7 @@ letter-spacing: .8; &:hover { - background-color: #232323; + background-color: #404040; } &.active { diff --git a/client/coral-admin/src/routes/Community/components/Community.css b/client/coral-admin/src/routes/Community/components/Community.css index 28551c8a0..e65c34514 100644 --- a/client/coral-admin/src/routes/Community/components/Community.css +++ b/client/coral-admin/src/routes/Community/components/Community.css @@ -175,7 +175,7 @@ right: 0; height: 100%; top: 0; - padding: 40px 18px; + padding: 50px 18px; box-sizing: border-box; } @@ -310,24 +310,33 @@ .flaggedByCount { display: block; text-align: left; + margin-top: 5px; +} + +.flaggedByCount i { + font-size: 14px; + margin-right: 10px; } .flaggedBy { display: inline; padding: 3px; - font-size: 16px; + font-size: 14px; + margin-left: 5px; } .flaggedByLabel { - font-weight: bold; + font-weight: 600; font-size: 14px; } .flaggedReasons { - padding-top: 15px; margin-left: 24px; + margin-top: 10px; } -.flaggedByReason { +p.flaggedByReason { font-size: 1tpx; + margin: 0px; + line-height: 1.4; } diff --git a/client/coral-admin/src/routes/Community/components/styles.css b/client/coral-admin/src/routes/Community/components/styles.css index 2cd3f7b50..8e4b716af 100644 --- a/client/coral-admin/src/routes/Community/components/styles.css +++ b/client/coral-admin/src/routes/Community/components/styles.css @@ -52,6 +52,10 @@ span { } } +.approve { + margin-top: 10px; +} + .notFound { position: relative; margin: 20px auto; @@ -193,7 +197,7 @@ span { top: 0; padding: 40px 18px; box-sizing: border-box; - } + } .itemHeader { display: flex; @@ -255,6 +259,8 @@ span { } + + .empty { color: #444; margin-top: 50px; diff --git a/client/coral-admin/src/routes/Dashboard/components/Widget.css b/client/coral-admin/src/routes/Dashboard/components/Widget.css index 587c51ada..cf83fcbdc 100644 --- a/client/coral-admin/src/routes/Dashboard/components/Widget.css +++ b/client/coral-admin/src/routes/Dashboard/components/Widget.css @@ -17,8 +17,9 @@ .heading { margin: 0; padding-left: 10px; - font-size: 1.5rem; - font-weight: bold; + font-size: 1.3rem; + font-weight: 600; + color: #2c2c2c; } .widgetTable { @@ -32,7 +33,8 @@ } .widgetHead p { - color: rgb(35, 102, 223); + color: #2c2c2c; + font-weight: 500; padding: 10px; text-align: left; text-transform: capitalize; @@ -47,11 +49,11 @@ } .rowLinkify { - cursor: pointer; border-bottom: 1px solid lightgrey; color: #555; height: var(--row-height); padding: 10px; + transition: background-color 200ms; } .rowLinkify:last-child { @@ -60,6 +62,7 @@ .rowLinkify:hover { background-color: #f8f8f8; + pointer: default; } .linkToAsset { @@ -68,16 +71,17 @@ } .linkToModerate { - background-color: #e0e0e0; + background-color: #BDBDBD; padding: 10px 14px; text-decoration: none; color: black; float: right; margin-left: 15px; + transition: background-color 200ms; } .linkToModerate:hover { - background-color: #ccc; + background-color: #9E9E9E; } .lede { @@ -89,14 +93,10 @@ color: #555; text-decoration: none; font-size: 1.2em; - font-weight: normal; + font-weight: 500; margin: 0; } -.assetTitle:hover { - text-decoration: underline; -} - .widgetCount { color: #555; font-size: 1.3em; diff --git a/client/coral-admin/src/routes/Moderation/components/CommentCount.css b/client/coral-admin/src/routes/Moderation/components/CommentCount.css index b684d0f4a..4d24d5702 100644 --- a/client/coral-admin/src/routes/Moderation/components/CommentCount.css +++ b/client/coral-admin/src/routes/Moderation/components/CommentCount.css @@ -12,4 +12,5 @@ right: 0; margin-top: -2px; font-size: 12px; + color: white; } diff --git a/client/coral-admin/src/routes/Moderation/components/UserDetail.css b/client/coral-admin/src/routes/Moderation/components/UserDetail.css index d4b5f0db7..710f84759 100644 --- a/client/coral-admin/src/routes/Moderation/components/UserDetail.css +++ b/client/coral-admin/src/routes/Moderation/components/UserDetail.css @@ -15,7 +15,7 @@ display: flex; .stat { - margin: 0 4px 12px; + margin: 0 4px 10px 0px; } .stat:last-child { @@ -49,7 +49,7 @@ li { display: inline-block; - margin: 0 10px; + margin-right: 10px; cursor: pointer; padding: 0 10px; } diff --git a/client/coral-admin/src/routes/Moderation/components/styles.css b/client/coral-admin/src/routes/Moderation/components/styles.css index b0c2cc5ac..b14e656f5 100644 --- a/client/coral-admin/src/routes/Moderation/components/styles.css +++ b/client/coral-admin/src/routes/Moderation/components/styles.css @@ -18,14 +18,20 @@ .tab { flex: 1; - color: #EEEEEE; + color: #C0C0C0; text-transform: capitalize; font-weight: 100; - font-size: 15px; + font-size: 14px; letter-spacing: 1px; transition: border-bottom 200ms; - padding: 0px 5px; - margin-right: 30px; + transition: color 200ms; + padding: 0px 10px; + margin-right: 20px; + &:hover { + color: white; + border-bottom: solid 2px #F36451; + box-sizing: border-box; + } } .active { @@ -33,6 +39,10 @@ box-sizing: border-box; border-bottom: solid 4px #F36451; font-weight: 400; + &:hover { + border-bottom: solid 4px #F36451; + font-weight: 400; + } } .active > span { @@ -103,19 +113,18 @@ span { font-weight: 400; font-size: 15px; letter-spacing: 1px; - transition: opacity 200ms; + transition: background-color 200ms; opacity: 1; - &:hover { - opacity: .8; - cursor: pointer; - } - &:first-child { text-align: left; } &:nth-child(2) { + &:hover { + cursor: pointer; + background-color: #212121; + } span { text-align: center; text-overflow: ellipsis; @@ -245,7 +254,6 @@ span { padding: 5px; color: #262626; font-size: 14px; - margin-left: 15px; line-height: 1px; font-weight: 300; } @@ -421,17 +429,21 @@ span { .tabIcon { position: relative; - top: 2px; + top: 3px; font-size: 16px; } .username { - color: blue; - text-decoration: underline; + color: #393B44; + text-decoration: none; cursor: pointer; - + font-weight: 600; + padding: 2px 5px; + border-radius: 2px; + margin-left: -5px; + transition: background-color 200ms ease; &:hover { - background-color: rgba(255, 0, 0, .1); + background-color: #E0E0E0; } } diff --git a/client/coral-embed-stream/src/components/Comment.js b/client/coral-embed-stream/src/components/Comment.js index 92c59d936..a66b8a224 100644 --- a/client/coral-embed-stream/src/components/Comment.js +++ b/client/coral-embed-stream/src/components/Comment.js @@ -3,13 +3,13 @@ import React, {PropTypes} from 'react'; import PermalinkButton from 'coral-plugin-permalinks/PermalinkButton'; import AuthorName from 'coral-plugin-author-name/AuthorName'; import TagLabel from 'coral-plugin-tag-label/TagLabel'; -import Content from 'coral-plugin-commentcontent/CommentContent'; import PubDate from 'coral-plugin-pubdate/PubDate'; import {ReplyBox, ReplyButton} from 'coral-plugin-replies'; import FlagComment from 'coral-plugin-flags/FlagComment'; import {can} from 'coral-framework/services/perms'; import {TransitionGroup} from 'react-transition-group'; import cn from 'classnames'; +import styles from './Comment.css'; import { BestButton, @@ -18,14 +18,14 @@ import { commentIsBest, BestIndicator } from 'coral-plugin-best/BestButton'; -import Slot from 'coral-framework/components/Slot'; import LoadMore from './LoadMore'; +import {getEditableUntilDate} from './util'; import {TopRightMenu} from './TopRightMenu'; +import CommentContent from './CommentContent'; +import Slot from 'coral-framework/components/Slot'; import IgnoredCommentTombstone from './IgnoredCommentTombstone'; import {EditableCommentContent} from './EditableCommentContent'; import {getActionSummary, iPerformedThisAction} from 'coral-framework/utils'; -import {getEditableUntilDate} from './util'; -import styles from './Comment.css'; const isStaff = (tags) => !tags.every((t) => t.tag.name !== 'STAFF'); const hasTag = (tags, lookupTag) => !!tags.filter((t) => t.tag.name === lookupTag).length; @@ -466,8 +466,7 @@ export default class Comment extends React.Component { stopEditing={this.stopEditing} /> :
- - +
} diff --git a/client/coral-embed-stream/src/components/CommentContent.js b/client/coral-embed-stream/src/components/CommentContent.js new file mode 100644 index 000000000..4d56ec0d5 --- /dev/null +++ b/client/coral-embed-stream/src/components/CommentContent.js @@ -0,0 +1,19 @@ +import React from 'react'; + +const CommentContent = ({comment}) => { + const textbreaks = comment.body.split('\n'); + return
+ { + textbreaks.map((line, i) => { + return ( + + {line} +
+
+ ); + }) + } +
; +}; + +export default CommentContent; diff --git a/client/coral-framework/components/Slot.js b/client/coral-framework/components/Slot.js index 22a315623..ca246591b 100644 --- a/client/coral-framework/components/Slot.js +++ b/client/coral-framework/components/Slot.js @@ -4,10 +4,15 @@ import styles from './Slot.css'; import {connect} from 'react-redux'; import {getSlotElements} from 'coral-framework/helpers/plugins'; -function Slot ({fill, inline = false, className, plugin_config: config, ...rest}) { +function Slot ({fill, inline = false, className, plugin_config: config, defaultComponent: DefaultComponent, ...rest}) { + let children = getSlotElements(fill, {...rest, config}); + if (children.length === 0 && DefaultComponent) { + children = ; + } + return (
- {getSlotElements(fill, {...rest, config})} + {children}
); } diff --git a/client/coral-framework/graphql/fragments.js b/client/coral-framework/graphql/fragments.js index 3c64090bd..110f0796b 100644 --- a/client/coral-framework/graphql/fragments.js +++ b/client/coral-framework/graphql/fragments.js @@ -7,7 +7,7 @@ export default { 'SuspendUserResponse', 'RejectUsernameResponse', 'SetUserStatusResponse', - 'PostCommentResponse', + 'CreateFlagResponse', 'EditCommentResponse', 'PostFlagResponse', 'CreateDontAgreeResponse', @@ -17,3 +17,4 @@ export default { 'StopIgnoringUserResponse', ) }; + diff --git a/client/coral-plugin-commentcontent/CommentContent.js b/client/coral-plugin-commentcontent/CommentContent.js deleted file mode 100644 index 501005b3d..000000000 --- a/client/coral-plugin-commentcontent/CommentContent.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -const name = 'coral-plugin-commentcontent'; - -const Content = ({body, styles}) => { - const textbreaks = body.split('\n'); - return
- { - textbreaks.map((line, i) => - {line}
-
) - } -
; -}; - -export default Content; diff --git a/client/coral-plugin-commentcontent/__tests__/commentContent.spec.js b/client/coral-plugin-commentcontent/__tests__/commentContent.spec.js deleted file mode 100644 index 377726b6d..000000000 --- a/client/coral-plugin-commentcontent/__tests__/commentContent.spec.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import {expect} from 'chai'; -import CommentContent from '../CommentContent'; - -describe('CommentContent', () => { - it('should render content', () => { - const render = shallow(); - expect(render.contains('test')).to.be.truthy; - }); -}); diff --git a/client/coral-plugin-history/Comment.js b/client/coral-plugin-history/Comment.js index cb188e53e..888989737 100644 --- a/client/coral-plugin-history/Comment.js +++ b/client/coral-plugin-history/Comment.js @@ -1,8 +1,9 @@ import React, {PropTypes} from 'react'; import {Icon} from '../coral-ui'; import styles from './Comment.css'; +import Slot from 'coral-framework/components/Slot'; import PubDate from '../coral-plugin-pubdate/PubDate'; -import Content from '../coral-plugin-commentcontent/CommentContent'; +import CommentContent from '../coral-embed-stream/src/components/CommentContent'; import t from 'coral-framework/services/i18n'; @@ -10,9 +11,11 @@ const Comment = (props) => { return (
-

{ return ActionModel.findOneAndRemove({ diff --git a/locales/en.yml b/locales/en.yml index ce9abdce5..e667c6f23 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -42,17 +42,17 @@ en: banned: Banned banned_user: "Banned User" cancel: Cancel - dont_like_username: "I don't like this username" + dont_like_username: "Dislike username" flaggedaccounts: "Flagged Usernames" flags: Flags - impersonating: "This user is impersonating" + impersonating: "Impersonation" loading: "Loading results" moderator: Moderator newsroom_role: "Newsroom Role" - no_flagged_accounts: "The Account Flags queue is currently empty." + no_flagged_accounts: "The Flagged Usernames queue is currently empty." no_results: "No users found with that user name or email address. They're hiding!" note: "Note: Banning this user will not let them edit comment or remove anything." - offensive: "This comment is offensive" + offensive: "Offensive" other: Other people: People role: "Select role..." @@ -144,8 +144,8 @@ en: auto_update: "Data automatically updates every five minutes or when you Reload." comment_count: comments flags: Flags - most_flags: "Articles with the most flags" - most_conversations: "Articles with the most conversations" + most_flags: "Stories with the most flags" + most_conversations: "Stories with the most conversations" next_update: "{0} minutes until next update." no_activity: "There haven't been any comments anywhere in the last five minutes." no_flags: "There have been no flags in the last 5 minutes! Hooray!" @@ -189,6 +189,7 @@ en: PASSWORD_REQUIRED: "Must input a password" COMMENTING_CLOSED: "Commenting is already closed" NOT_FOUND: "Resource not found" + ALREADY_EXISTS: "Resource already exists" INVALID_ASSET_URL: "Assert URL is invalid" email: "Not a valid E-Mail" confirm_password: "Passwords don't match. Please check again" diff --git a/locales/es.yml b/locales/es.yml index 1b483b70c..6897f6f8b 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -44,14 +44,14 @@ es: dont_like_username: "No me gusta este nombre de usuario" flaggedaccounts: "Nombres de Usuario Reportados" flags: Reportes - impersonating: "El usuario esta suplantando identidad" + impersonating: Impersonando loading: "Cargando resultados" moderator: Moderator newsroom_role: "Rol en la redacción" - no_flagged_accounts: "No hay ninguna cuenta reportada en este momento." + no_flagged_accounts: "No hay ningún nombre de usario reportado en este momento." no_results: "No se encontraron usuarios con ese nombre o correo." note: "Nota: Suspender a este usuario no le va a permitir (al usuario) borrar ni editar ni comentar." - offensive: "Este comentario es ofensivo" + offensive: Ofensivo other: Otro people: Gente role: "Seleccionar rol..." diff --git a/package.json b/package.json index f6a969de9..4295f5c25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "talk", - "version": "1.9.1", + "version": "2.0.0", "description": "A better commenting experience from Mozilla, The New York Times, and the Washington Post. https://coralproject.net", "main": "app.js", "scripts": { diff --git a/plugin-api/beta/client/components/index.js b/plugin-api/beta/client/components/index.js index 0330892bf..5d76732fc 100644 --- a/plugin-api/beta/client/components/index.js +++ b/plugin-api/beta/client/components/index.js @@ -1,2 +1 @@ export {Slot} from 'coral-framework/components'; -export {Icon} from 'coral-ui'; diff --git a/plugin-api/beta/client/components/ui/index.js b/plugin-api/beta/client/components/ui/index.js new file mode 100644 index 000000000..06ba38393 --- /dev/null +++ b/plugin-api/beta/client/components/ui/index.js @@ -0,0 +1 @@ +export * from 'coral-ui'; diff --git a/plugin-api/beta/client/hocs/withReaction.js b/plugin-api/beta/client/hocs/withReaction.js index 42ac79ec5..1ed777996 100644 --- a/plugin-api/beta/client/hocs/withReaction.js +++ b/plugin-api/beta/client/hocs/withReaction.js @@ -149,6 +149,9 @@ export default (reaction) => (WrappedComponent) => { client: PropTypes.object.isRequired, }; + // Whether or not a mutation is currently active. + duringMutation = false; + constructor(props, context) { super(props, context); @@ -208,6 +211,26 @@ export default (reaction) => (WrappedComponent) => { } } + postReaction = () => { + if (this.duringMutation) { + return; + } + this.duringMutation = true; + return this.props.postReaction(this.props.comment) + .then((result) => {this.duringMutation = false; return Promise.resolve(result); }) + .catch((err) => {this.duringMutation = false; throw err; }); + } + + deleteReaction = () => { + if (this.duringMutation) { + return; + } + this.duringMutation = true; + return this.props.deleteReaction(this.props.comment) + .then((result) => {this.duringMutation = false; return Promise.resolve(result); }) + .catch((err) => {this.duringMutation = false; throw err; }); + } + render() { const {comment} = this.props; @@ -223,9 +246,16 @@ export default (reaction) => (WrappedComponent) => { const alreadyReacted = !!reactionSummary; - const withReactionProps = {reactionSummary, count, alreadyReacted}; - - return ; + return ; } } @@ -240,16 +270,16 @@ export default (reaction) => (WrappedComponent) => { } `, { - props: ({mutate, ownProps}) => ({ - deleteReaction: () => { + props: ({mutate}) => ({ + deleteReaction: (comment) => { const reactionSummary = getMyActionSummary( `${Reaction}ActionSummary`, - ownProps.comment + comment ); const id = reactionSummary.current_user.id; - const item_id = ownProps.comment.id; + const item_id = comment.id; const input = {id}; return mutate({ @@ -283,11 +313,11 @@ export default (reaction) => (WrappedComponent) => { } `, { - props: ({mutate, ownProps}) => ({ - postReaction: () => { + props: ({mutate}) => ({ + postReaction: (comment) => { const input = { - item_id: ownProps.comment.id, + item_id: comment.id, }; return mutate({ diff --git a/plugin-api/beta/server/getReactionConfig.js b/plugin-api/beta/server/getReactionConfig.js index 83c45dcb5..78bc45dfd 100644 --- a/plugin-api/beta/server/getReactionConfig.js +++ b/plugin-api/beta/server/getReactionConfig.js @@ -1,5 +1,6 @@ const wrapResponse = require('../../../graph/helpers/response'); const {SEARCH_OTHER_USERS} = require('../../../perms/constants'); +const errors = require('../../../errors'); function getReactionConfig(reaction) { reaction = reaction.toLowerCase(); @@ -134,13 +135,24 @@ function getReactionConfig(reaction) { // The comment is needed to allow better filtering e.g. by asset_id. pubsub.publish(`${reaction}ActionCreated`, {action, comment}); return Promise.resolve(action); - }); + }) + .catch((err) => { + if (err instanceof errors.ErrAlreadyExists) { + return Promise.resolve(err.metadata.existing); + } + throw err; + }); }); return wrapResponse(reaction)(response); }, [`delete${Reaction}Action`]: (_, {input: {id}}, {mutators: {Action}, pubsub, loaders: {Comments}}) => { const response = Action.delete({id}) .then((action) => { + + // Action doesn't exist or was already deleted. + if (!action) { + return Promise.resolve(null); + } return Comments.get.load(action.item_id).then((comment) => { // The comment is needed to allow better filtering e.g. by asset_id. @@ -148,6 +160,7 @@ function getReactionConfig(reaction) { return Promise.resolve(action); }); }); + return wrapResponse(reaction)(response); } }, diff --git a/plugins.default.json b/plugins.default.json index 42515f354..7b2115421 100644 --- a/plugins.default.json +++ b/plugins.default.json @@ -11,6 +11,7 @@ "coral-plugin-like", "coral-plugin-auth", "coral-plugin-offtopic", - "coral-plugin-viewing-options" + "coral-plugin-viewing-options", + "coral-plugin-comment-content" ] } diff --git a/plugins/coral-plugin-auth/client/components/CreateUsernameDialog.js b/plugins/coral-plugin-auth/client/components/CreateUsernameDialog.js index 96df1e96f..12916b4dd 100644 --- a/plugins/coral-plugin-auth/client/components/CreateUsernameDialog.js +++ b/plugins/coral-plugin-auth/client/components/CreateUsernameDialog.js @@ -1,8 +1,7 @@ import React from 'react'; import styles from './styles.css'; -import {Dialog, Alert, TextField} from 'coral-ui'; +import {Dialog, Alert, TextField, Button} from 'plugin-api/beta/client/components/ui'; import {FakeComment} from './FakeComment'; -import Button from 'coral-ui/components/Button'; import t from 'coral-framework/services/i18n'; const CreateUsernameDialog = ({ @@ -33,7 +32,7 @@ const CreateUsernameDialog = ({ className={styles.fakeComment} username={formData.username} created_at={Date.now()} - body={t('createdisplay.fake_comment_body')} + comment={{body:t('createdisplay.fake_comment_body')}} />

{t('createdisplay.if_you_dont_change_your_name')} diff --git a/plugins/coral-plugin-auth/client/components/FakeComment.js b/plugins/coral-plugin-auth/client/components/FakeComment.js index 390dd409b..5517b72aa 100644 --- a/plugins/coral-plugin-auth/client/components/FakeComment.js +++ b/plugins/coral-plugin-auth/client/components/FakeComment.js @@ -1,17 +1,17 @@ import React from 'react'; +import t from 'coral-framework/services/i18n'; import {ReplyButton} from 'coral-plugin-replies'; import PubDate from 'coral-plugin-pubdate/PubDate'; +import Slot from 'coral-framework/components/Slot'; import AuthorName from 'coral-plugin-author-name/AuthorName'; -import Content from 'coral-plugin-commentcontent/CommentContent'; import styles from 'coral-embed-stream/src/components/Comment.css'; -import t from 'coral-framework/services/i18n'; -export const FakeComment = ({username, created_at, body}) => ( +export const FakeComment = ({username, created_at, comment}) => (


- +