@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.esm.js CHANGED
@@ -698,6 +698,11 @@ var History = class {
698
698
  this.replaceState(this.current);
699
699
  }
700
700
  }
701
+ clearInitialState(key) {
702
+ if (this.initialState && this.initialState[key] !== void 0) {
703
+ delete this.initialState[key];
704
+ }
705
+ }
701
706
  hasAnyState() {
702
707
  return !!this.getAllState();
703
708
  }
@@ -827,6 +832,7 @@ var InitialVisit = class {
827
832
  static clearRememberedStateOnReload() {
828
833
  if (navigationType.isReload()) {
829
834
  history.deleteState(history.rememberedState);
835
+ history.clearInitialState(history.rememberedState);
830
836
  }
831
837
  }
832
838
  static handleBackForward() {
@@ -2369,8 +2375,17 @@ var useInfiniteScrollData = (options) => {
2369
2375
  loading: false,
2370
2376
  previousPage,
2371
2377
  nextPage,
2372
- lastLoadedPage
2378
+ lastLoadedPage,
2379
+ requestCount: 0
2373
2380
  };
2381
+ const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`;
2382
+ const rememberedState = router.restore(getRememberKey());
2383
+ if (rememberedState && typeof rememberedState === "object") {
2384
+ state.previousPage = rememberedState.previousPage;
2385
+ state.nextPage = rememberedState.nextPage;
2386
+ state.lastLoadedPage = rememberedState.lastLoadedPage;
2387
+ state.requestCount = rememberedState.requestCount || 0;
2388
+ }
2374
2389
  const getScrollPropKeyForSide = (side) => {
2375
2390
  return side === "next" ? "nextPage" : "previousPage";
2376
2391
  };
@@ -2383,8 +2398,19 @@ var useInfiniteScrollData = (options) => {
2383
2398
  const paginationProp = getScrollPropKeyForSide(side);
2384
2399
  state.lastLoadedPage = scrollProp.currentPage;
2385
2400
  state[paginationProp] = scrollProp[paginationProp];
2401
+ state.requestCount += 1;
2402
+ router.remember(
2403
+ {
2404
+ previousPage: state.previousPage,
2405
+ nextPage: state.nextPage,
2406
+ lastLoadedPage: state.lastLoadedPage,
2407
+ requestCount: state.requestCount
2408
+ },
2409
+ getRememberKey()
2410
+ );
2386
2411
  };
2387
2412
  const getPageName = () => getScrollPropFromCurrentPage().pageName;
2413
+ const getRequestCount = () => state.requestCount;
2388
2414
  const fetchPage = (side, reloadOptions = {}) => {
2389
2415
  const page2 = findPageToLoad(side);
2390
2416
  if (state.loading || page2 === null) {
@@ -2428,6 +2454,7 @@ var useInfiniteScrollData = (options) => {
2428
2454
  return {
2429
2455
  getLastLoadedPage,
2430
2456
  getPageName,
2457
+ getRequestCount,
2431
2458
  hasPrevious,
2432
2459
  hasNext,
2433
2460
  fetchNext,
@@ -2474,11 +2501,13 @@ var useInfiniteScrollElementManager = (options) => {
2474
2501
  itemsMutationObserver = new MutationObserver((mutations) => {
2475
2502
  mutations.forEach((mutation) => {
2476
2503
  mutation.addedNodes.forEach((node) => {
2477
- if (node.nodeType === Node.ELEMENT_NODE) {
2478
- addedElements.add(node);
2504
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2505
+ return;
2479
2506
  }
2507
+ addedElements.add(node);
2480
2508
  });
2481
2509
  });
2510
+ rememberElementsDebounced();
2482
2511
  });
2483
2512
  itemsMutationObserver.observe(options.getItemsElement(), { childList: true });
2484
2513
  itemsObserver = intersectionObservers.new(
@@ -2541,13 +2570,73 @@ var useInfiniteScrollElementManager = (options) => {
2541
2570
  )
2542
2571
  );
2543
2572
  };
2573
+ let hasRestoredElements = false;
2544
2574
  const processServerLoadedElements = (loadedPage) => {
2575
+ if (!hasRestoredElements) {
2576
+ hasRestoredElements = true;
2577
+ if (restoreElements()) {
2578
+ return;
2579
+ }
2580
+ }
2545
2581
  findUntaggedElements(options.getItemsElement()).forEach((element) => {
2546
2582
  if (elementIsUntagged(element)) {
2547
2583
  element.dataset[INFINITE_SCROLL_PAGE_KEY] = loadedPage?.toString() || "1";
2548
2584
  }
2549
2585
  itemsObserver.observe(element);
2550
2586
  });
2587
+ rememberElements();
2588
+ };
2589
+ const getElementsRememberKey = () => `inertia:infinite-scroll-elements:${options.getPropName()}`;
2590
+ const rememberElements = () => {
2591
+ const pageElementRange = {};
2592
+ const childNodes = options.getItemsElement().childNodes;
2593
+ for (let index = 0; index < childNodes.length; index++) {
2594
+ const node = childNodes[index];
2595
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2596
+ continue;
2597
+ }
2598
+ const page2 = getPageFromElement(node);
2599
+ if (typeof page2 === "undefined") {
2600
+ continue;
2601
+ }
2602
+ if (!(page2 in pageElementRange)) {
2603
+ pageElementRange[page2] = { from: index, to: index };
2604
+ } else {
2605
+ pageElementRange[page2].to = index;
2606
+ }
2607
+ }
2608
+ router.remember(pageElementRange, getElementsRememberKey());
2609
+ };
2610
+ const rememberElementsDebounced = debounce(rememberElements, 250);
2611
+ const restoreElements = () => {
2612
+ const pageElementRange = router.restore(getElementsRememberKey());
2613
+ if (!pageElementRange || typeof pageElementRange !== "object") {
2614
+ return false;
2615
+ }
2616
+ const childNodes = options.getItemsElement().childNodes;
2617
+ for (let index = 0; index < childNodes.length; index++) {
2618
+ const node = childNodes[index];
2619
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2620
+ continue;
2621
+ }
2622
+ const element = node;
2623
+ let elementPage;
2624
+ for (const [page2, range] of Object.entries(pageElementRange)) {
2625
+ if (index >= range.from && index <= range.to) {
2626
+ elementPage = page2;
2627
+ break;
2628
+ }
2629
+ }
2630
+ if (elementPage) {
2631
+ element.dataset[INFINITE_SCROLL_PAGE_KEY] = elementPage;
2632
+ } else if (!elementIsUntagged(element)) {
2633
+ continue;
2634
+ } else {
2635
+ element.dataset[INFINITE_SCROLL_IGNORE_KEY] = "true";
2636
+ }
2637
+ itemsObserver.observe(element);
2638
+ }
2639
+ return true;
2551
2640
  };
2552
2641
  return {
2553
2642
  setupObservers,