Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/(frontend)/api/sse/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import config from '@payload-config'
import { getPayload, type PayloadRequest } from 'payload'

import { type RedisListener, subscribe } from '@/lib/RedisHandler'
import { isBilingualTranslateChannel, isSseChannel } from '@/lib/sse/channels'
import { isBilingualTranslateChannel, isSeedTaskChannel, isSseChannel } from '@/lib/sse/channels'

const HEARTBEAT_INTERVAL_MS = 30_000

Expand Down Expand Up @@ -33,7 +33,7 @@ export async function GET(request: Request): Promise<Response> {
* Unknown channels get the same 400 as a missing one — enumerating which
* channels exist is not something an anonymous caller needs to do.
*/
if (isBilingualTranslateChannel(channel)) {
if (isBilingualTranslateChannel(channel) || isSeedTaskChannel(channel)) {
/**
* Unlike the public channels in `SSE_CHANNELS`, a bilingual-translate
* job channel carries translated CV content, so it requires a signed-in
Expand Down
2 changes: 2 additions & 0 deletions app/(payload)/admin/importMap.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { ExportListMenuItem as ExportListMenuItem_cdf7e044479f899a31f804427d568b
import { ImportListMenuItem as ImportListMenuItem_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc'
import { default as default_739727f92d93200cec032c1e61a6cb15 } from '@/fields/Toggle/components/FieldComponent'
import { default as default_22b4891c4f5fa760ee9f626882377967 } from '@/fields/Protected/components/FieldComponent'
import { SeedActions as SeedActions_51b46a0db5b98e49ecd919f9ce43dfec } from '@/components/AdminPanel/SeedActions'
import { AltField as AltField_24f51e17ebe211ea3e1b6c287f79c7cc } from '@/collections/MediaImages/components'
import { MediaScopeTabs as MediaScopeTabs_4629bc42a060e6d23d7d57d776e5da7b } from '@/components/AdminPanel/MediaScopeTabs'
import { default as default_390597f1ad60ab95e5b4fbebc846ccb5 } from '@/fields/SVGUpload/components/FieldComponent'
Expand Down Expand Up @@ -111,6 +112,7 @@ export const importMap = {
"@payloadcms/plugin-import-export/rsc#ImportListMenuItem": ImportListMenuItem_cdf7e044479f899a31f804427d568b36,
"@/fields/Toggle/components/FieldComponent#default": default_739727f92d93200cec032c1e61a6cb15,
"@/fields/Protected/components/FieldComponent#default": default_22b4891c4f5fa760ee9f626882377967,
"@/components/AdminPanel/SeedActions#SeedActions": SeedActions_51b46a0db5b98e49ecd919f9ce43dfec,
"@/collections/MediaImages/components#AltField": AltField_24f51e17ebe211ea3e1b6c287f79c7cc,
"@/components/AdminPanel/MediaScopeTabs#MediaScopeTabs": MediaScopeTabs_4629bc42a060e6d23d7d57d776e5da7b,
"@/fields/SVGUpload/components/FieldComponent#default": default_390597f1ad60ab95e5b4fbebc846ccb5,
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
"seed": "pnpm run seed:blog",
"seed:blog": "pnpm run payload run scripts/seed-blog.ts",
"seed:blog:clean": "pnpm run payload run scripts/seed-blog.ts -- --clean",
"seed:pages": "pnpm run payload run scripts/seed-pages.ts",
"seed:pages:clean": "pnpm run payload run scripts/seed-pages.ts -- --clean",
"skills:migrate-content-caption": "pnpm run payload run scripts/migrate-skill-content-caption.ts",
"start": "pnpm run next start",
"start:job-runner": "pnpm run payload jobs:run --cron \"* * * * *\" --all-queues --handle-schedules --limit 10",
Expand Down
44 changes: 44 additions & 0 deletions scripts/seed-pages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/**
* Seeds fixture Pages (each with a placeholder hero image) for local
* testing.
*
* Usage:
* pnpm seed:pages # create 10 seed pages
* pnpm seed:pages -- --count 25 # create 25 seed pages
* pnpm seed:pages:clean # remove all seeded pages and their media
*
* Idempotent: existing seeded pages (matched by slug) are skipped, not
* duplicated. See src/lib/seed/pages.ts for the actual create/delete
* logic — this script only parses arguments and reports progress.
*/
import config from '@payload-config'
import { getPayload } from 'payload'

import { cleanPages, seedPages } from '@/lib/seed/pages'

const DEFAULT_COUNT = 10

const payload = await getPayload({
config,
})

const clean = process.argv.includes('--clean')
const countIndex = process.argv.indexOf('--count')
const count =
countIndex !== -1 && process.argv[countIndex + 1]
? Number.parseInt(process.argv[countIndex + 1], 10)
: DEFAULT_COUNT

const onProgress = ({ step, current, total }: { step: string; current: number; total: number }) => {
console.info(`[${current}/${total}] ${step}`)
}

if (clean) {
const { deletedPages, deletedMedia } = await cleanPages(payload, onProgress)
console.info(`\nRemoved ${deletedPages} pages and ${deletedMedia} media documents.`)
} else {
const { created } = await seedPages(payload, count, onProgress)
console.info(`\nCreated ${created} pages.`)
}

process.exit(0)
3 changes: 3 additions & 0 deletions src/collections/BlogPosts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { CollectionConfig } from 'payload'
import { anyone } from '@/access/anyone'
import { authenticated } from '@/access/authenticated'
import { authenticatedOrPublished } from '@/access/authenticatedOrPublished'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { MediaField } from '@/fields/Media'
import { MetaField } from '@/fields/Meta'
import { RichTextField } from '@/fields/RichText'
Expand Down Expand Up @@ -133,6 +134,8 @@ export const BlogPosts: CollectionConfig<CollectionSlug['BlogPosts']> = {
},
],
},

GeneratorFlagsField(),
],
trash: true,
versions: {
Expand Down
3 changes: 3 additions & 0 deletions src/collections/BlogTopics/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { AccessArgs, CollectionConfig } from 'payload'

import { anyone } from '@/access/anyone'
import { authenticated } from '@/access/authenticated'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { MetaField } from '@/fields/Meta'
import { RichTextField } from '@/fields/RichText'
import { SlugField } from '@/fields/Slug'
Expand Down Expand Up @@ -179,6 +180,8 @@ export const BlogTopics: CollectionConfig<CollectionSlug['BlogTopics']> = {
},
],
},

