-
Notifications
You must be signed in to change notification settings - Fork 68
/
index.js
73 lines (67 loc) · 1.67 KB
/
index.js
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
64
65
66
67
68
69
70
71
72
73
import React from "react";
import gql from "graphql-tag.macro";
import Roster from "./roster";
import {useQuery, useSubscription} from "@apollo/react-hooks";
const fragment = gql`
fragment CrewData on Crew {
id
firstName
lastName
age
rank
name
gender
position
}
`;
export const MEDICAL_ROSTER_QUERY = gql`
query MedicalRoster($simulatorId: ID!) {
sickbay(simulatorId: $simulatorId) {
id
sickbayRoster {
...CrewData
}
}
crew(simulatorId: $simulatorId) {
...CrewData
}
}
${fragment}
`;
export const MEDICAL_ROSTER_SUB = gql`
subscription Sickbay($simulatorId: ID!) {
sickbayUpdate(simulatorId: $simulatorId) {
id
sickbayRoster {
...CrewData
}
}
}
${fragment}
`;
export const MEDICAL_ROSTER_CREW_SUB = gql`
subscription CrewSub($simulatorId: ID!) {
crewUpdate(simulatorId: $simulatorId) {
...CrewData
}
}
${fragment}
`;
const MedicalRoster = props => {
const {simulator} = props;
const {loading, data} = useQuery(MEDICAL_ROSTER_QUERY, {
variables: {simulatorId: simulator.id},
});
const {data: sickbaySubData} = useSubscription(MEDICAL_ROSTER_SUB, {
variables: {simulatorId: simulator.id},
});
const {data: crewSubData} = useSubscription(MEDICAL_ROSTER_CREW_SUB, {
variables: {simulatorId: simulator.id},
});
if (loading || !data) return null;
const sickbay = sickbaySubData ? sickbaySubData.sickbayUpdate : data.sickbay;
const crew = crewSubData ? crewSubData.crewUpdate : data.crew;
if (!sickbay) return <div>No sickbay</div>;
return <Roster {...props} {...sickbay[0]} crew={crew} />;
};
export default MedicalRoster;