@inertiajs/core 2.2.3 → 2.2.5

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.js CHANGED
@@ -307,25 +307,28 @@ var Scroll = class {
307
307
  }
308
308
  }
309
309
  static restore(scrollRegions) {
310
- this.restoreDocument();
311
- this.regions().forEach((region, index) => {
312
- const scrollPosition = scrollRegions[index];
313
- if (!scrollPosition) {
314
- return;
315
- }
316
- if (typeof region.scrollTo === "function") {
317
- region.scrollTo(scrollPosition.left, scrollPosition.top);
318
- } else {
319
- region.scrollTop = scrollPosition.top;
320
- region.scrollLeft = scrollPosition.left;
321
- }
310
+ if (typeof window === "undefined") {
311
+ return;
312
+ }
313
+ window.requestAnimationFrame(() => {
314
+ this.restoreDocument();
315
+ this.regions().forEach((region, index) => {
316
+ const scrollPosition = scrollRegions[index];
317
+ if (!scrollPosition) {
318
+ return;
319
+ }
320
+ if (typeof region.scrollTo === "function") {
321
+ region.scrollTo(scrollPosition.left, scrollPosition.top);
322
+ } else {
323
+ region.scrollTop = scrollPosition.top;
324
+ region.scrollLeft = scrollPosition.left;
325
+ }
326
+ });
322
327
  });
323
328
  }
324
329
  static restoreDocument() {
325
330
  const scrollPosition = history.getDocumentScrollPosition();
326
- if (typeof window !== "undefined") {
327
- window.scrollTo(scrollPosition.left, scrollPosition.top);
328
- }
331
+ window.scrollTo(scrollPosition.left, scrollPosition.top);
329
332
  }
330
333
  static onScroll(event) {
331
334
  const target = event.target;
@@ -836,9 +839,7 @@ var EventHandler = class {
836
839
  }
837
840
  router.cancelAll();
838
841
  page.setQuietly(data, { preserveState: false }).then(() => {
839
- window.requestAnimationFrame(() => {
840
- Scroll.restore(history.getScrollRegions());
841
- });
842
+ Scroll.restore(history.getScrollRegions());
842
843
  fireNavigateEvent(page.get());
843
844
  });
844
845
  }).catch(() => {
@@ -1665,7 +1666,7 @@ var Response = class _Response {
1665
1666
  pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop);
1666
1667
  });
1667
1668
  pageResponse.props = { ...page.get().props, ...pageResponse.props };
1668
- if (pageResponse.scrollProps) {
1669
+ if (page.get().scrollProps) {
1669
1670
  pageResponse.scrollProps = {
1670
1671
  ...page.get().scrollProps || {},
1671
1672
  ...pageResponse.scrollProps || {}
@@ -2237,11 +2238,12 @@ var getScrollableParent = (element) => {
2237
2238
  };
2238
2239
  var getElementsInViewportFromCollection = (referenceElement, elements) => {
2239
2240
  const referenceIndex = elements.indexOf(referenceElement);
2240
- const visibleElements = [];
2241
+ const upwardElements = [];
2242
+ const downwardElements = [];
2241
2243
  for (let i = referenceIndex; i >= 0; i--) {
2242
2244
  const element = elements[i];
2243
2245
  if (elementInViewport(element)) {
2244
- visibleElements.push(element);
2246
+ upwardElements.push(element);
2245
2247
  } else {
2246
2248
  break;
2247
2249
  }
@@ -2249,12 +2251,12 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2249
2251
  for (let i = referenceIndex + 1; i < elements.length; i++) {
2250
2252
  const element = elements[i];
2251
2253
  if (elementInViewport(element)) {
2252
- visibleElements.push(element);
2254
+ downwardElements.push(element);
2253
2255
  } else {
2254
2256
  break;
2255
2257
  }
2256
2258
  }
2257
- return visibleElements;
2259
+ return [...upwardElements.reverse(), ...downwardElements];
2258
2260
  };
2259
2261
 
2260
2262
  // src/formObject.ts
@@ -2430,6 +2432,7 @@ var useInfiniteScrollData = (options) => {
2430
2432
  };
2431
2433
  const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2432
2434
  const state = {
2435
+ component: page.get().component,
2433
2436
  loading: false,
2434
2437
  previousPage,
2435
2438
  nextPage,
@@ -2444,7 +2447,10 @@ var useInfiniteScrollData = (options) => {
2444
2447
  state.lastLoadedPage = rememberedState.lastLoadedPage;
2445
2448
  state.requestCount = rememberedState.requestCount || 0;
2446
2449
  }
2447
- const removeEventListener = router.on("success", () => {
2450
+ const removeEventListener = router.on("success", (event) => {
2451
+ if (state.component !== event.detail.page.component) {
2452
+ return;
2453
+ }
2448
2454
  const scrollProp = getScrollPropFromCurrentPage();
2449
2455
  if (scrollProp.reset) {
2450
2456
  state.previousPage = scrollProp.previousPage;
@@ -2579,8 +2585,7 @@ var useInfiniteScrollElementManager = (options) => {
2579
2585
  });
2580
2586
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2581
2587
  itemsObserver = intersectionObservers.new(
2582
- (entry) => options.onItemIntersected(entry.target),
2583
- { threshold: 0 }
2588
+ (entry) => options.onItemIntersected(entry.target)
2584
2589
  );
2585
2590
  const observerOptions = {
2586
2591
  root: options.getScrollableParent(),
@@ -2617,6 +2622,7 @@ var useInfiniteScrollElementManager = (options) => {
2617
2622
  }
2618
2623
  };
2619
2624
  const flushAll = () => {
2625
+ disableTriggers();
2620
2626
  intersectionObservers.flushAll();
2621
2627
  itemsMutationObserver?.disconnect();
2622
2628
  };
@@ -2718,13 +2724,49 @@ var useInfiniteScrollElementManager = (options) => {
2718
2724
  };
2719
2725
 
2720
2726
  // src/infiniteScroll/queryString.ts
2727
+ var queue3 = new Queue();
2728
+ var initialUrl;
2729
+ var payloadUrl;
2721
2730
  var useInfiniteScrollQueryString = (options) => {
2731
+ let enabled = true;
2732
+ const queuePageUpdate = (page2) => {
2733
+ queue3.add(() => {
2734
+ return new Promise((resolve) => {
2735
+ if (!enabled) {
2736
+ initialUrl = payloadUrl = null;
2737
+ return resolve();
2738
+ }
2739
+ if (!initialUrl || !payloadUrl) {
2740
+ initialUrl = new URL(window.location.href);
2741
+ payloadUrl = new URL(window.location.href);
2742
+ }
2743
+ const pageName = options.getPageName();
2744
+ const searchParams = payloadUrl.searchParams;
2745
+ if (page2 === "1") {
2746
+ searchParams.delete(pageName);
2747
+ } else {
2748
+ searchParams.set(pageName, page2);
2749
+ }
2750
+ setTimeout(() => resolve());
2751
+ });
2752
+ }).finally(() => {
2753
+ if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href) {
2754
+ router.replace({
2755
+ url: payloadUrl.toString(),
2756
+ preserveScroll: true,
2757
+ preserveState: true
2758
+ });
2759
+ }
2760
+ initialUrl = payloadUrl = null;
2761
+ });
2762
+ };
2722
2763
  const onItemIntersected = debounce((itemElement) => {
2723
- if (options.shouldPreserveUrl() || !itemElement) {
2764
+ const itemsElement = options.getItemsElement();
2765
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2724
2766
  return;
2725
2767
  }
2726
2768
  const pageMap = /* @__PURE__ */ new Map();
2727
- const elements = [...options.getItemsElement().children];
2769
+ const elements = [...itemsElement.children];
2728
2770
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2729
2771
  const page2 = getPageFromElement(element) ?? "1";
2730
2772
  if (pageMap.has(page2)) {
@@ -2735,23 +2777,13 @@ var useInfiniteScrollQueryString = (options) => {
2735
2777
  });
2736
2778
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2737
2779
  const mostVisiblePage = sortedPages[0]?.[0];
2738
- if (mostVisiblePage === void 0) {
2739
- return;
2780
+ if (mostVisiblePage !== void 0) {
2781
+ queuePageUpdate(mostVisiblePage);
2740
2782
  }
2741
- const url = new URL(window.location.href);
2742
- if (mostVisiblePage === "1") {
2743
- url.searchParams.delete(options.getPageName());
2744
- } else {
2745
- url.searchParams.set(options.getPageName(), mostVisiblePage.toString());
2746
- }
2747
- router.replace({
2748
- url: url.toString(),
2749
- preserveScroll: true,
2750
- preserveState: true
2751
- });
2752
2783
  }, 250);
2753
2784
  return {
2754
- onItemIntersected
2785
+ onItemIntersected,
2786
+ cancel: () => enabled = false
2755
2787
  };
2756
2788
  };
2757
2789
 
@@ -2881,7 +2913,12 @@ function useInfiniteScroll(options) {
2881
2913
  };
2882
2914
  return {
2883
2915
  dataManager,
2884
- elementManager
2916
+ elementManager,
2917
+ flush: () => {
2918
+ dataManager.removeEventListener();
2919
+ elementManager.flushAll();
2920
+ queryStringManager.cancel();
2921
+ }
2885
2922
  };
2886
2923
  }
2887
2924
 
@@ -2939,7 +2976,7 @@ var set4 = (n) => {
2939
2976
  const speed = settings.speed;
2940
2977
  const ease = settings.easing;
2941
2978
  progress3.offsetWidth;
2942
- queue3((next) => {
2979
+ queue4((next) => {
2943
2980
  const barStyles = (() => {
2944
2981
  if (settings.positionUsing === "translate3d") {
2945
2982
  return {
@@ -3071,7 +3108,7 @@ function clamp(n, min, max) {
3071
3108
  return n;
3072
3109
  }
3073
3110
  var toBarPercentage = (n) => (-1 + n) * 100;
3074
- var queue3 = /* @__PURE__ */ (() => {
3111
+ var queue4 = /* @__PURE__ */ (() => {
3075
3112
  const pending = [];
3076
3113
  const next = () => {
3077
3114
  const fn = pending.shift();