@quintype/native-components 2.30.2--alt-story-layout-beta → 2.30.2-center-align-title-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quintype/native-components",
3
- "version": "2.30.2--alt-story-layout-beta",
3
+ "version": "2.30.2-center-align-title-beta-1",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -12,12 +12,35 @@ import { headerStyles } from "./styles";
12
12
 
13
13
  export const Header = (props) => {
14
14
  const { theme } = useContext(AppTheme);
15
- const styles = headerStyles(theme, props.noBorder);
15
+ const { noBorder, centerAlignLogo } = props || {};
16
+ const styles = headerStyles(theme, noBorder, centerAlignLogo);
16
17
  const headerStyle = StyleSheet.flatten([styles.header, props.style]);
17
18
  const logoComponentStyle = StyleSheet.flatten([
18
19
  styles.logoComponentStyle,
19
20
  props.logoComponentStyle,
20
21
  ]);
22
+ if (centerAlignLogo) {
23
+ return (
24
+ <View style={styles.header}>
25
+ <View style={styles.leftContainer}>
26
+ {props.leftComponent && props.leftComponent}
27
+ </View>
28
+ {props.logoComponent && (
29
+ <TouchableOpacity
30
+ style={logoComponentStyle}
31
+ onPress={props.onPress}
32
+ testID={COMP_GENERAL_CONSTANTS.headerLogoTouch}
33
+ >
34
+ {props.logoComponent}
35
+ </TouchableOpacity>
36
+ )}
37
+ <View style={styles.rightContainer}>
38
+ {props.rightComponent && props.rightComponent}
39
+ </View>
40
+ </View>
41
+ )
42
+ }
43
+
21
44
  return (
22
45
  <View style={headerStyle}>
23
46
  <View>
@@ -1,19 +1,35 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
 
3
- export const headerStyles = (appThemeContext, noBorder) => {
3
+ export const headerStyles = (appThemeContext, noBorder, centerAlignLogo) => {
4
4
  const { COLORS, DARK_MODE } = appThemeContext;
5
- return StyleSheet.create({
5
+ const headerContainerStyles = {
6
6
  header: {
7
7
  height: 48,
8
8
  backgroundColor: DARK_MODE ? COLORS.MONO6 : COLORS.BRAND_WHITE,
9
9
  flexDirection: 'row',
10
10
  alignItems: 'center',
11
- justifyContent: 'space-between',
11
+ justifyContent: centerAlignLogo ? 'center' : 'space-between',
12
12
  paddingHorizontal: 10,
13
13
  borderBottomColor: noBorder
14
14
  ? (DARK_MODE ? COLORS.BRAND_WHITE : COLORS.BRAND_BLACK)
15
15
  : (DARK_MODE ? COLORS.MONO6 : COLORS.BRAND5),
16
16
  borderBottomWidth: StyleSheet.hairlineWidth,
17
- },
18
- });
17
+ }
18
+ }
19
+
20
+ if (centerAlignLogo) {
21
+ return StyleSheet.create({
22
+ ...headerContainerStyles,
23
+ leftContainer: {
24
+ flex: 1, // Takes up all left space
25
+ alignItems: 'flex-start', // Aligns leftView to the left
26
+ },
27
+ rightContainer: {
28
+ flex: 1, // Takes up all right space
29
+ alignItems: 'flex-end', // Aligns rightView to the right
30
+ }
31
+ });
32
+ }
33
+
34
+ return StyleSheet.create(headerContainerStyles);
19
35
  };
@@ -152,7 +152,8 @@ export const Story = ({
152
152
  gaTrigerredTTS,
153
153
  commentData,
154
154
  commentLoader,
155
- storyLayout
155
+ storyLayout,
156
+ centerAlignStoryTitle
156
157
  }) => {
157
158
  const { theme } = useContext(AppTheme);
158
159
  const { COLORS, FONT_SIZE, locale, DARK_MODE,translate, enableComments } = theme;
@@ -376,6 +377,7 @@ export const Story = ({
376
377
  onAuthorPress={onAuthorPress}
377
378
  onSectionPress={onSectionPress}
378
379
  storyLayout={storyLayout}
380
+ centerAlignStoryTitle = {centerAlignStoryTitle}
379
381
  />
380
382
  { storyHasAccess === 'granted' && audioS3Key && (!showPlayer ?
381
383
  (<TouchableOpacity onPress={async()=>{
@@ -65,7 +65,7 @@ const getHeroComponent = (props) => {
65
65
  };
66
66
 
67
67
  export const StoryHeader = (props) => {
68
- const { story, firstVideoElement, storyLayout } = props;
68
+ const { story, firstVideoElement, storyLayout, centerAlignStoryTitle } = props;
69
69
  const sectionData = get(story, ['sections', 0], {});
70
70
  const { theme } = useContext(AppTheme);
71
71
 
@@ -105,10 +105,11 @@ export const StoryHeader = (props) => {
105
105
  };
106
106
 
107
107
  const getSectionName = (storyLayout = 'default') => {
108
- const style = isHeadLinePriorityLayout ? styles.headlinePriority.sectionText : styles.sectionText
108
+ const style = isHeadLinePriorityLayout ? styles.headlinePriority.sectionText : styles.sectionText;
109
+ const centerAlignStyle = centerAlignStoryTitle? styles?.centerAlign: ''
109
110
  return <TouchableOpacity onPress={navigateToSection}>
110
111
  <Text
111
- style={style}
112
+ style={[style, centerAlignStyle]}
112
113
  testID={COMP_CONTENT_CONSTANTS.sectionName}
113
114
  >
114
115
  {sectionData['display-name'] || ''}
@@ -138,7 +139,7 @@ export const StoryHeader = (props) => {
138
139
  return (
139
140
  <View testID={props.testID}>
140
141
  {getSectionName(storyLayout)}
141
- <StoryTitle title={story.headline} subTitle={story.subheadline} isPremiumStory={isPremiumStory} isHeadLinePriorityLayout={isHeadLinePriorityLayout}/>
142
+ <StoryTitle title={story.headline} subTitle={story.subheadline} isPremiumStory={isPremiumStory} isHeadLinePriorityLayout={isHeadLinePriorityLayout} centerAlignStoryTitle={centerAlignStoryTitle}/>
142
143
  {getHeroComponent(props)}
143
144
  {showAttribution(storyLayout)}
144
145
  <View style={styles.dateBlock}>
@@ -165,7 +166,7 @@ export const StoryHeader = (props) => {
165
166
  {getTimeInFormat(story['published-at'], DATE_FORMAT, locale)}
166
167
  </Text>
167
168
  </View>
168
- <StoryTitle title={story.headline} subTitle={story.subheadline} isPremiumStory={isPremiumStory}/>
169
+ <StoryTitle title={story.headline} subTitle={story.subheadline} isPremiumStory={isPremiumStory} centerAlignStoryTitle={centerAlignStoryTitle}/>
169
170
  {getAuthorRow()}
170
171
  {reviewTitle && <RatingLayout reviewTitle={reviewTitle} ratingValue={reviewData?.value} ratingLabel={reviewData?.label}/>}
171
172
  </View>
@@ -60,5 +60,8 @@ export const storyHeaderStyles = (COLORS, FONT_FAMILY) => StyleSheet.create({
60
60
  fontFamily: FONT_FAMILY.secondary,
61
61
  fontWeight: "bold",
62
62
  },
63
+ },
64
+ centerAlign: {
65
+ textAlign: 'center'
63
66
  }
64
67
  });
@@ -7,9 +7,9 @@ import { AppTheme } from '../../utils';
7
7
  import { COMP_CONTENT_CONSTANTS } from '../../constants/component-constants/content-constants/constants';
8
8
  import PremiumIcons from '../../Icons/PremiumIcons/index';
9
9
 
10
- export const StoryTitle = ({ title, subTitle, isPremiumStory, isHeadLinePriorityLayout }) => {
10
+ export const StoryTitle = ({ title, subTitle, isPremiumStory, isHeadLinePriorityLayout, centerAlignStoryTitle }) => {
11
11
  const { theme } = useContext(AppTheme);
12
- const styles = storyTitleStyles(theme);
12
+ const styles = storyTitleStyles({...theme, centerAlignStoryTitle});
13
13
  const {
14
14
  premiumIcon, COLORS, FONT_SIZE
15
15
  } = theme;
@@ -1,7 +1,7 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
 
3
3
  export const storyTitleStyles = ({
4
- COLORS, FONT_SIZE, FONT_FAMILY, lineHeightMultiplier,
4
+ COLORS, FONT_SIZE, FONT_FAMILY, lineHeightMultiplier,centerAlignStoryTitle
5
5
  }) => StyleSheet.create({
6
6
  container: {
7
7
  padding: 10,
@@ -12,6 +12,7 @@ export const storyTitleStyles = ({
12
12
  fontFamily: FONT_FAMILY.primaryBold,
13
13
  lineHeight: FONT_SIZE.title * lineHeightMultiplier,
14
14
  color: COLORS.BRAND_BLACK,
15
+ textAlign: centerAlignStoryTitle ? 'center' : 'auto',
15
16
  },
16
17
  subTitleStyle: {
17
18
  fontSize: FONT_SIZE.h3,
@@ -8,16 +8,34 @@ import { AppTheme } from '../../utils/context';
8
8
 
9
9
  export const Text = (props) => {
10
10
  const { theme } = useContext(AppTheme);
11
- const { FONT_FAMILY, COLORS, CAN_COPY_TEXT } = theme;
11
+ const {
12
+ FONT_FAMILY, COLORS, CAN_COPY_TEXT, lineHeightMultiplier,
13
+ } = theme;
14
+
15
+ // Flatten the style first
16
+ const flattenedStyle = StyleSheet.flatten([props.style]) || {};
17
+
18
+ // Use fontSize from style or fallback, and lineHeight from style or calculate
19
+ const { fontSize } = flattenedStyle;
20
+ let lineHeight;
21
+ if (flattenedStyle.lineHeight != null) {
22
+ lineHeight = flattenedStyle.lineHeight;
23
+ } else if (fontSize != null) {
24
+ lineHeight = fontSize * (lineHeightMultiplier ?? 1.5);
25
+ }
12
26
 
13
27
  const RNStyle = {
14
28
  fontFamily: props.primary ? FONT_FAMILY.primary : FONT_FAMILY.secondary,
15
29
  writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr',
30
+ ...(fontSize != null ? { fontSize } : {}),
31
+ ...(lineHeight != null ? { lineHeight } : {}),
16
32
  };
17
- const flattenedStyle = StyleSheet.flatten([RNStyle, props.style]);
18
33
 
19
- const { ellipsizeMode, numberOfLines, allowFontScaling, testID } = props;
34
+ const mergedStyle = StyleSheet.flatten([RNStyle, props.style]);
20
35
 
36
+ const {
37
+ ellipsizeMode, numberOfLines, allowFontScaling, testID,
38
+ } = props;
21
39
  const textData = I18nManager.isRTL ? `\u200F${props.children}` : props.children;
22
40
 
23
41
  return (
@@ -29,7 +47,7 @@ export const Text = (props) => {
29
47
  ellipsizeMode={ellipsizeMode}
30
48
  numberOfLines={numberOfLines}
31
49
  testID={testID}
32
- style={flattenedStyle}
50
+ style={mergedStyle}
33
51
  fontFamily={RNStyle.fontFamily}
34
52
  allowFontScaling={allowFontScaling}
35
53
  >