placementt-core 1.20.196 → 11.0.533
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +40 -40
- package/.gitattributes +2 -2
- package/lib/config.d.ts +0 -1
- package/lib/constants.d.ts +5 -2
- package/lib/constants.js +130 -136
- package/lib/constants.js.map +1 -1
- package/lib/features/analytics/useAnalytics.d.ts +0 -1
- package/lib/features/analytics/useAnalytics.js +3 -4
- package/lib/features/analytics/useAnalytics.js.map +1 -1
- package/lib/features/config.d.ts +133 -133
- package/lib/features/config.js +35 -35
- package/lib/features/contacts/contacts.d.ts +75 -75
- package/lib/features/contacts/contacts.js +105 -105
- package/lib/features/contacts/contactsSlice.d.ts +5 -5
- package/lib/features/contacts/useContacts.js +1 -2
- package/lib/features/contacts/useContacts.js.map +1 -1
- package/lib/features/downtime/useDowntime.d.ts +11 -11
- package/lib/features/downtime/useDowntime.js +22 -22
- package/lib/features/dropdown/useDropdown.d.ts +2 -3
- package/lib/features/dropdown/useDropdown.js +1 -2
- package/lib/features/dropdown/useDropdown.js.map +1 -1
- package/lib/features/global/downtime/useDowntime.d.ts +0 -1
- package/lib/features/global/downtime/useDowntime.js +3 -2
- package/lib/features/global/downtime/useDowntime.js.map +1 -1
- package/lib/features/global/users/useUserFunctions.d.ts +0 -1
- package/lib/features/global/users/useUserFunctions.js +6 -7
- package/lib/features/global/users/useUserFunctions.js.map +1 -1
- package/lib/features/placements/studentPlacements/activePlacement.d.ts +1 -1
- package/lib/features/placements/studentPlacements/activePlacement.js +1 -1
- package/lib/features/placements/studentPlacements/activePlacement.js.map +1 -1
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.d.ts +4 -5
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.js +1 -4
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.js.map +1 -1
- package/lib/features/placements/studentPlacements/studentPlacementsSlice.d.ts +63 -63
- package/lib/features/placements/studentPlacements/studentPlacementsSlice.js +81 -81
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.d.ts +4 -4
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.js +1 -1
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.js.map +1 -1
- package/lib/features/placements/studentPlacements/useStudentPlacements.d.ts +0 -1
- package/lib/features/placements/studentPlacements/useStudentPlacements.js +1 -2
- package/lib/features/placements/studentPlacements/useStudentPlacements.js.map +1 -1
- package/lib/features/providerPlacements/providerPlacementsSlice.d.ts +19 -19
- package/lib/features/providerPlacements/providerPlacementsSlice.js +24 -24
- package/lib/features/referrals/useReferrals.d.ts +0 -1
- package/lib/features/referrals/useReferrals.js +1 -2
- package/lib/features/referrals/useReferrals.js.map +1 -1
- package/lib/features/studentPlacements/studentPlacementsSlice.d.ts +62 -62
- package/lib/features/studentPlacements/studentPlacementsSlice.js +87 -87
- package/lib/features/studentPlacements/useStudentPlacements.d.ts +6 -6
- package/lib/features/studentPlacements/useStudentPlacements.js +18 -18
- package/lib/features/updates/useUpdates.js +1 -2
- package/lib/features/updates/useUpdates.js.map +1 -1
- package/lib/features/userSlice.d.ts +26 -26
- package/lib/features/userSlice.js +23 -23
- package/lib/features/users/useUserFunctions.d.ts +25 -25
- package/lib/features/users/useUserFunctions.js +124 -124
- package/lib/features/users/userSlice.d.ts +46 -46
- package/lib/features/users/userSlice.js +48 -48
- package/lib/firebase/firebase.d.ts +1 -1
- package/lib/firebase/firebase.js +9 -4
- package/lib/firebase/firebase.js.map +1 -1
- package/lib/firebase/firebaseConfig.js +3 -0
- package/lib/firebase/firebaseConfig.js.map +1 -1
- package/lib/firebase/firebaseQuery.js +3 -0
- package/lib/firebase/firebaseQuery.js.map +1 -1
- package/lib/firebase/persistence.js +2 -2
- package/lib/firebase/persistence.js.map +1 -1
- package/lib/firebase/readDatabase.d.ts +9 -6
- package/lib/firebase/readDatabase.js +16 -6
- package/lib/firebase/readDatabase.js.map +1 -1
- package/lib/firebase/util.d.ts +3 -4
- package/lib/firebase/util.js +49 -4
- package/lib/firebase/util.js.map +1 -1
- package/lib/firebase/writeDatabase.d.ts +3 -3
- package/lib/firebase/writeDatabase.js +7 -1
- package/lib/firebase/writeDatabase.js.map +1 -1
- package/lib/hooks.d.ts +384 -23
- package/lib/hooks.js +1342 -223
- package/lib/hooks.js.map +1 -1
- package/lib/images/GatsbyBenchmarks.d.ts +0 -1
- package/lib/images/GatsbyBenchmarks.js +1 -1
- package/lib/images/GatsbyBenchmarks.js.map +1 -1
- package/lib/reduxHooks.d.ts +11 -20
- package/lib/reduxHooks.js +28 -18
- package/lib/reduxHooks.js.map +1 -1
- package/lib/tasksAndTips.d.ts +25 -5
- package/lib/tasksAndTips.js +346 -48
- package/lib/tasksAndTips.js.map +1 -1
- package/lib/typeDefinitions.d.ts +478 -53
- package/lib/util.d.ts +1 -0
- package/lib/util.js +78 -6
- package/lib/util.js.map +1 -1
- package/package.json +52 -49
- package/src/DatabaseDefinitions.ts +18 -18
- package/src/apiCalls.ts +128 -128
- package/src/config.ts +50 -50
- package/src/constants.ts +708 -707
- package/src/databaseTypes.ts +42 -42
- package/src/features/analytics/useAnalytics.tsx +55 -55
- package/src/features/contacts/contactsSlice.ts +147 -147
- package/src/features/contacts/useContacts.tsx +73 -73
- package/src/features/dropdown/useDropdown.tsx +52 -52
- package/src/features/global/downtime/useDowntime.tsx +19 -18
- package/src/features/global/users/useUserFunctions.tsx +132 -132
- package/src/features/jobs/jobsSlice.ts +65 -65
- package/src/features/placements/studentPlacements/activePlacement.ts +63 -63
- package/src/features/placements/studentPlacements/completedStudentPlacementsSlice.ts +94 -97
- package/src/features/placements/studentPlacements/upcomingStudentPlacementsSlice.ts +108 -108
- package/src/features/placements/studentPlacements/useStudentPlacements.tsx +33 -33
- package/src/features/placements/types.ts +10 -10
- package/src/features/referrals/useReferrals.tsx +56 -56
- package/src/features/updates/useUpdates.tsx +36 -36
- package/src/firebase/firebase.tsx +142 -138
- package/src/firebase/firebaseConfig.tsx +45 -42
- package/src/firebase/firebaseQuery.tsx +143 -140
- package/src/firebase/persistence.ts +84 -84
- package/src/firebase/readDatabase.tsx +208 -197
- package/src/firebase/util.tsx +352 -308
- package/src/firebase/writeDatabase.tsx +75 -68
- package/src/hooks.tsx +3395 -1943
- package/src/images/GatsbyBenchmarks.tsx +711 -711
- package/src/images/LogFuturePlacement.jsx +64 -64
- package/src/images/LogPreviousPlacement.jsx +228 -228
- package/src/images/gatsby_benchmarks.svg +466 -466
- package/src/images/log_future_placement.svg +114 -114
- package/src/images/log_previous_placement.svg +199 -199
- package/src/index.ts +34 -34
- package/src/readDatabase.tsx +3 -3
- package/src/reduxHooks.ts +183 -170
- package/src/tasksAndTips.ts +744 -410
- package/src/tutorialTips.ts +58 -58
- package/src/typeDefinitions.ts +899 -503
- package/src/util.ts +132 -47
- package/tsconfig.dev.json +5 -5
- package/tsconfig.json +21 -21
|
@@ -1,98 +1,95 @@
|
|
|
1
|
-
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
-
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
-
import { PlacementState } from "../types";
|
|
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
|
-
const
|
|
66
|
-
|
|
67
|
-
newPlacements[
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
export const {addCompletedStudentPlacements, addCompletedStudentPlacement, setCompletedStudentPlacements, setLastCompletedPlacement, setCompletedStatus, setCompletedIsDraft} = completedStudentPlacementsSlice.actions
|
|
97
|
-
|
|
1
|
+
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
+
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
+
import { PlacementState } from "../types";
|
|
4
|
+
|
|
5
|
+
const initialState: PlacementState = {
|
|
6
|
+
status: "",
|
|
7
|
+
lastPlacement: undefined,
|
|
8
|
+
values: {}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
export const updateCompletedStudentPlacement = createAsyncThunk(
|
|
13
|
+
"completedStudentPlacements/updateStudentPlacement",
|
|
14
|
+
async ({ placementId, attributes }:{placementId: string, attributes: any}, {rejectWithValue}) => {
|
|
15
|
+
const firebaseQuery = new FirebaseQuery();
|
|
16
|
+
try {
|
|
17
|
+
await firebaseQuery.update(["placements", placementId], attributes);
|
|
18
|
+
return {attributes, placementId}
|
|
19
|
+
|
|
20
|
+
} catch(error) {
|
|
21
|
+
return rejectWithValue(error);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export const deleteCompletedStudentPlacement = createAsyncThunk(
|
|
27
|
+
"completedStudentPlacements/deleteStudentPlacement",
|
|
28
|
+
async ({placementId}:{placementId: string}, { rejectWithValue}) => {
|
|
29
|
+
const firebaseQuery = new FirebaseQuery();
|
|
30
|
+
try {
|
|
31
|
+
await firebaseQuery.delete(["placements", placementId]);
|
|
32
|
+
return placementId
|
|
33
|
+
} catch(error) {
|
|
34
|
+
return rejectWithValue(error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
export const completedStudentPlacementsSlice = createSlice({
|
|
42
|
+
name: "completedStudentPlacements",
|
|
43
|
+
initialState,
|
|
44
|
+
|
|
45
|
+
reducers: {
|
|
46
|
+
setCompletedStudentPlacements: (state, action) => {
|
|
47
|
+
state.values = action.payload
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
setCompletedStatus: (state, action) => {
|
|
51
|
+
state.status = action.payload
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
addCompletedStudentPlacements: (state, action) => {
|
|
55
|
+
state.values = {...state.values, ...action.payload}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
setCompletedIsDraft: (state, action) => {
|
|
59
|
+
const {placementId, draft} = action.payload
|
|
60
|
+
state.values[placementId].draft = draft
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
addCompletedStudentPlacement: (state, action) => {
|
|
64
|
+
const {placement, placementId} = action.payload
|
|
65
|
+
const newPlacements = {...state.values};
|
|
66
|
+
newPlacements[placementId] = placement;
|
|
67
|
+
state.values = Object.fromEntries(Object.entries(newPlacements).sort(([, a], [, b]) => b.startDate > a.endDate ? 1 : -1));
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
setLastCompletedPlacement: (state, action) => {
|
|
71
|
+
state.lastPlacement = action.payload
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
extraReducers(builder){
|
|
77
|
+
builder
|
|
78
|
+
.addCase(updateCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
79
|
+
state.values[action.payload.placementId] = { ...state.values[action.payload.placementId], ...action.payload.attributes };
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
.addCase(deleteCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
84
|
+
const placementIdToDelete = action.payload;
|
|
85
|
+
const newPlacements = { ...state, values: { ...state.values } };
|
|
86
|
+
delete newPlacements.values[placementIdToDelete];
|
|
87
|
+
return newPlacements;
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
export const {addCompletedStudentPlacements, addCompletedStudentPlacement, setCompletedStudentPlacements, setLastCompletedPlacement, setCompletedStatus, setCompletedIsDraft} = completedStudentPlacementsSlice.actions
|
|
94
|
+
|
|
98
95
|
export default completedStudentPlacementsSlice.reducer;
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
-
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
-
import { PlacementState } from "../types";
|
|
4
|
-
import { StudentPlacementData } from "../../../typeDefinitions";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export interface UpcomingPlacementState extends PlacementState {
|
|
8
|
-
upcoming?: StudentPlacementData;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const initialState: UpcomingPlacementState = {
|
|
12
|
-
status: "",
|
|
13
|
-
lastPlacement: undefined,
|
|
14
|
-
upcoming: undefined,
|
|
15
|
-
values: {}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export const updateUpcomingStudentPlacement = createAsyncThunk(
|
|
20
|
-
"upcomingStudentPlacements/updateStudentPlacement",
|
|
21
|
-
async ({ placementId, attributes }:{placementId: string, attributes:
|
|
22
|
-
const firebaseQuery = new FirebaseQuery();
|
|
23
|
-
try {
|
|
24
|
-
await firebaseQuery.update(["placements", placementId], attributes);
|
|
25
|
-
return {attributes, placementId}
|
|
26
|
-
|
|
27
|
-
} catch(error) {
|
|
28
|
-
return rejectWithValue(error);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
export const deleteUpcomingStudentPlacement = createAsyncThunk(
|
|
34
|
-
"upcomingStudentPlacements/deleteStudentPlacement",
|
|
35
|
-
async ({placementId}:{placementId: string}, { rejectWithValue}) => {
|
|
36
|
-
const firebaseQuery = new FirebaseQuery();
|
|
37
|
-
try {
|
|
38
|
-
await firebaseQuery.delete(["placements", placementId]);
|
|
39
|
-
return placementId
|
|
40
|
-
|
|
41
|
-
} catch(error) {
|
|
42
|
-
return rejectWithValue(error);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export const upcomingStudentsPlacementsSlice = createSlice({
|
|
50
|
-
name: "upcomingStudentsPlacements",
|
|
51
|
-
initialState,
|
|
52
|
-
|
|
53
|
-
reducers: {
|
|
54
|
-
setUpcomingStudentPlacements: (state, action) => {
|
|
55
|
-
state.values = action.payload
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
setUpcomingStatus: (state, action) => {
|
|
59
|
-
state.status = action.payload
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
setUpcoming: (state, action) => {
|
|
63
|
-
state.upcoming = action.payload
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
setUpcomingIsDraft: (state, action) => {
|
|
67
|
-
const {placementId, draft} = action.payload
|
|
68
|
-
state.values[placementId].draft = draft
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
addUpcomingStudentPlacements: (state, action) => {
|
|
72
|
-
state.values = {...state.values, ...action.payload}
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
addUpcomingStudentPlacement: (state, action) => {
|
|
76
|
-
const {placement, placementId} = action.payload
|
|
77
|
-
const newPlacements = {...state.values};
|
|
78
|
-
newPlacements[placementId] = placement;
|
|
79
|
-
state.values = Object.fromEntries(Object.entries(newPlacements).sort(([, a], [, b]) => b.startDate > a.endDate ? 1 : -1));
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
setLastUpcomingPlacement: (state, action) => {
|
|
83
|
-
state.lastPlacement = action.payload
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
extraReducers(builder){
|
|
89
|
-
builder
|
|
90
|
-
.addCase(updateUpcomingStudentPlacement.fulfilled, (state, action) => {
|
|
91
|
-
const {attributes, placementId} = action.payload
|
|
92
|
-
if (!placementId) return
|
|
93
|
-
state.values[placementId] =
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
.addCase(deleteUpcomingStudentPlacement.fulfilled, (state, action) => {
|
|
98
|
-
const placementIdToDelete = action.payload;
|
|
99
|
-
const newPlacements = { ...state, values: { ...state.values } };
|
|
100
|
-
delete newPlacements.values[placementIdToDelete];
|
|
101
|
-
return newPlacements;
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
export const {addUpcomingStudentPlacements, addUpcomingStudentPlacement, setUpcomingStudentPlacements, setLastUpcomingPlacement, setUpcoming, setUpcomingStatus, setUpcomingIsDraft} = upcomingStudentsPlacementsSlice.actions
|
|
108
|
-
|
|
1
|
+
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
+
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
+
import { PlacementState } from "../types";
|
|
4
|
+
import { StudentPlacementData } from "../../../typeDefinitions";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export interface UpcomingPlacementState extends PlacementState {
|
|
8
|
+
upcoming?: StudentPlacementData;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const initialState: UpcomingPlacementState = {
|
|
12
|
+
status: "",
|
|
13
|
+
lastPlacement: undefined,
|
|
14
|
+
upcoming: undefined,
|
|
15
|
+
values: {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export const updateUpcomingStudentPlacement = createAsyncThunk(
|
|
20
|
+
"upcomingStudentPlacements/updateStudentPlacement",
|
|
21
|
+
async ({ placementId, attributes }:{placementId: string, attributes: any}, {rejectWithValue}) => {
|
|
22
|
+
const firebaseQuery = new FirebaseQuery();
|
|
23
|
+
try {
|
|
24
|
+
await firebaseQuery.update(["placements", placementId], attributes);
|
|
25
|
+
return {attributes, placementId}
|
|
26
|
+
|
|
27
|
+
} catch(error) {
|
|
28
|
+
return rejectWithValue(error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export const deleteUpcomingStudentPlacement = createAsyncThunk(
|
|
34
|
+
"upcomingStudentPlacements/deleteStudentPlacement",
|
|
35
|
+
async ({placementId}:{placementId: string}, { rejectWithValue}) => {
|
|
36
|
+
const firebaseQuery = new FirebaseQuery();
|
|
37
|
+
try {
|
|
38
|
+
await firebaseQuery.delete(["placements", placementId]);
|
|
39
|
+
return placementId
|
|
40
|
+
|
|
41
|
+
} catch(error) {
|
|
42
|
+
return rejectWithValue(error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export const upcomingStudentsPlacementsSlice = createSlice({
|
|
50
|
+
name: "upcomingStudentsPlacements",
|
|
51
|
+
initialState,
|
|
52
|
+
|
|
53
|
+
reducers: {
|
|
54
|
+
setUpcomingStudentPlacements: (state, action) => {
|
|
55
|
+
state.values = action.payload
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
setUpcomingStatus: (state, action) => {
|
|
59
|
+
state.status = action.payload
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
setUpcoming: (state, action) => {
|
|
63
|
+
state.upcoming = action.payload
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
setUpcomingIsDraft: (state, action) => {
|
|
67
|
+
const {placementId, draft} = action.payload
|
|
68
|
+
state.values[placementId].draft = draft
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
addUpcomingStudentPlacements: (state, action) => {
|
|
72
|
+
state.values = {...state.values, ...action.payload}
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
addUpcomingStudentPlacement: (state, action) => {
|
|
76
|
+
const {placement, placementId} = action.payload
|
|
77
|
+
const newPlacements = {...state.values};
|
|
78
|
+
newPlacements[placementId] = placement;
|
|
79
|
+
state.values = Object.fromEntries(Object.entries(newPlacements).sort(([, a], [, b]) => b.startDate > a.endDate ? 1 : -1));
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
setLastUpcomingPlacement: (state, action) => {
|
|
83
|
+
state.lastPlacement = action.payload
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
extraReducers(builder){
|
|
89
|
+
builder
|
|
90
|
+
.addCase(updateUpcomingStudentPlacement.fulfilled, (state, action) => {
|
|
91
|
+
const {attributes, placementId} = action.payload
|
|
92
|
+
if (!placementId) return
|
|
93
|
+
state.values[placementId] = attributes;
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
.addCase(deleteUpcomingStudentPlacement.fulfilled, (state, action) => {
|
|
98
|
+
const placementIdToDelete = action.payload;
|
|
99
|
+
const newPlacements = { ...state, values: { ...state.values } };
|
|
100
|
+
delete newPlacements.values[placementIdToDelete];
|
|
101
|
+
return newPlacements;
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
export const {addUpcomingStudentPlacements, addUpcomingStudentPlacement, setUpcomingStudentPlacements, setLastUpcomingPlacement, setUpcoming, setUpcomingStatus, setUpcomingIsDraft} = upcomingStudentsPlacementsSlice.actions
|
|
108
|
+
|
|
109
109
|
export default upcomingStudentsPlacementsSlice.reducer;
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { QueryConstraint, where } from "firebase/firestore";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
4
|
-
import { getPlacementsWhere } from "../../../firebase/readDatabase";
|
|
5
|
-
import { convertDate } from "../../../firebase/util";
|
|
6
|
-
import { useStudentPlacementList } from "../../../hooks";
|
|
7
|
-
import { StudentPlacementData, UserData } from "../../../typeDefinitions";
|
|
8
|
-
|
|
9
|
-
export function useStudentPlacements({user, uid, queryConstraint}: {user: UserData, uid?: string, queryConstraint?: QueryConstraint[]}){ const firebaseQuery = new FirebaseQuery()
|
|
10
|
-
const [activePlacement, setActivePlacement] = useState<StudentPlacementData>();
|
|
11
|
-
const {placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, reset} = useStudentPlacementList({...{user: user as UserData, uid: uid || user?.id, queryConstraint}})
|
|
12
|
-
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
firebaseQuery.getDocsWhere(["placements"], [where("active", "==", true), where("uid", "==", user?.id)]).then((docs) => {
|
|
15
|
-
const d = {...docs as {[key:string]: StudentPlacementData}}
|
|
16
|
-
setActivePlacement(d[Object.keys(d)[0]] || undefined);
|
|
17
|
-
});
|
|
18
|
-
}, [user?.id]);
|
|
19
|
-
|
|
20
|
-
const getUserPlacements = async () => {
|
|
21
|
-
return await getPlacementsWhere({w: where("uid", "==", user?.id)})
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const getPlacementsStart = async (start: Date, end: Date) => {
|
|
25
|
-
return await firebaseQuery.getDocsWhere("placements", [where("uid", "==", user?.id), where("startDate", ">=", convertDate(start, "dbstring")), where("startDate", "<=", convertDate(end, "dbstring"))]) as {[key:string]: StudentPlacementData};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const getPlacementsEnd = async (end: Date) => {
|
|
29
|
-
return await firebaseQuery.getDocsWhere("placements", [where("uid", "==", user?.id), where("endDate", ">=", convertDate(end, "dbstring")), where("endDate", "<=", convertDate(end, "dbstring"))]) as {[key:string]: StudentPlacementData};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return ({...{placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, resetPlacements: reset, getUserPlacements, getPlacementsStart, getPlacementsEnd, activePlacement}});
|
|
33
|
-
}
|
|
1
|
+
import { QueryConstraint, where } from "firebase/firestore";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
4
|
+
import { getPlacementsWhere } from "../../../firebase/readDatabase";
|
|
5
|
+
import { convertDate } from "../../../firebase/util";
|
|
6
|
+
import { useStudentPlacementList } from "../../../hooks";
|
|
7
|
+
import { StudentPlacementData, UserData } from "../../../typeDefinitions";
|
|
8
|
+
|
|
9
|
+
export function useStudentPlacements({user, uid, queryConstraint}: {user: UserData, uid?: string, queryConstraint?: QueryConstraint[]}){ const firebaseQuery = new FirebaseQuery()
|
|
10
|
+
const [activePlacement, setActivePlacement] = useState<StudentPlacementData>();
|
|
11
|
+
const {placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, reset} = useStudentPlacementList({...{user: user as UserData, uid: uid || user?.id, queryConstraint}})
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
firebaseQuery.getDocsWhere(["placements"], [where("active", "==", true), where("uid", "==", user?.id)]).then((docs) => {
|
|
15
|
+
const d = {...docs as {[key:string]: StudentPlacementData}}
|
|
16
|
+
setActivePlacement(d[Object.keys(d)[0]] || undefined);
|
|
17
|
+
});
|
|
18
|
+
}, [user?.id]);
|
|
19
|
+
|
|
20
|
+
const getUserPlacements = async () => {
|
|
21
|
+
return await getPlacementsWhere({w: where("uid", "==", user?.id)})
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const getPlacementsStart = async (start: Date, end: Date) => {
|
|
25
|
+
return await firebaseQuery.getDocsWhere("placements", [where("uid", "==", user?.id), where("startDate", ">=", convertDate(start, "dbstring")), where("startDate", "<=", convertDate(end, "dbstring"))]) as {[key:string]: StudentPlacementData};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const getPlacementsEnd = async (end: Date) => {
|
|
29
|
+
return await firebaseQuery.getDocsWhere("placements", [where("uid", "==", user?.id), where("endDate", ">=", convertDate(end, "dbstring")), where("endDate", "<=", convertDate(end, "dbstring"))]) as {[key:string]: StudentPlacementData};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return ({...{placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, resetPlacements: reset, getUserPlacements, getPlacementsStart, getPlacementsEnd, activePlacement}});
|
|
33
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import { DocumentData, QueryDocumentSnapshot } from "firebase/firestore"
|
|
3
|
-
import { StudentPlacementData } from "../../typeDefinitions"
|
|
4
|
-
|
|
5
|
-
export type PlacementState = {
|
|
6
|
-
status: string
|
|
7
|
-
lastPlacement: QueryDocumentSnapshot<DocumentData> | undefined,
|
|
8
|
-
values: {
|
|
9
|
-
[key: string]: StudentPlacementData
|
|
10
|
-
}
|
|
1
|
+
|
|
2
|
+
import { DocumentData, QueryDocumentSnapshot } from "firebase/firestore"
|
|
3
|
+
import { StudentPlacementData } from "../../typeDefinitions"
|
|
4
|
+
|
|
5
|
+
export type PlacementState = {
|
|
6
|
+
status: string
|
|
7
|
+
lastPlacement: QueryDocumentSnapshot<DocumentData> | undefined,
|
|
8
|
+
values: {
|
|
9
|
+
[key: string]: StudentPlacementData
|
|
10
|
+
}
|
|
11
11
|
}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { documentId, where } from "firebase/firestore";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import FirebaseQuery from "../../firebase/firebaseQuery";
|
|
4
|
-
import { UserData } from "../../typeDefinitions";
|
|
5
|
-
|
|
6
|
-
export function useReferrals({user}: {user: UserData}){
|
|
7
|
-
const firebaseQuery = new FirebaseQuery();
|
|
8
|
-
const [showNameConsent, setShowNameConsent] = useState<boolean>(user?.shareNameWithReferralLeaderboardConsent === undefined ? true : false);
|
|
9
|
-
|
|
10
|
-
const getReferralCode = async (fiveLetterWords: string[]): Promise<string> => {
|
|
11
|
-
var potentialWord = fiveLetterWords[Math.floor(Math.random()*fiveLetterWords.length)];
|
|
12
|
-
const existingReferral = await firebaseQuery.getDocsWhere("referrals", where(documentId(), "==", potentialWord));
|
|
13
|
-
|
|
14
|
-
if (Object.keys(existingReferral || {}).length > 0) {
|
|
15
|
-
return await getReferralCode(fiveLetterWords);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
await firebaseQuery.set(["referrals", potentialWord], {
|
|
19
|
-
name: user?.id,
|
|
20
|
-
expiry: new Date(2040,10,30),
|
|
21
|
-
volume: 1000,
|
|
22
|
-
product: "students"
|
|
23
|
-
|
|
24
|
-
}).then(() => {
|
|
25
|
-
if (!user) return;
|
|
26
|
-
firebaseQuery.update(["users", user.id], {
|
|
27
|
-
referralCode: potentialWord
|
|
28
|
-
})
|
|
29
|
-
//dispatch(updateUser({userId: user.id, attributes: {referralCode: potentialWord}}))
|
|
30
|
-
// dispatch(setUser((state: UserData) => ({...state, referralCode: potentialWord})))
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
return potentialWord;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const consent = async (consent: boolean) => {
|
|
37
|
-
if (!user) return
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
await firebaseQuery.update(["users", user.id], {
|
|
41
|
-
shareNameWithReferralLeaderboardConsent: consent,
|
|
42
|
-
shareNameWithReferralLeaderboardConsentDate: (new Date()).toISOString()
|
|
43
|
-
})
|
|
44
|
-
// dispatch(updateUser({userId: user.id, attributes: {
|
|
45
|
-
// shareNameWithReferralLeaderboardConsent: consent,
|
|
46
|
-
// shareNameWithReferralLeaderboardConsentDate: (new Date()).toISOString()}
|
|
47
|
-
// }))
|
|
48
|
-
}
|
|
49
|
-
catch(error) {
|
|
50
|
-
console.log(error)
|
|
51
|
-
}
|
|
52
|
-
setShowNameConsent(false);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return ({...{getReferralCode, showNameConsent, setShowNameConsent, consent}})
|
|
56
|
-
|
|
1
|
+
import { documentId, where } from "firebase/firestore";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import FirebaseQuery from "../../firebase/firebaseQuery";
|
|
4
|
+
import { UserData } from "../../typeDefinitions";
|
|
5
|
+
|
|
6
|
+
export function useReferrals({user}: {user: UserData}){
|
|
7
|
+
const firebaseQuery = new FirebaseQuery();
|
|
8
|
+
const [showNameConsent, setShowNameConsent] = useState<boolean>(user?.shareNameWithReferralLeaderboardConsent === undefined ? true : false);
|
|
9
|
+
|
|
10
|
+
const getReferralCode = async (fiveLetterWords: string[]): Promise<string> => {
|
|
11
|
+
var potentialWord = fiveLetterWords[Math.floor(Math.random()*fiveLetterWords.length)];
|
|
12
|
+
const existingReferral = await firebaseQuery.getDocsWhere("referrals", where(documentId(), "==", potentialWord));
|
|
13
|
+
|
|
14
|
+
if (Object.keys(existingReferral || {}).length > 0) {
|
|
15
|
+
return await getReferralCode(fiveLetterWords);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
await firebaseQuery.set(["referrals", potentialWord], {
|
|
19
|
+
name: user?.id,
|
|
20
|
+
expiry: new Date(2040,10,30),
|
|
21
|
+
volume: 1000,
|
|
22
|
+
product: "students"
|
|
23
|
+
|
|
24
|
+
}).then(() => {
|
|
25
|
+
if (!user) return;
|
|
26
|
+
firebaseQuery.update(["users", user.id], {
|
|
27
|
+
referralCode: potentialWord
|
|
28
|
+
})
|
|
29
|
+
//dispatch(updateUser({userId: user.id, attributes: {referralCode: potentialWord}}))
|
|
30
|
+
// dispatch(setUser((state: UserData) => ({...state, referralCode: potentialWord})))
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
return potentialWord;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const consent = async (consent: boolean) => {
|
|
37
|
+
if (!user) return
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
await firebaseQuery.update(["users", user.id], {
|
|
41
|
+
shareNameWithReferralLeaderboardConsent: consent,
|
|
42
|
+
shareNameWithReferralLeaderboardConsentDate: (new Date()).toISOString()
|
|
43
|
+
})
|
|
44
|
+
// dispatch(updateUser({userId: user.id, attributes: {
|
|
45
|
+
// shareNameWithReferralLeaderboardConsent: consent,
|
|
46
|
+
// shareNameWithReferralLeaderboardConsentDate: (new Date()).toISOString()}
|
|
47
|
+
// }))
|
|
48
|
+
}
|
|
49
|
+
catch(error) {
|
|
50
|
+
console.log(error)
|
|
51
|
+
}
|
|
52
|
+
setShowNameConsent(false);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return ({...{getReferralCode, showNameConsent, setShowNameConsent, consent}})
|
|
56
|
+
|
|
57
57
|
}
|