Files
react-native/packages/rn-tester/js/components/TextLegend.js
T
1270873ed6 RNTester UI Redesign (#29685)
Summary:
This Pull request adds the UI changes to the RNTester app as discussed in the MLH Fellowship.

This list is not exhaustive.

- The initial App screen is redesigned.
  - A bottom Navbar has been added.
   - Filter pills are added.
   - The list card UI is updated.

- The example page UI is updated.

- Recently Viewed Sections are added. It shows the last 5 recently viewed components/APIs.

- Bookmarking functionality is added.

- The documentation URL is added to the example page.

- RNTester doesn't lose its state on a hard refresh (even on iOS).

<img width="373" src="https://user-images.githubusercontent.com/22813027/90530113-20346180-e192-11ea-8ef6-789fa25b402b.png" />
<img width="373" src="https://user-images.githubusercontent.com/22813027/90530112-20346180-e192-11ea-9539-706b540fcc5f.png" />
<img width="373" src="https://user-images.githubusercontent.com/22813027/90530100-1d397100-e192-11ea-8836-b88070643233.png" />
<img width="373" src="https://user-images.githubusercontent.com/22813027/90530110-1f9bcb00-e192-11ea-936b-64ee75fa4289.png" />

Pull Request resolved: https://github.com/facebook/react-native/pull/29685

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

{F302717939}

Note: this failed **before** this diff too:

{F302745716}

Reviewed By: mdvacca, cpojer

Differential Revision: D23240434

fbshipit-source-id: 65e2766a6a097eca0e0d0fda8dadf6871e9276c2

Co-authored-by: agarwalmanya <manya18ag@gmail.com>
Co-authored-by: chirag-singhal <csinghal208@gmail.com>
Co-authored-by: Ansh Godha <ag759@cornell.edu>
Co-authored-by: Yash Kumar Verma <yk.verma2000@gmail.com>
Co-authored-by: Sanskar Jethi <sansyrox@gmail.com>
Co-authored-by: Aniketh Saha <anik220798@gmail.com>
Co-authored-by: Xtremilicious <nilarjundas@outlook.com>
Co-authored-by: Jani Evakallio <jani.evakallio@gmail.com>
2020-08-26 08:45:57 -07:00

250 lines
9.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
const React = require('react');
const {Text, View} = require('react-native');
import {Picker} from 'react-native';
class TextLegend extends React.Component<*, *> {
state: {|
alignment: $TEMPORARY$string<'left'>,
fontSize: number,
language: $TEMPORARY$string<'english'>,
textMetrics: Array<any>,
|} = {
textMetrics: [],
language: 'english',
alignment: 'left',
fontSize: 50,
};
render(): React.Node {
const PANGRAMS = {
arabic:
'صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ',
chinese: 'Innovation in China 中国智造,慧及全球 0123456789',
english: 'The quick brown fox jumps over the lazy dog.',
emoji: '🙏🏾🚗💩😍🤯👩🏽‍🔧🇨🇦💯',
german: 'Falsches Üben von Xylophonmusik quält jeden größeren Zwerg',
greek: 'Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός',
hebrew: 'דג סקרן שט בים מאוכזב ולפתע מצא חברה',
hindi:
'ऋषियों को सताने वाले दुष्ट राक्षसों के राजा रावण का सर्वनाश करने वाले विष्णुवतार भगवान श्रीराम, अयोध्या के महाराज दशरथ के बड़े सपुत्र थे।',
igbo:
'Nne, nna, wepụ he’l’ụjọ dum n’ime ọzụzụ ụmụ, vufesi obi nye Chukwu, ṅụrịanụ, gbakọọnụ kpaa, kwee ya ka o guzoshie ike; ọ ghaghị ito, nwapụta ezi agwa',
irish:
'D’fhuascail Íosa Úrmhac na hÓighe Beannaithe pór Éava agus Ádhaimh',
japanese:
'色は匂へど 散りぬるを 我が世誰ぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず',
korean:
'키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다',
norwegian:
'Vår sære Zulu fra badeøya spilte jo whist og quickstep i min taxi.',
polish: 'Jeżu klątw, spłódź Finom część gry hańb!',
romanian: 'Muzicologă în bej vând whisky și tequila, preț fix.',
russian: 'Эх, чужак, общий съём цен шляп (юфть) – вдрызг!',
swedish: 'Yxskaftbud, ge vår WC-zonmö IQ-hjälp.',
thai:
'เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอยฯ',
};
return (
<View>
<Text
onPress={() =>
this.setState(prevState => ({fontSize: prevState.fontSize + 3}))
}>
Increase size
</Text>
<Text
onPress={() =>
this.setState(prevState => ({fontSize: prevState.fontSize - 3}))
}>
Decrease size
</Text>
<Picker
selectedValue={this.state.language}
onValueChange={itemValue => this.setState({language: itemValue})}>
{Object.keys(PANGRAMS).map(x => (
<Picker.Item
label={x[0].toUpperCase() + x.substring(1)}
key={x}
value={x}
/>
))}
</Picker>
<View>
{this.state.textMetrics.map(
({
x,
y,
width,
height,
capHeight,
ascender,
descender,
xHeight,
}) => {
return [
<View
key="baseline view"
style={{
top: y + ascender,
height: 1,
left: 0,
right: 0,
position: 'absolute',
backgroundColor: 'red',
}}
/>,
<Text
key="baseline text"
style={{
top: y + ascender,
right: 0,
position: 'absolute',
color: 'red',
}}>
Baseline
</Text>,
<View
key="capheight view"
style={{
top: y + ascender - capHeight,
height: 1,
left: 0,
right: 0,
position: 'absolute',
backgroundColor: 'green',
}}
/>,
<Text
key="capheight text"
style={{
top: y + ascender - capHeight,
right: 0,
position: 'absolute',
color: 'green',
}}>
Capheight
</Text>,
<View
key="xheight view"
style={{
top: y + ascender - xHeight,
height: 1,
left: 0,
right: 0,
position: 'absolute',
backgroundColor: 'blue',
}}
/>,
<Text
key="xheight text"
style={{
top: y + ascender - xHeight,
right: 0,
position: 'absolute',
color: 'blue',
}}>
X-height
</Text>,
<View
key="descender view"
style={{
top: y + ascender + descender,
height: 1,
left: 0,
right: 0,
position: 'absolute',
backgroundColor: 'orange',
}}
/>,
<Text
key="descender text"
style={{
top: y + ascender + descender,
right: 0,
position: 'absolute',
color: 'orange',
}}>
Descender
</Text>,
<View
key="end of text view"
style={{
top: y,
height: height,
width: 1,
left: x + width,
position: 'absolute',
backgroundColor: 'brown',
}}
/>,
<Text
key="end of text text"
style={{
top: y,
left: x + width + 5,
position: 'absolute',
color: 'brown',
}}>
End of text
</Text>,
<View
key="start of text view"
style={{
top: y,
height: height,
width: 1,
left: x,
position: 'absolute',
backgroundColor: 'brown',
}}
/>,
<Text
key="start of text text"
style={{
top: y,
left: x + 5,
position: 'absolute',
color: 'brown',
}}>
Start of text
</Text>,
];
},
)}
<Text
onTextLayout={event => {
this.setState({textMetrics: event.nativeEvent.lines});
}}
style={{
fontSize: this.state.fontSize,
textAlign: this.state.alignment,
}}>
{PANGRAMS[this.state.language]}
</Text>
</View>
<Picker
selectedValue={this.state.alignment}
onValueChange={itemValue => this.setState({alignment: itemValue})}>
<Picker.Item label="Left align" value="left" />
<Picker.Item label="Center align" value="center" />
<Picker.Item label="Right align" value="right" />
</Picker>
</View>
);
}
}
module.exports = TextLegend;