Skip to content

Commit

Permalink
Merge pull request #742 from bigcapitalhq/fix-send-invoice-addresses
Browse files Browse the repository at this point in the history
fix: send invoice receipt addresses
  • Loading branch information
abouolia authored Nov 6, 2024
2 parents de8a867 + c32aff8 commit 107532f
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 8 deletions.
7 changes: 7 additions & 0 deletions packages/server/src/lib/Mail/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export default class Mail {
to: string | string[];
cc: string | string[];
bcc: string | string[];
replyTo: string | string[];
from: string = `${process.env.MAIL_FROM_NAME} ${process.env.MAIL_FROM_ADDRESS}`;
data: { [key: string]: string | number };
attachments: IMailAttachment[];
Expand All @@ -27,6 +28,7 @@ export default class Mail {
subject: this.subject,
html: this.html,
attachments: this.attachments,
replyTo: this.replyTo,
};
}

Expand Down Expand Up @@ -74,6 +76,11 @@ export default class Mail {
return this;
}

setReplyTo(replyTo: string | string[]) {
this.replyTo = replyTo;
return this;
}

/**
* Sets from address to the mail.
* @param {string} from
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,19 @@ export class GetSaleInvoiceMailStateTransformer extends SaleInvoiceTransformer {
'companyLogoUri',

'primaryColor',

'customerName',
];
};

/**
* Retrieves the customer name of the invoice.
* @returns {string}
*/
protected customerName = (invoice) => {
return invoice.customer.displayName;
};

/**
* Retrieves the company name.
* @returns {string}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,13 @@ export function InvoiceSendMailFields() {
[setFieldValue],
);

const handleTagInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
// Prevent the form from submitting when the user presses the Enter key
if (e.key === 'Enter') {
e.preventDefault();
}
};

return (
<Stack
bg="white"
Expand All @@ -174,6 +181,9 @@ export function InvoiceSendMailFields() {
tagProps: { round: true, minimal: true, large: true },
rightElement: rightElementsToField,
large: true,
inputProps: {
onKeyDown: handleTagInputKeyDown,
},
}}
createNewItemRenderer={createNewItemRenderer}
createNewItemFromQuery={createNewItemFromQuery}
Expand All @@ -192,6 +202,9 @@ export function InvoiceSendMailFields() {
tagInputProps={{
tagProps: { round: true, minimal: true, large: true },
large: true,
inputProps: {
onKeyDown: handleTagInputKeyDown,
},
}}
createNewItemRenderer={createNewItemRenderer}
createNewItemFromQuery={createNewItemFromQuery}
Expand All @@ -211,6 +224,9 @@ export function InvoiceSendMailFields() {
tagInputProps={{
tagProps: { round: true, minimal: true, large: true },
large: true,
inputProps: {
onKeyDown: handleTagInputKeyDown,
},
}}
createNewItemRenderer={createNewItemRenderer}
createNewItemFromQuery={createNewItemFromQuery}
Expand Down Expand Up @@ -244,6 +260,9 @@ export function InvoiceSendMailFields() {
fill: false,
position: Position.BOTTOM_LEFT,
minimal: true,
inputProps: {
onKeyDown: handleTagInputKeyDown,
},
}}
input={() => (
<Button
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ export const InvoiceSendMailFormSchema = Yup.object().shape({
subject: Yup.string().required('Subject is required'),
message: Yup.string().required('Message is required'),
to: Yup.array()
.of(Yup.string().email('Invalid email'))
.of(Yup.string().email('Invalid email address'))
.required('To address is required'),
cc: Yup.array().of(Yup.string().email('Invalid email')),
bcc: Yup.array().of(Yup.string().email('Invalid email')),
cc: Yup.array().of(Yup.string().email('Invalid email address')),
bcc: Yup.array().of(Yup.string().email('Invalid email address')),
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export function InvoiceSendMailHeaderPreview() {
const mailSubject = useSendInvoiceMailSubject();
const { invoiceMailState } = useInvoiceSendMailBoot();
const toAddresses = useMailHeaderToAddresses();
const fromAddresses = useMailHeaderFromAddresses();

return (
<Stack
Expand Down Expand Up @@ -44,14 +45,12 @@ export function InvoiceSendMailHeaderPreview() {

<Stack spacing={2}>
<Group spacing={2}>
<Box fontWeight={600}>Ahmed </Box>
<Box color={'#738091'}>
&lt;[email protected]&gt;
</Box>
<Box fontWeight={600}>{invoiceMailState?.companyName} </Box>
<Box color={'#738091'}>{fromAddresses}</Box>
</Group>

<Box fontSize={'sm'} color={'#738091'}>
Reply to: {invoiceMailState?.companyName} {toAddresses};
Send to: {invoiceMailState?.customerName} {toAddresses};
</Box>
</Stack>
</Group>
Expand Down Expand Up @@ -80,3 +79,13 @@ export const useMailHeaderToAddresses = () => {

return useMemo(() => to?.map((email) => '<' + email + '>').join(' '), [to]);
};

export const useMailHeaderFromAddresses = () => {
const { invoiceMailState } = useInvoiceSendMailBoot();
const from = invoiceMailState?.from;

return useMemo(
() => from?.map((email) => '<' + email + '>').join(', '),
[from],
);
};
2 changes: 2 additions & 0 deletions packages/webapp/src/hooks/query/invoices.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,8 @@ export interface GetSaleInvoiceDefaultOptionsResponse {
companyName: string;
companyLogoUri: string;

customerName: string;

dueDate: string;
dueDateFormatted: string;

Expand Down

0 comments on commit 107532f

Please sign in to comment.