Skip to content

Commit 1304307

Browse files
committed
Implement NumberedList
1 parent c593f40 commit 1304307

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

help/_plugins/SitePostRender.rb

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ def self.analyze_used_components(content)
107107
'View' => content.include?('<View'),
108108
'Text' => content.include?('<Text'),
109109
'TextLink' => content.include?('<TextLink'),
110-
'BulletList' => content.include?('<BulletList')
110+
'BulletList' => content.include?('<BulletList'),
111+
'NumberedList' => content.include?('<NumberedList')
111112
}
112113
components.select { |_, used| used }.keys
113114
end
@@ -126,6 +127,7 @@ def self.generate_imports(components)
126127
component_imports << "import BulletList from '@components/SidePanel/HelpComponents/HelpBulletList';" if components.include?('BulletList')
127128
component_imports << "import Text from '@components/Text';" if components.include?('Text')
128129
component_imports << "import TextLink from '@components/TextLink';" if components.include?('TextLink')
130+
component_imports << "import NumberedList from '@components/SidePanel/HelpComponents/HelpNumberedList';" if components.include?('NumberedList')
129131

130132
# Add style imports
131133
base_imports << "import type {ThemeStyles} from '@styles/index';"
@@ -199,6 +201,7 @@ def self.html_node_to_RN(node, indent_level = 0)
199201
'div' => method(:process_div),
200202
'p' => method(:process_paragraph),
201203
'ul' => method(:process_unordered_list),
204+
'ol' => method(:process_ordered_list),
202205
'li' => method(:process_list_item),
203206
'h1' => method(:process_heading),
204207
'h2' => method(:process_heading),
@@ -264,6 +267,33 @@ def self.process_unordered_list(node, indent_level)
264267
TS
265268
end
266269

270+
def self.process_ordered_list(node, indent_level)
271+
items = node.xpath('./li').map do |li|
272+
contains_ol = li.xpath('.//ol').any?
273+
274+
li_parts = li.children.map { |child| html_node_to_RN(child, 0) }
275+
276+
if contains_ol
277+
indented_li_parts = li_parts.map do |part|
278+
part.lines.map { |line| "#{' ' * (indent_level + 3)}#{line.rstrip}" }.join("\n")
279+
end.join("\n")
280+
281+
"#{' ' * (indent_level + 2)}<>\n#{indented_li_parts}\n#{' ' * (indent_level + 2)}</>"
282+
else
283+
"#{' ' * (indent_level + 2)}<Text style={styles.textNormal}>#{li_parts.join.strip}</Text>"
284+
end
285+
end
286+
287+
<<~TS.chomp
288+
#{' ' * indent_level}<NumberedList
289+
#{' ' * indent_level} styles={styles}
290+
#{' ' * indent_level} items={[
291+
#{items.join(",\n")}
292+
#{' ' * indent_level} ]}
293+
#{' ' * indent_level}/>
294+
TS
295+
end
296+
267297
def self.process_list_item(node, indent_level)
268298
'' # handled in <ul>
269299
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type {ReactNode} from 'react';
2+
import React from 'react';
3+
import {View} from 'react-native';
4+
import Text from '@components/Text';
5+
import type {ThemeStyles} from '@styles/index';
6+
7+
type HelpNumberedListProps = {
8+
styles: ThemeStyles;
9+
items: ReactNode[];
10+
};
11+
12+
function HelpNumberedList({items, styles}: HelpNumberedListProps) {
13+
return items.map((item, index) => (
14+
<View
15+
// eslint-disable-next-line react/no-array-index-key
16+
key={`numbered-list-item-${index}`}
17+
style={[styles.flexRow, styles.alignItemsStart, styles.mt3]}
18+
>
19+
<Text style={[styles.textNormal, styles.pr2, styles.userSelectNone]}>{`${index + 1}.`}</Text>
20+
<Text style={[styles.flex1]}>{item}</Text>
21+
</View>
22+
));
23+
}
24+
25+
export default HelpNumberedList;

0 commit comments

Comments
 (0)