fix: attempted fix of category sorting

This commit is contained in:
41666 2020-08-02 16:26:53 -04:00
parent 2801573d7e
commit 1f03e1bb11
No known key found for this signature in database
GPG key ID: BC51D07640DC10AF
3 changed files with 38 additions and 36 deletions

View file

@ -1,4 +1,4 @@
import { Set } from 'immutable'
import { OrderedMap, Set } from 'immutable'
import * as UIActions from '../../actions/ui'
import { getViewMap, setup } from '../role-picker/actions'
import uuidv4 from 'uuid/v4'
@ -138,34 +138,40 @@ export const createCategory = (dispatch, getState) => {
})
}
export const bumpCategory = (category, name) => (move) => async (dispatch, getState) => {
export const bumpCategory = (category, id) => (move) => async (dispatch, getState) => {
console.log({ category, id, move })
const { roleEditor } = getState()
const vm = roleEditor.get('viewMap')
const vmSeq = vm.valueSeq().filterNot((item) => item.get('name') === 'Uncategorized')
console.log({ vm, vmSeq })
const position = category.get('position')
const nextPos = position + move
const oldPosition = vmSeq.findKey((item) => item.get('id') === id)
const newPosition = Math.max(0, Math.min(vm.size - 1, oldPosition + move))
console.log({ oldPosition, newPosition })
const replaceThisOne = vm.findKey((category) => category.get('position') === nextPos)
const vmSeqExcludingBump = vmSeq.splice(oldPosition, 1)
console.log({ vmSeqExcludingBump: vmSeqExcludingBump.toJS() })
const vmSeqWithBump = vmSeqExcludingBump
.slice(0, newPosition)
.concat([category])
.concat(vmSeqExcludingBump.slice(newPosition))
console.log({ vmSeqWithBump: vmSeqWithBump.toJS() })
const vmSeqNewOrdering = vmSeqWithBump
.map((item, idx) => item.set('position', idx))
.sortBy((item) => item.get('position'))
console.log({ vmSeqNewOrdering: vmSeqNewOrdering.toJS() })
const newVm = vmSeqNewOrdering
// .add(vm.find((item) => item.get('name') === 'Uncategorized'))
.reduce((acc, item) => acc.set(item.get('id'), item), OrderedMap())
.set('Uncategorized', vm.get('Uncategorized'))
dispatch({
type: Symbol.for('re: edit category'),
data: {
id: name,
key: 'position',
value: nextPos,
},
type: Symbol.for('re: replace viewmap'),
data: newVm,
})
if (!!replaceThisOne) {
dispatch({
type: Symbol.for('re: edit category'),
data: {
id: replaceThisOne,
key: 'position',
value: position,
},
})
}
}
export const saveServer = (id) => async (dispatch, getState) => {

View file

@ -44,17 +44,7 @@ export const getViewMap = (server) => {
name: 'Uncategorized',
})
)
.map((cat, idx) =>
cat.set(
'position',
cat.get(
'position',
categoriesIds.findIndex((v) => v === idx)
)
)
)
// .sortBy(cat => cat.get('position'))
.map((c) => {
.map((c, id) => {
const roles = c
.get('roles')
// fill in roles_map
@ -63,7 +53,10 @@ export const getViewMap = (server) => {
// sort by server position, backwards.
.sort((a, b) => a.position > b.position)
// force data to sets
return c.set('roles_map', Set(roles)).set('roles', Set(c.get('roles')))
return c
.set('roles_map', Set(roles))
.set('roles', Set(c.get('roles')))
.set('id', id)
})
const selected = roles.reduce(

View file

@ -16,6 +16,9 @@ const reducer = (state = initialState, { type, data }) => {
...rest,
})
case Symbol.for('re: replace viewmap'):
return state.set('viewMap', data)
case Symbol.for('re: set category'):
return state.setIn(['viewMap', data.id], Map(data))
@ -44,11 +47,11 @@ const reducer = (state = initialState, { type, data }) => {
rmCat
.set(
'roles',
rmCat.get('roles').filterNot(r => r === data.role.get('id'))
rmCat.get('roles').filterNot((r) => r === data.role.get('id'))
)
.set(
'roles_map',
rmCat.get('roles_map').filterNot(r => r.get('id') === data.role.get('id'))
rmCat.get('roles_map').filterNot((r) => r.get('id') === data.role.get('id'))
)
)