Initial commit: Add logistics and order_detail message types
Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled

- Add Logistics component with progress tracking
- Add OrderDetail component for order information
- Support data-driven steps and actions
- Add blue color scale to widget SCSS
- Fix node overflow and progress bar rendering issues
- Add English translations for dashboard components

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Liang XJ
2026-01-26 11:16:56 +08:00
commit 092fb2e083
7646 changed files with 975643 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1,6 @@
json.id @inbox_limit.id
json.inbox_id @inbox_limit.inbox_id
json.agent_capacity_policy_id @inbox_limit.agent_capacity_policy_id
json.conversation_limit @inbox_limit.conversation_limit
json.created_at @inbox_limit.created_at.to_i
json.updated_at @inbox_limit.updated_at.to_i

View File

@@ -0,0 +1,7 @@
json.id @inbox_limit.id
json.inbox_id @inbox_limit.inbox_id
json.inbox_name @inbox_limit.inbox.name
json.agent_capacity_policy_id @agent_capacity_policy.id
json.conversation_limit @inbox_limit.conversation_limit
json.created_at @inbox_limit.created_at.to_i
json.updated_at @inbox_limit.updated_at.to_i

View File

@@ -0,0 +1,4 @@
json.array! @agent_capacity_policies do |policy|
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: policy
end

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/user', resource: @user

View File

@@ -0,0 +1,3 @@
json.array! @users do |user|
json.partial! 'api/v1/models/user', resource: user
end

View File

@@ -0,0 +1,26 @@
<% headers = [
I18n.t('reports.sla_csv.conversation_id'),
I18n.t('reports.sla_csv.sla_policy_breached'),
I18n.t('reports.sla_csv.assignee'),
I18n.t('reports.sla_csv.team'),
I18n.t('reports.sla_csv.inbox'),
I18n.t('reports.sla_csv.labels'),
I18n.t('reports.sla_csv.conversation_link'),
I18n.t('reports.sla_csv.breached_events')
] %>
<%= CSV.generate_line headers %>
<% @missed_applied_slas.each do |sla| %>
<% missed_events = sla.sla_events.map(&:event_type).join(', ') %>
<% conversation = sla.conversation %>
<%= CSV.generate_line([
conversation.display_id,
sla.sla_policy.name,
conversation.assignee&.name,
conversation.team&.name,
conversation.inbox&.name,
conversation.cached_label_list,
app_account_conversation_url(account_id: conversation.account_id, id: conversation.display_id),
missed_events
]) %>
<% end %>

View File

@@ -0,0 +1,22 @@
json.payload do
json.array! @applied_slas do |applied_sla|
json.applied_sla applied_sla.push_event_data
json.conversation do
conversation = applied_sla.conversation
json.id conversation.display_id
json.contact do
json.name conversation.contact.name if conversation.contact
end
json.labels conversation.cached_label_list
json.assignee conversation.assignee.push_event_data if conversation.assignee
end
json.sla_events applied_sla.sla_events do |sla_event|
json.partial! 'api/v1/models/sla_event', formats: [:json], sla_event: sla_event
end
end
end
json.meta do
json.count @count
json.current_page @current_page
end

View File

@@ -0,0 +1,3 @@
json.total_applied_slas @total_applied_slas
json.number_of_sla_misses @number_of_sla_misses
json.hit_rate @hit_rate

View File

@@ -0,0 +1,24 @@
json.per_page @per_page
json.total_entries @total_entries
json.current_page @current_page
json.audit_logs do
json.array! @audit_logs do |audit_log|
json.id audit_log.id
json.auditable_id audit_log.auditable_id
json.auditable_type audit_log.auditable_type
json.auditable audit_log.auditable.try(:push_event_data)
json.associated_id audit_log.associated_id
json.associated_type audit_log.associated_type
json.user_id audit_log.user_id
json.user_type audit_log.user_type
json.username audit_log.username
json.action audit_log.action
json.audited_changes audit_log.audited_changes
json.version audit_log.version
json.comment audit_log.comment
json.request_uuid audit_log.request_uuid
json.created_at audit_log.created_at.to_i
json.remote_address audit_log.remote_address
end
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant_response', formats: [:json], resource: @response

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @responses do |response|
json.partial! 'api/v1/models/captain/assistant_response', formats: [:json], resource: response
end
end
json.meta do
json.total_count @responses_count
json.page @current_page
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant_response', formats: [:json], resource: @response

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant_response', formats: [:json], resource: @response

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant', formats: [:json], resource: @assistant

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @assistants do |assistant|
json.partial! 'api/v1/models/captain/assistant', formats: [:json], resource: assistant
end
end
json.meta do
json.total_count @assistants.count
json.page 1 # Pagination not yet support at the moment, structure is reserved for future use
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant', formats: [:json], resource: @assistant

