From 54afed9fb46fcc5b7de47dc107280359a672da77 Mon Sep 17 00:00:00 2001 From: Vishnu Narayanan Date: Mon, 18 Nov 2024 12:36:27 +0530 Subject: [PATCH 001/541] feat: add judoscaler gem for heroku autoscaling (#10419) - add judoscaler gem to allow judoscale use in heroku environments - This will allow auto scaling for both web and worker dynos across both standard-1x/2x and performance dynos - This will scaling in response to queue time rather than response time(heroku default) - This also allows you to scale multiple dynos in and out at once, rather than scaling them one at a time, as is the default. Ref ---- 1. https://judoscale.com/ 2. https://devcenter.heroku.com/articles/judoscale --- Gemfile | 3 +++ Gemfile.lock | 9 +++++++++ config/application.rb | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/Gemfile b/Gemfile index 2e1e3ec14..f18305970 100644 --- a/Gemfile +++ b/Gemfile @@ -181,6 +181,9 @@ gem 'reverse_markdown' group :production do # we dont want request timing out in development while using byebug gem 'rack-timeout' + # for heroku autoscaling + gem 'judoscale-rails', require: false + gem 'judoscale-sidekiq', require: false end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 41140bdda..e2f5c91be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -397,6 +397,13 @@ GEM hana (~> 1.3) regexp_parser (~> 2.0) uri_template (~> 0.7) + judoscale-rails (1.8.2) + judoscale-ruby (= 1.8.2) + railties + judoscale-ruby (1.8.2) + judoscale-sidekiq (1.8.2) + judoscale-ruby (= 1.8.2) + sidekiq (>= 5.0) jwt (2.8.1) base64 kaminari (1.2.2) @@ -891,6 +898,8 @@ DEPENDENCIES jbuilder json_refs json_schemer + judoscale-rails + judoscale-sidekiq jwt kaminari koala diff --git a/config/application.rb b/config/application.rb index 1aedfc860..f3443ddb3 100644 --- a/config/application.rb +++ b/config/application.rb @@ -27,6 +27,12 @@ if ENV.fetch('SENTRY_DSN', false).present? require 'sentry-sidekiq' end +# heroku autoscaling +if ENV.fetch('JUDOSCALE_URL', false).present? + require 'judoscale-rails' + require 'judoscale-sidekiq' +end + module Chatwoot class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. From aaa328be87e07c2405b33be0f16ecc49cd5d70b2 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 19 Nov 2024 06:59:27 +0530 Subject: [PATCH 002/541] feat: Add dropdown component (#10358) This PR adds dropdown primitives to help compose custom dropdowns across the app. The following the sample usage --------- Co-authored-by: Pranav --- .../dashboard/assets/scss/widgets/_base.scss | 8 +- .../assets/scss/widgets/_buttons.scss | 2 +- .../DropdownPrimitives.story.vue | 79 +++++++++++ .../dropdown-menu/base/DropdownBody.vue | 9 ++ .../dropdown-menu/base/DropdownContainer.vue | 29 ++++ .../dropdown-menu/base/DropdownItem.vue | 55 ++++++++ .../dropdown-menu/base/DropdownSection.vue | 22 +++ .../dropdown-menu/base/DropdownSeparator.vue | 3 + .../dropdown-menu/base/index.js | 13 ++ .../dropdown-menu/base/provider.js | 19 +++ .../sidebar/SidebarAccountSwitcher.vue | 116 ++++++++------- .../components-next/sidebar/SidebarGroup.vue | 4 +- .../sidebar/SidebarProfileMenu.vue | 119 +++++++--------- .../sidebar/SidebarProfileMenuStatus.vue | 133 +++++++++--------- .../sidebar/SidebarSubGroup.vue | 2 +- .../layout/sidebarComponents/Secondary.vue | 2 +- .../sidebarComponents/SecondaryNavItem.vue | 2 +- .../specs/AccountSelector.spec.js | 2 +- .../dashboard/i18n/locale/en/settings.json | 17 ++- .../dashboard/store/modules/auth.js | 35 ++++- .../store/modules/specs/auth/actions.spec.js | 49 +++++-- .../dashboard/store/mutation-types.js | 1 + 22 files changed, 497 insertions(+), 224 deletions(-) create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/DropdownPrimitives.story.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/DropdownBody.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/DropdownContainer.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/DropdownItem.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSection.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSeparator.vue create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/index.js create mode 100644 app/javascript/dashboard/components-next/dropdown-menu/base/provider.js diff --git a/app/javascript/dashboard/assets/scss/widgets/_base.scss b/app/javascript/dashboard/assets/scss/widgets/_base.scss index d5d2e227f..d35c1cfc9 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_base.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_base.scss @@ -31,7 +31,13 @@ hr { ul, ol, dl { - @apply mb-2 list-disc list-outside leading-[1.65]; + @apply list-disc list-outside leading-[1.65]; +} + +ul:not(.reset-base), +ol:not(.reset-base), +dl:not(.reset-base) { + @apply mb-0; } // Form elements diff --git a/app/javascript/dashboard/assets/scss/widgets/_buttons.scss b/app/javascript/dashboard/assets/scss/widgets/_buttons.scss index 587b810ca..640e1395f 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_buttons.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_buttons.scss @@ -96,7 +96,7 @@ button { } // @TODDO - Remove after moving all buttons to woot-button - .icon+.button__content { + .icon + .button__content { @apply w-auto; } diff --git a/app/javascript/dashboard/components-next/dropdown-menu/DropdownPrimitives.story.vue b/app/javascript/dashboard/components-next/dropdown-menu/DropdownPrimitives.story.vue new file mode 100644 index 000000000..c0818283e --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/DropdownPrimitives.story.vue @@ -0,0 +1,79 @@ + + + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownBody.vue b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownBody.vue new file mode 100644 index 000000000..4fde89306 --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownBody.vue @@ -0,0 +1,9 @@ + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownContainer.vue b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownContainer.vue new file mode 100644 index 000000000..ee81e4b98 --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownContainer.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownItem.vue b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownItem.vue new file mode 100644 index 000000000..92be04fda --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownItem.vue @@ -0,0 +1,55 @@ + + + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSection.vue b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSection.vue new file mode 100644 index 000000000..3879af0a7 --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSection.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSeparator.vue b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSeparator.vue new file mode 100644 index 000000000..373aa4479 --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSeparator.vue @@ -0,0 +1,3 @@ + diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/index.js b/app/javascript/dashboard/components-next/dropdown-menu/base/index.js new file mode 100644 index 000000000..69a15a850 --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/index.js @@ -0,0 +1,13 @@ +import DropdownBody from './DropdownBody.vue'; +import DropdownContainer from './DropdownContainer.vue'; +import DropdownItem from './DropdownItem.vue'; +import DropdownSection from './DropdownSection.vue'; +import DropdownSeparator from './DropdownSeparator.vue'; + +export { + DropdownBody, + DropdownContainer, + DropdownItem, + DropdownSection, + DropdownSeparator, +}; diff --git a/app/javascript/dashboard/components-next/dropdown-menu/base/provider.js b/app/javascript/dashboard/components-next/dropdown-menu/base/provider.js new file mode 100644 index 000000000..67f2cbd0a --- /dev/null +++ b/app/javascript/dashboard/components-next/dropdown-menu/base/provider.js @@ -0,0 +1,19 @@ +import { inject, provide } from 'vue'; + +const DropdownControl = Symbol('DropdownControl'); + +export function useDropdownContext() { + const context = inject(DropdownControl, null); + + if (context === null) { + throw new Error( + `Component is missing a parent component.` + ); + } + + return context; +} + +export function provideDropdownContext(context) { + provide(DropdownControl, context); +} diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue b/app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue index 8e99977dd..03e7a5e53 100644 --- a/app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue +++ b/app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue @@ -1,24 +1,23 @@ diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarGroup.vue b/app/javascript/dashboard/components-next/sidebar/SidebarGroup.vue index f7bc2362d..43856e574 100644 --- a/app/javascript/dashboard/components-next/sidebar/SidebarGroup.vue +++ b/app/javascript/dashboard/components-next/sidebar/SidebarGroup.vue @@ -101,7 +101,7 @@ const toggleTrigger = () => { :permissions="resolvePermissions(to)" :feature-flag="resolveFeatureFlag(to)" as="li" - class="text-sm cursor-pointer select-none gap-1 grid" + class="grid gap-1 text-sm cursor-pointer select-none" > {