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);
}}
/>
);
})}
);
};