Бэкенд: регистрация со входом сразу и /api/config, профиль и смена пароля, свои папки, PATCH письма (прочитано, флажок, перенос; Спам ставит отметку), корзина и очистка, черновики, несколько адресатов и копия, вложения черновика уходят с письмом, вложения и заголовки To/Cc входящих сохраняются, письма заблокированных — в Спам. Исправлено: загрузка файла (415), колонка content_id (500 на любых вложениях), SPA-маршрут с точкой. Фронтенд переписан: все таблицы — грид, оформление — шаблон synthwave-design-showcase.html. α Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
947 B
TypeScript
27 lines
947 B
TypeScript
import { Provider, inject } from '@angular/core';
|
|
import { JT_GRID_BULK_UI, JtGridBulkUi } from '@jambotron/aria-grid';
|
|
import { DialogService } from './dialog.service';
|
|
import { ToastService } from './toast.service';
|
|
|
|
/** The grid's bulk actions ask through our glass dialog and report through our toasts. */
|
|
export function provideMailGrid(): Provider[] {
|
|
return [{
|
|
provide: JT_GRID_BULK_UI,
|
|
useFactory: (): JtGridBulkUi => {
|
|
const dialogs = inject(DialogService);
|
|
const toasts = inject(ToastService);
|
|
return {
|
|
ask: request => dialogs.ask({
|
|
title: request.title,
|
|
message: request.message,
|
|
confirmLabel: request.confirmLabel,
|
|
danger: request.danger,
|
|
...(request.reason ? { input: '', inputLabel: 'Reason', required: true } : {})
|
|
}),
|
|
success: message => toasts.ok(message),
|
|
error: message => toasts.error(message)
|
|
};
|
|
}
|
|
}];
|
|
}
|