Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,15 @@ php artisan inertia:start-ssr
Inertia.js uses [Playwright](https://playwright.dev/) for testing. To run the tests, use the following command:

```sh
cd tests && npx playwright test
npx playwright install # install playwright with system-wide browser dependencies

# install packages for the test app
cd tests/app
npm install

# run tests
cd ..
npx playwright test
```

## Publishing
Expand Down
10 changes: 6 additions & 4 deletions packages/core/src/eventHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { fireNavigateEvent } from './events'
import { history } from './history'
import { page as currentPage } from './page'
import { Scroll } from './scroll'
import { GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'
import { EventHandlerInitParams, GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'
import { hrefToUrl } from './url'

class EventHandler {
Expand All @@ -12,13 +12,15 @@ class EventHandler {
listener: VoidFunction
}[] = []

public init() {
public init({ handleScroll }: EventHandlerInitParams) {
if (typeof window !== 'undefined') {
window.addEventListener('popstate', this.handlePopstateEvent.bind(this))
window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)
if (handleScroll) {
window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)
}
}

if (typeof document !== 'undefined') {
if (typeof document !== 'undefined' && handleScroll) {
document.addEventListener('scroll', debounce(Scroll.onScroll.bind(Scroll), 100), true)
}
}
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import { history } from './history'
import { Scroll } from './scroll'
import {
Component,
CurrentPageInitParams,
Page,
PageEvent,
PageHandler,
PageResolver,
PreserveStateOption,
RouterInitParams,
VisitOptions,
} from './types'
import { hrefToUrl, isSameUrlWithoutHash } from './url'
Expand All @@ -26,7 +26,7 @@ class CurrentPage {
protected isFirstPageLoad = true
protected cleared = false

public init({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {
public init({ initialPage, swapComponent, resolveComponent }: CurrentPageInitParams) {
this.page = initialPage
this.swapComponent = swapComponent
this.resolveComponent = resolveComponent
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export class Router {
interruptible: false,
})

public init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void {
public init({ initialPage, resolveComponent, swapComponent, handleScroll }: RouterInitParams): void {
currentPage.init({
initialPage,
resolveComponent,
Expand All @@ -52,7 +52,7 @@ export class Router {

InitialVisit.handle()

eventHandler.init()
eventHandler.init({ handleScroll })

eventHandler.on('missingHistoryItem', () => {
if (typeof window !== 'undefined') {
Expand Down
7 changes: 7 additions & 0 deletions packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,13 @@ export type RouterInitParams = {
initialPage: Page
resolveComponent: PageResolver
swapComponent: PageHandler
handleScroll: boolean
}

export type CurrentPageInitParams = Omit<RouterInitParams, 'handleScroll'>

export type EventHandlerInitParams = {
handleScroll: boolean
}

export type PendingVisitOptions = {
Expand Down
2 changes: 2 additions & 0 deletions packages/react/src/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export default function App({
resolveComponent,
titleCallback,
onHeadUpdate,
handleScroll,
}) {
const [current, setCurrent] = useState({
component: initialComponent || null,
Expand All @@ -29,6 +30,7 @@ export default function App({
router.init({
initialPage,
resolveComponent,
handleScroll,
swapComponent: async ({ component, page, preserveState }) => {
setCurrent((current) => ({
component,
Expand Down
3 changes: 3 additions & 0 deletions packages/svelte/src/components/App.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
export interface InertiaAppProps {
initialComponent: ResolvedComponent
initialPage: Page
handleScroll: boolean
resolveComponent: ComponentResolver
}
</script>
Expand All @@ -18,6 +19,7 @@
export let initialComponent: InertiaAppProps['initialComponent']
export let initialPage: InertiaAppProps['initialPage']
export let resolveComponent: InertiaAppProps['resolveComponent']
export let handleScroll: InertiaAppProps['handleScroll']

let component = initialComponent
let key: number | null = null
Expand All @@ -32,6 +34,7 @@
router.init({
initialPage,
resolveComponent,
handleScroll,
swapComponent: async (args) => {
component = args.component as ResolvedComponent
page = args.page
Expand Down
4 changes: 3 additions & 1 deletion packages/vue3/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import useForm from './useForm'
export interface InertiaAppProps {
initialPage: Page
initialComponent?: object
handleScroll?: boolean
resolveComponent?: (name: string) => DefineComponent | Promise<DefineComponent>
titleCallback?: (title: string) => string
onHeadUpdate?: (elements: string[]) => void
Expand Down Expand Up @@ -57,7 +58,7 @@ const App: InertiaApp = defineComponent({
default: () => () => {},
},
},
setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {
setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate, handleScroll }) {
component.value = initialComponent ? markRaw(initialComponent) : null
page.value = initialPage
key.value = null
Expand All @@ -69,6 +70,7 @@ const App: InertiaApp = defineComponent({
router.init({
initialPage,
resolveComponent,
handleScroll,
swapComponent: async (args: VuePageHandlerArgs) => {
component.value = markRaw(args.component)
page.value = args.page
Expand Down
Loading