@faasjs/react 3.7.0-beta.8 → 3.7.0

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/README.md CHANGED
@@ -56,6 +56,7 @@ npm install @faasjs/react react
56
56
  - [useEqualMemoize](functions/useEqualMemoize.md)
57
57
  - [useFaas](functions/useFaas.md)
58
58
  - [useFormContext](functions/useFormContext.md)
59
+ - [usePrevious](functions/usePrevious.md)
59
60
  - [useSplittingState](functions/useSplittingState.md)
60
61
  - [validValues](functions/validValues.md)
61
62
  - [withFaasData](functions/withFaasData.md)
@@ -88,6 +89,7 @@ npm install @faasjs/react react
88
89
  - [FormItemName](type-aliases/FormItemName.md)
89
90
  - [FormItemProps](type-aliases/FormItemProps.md)
90
91
  - [FormLabelElementProps](type-aliases/FormLabelElementProps.md)
92
+ - [FormLang](type-aliases/FormLang.md)
91
93
  - [FormProps](type-aliases/FormProps.md)
92
94
  - [FormRule](type-aliases/FormRule.md)
93
95
  - [FormRules](type-aliases/FormRules.md)
@@ -101,4 +103,5 @@ npm install @faasjs/react react
101
103
  ## Variables
102
104
 
103
105
  - [FormDefaultElements](variables/FormDefaultElements.md)
106
+ - [FormDefaultLang](variables/FormDefaultLang.md)
104
107
  - [FormDefaultRules](variables/FormDefaultRules.md)
package/dist/index.d.mts CHANGED
@@ -57,6 +57,14 @@ declare function useEqualMemo<T>(callback: () => T, dependencies: any[]): T;
57
57
  * @returns The result of the `useCallback` hook with memoized dependencies.
58
58
  */
59
59
  declare function useEqualCallback<T extends (...args: any[]) => any>(callback: T, dependencies: any[]): T;
60
+ /**
61
+ * Hook to store the previous value of a state or prop.
62
+ *
63
+ * @template T - The type of the value.
64
+ * @param {T} value - The current value to be stored.
65
+ * @returns {T | undefined} - The previous value, or undefined if there is no previous value.
66
+ */
67
+ declare function usePrevious<T>(value: T): T | undefined;
60
68
 
61
69
  /**
62
70
  * Creates a splitting context with the given default value.
@@ -451,7 +459,7 @@ type FormInputProps<FormElements extends FormElementTypes = FormElementTypes> =
451
459
  type FormItemName = string;
452
460
  type FormItemProps<FormElements extends FormElementTypes = FormElementTypes, FormRulesOptions extends Record<string, any> = FormDefaultRulesOptions> = {
453
461
  name: FormItemName;
454
- label?: Omit<FormLabelElementProps, 'name'> & {
462
+ label?: Omit<FormLabelElementProps, 'name' | 'children'> & {
455
463
  Label?: ComponentType<FormLabelElementProps>;
456
464
  };
457
465
  input?: FormInputProps<FormElements>;
@@ -515,4 +523,4 @@ declare const FormContextProvider: <NewT extends FormContextProps<Record<string,
515
523
  }) => react.ReactNode;
516
524
  declare const useFormContext: <NewT extends FormContextProps<Record<string, any>, FormRules> = FormContextProps<Record<string, any>, FormRules>>() => Readonly<NewT>;
517
525
 
518
- export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, FormContainer as Form, type FormButtonElementProps, type FormContextProps, FormContextProvider, FormDefaultElements, FormDefaultRules, type FormDefaultRulesOptions, type FormElementTypes, type FormInputElementProps, FormItem, type FormItemName, type FormItemProps, type FormLabelElementProps, type FormProps, type FormRule, type FormRules, type InferFormRulesOptions, type OnError, OptionalWrapper, type OptionalWrapperProps, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, type useFaasOptions, useFormContext, useSplittingState, validValues, withFaasData };
526
+ export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, FormContainer as Form, type FormButtonElementProps, type FormContextProps, FormContextProvider, FormDefaultElements, FormDefaultLang, FormDefaultRules, type FormDefaultRulesOptions, type FormElementTypes, type FormInputElementProps, FormItem, type FormItemName, type FormItemProps, type FormLabelElementProps, type FormLang, type FormProps, type FormRule, type FormRules, type InferFormRulesOptions, type OnError, OptionalWrapper, type OptionalWrapperProps, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, type useFaasOptions, useFormContext, usePrevious, useSplittingState, validValues, withFaasData };
package/dist/index.d.ts CHANGED
@@ -57,6 +57,14 @@ declare function useEqualMemo<T>(callback: () => T, dependencies: any[]): T;
57
57
  * @returns The result of the `useCallback` hook with memoized dependencies.
58
58
  */
