Sha256: 46499d227bf7549c00af3f6d9d1c786be6e7977157378c6189173208afe20ff4

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 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,
        removeMany: adapter.removeMany,
        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

2 entries across 2 versions & 1 rubygems

Version Path
jason-rails-0.4.1 client/src/createJasonReducers.ts
jason-rails-0.4.0 client/src/createJasonReducers.ts