forked from Ivasoft/mattermost-mobile
* modifying setting option * navigates to email screen * UI construction [in progress] * hooking up withObservables * email settings - need to save now * adding a bit of paddings * setting initial value * Update notification_email.tsx * UI Polish - main setting screen * UI Polish - Mention * UI Polish - Notification main screen * code clean up * code clean up * UI Polish Notification * UI Polish * code clean up * UI Polish - OOO * fix observable for email interval * fix ooo * fix ooo * added setting_row_label component * further clean up * UI Polish - Display - [ IN PROGRESS ] * UI Polish - Display - [ IN PROGRESS ] * UI Polish - Timezone Select [ IN PROGRESS ] * Update index.test.tsx.snap * Update app/screens/settings/notification_email/notification_email.tsx Co-authored-by: Daniel Espino García <larkox@gmail.com> * refactor after review * update option_item so that action can accept type React.Dispatch<React.SetStateAction Co-authored-by: Daniel Espino García <larkox@gmail.com>
88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {MessageDescriptor} from '@formatjs/intl/src/types';
|
|
import React from 'react';
|
|
import {StyleProp, TextStyle, View, ViewStyle} from 'react-native';
|
|
|
|
import FormattedText from '@components/formatted_text';
|
|
import {useTheme} from '@context/theme';
|
|
import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme';
|
|
|
|
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
|
return {
|
|
container: {
|
|
marginBottom: 30,
|
|
},
|
|
header: {
|
|
marginHorizontal: 15,
|
|
marginBottom: 10,
|
|
fontSize: 13,
|
|
color: changeOpacity(theme.centerChannelColor, 0.5),
|
|
},
|
|
footer: {
|
|
marginTop: 10,
|
|
marginHorizontal: 15,
|
|
fontSize: 12,
|
|
color: changeOpacity(theme.centerChannelColor, 0.5),
|
|
},
|
|
};
|
|
});
|
|
|
|
export type SectionText = {
|
|
id: string;
|
|
defaultMessage: string;
|
|
values?: MessageDescriptor;
|
|
}
|
|
|
|
export type BlockProps = {
|
|
children: React.ReactNode;
|
|
disableFooter?: boolean;
|
|
disableHeader?: boolean;
|
|
footerText?: SectionText;
|
|
headerText?: SectionText;
|
|
containerStyles?: StyleProp<ViewStyle>;
|
|
headerStyles?: StyleProp<TextStyle>;
|
|
footerStyles?: StyleProp<TextStyle>;
|
|
}
|
|
|
|
const Block = ({
|
|
children,
|
|
containerStyles,
|
|
disableFooter,
|
|
disableHeader,
|
|
footerText,
|
|
headerStyles,
|
|
headerText,
|
|
footerStyles,
|
|
}: BlockProps) => {
|
|
const theme = useTheme();
|
|
const styles = getStyleSheet(theme);
|
|
|
|
return (
|
|
<View style={styles.container}>
|
|
{(headerText && !disableHeader) &&
|
|
<FormattedText
|
|
defaultMessage={headerText.defaultMessage}
|
|
id={headerText.id}
|
|
values={headerText.values}
|
|
style={[styles.header, headerStyles]}
|
|
/>
|
|
}
|
|
<View style={containerStyles}>
|
|
{children}
|
|
</View>
|
|
{(footerText && !disableFooter) &&
|
|
<FormattedText
|
|
defaultMessage={footerText.defaultMessage}
|
|
id={footerText.id}
|
|
style={[styles.footer, footerStyles]}
|
|
values={footerText.values}
|
|
/>
|
|
}
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default Block;
|