ddb16a0b by Adam Heath

Add a getUrl to remote content, that looks to see if the url matches a

pre-configured site, and redirects the call to that.  If nothing
matches, it falls back on 'default'.
1 parent 8fe5527a
...@@ -21,6 +21,7 @@ export const configSlice = createSlice({ ...@@ -21,6 +21,7 @@ export const configSlice = createSlice({
21 } 21 }
22 }, 22 },
23 selectors: { 23 selectors: {
24 getSites: (state) => Object.keys(state.sites).filter(site => site !== 'default'),
24 getSiteBaseUrl: (state, name) => state.sites?.[ name ]?.baseUrl, 25 getSiteBaseUrl: (state, name) => state.sites?.[ name ]?.baseUrl,
25 }, 26 },
26 }) 27 })
...@@ -73,6 +74,18 @@ export const store = configureStore({ ...@@ -73,6 +74,18 @@ export const store = configureStore({
73 ]), 74 ]),
74 }) 75 })
75 76
77 export const getUrl = async(url: string) => {
78 const state = store.getState()
79 const sites = configSlice.selectors.getSites(state)
80 for (const site of sites) {
81 const baseUrl = configSlice.selectors.getSiteBaseUrl(state, site)
82 if (url.startsWith(baseUrl)) {
83 return getSitePage(site, url.substring(baseUrl.length + 1))
84 }
85 }
86 return getSitePage('default', url)
87 }
88
76 export const getSitePage = async (site: string, page: string) => { 89 export const getSitePage = async (site: string, page: string) => {
77 const result = await store.dispatch(sitePageSlice.endpoints.getPage.initiate({ site, page })) 90 const result = await store.dispatch(sitePageSlice.endpoints.getPage.initiate({ site, page }))
78 return result 91 return result
......