@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.esm.js CHANGED
@@ -255,25 +255,28 @@ var Scroll = class {
255
255
  }
256
256
  }
257
257
  static restore(scrollRegions) {
258
- this.restoreDocument();
259
- this.regions().forEach((region, index) => {
260
- const scrollPosition = scrollRegions[index];
261
- if (!scrollPosition) {
262
- return;
263
- }
264
- if (typeof region.scrollTo === "function") {
265
- region.scrollTo(scrollPosition.left, scrollPosition.top);
266
- } else {
267
- region.scrollTop = scrollPosition.top;
268
- region.scrollLeft = scrollPosition.left;
269
- }
258
+ if (typeof window === "undefined") {
259
+ return;
260
+ }
261
+ window.requestAnimationFrame(() => {
262
+ this.restoreDocument();
263
+ this.regions().forEach((region, index) => {
264
+ const scrollPosition = scrollRegions[index];
265
+ if (!scrollPosition) {
266
+ return;
267
+ }
268
+ if (typeof region.scrollTo === "function") {
269
+ region.scrollTo(scrollPosition.left, scrollPosition.top);
270
+ } else {
271
+ region.scrollTop = scrollPosition.top;
272
+ region.scrollLeft = scrollPosition.left;
273
+ }
274
+ });
270
275
  });
271
276
  }
272
277
  static restoreDocument() {
273
278
  const scrollPosition = history.getDocumentScrollPosition();
274
- if (typeof window !== "undefined") {
275
- window.scrollTo(scrollPosition.left, scrollPosition.top);
276
- }
279
+ window.scrollTo(scrollPosition.left, scrollPosition.top);
277
280
  }
278
281
  static onScroll(event) {
279
282
  const target = event.target;
@@ -784,9 +787,7 @@ var EventHandler = class {
784
787
  }
785
788
  router.cancelAll();
786
789
  page.setQuietly(data, { preserveState: false }).then(() => {
787
- window.requestAnimationFrame(() => {
788
- Scroll.restore(history.getScrollRegions());
789
- });
790
+ Scroll.restore(history.getScrollRegions());
790
791
  fireNavigateEvent(page.get());
791
792
  });
792
793
  }).catch(() => {
@@ -1613,7 +1614,7 @@ var Response = class _Response {
1613
1614
  pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop);
1614
1615
  });
1615
1616
  pageResponse.props = { ...page.get().props, ...pageResponse.props };
1616
- if (pageResponse.scrollProps) {
1617
+ if (page.get().scrollProps) {
1617
1618
  pageResponse.scrollProps = {
1618
1619
  ...page.get().scrollProps || {},
1619
1620
  ...pageResponse.scrollProps || {}
@@ -2185,11 +2186,12 @@ var getScrollableParent = (element) => {
2185
2186
  };
2186
2187
  var getElementsInViewportFromCollection = (referenceElement, elements) => {
2187
2188
  const referenceIndex = elements.indexOf(referenceElement);
2188
- const visibleElements = [];
2189
+ const upwardElements = [];
2190
+ const downwardElements = [];
2189
2191
  for (let i = referenceIndex; i >= 0; i--) {
2190
2192
  const element = elements[i];
2191
2193
  if (elementInViewport(element)) {
2192
- visibleElements.push(element);
2194
+ upwardElements.push(element);
2193
2195
  } else {
2194
2196
  break;
2195
2197
  }
@@ -2197,12 +2199,12 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2197
2199
  for (let i = referenceIndex + 1; i < elements.length; i++) {
2198
2200
  const element = elements[i];
2199
2201
  if (elementInViewport(element)) {
2200
- visibleElements.push(element);
2202
+ downwardElements.push(element);
2201
2203
  } else {
2202
2204
  break;
2203
2205
  }
2204
2206
  }
2205
- return visibleElements;
2207
+ return [...upwardElements.reverse(), ...downwardElements];
2206
2208
  };
2207
2209
 
2208
2210
  // src/formObject.ts
@@ -2378,6 +2380,7 @@ var useInfiniteScrollData = (options) => {
2378
2380
  };
2379
2381
  const { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage();
2380
2382
  const state = {
2383
+ component: page.get().component,
2381
2384
  loading: false,
2382
2385
  previousPage,
2383
2386
  nextPage,
@@ -2392,7 +2395,10 @@ var useInfiniteScrollData = (options) => {
2392
2395
  state.lastLoadedPage = rememberedState.lastLoadedPage;
2393
2396
  state.requestCount = rememberedState.requestCount || 0;
2394
2397
  }
2395
- const removeEventListener = router.on("success", () => {
2398
+ const removeEventListener = router.on("success", (event) => {
2399
+ if (state.component !== event.detail.page.component) {
2400
+ return;
2401
+ }
2396
2402
  const scrollProp = getScrollPropFromCurrentPage();
2397
2403
  if (scrollProp.reset) {
2398
2404
  state.previousPage = scrollProp.previousPage;
@@ -2527,8 +2533,7 @@ var useInfiniteScrollElementManager = (options) => {
2527
2533
  });
2528
2534
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2529
2535
  itemsObserver = intersectionObservers.new(
2530
- (entry) => options.onItemIntersected(entry.target),
2531
- { threshold: 0 }
2536
+ (entry) => options.onItemIntersected(entry.target)
2532
2537
  );
2533
2538
  const observerOptions = {
2534
2539
  root: options.getScrollableParent(),
@@ -2565,6 +2570,7 @@ var useInfiniteScrollElementManager = (options) => {
2565
2570
  }
2566
2571
  };
2567
2572
  const flushAll = () => {
2573
+ disableTriggers();
2568
2574
  intersectionObservers.flushAll();
2569
2575
  itemsMutationObserver?.disconnect();
2570
2576
  };
@@ -2666,13 +2672,49 @@ var useInfiniteScrollElementManager = (options) => {
2666
2672
  };
2667
2673
 
2668
2674
  // src/infiniteScroll/queryString.ts
2675
+ var queue3 = new Queue();
2676
+ var initialUrl;
2677
+ var payloadUrl;
2669
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
+ };
2670
2711
  const onItemIntersected = debounce((itemElement) => {
2671
- if (options.shouldPreserveUrl() || !itemElement) {
2712
+ const itemsElement = options.getItemsElement();
2713
+ if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {
2672
2714
  return;
2673
2715
  }
2674
2716
  const pageMap = /* @__PURE__ */ new Map();
2675
- const elements = [...options.getItemsElement().children];
2717
+ const elements = [...itemsElement.children];
2676
2718
  getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
2677
2719
  const page2 = getPageFromElement(element) ?? "1";
2678
2720
  if (pageMap.has(page2)) {
@@ -2683,23 +2725,13 @@ var useInfiniteScrollQueryString = (options) => {
2683
2725
  });
2684
2726
  const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1]);
2685
2727
  const mostVisiblePage = sortedPages[0]?.[0];
2686
- if (mostVisiblePage === void 0) {
2687
- return;
2728
+ if (mostVisiblePage !== void 0) {
2729
+ queuePageUpdate(mostVisiblePage);
2688
2730
  }
2689
- const url = new URL(window.location.href);
2690
- if (mostVisiblePage === "1") {
2691
- url.searchParams.delete(options.getPageName());
2692
- } else {
2693
- url.searchParams.set(options.getPageName(), mostVisiblePage.toString());
2694
- }
2695
- router.replace({
2696
- url: url.toString(),
2697
- preserveScroll: true,
2698
- preserveState: true
2699
- });
2700
2731
  }, 250);
2701
2732
  return {
2702
- onItemIntersected
2733
+ onItemIntersected,
2734
+ cancel: () => enabled = false
2703
2735
  };
2704
2736
  };
2705
2737
 
@@ -2829,7 +2861,12 @@ function useInfiniteScroll(options) {
2829
2861
  };
2830
2862
  return {
2831
2863
  dataManager,
2832
- elementManager
2864
+ elementManager,
2865
+ flush: () => {
2866
+ dataManager.removeEventListener();
2867
+ elementManager.flushAll();
2868
+ queryStringManager.cancel();
2869
+ }
2833
2870
  };
2834
2871
  }
2835
2872
 
@@ -2887,7 +2924,7 @@ var set4 = (n) => {
2887
2924
  const speed = settings.speed;
2888
2925
  const ease = settings.easing;
2889
2926
  progress3.offsetWidth;
2890
- queue3((next) => {
2927
+ queue4((next) => {
2891
2928
  const barStyles = (() => {
2892
2929
  if (settings.positionUsing === "translate3d") {
2893
2930
  return {
@@ -3019,7 +3056,7 @@ function clamp(n, min, max) {
3019
3056
  return n;
3020
3057
  }
3021
3058
  var toBarPercentage = (n) => (-1 + n) * 100;
3022
- var queue3 = /* @__PURE__ */ (() => {
3059
+ var queue4 = /* @__PURE__ */ (() => {
3023
3060
  const pending = [];
3024
3061
  const next = () => {
3025
3062
  const fn = pending.shift();