· 6 years ago · Jan 09, 2020, 10:30 AM
1const [useListStore] = create((set, get) => ({
2 listLoading: false,
3 lists: {
4 [BizData.Lists.listTypes()['COMPANIES']]: [],
5 [BizData.Lists.listTypes()['PEOPLE']]: [],
6 },
7 dataLists: {
8 [BizData.Lists.listTypes()['COMPANIES']]: {},
9 [BizData.Lists.listTypes()['PEOPLE']]: {},
10 },
11 async removeFromList() {},
12 async getDataLists({ data: { type, ids = [] }, onComplete, onError }) {
13 // Load
14 set({ listLoading: true });
15
16 // Scope
17 let dataListPromises;
18
19 console.log(type, ids);
20
21 // Get the correct datalist based on type
22 switch (type) {
23 case BizData.Lists.listTypes()['COMPANIES']:
24 dataListPromises = ids.map(id => BizData.Company.getListData({ id }));
25 break;
26 case BizData.Lists.listTypes()['PEOPLE']:
27 dataListPromises = ids.map(id => BizData.Person.listOfCompanies({ id }));
28 break;
29 }
30
31 // Resolve
32 return Promise.all(dataListPromises).then(result => {
33 // Reformat as dictionary based on incoming ids (promise order is preserved so we can use index)
34 const dataDictionary = ids.reduce(
35 (acc, key, index) => ({
36 ...acc,
37 [key]: result[index],
38 }),
39 {}
40 );
41
42 // Set as dataList
43 set({
44 dataLists: {
45 ...get().dataLists,
46 [type]: {
47 ...get().dataLists[type],
48 ...dataDictionary,
49 },
50 },
51 });
52
53 // Stop loading
54 set({ listLoading: false });
55 });
56
57 // TODO: COMPANY
58 // For hver af ids skal jeg hente de tre endpoints der giver hhv. stamdata, deltagere og regnskabstal
59 // Disse skal gemmes under dataLists.cvr.stamdata,deltagere,regnskabstal
60 // Datasættet findes ved at bruge de ids der er valgt i dropdown, hvorfor jeg skal sætte en selectedList state
61
62 // TODO: PERSON
63 // For hver af ids skal jeg hente det endpoint der giver roller og cvr /{personid}/PersonListOfCvr, og så
64 // efterfølgende lave kald på /{cvrnr}/VirksomhedsData for hvert cvr nummer, som skal tilføjes
65 // resultatet under cvr_nrs.stamdata
66 // Disse skal gemmes under dataLists.person.
67 // Datasættet findes ved at bruge de ids der er valgt i dropdown, hvorfor jeg skal sætte en selectedList state
68 },
69 async getLists(id) {
70 BizData.Lists.getLists({ id }).then(lists => {
71 set({
72 lists,
73 });
74 });
75 },
76 async createList({ data: { type, name }, onComplete, onError }) {
77 // Load
78 set({ listLoading: true });
79
80 // Call API
81 BizData.Lists.createList({ type, name })
82 .then(list => {
83 // Add to lists
84 set({
85 lists: {
86 ...get().lists,
87 [data.type]: {
88 ...get().lists[data.type],
89 list,
90 },
91 },
92 });
93
94 // Stop loading
95 set({ listLoading: false });
96
97 // Callback
98 onComplete();
99 })
100 .catch(error => {
101 // Stop loading
102 set({ listLoading: false });
103
104 // Handle error event
105 onError(error);
106 });
107 },
108 async addToList({ data: { type, listId, itemId }, onComplete, onError }) {
109 // Call API
110 BizData.Lists.addToList({ type, userId: authStore.getState().userId, listId, itemId })
111 .then(() => {
112 // Callback
113 onComplete();
114 })
115 .catch(error => {
116 // Handle error event
117 onError(error);
118 });
119 },
120}));