From 75b4b1fdff1bf422f60b0889902f09d510a4f3cf Mon Sep 17 00:00:00 2001 From: Rishabh Date: Thu, 1 Jun 2023 15:55:53 +0530 Subject: [PATCH] Added site api data to settings context in admin-x refs https://github.com/TryGhost/Team/issues/3318 - pulls in site data via API in settings provider - adds site data to be accessible via settings context --- .../components/providers/SettingsProvider.tsx | 17 ++++++++++++----- .../src/hooks/useSettingGroup.tsx | 6 ++++-- ghost/admin-x-settings/src/types/api.ts | 11 +++++++++++ ghost/admin-x-settings/src/utils/api.ts | 13 ++----------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/ghost/admin-x-settings/src/components/providers/SettingsProvider.tsx b/ghost/admin-x-settings/src/components/providers/SettingsProvider.tsx index e7855da137..8b874a7e23 100644 --- a/ghost/admin-x-settings/src/components/providers/SettingsProvider.tsx +++ b/ghost/admin-x-settings/src/components/providers/SettingsProvider.tsx @@ -1,11 +1,12 @@ import React, {createContext, useCallback, useContext, useEffect, useState} from 'react'; import {ServicesContext} from './ServiceProvider'; -import {Setting} from '../../types/api'; +import {Setting, SiteData} from '../../types/api'; // Define the Settings Context interface SettingsContextProps { - settings: Setting[] | null; - saveSettings: (updatedSettings: Setting[]) => Promise; + settings: Setting[] | null; + saveSettings: (updatedSettings: Setting[]) => Promise; + siteData: SiteData | null; } interface SettingsProviderProps { @@ -14,20 +15,24 @@ interface SettingsProviderProps { const SettingsContext = createContext({ settings: null, - saveSettings: async () => {} + siteData: null, + saveSettings: async () => {}, }); // Create a Settings Provider component const SettingsProvider: React.FC = ({children}) => { const {api} = useContext(ServicesContext); const [settings, setSettings] = useState (null); + const [siteData, setSiteData] = useState (null); useEffect(() => { const fetchSettings = async (): Promise => { try { // Make an API call to fetch the settings const data = await api.settings.browse(); + const siteDataRes = await api.site.browse(); setSettings(data.settings); + setSiteData(siteDataRes.site); } catch (error) { // Log error in settings API } @@ -50,7 +55,9 @@ const SettingsProvider: React.FC = ({children}) => { // Provide the settings and the saveSettings function to the children components return ( - + {children} ); diff --git a/ghost/admin-x-settings/src/hooks/useSettingGroup.tsx b/ghost/admin-x-settings/src/hooks/useSettingGroup.tsx index 139bb0bc9b..30b1aed3f3 100644 --- a/ghost/admin-x-settings/src/hooks/useSettingGroup.tsx +++ b/ghost/admin-x-settings/src/hooks/useSettingGroup.tsx @@ -1,6 +1,6 @@ import React, {useEffect} from 'react'; import {SaveState, TSettingGroupStates} from '../admin-x-ds/settings/SettingGroup'; -import {Setting, SettingValue} from '../types/api'; +import {Setting, SettingValue, SiteData} from '../types/api'; import {SettingsContext} from '../components/providers/SettingsProvider'; import {useContext, useReducer, useRef, useState} from 'react'; @@ -11,6 +11,7 @@ interface LocalSetting extends Setting { export interface SettingGroupHook { currentState: TSettingGroupStates; saveState: SaveState; + siteData: SiteData | null; focusRef: React.RefObject; handleSave: () => void; handleCancel: () => void; @@ -59,7 +60,7 @@ const useSettingGroup = (): SettingGroupHook => { const focusRef = useRef(null); // get the settings and saveSettings function from the Settings Context - const {settings, saveSettings} = useContext(SettingsContext) || {}; + const {siteData, settings, saveSettings} = useContext(SettingsContext) || {}; // create a local state to store the settings const [localSettings, dispatch] = useReducer(settingsReducer, settings || []); @@ -140,6 +141,7 @@ const useSettingGroup = (): SettingGroupHook => { currentState, saveState, focusRef, + siteData, handleSave, handleCancel, updateSetting, diff --git a/ghost/admin-x-settings/src/types/api.ts b/ghost/admin-x-settings/src/types/api.ts index 89f6265b29..620ba53305 100644 --- a/ghost/admin-x-settings/src/types/api.ts +++ b/ghost/admin-x-settings/src/types/api.ts @@ -44,3 +44,14 @@ export type UserRole = { created_at: string; updated_at: string; }; + +export type SiteData = { + title: string; + description: string; + logo: string; + icon: string; + accent_color: string; + url: string; + locale: string; + version: string; +}; \ No newline at end of file diff --git a/ghost/admin-x-settings/src/utils/api.ts b/ghost/admin-x-settings/src/utils/api.ts index 54d9ce8483..3a37365748 100644 --- a/ghost/admin-x-settings/src/utils/api.ts +++ b/ghost/admin-x-settings/src/utils/api.ts @@ -1,4 +1,4 @@ -import {Setting, User, UserRole} from '../types/api'; +import {Setting, SiteData, User, UserRole} from '../types/api'; import {getGhostPaths} from './helpers'; interface Meta { @@ -28,16 +28,7 @@ export interface RolesResponseType { } export interface SiteResponseType { - site: { - title: string; - description: string; - logo: string; - icon: string; - accent_color: string; - url: string; - locale: string; - version: string; - }; + site: SiteData; } export interface ImagesResponseType {