Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for multiple header rows #328

Open
JonathanCoxLRS opened this issue Jun 19, 2023 · 3 comments
Open

Support for multiple header rows #328

JonathanCoxLRS opened this issue Jun 19, 2023 · 3 comments

Comments

@JonathanCoxLRS
Copy link

Hello,

Does cli-table3 support multiple header rows? For example:

image

If so, can you point me to some documentation for this?

Thanks!

@speedytwenty
Copy link
Collaborator

This is supported presently as it's merely a matter of adding a row at the beginning and optionally customizing the style.

This isn't well documented, so I'll leave this open as something that can be added to the docs.

For now, here is an example:

const Table = require('.');
const colors = require('@colors/colors');


const table = new Table({
  head: [{ content: 'Users', colSpan: 4, hAlign: 'center' }],
});
table.push(
  // Subhead row with custom style
  ['First', 'Last', 'Email',  'Phone'].map((content) => ({ content: colors.bold(content) })),
  ['Jane', 'Doe', 'Jane.Doe@example.com', '555-867-5309'],
  ['John', 'Doe', 'John.Doe@example.com', '555-867-5310'],
);
console.log(table.toString());

Outputs:

image

@speedytwenty
Copy link
Collaborator

speedytwenty commented Jun 19, 2023

The downside to the above example is that it requires adding @colors/colors as an additional dependency (to optionally use it to customize styles) which should therefore be a peerDependency.

It would be ideal if colors was exposed through the Table interface so that it could be used directly: Eg.

['First', 'Last', 'Email',  'Phone'].map((content) => ({ content: Table.colors.bold(content) })),

Note: This doesn't presently work. @colors/colors has to be added as a dependency and specifically included.

@JonathanCoxLRS
Copy link
Author

Gotcha. I'm already using chalk so I can use that for styles. This approach does seem to work for my use case, even though it's a bit clunky. table.push seems like it should only be for body rows. It'd be nice if this supported something like one of the following:

Perhaps table.body.push and table.head.push for managing body vs head rows.

Updating the constructor to allow specifying additional head rows at time of instantiation.

const table = new Table(
  {
    head: [
      { content: 'Users', colSpan: 4, hAlign: 'center' }, // row 1
      ['First', 'Last', 'Email', 'Phone'] // row 2
    ],
  }
);

Thanks for the help!

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

No branches or pull requests

2 participants