@cntrl-site/sdk-nextjs 1.9.13 → 1.9.14-1
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.
|
@@ -105,13 +105,51 @@ class InteractionsRegistry {
|
|
|
105
105
|
}
|
|
106
106
|
return available;
|
|
107
107
|
}
|
|
108
|
+
getTriggerPositionForItemScrollTrigger(trigger) {
|
|
109
|
+
const itemArea = this.items.find((item) => item.id === trigger.itemId).area[this.layoutId];
|
|
110
|
+
let triggerPosition = 0;
|
|
111
|
+
switch (trigger.itemPosition) {
|
|
112
|
+
case 'top':
|
|
113
|
+
triggerPosition = itemArea.top * window.innerWidth;
|
|
114
|
+
break;
|
|
115
|
+
case 'center':
|
|
116
|
+
triggerPosition = itemArea.top * window.innerWidth - window.innerHeight / 2;
|
|
117
|
+
break;
|
|
118
|
+
case 'bottom':
|
|
119
|
+
triggerPosition = itemArea.top * window.innerWidth - window.innerHeight;
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
triggerPosition = itemArea.top * window.innerWidth;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
switch (trigger.screenPosition) {
|
|
126
|
+
case 'top':
|
|
127
|
+
triggerPosition += 0;
|
|
128
|
+
break;
|
|
129
|
+
case 'center':
|
|
130
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
131
|
+
break;
|
|
132
|
+
case 'bottom':
|
|
133
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
triggerPosition += 0;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
triggerPosition += trigger.offset;
|
|
140
|
+
return triggerPosition;
|
|
141
|
+
}
|
|
142
|
+
isItemScrollTriggerOnStartScreen(trigger) {
|
|
143
|
+
const triggerPosition = this.getTriggerPositionForItemScrollTrigger(trigger);
|
|
144
|
+
return triggerPosition < 0;
|
|
145
|
+
}
|
|
108
146
|
notifyLoad() {
|
|
109
147
|
var _a, _b;
|
|
110
148
|
const timestamp = Date.now();
|
|
111
149
|
for (const interaction of this.interactions) {
|
|
112
150
|
const currentStateId = this.getCurrentStateByInteractionId(interaction.id);
|
|
113
151
|
const matchingTrigger = interaction.triggers.find(trigger => ('position' in trigger && trigger.position === 0 && trigger.from === currentStateId)
|
|
114
|
-
|| (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId));
|
|
152
|
+
|| (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId && this.isItemScrollTriggerOnStartScreen(trigger)));
|
|
115
153
|
if (!matchingTrigger)
|
|
116
154
|
continue;
|
|
117
155
|
const activeStateId = this.getActiveInteractionState(interaction.id);
|
|
@@ -180,6 +218,21 @@ class InteractionsRegistry {
|
|
|
180
218
|
triggerPosition = itemArea.top * window.innerWidth;
|
|
181
219
|
break;
|
|
182
220
|
}
|
|
221
|
+
switch (trigger.screenPosition) {
|
|
222
|
+
case 'top':
|
|
223
|
+
triggerPosition += 0;
|
|
224
|
+
break;
|
|
225
|
+
case 'center':
|
|
226
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
227
|
+
break;
|
|
228
|
+
case 'bottom':
|
|
229
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
230
|
+
break;
|
|
231
|
+
default:
|
|
232
|
+
triggerPosition += 0;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
triggerPosition += trigger.offset;
|
|
183
236
|
}
|
|
184
237
|
if (!triggerPosition)
|
|
185
238
|
return false;
|
|
@@ -211,6 +264,21 @@ class InteractionsRegistry {
|
|
|
211
264
|
triggerPosition = itemArea.top * window.innerWidth;
|
|
212
265
|
break;
|
|
213
266
|
}
|
|
267
|
+
switch (matchingTrigger.screenPosition) {
|
|
268
|
+
case 'top':
|
|
269
|
+
triggerPosition += 0;
|
|
270
|
+
break;
|
|
271
|
+
case 'center':
|
|
272
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
273
|
+
break;
|
|
274
|
+
case 'bottom':
|
|
275
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
276
|
+
break;
|
|
277
|
+
default:
|
|
278
|
+
triggerPosition += 0;
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
triggerPosition += matchingTrigger.offset;
|
|
214
282
|
}
|
|
215
283
|
if (!triggerPosition)
|
|
216
284
|
continue;
|
package/package.json
CHANGED
|
@@ -4,9 +4,11 @@ import {
|
|
|
4
4
|
ArticleItemType,
|
|
5
5
|
Interaction,
|
|
6
6
|
InteractionItemTrigger,
|
|
7
|
+
InteractionScrollTrigger,
|
|
7
8
|
ItemAny,
|
|
8
9
|
} from '@cntrl-site/sdk';
|
|
9
10
|
import { isItemType } from '../utils/isItemType';
|
|
11
|
+
import { InteractionItemScrollTrigger } from '@cntrl-site/sdk/lib/types/article/Interaction';
|
|
10
12
|
|
|
11
13
|
export class InteractionsRegistry implements InteractionsRegistryPort {
|
|
12
14
|
private ctrls: Map<ItemId, ItemInteractionCtrl> = new Map();
|
|
@@ -114,13 +116,53 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
|
|
|
114
116
|
return available;
|
|
115
117
|
}
|
|
116
118
|
|
|
119
|
+
getTriggerPositionForItemScrollTrigger(trigger: InteractionItemScrollTrigger): number {
|
|
120
|
+
const itemArea = this.items.find((item) => item.id === trigger.itemId)!.area[this.layoutId];
|
|
121
|
+
let triggerPosition = 0;
|
|
122
|
+
switch (trigger.itemPosition) {
|
|
123
|
+
case 'top':
|
|
124
|
+
triggerPosition = itemArea.top * window.innerWidth;
|
|
125
|
+
break;
|
|
126
|
+
case 'center':
|
|
127
|
+
triggerPosition = itemArea.top * window.innerWidth - window.innerHeight / 2;
|
|
128
|
+
break;
|
|
129
|
+
case 'bottom':
|
|
130
|
+
triggerPosition = itemArea.top * window.innerWidth - window.innerHeight;
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
triggerPosition = itemArea.top * window.innerWidth;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
switch (trigger.screenPosition) {
|
|
137
|
+
case 'top':
|
|
138
|
+
triggerPosition += 0;
|
|
139
|
+
break;
|
|
140
|
+
case 'center':
|
|
141
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
142
|
+
break;
|
|
143
|
+
case 'bottom':
|
|
144
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
triggerPosition += 0;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
triggerPosition += trigger.offset;
|
|
151
|
+
return triggerPosition;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
isItemScrollTriggerOnStartScreen(trigger: InteractionItemScrollTrigger): boolean {
|
|
155
|
+
const triggerPosition = this.getTriggerPositionForItemScrollTrigger(trigger);
|
|
156
|
+
return triggerPosition < 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
117
159
|
notifyLoad() {
|
|
118
160
|
const timestamp = Date.now();
|
|
119
161
|
for (const interaction of this.interactions) {
|
|
120
162
|
const currentStateId = this.getCurrentStateByInteractionId(interaction.id);
|
|
121
163
|
const matchingTrigger = interaction.triggers.find(trigger =>
|
|
122
164
|
('position' in trigger && trigger.position === 0 && trigger.from === currentStateId)
|
|
123
|
-
|| (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId)
|
|
165
|
+
|| (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId && this.isItemScrollTriggerOnStartScreen(trigger))
|
|
124
166
|
);
|
|
125
167
|
if (!matchingTrigger) continue;
|
|
126
168
|
const activeStateId = this.getActiveInteractionState(interaction.id);
|
|
@@ -186,6 +228,21 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
|
|
|
186
228
|
triggerPosition = itemArea.top * window.innerWidth;
|
|
187
229
|
break;
|
|
188
230
|
}
|
|
231
|
+
switch (trigger.screenPosition) {
|
|
232
|
+
case 'top':
|
|
233
|
+
triggerPosition += 0;
|
|
234
|
+
break;
|
|
235
|
+
case 'center':
|
|
236
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
237
|
+
break;
|
|
238
|
+
case 'bottom':
|
|
239
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
240
|
+
break;
|
|
241
|
+
default:
|
|
242
|
+
triggerPosition += 0;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
triggerPosition += trigger.offset;
|
|
189
246
|
}
|
|
190
247
|
if (!triggerPosition) return false;
|
|
191
248
|
const isScrolledPastTrigger = triggerPosition < position;
|
|
@@ -214,6 +271,21 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
|
|
|
214
271
|
triggerPosition = itemArea.top * window.innerWidth;
|
|
215
272
|
break;
|
|
216
273
|
}
|
|
274
|
+
switch (matchingTrigger.screenPosition) {
|
|
275
|
+
case 'top':
|
|
276
|
+
triggerPosition += 0;
|
|
277
|
+
break;
|
|
278
|
+
case 'center':
|
|
279
|
+
triggerPosition += (itemArea.height * window.innerWidth) / 2;
|
|
280
|
+
break;
|
|
281
|
+
case 'bottom':
|
|
282
|
+
triggerPosition += itemArea.height * window.innerWidth;
|
|
283
|
+
break;
|
|
284
|
+
default:
|
|
285
|
+
triggerPosition += 0;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
triggerPosition += matchingTrigger.offset;
|
|
217
289
|
}
|
|
218
290
|
if (!triggerPosition) continue;
|
|
219
291
|
const isScrolledPastTrigger = triggerPosition < position;
|