Projekt

Obecné

Profil

Stáhnout (3.45 KB) Statistiky
| Větev: | Tag: | Revize:
1 9c55d3bb Schwobik
import { useEffect, useState } from "react"
2 f386a4fe Fantič
import { ScrollView, Text, VStack, useToast } from "native-base"
3 9c55d3bb Schwobik
import { useSelector } from "react-redux"
4
import { RootState } from "../../stores/store"
5 ca53e9f1 Schwobik
import ItemPreview from "./ItemPreview"
6 2b71499c Fantič
import { ItemPreviewType, LoadedPagesOfInventories } from "../../types/listViewTypes"
7 e49b1f44 Schwobik
import { log } from "../../logging/logger"
8 ca44ce3d Schwobik
import ListViewInventoryGroup from "./ListViewInventoryGroup"
9 f386a4fe Fantič
import { ErrorToast } from "../toast/ErrorToast"
10 2b71499c Fantič
import { Inventory } from "../../types/searchFormTypes"
11 e49b1f44 Schwobik
12 04928342 Schwobik
type ListViewProps = {
13 a6999074 Fantič
    navigation: any
14 2b71499c Fantič
15 a6999074 Fantič
    inventories: Inventory[]
16
    numOfResults?: number
17 2b71499c Fantič
18
    lastError?: string
19
20
    data: {[key: string]: ItemPreviewType[]}
21
    loadedPages: LoadedPagesOfInventories
22
    inventoriesDataLoading: {[key: string]: boolean}
23
24 a6999074 Fantič
    handleLoadMoreItems: (inventoryName: string, cursor: number) => void;
25
    
26
    hideHeaderText?: boolean
27 04928342 Schwobik
}
28 9c55d3bb Schwobik
29 04928342 Schwobik
const ListView = (props: ListViewProps) => {
30 9c55d3bb Schwobik
31 2b71499c Fantič
    const inventories = props.inventories
32
    const numberOfResults = props.numOfResults
33 e49b1f44 Schwobik
34 2b71499c Fantič
    const data = props.data
35
    const loadedPages = props.loadedPages
36
    const inventoriesDataLoading = props.inventoriesDataLoading
37 e49b1f44 Schwobik
38 f386a4fe Fantič
    const lastError = useSelector((state: RootState) => state.listView.lastError)
39
    const toast = useToast();
40
41
    useEffect(() => {
42
        if (lastError) {
43
            toast.closeAll()
44
            toast.show({
45
                render: ({
46
                    id
47
                }) => {
48
                    return <ErrorToast headerText={"Error"} text={lastError} onClose={() => toast.close(id)} />;
49
                },
50
                duration: 3000
51
            });
52
        }
53
    }, [lastError])
54
55 9c55d3bb Schwobik
    return (
56 e49b1f44 Schwobik
        <>
57 a6999074 Fantič
            {!props.hideHeaderText && <Text fontSize={16} fontWeight={"bold"} color={"primary.500"}>Search results{numberOfResults ? ` (${numberOfResults})` : ""}:</Text>}
58 f386a4fe Fantič
            {inventories && inventories.length > 0 ?
59 1980ed09 Schwobik
                (inventories.length > 1 ?
60
                    inventories.map((inventory) => (
61 f386a4fe Fantič
                        <ListViewInventoryGroup
62
                            inventoryName={inventory.name}
63
                            inventoryLabel={inventory.label}
64 2b71499c Fantič
65 f386a4fe Fantič
                            navigation={props.navigation}
66 2b71499c Fantič
67
                            // items
68
                            items={data[inventory.name]}
69
                            loading={inventoriesDataLoading[inventory.name]}
70
                            loadedPages={loadedPages[inventory.name]} 
71
                            
72
                            handleLoadMoreItems={props.handleLoadMoreItems } 
73
                            />
74 f386a4fe Fantič
                    )
75 1980ed09 Schwobik
                    ) : (
76
                        <ListViewInventoryGroup
77 f386a4fe Fantič
                            inventoryName={inventories[0].name}
78
                            inventoryLabel={inventories[0].label}
79
                            navigation={props.navigation}
80
                            defaultOpen={true}
81 2b71499c Fantič
82
                            // items
83
                            items={data[inventories[0].name]}
84
                            loading={inventoriesDataLoading[inventories[0].name]}
85
                            loadedPages={loadedPages[inventories[0].name]} 
86
                            
87
                            handleLoadMoreItems={props.handleLoadMoreItems }                         />
88 1980ed09 Schwobik
                    )) : (
89 f386a4fe Fantič
                    <Text alignSelf={"center"}>No results found</Text>
90 ca44ce3d Schwobik
                )
91 1980ed09 Schwobik
            }
92 e49b1f44 Schwobik
        </>
93 9c55d3bb Schwobik
    )
94
}
95
96
export default ListView