Skip to content

Commit a545724

Browse files
Alex-Paladfatbattk
andauthored
Add pos.return.post and pos.exchange.post extension targets (#3005)
* Add pos.return.post and pos.exchange.post extension targets * add documentation and examples for new post-return/exchange targets. --------- Co-authored-by: Han T. <[email protected]>
1 parent d0ab341 commit a545724

25 files changed

+575
-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

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}
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>{`Exchange ID: ${api.exchange.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(`Exchange ID: ${api.exchange.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+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
3+
import {
4+
POSBlock,
5+
POSBlockRow,
6+
Text,
7+
reactExtension,
8+
useApi,
9+
} from '@shopify/ui-extensions-react/point-of-sale';
10+
11+
const ExchangeBlock = () => {
12+
const api = useApi<'pos.exchange.post.block.render'>();
13+
return (
14+
<POSBlock
15+
action={{
16+
title: 'View exchange details',
17+
onPress: api.action.presentModal,
18+
}}
19+
>
20+
<POSBlockRow>
21+
<Text>{'Exchange block extension'}</Text>
22+
<Text>{`Exchange ID: ${api.exchange.id}`}</Text>
23+
</POSBlockRow>
24+
</POSBlock>
25+
);
26+
};
27+
28+
export default reactExtension('pos.exchange.post.block.render', () => (
29+
<ExchangeBlock />
30+
));
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.return.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+
);

0 commit comments

Comments
 (0)