+1
src/utils/route-cache.ts
+1
src/utils/route-cache.ts
+14
-4
src/views/collection.tsx
+14
-4
src/views/collection.tsx
···
40
toDelete: boolean;
41
}
42
43
-
const LIMIT = 100;
44
45
const RecordLink = (props: { record: AtprotoRecord }) => {
46
const [hover, setHover] = createSignal(false);
···
98
const [batchDelete, setBatchDelete] = createSignal(false);
99
const [lastSelected, setLastSelected] = createSignal<number>();
100
const [reverse, setReverse] = createSignal(searchParams.reverse === "true");
101
const [recreate, setRecreate] = createSignal(false);
102
const [openDelete, setOpenDelete] = createSignal(false);
103
const [restoredFromCache, setRestoredFromCache] = createSignal(false);
···
113
setRecords(cached.records as AtprotoRecord[]);
114
setCursor(cached.cursor);
115
setReverse(cached.reverse);
116
-
setSearchParams({ reverse: cached.reverse ? "true" : undefined });
117
setRestoredFromCache(true);
118
requestAnimationFrame(() => {
119
window.scrollTo(0, cached.scrollY);
···
131
cursor: cursor(),
132
scrollY: window.scrollY,
133
reverse: reverse(),
134
});
135
} else {
136
clearCollectionCache(cacheKey());
···
152
params: {
153
repo: did as ActorIdentifier,
154
collection: params.collection as `${string}.${string}.${string}`,
155
-
limit: LIMIT,
156
cursor: cursor(),
157
reverse: reverse(),
158
},
159
});
160
if (!res.ok) throw new Error(res.data.error);
161
-
setCursor(res.data.records.length < LIMIT ? undefined : res.data.cursor);
162
const tmpRecords: AtprotoRecord[] = [];
163
res.data.records.forEach((record) => {
164
const rkey = record.uri.split("/").pop()!;
···
40
toDelete: boolean;
41
}
42
43
+
const DEFAULT_LIMIT = 100;
44
45
const RecordLink = (props: { record: AtprotoRecord }) => {
46
const [hover, setHover] = createSignal(false);
···
98
const [batchDelete, setBatchDelete] = createSignal(false);
99
const [lastSelected, setLastSelected] = createSignal<number>();
100
const [reverse, setReverse] = createSignal(searchParams.reverse === "true");
101
+
const limit = () => {
102
+
const limitParam =
103
+
Array.isArray(searchParams.limit) ? searchParams.limit[0] : searchParams.limit;
104
+
const paramLimit = parseInt(limitParam || "");
105
+
return !isNaN(paramLimit) && paramLimit > 0 && paramLimit <= 100 ? paramLimit : DEFAULT_LIMIT;
106
+
};
107
const [recreate, setRecreate] = createSignal(false);
108
const [openDelete, setOpenDelete] = createSignal(false);
109
const [restoredFromCache, setRestoredFromCache] = createSignal(false);
···
119
setRecords(cached.records as AtprotoRecord[]);
120
setCursor(cached.cursor);
121
setReverse(cached.reverse);
122
+
setSearchParams({
123
+
reverse: cached.reverse ? "true" : undefined,
124
+
limit: cached.limit !== DEFAULT_LIMIT ? cached.limit.toString() : undefined,
125
+
});
126
setRestoredFromCache(true);
127
requestAnimationFrame(() => {
128
window.scrollTo(0, cached.scrollY);
···
140
cursor: cursor(),
141
scrollY: window.scrollY,
142
reverse: reverse(),
143
+
limit: limit(),
144
});
145
} else {
146
clearCollectionCache(cacheKey());
···
162
params: {
163
repo: did as ActorIdentifier,
164
collection: params.collection as `${string}.${string}.${string}`,
165
+
limit: limit(),
166
cursor: cursor(),
167
reverse: reverse(),
168
},
169
});
170
if (!res.ok) throw new Error(res.data.error);
171
+
setCursor(res.data.records.length < limit() ? undefined : res.data.cursor);
172
const tmpRecords: AtprotoRecord[] = [];
173
res.data.records.forEach((record) => {
174
const rkey = record.uri.split("/").pop()!;