chore: more consistently passes validation args
This commit is contained in:
@@ -39,7 +39,6 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
const {
|
||||
fieldSchema,
|
||||
data: fullData = {},
|
||||
siblingData = {},
|
||||
user,
|
||||
id,
|
||||
operation,
|
||||
@@ -48,7 +47,7 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
if (fieldSchema) {
|
||||
const validationPromises = [];
|
||||
|
||||
const structureFieldState = (field, passesCondition, data = {}) => {
|
||||
const structureFieldState = (field, passesCondition, data = {}, siblingData = {}) => {
|
||||
const value = typeof data?.[field.name] !== 'undefined' ? data[field.name] : field.defaultValue;
|
||||
|
||||
const fieldState = {
|
||||
@@ -156,7 +155,7 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
|
||||
return {
|
||||
...state,
|
||||
[`${path}${field.name}`]: structureFieldState(field, passesCondition, data),
|
||||
[`${path}${field.name}`]: structureFieldState(field, passesCondition, fullData, data),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -173,7 +172,7 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
// Handle normal fields
|
||||
return {
|
||||
...state,
|
||||
[`${path}${namedField.name}`]: structureFieldState(field, passesCondition, data),
|
||||
[`${path}${namedField.name}`]: structureFieldState(field, passesCondition, fullData, data),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React, { useCallback, useEffect, useReducer, useState } from 'react';
|
||||
import { DragDropContext, Droppable } from 'react-beautiful-dnd';
|
||||
|
||||
import { useAuth } from '@payloadcms/config-provider';
|
||||
import withCondition from '../../withCondition';
|
||||
import Button from '../../../elements/Button';
|
||||
import DraggableSection from '../../DraggableSection';
|
||||
@@ -14,6 +15,9 @@ import Banner from '../../../elements/Banner';
|
||||
import FieldDescription from '../../FieldDescription';
|
||||
import { Props } from './types';
|
||||
|
||||
import { useDocumentInfo } from '../../../utilities/DocumentInfo';
|
||||
import { useOperation } from '../../../utilities/OperationProvider';
|
||||
|
||||
import './index.scss';
|
||||
|
||||
const baseClass = 'field-type array';
|
||||
@@ -49,6 +53,9 @@ const ArrayFieldType: React.FC<Props> = (props) => {
|
||||
|
||||
const [rows, dispatchRows] = useReducer(reducer, []);
|
||||
const formContext = useForm();
|
||||
const { user } = useAuth();
|
||||
const { id } = useDocumentInfo();
|
||||
const operation = useOperation();
|
||||
|
||||
const { dispatchFields } = formContext;
|
||||
|
||||
@@ -74,11 +81,11 @@ const ArrayFieldType: React.FC<Props> = (props) => {
|
||||
});
|
||||
|
||||
const addRow = useCallback(async (rowIndex) => {
|
||||
const subFieldState = await buildStateFromSchema({ fieldSchema: fields });
|
||||
const subFieldState = await buildStateFromSchema({ fieldSchema: fields, operation, id, user });
|
||||
dispatchFields({ type: 'ADD_ROW', rowIndex, subFieldState, path });
|
||||
dispatchRows({ type: 'ADD', rowIndex });
|
||||
setValue(value as number + 1);
|
||||
}, [dispatchRows, dispatchFields, fields, path, setValue, value]);
|
||||
}, [dispatchRows, dispatchFields, fields, path, setValue, value, operation, id, user]);
|
||||
|
||||
const removeRow = useCallback((rowIndex) => {
|
||||
dispatchRows({ type: 'REMOVE', rowIndex });
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React, { useCallback, useEffect, useReducer, useState } from 'react';
|
||||
import { DragDropContext, Droppable } from 'react-beautiful-dnd';
|
||||
|
||||
import { useAuth } from '@payloadcms/config-provider';
|
||||
import { usePreferences } from '../../../utilities/Preferences';
|
||||
import withCondition from '../../withCondition';
|
||||
import Button from '../../../elements/Button';
|
||||
@@ -18,6 +19,7 @@ import Banner from '../../../elements/Banner';
|
||||
import FieldDescription from '../../FieldDescription';
|
||||
import { Props } from './types';
|
||||
import { DocumentPreferences } from '../../../../../preferences/types';
|
||||
import { useOperation } from '../../../utilities/OperationProvider';
|
||||
|
||||
import './index.scss';
|
||||
|
||||
@@ -55,6 +57,9 @@ const Blocks: React.FC<Props> = (props) => {
|
||||
const { getPreference, setPreference } = usePreferences();
|
||||
const [rows, dispatchRows] = useReducer(reducer, []);
|
||||
const formContext = useForm();
|
||||
const { user } = useAuth();
|
||||
const { id } = useDocumentInfo();
|
||||
const operation = useOperation();
|
||||
const { dispatchFields } = formContext;
|
||||
|
||||
const memoizedValidate = useCallback((value, options) => {
|
||||
@@ -79,12 +84,12 @@ const Blocks: React.FC<Props> = (props) => {
|
||||
const addRow = useCallback(async (rowIndex, blockType) => {
|
||||
const block = blocks.find((potentialBlock) => potentialBlock.slug === blockType);
|
||||
|
||||
const subFieldState = await buildStateFromSchema({ fieldSchema: block.fields });
|
||||
const subFieldState = await buildStateFromSchema({ fieldSchema: block.fields, operation, id, user });
|
||||
|
||||
dispatchFields({ type: 'ADD_ROW', rowIndex, subFieldState, path, blockType });
|
||||
dispatchRows({ type: 'ADD', rowIndex, blockType });
|
||||
setValue(value as number + 1);
|
||||
}, [path, setValue, value, blocks, dispatchFields]);
|
||||
}, [path, setValue, value, blocks, dispatchFields, operation, id, user]);
|
||||
|
||||
const removeRow = useCallback((rowIndex) => {
|
||||
dispatchRows({ type: 'REMOVE', rowIndex });
|
||||
@@ -97,8 +102,8 @@ const Blocks: React.FC<Props> = (props) => {
|
||||
dispatchFields({ type: 'MOVE_ROW', moveFromIndex, moveToIndex, path });
|
||||
}, [dispatchRows, dispatchFields, path]);
|
||||
|
||||
const setCollapse = useCallback(async (id: string, collapsed: boolean) => {
|
||||
dispatchRows({ type: 'SET_COLLAPSE', id, collapsed });
|
||||
const setCollapse = useCallback(async (rowID: string, collapsed: boolean) => {
|
||||
dispatchRows({ type: 'SET_COLLAPSE', rowID, collapsed });
|
||||
|
||||
if (preferencesKey) {
|
||||
const preferences: DocumentPreferences = await getPreference(preferencesKey);
|
||||
@@ -108,9 +113,9 @@ const Blocks: React.FC<Props> = (props) => {
|
||||
|| [];
|
||||
|
||||
if (!collapsed) {
|
||||
newCollapsedState = newCollapsedState.filter((existingID) => existingID !== id);
|
||||
newCollapsedState = newCollapsedState.filter((existingID) => existingID !== rowID);
|
||||
} else {
|
||||
newCollapsedState.push(id);
|
||||
newCollapsedState.push(rowID);
|
||||
}
|
||||
|
||||
setPreference(preferencesKey, {
|
||||
|
||||
@@ -2,6 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react';
|
||||
import { Transforms, Element } from 'slate';
|
||||
import { ReactEditor, useSlateStatic } from 'slate-react';
|
||||
import { Modal } from '@faceless-ui/modal';
|
||||
import { useAuth } from '@payloadcms/config-provider';
|
||||
import { SanitizedCollectionConfig } from '../../../../../../../../../collections/config/types';
|
||||
import buildStateFromSchema from '../../../../../../Form/buildStateFromSchema';
|
||||
import MinimalTemplate from '../../../../../../../templates/Minimal';
|
||||
@@ -29,6 +30,7 @@ type Props = {
|
||||
export const EditModal: React.FC<Props> = ({ slug, closeModal, relatedCollectionConfig, fieldSchema, element }) => {
|
||||
const editor = useSlateStatic();
|
||||
const [initialState, setInitialState] = useState({});
|
||||
const { user } = useAuth();
|
||||
|
||||
const handleUpdateEditData = useCallback((fields) => {
|
||||
const newNode = {
|
||||
@@ -47,12 +49,12 @@ export const EditModal: React.FC<Props> = ({ slug, closeModal, relatedCollection
|
||||
|
||||
useEffect(() => {
|
||||
const awaitInitialState = async () => {
|
||||
const state = await buildStateFromSchema({ fieldSchema, data: element?.fields });
|
||||
const state = await buildStateFromSchema({ fieldSchema, data: element?.fields, user, operation: 'update' });
|
||||
setInitialState(state);
|
||||
};
|
||||
|
||||
awaitInitialState();
|
||||
}, [fieldSchema, element.fields]);
|
||||
}, [fieldSchema, element.fields, user]);
|
||||
|
||||
return (
|
||||
<Modal
|
||||
|
||||
@@ -9,6 +9,7 @@ import DefaultAccount from './Default';
|
||||
import buildStateFromSchema from '../../forms/Form/buildStateFromSchema';
|
||||
import RenderCustomComponent from '../../utilities/RenderCustomComponent';
|
||||
import { NegativeFieldGutterProvider } from '../../forms/FieldTypeGutter/context';
|
||||
import { useDocumentInfo } from '../../utilities/DocumentInfo';
|
||||
|
||||
const AccountView: React.FC = () => {
|
||||
const { state: locationState } = useLocation<{ data: unknown }>();
|
||||
@@ -16,6 +17,8 @@ const AccountView: React.FC = () => {
|
||||
const { setStepNav } = useStepNav();
|
||||
const { user, permissions } = useAuth();
|
||||
const [initialState, setInitialState] = useState({});
|
||||
const { id } = useDocumentInfo();
|
||||
|
||||
const {
|
||||
serverURL,
|
||||
routes: { api },
|
||||
@@ -61,12 +64,12 @@ const AccountView: React.FC = () => {
|
||||
|
||||
useEffect(() => {
|
||||
const awaitInitialState = async () => {
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender });
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, operation: 'update', id, user });
|
||||
setInitialState(state);
|
||||
};
|
||||
|
||||
awaitInitialState();
|
||||
}, [dataToRender, fields]);
|
||||
}, [dataToRender, fields, id, user]);
|
||||
|
||||
return (
|
||||
<NegativeFieldGutterProvider allow>
|
||||
|
||||
@@ -17,7 +17,7 @@ const GlobalView: React.FC<IndexProps> = (props) => {
|
||||
const { state: locationState } = useLocation<{data?: Record<string, unknown>}>();
|
||||
const locale = useLocale();
|
||||
const { setStepNav } = useStepNav();
|
||||
const { permissions } = useAuth();
|
||||
const { permissions, user } = useAuth();
|
||||
const [initialState, setInitialState] = useState({});
|
||||
const { getVersions } = useDocumentInfo();
|
||||
|
||||
@@ -45,9 +45,9 @@ const GlobalView: React.FC<IndexProps> = (props) => {
|
||||
|
||||
const onSave = useCallback(async (json) => {
|
||||
getVersions();
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: json.result });
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: json.result, operation: 'update', user });
|
||||
setInitialState(state);
|
||||
}, [getVersions, fields]);
|
||||
}, [getVersions, fields, user]);
|
||||
|
||||
const [{ data, isLoading }] = usePayloadAPI(
|
||||
`${serverURL}${api}/globals/${slug}`,
|
||||
@@ -66,12 +66,12 @@ const GlobalView: React.FC<IndexProps> = (props) => {
|
||||
|
||||
useEffect(() => {
|
||||
const awaitInitialState = async () => {
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender });
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, user, operation: 'update' });
|
||||
setInitialState(state);
|
||||
};
|
||||
|
||||
awaitInitialState();
|
||||
}, [dataToRender, fields]);
|
||||
}, [dataToRender, fields, user]);
|
||||
|
||||
const globalPermissions = permissions?.globals?.[slug];
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ const EditView: React.FC<IndexProps> = (props) => {
|
||||
const history = useHistory();
|
||||
const { setStepNav } = useStepNav();
|
||||
const [initialState, setInitialState] = useState({});
|
||||
const { permissions } = useAuth();
|
||||
const { permissions, user } = useAuth();
|
||||
const { getVersions } = useDocumentInfo();
|
||||
|
||||
const onSave = useCallback(async (json: any) => {
|
||||
@@ -50,10 +50,10 @@ const EditView: React.FC<IndexProps> = (props) => {
|
||||
if (!isEditing) {
|
||||
history.push(`${admin}/collections/${collection.slug}/${json?.doc?.id}`);
|
||||
} else {
|
||||
const state = await buildStateFromSchema({ fieldSchema: collection.fields, data: json.doc });
|
||||
const state = await buildStateFromSchema({ fieldSchema: collection.fields, data: json.doc, user, id, operation: 'update' });
|
||||
setInitialState(state);
|
||||
}
|
||||
}, [admin, collection, history, isEditing, getVersions]);
|
||||
}, [admin, collection, history, isEditing, getVersions, user, id]);
|
||||
|
||||
const [{ data, isLoading, isError }] = usePayloadAPI(
|
||||
(isEditing ? `${serverURL}${api}/${slug}/${id}` : null),
|
||||
@@ -97,12 +97,12 @@ const EditView: React.FC<IndexProps> = (props) => {
|
||||
|
||||
useEffect(() => {
|
||||
const awaitInitialState = async () => {
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender });
|
||||
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, user, operation: isEditing ? 'update' : 'create', id });
|
||||
setInitialState(state);
|
||||
};
|
||||
|
||||
awaitInitialState();
|
||||
}, [dataToRender, fields]);
|
||||
}, [dataToRender, fields, isEditing, id, user]);
|
||||
|
||||
if (isError) {
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user