mirror of
https://github.com/astuto/astuto.git
synced 2025-12-15 19:27:52 +01:00
Add staff badge near comment author (#280)
This commit is contained in:
committed by
GitHub
parent
1d5df21301
commit
5221df1b2b
@@ -277,3 +277,8 @@ body {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.staffIcon {
|
||||||
|
font-size: 24px;
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ class CommentsController < ApplicationController
|
|||||||
:updated_at,
|
:updated_at,
|
||||||
'users.full_name as user_full_name',
|
'users.full_name as user_full_name',
|
||||||
'users.email as user_email',
|
'users.email as user_email',
|
||||||
|
'users.role as user_role',
|
||||||
)
|
)
|
||||||
.where(post_id: params[:post_id])
|
.where(post_id: params[:post_id])
|
||||||
.left_outer_joins(:user)
|
.left_outer_joins(:user)
|
||||||
@@ -28,7 +29,7 @@ class CommentsController < ApplicationController
|
|||||||
SendNotificationForCommentWorkflow.new(comment: @comment).run
|
SendNotificationForCommentWorkflow.new(comment: @comment).run
|
||||||
|
|
||||||
render json: @comment.attributes.merge(
|
render json: @comment.attributes.merge(
|
||||||
{ user_full_name: current_user.full_name, user_email: current_user.email }
|
{ user_full_name: current_user.full_name, user_email: current_user.email, user_role: current_user.role_before_type_cast }
|
||||||
), status: :created
|
), status: :created
|
||||||
else
|
else
|
||||||
render json: {
|
render json: {
|
||||||
@@ -43,7 +44,7 @@ class CommentsController < ApplicationController
|
|||||||
|
|
||||||
if @comment.update(comment_update_params)
|
if @comment.update(comment_update_params)
|
||||||
render json: @comment.attributes.merge(
|
render json: @comment.attributes.merge(
|
||||||
{ user_full_name: @comment.user.full_name, user_email: @comment.user.email }
|
{ user_full_name: @comment.user.full_name, user_email: @comment.user.email, user_role: @comment.user.role_before_type_cast }
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
render json: {
|
render json: {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { ReplyFormState } from '../../reducers/replyFormReducer';
|
|||||||
|
|
||||||
import CommentEditForm from './CommentEditForm';
|
import CommentEditForm from './CommentEditForm';
|
||||||
import CommentFooter from './CommentFooter';
|
import CommentFooter from './CommentFooter';
|
||||||
|
import { StaffIcon } from '../common/Icons';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -16,6 +17,7 @@ interface Props {
|
|||||||
isPostUpdate: boolean;
|
isPostUpdate: boolean;
|
||||||
userFullName: string;
|
userFullName: string;
|
||||||
userEmail: string;
|
userEmail: string;
|
||||||
|
userRole: number;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
|
|
||||||
@@ -68,6 +70,7 @@ class Comment extends React.Component<Props, State> {
|
|||||||
isPostUpdate,
|
isPostUpdate,
|
||||||
userFullName,
|
userFullName,
|
||||||
userEmail,
|
userEmail,
|
||||||
|
userRole,
|
||||||
createdAt,
|
createdAt,
|
||||||
updatedAt,
|
updatedAt,
|
||||||
|
|
||||||
@@ -88,6 +91,9 @@ class Comment extends React.Component<Props, State> {
|
|||||||
<div className="commentHeader">
|
<div className="commentHeader">
|
||||||
<Gravatar email={userEmail} size={28} className="gravatar" />
|
<Gravatar email={userEmail} size={28} className="gravatar" />
|
||||||
<span className="commentAuthor">{userFullName}</span>
|
<span className="commentAuthor">{userFullName}</span>
|
||||||
|
|
||||||
|
{ userRole > 0 && <StaffIcon /> }
|
||||||
|
|
||||||
{
|
{
|
||||||
isPostUpdate ?
|
isPostUpdate ?
|
||||||
<span className="postUpdateBadge">
|
<span className="postUpdateBadge">
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import I18n from 'i18n-js';
|
||||||
|
|
||||||
import { BsReply } from 'react-icons/bs';
|
import { BsReply } from 'react-icons/bs';
|
||||||
import { FiEdit, FiDelete } from 'react-icons/fi';
|
import { FiEdit, FiDelete } from 'react-icons/fi';
|
||||||
@@ -7,6 +8,7 @@ import { TbLock, TbLockOpen } from 'react-icons/tb';
|
|||||||
import { MdContentCopy, MdDone, MdOutlineArrowBack } from 'react-icons/md';
|
import { MdContentCopy, MdDone, MdOutlineArrowBack } from 'react-icons/md';
|
||||||
import { GrTest } from 'react-icons/gr';
|
import { GrTest } from 'react-icons/gr';
|
||||||
import { MdOutlineLibraryBooks } from "react-icons/md";
|
import { MdOutlineLibraryBooks } from "react-icons/md";
|
||||||
|
import { MdVerified } from "react-icons/md";
|
||||||
|
|
||||||
export const EditIcon = () => <FiEdit />;
|
export const EditIcon = () => <FiEdit />;
|
||||||
|
|
||||||
@@ -29,3 +31,9 @@ export const BackIcon = () => <MdOutlineArrowBack />;
|
|||||||
export const ReplyIcon = () => <BsReply />;
|
export const ReplyIcon = () => <BsReply />;
|
||||||
|
|
||||||
export const LearnMoreIcon = () => <MdOutlineLibraryBooks />;
|
export const LearnMoreIcon = () => <MdOutlineLibraryBooks />;
|
||||||
|
|
||||||
|
export const StaffIcon = () => (
|
||||||
|
<span title={I18n.t('common.user_staff')} className="staffIcon">
|
||||||
|
<MdVerified />
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ interface IComment {
|
|||||||
isPostUpdate: boolean;
|
isPostUpdate: boolean;
|
||||||
userFullName: string;
|
userFullName: string;
|
||||||
userEmail: string;
|
userEmail: string;
|
||||||
|
userRole: number;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ interface ICommentJSON {
|
|||||||
is_post_update: boolean;
|
is_post_update: boolean;
|
||||||
user_full_name: string;
|
user_full_name: string;
|
||||||
user_email: string;
|
user_email: string;
|
||||||
|
user_role: number;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
updated_at: string;
|
updated_at: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const initialState: IComment = {
|
|||||||
isPostUpdate: false,
|
isPostUpdate: false,
|
||||||
userFullName: '<Unknown user>',
|
userFullName: '<Unknown user>',
|
||||||
userEmail: 'example@example.com',
|
userEmail: 'example@example.com',
|
||||||
|
userRole: 0,
|
||||||
createdAt: undefined,
|
createdAt: undefined,
|
||||||
updatedAt: undefined,
|
updatedAt: undefined,
|
||||||
};
|
};
|
||||||
@@ -35,6 +36,7 @@ const commentReducer = (
|
|||||||
isPostUpdate: action.comment.is_post_update,
|
isPostUpdate: action.comment.is_post_update,
|
||||||
userFullName: action.comment.user_full_name,
|
userFullName: action.comment.user_full_name,
|
||||||
userEmail: action.comment.user_email,
|
userEmail: action.comment.user_email,
|
||||||
|
userRole: action.comment.user_role,
|
||||||
createdAt: action.comment.created_at,
|
createdAt: action.comment.created_at,
|
||||||
updatedAt: action.comment.updated_at,
|
updatedAt: action.comment.updated_at,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ en:
|
|||||||
enabled: 'Enabled'
|
enabled: 'Enabled'
|
||||||
disabled: 'Disabled'
|
disabled: 'Disabled'
|
||||||
copied: 'Copied!'
|
copied: 'Copied!'
|
||||||
|
user_staff: 'Staff'
|
||||||
buttons:
|
buttons:
|
||||||
new: 'New'
|
new: 'New'
|
||||||
edit: 'Edit'
|
edit: 'Edit'
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"react-dom": "16.9.0",
|
"react-dom": "16.9.0",
|
||||||
"react-gravatar": "2.6.3",
|
"react-gravatar": "2.6.3",
|
||||||
"react-hook-form": "7.33.1",
|
"react-hook-form": "7.33.1",
|
||||||
"react-icons": "4.4.0",
|
"react-icons": "5.0.1",
|
||||||
"react-infinite-scroller": "1.2.4",
|
"react-infinite-scroller": "1.2.4",
|
||||||
"react-markdown": "5.0.3",
|
"react-markdown": "5.0.3",
|
||||||
"react-redux": "7.1.1",
|
"react-redux": "7.1.1",
|
||||||
|
|||||||
@@ -2411,10 +2411,10 @@ react-hook-form@7.33.1:
|
|||||||
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0"
|
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0"
|
||||||
integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==
|
integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==
|
||||||
|
|
||||||
react-icons@4.4.0:
|
react-icons@5.0.1:
|
||||||
version "4.4.0"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703"
|
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.0.1.tgz#1694e11bfa2a2888cab47dcc30154ce90485feee"
|
||||||
integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==
|
integrity sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==
|
||||||
|
|
||||||
react-infinite-scroller@1.2.4:
|
react-infinite-scroller@1.2.4:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
|
|||||||
Reference in New Issue
Block a user