@inertiajs/core 2.2.4 → 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.esm.js CHANGED
@@ -2186,11 +2186,12 @@ var getScrollableParent = (element) => {
2186
2186
  };
2187
2187
  var getElementsInViewportFromCollection = (referenceElement, elements) => {
2188
2188
  const referenceIndex = elements.indexOf(referenceElement);
2189
- const visibleElements = [];
2189
+ const upwardElements = [];
2190
+ const downwardElements = [];
2190
2191
  for (let i = referenceIndex; i >= 0; i--) {
2191
2192
  const element = elements[i];
2192
2193
  if (elementInViewport(element)) {
2193
- visibleElements.push(element);
2194
+ upwardElements.push(element);
2194
2195
  } else {
2195
2196
  break;
2196
2197
  }
@@ -2198,12 +2199,12 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2198
2199
  for (let i = referenceIndex + 1; i < elements.length; i++) {
2199
2200
  const element = elements[i];
2200
2201
  if (elementInViewport(element)) {
2201
- visibleElements.push(element);
2202
+ downwardElements.push(element);
2202
2203
  } else {
2203
2204
  break;
2204
2205
  }
2205
2206
  }
2206
- return visibleElements;
2207
+ return [...upwardElements.reverse(), ...downwardElements];
2207
2208
  };
2208
2209
 
2209
2210
  // src/formObject.ts
@@ -2379,6 +2380,7 @@ var useInfiniteScrollData = (options) => {
2379
2380
  };
2380
2381
  const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2381
2382
  const state = {
2383
+ component: page.get().component,
2382
2384
  loading: false,
2383
2385
  previousPage,
2384
2386
  nextPage,
@@ -2393,7 +2395,10 @@ var useInfiniteScrollData = (options) => {
2393
2395
  state.lastLoadedPage = rememberedState.lastLoadedPage;
2394
2396
  state.requestCount = rememberedState.requestCount || 0;
2395
2397
  }
2396
- const removeEventListener = router.on("success", () => {
2398
+ const removeEventListener = router.on("success", (event) => {
2399
+ if (state.component !== event.detail.page.component) {
2400
+ return;
2401
+ }
2397
2402
  const scrollProp = getScrollPropFromCurrentPage();
2398
2403
  if (scrollProp.reset) {
2399
2404
  state.previousPage = scrollProp.previousPage;
@@ -2528,8 +2533,7 @@ var useInfiniteScrollElementManager = (options) => {
2528
2533
  });
2529
2534
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2530
2535
  itemsObserver = intersectionObservers.new(
2531
- (entry) => options.onItemIntersected(entry.target),
2532
- { threshold: 0 }
2536
+ (entry) => options.onItemIntersected(entry.target)
2533
2537
  );
2534
2538
  const observerOptions = {
2535
2539
  root: options.getScrollableParent(),
@@ -2566,6 +2570,7 @@ var useInfiniteScrollElementManager = (options) => {
2566
2570
  }
2567
2571
  };
2568
2572
  const flushAll = () => {
2573
+ disableTriggers();
2569
2574
  intersectionObservers.flushAll();
2570
2575
  itemsMutationObserver?.disconnect();
2571
2576
  };
@@ -2667,13 +2672,49 @@ var useInfiniteScrollElementManager = (options) => {
2667
2672
  };
2668
2673
 
2669
2674
  // src/infiniteScroll/queryString.ts
2675
+ var queue3 = new Queue();
2676
+ var initialUrl;
2677
+ var payloadUrl;
2670
2678
  var useInfiniteScrollQueryString = (options) => {
2679
+ let enabled = true;
2680
+ const queuePageUpdate = (page2) => {
2681
+ queue3.add(() => {
2682
+ return new Promise((resolve) => {
2683
+ if (!enabled) {
2684
+ initialUrl = payloadUrl = null;
2685
+ return resolve();
2686
+ }
2687
+ if (!initialUrl || !payloadUrl) {
2688
+ initialUrl = new URL(window.location.href);
2689
+ payloadUrl = new URL(window.location.href);
2690
+ }
2691
+ const pageName = options.getPageName();
2692
+ const searchParams = payloadUrl.searchParams;
2693
+ if (page2 === "1") {
2694
+ searchParams.delete(pageName);
2695
+ } else {
2696
+ searchParams.set(pageName, page2);
2697
+ }
2698
+ setTimeout(() => resolve());
2699
+ });
2700
+ }).finally(() => {
2701
+ if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href) {
2702
+ router.replace({
2703
+ url: payloadUrl.toString(),
2704
+ preserveScroll: true,
2705
+ preserveState: true
2706
+ });
2707
+ }
2708
+ initialUrl = payloadUrl = null;
2709
+ });
2710
+ };
2671
2711
  const onItemIntersected = debounce((itemElement) => {
2672
- if (options.shouldPreserveUrl() || !itemElement) {
2712
+ const itemsElement = options.getItemsElement();
2713
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2673
2714
  return;
2674
2715
  }
2675
2716
  const pageMap = /* @__PURE__ */ new Map();
2676
- const elements = [...options.getItemsElement().children];
2717
+ const elements = [...itemsElement.children];
2677
2718
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2678
2719
  const page2 = getPageFromElement(element) ?? "1";
2679
2720
  if (pageMap.has(page2)) {
@@ -2684,23 +2725,13 @@ var useInfiniteScrollQueryString = (options) => {
2684
2725
  });
2685
2726
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2686
2727
  const mostVisiblePage = sortedPages[0]?.[0];
2687
- if (mostVisiblePage === void 0) {
2688
- return;
2728
+ if (mostVisiblePage !== void 0) {
2729
+ queuePageUpdate(mostVisiblePage);
2689
2730
  }
2690
- const url = new URL(window.location.href);
2691
- if (mostVisiblePage === "1") {
2692
- url.searchParams.delete(options.getPageName());
2693
- } else {
2694
- url.searchParams.set(options.getPageName(), mostVisiblePage.toString());
2695
- }
2696
- router.replace({
2697
- url: url.toString(),
2698
- preserveScroll: true,
2699
- preserveState: true
2700
- });
2701
2731
  }, 250);
2702
2732
  return {
2703
- onItemIntersected
2733
+ onItemIntersected,
2734
+ cancel: () => enabled = false
2704
2735
  };
2705
2736
  };
2706
2737
 
@@ -2830,7 +2861,12 @@ function useInfiniteScroll(options) {
2830
2861
  };
2831
2862
  return {
2832
2863
  dataManager,
2833
- elementManager
2864
+ elementManager,
2865
+ flush: () => {
2866
+ dataManager.removeEventListener();
2867
+ elementManager.flushAll();
2868
+ queryStringManager.cancel();
2869
+ }
2834
2870
  };
2835
2871
  }
2836
2872
 
@@ -2888,7 +2924,7 @@ var set4 = (n) => {
2888
2924
  const speed = settings.speed;
2889
2925
  const ease = settings.easing;
2890
2926
  progress3.offsetWidth;
2891
- queue3((next) => {
2927
+ queue4((next) => {
2892
2928
  const barStyles = (() => {
2893
2929
  if (settings.positionUsing === "translate3d") {
2894
2930
  return {
@@ -3020,7 +3056,7 @@ function clamp(n, min, max) {
3020
3056
  return n;
3021
3057
  }
3022
3058
  var toBarPercentage = (n) => (-1 + n) * 100;
3023
- var queue3 = /* @__PURE__ */ (() => {
3059
+ var queue4 = /* @__PURE__ */ (() => {
3024
3060
  const pending = [];
3025
3061
  const next = () => {
3026
3062
  const fn = pending.shift();