@shopbb/helium 0.7.4 → 0.7.6
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/dist/components/DiscountComponents.d.ts +13 -1
- package/dist/components/DiscountComponents.d.ts.map +1 -1
- package/dist/components/DiscountComponents.js +23 -4
- package/dist/components/DiscountComponents.js.map +1 -1
- package/dist/createCartHandler.d.ts.map +1 -1
- package/dist/createCartHandler.js +10 -1
- package/dist/createCartHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DiscountComponents.tsx +51 -10
- package/src/createCartHandler.ts +10 -1
|
@@ -67,11 +67,23 @@ export declare function AppliedDiscountList(props: AppliedDiscountListProps): im
|
|
|
67
67
|
export interface ClaimableDiscountListProps {
|
|
68
68
|
/** 可领取的折扣(从 loader 拉,例如 publicDiscounts 或 productDiscounts) */
|
|
69
69
|
discounts?: Discount[];
|
|
70
|
+
/** 当前买家已领取的 claim 列表,用于标记「已领取 / 已使用」状态。
|
|
71
|
+
* 传入时按钮自动切换为 disabled + claimedText / usedText。 */
|
|
72
|
+
myClaims?: DiscountClaim[];
|
|
70
73
|
/** 一次最多渲染几张,默认 10 */
|
|
71
74
|
first?: number;
|
|
72
75
|
className?: string;
|
|
73
76
|
emptyText?: React.ReactNode;
|
|
74
|
-
renderItem?: (discount: Discount) => React.ReactNode;
|
|
77
|
+
renderItem?: (discount: Discount, state: ClaimItemState) => React.ReactNode;
|
|
78
|
+
}
|
|
79
|
+
/** 渲染单个可领取 item 时的状态摘要 */
|
|
80
|
+
export interface ClaimItemState {
|
|
81
|
+
/** 该买家是否已领过 */
|
|
82
|
+
claimed: boolean;
|
|
83
|
+
/** 该买家是否已用完(remainingUses === 0) */
|
|
84
|
+
used: boolean;
|
|
85
|
+
/** 对应的 claim(如果已领) */
|
|
86
|
+
claim: DiscountClaim | null;
|
|
75
87
|
}
|
|
76
88
|
export declare function ClaimableDiscountList(props: ClaimableDiscountListProps): import("react/jsx-runtime").JSX.Element;
|
|
77
89
|
export interface DiscountClaimButtonProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscountComponents.d.ts","sourceRoot":"","sources":["../../src/components/DiscountComponents.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAEhF,MAAM,WAAW,uBAAuB;IAAG,UAAU,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAAE;AAClG,MAAM,WAAW,mBAAmB;IAAG,UAAU,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAAE;AACxH,MAAM,WAAW,yBAAyB;IAAG,UAAU,EAAE,sBAAsB,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;CAAE;AAEzG,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,uBAAuB,GAAG,mBAAmB,GAAG,yBAAyB,CAAC;IACjF,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CAkBlE;AAMD,MAAM,WAAW,0BAA0B;IACzC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DiscountComponents.d.ts","sourceRoot":"","sources":["../../src/components/DiscountComponents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -20,13 +20,32 @@ export function AppliedDiscountList(props) {
|
|
|
20
20
|
return (_jsx("div", { "data-applied-discount-list": true, className: className, children: allocations.map((alloc, i) => (_jsxs("div", { "data-applied-item": true, children: [_jsxs("div", { "data-info": true, children: [_jsx("span", { "data-title": true, children: alloc.title }), alloc.code && _jsx("span", { "data-code": true, children: alloc.code })] }), _jsxs("span", { "data-discount-amount": true, children: ["\u2212 ", _jsx(Money, { data: { amount: alloc.discountedAmount.amount, currencyCode: alloc.discountedAmount.currencyCode } })] })] }, alloc.code || i))) }));
|
|
21
21
|
}
|
|
22
22
|
export function ClaimableDiscountList(props) {
|
|
23
|
-
const { discounts = [], first = 10, className, emptyText = null, renderItem } = props;
|
|
23
|
+
const { discounts = [], myClaims = [], first = 10, className, emptyText = null, renderItem } = props;
|
|
24
24
|
if (discounts.length === 0)
|
|
25
25
|
return _jsx(_Fragment, { children: emptyText });
|
|
26
|
-
|
|
26
|
+
// 构造 code → claim 索引,O(1) 查询
|
|
27
|
+
const claimByCode = new Map();
|
|
28
|
+
const claimById = new Map();
|
|
29
|
+
for (const c of myClaims) {
|
|
30
|
+
if (c.discount?.code)
|
|
31
|
+
claimByCode.set(c.discount.code, c);
|
|
32
|
+
if (c.discount?.id)
|
|
33
|
+
claimById.set(c.discount.id, c);
|
|
34
|
+
}
|
|
35
|
+
return (_jsx("div", { "data-claimable-discount-list": true, className: className, children: discounts.slice(0, first).map((d) => {
|
|
36
|
+
const claim = (d.code && claimByCode.get(d.code)) ||
|
|
37
|
+
(d.id && claimById.get(d.id)) ||
|
|
38
|
+
null;
|
|
39
|
+
const state = {
|
|
40
|
+
claimed: !!claim,
|
|
41
|
+
used: !!claim && claim.remainingUses === 0,
|
|
42
|
+
claim,
|
|
43
|
+
};
|
|
44
|
+
return (_jsx(React.Fragment, { children: renderItem ? renderItem(d, state) : _jsx(DefaultClaimableItem, { discount: d, state: state }) }, d.id));
|
|
45
|
+
}) }));
|
|
27
46
|
}
|
|
28
|
-
function DefaultClaimableItem({ discount: d }) {
|
|
29
|
-
return (_jsxs("div", { "data-claimable-item": true, children: [_jsxs("div", { "data-info": true, children: [_jsx("div", { "data-title": true, children: d.title }), _jsx("div", { "data-value": true, children: formatDiscountValue(d) }), d.minSubtotal && (_jsxs("div", { "data-condition": true, children: ["\u6EE1 ", _jsx(Money, { data: { amount: d.minSubtotal.amount, currencyCode: d.minSubtotal.currencyCode } }), " \u53EF\u7528"] })), d.endsAt && (_jsxs("div", { "data-deadline": true, children: [formatDate(d.endsAt), " \u8FC7\u671F"] }))] }), d.code && _jsx(DiscountClaimButton, { discount: d, children: "\u9886\u53D6" })] }));
|
|
47
|
+
function DefaultClaimableItem({ discount: d, state }) {
|
|
48
|
+
return (_jsxs("div", { "data-claimable-item": true, "data-claimed": state.claimed, "data-used": state.used, children: [_jsxs("div", { "data-info": true, children: [_jsx("div", { "data-title": true, children: d.title }), _jsx("div", { "data-value": true, children: formatDiscountValue(d) }), d.minSubtotal && (_jsxs("div", { "data-condition": true, children: ["\u6EE1 ", _jsx(Money, { data: { amount: d.minSubtotal.amount, currencyCode: d.minSubtotal.currencyCode } }), " \u53EF\u7528"] })), d.endsAt && (_jsxs("div", { "data-deadline": true, children: [formatDate(d.endsAt), " \u8FC7\u671F"] }))] }), d.code && (_jsx(DiscountClaimButton, { discount: d, claimed: state.claimed, claimedText: state.used ? '已使用' : '已领取', children: "\u9886\u53D6" }))] }));
|
|
30
49
|
}
|
|
31
50
|
function formatDiscountValue(d) {
|
|
32
51
|
if (d.value.__typename === 'DiscountPercentage') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscountComponents.js","sourceRoot":"","sources":["../../src/components/DiscountComponents.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAgDjD,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAChE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,4BAAG,SAAS,GAAI,CAAC;IACtD,OAAO,CACL,kDAAgC,SAAS,EAAE,SAAS,YACjD,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7B,qDACE,6CACE,6CAAkB,KAAK,CAAC,KAAK,GAAQ,EACpC,KAAK,CAAC,IAAI,IAAI,4CAAiB,KAAK,CAAC,IAAI,GAAQ,IAC9C,EACN,oEACI,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAI,IAC1G,KAPC,KAAK,CAAC,IAAI,IAAI,CAAC,CAQnB,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"DiscountComponents.js","sourceRoot":"","sources":["../../src/components/DiscountComponents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCartHandler.d.ts","sourceRoot":"","sources":["../src/createCartHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,SAAS,CAAC;AAEjB,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,q/BAgDjC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"createCartHandler.d.ts","sourceRoot":"","sources":["../src/createCartHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,SAAS,CAAC;AAEjB,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,q/BAgDjC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA4N1E"}
|
|
@@ -152,7 +152,16 @@ export function createCartHandler(options) {
|
|
|
152
152
|
variables: { id: cartId },
|
|
153
153
|
cache: storefront.CacheNone(),
|
|
154
154
|
});
|
|
155
|
-
|
|
155
|
+
// cart 不存在 / 已 completed(platform 清空 lines 后 resolver 返回 null)→ 清 cookie
|
|
156
|
+
if (!data.cart) {
|
|
157
|
+
currentCartId = null;
|
|
158
|
+
// 写空 cookie 让浏览器删除(不依赖 setCartId 因为可能不接受空 id)
|
|
159
|
+
if (responseHeaders) {
|
|
160
|
+
responseHeaders.append('Set-Cookie', 'cart=; Path=/; Max-Age=0; SameSite=Lax');
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return data.cart;
|
|
156
165
|
}
|
|
157
166
|
async function create(input) {
|
|
158
167
|
const data = await storefront.mutate(CART_CREATE, { variables: { input: input ?? {} } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCartHandler.js","sourceRoot":"","sources":["../src/createCartHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDlD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAE9F,mDAAmD;IACnD,yEAAyE;IACzE,IAAI,aAAa,GAAkB,YAAY,EAAE,CAAC;IAElD,SAAS,SAAS;QAChB,OAAO,aAAa,IAAI,YAAY,EAAE,CAAC;IACzC,CAAC;IAED,2EAA2E;IAC3E,SAAS,SAAS,CAAC,MAAc;QAC/B,aAAa,GAAG,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,CAAC;IAED,iCAAiC;IAEjC,MAAM,UAAU,GAAG,aAAa,CAAC;MAC7B,qBAAqB;;;;GAIxB,CAAC;IAEF,MAAM,WAAW,GAAG,aAAa,CAAC;MAC9B,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,cAAc,GAAG,aAAa,CAAC;MACjC,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,iBAAiB,GAAG,aAAa,CAAC;MACpC,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,iBAAiB,GAAG,aAAa,CAAC;MACpC,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,0BAA0B,GAAG,aAAa,CAAC;MAC7C,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,oBAAoB,GAAG,aAAa,CAAC;MACvC,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,MAAM,mBAAmB,GAAG,aAAa,CAAC;MACtC,qBAAqB;;;;;;;GAOxB,CAAC;IAEF,8BAA8B;IAE9B,KAAK,UAAU,GAAG;QAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAgB,UAAU,EAAE;YAC7D,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE;SAC9B,CAAC,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"createCartHandler.js","sourceRoot":"","sources":["../src/createCartHandler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -87,30 +87,63 @@ export function AppliedDiscountList(props: AppliedDiscountListProps) {
|
|
|
87
87
|
export interface ClaimableDiscountListProps {
|
|
88
88
|
/** 可领取的折扣(从 loader 拉,例如 publicDiscounts 或 productDiscounts) */
|
|
89
89
|
discounts?: Discount[];
|
|
90
|
+
/** 当前买家已领取的 claim 列表,用于标记「已领取 / 已使用」状态。
|
|
91
|
+
* 传入时按钮自动切换为 disabled + claimedText / usedText。 */
|
|
92
|
+
myClaims?: DiscountClaim[];
|
|
90
93
|
/** 一次最多渲染几张,默认 10 */
|
|
91
94
|
first?: number;
|
|
92
95
|
className?: string;
|
|
93
96
|
emptyText?: React.ReactNode;
|
|
94
|
-
renderItem?: (discount: Discount) => React.ReactNode;
|
|
97
|
+
renderItem?: (discount: Discount, state: ClaimItemState) => React.ReactNode;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** 渲染单个可领取 item 时的状态摘要 */
|
|
101
|
+
export interface ClaimItemState {
|
|
102
|
+
/** 该买家是否已领过 */
|
|
103
|
+
claimed: boolean;
|
|
104
|
+
/** 该买家是否已用完(remainingUses === 0) */
|
|
105
|
+
used: boolean;
|
|
106
|
+
/** 对应的 claim(如果已领) */
|
|
107
|
+
claim: DiscountClaim | null;
|
|
95
108
|
}
|
|
96
109
|
|
|
97
110
|
export function ClaimableDiscountList(props: ClaimableDiscountListProps) {
|
|
98
|
-
const { discounts = [], first = 10, className, emptyText = null, renderItem } = props;
|
|
111
|
+
const { discounts = [], myClaims = [], first = 10, className, emptyText = null, renderItem } = props;
|
|
99
112
|
if (discounts.length === 0) return <>{emptyText}</>;
|
|
113
|
+
|
|
114
|
+
// 构造 code → claim 索引,O(1) 查询
|
|
115
|
+
const claimByCode = new Map<string, DiscountClaim>();
|
|
116
|
+
const claimById = new Map<string, DiscountClaim>();
|
|
117
|
+
for (const c of myClaims) {
|
|
118
|
+
if (c.discount?.code) claimByCode.set(c.discount.code, c);
|
|
119
|
+
if (c.discount?.id) claimById.set(c.discount.id, c);
|
|
120
|
+
}
|
|
121
|
+
|
|
100
122
|
return (
|
|
101
123
|
<div data-claimable-discount-list className={className}>
|
|
102
|
-
{discounts.slice(0, first).map((d) =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
124
|
+
{discounts.slice(0, first).map((d) => {
|
|
125
|
+
const claim =
|
|
126
|
+
(d.code && claimByCode.get(d.code)) ||
|
|
127
|
+
(d.id && claimById.get(d.id)) ||
|
|
128
|
+
null;
|
|
129
|
+
const state: ClaimItemState = {
|
|
130
|
+
claimed: !!claim,
|
|
131
|
+
used: !!claim && claim.remainingUses === 0,
|
|
132
|
+
claim,
|
|
133
|
+
};
|
|
134
|
+
return (
|
|
135
|
+
<React.Fragment key={d.id}>
|
|
136
|
+
{renderItem ? renderItem(d, state) : <DefaultClaimableItem discount={d} state={state} />}
|
|
137
|
+
</React.Fragment>
|
|
138
|
+
);
|
|
139
|
+
})}
|
|
107
140
|
</div>
|
|
108
141
|
);
|
|
109
142
|
}
|
|
110
143
|
|
|
111
|
-
function DefaultClaimableItem({ discount: d }: { discount: Discount }) {
|
|
144
|
+
function DefaultClaimableItem({ discount: d, state }: { discount: Discount; state: ClaimItemState }) {
|
|
112
145
|
return (
|
|
113
|
-
<div data-claimable-item>
|
|
146
|
+
<div data-claimable-item data-claimed={state.claimed} data-used={state.used}>
|
|
114
147
|
<div data-info>
|
|
115
148
|
<div data-title>{d.title}</div>
|
|
116
149
|
<div data-value>{formatDiscountValue(d)}</div>
|
|
@@ -123,7 +156,15 @@ function DefaultClaimableItem({ discount: d }: { discount: Discount }) {
|
|
|
123
156
|
<div data-deadline>{formatDate(d.endsAt)} 过期</div>
|
|
124
157
|
)}
|
|
125
158
|
</div>
|
|
126
|
-
{d.code &&
|
|
159
|
+
{d.code && (
|
|
160
|
+
<DiscountClaimButton
|
|
161
|
+
discount={d}
|
|
162
|
+
claimed={state.claimed}
|
|
163
|
+
claimedText={state.used ? '已使用' : '已领取'}
|
|
164
|
+
>
|
|
165
|
+
领取
|
|
166
|
+
</DiscountClaimButton>
|
|
167
|
+
)}
|
|
127
168
|
</div>
|
|
128
169
|
);
|
|
129
170
|
}
|
package/src/createCartHandler.ts
CHANGED
|
@@ -175,7 +175,16 @@ export function createCartHandler(options: CartHandlerOptions): CartHandler {
|
|
|
175
175
|
variables: { id: cartId },
|
|
176
176
|
cache: storefront.CacheNone(),
|
|
177
177
|
});
|
|
178
|
-
|
|
178
|
+
// cart 不存在 / 已 completed(platform 清空 lines 后 resolver 返回 null)→ 清 cookie
|
|
179
|
+
if (!data.cart) {
|
|
180
|
+
currentCartId = null;
|
|
181
|
+
// 写空 cookie 让浏览器删除(不依赖 setCartId 因为可能不接受空 id)
|
|
182
|
+
if (responseHeaders) {
|
|
183
|
+
responseHeaders.append('Set-Cookie', 'cart=; Path=/; Max-Age=0; SameSite=Lax');
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
return data.cart;
|
|
179
188
|
}
|
|
180
189
|
|
|
181
190
|
async function create(input?: { lines?: CartLineInput[] }): Promise<CartResult> {
|