@mittwald/flow-react-components 0.2.0-alpha.692 → 0.2.0-alpha.694
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/assets/doc-properties.json +3424 -3395
- package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs +8 -1
- package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
- package/dist/js/components/src/lib/controller/overlay/OverlayController.mjs +16 -12
- package/dist/js/components/src/lib/controller/overlay/OverlayController.mjs.map +1 -1
- package/dist/types/integrations/react-hook-form/components/Form/Form.d.ts +4 -0
- package/dist/types/integrations/react-hook-form/components/Form/Form.d.ts.map +1 -1
- package/dist/types/lib/controller/overlay/OverlayController.d.ts +3 -2
- package/dist/types/lib/controller/overlay/OverlayController.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -21,6 +21,7 @@ function Form(props) {
|
|
|
21
21
|
isReadOnly,
|
|
22
22
|
ref,
|
|
23
23
|
id: idProp,
|
|
24
|
+
autoReset = true,
|
|
24
25
|
...formProps
|
|
25
26
|
} = props;
|
|
26
27
|
const newFormId = useId();
|
|
@@ -28,9 +29,15 @@ function Form(props) {
|
|
|
28
29
|
const FormComponent = useMemo(() => formComponent, [formId]);
|
|
29
30
|
const afterSubmitCallback = useRef(void 0);
|
|
30
31
|
const { isSubmitting, isValidating, isDirty } = form.formState;
|
|
32
|
+
const autoResetOptions = typeof autoReset === "boolean" ? { onAfterModalClose: autoReset } : autoReset;
|
|
31
33
|
const modalController = useModalController();
|
|
32
34
|
modalController.useUpdateOptions({
|
|
33
|
-
confirmOnClose: flags.requireCloseModalConfirmationOnUnsavedChanges && isDirty
|
|
35
|
+
confirmOnClose: flags.requireCloseModalConfirmationOnUnsavedChanges && isDirty,
|
|
36
|
+
onClose: () => {
|
|
37
|
+
if (autoResetOptions?.onAfterModalClose) {
|
|
38
|
+
form.reset();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
34
41
|
});
|
|
35
42
|
const handleSubmitResult = (result) => {
|
|
36
43
|
if (typeof result === "function") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"sourcesContent":["import ConfirmUnsavedChangesModal from \"@/components/Modal/components/ConfirmUnsavedChangesModal\";\nimport { useHotkeySubmit } from \"@/integrations/react-hook-form/components/Form/useHotkeySubmit\";\nimport { FormContextProvider } from \"@/integrations/react-hook-form/components/FormContextProvider/FormContextProvider\";\nimport { flags } from \"@/integrations/react-hook-form/flags\";\nimport { useModalController } from \"@/lib/controller\";\nimport {\n type ComponentProps,\n type FC,\n type FormEvent,\n type FormEventHandler,\n type PropsWithChildren,\n type Ref,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport type {\n FieldValues,\n SubmitHandler,\n UseFormReturn,\n} from \"react-hook-form\";\nimport { FormProvider as RhfFormContextProvider } from \"react-hook-form\";\n\nexport type FormOnSubmitHandler<F extends FieldValues> = SubmitHandler<F>;\n\nexport type AfterFormSubmitCallback = (...unknownArgs: unknown[]) => unknown;\n\ntype FormComponentType = FC<\n PropsWithChildren<{\n id: string;\n onSubmit?: FormEventHandler | FormOnSubmitHandler<never>;\n ref?: Ref<HTMLFormElement>;\n }>\n>;\n\nexport interface FormProps<F extends FieldValues>\n extends Omit<ComponentProps<\"form\">, \"onSubmit\">, PropsWithChildren {\n form: UseFormReturn<F>;\n onSubmit: FormOnSubmitHandler<F>;\n formComponent?: FC<Omit<FormComponentType, \"ref\">>;\n isReadOnly?: boolean;\n}\n\nconst DefaultFormComponent: FormComponentType = (p) => <form {...p} />;\n\nexport function Form<F extends FieldValues>(props: FormProps<F>) {\n const {\n form,\n children,\n onSubmit,\n formComponent = DefaultFormComponent,\n isReadOnly,\n ref,\n id: idProp,\n ...formProps\n } = props;\n\n const newFormId = useId();\n const formId = idProp ?? newFormId;\n const FormComponent = useMemo(() => formComponent, [formId]);\n const afterSubmitCallback = useRef<AfterFormSubmitCallback>(undefined);\n const { isSubmitting, isValidating, isDirty } = form.formState;\n\n const modalController = useModalController();\n modalController.useUpdateOptions({\n confirmOnClose:\n flags.requireCloseModalConfirmationOnUnsavedChanges && isDirty,\n });\n\n const handleSubmitResult = (result: unknown) => {\n if (typeof result === \"function\") {\n afterSubmitCallback.current = result as AfterFormSubmitCallback;\n }\n };\n\n const handleSubmit = (e?: FormEvent | F) => {\n const formEvent = e && \"nativeEvent\" in e ? (e as FormEvent) : undefined;\n formEvent?.stopPropagation();\n if (isSubmitting || isValidating) {\n return;\n }\n modalController.confirmClose();\n return form.handleSubmit((values, event) => {\n const submitResult = onSubmit(values, event);\n if (submitResult instanceof Promise) {\n return submitResult.then(handleSubmitResult);\n }\n handleSubmitResult(submitResult);\n })(formEvent);\n };\n\n const onAfterSuccessFeedback = () => {\n afterSubmitCallback.current?.();\n };\n\n const refWithHotkeySubmit = useHotkeySubmit({\n ref,\n handleSubmit,\n });\n\n return (\n <RhfFormContextProvider {...form}>\n <FormContextProvider\n form={form as UseFormReturn}\n isReadOnly={isReadOnly}\n id={formId}\n onAfterSuccessFeedback={onAfterSuccessFeedback}\n >\n <FormComponent\n {...formProps}\n ref={refWithHotkeySubmit}\n id={formId}\n onSubmit={handleSubmit}\n >\n {children}\n </FormComponent>\n </FormContextProvider>\n <ConfirmUnsavedChangesModal />\n </RhfFormContextProvider>\n );\n}\n\nexport default Form;\n"],"names":["RhfFormContextProvider"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Form.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"sourcesContent":["import ConfirmUnsavedChangesModal from \"@/components/Modal/components/ConfirmUnsavedChangesModal\";\nimport { useHotkeySubmit } from \"@/integrations/react-hook-form/components/Form/useHotkeySubmit\";\nimport { FormContextProvider } from \"@/integrations/react-hook-form/components/FormContextProvider/FormContextProvider\";\nimport { flags } from \"@/integrations/react-hook-form/flags\";\nimport { useModalController } from \"@/lib/controller\";\nimport {\n type ComponentProps,\n type FC,\n type FormEvent,\n type FormEventHandler,\n type PropsWithChildren,\n type Ref,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport type {\n FieldValues,\n SubmitHandler,\n UseFormReturn,\n} from \"react-hook-form\";\nimport { FormProvider as RhfFormContextProvider } from \"react-hook-form\";\n\nexport type FormOnSubmitHandler<F extends FieldValues> = SubmitHandler<F>;\n\nexport type AfterFormSubmitCallback = (...unknownArgs: unknown[]) => unknown;\n\nexport interface FormAutoResetOptions {\n onAfterModalClose?: boolean;\n}\n\ntype FormComponentType = FC<\n PropsWithChildren<{\n id: string;\n onSubmit?: FormEventHandler | FormOnSubmitHandler<never>;\n ref?: Ref<HTMLFormElement>;\n }>\n>;\n\nexport interface FormProps<F extends FieldValues>\n extends Omit<ComponentProps<\"form\">, \"onSubmit\">, PropsWithChildren {\n form: UseFormReturn<F>;\n onSubmit: FormOnSubmitHandler<F>;\n formComponent?: FC<Omit<FormComponentType, \"ref\">>;\n isReadOnly?: boolean;\n autoReset?: FormAutoResetOptions | boolean;\n}\n\nconst DefaultFormComponent: FormComponentType = (p) => <form {...p} />;\n\nexport function Form<F extends FieldValues>(props: FormProps<F>) {\n const {\n form,\n children,\n onSubmit,\n formComponent = DefaultFormComponent,\n isReadOnly,\n ref,\n id: idProp,\n autoReset = true,\n ...formProps\n } = props;\n\n const newFormId = useId();\n const formId = idProp ?? newFormId;\n const FormComponent = useMemo(() => formComponent, [formId]);\n const afterSubmitCallback = useRef<AfterFormSubmitCallback>(undefined);\n const { isSubmitting, isValidating, isDirty } = form.formState;\n\n const autoResetOptions =\n typeof autoReset === \"boolean\"\n ? { onAfterModalClose: autoReset }\n : autoReset;\n\n const modalController = useModalController();\n modalController.useUpdateOptions({\n confirmOnClose:\n flags.requireCloseModalConfirmationOnUnsavedChanges && isDirty,\n onClose: () => {\n if (autoResetOptions?.onAfterModalClose) {\n form.reset();\n }\n },\n });\n\n const handleSubmitResult = (result: unknown) => {\n if (typeof result === \"function\") {\n afterSubmitCallback.current = result as AfterFormSubmitCallback;\n }\n };\n\n const handleSubmit = (e?: FormEvent | F) => {\n const formEvent = e && \"nativeEvent\" in e ? (e as FormEvent) : undefined;\n formEvent?.stopPropagation();\n if (isSubmitting || isValidating) {\n return;\n }\n modalController.confirmClose();\n return form.handleSubmit((values, event) => {\n const submitResult = onSubmit(values, event);\n if (submitResult instanceof Promise) {\n return submitResult.then(handleSubmitResult);\n }\n handleSubmitResult(submitResult);\n })(formEvent);\n };\n\n const onAfterSuccessFeedback = () => {\n afterSubmitCallback.current?.();\n };\n\n const refWithHotkeySubmit = useHotkeySubmit({\n ref,\n handleSubmit,\n });\n\n return (\n <RhfFormContextProvider {...form}>\n <FormContextProvider\n form={form as UseFormReturn}\n isReadOnly={isReadOnly}\n id={formId}\n onAfterSuccessFeedback={onAfterSuccessFeedback}\n >\n <FormComponent\n {...formProps}\n ref={refWithHotkeySubmit}\n id={formId}\n onSubmit={handleSubmit}\n >\n {children}\n </FormComponent>\n </FormContextProvider>\n <ConfirmUnsavedChangesModal />\n </RhfFormContextProvider>\n );\n}\n\nexport default Form;\n"],"names":["RhfFormContextProvider"],"mappings":"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"}
|
|
@@ -8,11 +8,12 @@ import { useCloseOverlayConfirmationController } from './useCloseOverlayConfirma
|
|
|
8
8
|
|
|
9
9
|
class OverlayController {
|
|
10
10
|
isOpen = false;
|
|
11
|
-
showConfirmationModal = false;
|
|
12
|
-
confirmOnCloseEnabled;
|
|
13
11
|
onOpenHandlers = /* @__PURE__ */ new Set();
|
|
14
12
|
onCloseHandlers = /* @__PURE__ */ new Set();
|
|
15
13
|
onOpenChangeHandlers = /* @__PURE__ */ new Set();
|
|
14
|
+
showConfirmationModal = false;
|
|
15
|
+
closeIsConfirmed = false;
|
|
16
|
+
confirmOnCloseEnabled;
|
|
16
17
|
constructor(options = {}) {
|
|
17
18
|
makeObservable(this, {
|
|
18
19
|
isOpen: observable,
|
|
@@ -23,11 +24,17 @@ class OverlayController {
|
|
|
23
24
|
setOpen: action.bound,
|
|
24
25
|
confirmClose: action.bound
|
|
25
26
|
});
|
|
26
|
-
|
|
27
|
-
this.
|
|
27
|
+
const { isDefaultOpen = false, confirmOnClose = false } = options;
|
|
28
|
+
this.isOpen = isDefaultOpen;
|
|
29
|
+
this.confirmOnCloseEnabled = confirmOnClose;
|
|
28
30
|
}
|
|
29
31
|
useUpdateOptions(options = {}) {
|
|
30
|
-
const {
|
|
32
|
+
const {
|
|
33
|
+
onOpen,
|
|
34
|
+
onClose,
|
|
35
|
+
onOpenChange,
|
|
36
|
+
confirmOnClose = this.confirmOnCloseEnabled
|
|
37
|
+
} = options;
|
|
31
38
|
this.useOnHandler(
|
|
32
39
|
onOpen,
|
|
33
40
|
(h) => this.addOpenStateHandler(h, this.onOpenHandlers)
|
|
@@ -40,11 +47,7 @@ class OverlayController {
|
|
|
40
47
|
onOpenChange,
|
|
41
48
|
(h) => this.addOpenStateHandler(h, this.onOpenChangeHandlers)
|
|
42
49
|
);
|
|
43
|
-
|
|
44
|
-
if (confirmOnClose) {
|
|
45
|
-
this.confirmOnCloseEnabled = true;
|
|
46
|
-
}
|
|
47
|
-
}, [confirmOnClose, this]);
|
|
50
|
+
this.confirmOnCloseEnabled = confirmOnClose;
|
|
48
51
|
}
|
|
49
52
|
static useNew(options = {}) {
|
|
50
53
|
const controller = useStatic(() => new OverlayController(options));
|
|
@@ -101,7 +104,7 @@ class OverlayController {
|
|
|
101
104
|
return;
|
|
102
105
|
}
|
|
103
106
|
const { bypassConfirmation = false } = options;
|
|
104
|
-
if (this.confirmOnCloseEnabled &&
|
|
107
|
+
if (toOpen === false && this.confirmOnCloseEnabled && !this.closeIsConfirmed && !bypassConfirmation) {
|
|
105
108
|
this.showConfirmationModal = true;
|
|
106
109
|
return;
|
|
107
110
|
}
|
|
@@ -116,6 +119,7 @@ class OverlayController {
|
|
|
116
119
|
}
|
|
117
120
|
if (!aborted) {
|
|
118
121
|
this.isOpen = toOpen;
|
|
122
|
+
this.closeIsConfirmed = false;
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
125
|
useIsOpen() {
|
|
@@ -128,8 +132,8 @@ class OverlayController {
|
|
|
128
132
|
return useCloseOverlayConfirmationController(this);
|
|
129
133
|
}
|
|
130
134
|
confirmClose() {
|
|
135
|
+
this.closeIsConfirmed = true;
|
|
131
136
|
this.showConfirmationModal = false;
|
|
132
|
-
this.confirmOnCloseEnabled = false;
|
|
133
137
|
}
|
|
134
138
|
cancelConfirmation() {
|
|
135
139
|
this.showConfirmationModal = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayController.mjs","sources":["../../../../../../../src/lib/controller/overlay/OverlayController.ts"],"sourcesContent":["import { action, makeObservable, observable } from \"mobx\";\nimport useSelector from \"@/lib/mobx/useSelector\";\nimport { useStatic } from \"@/lib/hooks/useStatic\";\nimport { useEffect } from \"react\";\nimport { useCloseOverlayConfirmationController } from \"@/lib/controller/overlay/useCloseOverlayConfirmationController\";\nimport type { FlowComponentName } from \"@/components/propTypes\";\n\nexport type OverlayOpenHandler = () => unknown;\nexport type OverlayCloseHandler = () => unknown;\nexport type OverlayOpenStateHandler = (isOpen: boolean) => unknown;\ntype AnyOverlayOpenStateHandler =\n | OverlayOpenHandler\n | OverlayCloseHandler\n | OverlayOpenStateHandler;\n\ntype DisposerFn = () => void;\n\nexport interface CloseOverlayOptions {\n overlay: FlowComponentName | OverlayController;\n bypassConfirmation?: boolean;\n}\n\nexport type CloseModalOptions = Omit<CloseOverlayOptions, \"overlay\">;\n\ntype CloseOptions = CloseOverlayOptions | CloseModalOptions;\n\nexport interface OverlayControllerOptions {\n isDefaultOpen?: boolean;\n onOpen?: OverlayOpenHandler;\n onClose?: OverlayCloseHandler;\n onOpenChange?: OverlayOpenStateHandler;\n confirmOnClose?: boolean;\n}\n\ntype ConstructorOptions = Pick<\n OverlayControllerOptions,\n \"isDefaultOpen\" | \"confirmOnClose\"\n>;\n\nexport class OverlayController {\n public isOpen = false;\n public showConfirmationModal = false;\n public confirmOnCloseEnabled: boolean;\n private onOpenHandlers = new Set<OverlayOpenHandler>();\n private onCloseHandlers = new Set<OverlayCloseHandler>();\n private onOpenChangeHandlers = new Set<OverlayOpenStateHandler>();\n\n public constructor(options: ConstructorOptions = {}) {\n makeObservable(this, {\n isOpen: observable,\n showConfirmationModal: observable,\n open: action.bound,\n close: action.bound,\n toggle: action.bound,\n setOpen: action.bound,\n confirmClose: action.bound,\n });\n this.isOpen = options?.isDefaultOpen ?? false;\n this.confirmOnCloseEnabled = options?.confirmOnClose === true;\n }\n\n public useUpdateOptions(options: OverlayControllerOptions = {}): void {\n const { onOpen, onClose, onOpenChange, confirmOnClose } = options;\n\n this.useOnHandler(onOpen, (h) =>\n this.addOpenStateHandler(h, this.onOpenHandlers),\n );\n this.useOnHandler(onClose, (h) =>\n this.addOpenStateHandler(h, this.onCloseHandlers),\n );\n this.useOnHandler(onOpenChange, (h) =>\n this.addOpenStateHandler(h, this.onOpenChangeHandlers),\n );\n\n useEffect(() => {\n if (confirmOnClose) {\n this.confirmOnCloseEnabled = true;\n }\n }, [confirmOnClose, this]);\n }\n\n public static useNew(\n options: OverlayControllerOptions = {},\n ): OverlayController {\n const controller = useStatic(() => new OverlayController(options));\n controller.useUpdateOptions(options);\n return controller;\n }\n\n private addOpenStateHandler<T extends AnyOverlayOpenStateHandler>(\n handler: T,\n handlersSet: Set<T>,\n ): DisposerFn {\n handlersSet.add(handler);\n return () => {\n handlersSet.delete(handler);\n };\n }\n\n private useOnHandler<T extends AnyOverlayOpenStateHandler>(\n handler: T | undefined,\n addHandlerFn: (handler: T) => DisposerFn,\n ) {\n useEffect(\n () => (handler ? addHandlerFn(handler) : undefined),\n [handler, this],\n );\n }\n\n private executeHandlers(\n isOpen: boolean,\n handlers: Set<\n OverlayOpenHandler | OverlayCloseHandler | OverlayOpenStateHandler\n >,\n ): boolean {\n const handlerResult = Array.from(handlers).map((handler) =>\n handler(isOpen),\n );\n return handlerResult.some((result) => result === false);\n }\n\n private executeOnClose(): boolean {\n return this.executeHandlers(false, this.onCloseHandlers);\n }\n\n private executeOnOpen(): boolean {\n return this.executeHandlers(true, this.onOpenHandlers);\n }\n\n private executeOnOpenChange(isOpen: boolean): boolean {\n return this.executeHandlers(isOpen, this.onOpenChangeHandlers);\n }\n\n public addOnClose(handler: OverlayCloseHandler) {\n return this.addOpenStateHandler(handler, this.onCloseHandlers);\n }\n\n public addOnOpen(handler: OverlayOpenHandler) {\n return this.addOpenStateHandler(handler, this.onOpenHandlers);\n }\n\n public addOnOpenChange(handler: OverlayOpenStateHandler) {\n return this.addOpenStateHandler(handler, this.onOpenChangeHandlers);\n }\n\n public open(): void {\n this.setOpen(true);\n }\n\n public close(options?: CloseOptions): void {\n this.setOpen(false, options);\n }\n\n public toggle(): void {\n this.setOpen(!this.isOpen);\n }\n\n public setOpen(toOpen: boolean, options: CloseOptions = {}): void {\n if (this.isOpen === toOpen) {\n return;\n }\n\n const { bypassConfirmation = false } = options;\n\n if (\n this.confirmOnCloseEnabled &&\n toOpen === false &&\n bypassConfirmation === false\n ) {\n this.showConfirmationModal = true;\n return;\n }\n\n let aborted = false;\n if (toOpen) {\n aborted = this.executeOnOpen();\n } else {\n aborted = this.executeOnClose();\n }\n if (!aborted) {\n aborted = this.executeOnOpenChange(toOpen);\n }\n\n if (!aborted) {\n this.isOpen = toOpen;\n }\n }\n\n public useIsOpen() {\n return useSelector(() => this.isOpen);\n }\n\n public useShowConfirmationModal() {\n return useSelector(() => this.showConfirmationModal);\n }\n\n public useConfirmationController() {\n return useCloseOverlayConfirmationController(this);\n }\n\n public confirmClose(): void {\n this.showConfirmationModal = false;\n this.confirmOnCloseEnabled = false;\n }\n\n public cancelConfirmation(): void {\n this.showConfirmationModal = false;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OverlayController.mjs","sources":["../../../../../../../src/lib/controller/overlay/OverlayController.ts"],"sourcesContent":["import { action, makeObservable, observable } from \"mobx\";\nimport useSelector from \"@/lib/mobx/useSelector\";\nimport { useStatic } from \"@/lib/hooks/useStatic\";\nimport { useEffect } from \"react\";\nimport { useCloseOverlayConfirmationController } from \"@/lib/controller/overlay/useCloseOverlayConfirmationController\";\nimport type { FlowComponentName } from \"@/components/propTypes\";\n\nexport type OverlayOpenHandler = () => unknown;\nexport type OverlayCloseHandler = () => unknown;\nexport type OverlayOpenStateHandler = (isOpen: boolean) => unknown;\ntype AnyOverlayOpenStateHandler =\n | OverlayOpenHandler\n | OverlayCloseHandler\n | OverlayOpenStateHandler;\n\ntype DisposerFn = () => void;\n\nexport interface CloseOverlayOptions {\n overlay: FlowComponentName | OverlayController;\n bypassConfirmation?: boolean;\n}\n\nexport type CloseModalOptions = Omit<CloseOverlayOptions, \"overlay\">;\n\ntype CloseOptions = CloseOverlayOptions | CloseModalOptions;\n\nexport interface OverlayControllerOptions {\n isDefaultOpen?: boolean;\n onOpen?: OverlayOpenHandler;\n onClose?: OverlayCloseHandler;\n onOpenChange?: OverlayOpenStateHandler;\n confirmOnClose?: boolean;\n}\n\ntype ConstructorOptions = Pick<\n OverlayControllerOptions,\n \"isDefaultOpen\" | \"confirmOnClose\"\n>;\n\nexport class OverlayController {\n public isOpen = false;\n private onOpenHandlers = new Set<OverlayOpenHandler>();\n private onCloseHandlers = new Set<OverlayCloseHandler>();\n private onOpenChangeHandlers = new Set<OverlayOpenStateHandler>();\n\n public showConfirmationModal = false;\n public closeIsConfirmed = false;\n public confirmOnCloseEnabled: boolean;\n\n public constructor(options: ConstructorOptions = {}) {\n makeObservable(this, {\n isOpen: observable,\n showConfirmationModal: observable,\n open: action.bound,\n close: action.bound,\n toggle: action.bound,\n setOpen: action.bound,\n confirmClose: action.bound,\n });\n const { isDefaultOpen = false, confirmOnClose = false } = options;\n this.isOpen = isDefaultOpen;\n this.confirmOnCloseEnabled = confirmOnClose;\n }\n\n public useUpdateOptions(options: OverlayControllerOptions = {}): void {\n const {\n onOpen,\n onClose,\n onOpenChange,\n confirmOnClose = this.confirmOnCloseEnabled,\n } = options;\n\n this.useOnHandler(onOpen, (h) =>\n this.addOpenStateHandler(h, this.onOpenHandlers),\n );\n this.useOnHandler(onClose, (h) =>\n this.addOpenStateHandler(h, this.onCloseHandlers),\n );\n this.useOnHandler(onOpenChange, (h) =>\n this.addOpenStateHandler(h, this.onOpenChangeHandlers),\n );\n\n this.confirmOnCloseEnabled = confirmOnClose;\n }\n\n public static useNew(\n options: OverlayControllerOptions = {},\n ): OverlayController {\n const controller = useStatic(() => new OverlayController(options));\n controller.useUpdateOptions(options);\n return controller;\n }\n\n private addOpenStateHandler<T extends AnyOverlayOpenStateHandler>(\n handler: T,\n handlersSet: Set<T>,\n ): DisposerFn {\n handlersSet.add(handler);\n return () => {\n handlersSet.delete(handler);\n };\n }\n\n private useOnHandler<T extends AnyOverlayOpenStateHandler>(\n handler: T | undefined,\n addHandlerFn: (handler: T) => DisposerFn,\n ) {\n useEffect(\n () => (handler ? addHandlerFn(handler) : undefined),\n [handler, this],\n );\n }\n\n private executeHandlers(\n isOpen: boolean,\n handlers: Set<\n OverlayOpenHandler | OverlayCloseHandler | OverlayOpenStateHandler\n >,\n ): boolean {\n const handlerResult = Array.from(handlers).map((handler) =>\n handler(isOpen),\n );\n return handlerResult.some((result) => result === false);\n }\n\n private executeOnClose(): boolean {\n return this.executeHandlers(false, this.onCloseHandlers);\n }\n\n private executeOnOpen(): boolean {\n return this.executeHandlers(true, this.onOpenHandlers);\n }\n\n private executeOnOpenChange(isOpen: boolean): boolean {\n return this.executeHandlers(isOpen, this.onOpenChangeHandlers);\n }\n\n public addOnClose(handler: OverlayCloseHandler) {\n return this.addOpenStateHandler(handler, this.onCloseHandlers);\n }\n\n public addOnOpen(handler: OverlayOpenHandler) {\n return this.addOpenStateHandler(handler, this.onOpenHandlers);\n }\n\n public addOnOpenChange(handler: OverlayOpenStateHandler) {\n return this.addOpenStateHandler(handler, this.onOpenChangeHandlers);\n }\n\n public open(): void {\n this.setOpen(true);\n }\n\n public close(options?: CloseOptions): void {\n this.setOpen(false, options);\n }\n\n public toggle(): void {\n this.setOpen(!this.isOpen);\n }\n\n public setOpen(toOpen: boolean, options: CloseOptions = {}): void {\n if (this.isOpen === toOpen) {\n return;\n }\n\n const { bypassConfirmation = false } = options;\n\n if (\n toOpen === false &&\n this.confirmOnCloseEnabled &&\n !this.closeIsConfirmed &&\n !bypassConfirmation\n ) {\n this.showConfirmationModal = true;\n return;\n }\n\n let aborted = false;\n if (toOpen) {\n aborted = this.executeOnOpen();\n } else {\n aborted = this.executeOnClose();\n }\n if (!aborted) {\n aborted = this.executeOnOpenChange(toOpen);\n }\n\n if (!aborted) {\n this.isOpen = toOpen;\n this.closeIsConfirmed = false;\n }\n }\n\n public useIsOpen() {\n return useSelector(() => this.isOpen);\n }\n\n public useShowConfirmationModal() {\n return useSelector(() => this.showConfirmationModal);\n }\n\n public useConfirmationController() {\n return useCloseOverlayConfirmationController(this);\n }\n\n public confirmClose(): void {\n this.closeIsConfirmed = true;\n this.showConfirmationModal = false;\n }\n\n public cancelConfirmation(): void {\n this.showConfirmationModal = false;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { ComponentProps, FC, FormEventHandler, PropsWithChildren, Ref } from 're
|
|
|
2
2
|
import { FieldValues, SubmitHandler, UseFormReturn } from 'react-hook-form';
|
|
3
3
|
export type FormOnSubmitHandler<F extends FieldValues> = SubmitHandler<F>;
|
|
4
4
|
export type AfterFormSubmitCallback = (...unknownArgs: unknown[]) => unknown;
|
|
5
|
+
export interface FormAutoResetOptions {
|
|
6
|
+
onAfterModalClose?: boolean;
|
|
7
|
+
}
|
|
5
8
|
type FormComponentType = FC<PropsWithChildren<{
|
|
6
9
|
id: string;
|
|
7
10
|
onSubmit?: FormEventHandler | FormOnSubmitHandler<never>;
|
|
@@ -12,6 +15,7 @@ export interface FormProps<F extends FieldValues> extends Omit<ComponentProps<"f
|
|
|
12
15
|
onSubmit: FormOnSubmitHandler<F>;
|
|
13
16
|
formComponent?: FC<Omit<FormComponentType, "ref">>;
|
|
14
17
|
isReadOnly?: boolean;
|
|
18
|
+
autoReset?: FormAutoResetOptions | boolean;
|
|
15
19
|
}
|
|
16
20
|
export declare function Form<F extends FieldValues>(props: FormProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
17
21
|
export default Form;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,EAAE,EAEP,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,GAAG,EAIT,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACd,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,GAAG,CAAC,GAAG,WAAW,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE7E,KAAK,iBAAiB,GAAG,EAAE,CACzB,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B,CAAC,CACH,CAAC;AAEF,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,WAAW,CAC9C,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB;IACnE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,EAAE,EAEP,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,GAAG,EAIT,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACd,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,GAAG,CAAC,GAAG,WAAW,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,KAAK,iBAAiB,GAAG,EAAE,CACzB,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B,CAAC,CACH,CAAC;AAEF,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,WAAW,CAC9C,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB;IACnE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC;CAC5C;AAID,wBAAgB,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,2CAsF9D;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -19,11 +19,12 @@ export interface OverlayControllerOptions {
|
|
|
19
19
|
type ConstructorOptions = Pick<OverlayControllerOptions, "isDefaultOpen" | "confirmOnClose">;
|
|
20
20
|
export declare class OverlayController {
|
|
21
21
|
isOpen: boolean;
|
|
22
|
-
showConfirmationModal: boolean;
|
|
23
|
-
confirmOnCloseEnabled: boolean;
|
|
24
22
|
private onOpenHandlers;
|
|
25
23
|
private onCloseHandlers;
|
|
26
24
|
private onOpenChangeHandlers;
|
|
25
|
+
showConfirmationModal: boolean;
|
|
26
|
+
closeIsConfirmed: boolean;
|
|
27
|
+
confirmOnCloseEnabled: boolean;
|
|
27
28
|
constructor(options?: ConstructorOptions);
|
|
28
29
|
useUpdateOptions(options?: OverlayControllerOptions): void;
|
|
29
30
|
static useNew(options?: OverlayControllerOptions): OverlayController;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayController.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/overlay/OverlayController.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC;AAC/C,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC;AAChD,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;AAMnE,KAAK,UAAU,GAAG,MAAM,IAAI,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AAErE,KAAK,YAAY,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,KAAK,kBAAkB,GAAG,IAAI,CAC5B,wBAAwB,EACxB,eAAe,GAAG,gBAAgB,CACnC,CAAC;AAEF,qBAAa,iBAAiB;IACrB,MAAM,UAAS;
|
|
1
|
+
{"version":3,"file":"OverlayController.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/overlay/OverlayController.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC;AAC/C,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC;AAChD,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;AAMnE,KAAK,UAAU,GAAG,MAAM,IAAI,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AAErE,KAAK,YAAY,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,KAAK,kBAAkB,GAAG,IAAI,CAC5B,wBAAwB,EACxB,eAAe,GAAG,gBAAgB,CACnC,CAAC;AAEF,qBAAa,iBAAiB;IACrB,MAAM,UAAS;IACtB,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,oBAAoB,CAAsC;IAE3D,qBAAqB,UAAS;IAC9B,gBAAgB,UAAS;IACzB,qBAAqB,EAAE,OAAO,CAAC;gBAEnB,OAAO,GAAE,kBAAuB;IAe5C,gBAAgB,CAAC,OAAO,GAAE,wBAA6B,GAAG,IAAI;WAqBvD,MAAM,CAClB,OAAO,GAAE,wBAA6B,GACrC,iBAAiB;IAMpB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,mBAAmB;IAIpB,UAAU,CAAC,OAAO,EAAE,mBAAmB;IAIvC,SAAS,CAAC,OAAO,EAAE,kBAAkB;IAIrC,eAAe,CAAC,OAAO,EAAE,uBAAuB;IAIhD,IAAI,IAAI,IAAI;IAIZ,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAInC,MAAM,IAAI,IAAI;IAId,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,IAAI;IAiC1D,SAAS;IAIT,wBAAwB;IAIxB,yBAAyB;;;;;IAIzB,YAAY,IAAI,IAAI;IAKpB,kBAAkB,IAAI,IAAI;CAGlC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mittwald/flow-react-components",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.694",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A React implementation of Flow, mittwald’s design system",
|
|
6
6
|
"homepage": "https://mittwald.github.io/flow",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@internationalized/string-compiler": "^3.2.6",
|
|
60
60
|
"@mittwald/password-tools-js": "3.0.0-alpha.18",
|
|
61
|
-
"@mittwald/react-tunnel": "0.2.0-alpha.
|
|
61
|
+
"@mittwald/react-tunnel": "0.2.0-alpha.694",
|
|
62
62
|
"@mittwald/react-use-promise": "^4.2.2",
|
|
63
63
|
"@react-aria/form": "^3.1.3",
|
|
64
64
|
"@react-aria/live-announcer": "^3.4.4",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"@faker-js/faker": "^10.2.0",
|
|
105
105
|
"@internationalized/date": "^3.10.1",
|
|
106
106
|
"@mittwald/flow-core": "",
|
|
107
|
-
"@mittwald/flow-design-tokens": "0.2.0-alpha.
|
|
107
|
+
"@mittwald/flow-design-tokens": "0.2.0-alpha.694",
|
|
108
108
|
"@mittwald/react-use-promise": "^4.2.2",
|
|
109
109
|
"@mittwald/remote-dom-react": "1.2.2-mittwald.10",
|
|
110
110
|
"@mittwald/typescript-config": "",
|
|
@@ -172,5 +172,5 @@
|
|
|
172
172
|
"optional": true
|
|
173
173
|
}
|
|
174
174
|
},
|
|
175
|
-
"gitHead": "
|
|
175
|
+
"gitHead": "cc159503ebfa74607030c9bf45209bec1c88a4c3"
|
|
176
176
|
}
|