458e87da by Adam Heath

Add fetchUrl/externalUrl settings for configured sites.

1 parent 519df665
...@@ -7,6 +7,8 @@ import { parseHtml } from './html.ts' ...@@ -7,6 +7,8 @@ import { parseHtml } from './html.ts'
7 interface SiteConfig { 7 interface SiteConfig {
8 name: string, 8 name: string,
9 baseUrl: string, 9 baseUrl: string,
10 fetchUrl: string,
11 externalUrl: string,
10 } 12 }
11 13
12 export const configSlice = createSlice({ 14 export const configSlice = createSlice({
...@@ -15,14 +17,25 @@ export const configSlice = createSlice({ ...@@ -15,14 +17,25 @@ export const configSlice = createSlice({
15 sites: {}, 17 sites: {},
16 }, 18 },
17 reducers: { 19 reducers: {
18 setSiteConfig(state, { payload: { name, baseUrl } }) { 20 setSiteConfig(state, { payload: { name, baseUrl, fetchUrl, externalUrl } }) {
19 if (!state.sites[ name ]) state.sites[ name ] = {} 21 if (!state.sites[ name ]) state.sites[ name ] = {}
20 Object.assign(state.sites[ name ], { baseUrl }) 22 Object.assign(state.sites[ name ], { baseUrl, fetchUrl, externalUrl })
21 } 23 }
22 }, 24 },
23 selectors: { 25 selectors: {
24 getSites: (state) => Object.keys(state.sites).filter(site => site !== 'default'), 26 getSites: (state) => Object.keys(state.sites).filter(site => site !== 'default'),
25 getSiteBaseUrl: (state, name) => state.sites?.[ name ]?.baseUrl, 27 getSiteBaseUrl: (state, name) => {
28 const { sites: { [ name ]: siteConfig = {} } = {} } = state
29 return siteConfig.baseUrl
30 },
31 getSiteFetchUrl: (state, name) => {
32 const { sites: { [ name ]: siteConfig = {} } = {} } = state
33 return siteConfig.fetchUrl || siteConfig.baseUrl
34 },
35 getSiteExternalUrl: (state, name) => {
36 const { sites: { [ name ]: siteConfig = {} } = {} } = state
37 return siteConfig.externalUrl || siteConfig.baseUrl
38 },
26 }, 39 },
27 }) 40 })
28 41
...@@ -31,8 +44,8 @@ const baseQuery = fetchBaseQuery() ...@@ -31,8 +44,8 @@ const baseQuery = fetchBaseQuery()
31 44
32 const siteBaseQuery = async (args, api, options) => { 45 const siteBaseQuery = async (args, api, options) => {
33 const { site, url } = args 46 const { site, url } = args
34 const baseUrl = getSiteBaseUrl(site) || '' 47 const fetchUrl = getSiteFetchUrl(site) || ''
35 return baseQuery({ ...args, url: `${baseUrl}${url}` }, api, options) 48 return baseQuery({ ...args, url: `${fetchUrl}${url}` }, api, options)
36 } 49 }
37 50
38 export const sitePageSlice = createApi({ 51 export const sitePageSlice = createApi({
...@@ -99,6 +112,14 @@ export const getSiteBaseUrl = (name: string): string => { ...@@ -99,6 +112,14 @@ export const getSiteBaseUrl = (name: string): string => {
99 return configSlice.selectors.getSiteBaseUrl(store.getState(), name) 112 return configSlice.selectors.getSiteBaseUrl(store.getState(), name)
100 } 113 }
101 114
115 export const getSiteFetchUrl = (name: string): string => {
116 return configSlice.selectors.getSiteFetchUrl(store.getState(), name)
117 }
118
119 export const getSiteExternalUrl = (name: string): string => {
120 return configSlice.selectors.getSiteExternalUrl(store.getState(), name)
121 }
122
102 export const clearAll = () => { 123 export const clearAll = () => {
103 return store.dispatch(sitePageSlice.util.invalidateTags([ 'Page' ])) 124 return store.dispatch(sitePageSlice.util.invalidateTags([ 'Page' ]))
104 } 125 }
......