/* eslint react/no-danger: "off" */
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { Button, Box, Section, Table, LabeledList, Input, Tabs, Flex, AnimatedNumber, ProgressBar } from '../components';
import { NtosWindow } from '../layouts';
import { round } from 'common/math';
export const NtosEmailClient = (props, context) => {
const { act, data } = useBackend(context);
const { PC_device_theme, error, downloading, current_account } = data;
let content = ;
if (error) {
content = ;
} else if (downloading) {
content = ;
} else if (current_account) {
content = ;
}
return (
{content}
);
};
const NtosEmailClientDownloading = (props, context) => {
const { act, data } = useBackend(context);
const { down_filename, down_progress, down_size, down_speed } = data;
return (
{down_filename} ({down_size} GQ)
GQ/s
{down_progress}/{down_size} ({round((down_progress / down_size) * 100, 1)}%)
);
};
const NtosEmailClientContent = (props, context) => {
const { act, data } = useBackend(context);
const { current_account, addressbook, new_message, cur_title } = data;
let content = ;
if (addressbook) {
content = ;
} else if (new_message) {
content = ;
} else if (cur_title) {
content = ;
}
return (
);
};
const NtosEmailClientInbox = (props, context) => {
const { act, data } = useBackend(context);
const { current_account, folder, messagecount, messages } = data;
return (
act('set_folder', { 'set_folder': 'Inbox' })}>
Inbox
act('set_folder', { 'set_folder': 'Spam' })}>
Spam
act('set_folder', { 'set_folder': 'Deleted' })}>
Deleted
{(messagecount && (
Source
Title
Received At
Actions
{messages.map((msg) => (
{msg.source}
{msg.title}
{msg.timestamp}
act('view', { view: msg.uid })} tooltip="View" />
act('reply', { reply: msg.uid })} tooltip="Reply" />
act('delete', { delete: msg.uid })}
tooltip="Delete"
/>
))}
)) || No emails found in {folder}.}
);
};
export const NtosEmailClientViewMessage = (props, context) => {
const { act, data } = useBackend(context);
// This is used to let NtosEmailAdministration use the same code for spying on emails
// Administrators don't have access to attachments or the message UID, so we need to avoid
// using those data attributes, as well as a slightly different act() model.
const { administrator } = props;
const {
cur_title,
cur_source,
cur_timestamp,
cur_body,
cur_hasattachment,
cur_attachment_filename,
cur_attachment_size,
cur_uid,
} = data;
return (
act('back')} />
) : (
act('reply', { reply: cur_uid })}
/>
act('delete', { delete: cur_uid })}
/>
act('save', { save: cur_uid })}
/>
{(cur_hasattachment && (
act('downloadattachment')}
/>
)) ||
null}
act('cancel', { cancel: cur_uid })}
/>
)
}>
{cur_source}
{cur_timestamp}
{(cur_hasattachment && !administrator && (
{cur_attachment_filename} ({cur_attachment_size}GQ)
)) ||
null}
{/* This dangerouslySetInnerHTML is only ever passed data that has passed through pencode2html
* It should be safe enough to support pencode in this way.
*/}
);
};
const NtosEmailClientAddressBook = (props, context) => {
const { act, data } = useBackend(context);
const { accounts } = data;
return (
act('set_recipient', { set_recipient: null })} />}>
{accounts.map((acc) => (
act('set_recipient', { set_recipient: acc.login })}
/>
))}
);
};
const NtosEmailClientNewMessage = (props, context) => {
const { act, data } = useBackend(context);
const {
current_account,
msg_title,
msg_recipient,
msg_body,
msg_hasattachment,
msg_attachment_filename,
msg_attachment_size,
} = data;
return (
);
};
const NtosEmailClientError = (props, context) => {
const { act } = useBackend(context);
const { error } = props;
return (
act('reset')} />}>
{error}
);
};
const NtosEmailClientLogin = (props, context) => {
const { act, data } = useBackend(context);
const { stored_login, stored_password } = data;
return (
);
};