-
Notifications
You must be signed in to change notification settings - Fork 26
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
feat(a11y-table): Define a standalone table component #1634
base: master
Are you sure you want to change the base?
Conversation
596aec9
to
972eb6a
Compare
canvastablecontainer { | ||
opacity: 0; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be better to instead get rid of anything canvas related in the code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Remove this.canv and the canvas element from canvastable
src/app/app.component.scss
Outdated
@@ -68,3 +72,10 @@ | |||
width: 150px; | |||
} | |||
|
|||
.text-primary { | |||
color: #01579b; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move to a css property
Initial thoughts
|
src/app/app.component.ts
Outdated
async enrichRows() { | ||
const { start, end } = this.renderedRange | ||
|
||
this.rows = await Promise.all(mapOverIndexes(async (value) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This might cause a race condition. When renderedRange changes twice; it might happen that the first range change resolves later than the second range change.
- Find a way to merge resolved arrays in a way that will keep the latest and not overwrite fetched rows
7c02014
to
62b6d40
Compare
@@ -0,0 +1,13 @@ | |||
<cdk-virtual-scroll-viewport [itemSize]="firstRowHeight" class="email-viewport"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Rename to virtual-scroll-table.component
import { debounceTime } from 'rxjs/operators'; | ||
|
||
@Component({ | ||
selector: 'app-accessible-table', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Rename to
app-virtual-scroll-table
src/app/app.component.html
Outdated
<td class="checkbox-cell"> | ||
<mat-checkbox | ||
(click)="onCheckboxClick($event, item, index)" | ||
[checked]="rowsSelectionModel.isSelected(item)" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Remove event listener from the skeleton version of a row.
src/app/app.component.html
Outdated
(sortToggled)="updateSearch(true)"> | ||
</canvastablecontainer> | ||
|
||
<app-accessible-table |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@castaway , at some point I think it makes sense to move this table definition into its own component.
I believe that time to be when we want to re-use this table in other places either because we want to have better routing for folders or for some other reason that requires re-use.
src/app/app.component.scss
Outdated
|
||
} | ||
|
||
.skeleton-bone { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move skeleton styles to global styles.
src/app/human-bytes.pipe.ts
Outdated
|
||
const result = (value / Math.pow(base, exponent)).toFixed(decimalPlaces); | ||
return `${parseFloat(result)} ${suffixes[exponent]}`; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It appears we have a function in src/app/messagetable/messagetablerow.ts
. The converting of a number that represents the amount of bytes to a human readable format is not specific to messagetable.
- Make a human-readable utility module and use that here and in the messagetablerow.ts.
const selection = (this.selectionModel.isMultipleSelection() ? items : [items]) as T[]; | ||
this.selectionModel.setSelection(...selection) | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Angular allows for two way binding in the template. Here we wrap the angular Selection model and add the selected property to be used for binding.
} | ||
}); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A SelectionModel that takes a predicate which is used to filter items selected using the .select(...items) method. This is handy to prevent selecting items that have not been loaded yet. This is relevant when doing a range select which contains items that have not been loaded into array yet.
@HostListener('window:resize') | ||
onWindowResize() { | ||
this.resetWidth(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be here? When do we want to reset the widths?
size: this.getRow(rowIndex).size, | ||
}; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@castaway , could you please help with how to test the websocketsearchmaillist?
} catch (e) { | ||
// This shouldnt happen, it means something changed the stored | ||
// data without updating the messagedisplay rows. | ||
console.log('Tried to lookup ' + index + ' in searchIndex, isnt there! ' + e); | ||
console.error('Tried to lookup ' + index + ' in searchIndex, isnt there! ' + e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Change
+ e
to, e
for more useful log in console
seen: this.searchService.getDocData(this.getRowId(index)).seen, | ||
}; | ||
|
||
if (app.viewmode === 'conversations') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Add the conversation count also to the accessible table as it was in canvastable.
// console.log(`${f}`); | ||
// console.log(FS.stat(`${this.partitionsdir}/${f}`)); | ||
}); | ||
// }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed the look as it does nothing but block the thread. Easy performance win
Notes while testing/poking around - mostly comparing to existing prod (since we didnt write a spec..)
|
Starting new comment since that one seems full: |
fef59c7
to
67fd747
Compare
Add table to the app component. Add support for th and td templating Finalize drag and drop Fix height diff between rows Fix reactive model of table fixup! Fix reactive model of table fixup! fixup! Fix reactive model of table fixup! fixup! fixup! Fix reactive model of table fixup! fixup! fixup! fixup! Fix reactive model of table fixup! fixup! fixup! fixup! fixup! Fix reactive model of table fixup! fixup! fixup! fixup! fixup! fixup! Fix reactive model of table Fix the ctrl shift and meta key issue fixup! Fix the ctrl shift and meta key issue Resize idea and mapOverIndexes craziness fixup! Resize idea and mapOverIndexes craziness fixup! fixup! Resize idea and mapOverIndexes craziness Add flagged column Use BehaviorSubject to update firstRowHeight This removes the error where it complains about a property change after render. Enrich rows also when rows change Use SelectionModel and remove checkbox select logic from table Prevent checkbox toggle after checked is set Fix smaller screen layout Do not deselect for certain actions. Fix bulk action when no item is checked Revert the directive resizer changes Add resizable columns - Setup a sane default for column widths. - Convert absolute columns widths to relative ones. https://codepen.io/Neizan/pen/ExajoJe fixup! Add resizable columns fixup! fixup! Add resizable columns fixup! fixup! fixup! Add resizable columns fixup! fixup! fixup! fixup! Add resizable columns Add some sane column width defaults Enable ordering of columns on th click Reset column width on dblclick fixup! Reset column width on dblclick Show skeleton when scrolling fast fixup! Show skeleton when scrolling fast Fix issue where last selected is set to first item on scroll Figure out how to reset column widths on switching routes fixup! Figure out how to reset column widths on switching routes Recompute column width on window resize Fix issues that caused build to fail Fix freezing caused by too many row height checks fixup! fixup! Figure out how to reset column widths on switching routes Small typing changes in app.component.ts helpers WIP: Fix memory issue and use message display abstraction Fix date and from columns values Make row deselect when selected row clicked Fix the damn scroll issue finally with trackBy Improve resize button style Add answered and folder column and fixed message data fn Disable canvastable dopaint fixup! Disable canvastable dopaint fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! Disable canvastable dopaint fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! Disable canvastable dopaint Fix build issue fixup! Fix build issue fixup! fixup! Fix build issue fixup! fixup! fixup! Fix build issue Scroll selected message into view This solves the issue where the bottom drawer overlaps selected message. Set column px width on user column resize Fix multi action buttons Remove no direction from sort button cycle Prevent mat-icon from increasing tbody height Have messages underneath mail viewer and on scroll down or on window resize Reduce font size of table Get threaded view working similar to production Rename accessible table to virtual scroll table Remove event listener and binding from skeleton version of message row Move common human bytes logic to own module and reuse Remove resize listener from resize button The reason being that the resize button is not aware of the larger window that resizes. fixup! Remove resize listener from resize button fixup! fixup! Remove resize listener from resize button Add horizontalResize event to resize observer directive Use this event instead to reset column widths.
44e5ea1
to
92576fa
Compare
@castaway , I am unable to reproduce this on my account. I could do a null check and drop the message when it is null. |
Add table to the app component.
Use j and k to scroll up and down in messages.Dropped the support for j and k scroll.