@inertiajs/svelte 2.3.6 → 2.3.8

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.
@@ -22,20 +22,22 @@ let endElementRef;
22
22
  let loadingPrevious = false;
23
23
  let loadingNext = false;
24
24
  let requestCount = 0;
25
+ let hasPreviousPage = false;
26
+ let hasNextPage = false;
25
27
  $: resolvedItemsElement = resolveHTMLElement(itemsElement, itemsElementRef);
26
28
  $: scrollableParent = resolvedItemsElement ? getScrollableParent(resolvedItemsElement) : null;
27
29
  $: sharedExposed = {
28
30
  loadingPrevious,
29
31
  loadingNext,
30
- hasPrevious: infiniteScrollInstance?.dataManager.hasPrevious() || false,
31
- hasNext: infiniteScrollInstance?.dataManager.hasNext() || false
32
+ hasPrevious: hasPreviousPage,
33
+ hasNext: hasNextPage
32
34
  };
33
35
  $: exposedPrevious = {
34
36
  loading: loadingPrevious,
35
37
  fetch: fetchPrevious,
36
38
  autoMode: headerAutoMode,
37
39
  manualMode: !headerAutoMode,
38
- hasMore: infiniteScrollInstance?.dataManager.hasPrevious() || false,
40
+ hasMore: hasPreviousPage,
39
41
  ...sharedExposed
40
42
  };
