This PR includes documentation that preps for v2 docs (but doesn't introduce new docs). _Note: The number of file changes in the PR is due to find-and-replace within the `references` which is unavoidable. Let me know if I should move it to another PR._ ## Changes - Change Medusa version in base OAS used for v2. - Fix to docblock generator related to not catching all path parameters. - Added typedoc plugin that generates ER Diagrams, which will be used specifically for data model references in commerce modules. - Changed OAS tool to output references in `www/apps/api-reference/specs-v2` directory when the `--v2` option is used. - Added a version switcher to the API reference to switch between V1 and V2. This switcher is enabled by an environment variable, so it won't be visible/usable at the moment. - Upgraded docusaurus to v3.0.1 - Added new Vale rules to ensure correct spelling of Medusa Admin and module names. - Added new components to the `docs-ui` package that will be used in future documentation changes.
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
"use client"
|
|
|
|
import { createContext, useContext, useEffect, useState } from "react"
|
|
import { Version } from "../types/openapi"
|
|
import { usePathname } from "next/navigation"
|
|
import { useIsBrowser } from "docs-ui"
|
|
|
|
type VersionContextType = {
|
|
version: Version
|
|
changeVersion: (value: Version) => void
|
|
}
|
|
|
|
const VersionContext = createContext<VersionContextType | null>(null)
|
|
|
|
type VersionProviderProps = {
|
|
children: React.ReactNode
|
|
}
|
|
|
|
const VersionProvider = ({ children }: VersionProviderProps) => {
|
|
const pathname = usePathname()
|
|
const [version, setVersion] = useState<Version>("1")
|
|
const isBrowser = useIsBrowser()
|
|
|
|
const changeVersion = (version: Version) => {
|
|
if (!isBrowser || process.env.NEXT_PUBLIC_VERSIONING !== "true") {
|
|
return
|
|
}
|
|
localStorage.setItem("api-version", version)
|
|
|
|
location.href = `${location.href.substring(
|
|
0,
|
|
location.href.indexOf(location.pathname)
|
|
)}${pathname}`
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (!isBrowser || process.env.NEXT_PUBLIC_VERSIONING !== "true") {
|
|
return
|
|
}
|
|
// try to load from localstorage
|
|
const versionInLocalStorage = localStorage.getItem("api-version") as Version
|
|
if (versionInLocalStorage) {
|
|
setVersion(versionInLocalStorage)
|
|
}
|
|
}, [isBrowser])
|
|
|
|
useEffect(() => {
|
|
if (!isBrowser || process.env.NEXT_PUBLIC_VERSIONING !== "true") {
|
|
return
|
|
}
|
|
const versionInLocalStorage = localStorage.getItem("api-version") as Version
|
|
if (version !== versionInLocalStorage) {
|
|
localStorage.setItem("api-version", version)
|
|
}
|
|
}, [version, isBrowser])
|
|
|
|
return (
|
|
<VersionContext.Provider value={{ version, changeVersion }}>
|
|
{children}
|
|
</VersionContext.Provider>
|
|
)
|
|
}
|
|
|
|
export default VersionProvider
|
|
|
|
export const useVersion = (): VersionContextType => {
|
|
const context = useContext(VersionContext)
|
|
|
|
if (!context) {
|
|
throw new Error("useVersion must be used inside an VersionProvider")
|
|
}
|
|
|
|
return context
|
|
}
|