cleanup stuff
This commit is contained in:
parent
e8ba6a63ab
commit
c47b57e4bf
@ -1,4 +1,7 @@
|
|||||||
.footer-ios {
|
@supports (-webkit-touch-callout: none) {
|
||||||
|
/* CSS specific to iOS devices */
|
||||||
|
.footer-ios {
|
||||||
margin-bottom: var(--safe-area-bottom);
|
margin-bottom: var(--safe-area-bottom);
|
||||||
padding-bottom: var(--safe-area-bottom);
|
padding-bottom: var(--safe-area-bottom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ const UpdatePassword: FunctionComponent = () => {
|
|||||||
tabIndex={3}
|
tabIndex={3}
|
||||||
error={actionData?.errors?.currentPassword}
|
error={actionData?.errors?.currentPassword}
|
||||||
disabled={isSubmitting}
|
disabled={isSubmitting}
|
||||||
|
autoComplete="current-password"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<LabeledTextField
|
<LabeledTextField
|
||||||
@ -56,6 +57,7 @@ const UpdatePassword: FunctionComponent = () => {
|
|||||||
tabIndex={4}
|
tabIndex={4}
|
||||||
error={actionData?.errors?.newPassword}
|
error={actionData?.errors?.newPassword}
|
||||||
disabled={isSubmitting}
|
disabled={isSubmitting}
|
||||||
|
autoComplete="new-password"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<input type="hidden" name="_action" value="changePassword" />
|
<input type="hidden" name="_action" value="changePassword" />
|
||||||
|
@ -54,94 +54,6 @@ export function cacheAsset(event: FetchEvent): Promise<Response> {
|
|||||||
const lastTimeRevalidated: Record<string, number> = {};
|
const lastTimeRevalidated: Record<string, number> = {};
|
||||||
|
|
||||||
export function cacheLoaderData(event: FetchEvent): Promise<Response> {
|
export function cacheLoaderData(event: FetchEvent): Promise<Response> {
|
||||||
/*if (searchParams.get("_refresh") === "groot") {
|
|
||||||
console.debug("Serving refreshed data from network", url.pathname + url.search);
|
|
||||||
return event.preloadResponse
|
|
||||||
.then((preloadedResponse?: Response) => preloadedResponse || fetch(event.request.clone()))
|
|
||||||
.then((response) =>
|
|
||||||
caches
|
|
||||||
.open(DATA_CACHE)
|
|
||||||
.then((cache) => cache.put(event.request, response.clone()))
|
|
||||||
.then(() =>
|
|
||||||
response
|
|
||||||
.clone()
|
|
||||||
.json()
|
|
||||||
.then(({ json }) => console.debug("ddd", json?.phoneCalls?.[0]?.recipient)),
|
|
||||||
)
|
|
||||||
.then(() => {
|
|
||||||
console.debug("returned latest", Date.now());
|
|
||||||
return response;
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
.catch(() => {
|
|
||||||
console.debug("Serving data from network failed, falling back to cache", url.pathname + url.search);
|
|
||||||
return caches.match(url).then((response) => {
|
|
||||||
if (!response) {
|
|
||||||
return json(
|
|
||||||
{ message: "Network Error" },
|
|
||||||
{
|
|
||||||
status: 500,
|
|
||||||
headers: { "X-Remix-Catch": "yes", "X-Remix-Worker": "yes" },
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
response.headers.set("X-Remix-Worker", "yes");
|
|
||||||
return response;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*return caches.match(event.request, { cacheName: DATA_CACHE }).then((cachedResponse) => {
|
|
||||||
console.debug(`Serving data from ${cachedResponse ? "cache" : "network"}`, url.pathname + url.search);
|
|
||||||
cachedResponse?.headers.set("X-Remix-Worker", "yes");
|
|
||||||
|
|
||||||
const fetchPromise = event.preloadResponse
|
|
||||||
.then((preloadedResponse?: Response) => preloadedResponse || fetch(event.request.clone()))
|
|
||||||
.then((response) =>
|
|
||||||
caches.open(DATA_CACHE).then((cache) => {
|
|
||||||
response.text().then(rrr => console.log(response.ok, url.pathname + url.search, rrr));
|
|
||||||
if (!response.ok) {
|
|
||||||
return json(
|
|
||||||
{ message: "Network Error" },
|
|
||||||
{
|
|
||||||
status: 500,
|
|
||||||
headers: { "X-Remix-Catch": "yes", "X-Remix-Worker": "yes" },
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
cache.put(event.request, response.clone());
|
|
||||||
const timestamp = lastTimeResponded[url.pathname + url.search];
|
|
||||||
console.log("timestamp - Date.now()", Date.now() - timestamp);
|
|
||||||
|
|
||||||
/!*if (timestamp && (Date.now() - timestamp > 10 * 1000)) {
|
|
||||||
console.debug("update UI with latest", Date.now());
|
|
||||||
// we already returned the cached response
|
|
||||||
// we need to update the UI with the latest data
|
|
||||||
const message = {
|
|
||||||
type: "revalidateLoaderData",
|
|
||||||
// href: url.pathname + "?_refresh=groot",
|
|
||||||
};
|
|
||||||
const channel = new BroadcastChannel("sw-messages");
|
|
||||||
channel.postMessage(JSON.stringify(message));
|
|
||||||
}*!/
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (cachedResponse) {
|
|
||||||
console.debug("returned cached", Date.now());
|
|
||||||
lastTimeResponded[url.pathname + url.search] = Date.now();
|
|
||||||
}
|
|
||||||
return fetchPromise.then(response => {
|
|
||||||
console.debug("returned networked", Date.now());
|
|
||||||
lastTimeResponded[url.pathname + url.search] = Date.now();
|
|
||||||
return response;
|
|
||||||
})
|
|
||||||
});*/
|
|
||||||
|
|
||||||
const url = new URL(event.request.url);
|
const url = new URL(event.request.url);
|
||||||
const path = url.pathname + url.search;
|
const path = url.pathname + url.search;
|
||||||
|
|
||||||
@ -158,8 +70,11 @@ export function cacheLoaderData(event: FetchEvent): Promise<Response> {
|
|||||||
return cachedResponse;
|
return cachedResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const request = cachedResponse
|
||||||
|
? new Request(event.request.clone(), { cache: "reload" })
|
||||||
|
: event.request.clone();
|
||||||
const fetchPromise = event.preloadResponse
|
const fetchPromise = event.preloadResponse
|
||||||
.then((preloadedResponse?: Response) => preloadedResponse || fetch(event.request.clone()))
|
.then((preloadedResponse?: Response) => preloadedResponse || fetch(request))
|
||||||
.then((response) =>
|
.then((response) =>
|
||||||
caches.open(DATA_CACHE).then((cache) => {
|
caches.open(DATA_CACHE).then((cache) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
@ -180,15 +95,16 @@ export function cacheLoaderData(event: FetchEvent): Promise<Response> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// otherwise, cache the new response
|
||||||
|
await cache.put(event.request, clonedResponse.clone());
|
||||||
|
|
||||||
if (await areResponsesEqual(cached.clone(), clonedResponse.clone())) {
|
if (await areResponsesEqual(cached.clone(), clonedResponse.clone())) {
|
||||||
// if what we have in the cache is up-to-date, we don't have to do anything
|
// if what we have in the cache is up-to-date, we don't have to do anything
|
||||||
console.debug("Responses are the same, no need to revalidate", path);
|
console.debug("Responses are the same, no need to revalidate", path);
|
||||||
|
lastTimeRevalidated[path] = Date.now();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise, cache the new response
|
|
||||||
await cache.put(event.request, clonedResponse.clone());
|
|
||||||
|
|
||||||
if (cachedResponse) {
|
if (cachedResponse) {
|
||||||
// and if we had returned a cached response
|
// and if we had returned a cached response
|
||||||
// tell the UI to fetch the latest data
|
// tell the UI to fetch the latest data
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import type { AssetsManifest } from "@remix-run/react/entry";
|
import type { AssetsManifest } from "@remix-run/react/entry";
|
||||||
import type { EntryRoute } from "@remix-run/react/routes";
|
|
||||||
|
|
||||||
import { ASSET_CACHE } from "./cache-utils";
|
import { ASSET_CACHE } from "./cache-utils";
|
||||||
|
|
||||||
@ -15,8 +14,6 @@ async function handleSyncRemixManifest(event: ExtendableMessageEvent) {
|
|||||||
console.debug("Caching routes modules");
|
console.debug("Caching routes modules");
|
||||||
|
|
||||||
await cacheStaticAssets(event.data.manifest);
|
await cacheStaticAssets(event.data.manifest);
|
||||||
|
|
||||||
// await cacheConversations(manifest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function cacheStaticAssets(manifest: AssetsManifest) {
|
async function cacheStaticAssets(manifest: AssetsManifest) {
|
||||||
@ -51,60 +48,3 @@ async function cacheStaticAssets(manifest: AssetsManifest) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*async function cacheConversations(manifest: AssetsManifest) {
|
|
||||||
console.log("caching conversation");
|
|
||||||
const cachePromises: Map<string, Promise<void>> = new Map();
|
|
||||||
const dataCache = await caches.open(DATA_CACHE);
|
|
||||||
const messagesResponse = await getMessagesResponse();
|
|
||||||
if (!messagesResponse) {
|
|
||||||
console.log("rip never happened");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const { json } = await messagesResponse.json();
|
|
||||||
const recipients = Object.keys(json.conversations);
|
|
||||||
recipients.forEach((recipient) => cacheConversation(recipient));
|
|
||||||
|
|
||||||
await Promise.all(cachePromises.values());
|
|
||||||
|
|
||||||
function getMessagesResponse() {
|
|
||||||
const route = manifest.routes["routes/__app/messages"];
|
|
||||||
const pathname = getPathname(route, manifest);
|
|
||||||
const params = new URLSearchParams({ _data: route.id });
|
|
||||||
const search = `?${params.toString()}`;
|
|
||||||
const url = pathname + search;
|
|
||||||
return dataCache.match(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
function cacheConversation(recipient: string) {
|
|
||||||
const route = manifest.routes["routes/__app/messages.$recipient"];
|
|
||||||
const pathname = getPathname(route, manifest).replace(":recipient", encodeURIComponent(recipient));
|
|
||||||
const params = new URLSearchParams({ _data: route.id });
|
|
||||||
const search = `?${params.toString()}`;
|
|
||||||
const url = pathname + search;
|
|
||||||
if (!cachePromises.has(url)) {
|
|
||||||
console.debug("Caching conversation with", recipient);
|
|
||||||
cachePromises.set(
|
|
||||||
url,
|
|
||||||
dataCache.add(url).catch((error) => {
|
|
||||||
console.debug(`Failed to cache data for ${url}:`, error);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
function getPathname(route: EntryRoute, manifest: AssetsManifest) {
|
|
||||||
let pathname = "";
|
|
||||||
if (route.path && route.path.length > 0) {
|
|
||||||
pathname = "/" + route.path;
|
|
||||||
}
|
|
||||||
if (route.parentId) {
|
|
||||||
const parentPath = getPathname(manifest.routes[route.parentId], manifest);
|
|
||||||
if (parentPath) {
|
|
||||||
pathname = parentPath + pathname;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pathname;
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user