@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.js CHANGED
@@ -2238,11 +2238,12 @@ var getScrollableParent = (element) => {
2238
2238
  };
2239
2239
  var getElementsInViewportFromCollection = (referenceElement, elements) => {
2240
2240
  const referenceIndex = elements.indexOf(referenceElement);
2241
- const visibleElements = [];
2241
+ const upwardElements = [];
2242
+ const downwardElements = [];
2242
2243
  for (let i = referenceIndex; i >= 0; i--) {
2243
2244
  const element = elements[i];
2244
2245
  if (elementInViewport(element)) {
2245
- visibleElements.push(element);
2246
+ upwardElements.push(element);
2246
2247
  } else {
2247
2248
  break;
2248
2249
  }
@@ -2250,12 +2251,12 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2250
2251
  for (let i = referenceIndex + 1; i < elements.length; i++) {
2251
2252
  const element = elements[i];
2252
2253
  if (elementInViewport(element)) {
2253
- visibleElements.push(element);
2254
+ downwardElements.push(element);
2254
2255
  } else {
2255
2256
  break;
2256
2257
  }
2257
2258
  }
2258
- return visibleElements;
2259
+ return [...upwardElements.reverse(), ...downwardElements];
2259
2260
  };
2260
2261
 
2261
2262
  // src/formObject.ts
@@ -2431,6 +2432,7 @@ var useInfiniteScrollData = (options) => {
2431
2432
  };
2432
2433
  const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2433
2434
  const state = {
2435
+ component: page.get().component,
2434
2436
  loading: false,
2435
2437
  previousPage,
2436
2438
  nextPage,
@@ -2445,7 +2447,10 @@ var useInfiniteScrollData = (options) => {
2445
2447
  state.lastLoadedPage = rememberedState.lastLoadedPage;
2446
2448
  state.requestCount = rememberedState.requestCount || 0;
2447
2449
  }
2448
- const removeEventListener = router.on("success", () => {
2450
+ const removeEventListener = router.on("success", (event) => {
2451
+ if (state.component !== event.detail.page.component) {
2452
+ return;
2453
+ }
2449
2454
  const scrollProp = getScrollPropFromCurrentPage();
2450
2455
  if (scrollProp.reset) {
2451
2456
  state.previousPage = scrollProp.previousPage;
@@ -2580,8 +2585,7 @@ var useInfiniteScrollElementManager = (options) => {
2580
2585
  });
2581
2586
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2582
2587
  itemsObserver = intersectionObservers.new(
2583
- (entry) => options.onItemIntersected(entry.target),
2584
- { threshold: 0 }
2588
+ (entry) => options.onItemIntersected(entry.target)
2585
2589
  );
2586
2590
  const observerOptions = {
2587
2591
  root: options.getScrollableParent(),
@@ -2618,6 +2622,7 @@ var useInfiniteScrollElementManager = (options) => {
2618
2622
  }
2619
2623
  };
2620
2624
  const flushAll = () => {
2625
+ disableTriggers();
2621
2626
  intersectionObservers.flushAll();
2622
2627
  itemsMutationObserver?.disconnect();
2623
2628
  };
@@ -2719,13 +2724,49 @@ var useInfiniteScrollElementManager = (options) => {
2719
2724
  };
2720
2725
 
2721
2726
  // src/infiniteScroll/queryString.ts
2727
+ var queue3 = new Queue();
2728
+ var initialUrl;
2729
+ var payloadUrl;
2722
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
+ };
2723
2763
  const onItemIntersected = debounce((itemElement) => {
2724
- if (options.shouldPreserveUrl() || !itemElement) {
2764
+ const itemsElement = options.getItemsElement();
2765
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2725
2766
  return;
2726
2767
  }
2727
2768
  const pageMap = /* @__PURE__ */ new Map();
2728
- const elements = [...options.getItemsElement().children];
2769
+ const elements = [...itemsElement.children];
2729
2770
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2730
2771
  const page2 = getPageFromElement(element) ?? "1";
2731
2772
  if (pageMap.has(page2)) {
@@ -2736,23 +2777,13 @@ var useInfiniteScrollQueryString = (options) => {
2736
2777
  });
2737
2778
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2738
2779
  const mostVisiblePage = sortedPages[0]?.[0];
2739
- if (mostVisiblePage === void 0) {
2740
- return;
2780
+ if (mostVisiblePage !== void 0) {
2781
+ queuePageUpdate(mostVisiblePage);
2741
2782
  }
2742
- const url = new URL(window.location.href);
2743
- if (mostVisiblePage === "1") {
2744
- url.searchParams.delete(options.getPageName());
2745
- } else {
2746
- url.searchParams.set(options.getPageName(), mostVisiblePage.toString());
2747
- }
2748
- router.replace({
2749
- url: url.toString(),
2750
- preserveScroll: true,
2751
- preserveState: true
2752
- });
2753
2783
  }, 250);
2754
2784
  return {
2755
- onItemIntersected
2785
+ onItemIntersected,
2786
+ cancel: () => enabled = false
2756
2787
  };
2757
2788
  };
2758
2789
 
@@ -2882,7 +2913,12 @@ function useInfiniteScroll(options) {
2882
2913
  };
2883
2914
  return {
2884
2915
  dataManager,
2885
- elementManager
2916
+ elementManager,
2917
+ flush: () => {
2918
+ dataManager.removeEventListener();
2919
+ elementManager.flushAll();
2920
+ queryStringManager.cancel();
2921
+ }
2886
2922
  };
2887
2923
  }
2888
2924
 
@@ -2940,7 +2976,7 @@ var set4 = (n) => {
2940
2976
  const speed = settings.speed;
2941
2977
  const ease = settings.easing;
2942
2978
  progress3.offsetWidth;
2943
- queue3((next) => {
2979
+ queue4((next) => {
2944
2980
  const barStyles = (() => {
2945
2981
  if (settings.positionUsing === "translate3d") {
2946
2982
  return {
@@ -3072,7 +3108,7 @@ function clamp(n, min, max) {
3072
3108
  return n;
3073
3109
  }
3074
3110
  var toBarPercentage = (n) => (-1 + n) * 100;
3075
- var queue3 = /* @__PURE__ */ (() => {
3111
+ var queue4 = /* @__PURE__ */ (() => {
3076
3112
  const pending = [];
3077
3113
  const next = () => {
3078
3114
  const fn = pending.shift();