59
59
  declare function useEqualCallback<T extends (...args: any[]) => any>(callback: T, dependencies: any[]): T;
60
+ /**
61
+ * Hook to store the previous value of a state or prop.
62
+ *
63
+ * @template T - The type of the value.
64
+ * @param {T} value - The current value to be stored.
65
+ * @returns {T | undefined} - The previous value, or undefined if there is no previous value.
66
+ */
67
+ declare function usePrevious<T>(value: T): T | undefined;
60
68
 
61
69
  /**
62
70
  * Creates a splitting context with the given default value.
@@ -451,7 +459,7 @@ type FormInputProps<FormElements extends FormElementTypes = FormElementTypes> =
451
459
  type FormItemName = string;
452
460
  type FormItemProps<FormElements extends FormElementTypes = FormElementTypes, FormRulesOptions extends Record<string, any> = FormDefaultRulesOptions> = {
453
461
  name: FormItemName;
454
- label?: Omit<FormLabelElementProps, 'name'> & {
462
+ label?: Omit<FormLabelElementProps, 'name' | 'children'> & {
455
463
  Label?: ComponentType<FormLabelElementProps>;
456
464
  };
457
465
  input?: FormInputProps<FormElements>;
@@ -515,4 +523,4 @@ declare const FormContextProvider: <NewT extends FormContextProps<Record<string,
515
523
  }) => react.ReactNode;
516
524
  declare const useFormContext: <NewT extends FormContextProps<Record<string, any>, FormRules> = FormContextProps<Record<string, any>, FormRules>>() => Readonly<NewT>;
517
525
 
518
- export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, FormContainer as Form, type FormButtonElementProps, type FormContextProps, FormContextProvider, FormDefaultElements, FormDefaultRules, type FormDefaultRulesOptions, type FormElementTypes, type FormInputElementProps, FormItem, type FormItemName, type FormItemProps, type FormLabelElementProps, type FormProps, type FormRule, type FormRules, type InferFormRulesOptions, type OnError, OptionalWrapper, type OptionalWrapperProps, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, type useFaasOptions, useFormContext, useSplittingState, validValues, withFaasData };
526
+ export { ErrorBoundary, type ErrorBoundaryProps, type ErrorChildrenProps, type FaasDataInjection, FaasDataWrapper, type FaasDataWrapperProps, FaasReactClient, type FaasReactClientInstance, type FaasReactClientOptions, FormContainer as Form, type FormButtonElementProps, type FormContextProps, FormContextProvider, FormDefaultElements, FormDefaultLang, FormDefaultRules, type FormDefaultRulesOptions, type FormElementTypes, type FormInputElementProps, FormItem, type FormItemName, type FormItemProps, type FormLabelElementProps, type FormLang, type FormProps, type FormRule, type FormRules, type InferFormRulesOptions, type OnError, OptionalWrapper, type OptionalWrapperProps, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, type useFaasOptions, useFormContext, usePrevious, useSplittingState, validValues, withFaasData };
package/dist/index.js CHANGED
@@ -48,10 +48,8 @@ function equal(a, b) {
48
48
  case Promise:
49
49
  return a === b;
50
50
  case Object: {
51
- const keys = Object.keys(a);
52
- for (const key of keys) {
51
+ for (const key of /* @__PURE__ */ new Set([...Object.keys(a), ...Object.keys(b)]))
53
52
  if (!equal(a[key], b[key])) return false;
54
- }
55
53
  return true;
56
54
  }
57
55
  default:
@@ -79,6 +77,13 @@ function useEqualCallback(callback, dependencies) {
79
77
  useEqualMemoize(dependencies)
80
78
  );
81
79
  }
