Allow enabling/disabling individual SMS template types from dashboard with sync to notification settings

This commit is contained in:
2026-08-21 11:04:26 +03:30
parent 091e519280
commit 3c6eb278b0
4 changed files with 104 additions and 7 deletions
+19
View File
@@ -148,6 +148,7 @@ const SMS_TEMPLATE_DEFS = [
key: 'classRequestApproved',
label: 'تأیید درخواست تشکیل کلاس',
envKey: 'SMS_TEMPLATE_CLASS_REQUEST_APPROVED',
defaultEnabled: false,
slots: [
{ key: 'fullName', label: 'نام کارآموز', defaultName: 'fullName' },
{ key: 'courseName', label: 'نام دوره', defaultName: 'courseName' },
@@ -159,6 +160,7 @@ const SMS_TEMPLATE_DEFS = [
key: 'classRequestRejected',
label: 'رد درخواست ثبت‌نام',
envKey: 'SMS_TEMPLATE_CLASS_REQUEST_REJECTED',
defaultEnabled: false,
slots: [
{ key: 'fullName', label: 'نام کارآموز', defaultName: 'fullName' },
{ key: 'courseName', label: 'نام دوره', defaultName: 'courseName' },
@@ -171,6 +173,7 @@ const SMS_TEMPLATE_DEFS = [
key: 'pendingRegistration',
label: 'دریافت درخواست ثبت‌نام',
envKey: 'SMS_TEMPLATE_PENDING_REGISTRATION',
defaultEnabled: false,
slots: [
{ key: 'fullName', label: 'نام کارآموز', defaultName: 'fullName' },
{ key: 'className', label: 'نام کلاس', defaultName: 'className' },
@@ -225,6 +228,7 @@ const defaultVariablesList = (def) => {
};
const emptyTemplateEntry = (def) => ({
enabled: def ? (def.defaultEnabled !== false) : true,
templateId: '',
variables: defaultVariablesList(def)
});
@@ -266,20 +270,24 @@ const normalizeVariablesInput = (rawVariables, def) => {
};
const normalizeStoredEntry = (raw, def) => {
const defaultEnabled = def ? (def.defaultEnabled !== false) : true;
if (raw == null || raw === '') {
return {
enabled: defaultEnabled,
templateId: '',
variables: def ? defaultVariablesList(def) : []
};
}
if (typeof raw === 'string' || typeof raw === 'number') {
return {
enabled: true,
templateId: String(raw),
variables: def ? defaultVariablesList(def) : []
};
}
if (typeof raw !== 'object') {
return {
enabled: defaultEnabled,
templateId: '',
variables: def ? defaultVariablesList(def) : []
};
@@ -289,7 +297,12 @@ const normalizeStoredEntry = (raw, def) => {
? normalizeVariablesInput(raw.variables, def)
: (def ? defaultVariablesList(def) : []);
const enabled = raw.enabled !== undefined
? Boolean(raw.enabled)
: defaultEnabled;
return {
enabled,
templateId: raw.templateId != null ? String(raw.templateId) : '',
variables
};
@@ -304,8 +317,13 @@ const mergeTemplateEntry = (def, storedRaw, incomingRaw = null) => {
const storedEntry = normalizeStoredEntry(storedRaw, def);
let templateId = storedEntry.templateId || envFallbackFor(def);
let variables = storedEntry.variables;
let enabled = storedEntry.enabled;
if (incomingRaw) {
if (incomingRaw.enabled !== undefined) {
enabled = Boolean(incomingRaw.enabled);
}
if (incomingRaw.templateId !== undefined) {
const sanitized = sanitizeTemplateId(incomingRaw.templateId);
if (sanitized === null) {
@@ -336,6 +354,7 @@ const mergeTemplateEntry = (def, storedRaw, incomingRaw = null) => {
}
return {
enabled,
templateId,
variables: resolveVariablesList(def, variables)
};