diff --git a/src/collections/Copies/Copies.ts b/src/collections/Copies/Copies.ts index 30bffb5..197b969 100644 --- a/src/collections/Copies/Copies.ts +++ b/src/collections/Copies/Copies.ts @@ -1,8 +1,54 @@ -import { CollectionConfig } from "payload"; +import { CollectionAfterReadHook, CollectionConfig } from "payload"; + +const afterReadHook: CollectionAfterReadHook = async ({ doc, req }) => { + if (doc.label) return doc; + + let bookName; + if (doc.book) { + const relatedBook = await req.payload.findByID({ + req, + collection: 'books', + id: doc.book, + depth: 2, + }) + bookName = relatedBook.title + } else return doc + + let repositoryName; + if (doc.repository) { + const relatedRepo = await req.payload.findByID({ + req, + collection: 'repositories', + id: doc.repository, + depth: 2, + }) + repositoryName = relatedRepo.abbreviation || relatedRepo.name + } else return doc + + return { ...doc, label: `[${repositoryName}] ${bookName}` } + +} export const Copies: CollectionConfig = { slug: 'copies', + access: { + read: () => true, + update: () => true, + create: () => true, + admin: () => true, + }, + admin: { + useAsTitle: 'label', + pagination: { + limits: [10, 20, 50, 100, 250], + }, + }, fields: [ + { + name: 'label', + type: 'text', + + }, { name: 'condition', label: 'Condition out of 5', @@ -26,5 +72,8 @@ export const Copies: CollectionConfig = { name: 'notes', type: 'richText' } - ] + ], + hooks: { + afterRead: [afterReadHook] + }, } diff --git a/src/payload-types.ts b/src/payload-types.ts index e7931f5..c06d755 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -254,6 +254,7 @@ export interface Repository { */ export interface Copy { id: number; + label?: string | null; condition?: number | null; book?: (number | null) | Book; repository?: (number | null) | Repository; @@ -461,6 +462,7 @@ export interface RepositoriesSelect { * via the `definition` "copies_select". */ export interface CopiesSelect { + label?: T; condition?: T; book?: T; repository?: T;