@shopify/shop-minis-cli 0.0.167 → 0.0.170
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/build/commands/dev/index.js +3 -2
- package/build/commands/dev/index.js.map +1 -1
- package/build/commands/dev/utils/metro/metro-config.js +4 -2
- package/build/commands/dev/utils/metro/metro-config.js.map +1 -1
- package/package.json +1 -1
- package/templates/__template_getting_started/src/screens/HomeScreen.tsx +57 -65
|
@@ -7,12 +7,13 @@ import internalIp from 'internal-ip';
|
|
|
7
7
|
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
8
8
|
import { handler as handleError } from '@shopify/cli-kit/node/error';
|
|
9
9
|
import _ from 'lodash';
|
|
10
|
-
import { getMiniManifest } from '../../utils/minis-manifest.js';
|
|
10
|
+
import { getMiniManifest, manifestExists } from '../../utils/minis-manifest.js';
|
|
11
11
|
import { maybeApplyPatches } from '../../utils/patch-package.js';
|
|
12
12
|
import { getInvalidDependencies } from '../doctor/utils/diagnose-dependencies.js';
|
|
13
13
|
import { getRunBinCommand } from '../../utils/package-manager.js';
|
|
14
14
|
import { getMiniExtensions } from '../../utils/extensions.js';
|
|
15
15
|
import { generateGraphQLTypes } from '../generate-graphql-types/utils/generate-graphql-types.js';
|
|
16
|
+
import { isStandaloneMini } from '../../utils/standalone.js';
|
|
16
17
|
import { InteractiveTerminal } from './utils/interactive-terminal.js';
|
|
17
18
|
import { runMetro } from './utils/metro/metro-server.js';
|
|
18
19
|
import { BuildType } from './utils/types.js';
|
|
@@ -24,7 +25,7 @@ export async function loadCommand(parentProgram) {
|
|
|
24
25
|
.option('--reset-cache', 'Reset the development server cache.')
|
|
25
26
|
.option('--host <host>', 'The host address for the packager.', ip)
|
|
26
27
|
.option('--verbose', 'Print debugging messages.') // compatible with cli-kit
|
|
27
|
-
.
|
|
28
|
+
.addOption(new Option('--extension-targets <extensionTargets...>', 'Specify the extension targets to run.').hideHelp(!manifestExists() || isStandaloneMini()))
|
|
28
29
|
.addOption(new Option('--build-type <buildType>', 'The type of build to perform.')
|
|
29
30
|
.choices(Object.values(BuildType))
|
|
30
31
|
.default(BuildType.Release))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAEtC,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,EAAC,OAAO,EAAE,MAAM,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,UAAU,MAAM,aAAa,CAAA;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAClE,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,11 @@ import path from 'path';
|
|
|
3
3
|
import { loadConfig } from 'metro-config';
|
|
4
4
|
import { createMinisMetroReporter } from './metro-reporter.js';
|
|
5
5
|
import { createMinisModuleResolver } from './metro-minis-module-resolver.js';
|
|
6
|
+
// Create a require function for use in ESM context
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
6
8
|
// modified so that metro uses the mini dependency path and not the CLI dependency when using symlinks to run the CLI (yarn link)
|
|
7
|
-
const defaults =
|
|
8
|
-
defaults.moduleSystem =
|
|
9
|
+
const defaults = require('metro-config/src/defaults/defaults');
|
|
10
|
+
defaults.moduleSystem = path.join(path.dirname(require.resolve('metro-runtime/package.json')), 'src', 'polyfills', 'require.js');
|
|
9
11
|
export async function getMetroConfig() {
|
|
10
12
|
const metroConfig = await loadConfig({ cwd: process.cwd() });
|
|
11
13
|
// @ts-ignore - @types/metro is outdated and missing this attribute: https://facebook.github.io/metro/docs/configuration/#emptymodulepath
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metro-config.js","sourceRoot":"","sources":["../../../../../src/commands/dev/utils/metro/metro-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAoB,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAA;AAE1E,
|
|
1
|
+
{"version":3,"file":"metro-config.js","sourceRoot":"","sources":["../../../../../src/commands/dev/utils/metro/metro-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAoB,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAA;AAE1E,mDAAmD;AACnD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE9C,iIAAiI;AACjI,MAAM,QAAQ,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAAA;AAE9D,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,EAC3D,KAAK,EACL,WAAW,EACX,YAAY,CACb,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAC,CAAC,CAAA;IAE1D,yIAAyI;IACzI,gFAAgF;IAChF,WAAW,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAC9C,WAAW,CAAC,WAAW,EACvB,cAAc,EACd,2CAA2C,CAC5C,CAAA;IAED,aAAa;IACb,gFAAgF;IAChF,WAAW,CAAC,WAAW,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CACxD,WAAW,CAAC,WAAW,EACvB,cAAc,EACd,wCAAwC,CACzC,CAAA;IAED,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAA;IAE3C,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE;YACR,GAAG,WAAW,CAAC,QAAQ;YACvB,cAAc,EAAE,yBAAyB,CAAC,WAAW,CAAC;SACvD;QACD,QAAQ;KACT,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -6,15 +6,14 @@ import {
|
|
|
6
6
|
Box,
|
|
7
7
|
SafeAreaView,
|
|
8
8
|
Text,
|
|
9
|
-
TouchableProduct,
|
|
10
9
|
ProductCard,
|
|
11
10
|
useProductSearch,
|
|
12
11
|
useTheme,
|
|
13
12
|
Button,
|
|
14
13
|
TextField,
|
|
15
|
-
RadioButton,
|
|
16
14
|
Divider,
|
|
17
|
-
|
|
15
|
+
Shelf,
|
|
16
|
+
} from '@shopify/shop-minis-sdk'
|
|
18
17
|
|
|
19
18
|
import {RootStackParamList} from '../types/screens'
|
|
20
19
|
|
|
@@ -22,24 +21,20 @@ export function HomeScreen() {
|
|
|
22
21
|
const theme = useTheme()
|
|
23
22
|
const navigation =
|
|
24
23
|
useNavigation<NativeStackNavigationProp<RootStackParamList>>()
|
|
24
|
+
const [searchQuery, setSearchQuery] = useState('Skateboard')
|
|
25
25
|
|
|
26
|
-
const {products} = useProductSearch({
|
|
27
|
-
query:
|
|
26
|
+
const {products, loading} = useProductSearch({
|
|
27
|
+
query: searchQuery,
|
|
28
28
|
first: 4,
|
|
29
29
|
filters: {
|
|
30
30
|
minimumRating: 4,
|
|
31
31
|
price: {
|
|
32
|
-
min:
|
|
32
|
+
min: 100,
|
|
33
33
|
max: 250,
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
})
|
|
37
37
|
|
|
38
|
-
const radioButtonOptions = ['Option A', 'Option B', 'Option C']
|
|
39
|
-
|
|
40
|
-
const [selectedOption, setSelectedOption] = useState(radioButtonOptions[0])
|
|
41
|
-
const [textFieldValue, setTextFieldValue] = useState('')
|
|
42
|
-
|
|
43
38
|
return (
|
|
44
39
|
<SafeAreaView
|
|
45
40
|
style={{flex: 1, backgroundColor: theme.colors['backgrounds-regular']}}
|
|
@@ -52,75 +47,72 @@ export function HomeScreen() {
|
|
|
52
47
|
backgroundColor="backgrounds-regular"
|
|
53
48
|
>
|
|
54
49
|
<Text variant="heroBold" marginBottom="s" marginTop="xs">
|
|
55
|
-
|
|
50
|
+
Welcome to Shop Minis
|
|
56
51
|
</Text>
|
|
57
52
|
<Text variant="subtitle" marginBottom="s">
|
|
58
|
-
|
|
53
|
+
Build powerful mobile commerce experiences with our SDK
|
|
59
54
|
</Text>
|
|
60
|
-
<Text variant="subtitle">Let
|
|
61
|
-
<Divider marginVertical="s" />
|
|
62
|
-
{products ? (
|
|
63
|
-
<>
|
|
64
|
-
<Text marginBottom="s">
|
|
65
|
-
First up: Product Cards (Since we're all about shopping,
|
|
66
|
-
right?)
|
|
67
|
-
</Text>
|
|
68
|
-
<Box flexDirection="row">
|
|
69
|
-
{products.slice(0, 2).map(product => (
|
|
70
|
-
<Box key={product.id} flex={1}>
|
|
71
|
-
<TouchableProduct product={product}>
|
|
72
|
-
<ProductCard
|
|
73
|
-
shopId="gid://shopify/Shop/62104633599"
|
|
74
|
-
product={product}
|
|
75
|
-
/>
|
|
76
|
-
</TouchableProduct>
|
|
77
|
-
</Box>
|
|
78
|
-
))}
|
|
79
|
-
</Box>
|
|
80
|
-
<Box flexDirection="row">
|
|
81
|
-
{products.slice(2, 4).map(product => (
|
|
82
|
-
<Box key={product.id} flex={1} padding="xs">
|
|
83
|
-
<TouchableProduct product={product}>
|
|
84
|
-
<ProductCard
|
|
85
|
-
shopId="gid://shopify/Shop/62104633599"
|
|
86
|
-
product={product}
|
|
87
|
-
/>
|
|
88
|
-
</TouchableProduct>
|
|
89
|
-
</Box>
|
|
90
|
-
))}
|
|
91
|
-
</Box>
|
|
92
|
-
</>
|
|
93
|
-
) : null}
|
|
55
|
+
<Text variant="subtitle">Let's explore the key features.</Text>
|
|
94
56
|
<Divider marginVertical="s" />
|
|
95
57
|
|
|
96
58
|
<Text marginBottom="s">
|
|
97
|
-
|
|
59
|
+
Search for products using the{' '}
|
|
60
|
+
<Text color="text-brand">useProductSearch</Text> hook. This hook
|
|
61
|
+
provides real-time product search with filtering capabilities.
|
|
98
62
|
</Text>
|
|
99
63
|
<Box>
|
|
100
64
|
<TextField
|
|
101
|
-
placeholder="
|
|
102
|
-
value={
|
|
103
|
-
onChangeText={
|
|
65
|
+
placeholder="Skateboard"
|
|
66
|
+
value={searchQuery}
|
|
67
|
+
onChangeText={setSearchQuery}
|
|
104
68
|
/>
|
|
105
|
-
{textFieldValue ? (
|
|
106
|
-
<Text marginTop="xs">I love Minis because {textFieldValue}</Text>
|
|
107
|
-
) : null}
|
|
108
69
|
</Box>
|
|
70
|
+
|
|
109
71
|
<Divider marginVertical="s" />
|
|
110
72
|
|
|
111
|
-
<
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
73
|
+
<Box>
|
|
74
|
+
<Text marginBottom="s">
|
|
75
|
+
Display product collections using the{' '}
|
|
76
|
+
<Text color="text-brand">ProductCard</Text> and{' '}
|
|
77
|
+
<Text color="text-brand">Shelf</Text> components. These components
|
|
78
|
+
handle layout, touch interactions, and product display
|
|
79
|
+
automatically.
|
|
80
|
+
</Text>
|
|
81
|
+
{loading ? (
|
|
82
|
+
<Text>Loading products...</Text>
|
|
83
|
+
) : products && products.length > 0 ? (
|
|
84
|
+
<Box height={200}>
|
|
85
|
+
<Shelf
|
|
86
|
+
data={products}
|
|
87
|
+
renderItem={({item}) => (
|
|
88
|
+
<Box key={item.id} width={150}>
|
|
89
|
+
<ProductCard product={item} />
|
|
90
|
+
</Box>
|
|
91
|
+
)}
|
|
92
|
+
/>
|
|
93
|
+
</Box>
|
|
94
|
+
) : (
|
|
95
|
+
<Text>No products found</Text>
|
|
96
|
+
)}
|
|
97
|
+
</Box>
|
|
98
|
+
|
|
122
99
|
<Divider marginVertical="s" />
|
|
123
100
|
|
|
101
|
+
<Text variant="subtitle" marginBottom="s">
|
|
102
|
+
Check our docs to learn more about the powerful product hooks:
|
|
103
|
+
</Text>
|
|
104
|
+
|
|
105
|
+
<Text color="text-brand">
|
|
106
|
+
- useRecommendedProducts:
|
|
107
|
+
<Text> Get personalized product recommendations</Text>
|
|
108
|
+
</Text>
|
|
109
|
+
<Text color="text-brand">
|
|
110
|
+
- useSavedProducts:<Text> Access user's saved products</Text>
|
|
111
|
+
</Text>
|
|
112
|
+
<Text color="text-brand">
|
|
113
|
+
- useRecentProducts:<Text> Display recently viewed products</Text>
|
|
114
|
+
</Text>
|
|
115
|
+
<Divider marginVertical="s" />
|
|
124
116
|
<Text marginBottom="s">
|
|
125
117
|
Ready for more? Let's explore native capabilities in the
|
|
126
118
|
screen.
|