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