Skip to content

Commit 89ff984

Browse files
authored
fix: messages inconsistencies (#4174)
* fix: messages inconsistencies * fix * chore: message at the page * fix: permission grid styling broken * fix
1 parent 7136ad0 commit 89ff984

File tree

15 files changed

+97
-40
lines changed

15 files changed

+97
-40
lines changed

extensions/messages/extend.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
(new Extend\ApiResource(Resource\UserResource::class))
5252
->fields(fn () => [
5353
Schema\Boolean::make('canSendAnyMessage')
54-
->get(fn (object $model, Context $context) => $context->getActor()->can('sendAnyMessage')),
54+
->get(fn (User $user, Context $context) => $user->can('sendAnyMessage')),
5555
Schema\Integer::make('messageCount')
5656
->get(function (object $model, Context $context) {
5757
return Dialog::whereVisibleTo($context->getActor())

extensions/messages/js/src/@types/shims.d.ts renamed to extensions/messages/js/@types/shims.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,9 @@ declare module 'flarum/forum/states/ComposerState' {
1919
composingMessageTo(dialog: Dialog): boolean;
2020
}
2121
}
22+
23+
declare module 'flarum/common/models/User' {
24+
export default interface User {
25+
canSendAnyMessage(): boolean;
26+
}
27+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import DialogMessage from './models/DialogMessage';
22
import Dialog from './models/Dialog';
33
import Extend from 'flarum/common/extenders';
4+
import User from 'flarum/common/models/User';
45

56
export default [
67
new Extend.Store()
78
.add('dialogs', Dialog) //
89
.add('dialog-messages', DialogMessage), //
10+
11+
new Extend.Model(User) //
12+
.attribute<boolean>('canSendAnyMessage'),
913
];

extensions/messages/js/src/forum/components/DialogSection.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@ export default class DialogSection<CustomAttrs extends IDialogStreamAttrs = IDia
4242
<div className="DialogSection-header">
4343
<Avatar user={recipient} />
4444
<div className="DialogSection-header-info">
45-
{(recipient && (
46-
<Link href={app.route.user(recipient!)}>
47-
<h2>{username(recipient)}</h2>
48-
</Link>
49-
)) || <h2>{username(recipient)}</h2>}
45+
<h2 className="DialogSection-header-info-title">
46+
{(recipient && <Link href={app.route.user(recipient!)}>{username(recipient)}</Link>) || username(recipient)}
47+
{recipient && recipient.canSendAnyMessage() ? null : (
48+
<span className="DialogSection-header-info-helperText">
49+
{app.translator.trans('flarum-messages.forum.dialog_section.cannot_reply_text')}
50+
</span>
51+
)}
52+
</h2>
5053
<div className="badges">{listItems(recipient?.badges().toArray() || [])}</div>
5154
</div>
5255
<div className="DialogSection-header-actions">{this.actionItems().toArray()}</div>

extensions/messages/js/src/forum/components/MessageStream.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ export default class MessageStream<CustomAttrs extends IDialogStreamAttrs = IDia
106106

107107
messages.forEach((message, index) => items.push(this.messageItem(message, index)));
108108

109-
if (ReplyPlaceholder) {
109+
if (app.session.user!.canSendAnyMessage() && ReplyPlaceholder) {
110110
items.push(
111-
<div className="MessageStream-item" key="reply" /*data-index={this.attrs.state.count()}*/>
111+
<div className="MessageStream-item" key="reply">
112112
<ReplyPlaceholder
113113
discussion={this.attrs.dialog}
114114
onclick={() => {

extensions/messages/js/src/forum/components/MessagesSidebar.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ export default class MessagesSidebar<CustomAttrs extends IMessagesSidebarAttrs =
1414
items(): ItemList<Mithril.Children> {
1515
const items = super.items();
1616

17-
const canSendAnyMessage = app.session.user!.attribute<boolean>('canSendAnyMessage');
18-
1917
items.remove('newDiscussion');
2018

2119
items.add(
@@ -27,9 +25,11 @@ export default class MessagesSidebar<CustomAttrs extends IMessagesSidebarAttrs =
2725
onclick={() => {
2826
return this.newMessageAction();
2927
}}
30-
disabled={!canSendAnyMessage}
28+
disabled={!app.session.user!.canSendAnyMessage()}
3129
>
32-
{app.translator.trans('flarum-messages.forum.messages_page.new_message_button')}
30+
{app.session.user!.canSendAnyMessage()
31+
? app.translator.trans('flarum-messages.forum.messages_page.send_message_button')
32+
: app.translator.trans('flarum-messages.forum.messages_page.cannot_send_message_button')}
3333
</Button>,
3434
10
3535
);

extensions/messages/js/src/forum/index.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Button from 'flarum/common/components/Button';
88
import type Dialog from '../common/models/Dialog';
99
import DialogsDropdown from './components/DialogsDropdown';
1010
import DialogListState from './states/DialogListState';
11+
import type User from 'flarum/common/models/User';
1112

1213
export { default as extend } from './extend';
1314

@@ -44,14 +45,14 @@ app.initializers.add('flarum-messages', () => {
4445
});
4546

4647
extend(HeaderSecondary.prototype, 'items', function (items) {
47-
if (app.session.user?.attribute<boolean>('canSendAnyMessage')) {
48+
if (app.session.user?.canSendAnyMessage()) {
4849
items.add('messages', <DialogsDropdown state={app.dropdownDialogs} />, 15);
4950
}
5051
});
5152

5253
// @ts-ignore
53-
extend(UserControls, 'userControls', (items, user) => {
54-
if (app.session.user?.attribute<boolean>('canSendAnyMessage')) {
54+
extend(UserControls, 'userControls', (items, user: User) => {
55+
if (app.session.user?.canSendAnyMessage()) {
5556
items.add(
5657
'sendMessage',
5758
<Button
@@ -66,6 +67,7 @@ app.initializers.add('flarum-messages', () => {
6667
.then(() => app.composer.show());
6768
});
6869
}}
70+
helperText={user.canSendAnyMessage() ? null : app.translator.trans('flarum-messages.forum.user_controls.cannot_reply_text')}
6971
>
7072
{app.translator.trans('flarum-messages.forum.user_controls.send_message_button')}
7173
</Button>

extensions/messages/less/forum.less

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,17 @@
232232
gap: 6px;
233233
}
234234

235+
.DialogSection-header-info-title {
236+
display: flex;
237+
flex-direction: column;
238+
}
239+
240+
.DialogSection-header-info-helperText {
241+
font-size: 0.8rem;
242+
font-weight: normal;
243+
color: var(--control-color);
244+
}
245+
235246
.DialogSection-back {
236247
display: flex;
237248

extensions/messages/locale/en.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ flarum-messages:
2222

2323
dialog_section:
2424
back_label: Go back
25+
cannot_reply_text: This user cannot reply
2526
controls:
2627
details_button: Details
2728
controls_toggle_label: Dialog control actions
@@ -42,14 +43,14 @@ flarum-messages:
4243
oldest_button: Oldest
4344

4445
messages_page:
45-
empty_text: You have no messages yet. When you send or receive messages, they
46-
will appear here.
46+
cannot_send_message_button: Can't Send a Message
47+
empty_text: No new messages
4748
hero:
4849
title: Messages
4950
subtitle: Your private conversations with other users
5051
mark_all_as_read_tooltip: Mark all as read
51-
new_message_button: Send a Message
5252
refresh_tooltip: Refresh
53+
send_message_button: Send a Message
5354
stream:
5455
load_previous_button: Load previous messages
5556
start_of_the_conversation: Start of the conversation
@@ -64,6 +65,7 @@ flarum-messages:
6465

6566
user_controls:
6667
send_message_button: Send a message
68+
cannot_reply_text: This user cannot reply
6769

6870
notifications:
6971
message_received_text: Message Received notification from {user}

extensions/tags/js/src/admin/addTagsPermissionScope.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ export default function () {
7878
'tag',
7979
<Dropdown
8080
className="Dropdown--restrictByTag"
81-
buttonClassName="Button Button--text"
81+
buttonClassName="Button Button--link"
8282
label={app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading')}
8383
icon="fas fa-plus"
8484
caretIcon={null}
8585
>
8686
{tags.map((tag) => (
87-
<Button icon={true} onclick={() => tag.save({ isRestricted: true })}>
88-
{[tagIcon(tag, { className: 'Button-icon' }), ' ', tag.name()]}
87+
<Button icon={tagIcon(tag, { className: 'Button-icon' })} onclick={() => tag.save({ isRestricted: true })}>
88+
{tag.name()}
8989
</Button>
9090
))}
9191
</Dropdown>

0 commit comments

Comments
 (0)