@tumaet/prompt-shared-state 1.0.13 → 1.1.0

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 (113) hide show
  1. package/dist/env.js +69 -0
  2. package/dist/env.js.map +1 -0
  3. package/dist/hooks/index.js +9 -0
  4. package/dist/hooks/index.js.map +1 -0
  5. package/dist/hooks/useFileUpload.js +33 -0
  6. package/dist/hooks/useFileUpload.js.map +1 -0
  7. package/dist/hooks/useGetCoursePhase.js +11 -0
  8. package/dist/hooks/useGetCoursePhase.js.map +1 -0
  9. package/dist/hooks/useGetCoursePhaseParticipants.js +12 -0
  10. package/dist/hooks/useGetCoursePhaseParticipants.js.map +1 -0
  11. package/dist/hooks/useGetMailingIsConfigured.js +19 -0
  12. package/dist/hooks/useGetMailingIsConfigured.js.map +1 -0
  13. package/dist/hooks/useModifyCoursePhase.js +20 -0
  14. package/dist/hooks/useModifyCoursePhase.js.map +1 -0
  15. package/dist/hooks/useUpdateCoursePhaseMetaData.js +47 -0
  16. package/dist/hooks/useUpdateCoursePhaseMetaData.js.map +1 -0
  17. package/dist/hooks/useUpdateCoursePhaseParticipation.js +61 -0
  18. package/dist/hooks/useUpdateCoursePhaseParticipation.js.map +1 -0
  19. package/dist/hooks/useUpdateCoursePhaseParticipationBatch.js +17 -0
  20. package/dist/hooks/useUpdateCoursePhaseParticipationBatch.js.map +1 -0
  21. package/dist/index.js +5 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/interfaces/index.js +1 -0
  24. package/dist/interfaces/index.js.map +1 -1
  25. package/dist/interfaces/routing/extendedRouteObject.js +2 -0
  26. package/dist/interfaces/routing/extendedRouteObject.js.map +1 -0
  27. package/dist/interfaces/routing/index.js +4 -0
  28. package/dist/interfaces/routing/index.js.map +1 -0
  29. package/dist/interfaces/routing/sidebar.js +2 -0
  30. package/dist/interfaces/routing/sidebar.js.map +1 -0
  31. package/dist/interfaces/routing/studentDetail.js +2 -0
  32. package/dist/interfaces/routing/studentDetail.js.map +1 -0
  33. package/dist/lib/formatFileSize.js +9 -0
  34. package/dist/lib/formatFileSize.js.map +1 -0
  35. package/dist/lib/getCountries.js +15 -0
  36. package/dist/lib/getCountries.js.map +1 -0
  37. package/dist/lib/getGravatarUrl.js +7 -0
  38. package/dist/lib/getGravatarUrl.js.map +1 -0
  39. package/dist/lib/getStatusColor.js +13 -0
  40. package/dist/lib/getStatusColor.js.map +1 -0
  41. package/dist/lib/index.js +7 -0
  42. package/dist/lib/index.js.map +1 -0
  43. package/dist/lib/openFileDownload.js +17 -0
  44. package/dist/lib/openFileDownload.js.map +1 -0
  45. package/dist/lib/translations.json +18 -0
  46. package/dist/network/configService.js +23 -0
  47. package/dist/network/configService.js.map +1 -0
  48. package/dist/network/index.js +12 -0
  49. package/dist/network/index.js.map +1 -0
  50. package/dist/network/logNetworkError.js +21 -0
  51. package/dist/network/logNetworkError.js.map +1 -0
  52. package/dist/network/mutations/deleteApplicationFile.js +11 -0
  53. package/dist/network/mutations/deleteApplicationFile.js.map +1 -0
  54. package/dist/network/mutations/sendStatusMail.js +16 -0
  55. package/dist/network/mutations/sendStatusMail.js.map +1 -0
  56. package/dist/network/mutations/updateCoursePhase.js +16 -0
  57. package/dist/network/mutations/updateCoursePhase.js.map +1 -0
  58. package/dist/network/mutations/updateCoursePhaseParticipationBatch.js +16 -0
  59. package/dist/network/mutations/updateCoursePhaseParticipationBatch.js.map +1 -0
  60. package/dist/network/mutations/updateCoursePhaseParticipationMetaData.js +16 -0
  61. package/dist/network/mutations/updateCoursePhaseParticipationMetaData.js.map +1 -0
  62. package/dist/network/mutations/uploadFile.js +40 -0
  63. package/dist/network/mutations/uploadFile.js.map +1 -0
  64. package/dist/network/queries/getCoursePhase.js +12 -0
  65. package/dist/network/queries/getCoursePhase.js.map +1 -0
  66. package/dist/network/queries/getCoursePhaseParticipationStatusCounts.js +13 -0
  67. package/dist/network/queries/getCoursePhaseParticipationStatusCounts.js.map +1 -0
  68. package/dist/network/queries/getCoursePhaseParticipations.js +12 -0
  69. package/dist/network/queries/getCoursePhaseParticipations.js.map +1 -0
  70. package/dist/network/queries/getOwnCoursePhaseParticipation.js +12 -0
  71. package/dist/network/queries/getOwnCoursePhaseParticipation.js.map +1 -0
  72. package/dist/types/env.d.ts +28 -0
  73. package/dist/types/hooks/index.d.ts +8 -0
  74. package/dist/types/hooks/useFileUpload.d.ts +13 -0
  75. package/dist/types/hooks/useGetCoursePhase.d.ts +2 -0
  76. package/dist/types/hooks/useGetCoursePhaseParticipants.d.ts +2 -0
  77. package/dist/types/hooks/useGetMailingIsConfigured.d.ts +1 -0
  78. package/dist/types/hooks/useModifyCoursePhase.d.ts +2 -0
  79. package/dist/types/hooks/useUpdateCoursePhaseMetaData.d.ts +7 -0
  80. package/dist/types/hooks/useUpdateCoursePhaseParticipation.d.ts +7 -0
  81. package/dist/types/hooks/useUpdateCoursePhaseParticipationBatch.d.ts +3 -0
  82. package/dist/types/index.d.ts +5 -0
  83. package/dist/types/interfaces/index.d.ts +1 -0
  84. package/dist/types/interfaces/routing/extendedRouteObject.d.ts +5 -0
  85. package/dist/types/interfaces/routing/index.d.ts +3 -0
  86. package/dist/types/interfaces/routing/sidebar.d.ts +13 -0
  87. package/dist/types/interfaces/routing/studentDetail.d.ts +6 -0
  88. package/dist/types/lib/formatFileSize.d.ts +1 -0
  89. package/dist/types/lib/getCountries.d.ts +5 -0
  90. package/dist/types/lib/getGravatarUrl.d.ts +1 -0
  91. package/dist/types/lib/getStatusColor.d.ts +2 -0
  92. package/dist/types/lib/index.d.ts +6 -0
  93. package/dist/types/lib/openFileDownload.d.ts +6 -0
  94. package/dist/types/network/configService.d.ts +8 -0
  95. package/dist/types/network/index.d.ts +11 -0
  96. package/dist/types/network/logNetworkError.d.ts +1 -0
  97. package/dist/types/network/mutations/deleteApplicationFile.d.ts +1 -0
  98. package/dist/types/network/mutations/sendStatusMail.d.ts +2 -0
  99. package/dist/types/network/mutations/updateCoursePhase.d.ts +2 -0
  100. package/dist/types/network/mutations/updateCoursePhaseParticipationBatch.d.ts +2 -0
  101. package/dist/types/network/mutations/updateCoursePhaseParticipationMetaData.d.ts +2 -0
  102. package/dist/types/network/mutations/uploadFile.d.ts +25 -0
  103. package/dist/types/network/queries/getCoursePhase.d.ts +2 -0
  104. package/dist/types/network/queries/getCoursePhaseParticipationStatusCounts.d.ts +4 -0
  105. package/dist/types/network/queries/getCoursePhaseParticipations.d.ts +2 -0
  106. package/dist/types/network/queries/getOwnCoursePhaseParticipation.d.ts +2 -0
  107. package/dist/types/utils/index.d.ts +1 -0
  108. package/dist/types/utils/parseURL.d.ts +1 -0
  109. package/dist/utils/index.js +2 -0
  110. package/dist/utils/index.js.map +1 -0
  111. package/dist/utils/parseURL.js +15 -0
  112. package/dist/utils/parseURL.js.map +1 -0
  113. package/package.json +15 -3
