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
2 changes: 2 additions & 0 deletions src/constants/durianpy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export const DURIANPY_WEBSITE_GLOBALS = {
DURIANPY_WEBSITE_CTA_SECTION: 'durianpy-website-cta-section',
DURIANPY_WEBSITE_CAROUSEL: 'durianpy-website-carousel',
DURIANPY_WEBSITE_CODE_OF_CONDUCT: 'durianpy-website-code-of-conduct',
DURIANPY_WEBSITE_ORGANIZATION_STATUS: 'durianpy-website-organization-status',
} as const

export type DurianpyWebsiteGlobalSlug =
Expand All @@ -15,6 +16,7 @@ export const DURIANPY_WEBSITE_GLOBALS_LABELS: Record<DurianpyWebsiteGlobalSlug,
[DURIANPY_WEBSITE_GLOBALS.DURIANPY_WEBSITE_CTA_SECTION]: 'CTA Section',
[DURIANPY_WEBSITE_GLOBALS.DURIANPY_WEBSITE_CAROUSEL]: 'Carousel',
[DURIANPY_WEBSITE_GLOBALS.DURIANPY_WEBSITE_CODE_OF_CONDUCT]: 'Code of Conduct',
[DURIANPY_WEBSITE_GLOBALS.DURIANPY_WEBSITE_ORGANIZATION_STATUS]: 'Organization Status',
}

