Skip to content

Commit

Permalink
limit autocomplete based on global filters
Browse files Browse the repository at this point in the history
  • Loading branch information
matt-deboer committed Oct 29, 2017
1 parent d7df17b commit 2522bb8
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 18 deletions.
12 changes: 8 additions & 4 deletions pkg/ui/src/state/actions/resources.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,14 @@ export function putResource(newResource, isNew) {
}

export function applyGlobalFilters(namespaces, kinds) {
return {
type: types.PUT_GLOBAL_FILTERS,
namespaces: namespaces,
kinds: kinds,
return function(dispatch, getState) {
let kubeKinds = getState().apimodels.kinds
dispatch({
type: types.PUT_GLOBAL_FILTERS,
namespaces: namespaces,
kinds: kinds,
kubeKinds: kubeKinds,
})
}
}

Expand Down
46 changes: 33 additions & 13 deletions pkg/ui/src/state/reducers/resources.js
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,9 @@ function registerOwned(state, resource) {
}
}

function updateAutocomplete(autocomplete, resource, group) {
function updateAutocomplete(state, resource, group) {

let autocomplete = state.autocomplete
let autocompleteGroup = group
if (resource.kind === 'Node') {
autocompleteGroup = 'nodes'
Expand Down Expand Up @@ -274,11 +275,10 @@ function doUpdateResource(state, resource, isNew, kubeKinds) {
}
let newState = {...state}
let kubeKind = kubeKinds[resource.kind]
let resourceGroup = (kubeKind && kubeKind.resourceGroup) || 'workloads'
let resourceGroup = kubeKind.resourceGroup
resource.statusSummary = statusForResource(resource)
registerOwned(newState, resource)
updateProblemResources(newState, resource)
updateAutocomplete(newState.autocomplete, resource, resourceGroup)
updateVersionByKind(newState, resource)
if (isNew) {
updateResourceCounts(newState, resource)
Expand All @@ -293,16 +293,17 @@ function doUpdateResource(state, resource, isNew, kubeKinds) {
newState = doSelectResource(newState,
resource.metadata.namespace, resource.kind, resource.metadata.name)
}
return doFilterResource(newState, resource)
}

function doFilterResource(newState, resource) {
newState.resources = {...newState.resources}
newState.resources[resource.key] = resource
if (newState.resource && newState.resource.key === resource.key) {
newState.resource = resource
}
applyFilters(newState.globalFilters, newState.filters, resource)

if (!applyFilters(newState.globalFilters, newState.filters, resource)) {
updateAutocomplete(newState, resource)
}

return newState
}

Expand Down Expand Up @@ -402,8 +403,9 @@ function doReceiveResources(state, resources, kubeKinds) {
let resourceGroup = (kubeKind && kubeKind.resourceGroup) || 'workloads'
registerOwned(newState, resource)
updateProblemResources(newState, resource)
updateAutocomplete(newState.autocomplete, resource, resourceGroup)
applyFilters(newState.globalFilters, newState.filters, resource)
if (!applyFilters(newState.globalFilters, newState.filters, resource)) {
updateAutocomplete(newState, resource, resourceGroup)
}
updateVersionByKind(newState, resource)
updatePodCount(newState, resource)
updateResourceCounts(newState, resource)
Expand Down Expand Up @@ -556,17 +558,35 @@ function doSetFilterNames(state, filterNames) {
}


function doSetGlobalFilters(state, selectedNamespaces, selectedKinds) {
function doSetGlobalFilters(state, selectedNamespaces, selectedKinds, kubeKinds) {
let globalFilters = {}
if (Object.keys(selectedNamespaces).length > 0) {
globalFilters['namespace'] = {...selectedNamespaces}
}
if (Object.keys(selectedKinds).length > 0) {
globalFilters['kind'] = {...selectedKinds}
}
return doFilterAll({...state,
globalFilters
}, state.resources)

let newState = { ...state,
resources: { ...state.resources },
globalFilters: globalFilters,
autocomplete: {
workloads: {},
nodes: {},
access: {},
subjects: {},
},
}

visitResources(newState.resources, function(resource) {
if (!applyFilters(newState.globalFilters, newState.filters, resource)) {
let kubeKind = kubeKinds[resource.kind]
let resourceGroup = kubeKind.resourceGroup
updateAutocomplete(newState, resource, resourceGroup)
}
})

return newState
}

/**
Expand Down
11 changes: 10 additions & 1 deletion pkg/ui/src/utils/filter-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,19 @@ export const instanceTypeLabel = 'beta.kubernetes.io/instance-type'
export const roleLabel = 'kubernetes.io/role'
export const hostnameLabel = 'kubernetes.io/hostname'


/**
* Applies the global and dynamic filters to the provided resource.
* Returns `true` if the item was globally filtered.
*
* @param {*} globalFilters
* @param {*} dynamicFilters
* @param {*} resource
*/
export function applyFilters(globalFilters, dynamicFilters, resource) {
if (!applyFiltersToResource(globalFilters, resource)) {
applyFiltersToResource(dynamicFilters, resource)
} else {
return true
}
}

Expand Down

0 comments on commit 2522bb8

Please sign in to comment.