View File

@@ -0,0 +1,6 @@
json.array! @tools do |tool|
json.id tool[:id]
json.title tool[:title]
json.description tool[:description]
json.icon tool[:icon]
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/assistant', formats: [:json], resource: @assistant

View File

@@ -0,0 +1,3 @@
json.array! @responses do |response|
json.partial! 'api/v1/models/captain/assistant_response', formats: [:json], resource: response
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/copilot_message', formats: [:json], resource: @copilot_message

View File

@@ -0,0 +1,5 @@
json.payload do
json.array! @copilot_messages do |message|
json.partial! 'api/v1/models/captain/copilot_message', formats: [:json], resource: message
end
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/copilot_thread', formats: [:json], resource: @copilot_thread

View File

@@ -0,0 +1,5 @@
json.payload do
json.array! @copilot_threads do |thread|
json.partial! 'api/v1/models/captain/copilot_thread', resource: thread
end
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/custom_tool', custom_tool: @custom_tool

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @custom_tools do |custom_tool|
json.partial! 'api/v1/models/captain/custom_tool', custom_tool: custom_tool
end
end
json.meta do
json.total_count @custom_tools.count
json.page 1
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/custom_tool', custom_tool: @custom_tool

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/custom_tool', custom_tool: @custom_tool

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/document', formats: [:json], resource: @document

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @documents do |document|
json.partial! 'api/v1/models/captain/document', formats: [:json], resource: document
end
end
json.meta do
json.total_count @documents_count
json.page @current_page
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/document', formats: [:json], resource: @document

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/inbox', formats: [:json], resource: @captain_inbox.inbox

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @inboxes do |inbox|
json.partial! 'api/v1/models/inbox', formats: [:json], resource: inbox
end
end
json.meta do
json.total_count @inboxes.count
json.page 1
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/scenario', scenario: @scenario

View File

@@ -0,0 +1,10 @@
json.payload do
json.array! @scenarios do |scenario|
json.partial! 'api/v1/models/captain/scenario', scenario: scenario
end
end
json.meta do
json.total_count @scenarios.count
json.page 1
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/scenario', scenario: @scenario

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/captain/scenario', scenario: @scenario

View File

@@ -0,0 +1,8 @@
json.id company.id
json.name company.name
json.contacts_count company.contacts_count
json.domain company.domain
json.description company.description
json.avatar_url company.avatar_url
json.created_at company.created_at
json.updated_at company.updated_at

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'company', company: @company
end

View File

@@ -0,0 +1,10 @@
json.meta do
json.total_count @companies_count
json.page @current_page
end
json.payload do
json.array! @companies do |company|
json.partial! 'company', company: company
end
end

View File

@@ -0,0 +1,10 @@
json.meta do
json.total_count @companies_count
json.page @current_page
end
json.payload do
json.array! @companies do |company|
json.partial! 'company', company: company
end
end

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'company', company: @company
end

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'company', company: @company
end

View File

@@ -0,0 +1,3 @@
json.array! @reporting_events do |reporting_event|
json.partial! 'api/v1/models/reporting_event', formats: [:json], reporting_event: reporting_event
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/custom_role', formats: [:json], custom_role: @custom_role

View File

@@ -0,0 +1,3 @@
json.array! @custom_roles do |custom_role|
json.partial! 'api/v1/models/custom_role', formats: [:json], custom_role: custom_role
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/custom_role', formats: [:json], custom_role: @custom_role

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/custom_role', formats: [:json], custom_role: @custom_role

View File

@@ -0,0 +1,11 @@
json.payload do
json.array! @reporting_events do |reporting_event|
json.partial! 'api/v1/models/reporting_event', formats: [:json], reporting_event: reporting_event
end
end
json.meta do
json.count @total_count
json.current_page @current_page
json.total_pages @reporting_events.total_pages
end

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/account_saml_settings', account_saml_settings: @saml_settings

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/account_saml_settings', account_saml_settings: @saml_settings

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/account_saml_settings', account_saml_settings: @saml_settings

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'api/v1/models/sla_policy', formats: [:json], sla_policy: @sla_policy
end

View File

@@ -0,0 +1,5 @@
json.payload do
json.array! @sla_policies do |sla_policy|
json.partial! 'api/v1/models/sla_policy', formats: [:json], sla_policy: sla_policy
end
end

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'api/v1/models/sla_policy', formats: [:json], sla_policy: @sla_policy
end

View File

@@ -0,0 +1,3 @@
json.payload do
json.partial! 'api/v1/models/sla_policy', formats: [:json], sla_policy: @sla_policy
end