placementt-core 1.20.232 → 1.300.4

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 (101) hide show
  1. package/.eslintrc.js +40 -40
  2. package/.gitattributes +2 -2
  3. package/deploy-all.js +75 -0
  4. package/lib/config.d.ts +0 -13
  5. package/lib/config.js +1 -3
  6. package/lib/config.js.map +1 -1
  7. package/lib/constants.d.ts +1 -0
  8. package/lib/constants.js +48 -1
  9. package/lib/constants.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/downtime/useDowntime.d.ts +11 -11
  15. package/lib/features/downtime/useDowntime.js +22 -22
  16. package/lib/features/placements/studentPlacements/activePlacement.js +1 -1
  17. package/lib/features/placements/studentPlacements/activePlacement.js.map +1 -1
  18. package/lib/features/placements/studentPlacements/studentPlacementsSlice.d.ts +63 -63
  19. package/lib/features/placements/studentPlacements/studentPlacementsSlice.js +81 -81
  20. package/lib/features/providerPlacements/providerPlacementsSlice.d.ts +19 -19
  21. package/lib/features/providerPlacements/providerPlacementsSlice.js +24 -24
  22. package/lib/features/studentPlacements/studentPlacementsSlice.d.ts +62 -62
  23. package/lib/features/studentPlacements/studentPlacementsSlice.js +87 -87
  24. package/lib/features/studentPlacements/useStudentPlacements.d.ts +6 -6
  25. package/lib/features/studentPlacements/useStudentPlacements.js +18 -18
  26. package/lib/features/userSlice.d.ts +26 -26
  27. package/lib/features/userSlice.js +23 -23
  28. package/lib/features/users/useUserFunctions.d.ts +25 -25
  29. package/lib/features/users/useUserFunctions.js +124 -124
  30. package/lib/features/users/userSlice.d.ts +46 -46
  31. package/lib/features/users/userSlice.js +48 -48
  32. package/lib/firebase/firebase.d.ts +1 -1
  33. package/lib/firebase/firebase.js +8 -3
  34. package/lib/firebase/firebase.js.map +1 -1
  35. package/lib/firebase/firebaseConfig.js +1 -0
  36. package/lib/firebase/firebaseConfig.js.map +1 -1
  37. package/lib/firebase/readDatabase.js +7 -7
  38. package/lib/firebase/readDatabase.js.map +1 -1
  39. package/lib/hooks.d.ts +85 -192
  40. package/lib/hooks.js +731 -671
  41. package/lib/hooks.js.map +1 -1
  42. package/lib/images/GatsbyBenchmarks.d.ts +1 -2
  43. package/lib/index.d.ts +0 -1
  44. package/lib/index.js +0 -1
  45. package/lib/index.js.map +1 -1
  46. package/lib/reduxHooks.d.ts +9 -41
  47. package/lib/reduxHooks.js +1 -49
  48. package/lib/reduxHooks.js.map +1 -1
  49. package/lib/tasksAndTips.js +368 -418
  50. package/lib/tasksAndTips.js.map +1 -1
  51. package/lib/typeDefinitions.d.ts +162 -83
  52. package/lib/util.d.ts +25 -1
  53. package/lib/util.js +329 -2
  54. package/lib/util.js.map +1 -1
  55. package/package.json +56 -56
  56. package/src/DatabaseDefinitions.ts +18 -18
  57. package/src/apiCalls.ts +128 -128
  58. package/src/config.ts +50 -53
  59. package/src/constants.ts +846 -796
  60. package/src/databaseTypes.ts +42 -42
  61. package/src/features/analytics/useAnalytics.tsx +63 -63
  62. package/src/features/contacts/contactsSlice.ts +147 -147
  63. package/src/features/contacts/useContacts.tsx +73 -73
  64. package/src/features/dropdown/useDropdown.tsx +52 -52
  65. package/src/features/global/downtime/useDowntime.tsx +23 -23
  66. package/src/features/global/users/useUserFunctions.tsx +132 -132
  67. package/src/features/jobs/jobsSlice.ts +71 -71
  68. package/src/features/placements/studentPlacements/activePlacement.ts +68 -68
  69. package/src/features/placements/studentPlacements/completedStudentPlacementsSlice.ts +97 -97
  70. package/src/features/placements/studentPlacements/upcomingStudentPlacementsSlice.ts +108 -108
  71. package/src/features/placements/studentPlacements/useStudentPlacements.tsx +9 -9
  72. package/src/features/placements/types.ts +10 -10
  73. package/src/features/referrals/useReferrals.tsx +56 -56
  74. package/src/features/updates/useUpdates.tsx +38 -38
  75. package/src/firebase/firebase.tsx +158 -153
  76. package/src/firebase/firebaseConfig.tsx +47 -45
  77. package/src/firebase/firebaseQuery.tsx +151 -151
  78. package/src/firebase/persistence.ts +84 -84
  79. package/src/firebase/readDatabase.tsx +236 -236
  80. package/src/firebase/util.tsx +352 -352
  81. package/src/firebase/writeDatabase.tsx +77 -77
  82. package/src/hooks.tsx +4476 -4463
  83. package/src/images/GatsbyBenchmarks.tsx +711 -711
  84. package/src/images/LogFuturePlacement.jsx +64 -64
  85. package/src/images/LogPreviousPlacement.jsx +228 -228
  86. package/src/images/gatsby_benchmarks.svg +466 -466
  87. package/src/images/log_future_placement.svg +114 -114
  88. package/src/images/log_previous_placement.svg +199 -199
  89. package/src/index.ts +34 -35
  90. package/src/readDatabase.tsx +3 -3
  91. package/src/reduxHooks.ts +295 -352
  92. package/src/tasksAndTips.ts +1267 -1267
  93. package/src/tutorialTips.ts +58 -58
  94. package/src/typeDefinitions.ts +1260 -1129
  95. package/src/util.ts +523 -177
  96. package/tsconfig.dev.json +5 -5
  97. package/tsconfig.json +21 -21
  98. package/lib/features/logs/logsSlice.d.ts +0 -93
  99. package/lib/features/logs/logsSlice.js +0 -146
  100. package/lib/features/logs/logsSlice.js.map +0 -1
  101. package/src/features/logs/logsSlice.ts +0 -208
