@inertiajs/react 2.3.10 → 2.3.12

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/dist/index.esm.js CHANGED
@@ -192,12 +192,21 @@ async function createInertiaApp({
192
192
  }
193
193
 
194
194
  // src/Deferred.ts
195
- import { useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
195
+ import { useEffect as useEffect3, useMemo as useMemo2, useState as useState2 } from "react";
196
+
197
+ // src/usePage.ts
198
+ import React2 from "react";
199
+
200
+ // src/react.ts
201
+ import React, { useEffect as useEffect2, useLayoutEffect } from "react";
202
+ function useIsomorphicLayoutEffect(effect, deps) {
203
+ typeof window === "undefined" ? useEffect2(effect, deps) : useLayoutEffect(effect, deps);
204
+ }
205
+ var isReact19 = typeof React.use === "function";
196
206
 
197
207
  // src/usePage.ts
198
- import React from "react";
199
208
  function usePage() {
200
- const page = typeof React.use === "function" ? React.use(PageContext_default) : React.useContext(PageContext_default);
209
+ const page = isReact19 ? React2.use(PageContext_default) : React2.useContext(PageContext_default);
201
210
  if (!page) {
202
211
  throw new Error("usePage must be used within the Inertia component");
203
212
  }
@@ -220,7 +229,7 @@ var Deferred = ({ children, data, fallback }) => {
220
229
  const [loaded, setLoaded] = useState2(false);
221
230
  const pageProps = usePage().props;
222
231
  const keys = useMemo2(() => Array.isArray(data) ? data : [data], [data]);
223
- useEffect2(() => {
232
+ useEffect3(() => {
224
233
  const removeListener = router3.on("start", (e) => {
225
234
  const isPartialVisit = e.detail.visit.only.length > 0 || e.detail.visit.except.length > 0;
226
235
  const isReloadingKey = e.detail.visit.only.find((key) => keys.includes(key));
@@ -232,10 +241,11 @@ var Deferred = ({ children, data, fallback }) => {
232
241
  removeListener();
233
242
  };
234
243
  }, []);
235
- useEffect2(() => {
244
+ useEffect3(() => {
236
245
  setLoaded(keys.every((key) => pageProps[key] !== void 0));
237
246
  }, [pageProps, keys]);
238
- if (loaded) {
247
+ const propsAreDefined = useMemo2(() => keys.every((key) => pageProps[key] !== void 0), [keys, pageProps]);
248
+ if (loaded && propsAreDefined) {
239
249
  return typeof children === "function" ? children() : children;
240
250
  }
241
251
  return typeof fallback === "function" ? fallback() : fallback;
@@ -253,7 +263,7 @@ import {
253
263
  UseFormUtils as UseFormUtils2
254
264
  } from "@inertiajs/core";
255
265
  import { isEqual as isEqual2 } from "lodash-es";
256
- import React2, {
266
+ import React3, {
257
267
  createContext as createContext3,
258
268
  createElement as createElement3,
259
269
  forwardRef,
@@ -278,12 +288,6 @@ import {
278
288
  import { cloneDeep, get, has, isEqual, set } from "lodash-es";
279
289
  import { useCallback, useEffect as useEffect5, useMemo as useMemo3, useRef, useState as useState4 } from "react";
280
290
 
281
- // src/react.ts
282
- import { useEffect as useEffect3, useLayoutEffect } from "react";
283
- function useIsomorphicLayoutEffect(effect, deps) {
284
- typeof window === "undefined" ? useEffect3(effect, deps) : useLayoutEffect(effect, deps);
285
- }
286
-
287
291
  // src/useRemember.ts
288
292
  import { router as router4 } from "@inertiajs/core";
289
293
  import { useEffect as useEffect4, useState as useState3 } from "react";
@@ -397,7 +401,9 @@ function useForm(...args) {
397
401
  if (isMounted.current) {
398
402
  setProcessing(false);
399
403
  setProgress(null);
400
- setError(errors2);
404
+ setErrors(errors2);
405
+ setHasErrors(Object.keys(errors2).length > 0);
406
+ validatorRef.current?.setErrors(errors2);
401
407
  }
402
408
  if (options.onError) {
403
409
  return options.onError(errors2);
@@ -668,7 +674,7 @@ function useForm(...args) {
668
674
 
669
675
  // src/Form.ts
670
676
  var deferStateUpdate = (callback) => {
671
- typeof React2.startTransition === "function" ? React2.startTransition(callback) : setTimeout(callback, 0);
677
+ typeof React3.startTransition === "function" ? React3.startTransition(callback) : setTimeout(callback, 0);
672
678
  };
673
679
  var noop = () => void 0;
674
680
  var FormContext = createContext3(void 0);
@@ -786,6 +792,11 @@ var Form = forwardRef(
786
792
  };
787
793
  const submit = (submitter) => {
788
794
  const [url, data] = getUrlAndData(submitter);
795
+ const formTarget = submitter?.getAttribute("formtarget");
796
+ if (formTarget === "_blank" && resolvedMethod === "get") {
797
+ window.open(url, "_blank");
798
+ return;
799
+ }
789
800
  const submitOptions = {
790
801
  headers,
791
802
  queryStringArrayFormat,
@@ -860,11 +871,10 @@ var Form = forwardRef(
860
871
  event.preventDefault();
861
872
  submit(event.nativeEvent.submitter);
862
873
  },
863
- // Only React 19 supports passing a boolean to the `inert` attribute.
864
- // To support earlier versions as well, we use the string 'true'.
865
- // Unfortunately, React 19 treats an empty string as `false`.
874
+ // React 19 supports passing a boolean to the `inert` attribute, but shows
875
+ // a warning when receiving a string. Earlier versions require the string 'true'.
866
876
  // See: https://github.com/inertiajs/inertia/pull/2536
867
- inert: disableWhileProcessing && form.processing && "true"
877
+ inert: disableWhileProcessing && form.processing && (isReact19 ? true : "true")
868
878
  },
869
879
  typeof children === "function" ? children(exposed) : children
870
880
  );
@@ -879,7 +889,7 @@ var Form_default = Form;
879
889
 
880
890
  // src/Head.ts
881
891
  import { escape } from "lodash-es";
882
- import React3, { useContext as useContext2, useEffect as useEffect7, useMemo as useMemo5 } from "react";
892
+ import React4, { useContext as useContext2, useEffect as useEffect7, useMemo as useMemo5 } from "react";
883
893
  var Head = function({ children, title }) {
884
894
  const headManager = useContext2(HeadContext_default);
885
895
  const provider = useMemo5(() => headManager.createProvider(), [headManager]);
@@ -947,7 +957,7 @@ var Head = function({ children, title }) {
947
957
  return html;
948
958
  }
949
959
  function ensureNodeHasInertiaProp(node) {
950
- return React3.cloneElement(node, {
960
+ return React4.cloneElement(node, {
951
961
  [provider.preferredAttribute()]: node.props["head-key"] !== void 0 ? node.props["head-key"] : ""
952
962
  });
953
963
  }
@@ -955,7 +965,7 @@ var Head = function({ children, title }) {
955
965
  return renderTag(ensureNodeHasInertiaProp(node));
956
966
  }
957
967
  function renderNodes(nodes) {
958
- const elements = React3.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
968
+ const elements = React4.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
959
969
  if (title && !elements.find((tag) => tag.startsWith("<title"))) {
960
970
  elements.push(`<title ${provider.preferredAttribute()}>${title}</title>`);
961
971
  }
@@ -973,7 +983,7 @@ import {
973
983
  getScrollableParent,
974
984
  useInfiniteScroll
975
985
  } from "@inertiajs/core";
976
- import React4, {
986
+ import React5, {
977
987
  createElement as createElement4,
978
988
  forwardRef as forwardRef2,
979
989
  useCallback as useCallback2,
@@ -1212,7 +1222,7 @@ var InfiniteScroll = forwardRef2(
1212
1222
  )
1213
1223
  );
1214
1224
  }
1215
- return createElement4(React4.Fragment, {}, ...reverse ? [...renderElements].reverse() : renderElements);
1225
+ return createElement4(React5.Fragment, {}, ...reverse ? [...renderElements].reverse() : renderElements);
1216
1226
  }
1217
1227
  );
1218
1228
  InfiniteScroll.displayName = "InertiaInfiniteScroll";