@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.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
@@ -2377,29 +2378,37 @@ var useInfiniteScrollData = (options) => {
2377
2378
  }
2378
2379
  throw new Error(`The page object does not contain a scroll prop named "${options.getPropName()}".`);
2379
2380
  };
2380
- const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2381
2381
  const state = {
2382
+ component: null,
2382
2383
  loading: false,
2383
- previousPage,
2384
- nextPage,
2385
- lastLoadedPage,
2384
+ previousPage: null,
2385
+ nextPage: null,
2386
+ lastLoadedPage: null,
2386
2387
  requestCount: 0
2387
2388
  };
2388
- const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2389
- const rememberedState = router.restore(getRememberKey());
2390
- if (rememberedState && typeof rememberedState === "object") {
2391
- state.previousPage = rememberedState.previousPage;
2392
- state.nextPage = rememberedState.nextPage;
2393
- state.lastLoadedPage = rememberedState.lastLoadedPage;
2394
- state.requestCount = rememberedState.requestCount || 0;
2395
- }
2396
- const removeEventListener = router.on("success", () => {
2389
+ const resetState = () => {
2397
2390
  const scrollProp = getScrollPropFromCurrentPage();
2398
- if (scrollProp.reset) {
2399
- state.previousPage = scrollProp.previousPage;
2400
- state.nextPage = scrollProp.nextPage;
2401
- state.lastLoadedPage = scrollProp.currentPage;
2402
- state.requestCount = 0;
2391
+ state.component = page.get().component;
2392
+ state.loading = false;
2393
+ state.previousPage = scrollProp.previousPage;
2394
+ state.nextPage = scrollProp.nextPage;
2395
+ state.lastLoadedPage = scrollProp.currentPage;
2396
+ state.requestCount = 0;
2397
+ };
2398
+ const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2399
+ if (typeof window !== "undefined") {
2400
+ resetState();
2401
+ const rememberedState = router.restore(getRememberKey());
2402
+ if (rememberedState && typeof rememberedState === "object") {
2403
+ state.previousPage = rememberedState.previousPage;
2404
+ state.nextPage = rememberedState.nextPage;
2405
+ state.lastLoadedPage = rememberedState.lastLoadedPage;
2406
+ state.requestCount = rememberedState.requestCount || 0;
2407
+ }
2408
+ }
2409
+ const removeEventListener = router.on("success", (event) => {
2410
+ if (state.component === event.detail.page.component && getScrollPropFromCurrentPage().reset) {
2411
+ resetState();
2403
2412
  }
2404
2413
  });
2405
2414
  const getScrollPropKeyForSide = (side) => {
@@ -2528,8 +2537,7 @@ var useInfiniteScrollElementManager = (options) => {
2528
2537
  });
2529
2538
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2530
2539
  itemsObserver = intersectionObservers.new(
2531
- (entry) => options.onItemIntersected(entry.target),
2532
- { threshold: 0 }
2540
+ (entry) => options.onItemIntersected(entry.target)
2533
2541
  );
2534
2542
  const observerOptions = {
2535
2543
  root: options.getScrollableParent(),
@@ -2566,6 +2574,7 @@ var useInfiniteScrollElementManager = (options) => {
2566
2574
  }
2567
2575
  };
2568
2576
  const flushAll = () => {
2577
+ disableTriggers();
2569
2578
  intersectionObservers.flushAll();
2570
2579
  itemsMutationObserver?.disconnect();
2571
2580
  };
@@ -2667,13 +2676,49 @@ var useInfiniteScrollElementManager = (options) => {
2667
2676
  };
2668
2677
 
2669
2678
  // src/infiniteScroll/queryString.ts
2679
+ var queue3 = new Queue();
2680
+ var initialUrl;
2681
+ var payloadUrl;
2670
2682
  var useInfiniteScrollQueryString = (options) => {
2683
+ let enabled = true;
2684
+ const queuePageUpdate = (page2) => {
2685
+ queue3.add(() => {
2686
+ return new Promise((resolve) => {
2687
+ if (!enabled) {
2688
+ initialUrl = payloadUrl = null;
2689
+ return resolve();
2690
+ }
2691
+ if (!initialUrl || !payloadUrl) {
2692
+ initialUrl = new URL(window.location.href);
2693
+ payloadUrl = new URL(window.location.href);
2694
+ }
2695
+ const pageName = options.getPageName();
2696
+ const searchParams = payloadUrl.searchParams;
2697
+ if (page2 === "1") {
2698
+ searchParams.delete(pageName);
2699
+ } else {
2700
+ searchParams.set(pageName, page2);
2701
+ }
2702
+ setTimeout(() => resolve());
2703
+ });
2704
+ }).finally(() => {
2705
+ if (enabled && initialUrl && payloadUrl && initialUrl.href !== payloadUrl.href) {
2706
+ router.replace({
2707
+ url: payloadUrl.toString(),
2708
+ preserveScroll: true,
2709
+ preserveState: true
2710
+ });
2711
+ }
2712
+ initialUrl = payloadUrl = null;
2713
+ });
2714
+ };
2671
2715
  const onItemIntersected = debounce((itemElement) => {
2672
- if (options.shouldPreserveUrl() || !itemElement) {
2716
+ const itemsElement = options.getItemsElement();
2717
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2673
2718
  return;
2674
2719
  }
2675
2720
  const pageMap = /* @__PURE__ */ new Map();
2676
- const elements = [...options.getItemsElement().children];
2721
+ const elements = [...itemsElement.children];
2677
2722
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2678
2723
  const page2 = getPageFromElement(element) ?? "1";
2679
2724
  if (pageMap.has(page2)) {
@@ -2684,23 +2729,13 @@ var useInfiniteScrollQueryString = (options) => {
2684
2729
  });
2685
2730
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2686
2731
  const mostVisiblePage = sortedPages[0]?.[0];
2687
- if (mostVisiblePage === void 0) {
2688
- return;
2732
+ if (mostVisiblePage !== void 0) {
2733
+ queuePageUpdate(mostVisiblePage);
2689
2734
  }
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
2735
  }, 250);
2702
2736
  return {
2703
- onItemIntersected
2737
+ onItemIntersected,
2738
+ cancel: () => enabled = false
2704
2739
  };
2705
2740
  };
2706
2741
 
@@ -2830,7 +2865,12 @@ function useInfiniteScroll(options) {
2830
2865
  };
2831
2866
  return {
2832
2867
  dataManager,
2833
- elementManager
2868
+ elementManager,
2869
+ flush: () => {
2870
+ dataManager.removeEventListener();
2871
+ elementManager.flushAll();
2872
+ queryStringManager.cancel();
2873
+ }
2834
2874
  };
2835
2875
  }
2836
2876
 
@@ -2888,7 +2928,7 @@ var set4 = (n) => {
2888
2928
  const speed = settings.speed;
2889
2929
  const ease = settings.easing;
2890
2930
  progress3.offsetWidth;
2891
- queue3((next) => {
2931
+ queue4((next) => {
2892
2932
  const barStyles = (() => {
2893
2933
  if (settings.positionUsing === "translate3d") {
2894
2934
  return {
@@ -3020,7 +3060,7 @@ function clamp(n, min, max) {
3020
3060
  return n;
3021
3061
  }
3022
3062
  var toBarPercentage = (n) => (-1 + n) * 100;
3023
- var queue3 = /* @__PURE__ */ (() => {
3063
+ var queue4 = /* @__PURE__ */ (() => {
3024
3064
  const pending = [];
3025
3065
  const next = () => {
3026
3066
  const fn = pending.shift();