Skip to content

Commit 56b9b41

Browse files
committed
Clean up SSR code.
1 parent 5f6f091 commit 56b9b41

File tree

13 files changed

+95
-84
lines changed

13 files changed

+95
-84
lines changed

packages/embla-carousel-docs/src/components/Sandbox/React/SandboxFilesDist/IosPicker/EmblaCarouselIosPickerItem.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,11 @@ export const IosPickerItem = (props) => {
7070

7171
const inactivateEmblaTransform = useCallback((emblaApi) => {
7272
if (!emblaApi) return
73-
const { translate, slideLooper } = emblaApi.internalEngine()
74-
translate.clear()
75-
translate.toggleActive(false)
76-
slideLooper.loopPoints.forEach(({ translate }) => {
73+
74+
const { translate, slideTranslates } = emblaApi.internalEngine()
75+
const translates = [translate, ...slideTranslates]
76+
77+
translates.forEach((translate) => {
7778
translate.clear()
7879
translate.toggleActive(false)
7980
})

packages/embla-carousel-docs/src/components/Sandbox/React/SandboxFilesDist/IosPicker/EmblaCarouselIosPickerItem.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,11 @@ export const IosPickerItem: React.FC<PropType> = (props) => {
8888
const inactivateEmblaTransform = useCallback(
8989
(emblaApi: EmblaCarouselType) => {
9090
if (!emblaApi) return
91-
const { translate, slideLooper } = emblaApi.internalEngine()
92-
translate.clear()
93-
translate.toggleActive(false)
94-
slideLooper.loopPoints.forEach(({ translate }) => {
91+
92+
const { translate, slideTranslates } = emblaApi.internalEngine()
93+
const translates = [translate, ...slideTranslates]
94+
95+
translates.forEach((translate) => {
9596
translate.clear()
9697
translate.toggleActive(false)
9798
})

packages/embla-carousel-docs/src/components/Sandbox/React/SandboxFilesSrc/IosPicker/EmblaCarouselIosPickerItem.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,11 @@ export const IosPickerItem: React.FC<PropType> = (props) => {
8888
const inactivateEmblaTransform = useCallback(
8989
(emblaApi: EmblaCarouselType) => {
9090
if (!emblaApi) return
91-
const { translate, slideLooper } = emblaApi.internalEngine()
92-
translate.clear()
93-
translate.toggleActive(false)
94-
slideLooper.loopPoints.forEach(({ translate }) => {
91+
92+
const { translate, slideTranslates } = emblaApi.internalEngine()
93+
const translates = [translate, ...slideTranslates]
94+
95+
translates.forEach((translate) => {
9596
translate.clear()
9697
translate.toggleActive(false)
9798
})

packages/embla-carousel-docs/src/components/Sandbox/Vanilla/SandboxFilesDist/IosPicker/EmblaCarouselIosPicker.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ const rotateWheel = (emblaApi, slideCount, rotationOffset) => {
6666
}
6767

6868
const inactivateEmblaTransform = (emblaApi) => {
69-
const { translate, slideLooper } = emblaApi.internalEngine()
70-
translate.clear()
71-
translate.toggleActive(false)
72-
slideLooper.loopPoints.forEach(({ translate }) => {
69+
const { translate, slideTranslates } = emblaApi.internalEngine()
70+
const translates = [translate, ...slideTranslates]
71+
72+
translates.forEach((translate) => {
7373
translate.clear()
7474
translate.toggleActive(false)
7575
})

packages/embla-carousel-docs/src/components/Sandbox/Vanilla/SandboxFilesDist/IosPicker/EmblaCarouselIosPicker.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ const rotateWheel = (
8484
}
8585

8686
const inactivateEmblaTransform = (emblaApi: EmblaCarouselType): void => {
87-
const { translate, slideLooper } = emblaApi.internalEngine()
88-
translate.clear()
89-
translate.toggleActive(false)
90-
slideLooper.loopPoints.forEach(({ translate }) => {
87+
const { translate, slideTranslates } = emblaApi.internalEngine()
88+
const translates = [translate, ...slideTranslates]
89+
90+
translates.forEach((translate) => {
9191
translate.clear()
9292
translate.toggleActive(false)
9393
})

packages/embla-carousel-docs/src/components/Sandbox/Vanilla/SandboxFilesSrc/IosPicker/EmblaCarouselIosPicker.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ const rotateWheel = (
8484
}
8585

8686
const inactivateEmblaTransform = (emblaApi: EmblaCarouselType): void => {
87-
const { translate, slideLooper } = emblaApi.internalEngine()
88-
translate.clear()
89-
translate.toggleActive(false)
90-
slideLooper.loopPoints.forEach(({ translate }) => {
87+
const { translate, slideTranslates } = emblaApi.internalEngine()
88+
const translates = [translate, ...slideTranslates]
89+
90+
translates.forEach((translate) => {
9191
translate.clear()
9292
translate.toggleActive(false)
9393
})

packages/embla-carousel-fade/src/components/Fade.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ function Fade(userOptions: FadeOptionsType = {}): FadeType {
8989

9090
disableScroll()
9191
fadeToSelectedSnapInstantly()
92-
emblaApi.containerNode().style.transform = 'none'
9392
}
9493

9594
function destroy(): void {
@@ -108,7 +107,6 @@ function Fade(userOptions: FadeOptionsType = {}): FadeType {
108107
emblaApi.slideNodes().forEach((slideNode) => {
109108
const slideStyle = slideNode.style
110109
slideStyle.opacity = ''
111-
slideStyle.transform = ''
112110
slideStyle.pointerEvents = ''
113111
})
114112

@@ -148,15 +146,15 @@ function Fade(userOptions: FadeOptionsType = {}): FadeType {
148146
}
149147

150148
function disableScroll(): void {
151-
const { translate, slideLooper } = emblaApi.internalEngine()
149+
const { translate, slideTranslates } = emblaApi.internalEngine()
150+
const translates = [translate, ...slideTranslates]
152151

153-
translate.clear()
154-
translate.toggleActive(false)
155-
156-
slideLooper.loopPoints.forEach(({ translate }) => {
152+
translates.forEach((translate) => {
157153
translate.clear()
158154
translate.toggleActive(false)
159155
})
156+
157+
emblaApi.containerNode().style.transform = 'translate(0px,0px)'
160158
}
161159

162160
function lockExcessiveScroll(fadeIndex: number | null): void {

packages/embla-carousel/src/components/Animations.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export function Animations(
7171
}
7272

7373
function stop(): void {
74+
if (!animationId) return
7475
windowInstance.cancelAnimationFrame(animationId)
7576
lastTimeStamp = null
7677
accumulatedTime = 0

packages/embla-carousel/src/components/EmblaCarousel.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,8 @@ function EmblaCarousel(
8181
container: HTMLElement,
8282
slides: HTMLElement[]
8383
): EngineType {
84-
nodeHandler.clearOffsets(container, ...slides)
85-
8684
const ssrOptions = isSsr ? { direction: 'ltr' } : {}
8785
const engineOptions = mergeOptions(options, ssrOptions)
88-
8986
const engine = Engine(
9087
root,
9188
container,
@@ -101,6 +98,7 @@ function EmblaCarousel(
10198
const optionsWithoutLoop = mergeOptions(options, { loop: false })
10299
return createEngine(optionsWithoutLoop, container, slides)
103100
}
101+
104102
return engine
105103
}
106104

@@ -142,6 +140,8 @@ function EmblaCarousel(
142140

143141
if (!isSsr && ownerWindow) {
144142
engine.translate.to(engine.location.get())
143+
if (engine.options.loop) engine.slideLooper.loop()
144+
145145
engine.animation.init(ownerWindow)
146146
engine.resizeHandler.init(ownerWindow)
147147
engine.slidesInView.init(ownerWindow)
@@ -150,7 +150,6 @@ function EmblaCarousel(
150150
engine.eventHandler.init(self)
151151
engine.watchHandler.init(self)
152152

153-
if (engine.options.loop) engine.slideLooper.loop()
154153
if (container.offsetParent && slides.length) {
155154
engine.dragHandler.init(ownerWindow)
156155
}
@@ -176,10 +175,10 @@ function EmblaCarousel(
176175
engine.slidesInView.destroy()
177176
engine.animation.destroy()
178177
pluginsHandler.destroy()
179-
engine.translate.clear()
180-
engine.slideLooper.clear()
181178
engine.eventStore.clear()
182179
mediaHandlers.clear()
180+
engine.translate.clear()
181+
engine.slideTranslates.forEach((translate) => translate.clear())
183182
}
184183

185184
function destroy(): void {
@@ -244,12 +243,12 @@ function EmblaCarousel(
244243
return isSsr ? ssrHandler.getStyles(container, slides) : ''
245244
}
246245

247-
function snapList(): number[] {
248-
return engine.snapList
246+
function scrollProgress(): number {
247+
return engine.scrollProgress.get(engine.offsetLocation.get())
249248
}
250249

251-
function scrollProgress(): number {
252-
return engine.scrollProgress.get(engine.location.get())
250+
function snapList(): number[] {
251+
return engine.snapList
253252
}
254253

255254
function selectedSnap(): number {

packages/embla-carousel/src/components/Engine.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export type EngineType = {
6464
slidesToScroll: SlidesToScrollType
6565
target: Vector1DType
6666
translate: TranslateType
67+
slideTranslates: TranslateType[]
6768
resizeHandler: ResizeHandlerType
6869
slidesHandler: SlidesHandlerType
6970
nodeHandler: NodeHandlerType
@@ -110,9 +111,8 @@ export function Engine(
110111

111112
// Measurements
112113
const pixelTolerance = isSsr ? 0 : 2
113-
const containerRect = nodeHandler.getRect(container)
114-
const slideRects = slides.map(nodeHandler.getRect)
115114
const axis = Axis(scrollAxis, direction)
115+
const { containerRect, slideRects } = nodeHandler.getRects(container, slides)
116116
const viewSize = axis.measureSize(containerRect)
117117
const percentOfView = PercentOfView(viewSize)
118118
const alignment = Alignment(align, viewSize)
@@ -223,6 +223,9 @@ export function Engine(
223223
const previousLocation = Vector1D(startLocation)
224224
const offsetLocation = Vector1D(startLocation)
225225
const target = Vector1D(startLocation)
226+
const translate = Translate(axis, container)
227+
const slideTranslates = slides.map((slide) => Translate(axis, slide))
228+
226229
const scrollBody = ScrollBody(
227230
location,
228231
offsetLocation,
@@ -343,15 +346,14 @@ export function Engine(
343346
scrollTarget,
344347
scrollTo,
345348
slideLooper: SlideLooper(
346-
axis,
347349
viewSize,
348350
contentSize,
349351
slideSizes,
350352
slideSizesWithGaps,
351353
snaps,
352354
scrollSnaps,
353355
offsetLocation,
354-
slides
356+
slideTranslates
355357
),
356358
slideFocus,
357359
slidesHandler: SlidesHandler(
@@ -364,8 +366,9 @@ export function Engine(
364366
slideIndexes,
365367
slideRegistry,
366368
slidesToScroll,
369+
slideTranslates,
370+
translate,
367371
target,
368-
translate: Translate(axis, container),
369372
watchHandler
370373
}
371374

0 commit comments

Comments
 (0)