41
43
  $: exposedNext = {
@@ -43,7 +45,7 @@ $: exposedNext = {
43
45
  fetch: fetchNext,
44
46
  autoMode: footerAutoMode,
45
47
  manualMode: !footerAutoMode,
46
- hasMore: infiniteScrollInstance?.dataManager.hasNext() || false,
48
+ hasMore: hasNextPage,
47
49
  ...sharedExposed
48
50
  };
49
51
  $: exposedSlot = {
@@ -92,6 +94,11 @@ export function hasNext() {
92
94
  onMount(() => {
93
95
  setTimeout(setupInfiniteScrollInstance);
94
96
  });
97
+ function syncStateFromDataManager() {
98
+ requestCount = infiniteScrollInstance.dataManager.getRequestCount();
99
+ hasPreviousPage = infiniteScrollInstance.dataManager.hasPrevious();
100
+ hasNextPage = infiniteScrollInstance.dataManager.hasNext();
101
+ }
95
102
  function setupInfiniteScrollInstance() {
96
103
  const resolvedItemsElement2 = resolveHTMLElement(itemsElement, itemsElementRef);
97
104
  const resolvedStartElement = resolveHTMLElement(startElement, startElementRef);
@@ -113,16 +120,17 @@ function setupInfiniteScrollInstance() {
113
120
  onBeforePreviousRequest: () => loadingPrevious = true,
114
121
  onBeforeNextRequest: () => loadingNext = true,
115
122
  onCompletePreviousRequest: () => {
116
- requestCount = infiniteScrollInstance.dataManager.getRequestCount();
117
123
  loadingPrevious = false;
124
+ syncStateFromDataManager();
118
125
  },
119
126
  onCompleteNextRequest: () => {
120
- requestCount = infiniteScrollInstance.dataManager.getRequestCount();
121
127
  loadingNext = false;
122
- }
128
+ syncStateFromDataManager();
129
+ },
130
+ onDataReset: syncStateFromDataManager
123
131
  });
124
132
  const { dataManager, elementManager } = infiniteScrollInstance;
125
- requestCount = dataManager.getRequestCount();
133
+ syncStateFromDataManager();
126
134
  elementManager.setupObservers();
127
135
  elementManager.processServerLoadedElements(dataManager.getLastLoadedPage());
128
136
  const shouldAutoScroll = autoScroll !== void 0 ? autoScroll : reverse;
package/dist/useForm.d.ts CHANGED
@@ -33,6 +33,7 @@ export interface InertiaFormProps<TForm extends object> {
33
33
  patch(url: string, options?: UseFormSubmitOptions): void;
34
34
  delete(url: string, options?: UseFormSubmitOptions): void;
35
35
  cancel(): void;
36
+ dontRemember<K extends FormDataKeys<TForm>>(...fields: K[]): this;
36
37
  withPrecognition: (...args: UseFormWithPrecognitionArguments) => InertiaPrecognitiveFormStore<TForm>;
37
38
  }
38
39
  export interface InertiaFormValidationProps<TForm extends object> {
package/dist/useForm.js CHANGED
@@ -15,6 +15,7 @@ export default function useForm(...args) {
15
15
  let cancelToken = null;
16
16
  let recentlySuccessfulTimeoutId = null;
17
17
  let transform = (data) => data;
18
+ let rememberExcludeKeys = [];
18
19
  let defaultsCalledInOnSuccess = false;
19
20
  let validatorRef = null;
20
21
  let setFormState;
@@ -289,10 +290,24 @@ export default function useForm(...args) {
289
290
  cancel() {
290
291
  cancelToken?.cancel();
291
292
  },
293
+ __remember() {
294
+ const data = this.data();
295
+ if (rememberExcludeKeys.length > 0) {
296
+ const filtered = { ...data };
297
+ rememberExcludeKeys.forEach((k) => delete filtered[k]);
298
+ return { data: filtered, errors: this.errors };
299
+ }
300
+ return { data, errors: this.errors };
301
+ },
292
302
  withPrecognition,
293
303
  });
304
+ const dontRememberMethod = (...keys) => {
305
+ rememberExcludeKeys = keys;
306
+ return store;
307
+ };
294
308
  Object.assign(store, {
295
309
  withPrecognition,
310
+ dontRemember: dontRememberMethod,
296
311
  });
297
312
  setFormState = (key, value) => {
298
313
  store.update((form) => ({ ...form, [key]: value }));
@@ -306,7 +321,11 @@ export default function useForm(...args) {
306
321
  setFormState('hasErrors', !form.hasErrors);
307
322
  }
308
323
  if (rememberKey) {
309
- router.remember({ data: form.data(), errors: form.errors }, rememberKey);
324
+ const storedData = router.restore(rememberKey);
325
+ const newData = form.__remember();
326
+ if (!isEqual(storedData, newData)) {
327
+ router.remember(newData, rememberKey);
328
+ }
310
329
  }
311
330
  });
312
331
  return precognitionEndpoint
@@ -1,10 +1,11 @@
1
1
  import { router } from '@inertiajs/core';
2
+ import { cloneDeep } from 'lodash-es';
2
3
  import { onDestroy } from 'svelte';
3
4
  import { writable } from 'svelte/store';
4
5
  export default function useRemember(initialState, key) {
5
6
  const restored = router.restore(key);
6
- const store = writable(restored !== undefined ? restored : initialState);
7
- const unsubscribe = store.subscribe((state) => router.remember(state, key));
7
+ const store = writable(restored !== undefined ? cloneDeep(restored) : initialState);
8
+ const unsubscribe = store.subscribe((state) => router.remember(cloneDeep(state), key));
8
9
  onDestroy(unsubscribe);
9
10
  return store;
10
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inertiajs/svelte",
3
- "version": "2.3.6",
3
+ "version": "2.3.8",
4
4
  "license": "MIT",
5
5
  "description": "The Svelte adapter for Inertia.js",
6
6
  "contributors": [
@@ -55,7 +55,7 @@
55
55
  "@types/lodash-es": "^4.17.12",
56
56
  "laravel-precognition": "^1.0.0",
57
57
  "lodash-es": "^4.17.21",
58
- "@inertiajs/core": "2.3.6"
58
+ "@inertiajs/core": "2.3.8"
59
59
  },
60
60
  "scripts": {
61
61
  "build": "pnpm package && svelte-check --tsconfig ./tsconfig.json && publint",