package/dist/env.js ADDED
@@ -0,0 +1,69 @@
1
+ const validEnvironments = ['development', 'staging', 'production'];
2
+ const requiredKeys = [
3
+ 'CORE_HOST',
4
+ 'INTRO_COURSE_HOST',
5
+ 'TEAM_ALLOCATION_HOST',
6
+ 'ASSESSMENT_HOST',
7
+ 'DEVOPS_CHALLENGE_HOST',
8
+ 'INTERVIEW_HOST',
9
+ 'KEYCLOAK_HOST',
10
+ 'KEYCLOAK_REALM_NAME',
11
+ 'CHAIR_NAME_LONG',
12
+ 'CHAIR_NAME_SHORT',
13
+ 'GITHUB_SHA',
14
+ 'GITHUB_REF',
15
+ 'SERVER_IMAGE_TAG',
16
+ 'SELF_TEAM_ALLOCATION_HOST',
17
+ 'TEMPLATE_HOST',
18
+ 'CERTIFICATE_HOST',
19
+ 'SENTRY_DSN_CLIENT'
20
+ ];
21
+ function isEnvironment(value) {
22
+ return typeof value === 'string' && validEnvironments.includes(value);
23
+ }
24
+ function normalizeString(value) {
25
+ return typeof value === 'string' ? value : '';
26
+ }
27
+ function normalizeEnv(rawEnv) {
28
+ const environment = isEnvironment(rawEnv.ENVIRONMENT) ? rawEnv.ENVIRONMENT : 'development';
29
+ const invalidKeys = [];
30
+ if (!isEnvironment(rawEnv.ENVIRONMENT)) {
31
+ invalidKeys.push('ENVIRONMENT');
32
+ }
33
+ const normalized = {
34
+ ENVIRONMENT: environment,
35
+ CORE_HOST: normalizeString(rawEnv.CORE_HOST),
36
+ INTRO_COURSE_HOST: normalizeString(rawEnv.INTRO_COURSE_HOST),
37
+ TEAM_ALLOCATION_HOST: normalizeString(rawEnv.TEAM_ALLOCATION_HOST),
38
+ ASSESSMENT_HOST: normalizeString(rawEnv.ASSESSMENT_HOST),
39
+ DEVOPS_CHALLENGE_HOST: normalizeString(rawEnv.DEVOPS_CHALLENGE_HOST),
40
+ INTERVIEW_HOST: normalizeString(rawEnv.INTERVIEW_HOST),
41
+ KEYCLOAK_HOST: normalizeString(rawEnv.KEYCLOAK_HOST),
42
+ KEYCLOAK_REALM_NAME: normalizeString(rawEnv.KEYCLOAK_REALM_NAME),
43
+ CHAIR_NAME_LONG: normalizeString(rawEnv.CHAIR_NAME_LONG),
44
+ CHAIR_NAME_SHORT: normalizeString(rawEnv.CHAIR_NAME_SHORT),
45
+ GITHUB_SHA: normalizeString(rawEnv.GITHUB_SHA),
46
+ GITHUB_REF: normalizeString(rawEnv.GITHUB_REF),
47
+ SERVER_IMAGE_TAG: normalizeString(rawEnv.SERVER_IMAGE_TAG),
48
+ SELF_TEAM_ALLOCATION_HOST: normalizeString(rawEnv.SELF_TEAM_ALLOCATION_HOST),
49
+ TEMPLATE_HOST: normalizeString(rawEnv.TEMPLATE_HOST),
50
+ CERTIFICATE_HOST: normalizeString(rawEnv.CERTIFICATE_HOST),
51
+ SENTRY_DSN_CLIENT: normalizeString(rawEnv.SENTRY_DSN_CLIENT)
52
+ };
53
+ for (const key of requiredKeys) {
54
+ if (!normalized[key]) {
55
+ invalidKeys.push(key);
56
+ }
57
+ }
58
+ if (invalidKeys.length > 0) {
59
+ const message = `[prompt-shared-state] Missing or invalid env keys: ${invalidKeys.join(', ')}`;
60
+ if (environment === 'production') {
61
+ throw new Error(message);
62
+ }
63
+ console.warn(message);
64
+ }
65
+ return normalized;
66
+ }
67
+ const rawEnv = typeof window !== 'undefined' ? (window.env ?? {}) : {};
68
+ export const env = normalizeEnv(rawEnv);
69
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from './useFileUpload';
2
+ export * from './useGetCoursePhase';
3
+ export * from './useGetCoursePhaseParticipants';
4
+ export * from './useGetMailingIsConfigured';
5
+ export * from './useModifyCoursePhase';
6
+ export * from './useUpdateCoursePhaseMetaData';
7
+ export * from './useUpdateCoursePhaseParticipation';
8
+ export * from './useUpdateCoursePhaseParticipationBatch';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qCAAqC,CAAA;AACnD,cAAc,0CAA0C,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { uploadFile } from '../network/mutations/uploadFile';
3
+ import { useState } from 'react';
4
+ export const useFileUpload = (options) => {
5
+ const [uploadProgress, setUploadProgress] = useState(0);
6
+ const upload = useMutation({
7
+ mutationFn: async (params) => {
8
+ setUploadProgress(0);
9
+ return uploadFile({
10
+ ...params,
11
+ onUploadProgress: (progressEvent) => {
12
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
13
+ setUploadProgress(percentCompleted);
14
+ params.onUploadProgress?.(progressEvent);
15
+ },
16
+ });
17
+ },
18
+ onSuccess: (data) => {
19
+ setUploadProgress(100);
20
+ options?.onSuccess?.(data);
21
+ },
22
+ onError: (error) => {
23
+ setUploadProgress(0);
24
+ options?.onError?.(error);
25
+ },
26
+ });
27
+ return {
28
+ upload,
29
+ uploadProgress,
30
+ isUploading: upload.isPending,
31
+ };
32
+ };
33
+ //# sourceMappingURL=useFileUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUpload.js","sourceRoot":"","sources":["../../src/hooks/useFileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAkC,MAAM,iCAAiC,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAahC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA8B,EAAuB,EAAE;IACnF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAG,WAAW,CAAwC;QAChE,UAAU,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;YAC7C,iBAAiB,CAAC,CAAC,CAAC,CAAA;YACpB,OAAO,UAAU,CAAC;gBAChB,GAAG,MAAM;gBACT,gBAAgB,EAAE,CAAC,aAAa,EAAE,EAAE;oBAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;oBACvF,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;oBACnC,MAAM,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAA;gBAC1C,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QACD,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,iBAAiB,CAAC,CAAC,CAAC,CAAA;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;IAEF,OAAO;QACL,MAAM;QACN,cAAc;QACd,WAAW,EAAE,MAAM,CAAC,SAAS;KAC9B,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { getCoursePhase } from '../network/queries/getCoursePhase';
4
+ export const useGetCoursePhase = () => {
5
+ const { phaseId } = useParams();
6
+ return useQuery({
7
+ queryKey: ['course_phase', phaseId],
8
+ queryFn: () => getCoursePhase(phaseId ?? ''),
9
+ });
10
+ };
11
+ //# sourceMappingURL=useGetCoursePhase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetCoursePhase.js","sourceRoot":"","sources":["../../src/hooks/useGetCoursePhase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAElE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IAEpD,OAAO,QAAQ,CAA0B;QACvC,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;KAC7C,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { getCoursePhaseParticipations } from '../network/queries/getCoursePhaseParticipations';
4
+ export const useGetCoursePhaseParticipants = () => {
5
+ const { phaseId } = useParams();
6
+ return useQuery({
7
+ queryKey: ['participants', phaseId],
8
+ queryFn: () => getCoursePhaseParticipations(phaseId ?? ''),
9
+ enabled: !!phaseId,
10
+ });
11
+ };
12
+ //# sourceMappingURL=useGetCoursePhaseParticipants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetCoursePhaseParticipants.js","sourceRoot":"","sources":["../../src/hooks/useGetCoursePhaseParticipants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAA;AAE9F,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IAEpD,OAAO,QAAQ,CAA0C;QACvD,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { useCourseStore } from '../zustand';
2
+ import { useParams } from 'react-router-dom';
3
+ export const useGetMailingIsConfigured = () => {
4
+ const { courseId } = useParams();
5
+ const { courses } = useCourseStore();
6
+ const activeCourse = courses.find((course) => course.id === courseId);
7
+ const mailingSettings = activeCourse?.restrictedData?.mailingSettings;
8
+ if (mailingSettings !== undefined &&
9
+ typeof mailingSettings.replyToEmail === 'string' &&
10
+ mailingSettings.replyToEmail.trim() !== '' &&
11
+ typeof mailingSettings.replyToName === 'string' &&
12
+ mailingSettings.replyToName.trim() !== '') {
13
+ return true;
14
+ }
15
+ else {
16
+ return false;
17
+ }
18
+ };
19
+ //# sourceMappingURL=useGetMailingIsConfigured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetMailingIsConfigured.js","sourceRoot":"","sources":["../../src/hooks/useGetMailingIsConfigured.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAY,EAAE;IACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAwB,CAAA;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IAErE,MAAM,eAAe,GAAG,YAAY,EAAE,cAAc,EAAE,eAAe,CAAA;IAErE,IACE,eAAe,KAAK,SAAS;QAC7B,OAAO,eAAe,CAAC,YAAY,KAAK,QAAQ;QAChD,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;QAC1C,OAAO,eAAe,CAAC,WAAW,KAAK,QAAQ;QAC/C,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EACzC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { updateCoursePhase } from '../network/mutations/updateCoursePhase';
4
+ export const useModifyCoursePhase = (onSuccess, onError) => {
5
+ const { phaseId } = useParams();
6
+ const queryClient = useQueryClient();
7
+ return useMutation({
8
+ mutationFn: (coursePhase) => {
9
+ return updateCoursePhase(coursePhase);
10
+ },
11
+ onSuccess: () => {
12
+ queryClient.invalidateQueries({ queryKey: ['course_phase', phaseId] });
13
+ onSuccess();
14
+ },
15
+ onError: () => {
16
+ onError();
17
+ },
18
+ });
19
+ };
20
+ //# sourceMappingURL=useModifyCoursePhase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModifyCoursePhase.js","sourceRoot":"","sources":["../../src/hooks/useModifyCoursePhase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAE1E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAqB,EAAE,OAAmB,EAAE,EAAE;IACjF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,WAA8B,EAAE,EAAE;YAC7C,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAA;QACvC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YACtE,SAAS,EAAE,CAAA;QACb,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { updateCoursePhase } from '../network/mutations/updateCoursePhase';
4
+ export const useUpdateCoursePhaseMetaData = () => {
5
+ const { phaseId } = useParams();
6
+ const queryClient = useQueryClient();
7
+ const mutation = useMutation({
8
+ mutationFn: (coursePhase) => {
9
+ return updateCoursePhase(coursePhase);
10
+ },
11
+ // Optimistically update cache before server responds
12
+ onMutate: async (newCoursePhaseData) => {
13
+ // Cancel any outgoing refetches to prevent overwriting optimistic update
14
+ await queryClient.cancelQueries({ queryKey: ['course_phase', phaseId] });
15
+ // Snapshot the previous value for rollback
16
+ const previousCoursePhase = queryClient.getQueryData([
17
+ 'course_phase',
18
+ phaseId,
19
+ ]);
20
+ // Optimistically update cache with new data
21
+ if (previousCoursePhase) {
22
+ queryClient.setQueryData(['course_phase', phaseId], {
23
+ ...previousCoursePhase,
24
+ restrictedData: {
25
+ ...previousCoursePhase.restrictedData,
26
+ ...newCoursePhaseData.restrictedData,
27
+ },
28
+ });
29
+ }
30
+ return { previousCoursePhase };
31
+ },
32
+ onSuccess: () => {
33
+ // Refetch to ensure data is in sync with server
34
+ queryClient.invalidateQueries({ queryKey: ['course_phase', phaseId] });
35
+ // Cross-invalidate participants cache as they need updated questions
36
+ queryClient.invalidateQueries({ queryKey: ['participants', phaseId] });
37
+ },
38
+ onError: (error, _newCoursePhase, context) => {
39
+ // Rollback on error
40
+ if (context?.previousCoursePhase) {
41
+ queryClient.setQueryData(['course_phase', phaseId], context.previousCoursePhase);
42
+ }
43
+ },
44
+ });
45
+ return mutation;
46
+ };
47
+ //# sourceMappingURL=useUpdateCoursePhaseMetaData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateCoursePhaseMetaData.js","sourceRoot":"","sources":["../../src/hooks/useUpdateCoursePhaseMetaData.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAO1E,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAK1C,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,QAAQ,GAAG,WAAW,CAAgE;QAC1F,UAAU,EAAE,CAAC,WAA8B,EAAE,EAAE;YAC7C,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAA;QACvC,CAAC;QACD,qDAAqD;QACrD,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;YACrC,yEAAyE;YACzE,MAAM,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YAExE,2CAA2C;YAC3C,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,CAA0B;gBAC5E,cAAc;gBACd,OAAO;aACR,CAAC,CAAA;YAEF,4CAA4C;YAC5C,IAAI,mBAAmB,EAAE,CAAC;gBACxB,WAAW,CAAC,YAAY,CAA0B,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;oBAC3E,GAAG,mBAAmB;oBACtB,cAAc,EAAE;wBACd,GAAG,mBAAmB,CAAC,cAAc;wBACrC,GAAG,kBAAkB,CAAC,cAAc;qBACrC;iBACF,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,EAAE,mBAAmB,EAAE,CAAA;QAChC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,gDAAgD;YAChD,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YACtE,qEAAqE;YACrE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;YAC3C,oBAAoB;YACpB,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;gBACjC,WAAW,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;YAClF,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -0,0 +1,61 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { updateCoursePhaseParticipation } from '../network/mutations/updateCoursePhaseParticipationMetaData';
4
+ export const useUpdateCoursePhaseParticipation = () => {
5
+ const { phaseId } = useParams();
6
+ const queryClient = useQueryClient();
7
+ const mutation = useMutation({
8
+ mutationFn: (coursePhaseParticipation) => {
9
+ return updateCoursePhaseParticipation(coursePhaseParticipation);
10
+ },
11
+ // Optimistically update cache before server responds
12
+ onMutate: async (newParticipationData) => {
13
+ // Cancel any outgoing refetches
14
+ await queryClient.cancelQueries({ queryKey: ['participants', phaseId] });
15
+ // Snapshot the previous value
16
+ const previousParticipants = queryClient.getQueryData(['participants', phaseId]);
17
+ const applyParticipationUpdate = (participants) => participants.map((participant) => {
18
+ if (participant.courseParticipationID === newParticipationData.courseParticipationID) {
19
+ return {
20
+ ...participant,
21
+ passStatus: newParticipationData.passStatus ?? participant.passStatus,
22
+ restrictedData: {
23
+ ...participant.restrictedData,
24
+ ...newParticipationData.restrictedData,
25
+ },
26
+ studentReadableData: {
27
+ ...participant.studentReadableData,
28
+ ...newParticipationData.studentReadableData,
29
+ },
30
+ };
31
+ }
32
+ return participant;
33
+ });
34
+ // Optimistically update the specific participation
35
+ if (previousParticipants) {
36
+ if (Array.isArray(previousParticipants)) {
37
+ queryClient.setQueryData(['participants', phaseId], applyParticipationUpdate(previousParticipants));
38
+ }
39
+ else {
40
+ queryClient.setQueryData(['participants', phaseId], {
41
+ ...previousParticipants,
42
+ participations: applyParticipationUpdate(previousParticipants.participations ?? []),
43
+ });
44
+ }
45
+ }
46
+ return { previousParticipants };
47
+ },
48
+ onError: (error, _newParticipation, context) => {
49
+ // Rollback on error
50
+ if (context?.previousParticipants) {
51
+ queryClient.setQueryData(['participants', phaseId], context.previousParticipants);
52
+ }
53
+ },
54
+ onSettled: () => {
55
+ // Re-sync with server to ensure cache reflects the true state after success or error
56
+ queryClient.invalidateQueries({ queryKey: ['participants', phaseId] });
57
+ },
58
+ });
59
+ return mutation;
60
+ };
61
+ //# sourceMappingURL=useUpdateCoursePhaseParticipation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateCoursePhaseParticipation.js","sourceRoot":"","sources":["../../src/hooks/useUpdateCoursePhaseParticipation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAM5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,6DAA6D,CAAA;AAQ5G,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAK/C,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,QAAQ,GAAG,WAAW,CAK1B;QACA,UAAU,EAAE,CAAC,wBAAwD,EAAE,EAAE;YACvE,OAAO,8BAA8B,CAAC,wBAAwB,CAAC,CAAA;QACjE,CAAC;QACD,qDAAqD;QACrD,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE;YACvC,gCAAgC;YAChC,MAAM,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YAExE,8BAA8B;YAC9B,MAAM,oBAAoB,GAAG,WAAW,CAAC,YAAY,CAEnD,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;YAE5B,MAAM,wBAAwB,GAAG,CAC/B,YAAmD,EACZ,EAAE,CACzC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC/B,IAAI,WAAW,CAAC,qBAAqB,KAAK,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;oBACrF,OAAO;wBACL,GAAG,WAAW;wBACd,UAAU,EAAE,oBAAoB,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU;wBACrE,cAAc,EAAE;4BACd,GAAG,WAAW,CAAC,cAAc;4BAC7B,GAAG,oBAAoB,CAAC,cAAc;yBACvC;wBACD,mBAAmB,EAAE;4BACnB,GAAG,WAAW,CAAC,mBAAmB;4BAClC,GAAG,oBAAoB,CAAC,mBAAmB;yBAC5C;qBACF,CAAA;gBACH,CAAC;gBAED,OAAO,WAAW,CAAA;YACpB,CAAC,CAAC,CAAA;YAEJ,mDAAmD;YACnD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBACxC,WAAW,CAAC,YAAY,CACtB,CAAC,cAAc,EAAE,OAAO,CAAC,EACzB,wBAAwB,CAAC,oBAAoB,CAAC,CAC/C,CAAA;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;wBAClD,GAAG,oBAAoB;wBACvB,cAAc,EAAE,wBAAwB,CAAC,oBAAoB,CAAC,cAAc,IAAI,EAAE,CAAC;qBACpF,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,EAAE,oBAAoB,EAAE,CAAA;QACjC,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE;YAC7C,oBAAoB;YACpB,IAAI,OAAO,EAAE,oBAAoB,EAAE,CAAC;gBAClC,WAAW,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,qFAAqF;YACrF,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACxE,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { useParams } from 'react-router-dom';
3
+ import { updateCoursePhaseParticipationBatch } from '../network/mutations/updateCoursePhaseParticipationBatch';
4
+ export const useUpdateCoursePhaseParticipationBatch = () => {
5
+ const { phaseId } = useParams();
6
+ const queryClient = useQueryClient();
7
+ const mutation = useMutation({
8
+ mutationFn: (coursePhaseParticipations) => {
9
+ return updateCoursePhaseParticipationBatch(phaseId ?? '', coursePhaseParticipations);
10
+ },
11
+ onSuccess: () => {
12
+ queryClient.invalidateQueries({ queryKey: ['participants', phaseId] });
13
+ },
14
+ });
15
+ return mutation;
16
+ };
17
+ //# sourceMappingURL=useUpdateCoursePhaseParticipationBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateCoursePhaseParticipationBatch.js","sourceRoot":"","sources":["../../src/hooks/useUpdateCoursePhaseParticipationBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,mCAAmC,EAAE,MAAM,0DAA0D,CAAA;AAE9G,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAKpD,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAuB,CAAA;IACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,UAAU,EAAE,CAAC,yBAA2D,EAAE,EAAE;YAC1E,OAAO,mCAAmC,CAAC,OAAO,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAA;QACtF,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACxE,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,8 @@
1
1
  export * from './interfaces';
