Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: threads draft arg through to graphQL queries #6196

Merged
merged 5 commits into from
May 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/graphql/src/resolvers/collections/count.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type Resolver = (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
) => Promise<{ totalDocs: number }>

export default function countResolver(collection: Collection): Resolver {
export function countResolver(collection: Collection): Resolver {
return async function resolver(_, args, context: Context) {
let { req } = context
const locale = req.locale
Expand Down
18 changes: 14 additions & 4 deletions packages/graphql/src/resolvers/collections/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,37 @@ import type { Context } from '../types.js'
export type Resolver<TSlug extends keyof GeneratedTypes['collections']> = (
_: unknown,
args: {
draft: boolean
fallbackLocale?: string
id: number | string
locale?: string
},
context: {
req: PayloadRequestWithData
},
) => Promise<GeneratedTypes['collections'][TSlug]>

export default function getDeleteResolver<TSlug extends keyof GeneratedTypes['collections']>(
export function getDeleteResolver<TSlug extends keyof GeneratedTypes['collections']>(
collection: Collection,
): Resolver<TSlug> {
async function resolver(_, args, context: Context) {
return async function resolver(_, args, context: Context) {
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
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 = {
Expand All @@ -42,6 +54,4 @@ export default function getDeleteResolver<TSlug extends keyof GeneratedTypes['co

return result
}

return resolver
}
12 changes: 11 additions & 1 deletion packages/graphql/src/resolvers/collections/find.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export type Resolver = (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
) => Promise<PaginatedDocs<any>>

export default function findResolver(collection: Collection): Resolver {
export function findResolver(collection: Collection): Resolver {
return async function resolver(_, args, context: Context) {
let { req } = context
const locale = req.locale
Expand All @@ -34,6 +34,16 @@ export default function findResolver(collection: Collection): Resolver {
req = isolateObjectProperty(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale
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 = {
Expand Down
12 changes: 11 additions & 1 deletion packages/graphql/src/resolvers/collections/findByID.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export type Resolver<T> = (
},
) => Promise<T>

export default function findByIDResolver<T extends keyof GeneratedTypes['collections']>(
export function findByIDResolver<T extends keyof GeneratedTypes['collections']>(
collection: Collection,
): Resolver<GeneratedTypes['collections'][T]> {
return async function resolver(_, args, context: Context) {
Expand All @@ -31,6 +31,16 @@ export default function findByIDResolver<T extends keyof GeneratedTypes['collect
req = isolateObjectProperty(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale
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 = {
Expand Down
5 changes: 2 additions & 3 deletions packages/graphql/src/resolvers/collections/findVersionByID.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import type { Context } from '../types.js'
export type Resolver<T extends TypeWithID = any> = (
_: unknown,
args: {
draft: boolean
fallbackLocale?: string
id: number | string
locale?: string
Expand All @@ -20,7 +19,7 @@ export type Resolver<T extends TypeWithID = any> = (
},
) => Promise<TypeWithVersion<T>>

export default function findVersionByIDResolver(collection: Collection): Resolver {
export function findVersionByIDResolver(collection: Collection): Resolver {
return async function resolver(_, args, context: Context) {
let { req } = context
const locale = req.locale
Expand All @@ -29,13 +28,13 @@ export default function findVersionByIDResolver(collection: Collection): Resolve
req = isolateObjectProperty(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale

context.req = req

const options = {
id: args.id,
collection,
depth: 0,
draft: args.draft,
req: isolateObjectProperty(req, 'transactionID'),
}

Expand Down
17 changes: 13 additions & 4 deletions packages/graphql/src/resolvers/collections/findVersions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { Context } from '../types.js'
export type Resolver = (
_: unknown,
args: {
draft?: boolean
fallbackLocale?: string
limit?: number
locale?: string
Expand All @@ -22,15 +23,25 @@ export type Resolver = (
},
) => Promise<PaginatedDocs<any>>

export default function findVersionsResolver(collection: Collection): Resolver {
async function resolver(_, args, context: Context) {
export function findVersionsResolver(collection: Collection): Resolver {
return async function resolver(_, args, context: Context) {
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
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 = {
Expand All @@ -47,6 +58,4 @@ export default function findVersionsResolver(collection: Collection): Resolver {

return result
}

return resolver
}
19 changes: 14 additions & 5 deletions packages/graphql/src/resolvers/collections/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export type Resolver<TSlug extends keyof GeneratedTypes['collections']> = (
autosave: boolean
data: GeneratedTypes['collections'][TSlug]
draft: boolean
fallbackLocale?: string
id: number | string
locale?: string
},
Expand All @@ -21,24 +22,34 @@ export type Resolver<TSlug extends keyof GeneratedTypes['collections']> = (
},
) => Promise<GeneratedTypes['collections'][TSlug]>

export default function updateResolver<TSlug extends keyof GeneratedTypes['collections']>(
export function updateResolver<TSlug extends keyof GeneratedTypes['collections']>(
collection: Collection,
): Resolver<TSlug> {
async function resolver(_, args, context: Context) {
return async function resolver(_, args, context: Context) {
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
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 = {
id: args.id,
autosave: args.autosave,
collection,
data: args.data,
data: args.data as any,
depth: 0,
draft: args.draft,
req: isolateObjectProperty(req, 'transactionID'),
Expand All @@ -48,6 +59,4 @@ export default function updateResolver<TSlug extends keyof GeneratedTypes['colle

return result
}

return resolver
}
78 changes: 47 additions & 31 deletions packages/graphql/src/schema/buildObjectType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import {
} from 'graphql'
import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'
import { tabHasName } from 'payload/types'
import { toWords } from 'payload/utilities'
import { createDataloaderCacheKey, toWords } from 'payload/utilities'

import type { Context } from '../resolvers/types.js'

Expand Down Expand Up @@ -320,13 +320,24 @@ function buildObjectType({
type = type || newlyCreatedBlockType

const relationshipArgs: {
draft?: unknown
fallbackLocale?: unknown
limit?: unknown
locale?: unknown
page?: unknown
where?: unknown
} = {}

const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [relationTo]).some(
(relation) => graphqlResult.collections[relation].config.versions?.drafts,
)

if (relationsUseDrafts) {
relationshipArgs.draft = {
type: GraphQLBoolean,
}
}

if (config.localization) {
relationshipArgs.locale = {
type: graphqlResult.types.localeInputType,
Expand All @@ -350,6 +361,7 @@ function buildObjectType({
const locale = args.locale || context.req.locale
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale
let relatedCollectionSlug = field.relationTo
const draft = args.draft ?? context.req.query?.draft

if (hasManyValues) {
const results = []
Expand All @@ -365,17 +377,18 @@ function buildObjectType({
}

const result = await context.req.payloadDataLoader.load(
JSON.stringify([
context.req.transactionID,
collectionSlug,
id,
0,
0,
locale,
createDataloaderCacheKey({
collectionSlug: collectionSlug as string,
currentDepth: 0,
depth: 0,
docID: id,
draft,
fallbackLocale,
false,
false,
]),
locale,
overrideAccess: false,
showHiddenFields: false,
transactionID: context.req.transactionID,
}),
)

if (result) {
Expand Down Expand Up @@ -411,17 +424,18 @@ function buildObjectType({

if (id) {
const relatedDocument = await context.req.payloadDataLoader.load(
JSON.stringify([
context.req.transactionID,
relatedCollectionSlug,
id,
0,
0,
locale,
createDataloaderCacheKey({
collectionSlug: relatedCollectionSlug as string,
currentDepth: 0,
depth: 0,
docID: id,
draft,
fallbackLocale,
false,
false,
]),
locale,
overrideAccess: false,
showHiddenFields: false,
transactionID: context.req.transactionID,
}),
)

if (relatedDocument) {
Expand Down Expand Up @@ -479,6 +493,7 @@ function buildObjectType({
editor?.populationPromises({
context,
depth,
draft: args.draft,
field,
fieldPromises,
findMany: false,
Expand Down Expand Up @@ -615,17 +630,18 @@ function buildObjectType({

if (id) {
const relatedDocument = await context.req.payloadDataLoader.load(
JSON.stringify([
context.req.transactionID,
relatedCollectionSlug,
id,
0,
0,
locale,
createDataloaderCacheKey({
collectionSlug: relatedCollectionSlug,
currentDepth: 0,
depth: 0,
docID: id,
draft: false,
fallbackLocale,
false,
false,
]),
locale,
overrideAccess: false,
showHiddenFields: false,
transactionID: context.req.transactionID,
}),
)

return relatedDocument || null
Expand Down
14 changes: 7 additions & 7 deletions packages/graphql/src/schema/initCollections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,17 @@ import refresh from '../resolvers/auth/refresh.js'
import resetPassword from '../resolvers/auth/resetPassword.js'
import unlock from '../resolvers/auth/unlock.js'
import verifyEmail from '../resolvers/auth/verifyEmail.js'
import countResolver from '../resolvers/collections/count.js'
import { countResolver } from '../resolvers/collections/count.js'
import createResolver from '../resolvers/collections/create.js'
import getDeleteResolver from '../resolvers/collections/delete.js'
import { getDeleteResolver } from '../resolvers/collections/delete.js'
import { docAccessResolver } from '../resolvers/collections/docAccess.js'
import duplicateResolver from '../resolvers/collections/duplicate.js'
import findResolver from '../resolvers/collections/find.js'
import findByIDResolver from '../resolvers/collections/findByID.js'
import findVersionByIDResolver from '../resolvers/collections/findVersionByID.js'
import findVersionsResolver from '../resolvers/collections/findVersions.js'
import { findResolver } from '../resolvers/collections/find.js'
import { findByIDResolver } from '../resolvers/collections/findByID.js'
import { findVersionByIDResolver } from '../resolvers/collections/findVersionByID.js'
import { findVersionsResolver } from '../resolvers/collections/findVersions.js'
import restoreVersionResolver from '../resolvers/collections/restoreVersion.js'
import updateResolver from '../resolvers/collections/update.js'
import { updateResolver } from '../resolvers/collections/update.js'
import formatName from '../utilities/formatName.js'
import { buildMutationInputType, getCollectionIDType } from './buildMutationInputType.js'
import buildObjectType from './buildObjectType.js'
Expand Down
Loading
Loading