Skip to content

Commit f1b8cb3

Browse files
committed
Add support for parsing enum by key name in the config file
1 parent 1fa4bce commit f1b8cb3

4 files changed

Lines changed: 48 additions & 26 deletions

File tree

src/web/app.js

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { OfficeDataAccessHelper } from "./office-data-access-helper.mjs";
1212
Office.onReady(() => {});
1313

1414
async function onTypicalReplyButtonClicked(event) {
15-
const actionId = event.source.id;
15+
const actionId = event.source.id;
1616
console.debug("actionId: " + actionId);
1717
console.debug("conversationId: " + Office.context.mailbox.item.conversationId);
1818
const originalMailData = {
@@ -24,22 +24,34 @@ async function onTypicalReplyButtonClicked(event) {
2424
id: Office.context.mailbox.item.itemId,
2525
};
2626
try {
27-
const buttonConfig = await ConfigLoader.loadConfigForCurrentLanguageAndButtonId(Office.context.displayLanguage, actionId);
27+
const buttonConfig = await ConfigLoader.loadConfigForCurrentLanguageAndButtonId(
28+
Office.context.displayLanguage,
29+
actionId
30+
);
2831
if (!buttonConfig) {
29-
console.log("no button config find.")
32+
console.log("no button config find.");
3033
return event.completed();
3134
}
32-
const replyMailData = MailDataCreator.CreateDataOnForReplyForm({ config: buttonConfig, originalMailData });
35+
const replyMailData = MailDataCreator.CreateDataOnForReplyForm({
36+
config: buttonConfig,
37+
originalMailData,
38+
});
3339
if (!replyMailData) {
34-
console.log("failed to create reply mail data.")
40+
console.log("failed to create reply mail data.");
3541
return event.completed();
3642
}
37-
Office.context.roamingSettings.set("conversationId", Office.context.mailbox.item.conversationId ?? "");
43+
Office.context.roamingSettings.set(
44+
"conversationId",
45+
Office.context.mailbox.item.conversationId ?? ""
46+
);
3847
Office.context.roamingSettings.set("actionId", actionId);
3948
await OfficeDataAccessHelper.saveRoamingSettingsAsync();
40-
replyMailData.executeMethod({attachments: replyMailData.attachments, callback: () => {
41-
event.completed();
42-
}});
49+
replyMailData.executeMethod({
50+
attachments: replyMailData.attachments,
51+
callback: () => {
52+
event.completed();
53+
},
54+
});
4355
} catch (e) {
4456
console.log("createNewMail Failed:", e);
4557
event.completed();
@@ -48,21 +60,24 @@ async function onTypicalReplyButtonClicked(event) {
4860
window.onTypicalReplyButtonClicked = onTypicalReplyButtonClicked;
4961

5062
async function onNewMessageComposeCreated(event) {
51-
const conversationId = Office.context.mailbox.item.conversationId;
63+
const conversationId = Office.context.mailbox.item.conversationId;
5264
const actionId = Office.context.roamingSettings.get("actionId")?.trim() ?? "";
5365
const targetConversationId = Office.context.roamingSettings.get("conversationId")?.trim() ?? "";
5466
console.debug("action id: " + actionId);
5567
console.debug("targetConversation id: " + targetConversationId);
5668
if (conversationId !== targetConversationId) {
5769
return event.completed();
5870
}
59-
const buttonConfig = await ConfigLoader.loadConfigForCurrentLanguageAndButtonId(Office.context.displayLanguage, actionId);
71+
const buttonConfig = await ConfigLoader.loadConfigForCurrentLanguageAndButtonId(
72+
Office.context.displayLanguage,
73+
actionId
74+
);
6075
Office.context.roamingSettings.remove("conversationId");
6176
Office.context.roamingSettings.remove("actionId");
6277
await OfficeDataAccessHelper.saveRoamingSettingsAsync();
6378

6479
const currentSubject = await OfficeDataAccessHelper.getSubjectAsync();
65-
const data = MailDataCreator.CreateReplyMailData({config: buttonConfig, currentSubject});
80+
const data = MailDataCreator.CreateReplyMailData({ config: buttonConfig, currentSubject });
6681
if (data.newToRecipients) {
6782
await OfficeDataAccessHelper.setToAsync(data.newToRecipients);
6883
}

src/web/config-loader.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class ConfigLoader {
5050
static async loadConfigForCurrentLanguageAndButtonId(culture, id) {
5151
const configForLang = await ConfigLoader.loadConfigForCurrentLanguage(culture);
5252
if (configForLang && configForLang.ButtonConfigList) {
53-
return configForLang.ButtonConfigList.find(conf => conf.Id === id);
53+
return configForLang.ButtonConfigList.find((conf) => conf.Id === id);
5454
}
5555
return null;
5656
}

src/web/config.mjs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
Copyright (c) 2025 ClearCode Inc.
77
*/
88

9+
function getEnumValueByKey(enumObj, key) {
10+
if (!key) {
11+
return undefined;
12+
}
13+
const lowerdKey = key.toLowerCase();
14+
for (const enumKey in enumObj) {
15+
if (enumKey.toLowerCase() === lowerdKey) {
16+
return enumObj[enumKey];
17+
}
18+
}
19+
return undefined;
20+
}
21+
922
export class ButtonConfigEnums {
1023
static ForwardType = {
1124
Unknown: 0,
@@ -41,7 +54,6 @@ export class ButtonConfig {
4154
LoweredAllowedDomains;
4255
AllowedDomainsType;
4356
ForwardType;
44-
Image;
4557

4658
constructor({
4759
Id,
@@ -53,7 +65,6 @@ export class ButtonConfig {
5365
QuoteType,
5466
AllowedDomains,
5567
ForwardType,
56-
Image,
5768
}) {
5869
this.Id = Id ?? "";
5970
this.Label = Label ?? "";
@@ -63,8 +74,9 @@ export class ButtonConfig {
6374
this.Recipients = Recipients ?? [];
6475
this.QuoteType = QuoteType ?? false;
6576
this.AllowedDomains = AllowedDomains ?? [];
66-
this.ForwardType = ForwardType ?? ButtonConfigEnums.ForwardType.Unknown;
67-
this.Image = Image ?? "logo.png";
77+
this.ForwardType =
78+
getEnumValueByKey(ButtonConfigEnums.ForwardType, ForwardType) ??
79+
ButtonConfigEnums.ForwardType.Unknown;
6880

6981
if (!Recipients || Recipients.length == 0) {
7082
this.RecipientsType = ButtonConfigEnums.RecipientsType.Blank;
@@ -93,11 +105,7 @@ export class Config {
93105
GroupLabel;
94106
ButtonConfigList;
95107

96-
constructor({
97-
Culture,
98-
GroupLabel,
99-
ButtonConfigList,
100-
}) {
108+
constructor({ Culture, GroupLabel, ButtonConfigList }) {
101109
this.Culture = Culture ?? "en-US";
102110
this.GroupLabel = GroupLabel ?? "Typical Reply";
103111
this.ButtonConfigList = [];

src/web/mail-data-creator.mjs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class MailDataCreator {
2727
mailItemToReply.toRecipients = config.Recipients;
2828
break;
2929
default:
30-
break;
30+
break;
3131
}
3232
if (config.AllowedDomainsType == ButtonConfigEnums.AllowedDomainsType.SpecifiedByUser) {
3333
const loweredAllowedDomains = config.AllowedDomains.toLowerCase();
@@ -78,8 +78,7 @@ export class MailDataCreator {
7878

7979
if (config.Subject) {
8080
mailItemToReply.subject = config.Subject;
81-
}
82-
else {
81+
} else {
8382
mailItemToReply.subject = originalSuject;
8483
}
8584

@@ -88,7 +87,7 @@ export class MailDataCreator {
8887
}
8988

9089
mailItemToReply.bodyHtml = config.Body ?? "";
91-
mailItemToReply.quoteType = config.QuoteType
90+
mailItemToReply.quoteType = config.QuoteType;
9291
return mailItemToReply;
9392
}
9493
}

0 commit comments

Comments
 (0)