Files
mattermost-mobile/app/screens/settings/display_theme/theme_thumbnail.tsx
Avinash Lingaloo bb02b1178a MM-39711 - Gekidou - Theme functionality (#6327)
* added chevron to menu item component

* starting with the skeleton

* starting with the skeleton

* starting with the skeleton

* starting with the skeleton

* remove extra line

* tested on tablets

* some corrections

* corrections as per review

* starting with notification skeleton

* attached notification settings to navigation

* added auto responder

* update translation

* update snapshot

* updated snapshot

* correction after review

* removed unnecessary screen

* refactored

* updated the testIDs

* Update Package.resolved

* refactor

* removed Mattermost as default server name

* fix ts

* refactored settings constant

* display settings skeleton

- pending: query for allowed themes

* added 'allowedThemes' query

* added section item

* mention screen skeleton in place

* added section and sectionItem component

* added reply section to the mention screen

* update i18n

* rename screens properly

* update i18n

* Refactored to MentionSettings component

* Refactored to ReplySettings component

* style clean up

* textTransform uppercase

* rename Section/SectionItem to Block/BlockItem

* added mobile push notif screen - push status section

* adding text to those two components

* correction following review

* added mobile push notification section

* added mobile push notification thread section

* style fix

* code fix

* code fix

* added skeleton for auto responder

* code clean up

* display theme skeleton

* display theme skeleton

* now using selected theme

* clean up code

* showing custom theme

* setTheme implemented

* code clean up

* some corrections

* Gekidou - Replace BlockItem with OptionItem (#6352)

* Replaced BlockItem component with OptionItem

* ui fix

* corrections from PR review

* code clean up

* correction from PR review

* fix - SettingsDisplay was wrongly removed from @screen/index

* fix dependencies

* corrections from peer review
2022-06-10 14:28:35 +04:00

276 lines
9.8 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react';
import Svg, {Rect, G, Circle} from 'react-native-svg';
import {changeOpacity} from '@utils/theme';
type ThemeThumbnailProps = {
borderColorBase: string;
borderColorMix: string;
theme: Theme;
width: number;
}
const ThemeThumbnail = ({borderColorBase, borderColorMix, theme, width}: ThemeThumbnailProps): JSX.Element => {
// the original height of the thumbnail
const baseWidth = 180;
const baseHeight = 134;
// calculate actual height proportionally to base size
const height = Math.round((width * baseHeight) / baseWidth);
// convenience values of various sub elements of the thumbnail
const sidebarWidth = 80;
const postsContainerWidth = 100;
const spacing = 8;
const rowHeight = 6;
const rowRadius = rowHeight / 2;
const postInputHeight = 10;
const postWidth = postsContainerWidth - (spacing * 2);
const channelNameWidth = sidebarWidth - (spacing * 3) - (rowHeight * 2);
const buttonWidth = postsContainerWidth - (spacing * 8);
return (
<Svg
width={width}
height={height}
viewBox={`-2 -2 ${baseWidth + 4} ${baseHeight + 4}`}
fill='none'
>
<Rect
fill={theme.centerChannelBg}
x='0'
y='0'
width={baseWidth}
height={baseHeight}
/>
<Rect
fill={theme.newMessageSeparator}
x={sidebarWidth}
y={(spacing * 4) + (rowHeight * 3)}
width={postsContainerWidth}
height='1'
/>
<Rect
fill={theme.buttonBg}
x={sidebarWidth + (spacing * 4)}
y={(spacing * 8) + (rowHeight * 6) + 1}
width={buttonWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
fill={changeOpacity(theme.centerChannelColor, 0.16)}
x={sidebarWidth + spacing}
y={(spacing * 9) + (rowHeight * 7) + 1}
width={postWidth}
height={postInputHeight}
rx={postInputHeight / 2}
/>
<Rect
fill={theme.centerChannelBg}
x={sidebarWidth + spacing + 1}
y={(spacing * 9) + (rowHeight * 7) + 2}
width={postWidth - 2}
height={postInputHeight - 2}
rx={(postInputHeight - 2) / 2}
/>
<G fill={changeOpacity(theme.centerChannelColor, 0.16)}>
<Rect
x={sidebarWidth + spacing}
y={spacing}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={sidebarWidth + spacing}
y={(spacing * 2) + rowHeight}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={sidebarWidth + spacing}
y={(spacing * 3) + (rowHeight * 2)}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={sidebarWidth + spacing}
y={(spacing * 5) + (rowHeight * 3) + 1}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={sidebarWidth + spacing}
y={(spacing * 6) + (rowHeight * 4) + 1}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={sidebarWidth + spacing}
y={(spacing * 7) + (rowHeight * 5) + 1}
width={postWidth}
height={rowHeight}
rx={rowRadius}
/>
</G>
<G>
<Rect
fill={theme.sidebarBg}
x='0'
y='0'
width={sidebarWidth}
height={baseHeight}
/>
<G fill={changeOpacity(theme.sidebarText, 0.48)}>
<Circle
cx={spacing + rowRadius}
cy={spacing + rowRadius}
r={rowRadius}
/>
<Circle
cx={spacing + rowRadius}
cy={(spacing * 2) + rowHeight + rowRadius}
r={rowRadius}
/>
<Circle
cx={spacing + rowRadius}
cy={(spacing * 4) + (rowHeight * 3) + rowRadius}
r={rowRadius}
/>
<Circle
cx={spacing + rowRadius}
cy={(spacing * 5) + (rowHeight * 4) + rowRadius}
r={rowRadius}
/>
<Circle
cx={spacing + rowRadius}
cy={(spacing * 7) + (rowHeight * 6) + rowRadius}
r={rowRadius}
/>
<Circle
cx={spacing + rowRadius}
cy={(spacing * 8) + (rowHeight * 7) + rowRadius}
r={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={spacing}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 2) + rowHeight}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 4) + (rowHeight * 3)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 5) + (rowHeight * 4)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 6) + (rowHeight * 5)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 7) + (rowHeight * 6)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 8) + (rowHeight * 7)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 9) + (rowHeight * 8)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
</G>
<Circle
fill={theme.onlineIndicator}
cx={spacing + rowRadius}
cy={(spacing * 3) + (rowHeight * 2) + rowRadius}
r={rowRadius}
/>
<Circle
fill={theme.awayIndicator}
cx={spacing + rowRadius}
cy={(spacing * 6) + (rowHeight * 5) + rowRadius}
r={rowRadius}
/>
<Circle
fill={theme.dndIndicator}
cx={spacing + rowRadius}
cy={(spacing * 9) + (rowHeight * 8) + rowRadius}
r={rowRadius}
/>
<G fill={theme.sidebarUnreadText}>
<Circle
cx={(spacing * 2.5) + rowHeight + channelNameWidth}
cy={(spacing * 3) + (rowHeight * 2) + rowRadius}
r={rowRadius}
/>
<Rect
x={(spacing * 1.5) + rowHeight}
y={(spacing * 3) + (rowHeight * 2)}
width={channelNameWidth}
height={rowHeight}
rx={rowRadius}
/>
</G>
</G>
<Rect
x='-1'
y='-1'
width={baseWidth + 2}
height={baseHeight + 2}
rx='4'
stroke={borderColorBase}
strokeWidth='2'
/>
<Rect
x='-1'
y='-1'
width={baseWidth + 2}
height={baseHeight + 2}
rx='4'
stroke={borderColorMix}
strokeWidth='2'
/>
</Svg>
);
};
export default ThemeThumbnail;