Projekt

Obecné

Profil

Stáhnout (5.08 KB) Statistiky
| Větev: | Tag: | Revize:
1
import { createAsyncThunk } from "@reduxjs/toolkit"
2
import { getItemRequest } from "../../api/itemservice"
3
import { getItemNotesRequest } from "../../api/notesservice"
4
import { Concordance, ItemViewState } from "../../types/item";
5

    
6

    
7
export const getItem = createAsyncThunk(
8
    "item/getItem",
9
    async (itemId: string) => {
10
        try {
11

    
12
            console.log("¨GET item/getItem/" + itemId);
13

    
14
            const response = await getItemRequest(itemId);
15

    
16

    
17
            // data with image
18
            if (response.status === 200 && response.data.object.length > 1) {
19
                return {
20
                    id: itemId,
21
                    fullView: true,
22

    
23
                    concordances: response.data.concordances,
24

    
25
                    authorDisplayName: response.data.object[0].name[0].getty_data.display_name,
26
                    workName: response.data.object[0].caption,
27

    
28
                    inventoryItem: response.data.text,
29
                    searchSubjects: response.data.search_subject,
30

    
31
                    // additional fields
32
                    authorName: response.data.object[1].name[0].getty_data.display_name,
33

    
34
                    imageUrl: response.data.object[1].images[0].file,
35
                    title: response.data.object[1].images[0].text,
36

    
37
                    institution: {
38
                        name: response.data.object[1].institution,
39
                        inventoryNumber: response.data.object[1].id_number,
40
                        country: response.data.object[1].country,
41
                        city: response.data.object[1].city
42
                    },
43
                    repository: response.data.object[1].repository,
44
                    provenance: response.data.object[1].provenance,
45
                    description: response.data.object[1].physical_description
46
                }
47
            }
48
            // data without image
49
            else if (response.status === 200 && response.data.object.length == 1) {
50
                return {
51
                    id: itemId,
52
                    fullView: false,
53
                    concordances: response.data.concordances,
54

    
55
                    authorDisplayName: response.data.object[0].name[0].getty_data.display_name,
56
                    workName: response.data.object[0].caption,
57
                    inventoryItem: response.data.text,
58
                    searchSubjects: response.data.search_subject,
59
                }
60
            }
61
            else {
62
                return Promise.reject(response.data ? response.data : "Error")
63
            }
64
        } catch (err: any) {
65
            return Promise.reject(err.response.data)
66
        }
67
    }
68
)
69

    
70
export const setSelectedConcordance = (selectedConcordance: number) => {
71
    return {
72
      type: "item/setSelectedConcordance",
73
      payload: {
74
        selectedConcordance,
75
      },
76
    };
77
  };
78

    
79
  export const setConcordances = (concordances: Concordance[]) => {
80
    return {
81
      type: "item/setConcordances",
82
      payload: {
83
        concordances,
84
      },
85
    };
86
  };
87

    
88
// export const getItemConcordances = createAsyncThunk(
89
//     "item/getItemConcordances",
90
//     async (itemId : string) => {
91
//         try {
92
//             const response = await getItemConcordancesRequest(itemId)
93
//             console.log(response)
94
//             if (response.status === 200) {
95
//                 return {
96
//                     // TODO set item concordances
97
//                 }
98
//             } else {
99
//                 return Promise.reject(response.data ? response.data : "Error")
100
//             }
101
//         } catch (err: any) {
102
//             return Promise.reject(err.response.data)
103
//         }
104
//     }
105
// )
106

    
107
export const getItemNotes = createAsyncThunk(
108
    "item/getItemNotes",
109
    async (itemId: string) => {
110
        try {
111
            console.log("¨GET notes/getNotes/" + itemId);
112

    
113
            const response = await getItemNotesRequest(itemId);
114

    
115
            if (response.status === 200) {
116
                if(response.data.length > 0){
117

    
118
                    let notes = [];
119
                    for(let i = 0; i < response.data.length; i++){
120
                        let note = response.data[i];
121
                        notes.push({
122
                            username: (note as any).created_by,
123
                            userId: (note as any).created_by_id,
124
                            avatarUrl: (note as any).avatar,
125
                            items: (note as any).items,
126
                            createdTime: (note as any).created, 
127
                            updatedTime: (note as any).updated,
128
                            noteColor: (note as any).note_color,
129
                        })
130
                    }
131
                    
132
                    return {
133
                        notes,
134
                    }
135
                }
136
                else{
137
                    // no notes for this item
138
                    return {
139
                        notes: [],
140
                    }
141
                }
142
            }
143
            else {
144
                return Promise.reject(response.data ? response.data : "Error")
145
            }
146
        } catch (err: any) {
147
            return Promise.reject(err.response.data)
148
        }
149
    }
150
)
(1-1/2)