Comments (5)
Hey - we will need a minimal reproduction in order to help you here. Can we see your config? And your collection configs where upload is enabled?
from payload.
Hey! Thx for quick response, ok i can show config and some collections code.
// payload.config.ts
import path from 'path'
import sharp from 'sharp'
import { fileURLToPath } from 'url'
import { en } from 'payload/i18n/en'
import { ru } from 'payload/i18n/ru'
import { buildConfig } from 'payload/config'
import { slateEditor } from '@payloadcms/richtext-slate'
import { postgresAdapter } from '@payloadcms/db-postgres'
import { nestedDocsPlugin } from '@payloadcms/plugin-nested-docs'
import { searchPlugin } from '@payloadcms/plugin-search'
import Users from './src/collections/Users'
import Products from './src/collections/Products'
import Categories from './src/collections/Categories'
import Tags from './src/collections/Tags'
import Media from './src/collections/Media'
import SpecGroup from './src/collections/SpecGroup'
import SpecName from './src/collections/SpecName'
import SpecValue from './src/collections/SpecValue'
import ProductSpecs from './src/collections/ProductSpecs'
import Pages from './src/collections/Pages'
import Widgets from './src/collections/Widgets'
import Orders from './src/collections/Orders'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfig({
cors: process.env.NODE_ENV === 'production' ? undefined : '*',
admin: {
user: Users.slug,
// css: path.resolve(__dirname, './src/assets/styles/base.scss'),
// bundler: viteBundler(),
},
editor: slateEditor({}),
collections: [
Users,
Products,
Categories,
Tags,
Media,
ProductSpecs,
SpecGroup,
SpecName,
SpecValue,
Pages,
Widgets,
Orders,
],
secret: process.env.PAYLOAD_SECRET || '',
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
plugins: [
// payloadCloud(),
searchPlugin({
collections: [Products.slug],
searchOverrides: {
admin: {
hidden: true,
},
},
}),
nestedDocsPlugin({
collections: [Categories.slug],
generateURL: (docs) => docs.reduce((_, doc) => `/catalog/${doc.slug}`, ''),
}),
],
db: postgresAdapter({
pool: {
connectionString: process.env.DATABASE_URI,
},
}),
i18n: {
supportedLanguages: { en, ru },
},
sharp,
})
// src/collections/Media.ts
import { CollectionConfig } from 'payload/types'
const Media: CollectionConfig = {
slug: 'media',
access: {
read: () => true,
create: () => true,
},
labels: {
singular: {
en: 'Media',
ru: 'Медиа',
},
plural: {
en: 'Media',
ru: 'Медиа',
},
},
fields: [
{
name: 'alt',
type: 'text',
},
],
upload: {
staticDir: 'media',
imageSizes: [
{
name: 'thumbnail',
width: 256,
height: 256,
position: 'centre',
},
{
name: 'card',
width: 512,
height: 512,
position: 'centre',
},
{
name: 'tablet',
width: 1024,
height: 1024,
position: 'centre',
},
{
name: 'banner',
width: 1256,
height: 400,
position: 'centre',
},
],
adminThumbnail: 'thumbnail',
mimeTypes: ['image/*'],
},
}
export default Media
from payload.
i can't see it from your code, but if you somewhere have something like this with custom component
Field: (props) => <Component {...props} />
And Component
is client component, then you'll get this error. Because there was a breaking change, that also was actually a fix with passing payload
into custom component. You need to delete payload
key before passing it
Field: ({ payload: _payload, ...props }) => <Component {...props} />
from payload.
Yes, i have custom components in my Products
collection which has client-only components, but if i comment lines with this components, errors doesn't gone.
I tried like you say:
Field: ({ payload: _payload, ...props }) => <Uppy {...props} />,
Field: ({ payload: _payload, ...props }) => <SpecList {...props} />,
but it's not working.
Products collection:
// src/collections/Products.ts
import { CollectionConfig } from 'payload/types'
import Tags from '../Tags'
import ProductSpecs from '../ProductSpecs'
import SpecList from './ui/SpecList'
import SpecGroup from '../SpecGroup'
import SpecName from '../SpecName'
import SpecValue from '../SpecValue'
import productSpecsHook from './hooks/product-specs'
import productMediaHook from './hooks/product-media'
// import initSpecsHook from './hooks/init-specs'
// import validateSpecs from './validations/validate-specs'
import Uppy from '../../app/(payload)/components/Uppy'
import Media from '../Media'
import SaveButton from './ui/SaveButton'
import generateSlug from '../hooks/generate-slug'
const Products: CollectionConfig = {
slug: 'products',
access: {
read: () => true,
create: () => true,
update: () => true,
},
hooks: {
beforeOperation: [generateSlug],
},
admin: {
useAsTitle: 'title',
components: {
edit: {
SaveButton,
},
},
},
labels: {
singular: {
en: 'Product',
ru: 'Товар',
},
plural: {
en: 'Products',
ru: 'Товары',
},
},
fields: [
{
name: 'title',
type: 'text',
required: true,
label: {
en: 'Title',
ru: 'Название',
},
},
{
name: 'slug',
type: 'text',
unique: true,
admin: {
hidden: true,
},
label: {
en: 'Slug',
ru: 'Строка',
},
},
{
name: 'hero',
type: 'upload',
relationTo: 'media',
required: true,
label: {
en: 'Hero',
ru: 'Изображение',
},
},
{
name: 'category',
type: 'relationship',
required: true,
relationTo: 'categories',
hasMany: false,
admin: {
position: 'sidebar',
},
label: {
en: 'Catergory',
ru: 'Категория',
},
},
{
name: 'sku',
type: 'text',
required: true,
unique: true,
admin: {
position: 'sidebar',
},
label: {
en: 'Sku',
ru: 'Артикул',
},
},
{
name: 'stock',
type: 'number',
defaultValue: 0,
required: true,
admin: {
position: 'sidebar',
},
label: {
en: 'Stock',
ru: 'Наличие',
},
},
{
name: 'status',
type: 'text',
admin: {
position: 'sidebar',
},
label: {
en: 'Status',
ru: 'Статус',
},
},
{
name: 'prices',
type: 'group',
interfaceName: 'Prices',
label: {
en: 'Prices',
ru: 'Цены',
},
admin: {
position: 'sidebar',
},
fields: [
{
name: 'retail',
type: 'number',
required: true,
label: {
en: 'Retail',
ru: 'Розничная цена',
},
},
{
name: 'purchase',
type: 'number',
label: {
en: 'Purchase',
ru: 'Оптовая цена',
},
},
{
name: 'discount',
type: 'number',
label: {
en: 'Discount',
ru: 'Скидка',
},
},
{
name: 'currency',
type: 'text',
required: true,
defaultValue: '₸',
label: {
en: 'Currency',
ru: 'Валюта',
},
},
],
},
{
name: 'description',
type: 'richText',
label: {
en: 'Description',
ru: 'Описание',
},
},
{
name: 'media',
type: 'relationship',
relationTo: Media.slug,
hasMany: true,
label: {
en: 'Media',
ru: 'Медиа файлы',
},
admin: {
components: {
Field: Uppy,
},
},
// hooks: {
// beforeChange: [productMediaHook],
// },
},
{
name: 'productspecs',
type: 'relationship',
relationTo: ProductSpecs.slug,
hasMany: true,
label: {
en: 'Specifications',
ru: 'Характеристики',
},
admin: {
custom: {
fields: [
{
name: 'group',
type: 'ui',
custom: {
collection: SpecGroup.slug,
},
label: {
en: 'Group',
ru: 'Группа',
},
},
{
name: 'name',
type: 'ui',
custom: {
collection: SpecName.slug,
},
label: {
en: 'Name',
ru: 'Название',
},
},
{
name: 'value',
type: 'ui',
custom: {
collection: SpecValue.slug,
},
label: {
en: 'Value',
ru: 'Значение',
},
},
],
},
components: {
Field: SpecList,
},
},
hooks: {
beforeChange: [productSpecsHook],
// afterRead: [initSpecsHook]
},
// validate: validateSpecs,
},
{
name: 'dimensions',
type: 'group',
interfaceName: 'Dimensions',
admin: {
className: 'product-dimensions',
},
label: {
en: 'Dimensions (mm)',
ru: 'Размеры (мм)',
},
fields: [
{
name: 'width',
type: 'number',
admin: {
width: '24%',
},
label: {
en: 'Width',
ru: 'Ширина',
},
},
{
name: 'height',
type: 'number',
admin: {
width: '24%',
},
label: {
en: 'Height',
ru: 'Высота',
},
},
{
name: 'length',
type: 'number',
admin: {
width: '24%',
},
label: {
en: 'Length',
ru: 'Длина',
},
},
{
name: 'weight',
type: 'number',
admin: {
width: '24%',
},
label: {
en: 'Weight',
ru: 'Вес',
},
},
],
},
{
name: 'model',
type: 'text',
label: {
en: 'Model',
ru: 'Модель',
},
},
{
name: 'manufacturer',
type: 'text',
label: {
en: 'Manufacturer',
ru: 'Производитель',
},
},
{
name: 'country',
type: 'text',
label: {
en: 'Country',
ru: 'Страна',
},
},
{
name: 'isVisible',
defaultValue: true,
type: 'checkbox',
label: {
en: 'Visiblity',
ru: 'Видимость',
},
},
{
name: 'tags',
type: 'relationship',
hasMany: true,
relationTo: Tags.slug,
admin: {
position: 'sidebar',
},
label: {
en: 'Tags',
ru: 'Тэги',
},
},
{
name: 'views',
type: 'number',
hidden: true,
defaultValue: 0,
label: {
en: 'Views',
ru: 'Просмотры',
},
},
],
}
export default Products
from payload.
A solution has been found. I'm running the dev server using the --turbo
option and maybe it's using some strict options because the UI isn't showing up with this errors, but without --turbo
it's showing up normally, although I'm getting the following errors in the console:
key not found: upload:Sizes
⨯ node_modules/.pnpm/@[email protected]_@[email protected][email protected][email protected]_xof4nppotimeuxnbzv4dvfsslu/node_modules/@payloadcms/plugin-search/dist/Search/ui/index.js (5:30) @ LinkToDoc
⨯ TypeError: (0 , _payloadcms_ui_forms_Form__WEBPACK_IMPORTED_MODULE_0__.useWatchForm) is not a function
at stringify (<anonymous>)
digest: "2857860722"
3 | import React from 'react';
4 | export const LinkToDoc = ()=>{
> 5 | const form = useWatchForm();
| ^
6 | const fields = form.fields;
7 | const { doc: { value: { relationTo, value: docId } } } = fields;
8 | const config = useConfig();
from payload.
Related Issues (20)
- Breaking: MongoDb - Versions cast the "parent" key incorrectly
- [v3.0.0-beta.32] Has Many - Polymorphic Relationship Field ID Conflicts Across Collections Using PostgreSQL Adapter
- Can't Filter by Related Field? Postgres Bug? HOT 1
- Cloud storage plugin socket usage at capacity HOT 1
- No scroll to error when saving within globals or collections
- Can't change page size in drawer
- [v3.0.0-beta32] Host is always localhost even on vercel
- [3.0.0-beta.32] CORS error in upload collection in live preview HOT 1
- Incorrect GraphQL Where schemas generated for Relation fields
- [3.0.0-beta.32] Duplicating block issues with blocks field type HOT 5
- [3.0.0-beta.32] Issue with Payload on an existing nextjs app while changing its admin and api paths
- `field.admin.disableListColumn` has no effect if the field is nested inside a row field
- Displayed validation error gets stuck HOT 1
- [3.0.0-beta.34] incorrect import of `isHotkey` in richtext-slate plugin HOT 1
- [3.0] - Plugin SEO - Clicking "choose existing" image crashes the frontend
- [3.0.0-beta.34] Error with Payload config validation on field "admin.meta"
- Missing "id" property in adminThumbnail's doc parameter
- Including getPayloadHMR in a NextJS app increases the bundle size significantly HOT 8
- dependency issue using localAPI in a sveltekit application HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from payload.