mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-04-24 19:59:12 +00:00
fix: attempted fix of category sorting
This commit is contained in:
parent
2801573d7e
commit
1f03e1bb11
3 changed files with 38 additions and 36 deletions
|
@ -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) => {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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'))
|
||||
)
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue