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

[TableCell] Add "scope" attribute for th #10277

Merged
merged 3 commits into from Feb 14, 2018
Merged

[TableCell] Add "scope" attribute for th #10277

merged 3 commits into from Feb 14, 2018

Conversation

dmythro
Copy link

@dmythro dmythro commented Feb 13, 2018

Fixes #10269.

@oliviertassinari oliviertassinari self-assigned this Feb 13, 2018
@oliviertassinari oliviertassinari added new feature New feature or request component: table This is the name of the generic UI component, not the React module! labels Feb 13, 2018
@oliviertassinari
Copy link
Member

@Z-AX I had fixed the TypeScript build. Let me know if the pull-request still address your need.

@@ -72,14 +72,18 @@ function TableCell(props, context) {
Component = table && table.head ? 'th' : 'td';
}

const isTypeHead = variant ? variant === 'head' : table && table.head;
let scope = scopeProp;
if (!scope && table && table.head) {
Copy link
Author

Choose a reason for hiding this comment

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

Don't think it is correct. Should work for variant === 'head' if set, that's why I had a constant for the same check as for classes.typeHead className.

Copy link
Author

Choose a reason for hiding this comment

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

That's why you actually had to modify the test as well, but that test was to actually check that head table cells have the scope.

Copy link
Author

@dmythro dmythro Feb 14, 2018

Choose a reason for hiding this comment

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

Looking now I'd say it should look like this:

let scope = scopeProp;
if (!scope && (variant ? variant === 'head' : table && table.head)) {
  scope = 'col';
}

If variant is specified follow it's preference, otherwise check if table.head.

Copy link
Member

Choose a reason for hiding this comment

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

variant="head" is purely UI specific, it won't change the DOM structure with the th vs td elements. For instance, I'm using td + variant="head" in some cases. So I disagree. I think that it's taking too much assumption.

capture d ecran 2018-02-14 a 13 52 07

Copy link
Author

Choose a reason for hiding this comment

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

Yeah, makes sense to me now.

So, am I correct that table && table.head will fire for structure like this and wii render table / thead / tr / th (scope="col") Some TH Text?

      <TableHead>
        <TableRow>
          <TableCell>
            Some TH Text
          </TableCell>
        </TableRow>
      </TableHead>

Copy link
Member

Choose a reason for hiding this comment

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

Yes, it should.

Copy link
Author

Choose a reason for hiding this comment

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

Then I don’t have anything else, let’s merge it :)

@@ -112,7 +111,7 @@ describe('<TableCell />', () => {
wrapper.setContext({ table: { footer: true } });
wrapper.setProps({ variant: 'head' });
assert.strictEqual(wrapper.hasClass(classes.typeHead), true);
assert.strictEqual(wrapper.props().scope, 'col', 'should have the correct scope attribute');
assert.strictEqual(wrapper.props().scope, undefined, 'should have the correct scope attribute');
Copy link
Author

Choose a reason for hiding this comment

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

The props().scope should be 'col' for <TableCell variant="head" />.

wrapper.setContext({ table: { head: true } });
wrapper.setProps({ scope: 'row' });
Copy link
Author

Choose a reason for hiding this comment

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

That is a weird refactoring :) I was actually trying to follow code styles as you have in this file as well (like wrapper.setProps({ variant: 'head' }); below).

Copy link
Member

Choose a reason for hiding this comment

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

Oh, good catch with the wrapper.setProps({ variant: 'head' }); below. We try not to follow this pattern with the other tests.

@oliviertassinari oliviertassinari changed the title [TableCell] No "scope" attribute added for type "head" [TableCell] Add "scope" attribute for th Feb 14, 2018
@oliviertassinari oliviertassinari merged commit 121f64a into mui:v1-beta Feb 14, 2018
@oliviertassinari oliviertassinari added accessibility a11y and removed new feature New feature or request labels Feb 14, 2018
@oliviertassinari
Copy link
Member

@Z-AX It's a great first pull request 👌🏻. Thank you for giving it a shot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accessibility a11y component: table This is the name of the generic UI component, not the React module!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants