mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 23:47:12 +00:00
* feat: aws Integration skeleton UI (#6758) * feat: add AWS integration in the integrations list and redirect to the new Cloud Integration page * feat: cloud integration details page header (i.e. breadcrumb and get help button) UI * feat: hero section UI * refactor: extract Header and HeroSection components from CloudIntegrationPage * feat: services tab bar and sidebar UI * feat: cloud integration details services UI * refactor: group and extract cloud integration components to files * fix: set default active service to the first service in the list if no service is specified * feat: add NEW flag for AWS integration in the integrations list page * chore: overall improvements * chore: move cloud integration pages to /container * fix: hero section background * feat: aws Integration: Account setup basic UI and functionality (#6806) * feat: implement basic cloud account management UI in HeroSection * feat: aws Integration: Integrate now modal (#6807) * feat: implement basic cloud account management UI in HeroSection * feat: start working on integrate now modal UI * feat: integrate now modal UI * feat: integrate now modal states and json server API integration * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * feat: display error state if last_heartbeat_ts_ms is null even after 5 minutes * chore: update import path for regions data in useRegionSelection hook * chore: move hero section components inside the HeroSection/components * feat: create a reusable modal component * refactor: make the cloud account setup modal readable / DRYer * feat: aws Integration: Account settings modal (#6808) * feat: implement basic cloud account management UI in HeroSection * feat: start working on integrate now modal UI * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * feat: integrate now modal UI * feat: integrate now modal states and json server API integration * feat: account settings * feat: service status UI * refactor: make account settings modal more readable and overall improvements * feat: Get data from json server api data in service sections (#6809) * feat: implement basic cloud account management UI in HeroSection * feat: start working on integrate now modal UI * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * refactor: make the cloud account setup modal readable / DRYer * feat: integrate now modal states and json server API integration * refactor: make account settings modal more readable and overall improvements * feat: integrate now modal states and json server API integration * feat: display error state if last_heartbeat_ts_ms is null even after 5 minutes * feat: get the services list and details from json server API response * feat: update account actions to set accountId in URL query on initial account load * feat: configure service modal (#6814) * feat: implement basic cloud account management UI in HeroSection * feat: start working on integrate now modal UI * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * refactor: make the cloud account setup modal readable / DRYer * feat: integrate now modal states and json server API integration * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * feat: integrate now modal states and json server API integration * feat: get accounts from json-server API, and redirect Add new account to the integrations modal * feat: display error state if last_heartbeat_ts_ms is null even after 5 minutes * feat: account settings * feat: service status UI * feat: get the services list and details from json server API response * feat: update account actions to set accountId in URL query on initial account load * feat: configure service modal UI * feat: configure service modal functionality and API changes * feat: replace loading indicators with Spinner component in ServiceDetails and ServicesList * fix: make the configure service modal work * feat: light mode support and overall improvements to AWS integration page (#6817) * refactor: make the cloud account setup modal readable / DRYer * feat: integrate now modal states and json server API integration * refactor: make account settings modal more readable and overall improvements * fix: integrate now modal button improvements * feat: aws integrations light mode * refactor: overall improvements * refactor: define react query keys in constant * feat: services filter * feat: render service overview as markdown * feat: integrate AWS integration page API (#6851) * feat: replace json-server APIs with actual APIs * fix: add null checks and fix the issues * chore: remove the console.log * feat: temporarily hide AWS Integration from integrations list * chore: add optimized png * refactor: extract service filter types into an enum * chore: remove console.log * chore: remove duplicate files * refactor: move regions to utils * fix: get account id from url param * chore: address PR review comments * refactor: use the IntegrateNowFormSections inside RegionForm * chore: move integrations select inline style to a common class --------- Co-authored-by: Shaheer Kochai <ashaheerki@gmail.com>
117 lines
2.7 KiB
TypeScript
117 lines
2.7 KiB
TypeScript
import { theme as antdTheme } from 'antd';
|
|
import { ThemeConfig } from 'antd/es/config-provider/context';
|
|
import get from 'api/browser/localstorage/get';
|
|
import set from 'api/browser/localstorage/set';
|
|
import { LOCALSTORAGE } from 'constants/localStorage';
|
|
import {
|
|
createContext,
|
|
ReactNode,
|
|
useCallback,
|
|
useContext,
|
|
useMemo,
|
|
useState,
|
|
} from 'react';
|
|
|
|
import { THEME_MODE } from './constant';
|
|
|
|
export const ThemeContext = createContext({
|
|
theme: THEME_MODE.DARK,
|
|
toggleTheme: () => {},
|
|
});
|
|
|
|
export function ThemeProvider({ children }: ThemeProviderProps): JSX.Element {
|
|
const [theme, setTheme] = useState(get(LOCALSTORAGE.THEME) || THEME_MODE.DARK);
|
|
|
|
const toggleTheme = useCallback(() => {
|
|
if (theme === THEME_MODE.LIGHT) {
|
|
setTheme(THEME_MODE.DARK);
|
|
set(LOCALSTORAGE.THEME, THEME_MODE.DARK);
|
|
} else {
|
|
setTheme(THEME_MODE.LIGHT);
|
|
set(LOCALSTORAGE.THEME, THEME_MODE.LIGHT);
|
|
}
|
|
set(LOCALSTORAGE.THEME_ANALYTICS_V1, '');
|
|
}, [theme]);
|
|
|
|
const value = useMemo(
|
|
() => ({
|
|
theme,
|
|
toggleTheme,
|
|
}),
|
|
[theme, toggleTheme],
|
|
);
|
|
|
|
return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;
|
|
}
|
|
|
|
interface ThemeProviderProps {
|
|
children: ReactNode;
|
|
}
|
|
|
|
interface ThemeMode {
|
|
theme: string;
|
|
toggleTheme: () => void;
|
|
}
|
|
|
|
export const useThemeMode = (): ThemeMode => {
|
|
const { theme, toggleTheme } = useContext(ThemeContext);
|
|
|
|
return { theme, toggleTheme };
|
|
};
|
|
|
|
export const useIsDarkMode = (): boolean => {
|
|
const { theme } = useContext(ThemeContext);
|
|
|
|
return theme === THEME_MODE.DARK;
|
|
};
|
|
|
|
export const useThemeConfig = (): ThemeConfig => {
|
|
const isDarkMode = useIsDarkMode();
|
|
|
|
return {
|
|
algorithm: isDarkMode ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
|
|
token: {
|
|
borderRadius: 2,
|
|
borderRadiusLG: 2,
|
|
borderRadiusSM: 2,
|
|
borderRadiusXS: 2,
|
|
fontFamily: 'Inter',
|
|
fontSize: 13,
|
|
colorPrimary: '#4E74F8',
|
|
colorBgBase: isDarkMode ? '#0B0C0E' : '#fff',
|
|
colorBgContainer: isDarkMode ? '#121317' : '#fff',
|
|
colorLink: '#4E74F8',
|
|
colorPrimaryText: '#3F5ECC',
|
|
},
|
|
components: {
|
|
Dropdown: {
|
|
colorBgElevated: isDarkMode ? '#121317' : '#fff',
|
|
controlItemBgHover: isDarkMode ? '#1D212D' : '#fff',
|
|
colorText: isDarkMode ? '#C0C1C3' : '#121317',
|
|
fontSize: 12,
|
|
},
|
|
Select: {
|
|
colorBgElevated: isDarkMode ? '#121317' : '#fff',
|
|
controlItemBgHover: isDarkMode ? '#1D212D' : '#fff',
|
|
boxShadowSecondary: isDarkMode
|
|
? '4px 10px 16px 2px rgba(0, 0, 0, 0.30)'
|
|
: '#fff',
|
|
colorText: isDarkMode ? '#C0C1C3' : '#121317',
|
|
fontSize: 12,
|
|
},
|
|
Button: {
|
|
paddingInline: 12,
|
|
fontSize: 12,
|
|
},
|
|
Input: {
|
|
colorBorder: isDarkMode ? '#1D212D' : '#E9E9E9',
|
|
},
|
|
Breadcrumb: {
|
|
separatorMargin: 4,
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
export default useThemeMode;
|