1
1
#! /bin/bash
2
2
3
- # Validate surface argument
4
- surface=" $1 "
3
+ # Check if at least one component name is provided
4
+ if [ $# -eq 0 ]; then
5
+ echo " Usage: $0 [-t type] component_name1 [component_name2 ...]"
6
+ echo " -t: Type of documentation (api or components, default: components)"
7
+ exit 1
8
+ fi
5
9
6
- echo " surface: $surface "
10
+ # Parse arguments
11
+ type=" components" # default value
12
+ while getopts " t:" opt; do
13
+ case $opt in
14
+ t) type=" $OPTARG "
15
+ if [[ " $type " != " components" && " $type " != " api" ]]; then
16
+ echo " Error: type must be either 'components' or 'api'"
17
+ exit 1
18
+ fi
19
+ ;;
20
+ \? ) echo " Invalid option -$OPTARG "
21
+ exit 1
22
+ ;;
23
+ esac
24
+ done
25
+ shift $(( OPTIND- 1 ))
7
26
8
- if [ " $surface " = " admin" ] || [ " $surface " = " checkout" ]; then
9
- echo " Scaffolding docs for ${surface} "
10
- else
11
- echo " ERR: No surface argument provided. Please provide a surface argument (admin or checkout)."
12
- exit 1
13
- fi
14
27
15
- # Make this an input to the script
16
- components_dir=" src/surfaces/${surface} /components"
17
- # components_dir="./packages/ui-extensions/src/surfaces/${surface}/components"
28
+ echo " Scaffolding ${type} docs for admin"
18
29
19
- # components_dir ="./packages/ui-extensions/src/surfaces/${surface}/api "
30
+ base_dir =" ./packages/ui-extensions/src/surfaces/admin/ ${type} "
20
31
21
- addExamples () {
22
- folder=$1
23
- if [ -d " ${folder} /examples" ]; then
24
- example_folder_path=" ${folder} /examples"
25
- examples=(" $example_folder_path " /* )
32
+ for componentName in " $@ " ; do
33
+ # Create component directory
34
+ folder=" ${base_dir} /${componentName} "
35
+ mkdir -p " $folder "
26
36
27
- if [ ${# examples[@]} -eq 1 ] && [[ ${examples[0]} == * " basic" * ]]; then
28
- echo " "
29
- return
30
- fi
37
+ examples_dir=" ${folder} /examples"
38
+ mkdir -p " $examples_dir "
39
+
40
+ docs_file=" ${folder} /${componentName} .doc.ts"
41
+ lowercaseComponentName=$( echo " $componentName " | sed -E ' s/([a-z])([A-Z])/\1-\2/g' | tr ' [:upper:]' ' [:lower:]' )
31
42
32
- constructed_string=" examples: {
33
- description: '',
34
- examples: [
35
- "
36
- for example_file in " ${examples[@]} " ; do
37
- example_name=$( basename " $example_file " " .example.tsx" )
38
- # Skip files starting with "basic-"
39
- if [[ $example_name == basic-* ]]; then
40
- continue
41
- fi
42
- constructed_string+=" {
43
- description: 'TODO: add description',
44
- image: '${example_name} .png',
45
- codeblock: {
46
- tabs: [
47
- {
48
- title: 'Preact',
49
- code: '${example_file} ',
50
- language: 'typescript',
51
- },
52
- ],
53
- title: 'TODO: add example title',
54
- },
55
- }," $' \n '
56
- done
57
- constructed_string+=" ],
58
- },"
59
- echo " $constructed_string "
43
+ # Create TypeScript example file
44
+ ts_example=" ${examples_dir} /basic-${lowercaseComponentName} .example.ts"
45
+ if [ ! -f " $ts_example " ]; then
46
+ cat << EOF > "$ts_example "
47
+ export default function extension() {
48
+ const ${componentName} = document.createElement('s-${lowercaseComponentName} ');
49
+ // Add your s-${componentName} implementation here
50
+ document.body.appendChild(${componentName} );
51
+ };
52
+ EOF
53
+ echo " Created TS example file for ${componentName} "
60
54
fi
61
- }
62
55
63
- for folder in " $components_dir " /* ; do
64
- if [ -d " $folder " ]; then
65
- if [[ $folder == shared ]]; then
66
- continue
67
- fi
68
- componentName=$( basename " $folder " )
69
- docs_file=" ${folder} /${componentName} .doc.ts"
56
+ # Create TSX example file
57
+ tsx_example=" ${examples_dir} /basic-${lowercaseComponentName} .example.tsx"
58
+ if [ ! -f " $tsx_example " ]; then
59
+ cat << EOF > "$tsx_example "
60
+ import '@shopify/ui-extensions/preact';
61
+ import {render} from 'preact';
70
62
71
- if [ ! -f " $docs_file " ]; then
72
- lowercaseComponentName=$( echo " $componentName " | tr ' [:upper:]' ' [:lower:]' )
73
- cat > " $docs_file " << EOF
63
+ export default function extension() {
64
+ render(<s-${lowercaseComponentName} />, document.body);
65
+ }
66
+ EOF
67
+ echo " Created TSX example file for ${componentName} "
68
+ fi
69
+
70
+ if [ ! -f " $docs_file " ]; then
71
+ cat << EOF > "$docs_file "
74
72
import {ReferenceEntityTemplateSchema} from '@shopify/generate-docs';
75
73
76
74
const data: ReferenceEntityTemplateSchema = {
77
75
name: '${componentName} ',
78
76
description: '${componentName} is used to ...',
79
77
requires: '',
80
78
thumbnail: '${lowercaseComponentName} -thumbnail.png',
81
- isVisualComponent: true,
79
+ isVisualComponent: $( if [ " $type " = " components " ] ; then echo " true" ; else echo " false " ; fi ) ,
82
80
type: '',
83
81
definitions: [
84
82
{
@@ -87,13 +85,18 @@ const data: ReferenceEntityTemplateSchema = {
87
85
type: '${componentName} ',
88
86
},
89
87
],
90
- category: 'Components',
91
- subCategory: 'Feedback',
88
+ category: '$( if [ " $type " = " components " ] ; then echo " Components" ; else echo " API " ; fi ) ',
89
+ subCategory: '$( if [ " $type " = " components " ] ; then echo " Feedback" ; else echo " " ; fi ) ',
92
90
defaultExample: {
93
91
image: '${lowercaseComponentName} -default.png',
94
92
codeblock: {
95
93
title: 'TODO: add example title',
96
94
tabs: [
95
+ {
96
+ title: 'Preact',
97
+ code: './examples/basic-${lowercaseComponentName} .example.tsx',
98
+ language: 'jsx',
99
+ },
97
100
{
98
101
title: 'JS',
99
102
code: './examples/basic-${lowercaseComponentName} .example.ts',
@@ -102,12 +105,13 @@ const data: ReferenceEntityTemplateSchema = {
102
105
],
103
106
},
104
107
},
105
- $( addExamples " $folder " )
106
108
related: [],
107
109
};
108
110
109
111
export default data;
110
112
EOF
111
- fi
113
+ echo " Created documentation file for ${componentName} "
114
+ else
115
+ echo " Documentation file for ${componentName} already exists"
112
116
fi
113
117
done
0 commit comments