Skip to content

Feature/#871 - Markdown Renderer#892

Open
aaryaparadkar wants to merge 3 commits into
EXXETA:mainfrom
aaryaparadkar:feature/#871-request-and-collection-description
Open

Feature/#871 - Markdown Renderer#892
aaryaparadkar wants to merge 3 commits into
EXXETA:mainfrom
aaryaparadkar:feature/#871-request-and-collection-description

Conversation

@aaryaparadkar

@aaryaparadkar aaryaparadkar commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Changes

For #871. Since, quite a few files have been touched, outlining all the files and what has been done in them as follows,

Backend / Core

  • src/main/environment/service/environment-service.ts - listCollections() now returns the description for each collection.
  • src/main/event/main-event-service.ts - Added IPC handlers for saveRequestInfo() and saveCollection().
  • src/main/import/service/openapi-importer.ts - Imports descriptions from OpenAPI specifications.
  • src/main/import/service/postman-importer.ts - Imports descriptions from Postman collections, including support for description objects.
  • src/main/persistence/service/info-files/v2-4-0.ts - Added an optional description field to the info-file schema.
  • src/main/persistence/service/persistence-service.ts - Added saveRequestInfo() for metadata-only persistence.
  • src/shim/event-service.ts - Added typed methods for request metadata and collection saving.
  • src/shim/objects/collection.ts, folder.ts, request.ts - Added optional description fields.

Frontend

  • src/renderer/components/mainWindow/bodyTabs/InputTabs/InputTabs.tsx - Added a Description tab.
  • src/renderer/components/sidebar/CollectionDropdown.tsx - Collection descriptions are now shown as tooltips.
  • src/renderer/components/sidebar/CollectionSettings.tsx - Added collection description editing with live Markdown preview.
  • src/renderer/components/sidebar/SidebarRequestList/Nav/Dropdown/modals/NamingModal.tsx - Added folder description support for create and rename actions.
  • src/renderer/components/ui/tabs.tsx - Improved tab styling and horizontal scrolling to accommodate the new tab.
  • src/renderer/services/event/renderer-event-service.ts - Added renderer-side proxies for the new IPC methods.
  • src/renderer/state/collectionStore.ts - Added actions for folder and collection metadata management.
  • src/renderer/state/interface/CollectionStateActions.ts - Extended the collection state action interface.
  • src/renderer/styles/index.css - Added subtle horizontal scrollbar styling for tabs.

New Files

  • src/renderer/components/mainWindow/bodyTabs/InputTabs/tabs/DescriptionTab.tsx - New request description editor with live Markdown preview.
  • src/renderer/components/shared/MarkdownPreview.tsx - Reusable Markdown preview component.
  • src/renderer/lib/markdown/render-markdown/ - In-repository Markdown rendering implementation.

Testing

Have added the markdown input fields and renderer's at the following touchpoints.

  1. For Collection,
image Live markdown renderer, that shows the markdown while typing. This has been added under the Settings dialog of the collection
  1. For Folder,
image This has been added under the Rename Folder dialog.
  1. For Request,
image This has been provisioned in a tab, next to the Auth and the Scripts tab,

Checklist

  • Issue has been linked to this PR
  • Code has been reviewed by person creating the PR
  • Automated tests have been written, if possible
  • Manual testing has been performed
  • Documentation has been updated, if necessary
  • Changes have been reviewed by second person

Comment thread src/renderer/lib/markdown/render-markdown.ts
Comment thread src/renderer/styles/index.css Outdated
Comment on lines +242 to +259
.tabs-list-scrollbar {
scrollbar-width: thin;
scrollbar-color: color-mix(in srgb, var(--disabled) 60%, transparent) transparent;
}
.tabs-list-scrollbar::-webkit-scrollbar {
height: 3px;
}
.tabs-list-scrollbar::-webkit-scrollbar-track {
background: transparent;
}
.tabs-list-scrollbar::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--disabled) 55%, transparent);
border-radius: 999px;
}
.tabs-list-scrollbar::-webkit-scrollbar-thumb:hover {
background: color-mix(in srgb, var(--disabled) 75%, transparent);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

we work with tailwind CSS. Is this custom CSS really needed?

Comment thread src/shim/event-service.ts
Comment thread src/renderer/state/collectionStore.ts Outdated
...updates,
variables: useVariableStore.getState().variables,
environments: useEnvironmentStore.getState().environments,
} as Collection;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

why is the cast needed? This kills type checking. A correctly assembled type should be no issue to be used directly on const collection : Collection = ...

Comment thread src/renderer/state/collectionStore.ts Outdated
await eventService.saveCollection(collection);

set((state) => {
if (state.collection) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

always true

Comment thread src/renderer/state/collectionStore.ts Outdated

updateCollection: async (updates: Partial<Pick<Collection, 'description'>>) => {
const current = get().collection;
if (!current) return;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

always false

Comment thread src/renderer/state/collectionStore.ts Outdated
Comment on lines +422 to +423
const folder = selectFolder(get(), id)!;
if (folder == null) return;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

you do a non-null assertion and check on null in next line. Choose either

Comment on lines +152 to +159
<textarea
value={description}
onChange={handleDescriptionChange}
onBlur={handleSaveDescription}
placeholder="Describe the purpose of this collection..."
rows={3}
className="w-full resize-y rounded border bg-muted/30 p-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"
/>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

do not use raw HTML elements. We use shadcn in this project: https://ui.shadcn.com/docs/components/radix/textarea

@aaryaparadkar aaryaparadkar force-pushed the feature/#871-request-and-collection-description branch from ffc9285 to 9a1cd92 Compare June 30, 2026 03:28
@aaryaparadkar

Copy link
Copy Markdown
Contributor Author

@SoulKa have amended everything as per the suggested changes and the new changes in the main branch.

@aaryaparadkar

Copy link
Copy Markdown
Contributor Author

@SoulKa did you have a chance to look at this?

@SoulKa

SoulKa commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

@aaryaparadkar not yet. I do this in my free time next to a job and family. This is quite a large PR, we probably should've split the implementation into backend PR and frontend PR.

@aaryaparadkar

Copy link
Copy Markdown
Contributor Author

@aaryaparadkar not yet. I do this in my free time next to a job and family. This is quite a large PR, we probably should've split the implementation into backend PR and frontend PR.

Ah yes, got it. No worries. Would appreciate feedback anytime you are free, cheers.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants