feat: v4.0.0 (#1016)

Co-authored-by: Denys Konovalov <kontakt@denyskon.de>
Co-authored-by: Mathieu COSYNS <64072917+Mathieu-COSYNS@users.noreply.github.com>
This commit is contained in:
Daniel Lautzenheiser
2024-01-03 15:14:09 -05:00
committed by GitHub
parent 682576ffc4
commit 799c7e6936
732 changed files with 48477 additions and 10886 deletions

View File

@ -7,7 +7,7 @@ import { store } from '@staticcms/core/store';
import { createMockWidgetControlProps } from '@staticcms/test/data/widgets.mock';
import { renderWithProviders } from '@staticcms/test/test-utils';
import type { BaseField, UnknownField, WidgetControlProps } from '@staticcms/core/interface';
import type { BaseField, ObjectValue, UnknownField, WidgetControlProps } from '@staticcms/core';
import type { FC } from 'react';
export interface WidgetControlHarnessOptions {
@ -15,16 +15,39 @@ export interface WidgetControlHarnessOptions {
withMediaLibrary?: boolean;
}
export type WidgetControlHarnessParams<T, F extends BaseField = UnknownField> = Parameters<
typeof createMockWidgetControlProps<T, F>
>[0];
export type WidgetControlHarnessProps<T, F extends BaseField = UnknownField> = Omit<
WidgetControlHarnessParams<T, F>,
'field'
> &
Pick<Partial<WidgetControlHarnessParams<T, F>>, 'field'>;
export interface WidgetControlHarnessReturn<T, F extends BaseField = UnknownField>
extends Omit<ReturnType<typeof renderWithProviders>, 'rerender'> {
rerender: (rerenderProps?: Omit<WidgetControlHarnessProps<T, F>, 'field'> | undefined) => {
props: Omit<WidgetControlHarnessProps<T, F>, 'field'> | undefined;
};
store: typeof store;
props: WidgetControlProps<T, F, ObjectValue>;
}
export type WidgetControlHarness<T, F extends BaseField = UnknownField> = (
renderProps?: WidgetControlHarnessProps<T, F>,
renderOptions?: WidgetControlHarnessOptions,
) => WidgetControlHarnessReturn<T, F>;
export const createWidgetControlHarness = <T, F extends BaseField = UnknownField>(
Component: FC<WidgetControlProps<T, F>>,
defaults: Omit<Partial<WidgetControlProps<T, F>>, 'field'> &
Pick<WidgetControlProps<T, F>, 'field'>,
options?: WidgetControlHarnessOptions,
) => {
type Params = Parameters<typeof createMockWidgetControlProps<T, F>>[0];
type Props = Omit<Params, 'field'> & Pick<Partial<Params>, 'field'>;
return (renderProps?: Props, renderOptions?: WidgetControlHarnessOptions) => {
): WidgetControlHarness<T, F> => {
return (
renderProps?: WidgetControlHarnessProps<T, F>,
renderOptions?: WidgetControlHarnessOptions,
) => {
const { useFakeTimers = false, withMediaLibrary = false } = renderOptions ?? options ?? {};
if (useFakeTimers) {
jest.useFakeTimers({ now: new Date(2023, 1, 12, 10, 15, 35, 0) });
@ -49,7 +72,7 @@ export const createWidgetControlHarness = <T, F extends BaseField = UnknownField
});
}
const rerender = (rerenderProps?: Omit<Props, 'field'>) => {
const rerender = (rerenderProps?: Omit<WidgetControlHarnessProps<T, F>, 'field'>) => {
const finalRerenderProps = {
...props,
...rerenderProps,