import { CollectionConfig } from "payload/types";
import slug from "../fields/slug";
import activeLocales from "../fields/activeLocales";
import IntroductionBlock from "../blocks/IntroductionBlock";
import HighlightContentBoxBlock from "../blocks/HighlightContentBoxBlock";
import ImageAndTextBlock from "../blocks/ImageAndTextBlock";
import IconListBlock from "../blocks/IconListBlock";
import { authorFieldAccessControl, commonAccessControl } from "../Common";
import MediaGalleryBlock from "../blocks/MediaGalleryBlock";
import backpopulate from "../plugins/backpopulated-relationship/hooks/backpopulate";
import NewRichTextBlock from "../blocks/NewRichTextBlock";
import { getPrice, Shop, getUpdatedProducts } from "../affiliates/amazon";
import payload from "payload";
const Products: CollectionConfig = {
slug: "products",
labels: {
singular: "Product Article",
plural: "Product Articles",
},
admin: {
useAsTitle: "title",
description: "Any products",
group: "📄 Articles",
},
access: commonAccessControl,
versions: {
maxPerDoc: 50,
drafts: {
autosave: false,
},
},
fields: [
{
name: "title",
label: "Title",
type: "text",
required: true,
localized: true,
},
activeLocales,
{
type: "tabs", // required
tabs: [
// required
{
label: "review", // required
description: "Fields for review",
fields: [
// required
{
name: "author",
type: "relationship",
relationTo: "authors",
access: authorFieldAccessControl,
},
slug(),
{
name: "updated_override", // required
type: "date", // required
label: "Updated (Override)",
admin: {
position: "sidebar",
date: {
pickerAppearance: "dayAndTime",
},
},
},
{
name: "published_override", // required
type: "date", // required
label: "Published (Override)",
admin: {
position: "sidebar",
date: {
pickerAppearance: "dayAndTime",
},
},
},
{
name: "featured_image",
label: "Featured Image",
type: "upload",
relationTo: "media",
},
{
name: "featured_image_caption",
label: "Caption for Featured Image",
type: "text",
},
{
name: "content",
label: "Content",
type: "blocks",
minRows: 0,
maxRows: 1000,
blocks: [
NewRichTextBlock,
IntroductionBlock,
HighlightContentBoxBlock,
ImageAndTextBlock,
IconListBlock,
MediaGalleryBlock,
],
},
],
},
{
name: "product",
label: "Product Information", // required
fields: [
// required
{
name: "alternatives",
label: "Alternative Products (if this one not available)",
type: "relationship",
relationTo: "products",
hasMany: true,
hooks: {
afterChange: [backpopulate],
},
},
{
name: "shops", // required
type: "array", // required
label: "Shops",
minRows: 0,
maxRows: 10,
labels: {
singular: "Shop",
plural: "Shops",
},
hooks: {
afterRead: [
async ({ data, siblingData, value, req, operation }) => {
console.log("Running with", operation);
console.log("siblingdata", siblingData);
},
],
},
fields: [
// required
{
name: "shop",
type: "relationship",
relationTo: "shops",
hasMany: false,
hooks: {
afterChange: [backpopulate],
},
},
{
name: "link",
type: "text",
},
{
name: "link_affiliate",
type: "text",
},
{
name: "price",
type: "number",
admin: {
readOnly: true,
},
},
{
name: "available", // required
type: "checkbox", // required
label: "Available",
defaultValue: true,
admin: {
readOnly: true,
},
},
{
name: "last_checked",
type: "date",
admin: {
readOnly: true,
},
},
],
},
],
},
],
},
],
};
export default Products;