GeneratorFlagsField(),
],
orderable: true,
trash: true,
Expand Down
14 changes: 14 additions & 0 deletions src/collections/Pages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { authenticated } from '@/access/authenticated'
import { authenticatedOrPublished } from '@/access/authenticatedOrPublished'
import { BLOCK_SLUGS } from '@/blocks'
import { revalidatePage } from '@/collections/Pages/hooks/revalidatePage'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { MetaField } from '@/fields/Meta'
import { ProtectedField } from '@/fields/Protected'
import { RichTextField } from '@/fields/RichText'
Expand Down Expand Up @@ -61,6 +62,17 @@ export const Pages: CollectionConfig<CollectionSlug['Pages']> = {
url: ({ data }) => generatePreviewPath(CollectionSlug['Pages'], data.slug),
},
preview: (data: Partial<Page>) => generatePreviewPath(CollectionSlug['Pages'], data.slug),
components: {
listMenuItems: [
{
path: '@/components/AdminPanel/SeedActions#SeedActions',
clientProps: {
collectionSlug: CollectionSlug.Pages,
collectionLabel: 'Pages',
},
},
],
},
},
fields: [
/* -------------- Main Content -------------- */
Expand Down Expand Up @@ -198,6 +210,8 @@ export const Pages: CollectionConfig<CollectionSlug['Pages']> = {
},
],
},

GeneratorFlagsField(),
],
hooks: {
afterChange: [
Expand Down
3 changes: 3 additions & 0 deletions src/collections/ResumeCustomers/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CollectionConfig } from 'payload'

import { authenticated } from '@/access/authenticated'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { SlugField } from '@/fields/Slug'
import { SVGUpload } from '@/fields/SVGUpload'
import { TitleField } from '@/fields/Title'
Expand Down Expand Up @@ -111,5 +112,7 @@ export const ResumeCustomers: CollectionConfig<CollectionSlug['ResumeCustomers']
},
],
},

GeneratorFlagsField(),
],
}
3 changes: 3 additions & 0 deletions src/collections/ResumeDocuments/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { cn } from 'tailwind-variants'

