-
Notifications
You must be signed in to change notification settings - Fork 0
/
TenantsContext.tsx
63 lines (53 loc) · 1.69 KB
/
TenantsContext.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React, { useContext, useState, useEffect } from 'react';
import { GetTenantsQuery, useGetTenantsQuery } from '../generated/graphql';
import { useAuth } from './AuthContext';
export type TenantItem = GetTenantsQuery['tenants']['items'][0];
interface TenantContextValue {
tenants: TenantItem[];
currentTenant: TenantItem | null;
updateRequired: () => void;
}
export const TenantsContext = React.createContext<TenantContextValue>({
tenants: [],
currentTenant: null,
updateRequired: () => {
// Dummy function
},
} as TenantContextValue);
export function useTenants(): TenantContextValue {
return useContext(TenantsContext);
}
function useAuthContext() {
const context = useAuth();
return context;
}
export const TenantsProvider: React.FC = ({ children }) => {
const authContext = useAuthContext();
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [currentUserId, setUserId] = useState<string>();
const [tenantUpdateState, updateTenant] = useState(true);
useEffect(() => {
setUserId(authContext.currentUser?.uid);
}, [authContext]);
const { data, loading, error } = useGetTenantsQuery(); // TODO: use currentUserId to retrive tenants only for current user
const tenants =
!loading && !error && authContext.isLoggedIn() && data
? data.tenants.items
: [];
// TODO: handle errors
if (error) console.log(error);
const currentTenant = tenants.length > 0 ? tenants[0] : null;
function updateRequired() {
updateTenant(!tenantUpdateState);
}
const context = {
tenants,
currentTenant,
updateRequired,
};
return (
<TenantsContext.Provider value={context}>
{children}
</TenantsContext.Provider>
);
};