diff --git a/Gemfile b/Gemfile index 542f7df3018..952f07bac16 100644 --- a/Gemfile +++ b/Gemfile @@ -207,6 +207,8 @@ gem "appsignal", "~> 3.0", require: false gem 'view_component' +gem 'turbo-rails', "~> 1.1" + group :test do gem 'launchy', '~> 2.5.0' gem 'rack-test', '~> 2.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index d0c0188146c..a3996ced0e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -924,6 +924,10 @@ GEM timeout (0.3.2) trailblazer-option (0.1.2) ttfunk (1.7.0) + turbo-rails (1.4.0) + actionpack (>= 6.0.0) + activejob (>= 6.0.0) + railties (>= 6.0.0) typed_dag (2.0.2) rails (>= 5.0.4) tzinfo (2.0.6) @@ -1142,6 +1146,7 @@ DEPENDENCIES table_print (~> 1.5.6) test-prof (~> 1.2.0) timecop (~> 0.9.0) + turbo-rails (~> 1.1) turbo_tests! typed_dag (~> 2.0.2) tzinfo-data (~> 1.2023.1) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d4b12fb58e6..f616f489c55 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,6 +36,8 @@ "@fullcalendar/resource-timeline": "^6.1.8", "@fullcalendar/timegrid": "^6.1.8", "@hotwired/stimulus": "^3.2.1", + "@hotwired/turbo": "^7.3.0", + "@hotwired/turbo-rails": "^7.3.0", "@kolkov/ngx-gallery": "^2.0.1", "@ng-select/ng-option-highlight": "0.0.7", "@ng-select/ng-select": "^11.0.0", @@ -6353,6 +6355,23 @@ "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.1.tgz", "integrity": "sha512-HGlzDcf9vv/EQrMJ5ZG6VWNs8Z/xMN+1o2OhV1gKiSG6CqZt5MCBB1gRg5ILiN3U0jEAxuDTNPRfBcnZBDmupQ==" }, + "node_modules/@hotwired/turbo": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz", + "integrity": "sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@hotwired/turbo-rails": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz", + "integrity": "sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA==", + "dependencies": { + "@hotwired/turbo": "^7.3.0", + "@rails/actioncable": "^7.0" + } + }, "node_modules/@html-eslint/eslint-plugin": { "version": "0.15.0", "dev": true, @@ -7370,6 +7389,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@rails/actioncable": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.5.tgz", + "integrity": "sha512-SOBA2heB9lTw0VYIx8M/ed7inSf4I9sR8OIlJprhgkfQ3WJtrxPJ6DDATR1Z3RYaIR7HlT2Olj08v1lfGIGuHA==" + }, "node_modules/@schematics/angular": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", @@ -39196,6 +39220,20 @@ "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.1.tgz", "integrity": "sha512-HGlzDcf9vv/EQrMJ5ZG6VWNs8Z/xMN+1o2OhV1gKiSG6CqZt5MCBB1gRg5ILiN3U0jEAxuDTNPRfBcnZBDmupQ==" }, + "@hotwired/turbo": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz", + "integrity": "sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==" + }, + "@hotwired/turbo-rails": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz", + "integrity": "sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA==", + "requires": { + "@hotwired/turbo": "^7.3.0", + "@rails/actioncable": "^7.0" + } + }, "@html-eslint/eslint-plugin": { "version": "0.15.0", "dev": true @@ -39877,6 +39915,11 @@ "version": "1.0.0-next.15", "dev": true }, + "@rails/actioncable": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.5.tgz", + "integrity": "sha512-SOBA2heB9lTw0VYIx8M/ed7inSf4I9sR8OIlJprhgkfQ3WJtrxPJ6DDATR1Z3RYaIR7HlT2Olj08v1lfGIGuHA==" + }, "@schematics/angular": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6420ca2ce5a..8e9c47afd21 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -108,6 +108,8 @@ "@fullcalendar/resource-timeline": "^6.1.8", "@fullcalendar/timegrid": "^6.1.8", "@hotwired/stimulus": "^3.2.1", + "@hotwired/turbo": "^7.3.0", + "@hotwired/turbo-rails": "^7.3.0", "@kolkov/ngx-gallery": "^2.0.1", "@ng-select/ng-option-highlight": "0.0.7", "@ng-select/ng-select": "^11.0.0", diff --git a/frontend/src/main.ts b/frontend/src/main.ts index e0fac9de965..6b121ab0e8c 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -6,9 +6,14 @@ import { initializeLocale } from 'core-app/core/setup/init-locale'; import { environment } from './environments/environment'; import { configureErrorReporter } from 'core-app/core/errors/configure-reporter'; import { initializeGlobalListeners } from 'core-app/core/setup/globals/global-listeners'; +import * as Turbo from '@hotwired/turbo'; (window as any).global = window; +// Disable default turbo-drive for now while we +// +Turbo.session.drive = false; + // Ensure we set the correct dynamic frontend path // based on the RAILS_RELATIVE_URL_ROOT setting // https://webpack.js.org/guides/public-path/