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:
committed by
GitHub
parent
682576ffc4
commit
799c7e6936
@ -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,
|
||||
|
Reference in New Issue
Block a user