type traverseFields and other misc

This commit is contained in:
Elliot DeNolf
2020-12-08 11:36:00 -05:00
parent b9c597af92
commit 4cb8bbd2f4
5 changed files with 21 additions and 11 deletions

View File

@@ -1,8 +1,8 @@
import { Global } from '../globals/config/types';
import { PayloadGlobalConfig } from '../globals/config/types';
import APIError from './APIError';
class DuplicateGlobal extends APIError {
constructor(config: Global) {
constructor(config: PayloadGlobalConfig) {
super(`Global label "${config.label}" is already in use`);
}
}

View File

@@ -203,3 +203,11 @@ export type FieldWithSubFields =
export function fieldHasSubFields(field: Field): field is FieldWithSubFields {
return (field.type === 'group' || field.type === 'array' || field.type === 'row');
}
export function fieldIsArrayType(field: Field): field is ArrayField {
return field.type === 'array';
}
export function fieldIsBlockType(field: Field): field is BlockField {
return field.type === 'blocks';
}

View File

@@ -1,7 +1,9 @@
import { Data } from '../admin/components/forms/Form/types';
import validationPromise from './validationPromise';
import accessPromise from './accessPromise';
import hookPromise from './hookPromise';
import { OperationArguments } from '../types';
import { fieldHasSubFields, fieldIsArrayType, fieldIsBlockType } from './config/types';
const traverseFields = (args: OperationArguments): void => {
const {
@@ -96,15 +98,15 @@ const traverseFields = (args: OperationArguments): void => {
payload,
}));
if (field.fields) {
if (fieldHasSubFields(field)) {
if (field.name === undefined) {
traverseFields({
...args,
fields: field.fields,
});
} else if (field.type === 'array') {
} else if (fieldIsArrayType(field)) {
if (Array.isArray(data[field.name])) {
data[field.name].forEach((rowData, i) => {
(data[field.name] as Data[]).forEach((rowData, i) => {
const originalDocRow = originalDoc && originalDoc[field.name] && originalDoc[field.name][i];
traverseFields({
...args,
@@ -119,16 +121,16 @@ const traverseFields = (args: OperationArguments): void => {
traverseFields({
...args,
fields: field.fields,
data: data[field.name],
data: data[field.name] as Data,
originalDoc: originalDoc[field.name],
path: `${path}${field.name}.`,
});
}
}
if (field.type === 'blocks') {
if (fieldIsBlockType(field)) {
if (Array.isArray(data[field.name])) {
data[field.name].forEach((rowData, i) => {
(data[field.name] as Data[]).forEach((rowData, i) => {
const block = field.blocks.find((blockType) => blockType.slug === rowData.blockType);
const originalDocRow = originalDoc && originalDoc[field.name] && originalDoc[field.name][i];
@@ -154,7 +156,7 @@ const traverseFields = (args: OperationArguments): void => {
if (field.type === 'array' || field.type === 'blocks') {
const hasRowsOfNewData = Array.isArray(data[field.name]);
const newRowCount = hasRowsOfNewData ? data[field.name].length : 0;
const newRowCount = hasRowsOfNewData ? (data[field.name] as Data[]).length : 0;
// Handle cases of arrays being intentionally set to 0
if (data[field.name] === '0' || data[field.name] === 0 || data[field.name] === null) {

View File

@@ -4,7 +4,7 @@ import Logger from '../utilities/logger';
const logger = Logger();
const connectMongoose = async (url: string) => {
const connectMongoose = async (url: string): Promise<void> => {
let urlToConnect = url;
let successfulConnectionMessage = 'Connected to Mongo server successfully!';

View File

@@ -38,7 +38,7 @@
"dist",
"build",
"src/tests",
"src/tests/**/*.spec.ts",
"**/*.spec.ts",
"node_modules"
]
}