Projekt

Obecné

Profil

Stáhnout (8.02 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, relationship_type: string, cert: Certainty}[] = []
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 ?? "", relationship_type: response.data.object[i].relationship_type ?? "", cert: response.data.object[i].cert ?? Certainty.Unknown })
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
                    room: response.data.room ?? undefined,
48
                    authorName,
49
                    images,
50
                    institution,
51
                    repository,
52
                    provenance,
53
                    description
54
                }
55
            }
56
            // data without image
57
            else if (response.status === 200 && response.data.object.length == 1) {
58
                return {
59
                    id: itemId,
60
                    fullView: false,
61
                    concordances: response.data.concordances ?
62
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }].concat(response.data.concordances)
63
                        :
64
                        [{ id: itemId, cert: response.data?.object[1]?.cert ?? Certainty.Unknown }],
65
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name ?? undefined,
66
                    workName: response.data.object[0]?.caption ?? undefined,
67
                    prevItem: response.data.prevItem ?? undefined,
68
                    nextItem: response.data.nextItem ?? undefined,
69
                    inventoryItem: response.data.text ?? undefined,
70
                    searchSubjects: response.data.search_subject ?? undefined,
71
                    room: response.data.room ?? undefined,
72
                }
73
            }
74
            else {
75
                console.log("Error " + response.data);
76
                return Promise.reject(response.data ? response.data : "Error")
77
            }
78
        } catch (err: any) {
79

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

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

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

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

    
120
            const response = await getItemNotesRequest(item, relatedComments);
121

    
122
            if (response.status === 200) {
123
                if (response.data && response.data.length > 0) {
124

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

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

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

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