diff --git a/Gemfile b/Gemfile index a6679f069..8a54e1751 100644 --- a/Gemfile +++ b/Gemfile @@ -76,6 +76,7 @@ gem 'pundit' # super admin gem 'administrate', '>= 0.19.0' gem 'administrate-field-active_storage' +gem 'administrate-field-belongs_to_search' ##--- gems for pubsub service ---## # https://karolgalanciak.com/blog/2019/11/30/from-activerecord-callbacks-to-publish-slash-subscribe-pattern-and-event-driven-design/ diff --git a/Gemfile.lock b/Gemfile.lock index bf109b551..264f65389 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -116,6 +116,11 @@ GEM administrate-field-active_storage (0.4.2) administrate (>= 0.2.2) rails (>= 7.0) + administrate-field-belongs_to_search (0.8.0) + administrate (>= 0.3, < 1.0) + jbuilder (~> 2) + rails (>= 4.2, < 7.1) + selectize-rails (~> 0.6) annotate (3.2.0) activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) @@ -831,6 +836,7 @@ DEPENDENCIES acts-as-taggable-on administrate (>= 0.19.0) administrate-field-active_storage + administrate-field-belongs_to_search annotate attr_extras audited (~> 5.3) diff --git a/VERSION_CW b/VERSION_CW index d76bd2ba3..fd2a01863 100644 --- a/VERSION_CW +++ b/VERSION_CW @@ -1 +1 @@ -2.17.0 +3.1.0 diff --git a/VERSION_CWCTL b/VERSION_CWCTL index 276cbf9e2..197c4d5c2 100644 --- a/VERSION_CWCTL +++ b/VERSION_CWCTL @@ -1 +1 @@ -2.3.0 +2.4.0 diff --git a/app/assets/stylesheets/administrate/utilities/_variables.scss b/app/assets/stylesheets/administrate/utilities/_variables.scss index db8d1a302..818f96e4c 100644 --- a/app/assets/stylesheets/administrate/utilities/_variables.scss +++ b/app/assets/stylesheets/administrate/utilities/_variables.scss @@ -78,11 +78,6 @@ $conv-header-height: 4rem; $inbox-thumb-size: 4.8rem; -// Spinner -$spinkit-spinner-color: $color-white !default; -$spinkit-spinner-margin: 0 0 0 1.6rem !default; -$spinkit-size: 1.6rem !default; - // Snackbar default $woot-snackbar-bg: #323232; $woot-snackbar-button: #ffeb3b; diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index d75dc71b5..bec00be96 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -25,7 +25,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController render json: { error: 'Specify search string with parameter q' }, status: :unprocessable_entity if params[:q].blank? && return contacts = resolved_contacts.where( - 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search', + 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search + OR contacts.additional_attributes->>\'company_name\' ILIKE :search', search: "%#{params[:q].strip}%" ) @contacts_count = contacts.count diff --git a/app/controllers/api/v1/upload_controller.rb b/app/controllers/api/v1/accounts/upload_controller.rb similarity index 82% rename from app/controllers/api/v1/upload_controller.rb rename to app/controllers/api/v1/accounts/upload_controller.rb index ad6b0b96c..4c54938b7 100644 --- a/app/controllers/api/v1/upload_controller.rb +++ b/app/controllers/api/v1/accounts/upload_controller.rb @@ -1,4 +1,4 @@ -class Api::V1::UploadController < Api::BaseController +class Api::V1::Accounts::UploadController < Api::V1::Accounts::BaseController def create file_blob = ActiveStorage::Blob.create_and_upload!( key: nil, diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb index aba385c83..bc5f6c0fd 100644 --- a/app/controllers/public/api/v1/portals/articles_controller.rb +++ b/app/controllers/public/api/v1/portals/articles_controller.rb @@ -44,7 +44,7 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B end def list_params - params.permit(:query, :locale, :sort) + params.permit(:query, :locale, :sort, :status) end def permitted_params diff --git a/app/controllers/super_admin/instance_statuses_controller.rb b/app/controllers/super_admin/instance_statuses_controller.rb index 7f43e63ca..a1dc458ae 100644 --- a/app/controllers/super_admin/instance_statuses_controller.rb +++ b/app/controllers/super_admin/instance_statuses_controller.rb @@ -6,6 +6,7 @@ class SuperAdmin::InstanceStatusesController < SuperAdmin::ApplicationController postgres_status redis_metrics chatwoot_edition + instance_meta end def chatwoot_edition @@ -18,6 +19,10 @@ class SuperAdmin::InstanceStatusesController < SuperAdmin::ApplicationController end end + def instance_meta + @metrics['Database Migrations'] = ActiveRecord::Base.connection.migration_context.needs_migration? ? 'pending' : 'completed' + end + def chatwoot_version @metrics['Chatwoot version'] = Chatwoot.config[:version] end diff --git a/app/dashboards/account_dashboard.rb b/app/dashboards/account_dashboard.rb index fea975c0a..de6ab42bb 100644 --- a/app/dashboards/account_dashboard.rb +++ b/app/dashboards/account_dashboard.rb @@ -18,8 +18,8 @@ class AccountDashboard < Administrate::BaseDashboard end ATTRIBUTE_TYPES = { - id: Field::Number, - name: Field::String, + id: Field::Number.with_options(searchable: true), + name: Field::String.with_options(searchable: true), created_at: Field::DateTime, updated_at: Field::DateTime, users: CountField, diff --git a/app/dashboards/account_user_dashboard.rb b/app/dashboards/account_user_dashboard.rb index d757f4da5..9e8b2c48b 100644 --- a/app/dashboards/account_user_dashboard.rb +++ b/app/dashboards/account_user_dashboard.rb @@ -8,9 +8,9 @@ class AccountUserDashboard < Administrate::BaseDashboard # which determines how the attribute is displayed # on pages throughout the dashboard. ATTRIBUTE_TYPES = { - account: Field::BelongsTo.with_options(searchable: true, searchable_field: 'name', order: 'id DESC'), - user: Field::BelongsTo.with_options(searchable: true, searchable_field: 'name', order: 'id DESC'), - inviter: Field::BelongsTo.with_options(class_name: 'User', searchable: true, searchable_field: 'name'), + account: Field::BelongsToSearch.with_options(class_name: 'Account', searchable: true, searchable_field: [:name, :id], order: 'id DESC'), + user: Field::BelongsToSearch.with_options(class_name: 'User', searchable: true, searchable_field: [:name, :email, :id], order: 'id DESC'), + inviter: Field::BelongsToSearch.with_options(class_name: 'User', searchable: true, searchable_field: [:name, :email, :id], order: 'id DESC'), id: Field::Number, role: Field::Select.with_options(collection: AccountUser.roles.keys), created_at: Field::DateTime, diff --git a/app/dashboards/user_dashboard.rb b/app/dashboards/user_dashboard.rb index 9573d8447..e00d06a72 100644 --- a/app/dashboards/user_dashboard.rb +++ b/app/dashboards/user_dashboard.rb @@ -9,7 +9,7 @@ class UserDashboard < Administrate::BaseDashboard # on pages throughout the dashboard. ATTRIBUTE_TYPES = { account_users: Field::HasMany, - id: Field::Number, + id: Field::Number.with_options(searchable: true), avatar_url: AvatarField, avatar: Field::ActiveStorage.with_options( destroy_url: proc do |_namespace, _resource, attachment| @@ -28,9 +28,9 @@ class UserDashboard < Administrate::BaseDashboard confirmed_at: Field::DateTime, confirmation_sent_at: Field::DateTime, unconfirmed_email: Field::String, - name: Field::String, + name: Field::String.with_options(searchable: true), display_name: Field::String, - email: Field::String, + email: Field::String.with_options(searchable: true), tokens: Field::String.with_options(searchable: false), created_at: Field::DateTime, updated_at: Field::DateTime, diff --git a/app/javascript/dashboard/App.vue b/app/javascript/dashboard/App.vue index b115f17b5..649d56d15 100644 --- a/app/javascript/dashboard/App.vue +++ b/app/javascript/dashboard/App.vue @@ -26,14 +26,14 @@