Projekt

Obecné

Profil

Stáhnout (7.73 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 } 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 : {imageUrl: string, title: string}[] = []
20
                for(let i = 1; i < response.data.object.length; i++){
21
                    images.push({imageUrl: response.data.object[i]?.images?.[0]?.file, title:  response.data.object[i]?.images?.[0]?.text})
22
                }
23
                
24
                const institution = {
25
                    name: response.data?.object[1]?.institution ?? undefined,
26
                    inventoryNumber: response.data?.object[1]?.id_number ?? undefined,
27
                    country: response.data?.object[1]?.country ?? undefined,
28
                    city: response.data?.object[1]?.city ?? undefined
29
                };
30
                const repository = response.data?.object[1]?.repository ?? undefined;
31
                const provenance = response.data?.object[1]?.provenance ?? undefined;
32
                const description = response.data?.object[1]?.physical_description ?? undefined;
33

    
34
                return {
35
                    id: itemId,
36
                    fullView: true,
37
                    concordances: response.data.concordances ?
38
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }].concat(response.data.concordances)
39
                        :
40
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }],
41
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name ?? undefined,
42
                    workName: response.data.object[0]?.caption ?? undefined,
43
                    inventoryItem: response.data.text ?? undefined,
44
                    searchSubjects: response.data.search_subject ?? undefined,
45
                    prevItem: response.data.prevItem ?? undefined,
46
                    nextItem: response.data.nextItem ?? undefined,
47
                    authorName,
48
                    images,
49
                    institution,
50
                    repository,
51
                    provenance,
52
                    description
53
                }
54
            }
55
            // data without image
56
            else if (response.status === 200 && response.data.object.length == 1) {
57
                return {
58
                    id: itemId,
59
                    fullView: false,
60
                    concordances: response.data.concordances ?
61
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }].concat(response.data.concordances)
62
                        :
63
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }],
64
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name ?? undefined,
65
                    workName: response.data.object[0]?.caption ?? undefined,
66
                    prevItem: response.data.prevItem ?? undefined,
67
                    nextItem: response.data.nextItem ?? undefined,
68
                    inventoryItem: response.data.text ?? undefined,
69
                    searchSubjects: response.data.search_subject ?? undefined,
70
                }
71
            }
72
            else {
73
                console.log("Error " + response.data);
74
                return Promise.reject(response.data ? response.data : "Error")
75
            }
76
        } catch (err: any) {
77

    
78
            console.log(err);
79
            return Promise.reject(err.response.data)
80
        }
81
    }
82
)
83

    
84
export const setConcordances = (concordances: Concordance[]) => {
85
    return {
86
        type: "item/setConcordances",
87
        payload: {
88
            concordances,
89
        },
90
    };
91
};
92

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

    
112
export const getItemNotes = createAsyncThunk(
113
    "item/getItemNotes",
114
    async ({ item, relatedComments }: { item: Item, relatedComments: boolean }) => {
115
        try {
116
            console.log("GET notes/getNotes/" + item.id);
117

    
118
            const response = await getItemNotesRequest(item, relatedComments);
119

    
120
            if (response.status === 200) {
121
                if (response.data && response.data.length > 0) {
122

    
123
                    let notes = [];
124
                    for (let i = 0; i < response.data.length; i++) {
125
                        let note = response.data[i];
126
                        let replies : any = undefined
127

    
128
                        // convert replies
129
                        if(note.replies){
130
                            replies = [];
131
                            for(let i = 0; i < note.replies.length; i++){
132
                                const reply = note.replies[i];
133
                                replies.push({
134
                                    uuid: (reply as any).uuid,
135
                                    username: (reply as any).created_by,
136
                                    userId: (reply as any).created_by_id,
137
                                    note: (reply as any).note,
138
                                    avatarUrl: (reply as any).avatar,
139
                                    items: (reply as any).items,
140
                                    createdTime: (reply as any).created,
141
                                    updatedTime: (reply as any).updated,
142
                                    noteColor: (reply as any).note_color,
143
                                    reply_to: note.uuid
144
                                })
145
                            }
146
                        }
147

    
148
                        notes.push({
149
                            uuid: (note as any).uuid,
150
                            username: (note as any).created_by,
151
                            userId: (note as any).created_by_id,
152
                            note: (note as any).note,
153
                            avatarUrl: (note as any).avatar,
154
                            items: (note as any).items,
155
                            replies: replies,
156
                            createdTime: (note as any).created,
157
                            updatedTime: (note as any).updated,
158
                            noteColor: (note as any).note_color,
159
                            reply_to: (note as any).reply_to
160
                        })
161
                    }
162

    
163
                    return {
164
                        notes,
165
                    }
166
                }
167
                else {
168
                    // no notes for this item
169
                    return {
170
                        notes: [],
171
                    }
172
                }
173
            }
174
            else {
175
                return Promise.reject(response.data ? response.data : "Error")
176
            }
177
        } catch (err: any) {
178
            return Promise.reject(err.response.data)
179
        }
180
    }
181
)
(2-2/7)