Skip to content

Commit 67d4660

Browse files
committed
✨(template) allow to insert variable in message template
1 parent 56f3b4c commit 67d4660

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/frontend/src/features/layouts/components/mailbox-settings/modal-compose-template/_index.scss

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,21 @@
33
margin-bottom: var(--c--theme--spacings--s);
44
}
55
}
6+
7+
.template-composer {
8+
span[data-inline-content-type="template-variable"] {
9+
align-items: center;
10+
padding: 0 4px;
11+
border-radius: 6px;
12+
background: var(--c--theme--colors--primary-100);
13+
color: var(--c--theme--colors--primary-800);
14+
font-size: 12px;
15+
border: 1px solid var(--c--theme--colors--primary-300);
16+
user-select: none;
17+
font-family: monospace;
18+
}
19+
20+
.node-template-variable.ProseMirror-selectednode span[data-inline-content-type="template-variable"] {
21+
background: #94badc;
22+
}
23+
}

src/frontend/src/features/layouts/components/mailbox-settings/modal-compose-template/template-composer.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BlockNoteViewField } from "@/features/blocknote/blocknote-view-field";
22
import { BlockNoteSchema, defaultBlockSpecs, defaultInlineContentSpecs } from "@blocknote/core";
3+
import { InlineTemplateVariable, TemplateVariableSelector } from "@/features/blocknote/inline-template-variable";
34
import * as locales from '@blocknote/core/locales';
45
import { useCreateBlockNote } from "@blocknote/react";
56
import { FieldProps } from "@openfun/cunningham-react";
@@ -9,7 +10,7 @@ import { useTranslation } from "react-i18next";
910
import { Toolbar } from "@/features/blocknote/toolbar";
1011
import MailHelper from "@/features/utils/mail-helper";
1112
import { BlockSignature, BlockSignatureConfigProps, SignatureTemplateSelector } from "@/features/blocknote/signature-block";
12-
import { MessageTemplateTypeChoices, useMailboxesMessageTemplatesAvailableList } from "@/features/api/gen";
13+
import { MessageTemplateTypeChoices, useMailboxesMessageTemplatesAvailableList, usePlaceholdersRetrieve } from "@/features/api/gen";
1314
import { useMailboxContext } from "@/features/providers/mailbox";
1415

1516
const TEMPLATE_BLOCKNOTE_SCHEMA = BlockNoteSchema.create({
@@ -19,6 +20,7 @@ const TEMPLATE_BLOCKNOTE_SCHEMA = BlockNoteSchema.create({
1920
},
2021
inlineContentSpecs: {
2122
...defaultInlineContentSpecs,
23+
'template-variable': InlineTemplateVariable,
2224
}
2325
});
2426

@@ -41,6 +43,13 @@ export const TemplateComposer = ({ blockNoteOptions, defaultValue, disabled = fa
4143
const form = useFormContext();
4244
const { selectedMailbox } = useMailboxContext();
4345

46+
const { data: { data: placeholders = {} } = {}, isLoading: isLoadingPlaceholders } = usePlaceholdersRetrieve({
47+
query: {
48+
refetchOnMount: true,
49+
refetchOnWindowFocus: true,
50+
}
51+
});
52+
4453
const { data: { data: activeSignatures = [] } = {}, isLoading: isLoadingSignatures } = useMailboxesMessageTemplatesAvailableList(
4554
selectedMailbox?.id || "",
4655
{
@@ -167,6 +176,10 @@ export const TemplateComposer = ({ blockNoteOptions, defaultValue, disabled = fa
167176
isLoading={isLoadingSignatures}
168177
mailboxId={selectedMailbox?.id}
169178
/>
179+
<TemplateVariableSelector
180+
variables={placeholders}
181+
isLoading={isLoadingPlaceholders}
182+
/>
170183
</Toolbar>
171184
</BlockNoteViewField>
172185
<input {...form.register("htmlBody")} type="hidden" />

0 commit comments

Comments
 (0)