New: Project Aphrodite

This commit is contained in:
Qstick
2018-11-23 02:04:42 -05:00
parent 65efa15551
commit 8430cb40ab
1080 changed files with 73015 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
export default function areAllSelected(selectedState) {
let allSelected = true;
let allUnselected = true;
Object.keys(selectedState).forEach((key) => {
if (selectedState[key]) {
allUnselected = false;
} else {
allSelected = false;
}
});
return {
allSelected,
allUnselected
};
}

View File

@@ -0,0 +1,15 @@
import _ from 'lodash';
function getSelectedIds(selectedState, { parseIds = true } = {}) {
return _.reduce(selectedState, (result, value, id) => {
if (value) {
const parsedId = parseIds ? parseInt(id) : id;
result.push(parsedId);
}
return result;
}, []);
}
export default getSelectedIds;

View File

@@ -0,0 +1,23 @@
import _ from 'lodash';
function getToggledRange(items, id, lastToggled) {
const lastToggledIndex = _.findIndex(items, { id: lastToggled });
const changedIndex = _.findIndex(items, { id });
let lower = 0;
let upper = 0;
if (lastToggledIndex > changedIndex) {
lower = changedIndex;
upper = lastToggledIndex + 1;
} else {
lower = lastToggledIndex;
upper = changedIndex;
}
return {
lower,
upper
};
}
export default getToggledRange;

View File

@@ -0,0 +1,16 @@
import areAllSelected from './areAllSelected';
export default function removeOldSelectedState(state, prevItems) {
const selectedState = {
...state.selectedState
};
prevItems.forEach((item) => {
delete selectedState[item.id];
});
return {
...areAllSelected(selectedState),
selectedState
};
}

View File

@@ -0,0 +1,17 @@
import _ from 'lodash';
function selectAll(selectedState, selected) {
const newSelectedState = _.reduce(Object.keys(selectedState), (result, item) => {
result[item] = selected;
return result;
}, {});
return {
allSelected: selected,
allUnselected: !selected,
lastToggled: null,
selectedState: newSelectedState
};
}
export default selectAll;

View File

@@ -0,0 +1,30 @@
import areAllSelected from './areAllSelected';
import getToggledRange from './getToggledRange';
function toggleSelected(state, items, id, selected, shiftKey) {
const lastToggled = state.lastToggled;
const selectedState = {
...state.selectedState,
[id]: selected
};
if (selected == null) {
delete selectedState[id];
}
if (shiftKey && lastToggled) {
const { lower, upper } = getToggledRange(items, id, lastToggled);
for (let i = lower; i < upper; i++) {
selectedState[items[i].id] = selected;
}
}
return {
...areAllSelected(selectedState),
lastToggled: id,
selectedState
};
}
export default toggleSelected;