import React, { useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; import { switchThemeTo } from '../../session/utils/Theme'; import { darkColorReceivedMessageBg, darkColorSentMessageBg, getPrimaryColors, lightColorReceivedMessageBg, lightColorSentMessageBg, OceanBlueDark, OceanBlueLight, PrimaryColorIds, } from '../../state/ducks/SessionTheme'; import { ThemeStateType } from '../../state/ducks/theme'; import { getTheme } from '../../state/selectors/theme'; import { SessionRadio, SessionRadioPrimaryColors } from '../basic/SessionRadio'; import { SpacerLG, SpacerMD } from '../basic/Text'; import { StyledDescriptionSettingsItem, StyledTitleSettingsItem } from './SessionSettingListItem'; // tslint:disable: use-simple-attributes const StyledSwitcherContainer = styled.div` font-size: var(--font-size-md); padding: var(--margins-lg); background: var(--color-cell-background); `; const ThemeContainer = styled.button` background: var(--color-conversation-list); border: 1px solid var(--color-clickable-hovered); border-radius: 8px; padding: var(--margins-sm); display: flex; align-items: center; width: 285px; height: 90px; transition: var(--default-duration); :hover { background: var(--color-clickable-hovered); } `; const ThemesContainer = styled.div` display: flex; flex-wrap: wrap; gap: var(--margins-lg); `; type ThemeType = { id: ThemeStateType; title: string; style: StyleSessionSwitcher; }; type StyleSessionSwitcher = { background: string; border: string; receivedBg: string; sentBg: string; }; const StyledPreview = styled.svg` max-height: 100%; `; const ThemePreview = (props: { style: StyleSessionSwitcher }) => { return ( ); }; const Themes = (props: { selectedAccent?: PrimaryColorIds }) => { const { selectedAccent } = props; // I am not too sure if we want to override the accent color on the Theme switcher of not. // If we do, we also need a way to rollback to the default, I guess? const overridenAccent = selectedAccent ? getPrimaryColors().find(e => { return e.id === selectedAccent; })?.color : undefined; const themes: Array = [ { id: 'dark', title: window.i18n('classicDarkThemeTitle'), style: { background: '#000000', border: '#414141', receivedBg: darkColorReceivedMessageBg, sentBg: overridenAccent || darkColorSentMessageBg, }, }, { id: 'light', title: window.i18n('classicLightThemeTitle'), style: { background: '#ffffff', border: '#414141', receivedBg: lightColorReceivedMessageBg, sentBg: overridenAccent || lightColorSentMessageBg, }, }, { id: 'ocean-dark', title: window.i18n('oceanDarkThemeTitle'), style: { background: OceanBlueDark.background, border: OceanBlueDark.border, receivedBg: OceanBlueDark.received, sentBg: overridenAccent || OceanBlueDark.sent, }, }, { id: 'ocean-light', title: window.i18n('oceanLightThemeTitle'), style: { background: OceanBlueLight.background, border: OceanBlueLight.border, receivedBg: OceanBlueLight.received, sentBg: overridenAccent || OceanBlueLight.sent, }, }, ]; const selectedTheme = useSelector(getTheme); const dispatch = useDispatch(); return ( <> {themes.map(theme => { function onSelectTheme() { void switchThemeTo(theme.id, dispatch); } return ( {theme.title} ); })} ); }; export const SettingsThemeSwitcher = () => { //FIXME store that value somewhere in the theme object const [selectedAccent, setSelectedAccent] = useState(undefined); return ( {window.i18n('themesSettingTitle')} {window.i18n('primaryColor')} {getPrimaryColors().map(item => { return ( { setSelectedAccent(item.id); }} /> ); })} ); };