Skip to content

Commit ff20649

Browse files
authored
Merge branch 'unstable' into njo/2025-07/doc-prep
2 parents 3ecd23a + 8e96f10 commit ff20649

28 files changed

+589
-2
lines changed

.changeset/neat-hairs-study.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@shopify/ui-extensions': minor
3+
---
4+
5+
Add extension targets:
6+
7+
pos.return.post.action.menu-item.render
8+
pos.return.post.action.render
9+
pos.return.post.block.render
10+
11+
pos.exchange.post.action.menu-item.render
12+
pos.exchange.post.action.render
13+
pos.exchange.post.block.render

.changeset/silent-yaks-beam.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@shopify/ui-extensions': minor
3+
'@shopify/ui-extensions-react': minor
4+
---
5+
6+
NumberField - deprecate min and max props

packages/ui-extensions/docs/surfaces/point-of-sale/reference/apis/action-api.doc.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ The Action API allows an action extension to modally present its corresponding m
1414
- ${TargetLink.PosHomeTileRender}
1515
- ${TargetLink.PosPurchasePostActionMenuItemRender}
1616
- ${TargetLink.PosPurchasePostBlockRender}
17+
- ${TargetLink.PosReturnPostActionMenuItemRender}
18+
- ${TargetLink.PosReturnPostBlockRender}
19+
- ${TargetLink.PosExchangePostActionMenuItemRender}
20+
- ${TargetLink.PosExchangePostBlockRender}
1721
- ${TargetLink.PosOrderDetailsActionMenuItemRender}
1822
- ${TargetLink.PosOrderDetailsBlockRender}
1923
- ${TargetLink.PosProductDetailsActionMenuItemRender}

packages/ui-extensions/docs/surfaces/point-of-sale/reference/apis/order-api.doc.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ The Order API provides an extension with data about the current order.
1414
- ${TargetLink.PosPurchasePostActionMenuItemRender}
1515
- ${TargetLink.PosPurchasePostActionRender}
1616
- ${TargetLink.PosPurchasePostBlockRender}
17+
- ${TargetLink.PosReturnPostActionMenuItemRender}
18+
- ${TargetLink.PosReturnPostActionRender}
19+
- ${TargetLink.PosReturnPostBlockRender}
20+
- ${TargetLink.PosExchangePostActionMenuItemRender}
21+
- ${TargetLink.PosExchangePostActionRender}
22+
- ${TargetLink.PosExchangePostBlockRender}
1723
- ${TargetLink.PosOrderDetailsActionMenuItemRender}
1824
- ${TargetLink.PosOrderDetailsActionRender}
1925
- ${TargetLink.PosOrderDetailsBlockRender}

packages/ui-extensions/docs/surfaces/point-of-sale/reference/apis/storage-api.doc.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const generateCodeBlockForStorageApi = (title: string, fileName: string) =>
88
const data: ReferenceEntityTemplateSchema = {
99
name: 'Storage API',
1010
description: `The Storage API allows fetching, setting, updating, and clearing an extension's data from the POS local storage.
11+
- An extension can store up to 100 entries.
12+
- The maximum size for a key is ~1 KB, and for a value is ~1 MB.
1113
- If a target (such as \`pos.home.tile.render\`) is disabled or removed, the extension data remains.
1214
- All stored extension data that has not been updated for a month is cleared automatically after that period.
1315
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {Button, extension} from '@shopify/ui-extensions/point-of-sale';
2+
3+
export default extension(
4+
'pos.exchange.post.action.menu-item.render',
5+
(root, api) => {
6+
const button = root.createComponent(Button, {
7+
onPress: () => {
8+
api.action.presentModal();
9+
},
10+
});
11+
12+
root.append(button);
13+
},
14+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from 'react';
2+
3+
import {
4+
Button,
5+
reactExtension,
6+
useApi,
7+
} from '@shopify/ui-extensions-react/point-of-sale';
8+
9+
const ExchangeActionMenuItem = () => {
10+
const api = useApi<'pos.exchange.post.action.menu-item.render'>();
11+
return (
12+
<Button
13+
onPress={() => {
14+
api.action.presentModal();
15+
}}
16+
/>
17+
);
18+
};
19+
20+
export default reactExtension(
21+
'pos.exchange.post.action.menu-item.render',
22+
() => <ExchangeActionMenuItem />,
23+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {
2+
Navigator,
3+
Screen,
4+
ScrollView,
5+
Text,
6+
extension,
7+
} from '@shopify/ui-extensions/point-of-sale';
8+
9+
export default extension('pos.exchange.post.action.render', (root, api) => {
10+
const navigator = root.createComponent(Navigator);
11+
const screen = root.createComponent(Screen, {
12+
name: 'ExchangeDetails',
13+
title: 'Exchange Details',
14+
});
15+
const scrollView = root.createComponent(ScrollView);
16+
const text = root.createComponent(Text);
17+
18+
text.append(`Exchange ID: ${api.exchange.id}`);
19+
scrollView.append(text);
20+
screen.append(scrollView);
21+
navigator.append(screen);
22+
root.append(navigator);
23+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from 'react';
2+
3+
import {
4+
Navigator,
5+
Screen,
6+
ScrollView,
7+
Text,
8+
reactExtension,
9+
useApi,
10+
} from '@shopify/ui-extensions-react/point-of-sale';
11+
12+
const ExchangeAction = () => {
13+
const api = useApi<'pos.exchange.post.action.render'>();
14+
return (
15+
<Navigator>
16+
<Screen name="ExchangeDetails" title="Exchange Details">
17+
<ScrollView>
18+
<Text>{`Order ID: ${api.order.id}`}</Text>
19+
</ScrollView>
20+
</Screen>
21+
</Navigator>
22+
);
23+
};
24+
25+
export default reactExtension('pos.exchange.post.action.render', () => (
26+
<ExchangeAction />
27+
));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import {
2+
POSBlock,
3+
POSBlockRow,
4+
Text,
5+
extension,
6+
} from '@shopify/ui-extensions/point-of-sale';
7+
8+
export default extension('pos.exchange.post.block.render', (root, api) => {
9+
const block = root.createComponent(POSBlock, {
10+
action: {title: 'View exchange details', onPress: api.action.presentModal},
11+
});
12+
13+
const mainText = root.createComponent(Text);
14+
mainText.append('Exchange block extension');
15+
16+
const subtitleText = root.createComponent(Text);
17+
subtitleText.append(`Order ID: ${api.order.id}`);
18+
19+
const blockMainRow = root.createComponent(POSBlockRow);
20+
blockMainRow.append(mainText);
21+
22+
const blockSubtitleRow = root.createComponent(POSBlockRow);
23+
blockSubtitleRow.append(subtitleText);
24+
block.append(blockMainRow);
25+
block.append(blockSubtitleRow);
26+
27+
root.append(block);
28+
});

0 commit comments

Comments
 (0)