mirror of
https://github.com/flarum/core.git
synced 2025-08-23 08:33:45 +02:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8fd6dbc3fd | ||
|
1f09ff1942 |
@@ -30,6 +30,9 @@ export default class Dialog extends Model {
|
|||||||
unreadCount() {
|
unreadCount() {
|
||||||
return Model.attribute<number>('unreadCount').call(this);
|
return Model.attribute<number>('unreadCount').call(this);
|
||||||
}
|
}
|
||||||
|
lastMessageId() {
|
||||||
|
return Model.attribute<number>('lastMessageId').call(this);
|
||||||
|
}
|
||||||
lastReadMessageId() {
|
lastReadMessageId() {
|
||||||
return Model.attribute<number>('lastReadMessageId').call(this);
|
return Model.attribute<number>('lastReadMessageId').call(this);
|
||||||
}
|
}
|
||||||
|
@@ -59,6 +59,56 @@ const MessageControls = {
|
|||||||
|
|
||||||
return message.delete().then(() => {
|
return message.delete().then(() => {
|
||||||
context.attrs.state.remove(message);
|
context.attrs.state.remove(message);
|
||||||
|
|
||||||
|
const dialog = message.dialog();
|
||||||
|
|
||||||
|
if (dialog) {
|
||||||
|
const noMessagesLeft =
|
||||||
|
context.attrs.state.getAllItems().filter((m) => {
|
||||||
|
const mDialog = m.dialog();
|
||||||
|
|
||||||
|
if (!mDialog) return false;
|
||||||
|
|
||||||
|
return mDialog?.id() === dialog!.id();
|
||||||
|
}).length === 0;
|
||||||
|
|
||||||
|
if (noMessagesLeft) {
|
||||||
|
app.dialogs.remove(dialog!);
|
||||||
|
m.route.set(app.route('messages'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parseInt(message.id()!) === dialog.lastMessageId()) {
|
||||||
|
const lastMessage = context.attrs.state
|
||||||
|
.getAllItems()
|
||||||
|
.filter((m) => {
|
||||||
|
const mDialog = m.dialog();
|
||||||
|
|
||||||
|
if (!mDialog) return false;
|
||||||
|
|
||||||
|
return mDialog.id() === dialog?.id();
|
||||||
|
})
|
||||||
|
.sort((a, b) => parseInt(a.id()!) - parseInt(b.id()!))
|
||||||
|
.pop();
|
||||||
|
|
||||||
|
if (lastMessage) {
|
||||||
|
dialog!.pushData({
|
||||||
|
relationships: {
|
||||||
|
...dialog!.data.relationships,
|
||||||
|
lastMessage: {
|
||||||
|
data: {
|
||||||
|
type: 'dialog-messages',
|
||||||
|
id: lastMessage.id()!,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
dialog.pushAttributes({
|
||||||
|
lastMessageId: parseInt(lastMessage.id()!),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m.redraw();
|
m.redraw();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@@ -68,9 +68,6 @@ class DialogResource extends Resource\AbstractDatabaseResource
|
|||||||
$connection = UserDialogState::query()->getConnection();
|
$connection = UserDialogState::query()->getConnection();
|
||||||
$grammar = UserDialogState::query()->getGrammar();
|
$grammar = UserDialogState::query()->getGrammar();
|
||||||
|
|
||||||
$table = $grammar->wrapTable('dialogs');
|
|
||||||
$column = $grammar->wrap('last_message_id');
|
|
||||||
|
|
||||||
UserDialogState::query()
|
UserDialogState::query()
|
||||||
->where('dialog_user.user_id', $context->getActor()->id)
|
->where('dialog_user.user_id', $context->getActor()->id)
|
||||||
->update([
|
->update([
|
||||||
@@ -121,6 +118,7 @@ class DialogResource extends Resource\AbstractDatabaseResource
|
|||||||
->get(function (Dialog $dialog) {
|
->get(function (Dialog $dialog) {
|
||||||
return $dialog->state->last_read_at;
|
return $dialog->state->last_read_at;
|
||||||
}),
|
}),
|
||||||
|
Schema\Integer::make('lastMessageId'),
|
||||||
Schema\Integer::make('lastReadMessageId')
|
Schema\Integer::make('lastReadMessageId')
|
||||||
->visible(fn (Dialog $dialog) => $dialog->state !== null)
|
->visible(fn (Dialog $dialog) => $dialog->state !== null)
|
||||||
->get(function (Dialog $dialog) {
|
->get(function (Dialog $dialog) {
|
||||||
|
@@ -70,6 +70,24 @@ class DialogMessage extends AbstractModel implements Formattable
|
|||||||
->toSql()
|
->toSql()
|
||||||
.')');
|
.')');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
static::deleted(function (self $message) {
|
||||||
|
if ($message->dialog) {
|
||||||
|
if ($message->dialog->messages()->count() === 0) {
|
||||||
|
$message->dialog->delete();
|
||||||
|
} elseif ($message->dialog->first_message_id === $message->id) {
|
||||||
|
$message->dialog->setFirstMessage(
|
||||||
|
$message->dialog->messages()->oldest('id')->first()
|
||||||
|
);
|
||||||
|
$message->dialog->save();
|
||||||
|
} elseif ($message->dialog->last_message_id === $message->id) {
|
||||||
|
$message->dialog->setLastMessage(
|
||||||
|
$message->dialog->messages()->latest('id')->first()
|
||||||
|
);
|
||||||
|
$message->dialog->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dialog(): BelongsTo
|
public function dialog(): BelongsTo
|
||||||
|
@@ -63,7 +63,6 @@ import './components/FieldSet';
|
|||||||
import './components/Select';
|
import './components/Select';
|
||||||
import './components/Navigation';
|
import './components/Navigation';
|
||||||
import './components/Alert';
|
import './components/Alert';
|
||||||
import './components/LabelValue';
|
|
||||||
import './components/Link';
|
import './components/Link';
|
||||||
import './components/LinkButton';
|
import './components/LinkButton';
|
||||||
import './components/Checkbox';
|
import './components/Checkbox';
|
||||||
|
Reference in New Issue
Block a user