import { authenticated } from '@/access/authenticated'
import { forbidden } from '@/access/forbidden'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { SectionGroupField } from '@/fields/SectionGroup'
import { SlugField } from '@/fields/Slug'
import { TitleField } from '@/fields/Title'
Expand Down Expand Up @@ -286,5 +287,7 @@ export const ResumeDocuments: CollectionConfig<CollectionSlug['ResumeDocuments']
},
],
}),

GeneratorFlagsField(),
],
}
3 changes: 3 additions & 0 deletions src/collections/ResumeJobs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { CollectionConfig } from 'payload'

import { authenticated } from '@/access/authenticated'
import { BilingualRichTextField } from '@/fields/BilingualRichText'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { generateResumeDocumentHook } from '@/lib/hooks/collection'
import { AdminGroup } from '@/types/admin-panel'
import { CollectionSlug } from '@/types/collections'
Expand Down Expand Up @@ -185,6 +186,8 @@ export const ResumeJobs: CollectionConfig<CollectionSlug['ResumeJobs']> = {
isSortable: true,
},
},

GeneratorFlagsField(),
],
trash: true,
versions: false,
Expand Down
3 changes: 3 additions & 0 deletions src/collections/ResumeProjects/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CollectionConfig } from 'payload'

import { authenticated } from '@/access/authenticated'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { RichTextField } from '@/fields/RichText'
import { generateResumeDocumentHook } from '@/lib/hooks/collection'
import { AdminGroup } from '@/types/admin-panel'
Expand Down Expand Up @@ -78,6 +79,8 @@ export const ResumeProjects: CollectionConfig<CollectionSlug['ResumeProjects']>
position: 'sidebar',
},
},

GeneratorFlagsField(),
],
trash: true,
versions: false,
Expand Down
3 changes: 3 additions & 0 deletions src/collections/ResumeSkillTags/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { CollectionConfig } from 'payload'

import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { SlugField } from '@/fields/Slug'
import { TitleField } from '@/fields/Title'
import { generateResumeDocumentHook } from '@/lib/hooks/collection'
Expand Down Expand Up @@ -107,5 +108,7 @@ export const ResumeSkillTags: CollectionConfig<CollectionSlug['ResumeSkillTags']
// hasMany: true,
// on: 'skillTags',
// },

GeneratorFlagsField(),
],
}
3 changes: 3 additions & 0 deletions src/collections/ResumeSkills/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { truncate } from 'lodash-es'

import { authenticated } from '@/access/authenticated'
import { BilingualRichTextField } from '@/fields/BilingualRichText'
import { GeneratorFlagsField } from '@/fields/GeneratorFlags'
import { generateResumeDocumentHook } from '@/lib/hooks/collection'
import { translate } from '@/lib/i18n'
import { AdminGroup } from '@/types/admin-panel'
Expand Down Expand Up @@ -206,6 +207,8 @@ export const ResumeSkills: CollectionConfig<CollectionSlug['ResumeSkills']> = {
// ],
// },
// },

GeneratorFlagsField(),
],
trash: true,
versions: false,
Expand Down
46 changes: 46 additions & 0 deletions src/components/AdminPanel/SeedActions/SeedActions.styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
@reference "#payload.css";

@layer components {
.seed-actions-modal {
@apply fixed inset-0 z-50 flex items-center justify-center;
@apply bg-black/50;

.seed-actions-modal__body {
@apply flex flex-col gap-4;
@apply w-full max-w-[420px];
@apply p-6;
@apply rounded-(--style-radius-m);
background: var(--theme-elevation-0);
border: 1px solid var(--theme-elevation-150);
box-shadow: 0 8px 24px -4px rgb(0 0 0 / 25%);

h3 {
@apply m-0;
}

label {
@apply text-sm font-medium;
color: var(--theme-elevation-800);
}

input {
@apply w-full;
padding: calc(var(--base) / 4) calc(var(--base) / 2);
border: 1px solid var(--theme-elevation-150);
border-radius: var(--style-radius-s);
background: var(--theme-input-bg);
color: var(--theme-elevation-800);

&:focus {
border-color: var(--theme-elevation-400);
outline: none;
}
}
}

.seed-actions-modal__footer {
@apply flex flex-row items-center justify-end gap-2;
@apply mt-2;
}
}
}
Loading