Skip to content

Commit

Permalink
RocketChat#721 [EDIT] Возможность отправки писем данными формы совеща…
Browse files Browse the repository at this point in the history
…ния или поручения
  • Loading branch information
Scarvis committed Nov 13, 2020
1 parent fdd7b84 commit 01b3c42
Show file tree
Hide file tree
Showing 7 changed files with 198 additions and 83 deletions.
5 changes: 5 additions & 0 deletions app/api/server/lib/errands.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ export async function findDiscussionsWithErrandsFromRoom({ uid, roomId, paginati
};
}

export async function findErrand(_id) {
const cursor = await CustomErrand.findOne({ _id });
return cursor;
}

/*
export async function findErrandsOnMessage({ query = {}, pagination: { offset, count, sort } }) {
const cursor = await CustomErrand.find(query, {
Expand Down
9 changes: 8 additions & 1 deletion app/api/server/v1/errands.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { check, Match } from 'meteor/check';
import _ from 'underscore';

import { API } from '../api';
import { findErrands } from '../lib/errands';
import { findErrands, findErrand } from '../lib/errands';

import { saveCustomFields, saveUser } from '/app/lib';

Expand Down Expand Up @@ -83,6 +83,13 @@ API.v1.addRoute('errands', { authRequired: true }, {
},
});

API.v1.addRoute('errands.findOne', { authRequired: true }, {
get() {
const { query } = this.parseJsonQuery();
return API.v1.success(Promise.await(findErrand(query._id)));
},
});

API.v1.addRoute('errands.update', { authRequired: true }, {
post() {
/* check(this.bodyParams, {
Expand Down
22 changes: 14 additions & 8 deletions app/errand/client/views/errandsPage/EditErrand.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useCallback, useMemo, useState } from 'react';
import { Box, Button, Field, SelectFiltered, Skeleton, TextAreaInput, TextInput } from '@rocket.chat/fuselage';
import { Box, Button, ButtonGroup, Field, SelectFiltered, Skeleton, TextAreaInput, TextInput } from '@rocket.chat/fuselage';
import DatePicker, { registerLocale } from 'react-datepicker';
import ru from 'date-fns/locale/ru';
registerLocale('ru', ru);
Expand All @@ -17,11 +17,11 @@ import { useUserId } from '../../../../../client/contexts/UserContext';

require('react-datepicker/dist/react-datepicker.css');

export function EditErrandContextBar({ erid, onChange }) {
return <EditErrandWithData erid={erid} onChange={onChange}/>;
export function EditErrandContextBar({ erid, onChange, onClose }) {
return <EditErrandWithData erid={erid} onChange={onChange} onClose={onClose}/>;
}

function EditErrandWithData({ erid, onChange }) {
function EditErrandWithData({ erid, onChange, onClose }) {
const query = useMemo(() => ({
query: JSON.stringify({
_id: erid,
Expand All @@ -48,10 +48,10 @@ function EditErrandWithData({ erid, onChange }) {
return error.message;
}

return <EditErrand errand={data.result[0]} onChange={onChange}/>;
return <EditErrand errand={data.result[0]} onChange={onChange} onClose={onClose}/>;
}

function EditErrand({ errand, onChange }) {
function EditErrand({ errand, onChange, onClose }) {
const _t = useTranslation();
errand.expireAt = new Date(errand.expireAt);
const [newData, setNewData] = useState({});
Expand Down Expand Up @@ -99,6 +99,11 @@ function EditErrand({ errand, onChange }) {
!curUser && users.items.push(errand.chargedToUser);
const availableUsers = useMemo(() => users.items.map((item) => [item._id, item.username]), [users, users.items]);

const onEmailSendClick = () => {
onClose();
FlowRouter.go(`/manual-mail-sender/errand/${ errand._id }`);
};

const handleSave = async () => {
await Promise.all([hasUnsavedChanges && saveAction()].filter(Boolean));
if (newData.chargedToUser) {
Expand Down Expand Up @@ -168,9 +173,10 @@ function EditErrand({ errand, onChange }) {
</Field.Row>
</Field>
<Field>
<Field.Row>
<ButtonGroup>
<Button flexGrow={1} onClick={onEmailSendClick}>{_t('Send_email')}</Button>
<Button mie='none' flexGrow={1} disabled={!hasUnsavedChanges || (!isCurrentUsesResponsible() && !isCurrentUsesInitiator())} onClick={handleSave}>{_t('Save')}</Button>
</Field.Row>
</ButtonGroup>
</Field>
</VerticalBar.ScrollableContent>;
}
2 changes: 1 addition & 1 deletion app/errand/client/views/errandsPage/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ function renderEditModal({ onCancel, erid, onChange, ...props }) {
<Modal.Close onClick={onCancel}/>
</Modal.Header>
<Modal.Content fontScale='p1'>
<EditErrandContextBar erid={erid} onChange={onChange}/>
<EditErrandContextBar erid={erid} onChange={onChange} onClose={onCancel}/>
</Modal.Content>
</Modal>;
}
Expand Down
23 changes: 11 additions & 12 deletions app/manual-mail-sender/client/views/MailForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class DropdownTreeSelectContainer extends Component {
render() {
const { data, ...rest } = this.props;
return (
<DropdownTreeSelect data={this.state.data} {...rest} />
<DropdownTreeSelect data={this.state.data} contentClassName='date-picker' {...rest} />
);
}
}
Expand All @@ -69,6 +69,9 @@ function MailForm({ recipients, mailSubject, mailBody, defaultEmails }) {
const [email, setEmail] = useState('');
const [topic, setTopic] = useState('');
const [message, setMessage] = useState('');
const mailSubjectContext = mailSubject;
const mailBodyContext = mailBody;
const defaultEmailsContext = defaultEmails;

const t = useTranslation();

Expand All @@ -78,7 +81,7 @@ function MailForm({ recipients, mailSubject, mailBody, defaultEmails }) {

const dispatchToastMessage = useToastMessageDispatch();

const sendFromContext = useMemo(() => { return mailBody !== undefined && mailBody.length > 0 && mailSubject !== undefined && mailSubject.length > 0 }, [mailSubject, mailBody, defaultEmails]);
//const sendFromContext = useMemo(() => mailBodyContext !== undefined && mailBodyContext.length > 0 && mailSubjectContext !== undefined && mailSubjectContext.length > 0, [mailSubjectContext, mailBodyContext]);
//const allFieldAreFilled = useMemo(() => Object.values(newData).filter((current) => current.value.trim() === '' && current.required === true).length === 0, [JSON.stringify(newData)]);
const allFieldAreFilled = useMemo(() => email.trim() !== '' && topic.trim() !== '' && message.trim() !== '', [email, topic, message]);

Expand All @@ -87,17 +90,13 @@ function MailForm({ recipients, mailSubject, mailBody, defaultEmails }) {
const [files, setFiles] = useState([]);

useEffect(() => {
if (sendFromContext) {
setNewData({
email: { value: defaultEmails ?? '', required: true },
topic: { value: mailSubject, required: true },
message: { value: mailBody, required: true },
});
setEmail(defaultEmails ?? '');
setTopic(mailSubject);
setMessage(mailBody);
if (mailBodyContext !== undefined && mailBodyContext.length > 0 && mailSubjectContext !== undefined && mailSubjectContext.length > 0) {
console.log('rerender');
setEmail(defaultEmailsContext ?? '');
setTopic(mailSubjectContext);
setMessage(mailBodyContext);
}
}, [setNewData, sendFromContext, defaultEmails, mailSubject, mailBody]);
}, [mailSubjectContext, mailBodyContext, defaultEmailsContext]);

const handleImportFileChange = async (event) => {
event = event.originalEvent || event;
Expand Down
Loading

0 comments on commit 01b3c42

Please sign in to comment.