placementt-core 1.20.211 → 11.10.151
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 +6 -2
- package/lib/constants.js +136 -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 +1 -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 +7 -8
- 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/completedStudentPlacementsSlice.d.ts +2 -2
- 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 +2 -2
- 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 +3 -1
- package/lib/firebase/firebase.js +9 -3
- 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.d.ts +3 -1
- package/lib/firebase/firebaseQuery.js +11 -1
- 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 +8 -7
- package/lib/firebase/readDatabase.js +41 -8
- 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 +7 -3
- package/lib/firebase/writeDatabase.js +9 -2
- package/lib/firebase/writeDatabase.js.map +1 -1
- package/lib/hooks.d.ts +476 -20
- package/lib/hooks.js +1855 -237
- 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 +9 -2
- package/lib/reduxHooks.js +36 -9
- package/lib/reduxHooks.js.map +1 -1
- package/lib/tasksAndTips.d.ts +25 -5
- package/lib/tasksAndTips.js +517 -48
- package/lib/tasksAndTips.js.map +1 -1
- package/lib/typeDefinitions.d.ts +472 -55
- package/lib/util.d.ts +1 -0
- package/lib/util.js +85 -7
- 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 +714 -707
- package/src/databaseTypes.ts +42 -42
- package/src/features/analytics/useAnalytics.tsx +64 -64
- 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 +23 -23
- package/src/features/global/users/useUserFunctions.tsx +132 -132
- package/src/features/jobs/jobsSlice.ts +65 -65
- package/src/features/placements/studentPlacements/activePlacement.ts +68 -68
- package/src/features/placements/studentPlacements/completedStudentPlacementsSlice.ts +97 -97
- package/src/features/placements/studentPlacements/upcomingStudentPlacementsSlice.ts +108 -108
- package/src/features/placements/studentPlacements/useStudentPlacements.tsx +9 -9
- package/src/features/placements/types.ts +10 -10
- package/src/features/referrals/useReferrals.tsx +56 -56
- package/src/features/updates/useUpdates.tsx +38 -38
- package/src/firebase/firebase.tsx +144 -138
- package/src/firebase/firebaseConfig.tsx +45 -42
- package/src/firebase/firebaseQuery.tsx +150 -140
- package/src/firebase/persistence.ts +84 -84
- package/src/firebase/readDatabase.tsx +235 -197
- package/src/firebase/util.tsx +352 -308
- package/src/firebase/writeDatabase.tsx +77 -68
- package/src/hooks.tsx +4029 -1928
- 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 +231 -200
- package/src/tasksAndTips.ts +917 -410
- package/src/tutorialTips.ts +58 -58
- package/src/typeDefinitions.ts +893 -503
- package/src/util.ts +137 -47
- package/tsconfig.dev.json +5 -5
- package/tsconfig.json +21 -21
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
-
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
-
import { StudentPlacementData } from "../../../typeDefinitions"
|
|
4
|
-
import { orderBy, where } from "firebase/firestore";
|
|
5
|
-
|
|
6
|
-
type InitialActivePlacementSlice = {
|
|
7
|
-
status: string
|
|
8
|
-
values: StudentPlacementData | undefined
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const initialState: InitialActivePlacementSlice = {
|
|
12
|
-
status: "",
|
|
13
|
-
values: undefined,
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const fetchActivePlacement = createAsyncThunk(
|
|
17
|
-
"studentPlacements/fetchActivePlacement",
|
|
18
|
-
async ({userId}: {userId: string}) => {
|
|
19
|
-
const firebaseQuery = new FirebaseQuery();
|
|
20
|
-
try {
|
|
21
|
-
const docs = await firebaseQuery.getDocsWhere(["placements"], [where("active", "==", true), where("uid", "==", userId), where("completed", "==", false), orderBy("endDate")]);
|
|
22
|
-
const d = { ...docs as { [key: string]: StudentPlacementData } };
|
|
23
|
-
return d[Object.keys(d)[0]] || undefined;
|
|
24
|
-
|
|
25
|
-
} catch (error) {
|
|
26
|
-
console.log(error)
|
|
27
|
-
return undefined
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
export const activePlacementSlice = createSlice({
|
|
33
|
-
name: "activePlacement",
|
|
34
|
-
initialState,
|
|
35
|
-
|
|
36
|
-
reducers: {
|
|
37
|
-
setActivePlacement: (state, action) => {
|
|
38
|
-
state.values = action.payload
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
editActivePlacement: (state, action) => {
|
|
42
|
-
state.values = {...state.values, ...action.payload}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
extraReducers(builder) {
|
|
48
|
-
builder
|
|
49
|
-
.addCase(fetchActivePlacement.fulfilled, (state, action) => {
|
|
50
|
-
state.values = action.payload
|
|
51
|
-
state.status = "success"
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
.addCase(fetchActivePlacement.pending, (state) => {
|
|
55
|
-
state.status = "loading"
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
.addCase(fetchActivePlacement.rejected, (state) => {
|
|
59
|
-
state.status = "error"
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
export const {setActivePlacement, editActivePlacement} = activePlacementSlice.actions
|
|
68
|
-
|
|
1
|
+
import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
|
|
2
|
+
import FirebaseQuery from "../../../firebase/firebaseQuery";
|
|
3
|
+
import { StudentPlacementData } from "../../../typeDefinitions"
|
|
4
|
+
import { orderBy, where } from "firebase/firestore";
|
|
5
|
+
|
|
6
|
+
type InitialActivePlacementSlice = {
|
|
7
|
+
status: string
|
|
8
|
+
values: StudentPlacementData | undefined
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const initialState: InitialActivePlacementSlice = {
|
|
12
|
+
status: "",
|
|
13
|
+
values: undefined,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const fetchActivePlacement = createAsyncThunk(
|
|
17
|
+
"studentPlacements/fetchActivePlacement",
|
|
18
|
+
async ({userId}: {userId: string}) => {
|
|
19
|
+
const firebaseQuery = new FirebaseQuery();
|
|
20
|
+
try {
|
|
21
|
+
const docs = await firebaseQuery.getDocsWhere(["placements"], [where("active", "==", true), where("uid", "==", userId), where("completed", "==", false), orderBy("endDate")]);
|
|
22
|
+
const d = { ...docs as { [key: string]: StudentPlacementData } };
|
|
23
|
+
return d[Object.keys(d)[0]] || undefined;
|
|
24
|
+
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.log(error)
|
|
27
|
+
return undefined
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
export const activePlacementSlice = createSlice({
|
|
33
|
+
name: "activePlacement",
|
|
34
|
+
initialState,
|
|
35
|
+
|
|
36
|
+
reducers: {
|
|
37
|
+
setActivePlacement: (state, action) => {
|
|
38
|
+
state.values = action.payload
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
editActivePlacement: (state, action) => {
|
|
42
|
+
state.values = {...state.values, ...action.payload}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
extraReducers(builder) {
|
|
48
|
+
builder
|
|
49
|
+
.addCase(fetchActivePlacement.fulfilled, (state, action) => {
|
|
50
|
+
state.values = action.payload
|
|
51
|
+
state.status = "success"
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
.addCase(fetchActivePlacement.pending, (state) => {
|
|
55
|
+
state.status = "loading"
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
.addCase(fetchActivePlacement.rejected, (state) => {
|
|
59
|
+
state.status = "error"
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
export const {setActivePlacement, editActivePlacement} = activePlacementSlice.actions
|
|
68
|
+
|
|
69
69
|
export default activePlacementSlice.reducer;
|
|
@@ -1,98 +1,98 @@
|
|
|
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
|
-
const initialState: PlacementState = {
|
|
7
|
-
status: "",
|
|
8
|
-
lastPlacement: undefined,
|
|
9
|
-
values: {}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export const updateCompletedStudentPlacement = createAsyncThunk(
|
|
14
|
-
"completedStudentPlacements/updateStudentPlacement",
|
|
15
|
-
async ({ placementId, attributes }:{placementId: string, attributes: Partial<StudentPlacementData>}, {rejectWithValue}) => {
|
|
16
|
-
const firebaseQuery = new FirebaseQuery();
|
|
17
|
-
try {
|
|
18
|
-
await firebaseQuery.update(["placements", placementId], attributes);
|
|
19
|
-
return {attributes, placementId}
|
|
20
|
-
|
|
21
|
-
} catch(error) {
|
|
22
|
-
return rejectWithValue(error);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
export const deleteCompletedStudentPlacement = createAsyncThunk(
|
|
28
|
-
"completedStudentPlacements/deleteStudentPlacement",
|
|
29
|
-
async ({placementId}:{placementId: string}, { rejectWithValue}) => {
|
|
30
|
-
const firebaseQuery = new FirebaseQuery();
|
|
31
|
-
try {
|
|
32
|
-
await firebaseQuery.delete(["placements", placementId]);
|
|
33
|
-
return placementId
|
|
34
|
-
} catch(error) {
|
|
35
|
-
return rejectWithValue(error);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export const completedStudentPlacementsSlice = createSlice({
|
|
43
|
-
name: "completedStudentPlacements",
|
|
44
|
-
initialState,
|
|
45
|
-
|
|
46
|
-
reducers: {
|
|
47
|
-
setCompletedStudentPlacements: (state, action) => {
|
|
48
|
-
state.values = action.payload
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
setCompletedStatus: (state, action) => {
|
|
52
|
-
state.status = action.payload
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
addCompletedStudentPlacements: (state, action) => {
|
|
56
|
-
state.values = {...state.values, ...action.payload}
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
setCompletedIsDraft: (state, action) => {
|
|
60
|
-
const {placementId, draft} = action.payload
|
|
61
|
-
state.values[placementId].draft = draft
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
addCompletedStudentPlacement: (state, action) => {
|
|
65
|
-
const {placement, placementId} = action.payload
|
|
66
|
-
const newPlacements = {...state.values};
|
|
67
|
-
newPlacements[placementId] = placement;
|
|
68
|
-
state.values = Object.fromEntries(Object.entries(newPlacements).sort(([, a], [, b]) => b.startDate > a.endDate ? 1 : -1));
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
setLastCompletedPlacement: (state, action) => {
|
|
72
|
-
state.lastPlacement = action.payload
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
extraReducers(builder){
|
|
78
|
-
builder
|
|
79
|
-
.addCase(updateCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
80
|
-
const {attributes, placementId} = action.payload
|
|
81
|
-
if (!placementId) return
|
|
82
|
-
state.values[placementId] = {...state.values[placementId], ...attributes};
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
.addCase(deleteCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
87
|
-
const placementIdToDelete = action.payload;
|
|
88
|
-
const newPlacements = { ...state, values: { ...state.values } };
|
|
89
|
-
delete newPlacements.values[placementIdToDelete];
|
|
90
|
-
return newPlacements;
|
|
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
|
+
import { StudentPlacementData } from "../../../typeDefinitions";
|
|
5
|
+
|
|
6
|
+
const initialState: PlacementState = {
|
|
7
|
+
status: "",
|
|
8
|
+
lastPlacement: undefined,
|
|
9
|
+
values: {}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
export const updateCompletedStudentPlacement = createAsyncThunk(
|
|
14
|
+
"completedStudentPlacements/updateStudentPlacement",
|
|
15
|
+
async ({ placementId, attributes }:{placementId: string, attributes: Partial<StudentPlacementData>}, {rejectWithValue}) => {
|
|
16
|
+
const firebaseQuery = new FirebaseQuery();
|
|
17
|
+
try {
|
|
18
|
+
await firebaseQuery.update(["placements", placementId], attributes);
|
|
19
|
+
return {attributes, placementId}
|
|
20
|
+
|
|
21
|
+
} catch(error) {
|
|
22
|
+
return rejectWithValue(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export const deleteCompletedStudentPlacement = createAsyncThunk(
|
|
28
|
+
"completedStudentPlacements/deleteStudentPlacement",
|
|
29
|
+
async ({placementId}:{placementId: string}, { rejectWithValue}) => {
|
|
30
|
+
const firebaseQuery = new FirebaseQuery();
|
|
31
|
+
try {
|
|
32
|
+
await firebaseQuery.delete(["placements", placementId]);
|
|
33
|
+
return placementId
|
|
34
|
+
} catch(error) {
|
|
35
|
+
return rejectWithValue(error);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
export const completedStudentPlacementsSlice = createSlice({
|
|
43
|
+
name: "completedStudentPlacements",
|
|
44
|
+
initialState,
|
|
45
|
+
|
|
46
|
+
reducers: {
|
|
47
|
+
setCompletedStudentPlacements: (state, action) => {
|
|
48
|
+
state.values = action.payload
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
setCompletedStatus: (state, action) => {
|
|
52
|
+
state.status = action.payload
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
addCompletedStudentPlacements: (state, action) => {
|
|
56
|
+
state.values = {...state.values, ...action.payload}
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
setCompletedIsDraft: (state, action) => {
|
|
60
|
+
const {placementId, draft} = action.payload
|
|
61
|
+
state.values[placementId].draft = draft
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
addCompletedStudentPlacement: (state, action) => {
|
|
65
|
+
const {placement, placementId} = action.payload
|
|
66
|
+
const newPlacements = {...state.values};
|
|
67
|
+
newPlacements[placementId] = placement;
|
|
68
|
+
state.values = Object.fromEntries(Object.entries(newPlacements).sort(([, a], [, b]) => b.startDate > a.endDate ? 1 : -1));
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
setLastCompletedPlacement: (state, action) => {
|
|
72
|
+
state.lastPlacement = action.payload
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
extraReducers(builder){
|
|
78
|
+
builder
|
|
79
|
+
.addCase(updateCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
80
|
+
const {attributes, placementId} = action.payload
|
|
81
|
+
if (!placementId) return
|
|
82
|
+
state.values[placementId] = {...state.values[placementId], ...attributes};
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
.addCase(deleteCompletedStudentPlacement.fulfilled, (state, action) => {
|
|
87
|
+
const placementIdToDelete = action.payload;
|
|
88
|
+
const newPlacements = { ...state, values: { ...state.values } };
|
|
89
|
+
delete newPlacements.values[placementIdToDelete];
|
|
90
|
+
return newPlacements;
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
export const {addCompletedStudentPlacements, addCompletedStudentPlacement, setCompletedStudentPlacements, setLastCompletedPlacement, setCompletedStatus, setCompletedIsDraft} = completedStudentPlacementsSlice.actions
|
|
97
|
+
|
|
98
98
|
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: Partial<StudentPlacementData>}, {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] = {...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
|
-
|
|
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: Partial<StudentPlacementData>}, {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] = {...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,9 +1,9 @@
|
|
|
1
|
-
import { QueryConstraint } from "firebase/firestore";
|
|
2
|
-
import { useStudentPlacementList } from "../../../hooks";
|
|
3
|
-
import { UserData } from "../../../typeDefinitions";
|
|
4
|
-
|
|
5
|
-
export function useStudentPlacements({user, uid, queryConstraint}: {user: UserData, uid?: string, queryConstraint?: QueryConstraint[]}){
|
|
6
|
-
const {placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, reset} = useStudentPlacementList({...{user: user as UserData, uid: uid || user?.id, queryConstraint}})
|
|
7
|
-
|
|
8
|
-
return ({...{placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, resetPlacements: reset}});
|
|
9
|
-
}
|
|
1
|
+
import { QueryConstraint } from "firebase/firestore";
|
|
2
|
+
import { useStudentPlacementList } from "../../../hooks";
|
|
3
|
+
import { UserData } from "../../../typeDefinitions";
|
|
4
|
+
|
|
5
|
+
export function useStudentPlacements({user, uid, queryConstraint}: {user: UserData, uid?: string, queryConstraint?: QueryConstraint[]}){
|
|
6
|
+
const {placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, reset} = useStudentPlacementList({...{user: user as UserData, uid: uid || user?.id, queryConstraint}})
|
|
7
|
+
|
|
8
|
+
return ({...{placements, loadMoreIcon, loadMorePlacements, setQuery, setInitialQueryLimit, resetPlacements: reset}});
|
|
9
|
+
}
|
|
@@ -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
|
}
|