package/tsconfig.dev.json CHANGED
@@ -1,5 +1,5 @@
1
- {
2
- "include": [
3
- ".eslintrc.js"
4
- ]
5
- }
1
+ {
2
+ "include": [
3
+ ".eslintrc.js"
4
+ ]
5
+ }
package/tsconfig.json CHANGED
@@ -1,22 +1,22 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "noImplicitReturns": true,
5
- "noImplicitAny": false,
6
- "noUnusedLocals": true,
7
- "outDir": "lib",
8
- "sourceMap": true,
9
- "strict": true,
10
- "target": "ES2019",
11
- "declaration": true,
12
- "declarationDir": "lib",
13
- "jsx": "react",
14
- "noEmit": false,
15
- "esModuleInterop": true,
16
- "experimentalDecorators": true
17
- },
18
- "compileOnSave": true,
19
- "include": [ "src", "../index.test.js", "prisma" ],
20
- "exclude": [ "node_modules", "lib" ]
21
- }
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "noImplicitReturns": true,
5
+ "noImplicitAny": false,
6
+ "noUnusedLocals": true,
7
+ "outDir": "lib",
8
+ "sourceMap": true,
9
+ "strict": true,
10
+ "target": "ES2019",
11
+ "declaration": true,
12
+ "declarationDir": "lib",
13
+ "jsx": "react",
14
+ "noEmit": false,
15
+ "esModuleInterop": true,
16
+ "experimentalDecorators": true
17
+ },
18
+ "compileOnSave": true,
19
+ "include": [ "src", "../index.test.js", "prisma" ],
20
+ "exclude": [ "node_modules", "lib" ]
21
+ }
22
22
 
