@inertiajs/core 2.2.5 → 2.2.7

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
@@ -352,7 +352,7 @@ var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFo
352
352
  };
353
353
  function mergeDataIntoQueryString(method, href, data, qsArrayFormat = "brackets") {
354
354
  const hasDataForQueryString = method === "get" && !isFormData(data) && Object.keys(data).length > 0;
355
- const hasHost = /^[a-z][a-z0-9+.-]*:\/\//i.test(href.toString());
355
+ const hasHost = urlHasProtocol(href.toString());
356
356
  const hasAbsolutePath = hasHost || href.toString().startsWith("/") || href.toString() === "";
357
357
  const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith("#") && !href.toString().startsWith("?");
358
358
  const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString());
@@ -396,6 +396,13 @@ var isSameUrlWithoutHash = (url1, url2) => {
396
396
  function isUrlMethodPair(href) {
397
397
  return href !== null && typeof href === "object" && href !== void 0 && "url" in href && "method" in href;
398
398
  }
399
+ function urlHasProtocol(url) {
400
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
401
+ }
402
+ function urlToString(url, absolute) {
403
+ const urlObj = typeof url === "string" ? hrefToUrl(url) : url;
404
+ return absolute ? `${urlObj.protocol}//${urlObj.host}${urlObj.pathname}${urlObj.search}${urlObj.hash}` : `${urlObj.pathname}${urlObj.search}${urlObj.hash}`;
405
+ }
399
406
 
400
407
  // src/page.ts
401
408
  var CurrentPage = class {
@@ -582,15 +589,13 @@ var History = class {
582
589
  this.current = page2;
583
590
  queue.add(() => {
584
591
  return this.getPageData(page2).then((data) => {
585
- const doPush = () => {
586
- this.doPushState({ page: data }, page2.url);
587
- cb && cb();
588
- };
592
+ const doPush = () => this.doPushState({ page: data }, page2.url).then(() => cb?.());
589
593
  if (isChromeIOS) {
590
- setTimeout(doPush);
591
- } else {
592
- doPush();
594
+ return new Promise((resolve) => {
595
+ setTimeout(() => doPush().then(resolve));
596
+ });
593
597
  }
598
+ return doPush();
594
599
  });
595
600
  });
596
601
  }
@@ -628,7 +633,7 @@ var History = class {
628
633
  if (!window.history.state?.page) {
629
634
  return;
630
635
  }
631
- this.doReplaceState({
636
+ return this.doReplaceState({
632
637
  page: window.history.state.page,
633
638
  scrollRegions
634
639
  });
@@ -641,7 +646,7 @@ var History = class {
641
646
  if (!window.history.state?.page) {
642
647
  return;
643
648
  }
644
- this.doReplaceState({
649
+ return this.doReplaceState({
645
650
  page: window.history.state.page,
646
651
  documentScrollPosition: scrollRegion
647
652
  });
@@ -666,31 +671,31 @@ var History = class {
666
671
  this.current = page2;
667
672
  queue.add(() => {
668
673
  return this.getPageData(page2).then((data) => {
669
- const doReplace = () => {
670
- this.doReplaceState({ page: data }, page2.url);
671
- cb && cb();
672
- };
674
+ const doReplace = () => this.doReplaceState({ page: data }, page2.url).then(() => cb?.());
673
675
  if (isChromeIOS) {
674
- setTimeout(doReplace);
675
- } else {
676
- doReplace();
676
+ return new Promise((resolve) => {
677
+ setTimeout(() => doReplace().then(resolve));
678
+ });
677
679
  }
680
+ return doReplace();
678
681
  });
679
682
  });
680
683
  }
681
684
  doReplaceState(data, url) {
682
- window.history.replaceState(
683
- {
684
- ...data,
685
- scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,
686
- documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition
687
- },
688
- "",
689
- url
685
+ return Promise.resolve().then(
686
+ () => window.history.replaceState(
687
+ {
688
+ ...data,
689
+ scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,
690
+ documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition
691
+ },
692
+ "",
693
+ url
694
+ )
690
695
  );
691
696
  }
692
697
  doPushState(data, url) {
693
- window.history.pushState(data, "", url);
698
+ return Promise.resolve().then(() => window.history.pushState(data, "", url));
694
699
  }
695
700
  getState(key, defaultValue) {
696
701
  return this.current?.[key] ?? defaultValue;
@@ -2378,33 +2383,37 @@ var useInfiniteScrollData = (options) => {
2378
2383
  }
2379
2384
  throw new Error(`The page object does not contain a scroll prop named "${options.getPropName()}".`);
2380
2385
  };
2381
- const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2382
2386
  const state = {
2383
- component: page.get().component,
2387
+ component: null,
2384
2388
  loading: false,
2385
- previousPage,
2386
- nextPage,
2387
- lastLoadedPage,
2389
+ previousPage: null,
2390
+ nextPage: null,
2391
+ lastLoadedPage: null,
2388
2392
  requestCount: 0
2389
2393
  };
2394
+ const resetState = () => {
2395
+ const scrollProp = getScrollPropFromCurrentPage();
2396
+ state.component = page.get().component;
2397
+ state.loading = false;
2398
+ state.previousPage = scrollProp.previousPage;
2399
+ state.nextPage = scrollProp.nextPage;
2400
+ state.lastLoadedPage = scrollProp.currentPage;
2401
+ state.requestCount = 0;
2402
+ };
2390
2403
  const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2391
- const rememberedState = router.restore(getRememberKey());
2392
- if (rememberedState && typeof rememberedState === "object") {
2393
- state.previousPage = rememberedState.previousPage;
2394
- state.nextPage = rememberedState.nextPage;
2395
- state.lastLoadedPage = rememberedState.lastLoadedPage;
2396
- state.requestCount = rememberedState.requestCount || 0;
2404
+ if (typeof window !== "undefined") {
2405
+ resetState();
2406
+ const rememberedState = router.restore(getRememberKey());
2407
+ if (rememberedState && typeof rememberedState === "object") {
2408
+ state.previousPage = rememberedState.previousPage;
2409
+ state.nextPage = rememberedState.nextPage;
2410
+ state.lastLoadedPage = rememberedState.lastLoadedPage;
2411
+ state.requestCount = rememberedState.requestCount || 0;
2412
+ }
2397
2413
  }
2398
2414
  const removeEventListener = router.on("success", (event) => {
2399
- if (state.component !== event.detail.page.component) {
2400
- return;
2401
- }
2402
- const scrollProp = getScrollPropFromCurrentPage();
2403
- if (scrollProp.reset) {
2404
- state.previousPage = scrollProp.previousPage;
2405
- state.nextPage = scrollProp.nextPage;
2406
- state.lastLoadedPage = scrollProp.currentPage;
2407
- state.requestCount = 0;
2415
+ if (state.component === event.detail.page.component && getScrollPropFromCurrentPage().reset) {
2416
+ resetState();
2408
2417
  }
2409
2418
  });
2410
2419
  const getScrollPropKeyForSide = (side) => {
@@ -2675,6 +2684,7 @@ var useInfiniteScrollElementManager = (options) => {
2675
2684
  var queue3 = new Queue();
2676
2685
  var initialUrl;
2677
2686
  var payloadUrl;
2687
+ var initialUrlWasAbsolute = null;
2678
2688
  var useInfiniteScrollQueryString = (options) => {
2679
2689
  let enabled = true;
2680
2690
  const queuePageUpdate = (page2) => {
@@ -2685,8 +2695,10 @@ var useInfiniteScrollQueryString = (options) => {
2685
2695
  return resolve();
2686
2696
  }
2687
2697
  if (!initialUrl || !payloadUrl) {
2688
- initialUrl = new URL(window.location.href);
2689
- payloadUrl = new URL(window.location.href);
2698
+ const currentPageUrl = page.get().url;
2699
+ initialUrl = hrefToUrl(currentPageUrl);
2700
+ payloadUrl = hrefToUrl(currentPageUrl);
2701
+ initialUrlWasAbsolute = urlHasProtocol(currentPageUrl);
2690
2702
  }
2691
2703
  const pageName = options.getPageName();
2692
2704
  const searchParams = payloadUrl.searchParams;
@@ -2698,14 +2710,14 @@ var useInfiniteScrollQueryString = (options) => {
2698
2710
  setTimeout(() => resolve());
2699
2711
  });
2700
2712
  }).finally(() => {
2701
- if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href) {
2713
+ if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href && initialUrlWasAbsolute !== null) {
2702
2714
  router.replace({
2703
- url: payloadUrl.toString(),
2715
+ url: urlToString(payloadUrl, initialUrlWasAbsolute),
2704
2716
  preserveScroll: true,
2705
2717
  preserveState: true
2706
2718
  });
2707
2719
  }
2708
- initialUrl = payloadUrl = null;
2720
+ initialUrl = payloadUrl = initialUrlWasAbsolute = null;
2709
2721
  });
2710
2722
  };
2711
2723
  const onItemIntersected = debounce((itemElement) => {
@@ -3394,6 +3406,8 @@ export {
3394
3406
  setupProgress,
3395
3407
  shouldIntercept,
3396
3408
  shouldNavigate,
3409
+ urlHasProtocol,
3410
+ urlToString,
3397
3411
  urlWithoutHash,
3398
3412
  useInfiniteScroll
3399
3413
  };