chore: ts improvements on delete operation

This commit is contained in:
Elliot DeNolf
2023-01-17 14:50:41 -05:00
parent dc0f8deb06
commit 47bb5d6c61
5 changed files with 23 additions and 11 deletions

View File

@@ -1,10 +1,11 @@
/* eslint-disable no-param-reassign */
import { Config as GeneratedTypes } from 'payload/generated-types';
import { Response } from 'express';
import { PayloadRequest } from '../../../express/types';
import { Collection } from '../../config/types';
import deleteOperation from '../../operations/delete';
export type Resolver = (
export type Resolver<TSlug extends keyof GeneratedTypes['collections']> = (
_: unknown,
args: {
locale?: string
@@ -14,9 +15,11 @@ export type Resolver = (
req: PayloadRequest,
res: Response
}
) => Promise<Document>
) => Promise<GeneratedTypes['collections'][TSlug]>
export default function getDeleteResolver(collection: Collection): Resolver {
export default function getDeleteResolver<TSlug extends keyof GeneratedTypes['collections']>(
collection: Collection,
): Resolver<TSlug> {
async function resolver(_, args, context) {
if (args.locale) context.req.locale = args.locale;
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale;

View File

@@ -1,6 +1,7 @@
import fs from 'fs';
import path from 'path';
import { Config as GeneratedTypes } from 'payload/generated-types';
import { PayloadRequest } from '../../express/types';
import sanitizeInternalFields from '../../utilities/sanitizeInternalFields';
import { NotFound, Forbidden, ErrorDeletingFile } from '../../errors';
@@ -21,7 +22,9 @@ export type Arguments = {
showHiddenFields?: boolean
}
async function deleteOperation(incomingArgs: Arguments): Promise<Document> {
async function deleteOperation<TSlug extends keyof GeneratedTypes['collections']>(
incomingArgs: Arguments,
): Promise<GeneratedTypes['collections'][TSlug]> {
let args = incomingArgs;
// /////////////////////////////////////

View File

@@ -1,4 +1,4 @@
import { TypeWithID } from '../../config/types';
import { Config as GeneratedTypes } from 'payload/generated-types';
import { Document } from '../../../types';
import { PayloadRequest } from '../../../express/types';
import { Payload } from '../../../payload';
@@ -6,8 +6,8 @@ import deleteOperation from '../delete';
import { getDataLoader } from '../../dataloader';
import i18n from '../../../translations/init';
export type Options = {
collection: string
export type Options<T extends keyof GeneratedTypes['collections']> = {
collection: T
id: string
depth?: number
locale?: string
@@ -17,7 +17,10 @@ export type Options = {
showHiddenFields?: boolean
}
export default async function deleteLocal<T extends TypeWithID = any>(payload: Payload, options: Options): Promise<T> {
export default async function deleteLocal<TSlug extends keyof GeneratedTypes['collections']>(
payload: Payload,
options: Options<TSlug>,
): Promise<GeneratedTypes['collections'][TSlug]> {
const {
collection: collectionSlug,
depth,
@@ -44,7 +47,7 @@ export default async function deleteLocal<T extends TypeWithID = any>(payload: P
if (!req.t) req.t = req.i18n.t;
if (!req.payloadDataLoader) req.payloadDataLoader = getDataLoader(req);
return deleteOperation({
return deleteOperation<TSlug>({
depth,
id,
collection,

View File

@@ -21,7 +21,10 @@ export type Options<T extends keyof GeneratedTypes['collections']> = {
draft?: boolean
}
export default async function findByIDLocal<T extends keyof GeneratedTypes['collections']>(payload: Payload, options: Options<T>): Promise<GeneratedTypes['collections'][T]> {
export default async function findByIDLocal<T extends keyof GeneratedTypes['collections']>(
payload: Payload,
options: Options<T>,
): Promise<GeneratedTypes['collections'][T]> {
const {
collection: collectionSlug,
depth,

View File

@@ -287,7 +287,7 @@ export class BasePayload<TGeneratedTypes extends GeneratedTypes> {
return update<T>(this, options);
}
delete = async <T extends TypeWithID = any>(options: DeleteOptions): Promise<T> => {
delete = async <T extends keyof TGeneratedTypes['collections']>(options: DeleteOptions<T>): Promise<TGeneratedTypes['collections'][T]> => {
const { localDelete } = localOperations;
return localDelete<T>(this, options);
}