@rkosafo/cai.components
Version:
This package is under development and not ready for public use.
136 lines (135 loc) • 4.82 kB
TypeScript
import type { CrudResult, PaginatedResult, TableFilter } from '../../index.js';
import type { Snippet } from 'svelte';
export interface MailPageInfo {
currentPage: number;
pageSize: number;
totalCount: number;
hasNextPage: boolean;
hasPreviousPage: boolean;
}
export interface MailPaginatorProps extends MailPageInfo {
onNextClick: () => void;
onPreviousClick: () => void;
}
export type MailFavariteToggleType = 'favorite' | 'unfavorite';
export type MailMarkReadToggleType = 'read' | 'unread';
export interface MailToolBarProps {
onBackClick: () => void;
onRefreshClick: () => void;
onComposeClick?: () => void;
selectedMails?: number[];
showComposeButton?: boolean;
showBackButton?: boolean;
pageInfo?: MailPageInfo;
showPagination?: boolean;
showSearch?: boolean;
customFilterComponent?: Snippet;
onsearchChange?: (searchTerm: string) => void;
onNextPageClick?: () => void;
onPrevPageClick?: () => void;
showArchiveButton?: boolean;
onArchiveClick?: () => void;
showDeleteButton?: boolean;
onDeleteClick?: () => void;
showMarkReadButton?: boolean;
onToggleMarkReadClick?: (val: MailMarkReadToggleType) => void;
showFavoriteButton?: boolean;
isReadActive?: boolean;
onToggleFavoriteClick?: (val: MailFavariteToggleType) => void;
showMarkAsSpamButton?: boolean;
onMarkAsSpamClick?: () => void;
isFavoriteActive?: boolean;
}
export interface MailMenu {
icon: string;
title: string;
count: number;
path: string;
}
export interface MailSidebar {
menus: MailMenu[];
setActiveMenu?: (val: MailMenu) => boolean;
onClick?: (val: MailMenu) => void;
}
export interface MailingModuleProps {
showSidePanel?: boolean;
showPagination?: boolean;
showComposeButton?: boolean;
showSearch?: boolean;
customFilterComponent?: Snippet;
showArchiveButton?: boolean;
showDeleteButton?: boolean;
showMarkReadButton?: boolean;
showFavoriteButton?: boolean;
showMarkAsSpamButton?: boolean;
showMarkAsImportantButton?: boolean;
readInbox: (skip?: number, take?: number, filter?: TableFilter<any>) => Promise<PaginatedResult<MailingMessage>> | PaginatedResult<MailingMessage> | null;
readOutbox?: (skip?: number, take?: number, filter?: TableFilter<any>) => Promise<PaginatedResult<MailingMessage>> | PaginatedResult<MailingMessage> | null;
toggleArchieve?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
toggleSpam?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
deleteEntry?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
toggleAsRead?: (id: string | number, type?: MailMarkReadToggleType) => Promise<CrudResult<any>> | CrudResult<any> | null;
toggleFavourite?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
toggelImportant?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
readAMessage: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
showReplies?: boolean;
}
export interface MailingMessageCardChecked {
id: number;
checked: boolean;
}
export interface MailingMessage {
id: number;
sender: string;
subject: string;
date: Date;
message: string;
notes?: string;
isStared: boolean;
isImportant: boolean;
isRead: boolean;
isChecked?: boolean;
isSent?: boolean;
isHtml?: boolean;
refEntityId?: number;
receiver: string;
user?: {
id: number;
firstName: string;
surname: string;
staffNumber?: string;
};
}
export interface MailingMessageCardProps extends MailingMessage {
onItemSelected?: (id: number) => void;
onItemChecked?: (val: MailingMessageCardChecked) => void;
toggelImportant?: (id: number) => void;
toggleFavorited?: (id: number) => void;
showMarkAsImportant?: boolean;
showMarkAsFavorite?: boolean;
showCheckbox?: boolean;
}
export type MailingActiveBox = 'inbox' | 'outbox';
export interface MailingMessageViewerProps {
readMessage: (id: number, type?: MailingActiveBox) => Promise<CrudResult<MailingMessage>> | CrudResult<MailingMessage> | null;
recordId: number;
updatePageInfo?: (val: MailPageInfo) => void;
showReplies?: boolean;
showHeader?: boolean;
}
export interface MailingHeaderData {
subject: string;
user: {
firstName: string;
surname: string;
staffNumber: string;
initials: string;
};
to: string;
}
export type MailingReplyType = 'reply' | 'reply-all' | 'forward';
export interface MailingHeaderProps {
data: MailingHeaderData;
replyType: MailingReplyType | undefined;
showReplies?: boolean;
}