bitsnap-react 1.4.15 → 1.6.0
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/README.md +153 -0
- package/dist/chunk-O4ICBP4G.mjs +2 -0
- package/dist/chunk-O4ICBP4G.mjs.map +1 -0
- package/dist/chunk-U6FLIRIV.mjs +2 -0
- package/dist/errors.d.mts +2 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.mjs +1 -1
- package/dist/errors.mjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +464 -0
- package/dist/index.d.ts +464 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.mts +2 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.mjs +1 -1
- package/dist/internal.mjs.map +1 -1
- package/dist/models.d.mts +592 -0
- package/dist/models.d.ts +592 -0
- package/dist/models.js +1 -1
- package/dist/models.js.map +1 -1
- package/dist/models.mjs +1 -1
- package/dist/models.mjs.map +1 -1
- package/dist/returns.d.mts +417 -0
- package/dist/returns.d.ts +417 -0
- package/dist/returns.js +2 -0
- package/dist/returns.js.map +1 -0
- package/dist/returns.mjs +2 -0
- package/dist/returns.mjs.map +1 -0
- package/package.json +48 -7
- package/dist/chunk-43KBVYBT.mjs +0 -2
- /package/dist/{chunk-43KBVYBT.mjs.map → chunk-U6FLIRIV.mjs.map} +0 -0
package/README.md
CHANGED
|
@@ -57,6 +57,159 @@ It uses modern React patterns and libraries like:
|
|
|
57
57
|
- Customizable host URL
|
|
58
58
|
- Supports test/production environments
|
|
59
59
|
|
|
60
|
+
## Checkout appearance
|
|
61
|
+
|
|
62
|
+
`BitsnapCheckout` accepts an optional `appearance` prop. Omitting it - or passing
|
|
63
|
+
`{}` - keeps the current presentation exactly as it is, so existing integrations
|
|
64
|
+
do not have to change.
|
|
65
|
+
|
|
66
|
+
### Import the stylesheet
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import "bitsnap-react/dist/index.css";
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The stylesheet ships ready to use. Do not run it through a PostCSS prefixer or
|
|
73
|
+
compile the library's Tailwind source again: the rules are already scoped.
|
|
74
|
+
|
|
75
|
+
### Brand colors, font and radius
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
import { BitsnapCheckout } from "bitsnap-react";
|
|
79
|
+
|
|
80
|
+
function MyComponent() {
|
|
81
|
+
return (
|
|
82
|
+
<BitsnapCheckout
|
|
83
|
+
projectID="your-project-id"
|
|
84
|
+
appearance={{
|
|
85
|
+
tokens: {
|
|
86
|
+
fontFamily: '"Inter", sans-serif',
|
|
87
|
+
background: "#ffffff",
|
|
88
|
+
foreground: "#202020",
|
|
89
|
+
buttonBackground: "#635bff",
|
|
90
|
+
buttonForeground: "#ffffff",
|
|
91
|
+
radius: "12px",
|
|
92
|
+
},
|
|
93
|
+
}}
|
|
94
|
+
/>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Fonts are not loaded by the library - load the font file in your application, the
|
|
100
|
+
checkout only applies the family you pass.
|
|
101
|
+
|
|
102
|
+
### Light theme
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
<BitsnapCheckout projectID="your-project-id" appearance={{ theme: "light" }} />
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`theme` accepts `"dark"` (the default presentation) and `"light"`. There is no
|
|
109
|
+
automatic system theme selection.
|
|
110
|
+
|
|
111
|
+
### Individual elements
|
|
112
|
+
|
|
113
|
+
Every part of the checkout is addressable through a stable slot. Slots accept a
|
|
114
|
+
`className` (merged after the built-in classes) and a `style` (merged after the
|
|
115
|
+
built-in styles):
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
<BitsnapCheckout
|
|
119
|
+
projectID="your-project-id"
|
|
120
|
+
appearance={{
|
|
121
|
+
elements: {
|
|
122
|
+
title: { style: { fontFamily: '"Georgia", serif', fontSize: "28px" } },
|
|
123
|
+
checkoutButton: { className: "store-checkout-button" },
|
|
124
|
+
countryOption: { className: "px-4" },
|
|
125
|
+
},
|
|
126
|
+
}}
|
|
127
|
+
/>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
| Slot | Element |
|
|
131
|
+
| -------------------- | ------------------------------------------- |
|
|
132
|
+
| `root` | Theme boundary of the drawer |
|
|
133
|
+
| `overlay` | Backdrop behind the drawer |
|
|
134
|
+
| `panel` | Drawer panel |
|
|
135
|
+
| `header` | Drawer header row |
|
|
136
|
+
| `title` | "Cart" heading |
|
|
137
|
+
| `closeButton` | Close button |
|
|
138
|
+
| `productList` | Scrollable product list |
|
|
139
|
+
| `product` | Single product row |
|
|
140
|
+
| `productImage` | Product image |
|
|
141
|
+
| `productName` | Product name |
|
|
142
|
+
| `productPrice` | Product price |
|
|
143
|
+
| `quantityControl` | Quantity stepper |
|
|
144
|
+
| `quantityInput` | Quantity value input |
|
|
145
|
+
| `quantityButton` | Quantity `-`/`+` buttons |
|
|
146
|
+
| `removeButton` | "Remove" button |
|
|
147
|
+
| `summary` | Total block |
|
|
148
|
+
| `totalLabel` | "Total" label |
|
|
149
|
+
| `totalValue` | Total amount |
|
|
150
|
+
| `deliveryText` | Delivery note |
|
|
151
|
+
| `countryLabel` | "Choose country" label |
|
|
152
|
+
| `countryTrigger` | Country select trigger |
|
|
153
|
+
| `countryDropdown` | Portalled country list |
|
|
154
|
+
| `countrySearch` | Country search field |
|
|
155
|
+
| `countryOption` | Single country option |
|
|
156
|
+
| `paymentButtons` | Apple Pay / Google Pay wrappers |
|
|
157
|
+
| `checkoutButton` | "Next step" button |
|
|
158
|
+
| `emptyState` | Empty cart message |
|
|
159
|
+
| `error` | Checkout error message |
|
|
160
|
+
| `skeleton` | Loading placeholder |
|
|
161
|
+
|
|
162
|
+
The same names are rendered as `data-bitsnap-checkout-slot` attributes, and the
|
|
163
|
+
drawer/dropdown boundaries carry `data-bitsnap-checkout`, so plain CSS works too:
|
|
164
|
+
|
|
165
|
+
```css
|
|
166
|
+
/* brand hover and focus states that the library cannot express */
|
|
167
|
+
.store-checkout-button:hover {
|
|
168
|
+
filter: brightness(1.1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
[data-bitsnap-checkout-slot="countryOption"]:hover {
|
|
172
|
+
background: #eef2ff;
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Custom classes follow the normal CSS cascade; `className` is merged with `cn`, so
|
|
177
|
+
conflicting Tailwind utilities from the library are resolved in your favor.
|
|
178
|
+
|
|
179
|
+
### Tokens
|
|
180
|
+
|
|
181
|
+
| Token | Applies to |
|
|
182
|
+
| ------------------------- | ------------------------------------------------------- |
|
|
183
|
+
| `fontFamily` | The whole checkout |
|
|
184
|
+
| `fontSize` | The whole checkout |
|
|
185
|
+
| `background` | Panel, country trigger |
|
|
186
|
+
| `surface` | Country dropdown, search bar, loading skeletons |
|
|
187
|
+
| `foreground` | Titles, prices, total |
|
|
188
|
+
| `mutedForeground` | Empty cart, delivery note, country label, search field |
|
|
189
|
+
| `border` | Country trigger, dropdown, product separators |
|
|
190
|
+
| `buttonBackground` | "Next step" button |
|
|
191
|
+
| `buttonForeground` | "Next step" button |
|
|
192
|
+
| `buttonHoverBackground` | "Next step" button on hover |
|
|
193
|
+
| `hoverSurface` | Close button, country options |
|
|
194
|
+
| `focusRing` | Focus rings of the shared controls |
|
|
195
|
+
| `error` | Error message, unavailable product outline |
|
|
196
|
+
| `overlay` | Drawer backdrop |
|
|
197
|
+
| `radius` | Radius of the rounded elements |
|
|
198
|
+
|
|
199
|
+
### What stays untouched
|
|
200
|
+
|
|
201
|
+
- The trigger button (`className`, `children`, `numberOfProductsInCartOptions`) and
|
|
202
|
+
every callback keep their current meaning.
|
|
203
|
+
- The appearance lives in the checkout component only. It is not a global setting
|
|
204
|
+
and does not reuse the panel's `setTheme`.
|
|
205
|
+
- Apple Pay and Google Pay keep their native artwork and fonts; only the space
|
|
206
|
+
around them is themed.
|
|
207
|
+
- Layout, responsive widths and checkout actions are unchanged. Override widths
|
|
208
|
+
from your own CSS.
|
|
209
|
+
- The country list is rendered in a portal. It receives the theme (colors, font,
|
|
210
|
+
focus ring and stacking) as soon as you pass an `appearance`; without one it
|
|
211
|
+
renders exactly as before.
|
|
212
|
+
|
|
60
213
|
# Examples
|
|
61
214
|
|
|
62
215
|
1. `BitsnapCheckout` Component:
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{enumDesc as ye,fileDesc as O}from"@bufbuild/protobuf/codegenv2";var k=O("Chtjb21tb24vdjEvZW52aXJvbm1lbnQucHJvdG8SCWNvbW1vbi52MSonCgtFbnZpcm9ubWVudBIOCgpQUk9EVUNUSU9OEAASCAoEVEVTVBABQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw"),T=(t=>(t[t.PRODUCTION=0]="PRODUCTION",t[t.TEST=1]="TEST",t))(T||{});import{Code as P,ConnectError as _,createClient as $}from"@connectrpc/connect";import{createConnectTransport as ee}from"@connectrpc/connect-web";import{fileDesc as Q,messageDesc as Ve,serviceDesc as U}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as D}from"@bufbuild/protobuf/wkt";var z=Q("ChdwdWJsaWMvdjEvcmV0dXJucy5wcm90bxIJcHVibGljLnYxImsKGVN0YXJ0UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIrCgtlbnZpcm9ubWVudBgDIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJhChpTdGFydFJldHVyblNlc3Npb25SZXNwb25zZRIUCgxjaGFsbGVuZ2VfaWQYASABKAkSHAoUcmVzZW5kX2FmdGVyX3NlY29uZHMYAiABKAUSDwoHbWVzc2FnZRgDIAEoCSKBAQoaVmVyaWZ5UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxjaGFsbGVuZ2VfaWQYAiABKAkSDAoEY29kZRgDIAEoCRIrCgtlbnZpcm9ubWVudBgEIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJkChtWZXJpZnlSZXR1cm5TZXNzaW9uUmVzcG9uc2USFQoNc2Vzc2lvbl90b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIzCgpSZXR1cm5QYWdlEhEKCXBhZ2Vfc2l6ZRgBIAEoBRISCgpwYWdlX3Rva2VuGAIgASgJItQBChJSZXR1cm5PcmRlclN1bW1hcnkSGgoSY2Fub25pY2FsX29yZGVyX2lkGAEgASgJEhkKEWRpc3BsYXlfcmVmZXJlbmNlGAIgASgJEg8KB2dhdGV3YXkYAyABKAkSMAoMcHVyY2hhc2VkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgt0b3RhbF9taW5vchgFIAEoAxIQCghjdXJyZW5jeRgGIAEoCRIdChVyZXR1cm5hYmxlX2xpbmVfY291bnQYByABKAUiawoXTGlzdFJldHVybk9yZGVyc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRISCgpwYWdlX3Rva2VuGAQgASgJInEKGExpc3RSZXR1cm5PcmRlcnNSZXNwb25zZRItCgZvcmRlcnMYASADKAsyHS5wdWJsaWMudjEuUmV0dXJuT3JkZXJTdW1tYXJ5EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRINCgV0b3RhbBgDIAEoBSLEAwoPUmV0dXJuT3JkZXJMaW5lEg8KB2xpbmVfaWQYASABKAkSEgoKcHJvZHVjdF9pZBgCIAEoCRISCgp2YXJpYW50X2lkGAMgASgJEgwKBG5hbWUYBCABKAkSGAoQZnVsZmlsbG1lbnRfdHlwZRgFIAEoCRIaChJwdXJjaGFzZWRfcXVhbnRpdHkYBiABKAUSGQoRcmVzZXJ2ZWRfcXVhbnRpdHkYByABKAUSGQoRcmV0dXJuZWRfcXVhbnRpdHkYCCABKAUSGgoSYXZhaWxhYmxlX3F1YW50aXR5GAkgASgFEhoKEnJlZ3VsYXJfdW5pdF9taW5vchgKIAEoAxIXCg9wYWlkX3VuaXRfbWlub3IYCyABKAMSEAoIY3VycmVuY3kYDCABKAkSEAoIZWxpZ2libGUYDSABKAgSGAoQZXhjbHVzaW9uX3JlYXNvbhgOIAEoCRIdChVwYWlkX2xpbmVfdG90YWxfbWlub3IYDyABKAMSHwoXY291cG9uX2FsbG9jYXRpb25fbWlub3IYECABKAMSFQoNYWNjZXNzX3NvdXJjZRgRIAEoCRIYChBhY2Nlc3NfcmVmZXJlbmNlGBIgASgJIt8BChFSZXR1cm5PcmRlckRldGFpbBIaChJjYW5vbmljYWxfb3JkZXJfaWQYASABKAkSGQoRZGlzcGxheV9yZWZlcmVuY2UYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIwCgxwdXJjaGFzZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC3RvdGFsX21pbm9yGAUgASgDEhAKCGN1cnJlbmN5GAYgASgJEikKBWxpbmVzGAcgAygLMhoucHVibGljLnYxLlJldHVybk9yZGVyTGluZSI7ChZSZXR1cm5SZXF1ZXN0TGluZUlucHV0Eg8KB2xpbmVfaWQYASABKAkSEAoIcXVhbnRpdHkYAiABKAUicwoSUmV0dXJuSGlzdG9yeUVudHJ5EgoKAmlkGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZzdGF0dXMYAyABKAkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiuQEKFVJldHVyblJlcXVlc3RMaW5lVmlldxIPCgdsaW5lX2lkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoQZnVsZmlsbG1lbnRfdHlwZRgDIAEoCRIaChJyZXF1ZXN0ZWRfcXVhbnRpdHkYBCABKAUSGQoRYXBwcm92ZWRfcXVhbnRpdHkYBSABKAUSGQoRcmVjZWl2ZWRfcXVhbnRpdHkYBiABKAUSFQoNYWNjZXNzX3N0YXR1cxgHIAEoCSL6AgoRUmV0dXJuUmVxdWVzdFZpZXcSCgoCaWQYASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgDIAEoCRIOCgZzdGF0dXMYBCABKAkSFQoNcmVmdW5kX3N0YXR1cxgFIAEoCRIbChNyZWZ1bmRfYW1vdW50X21pbm9yGAYgASgDEhAKCGN1cnJlbmN5GAcgASgJEhUKDWN1c3RvbWVyX25vdGUYCCABKAkSDwoHdmVyc2lvbhgJIAEoAxIuCgpjcmVhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgVsaW5lcxgLIAMoCzIgLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0TGluZVZpZXcSLgoHaGlzdG9yeRgMIAMoCzIdLnB1YmxpYy52MS5SZXR1cm5IaXN0b3J5RW50cnkSGwoTcmV0dXJuX2luc3RydWN0aW9ucxgNIAEoCSJiChlHZXRSZXR1cm5hYmxlT3JkZXJSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIaChJjYW5vbmljYWxfb3JkZXJfaWQYAyABKAkigAEKGkdldFJldHVybmFibGVPcmRlclJlc3BvbnNlEisKBW9yZGVyGAEgASgLMhwucHVibGljLnYxLlJldHVybk9yZGVyRGV0YWlsEjUKDnJldHVybl9oaXN0b3J5GAIgAygLMh0ucHVibGljLnYxLlJldHVybkhpc3RvcnlFbnRyeSK8AQoaQ3JlYXRlUmV0dXJuUmVxdWVzdFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgDIAEoCRIwCgVpdGVtcxgEIAMoCzIhLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0TGluZUlucHV0EgwKBG5vdGUYBSABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAYgASgJIkwKG0NyZWF0ZVJldHVyblJlcXVlc3RSZXNwb25zZRItCgdyZXF1ZXN0GAEgASgLMhwucHVibGljLnYxLlJldHVyblJlcXVlc3RWaWV3ImgKFExpc3RNeVJldHVybnNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSEgoKcGFnZV90b2tlbhgEIAEoCSJuChVMaXN0TXlSZXR1cm5zUmVzcG9uc2USLQoHcmV0dXJucxgBIAMoCzIcLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0VmlldxIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSDQoFdG90YWwYAyABKAUiUgoSR2V0TXlSZXR1cm5SZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIRCglyZXR1cm5faWQYAyABKAkiRAoTR2V0TXlSZXR1cm5SZXNwb25zZRItCgdyZXF1ZXN0GAEgASgLMhwucHVibGljLnYxLlJldHVyblJlcXVlc3RWaWV3MqEFCg5SZXR1cm5zU2VydmljZRJhChJTdGFydFJldHVyblNlc3Npb24SJC5wdWJsaWMudjEuU3RhcnRSZXR1cm5TZXNzaW9uUmVxdWVzdBolLnB1YmxpYy52MS5TdGFydFJldHVyblNlc3Npb25SZXNwb25zZRJkChNWZXJpZnlSZXR1cm5TZXNzaW9uEiUucHVibGljLnYxLlZlcmlmeVJldHVyblNlc3Npb25SZXF1ZXN0GiYucHVibGljLnYxLlZlcmlmeVJldHVyblNlc3Npb25SZXNwb25zZRJbChBMaXN0UmV0dXJuT3JkZXJzEiIucHVibGljLnYxLkxpc3RSZXR1cm5PcmRlcnNSZXF1ZXN0GiMucHVibGljLnYxLkxpc3RSZXR1cm5PcmRlcnNSZXNwb25zZRJhChJHZXRSZXR1cm5hYmxlT3JkZXISJC5wdWJsaWMudjEuR2V0UmV0dXJuYWJsZU9yZGVyUmVxdWVzdBolLnB1YmxpYy52MS5HZXRSZXR1cm5hYmxlT3JkZXJSZXNwb25zZRJkChNDcmVhdGVSZXR1cm5SZXF1ZXN0EiUucHVibGljLnYxLkNyZWF0ZVJldHVyblJlcXVlc3RSZXF1ZXN0GiYucHVibGljLnYxLkNyZWF0ZVJldHVyblJlcXVlc3RSZXNwb25zZRJSCg1MaXN0TXlSZXR1cm5zEh8ucHVibGljLnYxLkxpc3RNeVJldHVybnNSZXF1ZXN0GiAucHVibGljLnYxLkxpc3RNeVJldHVybnNSZXNwb25zZRJMCgtHZXRNeVJldHVybhIdLnB1YmxpYy52MS5HZXRNeVJldHVyblJlcXVlc3QaHi5wdWJsaWMudjEuR2V0TXlSZXR1cm5SZXNwb25zZWIGcHJvdG8z",[k,D]);var L=U(z,0);import{QueryClient as te,QueryClientProvider as ne,useMutation as C,useQuery as N,useQueryClient as se}from"@tanstack/react-query";import re,{createContext as oe,useContext as ie,useMemo as F,useRef as K,useState as l}from"react";import{Fragment as ge,jsx as r,jsxs as o}from"react/jsx-runtime";var q=oe(null);function ue({projectID:e,host:n="https://bitsnap.pl",environment:t=0,children:i}){let u=`${n.replace(/\/$/,"")}|${e}|${t}`,[a,c]=l(),d=a?.scope===u?a.token:void 0,R=a?.scope===u?a.expiresAt:void 0,[h]=l(()=>new te({defaultOptions:{queries:{staleTime:0,refetchOnWindowFocus:!0}}})),g=F(()=>$(L,ee({baseUrl:`${n.replace(/\/$/,"")}/api/rpc`,useBinaryFormat:!0})),[n]),S=F(()=>({projectID:e,host:n.replace(/\/$/,""),environment:t,client:g,sessionToken:d,setSession:(m,Z)=>c(m?{token:m,expiresAt:Z,scope:u}:void 0),expiresAt:R}),[e,n,t,g,d,R,u]);return r(ne,{client:h,children:r(q.Provider,{value:S,children:i})})}function y(){let e=ie(q);if(!e)throw new Error("Wrap returns hooks in BitsnapReturnsProvider.");return e}function V(e,n){throw e instanceof _&&e.code===P.Unauthenticated&&n(),e}function ae(){let e=y(),n=C({mutationFn:u=>e.client.startReturnSession({projectId:e.projectID,email:u,environment:e.environment})}),t=C({mutationFn:async({challengeId:u,code:a})=>{let c=await e.client.verifyReturnSession({projectId:e.projectID,challengeId:u,code:a,environment:e.environment}),d=c.expiresAt?Number(c.expiresAt.seconds)*1e3+c.expiresAt.nanos/1e6:void 0;return e.setSession(c.sessionToken,d),c}}),i=()=>{e.setSession(void 0),t.reset(),n.reset()};return{startSession:n.mutateAsync,verifySession:t.mutateAsync,logout:i,isAuthenticated:!!(e.sessionToken&&(!e.expiresAt||Date.now()<e.expiresAt)),starting:n.isPending,verifying:t.isPending,error:n.error??t.error}}function ce(e=20,n=""){let t=y(),i=t.sessionToken;return N({queryKey:["bitsnap-returns",t.host,t.projectID,t.environment,e,n,"orders"],enabled:!!(i&&(!t.expiresAt||Date.now()<t.expiresAt)),queryFn:()=>t.client.listReturnOrders({projectId:t.projectID,sessionToken:i,pageSize:e,pageToken:n}).catch(u=>V(u,()=>t.setSession(void 0)))})}function le(e){let n=y(),t=n.sessionToken;return N({queryKey:["bitsnap-returns",n.host,n.projectID,n.environment,e,"order"],enabled:!!(t&&e&&(!n.expiresAt||Date.now()<n.expiresAt)),queryFn:()=>n.client.getReturnableOrder({projectId:n.projectID,sessionToken:t,canonicalOrderId:e}).catch(i=>V(i,()=>n.setSession(void 0)))})}function de(){let e=y(),n=e.sessionToken,t=se();return C({mutationFn:i=>{if(!n||e.expiresAt&&Date.now()>=e.expiresAt)throw e.setSession(void 0),new Error("Verify your email to continue.");return e.client.createReturnRequest({projectId:e.projectID,sessionToken:n,canonicalOrderId:i.canonicalOrderID,items:i.items,note:i.note??"",idempotencyKey:i.idempotencyKey??globalThis.crypto.randomUUID()}).catch(u=>V(u,()=>e.setSession(void 0)))},onSuccess:async()=>t.invalidateQueries({queryKey:["bitsnap-returns",e.host,e.projectID,e.environment]})})}function pe(e=20,n=""){let t=y(),i=t.sessionToken;return N({queryKey:["bitsnap-returns",t.host,t.projectID,t.environment,e,n,"mine"],enabled:!!(i&&(!t.expiresAt||Date.now()<t.expiresAt)),queryFn:()=>t.client.listMyReturns({projectId:t.projectID,sessionToken:i,pageSize:e,pageToken:n}).catch(u=>V(u,()=>t.setSession(void 0)))})}var Re={title:"Request a return",email:"Email address",sendCode:"Send code",code:"Email code",verify:"Verify",orders:"Your orders",submit:"Submit return",note:"Note (optional)",loading:"Loading\u2026",history:"My return requests"};function Ce(e){return r(ue,{projectID:e.projectID,host:e.host,environment:e.environment,children:r(me,{...e})})}function me(e){let n={...Re,...e.texts},t=ae(),[i,u]=l(""),a=ce(20,i),c=pe(),d=de(),[R,h]=l(""),[g,S]=l(""),[m,Z]=l(""),[J,X]=l(),[x,f]=l(),[G,Y]=l({}),[M,H]=l(""),[p,E]=l(),I=K(!1),W=K(void 0),A=le(J?.canonicalOrderId);re.useEffect(()=>{A.data?.order&&f(A.data.order)},[A.data]);let B=t.error??a.error??A.error??d.error,j={"--bitsnap-returns-brand":e.theme?.brandColor??"#111827"};return o("section",{className:`bitsnap-returns ${e.className??""}`,style:j,"aria-live":"polite",children:[r("h2",{className:"mb-4 text-xl font-semibold",children:n.title}),!t.isAuthenticated&&o("div",{className:"space-y-3",children:[o("label",{className:"block text-sm",children:[n.email,r("input",{type:"email",autoComplete:"email",value:R,onChange:s=>h(s.target.value),className:"mt-1 block w-full rounded border p-2"})]}),g?o(ge,{children:[o("label",{className:"block text-sm",children:[n.code,r("input",{inputMode:"numeric",autoComplete:"one-time-code",value:m,onChange:s=>Z(s.target.value),className:"mt-1 block w-full rounded border p-2"})]}),r("button",{type:"button",disabled:t.verifying||!m,onClick:()=>t.verifySession({challengeId:g,code:m}),className:"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50",children:t.verifying?n.loading:n.verify}),r("button",{type:"button",disabled:t.starting,onClick:async()=>{let s=await t.startSession(R);S(s.challengeId)},className:"ml-3 underline",children:"Resend code"})]}):r("button",{type:"button",disabled:t.starting||!R,onClick:async()=>{let s=await t.startSession(R);S(s.challengeId)},className:"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50",children:t.starting?n.loading:n.sendCode})]}),a.isLoading&&r("p",{children:n.loading}),a.data!=null&&!J&&!p&&o("div",{className:"space-y-3",children:[r("h3",{className:"font-medium",children:n.orders}),a.data.orders.length===0&&r("p",{children:"No eligible orders found."}),a.data.orders.map(s=>o("button",{type:"button",onClick:()=>X(s),className:"block w-full rounded border p-3 text-left hover:border-[var(--bitsnap-returns-brand)]",children:[r("span",{className:"font-medium",children:s.displayReference}),o("span",{className:"ml-2 text-sm text-gray-600",children:[s.currency," ",w(s.totalMinor)]})]},s.canonicalOrderId)),a.data.nextPageToken&&r("button",{type:"button",onClick:()=>u(a.data?.nextPageToken??""),className:"underline",children:"Next orders"})]}),x&&!p&&o("div",{className:"space-y-3",children:[o("button",{type:"button",onClick:()=>{X(void 0),f(void 0)},className:"text-sm underline",children:["\u2190 ",n.orders]}),x.lines.map(s=>o("label",{className:"flex items-center justify-between gap-3 rounded border p-3",children:[o("span",{children:[s.name,o("small",{className:"block text-gray-600",children:[s.availableQuantity," available \xB7 ",s.currency," ",w(s.paidUnitMinor)]})]}),r("input",{type:"number",min:0,max:s.availableQuantity,disabled:!s.eligible,value:G[s.lineId]??0,onChange:b=>Y(v=>({...v,[s.lineId]:Math.max(0,Math.min(s.availableQuantity,Number(b.target.value)))})),className:"w-20 rounded border p-2"}),!s.eligible&&r("small",{children:s.exclusionReason})]},s.lineId)),o("label",{className:"block text-sm",children:[n.note,r("textarea",{value:M,onChange:s=>H(s.target.value),className:"mt-1 block w-full rounded border p-2"})]}),r("button",{type:"button",disabled:d.isPending||!Object.values(G).some(s=>s>0),onClick:async()=>{if(!I.current){I.current=!0,W.current??=globalThis.crypto.randomUUID();try{let s=await d.mutateAsync({canonicalOrderID:x.canonicalOrderId,items:Object.entries(G).filter(([,b])=>b>0).map(([b,v])=>({lineId:b,quantity:v})),note:M,idempotencyKey:W.current});s&&"request"in s&&s.request&&E(s.request)}finally{I.current=!1}}},className:"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50",children:d.isPending?n.loading:n.submit})]}),p&&o("div",{className:"rounded border p-4",children:[r("h3",{className:"font-semibold",children:"Return submitted"}),o("p",{children:["Reference: ",r("strong",{children:p.reference})]}),o("p",{children:["Status: ",p.status]}),p.returnInstructions&&r("p",{className:"mt-2",children:p.returnInstructions}),r("button",{type:"button",onClick:()=>{E(void 0),X(void 0),f(void 0),Y({}),c.refetch()},className:"mt-3 underline",children:n.history})]}),c.data?.returns&&c.data.returns.length>0&&!p&&o("div",{className:"mt-6",children:[r("h3",{className:"mb-2 font-medium",children:n.history}),c.data.returns.map(s=>o("div",{className:"border-t py-2",children:[r("strong",{children:s.reference}),r("span",{className:"ml-2",children:s.status})]},s.id))]}),B&&r("p",{role:"alert",className:"mt-3 text-sm text-red-700",children:B.message})]})}function w(e){return(Number(e)/100).toFixed(2)}export{T as a,L as b,ue as c,ae as d,ce as e,le as f,de as g,pe as h,Ce as i};
|
|
2
|
+
//# sourceMappingURL=chunk-O4ICBP4G.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gen/proto/common/v1/environment_pb.ts","../src/returns/BitsnapReturns.tsx","../src/gen/proto/public/v1/returns_pb.ts"],"sourcesContent":["// @generated by protoc-gen-es v2.11.0 with parameter \"target=ts\"\n// @generated from file common/v1/environment.proto (package common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file common/v1/environment.proto.\n */\nexport const file_common_v1_environment: GenFile = /*@__PURE__*/\n fileDesc(\"Chtjb21tb24vdjEvZW52aXJvbm1lbnQucHJvdG8SCWNvbW1vbi52MSonCgtFbnZpcm9ubWVudBIOCgpQUk9EVUNUSU9OEAASCAoEVEVTVBABQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw\");\n\n/**\n * @generated from enum common.v1.Environment\n */\nexport enum Environment {\n /**\n * @generated from enum value: PRODUCTION = 0;\n */\n PRODUCTION = 0,\n\n /**\n * @generated from enum value: TEST = 1;\n */\n TEST = 1,\n}\n\n/**\n * Describes the enum common.v1.Environment.\n */\nexport const EnvironmentSchema: GenEnum<Environment> = /*@__PURE__*/\n enumDesc(file_common_v1_environment, 0);\n\n","\"use client\";\n\nimport { Code, ConnectError, createClient, type Client } from \"@connectrpc/connect\";\nimport { createConnectTransport } from \"@connectrpc/connect-web\";\nimport { Environment } from \"../gen/proto/common/v1/environment_pb\";\nimport { ReturnsService } from \"../gen/proto/public/v1/returns_pb\";\nimport type {\n ReturnOrderDetail,\n ReturnRequestView,\n ReturnOrderSummary,\n} from \"../gen/proto/public/v1/returns_pb\";\nimport { QueryClient, QueryClientProvider, useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport React, { createContext, useContext, useMemo, useRef, useState } from \"react\";\n\nexport type BitsnapReturnsProviderProps = {\n projectID: string;\n host?: string;\n environment?: Environment;\n children: React.ReactNode;\n};\n\ntype ReturnsContextValue = {\n projectID: string;\n host: string;\n environment: Environment;\n client: Client<typeof ReturnsService>;\n sessionToken?: string;\n setSession: (token?: string, expiresAt?: number) => void;\n expiresAt?: number;\n};\n\nconst ReturnsContext = createContext<ReturnsContextValue | null>(null);\n\n/** Provider for the returns hooks when building a custom customer flow. */\nexport function BitsnapReturnsProvider({\n projectID,\n host = \"https://bitsnap.pl\",\n environment = Environment.PRODUCTION,\n children,\n}: BitsnapReturnsProviderProps) {\n const scope = `${host.replace(/\\/$/, \"\")}|${projectID}|${environment}`;\n const [session, setSessionState] = useState<{ token: string; expiresAt?: number; scope: string }>();\n const sessionToken = session?.scope === scope ? session.token : undefined;\n const expiresAt = session?.scope === scope ? session.expiresAt : undefined;\n const [queryClient] = useState(() => new QueryClient({ defaultOptions: { queries: { staleTime: 0, refetchOnWindowFocus: true } } }));\n const client = useMemo(\n () =>\n createClient(\n ReturnsService,\n createConnectTransport({\n baseUrl: `${host.replace(/\\/$/, \"\")}/api/rpc`,\n useBinaryFormat: true,\n }),\n ),\n [host],\n );\n const contextValue = useMemo(\n () => ({\n projectID,\n host: host.replace(/\\/$/, \"\"),\n environment,\n client,\n sessionToken,\n setSession: (token?: string, expiry?: number) => setSessionState(\n token ? { token, expiresAt: expiry, scope } : undefined,\n ),\n expiresAt,\n }),\n [projectID, host, environment, client, sessionToken, expiresAt, scope],\n );\n\n return <QueryClientProvider client={queryClient}><ReturnsContext.Provider value={contextValue}>{children}</ReturnsContext.Provider></QueryClientProvider>;\n}\n\nfunction useReturnsContext() {\n const value = useContext(ReturnsContext);\n if (!value) throw new Error(\"Wrap returns hooks in BitsnapReturnsProvider.\");\n return value;\n}\n\nfunction handleSessionError(error: unknown, clear: () => void) {\n if (error instanceof ConnectError && error.code === Code.Unauthenticated) clear();\n throw error;\n}\n\nexport function useReturnSession() {\n const ctx = useReturnsContext();\n const start = useMutation({\n mutationFn: (email: string) =>\n ctx.client.startReturnSession({ projectId: ctx.projectID, email, environment: ctx.environment }),\n });\n const verify = useMutation({\n mutationFn: async ({ challengeId, code }: { challengeId: string; code: string }) => {\n const result = await ctx.client.verifyReturnSession({\n projectId: ctx.projectID,\n challengeId,\n code,\n environment: ctx.environment,\n });\n const expiry = result.expiresAt\n ? Number(result.expiresAt.seconds) * 1000 + result.expiresAt.nanos / 1_000_000\n : undefined;\n ctx.setSession(result.sessionToken, expiry);\n return result;\n },\n });\n const logout = () => {\n ctx.setSession(undefined);\n verify.reset();\n start.reset();\n };\n return { startSession: start.mutateAsync, verifySession: verify.mutateAsync, logout, isAuthenticated: Boolean(ctx.sessionToken && (!ctx.expiresAt || Date.now() < ctx.expiresAt)), starting: start.isPending, verifying: verify.isPending, error: start.error ?? verify.error };\n}\n\nexport function useReturnOrders(pageSize = 20, pageToken = \"\") {\n const ctx = useReturnsContext();\n const token = ctx.sessionToken;\n return useQuery({\n queryKey: [\"bitsnap-returns\", ctx.host, ctx.projectID, ctx.environment, pageSize, pageToken, \"orders\"],\n enabled: Boolean(token && (!ctx.expiresAt || Date.now() < ctx.expiresAt)),\n queryFn: () => ctx.client.listReturnOrders({ projectId: ctx.projectID, sessionToken: token!, pageSize, pageToken }).catch((e) => handleSessionError(e, () => ctx.setSession(undefined))),\n });\n}\n\nexport function useReturnableOrder(canonicalOrderID?: string) {\n const ctx = useReturnsContext();\n const token = ctx.sessionToken;\n return useQuery({\n queryKey: [\"bitsnap-returns\", ctx.host, ctx.projectID, ctx.environment, canonicalOrderID, \"order\"],\n enabled: Boolean(token && canonicalOrderID && (!ctx.expiresAt || Date.now() < ctx.expiresAt)),\n queryFn: () => ctx.client.getReturnableOrder({ projectId: ctx.projectID, sessionToken: token!, canonicalOrderId: canonicalOrderID! }).catch((e) => handleSessionError(e, () => ctx.setSession(undefined))),\n });\n}\n\nexport function useCreateReturn() {\n const ctx = useReturnsContext();\n const token = ctx.sessionToken;\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: { canonicalOrderID: string; items: { lineId: string; quantity: number }[]; note?: string; idempotencyKey?: string }) => {\n if (!token || (ctx.expiresAt && Date.now() >= ctx.expiresAt)) {\n ctx.setSession(undefined);\n throw new Error(\"Verify your email to continue.\");\n }\n return ctx.client.createReturnRequest({\n projectId: ctx.projectID,\n sessionToken: token,\n canonicalOrderId: input.canonicalOrderID,\n items: input.items,\n note: input.note ?? \"\",\n idempotencyKey: input.idempotencyKey ?? globalThis.crypto.randomUUID(),\n }).catch((e) => handleSessionError(e, () => ctx.setSession(undefined)));\n },\n onSuccess: async () => queryClient.invalidateQueries({ queryKey: [\"bitsnap-returns\", ctx.host, ctx.projectID, ctx.environment] }),\n });\n}\n\nexport function useMyReturns(pageSize = 20, pageToken = \"\") {\n const ctx = useReturnsContext();\n const token = ctx.sessionToken;\n return useQuery({\n queryKey: [\"bitsnap-returns\", ctx.host, ctx.projectID, ctx.environment, pageSize, pageToken, \"mine\"],\n enabled: Boolean(token && (!ctx.expiresAt || Date.now() < ctx.expiresAt)),\n queryFn: () => ctx.client.listMyReturns({ projectId: ctx.projectID, sessionToken: token!, pageSize, pageToken }).catch((e) => handleSessionError(e, () => ctx.setSession(undefined))),\n });\n}\n\nexport type BitsnapReturnsProps = {\n projectID: string;\n host?: string;\n environment?: Environment;\n texts?: Partial<{\n title: string; email: string; sendCode: string; code: string; verify: string;\n orders: string; submit: string; note: string; loading: string; history: string;\n }>;\n theme?: { brandColor?: string };\n className?: string;\n};\n\nconst defaultTexts = {\n title: \"Request a return\", email: \"Email address\", sendCode: \"Send code\", code: \"Email code\",\n verify: \"Verify\", orders: \"Your orders\", submit: \"Submit return\", note: \"Note (optional)\",\n loading: \"Loading…\", history: \"My return requests\",\n};\n\nexport function BitsnapReturns(props: BitsnapReturnsProps) {\n return (\n <BitsnapReturnsProvider projectID={props.projectID} host={props.host} environment={props.environment}>\n <BitsnapReturnsForm {...props} />\n </BitsnapReturnsProvider>\n );\n}\n\nfunction BitsnapReturnsForm(props: BitsnapReturnsProps) {\n const texts = { ...defaultTexts, ...props.texts };\n const session = useReturnSession();\n const [orderPageToken, setOrderPageToken] = useState(\"\");\n const ordersQuery = useReturnOrders(20, orderPageToken);\n const mineQuery = useMyReturns();\n const create = useCreateReturn();\n const [email, setEmail] = useState(\"\");\n const [challengeID, setChallengeID] = useState(\"\");\n const [code, setCode] = useState(\"\");\n const [selectedOrder, setSelectedOrder] = useState<ReturnOrderSummary>();\n const [orderDetail, setOrderDetail] = useState<ReturnOrderDetail>();\n const [quantities, setQuantities] = useState<Record<string, number>>({});\n const [note, setNote] = useState(\"\");\n const [created, setCreated] = useState<ReturnRequestView>();\n const submittingRef = useRef(false);\n const idempotencyKeyRef = useRef<string | undefined>(undefined);\n const orderQuery = useReturnableOrder(selectedOrder?.canonicalOrderId);\n React.useEffect(() => { if (orderQuery.data?.order) setOrderDetail(orderQuery.data.order); }, [orderQuery.data]);\n const error = session.error ?? ordersQuery.error ?? orderQuery.error ?? create.error;\n const style = { \"--bitsnap-returns-brand\": props.theme?.brandColor ?? \"#111827\" } as React.CSSProperties;\n\n return (\n <section className={`bitsnap-returns ${props.className ?? \"\"}`} style={style} aria-live=\"polite\">\n <h2 className=\"mb-4 text-xl font-semibold\">{texts.title}</h2>\n {!session.isAuthenticated && (\n <div className=\"space-y-3\">\n <label className=\"block text-sm\">{texts.email}<input type=\"email\" autoComplete=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} className=\"mt-1 block w-full rounded border p-2\" /></label>\n {!challengeID ? <button type=\"button\" disabled={session.starting || !email} onClick={async () => { const response = await session.startSession(email); setChallengeID(response.challengeId); }} className=\"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50\">{session.starting ? texts.loading : texts.sendCode}</button> : <>\n <label className=\"block text-sm\">{texts.code}<input inputMode=\"numeric\" autoComplete=\"one-time-code\" value={code} onChange={(e) => setCode(e.target.value)} className=\"mt-1 block w-full rounded border p-2\" /></label>\n <button type=\"button\" disabled={session.verifying || !code} onClick={() => session.verifySession({ challengeId: challengeID, code })} className=\"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50\">{session.verifying ? texts.loading : texts.verify}</button>\n <button type=\"button\" disabled={session.starting} onClick={async () => { const response = await session.startSession(email); setChallengeID(response.challengeId); }} className=\"ml-3 underline\">Resend code</button>\n </>}\n </div>\n )}\n {ordersQuery.isLoading && <p>{texts.loading}</p>}\n {ordersQuery.data != null && !selectedOrder && !created && <div className=\"space-y-3\"><h3 className=\"font-medium\">{texts.orders}</h3>{ordersQuery.data.orders.length === 0 && <p>No eligible orders found.</p>}{ordersQuery.data.orders.map((order) => <button key={order.canonicalOrderId} type=\"button\" onClick={() => setSelectedOrder(order)} className=\"block w-full rounded border p-3 text-left hover:border-[var(--bitsnap-returns-brand)]\"><span className=\"font-medium\">{order.displayReference}</span><span className=\"ml-2 text-sm text-gray-600\">{order.currency} {formatMinor(order.totalMinor)}</span></button>)}{ordersQuery.data.nextPageToken && <button type=\"button\" onClick={() => setOrderPageToken(ordersQuery.data?.nextPageToken ?? \"\")} className=\"underline\">Next orders</button>}</div>}\n {orderDetail && !created && <div className=\"space-y-3\"><button type=\"button\" onClick={() => { setSelectedOrder(undefined); setOrderDetail(undefined); }} className=\"text-sm underline\">← {texts.orders}</button>{orderDetail.lines.map((line) => <label key={line.lineId} className=\"flex items-center justify-between gap-3 rounded border p-3\"><span>{line.name}<small className=\"block text-gray-600\">{line.availableQuantity} available · {line.currency} {formatMinor(line.paidUnitMinor)}</small></span><input type=\"number\" min={0} max={line.availableQuantity} disabled={!line.eligible} value={quantities[line.lineId] ?? 0} onChange={(e) => setQuantities((prev) => ({ ...prev, [line.lineId]: Math.max(0, Math.min(line.availableQuantity, Number(e.target.value))) }))} className=\"w-20 rounded border p-2\" />{!line.eligible && <small>{line.exclusionReason}</small>}</label>)}<label className=\"block text-sm\">{texts.note}<textarea value={note} onChange={(e) => setNote(e.target.value)} className=\"mt-1 block w-full rounded border p-2\" /></label><button type=\"button\" disabled={create.isPending || !Object.values(quantities).some((q) => q > 0)} onClick={async () => { if (submittingRef.current) return; submittingRef.current = true; idempotencyKeyRef.current ??= globalThis.crypto.randomUUID(); try { const result = await create.mutateAsync({ canonicalOrderID: orderDetail.canonicalOrderId, items: Object.entries(quantities).filter(([, quantity]) => quantity > 0).map(([lineId, quantity]) => ({ lineId, quantity })), note, idempotencyKey: idempotencyKeyRef.current }); if (result && \"request\" in result && result.request) setCreated(result.request); } finally { submittingRef.current = false; } }} className=\"rounded bg-[var(--bitsnap-returns-brand)] px-4 py-2 text-white disabled:opacity-50\">{create.isPending ? texts.loading : texts.submit}</button></div>}\n {created && <div className=\"rounded border p-4\"><h3 className=\"font-semibold\">Return submitted</h3><p>Reference: <strong>{created.reference}</strong></p><p>Status: {created.status}</p>{created.returnInstructions && <p className=\"mt-2\">{created.returnInstructions}</p>}<button type=\"button\" onClick={() => { setCreated(undefined); setSelectedOrder(undefined); setOrderDetail(undefined); setQuantities({}); void mineQuery.refetch(); }} className=\"mt-3 underline\">{texts.history}</button></div>}\n {mineQuery.data?.returns && mineQuery.data.returns.length > 0 && !created && <div className=\"mt-6\"><h3 className=\"mb-2 font-medium\">{texts.history}</h3>{mineQuery.data.returns.map((item) => <div key={item.id} className=\"border-t py-2\"><strong>{item.reference}</strong><span className=\"ml-2\">{item.status}</span></div>)}</div>}\n {error && <p role=\"alert\" className=\"mt-3 text-sm text-red-700\">{error.message}</p>}\n </section>\n );\n}\n\nfunction formatMinor(amount: bigint | number) {\n return (Number(amount) / 100).toFixed(2);\n}\n","// @generated by protoc-gen-es v2.11.0 with parameter \"target=ts,ts_nocheck=true\"\n// @generated from file public/v1/returns.proto (package public.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Environment } from \"../../common/v1/environment_pb\";\nimport { file_common_v1_environment } from \"../../common/v1/environment_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file public/v1/returns.proto.\n */\nexport const file_public_v1_returns: GenFile = /*@__PURE__*/\n fileDesc(\"ChdwdWJsaWMvdjEvcmV0dXJucy5wcm90bxIJcHVibGljLnYxImsKGVN0YXJ0UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIrCgtlbnZpcm9ubWVudBgDIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJhChpTdGFydFJldHVyblNlc3Npb25SZXNwb25zZRIUCgxjaGFsbGVuZ2VfaWQYASABKAkSHAoUcmVzZW5kX2FmdGVyX3NlY29uZHMYAiABKAUSDwoHbWVzc2FnZRgDIAEoCSKBAQoaVmVyaWZ5UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxjaGFsbGVuZ2VfaWQYAiABKAkSDAoEY29kZRgDIAEoCRIrCgtlbnZpcm9ubWVudBgEIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJkChtWZXJpZnlSZXR1cm5TZXNzaW9uUmVzcG9uc2USFQoNc2Vzc2lvbl90b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIzCgpSZXR1cm5QYWdlEhEKCXBhZ2Vfc2l6ZRgBIAEoBRISCgpwYWdlX3Rva2VuGAIgASgJItQBChJSZXR1cm5PcmRlclN1bW1hcnkSGgoSY2Fub25pY2FsX29yZGVyX2lkGAEgASgJEhkKEWRpc3BsYXlfcmVmZXJlbmNlGAIgASgJEg8KB2dhdGV3YXkYAyABKAkSMAoMcHVyY2hhc2VkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgt0b3RhbF9taW5vchgFIAEoAxIQCghjdXJyZW5jeRgGIAEoCRIdChVyZXR1cm5hYmxlX2xpbmVfY291bnQYByABKAUiawoXTGlzdFJldHVybk9yZGVyc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRISCgpwYWdlX3Rva2VuGAQgASgJInEKGExpc3RSZXR1cm5PcmRlcnNSZXNwb25zZRItCgZvcmRlcnMYASADKAsyHS5wdWJsaWMudjEuUmV0dXJuT3JkZXJTdW1tYXJ5EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRINCgV0b3RhbBgDIAEoBSLEAwoPUmV0dXJuT3JkZXJMaW5lEg8KB2xpbmVfaWQYASABKAkSEgoKcHJvZHVjdF9pZBgCIAEoCRISCgp2YXJpYW50X2lkGAMgASgJEgwKBG5hbWUYBCABKAkSGAoQZnVsZmlsbG1lbnRfdHlwZRgFIAEoCRIaChJwdXJjaGFzZWRfcXVhbnRpdHkYBiABKAUSGQoRcmVzZXJ2ZWRfcXVhbnRpdHkYByABKAUSGQoRcmV0dXJuZWRfcXVhbnRpdHkYCCABKAUSGgoSYXZhaWxhYmxlX3F1YW50aXR5GAkgASgFEhoKEnJlZ3VsYXJfdW5pdF9taW5vchgKIAEoAxIXCg9wYWlkX3VuaXRfbWlub3IYCyABKAMSEAoIY3VycmVuY3kYDCABKAkSEAoIZWxpZ2libGUYDSABKAgSGAoQZXhjbHVzaW9uX3JlYXNvbhgOIAEoCRIdChVwYWlkX2xpbmVfdG90YWxfbWlub3IYDyABKAMSHwoXY291cG9uX2FsbG9jYXRpb25fbWlub3IYECABKAMSFQoNYWNjZXNzX3NvdXJjZRgRIAEoCRIYChBhY2Nlc3NfcmVmZXJlbmNlGBIgASgJIt8BChFSZXR1cm5PcmRlckRldGFpbBIaChJjYW5vbmljYWxfb3JkZXJfaWQYASABKAkSGQoRZGlzcGxheV9yZWZlcmVuY2UYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIwCgxwdXJjaGFzZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC3RvdGFsX21pbm9yGAUgASgDEhAKCGN1cnJlbmN5GAYgASgJEikKBWxpbmVzGAcgAygLMhoucHVibGljLnYxLlJldHVybk9yZGVyTGluZSI7ChZSZXR1cm5SZXF1ZXN0TGluZUlucHV0Eg8KB2xpbmVfaWQYASABKAkSEAoIcXVhbnRpdHkYAiABKAUicwoSUmV0dXJuSGlzdG9yeUVudHJ5EgoKAmlkGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZzdGF0dXMYAyABKAkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiuQEKFVJldHVyblJlcXVlc3RMaW5lVmlldxIPCgdsaW5lX2lkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoQZnVsZmlsbG1lbnRfdHlwZRgDIAEoCRIaChJyZXF1ZXN0ZWRfcXVhbnRpdHkYBCABKAUSGQoRYXBwcm92ZWRfcXVhbnRpdHkYBSABKAUSGQoRcmVjZWl2ZWRfcXVhbnRpdHkYBiABKAUSFQoNYWNjZXNzX3N0YXR1cxgHIAEoCSL6AgoRUmV0dXJuUmVxdWVzdFZpZXcSCgoCaWQYASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgDIAEoCRIOCgZzdGF0dXMYBCABKAkSFQoNcmVmdW5kX3N0YXR1cxgFIAEoCRIbChNyZWZ1bmRfYW1vdW50X21pbm9yGAYgASgDEhAKCGN1cnJlbmN5GAcgASgJEhUKDWN1c3RvbWVyX25vdGUYCCABKAkSDwoHdmVyc2lvbhgJIAEoAxIuCgpjcmVhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgVsaW5lcxgLIAMoCzIgLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0TGluZVZpZXcSLgoHaGlzdG9yeRgMIAMoCzIdLnB1YmxpYy52MS5SZXR1cm5IaXN0b3J5RW50cnkSGwoTcmV0dXJuX2luc3RydWN0aW9ucxgNIAEoCSJiChlHZXRSZXR1cm5hYmxlT3JkZXJSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIaChJjYW5vbmljYWxfb3JkZXJfaWQYAyABKAkigAEKGkdldFJldHVybmFibGVPcmRlclJlc3BvbnNlEisKBW9yZGVyGAEgASgLMhwucHVibGljLnYxLlJldHVybk9yZGVyRGV0YWlsEjUKDnJldHVybl9oaXN0b3J5GAIgAygLMh0ucHVibGljLnYxLlJldHVybkhpc3RvcnlFbnRyeSK8AQoaQ3JlYXRlUmV0dXJuUmVxdWVzdFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgDIAEoCRIwCgVpdGVtcxgEIAMoCzIhLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0TGluZUlucHV0EgwKBG5vdGUYBSABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAYgASgJIkwKG0NyZWF0ZVJldHVyblJlcXVlc3RSZXNwb25zZRItCgdyZXF1ZXN0GAEgASgLMhwucHVibGljLnYxLlJldHVyblJlcXVlc3RWaWV3ImgKFExpc3RNeVJldHVybnNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSEgoKcGFnZV90b2tlbhgEIAEoCSJuChVMaXN0TXlSZXR1cm5zUmVzcG9uc2USLQoHcmV0dXJucxgBIAMoCzIcLnB1YmxpYy52MS5SZXR1cm5SZXF1ZXN0VmlldxIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSDQoFdG90YWwYAyABKAUiUgoSR2V0TXlSZXR1cm5SZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFQoNc2Vzc2lvbl90b2tlbhgCIAEoCRIRCglyZXR1cm5faWQYAyABKAkiRAoTR2V0TXlSZXR1cm5SZXNwb25zZRItCgdyZXF1ZXN0GAEgASgLMhwucHVibGljLnYxLlJldHVyblJlcXVlc3RWaWV3MqEFCg5SZXR1cm5zU2VydmljZRJhChJTdGFydFJldHVyblNlc3Npb24SJC5wdWJsaWMudjEuU3RhcnRSZXR1cm5TZXNzaW9uUmVxdWVzdBolLnB1YmxpYy52MS5TdGFydFJldHVyblNlc3Npb25SZXNwb25zZRJkChNWZXJpZnlSZXR1cm5TZXNzaW9uEiUucHVibGljLnYxLlZlcmlmeVJldHVyblNlc3Npb25SZXF1ZXN0GiYucHVibGljLnYxLlZlcmlmeVJldHVyblNlc3Npb25SZXNwb25zZRJbChBMaXN0UmV0dXJuT3JkZXJzEiIucHVibGljLnYxLkxpc3RSZXR1cm5PcmRlcnNSZXF1ZXN0GiMucHVibGljLnYxLkxpc3RSZXR1cm5PcmRlcnNSZXNwb25zZRJhChJHZXRSZXR1cm5hYmxlT3JkZXISJC5wdWJsaWMudjEuR2V0UmV0dXJuYWJsZU9yZGVyUmVxdWVzdBolLnB1YmxpYy52MS5HZXRSZXR1cm5hYmxlT3JkZXJSZXNwb25zZRJkChNDcmVhdGVSZXR1cm5SZXF1ZXN0EiUucHVibGljLnYxLkNyZWF0ZVJldHVyblJlcXVlc3RSZXF1ZXN0GiYucHVibGljLnYxLkNyZWF0ZVJldHVyblJlcXVlc3RSZXNwb25zZRJSCg1MaXN0TXlSZXR1cm5zEh8ucHVibGljLnYxLkxpc3RNeVJldHVybnNSZXF1ZXN0GiAucHVibGljLnYxLkxpc3RNeVJldHVybnNSZXNwb25zZRJMCgtHZXRNeVJldHVybhIdLnB1YmxpYy52MS5HZXRNeVJldHVyblJlcXVlc3QaHi5wdWJsaWMudjEuR2V0TXlSZXR1cm5SZXNwb25zZWIGcHJvdG8z\", [file_common_v1_environment, file_google_protobuf_timestamp]);\n\n/**\n * @generated from message public.v1.StartReturnSessionRequest\n */\nexport type StartReturnSessionRequest = Message<\"public.v1.StartReturnSessionRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string email = 2;\n */\n email: string;\n\n /**\n * @generated from field: common.v1.Environment environment = 3;\n */\n environment: Environment;\n};\n\n/**\n * Describes the message public.v1.StartReturnSessionRequest.\n * Use `create(StartReturnSessionRequestSchema)` to create a new message.\n */\nexport const StartReturnSessionRequestSchema: GenMessage<StartReturnSessionRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 0);\n\n/**\n * @generated from message public.v1.StartReturnSessionResponse\n */\nexport type StartReturnSessionResponse = Message<\"public.v1.StartReturnSessionResponse\"> & {\n /**\n * @generated from field: string challenge_id = 1;\n */\n challengeId: string;\n\n /**\n * @generated from field: int32 resend_after_seconds = 2;\n */\n resendAfterSeconds: number;\n\n /**\n * @generated from field: string message = 3;\n */\n message: string;\n};\n\n/**\n * Describes the message public.v1.StartReturnSessionResponse.\n * Use `create(StartReturnSessionResponseSchema)` to create a new message.\n */\nexport const StartReturnSessionResponseSchema: GenMessage<StartReturnSessionResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 1);\n\n/**\n * @generated from message public.v1.VerifyReturnSessionRequest\n */\nexport type VerifyReturnSessionRequest = Message<\"public.v1.VerifyReturnSessionRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string challenge_id = 2;\n */\n challengeId: string;\n\n /**\n * @generated from field: string code = 3;\n */\n code: string;\n\n /**\n * @generated from field: common.v1.Environment environment = 4;\n */\n environment: Environment;\n};\n\n/**\n * Describes the message public.v1.VerifyReturnSessionRequest.\n * Use `create(VerifyReturnSessionRequestSchema)` to create a new message.\n */\nexport const VerifyReturnSessionRequestSchema: GenMessage<VerifyReturnSessionRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 2);\n\n/**\n * @generated from message public.v1.VerifyReturnSessionResponse\n */\nexport type VerifyReturnSessionResponse = Message<\"public.v1.VerifyReturnSessionResponse\"> & {\n /**\n * @generated from field: string session_token = 1;\n */\n sessionToken: string;\n\n /**\n * @generated from field: google.protobuf.Timestamp expires_at = 2;\n */\n expiresAt?: Timestamp;\n};\n\n/**\n * Describes the message public.v1.VerifyReturnSessionResponse.\n * Use `create(VerifyReturnSessionResponseSchema)` to create a new message.\n */\nexport const VerifyReturnSessionResponseSchema: GenMessage<VerifyReturnSessionResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 3);\n\n/**\n * @generated from message public.v1.ReturnPage\n */\nexport type ReturnPage = Message<\"public.v1.ReturnPage\"> & {\n /**\n * @generated from field: int32 page_size = 1;\n */\n pageSize: number;\n\n /**\n * @generated from field: string page_token = 2;\n */\n pageToken: string;\n};\n\n/**\n * Describes the message public.v1.ReturnPage.\n * Use `create(ReturnPageSchema)` to create a new message.\n */\nexport const ReturnPageSchema: GenMessage<ReturnPage> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 4);\n\n/**\n * @generated from message public.v1.ReturnOrderSummary\n */\nexport type ReturnOrderSummary = Message<\"public.v1.ReturnOrderSummary\"> & {\n /**\n * @generated from field: string canonical_order_id = 1;\n */\n canonicalOrderId: string;\n\n /**\n * @generated from field: string display_reference = 2;\n */\n displayReference: string;\n\n /**\n * @generated from field: string gateway = 3;\n */\n gateway: string;\n\n /**\n * @generated from field: google.protobuf.Timestamp purchased_at = 4;\n */\n purchasedAt?: Timestamp;\n\n /**\n * @generated from field: int64 total_minor = 5;\n */\n totalMinor: bigint;\n\n /**\n * @generated from field: string currency = 6;\n */\n currency: string;\n\n /**\n * @generated from field: int32 returnable_line_count = 7;\n */\n returnableLineCount: number;\n};\n\n/**\n * Describes the message public.v1.ReturnOrderSummary.\n * Use `create(ReturnOrderSummarySchema)` to create a new message.\n */\nexport const ReturnOrderSummarySchema: GenMessage<ReturnOrderSummary> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 5);\n\n/**\n * @generated from message public.v1.ListReturnOrdersRequest\n */\nexport type ListReturnOrdersRequest = Message<\"public.v1.ListReturnOrdersRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string session_token = 2;\n */\n sessionToken: string;\n\n /**\n * @generated from field: int32 page_size = 3;\n */\n pageSize: number;\n\n /**\n * @generated from field: string page_token = 4;\n */\n pageToken: string;\n};\n\n/**\n * Describes the message public.v1.ListReturnOrdersRequest.\n * Use `create(ListReturnOrdersRequestSchema)` to create a new message.\n */\nexport const ListReturnOrdersRequestSchema: GenMessage<ListReturnOrdersRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 6);\n\n/**\n * @generated from message public.v1.ListReturnOrdersResponse\n */\nexport type ListReturnOrdersResponse = Message<\"public.v1.ListReturnOrdersResponse\"> & {\n /**\n * @generated from field: repeated public.v1.ReturnOrderSummary orders = 1;\n */\n orders: ReturnOrderSummary[];\n\n /**\n * @generated from field: string next_page_token = 2;\n */\n nextPageToken: string;\n\n /**\n * @generated from field: int32 total = 3;\n */\n total: number;\n};\n\n/**\n * Describes the message public.v1.ListReturnOrdersResponse.\n * Use `create(ListReturnOrdersResponseSchema)` to create a new message.\n */\nexport const ListReturnOrdersResponseSchema: GenMessage<ListReturnOrdersResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 7);\n\n/**\n * @generated from message public.v1.ReturnOrderLine\n */\nexport type ReturnOrderLine = Message<\"public.v1.ReturnOrderLine\"> & {\n /**\n * @generated from field: string line_id = 1;\n */\n lineId: string;\n\n /**\n * @generated from field: string product_id = 2;\n */\n productId: string;\n\n /**\n * @generated from field: string variant_id = 3;\n */\n variantId: string;\n\n /**\n * @generated from field: string name = 4;\n */\n name: string;\n\n /**\n * @generated from field: string fulfillment_type = 5;\n */\n fulfillmentType: string;\n\n /**\n * @generated from field: int32 purchased_quantity = 6;\n */\n purchasedQuantity: number;\n\n /**\n * @generated from field: int32 reserved_quantity = 7;\n */\n reservedQuantity: number;\n\n /**\n * @generated from field: int32 returned_quantity = 8;\n */\n returnedQuantity: number;\n\n /**\n * @generated from field: int32 available_quantity = 9;\n */\n availableQuantity: number;\n\n /**\n * @generated from field: int64 regular_unit_minor = 10;\n */\n regularUnitMinor: bigint;\n\n /**\n * @generated from field: int64 paid_unit_minor = 11;\n */\n paidUnitMinor: bigint;\n\n /**\n * @generated from field: string currency = 12;\n */\n currency: string;\n\n /**\n * @generated from field: bool eligible = 13;\n */\n eligible: boolean;\n\n /**\n * @generated from field: string exclusion_reason = 14;\n */\n exclusionReason: string;\n\n /**\n * @generated from field: int64 paid_line_total_minor = 15;\n */\n paidLineTotalMinor: bigint;\n\n /**\n * @generated from field: int64 coupon_allocation_minor = 16;\n */\n couponAllocationMinor: bigint;\n\n /**\n * @generated from field: string access_source = 17;\n */\n accessSource: string;\n\n /**\n * @generated from field: string access_reference = 18;\n */\n accessReference: string;\n};\n\n/**\n * Describes the message public.v1.ReturnOrderLine.\n * Use `create(ReturnOrderLineSchema)` to create a new message.\n */\nexport const ReturnOrderLineSchema: GenMessage<ReturnOrderLine> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 8);\n\n/**\n * @generated from message public.v1.ReturnOrderDetail\n */\nexport type ReturnOrderDetail = Message<\"public.v1.ReturnOrderDetail\"> & {\n /**\n * @generated from field: string canonical_order_id = 1;\n */\n canonicalOrderId: string;\n\n /**\n * @generated from field: string display_reference = 2;\n */\n displayReference: string;\n\n /**\n * @generated from field: string gateway = 3;\n */\n gateway: string;\n\n /**\n * @generated from field: google.protobuf.Timestamp purchased_at = 4;\n */\n purchasedAt?: Timestamp;\n\n /**\n * @generated from field: int64 total_minor = 5;\n */\n totalMinor: bigint;\n\n /**\n * @generated from field: string currency = 6;\n */\n currency: string;\n\n /**\n * @generated from field: repeated public.v1.ReturnOrderLine lines = 7;\n */\n lines: ReturnOrderLine[];\n};\n\n/**\n * Describes the message public.v1.ReturnOrderDetail.\n * Use `create(ReturnOrderDetailSchema)` to create a new message.\n */\nexport const ReturnOrderDetailSchema: GenMessage<ReturnOrderDetail> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 9);\n\n/**\n * @generated from message public.v1.ReturnRequestLineInput\n */\nexport type ReturnRequestLineInput = Message<\"public.v1.ReturnRequestLineInput\"> & {\n /**\n * @generated from field: string line_id = 1;\n */\n lineId: string;\n\n /**\n * @generated from field: int32 quantity = 2;\n */\n quantity: number;\n};\n\n/**\n * Describes the message public.v1.ReturnRequestLineInput.\n * Use `create(ReturnRequestLineInputSchema)` to create a new message.\n */\nexport const ReturnRequestLineInputSchema: GenMessage<ReturnRequestLineInput> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 10);\n\n/**\n * @generated from message public.v1.ReturnHistoryEntry\n */\nexport type ReturnHistoryEntry = Message<\"public.v1.ReturnHistoryEntry\"> & {\n /**\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * @generated from field: string reference = 2;\n */\n reference: string;\n\n /**\n * @generated from field: string status = 3;\n */\n status: string;\n\n /**\n * @generated from field: google.protobuf.Timestamp created_at = 4;\n */\n createdAt?: Timestamp;\n};\n\n/**\n * Describes the message public.v1.ReturnHistoryEntry.\n * Use `create(ReturnHistoryEntrySchema)` to create a new message.\n */\nexport const ReturnHistoryEntrySchema: GenMessage<ReturnHistoryEntry> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 11);\n\n/**\n * @generated from message public.v1.ReturnRequestLineView\n */\nexport type ReturnRequestLineView = Message<\"public.v1.ReturnRequestLineView\"> & {\n /**\n * @generated from field: string line_id = 1;\n */\n lineId: string;\n\n /**\n * @generated from field: string name = 2;\n */\n name: string;\n\n /**\n * @generated from field: string fulfillment_type = 3;\n */\n fulfillmentType: string;\n\n /**\n * @generated from field: int32 requested_quantity = 4;\n */\n requestedQuantity: number;\n\n /**\n * @generated from field: int32 approved_quantity = 5;\n */\n approvedQuantity: number;\n\n /**\n * @generated from field: int32 received_quantity = 6;\n */\n receivedQuantity: number;\n\n /**\n * @generated from field: string access_status = 7;\n */\n accessStatus: string;\n};\n\n/**\n * Describes the message public.v1.ReturnRequestLineView.\n * Use `create(ReturnRequestLineViewSchema)` to create a new message.\n */\nexport const ReturnRequestLineViewSchema: GenMessage<ReturnRequestLineView> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 12);\n\n/**\n * @generated from message public.v1.ReturnRequestView\n */\nexport type ReturnRequestView = Message<\"public.v1.ReturnRequestView\"> & {\n /**\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * @generated from field: string reference = 2;\n */\n reference: string;\n\n /**\n * @generated from field: string canonical_order_id = 3;\n */\n canonicalOrderId: string;\n\n /**\n * @generated from field: string status = 4;\n */\n status: string;\n\n /**\n * @generated from field: string refund_status = 5;\n */\n refundStatus: string;\n\n /**\n * @generated from field: int64 refund_amount_minor = 6;\n */\n refundAmountMinor: bigint;\n\n /**\n * @generated from field: string currency = 7;\n */\n currency: string;\n\n /**\n * @generated from field: string customer_note = 8;\n */\n customerNote: string;\n\n /**\n * @generated from field: int64 version = 9;\n */\n version: bigint;\n\n /**\n * @generated from field: google.protobuf.Timestamp created_at = 10;\n */\n createdAt?: Timestamp;\n\n /**\n * @generated from field: repeated public.v1.ReturnRequestLineView lines = 11;\n */\n lines: ReturnRequestLineView[];\n\n /**\n * @generated from field: repeated public.v1.ReturnHistoryEntry history = 12;\n */\n history: ReturnHistoryEntry[];\n\n /**\n * @generated from field: string return_instructions = 13;\n */\n returnInstructions: string;\n};\n\n/**\n * Describes the message public.v1.ReturnRequestView.\n * Use `create(ReturnRequestViewSchema)` to create a new message.\n */\nexport const ReturnRequestViewSchema: GenMessage<ReturnRequestView> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 13);\n\n/**\n * @generated from message public.v1.GetReturnableOrderRequest\n */\nexport type GetReturnableOrderRequest = Message<\"public.v1.GetReturnableOrderRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string session_token = 2;\n */\n sessionToken: string;\n\n /**\n * @generated from field: string canonical_order_id = 3;\n */\n canonicalOrderId: string;\n};\n\n/**\n * Describes the message public.v1.GetReturnableOrderRequest.\n * Use `create(GetReturnableOrderRequestSchema)` to create a new message.\n */\nexport const GetReturnableOrderRequestSchema: GenMessage<GetReturnableOrderRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 14);\n\n/**\n * @generated from message public.v1.GetReturnableOrderResponse\n */\nexport type GetReturnableOrderResponse = Message<\"public.v1.GetReturnableOrderResponse\"> & {\n /**\n * @generated from field: public.v1.ReturnOrderDetail order = 1;\n */\n order?: ReturnOrderDetail;\n\n /**\n * @generated from field: repeated public.v1.ReturnHistoryEntry return_history = 2;\n */\n returnHistory: ReturnHistoryEntry[];\n};\n\n/**\n * Describes the message public.v1.GetReturnableOrderResponse.\n * Use `create(GetReturnableOrderResponseSchema)` to create a new message.\n */\nexport const GetReturnableOrderResponseSchema: GenMessage<GetReturnableOrderResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 15);\n\n/**\n * @generated from message public.v1.CreateReturnRequestRequest\n */\nexport type CreateReturnRequestRequest = Message<\"public.v1.CreateReturnRequestRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string session_token = 2;\n */\n sessionToken: string;\n\n /**\n * @generated from field: string canonical_order_id = 3;\n */\n canonicalOrderId: string;\n\n /**\n * @generated from field: repeated public.v1.ReturnRequestLineInput items = 4;\n */\n items: ReturnRequestLineInput[];\n\n /**\n * @generated from field: string note = 5;\n */\n note: string;\n\n /**\n * @generated from field: string idempotency_key = 6;\n */\n idempotencyKey: string;\n};\n\n/**\n * Describes the message public.v1.CreateReturnRequestRequest.\n * Use `create(CreateReturnRequestRequestSchema)` to create a new message.\n */\nexport const CreateReturnRequestRequestSchema: GenMessage<CreateReturnRequestRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 16);\n\n/**\n * @generated from message public.v1.CreateReturnRequestResponse\n */\nexport type CreateReturnRequestResponse = Message<\"public.v1.CreateReturnRequestResponse\"> & {\n /**\n * @generated from field: public.v1.ReturnRequestView request = 1;\n */\n request?: ReturnRequestView;\n};\n\n/**\n * Describes the message public.v1.CreateReturnRequestResponse.\n * Use `create(CreateReturnRequestResponseSchema)` to create a new message.\n */\nexport const CreateReturnRequestResponseSchema: GenMessage<CreateReturnRequestResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 17);\n\n/**\n * @generated from message public.v1.ListMyReturnsRequest\n */\nexport type ListMyReturnsRequest = Message<\"public.v1.ListMyReturnsRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string session_token = 2;\n */\n sessionToken: string;\n\n /**\n * @generated from field: int32 page_size = 3;\n */\n pageSize: number;\n\n /**\n * @generated from field: string page_token = 4;\n */\n pageToken: string;\n};\n\n/**\n * Describes the message public.v1.ListMyReturnsRequest.\n * Use `create(ListMyReturnsRequestSchema)` to create a new message.\n */\nexport const ListMyReturnsRequestSchema: GenMessage<ListMyReturnsRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 18);\n\n/**\n * @generated from message public.v1.ListMyReturnsResponse\n */\nexport type ListMyReturnsResponse = Message<\"public.v1.ListMyReturnsResponse\"> & {\n /**\n * @generated from field: repeated public.v1.ReturnRequestView returns = 1;\n */\n returns: ReturnRequestView[];\n\n /**\n * @generated from field: string next_page_token = 2;\n */\n nextPageToken: string;\n\n /**\n * @generated from field: int32 total = 3;\n */\n total: number;\n};\n\n/**\n * Describes the message public.v1.ListMyReturnsResponse.\n * Use `create(ListMyReturnsResponseSchema)` to create a new message.\n */\nexport const ListMyReturnsResponseSchema: GenMessage<ListMyReturnsResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 19);\n\n/**\n * @generated from message public.v1.GetMyReturnRequest\n */\nexport type GetMyReturnRequest = Message<\"public.v1.GetMyReturnRequest\"> & {\n /**\n * @generated from field: string project_id = 1;\n */\n projectId: string;\n\n /**\n * @generated from field: string session_token = 2;\n */\n sessionToken: string;\n\n /**\n * @generated from field: string return_id = 3;\n */\n returnId: string;\n};\n\n/**\n * Describes the message public.v1.GetMyReturnRequest.\n * Use `create(GetMyReturnRequestSchema)` to create a new message.\n */\nexport const GetMyReturnRequestSchema: GenMessage<GetMyReturnRequest> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 20);\n\n/**\n * @generated from message public.v1.GetMyReturnResponse\n */\nexport type GetMyReturnResponse = Message<\"public.v1.GetMyReturnResponse\"> & {\n /**\n * @generated from field: public.v1.ReturnRequestView request = 1;\n */\n request?: ReturnRequestView;\n};\n\n/**\n * Describes the message public.v1.GetMyReturnResponse.\n * Use `create(GetMyReturnResponseSchema)` to create a new message.\n */\nexport const GetMyReturnResponseSchema: GenMessage<GetMyReturnResponse> = /*@__PURE__*/\n messageDesc(file_public_v1_returns, 21);\n\n/**\n * @generated from service public.v1.ReturnsService\n */\nexport const ReturnsService: GenService<{\n /**\n * @generated from rpc public.v1.ReturnsService.StartReturnSession\n */\n startReturnSession: {\n methodKind: \"unary\";\n input: typeof StartReturnSessionRequestSchema;\n output: typeof StartReturnSessionResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.VerifyReturnSession\n */\n verifyReturnSession: {\n methodKind: \"unary\";\n input: typeof VerifyReturnSessionRequestSchema;\n output: typeof VerifyReturnSessionResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.ListReturnOrders\n */\n listReturnOrders: {\n methodKind: \"unary\";\n input: typeof ListReturnOrdersRequestSchema;\n output: typeof ListReturnOrdersResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.GetReturnableOrder\n */\n getReturnableOrder: {\n methodKind: \"unary\";\n input: typeof GetReturnableOrderRequestSchema;\n output: typeof GetReturnableOrderResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.CreateReturnRequest\n */\n createReturnRequest: {\n methodKind: \"unary\";\n input: typeof CreateReturnRequestRequestSchema;\n output: typeof CreateReturnRequestResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.ListMyReturns\n */\n listMyReturns: {\n methodKind: \"unary\";\n input: typeof ListMyReturnsRequestSchema;\n output: typeof ListMyReturnsResponseSchema;\n },\n /**\n * @generated from rpc public.v1.ReturnsService.GetMyReturn\n */\n getMyReturn: {\n methodKind: \"unary\";\n input: typeof GetMyReturnRequestSchema;\n output: typeof GetMyReturnResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_public_v1_returns, 0);\n\n"],"mappings":"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","names":["enumDesc","fileDesc","file_common_v1_environment","Environment","Code","ConnectError","createClient","createConnectTransport","fileDesc","messageDesc","serviceDesc","file_google_protobuf_timestamp","file_public_v1_returns","fileDesc","file_common_v1_environment","ReturnsService","serviceDesc","file_public_v1_returns","QueryClient","QueryClientProvider","useMutation","useQuery","useQueryClient","React","createContext","useContext","useMemo","useRef","useState","Fragment","jsx","jsxs","ReturnsContext","BitsnapReturnsProvider","projectID","host","environment","children","scope","session","setSessionState","sessionToken","expiresAt","queryClient","client","createClient","ReturnsService","createConnectTransport","contextValue","token","expiry","useReturnsContext","value","handleSessionError","error","clear","ConnectError","Code","useReturnSession","ctx","start","email","verify","challengeId","code","result","logout","useReturnOrders","pageSize","pageToken","e","useReturnableOrder","canonicalOrderID","useCreateReturn","input","useMyReturns","defaultTexts","BitsnapReturns","props","BitsnapReturnsForm","texts","orderPageToken","setOrderPageToken","ordersQuery","mineQuery","create","setEmail","challengeID","setChallengeID","setCode","selectedOrder","setSelectedOrder","orderDetail","setOrderDetail","quantities","setQuantities","note","setNote","created","setCreated","submittingRef","idempotencyKeyRef","orderQuery","style","response","order","formatMinor","line","prev","q","quantity","lineId","item","amount"]}
|
package/dist/errors.d.ts
ADDED
package/dist/errors.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a}from"./chunk-U6FLIRIV.mjs";var b=a(()=>{});export default b();
|
|
2
2
|
//# sourceMappingURL=errors.mjs.map
|
package/dist/errors.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":[""],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":[""],"mappings":"oCAAA,IAAAA,EAAAC,EAAA","names":["require_errors","__commonJSMin"]}
|