Projekt

Obecné

Profil

Stáhnout (8.88 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 { Certainty, Concordance, Item, ItemObject } from "../../types/item";
5

    
6

    
7
export const getItem = createAsyncThunk(
8
    "item/getItem",
9
    async (itemId: string) => {
10
        try {
11
            console.log("GET item/getItem/" + itemId);
12

    
13
            const response = await getItemRequest(itemId);
14

    
15
            // data with image
16
            if (response.status === 200 && response.data.object.length > 1) {
17
                // TODO IMAGES to array :-)
18
                const authorName = response.data?.object[1]?.name?.[0]?.getty_data?.display_name ?? undefined;
19
                const images : ItemObject[] = []
20
                for(let i = 1; i < response.data.object.length; i++){
21
                    images.push({
22
                        imageUrl: response.data.object[i]?.images?.[0]?.file ?? undefined, 
23
                        title:  response.data.object[i]?.images?.[0]?.text ?? undefined, 
24
                        relationship_type: response.data.object[i].relationship_type ?? undefined, 
25
                        cert: response.data.object[i].cert ?? Certainty.Unknown ,
26

    
27
                        author: response.data?.object[i]?.name?.[0]?.getty_data?.display_name ?? undefined,
28
                        description: response.data?.object[i]?.physical_description ?? undefined,
29
                        institution: {
30
                            name: response.data?.object[i]?.institution ?? undefined,
31
                            inventoryNumber: response.data?.object[i]?.id_number ?? undefined,
32
                            country: response.data?.object[i]?.country ?? undefined,
33
                            city: response.data?.object[i]?.city ?? undefined
34
                        },
35
                        provenance: response.data?.object[i]?.provenance ?? undefined,
36
                        repository: response.data?.object[i]?.repository ?? undefined
37
                    })
38
                }
39
                
40
                const institution = {
41
                    name: response.data?.object[1]?.institution ?? undefined,
42
                    inventoryNumber: response.data?.object[1]?.id_number ?? undefined,
43
                    country: response.data?.object[1]?.country ?? undefined,
44
                    city: response.data?.object[1]?.city ?? undefined
45
                };
46
                const repository = response.data?.object[1]?.repository ?? undefined;
47
                const provenance = response.data?.object[1]?.provenance ?? undefined;
48
                const description = response.data?.object[1]?.physical_description ?? undefined;
49

    
50
                return {
51
                    id: itemId,
52
                    fullView: true,
53
                    concordances: response.data.concordances ?
54
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }].concat(response.data.concordances)
55
                        :
56
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }],
57
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name ?? undefined,
58
                    workName: response.data.object[0]?.caption ?? undefined,
59
                    inventoryItem: response.data.text ?? undefined,
60
                    searchSubjects: response.data.search_subject ?? undefined,
61
                    prevItem: response.data.prevItem ?? undefined,
62
                    nextItem: response.data.nextItem ?? undefined,
63
                    room: response.data.room ?? undefined,
64
                    authorName,
65
                    images,
66
                    institution,
67
                    repository,
68
                    provenance,
69
                    description
70
                }
71
            }
72
            // data without image
73
            else if (response.status === 200 && response.data.object.length == 1) {
74
                return {
75
                    id: itemId,
76
                    fullView: false,
77
                    concordances: response.data.concordances ?
78
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }].concat(response.data.concordances)
79
                        :
80
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }],
81
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name ?? undefined,
82
                    workName: response.data.object[0]?.caption ?? undefined,
83
                    prevItem: response.data.prevItem ?? undefined,
84
                    nextItem: response.data.nextItem ?? undefined,
85
                    inventoryItem: response.data.text ?? undefined,
86
                    searchSubjects: response.data.search_subject ?? undefined,
87
                    room: response.data.room ?? undefined,
88
                }
89
            }
90
            else {
91
                console.log("Error " + response.data);
92
                return Promise.reject(response.data ? response.data : "Error")
93
            }
94
        } catch (err: any) {
95

    
96
            console.log(err);
97
            return Promise.reject(err.response.data)
98
        }
99
    }
100
)
101

    
102
export const setConcordances = (concordances: Concordance[]) => {
103
    return {
104
        type: "item/setConcordances",
105
        payload: {
106
            concordances,
107
        },
108
    };
109
};
110

    
111
// export const getItemConcordances = createAsyncThunk(
112
//     "item/getItemConcordances",
113
//     async (itemId : string) => {
114
//         try {
115
//             const response = await getItemConcordancesRequest(itemId)
116
//             console.log(response)
117
//             if (response.status === 200) {
118
//                 return {
119
//                     // TODO set item concordances
120
//                 }
121
//             } else {
122
//                 return Promise.reject(response.data ? response.data : "Error")
123
//             }
124
//         } catch (err: any) {
125
//             return Promise.reject(err.response.data)
126
//         }
127
//     }
128
// )
129

    
130
export const getItemNotes = createAsyncThunk(
131
    "item/getItemNotes",
132
    async ({ item, relatedComments }: { item: Item, relatedComments: boolean }) => {
133
        try {
134
            console.log("GET notes/getNotes/" + item.id);
135

    
136
            const response = await getItemNotesRequest(item, relatedComments);
137

    
138
            if (response.status === 200) {
139
                if (response.data && response.data.length > 0) {
140

    
141
                    let notes = [];
142
                    for (let i = 0; i < response.data.length; i++) {
143
                        let note = response.data[i];
144
                        let replies : any = undefined
145

    
146
                        // convert replies
147
                        if(note.replies){
148
                            replies = [];
149
                            for(let i = 0; i < note.replies.length; i++){
150
                                const reply = note.replies[i];
151
                                replies.push({
152
                                    uuid: (reply as any).uuid,
153
                                    username: (reply as any).created_by,
154
                                    userId: (reply as any).created_by_id,
155
                                    note: (reply as any).note,
156
                                    avatarUrl: (reply as any).avatar,
157
                                    items: (reply as any).items,
158
                                    createdTime: (reply as any).created,
159
                                    updatedTime: (reply as any).updated,
160
                                    noteColor: (reply as any).note_color,
161
                                    reply_to: note.uuid
162
                                })
163
                            }
164
                        }
165

    
166
                        notes.push({
167
                            uuid: (note as any).uuid,
168
                            username: (note as any).created_by,
169
                            userId: (note as any).created_by_id,
170
                            note: (note as any).note,
171
                            avatarUrl: (note as any).avatar,
172
                            items: (note as any).items,
173
                            replies: replies,
174
                            createdTime: (note as any).created,
175
                            updatedTime: (note as any).updated,
176
                            noteColor: (note as any).note_color,
177
                            reply_to: (note as any).reply_to
178
                        })
179
                    }
180

    
181
                    return {
182
                        notes,
183
                    }
184
                }
185
                else {
186
                    // no notes for this item
187
                    return {
188
                        notes: [],
189
                    }
190
                }
191
            }
192
            else {
193
                return Promise.reject(response.data ? response.data : "Error")
194
            }
195
        } catch (err: any) {
196
            return Promise.reject(err.response.data)
197
        }
198
    }
199
)
(2-2/7)