lodash#sortedIndexBy JavaScript Examples
The following examples show how to use
lodash#sortedIndexBy.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: reducers.js From chromeless with Mozilla Public License 2.0 | 5 votes |
sortedAppIds = (state = [], action) => {
switch (action.type) {
case CLEAN_APP_MANAGEMENT: {
// keep apps which are in installing/updating state
const newLst = state.filter((id) => (action.apps[id].status === INSTALLING));
return newLst;
}
case SET_APP: {
// if id is not in list, insert at sorted position
if (state.indexOf(action.id) < 0) {
const index = sortedIndexBy(state, action.id, (id) => {
const app = id === action.id ? { ...action.apps[id], ...action.app } : action.apps[id];
return iterateeFunc(app, action.sortInstalledAppBy);
});
state.splice(index, 0, action.id);
return [...state];
}
// if sorting value is updated, remove and reinsert id at new index
if (
(action.sortInstalledAppBy === 'name' && action.app.name)
|| (action.sortInstalledAppBy === 'last-updated' && (action.app.lastUpdated))
) {
const newState = without(state, action.id);
const index = sortedIndexBy(newState, action.id, (id) => {
const app = id === action.id ? { ...action.apps[id], ...action.app } : action.apps[id];
return iterateeFunc(app, action.sortInstalledAppBy);
});
newState.splice(index, 0, action.id);
return newState;
}
return state;
}
case REMOVE_APP: {
return without(state, action.id);
}
case SORT_APPS: {
// resort
const parts = action.sortInstalledAppBy.split('/');
const key = parts[0];
const order = parts.length > 0 ? parts[1] : 'asc';
return orderBy(state, (id) => {
const app = action.apps[id];
return iterateeFunc(app, key);
}, [order]);
}
default: return state;
}
}
Example #2
Source File: reducers.js From chromeless with Mozilla Public License 2.0 | 5 votes |
filteredSortedAppIds = (state = null, action) => {
switch (action.type) {
case INSTALLED_UPDATE_SORTED_APP_IDS: {
return action.sortedAppIds;
}
case CLEAN_APP_MANAGEMENT: {
// keep apps which are in installing/updating state
if (!state) return null;
const newLst = state.filter((id) => (action.apps[id].status === INSTALLING));
return newLst;
}
case SET_APP: {
if (!state) return null;
// if the app is not supposed to be in search result
// just return the current state
const processedQuery = action.activeQuery.trim().toLowerCase();
const currentApp = { ...action.apps[action.id], ...action.app };
if (!(
currentApp.name.toLowerCase().includes(processedQuery)
|| (currentApp.url && currentApp.url.toLowerCase().includes(processedQuery))
)) {
return state;
}
// if id is not in list, insert at sorted position
if (state.indexOf(action.id) < 0) {
const index = sortedIndexBy(state, action.id, (id) => {
const app = id === action.id ? { ...action.apps[id], ...action.app } : action.apps[id];
return iterateeFunc(app, action.sortInstalledAppBy);
});
state.splice(index, 0, action.id);
return [...state];
}
// if sorting value is updated, remove and reinsert id at new index
if (
(action.sortInstalledAppBy === 'name' && action.app.name)
|| (action.sortInstalledAppBy === 'last-updated' && (action.app.lastUpdated))
) {
const newState = without(state, action.id);
const index = sortedIndexBy(newState, action.id, (id) => {
const app = id === action.id ? { ...action.apps[id], ...action.app } : action.apps[id];
return iterateeFunc(app, action.sortInstalledAppBy);
});
newState.splice(index, 0, action.id);
return newState;
}
return state;
}
case REMOVE_APP: {
if (!state) return null;
return without(state, action.id);
}
case SORT_APPS: {
if (!state) return null;
// resort
return orderBy(state, (id) => {
const app = action.apps[id];
return iterateeFunc(app, action.sortInstalledAppBy);
});
}
default: return state;
}
}