Merged in chore/next15 (pull request #1999)

chore (SW-834): Upgrade to Next 15

* wip: apply codemod and upgrade swc plugin

* wip: design-system to react 19, fix issues from async (search)params

* wip: fix remaining issues from codemod

serverClient is now async because context use headers()
getLang is now async because it uses headers()

* Minor cleanup

* Inline react-material-symbols package

Package is seemingly not maintained any more and doesn't support
React 19. This copies the package source into `design-system`,
makes the necessary changes for 19 and export it for others to use.

* Fix missing awaits

* Disable modal exit animations

Enabling modal exit animations via isExiting prop is causing
modals to be rendered in "hidden" state and never unmount.
Seems to be an issue with react-aria-components,
see https://github.com/adobe/react-spectrum/issues/7563.
Can probably be fixed by rewriting to a solution similar to
https://react-spectrum.adobe.com/react-aria/examples/framer-modal-sheet.html

* Remove unstable cache implementation and use in memory cache locally

* Fix ref type in SelectFilter

* Use cloneElement to add key prop to element


Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-06-02 11:11:50 +00:00
parent 47abd7d5ef
commit cbf9e7b7c2
188 changed files with 4883 additions and 1023 deletions

View File

@@ -1,43 +0,0 @@
import { revalidateTag, unstable_cache } from "next/cache"
import {
type CacheTime,
type DataCache,
getCacheTimeInSeconds,
} from "@/services/dataCache/Cache"
import {
type CacheOrGetOptions,
shouldGetFromCache,
} from "../../cacheOrGetOptions"
import { cacheLogger } from "../../logger"
export const cacheOrGet: DataCache["cacheOrGet"] = async <T>(
key: string | string[],
callback: () => Promise<T>,
ttl: CacheTime,
opts?: CacheOrGetOptions
): Promise<T> => {
if (!Array.isArray(key)) {
key = [key]
}
const perf = performance.now()
if (!shouldGetFromCache(opts)) {
revalidateTag(key[0])
}
const res = await unstable_cache(callback, key, {
revalidate: getCacheTimeInSeconds(ttl),
tags: key,
})()
const size = JSON.stringify(res).length / (1024 * 1024)
cacheLogger.debug(`'${key}': ${size}mb`)
if (size > 5) {
cacheLogger.warn(`'${key}' is larger than 5mb!`)
}
cacheLogger.debug(`'${key}' took ${(performance.now() - perf).toFixed(2)}ms`)
return res
}

View File

@@ -1,5 +0,0 @@
import { revalidateTag } from "next/cache"
export async function deleteKey(key: string) {
revalidateTag(key)
}

View File

@@ -1,14 +0,0 @@
import type { DataCache } from "@/services/dataCache/Cache"
/**
* This function is not implemented for unstable_cache due to underlying cache implementation.
* @see cacheOrGet
* @param _key
* @returns
*/
export const get: DataCache["get"] = async <T>(
_key: string
): Promise<T | undefined> => {
console.warn("UnstableCache.get is not implemented, use cacheOrGet")
return undefined
}

View File

@@ -1,10 +0,0 @@
import { cacheOrGet } from "./cacheOrGet"
import { deleteKey } from "./deleteKey"
import { get } from "./get"
import { set } from "./set"
import type { DataCache } from "@/services/dataCache/Cache"
export async function createUnstableCache(): Promise<DataCache> {
return { type: "unstable-cache", cacheOrGet, deleteKey, get, set }
}

View File

@@ -1,15 +0,0 @@
import { type CacheTime, type DataCache } from "@/services/dataCache/Cache"
/**
* This function is not implemented for unstable_cache due to underlying cache implementation.
* @see cacheOrGet
* @param _key
* @returns
*/
export const set: DataCache["set"] = async <T>(
_key: string,
_data: T,
_ttl: CacheTime
): Promise<void> => {
console.warn("UnstableCache.set is not implemented, use cacheOrGet")
}

View File

@@ -1,17 +1,7 @@
import { isEdge } from "@/utils/isEdge"
import { createInMemoryCache } from "./InMemoryCache"
import { createUnstableCache } from "./UnstableCache"
import type { DataCache } from "@/services/dataCache/Cache"
export function createMemoryCache(): Promise<DataCache> {
if (isEdge) {
/**
* unstable_cache is not available on the edge runtime
*/
return createInMemoryCache()
}
return createUnstableCache()
return createInMemoryCache()
}