@appcorp/fusion-storybook 0.2.19 → 0.2.21

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.
@@ -9,9 +9,11 @@ import { useTranslations } from "next-intl";
9
9
  import { CSVS } from "../../constants";
10
10
  import { teacherFormValidation } from "./validate";
11
11
  import { TEACHER_API_ROUTES } from "./constants";
12
+ import { invalidateTeachersCache } from "./cache";
13
+ import { useTeacherContext, TEACHER_ACTION_TYPES } from "./context";
12
14
  const workspace = getCachedWorkspaceSync();
13
15
  const handleGetAllRecords = async (schoolId) => {
14
- const response = await fetch(`/${TEACHER_API_ROUTES.UNIT}?pageLimit=1000&currentPage=1&schoolId=${schoolId}`);
16
+ const response = await fetch(`${TEACHER_API_ROUTES.UNIT}?pageLimit=1000&currentPage=1&schoolId=${schoolId}`);
15
17
  const result = await response.json();
16
18
  const csv = await converter.json2csv(result.items || [], {});
17
19
  const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
@@ -20,17 +22,16 @@ const handleGetAllRecords = async (schoolId) => {
20
22
  async function processBulkCsv(files, method) {
21
23
  var _a;
22
24
  if (!files || files.length === 0)
23
- return;
25
+ return false;
24
26
  const file = files[0];
25
27
  try {
26
28
  const text = await file.text();
27
29
  const records = converter.csv2json(text);
28
30
  if (!Array.isArray(records) || records.length === 0) {
29
31
  showErrorToast("CSV file is empty or invalid");
30
- return;
32
+ return false;
31
33
  }
32
34
  const errors = [];
33
- const validRecords = [];
34
35
  for (let i = 0; i < records.length; i++) {
35
36
  const result = teacherFormValidation.safeParse(records[i]);
36
37
  if (!result.success) {
@@ -39,9 +40,6 @@ async function processBulkCsv(files, method) {
39
40
  messages: result.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`),
40
41
  });
41
42
  }
42
- else {
43
- validRecords.push(result.data);
44
- }
45
43
  }
46
44
  if (errors.length > 0) {
47
45
  const summary = errors
@@ -50,7 +48,7 @@ async function processBulkCsv(files, method) {
50
48
  .join("\n");
51
49
  const remaining = errors.length - 5;
52
50
  showErrorToast(`Validation failed for ${errors.length} row(s).\n${summary}${remaining > 0 ? `\n...and ${remaining} more` : ""}`);
53
- return;
51
+ return false;
54
52
  }
55
53
  const schoolId = ((_a = workspace === null || workspace === void 0 ? void 0 : workspace.school) === null || _a === void 0 ? void 0 : _a.id) || "";
56
54
  try {
@@ -66,29 +64,46 @@ async function processBulkCsv(files, method) {
66
64
  }),
67
65
  });
68
66
  if (response.ok) {
69
- showSuccessToast(`Successfully processed ${validRecords.length} teacher(s)`);
70
- }
71
- else {
72
- const errorData = await response.json().catch(() => ({}));
73
- showErrorToast(errorData.error ||
74
- `Bulk operation failed with status ${response.status}`);
67
+ showSuccessToast(`Successfully processed ${records.length} teacher(s)`);
68
+ return true;
75
69
  }
70
+ const errorData = await response.json().catch(() => ({}));
71
+ showErrorToast(errorData.error ||
72
+ `Bulk operation failed with status ${response.status}`);
73
+ return false;
76
74
  }
77
75
  catch (_b) {
78
76
  showErrorToast("Network error during bulk operation");
77
+ return false;
79
78
  }
80
79
  }
81
80
  catch (error) {
82
81
  showErrorToast(`Failed to process CSV: ${error instanceof Error ? error.message : "Unknown error"}`);
82
+ return false;
83
83
  }
84
84
  }
85
85
  export const TeacherMoreActions = () => {
86
86
  const t = useTranslations("teacher");
87
+ const { dispatch } = useTeacherContext();
88
+ const closeDrawer = () => {
89
+ dispatch({
90
+ type: TEACHER_ACTION_TYPES.SET_DRAWER,
91
+ payload: { drawer: null },
92
+ });
93
+ };
87
94
  const handleBulkCreate = async (files) => {
88
- await processBulkCsv(files, "POST");
95
+ const ok = await processBulkCsv(files, "POST");
96
+ if (ok) {
97
+ invalidateTeachersCache();
98
+ closeDrawer();
99
+ }
89
100
  };
90
101
  const handleBulkUpdate = async (files) => {
91
- await processBulkCsv(files, "PUT");
102
+ const ok = await processBulkCsv(files, "PUT");
103
+ if (ok) {
104
+ invalidateTeachersCache();
105
+ closeDrawer();
106
+ }
92
107
  };
93
108
  const create = [
94
109
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/fusion-storybook",
3
- "version": "0.2.19",
3
+ "version": "0.2.21",
4
4
  "scripts": {
5
5
  "build-storybook": "storybook build",
6
6
  "build:next": "next build",