Projekt

Obecné

Profil

Stáhnout (6.44 KB) Statistiky
| Větev: | Tag: | Revize:
1
import { createAsyncThunk } from "@reduxjs/toolkit"
2
import { SortOptions } from "../../types/general";
3
import { Note } from "../../types/note";
4
import { getPlanAllRequest, getPlanFloorImageRequest, getPlanItemsRequest } from "../../api/planservice";
5
import { Floor, PlanImage, Room } from "../../types/plan";
6
import { ItemPreviewType } from "../../types/listViewTypes";
7
import { StringLiteralType } from "typescript";
8
import { Inventory } from "../../types/searchFormTypes";
9

    
10
// @ts-ignore
11
import { parseString } from 'react-native-xml2js';
12

    
13
export const getFloorList = createAsyncThunk(
14
    "plan/getFloorList",
15
    async () => {
16
        try {
17
            try {
18
                const response = await getPlanAllRequest()
19
                if (response.status === 200) {
20

    
21
                    let floorsDict: Record<string, Floor> = {
22
                        "ground_floor": { label: "Ground floor", id: "ground_floor", roomList: [] },
23
                        "first_floor": { label: "First floor", id: "first_floor", roomList: [] },
24
                        "second_floor": { label: "Second floor", id: "second_floor", roomList: [] }
25
                    }
26

    
27
                    const unstructeredRoomList: Room[] = response.data
28

    
29
                    unstructeredRoomList.map((room) => {
30
                        if (room.floor in floorsDict) {
31

    
32
                            // TODO handle on backend transformations :-)
33
                            if (room.floor == "first_floor") {
34
                                room.number_x = room.number_x - 1044.46
35
                                room.number_y = room.number_y - 1088.65
36
                            }
37
                            else if (room.floor == "second_floor") {
38
                                room.number_x = room.number_x - 2088.7
39
                                room.number_y = room.number_y - 1088.58
40
                            }
41

    
42
                            floorsDict[room.floor].roomList.push(room)
43
                        }
44
                        else {
45
                            floorsDict[room.floor] = { id: room.floor, label: room.floor, roomList: [room] }
46
                        }
47
                    }
48
                    )
49

    
50
                    let floorList = []
51

    
52
                    for (let key in floorsDict) {
53
                        let floor: Floor = floorsDict[key]
54
                        floorList.push(floor)
55
                    }
56

    
57
                    return floorList
58
                } else {
59
                    return Promise.reject(response.data ? response.data : "Get plan all request failed")
60
                }
61
            } catch (err: any) {
62
                return Promise.reject(err.response.data)
63
            }
64

    
65
        } catch (err: any) {
66
            console.log(err);
67
            return Promise.reject(err.response.data)
68
        }
69
    }
70
)
71

    
72

    
73
export const getPlanInventories = createAsyncThunk(
74
    "plan/getPlanInventories",
75
    async (params: { room: number, place?: number }) => {
76
        try {
77
            try {
78
                const response = await getPlanItemsRequest({ cursor: 0, room: params.room, items: 1, place: params.place })
79
                if (response.status === 200) {
80

    
81
                    const inventories: Inventory[] = response.data.pagination.inventories
82
                    const allInventoriesRecords = response.data.pagination.records
83

    
84
                    return {
85
                        inventories: inventories,
86
                        allInventoriesRecords: allInventoriesRecords
87
                    }
88
                } else {
89
                    return Promise.reject(response.data ? response.data : "Get plan items request failed")
90
                }
91
            } catch (err: any) {
92
                return Promise.reject(err.response.data)
93
            }
94

    
95
        } catch (err: any) {
96
            console.log(err);
97
            return Promise.reject(err.response.data)
98
        }
99
    })
100

    
101
export const getPlanItems = createAsyncThunk(
102
    "plan/getPlanItems",
103
    async (params: { cursor: number, room: number, place?: number, inventory: string }) => {
104
        try {
105
            try {
106
                const response = await getPlanItemsRequest({ cursor: params.cursor, room: params.room, place: params.place, inventory: params.inventory })
107
                if (response.status === 200) {
108

    
109
                    const items: ItemPreviewType[] = response.data.data
110
                    const inventoryPagination = {
111
                        cursor: response.data.pagination.cursor,
112
                        items: response.data.pagination.items,
113
                        records: response.data.pagination.records
114
                    }
115

    
116
                    return {
117
                        items: items,
118
                        inventoryPagination: inventoryPagination,
119
                    }
120
                } else {
121
                    return Promise.reject(response.data ? response.data : "Get plan items request failed")
122
                }
123
            } catch (err: any) {
124
                return Promise.reject(err.response.data)
125
            }
126

    
127
        } catch (err: any) {
128
            console.log(err);
129
            return Promise.reject(err.response.data)
130
        }
131
    }
132
)
133

    
134
export const getPlanFloorImage = createAsyncThunk(
135
    "plan/getPlanFloorImage",
136
    async (floorId: string) => {
137
        try {
138
            try {
139
                const response = await getPlanFloorImageRequest(floorId)
140

    
141
                if (response.status === 200) {
142

    
143
                    const svg: string = response.data
144

    
145
                    const output: PlanImage = {
146
                        svg: svg,
147
                        viewBox: { x: 0, y: 0, width: 0, height: 0 }
148
                    }
149

    
150
                    parseString(svg, (err: any, result: any) => {
151
                        if (!err && result && result.svg && result.svg.$.viewBox) {
152
                            const [x, y, width, height] = result.svg.$.viewBox.split(' ').map(Number);
153

    
154
                            // Set the SVG information in your component's state or use it as needed
155
                            output.viewBox = { x, y, width, height };
156
                        }
157
                    });
158

    
159
                    return output
160
                } else {
161
                    return Promise.reject(response.data ? response.data : "Get plan floor image request failed")
162
                }
163
            } catch (err: any) {
164
                return Promise.reject(err.response.data)
165
            }
166

    
167
        } catch (err: any) {
168
            console.log(err);
169
            return Promise.reject(err.response.data)
170
        }
171
    }
172
)
(5-5/7)