Files
medusa-store/www/apps/api-reference/providers/version.tsx
Shahed Nasser bb87db8342 docs: prep for v2 documentation (#6710)
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.
2024-03-18 07:47:35 +00:00

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
}