2
2
  export * from './zustand';
3
+ export * from './hooks';
4
+ export * from './network';
5
+ export * from './lib';
6
+ export * from './utils';
7
+ export * from './env';
3
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -10,4 +10,5 @@ export * from './roles';
10
10
  export * from './student';
11
11
  export * from './team';
12
12
  export * from './user';
13
+ export * from './routing';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extendedRouteObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedRouteObject.js","sourceRoot":"","sources":["../../../src/interfaces/routing/extendedRouteObject.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './extendedRouteObject';
2
+ export * from './sidebar';
3
+ export * from './studentDetail';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/routing/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/interfaces/routing/sidebar.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=studentDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studentDetail.js","sourceRoot":"","sources":["../../../src/interfaces/routing/studentDetail.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export const formatFileSize = (bytes) => {
2
+ if (!bytes)
3
+ return '0 Bytes';
4
+ const k = 1024;
5
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
6
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
7
+ return `${Math.round((bytes / Math.pow(k, i)) * 100) / 100} ${sizes[i]}`;
8
+ };
9
+ //# sourceMappingURL=formatFileSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatFileSize.js","sourceRoot":"","sources":["../../src/lib/formatFileSize.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAA;IACd,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ // Getting the list of countries
2
+ import countries from 'i18n-iso-countries';
3
+ import enLocale from 'i18n-iso-countries/langs/en.json';
4
+ countries.registerLocale(enLocale);
5
+ export const countriesArr = Object.entries(countries.getNames('en', { select: 'alias' })).map(([key, value]) => {
6
+ return {
7
+ label: value,
8
+ value: key,
9
+ };
10
+ });
11
+ // Getting the name of the country by its code
12
+ export const getCountryName = (code) => {
13
+ return countriesArr.find((country) => country.value === code)?.label;
14
+ };
15
+ //# sourceMappingURL=getCountries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCountries.js","sourceRoot":"","sources":["../../src/lib/getCountries.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAC1C,OAAO,QAAQ,MAAM,kCAAkC,CAAA;AAEvD,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAC3F,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IACf,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,GAAG;KACX,CAAA;AACH,CAAC,CACF,CAAA;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAsB,EAAE;IACjE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,CAAA;AACtE,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { sha256 } from 'js-sha256';
2
+ export const getGravatarUrl = (email, size) => {
3
+ const requestedSize = size ?? 200;
4
+ const hash = sha256(email.trim().toLowerCase());
5
+ return `https://www.gravatar.com/avatar/${hash}?d=identicon&s=${requestedSize}`;
6
+ };
7
+ //# sourceMappingURL=getGravatarUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGravatarUrl.js","sourceRoot":"","sources":["../../src/lib/getGravatarUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,IAAa,EAAE,EAAE;IAC7D,MAAM,aAAa,GAAG,IAAI,IAAI,GAAG,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IAE/C,OAAO,mCAAmC,IAAI,kBAAkB,aAAa,EAAE,CAAA;AACjF,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { PassStatus } from '../interfaces';
2
+ export const getStatusColor = (assessmentStatus) => {
3
+ switch (assessmentStatus) {
4
+ case PassStatus.PASSED:
5
+ return 'bg-green-500 dark:bg-green-700';
6
+ case PassStatus.FAILED:
7
+ return 'bg-red-500 dark:bg-red-700';
8
+ case PassStatus.NOT_ASSESSED:
9
+ default:
10
+ return 'bg-gray-500 dark:bg-gray-700';
11
+ }
12
+ };
13
+ //# sourceMappingURL=getStatusColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStatusColor.js","sourceRoot":"","sources":["../../src/lib/getStatusColor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,gBAA4B,EAAE,EAAE;IAC7D,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,gCAAgC,CAAA;QACzC,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,4BAA4B,CAAA;QACrC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B;YACE,OAAO,8BAA8B,CAAA;IACzC,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from './formatFileSize';
2
+ export * from './getCountries';
3
+ export * from './getGravatarUrl';
4
+ export * from './getStatusColor';
5
+ export * from './openFileDownload';
6
+ export { default as translations } from './translations.json';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,17 @@
1
+ export const openFileDownload = async ({ downloadUrl, fileName, }) => {
2
+ if (!downloadUrl) {
3
+ console.error('No download URL available for this file.');
4
+ return;
5
+ }
6
+ const link = document.createElement('a');
7
+ link.href = downloadUrl;
8
+ link.target = '_blank';
9
+ link.rel = 'noopener noreferrer';
10
+ if (fileName) {
11
+ link.download = fileName;
12
+ }
13
+ document.body.appendChild(link);
14
+ link.click();
15
+ link.remove();
16
+ };
17
+ //# sourceMappingURL=openFileDownload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openFileDownload.js","sourceRoot":"","sources":["../../src/lib/openFileDownload.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,WAAW,EACX,QAAQ,GACe,EAAiB,EAAE;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACzD,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IACvB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;IACtB,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAA;IAChC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAA;IACZ,IAAI,CAAC,MAAM,EAAE,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "university": {
3
+ "name": "TUM",
4
+ "login-name": "TUM-ID",
5
+ "matriculationNumberRegex": "^0\\d{7}$",
6
+ "matriculationExample": "0xxxxxxx",
7
+ "universityLoginRegex": "^[a-zA-Z]{2}\\d{2}[a-zA-Z]{3}$",
8
+ "universityLoginExample": "ab12cde",
9
+ "studyPrograms": ["Computer Science", "Information Systems", "Games Engineering", "Management and Technology"],
10
+ "studyProgramShortNames": {
11
+ "Computer Science": "CS",
12
+ "Information Systems": "IS",
13
+ "Games Engineering": "GE",
14
+ "Management and Technology": "M&T",
15
+ "Other": "Other"
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,23 @@
1
+ // TODO rewrite this as context provider and re-integrate it into the shared library
2
+ import axios from 'axios';
3
+ import { env } from '../env';
4
+ import { parseURL } from '../utils/parseURL';
5
+ const getServerBaseUrl = () => parseURL(env.CORE_HOST || '');
6
+ const authenticatedAxiosInstance = axios.create();
7
+ authenticatedAxiosInstance.interceptors.request.use((config) => {
8
+ config.baseURL = getServerBaseUrl();
9
+ if (typeof localStorage !== 'undefined') {
10
+ const token = localStorage.getItem('jwt_token');
11
+ if (token) {
12
+ config.headers['Authorization'] = `Bearer ${token}`;
13
+ }
14
+ }
15
+ return config;
16
+ });
17
+ const notAuthenticatedAxiosInstance = axios.create();
18
+ notAuthenticatedAxiosInstance.interceptors.request.use((config) => {
19
+ config.baseURL = getServerBaseUrl();
20
+ return config;
21
+ });
22
+ export { authenticatedAxiosInstance as axiosInstance, notAuthenticatedAxiosInstance };
23
+ //# sourceMappingURL=configService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configService.js","sourceRoot":"","sources":["../../src/network/configService.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;AAQpE,MAAM,0BAA0B,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;AAEjD,0BAA0B,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;IAC7D,MAAM,CAAC,OAAO,GAAG,gBAAgB,EAAE,CAAA;IAEnC,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAE/C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAA;QACrD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;AAEpD,6BAA6B,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;IAChE,MAAM,CAAC,OAAO,GAAG,gBAAgB,EAAE,CAAA;IACnC,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAEF,OAAO,EAAE,0BAA0B,IAAI,aAAa,EAAE,6BAA6B,EAAE,CAAA"}
@@ -0,0 +1,12 @@
1
+ export * from './configService';
2
+ export * from './mutations/deleteApplicationFile';
3
+ export * from './mutations/sendStatusMail';
4
+ export * from './mutations/updateCoursePhase';
5
+ export * from './mutations/updateCoursePhaseParticipationBatch';
6
+ export * from './mutations/updateCoursePhaseParticipationMetaData';
7
+ export * from './mutations/uploadFile';
8
+ export * from './queries/getCoursePhase';
9
+ export * from './queries/getCoursePhaseParticipationStatusCounts';
10
+ export * from './queries/getCoursePhaseParticipations';
11
+ export * from './queries/getOwnCoursePhaseParticipation';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iDAAiD,CAAA;AAC/D,cAAc,oDAAoD,CAAA;AAClE,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mDAAmD,CAAA;AACjE,cAAc,wCAAwC,CAAA;AACtD,cAAc,0CAA0C,CAAA"}
@@ -0,0 +1,21 @@
1
+ import axios from 'axios';
2
+ const getSanitizedErrorDetails = (err) => {
3
+ if (axios.isAxiosError(err)) {
4
+ return {
5
+ status: err.response?.status,
6
+ message: err.message,
7
+ };
8
+ }
9
+ if (err instanceof Error) {
10
+ return {
11
+ message: err.message,
12
+ };
13
+ }
14
+ return {
15
+ message: 'Unknown error',
16
+ };
17
+ };
18
+ export const logNetworkError = (message, err) => {
19
+ console.error(message, getSanitizedErrorDetails(err));
20
+ };
21
+ //# sourceMappingURL=logNetworkError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logNetworkError.js","sourceRoot":"","sources":["../../src/network/logNetworkError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,MAAM,wBAAwB,GAAG,CAAC,GAAY,EAAyB,EAAE;IACvE,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAA;IACH,CAAC;IAED,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,GAAY,EAAQ,EAAE;IACrE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA"}