UNPKG

1.58 kBJavaScriptView Raw
1// @flow
2/* eslint-disable no-duplicate-imports */
3
4type NormalizrEntity = (data : any) => any;
5
6import type { Map as ImmutableMap } from "immutable";
7
8import * as Immutable from "immutable";
9
10import { createSelector } from "reselect";
11
12type ManageDataEntity = ImmutableMap<string, *>;
13
14// simple item
15
16const
17 manageEntity = (
18 (normalizrEntity : NormalizrEntity) => (item : any, state : any, keyID : string)
19 : ManageDataEntity => {
20 // prevent rewrite
21 const old = state.get(String(item[keyID]));
22
23 if (typeof old === "undefined") {
24 return Immutable.Map(normalizrEntity(item));
25 }
26
27 return old;
28 }
29 ),
30 manipulateItems = (sortKey? : string = "ID") => createSelector(
31 (data) => data,
32 (data) => (
33 data.sortBy((current) => -current.get(sortKey))
34 )
35 );
36
37// data item
38
39const
40 manageDataEntity = (
41 (normalizrEntity : NormalizrEntity) => (item : any, state : any, keyID : string)
42 : ManageDataEntity => {
43 // prevent rewrite
44 const old = state.get(String(item[keyID]));
45
46 if (typeof old === "undefined") {
47 return Immutable.Map({
48 Data: normalizrEntity(item),
49 });
50 }
51
52 return old;
53 }
54 ),
55 manipulateDataItems = (sortKey? : string = "ID") => createSelector(
56 (data) => data,
57 (data) => (
58 data.sortBy((current) => -current.getIn([
59 "Data",
60 sortKey,
61 ]))
62 )
63 );
64
65export {
66 manageDataEntity,
67 manipulateDataItems,
68
69 manipulateItems,
70 manageEntity,
71};