Compare commits

...

11 Commits

Author SHA1 Message Date
Elliot DeNolf
b9854ed60a chore(release): db-postgres/0.8.4 [skip ci] 2024-05-17 14:36:02 -04:00
Elliot DeNolf
576ee14976 chore(release): payload/2.18.3 [skip ci] 2024-05-17 14:33:14 -04:00
Dan Ribbens
bf77cec7e9 fix(db-postgres): query with like on id columns (#6416)
copy of https://github.com/payloadcms/payload/pull/6414 to main
2024-05-17 14:07:57 -04:00
Patrik
ab8b2f3fb8 fix: nested disableListColumn in rows (#6412)
## Description

Fixes #6407 

- [x] I have read and understand the
[CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md)
document in this repository.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## Checklist:

- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] Existing test suite passes locally with my changes
2024-05-17 14:01:08 -04:00
Patrik
db5f3f3ccd fix(db-postgres): uuid custom db name (#6409)
## Description

Fixes an issue with creating versions when using custom DB names,
`uuid`, and drafts.

v3 PR [here](https://github.com/payloadcms/payload/pull/6408)

- [x] I have read and understand the
[CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md)
document in this repository.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## Checklist:

- [x] Existing test suite passes locally with my changes
2024-05-17 13:58:08 -04:00
Francis Turmel
cece39957f chore(i18n): French translation improvements (#6035)
## Description

see #6406 for the changes against `beta`

* The apostrophe character `’` should be used instead of the single
quote `'`
* Gender corrections: "L’adresse e-mail fourni**e**", "Vérification
échoué**e**"
* Lowercase: "Supprimer le **té**léversement"
* Dark and light theme: I think it makes more sense to use "Sombre" and
"Clair" here to identify the theme. Day/Night modes imply a hue/warmth
correction and are different features altogether. Reference:
https://fr.wikipedia.org/wiki/Mode_sombre#Mode_sombre_et_mode_nuit_ou_chaud
* Fix accent: "Mis à jour avec succ**è**s"
* "Bienvenue" I think would be the correct standalone greeting form.
Reference:
https://www.projet-voltaire.fr/question-orthographe/orthographe-bienvenu-bienvenue-chez-moi/
* "Recadrer" is the correct word for "crop". "Récolte" means "crop" in
the sense of "harvest", so this was probably a bad literal Google
Translate that slipped through.
* Correct all "Es-tu sûr ?" to the proper formal "Êtes-vous sûr ?" for
consistency
* Use _article défini_ since we will enumerate the values: "Ce champ
contient **les** sélections invalides suivantes :"
* Space before question marks

---

<!-- Please include a summary of the pull request and any related issues
it fixes. Please also include relevant motivation and context. -->

- [x] I have read and understand the
[CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md)
document in this repository.

## Type of change

<!-- Please delete options that are not relevant. -->

- [x] Chore (non-breaking change which does not add functionality)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Change to the
[templates](https://github.com/payloadcms/payload/tree/main/templates)
directory (does not affect core functionality)
- [ ] Change to the
[examples](https://github.com/payloadcms/payload/tree/main/examples)
directory (does not affect core functionality)
- [ ] This change requires a documentation update

## Checklist:

- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] Existing test suite passes locally with my changes
- [ ] I have made corresponding changes to the documentation
2024-05-17 13:51:47 -03:00
Elliot DeNolf
157fff0417 chore(release): payload/2.18.2 [skip ci] 2024-05-17 10:09:35 -04:00
Elliot DeNolf
88e113a545 fix: allow focal point when no sizes defined (#6397)
Allow focal points to be saved even when no imageSizes are defined.
Expands upon #6364 .
2024-05-17 09:06:42 -04:00
Elliot DeNolf
d33afe48fe chore(release): payload/2.18.1 [skip ci] 2024-05-16 15:46:23 -04:00
Elliot DeNolf
e76df32f09 fix: add back explicit crop x and y values (#6391)
Cropping x and y values pulling from the UI were unintentionally removed
in #6364
2024-05-16 15:32:36 -04:00
Elliot DeNolf
b068f30f51 chore(release): richtext-lexical/0.11.1 [skip ci] 2024-05-16 14:05:28 -04:00
18 changed files with 211 additions and 99 deletions

View File

@@ -1,3 +1,26 @@
## [2.18.3](https://github.com/payloadcms/payload/compare/v2.18.2...v2.18.3) (2024-05-17)
### Bug Fixes
* **db-postgres:** query with like on id columns ([#6416](https://github.com/payloadcms/payload/issues/6416)) ([bf77cec](https://github.com/payloadcms/payload/commit/bf77cec7e9e7db4988e481d464178636203fca32))
* **db-postgres:** uuid custom db name ([#6409](https://github.com/payloadcms/payload/issues/6409)) ([db5f3f3](https://github.com/payloadcms/payload/commit/db5f3f3ccdaedd9e8036c3e39fc20650a309a151))
* nested `disableListColumn` in rows ([#6412](https://github.com/payloadcms/payload/issues/6412)) ([ab8b2f3](https://github.com/payloadcms/payload/commit/ab8b2f3fb87864484582b7d819ca307888a9449b)), closes [#6407](https://github.com/payloadcms/payload/issues/6407)
## [2.18.2](https://github.com/payloadcms/payload/compare/v2.18.1...v2.18.2) (2024-05-17)
### Bug Fixes
* allow focal point when no sizes defined ([#6397](https://github.com/payloadcms/payload/issues/6397)) ([88e113a](https://github.com/payloadcms/payload/commit/88e113a5452300434f690186d10ea02ab159ffc3))
## [2.18.1](https://github.com/payloadcms/payload/compare/v2.18.0...v2.18.1) (2024-05-16)
### Bug Fixes
* add back explicit crop x and y values ([#6391](https://github.com/payloadcms/payload/issues/6391)) ([e76df32](https://github.com/payloadcms/payload/commit/e76df32f0987cc92dc8d9c693950e650c52576bf))
## [2.18.0](https://github.com/payloadcms/payload/compare/v2.17.0...v2.18.0) (2024-05-16)

View File

@@ -1,6 +1,6 @@
{
"name": "@payloadcms/db-postgres",
"version": "0.8.3",
"version": "0.8.4",
"description": "The officially supported Postgres database adapter for Payload",
"repository": {
"type": "git",

View File

@@ -45,8 +45,7 @@ export async function createVersion<T extends TypeWithID>(
const table = this.tables[tableName]
const relationshipsTable =
this.tables[`_${defaultTableName}${this.versionsSuffix}${this.relationshipsSuffix}`]
const relationshipsTable = this.tables[`${tableName}${this.relationshipsSuffix}`]
if (collection.versions.drafts) {
await db.execute(sql`

View File

@@ -71,7 +71,7 @@ export async function parseParams({
// So we need to loop on keys again here to handle each operator independently
const pathOperators = where[relationOrPath]
if (typeof pathOperators === 'object') {
for (const operator of Object.keys(pathOperators)) {
for (let operator of Object.keys(pathOperators)) {
if (validOperators.includes(operator as Operator)) {
const val = where[relationOrPath][operator]
const {
@@ -157,6 +157,13 @@ export async function parseParams({
break
}
if (
operator === 'like' &&
(field.type === 'number' || table[columnName].columnType === 'PgUUID')
) {
operator = 'equals'
}
if (operator === 'like') {
constraints.push(
and(...val.split(' ').map((word) => ilike(table[columnName], `%${word}%`))),

View File

@@ -1,6 +1,6 @@
{
"name": "payload",
"version": "2.18.0",
"version": "2.18.3",
"description": "Node, React and MongoDB Headless CMS and Application Framework",
"license": "MIT",
"main": "./dist/index.js",

View File

@@ -41,6 +41,8 @@ export const EditUpload: React.FC<{
height: uploadEdits?.crop?.height || 100,
unit: '%',
width: uploadEdits?.crop?.width || 100,
x: uploadEdits?.crop?.x || 0,
y: uploadEdits?.crop?.y || 0,
})
const [focalPosition, setFocalPosition] = useState<{ x: number; y: number }>({

View File

@@ -9,12 +9,12 @@ import React, {
} from 'react'
import type { SanitizedCollectionConfig } from '../../../../collections/config/types'
import type { Field } from '../../../../fields/config/types'
import type { Props as CellProps } from '../../views/collections/List/Cell/types'
import type { ListPreferences } from '../../views/collections/List/types'
import type { Column } from '../Table/types'
import type { Action } from './columnReducer'
import { type Field, fieldHasSubFields } from '../../../../fields/config/types'
import { usePreferences } from '../../utilities/Preferences'
import formatFields from '../../views/collections/List/formatFields'
import buildColumns from './buildColumns'
@@ -35,6 +35,12 @@ export const useTableColumns = (): ITableColumns => useContext(TableColumnContex
const filterTableFields = (fields: Field[]): Field[] => {
return fields.reduce((acc, field) => {
if (fieldHasSubFields(field)) {
field = {
...field,
fields: filterTableFields(field.fields),
}
}
if (!field.admin?.disableListColumn) acc.push(field)
return acc
}, [])

View File

@@ -116,10 +116,12 @@ export const Upload: React.FC<Props> = (props) => {
const hasImageSizes = collection?.upload?.imageSizes?.length > 0
const hasResizeOptions = Boolean(collection?.upload?.resizeOptions)
// Explicitly check if set to true, default is undefined
const focalPointEnabled = collection?.upload?.focalPoint === true
const { collection: { upload: { crop: showCrop = true, focalPoint = true } } = {} } = props
const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions)
const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)
const lastSubmittedTime = submitted ? new Date().toISOString() : null

View File

@@ -2,7 +2,7 @@
"$schema": "./translation-schema.json",
"authentication": {
"account": "Compte",
"accountOfCurrentUser": "Compte de l'utilisateur actuel",
"accountOfCurrentUser": "Compte de lutilisateur actuel",
"alreadyActivated": "Déjà activé",
"alreadyLoggedIn": "Déjà connecté",
"apiKey": "Clé API",
@@ -14,7 +14,7 @@
"confirmGeneration": "Confirmer la génération",
"confirmPassword": "Confirmez le mot de passe",
"createFirstUser": "Créer le premier utilisateur",
"emailNotValid": "L'adresse e-mail fourni n'est pas valide",
"emailNotValid": "Ladresse e-mail fournie nest pas valide",
"emailSent": "E-mail envoyé",
"enableAPIKey": "Activer la clé API",
"failedToUnlock": "Déverrouillage échoué",
@@ -24,76 +24,76 @@
"forgotPasswordQuestion": "Mot de passe oublié ?",
"generate": "Générer",
"generateNewAPIKey": "Générer une nouvelle clé API",
"generatingNewAPIKeyWillInvalidate": "La génération d'une nouvelle clé API <1>invalidera</1> la clé précédente. Êtes-vous sûr de vouloir continuer ?",
"lockUntil": "Verrouiller jusqu'à",
"generatingNewAPIKeyWillInvalidate": "La génération dune nouvelle clé API <1>invalidera</1> la clé précédente. Êtes-vous sûr de vouloir continuer ?",
"lockUntil": "Verrouiller jusquà",
"logBackIn": "Se reconnecter",
"logOut": "Se déconnecter",
"loggedIn": "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter</0>.",
"loggedIn": "Pour vous connecter en tant quun autre utilisateur, vous devez dabord vous <0>déconnecter</0>.",
"loggedInChangePassword": "Pour changer votre mot de passe, rendez-vous sur votre <0>compte</0> puis modifiez-y votre mot de passe.",
"loggedOutInactivity": "Vous avez été déconnecté pour cause d'inactivité.",
"loggedOutInactivity": "Vous avez été déconnecté pour cause dinactivité.",
"loggedOutSuccessfully": "Vous avez été déconnecté avec succès.",
"login": "Se connecter",
"loginAttempts": "Tentatives de connexion",
"loginUser": "Connecter l'utilisateur",
"loginWithAnotherUser": "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter</0>.",
"loginUser": "Connecter lutilisateur",
"loginWithAnotherUser": "Pour vous connecter en tant quun autre utilisateur, vous devez dabord vous <0>déconnecter</0>.",
"logout": "Se déconnecter",
"logoutUser": "Déconnecter l'utilisateur",
"logoutUser": "Déconnecter lutilisateur",
"newAPIKeyGenerated": "Nouvelle clé API générée.",
"newAccountCreated": "Un nouveau compte vient d'être créé pour vous permettre d'accéder <a href=\"{{serverURL}}\">{{serverURL}}</a>. Veuillez cliquer sur le lien suivant ou collez l'URL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: <a href=\"{{verificationURL}}\">{{verificationURL}}</a><br>. Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.",
"newAccountCreated": "Un nouveau compte vient dêtre créé pour vous permettre daccéder <a href=\"{{serverURL}}\">{{serverURL}}</a>. Veuillez cliquer sur le lien suivant ou collez lURL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: <a href=\"{{verificationURL}}\">{{verificationURL}}</a><br>. Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.",
"newPassword": "Nouveau mot de passe",
"resetPassword": "Réinitialiser le mot de passe",
"resetPasswordExpiration": "Réinitialiser l'expiration du mot de passe",
"resetPasswordExpiration": "Réinitialiser lexpiration du mot de passe",
"resetPasswordToken": "Réinitialiser le jeton de mot de passe",
"resetYourPassword": "Réinitialisez votre mot de passe",
"stayLoggedIn": "Rester connecté",
"successfullyUnlocked": "Déverrouillé avec succès",
"unableToVerify": "Vérification échoué",
"unableToVerify": "Vérification échouée",
"verified": "Vérifié",
"verifiedSuccessfully": "Vérifié avec succès",
"verify": "Vérifier",
"verifyUser": "Vérifier l'utilisateur",
"verifyUser": "Vérifier lutilisateur",
"verifyYourEmail": "Vérifiez votre e-mail",
"youAreInactive": "Vous n'avez pas été actif depuis un moment alors vous serez bientôt automatiquement déconnecté pour votre propre sécurité. Souhaitez-vous rester connecté ?",
"youAreReceivingResetPassword": "Vous recevez ceci parce que vous (ou quelqu'un d'autre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :",
"youDidNotRequestPassword": "Si vous ne l'avez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé."
"youAreInactive": "Vous navez pas été actif depuis un moment alors vous serez bientôt automatiquement déconnecté pour votre propre sécurité. Souhaitez-vous rester connecté ?",
"youAreReceivingResetPassword": "Vous recevez ceci parce que vous (ou quelquun dautre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :",
"youDidNotRequestPassword": "Si vous ne lavez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé."
},
"error": {
"accountAlreadyActivated": "Ce compte a déjà été activé.",
"autosaving": "Un problème est survenu lors de l'enregistrement automatique de ce document.",
"autosaving": "Un problème est survenu lors de lenregistrement automatique de ce document.",
"correctInvalidFields": "Veuillez corriger les champs invalides.",
"deletingFile": "Une erreur s'est produite lors de la suppression du fichier.",
"deletingTitle": "Une erreur s'est produite lors de la suppression de {{title}}. Veuillez vérifier votre connexion puis réessayer.",
"emailOrPasswordIncorrect": "L'adresse e-mail ou le mot de passe fourni est incorrect.",
"followingFieldsInvalid_one": "Le champ suivant n'est pas valide :",
"deletingFile": "Une erreur sest produite lors de la suppression du fichier.",
"deletingTitle": "Une erreur sest produite lors de la suppression de {{title}}. Veuillez vérifier votre connexion puis réessayer.",
"emailOrPasswordIncorrect": "Ladresse e-mail ou le mot de passe fourni est incorrect.",
"followingFieldsInvalid_one": "Le champ suivant nest pas valide :",
"followingFieldsInvalid_other": "Les champs suivants ne sont pas valides :",
"incorrectCollection": "Collection incorrecte",
"invalidFileType": "Type de fichier invalide",
"invalidFileTypeValue": "Type de fichier invalide : {{value}}",
"loadingDocument": "Un problème est survenu lors du chargement du document qui a pour identifiant {{id}}.",
"localesNotSaved_one": "Le paramètre régional suivant n'a pas pu être enregistré :",
"localesNotSaved_other": "Les paramètres régionaux suivants n'ont pas pu être enregistrés :",
"localesNotSaved_one": "Le paramètre régional suivant na pas pu être enregistré :",
"localesNotSaved_other": "Les paramètres régionaux suivants nont pas pu être enregistrés :",
"missingEmail": "E-mail manquant.",
"missingIDOfDocument": "Il manque l'identifiant du document à mettre à jour.",
"missingIDOfVersion": "Il manque l'identifiant de la version.",
"missingIDOfDocument": "Il manque lidentifiant du document à mettre à jour.",
"missingIDOfVersion": "Il manque lidentifiant de la version.",
"missingRequiredData": "Données requises manquantes.",
"noFilesUploaded": "Aucun fichier n'a été téléversé.",
"noMatchedField": "Aucun champ correspondant n'a été trouvé pour \"{{label}}\"",
"noFilesUploaded": "Aucun fichier na été téléversé.",
"noMatchedField": "Aucun champ correspondant na été trouvé pour \"{{label}}\"",
"noUser": "Aucun utilisateur",
"notAllowedToAccessPage": "Vous n'êtes pas autorisé à accéder à cette page.",
"notAllowedToPerformAction": "Vous n'êtes pas autorisé à effectuer cette action.",
"notFound": "La ressource demandée n'a pas été trouvée.",
"previewing": "Un problème est survenu lors de l'aperçu de ce document.",
"notAllowedToAccessPage": "Vous nêtes pas autorisé à accéder à cette page.",
"notAllowedToPerformAction": "Vous nêtes pas autorisé à effectuer cette action.",
"notFound": "La ressource demandée na pas été trouvée.",
"previewing": "Un problème est survenu lors de laperçu de ce document.",
"problemUploadingFile": "Il y a eu un problème lors du téléversement du fichier.",
"tokenInvalidOrExpired": "Le jeton n'est soit pas valide ou a expiré.",
"unPublishingDocument": "Un problème est survenu lors de l'annulation de la publication de ce document.",
"tokenInvalidOrExpired": "Le jeton nest soit pas valide ou a expiré.",
"unPublishingDocument": "Un problème est survenu lors de lannulation de la publication de ce document.",
"unableToDeleteCount": "Impossible de supprimer {{count}} sur {{total}} {{label}}.",
"unableToUpdateCount": "Impossible de mettre à jour {{count}} sur {{total}} {{label}}.",
"unauthorized": "Non autorisé, vous devez être connecté pour effectuer cette demande.",
"unknown": "Une erreur inconnue s'est produite.",
"unknown": "Une erreur inconnue sest produite.",
"unspecific": "Une erreur est survenue.",
"userLocked": "Cet utilisateur est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses.",
"userLocked": "Cet utilisateur est verrouillé en raison dun trop grand nombre de tentatives de connexion infructueuses.",
"valueMustBeUnique": "La valeur doit être unique",
"verificationTokenInvalid": "Le jeton de vérification n'est pas valide."
"verificationTokenInvalid": "Le jeton de vérification nest pas valide."
},
"fields": {
"addLabel": "Ajouter {{label}}",
@@ -128,7 +128,7 @@
"relatedDocument": "Document connexe",
"relationTo": "Lié à",
"removeRelationship": "Supprimer la relation",
"removeUpload": "Supprimer le Téléversement",
"removeUpload": "Supprimer le téléversement",
"saveChanges": "Sauvegarder les modifications",
"searchForBlock": "Rechercher un bloc",
"selectExistingLabel": "Sélectionnez {{label}} existant",
@@ -147,14 +147,14 @@
"aboutToDeleteCount_other": "Vous êtes sur le point de supprimer {{count}} {{label}}",
"addBelow": "Ajoutez ci-dessous",
"addFilter": "Ajouter un filtre",
"adminTheme": "Thème d'administration",
"adminTheme": "Thème dadministration",
"and": "Et",
"applyChanges": "Appliquer les modifications",
"ascending": "Ascendant",
"automatic": "Automatique",
"backToDashboard": "Retour au tableau de bord",
"cancel": "Annuler",
"changesNotSaved": "Vos modifications n'ont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.",
"changesNotSaved": "Vos modifications nont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.",
"close": "Fermer",
"collapse": "Réduire",
"collections": "Collections",
@@ -171,8 +171,8 @@
"created": "Créé(e)",
"createdAt": "Créé(e) à",
"creating": "création en cours",
"creatingNewLabel": "Création d'un(e) nouveau ou nouvelle {{label}}",
"dark": "Nuit",
"creatingNewLabel": "Création dun(e) nouveau ou nouvelle {{label}}",
"dark": "Sombre",
"dashboard": "Tableau de bord",
"delete": "Supprimer",
"deletedCountSuccessfully": "{{count}} {{label}} supprimé avec succès.",
@@ -206,7 +206,7 @@
"lastModified": "Dernière modification",
"leaveAnyway": "Quitter quand même",
"leaveWithoutSaving": "Quitter sans sauvegarder",
"light": "Lumière ou Jour",
"light": "Clair",
"livePreview": "Aperçu",
"loading": "Chargement en cours",
"locale": "Paramètres régionaux",
@@ -218,11 +218,11 @@
"noFiltersSet": "Aucun filtre défini",
"noLabel": "<Pas de {{label}}>",
"noOptions": "Aucune option",
"noResults": "Aucun(e) {{label}} trouvé(e). Soit aucun(e) {{label}} n'existe encore, soit aucun(e) ne correspond aux filtres que vous avez spécifiés ci-dessus",
"noResults": "Aucun(e) {{label}} trouvé(e). Soit aucun(e) {{label}} nexiste encore, soit aucun(e) ne correspond aux filtres que vous avez spécifiés ci-dessus",
"noValue": "Aucune valeur",
"none": "Aucun(e)",
"notFound": "Pas trouvé",
"nothingFound": "Rien n'a été trouvé",
"nothingFound": "Rien na été trouvé",
"of": "de",
"open": "Ouvrir",
"or": "ou",
@@ -259,13 +259,13 @@
"untitled": "Sans titre",
"updatedAt": "Modifié le",
"updatedCountSuccessfully": "{{count}} {{label}} mis à jour avec succès.",
"updatedSuccessfully": "Mis à jour avec succés.",
"updatedSuccessfully": "Mis à jour avec succès.",
"updating": "Mise à jour",
"uploading": "Téléchargement",
"user": "Utilisateur",
"users": "Utilisateurs",
"value": "Valeur",
"welcome": "Bienvenu(e)"
"welcome": "Bienvenue"
},
"operators": {
"contains": "contient",
@@ -277,24 +277,24 @@
"isLessThan": "est inférieur à",
"isLessThanOrEqualTo": "est inférieur ou égal à",
"isLike": "est comme",
"isNotEqualTo": "n'est pas égal à",
"isNotIn": "n'est pas dans",
"isNotEqualTo": "nest pas égal à",
"isNotIn": "nest pas dans",
"near": "proche"
},
"upload": {
"crop": "Récolte",
"crop": "Recadrer",
"cropToolDescription": "Faites glisser les coins de la zone sélectionnée, dessinez une nouvelle zone ou ajustez les valeurs ci-dessous.",
"dragAndDrop": "Glisser-déposer un fichier",
"dragAndDropHere": "ou glissez-déposez un fichier ici",
"editImage": "Modifier l'image",
"editImage": "Modifier limage",
"fileName": "Nom du fichier",
"fileSize": "Taille du fichier",
"focalPoint": "Point focal",
"focalPointDescription": "Faites glisser le point focal directement sur l'aperçu ou ajustez les valeurs ci-dessous.",
"focalPointDescription": "Faites glisser le point focal directement sur laperçu ou ajustez les valeurs ci-dessous.",
"height": "Hauteur",
"lessInfo": "Moins d'infos",
"moreInfo": "Plus d'infos",
"previewSizes": "Tailles d'aperçu",
"lessInfo": "Moins dinfos",
"moreInfo": "Plus dinfos",
"previewSizes": "Tailles daperçu",
"selectCollectionToBrowse": "Sélectionnez une collection à parcourir",
"selectFile": "Sélectionnez un fichier",
"setCropArea": "Définir la zone de recadrage",
@@ -304,32 +304,32 @@
"width": "Largeur"
},
"validation": {
"emailAddress": "S'il vous plaît, veuillez entrer une adresse e-mail valide.",
"enterNumber": "S'il vous plait, veuillez entrer un nombre valide.",
"fieldHasNo": "Ce champ n'a pas de {{label}}",
"emailAddress": "Sil vous plaît, veuillez entrer une adresse e-mail valide.",
"enterNumber": "Sil vous plait, veuillez entrer un nombre valide.",
"fieldHasNo": "Ce champ na pas de {{label}}",
"greaterThanMax": "{{value}} est supérieur au max autorisé {{label}} de {{max}}.",
"invalidInput": "Ce champ a une entrée invalide.",
"invalidSelection": "Ce champ a une sélection invalide.",
"invalidSelections": "Ce champ contient des sélections invalides suivantes :",
"invalidSelections": "Ce champ contient les sélections invalides suivantes :",
"lessThanMin": "{{value}} est inférieur au min autorisé {{label}} de {{min}}.",
"limitReached": "Limite atteinte, seulement {{max}} éléments peuvent être ajoutés.",
"longerThanMin": "Cette valeur doit être supérieure à la longueur minimale de {{minLength}} caractères.",
"notValidDate": "\"{{value}}\" n'est pas une date valide.",
"notValidDate": "\"{{value}}\" nest pas une date valide.",
"required": "Ce champ est requis.",
"requiresAtLeast": "Ce champ doit avoir au moins {{count}} {{label}}.",
"requiresNoMoreThan": "Ce champ ne doit pas avoir plus de {{count}} {{label}}.",
"requiresTwoNumbers": "Ce champ doit avoir deux chiffres.",
"shorterThanMax": "Cette valeur doit être inférieure à la longueur maximale de {{maxLength}} caractères.",
"trueOrFalse": "Ce champ ne peut être égal qu'à vrai ou faux.",
"validUploadID": "Ce champ n'est pas un valide identifiant de fichier."
"trueOrFalse": "Ce champ ne peut être égal quà vrai ou faux.",
"validUploadID": "Ce champ nest pas un valide identifiant de fichier."
},
"version": {
"aboutToPublishSelection": "Vous êtes sur le point de publier tous les {{label}} de la sélection. Es-tu sûr?",
"aboutToRestore": "Vous êtes sur le point de restaurer le document {{label}} à l'état où il se trouvait le {{versionDate}}.",
"aboutToRestoreGlobal": "Vous êtes sur le point de restaurer le ou la {{label}} global(e) à l'état où il ou elle se trouvait le {{versionDate}}.",
"aboutToPublishSelection": "Vous êtes sur le point de publier tous les {{label}} de la sélection. Êtes-vous sûr ?",
"aboutToRestore": "Vous êtes sur le point de restaurer le document {{label}} à létat où il se trouvait le {{versionDate}}.",
"aboutToRestoreGlobal": "Vous êtes sur le point de restaurer le ou la {{label}} global(e) à létat où il ou elle se trouvait le {{versionDate}}.",
"aboutToRevertToPublished": "Vous êtes sur le point de rétablir les modifications apportées à ce document à la version publiée. Êtes-vous sûr ?",
"aboutToUnpublish": "Vous êtes sur le point d'annuler la publication de ce document. Êtes-vous sûr ?",
"aboutToUnpublishSelection": "Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Es-tu sûr?",
"aboutToUnpublish": "Vous êtes sur le point dannuler la publication de ce document. Êtes-vous sûr ?",
"aboutToUnpublishSelection": "Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Êtes-vous sûr ?",
"autosave": "Enregistrement automatique",
"autosavedSuccessfully": "Enregistrement automatique réussi.",
"autosavedVersion": "Version enregistrée automatiquement",
@@ -337,7 +337,7 @@
"compareVersion": "Comparez cette version à :",
"confirmPublish": "Confirmer la publication",
"confirmRevertToSaved": "Confirmer la restauration",
"confirmUnpublish": "Confirmer l'annulation",
"confirmUnpublish": "Confirmer lannulation",
"confirmVersionRestoration": "Confirmer la restauration de la version",
"currentDocumentStatus": "Document {{docStatus}} actuel",
"draft": "Brouillon",
@@ -377,4 +377,4 @@
"viewingVersions": "Affichage des versions de ou du {{entityLabel}} {{documentTitle}}",
"viewingVersionsGlobal": "Affichage des versions globales de ou du {{entityLabel}}"
}
}
}

View File

@@ -66,8 +66,15 @@ export const generateFileData = async <T>({
req,
})
const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } =
collectionConfig.upload
const {
disableLocalStorage,
focalPoint: focalPointEnabled,
formatOptions,
imageSizes,
resizeOptions,
staticDir,
trimOptions,
} = collectionConfig.upload
let staticPath = staticDir
if (staticDir.indexOf('/') !== 0) {
@@ -244,7 +251,7 @@ export const generateFileData = async <T>({
}
}
if (Array.isArray(imageSizes) && fileSupportsResize) {
if (fileSupportsResize && (Array.isArray(imageSizes) || focalPointEnabled !== false)) {
req.payloadUploadSizes = {}
const { focalPoint, sizeData, sizesToSave } = await resizeAndTransformImageSizes({
config: collectionConfig,

View File

@@ -117,8 +117,9 @@ const getBaseUploadFields = ({ collection, config }: Options): Field[] => {
// Add focal point fields if not disabled
if (
uploadOptions.focalPoint !== false &&
(uploadOptions.imageSizes || uploadOptions.resizeOptions)
uploadOptions.focalPoint !== false ||
uploadOptions.imageSizes ||
uploadOptions.resizeOptions
) {
uploadFields = uploadFields.concat(
['focalX', 'focalY'].map((name) => {

View File

@@ -235,11 +235,6 @@ export default async function resizeAndTransformImageSizes({
}: ResizeArgs): Promise<ImageSizesResult> {
const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload
// Noting to resize here so return as early as possible
if (!imageSizes) return { sizeData: {}, sizesToSave: [] }
const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
// Focal point adjustments
const incomingFocalPoint = uploadEdits.focalPoint
? {
@@ -248,6 +243,17 @@ export default async function resizeAndTransformImageSizes({
}
: undefined
const defaultResult: ImageSizesResult = {
...(focalPointEnabled && incomingFocalPoint && { focalPoint: incomingFocalPoint }),
sizeData: {},
sizesToSave: [],
}
// 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
const results: ImageSizesResult[] = await Promise.all(
imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {
imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)
@@ -352,16 +358,9 @@ export default async function resizeAndTransformImageSizes({
}),
)
return results.reduce(
(acc, result) => {
Object.assign(acc.sizeData, result.sizeData)
acc.sizesToSave.push(...result.sizesToSave)
return acc
},
{
...(focalPointEnabled && incomingFocalPoint && { focalPoint: incomingFocalPoint }),
sizeData: {},
sizesToSave: [],
},
)
return results.reduce((acc, result) => {
Object.assign(acc.sizeData, result.sizeData)
acc.sizesToSave.push(...result.sizesToSave)
return acc
}, defaultResult)
}

View File

@@ -1,6 +1,6 @@
{
"name": "@payloadcms/richtext-lexical",
"version": "0.11.0",
"version": "0.11.1",
"description": "The officially supported Lexical richtext adapter for Payload",
"repository": {
"type": "git",

View File

@@ -513,6 +513,26 @@ describe('collections-rest', () => {
expect(result.docs).toEqual([post])
expect(result.totalDocs).toEqual(1)
})
it('should query LIKE by ID', async () => {
const post = await payload.create({
collection: slug,
data: {
title: 'find me buddy',
},
})
const { result, status } = await client.find<Post>({
query: {
id: {
like: post.id,
},
},
})
expect(status).toStrictEqual(200)
expect(result.totalDocs).toStrictEqual(1)
})
})
it('should query nested relationship - hasMany', async () => {

View File

@@ -134,7 +134,9 @@ export default buildConfigWithDefaults({
],
},
],
versions: true,
versions: {
drafts: true,
},
},
],
globals: [

View File

@@ -24,6 +24,14 @@ const RowFields: CollectionConfig = {
type: 'text',
required: true,
},
{
name: 'disableListColumnText',
type: 'text',
admin: {
disableListColumn: true,
disableListFilter: false,
},
},
],
},
{

View File

@@ -2061,6 +2061,31 @@ describe('fields', () => {
url = new AdminUrlUtil(serverURL, 'row-fields')
})
test('should not display field in list view column selector if admin.disableListColumn is true', async () => {
await page.goto(url.create)
const idInput = page.locator('input#field-id')
await idInput.fill('000')
const titleInput = page.locator('input#field-title')
await titleInput.fill('Row 000')
const disableListColumnText = page.locator('input#field-disableListColumnText')
await disableListColumnText.fill('Disable List Column Text')
await page.locator('#action-save').click()
await wait(200)
await expect(page.locator('.Toastify')).toContainText('successfully')
await page.goto(url.list)
await page.locator('.list-controls__toggle-columns').click()
await expect(page.locator('.column-selector')).toBeVisible()
// 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 show row fields as table columns', async () => {
await page.goto(url.create)

View File

@@ -198,6 +198,17 @@ export default buildConfigWithDefaults({
staticURL: '/focal-only',
},
},
{
slug: 'focal-no-sizes',
fields: [],
upload: {
crop: false,
focalPoint: true,
mimeTypes: ['image/png', 'image/jpg', 'image/jpeg'],
staticDir: './focal-no-sizes',
staticURL: '/focal-no-sizes',
},
},
{
slug: mediaSlug,
fields: [],