Skip to content

feat: split conditions and rules into separate tabs, refactor schema component#1121

Merged
asyncapi-bot merged 63 commits intoasyncapi:masterfrom
catosaurusrex2003:refactor-messages
Mar 16, 2026
Merged

feat: split conditions and rules into separate tabs, refactor schema component#1121
asyncapi-bot merged 63 commits intoasyncapi:masterfrom
catosaurusrex2003:refactor-messages

Conversation

@catosaurusrex2003
Copy link
Copy Markdown
Collaborator

@catosaurusrex2003 catosaurusrex2003 commented Jan 11, 2025

The problem

The current schema UI assumes a deep understanding of the AsyncAPI specification, making it difficult for many users to interpret. Since schemas can be recursive and heavily nested with various properties, the complexity often becomes overwhelming and unintuitive.

The solution

This PR introduces a new UI structure that splits schema properties into two logical sections: Rules and Conditions, making the documentation easier to understand and navigate.

Reference: AsyncAPI Schema Object (v3.0.0)

The properties which come under the Rules section are:
format, pattern, constraints, contentEncoding, enum, default, const

The properties which come under the Conditions section are:
oneOf, anyOf, allOf, not, propertyNames, contains, if, then, else, dependentSchemas

All other properties remain in their original positions.

A tabbed interface now allows users to toggle between Rules and Conditions. This design reduces visual clutter and helps users digest smaller, relevant portions of the schema at a time.

Visual Comparison

Old schema UI 👇
image

New implementation - Rules tab 👇
image

New implementation - Conditions tab 👇
image

New implementation - Conditions tab and expand all 👇
image

Alternative approaches explored
We initially considered a sidebar-based layout as demonstrated here that separated Rules and Conditions spatially. However, it introduced several issues:.

  • Significant empty space when one section had more items than the other.

Without sidebar 👇 :
image

With sidebar 👇 : (you can notice how the empty spaces in red which is very unoptimal)
image

  • Reduced horizontal space for nested schemas
  • Poor responsiveness on smaller screens

After discussions with @AceTheCreator we opted for the tabbed layout, which offers better responsiveness, clarity, and overall user experience.

Other changes

  • The existing library/src/components/Schema.tsx has been refactored into smaller, modular components under a new library/src/components/Schema/ directory for better maintainability and readability.

  • Updated the way constraints are displayed: ranges like [0..1000] are now represented in a more intuitive format as 1 <= value <= 1000 for better readability.

  • Updated the start and build:styles:dev script to include all the available tailwind styles during development. This ensures that when you add a new Tailwind class (even one not yet used anywhere else in the project), you don’t need to rebuild the styles manually. The new styles are already available in default.min.css, so changes take effect instantly through hot reloading — speeding up the development workflow.

Source/Inspiration

#618
https://www.asmitbm.me/projects/asyncapi-docsux

This PR is part of https://github.com/orgs/asyncapi/discussions/1361#discussioncomment-10811342

@catosaurusrex2003 catosaurusrex2003 marked this pull request as ready for review February 25, 2025 11:47
@github-actions github-actions Bot removed the stale label Oct 1, 2025
Copy link
Copy Markdown
Member

@AceTheCreator AceTheCreator left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@catosaurusrex2003 I left some review :) Let's get this PR merged.

Comment thread library/src/containers/Operations/Operation.tsx Outdated
Comment thread library/src/containers/Operations/Operation.tsx Outdated
Comment thread library/src/components/Schema/Schema.tsx Outdated
Comment thread library/src/helpers/schema.ts Outdated
Comment thread library/src/helpers/schema.ts Outdated
Comment thread library/src/components/Schema/Schema.tsx
Comment thread library/src/components/Schema/Conditions/Conditions.tsx Outdated
Comment thread library/src/components/Schema/FeildStatusIndicators.tsx Outdated
Comment thread library/src/components/Schema/FieldStatusIndicators.tsx Outdated
Comment thread library/src/components/__tests__/Schema.test.tsx
Copy link
Copy Markdown
Member

@AceTheCreator AceTheCreator left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that'll be all from my end... I'm happy to chat about how best to represent these rules constraints especially in number types 😄

Comment thread library/src/helpers/__tests__/schema.test.ts
Comment thread library/src/components/__tests__/Schema.test.tsx
@AceTheCreator
Copy link
Copy Markdown
Member

Hey @catosaurusrex2003 do you wanna look at the issues introduced by this PR from SonarCloud before we merge this PR? https://sonarcloud.io/project/issues?id=asyncapi_asyncapi-react&pullRequest=1121&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true

@catosaurusrex2003
Copy link
Copy Markdown
Collaborator Author

yeah ill fix these too 👍

@sonarqubecloud
Copy link
Copy Markdown

@catosaurusrex2003
Copy link
Copy Markdown
Collaborator Author

@AceTheCreator done

Copy link
Copy Markdown
Member

@AceTheCreator AceTheCreator left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! 🚀

Good job @catosaurusrex2003 🙌🏾

@AceTheCreator
Copy link
Copy Markdown
Member

/rtm

@asyncapi-bot asyncapi-bot merged commit 6df48a2 into asyncapi:master Mar 16, 2026
11 checks passed
@asyncapi-bot
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants