@inertiajs/core 2.2.4 → 2.2.6

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
@@ -2429,29 +2430,37 @@ var useInfiniteScrollData = (options) => {
2429
2430
  }
2430
2431
  throw new Error(`The page object does not contain a scroll prop named "${options.getPropName()}".`);
2431
2432
  };
2432
- const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2433
2433
  const state = {
2434
+ component: null,
2434
2435
  loading: false,
2435
- previousPage,
2436
- nextPage,
2437
- lastLoadedPage,
2436
+ previousPage: null,
2437
+ nextPage: null,
2438
+ lastLoadedPage: null,
2438
2439
  requestCount: 0
2439
2440
  };
2440
- const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2441
- const rememberedState = router.restore(getRememberKey());
2442
- if (rememberedState && typeof rememberedState === "object") {
2443
- state.previousPage = rememberedState.previousPage;
2444
- state.nextPage = rememberedState.nextPage;
2445
- state.lastLoadedPage = rememberedState.lastLoadedPage;
2446
- state.requestCount = rememberedState.requestCount || 0;
2447
- }
2448
- const removeEventListener = router.on("success", () => {
2441
+ const resetState = () => {
2449
2442
  const scrollProp = getScrollPropFromCurrentPage();
2450
- if (scrollProp.reset) {
2451
- state.previousPage = scrollProp.previousPage;
2452
- state.nextPage = scrollProp.nextPage;
2453
- state.lastLoadedPage = scrollProp.currentPage;
2454
- state.requestCount = 0;
2443
+ state.component = page.get().component;
2444
+ state.loading = false;
2445
+ state.previousPage = scrollProp.previousPage;
2446
+ state.nextPage = scrollProp.nextPage;
2447
+ state.lastLoadedPage = scrollProp.currentPage;
2448
+ state.requestCount = 0;
2449
+ };
2450
+ const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2451
+ if (typeof window !== "undefined") {
2452
+ resetState();
2453
+ const rememberedState = router.restore(getRememberKey());
2454
+ if (rememberedState && typeof rememberedState === "object") {
2455
+ state.previousPage = rememberedState.previousPage;
2456
+ state.nextPage = rememberedState.nextPage;
2457
+ state.lastLoadedPage = rememberedState.lastLoadedPage;
2458
+ state.requestCount = rememberedState.requestCount || 0;
2459
+ }
2460
+ }
2461
+ const removeEventListener = router.on("success", (event) => {
2462
+ if (state.component === event.detail.page.component && getScrollPropFromCurrentPage().reset) {
2463
+ resetState();
2455
2464
  }
2456
2465
  });
2457
2466
  const getScrollPropKeyForSide = (side) => {
@@ -2580,8 +2589,7 @@ var useInfiniteScrollElementManager = (options) => {
2580
2589
  });
2581
2590
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2582
2591
  itemsObserver = intersectionObservers.new(
2583
- (entry) => options.onItemIntersected(entry.target),
2584
- { threshold: 0 }
2592
+ (entry) => options.onItemIntersected(entry.target)
2585
2593
  );
2586
2594
  const observerOptions = {
2587
2595
  root: options.getScrollableParent(),
@@ -2618,6 +2626,7 @@ var useInfiniteScrollElementManager = (options) => {
2618
2626
  }
2619
2627
  };
2620
2628
  const flushAll = () => {
2629
+ disableTriggers();
2621
2630
  intersectionObservers.flushAll();
2622
2631
  itemsMutationObserver?.disconnect();
2623
2632
  };
@@ -2719,13 +2728,49 @@ var useInfiniteScrollElementManager = (options) => {
2719
2728
  };
2720
2729
 
2721
2730
  // src/infiniteScroll/queryString.ts
2731
+ var queue3 = new Queue();
2732
+ var initialUrl;
2733
+ var payloadUrl;
2722
2734
  var useInfiniteScrollQueryString = (options) => {
2735
+ let enabled = true;
2736
+ const queuePageUpdate = (page2) => {
2737
+ queue3.add(() => {
2738
+ return new Promise((resolve) => {
2739
+ if (!enabled) {
2740
+ initialUrl = payloadUrl = null;
2741
+ return resolve();
2742
+ }
2743
+ if (!initialUrl || !payloadUrl) {
2744
+ initialUrl = new URL(window.location.href);
2745
+ payloadUrl = new URL(window.location.href);
2746
+ }
2747
+ const pageName = options.getPageName();
2748
+ const searchParams = payloadUrl.searchParams;
2749
+ if (page2 === "1") {
2750
+ searchParams.delete(pageName);
2751
+ } else {
2752
+ searchParams.set(pageName, page2);
2753
+ }
2754
+ setTimeout(() => resolve());
2755
+ });
2756
+ }).finally(() => {
2757
+ if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href) {
2758
+ router.replace({
2759
+ url: payloadUrl.toString(),
2760
+ preserveScroll: true,
2761
+ preserveState: true
2762
+ });
2763
+ }
2764
+ initialUrl = payloadUrl = null;
2765
+ });
2766
+ };
2723
2767
  const onItemIntersected = debounce((itemElement) => {
2724
- if (options.shouldPreserveUrl() || !itemElement) {
2768
+ const itemsElement = options.getItemsElement();
2769
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2725
2770
  return;
2726
2771
  }
2727
2772
  const pageMap = /* @__PURE__ */ new Map();
2728
- const elements = [...options.getItemsElement().children];
2773
+ const elements = [...itemsElement.children];
2729
2774
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2730
2775
  const page2 = getPageFromElement(element) ?? "1";
2731
2776
  if (pageMap.has(page2)) {
@@ -2736,23 +2781,13 @@ var useInfiniteScrollQueryString = (options) => {
2736
2781
  });
2737
2782
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2738
2783
  const mostVisiblePage = sortedPages[0]?.[0];
2739
- if (mostVisiblePage === void 0) {
2740
- return;
2784
+ if (mostVisiblePage !== void 0) {
2785
+ queuePageUpdate(mostVisiblePage);
2741
2786
  }
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
2787
  }, 250);
2754
2788
  return {
2755
- onItemIntersected
2789
+ onItemIntersected,
2790
+ cancel: () => enabled = false
2756
2791
  };
2757
2792
  };
2758
2793
 
@@ -2882,7 +2917,12 @@ function useInfiniteScroll(options) {
2882
2917
  };
2883
2918
  return {
2884
2919
  dataManager,
2885
- elementManager
2920
+ elementManager,
2921
+ flush: () => {
2922
+ dataManager.removeEventListener();
2923
+ elementManager.flushAll();
2924
+ queryStringManager.cancel();
2925
+ }
2886
2926
  };
2887
2927
  }
2888
2928
 
@@ -2940,7 +2980,7 @@ var set4 = (n) => {
2940
2980
  const speed = settings.speed;
2941
2981
  const ease = settings.easing;
2942
2982
  progress3.offsetWidth;
2943
- queue3((next) => {
2983
+ queue4((next) => {
2944
2984
  const barStyles = (() => {
2945
2985
  if (settings.positionUsing === "translate3d") {
2946
2986
  return {
@@ -3072,7 +3112,7 @@ function clamp(n, min, max) {
3072
3112
  return n;
3073
3113
  }
3074
3114
  var toBarPercentage = (n) => (-1 + n) * 100;
3075
- var queue3 = /* @__PURE__ */ (() => {
3115
+ var queue4 = /* @__PURE__ */ (() => {
3076
3116
  const pending = [];
3077
3117
  const next = () => {
3078
3118
  const fn = pending.shift();