export const DURIANPY_WEBSITE_COLLECTIONS = {
Expand Down
2 changes: 2 additions & 0 deletions src/endpoints/seed/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { seedCarousel } from '../../seed/durianpy-website/globals/Carousel'
import { seedCodeOfConduct } from '../../seed/durianpy-website/globals/CodeOfConduct'
import { seedHomepageConfig } from '../../seed/durianpy-website/globals/HomepageConfig'
import { seedStatisticsConfig } from '../../seed/durianpy-website/globals/StatisticsConfig'
import { seedOrganizationStatus } from '../../seed/durianpy-website/globals/OrganizationStatus'

import { COLLECTIONS } from '@/constants/collections'

Expand Down Expand Up @@ -75,6 +76,7 @@ export const seed = async ({
await seedCodeOfConduct({ payload, req })
await seedHomepageConfig({ payload, req })
await seedStatisticsConfig({ payload, req })
await seedOrganizationStatus({ payload, req })

payload.logger.info('Seeded database successfully!')
}
47 changes: 47 additions & 0 deletions src/globals/durianpy-website/OrganizationStatus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { createGlobalAccess } from '@/access/checkResourceAccess'
import { GLOBALS, GLOBAL_LABELS } from '@/constants/globals'
import { getSidebarGroupLabel, SIDEBAR_GROUPS } from '@/constants/sidebarGroup'
import type { GlobalConfig } from 'payload'

export const OrganizationStatus: GlobalConfig = {
slug: GLOBALS.DURIANPY_WEBSITE_ORGANIZATION_STATUS,
label: GLOBAL_LABELS[GLOBALS.DURIANPY_WEBSITE_ORGANIZATION_STATUS],

admin: {
group: getSidebarGroupLabel(SIDEBAR_GROUPS.DURIANPY_WEBSITE),
},
Comment on lines +10 to +12

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sidebar group labels should be referenced using SIDEBAR_GROUPS and getSidebarGroupLabel from @/constants/sidebarGroup:

  admin: {
    group: getSidebarGroupLabel(SIDEBAR_GROUPS.DURIANPY_WEBSITE),
  },


access: createGlobalAccess(GLOBALS.DURIANPY_WEBSITE_ORGANIZATION_STATUS, true),

versions: {
drafts: {
autosave: {
showSaveDraftButton: true,
},
schedulePublish: true,
},
max: 50,
},

fields: [
{
name: 'isPSFPartner',
type: 'checkbox',
defaultValue: true,
admin: {
description: 'Toggle visibility of the PSF banner',
},
},
{
name: 'psfPartnerLogo',
type: 'upload',
relationTo: 'media',
validate: (value: unknown, { siblingData }: { siblingData?: Record<string, unknown> }) => {
if (siblingData?.isPSFPartner && !value) {
return 'PSF Partner Logo is required when PSF Partner is enabled.'
}
return true
},
},
],
}
33 changes: 32 additions & 1 deletion src/payload-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,15 @@ export interface Config {
'durianpy-website-statistics-config': DurianpyWebsiteStatisticsConfig;
'durianpy-website-carousel': DurianpyWebsiteCarousel;
'durianpy-website-code-of-conduct': DurianpyWebsiteCodeOfConduct;
'durianpy-website-organization-status': DurianpyWebsiteOrganizationStatus;
};
globalsSelect: {
'durianpy-website-homepage-config': DurianpyWebsiteHomepageConfigSelect<false> | DurianpyWebsiteHomepageConfigSelect<true>;
'durianpy-website-cta-section': DurianpyWebsiteCtaSectionSelect<false> | DurianpyWebsiteCtaSectionSelect<true>;
'durianpy-website-statistics-config': DurianpyWebsiteStatisticsConfigSelect<false> | DurianpyWebsiteStatisticsConfigSelect<true>;
'durianpy-website-carousel': DurianpyWebsiteCarouselSelect<false> | DurianpyWebsiteCarouselSelect<true>;
'durianpy-website-code-of-conduct': DurianpyWebsiteCodeOfConductSelect<false> | DurianpyWebsiteCodeOfConductSelect<true>;
'durianpy-website-organization-status': DurianpyWebsiteOrganizationStatusSelect<false> | DurianpyWebsiteOrganizationStatusSelect<true>;
};
locale: null;
widgets: {
Expand Down Expand Up @@ -340,6 +342,7 @@ export interface User {
| 'durianpy-website-cta-section'
| 'durianpy-website-carousel'
| 'durianpy-website-code-of-conduct'
| 'durianpy-website-organization-status'
| 'categories'
| 'media'
| 'users'
Expand Down Expand Up @@ -400,6 +403,7 @@ export interface ServiceAccount {
| 'durianpy-website-cta-section'
| 'durianpy-website-carousel'
| 'durianpy-website-code-of-conduct'
| 'durianpy-website-organization-status'
| 'categories'
| 'media'
| 'users'
Expand Down Expand Up @@ -1423,6 +1427,21 @@ export interface DurianpyWebsiteCodeOfConduct {
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "durianpy-website-organization-status".
*/
export interface DurianpyWebsiteOrganizationStatus {
id: string;
/**
* Toggle visibility of the PSF banner
*/
isPSFPartner?: boolean | null;
psfPartnerLogo?: (string | null) | Media;
_status?: ('draft' | 'published') | null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "durianpy-website-homepage-config_select".
Expand Down Expand Up @@ -1504,6 +1523,18 @@ export interface DurianpyWebsiteCodeOfConductSelect<T extends boolean = true> {
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "durianpy-website-organization-status_select".
*/
export interface DurianpyWebsiteOrganizationStatusSelect<T extends boolean = true> {
isPSFPartner?: T;
psfPartnerLogo?: T;
_status?: T;
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "collections_widget".
Expand Down Expand Up @@ -1535,7 +1566,7 @@ export interface TaskSchedulePublish {
relationTo: 'durianpy-website-sigs';
value: string | DurianpyWebsiteSig;
} | null);
global?: string | null;
global?: 'durianpy-website-organization-status' | null;
user?: (string | null) | User;
};
output?: unknown;
Expand Down
10 changes: 9 additions & 1 deletion src/payload.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { Carousel } from './globals/durianpy-website/Carousel'
import { SIGs } from './collections/durianpy-website/SIGs'
import { CodeOfConduct } from './globals/durianpy-website/CodeOfConduct'
import { durianpyWebsiteTypesEndpoint } from './endpoints/durianpy-website-types'
import { OrganizationStatus } from './globals/durianpy-website/OrganizationStatus'

const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
Expand Down Expand Up @@ -105,7 +106,14 @@ export default buildConfig({
}),
collections: [Media, Categories, Users, Sample, ServiceAccounts, Events, Sponsors, SIGs],
endpoints: [durianpyWebsiteTypesEndpoint],
globals: [HomepageConfig, CTASection, StatisticsConfig, Carousel, CodeOfConduct],
globals: [
HomepageConfig,
CTASection,
StatisticsConfig,
Carousel,
CodeOfConduct,
OrganizationStatus,
],
cors: [getServerSideOrigin()].filter(Boolean).map((url) => {
try {
const { origin } = new URL(url!)
Expand Down
28 changes: 28 additions & 0 deletions src/seed/durianpy-website/globals/OrganizationStatus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Payload, PayloadRequest } from 'payload'
import { GLOBALS } from '@/constants/globals'
import { COLLECTIONS } from '@/constants/collections'

export async function seedOrganizationStatus({
payload,
req,
}: {
payload: Payload
req?: PayloadRequest
}) {
const { docs: mediaDocs } = await payload.find({
collection: COLLECTIONS.MEDIA,
limit: 1,
req,
})
const mediaId = mediaDocs[0]?.id

await payload.updateGlobal({
slug: GLOBALS.DURIANPY_WEBSITE_ORGANIZATION_STATUS,
data: {
isPSFPartner: true,
psfPartnerLogo: mediaId,
_status: 'published',
},
req,
})
}
Loading