aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/CollectionSchemaView.tsx
diff options
context:
space:
mode:
authorfawn <fangrui_tong@brown.edu>2019-07-30 16:21:54 -0400
committerfawn <fangrui_tong@brown.edu>2019-07-30 16:21:54 -0400
commit78999b8b35267db9236bbb69e7e90e8691c59ba9 (patch)
treeeba2e58999ea22e9324c2c652812552a1d96190b /src/client/views/collections/CollectionSchemaView.tsx
parentdd5d7503e05962fa9a22baa9f5fa00373393ac11 (diff)
sorting saves on schema columns
Diffstat (limited to 'src/client/views/collections/CollectionSchemaView.tsx')
-rw-r--r--src/client/views/collections/CollectionSchemaView.tsx33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx
index 86d3d01ef..84f8ec505 100644
--- a/src/client/views/collections/CollectionSchemaView.tsx
+++ b/src/client/views/collections/CollectionSchemaView.tsx
@@ -275,7 +275,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
@observable _headerIsEditing: boolean = false;
@observable _cellIsEditing: boolean = false;
@observable _focusedCell: { row: number, col: number } = { row: 0, col: 0 };
- @observable _sortedColumns: Map<string, { id: string, desc: boolean }> = new Map();
@observable _openCollections: Array<string> = [];
@computed get previewWidth() { return () => NumCast(this.props.Document.schemaPreviewWidth); }
@@ -308,8 +307,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
@computed get resized(): { "id": string, "value": number }[] {
- let columns = this.columns;
- return columns.reduce((resized, shf) => {
+ return this.columns.reduce((resized, shf) => {
if (shf.width > -1) {
resized.push({ "id": shf.heading, "value": shf.width });
}
@@ -317,6 +315,15 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}, [] as { "id": string, "value": number }[]);
}
+ @computed get sorted(): { "id": string, "desc": boolean }[] {
+ return this.columns.reduce((sorted, shf) => {
+ if (shf.desc) {
+ sorted.push({ "id": shf.heading, "desc": shf.desc });
+ }
+ return sorted;
+ }, [] as { "id": string, "desc": boolean }[]);
+ }
+
@computed get borderWidth() { return Number(COLLECTION_BORDER_WIDTH); }
@computed get tableColumns(): Column<Doc>[] {
let possibleKeys = this.documentKeys.filter(key => this.columns.findIndex(existingKey => existingKey.heading.toUpperCase() === key.toUpperCase()) === -1);
@@ -358,7 +365,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
deleteColumn={this.deleteColumn}
setColumnType={this.setColumnType}
setColumnSort={this.setColumnSort}
- removeColumnSort={this.removeColumnSort}
setColumnColor={this.setColumnColor}
/>;
@@ -689,13 +695,13 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
@action
- setColumnSort = (column: string, descending: boolean) => {
- this._sortedColumns.set(column, { id: column, desc: descending });
- }
-
- @action
- removeColumnSort = (column: string) => {
- this._sortedColumns.delete(column);
+ setColumnSort = (columnField: SchemaHeaderField, descending: boolean | undefined) => {
+ let columns = this.columns;
+ let index = columns.findIndex(c => c.heading === columnField.heading);
+ let column = columns[index];
+ column.setDesc(descending);
+ columns[index] = column;
+ this.columns = columns;
}
get documentKeys() {
@@ -750,7 +756,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
getTdProps={this.getTdProps}
sortable={false}
TrComponent={MovableRow}
- sorted={Array.from(this._sortedColumns.values())}
+ sorted={this.sorted}
expanded={expanded}
resized={this.resized}
onResizedChange={this.onResizedChange}
@@ -770,7 +776,8 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
newResized.forEach(resized => {
let index = columns.findIndex(c => c.heading === resized.id);
let column = columns[index];
- column.width = resized.value;
+ column.setWidth(resized.value);
+ columns[index] = column;
});
this.columns = columns;
}