Compare commits
1 Commits
v3.0.0-bet
...
chore/beta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7426e73f81 |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "payload-monorepo",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
@@ -132,8 +132,8 @@
|
||||
"create-payload-app": "workspace:*",
|
||||
"cross-env": "7.0.3",
|
||||
"dotenv": "16.4.5",
|
||||
"drizzle-kit": "0.26.2",
|
||||
"drizzle-orm": "0.35.1",
|
||||
"drizzle-kit": "0.26.1",
|
||||
"drizzle-orm": "0.35.0",
|
||||
"escape-html": "^1.0.3",
|
||||
"execa": "5.1.1",
|
||||
"form-data": "3.0.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-payload-app",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/db-mongodb",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The officially supported MongoDB database adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/db-postgres",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The officially supported Postgres database adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
@@ -50,8 +50,8 @@
|
||||
"@payloadcms/drizzle": "workspace:*",
|
||||
"@types/pg": "8.10.2",
|
||||
"console-table-printer": "2.11.2",
|
||||
"drizzle-kit": "0.26.2",
|
||||
"drizzle-orm": "0.35.1",
|
||||
"drizzle-kit": "0.26.1",
|
||||
"drizzle-orm": "0.35.0",
|
||||
"pg": "8.11.3",
|
||||
"prompts": "2.4.2",
|
||||
"to-snake-case": "1.0.0",
|
||||
|
||||
@@ -136,7 +136,6 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj<PostgresAdapter>
|
||||
findGlobalVersions,
|
||||
findOne,
|
||||
findVersions,
|
||||
indexes: new Set<string>(),
|
||||
init,
|
||||
insert,
|
||||
migrate,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/db-sqlite",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The officially supported SQLite database adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
@@ -48,8 +48,8 @@
|
||||
"@libsql/client": "0.14.0",
|
||||
"@payloadcms/drizzle": "workspace:*",
|
||||
"console-table-printer": "2.11.2",
|
||||
"drizzle-kit": "0.26.2",
|
||||
"drizzle-orm": "0.35.1",
|
||||
"drizzle-kit": "0.26.1",
|
||||
"drizzle-orm": "0.35.0",
|
||||
"prompts": "2.4.2",
|
||||
"to-snake-case": "1.0.0",
|
||||
"uuid": "9.0.0"
|
||||
|
||||
@@ -133,7 +133,6 @@ export function sqliteAdapter(args: Args): DatabaseAdapterObj<SQLiteAdapter> {
|
||||
findGlobalVersions,
|
||||
findOne,
|
||||
findVersions,
|
||||
indexes: new Set<string>(),
|
||||
init,
|
||||
insert,
|
||||
migrate,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { DrizzleAdapter } from '@payloadcms/drizzle/types'
|
||||
import type { Relation } from 'drizzle-orm'
|
||||
import type {
|
||||
AnySQLiteColumn,
|
||||
@@ -10,7 +9,7 @@ import type {
|
||||
} from 'drizzle-orm/sqlite-core'
|
||||
import type { Field, SanitizedJoins } from 'payload'
|
||||
|
||||
import { buildIndexName, createTableName } from '@payloadcms/drizzle'
|
||||
import { createTableName } from '@payloadcms/drizzle'
|
||||
import { relations, sql } from 'drizzle-orm'
|
||||
import {
|
||||
foreignKey,
|
||||
@@ -417,25 +416,21 @@ export const buildTable = ({
|
||||
foreignColumns: [adapter.tables[formattedRelationTo].id],
|
||||
}).onDelete('cascade')
|
||||
|
||||
const indexColumns = [colName]
|
||||
const indexName = [colName]
|
||||
|
||||
const unique = !disableUnique && uniqueRelationships.has(relationTo)
|
||||
|
||||
if (unique) {
|
||||
indexColumns.push('path')
|
||||
indexName.push('path')
|
||||
}
|
||||
if (hasLocalizedRelationshipField) {
|
||||
indexColumns.push('locale')
|
||||
indexName.push('locale')
|
||||
}
|
||||
|
||||
const indexName = buildIndexName({
|
||||
name: `${relationshipsTableName}_${formattedRelationTo}_id`,
|
||||
adapter: adapter as unknown as DrizzleAdapter,
|
||||
})
|
||||
|
||||
relationExtraConfig[indexName] = createIndex({
|
||||
name: indexColumns,
|
||||
indexName,
|
||||
relationExtraConfig[`${relationTo}IdIdx`] = createIndex({
|
||||
name: indexName,
|
||||
columnName: `${formattedRelationTo}_id`,
|
||||
tableName: relationshipsTableName,
|
||||
unique,
|
||||
})
|
||||
})
|
||||
|
||||
@@ -3,12 +3,13 @@ import type { AnySQLiteColumn } from 'drizzle-orm/sqlite-core'
|
||||
import { index, uniqueIndex } from 'drizzle-orm/sqlite-core'
|
||||
|
||||
type CreateIndexArgs = {
|
||||
indexName: string
|
||||
columnName: string
|
||||
name: string | string[]
|
||||
tableName: string
|
||||
unique?: boolean
|
||||
}
|
||||
|
||||
export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => {
|
||||
export const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => {
|
||||
return (table: { [x: string]: AnySQLiteColumn }) => {
|
||||
let columns
|
||||
if (Array.isArray(name)) {
|
||||
@@ -20,8 +21,8 @@ export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => {
|
||||
columns = [table[name]]
|
||||
}
|
||||
if (unique) {
|
||||
return uniqueIndex(indexName).on(columns[0], ...columns.slice(1))
|
||||
return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))
|
||||
}
|
||||
return index(indexName).on(columns[0], ...columns.slice(1))
|
||||
return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
import type { DrizzleAdapter } from '@payloadcms/drizzle/types'
|
||||
import type { Relation } from 'drizzle-orm'
|
||||
import type { IndexBuilder, SQLiteColumnBuilder } from 'drizzle-orm/sqlite-core'
|
||||
import type { Field, SanitizedJoins, TabAsField } from 'payload'
|
||||
|
||||
import {
|
||||
buildIndexName,
|
||||
createTableName,
|
||||
hasLocalesTable,
|
||||
validateExistingBlockIsIdentical,
|
||||
@@ -166,15 +164,10 @@ export const traverseFields = ({
|
||||
}
|
||||
adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue
|
||||
}
|
||||
|
||||
const indexName = buildIndexName({
|
||||
name: `${newTableName}_${columnName}`,
|
||||
adapter: adapter as unknown as DrizzleAdapter,
|
||||
})
|
||||
|
||||
targetIndexes[indexName] = createIndex({
|
||||
targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({
|
||||
name: field.localized ? [fieldName, '_locale'] : fieldName,
|
||||
indexName,
|
||||
columnName,
|
||||
tableName: newTableName,
|
||||
unique,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/db-vercel-postgres",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Vercel Postgres adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
@@ -50,8 +50,8 @@
|
||||
"@payloadcms/drizzle": "workspace:*",
|
||||
"@vercel/postgres": "^0.9.0",
|
||||
"console-table-printer": "2.11.2",
|
||||
"drizzle-kit": "0.26.2",
|
||||
"drizzle-orm": "0.35.1",
|
||||
"drizzle-kit": "0.26.1",
|
||||
"drizzle-orm": "0.35.0",
|
||||
"pg": "8.11.3",
|
||||
"prompts": "2.4.2",
|
||||
"to-snake-case": "1.0.0",
|
||||
|
||||
@@ -90,7 +90,6 @@ export function vercelPostgresAdapter(args: Args = {}): DatabaseAdapterObj<Verce
|
||||
fieldConstraints: {},
|
||||
getMigrationTemplate,
|
||||
idType: postgresIDType,
|
||||
indexes: new Set<string>(),
|
||||
initializing,
|
||||
localesSuffix: args.localesSuffix || '_locales',
|
||||
logger: args.logger,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/drizzle",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "A library of shared functions used by different payload database adapters",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"console-table-printer": "2.11.2",
|
||||
"drizzle-orm": "0.35.1",
|
||||
"drizzle-orm": "0.34.1-1f15bfd",
|
||||
"prompts": "2.4.2",
|
||||
"to-snake-case": "1.0.0",
|
||||
"uuid": "9.0.0"
|
||||
|
||||
@@ -32,7 +32,6 @@ export { updateGlobal } from './updateGlobal.js'
|
||||
export { updateGlobalVersion } from './updateGlobalVersion.js'
|
||||
export { updateVersion } from './updateVersion.js'
|
||||
export { upsertRow } from './upsertRow/index.js'
|
||||
export { buildIndexName } from './utilities/buildIndexName.js'
|
||||
export { executeSchemaHooks } from './utilities/executeSchemaHooks.js'
|
||||
export { extendDrizzleTable } from './utilities/extendDrizzleTable.js'
|
||||
export { hasLocalesTable } from './utilities/hasLocalesTable.js'
|
||||
|
||||
@@ -54,7 +54,7 @@ export const createDatabase = async function (this: BasePostgresAdapter, args: A
|
||||
}
|
||||
|
||||
// import pg only when createDatabase is used
|
||||
const pg = await import('pg').then((mod) => mod.default)
|
||||
const pg = await import('pg')
|
||||
|
||||
const managementClient = new pg.Client(managementClientConfig)
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import type {
|
||||
} from '../types.js'
|
||||
|
||||
import { createTableName } from '../../createTableName.js'
|
||||
import { buildIndexName } from '../../utilities/buildIndexName.js'
|
||||
import { createIndex } from './createIndex.js'
|
||||
import { parentIDColumnMap } from './parentIDColumnMap.js'
|
||||
import { setColumnID } from './setColumnID.js'
|
||||
@@ -390,25 +389,21 @@ export const buildTable = ({
|
||||
foreignColumns: [adapter.tables[formattedRelationTo].id],
|
||||
}).onDelete('cascade')
|
||||
|
||||
const indexColumns = [colName]
|
||||
const indexName = [colName]
|
||||
|
||||
const unique = !disableUnique && uniqueRelationships.has(relationTo)
|
||||
|
||||
if (unique) {
|
||||
indexColumns.push('path')
|
||||
indexName.push('path')
|
||||
}
|
||||
if (hasLocalizedRelationshipField) {
|
||||
indexColumns.push('locale')
|
||||
indexName.push('locale')
|
||||
}
|
||||
|
||||
const indexName = buildIndexName({
|
||||
name: `${relationshipsTableName}_${formattedRelationTo}_id`,
|
||||
adapter,
|
||||
})
|
||||
|
||||
relationExtraConfig[indexName] = createIndex({
|
||||
name: indexColumns,
|
||||
indexName,
|
||||
relationExtraConfig[`${relationTo}IdIdx`] = createIndex({
|
||||
name: indexName,
|
||||
columnName: `${formattedRelationTo}_id`,
|
||||
tableName: relationshipsTableName,
|
||||
unique,
|
||||
})
|
||||
})
|
||||
|
||||
@@ -3,12 +3,13 @@ import { index, uniqueIndex } from 'drizzle-orm/pg-core'
|
||||
import type { GenericColumn } from '../types.js'
|
||||
|
||||
type CreateIndexArgs = {
|
||||
indexName: string
|
||||
columnName: string
|
||||
name: string | string[]
|
||||
tableName: string
|
||||
unique?: boolean
|
||||
}
|
||||
|
||||
export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => {
|
||||
export const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => {
|
||||
return (table: { [x: string]: GenericColumn }) => {
|
||||
let columns
|
||||
if (Array.isArray(name)) {
|
||||
@@ -20,8 +21,8 @@ export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => {
|
||||
columns = [table[name]]
|
||||
}
|
||||
if (unique) {
|
||||
return uniqueIndex(indexName).on(columns[0], ...columns.slice(1))
|
||||
return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))
|
||||
}
|
||||
return index(indexName).on(columns[0], ...columns.slice(1))
|
||||
return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ import type {
|
||||
} from '../types.js'
|
||||
|
||||
import { createTableName } from '../../createTableName.js'
|
||||
import { buildIndexName } from '../../utilities/buildIndexName.js'
|
||||
import { hasLocalesTable } from '../../utilities/hasLocalesTable.js'
|
||||
import { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'
|
||||
import { buildTable } from './build.js'
|
||||
@@ -170,12 +169,10 @@ export const traverseFields = ({
|
||||
}
|
||||
adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue
|
||||
}
|
||||
|
||||
const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })
|
||||
|
||||
targetIndexes[indexName] = createIndex({
|
||||
targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({
|
||||
name: field.localized ? [fieldName, '_locale'] : fieldName,
|
||||
indexName,
|
||||
columnName,
|
||||
tableName: newTableName,
|
||||
unique,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -212,9 +212,6 @@ export const traverseFields = ({
|
||||
if (typeof data[field.name] === 'object' && data[field.name] !== null) {
|
||||
if (field.localized) {
|
||||
Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {
|
||||
// preserve array ID if there is
|
||||
localeData._uuid = data.id || data._uuid
|
||||
|
||||
traverseFields({
|
||||
adapter,
|
||||
arrays,
|
||||
@@ -240,10 +237,6 @@ export const traverseFields = ({
|
||||
})
|
||||
})
|
||||
} else {
|
||||
// preserve array ID if there is
|
||||
const groupData = data[field.name] as Record<string, unknown>
|
||||
groupData._uuid = data.id || data._uuid
|
||||
|
||||
traverseFields({
|
||||
adapter,
|
||||
arrays,
|
||||
@@ -251,7 +244,7 @@ export const traverseFields = ({
|
||||
blocks,
|
||||
blocksToDelete,
|
||||
columnPrefix: `${columnName}_`,
|
||||
data: groupData,
|
||||
data: data[field.name] as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldName}_`,
|
||||
fields: field.fields,
|
||||
@@ -282,9 +275,6 @@ export const traverseFields = ({
|
||||
if (typeof data[tab.name] === 'object' && data[tab.name] !== null) {
|
||||
if (tab.localized) {
|
||||
Object.entries(data[tab.name]).forEach(([localeKey, localeData]) => {
|
||||
// preserve array ID if there is
|
||||
localeData._uuid = data.id || data._uuid
|
||||
|
||||
traverseFields({
|
||||
adapter,
|
||||
arrays,
|
||||
@@ -310,10 +300,6 @@ export const traverseFields = ({
|
||||
})
|
||||
})
|
||||
} else {
|
||||
const tabData = data[tab.name] as Record<string, unknown>
|
||||
// preserve array ID if there is
|
||||
tabData._uuid = data.id || data._uuid
|
||||
|
||||
traverseFields({
|
||||
adapter,
|
||||
arrays,
|
||||
@@ -321,7 +307,7 @@ export const traverseFields = ({
|
||||
blocks,
|
||||
blocksToDelete,
|
||||
columnPrefix: `${columnPrefix || ''}${toSnakeCase(tab.name)}_`,
|
||||
data: tabData,
|
||||
data: data[tab.name] as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldPrefix || ''}${tab.name}_`,
|
||||
fields: tab.fields,
|
||||
|
||||
@@ -174,7 +174,6 @@ export interface DrizzleAdapter extends BaseDatabaseAdapter {
|
||||
fieldConstraints: Record<string, Record<string, string>>
|
||||
getMigrationTemplate: (args: MigrationTemplateArgs) => string
|
||||
idType: 'serial' | 'uuid'
|
||||
indexes: Set<string>
|
||||
initializing: Promise<void>
|
||||
insert: Insert
|
||||
localesSuffix?: string
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
import type { DrizzleAdapter } from '../types.js'
|
||||
|
||||
export const buildIndexName = ({
|
||||
name,
|
||||
adapter,
|
||||
number = 0,
|
||||
}: {
|
||||
adapter: DrizzleAdapter
|
||||
name: string
|
||||
number?: number
|
||||
}): string => {
|
||||
const indexName = `${name}${number ? `_${number}` : ''}_idx`
|
||||
|
||||
if (!adapter.indexes.has(indexName)) {
|
||||
adapter.indexes.add(indexName)
|
||||
return indexName
|
||||
}
|
||||
|
||||
return buildIndexName({
|
||||
name,
|
||||
adapter,
|
||||
number: number + 1,
|
||||
})
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/email-nodemailer",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload Nodemailer Email Adapter",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/email-resend",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload Resend Email Adapter",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/graphql",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/live-preview-react",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official React SDK for Payload Live Preview",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/live-preview-vue",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official Vue SDK for Payload Live Preview",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/live-preview",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official live preview JavaScript SDK for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/next",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "payload",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Node, React, Headless CMS and Application Framework built on Next.js",
|
||||
"keywords": [
|
||||
"admin panel",
|
||||
|
||||
@@ -18,5 +18,4 @@ export const migrationsCollection: CollectionConfig = {
|
||||
},
|
||||
],
|
||||
graphQL: false,
|
||||
lockDocuments: false,
|
||||
}
|
||||
|
||||
@@ -29,5 +29,4 @@ export const getLockedDocumentsCollection = (config: Config): CollectionConfig =
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
lockDocuments: false,
|
||||
})
|
||||
|
||||
@@ -70,7 +70,6 @@ const getPreferencesCollection = (config: Config): CollectionConfig => ({
|
||||
type: 'json',
|
||||
},
|
||||
],
|
||||
lockDocuments: false,
|
||||
})
|
||||
|
||||
export default getPreferencesCollection
|
||||
|
||||
@@ -47,12 +47,8 @@ export const checkDocumentLockStatus = async ({
|
||||
throw new Error('Either collectionSlug or globalSlug must be provided.')
|
||||
}
|
||||
|
||||
if (!isLockingEnabled) {
|
||||
return
|
||||
}
|
||||
|
||||
// Only perform lock checks if overrideLock is false and locking is enabled
|
||||
if (!overrideLock) {
|
||||
if (!overrideLock && isLockingEnabled !== false) {
|
||||
const defaultLockErrorMessage = collectionSlug
|
||||
? `Document with ID ${id} is currently locked by another user and cannot be modified.`
|
||||
: `Global document with slug "${globalSlug}" is currently locked by another user and cannot be modified.`
|
||||
|
||||
@@ -5,7 +5,6 @@ import type { Field, FieldAccess } from '../fields/config/types.js'
|
||||
import type { SanitizedGlobalConfig } from '../globals/config/types.js'
|
||||
import type { AllOperations, Document, PayloadRequest, Where } from '../types/index.js'
|
||||
|
||||
import { combineQueries } from '../database/combineQueries.js'
|
||||
import { tabHasName } from '../fields/config/types.js'
|
||||
|
||||
type Args = {
|
||||
@@ -64,7 +63,17 @@ export async function getEntityPolicies<T extends Args>(args: T): Promise<Return
|
||||
overrideAccess: true,
|
||||
pagination: false,
|
||||
req,
|
||||
where: combineQueries(where, { id: { equals: id } }),
|
||||
where: {
|
||||
...where,
|
||||
and: [
|
||||
...(where.and || []),
|
||||
{
|
||||
id: {
|
||||
equals: id,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
return paginatedRes?.docs?.[0] || undefined
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Where } from '../../types/index.js'
|
||||
|
||||
export const appendVersionToQueryKey = (query: Where = {}): Where => {
|
||||
export const appendVersionToQueryKey = (query: Where): Where => {
|
||||
return Object.entries(query).reduce((res, [key, val]) => {
|
||||
if (['AND', 'and', 'OR', 'or'].includes(key) && Array.isArray(val)) {
|
||||
return {
|
||||
|
||||
@@ -3,9 +3,6 @@ import type { FindOneArgs } from '../database/types.js'
|
||||
import type { Payload, PayloadRequest } from '../types/index.js'
|
||||
import type { TypeWithVersion } from './types.js'
|
||||
|
||||
import { combineQueries } from '../database/combineQueries.js'
|
||||
import { appendVersionToQueryKey } from './drafts/appendVersionToQueryKey.js'
|
||||
|
||||
type Args = {
|
||||
config: SanitizedCollectionConfig
|
||||
id: number | string
|
||||
@@ -36,7 +33,7 @@ export const getLatestCollectionVersion = async <T extends TypeWithID = any>({
|
||||
pagination: false,
|
||||
req,
|
||||
sort: '-updatedAt',
|
||||
where: combineQueries(appendVersionToQueryKey(query.where), whereQuery),
|
||||
where: whereQuery,
|
||||
})
|
||||
;[latestVersion] = docs
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-cloud-storage",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official cloud storage plugin for Payload CMS",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-cloud",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official Payload Cloud plugin",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-form-builder",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Form builder plugin for Payload CMS",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-nested-docs",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The official Nested Docs plugin for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-redirects",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Redirects plugin for Payload",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-search",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Search plugin for Payload",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-sentry",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Sentry plugin for Payload",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-seo",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "SEO plugin for Payload",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/plugin-stripe",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Stripe plugin for Payload",
|
||||
"keywords": [
|
||||
"payload",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/richtext-lexical",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The officially supported Lexical richtext adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/richtext-slate",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "The officially supported Slate richtext adapter for Payload",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/storage-azure",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload storage adapter for Azure Blob Storage",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/storage-gcs",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload storage adapter for Google Cloud Storage",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/storage-s3",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload storage adapter for Amazon S3",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/storage-uploadthing",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload storage adapter for uploadthing",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/storage-vercel-blob",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"description": "Payload storage adapter for Vercel Blob Storage",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/translations",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/ui",
|
||||
"version": "3.0.0-beta.116",
|
||||
"version": "3.0.0-beta.114",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -11,11 +11,10 @@ import './index.scss'
|
||||
const baseClass = 'bulk-upload--add-files'
|
||||
|
||||
type Props = {
|
||||
readonly acceptMimeTypes?: string
|
||||
readonly onCancel: () => void
|
||||
readonly onDrop: (acceptedFiles: FileList) => void
|
||||
}
|
||||
export function AddFilesView({ acceptMimeTypes, onCancel, onDrop }: Props) {
|
||||
export function AddFilesView({ onCancel, onDrop }: Props) {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const inputRef = React.useRef(null)
|
||||
@@ -38,7 +37,6 @@ export function AddFilesView({ acceptMimeTypes, onCancel, onDrop }: Props) {
|
||||
{t('upload:selectFile')}
|
||||
</Button>
|
||||
<input
|
||||
accept={acceptMimeTypes}
|
||||
aria-hidden="true"
|
||||
className={`${baseClass}__hidden-input`}
|
||||
hidden
|
||||
|
||||
@@ -5,7 +5,6 @@ import type { JsonObject } from 'payload'
|
||||
import { useModal } from '@faceless-ui/modal'
|
||||
import React from 'react'
|
||||
|
||||
import { useConfig } from '../../providers/Config/index.js'
|
||||
import { EditDepthProvider, useEditDepth } from '../../providers/EditDepth/index.js'
|
||||
import { Drawer } from '../Drawer/index.js'
|
||||
import { AddFilesView } from './AddFilesView/index.js'
|
||||
@@ -18,27 +17,12 @@ function DrawerContent() {
|
||||
const { addFiles, forms, isInitializing } = useFormsManager()
|
||||
const { closeModal } = useModal()
|
||||
const { collectionSlug, drawerSlug } = useBulkUpload()
|
||||
const { config } = useConfig()
|
||||
|
||||
const uploadCollection = config.collections.find((col) => col.slug === collectionSlug)
|
||||
const uploadConfig = uploadCollection.upload
|
||||
const uploadMimeTypes = uploadConfig.mimeTypes
|
||||
|
||||
const onDrop = React.useCallback(
|
||||
(acceptedFiles: FileList) => {
|
||||
const fileTransfer = new DataTransfer()
|
||||
for (const candidateFile of acceptedFiles) {
|
||||
if (
|
||||
uploadMimeTypes === undefined ||
|
||||
uploadMimeTypes.length === 0 ||
|
||||
uploadMimeTypes?.includes(candidateFile.type)
|
||||
) {
|
||||
fileTransfer.items.add(candidateFile)
|
||||
}
|
||||
}
|
||||
void addFiles(fileTransfer.files)
|
||||
void addFiles(acceptedFiles)
|
||||
},
|
||||
[addFiles, uploadMimeTypes],
|
||||
[addFiles],
|
||||
)
|
||||
|
||||
if (!collectionSlug) {
|
||||
@@ -46,13 +30,7 @@ function DrawerContent() {
|
||||
}
|
||||
|
||||
if (!forms.length && !isInitializing) {
|
||||
return (
|
||||
<AddFilesView
|
||||
acceptMimeTypes={uploadMimeTypes?.join(', ')}
|
||||
onCancel={() => closeModal(drawerSlug)}
|
||||
onDrop={onDrop}
|
||||
/>
|
||||
)
|
||||
return <AddFilesView onCancel={() => closeModal(drawerSlug)} onDrop={onDrop} />
|
||||
} else {
|
||||
return <AddingFilesView />
|
||||
}
|
||||
|
||||
@@ -218,8 +218,6 @@ export const Upload: React.FC<UploadProps> = (props) => {
|
||||
|
||||
const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)
|
||||
|
||||
const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')
|
||||
|
||||
return (
|
||||
<div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>
|
||||
<FieldError field={null} message={errorMessage} showError={showError} />
|
||||
@@ -253,7 +251,6 @@ export const Upload: React.FC<UploadProps> = (props) => {
|
||||
{t('upload:selectFile')}
|
||||
</Button>
|
||||
<input
|
||||
accept={acceptMimeTypes}
|
||||
aria-hidden="true"
|
||||
className={`${baseClass}__hidden-input`}
|
||||
hidden
|
||||
|
||||
56
pnpm-lock.yaml
generated
56
pnpm-lock.yaml
generated
@@ -10,7 +10,7 @@ overrides:
|
||||
copyfiles: 2.4.1
|
||||
cross-env: 7.0.3
|
||||
dotenv: 16.4.5
|
||||
drizzle-orm: 0.35.1
|
||||
drizzle-orm: 0.35.0
|
||||
graphql: ^16.8.1
|
||||
mongodb-memory-server: ^9.0
|
||||
react: 19.0.0-rc-3edc000d-20240926
|
||||
@@ -109,11 +109,11 @@ importers:
|
||||
specifier: 16.4.5
|
||||
version: 16.4.5
|
||||
drizzle-kit:
|
||||
specifier: 0.26.2
|
||||
version: 0.26.2
|
||||
specifier: 0.26.1
|
||||
version: 0.26.1
|
||||
drizzle-orm:
|
||||
specifier: 0.35.1
|
||||
version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
specifier: 0.35.0
|
||||
version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
escape-html:
|
||||
specifier: ^1.0.3
|
||||
version: 1.0.3
|
||||
@@ -315,11 +315,11 @@ importers:
|
||||
specifier: 2.11.2
|
||||
version: 2.11.2
|
||||
drizzle-kit:
|
||||
specifier: 0.26.2
|
||||
version: 0.26.2
|
||||
specifier: 0.26.1
|
||||
version: 0.26.1
|
||||
drizzle-orm:
|
||||
specifier: 0.35.1
|
||||
version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
specifier: 0.35.0
|
||||
version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
pg:
|
||||
specifier: 8.11.3
|
||||
version: 8.11.3
|
||||
@@ -361,11 +361,11 @@ importers:
|
||||
specifier: 2.11.2
|
||||
version: 2.11.2
|
||||
drizzle-kit:
|
||||
specifier: 0.26.2
|
||||
version: 0.26.2
|
||||
specifier: 0.26.1
|
||||
version: 0.26.1
|
||||
drizzle-orm:
|
||||
specifier: 0.35.1
|
||||
version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
specifier: 0.35.0
|
||||
version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
prompts:
|
||||
specifier: 2.4.2
|
||||
version: 2.4.2
|
||||
@@ -401,11 +401,11 @@ importers:
|
||||
specifier: 2.11.2
|
||||
version: 2.11.2
|
||||
drizzle-kit:
|
||||
specifier: 0.26.2
|
||||
version: 0.26.2
|
||||
specifier: 0.26.1
|
||||
version: 0.26.1
|
||||
drizzle-orm:
|
||||
specifier: 0.35.1
|
||||
version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
specifier: 0.35.0
|
||||
version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
pg:
|
||||
specifier: 8.11.3
|
||||
version: 8.11.3
|
||||
@@ -444,8 +444,8 @@ importers:
|
||||
specifier: 2.11.2
|
||||
version: 2.11.2
|
||||
drizzle-orm:
|
||||
specifier: 0.35.1
|
||||
version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
specifier: 0.35.0
|
||||
version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)
|
||||
prompts:
|
||||
specifier: 2.4.2
|
||||
version: 2.4.2
|
||||
@@ -1727,8 +1727,8 @@ importers:
|
||||
specifier: 16.4.5
|
||||
version: 16.4.5
|
||||
drizzle-kit:
|
||||
specifier: 0.26.2
|
||||
version: 0.26.2
|
||||
specifier: 0.26.1
|
||||
version: 0.26.1
|
||||
eslint-plugin-playwright:
|
||||
specifier: 1.6.2
|
||||
version: 1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))
|
||||
@@ -5869,12 +5869,12 @@ packages:
|
||||
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
drizzle-kit@0.26.2:
|
||||
resolution: {integrity: sha512-cMq8omEKywjIy5KcqUo6LvEFxkl8/zYHsgYjFVXjmPWWtuW4blcz+YW9+oIhoaALgs2ebRjzXwsJgN9i6P49Dw==}
|
||||
drizzle-kit@0.26.1:
|
||||
resolution: {integrity: sha512-5/e1tzOPicPDooCm/uJIU9mWK3eD5dhW5EY61TQyVVo29xYxFLmZpXlBdOYlbfDHBsNhVzhb0XjWFmAAj7d7WA==}
|
||||
hasBin: true
|
||||
|
||||
drizzle-orm@0.35.1:
|
||||
resolution: {integrity: sha512-HQxDdYuXlZFuvDPztlUIzrX8TqWa/Ej6uN6L0hkbuGL4slexOUMc3u4nXVU15RQ5QYbk+uLQnR6v1+OIrdCTXQ==}
|
||||
drizzle-orm@0.35.0:
|
||||
resolution: {integrity: sha512-fyTKnQ6WZQqSUy6yM4Do2tJPBg1ALR0vJtO9xUTLLubD+0qS1PPuu8aVOeLZQo+g8RPJn+Vqoh30/3lSS8/a2w==}
|
||||
peerDependencies:
|
||||
'@aws-sdk/client-rds-data': '>=3'
|
||||
'@cloudflare/workers-types': '>=3'
|
||||
@@ -15436,7 +15436,7 @@ snapshots:
|
||||
|
||||
dotenv@16.4.5: {}
|
||||
|
||||
drizzle-kit@0.26.2:
|
||||
drizzle-kit@0.26.1:
|
||||
dependencies:
|
||||
'@drizzle-team/brocli': 0.10.1
|
||||
'@esbuild-kit/esm-loader': 2.6.5
|
||||
@@ -15445,7 +15445,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1):
|
||||
drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1):
|
||||
optionalDependencies:
|
||||
'@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
|
||||
'@neondatabase/serverless': 0.9.4
|
||||
@@ -15456,7 +15456,7 @@ snapshots:
|
||||
pg: 8.11.3
|
||||
react: 19.0.0-rc-3edc000d-20240926
|
||||
|
||||
drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1):
|
||||
drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1):
|
||||
optionalDependencies:
|
||||
'@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
|
||||
'@neondatabase/serverless': 0.9.4
|
||||
|
||||
7
test/_community/collections/Users/index.ts
Normal file
7
test/_community/collections/Users/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { CollectionConfig } from 'payload'
|
||||
|
||||
export const UsersCollection: CollectionConfig = {
|
||||
slug: 'users',
|
||||
auth: true,
|
||||
fields: [],
|
||||
}
|
||||
@@ -6,13 +6,16 @@ import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js'
|
||||
import { devUser } from '../credentials.js'
|
||||
import { MediaCollection } from './collections/Media/index.js'
|
||||
import { PostsCollection, postsSlug } from './collections/Posts/index.js'
|
||||
import { UsersCollection } from './collections/Users/index.js'
|
||||
import { MenuGlobal } from './globals/Menu/index.js'
|
||||
|
||||
const filename = fileURLToPath(import.meta.url)
|
||||
const dirname = path.dirname(filename)
|
||||
|
||||
export default buildConfigWithDefaults({
|
||||
// ...extend config here
|
||||
collections: [
|
||||
UsersCollection,
|
||||
PostsCollection,
|
||||
{
|
||||
slug: 'simple',
|
||||
@@ -26,6 +29,7 @@ export default buildConfigWithDefaults({
|
||||
MediaCollection,
|
||||
],
|
||||
admin: {
|
||||
user: 'users',
|
||||
importMap: {
|
||||
baseDir: path.resolve(dirname),
|
||||
},
|
||||
|
||||
@@ -120,23 +120,6 @@ const IndexedFields: CollectionConfig = {
|
||||
],
|
||||
label: 'Collapsible',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'someText',
|
||||
index: true,
|
||||
},
|
||||
{
|
||||
type: 'array',
|
||||
name: 'some',
|
||||
index: true,
|
||||
fields: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'text',
|
||||
index: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
versions: true,
|
||||
}
|
||||
|
||||
@@ -82,88 +82,6 @@ const SelectFields: CollectionConfig = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'array',
|
||||
type: 'array',
|
||||
fields: [
|
||||
{
|
||||
name: 'selectHasMany',
|
||||
hasMany: true,
|
||||
type: 'select',
|
||||
admin: {
|
||||
isClearable: true,
|
||||
isSortable: true,
|
||||
},
|
||||
options: [
|
||||
{
|
||||
label: 'Value One',
|
||||
value: 'one',
|
||||
},
|
||||
{
|
||||
label: 'Value Two',
|
||||
value: 'two',
|
||||
},
|
||||
{
|
||||
label: 'Value Three',
|
||||
value: 'three',
|
||||
},
|
||||
{
|
||||
label: 'Value Four',
|
||||
value: 'four',
|
||||
},
|
||||
{
|
||||
label: 'Value Five',
|
||||
value: 'five',
|
||||
},
|
||||
{
|
||||
label: 'Value Six',
|
||||
value: 'six',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'group',
|
||||
type: 'group',
|
||||
fields: [
|
||||
{
|
||||
name: 'selectHasMany',
|
||||
hasMany: true,
|
||||
type: 'select',
|
||||
admin: {
|
||||
isClearable: true,
|
||||
isSortable: true,
|
||||
},
|
||||
options: [
|
||||
{
|
||||
label: 'Value One',
|
||||
value: 'one',
|
||||
},
|
||||
{
|
||||
label: 'Value Two',
|
||||
value: 'two',
|
||||
},
|
||||
{
|
||||
label: 'Value Three',
|
||||
value: 'three',
|
||||
},
|
||||
{
|
||||
label: 'Value Four',
|
||||
value: 'four',
|
||||
},
|
||||
{
|
||||
label: 'Value Five',
|
||||
value: 'five',
|
||||
},
|
||||
{
|
||||
label: 'Value Six',
|
||||
value: 'six',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'selectHasManyLocalized',
|
||||
type: 'select',
|
||||
|
||||
@@ -552,54 +552,6 @@ describe('Fields', () => {
|
||||
expect(hitResult).toBeDefined()
|
||||
expect(missResult).toBeFalsy()
|
||||
})
|
||||
|
||||
it('should CRUD within array hasMany', async () => {
|
||||
const doc = await payload.create({
|
||||
collection: 'select-fields',
|
||||
data: { array: [{ selectHasMany: ['one', 'two'] }] },
|
||||
})
|
||||
|
||||
expect(doc.array[0].selectHasMany).toStrictEqual(['one', 'two'])
|
||||
|
||||
const upd = await payload.update({
|
||||
collection: 'select-fields',
|
||||
id: doc.id,
|
||||
data: {
|
||||
array: [
|
||||
{
|
||||
id: doc.array[0].id,
|
||||
selectHasMany: ['six'],
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
expect(upd.array[0].selectHasMany).toStrictEqual(['six'])
|
||||
})
|
||||
|
||||
it('should CRUD within array + group hasMany', async () => {
|
||||
const doc = await payload.create({
|
||||
collection: 'select-fields',
|
||||
data: { array: [{ group: { selectHasMany: ['one', 'two'] } }] },
|
||||
})
|
||||
|
||||
expect(doc.array[0].group.selectHasMany).toStrictEqual(['one', 'two'])
|
||||
|
||||
const upd = await payload.update({
|
||||
collection: 'select-fields',
|
||||
id: doc.id,
|
||||
data: {
|
||||
array: [
|
||||
{
|
||||
id: doc.array[0].id,
|
||||
group: { selectHasMany: ['six'] },
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
expect(upd.array[0].group.selectHasMany).toStrictEqual(['six'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('number', () => {
|
||||
|
||||
@@ -60,7 +60,6 @@ export interface Config {
|
||||
'uploads-multi': UploadsMulti;
|
||||
'uploads-poly': UploadsPoly;
|
||||
'uploads-multi-poly': UploadsMultiPoly;
|
||||
'uploads-restricted': UploadsRestricted;
|
||||
'ui-fields': UiField;
|
||||
'payload-locked-documents': PayloadLockedDocument;
|
||||
'payload-preferences': PayloadPreference;
|
||||
@@ -1062,13 +1061,6 @@ export interface IndexedField {
|
||||
};
|
||||
collapsibleLocalizedUnique?: string | null;
|
||||
collapsibleTextUnique?: string | null;
|
||||
someText?: string | null;
|
||||
some?:
|
||||
| {
|
||||
text?: string | null;
|
||||
id?: string | null;
|
||||
}[]
|
||||
| null;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
}
|
||||
@@ -1336,15 +1328,6 @@ export interface SelectField {
|
||||
select?: ('one' | 'two' | 'three') | null;
|
||||
selectReadOnly?: ('one' | 'two' | 'three') | null;
|
||||
selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null;
|
||||
array?:
|
||||
| {
|
||||
selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null;
|
||||
group?: {
|
||||
selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null;
|
||||
};
|
||||
id?: string | null;
|
||||
}[]
|
||||
| null;
|
||||
selectHasManyLocalized?: ('one' | 'two')[] | null;
|
||||
selectI18n?: ('one' | 'two' | 'three') | null;
|
||||
simple?: ('One' | 'Two' | 'Three') | null;
|
||||
@@ -1636,19 +1619,6 @@ export interface UploadsMultiPoly {
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `Config`'s JSON-Schema
|
||||
* via the `definition` "uploads-restricted".
|
||||
*/
|
||||
export interface UploadsRestricted {
|
||||
id: string;
|
||||
text?: string | null;
|
||||
uploadWithoutRestriction?: (string | null) | Upload;
|
||||
uploadWithAllowCreateFalse?: (string | null) | Upload;
|
||||
uploadMultipleWithAllowCreateFalse?: (string | Upload)[] | null;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `Config`'s JSON-Schema
|
||||
* via the `definition` "ui-fields".
|
||||
@@ -1794,10 +1764,6 @@ export interface PayloadLockedDocument {
|
||||
relationTo: 'uploads-multi-poly';
|
||||
value: string | UploadsMultiPoly;
|
||||
} | null)
|
||||
| ({
|
||||
relationTo: 'uploads-restricted';
|
||||
value: string | UploadsRestricted;
|
||||
} | null)
|
||||
| ({
|
||||
relationTo: 'ui-fields';
|
||||
value: string | UiField;
|
||||
|
||||
@@ -611,48 +611,4 @@ describe('Locked documents', () => {
|
||||
|
||||
expect(docsFromLocksCollection.docs).toHaveLength(0)
|
||||
})
|
||||
|
||||
it('should allow take over on locked doc (simulates take over modal from admin ui)', async () => {
|
||||
const newPost7 = await payload.create({
|
||||
collection: postsSlug,
|
||||
data: {
|
||||
text: 'new post 7',
|
||||
},
|
||||
})
|
||||
|
||||
const lockedDocInstance = await payload.create({
|
||||
collection: lockedDocumentCollection,
|
||||
data: {
|
||||
editedAt: new Date().toISOString(),
|
||||
user: {
|
||||
relationTo: 'users',
|
||||
value: user2.id,
|
||||
},
|
||||
document: {
|
||||
relationTo: 'posts',
|
||||
value: newPost7.id,
|
||||
},
|
||||
globalSlug: undefined,
|
||||
},
|
||||
})
|
||||
|
||||
// This is the take over action - changing the user to the current user
|
||||
await payload.update({
|
||||
collection: 'payload-locked-documents',
|
||||
data: {
|
||||
user: { relationTo: 'users', value: user?.id },
|
||||
},
|
||||
id: lockedDocInstance.id,
|
||||
})
|
||||
|
||||
const docsFromLocksCollection = await payload.find({
|
||||
collection: lockedDocumentCollection,
|
||||
where: {
|
||||
'user.value': { equals: user.id },
|
||||
},
|
||||
})
|
||||
|
||||
expect(docsFromLocksCollection.docs).toHaveLength(1)
|
||||
expect(docsFromLocksCollection.docs[0].user.value?.id).toEqual(user.id)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
"comment-json": "^4.2.3",
|
||||
"create-payload-app": "workspace:*",
|
||||
"dotenv": "16.4.5",
|
||||
"drizzle-kit": "0.26.2",
|
||||
"drizzle-kit": "0.26.1",
|
||||
"eslint-plugin-playwright": "1.6.2",
|
||||
"execa": "5.1.1",
|
||||
"file-type": "19.3.0",
|
||||
|
||||
Reference in New Issue
Block a user