Projekt

Obecné

Profil

Stáhnout (5.63 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 } 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
                const authorName = response.data.object[1]?.name?.[0]?.getty_data?.display_name || null;
18
                const imageUrl = response.data.object[1]?.images?.[0]?.file || null;
19
                const title = response.data.object[1]?.images?.[0]?.text || null;
20
                const institution = {
21
                    name: response.data.object[1]?.institution || null,
22
                    inventoryNumber: response.data.object[1]?.id_number || null,
23
                    country: response.data.object[1]?.country || null,
24
                    city: response.data.object[1]?.city || null
25
                };
26
                const repository = response.data.object[1]?.repository || null;
27
                const provenance = response.data.object[1]?.provenance || null;
28
                const description = response.data.object[1]?.physical_description || null;
29
                
30
                return {
31
                    id: itemId,
32
                    fullView: true,
33
                    concordances:  [{id: itemId, cert: response.data.object[1]?.cert || Certainty.Unknown}].concat(response.data.concordances),
34
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name || null,
35
                    workName: response.data.object[0]?.caption || null,
36
                    inventoryItem: response.data.text || null,
37
                    searchSubjects: response.data.search_subject || null,
38
                    authorName,
39
                    imageUrl,
40
                    title,
41
                    institution,
42
                    repository,
43
                    provenance,
44
                    description
45
                }
46
            }
47
            // data without image
48
            else if (response.status === 200 && response.data.object.length == 1) {
49
                return {
50
                    id: itemId,
51
                    fullView: false,
52
                    concordances: [{id: itemId, cert: Certainty.Unknown}].concat(response.data.concordances),
53
                    authorDisplayName: response.data.object[0]?.name?.[0]?.getty_data?.display_name || null,
54
                    workName: response.data.object[0]?.caption || null,
55
                    inventoryItem: response.data.text || null,
56
                    searchSubjects: response.data.search_subject || null,
57
                }
58
            }
59
            else {
60
                console.log("Error " + response.data);
61
                return Promise.reject(response.data ? response.data : "Error")
62
            }
63
        } catch (err: any) {
64
            
65
            console.log(err);
66
            return Promise.reject(err.response.data)
67
        }
68
    }
69
)
70

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

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

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

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

    
114
            const response = await getItemNotesRequest(itemId);
115

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

    
119
                    let notes = [];
120
                    for(let i = 0; i < response.data.length; i++){
121
                        let note = response.data[i];
122
                        notes.push({
123
                            username: (note as any).created_by,
124
                            userId: (note as any).created_by_id,
125
                            avatarUrl: (note as any).avatar,
126
                            items: (note as any).items,
127
                            createdTime: (note as any).created, 
128
                            updatedTime: (note as any).updated,
129
                            noteColor: (note as any).note_color,
130
                        })
131
                    }
132

    
133
                    return {
134
                        notes,
135
                    }
136
                }
137
                else{
138
                    // no notes for this item
139
                    return {
140
                        notes: [],
141
                    }
142
                }
143
            }
144
            else {
145
                return Promise.reject(response.data ? response.data : "Error")
146
            }
147
        } catch (err: any) {
148
            return Promise.reject(err.response.data)
149
        }
150
    }
151
)
(1-1/2)