@eventlook/sdk 1.7.5 → 1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventlook/sdk",
3
- "version": "1.7.5",
3
+ "version": "1.7.6",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -148,19 +148,25 @@ const TicketSelection: React.FC<Props> = ({ event }) => {
148
148
  item.order === release.order - 1
149
149
  );
150
150
 
151
- if (!release.locked || !previousRelease) return release;
151
+ // The first wave in a category is never gated by a previous one.
152
+ if (!previousRelease) return release;
152
153
 
153
154
  const previousTicket = tickets.find((ticket) => ticket.releaseId === previousRelease.id);
154
155
  const previousMaxSelectable = Math.min(
155
156
  previousRelease.availableTickets || 0,
156
157
  maxTicketsPerOrder
157
158
  );
158
- const shouldUnlock = Number(previousTicket?.quantity || 0) >= previousMaxSelectable;
159
+ // A later wave is unlocked only while the previous wave is filled to its
160
+ // max. Derive the lock from the cart both ways: unlock when the previous
161
+ // wave is maxed, re-lock when the customer reduces it again. (We can't
162
+ // lean on a server refetch to re-lock — that revalidation was the cause
163
+ // of the active-releases loop.)
164
+ const shouldBeLocked = Number(previousTicket?.quantity || 0) < previousMaxSelectable;
159
165
 
160
- if (!shouldUnlock) return release;
166
+ if (release.locked === shouldBeLocked) return release;
161
167
 
162
168
  hasChanges = true;
163
- return { ...release, locked: false };
169
+ return { ...release, locked: shouldBeLocked };
164
170
  });
165
171
 
166
172
  if (hasChanges) {
@@ -62,7 +62,11 @@ const TicketWithMerchandiseSelection: React.FC<Props> = ({ event }) => {
62
62
  const isReleaseSelected = (id: number) => !!tickets.find((ticket) => ticket.releaseId === id);
63
63
 
64
64
  const selectedTickets = async () => {
65
- const releases = await mutate();
65
+ // Use the cache we already have instead of revalidating here. A network
66
+ // revalidate refetches active-releases and returns the next wave as locked
67
+ // again, clobbering the local lock state below and ping-ponging the effect
68
+ // (deps [tickets, activeReleases]) into an active-releases refetch loop.
69
+ const releases = activeReleases;
66
70
  const currentReleases = releases || activeReleases || [];
67
71
  const allFilled = tickets.filter((item) => !item.releaseId || !item.quantity);
68
72
 
@@ -84,19 +88,24 @@ const TicketWithMerchandiseSelection: React.FC<Props> = ({ event }) => {
84
88
  item.order === release.order - 1
85
89
  );
86
90
 
87
- if (!release.locked || !previousRelease) return release;
91
+ // The first wave in a category is never gated by a previous one.
92
+ if (!previousRelease) return release;
88
93
 
89
94
  const previousTicket = tickets.find((ticket) => ticket.releaseId === previousRelease.id);
90
95
  const previousMaxSelectable = Math.min(
91
96
  previousRelease.availableTickets || 0,
92
97
  maxTicketsPerOrder
93
98
  );
94
- const shouldUnlock = Number(previousTicket?.quantity || 0) >= previousMaxSelectable;
99
+ // Derive the lock from the cart both ways: unlock the next wave while the
100
+ // previous one is filled to its max, re-lock it when the customer reduces
101
+ // it again (we can't lean on a server refetch to re-lock — that was the
102
+ // active-releases loop).
103
+ const shouldBeLocked = Number(previousTicket?.quantity || 0) < previousMaxSelectable;
95
104
 
96
- if (!shouldUnlock) return release;
105
+ if (release.locked === shouldBeLocked) return release;
97
106
 
98
107
  hasChanges = true;
99
- return { ...release, locked: false };
108
+ return { ...release, locked: shouldBeLocked };
100
109
  });
101
110
 
102
111
  if (hasChanges) {