Skip to content

Commit 28dfdc5

Browse files
authored
Merge pull request #1152 from CodeForAfrica/fix/trustlab_project_setup
Improve `@/trustlab` Project Setup
2 parents c848df7 + 8e84885 commit 28dfdc5

File tree

8 files changed

+1650
-2693
lines changed

8 files changed

+1650
-2693
lines changed

apps/trustlab/next.config.mjs

+14-10
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,21 @@ const outputFileTracingRoot = PROJECT_ROOT
88

99
/** @type {import('next').NextConfig} */
1010
const nextConfig = {
11-
transpilePackages: ["@commons-ui/core", "@commons-ui/next"],
12-
reactStrictMode: true,
11+
images: {
12+
domains: process.env.NEXT_PUBLIC_IMAGE_DOMAINS?.split(",")
13+
.map((d) => d.trim())
14+
.filter(Boolean),
15+
unoptimized:
16+
process.env.NEXT_PUBLIC_IMAGE_UNOPTIMIZED?.trim()?.toLowerCase() ===
17+
"true",
18+
},
1319
output: "standalone",
1420
outputFileTracingRoot,
21+
// TODO(kilemensi): There is an upstream bug on this @ https://github.com/vercel/next.js/issues/51478
22+
// `js`, `ts`, `tsx` are just to make sure there is more than one item;
23+
// we SHOULDN'T use them in pages router!
24+
pageExtensions: ["page.js", "js", "ts", "tsx"],
25+
reactStrictMode: true,
1526
webpack: (config) => {
1627
config.module.rules.push(
1728
{
@@ -29,14 +40,7 @@ const nextConfig = {
2940
config.experiments = { ...config.experiments, topLevelAwait: true };
3041
return config;
3142
},
32-
images: {
33-
domains: process.env.NEXT_PUBLIC_IMAGE_DOMAINS?.split(",")
34-
?.map((d) => d.trim())
35-
?.filter((d) => d),
36-
unoptimized:
37-
process.env.NEXT_PUBLIC_IMAGE_UNOPTIMIZED?.trim()?.toLowerCase() ===
38-
"true",
39-
},
43+
transpilePackages: ["@commons-ui/core", "@commons-ui/next"],
4044
};
4145

4246
export default withPayload(nextConfig);

apps/trustlab/package.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@
1919
"@commons-ui/payload": "workspace:*",
2020
"@mui/utils": "catalog:",
2121
"@next/third-parties": "catalog:",
22-
"@payloadcms/db-sqlite": "catalog:payload-v3",
2322
"@payloadcms/db-mongodb": "catalog:payload-v3",
23+
"@payloadcms/email-nodemailer": "catalog:payload-v3",
2424
"@payloadcms/next": "catalog:payload-v3",
2525
"@payloadcms/plugin-cloud-storage": "catalog:payload-v3",
26-
"@payloadcms/richtext-lexical": "catalog:payload-v3",
27-
"@payloadcms/storage-s3": "catalog:payload-v3",
2826
"@payloadcms/plugin-seo": "catalog:payload-v3",
2927
"@payloadcms/plugin-nested-docs": "catalog:payload-v3",
28+
"@payloadcms/richtext-lexical": "catalog:payload-v3",
29+
"@payloadcms/storage-s3": "catalog:payload-v3",
3030
"@payloadcms/ui": "catalog:payload-v3",
3131
"cross-env": "catalog:",
32+
"graphql": "catalog:payload-v3",
3233
"next": "catalog:",
3334
"next-seo": "catalog:",
3435
"payload": "catalog:payload-v3",

apps/trustlab/payload.config.ts

+29-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import sharp from "sharp";
22
import { lexicalEditor } from "@payloadcms/richtext-lexical";
33
import { mongooseAdapter } from "@payloadcms/db-mongodb";
4+
import { nodemailerAdapter } from "@payloadcms/email-nodemailer";
45
import { buildConfig, CollectionConfig, GlobalConfig } from "payload";
56
import path from "path";
67
import { fileURLToPath } from "url";
@@ -23,9 +24,27 @@ const csrf =
2324
?.map((d) => d.trim())
2425
?.filter(Boolean) ?? [];
2526

27+
let email = nodemailerAdapter();
28+
if (process.env.SMTP_HOST && process.env.SMTP_PASS) {
29+
const smtpPort = Number(process.env.SMTP_PORT) || 587;
30+
email = nodemailerAdapter({
31+
defaultFromAddress:
32+
process.env.SMTP_FROM_ADDRESS || "[email protected]",
33+
defaultFromName: process.env.SENDGRID_FROM_NAME || "TrustLab CMS",
34+
// Any Nodemailer transport can be used
35+
transportOptions: {
36+
host: process.env.SMTP_HOST,
37+
port: smtpPort,
38+
secure: smtpPort === 465, // true for port 465, false (the default) for others
39+
auth: {
40+
user: process.env.SMTP_USER || "apikey",
41+
pass: process.env.SMTP_PASS,
42+
},
43+
},
44+
});
45+
}
46+
2647
export default buildConfig({
27-
serverURL: process.env.NEXT_PUBLIC_APP_URL,
28-
editor: lexicalEditor(),
2948
admin: {
3049
importMap: {
3150
baseDir: path.resolve(dirname),
@@ -34,6 +53,11 @@ export default buildConfig({
3453
collections: [Pages, Media, Users] as CollectionConfig[],
3554
cors,
3655
csrf,
56+
db: mongooseAdapter({
57+
url: process.env.MONGO_URL || "",
58+
}),
59+
email,
60+
editor: lexicalEditor(),
3761
globals: [SiteSettings] as GlobalConfig[],
3862
...(locales?.length
3963
? {
@@ -44,14 +68,11 @@ export default buildConfig({
4468
},
4569
}
4670
: undefined),
71+
plugins: [...plugins],
4772
secret: process.env.PAYLOAD_SECRET || "",
48-
db: mongooseAdapter({
49-
url: process.env.MONGO_URL || "",
50-
}),
73+
serverURL: process.env.NEXT_PUBLIC_APP_URL,
74+
sharp,
5175
typescript: {
5276
outputFile: path.resolve(dirname, "payload-types.ts"),
5377
},
54-
plugins: [...plugins],
55-
56-
sharp,
5778
});

apps/trustlab/src/lib/payload/index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import payload from "payload";
1+
import { getPayload } from "payload";
2+
3+
import config from "@payload-config";
4+
5+
const payload = await getPayload({ config });
26

37
async function findPage(slug, options) {
48
return payload.find({
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export const locales = process.env.NEXT_PUBLIC_LOCALES?.split(",")
2-
?.map((l) => l.trim())
2+
.map((l) => l.trim())
33
.filter(Boolean) || ["en"];
44
export const defaultLocale =
5-
process.env.NEXT_PUBLIC_LOCALES?.trim() || locales?.[0];
5+
process.env.NEXT_PUBLIC_DEFAULT_LOCALE?.trim() || locales?.[0];

apps/trustlab/turbo.json

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"extends": ["//"],
33
"tasks": {
44
"build": {
5-
"dependsOn": ["^build(.*)"],
65
"env": [
76
"S3_BUCKET",
87
"S3_REGION",

0 commit comments

Comments
 (0)