@zeniai/client-epic-state 5.0.68 → 5.0.69-beta0RJ

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 (40) hide show
  1. package/lib/entity/scheduleActivityLog/scheduleActivityLogPayload.d.ts +36 -0
  2. package/lib/entity/scheduleActivityLog/scheduleActivityLogPayload.js +82 -0
  3. package/lib/entity/scheduleActivityLog/scheduleActivityLogReducer.d.ts +6 -0
  4. package/lib/entity/scheduleActivityLog/scheduleActivityLogReducer.js +27 -0
  5. package/lib/entity/scheduleActivityLog/scheduleActivityLogSelector.d.ts +4 -0
  6. package/lib/entity/scheduleActivityLog/scheduleActivityLogSelector.js +17 -0
  7. package/lib/entity/scheduleActivityLog/scheduleActivityLogState.d.ts +56 -0
  8. package/lib/entity/scheduleActivityLog/scheduleActivityLogState.js +23 -0
  9. package/lib/epic.d.ts +2 -1
  10. package/lib/epic.js +2 -1
  11. package/lib/esm/entity/scheduleActivityLog/scheduleActivityLogPayload.js +76 -0
  12. package/lib/esm/entity/scheduleActivityLog/scheduleActivityLogReducer.js +23 -0
  13. package/lib/esm/entity/scheduleActivityLog/scheduleActivityLogSelector.js +10 -0
  14. package/lib/esm/entity/scheduleActivityLog/scheduleActivityLogState.js +19 -0
  15. package/lib/esm/epic.js +2 -1
  16. package/lib/esm/index.js +2 -0
  17. package/lib/esm/reducer.js +6 -0
  18. package/lib/esm/view/scheduleActivityLogView/fetchScheduleActivityLogEpic.js +67 -0
  19. package/lib/esm/view/scheduleActivityLogView/scheduleActivityLogViewPayload.js +1 -0
  20. package/lib/esm/view/scheduleActivityLogView/scheduleActivityLogViewReducer.js +47 -0
  21. package/lib/esm/view/scheduleActivityLogView/scheduleActivityLogViewSelector.js +33 -0
  22. package/lib/esm/view/scheduleActivityLogView/scheduleActivityLogViewState.js +1 -0
  23. package/lib/esm/view/scheduleView/scheduleDetailView/epics/fetchScheduleDetailsPageEpic.js +4 -0
  24. package/lib/index.d.ts +3 -0
  25. package/lib/index.js +6 -1
  26. package/lib/reducer.d.ts +6 -0
  27. package/lib/reducer.js +6 -0
  28. package/lib/view/scheduleActivityLogView/fetchScheduleActivityLogEpic.d.ts +11 -0
  29. package/lib/view/scheduleActivityLogView/fetchScheduleActivityLogEpic.js +72 -0
  30. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewPayload.d.ts +8 -0
  31. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewPayload.js +2 -0
  32. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewReducer.d.ts +17 -0
  33. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewReducer.js +51 -0
  34. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewSelector.d.ts +8 -0
  35. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewSelector.js +36 -0
  36. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewState.d.ts +5 -0
  37. package/lib/view/scheduleActivityLogView/scheduleActivityLogViewState.js +2 -0
  38. package/lib/view/scheduleView/scheduleDetailView/epics/fetchScheduleDetailsPageEpic.d.ts +2 -1
  39. package/lib/view/scheduleView/scheduleDetailView/epics/fetchScheduleDetailsPageEpic.js +4 -0
  40. package/package.json +2 -2
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchScheduleActivityLogEpic = exports.filterValidScheduleActivityPayloads = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const scheduleActivityLogReducer_1 = require("../../entity/scheduleActivityLog/scheduleActivityLogReducer");
7
+ const userReducer_1 = require("../../entity/user/userReducer");
8
+ const responsePayload_1 = require("../../responsePayload");
9
+ const scheduleActivityLogViewReducer_1 = require("./scheduleActivityLogViewReducer");
10
+ // Drop any payload that lacks the three top-level fields the entity pipeline
11
+ // strictly needs (`event_type`, `correlation_id`, `create_time`). Surfaces each
12
+ // drop as a console.warn so the next backend iteration has a list of gaps to
13
+ // tighten. Returns the kept items so the rest of the timeline still renders.
14
+ const filterValidScheduleActivityPayloads = (rawActivity) => {
15
+ const safe = [];
16
+ for (const item of rawActivity) {
17
+ if (typeof item?.event_type !== 'string') {
18
+ console.warn('[scheduleActivityLog] dropping payload: missing event_type', item);
19
+ continue;
20
+ }
21
+ if (typeof item?.correlation_id !== 'string') {
22
+ console.warn('[scheduleActivityLog] dropping payload: missing correlation_id', item);
23
+ continue;
24
+ }
25
+ if (typeof item?.create_time !== 'string') {
26
+ console.warn('[scheduleActivityLog] dropping payload: missing create_time', item);
27
+ continue;
28
+ }
29
+ safe.push(item);
30
+ }
31
+ return safe;
32
+ };
33
+ exports.filterValidScheduleActivityPayloads = filterValidScheduleActivityPayloads;
34
+ const fetchScheduleActivityLogEpic = (actions$, _, zeniAPI) => actions$.pipe((0, operators_1.filter)(scheduleActivityLogViewReducer_1.fetchScheduleActivityLog.match), (0, operators_1.switchMap)((action) => {
35
+ const { scheduleId } = action.payload;
36
+ return zeniAPI
37
+ .getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/schedules/${scheduleId}/activity`)
38
+ .pipe((0, operators_1.mergeMap)((response) => {
39
+ if ((0, responsePayload_1.isSuccessResponse)(response) &&
40
+ response.data != null &&
41
+ response.data.activity != null) {
42
+ const safeActivity = (0, exports.filterValidScheduleActivityPayloads)(response.data.activity);
43
+ const updateActions = [];
44
+ if (response.data.users != null &&
45
+ response.data.users.length > 0) {
46
+ updateActions.push((0, userReducer_1.updateAllUsers)({
47
+ users: response.data.users,
48
+ updateType: 'merge',
49
+ }));
50
+ }
51
+ updateActions.push((0, scheduleActivityLogReducer_1.updateScheduleActivityLogs)(safeActivity));
52
+ updateActions.push((0, scheduleActivityLogViewReducer_1.updateScheduleActivityLogViewOnSuccess)({
53
+ data: safeActivity,
54
+ scheduleId,
55
+ }));
56
+ return (0, rxjs_1.from)(updateActions);
57
+ }
58
+ else {
59
+ return (0, rxjs_1.of)((0, scheduleActivityLogViewReducer_1.updateScheduleActivityLogViewFetchStatus)({
60
+ fetchState: 'Error',
61
+ error: response.status,
62
+ scheduleId,
63
+ }));
64
+ }
65
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, scheduleActivityLogViewReducer_1.updateScheduleActivityLogViewFetchStatus)({
66
+ scheduleId,
67
+ fetchState: 'Error',
68
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'fetch schedule activity log REST API call errored out' +
69
+ JSON.stringify(error)),
70
+ }))));
71
+ }));
72
+ exports.fetchScheduleActivityLogEpic = fetchScheduleActivityLogEpic;
@@ -0,0 +1,8 @@
1
+ import { ScheduleActivityLogPayload } from '../../entity/scheduleActivityLog/scheduleActivityLogPayload';
2
+ import { UserPayload } from '../../entity/user/userPayload';
3
+ import { ZeniAPIResponse } from '../../responsePayload';
4
+ export interface FetchScheduleActivityLogPayload {
5
+ activity: ScheduleActivityLogPayload[];
6
+ users?: UserPayload[];
7
+ }
8
+ export type FetchScheduleActivityLogResponse = ZeniAPIResponse<FetchScheduleActivityLogPayload>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { FetchState } from '../../commonStateTypes/common';
2
+ import { ScheduleActivityLogPayload } from '../../entity/scheduleActivityLog/scheduleActivityLogPayload';
3
+ import { ZeniAPIStatus } from '../../responsePayload';
4
+ import { ScheduleActivityLogViewState } from './scheduleActivityLogViewState';
5
+ export declare const initialState: ScheduleActivityLogViewState;
6
+ export declare const fetchScheduleActivityLog: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[scheduleId: string], {
7
+ scheduleId: string;
8
+ }, "scheduleActivityLogView/fetchScheduleActivityLog", never, never>, updateScheduleActivityLogViewOnSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
9
+ data: ScheduleActivityLogPayload[];
10
+ scheduleId: string;
11
+ }, "scheduleActivityLogView/updateScheduleActivityLogViewOnSuccess">, clearScheduleActivityLogView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"scheduleActivityLogView/clearScheduleActivityLogView">, updateScheduleActivityLogViewFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
12
+ fetchState: FetchState;
13
+ scheduleId: string;
14
+ error?: ZeniAPIStatus;
15
+ }, "scheduleActivityLogView/updateScheduleActivityLogViewFetchStatus">;
16
+ declare const _default: import("redux").Reducer<ScheduleActivityLogViewState>;
17
+ export default _default;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.updateScheduleActivityLogViewFetchStatus = exports.clearScheduleActivityLogView = exports.updateScheduleActivityLogViewOnSuccess = exports.fetchScheduleActivityLog = exports.initialState = void 0;
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ const scheduleActivityLogPayload_1 = require("../../entity/scheduleActivityLog/scheduleActivityLogPayload");
7
+ exports.initialState = {
8
+ scheduleActivityLogIdsByScheduleId: {},
9
+ scheduleActivityLogFetchStateByScheduleId: {},
10
+ };
11
+ const scheduleActivityLogView = (0, toolkit_1.createSlice)({
12
+ name: 'scheduleActivityLogView',
13
+ initialState: exports.initialState,
14
+ reducers: {
15
+ fetchScheduleActivityLog: {
16
+ prepare(scheduleId) {
17
+ return {
18
+ payload: { scheduleId },
19
+ };
20
+ },
21
+ reducer(draft, action) {
22
+ const { scheduleId } = action.payload;
23
+ draft.scheduleActivityLogFetchStateByScheduleId[scheduleId] = {
24
+ fetchState: 'In-Progress',
25
+ error: undefined,
26
+ };
27
+ draft.scheduleActivityLogIdsByScheduleId[scheduleId] = [];
28
+ },
29
+ },
30
+ updateScheduleActivityLogViewOnSuccess(draft, action) {
31
+ const { data, scheduleId } = action.payload;
32
+ draft.scheduleActivityLogFetchStateByScheduleId[scheduleId] = {
33
+ fetchState: 'Completed',
34
+ error: undefined,
35
+ };
36
+ draft.scheduleActivityLogIdsByScheduleId[scheduleId] = data.map((scheduleActivityLog) => (0, scheduleActivityLogPayload_1.toScheduleActivityLogId)(scheduleActivityLog.correlation_id, scheduleActivityLog.event_type, scheduleActivityLog.data?.transaction?.line_id));
37
+ },
38
+ updateScheduleActivityLogViewFetchStatus(draft, action) {
39
+ const { fetchState, scheduleId, error } = action.payload;
40
+ draft.scheduleActivityLogFetchStateByScheduleId[scheduleId] = {
41
+ fetchState,
42
+ error,
43
+ };
44
+ },
45
+ clearScheduleActivityLogView(draft) {
46
+ Object.assign(draft, exports.initialState);
47
+ },
48
+ },
49
+ });
50
+ _a = scheduleActivityLogView.actions, exports.fetchScheduleActivityLog = _a.fetchScheduleActivityLog, exports.updateScheduleActivityLogViewOnSuccess = _a.updateScheduleActivityLogViewOnSuccess, exports.clearScheduleActivityLogView = _a.clearScheduleActivityLogView, exports.updateScheduleActivityLogViewFetchStatus = _a.updateScheduleActivityLogViewFetchStatus;
51
+ exports.default = scheduleActivityLogView.reducer;
@@ -0,0 +1,8 @@
1
+ import { ID } from '../../commonStateTypes/common';
2
+ import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
3
+ import { ScheduleActivityLog } from '../../entity/scheduleActivityLog/scheduleActivityLogState';
4
+ import { RootState } from '../../reducer';
5
+ export interface ScheduleActivityLogViewSelectorView extends SelectorView {
6
+ scheduleActivityLogs: ScheduleActivityLog[];
7
+ }
8
+ export declare const getScheduleActivityLogView: (state: RootState, scheduleId: ID) => ScheduleActivityLogViewSelectorView;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getScheduleActivityLogView = void 0;
4
+ const toolkit_1 = require("@reduxjs/toolkit");
5
+ const reduceFetchState_1 = require("../../commonStateTypes/reduceFetchState");
6
+ const scheduleActivityLogSelector_1 = require("../../entity/scheduleActivityLog/scheduleActivityLogSelector");
7
+ exports.getScheduleActivityLogView = (0, toolkit_1.createSelector)((state) => state.scheduleActivityLogViewState, (state) => state.scheduleActivityLogState, (state) => state.userState, (_state, scheduleId) => scheduleId, (scheduleActivityLogViewState, scheduleActivityLogState, userState, scheduleId) => {
8
+ const fetchStateAndError = scheduleActivityLogViewState
9
+ .scheduleActivityLogFetchStateByScheduleId[scheduleId] ?? {
10
+ fetchState: 'Not-Started',
11
+ error: undefined,
12
+ };
13
+ const scheduleActivityLogIds = scheduleActivityLogViewState.scheduleActivityLogIdsByScheduleId[scheduleId] ?? [];
14
+ const rawLogs = (0, scheduleActivityLogSelector_1.getScheduleActivityLogsByIds)(scheduleActivityLogState, scheduleActivityLogIds);
15
+ const scheduleActivityLogs = rawLogs.map((log) => {
16
+ const userId = log.data?.transaction?.userId;
17
+ if (userId == null || log.data == null) {
18
+ return log;
19
+ }
20
+ const user = userState.userByUserId[userId];
21
+ if (user == null) {
22
+ return log;
23
+ }
24
+ return {
25
+ ...log,
26
+ data: {
27
+ ...log.data,
28
+ user,
29
+ },
30
+ };
31
+ });
32
+ return {
33
+ ...(0, reduceFetchState_1.reduceFetchState)([fetchStateAndError]),
34
+ scheduleActivityLogs,
35
+ };
36
+ });
@@ -0,0 +1,5 @@
1
+ import { FetchStateAndError, ID } from '../../commonStateTypes/common';
2
+ export interface ScheduleActivityLogViewState {
3
+ scheduleActivityLogFetchStateByScheduleId: Record<ID, FetchStateAndError>;
4
+ scheduleActivityLogIdsByScheduleId: Record<ID, ID[]>;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -3,6 +3,7 @@ import { Observable } from 'rxjs';
3
3
  import { RootState } from '../../../../reducer';
4
4
  import { fetchAccountList } from '../../../accountList/accountListReducer';
5
5
  import { fetchClassList } from '../../../classList/classListReducer';
6
+ import { fetchScheduleActivityLog } from '../../../scheduleActivityLogView/scheduleActivityLogViewReducer';
6
7
  import { fetchScheduleDetails, fetchScheduleDetailsPage } from '../scheduleDetailReducer';
7
- export type ActionType = ReturnType<typeof fetchScheduleDetails> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof fetchScheduleDetailsPage>;
8
+ export type ActionType = ReturnType<typeof fetchScheduleDetails> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof fetchScheduleActivityLog> | ReturnType<typeof fetchScheduleDetailsPage>;
8
9
  export declare const fetchScheduleDetailsPageEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -5,6 +5,7 @@ const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
6
  const accountListReducer_1 = require("../../../accountList/accountListReducer");
7
7
  const classListReducer_1 = require("../../../classList/classListReducer");
8
+ const scheduleActivityLogViewReducer_1 = require("../../../scheduleActivityLogView/scheduleActivityLogViewReducer");
8
9
  const scheduleListHelper_1 = require("../../scheduleListView/scheduleListHelper");
9
10
  const scheduleDetailReducer_1 = require("../scheduleDetailReducer");
10
11
  const fetchScheduleDetailsPageEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(scheduleDetailReducer_1.fetchScheduleDetailsPage.match), (0, operators_1.mergeMap)((action) => {
@@ -22,6 +23,9 @@ const fetchScheduleDetailsPageEpic = (actions$, state$) => actions$.pipe((0, ope
22
23
  }
23
24
  if (action.payload.selectedJeScheduleDetailId != null) {
24
25
  scheduleDetailsActions.push((0, scheduleDetailReducer_1.fetchScheduleDetails)(action.payload.scheduleType, action.payload.selectedJeScheduleDetailId, action.payload.cacheOverride));
26
+ // Prefetch the schedule activity log alongside the detail page so the
27
+ // side panel renders instantly when the user taps the navbar icon.
28
+ scheduleDetailsActions.push((0, scheduleActivityLogViewReducer_1.fetchScheduleActivityLog)(action.payload.selectedJeScheduleDetailId));
25
29
  }
26
30
  return (0, rxjs_1.concat)((0, rxjs_1.from)(scheduleDetailsActions));
27
31
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.0.68",
3
+ "version": "5.0.69-beta0RJ",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",
@@ -116,7 +116,7 @@
116
116
  "find-dead-code": "ts-prune | grep -v '(used in module)'",
117
117
  "find-unused-exports": "ts-unused-exports ./tsconfig.json",
118
118
  "circular-dependency": "npx madge --circular --extensions ts ./src",
119
- "build": "echo 'Running full ESLint...' && pnpm lint && concurrently --kill-others-on-fail --handle-input \"echo 'TypeScript build in progress...' && time tsc && echo 'ESM build...' && tsc -p tsconfig.esm.json\" \"echo 'Running tests and typecheck...' && pnpm test\" && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
119
+ "build": "concurrently --kill-others-on-fail --handle-input \"echo 'TypeScript build in progress...' && time tsc && echo 'ESM build...' && tsc -p tsconfig.esm.json\" \"echo 'Running tests and typecheck (incl. lint-modified-files)...' && pnpm test\" && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
120
120
  "only-build": "eslint . --ext .js,.jsx,.ts,.tsx && time tsc && tsc -p tsconfig.esm.json && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
121
121
  "only-build-dev": "eslint . --ext .js,.jsx,.ts,.tsx && time tsc -p tsconfig.dev.json && tsc -p tsconfig.esm.dev.json && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
122
122
  "format": "prettier --write --ignore-unknown \"src/**/*\" && pnpm lint",