diff --git a/Gemfile b/Gemfile index 7f44af03d..0dac6e95f 100644 --- a/Gemfile +++ b/Gemfile @@ -69,7 +69,7 @@ gem 'webpacker' gem 'barnes' ##--- gems for authentication & authorization ---## -gem 'devise', '>= 4.9.3' +gem 'devise', '>= 4.9.4' gem 'devise-secure_password', git: 'https://github.com/chatwoot/devise-secure_password', branch: 'chatwoot' gem 'devise_token_auth' # authorization @@ -203,7 +203,7 @@ group :development do gem 'rack-mini-profiler', '>= 3.2.0', require: false gem 'stackprof' # Should install the associated chrome extension to view query logs - gem 'meta_request' + gem 'meta_request', '>= 0.8.0' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 0f1595a72..55021a04b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -149,7 +149,7 @@ GEM multi_json (~> 1) statsd-ruby (~> 1.1) base64 (0.1.1) - bcrypt (3.1.19) + bcrypt (3.1.20) bindex (0.8.1) blingfire (0.1.8) bootsnap (1.16.0) @@ -194,7 +194,7 @@ GEM irb (>= 1.5.0) reline (>= 0.3.1) declarative (0.0.20) - devise (4.9.3) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) @@ -366,7 +366,7 @@ GEM mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) @@ -452,17 +452,17 @@ GEM marcel (1.0.2) maxminddb (0.1.22) memoist (0.16.2) - meta_request (0.7.4) + meta_request (0.8.2) rack-contrib (>= 1.1, < 3) - railties (>= 3.0.0, < 7.1) + railties (>= 3.0.0, < 8) method_source (1.0.0) mime-types (3.4.1) mime-types-data (~> 3.2015) mime-types-data (3.2023.0218.1) mini_magick (4.12.0) mini_mime (1.1.5) - mini_portile2 (2.8.5) - minitest (5.21.2) + mini_portile2 (2.8.6) + minitest (5.22.3) mock_redis (0.36.0) ruby2_keywords msgpack (1.7.0) @@ -491,14 +491,14 @@ GEM newrelic_rpm (9.6.0) base64 nio4r (2.7.0) - nokogiri (1.16.2) + nokogiri (1.16.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.16.2-arm64-darwin) + nokogiri (1.16.4-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.2-x86_64-darwin) + nokogiri (1.16.4-x86_64-darwin) racc (~> 1.4) - nokogiri (1.16.2-x86_64-linux) + nokogiri (1.16.4-x86_64-linux) racc (~> 1.4) numo-narray (0.9.2.1) oauth (1.1.0) @@ -608,7 +608,7 @@ GEM thor (~> 1.0) zeitwerk (~> 2.5) rainbow (3.1.1) - rake (13.1.0) + rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) @@ -769,7 +769,7 @@ GEM stripe (8.5.0) telephone_number (1.4.20) test-prof (1.2.1) - thor (1.3.0) + thor (1.3.1) tilt (2.3.0) time_diff (0.3.0) activesupport @@ -828,7 +828,7 @@ GEM working_hours (1.4.1) activesupport (>= 3.2) tzinfo - zeitwerk (2.6.12) + zeitwerk (2.6.13) PLATFORMS arm64-darwin-20 @@ -867,7 +867,7 @@ DEPENDENCIES database_cleaner ddtrace debug (~> 1.8) - devise (>= 4.9.3) + devise (>= 4.9.4) devise-secure_password! devise_token_auth dotenv-rails @@ -905,7 +905,7 @@ DEPENDENCIES listen lograge (~> 0.14.0) maxminddb - meta_request + meta_request (>= 0.8.0) mock_redis neighbor net-smtp (~> 0.3.4) diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb index 4e967cfbb..46ecf19a7 100644 --- a/app/controllers/public/api/v1/portals/articles_controller.rb +++ b/app/controllers/public/api/v1/portals/articles_controller.rb @@ -7,7 +7,7 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B def index @articles = @portal.articles - @articles = @articles.search(list_params) if list_params.present? + search_articles order_by_sort_param @articles.page(list_params[:page]) if list_params[:page].present? end @@ -16,6 +16,10 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B private + def search_articles + @articles = @articles.search(list_params) if list_params.present? + end + def order_by_sort_param @articles = if list_params[:sort].present? && list_params[:sort] == 'views' @articles.order_by_views @@ -51,3 +55,5 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B ChatwootMarkdownRenderer.new(content).render_article end end + +Public::Api::V1::Portals::ArticlesController.prepend_mod_with('Public::Api::V1::Portals::ArticlesController') diff --git a/app/javascript/dashboard/api/slaReports.js b/app/javascript/dashboard/api/slaReports.js index 36a3a895c..fedc988b2 100644 --- a/app/javascript/dashboard/api/slaReports.js +++ b/app/javascript/dashboard/api/slaReports.js @@ -37,6 +37,7 @@ class SLAReportsAPI extends ApiClient { inbox_id, team_id, sla_policy_id, + label_list, } = {}) { return axios.get(`${this.url}/download`, { params: { @@ -45,6 +46,7 @@ class SLAReportsAPI extends ApiClient { assigned_agent_id, inbox_id, team_id, + label_list, sla_policy_id, }, }); diff --git a/app/javascript/dashboard/api/specs/slaReports.spec.js b/app/javascript/dashboard/api/specs/slaReports.spec.js index e69f527b2..f540b6acc 100644 --- a/app/javascript/dashboard/api/specs/slaReports.spec.js +++ b/app/javascript/dashboard/api/specs/slaReports.spec.js @@ -83,6 +83,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }); expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/applied_slas/download', @@ -94,6 +95,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }, } ); diff --git a/app/javascript/dashboard/assets/scss/_woot.scss b/app/javascript/dashboard/assets/scss/_woot.scss index 5728dd51b..06dabb7cb 100644 --- a/app/javascript/dashboard/assets/scss/_woot.scss +++ b/app/javascript/dashboard/assets/scss/_woot.scss @@ -40,3 +40,139 @@ .hide { @apply hidden; } + +@layer base { + :root { + --color-amber-100: 255 243 208; + --color-amber-200: 255 236 183; + --color-amber-25: 254 253 251; + --color-amber-300: 255 224 161; + --color-amber-400: 245 208 140; + --color-amber-50: 255 249 237; + --color-amber-500: 228 187 120; + --color-amber-600: 214 163 92; + --color-amber-700: 214 163 92; + --color-amber-800: 255 186 26; + --color-amber-900: 145 89 48; + --color-amber-950: 79 52 34; + + --color-ash-100: 235 235 239; + --color-ash-200: 228 228 233; + --color-ash-25: 252 252 253; + --color-ash-300: 221 221 227; + --color-ash-400: 211 212 219; + --color-ash-50: 249 249 251; + --color-ash-500: 185 187 198; + --color-ash-600: 139 141 152; + --color-ash-700: 126 128 138; + --color-ash-75: 242 242 245; + --color-ash-800: 96 100 108; + --color-ash-900: 28 32 36; + + --color-primary-100: 222 234 255; + --color-primary-200: 206 223 255; + --color-primary-25: 252 253 254; + --color-primary-300: 186 209 255; + --color-primary-400: 163 190 255; + --color-primary-50: 246 249 255; + --color-primary-500: 131 164 250; + --color-primary-600: 69 110 255; + --color-primary-700: 57 95 241; + --color-primary-75: 236 242 255; + --color-primary-800: 53 88 217; + --color-primary-900: 27 44 99; + + --color-ruby-100: 255 220 225; + --color-ruby-200: 255 206 214; + --color-ruby-25: 255 252 253; + --color-ruby-300: 248 191 200; + --color-ruby-400: 239 172 184; + --color-ruby-50: 255 247 248; + --color-ruby-500: 229 146 163; + --color-ruby-600: 229 70 102; + --color-ruby-700: 220 59 93; + --color-ruby-75: 254 234 237; + --color-ruby-800: 202 36 77; + --color-ruby-900: 100 23 43; + + --color-teal-100: 224 248 243; + --color-teal-200: 204 243 234; + --color-teal-25: 250 254 253; + --color-teal-300: 184 234 224; + --color-teal-400: 161 222 210; + --color-teal-50: 243 251 249; + --color-teal-500: 83 185 171; + --color-teal-600: 18 165 148; + --color-teal-700: 13 155 138; + --color-teal-75: 236 249 255; + --color-teal-800: 0 133 115; + --color-teal-900: 13 61 56; + } + // scss-lint:disable QualifyingElement + body.dark { + --color-amber-100: 57 39 15; + --color-amber-200: 67 46 18; + --color-amber-25: 31 19 0; + --color-amber-300: 83 57 22; + --color-amber-400: 111 77 29; + --color-amber-50: 37 24 4; + --color-amber-500: 169 118 42; + --color-amber-600: 169 118 42; + --color-amber-700: 255 203 71; + --color-amber-800: 255 204 77; + --color-amber-900: 255 231 179; + --color-amber-950: 255 231 179; + + --color-ash-100: 46 48 53; + --color-ash-200: 53 55 60; + --color-ash-25: 24 24 26; + --color-ash-300: 60 63 68; + --color-ash-400: 70 75 80; + --color-ash-50: 27 27 31; + --color-ash-500: 90 97 101; + --color-ash-600: 105 110 119; + --color-ash-700: 120 127 133; + --color-ash-75: 39 40 45; + --color-ash-800: 173 177 184; + --color-ash-900: 237 238 240; + + --color-primary-100: 24 43 109; + --color-primary-200: 31 53 129; + --color-primary-25: 11 16 31; + --color-primary-300: 40 64 146; + --color-primary-400: 48 76 168; + --color-primary-50: 16 23 41; + --color-primary-500: 57 89 196; + --color-primary-600: 69 110 255; + --color-primary-700: 58 96 240; + --color-primary-75: 20 34 81; + --color-primary-800: 140 177 255; + --color-primary-900: 210 225 255; + + --color-ruby-100: 78 19 37; + --color-ruby-200: 94 26 46; + --color-ruby-25: 25 17 19; + --color-ruby-300: 111 37 57; + --color-ruby-400: 136 52 71; + --color-ruby-50: 30 21 23; + --color-ruby-500: 179 68 90; + --color-ruby-600: 229 70 102; + --color-ruby-700: 236 90 114; + --color-ruby-75: 58 20 30; + --color-ruby-800: 255 148 157; + --color-ruby-900: 254 210 225; + + --color-teal-100: 2 59 55; + --color-teal-200: 8 72 67; + --color-teal-25: 13 21 20; + --color-teal-300: 28 105 97; + --color-teal-400: 28 105 97; + --color-teal-50: 17 28 27; + --color-teal-500: 32 126 115; + --color-teal-600: 41 163 131; + --color-teal-700: 14 179 158; + --color-teal-75: 13 45 42; + --color-teal-800: 11 216 182; + --color-teal-900: 173 240 221; + } +} diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js index 3ea6d39bf..f450bd7a7 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js @@ -142,20 +142,13 @@ const settings = accountId => ({ toStateName: 'settings_applications', featureFlag: FEATURE_FLAGS.INTEGRATIONS, }, - { - icon: 'credit-card-person', - label: 'BILLING', - hasSubMenu: false, - toState: frontendURL(`accounts/${accountId}/settings/billing`), - toStateName: 'billing_settings_index', - showOnlyOnCloud: true, - }, { icon: 'key', label: 'AUDIT_LOGS', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/audit-log/list`), toStateName: 'auditlogs_list', + isEnterpriseOnly: true, featureFlag: FEATURE_FLAGS.AUDIT_LOGS, beta: true, }, @@ -165,9 +158,18 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/sla/list`), toStateName: 'sla_list', + isEnterpriseOnly: true, featureFlag: FEATURE_FLAGS.SLA, beta: true, }, + { + icon: 'credit-card-person', + label: 'BILLING', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/settings/billing`), + toStateName: 'billing_settings_index', + showOnlyOnCloud: true, + }, ], }); diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue index 05f6ebfe1..a7009523a 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue @@ -2,7 +2,7 @@
  • {{ $t(`SIDEBAR.${menuItem.label}`) }} @@ -19,7 +19,7 @@
    @@ -31,7 +31,7 @@ {{ $t(`SIDEBAR.${menuItem.label}`) }} {{ $t('SIDEBAR.BETA') }} -