Skip to content

Commit d45fbe2

Browse files
committed
redwoodjs#9620: Update studio to support variable components (Mailer)
1 parent ab335d9 commit d45fbe2

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

packages/studio/api/mail/index.ts

+29-2
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,32 @@ export async function updateMailTemplates() {
217217
)
218218
}
219219

220+
function extractParamsAndValue(component: any): {
221+
value: any
222+
params: any[]
223+
} {
224+
switch (component.declaration.type) {
225+
case 'FunctionDeclaration':
226+
return {
227+
value: component.declaration?.identifier?.value,
228+
params: component.params ?? [],
229+
}
230+
case 'VariableDeclaration':
231+
if (
232+
component.declaration.declarations[0].init.type ===
233+
'ArrowFunctionExpression'
234+
) {
235+
return {
236+
params: component.declaration.declarations[0].init.params ?? [],
237+
value: component.declaration.declarations[0].id.value ?? null,
238+
}
239+
}
240+
return { value: null, params: [] }
241+
default:
242+
return { value: null, params: [] }
243+
}
244+
}
245+
220246
function getMailTemplateComponents(templateFilePath: string) {
221247
const ast = swc.parseFileSync(templateFilePath, {
222248
syntax: templateFilePath.endsWith('.js') ? 'ecmascript' : 'typescript',
@@ -230,8 +256,9 @@ function getMailTemplateComponents(templateFilePath: string) {
230256
return node.type === 'ExportDeclaration'
231257
})
232258
for (let i = 0; i < exportedComponents.length; i++) {
259+
const { params, value } = extractParamsAndValue(exportedComponents[i])
233260
let propsTemplate = null
234-
const hasParams = exportedComponents[i].declaration.params.length > 0
261+
const hasParams = params.length > 0
235262
if (hasParams) {
236263
propsTemplate = 'Provide your props here as JSON'
237264
try {
@@ -250,7 +277,7 @@ function getMailTemplateComponents(templateFilePath: string) {
250277
}
251278
}
252279
components.push({
253-
name: exportedComponents[i].declaration?.identifier?.value ?? 'Unknown',
280+
name: value ?? 'Unknown',
254281
propsTemplate,
255282
})
256283
}

packages/studio/package.json

+12-1
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,16 @@
101101
"use-url-search-params": "2.5.1",
102102
"vite": "4.5.1"
103103
},
104-
"gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1"
104+
"gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1",
105+
"optionalDependencies": {
106+
"@swc/core-darwin-arm64": "^1.3.100",
107+
"@swc/core-darwin-x64": "^1.3.100",
108+
"@swc/core-linux-arm64-gnu": "^1.3.100",
109+
"@swc/core-linux-arm64-musl": "^1.3.100",
110+
"@swc/core-linux-x64-gnu": "^1.3.100",
111+
"@swc/core-linux-x64-musl": "^1.3.100",
112+
"@swc/core-win32-arm64-msvc": "^1.3.100",
113+
"@swc/core-win32-ia32-msvc": "^1.3.100",
114+
"@swc/core-win32-x64-msvc": "^1.3.100"
115+
}
105116
}

0 commit comments

Comments
 (0)