11import { contentUIDecorators , ContentLeafsProvider } from '@content-ui/react/ContentLeafsContext'
2+ import { Validator } from '@ui-schema/json-schema'
23import React from 'react'
34import { StyledEngineProvider , ThemeProvider } from '@mui/material/styles'
45import CssBaseline from '@mui/material/CssBaseline'
@@ -9,18 +10,26 @@ import { initReactI18next, useTranslation } from 'react-i18next'
910import { BrowserRouter } from 'react-router-dom'
1011import resourcesToBackend from 'i18next-resources-to-backend'
1112import CircularProgress from '@mui/material/CircularProgress'
12- import { UIMetaProvider } from '@ui-schema/ui-schema /UIMeta'
13+ import { UIMetaProvider } from '@ui-schema/react /UIMeta'
1314import { SnackProvider } from 'react-use-snack/SnackProvider'
1415import { browserT } from './t.js'
15- import { getCustomWidgets } from './components/UISchema.js'
16+ import { getCustomBinding } from './components/UISchema.js'
1617import { useViewSettings } from './lib/ViewSettings.js'
1718import I18NextChainedBackend from 'i18next-chained-backend/dist/esm/i18nextChainedBackend.js'
1819import I18NextLocalStorageBackend from 'i18next-localstorage-backend'
1920import I18nextBrowserLanguageDetector from 'i18next-browser-languagedetector'
20- import { UIApiProvider } from '@ui-schema/ui-schema/UIApi'
2121import { LocalizationProvider } from '@mui/x-date-pickers'
2222import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'
2323import { contentUIMapping } from './components/ContentUI.js'
24+ import { standardValidators } from '@ui-schema/json-schema/StandardValidators'
25+ import { requiredValidatorLegacy } from '@ui-schema/json-schema/Validators/RequiredValidatorLegacy'
26+
27+ const validator = Validator ( [
28+ ...standardValidators ,
29+ requiredValidatorLegacy , // opinionated validator, HTML-like, empty-string = invalid
30+ ] )
31+
32+ const validate = validator . validate
2433
2534const themes = customTheme ( )
2635
7079 } ,
7180 } )
7281
73- const customWidgets = getCustomWidgets ( )
74-
75- const loadSchema = ( url : string ) => {
76- return fetch ( url ) . then ( r => r . json ( ) )
77- }
82+ const customBinding = getCustomBinding ( )
7883
7984export const App : React . ComponentType < { } > = ( ) => {
8085 const { theme, lang} = useViewSettings ( )
@@ -105,19 +110,17 @@ export const App: React.ComponentType<{}> = () => {
105110 < BrowserRouter >
106111 < React . Suspense fallback = { < CircularProgress /> } >
107112 < SnackProvider >
108- < UIApiProvider
109- loadSchema = { loadSchema }
110- /* disables localStorage cache of e.g. loaded schemas */
111- noCache
112- >
113- < LocalizationProvider dateAdapter = { AdapterMoment } >
114- < UIMetaProvider t = { browserT } widgets = { customWidgets } >
115- < ContentLeafsProvider deco = { contentUIDecorators } renderMap = { contentUIMapping } >
116- < Layout />
117- </ ContentLeafsProvider >
118- </ UIMetaProvider >
119- </ LocalizationProvider >
120- </ UIApiProvider >
113+ < LocalizationProvider dateAdapter = { AdapterMoment } >
114+ < UIMetaProvider
115+ t = { browserT }
116+ binding = { customBinding }
117+ validate = { validate }
118+ >
119+ < ContentLeafsProvider deco = { contentUIDecorators } renderMap = { contentUIMapping } >
120+ < Layout />
121+ </ ContentLeafsProvider >
122+ </ UIMetaProvider >
123+ </ LocalizationProvider >
121124 </ SnackProvider >
122125 </ React . Suspense >
123126 </ BrowserRouter >
0 commit comments