@@ -1,93 +0,0 @@
1
- import { DocumentData } from "firebase/firestore";
2
- type InitialLogsState = {
3
- status: string;
4
- values: {
5
- [key: string]: DocumentData;
6
- };
7
- };
8
- export declare const fetchLogs: import("@reduxjs/toolkit").AsyncThunk<{
9
- data: DocumentData;
10
- selectedDate: string;
11
- }, {
12
- placementId: string;
13
- selectedDate: string;
14
- }, {
15
- state?: unknown;
16
- dispatch?: import("redux").Dispatch;
17
- extra?: unknown;
18
- rejectValue?: unknown;
19
- serializedErrorType?: unknown;
20
- pendingMeta?: unknown;
21
- fulfilledMeta?: unknown;
22
- rejectedMeta?: unknown;
23
- }>;
24
- export declare const editLog: import("@reduxjs/toolkit").AsyncThunk<{
25
- data: unknown;
26
- selectedDate: string;
27
- userType: string;
28
- }, {
29
- value: any[] | {
30
- [key: string]: unknown;
31
- };
32
- selectedDate: string;
33
- userType: string;
34
- placementId: string;
35
- }, {
36
- state?: unknown;
37
- dispatch?: import("redux").Dispatch;
38
- extra?: unknown;
39
- rejectValue?: unknown;
40
- serializedErrorType?: unknown;
41
- pendingMeta?: unknown;
42
- fulfilledMeta?: unknown;
43
- rejectedMeta?: unknown;
44
- }>;
45
- export declare const addLogFile: import("@reduxjs/toolkit").AsyncThunk<{
46
- data: string[];
47
- userType: string;
48
- selectedDate: string;
49
- }, {
50
- files: {
51
- file: FileList;
52
- };
53
- userType: string;
54
- selectedDate: string;
55
- placementId: string;
56
- }, {
57
- state?: unknown;
58
- dispatch?: import("redux").Dispatch;
59
- extra?: unknown;
60
- rejectValue?: unknown;
61
- serializedErrorType?: unknown;
62
- pendingMeta?: unknown;
63
- fulfilledMeta?: unknown;
64
- rejectedMeta?: unknown;
65
- }>;
66
- export declare const deleteLogFile: import("@reduxjs/toolkit").AsyncThunk<{
67
- openFile: {
68
- name: string;
69
- url: string;
70
- };
71
- userType: string;
72
- selectedDate: string;
73
- }, {
74
- openFile: {
75
- name: string;
76
- url: string;
77
- };
78
- userType: string;
79
- selectedDate: string;
80
- placementId: string;
81
- }, {
82
- state?: unknown;
83
- dispatch?: import("redux").Dispatch;
84
- extra?: unknown;
85
- rejectValue?: unknown;
86
- serializedErrorType?: unknown;
87
- pendingMeta?: unknown;
88
- fulfilledMeta?: unknown;
89
- rejectedMeta?: unknown;
90
- }>;
91
- export declare const logsSlice: import("@reduxjs/toolkit").Slice<InitialLogsState, {}, "logs">;
92
- declare const _default: import("redux").Reducer<InitialLogsState>;
93
- export default _default;
@@ -1,146 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.logsSlice = exports.deleteLogFile = exports.addLogFile = exports.editLog = exports.fetchLogs = void 0;
7
- const toolkit_1 = require("@reduxjs/toolkit");
8
- const firebaseQuery_1 = __importDefault(require("../../firebase/firebaseQuery"));
9
- const firestore_1 = require("firebase/firestore");
10
- const writeDatabase_1 = require("../../firebase/writeDatabase");
11
- const initialState = {
12
- status: "",
13
- values: {}
14
- };
15
- exports.fetchLogs = (0, toolkit_1.createAsyncThunk)("logs/fetchLogs", async ({ placementId, selectedDate }, { rejectWithValue }) => {
16
- const firebaseQuery = new firebaseQuery_1.default();
17
- try {
18
- const data = await firebaseQuery.getDocData(["logs", `${placementId}-${selectedDate}`]);
19
- return { "data": data, "selectedDate": selectedDate };
20
- }
21
- catch (error) {
22
- return { "data": {}, "selectedDate": selectedDate };
23
- }
24
- });
25
- exports.editLog = (0, toolkit_1.createAsyncThunk)("logs/editLog", async ({ value, selectedDate, userType, placementId }, { rejectWithValue }) => {
26
- const firebaseQuery = new firebaseQuery_1.default();
27
- try {
28
- const empty = (Array.isArray(value) && value.length === 0) ||
29
- (Object.entries(Object.values(value)[0])
30
- .filter(([k, v]) => (![`${userType}Uid`, "completed"].includes(k)) && v)
31
- .length === 0);
32
- const updatedValue = empty
33
- ? null
34
- : Array.isArray(value)
35
- ? value
36
- : Object.values(value)[0];
37
- await firebaseQuery.set(["logs", `${placementId}-${selectedDate}`], { [userType]: updatedValue }, true);
38
- await firebaseQuery.update(["placements", placementId], { [userType + "Logs"]: empty ? (0, firestore_1.arrayRemove)(selectedDate) : (0, firestore_1.arrayUnion)(selectedDate) });
39
- return { "data": updatedValue, "selectedDate": selectedDate, "userType": userType };
40
- }
41
- catch (error) {
42
- return rejectWithValue(error);
43
- }
44
- });
45
- exports.addLogFile = (0, toolkit_1.createAsyncThunk)("logs/addLogFile", async ({ files, userType, selectedDate, placementId }, { rejectWithValue }) => {
46
- const firebaseQuery = new firebaseQuery_1.default();
47
- try {
48
- const newFileNames = Array.from(files.file).map(file => file.name);
49
- await (0, writeDatabase_1.uploadFiles)(Array.from(files.file), ["placements", placementId, "log", `${userType}_files`, selectedDate]);
50
- await firebaseQuery.set(["logs", `${placementId}-${selectedDate}`], { [`${userType}_files`]: (0, firestore_1.arrayUnion)(...newFileNames) }, true);
51
- return { "data": newFileNames, "userType": userType, "selectedDate": selectedDate };
52
- }
53
- catch (error) {
54
- return rejectWithValue(error);
55
- }
56
- });
57
- exports.deleteLogFile = (0, toolkit_1.createAsyncThunk)("logs/deleteLogFile", async ({ openFile, userType, selectedDate, placementId }, { rejectWithValue }) => {
58
- const firebaseQuery = new firebaseQuery_1.default();
59
- try {
60
- await (0, writeDatabase_1.deleteStorageItem)(`placements/${placementId}/log/${userType}_files/${selectedDate}/${openFile.name}`);
61
- await firebaseQuery.set(["logs", `${placementId}-${selectedDate}`], { [`${userType}_files`]: (0, firestore_1.arrayRemove)(openFile.name) }, true);
62
- return { "openFile": openFile, "userType": userType, "selectedDate": selectedDate };
63
- }
64
- catch (error) {
65
- return rejectWithValue(error);
66
- }
67
- });
68
- exports.logsSlice = (0, toolkit_1.createSlice)({
69
- name: "logs",
70
- initialState,
71
- reducers: {},
72
- extraReducers(builder) {
73
- builder
74
- .addCase(exports.fetchLogs.pending, (state) => {
75
- state.status = "loading";
76
- })
77
- .addCase(exports.fetchLogs.fulfilled, (state, action) => {
78
- state.status = "success";
79
- const { data, selectedDate } = action.payload;
80
- state.values = { ...state.values, [selectedDate]: data };
81
- })
82
- .addCase(exports.fetchLogs.rejected, (state) => {
83
- state.status = "rejected";
84
- });
85
- builder
86
- .addCase(exports.editLog.pending, (state) => {
87
- state.status = "loading";
88
- })
89
- .addCase(exports.editLog.fulfilled, (state, action) => {
90
- state.status = "success";
91
- const { data, selectedDate, userType } = action.payload;
92
- const updatedLog = {
93
- ...state.values,
94
- [userType]: data
95
- };
96
- state.values = { ...state.values, [selectedDate]: updatedLog };
97
- })
98
- .addCase(exports.editLog.rejected, (state) => {
99
- state.status = "rejected";
100
- });
101
- builder
102
- .addCase(exports.addLogFile.pending, (state) => {
103
- state.status = "loading";
104
- })
105
- .addCase(exports.addLogFile.fulfilled, (state, action) => {
106
- var _a;
107
- state.status = "success";
108
- const { data, selectedDate, userType } = action.payload;
109
- const currentFiles = ((_a = state.values[selectedDate]) === null || _a === void 0 ? void 0 : _a[`${userType}_files`]) || [];
110
- const updatedFiles = [...currentFiles, ...data];
111
- state.values = {
112
- ...state.values,
113
- [selectedDate]: {
114
- ...state.values[selectedDate],
115
- [`${userType}_files`]: updatedFiles
116
- }
117
- };
118
- })
119
- .addCase(exports.addLogFile.rejected, (state) => {
120
- state.status = "rejected";
121
- });
122
- builder
123
- .addCase(exports.deleteLogFile.pending, (state) => {
124
- state.status = "loading";
125
- })
126
- .addCase(exports.deleteLogFile.fulfilled, (state, action) => {
127
- var _a;
128
- state.status = "success";
129
- const { openFile, selectedDate, userType } = action.payload;
130
- const currentLog = state.values[selectedDate] || {};
131
- const updatedFiles = ((_a = currentLog[`${userType}_files`]) === null || _a === void 0 ? void 0 : _a.filter((file) => file !== openFile.name)) || [];
132
- state.values = {
133
- ...state.values,
134
- [selectedDate]: {
135
- ...currentLog,
136
- [`${userType}_files`]: updatedFiles
137
- }
138
- };
139
- })
140
- .addCase(exports.deleteLogFile.rejected, (state) => {
141
- state.status = "rejected";
142
- });
143
- }
144
- });
145
- exports.default = exports.logsSlice.reducer;
146
- //# sourceMappingURL=logsSlice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logsSlice.js","sourceRoot":"","sources":["../../../src/features/logs/logsSlice.ts"],"names":[],"mappings":"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"}
@@ -1,208 +0,0 @@
1
- import {createSlice, createAsyncThunk} from "@reduxjs/toolkit";
2
- import FirebaseQuery from "../../firebase/firebaseQuery";
3
- import { arrayRemove, arrayUnion, DocumentData } from "firebase/firestore";
4
- import { deleteStorageItem, uploadFiles } from "../../firebase/writeDatabase";
5
-
6
- type InitialLogsState = {
7
- status: string,
8
- values: {
9
- [key: string]: DocumentData
10
- }
11
- }
12
-
13
- const initialState: InitialLogsState = {
14
- status: "",
15
- values: {}
16
- };
17
-
18
- export const fetchLogs = createAsyncThunk(
19
- "logs/fetchLogs",
20
- async ({placementId, selectedDate}: {placementId: string, selectedDate: string}, { rejectWithValue }) => {
21
- const firebaseQuery = new FirebaseQuery();
22
- try {
23
- const data = await firebaseQuery.getDocData(["logs", `${placementId}-${selectedDate}`])
24
- return {"data": data, "selectedDate": selectedDate}
25
-
26
- } catch (error) {
27
- return {"data": {}, "selectedDate": selectedDate}
28
- }
29
- }
30
- );
31
-
32
- export const editLog = createAsyncThunk(
33
- "logs/editLog",
34
- async ({value, selectedDate, userType, placementId}: {value: any[] | {[key: string]: unknown}, selectedDate: string, userType: string, placementId: string}, { rejectWithValue }) => {
35
- const firebaseQuery = new FirebaseQuery();
36
- try {
37
- const empty =
38
- (Array.isArray(value) && value.length === 0) ||
39
- (Object.entries(Object.values(value)[0] as { [key: string]: unknown })
40
- .filter(([k, v]) => (![`${userType}Uid`, "completed"].includes(k)) && v)
41
- .length === 0);
42
-
43
- const updatedValue = empty
44
- ? null
45
- : Array.isArray(value)
46
- ? value
47
- : Object.values(value)[0];
48
-
49
- await firebaseQuery.set(
50
- ["logs", `${placementId}-${selectedDate}`],
51
- { [userType]: updatedValue },
52
- true
53
- );
54
-
55
- await firebaseQuery.update(
56
- ["placements", placementId],
57
- { [userType + "Logs"]: empty ? arrayRemove(selectedDate) : arrayUnion(selectedDate) }
58
- );
59
- return {"data": updatedValue, "selectedDate": selectedDate, "userType": userType}
60
-
61
- } catch (error) {
62
- return rejectWithValue(error);
63
- }
64
- }
65
- )
66
-
67
- export const addLogFile = createAsyncThunk(
68
- "logs/addLogFile",
69
- async ({files, userType, selectedDate, placementId}: {files: {file: FileList}, userType: string, selectedDate: string, placementId: string}, { rejectWithValue }) => {
70
- const firebaseQuery = new FirebaseQuery();
71
-
72
- try {
73
- const newFileNames = Array.from(files.file).map(file => file.name);
74
- await uploadFiles(
75
- Array.from(files.file),
76
- ["placements", placementId, "log", `${userType}_files`, selectedDate]
77
- );
78
-
79
- await firebaseQuery.set(
80
- ["logs", `${placementId}-${selectedDate}`],
81
- { [`${userType}_files`]: arrayUnion(...newFileNames) },
82
- true
83
- );
84
-
85
- return {"data": newFileNames, "userType": userType, "selectedDate": selectedDate}
86
-
87
- } catch (error) {
88
- return rejectWithValue(error);
89
- }
90
-
91
- }
92
- )
93
-
94
- export const deleteLogFile = createAsyncThunk(
95
- "logs/deleteLogFile",
96
- async ({openFile, userType, selectedDate, placementId}: {openFile: {name: string, url: string}, userType: string, selectedDate: string, placementId: string}, { rejectWithValue }) => {
97
- const firebaseQuery = new FirebaseQuery();
98
-
99
- try {
100
- await deleteStorageItem(`placements/${placementId}/log/${userType}_files/${selectedDate}/${openFile.name}`);
101
- await firebaseQuery.set(
102
- ["logs", `${placementId}-${selectedDate}`],
103
- { [`${userType}_files`]: arrayRemove(openFile.name) },
104
- true
105
- );
106
- return {"openFile": openFile, "userType": userType, "selectedDate": selectedDate}
107
-
108
- } catch (error) {
109
- return rejectWithValue(error);
110
- }
111
-
112
- }
113
- )
114
-
115
- export const logsSlice = createSlice({
116
- name: "logs",
117
- initialState,
118
-
119
- reducers: {},
120
-
121
- extraReducers(builder){
122
- builder
123
- .addCase(fetchLogs.pending, (state) => {
124
- state.status = "loading"
125
- })
126
-
127
- .addCase(fetchLogs.fulfilled, (state, action) => {
128
- state.status = "success";
129
- const {data, selectedDate} = action.payload
130
- state.values = {...state.values, [selectedDate]: data}
131
- })
132
-
133
- .addCase(fetchLogs.rejected, (state) => {
134
- state.status = "rejected"
135
- })
136
-
137
- builder
138
- .addCase(editLog.pending, (state) => {
139
- state.status = "loading"
140
- })
141
-
142
- .addCase(editLog.fulfilled, (state, action) => {
143
- state.status = "success";
144
- const {data, selectedDate, userType} = action.payload
145
-
146
- const updatedLog = {
147
- ...state.values,
148
- [userType]: data
149
- }
150
- state.values = {...state.values, [selectedDate]: updatedLog}
151
- })
152
-
153
- .addCase(editLog.rejected, (state) => {
154
- state.status = "rejected"
155
- })
156
-
157
- builder
158
- .addCase(addLogFile.pending, (state) => {
159
- state.status = "loading"
160
- })
161
-
162
- .addCase(addLogFile.fulfilled, (state, action) => {
163
- state.status = "success";
164
- const {data, selectedDate, userType} = action.payload;
165
- const currentFiles = state.values[selectedDate]?.[`${userType}_files`] || [];
166
- const updatedFiles = [...currentFiles, ...data];
167
-
168
- state.values = {
169
- ...state.values,
170
- [selectedDate]: {
171
- ...state.values[selectedDate],
172
- [`${userType}_files`]: updatedFiles
173
- }
174
- };
175
- })
176
-
177
- .addCase(addLogFile.rejected, (state) => {
178
- state.status = "rejected"
179
- })
180
-
181
-
182
- builder
183
- .addCase(deleteLogFile.pending, (state) => {
184
- state.status = "loading"
185
- })
186
-
187
- .addCase(deleteLogFile.fulfilled, (state, action) => {
188
- state.status = "success";
189
- const {openFile, selectedDate, userType} = action.payload;
190
- const currentLog = state.values[selectedDate] || {}
191
- const updatedFiles = currentLog[`${userType}_files`]?.filter((file: string) => file !== openFile.name) || [];
192
-
193
- state.values = {
194
- ...state.values,
195
- [selectedDate]: {
196
- ...currentLog,
197
- [`${userType}_files`]: updatedFiles
198
- }
199
- };
200
- })
201
-
202
- .addCase(deleteLogFile.rejected, (state) => {
203
- state.status = "rejected"
204
- })
205
- }
206
- })
207
-
208
- export default logsSlice.reducer;