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.
Files changed (130) hide show
  1. package/.eslintrc.js +40 -40
  2. package/.gitattributes +2 -2
  3. package/lib/config.d.ts +0 -1
  4. package/lib/constants.d.ts +6 -2
  5. package/lib/constants.js +136 -136
  6. package/lib/constants.js.map +1 -1
  7. package/lib/features/analytics/useAnalytics.d.ts +0 -1
  8. package/lib/features/analytics/useAnalytics.js +3 -4
  9. package/lib/features/analytics/useAnalytics.js.map +1 -1
  10. package/lib/features/config.d.ts +133 -133
  11. package/lib/features/config.js +35 -35
  12. package/lib/features/contacts/contacts.d.ts +75 -75
  13. package/lib/features/contacts/contacts.js +105 -105
  14. package/lib/features/contacts/contactsSlice.d.ts +5 -5
  15. package/lib/features/contacts/useContacts.js +1 -2
  16. package/lib/features/contacts/useContacts.js.map +1 -1
  17. package/lib/features/downtime/useDowntime.d.ts +11 -11
  18. package/lib/features/downtime/useDowntime.js +22 -22
  19. package/lib/features/dropdown/useDropdown.d.ts +2 -3
  20. package/lib/features/dropdown/useDropdown.js +1 -2
  21. package/lib/features/dropdown/useDropdown.js.map +1 -1
  22. package/lib/features/global/downtime/useDowntime.d.ts +0 -1
  23. package/lib/features/global/downtime/useDowntime.js +1 -2
  24. package/lib/features/global/downtime/useDowntime.js.map +1 -1
  25. package/lib/features/global/users/useUserFunctions.d.ts +0 -1
  26. package/lib/features/global/users/useUserFunctions.js +7 -8
  27. package/lib/features/global/users/useUserFunctions.js.map +1 -1
  28. package/lib/features/placements/studentPlacements/activePlacement.d.ts +1 -1
  29. package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.d.ts +2 -2
  30. package/lib/features/placements/studentPlacements/studentPlacementsSlice.d.ts +63 -63
  31. package/lib/features/placements/studentPlacements/studentPlacementsSlice.js +81 -81
  32. package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.d.ts +2 -2
  33. package/lib/features/placements/studentPlacements/useStudentPlacements.d.ts +0 -1
  34. package/lib/features/placements/studentPlacements/useStudentPlacements.js +1 -2
  35. package/lib/features/placements/studentPlacements/useStudentPlacements.js.map +1 -1
  36. package/lib/features/providerPlacements/providerPlacementsSlice.d.ts +19 -19
  37. package/lib/features/providerPlacements/providerPlacementsSlice.js +24 -24
  38. package/lib/features/referrals/useReferrals.d.ts +0 -1
  39. package/lib/features/referrals/useReferrals.js +1 -2
  40. package/lib/features/referrals/useReferrals.js.map +1 -1
  41. package/lib/features/studentPlacements/studentPlacementsSlice.d.ts +62 -62
  42. package/lib/features/studentPlacements/studentPlacementsSlice.js +87 -87
  43. package/lib/features/studentPlacements/useStudentPlacements.d.ts +6 -6
  44. package/lib/features/studentPlacements/useStudentPlacements.js +18 -18
  45. package/lib/features/updates/useUpdates.js +1 -2
  46. package/lib/features/updates/useUpdates.js.map +1 -1
  47. package/lib/features/userSlice.d.ts +26 -26
  48. package/lib/features/userSlice.js +23 -23
  49. package/lib/features/users/useUserFunctions.d.ts +25 -25
  50. package/lib/features/users/useUserFunctions.js +124 -124
  51. package/lib/features/users/userSlice.d.ts +46 -46
  52. package/lib/features/users/userSlice.js +48 -48
  53. package/lib/firebase/firebase.d.ts +3 -1
  54. package/lib/firebase/firebase.js +9 -3
  55. package/lib/firebase/firebase.js.map +1 -1
  56. package/lib/firebase/firebaseConfig.js +3 -0
  57. package/lib/firebase/firebaseConfig.js.map +1 -1
  58. package/lib/firebase/firebaseQuery.d.ts +3 -1
  59. package/lib/firebase/firebaseQuery.js +11 -1
  60. package/lib/firebase/firebaseQuery.js.map +1 -1
  61. package/lib/firebase/persistence.js +2 -2
  62. package/lib/firebase/persistence.js.map +1 -1
  63. package/lib/firebase/readDatabase.d.ts +8 -7
  64. package/lib/firebase/readDatabase.js +41 -8
  65. package/lib/firebase/readDatabase.js.map +1 -1
  66. package/lib/firebase/util.d.ts +3 -4
  67. package/lib/firebase/util.js +49 -4
  68. package/lib/firebase/util.js.map +1 -1
  69. package/lib/firebase/writeDatabase.d.ts +7 -3
  70. package/lib/firebase/writeDatabase.js +9 -2
  71. package/lib/firebase/writeDatabase.js.map +1 -1
  72. package/lib/hooks.d.ts +476 -20
  73. package/lib/hooks.js +1855 -237
  74. package/lib/hooks.js.map +1 -1
  75. package/lib/images/GatsbyBenchmarks.d.ts +0 -1
  76. package/lib/images/GatsbyBenchmarks.js +1 -1
  77. package/lib/images/GatsbyBenchmarks.js.map +1 -1
  78. package/lib/reduxHooks.d.ts +9 -2
  79. package/lib/reduxHooks.js +36 -9
  80. package/lib/reduxHooks.js.map +1 -1
  81. package/lib/tasksAndTips.d.ts +25 -5
  82. package/lib/tasksAndTips.js +517 -48
  83. package/lib/tasksAndTips.js.map +1 -1
  84. package/lib/typeDefinitions.d.ts +472 -55
  85. package/lib/util.d.ts +1 -0
  86. package/lib/util.js +85 -7
  87. package/lib/util.js.map +1 -1
  88. package/package.json +52 -49
  89. package/src/DatabaseDefinitions.ts +18 -18
  90. package/src/apiCalls.ts +128 -128
  91. package/src/config.ts +50 -50
  92. package/src/constants.ts +714 -707
  93. package/src/databaseTypes.ts +42 -42
  94. package/src/features/analytics/useAnalytics.tsx +64 -64
  95. package/src/features/contacts/contactsSlice.ts +147 -147
  96. package/src/features/contacts/useContacts.tsx +73 -73
  97. package/src/features/dropdown/useDropdown.tsx +52 -52
  98. package/src/features/global/downtime/useDowntime.tsx +23 -23
  99. package/src/features/global/users/useUserFunctions.tsx +132 -132
  100. package/src/features/jobs/jobsSlice.ts +65 -65
  101. package/src/features/placements/studentPlacements/activePlacement.ts +68 -68
  102. package/src/features/placements/studentPlacements/completedStudentPlacementsSlice.ts +97 -97
  103. package/src/features/placements/studentPlacements/upcomingStudentPlacementsSlice.ts +108 -108
  104. package/src/features/placements/studentPlacements/useStudentPlacements.tsx +9 -9
  105. package/src/features/placements/types.ts +10 -10
  106. package/src/features/referrals/useReferrals.tsx +56 -56
  107. package/src/features/updates/useUpdates.tsx +38 -38
  108. package/src/firebase/firebase.tsx +144 -138
  109. package/src/firebase/firebaseConfig.tsx +45 -42
  110. package/src/firebase/firebaseQuery.tsx +150 -140
  111. package/src/firebase/persistence.ts +84 -84
  112. package/src/firebase/readDatabase.tsx +235 -197
  113. package/src/firebase/util.tsx +352 -308
  114. package/src/firebase/writeDatabase.tsx +77 -68
  115. package/src/hooks.tsx +4029 -1928
  116. package/src/images/GatsbyBenchmarks.tsx +711 -711
  117. package/src/images/LogFuturePlacement.jsx +64 -64
  118. package/src/images/LogPreviousPlacement.jsx +228 -228
  119. package/src/images/gatsby_benchmarks.svg +466 -466
  120. package/src/images/log_future_placement.svg +114 -114
  121. package/src/images/log_previous_placement.svg +199 -199
  122. package/src/index.ts +34 -34
  123. package/src/readDatabase.tsx +3 -3
  124. package/src/reduxHooks.ts +231 -200
  125. package/src/tasksAndTips.ts +917 -410
  126. package/src/tutorialTips.ts +58 -58
  127. package/src/typeDefinitions.ts +893 -503
  128. package/src/util.ts +137 -47
  129. package/tsconfig.dev.json +5 -5
  130. 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
  }