Compare commits
10 Commits
fix/in-ope
...
v2.19.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
558b298bf0 | ||
|
|
cd24e2bb3c | ||
|
|
ac8c2096af | ||
|
|
626be15578 | ||
|
|
67c0b0e6e0 | ||
|
|
11239103a6 | ||
|
|
4998ef8c9b | ||
|
|
e44ce819ce | ||
|
|
b700208b98 | ||
|
|
4a54aa7776 |
35
CHANGELOG.md
35
CHANGELOG.md
@@ -1,3 +1,38 @@
|
||||
## [2.19.2](https://github.com/payloadcms/payload/compare/v2.19.1...v2.19.2) (2024-06-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* cascade draft arg when querying globals with graphql ([#6651](https://github.com/payloadcms/payload/issues/6651)) ([ac8c209](https://github.com/payloadcms/payload/commit/ac8c2096af641a6886e4543ee65c9790e45f080f))
|
||||
* filtered out `disableListColumn` fields reappeared after toggling other fields ([#6636](https://github.com/payloadcms/payload/issues/6636)) ([626be15](https://github.com/payloadcms/payload/commit/626be155784dda181276bb87617433822a0accf3))
|
||||
* resizing animated images ([#6621](https://github.com/payloadcms/payload/issues/6621)) ([67c0b0e](https://github.com/payloadcms/payload/commit/67c0b0e6e0b5b190f6a916b59ba02f8c18479e18)), closes [#2181](https://github.com/payloadcms/payload/issues/2181) [#6146](https://github.com/payloadcms/payload/issues/6146)
|
||||
|
||||
## [2.19.1](https://github.com/payloadcms/payload/compare/v2.19.0...v2.19.1) (2024-06-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* override ajv dependency version to 8.14.0 wherever possible ([#6618](https://github.com/payloadcms/payload/issues/6618)) ([e44ce81](https://github.com/payloadcms/payload/commit/e44ce819cefddeaaf20b2b7ce804e94a9272baf1))
|
||||
|
||||
## [2.19.0](https://github.com/payloadcms/payload/compare/v2.18.3...v2.19.0) (2024-06-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **translations:** update Turkish translations ([#5738](https://github.com/payloadcms/payload/issues/5738)) ([4fddea8](https://github.com/payloadcms/payload/commit/4fddea86ebd5f21705be2310f8b7053d31109189))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* adds new `userEmailAlreadyRegistered` translations ([#6549](https://github.com/payloadcms/payload/issues/6549)) ([56c6700](https://github.com/payloadcms/payload/commit/56c6700cf25570cc217e28dc69459a3b81adbced)), closes [#6535](https://github.com/payloadcms/payload/issues/6535)
|
||||
* adjusts sizing of remove/add buttons to be same size ([#6527](https://github.com/payloadcms/payload/issues/6527)) ([a352ebc](https://github.com/payloadcms/payload/commit/a352ebc5520bbd0f6a9caef068825976dba05ded)), closes [#6098](https://github.com/payloadcms/payload/issues/6098)
|
||||
* focalPoint undefined handling ([#6552](https://github.com/payloadcms/payload/issues/6552)) ([fcfc3c5](https://github.com/payloadcms/payload/commit/fcfc3c593f69f63c51f8aa09973fcacbfbe04952))
|
||||
* pagination on polymorphic relationship field requesting entries with page parameter set to NaN ([#5366](https://github.com/payloadcms/payload/issues/5366)) ([547acfe](https://github.com/payloadcms/payload/commit/547acfe876bdf0df2ce808941f72b690c9dbcae3))
|
||||
* safely evaluates `field.admin` in WhereBuilder ([#6534](https://github.com/payloadcms/payload/issues/6534)) ([4f9d78d](https://github.com/payloadcms/payload/commit/4f9d78df5e38f3f70852bb6de47cff619f57c648))
|
||||
* separate sort and search fields when looking up relationship. ([#5964](https://github.com/payloadcms/payload/issues/5964)) ([c009219](https://github.com/payloadcms/payload/commit/c0092191a6ded1098a94d9f48918ab79171e5e32)), closes [#4815](https://github.com/payloadcms/payload/issues/4815) [#5222](https://github.com/payloadcms/payload/issues/5222)
|
||||
* ui field validation error with `admin.disableListColumn` property ([#6530](https://github.com/payloadcms/payload/issues/6530)) ([eeddece](https://github.com/payloadcms/payload/commit/eeddeceda988d7a4ce8ad31d3036a4ee84aceec3)), closes [#6521](https://github.com/payloadcms/payload/issues/6521)
|
||||
* **ui:** blocks browser save dialog from opening when hotkey used with no changes ([#6365](https://github.com/payloadcms/payload/issues/6365)) ([8f03cd7](https://github.com/payloadcms/payload/commit/8f03cd7c789eda7613ddced0d45a32afe49b1e01)), closes [#214](https://github.com/payloadcms/payload/issues/214)
|
||||
|
||||
## [2.18.3](https://github.com/payloadcms/payload/compare/v2.18.2...v2.18.3) (2024-05-17)
|
||||
|
||||
|
||||
|
||||
@@ -274,3 +274,11 @@ const { data } = useLivePreview<PageType>({
|
||||
depth: 1, // Ensure this matches the depth of your initial request
|
||||
})
|
||||
```
|
||||
|
||||
### Iframe refuses to connect
|
||||
|
||||
If your front-end application has set a [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (CSP) that blocks the Admin Panel from loading your front-end application, the iframe will not be able to load your site. To resolve this, you can whitelist the Admin Panel's domain in your CSP by setting the `frame-ancestors` directive:
|
||||
|
||||
```plaintext
|
||||
frame-ancestors: "self" localhost:* https://your-site.com;
|
||||
```
|
||||
|
||||
@@ -129,6 +129,6 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/react": "^7.77.0",
|
||||
"ajv": "^8.12.0"
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/bundler-webpack",
|
||||
"version": "1.0.6",
|
||||
"version": "1.0.7",
|
||||
"description": "The officially supported Webpack bundler adapter for Payload",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -27,7 +27,6 @@
|
||||
"compression": "1.7.4",
|
||||
"connect-history-api-fallback": "1.6.0",
|
||||
"css-loader": "5.2.7",
|
||||
"css-minimizer-webpack-plugin": "^5.0.0",
|
||||
"file-loader": "6.2.0",
|
||||
"find-node-modules": "^2.1.3",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
@@ -48,7 +47,8 @@
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-middleware": "6.1.2",
|
||||
"webpack-hot-middleware": "^2.25.3"
|
||||
"webpack-hot-middleware": "^2.25.3",
|
||||
"ajv": "8.14.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@payloadcms/eslint-config": "workspace:*",
|
||||
@@ -62,8 +62,44 @@
|
||||
"@types/webpack-hot-middleware": "2.25.6",
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"resolutions": {
|
||||
"ajv": "8.14.0",
|
||||
"webpack-dev-middleware/**/ajv": "8.14.0",
|
||||
"css-minimizer-webpack-plugin/**/ajv": "8.14.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"payload": "^2.0.0"
|
||||
"payload": "^2.0.0",
|
||||
"ajv": "8.14.0"
|
||||
},
|
||||
"overrides": {
|
||||
"ajv": "8.14.0",
|
||||
"webpack-dev-middleware": {
|
||||
"ajv": "8.14.0",
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
},
|
||||
"css-minimizer-webpack-plugin": {
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"ajv": "8.14.0",
|
||||
"webpack-dev-middleware": {
|
||||
"ajv": "8.14.0",
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
},
|
||||
"css-minimizer-webpack-plugin": {
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"publishConfig": {
|
||||
"main": "./dist/index.js",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "payload",
|
||||
"version": "2.18.3",
|
||||
"version": "2.19.2",
|
||||
"description": "Node, React and MongoDB Headless CMS and Application Framework",
|
||||
"license": "MIT",
|
||||
"main": "./dist/index.js",
|
||||
@@ -209,6 +209,29 @@
|
||||
"vite": "^4.4.9",
|
||||
"webpack": "^5.78.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"ajv": "8.14.0",
|
||||
"webpack-dev-middleware/**/ajv": "8.14.0",
|
||||
"css-minimizer-webpack-plugin/**/ajv": "8.14.0"
|
||||
},
|
||||
"overrides": {
|
||||
"ajv": "8.14.0",
|
||||
"css-minimizer-webpack-plugin": {
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"ajv": "8.14.0",
|
||||
"css-minimizer-webpack-plugin": {
|
||||
"schema-utils": {
|
||||
"ajv": "8.14.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React, { useId } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
import type { Column } from '../Table/types'
|
||||
import type { Props } from './types'
|
||||
|
||||
import { getTranslation } from '../../../../utilities/getTranslation'
|
||||
@@ -14,6 +15,12 @@ import './index.scss'
|
||||
|
||||
const baseClass = 'column-selector'
|
||||
|
||||
const filterColumnFields = (fields: Column[]): Column[] => {
|
||||
return fields.filter((field) => {
|
||||
return !field.admin?.disableListColumn
|
||||
})
|
||||
}
|
||||
|
||||
const ColumnSelector: React.FC<Props> = (props) => {
|
||||
const { slug } = props
|
||||
|
||||
@@ -27,10 +34,12 @@ const ColumnSelector: React.FC<Props> = (props) => {
|
||||
return null
|
||||
}
|
||||
|
||||
const filteredColumns = filterColumnFields(columns)
|
||||
|
||||
return (
|
||||
<DraggableSortable
|
||||
className={baseClass}
|
||||
ids={columns.map((col) => col.accessor)}
|
||||
ids={filteredColumns.map((col) => col.accessor)}
|
||||
onDragEnd={({ moveFromIndex, moveToIndex }) => {
|
||||
moveColumn({
|
||||
fromIndex: moveFromIndex,
|
||||
@@ -38,7 +47,7 @@ const ColumnSelector: React.FC<Props> = (props) => {
|
||||
})
|
||||
}}
|
||||
>
|
||||
{columns.map((col, i) => {
|
||||
{filteredColumns.map((col, i) => {
|
||||
const { name, accessor, active, label } = col
|
||||
|
||||
if (col.accessor === '_select') return null
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { FieldBase } from '../../../../fields/config/types'
|
||||
export type Column = {
|
||||
accessor: string
|
||||
active: boolean
|
||||
admin?: FieldBase['admin']
|
||||
components: {
|
||||
Heading: React.ReactNode
|
||||
renderCell: (row: any, data: any) => React.ReactNode
|
||||
|
||||
@@ -42,10 +42,18 @@ const buildColumns = ({
|
||||
colIndex += 1
|
||||
}
|
||||
const props = cellProps?.[colIndex] || {}
|
||||
|
||||
const disableListFilter =
|
||||
field.admin && 'disableListFilter' in field.admin ? field.admin.disableListFilter : false
|
||||
|
||||
return {
|
||||
name: field.name,
|
||||
accessor: field.name,
|
||||
active: isActive,
|
||||
admin: {
|
||||
disableListColumn: field.admin?.disableListColumn,
|
||||
disableListFilter,
|
||||
},
|
||||
components: {
|
||||
Heading: (
|
||||
<SortColumn
|
||||
|
||||
@@ -7,19 +7,8 @@ import './index.scss'
|
||||
|
||||
const baseClass = 'condition-value-number'
|
||||
|
||||
const NumberField: React.FC<Props> = ({ disabled, onChange, operator, value }) => {
|
||||
const NumberField: React.FC<Props> = ({ disabled, onChange, value }) => {
|
||||
const { t } = useTranslation('general')
|
||||
|
||||
const isMulti = ['in', 'not_in'].includes(operator)
|
||||
|
||||
let valueToRender
|
||||
|
||||
if (isMulti && Array.isArray(value)) {
|
||||
valueToRender = value.map((val) => ({ label: val, value: val }))
|
||||
} else if (value) {
|
||||
valueToRender = { label: value, value }
|
||||
}
|
||||
|
||||
return (
|
||||
<input
|
||||
className={baseClass}
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
import type { Operator } from '../../../../../../types'
|
||||
|
||||
export type Props = {
|
||||
disabled?: boolean
|
||||
onChange: (e: string) => void
|
||||
operator: Operator
|
||||
value: string
|
||||
}
|
||||
|
||||
@@ -8,17 +8,32 @@ import findOne from '../../operations/findOne'
|
||||
|
||||
export default function findOneResolver(globalConfig: SanitizedGlobalConfig): Document {
|
||||
return async function resolver(_, args, context) {
|
||||
if (args.locale) context.req.locale = args.locale
|
||||
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
|
||||
let { req } = context
|
||||
const locale = req.locale
|
||||
const fallbackLocale = req.fallbackLocale
|
||||
req = isolateObjectProperty(req, 'locale')
|
||||
req = isolateObjectProperty(req, 'fallbackLocale')
|
||||
req.locale = args.locale || locale
|
||||
req.fallbackLocale = args.fallbackLocale || fallbackLocale
|
||||
|
||||
const { slug } = globalConfig
|
||||
if (!req.query) req.query = {}
|
||||
|
||||
const draft: boolean =
|
||||
args.draft ?? req.query?.draft === 'false'
|
||||
? false
|
||||
: req.query?.draft === 'true'
|
||||
? true
|
||||
: undefined
|
||||
if (typeof draft === 'boolean') req.query.draft = String(draft)
|
||||
|
||||
context.req = req
|
||||
|
||||
const options = {
|
||||
slug: globalConfig.slug,
|
||||
depth: 0,
|
||||
draft: args.draft,
|
||||
globalConfig,
|
||||
req: isolateObjectProperty(context.req, 'transactionID'),
|
||||
slug,
|
||||
req: isolateObjectProperty(req, 'transactionID'),
|
||||
}
|
||||
|
||||
const result = await findOne(options)
|
||||
|
||||
@@ -24,15 +24,21 @@ export type Resolver = (
|
||||
|
||||
export default function findVersionByIDResolver(globalConfig: SanitizedGlobalConfig): Resolver {
|
||||
return async function resolver(_, args, context) {
|
||||
if (args.locale) context.req.locale = args.locale
|
||||
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
|
||||
let { req } = context
|
||||
const locale = req.locale
|
||||
const fallbackLocale = req.fallbackLocale
|
||||
req = isolateObjectProperty(req, 'locale')
|
||||
req = isolateObjectProperty(req, 'fallbackLocale')
|
||||
req.locale = args.locale || locale
|
||||
req.fallbackLocale = args.fallbackLocale || fallbackLocale
|
||||
|
||||
context.req = req
|
||||
|
||||
const options = {
|
||||
id: args.id,
|
||||
depth: 0,
|
||||
draft: args.draft,
|
||||
globalConfig,
|
||||
req: isolateObjectProperty<PayloadRequest>(context.req, 'transactionID'),
|
||||
req: isolateObjectProperty<PayloadRequest>(req, 'transactionID'),
|
||||
}
|
||||
|
||||
const result = await findVersionByID(options)
|
||||
|
||||
@@ -26,18 +26,32 @@ export default function updateResolver<TSlug extends keyof GeneratedTypes['globa
|
||||
globalConfig: SanitizedGlobalConfig,
|
||||
): Resolver<TSlug> {
|
||||
return async function resolver(_, args, context) {
|
||||
if (args.locale) context.req.locale = args.locale
|
||||
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
|
||||
let { req } = context
|
||||
const locale = req.locale
|
||||
const fallbackLocale = req.fallbackLocale
|
||||
req = isolateObjectProperty<PayloadRequest>(req, 'locale')
|
||||
req = isolateObjectProperty<PayloadRequest>(req, 'fallbackLocale')
|
||||
req.locale = args.locale || locale
|
||||
req.fallbackLocale = args.fallbackLocale || fallbackLocale
|
||||
if (!req.query) req.query = {}
|
||||
|
||||
const { slug } = globalConfig
|
||||
const draft: boolean =
|
||||
args.draft ?? req.query?.draft === 'false'
|
||||
? false
|
||||
: req.query?.draft === 'true'
|
||||
? true
|
||||
: undefined
|
||||
if (typeof draft === 'boolean') req.query.draft = String(draft)
|
||||
|
||||
context.req = req
|
||||
|
||||
const options = {
|
||||
slug: globalConfig.slug,
|
||||
data: args.data,
|
||||
depth: 0,
|
||||
draft: args.draft,
|
||||
globalConfig,
|
||||
req: isolateObjectProperty<PayloadRequest>(context.req, 'transactionID'),
|
||||
slug,
|
||||
req: isolateObjectProperty<PayloadRequest>(req, 'transactionID'),
|
||||
}
|
||||
|
||||
const result = await update<TSlug>(options)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import type { SharpOptions } from 'sharp'
|
||||
|
||||
import sharp from 'sharp'
|
||||
|
||||
export const percentToPixel = (value: string, dimension: number): number => {
|
||||
@@ -7,8 +9,14 @@ export const percentToPixel = (value: string, dimension: number): number => {
|
||||
|
||||
export default async function cropImage({ cropData, dimensions, file }) {
|
||||
try {
|
||||
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
|
||||
|
||||
const { height, width, x, y } = cropData
|
||||
|
||||
const sharpOptions: SharpOptions = {}
|
||||
|
||||
if (fileIsAnimated) sharpOptions.animated = true
|
||||
|
||||
const formattedCropData: sharp.Region = {
|
||||
height: percentToPixel(height, dimensions.height),
|
||||
left: percentToPixel(x, dimensions.width),
|
||||
@@ -16,7 +24,7 @@ export default async function cropImage({ cropData, dimensions, file }) {
|
||||
width: percentToPixel(width, dimensions.width),
|
||||
}
|
||||
|
||||
const cropped = sharp(file.tempFilePath || file.data).extract(formattedCropData)
|
||||
const cropped = sharp(file.tempFilePath || file.data, sharpOptions).extract(formattedCropData)
|
||||
|
||||
return await cropped.toBuffer({
|
||||
resolveWithObject: true,
|
||||
|
||||
@@ -121,7 +121,7 @@ export const generateFileData = async <T>({
|
||||
let newData = data
|
||||
const filesToSave: FileToSave[] = []
|
||||
const fileData: Partial<FileData> = {}
|
||||
const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'
|
||||
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
|
||||
const cropData =
|
||||
typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined
|
||||
|
||||
@@ -135,7 +135,7 @@ export const generateFileData = async <T>({
|
||||
let mime: string
|
||||
const fileHasAdjustments =
|
||||
fileSupportsResize &&
|
||||
Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)
|
||||
Boolean(resizeOptions || formatOptions || imageSizes || trimOptions || file.tempFilePath)
|
||||
|
||||
const sharpOptions: SharpOptions = {}
|
||||
|
||||
@@ -209,6 +209,7 @@ export const generateFileData = async <T>({
|
||||
let fileForResize = file
|
||||
|
||||
if (cropData) {
|
||||
const metadata = await sharpFile.metadata()
|
||||
const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file })
|
||||
|
||||
filesToSave.push({
|
||||
@@ -222,7 +223,7 @@ export const generateFileData = async <T>({
|
||||
size: info.size,
|
||||
}
|
||||
fileData.width = info.width
|
||||
fileData.height = info.height
|
||||
fileData.height = fileIsAnimated ? info.height / metadata.pages : info.height
|
||||
fileData.filesize = info.size
|
||||
|
||||
if (file.tempFilePath) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { UploadedFile } from 'express-fileupload'
|
||||
import type { OutputInfo } from 'sharp'
|
||||
import type { OutputInfo, Sharp, SharpOptions } from 'sharp'
|
||||
|
||||
import { fromBuffer } from 'file-type'
|
||||
import fs from 'fs'
|
||||
@@ -217,7 +217,7 @@ const sanitizeResizeConfig = (resizeConfig: ImageSize): ImageSize => {
|
||||
*
|
||||
* The image will be resized according to the provided
|
||||
* resize config. If no image sizes are requested, the resolved data will be empty.
|
||||
* For every image that dos not need to be resized, an result object with `null`
|
||||
* For every image that does not need to be resized, a result object with `null`
|
||||
* parameters will be returned.
|
||||
*
|
||||
* @param resizeConfig - the resize config
|
||||
@@ -252,7 +252,13 @@ export default async function resizeAndTransformImageSizes({
|
||||
// Nothing to resize here so return as early as possible
|
||||
if (!imageSizes) return defaultResult
|
||||
|
||||
const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
|
||||
// Determine if the file is animated
|
||||
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
|
||||
const sharpOptions: SharpOptions = {}
|
||||
|
||||
if (fileIsAnimated) sharpOptions.animated = true
|
||||
|
||||
const sharpBase: Sharp | undefined = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
|
||||
|
||||
const results: ImageSizesResult[] = await Promise.all(
|
||||
imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {
|
||||
@@ -268,6 +274,8 @@ export default async function resizeAndTransformImageSizes({
|
||||
const imageToResize = sharpBase.clone()
|
||||
let resized = imageToResize
|
||||
|
||||
const metadata = await sharpBase.metadata()
|
||||
|
||||
if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
|
||||
const { height: resizeHeight, width: resizeWidth } = imageResizeConfig
|
||||
const resizeAspectRatio = resizeWidth / resizeHeight
|
||||
@@ -289,14 +297,18 @@ export default async function resizeAndTransformImageSizes({
|
||||
const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX)
|
||||
|
||||
const safeResizeHeight = resizeHeight ?? scaledImageInfo.height
|
||||
const maxOffsetY = scaledImageInfo.height - safeResizeHeight
|
||||
|
||||
const maxOffsetY = fileIsAnimated
|
||||
? resizeHeight - safeResizeHeight
|
||||
: scaledImageInfo.height - safeResizeHeight
|
||||
|
||||
const topFocalEdge = Math.round(
|
||||
scaledImageInfo.height * (incomingFocalPoint.y / 100) - safeResizeHeight / 2,
|
||||
)
|
||||
const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY)
|
||||
|
||||
// extract the focal area from the scaled image
|
||||
resized = scaledImage.extract({
|
||||
resized = (fileIsAnimated ? imageToResize : scaledImage).extract({
|
||||
height: safeResizeHeight,
|
||||
left: safeOffsetX,
|
||||
top: safeOffsetY,
|
||||
@@ -350,7 +362,7 @@ export default async function resizeAndTransformImageSizes({
|
||||
name: imageResizeConfig.name,
|
||||
filename: imageNameWithDimensions,
|
||||
filesize: size,
|
||||
height,
|
||||
height: fileIsAnimated ? height / metadata.pages : height,
|
||||
mimeType: mimeInfo?.mime || mimeType,
|
||||
sizesToSave: [{ buffer: bufferData, path: imagePath }],
|
||||
width,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Creates a proxy for the given object that has its own property
|
||||
*/
|
||||
export default function isolateObjectProperty<T>(object: T, key): T {
|
||||
export default function isolateObjectProperty<T>(object: T, key: keyof T): T {
|
||||
const delegate = {}
|
||||
const handler = {
|
||||
deleteProperty(target, p): boolean {
|
||||
|
||||
128
pnpm-lock.yaml
generated
128
pnpm-lock.yaml
generated
@@ -20,8 +20,8 @@ importers:
|
||||
specifier: ^7.77.0
|
||||
version: 7.112.2(react@18.2.0)
|
||||
ajv:
|
||||
specifier: ^8.12.0
|
||||
version: 8.12.0
|
||||
specifier: 8.14.0
|
||||
version: 8.14.0
|
||||
react:
|
||||
specifier: 18.2.0
|
||||
version: 18.2.0
|
||||
@@ -270,6 +270,9 @@ importers:
|
||||
|
||||
packages/bundler-webpack:
|
||||
dependencies:
|
||||
ajv:
|
||||
specifier: 8.14.0
|
||||
version: 8.14.0
|
||||
compression:
|
||||
specifier: 1.7.4
|
||||
version: 1.7.4
|
||||
@@ -279,9 +282,6 @@ importers:
|
||||
css-loader:
|
||||
specifier: 5.2.7
|
||||
version: 5.2.7(webpack@5.91.0)
|
||||
css-minimizer-webpack-plugin:
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.1(webpack@5.91.0)
|
||||
file-loader:
|
||||
specifier: 6.2.0
|
||||
version: 6.2.0(webpack@5.91.0)
|
||||
@@ -438,52 +438,6 @@ importers:
|
||||
specifier: ^29.1.0
|
||||
version: 29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.2.2)
|
||||
|
||||
packages/db-example:
|
||||
dependencies:
|
||||
bson-objectid:
|
||||
specifier: 2.0.4
|
||||
version: 2.0.4
|
||||
deepmerge:
|
||||
specifier: 4.3.1
|
||||
version: 4.3.1
|
||||
get-port:
|
||||
specifier: 5.1.1
|
||||
version: 5.1.1
|
||||
http-status:
|
||||
specifier: 1.6.2
|
||||
version: 1.6.2
|
||||
mongoose:
|
||||
specifier: 6.12.3
|
||||
version: 6.12.3
|
||||
mongoose-aggregate-paginate-v2:
|
||||
specifier: 1.0.6
|
||||
version: 1.0.6
|
||||
mongoose-paginate-v2:
|
||||
specifier: 1.7.22
|
||||
version: 1.7.22
|
||||
prompts:
|
||||
specifier: 2.4.2
|
||||
version: 2.4.2
|
||||
uuid:
|
||||
specifier: 9.0.0
|
||||
version: 9.0.0
|
||||
devDependencies:
|
||||
'@payloadcms/eslint-config':
|
||||
specifier: workspace:*
|
||||
version: link:../eslint-config-payload
|
||||
'@types/mongoose-aggregate-paginate-v2':
|
||||
specifier: 1.0.9
|
||||
version: 1.0.9
|
||||
mongodb:
|
||||
specifier: 4.17.1
|
||||
version: 4.17.1
|
||||
mongodb-memory-server:
|
||||
specifier: ^9
|
||||
version: 9.2.0
|
||||
payload:
|
||||
specifier: workspace:*
|
||||
version: link:../payload
|
||||
|
||||
packages/db-mongodb:
|
||||
dependencies:
|
||||
bson-objectid:
|
||||
@@ -5484,6 +5438,7 @@ packages:
|
||||
/@trysound/sax@0.2.0:
|
||||
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
dev: true
|
||||
|
||||
/@tsconfig/node10@1.0.11:
|
||||
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
|
||||
@@ -6827,7 +6782,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/ajv-formats@2.1.1(ajv@8.12.0):
|
||||
/ajv-formats@2.1.1(ajv@8.14.0):
|
||||
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
|
||||
peerDependencies:
|
||||
ajv: ^8.0.0
|
||||
@@ -6835,7 +6790,7 @@ packages:
|
||||
ajv:
|
||||
optional: true
|
||||
dependencies:
|
||||
ajv: 8.12.0
|
||||
ajv: 8.14.0
|
||||
|
||||
/ajv-keywords@3.5.2(ajv@6.12.6):
|
||||
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
|
||||
@@ -6844,12 +6799,12 @@ packages:
|
||||
dependencies:
|
||||
ajv: 6.12.6
|
||||
|
||||
/ajv-keywords@5.1.0(ajv@8.12.0):
|
||||
/ajv-keywords@5.1.0(ajv@8.14.0):
|
||||
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
|
||||
peerDependencies:
|
||||
ajv: ^8.8.2
|
||||
dependencies:
|
||||
ajv: 8.12.0
|
||||
ajv: 8.14.0
|
||||
fast-deep-equal: 3.1.3
|
||||
|
||||
/ajv@6.12.6:
|
||||
@@ -6860,8 +6815,8 @@ packages:
|
||||
json-schema-traverse: 0.4.1
|
||||
uri-js: 4.4.1
|
||||
|
||||
/ajv@8.12.0:
|
||||
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
|
||||
/ajv@8.14.0:
|
||||
resolution: {integrity: sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==}
|
||||
dependencies:
|
||||
fast-deep-equal: 3.1.3
|
||||
json-schema-traverse: 1.0.0
|
||||
@@ -7624,6 +7579,7 @@ packages:
|
||||
caniuse-lite: 1.0.30001612
|
||||
lodash.memoize: 4.1.2
|
||||
lodash.uniq: 4.5.0
|
||||
dev: true
|
||||
|
||||
/caniuse-lite@1.0.30001612:
|
||||
resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==}
|
||||
@@ -7840,6 +7796,7 @@ packages:
|
||||
|
||||
/colord@2.9.3:
|
||||
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
|
||||
dev: true
|
||||
|
||||
/colorette@2.0.20:
|
||||
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
||||
@@ -7934,8 +7891,8 @@ packages:
|
||||
resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
ajv: 8.12.0
|
||||
ajv-formats: 2.1.1(ajv@8.12.0)
|
||||
ajv: 8.14.0
|
||||
ajv-formats: 2.1.1(ajv@8.14.0)
|
||||
atomically: 1.7.0
|
||||
debounce-fn: 4.0.0
|
||||
dot-prop: 6.0.1
|
||||
@@ -8420,6 +8377,7 @@ packages:
|
||||
postcss: ^8.0.9
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/css-has-pseudo@6.0.3(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==}
|
||||
@@ -8482,6 +8440,7 @@ packages:
|
||||
schema-utils: 4.2.0
|
||||
serialize-javascript: 6.0.2
|
||||
webpack: 5.91.0(@swc/core@1.3.107)(webpack-cli@4.10.0)
|
||||
dev: true
|
||||
|
||||
/css-prefers-color-scheme@9.0.1(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==}
|
||||
@@ -8509,6 +8468,7 @@ packages:
|
||||
domhandler: 5.0.3
|
||||
domutils: 3.1.0
|
||||
nth-check: 2.1.1
|
||||
dev: true
|
||||
|
||||
/css-tree@2.2.1:
|
||||
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
|
||||
@@ -8516,6 +8476,7 @@ packages:
|
||||
dependencies:
|
||||
mdn-data: 2.0.28
|
||||
source-map-js: 1.2.0
|
||||
dev: true
|
||||
|
||||
/css-tree@2.3.1:
|
||||
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
|
||||
@@ -8523,6 +8484,7 @@ packages:
|
||||
dependencies:
|
||||
mdn-data: 2.0.30
|
||||
source-map-js: 1.2.0
|
||||
dev: true
|
||||
|
||||
/css-what@6.1.0:
|
||||
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
|
||||
@@ -8581,6 +8543,7 @@ packages:
|
||||
postcss-reduce-transforms: 6.0.2(postcss@8.4.31)
|
||||
postcss-svgo: 6.0.3(postcss@8.4.31)
|
||||
postcss-unique-selectors: 6.0.4(postcss@8.4.31)
|
||||
dev: true
|
||||
|
||||
/cssnano-utils@4.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==}
|
||||
@@ -8589,6 +8552,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/cssnano@6.1.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==}
|
||||
@@ -8599,12 +8563,14 @@ packages:
|
||||
cssnano-preset-default: 6.1.2(postcss@8.4.31)
|
||||
lilconfig: 3.1.1
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/csso@5.0.5:
|
||||
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
|
||||
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
|
||||
dependencies:
|
||||
css-tree: 2.2.1
|
||||
dev: true
|
||||
|
||||
/cssom@0.3.8:
|
||||
resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
|
||||
@@ -9031,6 +8997,7 @@ packages:
|
||||
domelementtype: 2.3.0
|
||||
domhandler: 5.0.3
|
||||
entities: 4.5.0
|
||||
dev: true
|
||||
|
||||
/domelementtype@2.3.0:
|
||||
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
|
||||
@@ -9055,6 +9022,7 @@ packages:
|
||||
engines: {node: '>= 4'}
|
||||
dependencies:
|
||||
domelementtype: 2.3.0
|
||||
dev: true
|
||||
|
||||
/domutils@2.8.0:
|
||||
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
|
||||
@@ -9070,6 +9038,7 @@ packages:
|
||||
dom-serializer: 2.0.0
|
||||
domelementtype: 2.3.0
|
||||
domhandler: 5.0.3
|
||||
dev: true
|
||||
|
||||
/dot-case@3.0.4:
|
||||
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
|
||||
@@ -9269,6 +9238,7 @@ packages:
|
||||
/entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
dev: true
|
||||
|
||||
/env-paths@2.2.1:
|
||||
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
|
||||
@@ -12915,6 +12885,7 @@ packages:
|
||||
/lilconfig@3.1.1:
|
||||
resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
|
||||
engines: {node: '>=14'}
|
||||
dev: true
|
||||
|
||||
/lines-and-columns@1.2.4:
|
||||
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
||||
@@ -13058,6 +13029,7 @@ packages:
|
||||
|
||||
/lodash.memoize@4.1.2:
|
||||
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
|
||||
dev: true
|
||||
|
||||
/lodash.merge@4.6.2:
|
||||
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||
@@ -13069,6 +13041,7 @@ packages:
|
||||
|
||||
/lodash.uniq@4.5.0:
|
||||
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
|
||||
dev: true
|
||||
|
||||
/lodash.uniqby@4.7.0:
|
||||
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
|
||||
@@ -13216,9 +13189,11 @@ packages:
|
||||
|
||||
/mdn-data@2.0.28:
|
||||
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
|
||||
dev: true
|
||||
|
||||
/mdn-data@2.0.30:
|
||||
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
|
||||
dev: true
|
||||
|
||||
/media-typer@0.3.0:
|
||||
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
||||
@@ -14584,6 +14559,7 @@ packages:
|
||||
postcss: 8.4.31
|
||||
postcss-selector-parser: 6.0.16
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-clamp@4.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
|
||||
@@ -14638,6 +14614,7 @@ packages:
|
||||
colord: 2.9.3
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-convert-values@6.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==}
|
||||
@@ -14648,6 +14625,7 @@ packages:
|
||||
browserslist: 4.23.0
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-custom-media@10.0.4(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==}
|
||||
@@ -14702,6 +14680,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-discard-duplicates@6.0.3(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==}
|
||||
@@ -14710,6 +14689,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-discard-empty@6.0.3(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==}
|
||||
@@ -14718,6 +14698,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-discard-overridden@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==}
|
||||
@@ -14726,6 +14707,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-double-position-gradients@5.0.6(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==}
|
||||
@@ -14832,6 +14814,7 @@ packages:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
stylehacks: 6.1.1(postcss@8.4.31)
|
||||
dev: true
|
||||
|
||||
/postcss-merge-rules@6.1.1(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==}
|
||||
@@ -14844,6 +14827,7 @@ packages:
|
||||
cssnano-utils: 4.0.2(postcss@8.4.31)
|
||||
postcss: 8.4.31
|
||||
postcss-selector-parser: 6.0.16
|
||||
dev: true
|
||||
|
||||
/postcss-minify-font-values@6.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==}
|
||||
@@ -14853,6 +14837,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-minify-gradients@6.0.3(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==}
|
||||
@@ -14864,6 +14849,7 @@ packages:
|
||||
cssnano-utils: 4.0.2(postcss@8.4.31)
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-minify-params@6.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==}
|
||||
@@ -14875,6 +14861,7 @@ packages:
|
||||
cssnano-utils: 4.0.2(postcss@8.4.31)
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-minify-selectors@6.0.4(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==}
|
||||
@@ -14884,6 +14871,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-selector-parser: 6.0.16
|
||||
dev: true
|
||||
|
||||
/postcss-modules-extract-imports@3.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
|
||||
@@ -14940,6 +14928,7 @@ packages:
|
||||
postcss: ^8.4.31
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-display-values@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==}
|
||||
@@ -14949,6 +14938,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-positions@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==}
|
||||
@@ -14958,6 +14948,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-repeat-style@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==}
|
||||
@@ -14967,6 +14958,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-string@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==}
|
||||
@@ -14976,6 +14968,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-timing-functions@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==}
|
||||
@@ -14985,6 +14978,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-unicode@6.1.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==}
|
||||
@@ -14995,6 +14989,7 @@ packages:
|
||||
browserslist: 4.23.0
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-url@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==}
|
||||
@@ -15004,6 +14999,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-normalize-whitespace@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==}
|
||||
@@ -15013,6 +15009,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-opacity-percentage@2.0.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==}
|
||||
@@ -15031,6 +15028,7 @@ packages:
|
||||
cssnano-utils: 4.0.2(postcss@8.4.31)
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-overflow-shorthand@5.0.1(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==}
|
||||
@@ -15139,6 +15137,7 @@ packages:
|
||||
browserslist: 4.23.0
|
||||
caniuse-api: 3.0.0
|
||||
postcss: 8.4.31
|
||||
dev: true
|
||||
|
||||
/postcss-reduce-transforms@6.0.2(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==}
|
||||
@@ -15148,6 +15147,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-replace-overflow-wrap@4.0.0(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
|
||||
@@ -15181,6 +15181,7 @@ packages:
|
||||
postcss: 8.4.31
|
||||
postcss-value-parser: 4.2.0
|
||||
svgo: 3.2.0
|
||||
dev: true
|
||||
|
||||
/postcss-unique-selectors@6.0.4(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==}
|
||||
@@ -15190,6 +15191,7 @@ packages:
|
||||
dependencies:
|
||||
postcss: 8.4.31
|
||||
postcss-selector-parser: 6.0.16
|
||||
dev: true
|
||||
|
||||
/postcss-value-parser@4.2.0:
|
||||
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
|
||||
@@ -16293,9 +16295,9 @@ packages:
|
||||
engines: {node: '>= 12.13.0'}
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
ajv: 8.12.0
|
||||
ajv-formats: 2.1.1(ajv@8.12.0)
|
||||
ajv-keywords: 5.1.0(ajv@8.12.0)
|
||||
ajv: 8.14.0
|
||||
ajv-formats: 2.1.1(ajv@8.14.0)
|
||||
ajv-keywords: 5.1.0(ajv@8.14.0)
|
||||
|
||||
/scmp@2.1.0:
|
||||
resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==}
|
||||
@@ -16992,6 +16994,7 @@ packages:
|
||||
browserslist: 4.23.0
|
||||
postcss: 8.4.31
|
||||
postcss-selector-parser: 6.0.16
|
||||
dev: true
|
||||
|
||||
/stylis@4.2.0:
|
||||
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
|
||||
@@ -17046,6 +17049,7 @@ packages:
|
||||
css-what: 6.1.0
|
||||
csso: 5.0.5
|
||||
picocolors: 1.0.0
|
||||
dev: true
|
||||
|
||||
/swc-loader@0.2.3(@swc/core@1.3.107)(webpack@5.91.0):
|
||||
resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==}
|
||||
|
||||
@@ -380,6 +380,29 @@ export default buildConfigWithDefaults({
|
||||
],
|
||||
},
|
||||
],
|
||||
globals: [
|
||||
{
|
||||
slug: 'global-1',
|
||||
access: {
|
||||
read: openAccess.read,
|
||||
update: openAccess.update,
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'title',
|
||||
},
|
||||
{
|
||||
name: 'relationship',
|
||||
type: 'relationship',
|
||||
relationTo: 'cyclical-relationship',
|
||||
},
|
||||
],
|
||||
versions: {
|
||||
drafts: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
graphQL: {
|
||||
queries: (GraphQL) => {
|
||||
return {
|
||||
|
||||
@@ -984,6 +984,59 @@ describe('collections-graphql', () => {
|
||||
expect(queriedDoc.media.title).toEqual('example')
|
||||
})
|
||||
})
|
||||
|
||||
it('should cascade draft arg with globals', async () => {
|
||||
// publish relationship doc
|
||||
const newDoc = await payload.create({
|
||||
collection: 'cyclical-relationship',
|
||||
draft: false,
|
||||
data: {
|
||||
title: 'published relationship',
|
||||
},
|
||||
})
|
||||
|
||||
// save draft version relationship doc
|
||||
await payload.update({
|
||||
collection: 'cyclical-relationship',
|
||||
id: newDoc.id,
|
||||
draft: true,
|
||||
data: {
|
||||
title: 'draft relationship',
|
||||
},
|
||||
})
|
||||
|
||||
// update global (published data)
|
||||
await payload.updateGlobal({
|
||||
slug: 'global-1',
|
||||
data: {
|
||||
title: 'published title',
|
||||
relationship: newDoc.id,
|
||||
},
|
||||
})
|
||||
|
||||
// update global (draft data)
|
||||
await payload.updateGlobal({
|
||||
slug: 'global-1',
|
||||
draft: true,
|
||||
data: {
|
||||
title: 'draft title',
|
||||
},
|
||||
})
|
||||
|
||||
const query = `{
|
||||
Global1(draft: true) {
|
||||
title
|
||||
relationship {
|
||||
title
|
||||
}
|
||||
}
|
||||
}`
|
||||
const response = (await client.request(query)) as any
|
||||
|
||||
const queriedGlobal = response.Global1
|
||||
expect(queriedGlobal.title).toEqual('draft title')
|
||||
expect(queriedGlobal.relationship.title).toEqual('draft relationship')
|
||||
})
|
||||
})
|
||||
|
||||
describe('Error Handler', () => {
|
||||
|
||||
@@ -78,6 +78,26 @@ describe('fields', () => {
|
||||
).toBeHidden()
|
||||
})
|
||||
|
||||
test('should not display admin.disableListColumn true field in list view column selector if toggling other fields', async () => {
|
||||
await page.goto(url.list)
|
||||
await page.locator('.list-controls__toggle-columns').click()
|
||||
|
||||
await expect(page.locator('.column-selector')).toBeVisible()
|
||||
|
||||
// Click another field in column selector
|
||||
const updatedAtButton = page.locator(`.column-selector .column-selector__column`, {
|
||||
hasText: exactText('Updated At'),
|
||||
})
|
||||
await updatedAtButton.click()
|
||||
|
||||
// Check if "Disable List Column Text" is not present in the column options
|
||||
await expect(
|
||||
page.locator(`.column-selector .column-selector__column`, {
|
||||
hasText: exactText('Disable List Column Text'),
|
||||
}),
|
||||
).toBeHidden()
|
||||
})
|
||||
|
||||
test('should display field in list view filter selector if admin.disableListColumn is true and admin.disableListFilter is false', async () => {
|
||||
await page.goto(url.list)
|
||||
await page.locator('.list-controls__toggle-where').click()
|
||||
|
||||
Reference in New Issue
Block a user