Sha256: 0ddb79eab13cced7a052bd642a5d07df22ff40144438148474d42ebfdcd03ecd

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

import { createEntityAdapter, createSlice } from '@reduxjs/toolkit'
import pluralize from 'pluralize'
import _ from 'lodash'

function generateSlices(schema) {
  const sliceNames = schema.map(k => pluralize(k))
  const adapter = createEntityAdapter()

  return _.fromPairs(_.map(sliceNames, name => {
    return [name, createSlice({
      name,
      initialState: adapter.getInitialState(),
      reducers: {
        upsert: adapter.upsertOne,
        upsertMany: adapter.upsertMany,
        add: adapter.addOne,
        setAll: adapter.setAll,
        remove: adapter.removeOne,
        movePriority: (s, { payload: { id, priority, parentFilter } }) => {
          // Get IDs and insert our item at the new index
          var affectedIds = _.orderBy(_.filter(_.values(s.entities), parentFilter).filter(e => e.id !== id), 'priority').map(e => e.id)
          affectedIds.splice(priority, 0, id)

          // Apply update
          affectedIds.forEach((id, i) => (s.entities[id] as any).priority = i)
        }
      }
    }).reducer]
  }))
}

export default function createJasonReducers(schema) {
  return generateSlices(_.keys(schema))
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jason-rails-0.3.0 client/src/createJasonReducers.ts