on master help sign in
Merge pull request #341 from urbit/mino-invite-msg

Allow inclusion of custom message when sending invites

commit75342bdbad9b3344c61784ea110bab9fc6329f08 authorFang <git@fang.io> dateFri 8 Nov 2019, 22:21 (7 years ago) parentbb6efa098fd7cb
3 files changed+37−14
src/lib/inviteMail.js+8−2 src/lib/useMailer.js+15−12 src/views/Invite/InviteEmail.js+14
src/lib/inviteMail.js+8−2
@@ -30,8 +30,14 @@ async function hasReceived(recipient) {
3030 return res.hasReceived;
3131}
3232
33−function sendMail(recipient, ticket, sender, tx) {
34− return sendRequest('/send-ticket', { recipient, ticket, sender, tx });
33+function sendMail(recipient, ticket, sender, message, tx) {
34+ return sendRequest('/send-ticket', {
35+ recipient,
36+ ticket,
37+ sender,
38+ message,
39+ tx,
40+ });
3541}
3642
3743export { hasReceived, sendMail };
src/lib/useMailer.js+15−12
@@ -26,18 +26,21 @@ export default function useMailer() {
2626
2727 // prefix to avoid clobbering sendMail import
2828 // also throws if return value is false
29− const _sendMail = useCallback(async (email, ticket, sender, rawTx) => {
30− if (STUB_MAILER) {
31− console.log(`${email} - ${ticket}`);
32− await timeout(Math.random() * 1000); // simulate request with randomness
33− return true;
34− }
35−
36− const success = await sendMail(email, ticket, sender, rawTx);
37− if (!success) {
38− throw new Error('Failed to send mail');
39− }
40− }, []);
29+ const _sendMail = useCallback(
30+ async (email, ticket, sender, message, rawTx) => {
31+ if (STUB_MAILER) {
32+ console.log(`${email} - ${ticket}`);
33+ await timeout(Math.random() * 1000); // simulate request with randomness
34+ return true;
35+ }
36+
37+ const success = await sendMail(email, ticket, sender, message, rawTx);
38+ if (!success) {
39+ throw new Error('Failed to send mail');
40+ }
41+ },
42+ []
43+ );
4144
4245 return { getHasReceived, sendMail: _sendMail };
4346}
src/views/Invite/InviteEmail.js+14
@@ -11,6 +11,7 @@ import * as azimuth from 'azimuth-js';
1111import {
1212 Grid,
1313 Flex,
14+ Input,
1415 IconButton,
1516 HelpText,
1617 Text,
@@ -127,6 +128,7 @@ export default function InviteEmail() {
127128 const [errors, addError] = useSetState();
128129
129130 // manage general state that affects the whole form
131+ const [message, setMessage] = useState('');
130132 const [status, setStatus] = useState(STATUS.INPUT);
131133 const [needFunds, setNeedFunds] = useState(null);
132134 const [generalError, setGeneralError] = useState(null);
@@ -347,6 +349,7 @@ export default function InviteEmail() {
347349 invite.email,
348350 invite.ticket,
349351 ob.patp(point),
352+ message,
350353 invite.rawTx
351354 );
352355 } catch (error) {
@@ -391,6 +394,7 @@ export default function InviteEmail() {
391394
392395 const onSubmit = useCallback(
393396 async values => {
397+ setMessage(values.message);
394398 cachedEmails.current = values.emails.reduce((memo, email, i) => {
395399 memo[nameForEmailField(i)] = email;
396400 return memo;
@@ -599,6 +603,16 @@ export default function InviteEmail() {
599603 );
600604 })}
601605
606+ <Grid.Item
607+ full
608+ as={Input}
609+ type="text"
610+ name="message"
611+ label="Message (optional)"
612+ placeholder="Welcome aboard!"
613+ value={message}
614+ />
615+
602616 {renderButton({ handleSubmit, fields })}
603617
604618 {needFunds && (