@inertiajs/core 2.2.0 → 2.2.1

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
@@ -750,6 +750,11 @@ var History = class {
750
750
  this.replaceState(this.current);
751
751
  }
752
752
  }
753
+ clearInitialState(key) {
754
+ if (this.initialState && this.initialState[key] !== void 0) {
755
+ delete this.initialState[key];
756
+ }
757
+ }
753
758
  hasAnyState() {
754
759
  return !!this.getAllState();
755
760
  }
@@ -879,6 +884,7 @@ var InitialVisit = class {
879
884
  static clearRememberedStateOnReload() {
880
885
  if (navigationType.isReload()) {
881
886
  history.deleteState(history.rememberedState);
887
+ history.clearInitialState(history.rememberedState);
882
888
  }
883
889
  }
884
890
  static handleBackForward() {
@@ -2421,8 +2427,17 @@ var useInfiniteScrollData = (options) => {
2421
2427
  loading: false,
2422
2428
  previousPage,
2423
2429
  nextPage,
2424
- lastLoadedPage
2430
+ lastLoadedPage,
2431
+ requestCount: 0
2425
2432
  };
2433
+ const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2434
+ const rememberedState = router.restore(getRememberKey());
2435
+ if (rememberedState && typeof rememberedState === "object") {
2436
+ state.previousPage = rememberedState.previousPage;
2437
+ state.nextPage = rememberedState.nextPage;
2438
+ state.lastLoadedPage = rememberedState.lastLoadedPage;
2439
+ state.requestCount = rememberedState.requestCount || 0;
2440
+ }
2426
2441
  const getScrollPropKeyForSide = (side) => {
2427
2442
  return side === "next" ? "nextPage" : "previousPage";
2428
2443
  };
@@ -2435,8 +2450,19 @@ var useInfiniteScrollData = (options) => {
2435
2450
  const paginationProp = getScrollPropKeyForSide(side);
2436
2451
  state.lastLoadedPage = scrollProp.currentPage;
2437
2452
  state[paginationProp] = scrollProp[paginationProp];
2453
+ state.requestCount += 1;
2454
+ router.remember(
2455
+ {
2456
+ previousPage: state.previousPage,
2457
+ nextPage: state.nextPage,
2458
+ lastLoadedPage: state.lastLoadedPage,
2459
+ requestCount: state.requestCount
2460
+ },
2461
+ getRememberKey()
2462
+ );
2438
2463
  };
2439
2464
  const getPageName = () => getScrollPropFromCurrentPage().pageName;
2465
+ const getRequestCount = () => state.requestCount;
2440
2466
  const fetchPage = (side, reloadOptions = {}) => {
2441
2467
  const page2 = findPageToLoad(side);
2442
2468
  if (state.loading || page2 === null) {
@@ -2480,6 +2506,7 @@ var useInfiniteScrollData = (options) => {
2480
2506
  return {
2481
2507
  getLastLoadedPage,
2482
2508
  getPageName,
2509
+ getRequestCount,
2483
2510
  hasPrevious,
2484
2511
  hasNext,
2485
2512
  fetchNext,
@@ -2526,11 +2553,13 @@ var useInfiniteScrollElementManager = (options) => {
2526
2553
  itemsMutationObserver = new MutationObserver((mutations) => {
2527
2554
  mutations.forEach((mutation) => {
2528
2555
  mutation.addedNodes.forEach((node) => {
2529
- if (node.nodeType === Node.ELEMENT_NODE) {
2530
- addedElements.add(node);
2556
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2557
+ return;
2531
2558
  }
2559
+ addedElements.add(node);
2532
2560
  });
2533
2561
  });
2562
+ rememberElementsDebounced();
2534
2563
  });
2535
2564
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2536
2565
  itemsObserver = intersectionObservers.new(
@@ -2593,13 +2622,73 @@ var useInfiniteScrollElementManager = (options) => {
2593
2622
  )
2594
2623
  );
2595
2624
  };
2625
+ let hasRestoredElements = false;
2596
2626
  const processServerLoadedElements = (loadedPage) => {
2627
+ if (!hasRestoredElements) {
2628
+ hasRestoredElements = true;
2629
+ if (restoreElements()) {
2630
+ return;
2631
+ }
2632
+ }
2597
2633
  findUntaggedElements(options.getItemsElement()).forEach((element) => {
2598
2634
  if (elementIsUntagged(element)) {
2599
2635
  element.dataset[INFINITE_SCROLL_PAGE_KEY] = loadedPage?.toString() || "1";
2600
2636
  }
2601
2637
  itemsObserver.observe(element);
2602
2638
  });
2639
+ rememberElements();
2640
+ };
2641
+ const getElementsRememberKey = () => `inertia:infinite-scroll-elements:${options.getPropName()}`;
2642
+ const rememberElements = () => {
2643
+ const pageElementRange = {};
2644
+ const childNodes = options.getItemsElement().childNodes;
2645
+ for (let index = 0; index < childNodes.length; index++) {
2646
+ const node = childNodes[index];
2647
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2648
+ continue;
2649
+ }
2650
+ const page2 = getPageFromElement(node);
2651
+ if (typeof page2 === "undefined") {
2652
+ continue;
2653
+ }
2654
+ if (!(page2 in pageElementRange)) {
2655
+ pageElementRange[page2] = { from: index, to: index };
2656
+ } else {
2657
+ pageElementRange[page2].to = index;
2658
+ }
2659
+ }
2660
+ router.remember(pageElementRange, getElementsRememberKey());
2661
+ };
2662
+ const rememberElementsDebounced = debounce(rememberElements, 250);
2663
+ const restoreElements = () => {
2664
+ const pageElementRange = router.restore(getElementsRememberKey());
2665
+ if (!pageElementRange || typeof pageElementRange !== "object") {
2666
+ return false;
2667
+ }
2668
+ const childNodes = options.getItemsElement().childNodes;
2669
+ for (let index = 0; index < childNodes.length; index++) {
2670
+ const node = childNodes[index];
2671
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2672
+ continue;
2673
+ }
2674
+ const element = node;
2675
+ let elementPage;
2676
+ for (const [page2, range] of Object.entries(pageElementRange)) {
2677
+ if (index >= range.from && index <= range.to) {
2678
+ elementPage = page2;
2679
+ break;
2680
+ }
2681
+ }
2682
+ if (elementPage) {
2683
+ element.dataset[INFINITE_SCROLL_PAGE_KEY] = elementPage;
2684
+ } else if (!elementIsUntagged(element)) {
2685
+ continue;
2686
+ } else {
2687
+ element.dataset[INFINITE_SCROLL_IGNORE_KEY] = "true";
2688
+ }
2689
+ itemsObserver.observe(element);
2690
+ }
2691
+ return true;
2603
2692
  };
2604
2693
  return {
2605
2694
  setupObservers,