Skip to content

Commit e2abecb

Browse files
committed
Add hidden columns selector
1 parent d4cd138 commit e2abecb

5 files changed

Lines changed: 69 additions & 10 deletions

File tree

js/initialStates/local-state.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export default Immutable.fromJS({
55
pageSize: 10,
66
currentPage: 1,
77
},
8+
metadataColumns: [],
89
filter: '',
910
sortColumns: [],
1011
sortDirections: []

js/reducers/__tests__/localReducerTest.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ import LocalReducer, {
1313

1414
import extend from 'lodash.assign';
1515

16-
const initialState = {renderProperties: {columnProperties: null}};
16+
const initialState = {
17+
renderProperties: {columnProperties: null},
18+
sortDirections: [],
19+
sortColumns: []
20+
};
21+
1722
//TODO: Import the testHelpers instead of using this directly
1823
const getMethod = (options) => {
1924
if(!options.method) {

js/selectors/__tests__/localSelectorsTest.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ function getBasicState() {
1818
pageSize: 1,
1919
currentPage: 0,
2020
maxPage: 2
21-
}
21+
},
22+
sortColumns: [],
23+
sortDirections: []
2224
});
2325
}
2426

@@ -44,7 +46,9 @@ export function get3ColState() {
4446
pageSize: 1,
4547
currentPage: 0,
4648
maxPage: 2
47-
}
49+
},
50+
sortColumns: [],
51+
sortDirections: []
4852
});
4953
}
5054

@@ -137,6 +141,30 @@ describe('localSelectors', () => {
137141
})
138142
})
139143

144+
describe ('with metadata columns', () => {
145+
it('gets metadata columns', () => {
146+
const state = get3ColState().set('metadataColumns', Immutable.List(['two']));
147+
const metaDataColumns = selectors.metaDataColumnsSelector(state);
148+
expect(metaDataColumns.toJSON()).toEqual(['two'])
149+
})
150+
})
151+
152+
describe ('hidden columns', () => {
153+
it('gets hidden columns without visible / metadata columns', () => {
154+
const state = withRenderProperties(get3ColState()
155+
.set('metadataColumns', Immutable.List(['two'])));
156+
157+
const hidden = selectors.hiddenColumnsSelector(state)
158+
expect(hidden).toEqual(['three'])
159+
});
160+
161+
it('returns empty when none', () => {
162+
const state = withRenderProperties(getBasicState())
163+
const hidden = selectors.hiddenColumnsSelector(state)
164+
expect(hidden).toEqual([]);
165+
});
166+
})
167+
140168
describe('visible columns', () => {
141169
it('gets the renderProperties', () => {
142170
const state = withRenderProperties(getBasicState());

js/selectors/localSelectors.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Immutable from 'immutable';
22
import MAX_SAFE_INTEGER from 'max-safe-integer';
33
import { createSelector } from 'reselect';
4-
import { getVisibleDataColumns, getMetaData } from '../utils/dataUtils'
4+
import { getVisibleDataColumns, getDataForColumns } from '../utils/dataUtils'
55

66
//oy - not a fan -- refactor asap because this is no good
77
let localUtils = null;
@@ -53,6 +53,9 @@ export const allColumnsSelector = createSelector(
5353
(data) => (data.size === 0 ? [] : data.get(0).keySeq().toJSON())
5454
)
5555

56+
//gets the metadata columns or nothing
57+
export const metaDataColumnsSelector = state => (state.get('metadataColumns') || [])
58+
5659
//gets the column property objects ordered by order
5760
export const sortedColumnPropertiesSelector = createSelector(
5861
renderPropertiesSelector,
@@ -129,11 +132,34 @@ export const visibleDataSelector = createSelector(
129132
(currentPageData, visibleColumns) => getVisibleDataColumns(currentPageData, visibleColumns)
130133
)
131134

135+
export const hiddenColumnsSelector = createSelector(
136+
visibleColumnsSelector,
137+
allColumnsSelector,
138+
metaDataColumnsSelector,
139+
(visibleColumns, allColumns, metaDataColumns) => {
140+
const removeColumns = [...visibleColumns, ...metaDataColumns];
141+
142+
return allColumns.filter(c => removeColumns.indexOf(c) === -1);
143+
}
144+
)
145+
132146
//TODO: this needs some tests
133-
export const metaDataSelector = createSelector(
147+
export const hiddenDataSelector = createSelector(
134148
currentPageDataSelector,
135149
visibleColumnsSelector,
136-
(currentPageData, visibleColumns) => getMetaData(currentPageData, visibleColumns)
150+
allColumnsSelector,
151+
metaDataColumnsSelector,
152+
(currentPageData, visibleColumns, allColumns, metaDataColumns) => {
153+
debugger;
154+
return getDataForColumns(currentPageData, keys)
155+
}
156+
)
157+
158+
//TODO: this needs some tests
159+
export const metaDataSelector = createSelector(
160+
currentPageDataSelector,
161+
metaDataColumnsSelector,
162+
(currentPageData, metaDataColumns) => { return getDataForColumns(currentPageData, metaDataColumns) }
137163
)
138164

139165
//TODO: This NEEDS tests

js/utils/dataUtils.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@ export function addKeyToRows(data) {
1818
return data.map(row => row.set('griddleKey', getKey()));
1919
}
2020

21-
export function getMetaData(data, nonMetaColumns) {
21+
export function getDataForColumns(data, columns) {
2222
if (data.size < 1) {
2323
return data;
2424
}
2525

2626
const dataColumns = data.get(0).keySeq().toArray();
27-
28-
const columns = dataColumns.filter(item => nonMetaColumns.indexOf(item) < 0);
29-
return data.map(d => d.filter(keyInArray(columns)));
27+
const resultColumns = dataColumns.filter(item => columns.indexOf(item) >= 0);
28+
return data.map(d => d.filter(keyInArray(resultColumns)));
3029
}
3130

3231
//, {__metadata: d.filter(keyInArray(metadataColumns)).set('index', i)}

0 commit comments

Comments
 (0)