This commit is contained in:
James
2022-10-06 16:11:24 -04:00
parent 3641dfd38a
commit c2ec54a7cb
6 changed files with 95 additions and 55 deletions

View File

@@ -171,6 +171,7 @@ async function find<T extends TypeWithID = any>(incomingArgs: Arguments): Promis
accessResult,
payload,
entity: collectionConfig,
entityType: 'collection',
doc,
locale,
}))),

View File

@@ -127,6 +127,7 @@ async function findByID<T extends TypeWithID = any>(incomingArgs: Arguments): Pr
result = await replaceWithDraftIfAvailable({
payload,
entity: collectionConfig,
entityType: 'collection',
doc: result,
accessResult,
locale,

View File

@@ -40,7 +40,7 @@ async function findOne<T extends TypeWithID = any>(args: Args): Promise<T> {
// Retrieve and execute access
// /////////////////////////////////////
const queryToBuild: { where?: Where} = {
const queryToBuild: { where?: Where } = {
where: {
and: [
{
@@ -89,6 +89,7 @@ async function findOne<T extends TypeWithID = any>(args: Args): Promise<T> {
doc = await replaceWithDraftIfAvailable({
payload,
entity: globalConfig,
entityType: 'global',
doc,
locale,
accessResult,

View File

@@ -11,6 +11,7 @@ import { SanitizedGlobalConfig } from '../../globals/config/types';
type Arguments<T> = {
payload: Payload
entity: SanitizedCollectionConfig | SanitizedGlobalConfig
entityType: 'collection' | 'global'
doc: T
locale: string
accessResult: AccessResult
@@ -19,36 +20,43 @@ type Arguments<T> = {
const replaceWithDraftIfAvailable = async <T extends TypeWithID>({
payload,
entity,
entityType,
doc,
locale,
accessResult,
}: Arguments<T>): Promise<T> => {
if (docHasTimestamps(doc)) {
const VersionModel = payload.versions[entity.slug] as CollectionModel;
let useEstimatedCount = false;
const queryToBuild: { where: Where } = {
where: {
and: [
{
parent: {
equals: doc.id,
},
},
{
'version._status': {
equals: 'draft',
},
},
{
updatedAt: {
greater_than: doc.updatedAt,
},
},
],
},
};
if (entityType === 'collection') {
queryToBuild.where.and.push({
parent: {
equals: doc.id,
},
});
}
if (docHasTimestamps(doc)) {
queryToBuild.where.and.push({
updatedAt: {
greater_than: doc.updatedAt,
},
});
}
if (hasWhereAccessResult(accessResult)) {
const versionAccessResult = appendVersionToQueryKey(accessResult);
queryToBuild.where.and.push(versionAccessResult);
@@ -80,9 +88,6 @@ const replaceWithDraftIfAvailable = async <T extends TypeWithID>({
createdAt: draft.createdAt,
updatedAt: draft.updatedAt,
};
}
return doc;
};
export default replaceWithDraftIfAvailable;

View File

@@ -3,6 +3,7 @@ import AutosavePosts from './collections/Autosave';
import DraftPosts from './collections/Drafts';
import AutosaveGlobal from './globals/Autosave';
import { devUser } from '../credentials';
import DraftGlobal from './globals/Draft';
export default buildConfig({
collections: [
@@ -11,6 +12,7 @@ export default buildConfig({
],
globals: [
AutosaveGlobal,
DraftGlobal,
],
localization: {
locales: ['en', 'es'],

View File

@@ -0,0 +1,30 @@
import { GlobalConfig } from '../../../src/globals/config/types';
const DraftGlobal: GlobalConfig = {
slug: 'draft-global',
label: 'Draft Global',
versions: {
max: 20,
drafts: true,
},
access: {
read: ({ draft, req: { user } }) => {
// To read a draft of this global, you need to be authenticated
if (draft) {
return Boolean(user);
}
return true;
},
},
fields: [
{
name: 'title',
type: 'text',
required: true,
localized: true,
},
],
};
export default DraftGlobal;