80
+ function usePrevious(value) {
81
+ const ref = react.useRef();
82
+ react.useEffect(() => {
83
+ ref.current = value;
84
+ });
85
+ return ref.current;
86
+ }
82
87
  function useSplittingState(initialStates) {
83
88
  const states = {};
84
89
  for (const key of Object.keys(initialStates)) {
@@ -360,10 +365,10 @@ var FormContext = createSplittingContext([
360
365
  var FormContextProvider = FormContext.Provider;
361
366
  var useFormContext = FormContext.use;
362
367
  function FormItem(props) {
363
- const { Elements, values, setValues } = useFormContext();
368
+ const { Elements, values, setValues, errors } = useFormContext();
364
369
  const Label = props.label?.Label ?? Elements.Label;
365
370
  const Input = props.input?.Input ?? Elements.Input;
366
- return /* @__PURE__ */ jsxRuntime.jsx(Label, { name: props.name, ...props.label, children: /* @__PURE__ */ jsxRuntime.jsx(
371
+ return /* @__PURE__ */ jsxRuntime.jsx(Label, { name: props.name, ...props.label, error: errors[props.name], children: /* @__PURE__ */ jsxRuntime.jsx(
367
372
  Input,
368
373
  {
369
374
  name: props.name,
@@ -547,6 +552,7 @@ exports.FaasReactClient = FaasReactClient;
547
552
  exports.Form = FormContainer;
548
553
  exports.FormContextProvider = FormContextProvider;
549
554
  exports.FormDefaultElements = FormDefaultElements;
555
+ exports.FormDefaultLang = FormDefaultLang;
550
556
  exports.FormDefaultRules = FormDefaultRules;
551
557
  exports.FormItem = FormItem;
552
558
  exports.OptionalWrapper = OptionalWrapper;
@@ -561,6 +567,7 @@ exports.useEqualMemo = useEqualMemo;
561
567
  exports.useEqualMemoize = useEqualMemoize;
562
568
  exports.useFaas = useFaas;
563
569
  exports.useFormContext = useFormContext;
570
+ exports.usePrevious = usePrevious;
564
571
  exports.useSplittingState = useSplittingState;
565
572
  exports.validValues = validValues;
566
573
  exports.withFaasData = withFaasData;
package/dist/index.mjs CHANGED
@@ -46,10 +46,8 @@ function equal(a, b) {
46
46
  case Promise:
47
47
  return a === b;
48
48
  case Object: {
49
- const keys = Object.keys(a);
50
- for (const key of keys) {
49
+ for (const key of /* @__PURE__ */ new Set([...Object.keys(a), ...Object.keys(b)]))
51
50
  if (!equal(a[key], b[key])) return false;
52
- }
53
51
  return true;
54
52
  }
55
53
  default:
@@ -77,6 +75,13 @@ function useEqualCallback(callback, dependencies) {
77
75
  useEqualMemoize(dependencies)
78
76
  );
79
77
  }
78
+ function usePrevious(value) {
79
+ const ref = useRef();
80
+ useEffect(() => {
81
+ ref.current = value;
82
+ });
83
+ return ref.current;
84
+ }
80
85
  function useSplittingState(initialStates) {
81
86
  const states = {};
82
87
  for (const key of Object.keys(initialStates)) {
@@ -358,10 +363,10 @@ var FormContext = createSplittingContext([
358
363
  var FormContextProvider = FormContext.Provider;
359
364
  var useFormContext = FormContext.use;
360
365
  function FormItem(props) {
361
- const { Elements, values, setValues } = useFormContext();
366
+ const { Elements, values, setValues, errors } = useFormContext();
362
367
  const Label = props.label?.Label ?? Elements.Label;
363
368
  const Input = props.input?.Input ?? Elements.Input;
364
- return /* @__PURE__ */ jsx(Label, { name: props.name, ...props.label, children: /* @__PURE__ */ jsx(
369
+ return /* @__PURE__ */ jsx(Label, { name: props.name, ...props.label, error: errors[props.name], children: /* @__PURE__ */ jsx(
365
370
  Input,
366
371
  {
367
372
  name: props.name,
@@ -539,4 +544,4 @@ function FormContainer({
539
544
  FormContainer.displayName = "FormContainer";
540
545
  FormContainer.whyDidYouRender = true;
541
546
 
542
- export { ErrorBoundary, FaasDataWrapper, FaasReactClient, FormContainer as Form, FormContextProvider, FormDefaultElements, FormDefaultRules, FormItem, OptionalWrapper, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, useFormContext, useSplittingState, validValues, withFaasData };
547
+ export { ErrorBoundary, FaasDataWrapper, FaasReactClient, FormContainer as Form, FormContextProvider, FormDefaultElements, FormDefaultLang, FormDefaultRules, FormItem, OptionalWrapper, createSplittingContext, equal, faas, getClient, useConstant, useEqualCallback, useEqualEffect, useEqualMemo, useEqualMemoize, useFaas, useFormContext, usePrevious, useSplittingState, validValues, withFaasData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faasjs/react",
3
- "version": "3.7.0-beta.8",
3
+ "version": "3.7.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -34,10 +34,10 @@
34
34
  "dist"
35
35
  ],
36
36
  "peerDependencies": {
37
- "@faasjs/browser": "3.7.0-beta.8"
37
+ "@faasjs/browser": "3.7.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@faasjs/browser": "3.7.0-beta.8",
40
+ "@faasjs/browser": "3.7.0",
41
41
  "@types/react": "*",
42
42
  "react": "*"
43
43
  },