mon-entreprise/publicodes-react/source/index.tsx

64 lines
1.5 KiB
TypeScript

import React, { useEffect } from 'react'
import { Route } from 'react-router-dom'
import Engine, { utils } from 'publicodes'
import i18n from 'i18next'
import { BasepathContext, EngineContext } from './contexts'
import RulePage from './rule/RulePage'
const { decodeRuleName, encodeRuleName } = utils
export { RuleLink } from './RuleLink'
export { default as Explanation } from './Explanation'
import References from './rule/References'
export { References }
type DocumentationProps = {
documentationPath: string
engine: Engine
language: 'fr' | 'en'
}
export function Documentation({
documentationPath,
engine,
language = 'fr',
}: DocumentationProps) {
useEffect(() => {
if (language !== i18n.language) {
i18n.changeLanguage(language)
}
}, [language])
return (
<EngineContext.Provider value={engine}>
<BasepathContext.Provider value={documentationPath}>
<Route
path={documentationPath + '/:name+'}
render={({ match }) => {
return (
<RulePage
dottedName={decodeRuleName(match.params.name)}
engine={engine}
language={'fr'}
/>
)
}}
/>
</BasepathContext.Provider>
</EngineContext.Provider>
)
}
export function getDocumentationSiteMap({ engine, documentationPath }) {
const parsedRules = engine.getParsedRules()
return Object.fromEntries(
Object.keys(parsedRules)
// .filter(dottedName =>
// ruleWithDedicatedDocumentationPage(parsedRules[dottedName])
// )
.map((dottedName) => [
documentationPath + '/' + encodeRuleName(dottedName),
dottedName,
])
)
}