@sarafapp/iron_core 1.0.64 → 1.0.67
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.
- package/package.json +5 -2
- package/index.ts +0 -37
- package/src/BaseModel.ts +0 -127
- package/src/Utils.ts +0 -16
- package/src/accessHandling/AccessControl.ts +0 -33
- package/src/accessHandling/AccessLevel.ts +0 -52
- package/src/accessHandling/Accessible.ts +0 -3
- package/src/accessHandling/EveryDirectiveAccess.ts +0 -7
- package/src/accessHandling/SSO/AuthorizationDirective.ts +0 -65
- package/src/accessHandling/SSO/AuthorizationService.ts +0 -74
- package/src/accessHandling/SSO/EveryLevelAuthorizationDirective.ts +0 -7
- package/src/accessHandling/SSO/SomeLevelsAuthorizationDirective.ts +0 -7
- package/src/accessHandling/SomeDirectiveAccess.ts +0 -7
- package/src/accessHandling/index.ts +0 -9
- package/src/baseDirective/BeforeMountDirective.ts +0 -3
- package/src/baseDirective/BeforeUnMountDirective.ts +0 -3
- package/src/baseDirective/BeforeUpdateDirective.ts +0 -3
- package/src/baseDirective/CreatedDirective.ts +0 -3
- package/src/baseDirective/MountedDirective.ts +0 -3
- package/src/baseDirective/UnMountedDirective.ts +0 -3
- package/src/baseDirective/UpdateDirective.ts +0 -3
- package/src/baseDirective/index.ts +0 -7
- package/src/baseForm/BaseRequestBodyFilter.ts +0 -7
- package/src/baseForm/FormManager.ts +0 -95
- package/src/baseForm/InputControl.ts +0 -182
- package/src/baseForm/InputControlBuilder.ts +0 -59
- package/src/baseForm/InputControlData.ts +0 -16
- package/src/baseForm/RequestBodyFilter.ts +0 -3
- package/src/baseForm/TouchSensitiveForm.ts +0 -47
- package/src/baseForm/UseForm.ts +0 -32
- package/src/baseForm/index.ts +0 -8
- package/src/baseSchedule/Schedule.ts +0 -3
- package/src/baseSchedule/Scheduler.ts +0 -29
- package/src/baseSchedule/index.ts +0 -2
- package/src/baseTable/BaseTable.ts +0 -162
- package/src/baseTable/Constants.ts +0 -26
- package/src/baseTable/OnDestory.ts +0 -3
- package/src/baseTable/RowActionSource.ts +0 -5
- package/src/baseTable/RowClick.ts +0 -3
- package/src/baseTable/RowDoubleClick.ts +0 -3
- package/src/baseTable/RowMetaClick.ts +0 -3
- package/src/baseTable/SelectableTable.ts +0 -86
- package/src/baseTable/TableAction.ts +0 -10
- package/src/baseTable/TableHeaderSchema.ts +0 -44
- package/src/baseTable/TableLoader.ts +0 -3
- package/src/baseTable/TablePaginate.ts +0 -3
- package/src/baseTable/TableService.ts +0 -10
- package/src/baseTable/TableSort.ts +0 -5
- package/src/baseTable/TableSummarySchema.ts +0 -11
- package/src/baseTable/generator/SelectableTableGenerator.ts +0 -65
- package/src/baseTable/generator/TableCellComponentRegistry.ts +0 -15
- package/src/baseTable/generator/TableConfig.ts +0 -18
- package/src/baseTable/generator/TableGenerator.ts +0 -147
- package/src/baseTable/generator/TableSource.ts +0 -34
- package/src/baseTable/index.ts +0 -43
- package/src/baseTable/moduleConnection/Action.ts +0 -12
- package/src/baseTable/moduleConnection/Column.ts +0 -11
- package/src/baseTable/moduleConnection/Table.ts +0 -49
- package/src/baseTable/moduleConnection/TableDestroy.ts +0 -7
- package/src/baseTable/moduleConnection/TableRowClick.ts +0 -7
- package/src/baseTable/moduleConnection/generator/GColumn.ts +0 -10
- package/src/baseTable/moduleConnection/generator/GTable.ts +0 -11
- package/src/composables/UseCrud.ts +0 -53
- package/src/composables/UseData.ts +0 -70
- package/src/composables/UseLoadingStatus.ts +0 -65
- package/src/composables/UseParams.ts +0 -93
- package/src/composables/UseRepository.ts +0 -207
- package/src/composables/UseState.ts +0 -30
- package/src/composables/UseStaticTableService.ts +0 -45
- package/src/composables/index.ts +0 -7
- package/src/constants/Constants.ts +0 -126
- package/src/constants/index.ts +0 -19
- package/src/crudService/CrudService.ts +0 -121
- package/src/crudService/index.ts +0 -1
- package/src/dateHandling/Constants.ts +0 -5
- package/src/dateHandling/Converter.ts +0 -15
- package/src/dateHandling/JalaliDateSetup.ts +0 -42
- package/src/dateHandling/Model.ts +0 -27
- package/src/dateHandling/Utils.ts +0 -49
- package/src/dateHandling/index.ts +0 -5
- package/src/debounce/DebounceAction.ts +0 -4
- package/src/debounce/DebounceService.ts +0 -27
- package/src/debounce/index.ts +0 -2
- package/src/deviceManagement/Constants.ts +0 -4
- package/src/deviceManagement/Visibility.ts +0 -4
- package/src/deviceManagement/VisibilityManager.ts +0 -18
- package/src/deviceManagement/index.ts +0 -3
- package/src/errorHandling/ErrorHandler.ts +0 -3
- package/src/errorHandling/HandleError.ts +0 -20
- package/src/errorHandling/index.ts +0 -2
- package/src/eventSystem/CustomEventDispatcher.ts +0 -13
- package/src/eventSystem/Model.ts +0 -29
- package/src/eventSystem/OnEvent.ts +0 -25
- package/src/eventSystem/index.ts +0 -3
- package/src/feedbackHandling/FailureFeedback.ts +0 -3
- package/src/feedbackHandling/Feedback.ts +0 -34
- package/src/feedbackHandling/HandleFeedback.ts +0 -28
- package/src/feedbackHandling/InfoFeedback.ts +0 -3
- package/src/feedbackHandling/SuccessFeedback.ts +0 -3
- package/src/feedbackHandling/WarningFeedback.ts +0 -3
- package/src/feedbackHandling/index.ts +0 -6
- package/src/httpClient/ApiBuilder.ts +0 -57
- package/src/httpClient/ErrorHandlerRegistry.ts +0 -29
- package/src/httpClient/HttpClient.ts +0 -77
- package/src/httpClient/Interceptor.ts +0 -5
- package/src/httpClient/index.ts +0 -4
- package/src/initializer/ApplicationInitializer.ts +0 -15
- package/src/initializer/Initializer.ts +0 -3
- package/src/initializer/index.ts +0 -2
- package/src/json/JsonMapper.ts +0 -48
- package/src/json/index.ts +0 -1
- package/src/layout/Constants.ts +0 -11
- package/src/layout/DialogService.ts +0 -75
- package/src/layout/DrawerService.ts +0 -25
- package/src/layout/Toast.ts +0 -14
- package/src/layout/index.ts +0 -4
- package/src/lib/Constants.ts +0 -433
- package/src/lib/Formatter.ts +0 -68
- package/src/lib/Util.ts +0 -113
- package/src/lib/index.ts +0 -3
- package/src/observables/AbstractSubject.ts +0 -21
- package/src/observables/BehaviorSubject.ts +0 -58
- package/src/observables/Observer.ts +0 -3
- package/src/observables/Subject.ts +0 -9
- package/src/observables/index.ts +0 -4
- package/src/process/Proccess.ts +0 -21
- package/src/process/ProcessManager.ts +0 -31
- package/src/process/index.ts +0 -2
- package/src/repository/Params.ts +0 -10
- package/src/repository/Repository.ts +0 -44
- package/src/repository/SyncDetail.ts +0 -8
- package/src/repository/index.ts +0 -4
- package/src/repository/model.ts +0 -9
- package/src/routeGuard/RouteGuard.ts +0 -38
- package/src/routeGuard/index.ts +0 -1
- package/src/search/client/ClientArraySearch.ts +0 -25
- package/src/search/client/ClientSearch.ts +0 -3
- package/src/search/index.ts +0 -2
- package/src/sort/SortDetail.ts +0 -11
- package/src/sort/client/Sorter.ts +0 -28
- package/src/sort/index.ts +0 -4
- package/src/sort/strategies/SimpleSort.ts +0 -35
- package/src/sort/strategies/SortStrategy.ts +0 -4
- package/src/types/Global.ts +0 -1
- package/src/types/index.ts +0 -1
- package/src/validators/Validator.ts +0 -5
- package/src/validators/index.ts +0 -1
- package/src/webSocket/Constants.ts +0 -6
- package/src/webSocket/Model.ts +0 -16
- package/src/webSocket/WebSocketService.ts +0 -153
- package/src/webSocket/index.ts +0 -3
- package/vite.config.ts +0 -55
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Scheduler,
|
|
3
|
-
SyncDetail,
|
|
4
|
-
useParams,
|
|
5
|
-
useCrud,
|
|
6
|
-
type Repository,
|
|
7
|
-
} from "../../index";
|
|
8
|
-
import type { BaseModel } from "../BaseModel";
|
|
9
|
-
|
|
10
|
-
export class CrudService<Entity extends BaseModel> {
|
|
11
|
-
protected repository: Repository<Entity>;
|
|
12
|
-
protected crudDataManagement: ReturnType<typeof useCrud>;
|
|
13
|
-
protected scheduler = new Scheduler({
|
|
14
|
-
runAction: async () => {
|
|
15
|
-
await this.fetchList();
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
protected syncDetail: SyncDetail;
|
|
19
|
-
public paramManager;
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
repository: Repository<Entity>,
|
|
23
|
-
crudDataManagement: ReturnType<typeof useCrud>,
|
|
24
|
-
paramManager: ReturnType<typeof useParams>,
|
|
25
|
-
) {
|
|
26
|
-
this.repository = repository;
|
|
27
|
-
this.crudDataManagement = crudDataManagement;
|
|
28
|
-
this.syncDetail = this.repository.getSyncDetail();
|
|
29
|
-
this.paramManager = paramManager;
|
|
30
|
-
this.syncListWithApi();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public async fetchList() {
|
|
34
|
-
const data = await this.repository.fetchList(
|
|
35
|
-
this.paramManager.getRequestParams(),
|
|
36
|
-
);
|
|
37
|
-
this.crudDataManagement.addOrReplaceItems(data.items);
|
|
38
|
-
this.crudDataManagement.setTotalCount(data.totalItems);
|
|
39
|
-
return data;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public async fetchItemById(id: number) {
|
|
43
|
-
const data = await this.repository.fetchItemById(id);
|
|
44
|
-
if (data) {
|
|
45
|
-
this.crudDataManagement.addOrReplaceItems([data]);
|
|
46
|
-
}
|
|
47
|
-
return data;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public async createItem<Body>(body: Body) {
|
|
51
|
-
const data = await this.repository.createItem(body);
|
|
52
|
-
|
|
53
|
-
if (data && !this.shouldRefreshListAfterCreate()) {
|
|
54
|
-
this.crudDataManagement.addOrReplaceItems([data]);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (data && this.shouldRefreshListAfterCreate()) {
|
|
58
|
-
await this.fetchList();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return data;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
protected shouldRefreshListAfterCreate() {
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
public async deleteItem(id: number) {
|
|
69
|
-
const data = await this.repository.deleteItem(id);
|
|
70
|
-
if (data) {
|
|
71
|
-
return this.crudDataManagement.removeById(id);
|
|
72
|
-
}
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
public async updateItem<Body>(id: number, body: Body) {
|
|
77
|
-
const data = await this.repository.updateItem(id, body);
|
|
78
|
-
if (this.shouldRefreshListAfterUpdate() && data) {
|
|
79
|
-
await this.fetchList();
|
|
80
|
-
return this.crudDataManagement.getItemById(id);
|
|
81
|
-
}
|
|
82
|
-
return data;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
protected shouldRefreshListAfterUpdate() {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public async removeItem(id: number) {
|
|
90
|
-
const data = await this.repository.deleteItem(id);
|
|
91
|
-
|
|
92
|
-
if (data && this.shouldRefreshListAfterDelete()) {
|
|
93
|
-
await this.fetchList();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (data) {
|
|
97
|
-
return this.crudDataManagement.removeById(id);
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
protected shouldRefreshListAfterDelete() {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
private syncListWithApi() {
|
|
107
|
-
this.scheduler.clearInterval();
|
|
108
|
-
if (this.syncDetail.shouldKeepSync) {
|
|
109
|
-
this.scheduler.setupInterval(this.syncDetail.intervalInMillisecond);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public onDestroy() {
|
|
114
|
-
this.crudDataManagement.clearItems();
|
|
115
|
-
this.clearInterval();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
public clearInterval() {
|
|
119
|
-
this.scheduler.clearInterval();
|
|
120
|
-
}
|
|
121
|
-
}
|
package/src/crudService/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './CrudService';
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import dayjs from "dayjs";
|
|
2
|
-
|
|
3
|
-
export class DateConverter {
|
|
4
|
-
public static standardToUnix(dateToConvert: string) {
|
|
5
|
-
return Math.floor(new Date(dateToConvert).getTime() / 1000);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
public static unixToStandard(dateToConvert: number) {
|
|
9
|
-
return new Date(dateToConvert * 1000).toString();
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
public static getUnixEndOfDayInUnix(unix: number) {
|
|
13
|
-
return dayjs.unix(unix).endOf("day").unix();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import dayjs from "dayjs";
|
|
2
|
-
import weekday from "dayjs/plugin/weekday";
|
|
3
|
-
import weekOfYear from "dayjs/plugin/weekOfYear";
|
|
4
|
-
import weekYear from "dayjs/plugin/weekYear";
|
|
5
|
-
import jalaliPlugin from "jalali-plugin-dayjs";
|
|
6
|
-
import "dayjs/locale/fa";
|
|
7
|
-
|
|
8
|
-
const localeObject: ILocale = {
|
|
9
|
-
ordinal(n: number): number | string {
|
|
10
|
-
return undefined;
|
|
11
|
-
},
|
|
12
|
-
relativeTime: undefined,
|
|
13
|
-
name: "fa",
|
|
14
|
-
weekdays: "یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),
|
|
15
|
-
weekdaysShort: "ی_د_س_چ_پ_ج_ش".split("_"),
|
|
16
|
-
weekdaysMin: "ی_د_س_چ_پ_ج_ش".split("_"),
|
|
17
|
-
months:
|
|
18
|
-
"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split(
|
|
19
|
-
"_",
|
|
20
|
-
),
|
|
21
|
-
monthsShort:
|
|
22
|
-
"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split(
|
|
23
|
-
"_",
|
|
24
|
-
),
|
|
25
|
-
weekStart: 6,
|
|
26
|
-
formats: {
|
|
27
|
-
L: "YYYY/MM/DD",
|
|
28
|
-
LL: "D MMMM YYYY",
|
|
29
|
-
LLL: "D MMMM YYYY HH:mm",
|
|
30
|
-
LLLL: "dddd, D MMMM YYYY HH:mm",
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export function setupJalaliDate() {
|
|
35
|
-
dayjs.extend(jalaliPlugin);
|
|
36
|
-
dayjs.calendar("jalali");
|
|
37
|
-
dayjs.extend(weekday);
|
|
38
|
-
dayjs.extend(weekOfYear);
|
|
39
|
-
dayjs.extend(weekYear);
|
|
40
|
-
|
|
41
|
-
dayjs.locale(localeObject, {}, true);
|
|
42
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { type Nullable } from "../types";
|
|
2
|
-
|
|
3
|
-
export class RangeValue {
|
|
4
|
-
public start: number;
|
|
5
|
-
public end: number;
|
|
6
|
-
|
|
7
|
-
constructor(start: number, end: number) {
|
|
8
|
-
this.start = start;
|
|
9
|
-
this.end = end;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class DateDisabledOptions {
|
|
14
|
-
public maxDate: Nullable<number>;
|
|
15
|
-
public minDate: Nullable<number>;
|
|
16
|
-
public disabledDates: number[];
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
max: Nullable<number>,
|
|
20
|
-
min: Nullable<number>,
|
|
21
|
-
disabledDates: number[],
|
|
22
|
-
) {
|
|
23
|
-
this.maxDate = max;
|
|
24
|
-
this.minDate = min;
|
|
25
|
-
this.disabledDates = disabledDates;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { DateConverter } from "./Converter";
|
|
2
|
-
import { DateDisabledOptions } from "./Model";
|
|
3
|
-
import dayjs from "dayjs";
|
|
4
|
-
|
|
5
|
-
export class DateTools {
|
|
6
|
-
public static isDateDisabled(
|
|
7
|
-
options: DateDisabledOptions,
|
|
8
|
-
date: dayjs.Dayjs,
|
|
9
|
-
) {
|
|
10
|
-
for (const disabledDate of options.disabledDates) {
|
|
11
|
-
if (DateTools.areUnixesInSameDate(disabledDate, date.unix())) return true;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (options.maxDate) {
|
|
15
|
-
if (DateTools.isDateGraterOrSame(options.maxDate, date.unix()))
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (options.minDate) {
|
|
20
|
-
if (DateTools.isDateLowerOrSame(options.minDate, date.unix()))
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public static areUnixesInSameDate(
|
|
27
|
-
firstDate: number,
|
|
28
|
-
secondDate: number,
|
|
29
|
-
): boolean {
|
|
30
|
-
return (
|
|
31
|
-
DateConverter.getUnixEndOfDayInUnix(firstDate) ===
|
|
32
|
-
DateConverter.getUnixEndOfDayInUnix(secondDate)
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public static isDateGraterOrSame(originDate: number, dateToCheck: number) {
|
|
37
|
-
return (
|
|
38
|
-
DateConverter.getUnixEndOfDayInUnix(dateToCheck) >=
|
|
39
|
-
DateConverter.getUnixEndOfDayInUnix(originDate)
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public static isDateLowerOrSame(originDate: number, dateToCheck: number) {
|
|
44
|
-
return (
|
|
45
|
-
DateConverter.getUnixEndOfDayInUnix(dateToCheck) <=
|
|
46
|
-
DateConverter.getUnixEndOfDayInUnix(originDate)
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { type DebounceAction } from "./DebounceAction";
|
|
2
|
-
import { type Nullable } from "../types";
|
|
3
|
-
|
|
4
|
-
export class DebounceService {
|
|
5
|
-
private readonly debounceTimeout: number;
|
|
6
|
-
private action: DebounceAction;
|
|
7
|
-
private timerId: Nullable<ReturnType<typeof setTimeout>> = null;
|
|
8
|
-
|
|
9
|
-
constructor(action: DebounceAction, debounceTimeout: number = 500) {
|
|
10
|
-
this.debounceTimeout = debounceTimeout;
|
|
11
|
-
this.action = action;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public runAction() {
|
|
15
|
-
this.cancelDebounce();
|
|
16
|
-
this.action.runImmediate();
|
|
17
|
-
this.timerId = setTimeout(() => {
|
|
18
|
-
this.action.runDebounce();
|
|
19
|
-
}, this.debounceTimeout);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public cancelDebounce() {
|
|
23
|
-
if (this.timerId) {
|
|
24
|
-
clearTimeout(this.timerId);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
package/src/debounce/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { VisibilityState } from "./Constants";
|
|
2
|
-
import { type Visibility } from "./Visibility";
|
|
3
|
-
|
|
4
|
-
export class VisibilityManager {
|
|
5
|
-
constructor(private _visibilityControl: Visibility) {
|
|
6
|
-
this.mangeVisibilityEvent();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
private mangeVisibilityEvent() {
|
|
10
|
-
document.addEventListener("visibilitychange", (event) => {
|
|
11
|
-
if (document.visibilityState === VisibilityState.Hidden) {
|
|
12
|
-
this._visibilityControl.screenInvisible(event);
|
|
13
|
-
} else {
|
|
14
|
-
this._visibilityControl.screenVisible(event);
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type ErrorHandler } from "./ErrorHandler";
|
|
2
|
-
|
|
3
|
-
export function HandleError(handlers: ErrorHandler[]) {
|
|
4
|
-
return function (
|
|
5
|
-
_name: unknown,
|
|
6
|
-
_target: unknown,
|
|
7
|
-
descriptor: PropertyDescriptor,
|
|
8
|
-
) {
|
|
9
|
-
const originalMethod = descriptor.value;
|
|
10
|
-
descriptor.value = async function (...args: unknown[]) {
|
|
11
|
-
try {
|
|
12
|
-
return await originalMethod.apply(this, args);
|
|
13
|
-
} catch (error) {
|
|
14
|
-
for (const handler of handlers) {
|
|
15
|
-
await handler.handleError(error as Error);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { singleton } from "tsyringe";
|
|
2
|
-
import { type WebSocketEvent } from "./Model";
|
|
3
|
-
|
|
4
|
-
@singleton()
|
|
5
|
-
export class CustomEventDispatcher {
|
|
6
|
-
public dispatchOnWindow(eventName: string): void {
|
|
7
|
-
window.dispatchEvent(new CustomEvent(eventName));
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
public dispatchWebSocketOnWindow(webSocketEvent: WebSocketEvent<unknown>) {
|
|
11
|
-
window.dispatchEvent(webSocketEvent);
|
|
12
|
-
}
|
|
13
|
-
}
|
package/src/eventSystem/Model.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export class WebSocketEvent<T> extends Event {
|
|
2
|
-
private readonly messageEvent: MessageEvent;
|
|
3
|
-
private readonly data: T;
|
|
4
|
-
|
|
5
|
-
constructor(messageEvent: MessageEvent) {
|
|
6
|
-
const parsedData = WebSocketEvent.ParseData(messageEvent.data);
|
|
7
|
-
super(parsedData.type);
|
|
8
|
-
this.getMessageEvent = this.getMessageEvent.bind(this);
|
|
9
|
-
this.getResult = this.getResult.bind(this);
|
|
10
|
-
this.messageEvent = messageEvent;
|
|
11
|
-
this.data = parsedData as T;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public getMessageEvent() {
|
|
15
|
-
return this.messageEvent;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public getResult(): T {
|
|
19
|
-
return this.data;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private static ParseData(data: string) {
|
|
23
|
-
try {
|
|
24
|
-
return JSON.parse(data);
|
|
25
|
-
} catch (error) {
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export function OnEvent(
|
|
2
|
-
eventsToSubscribe: string[],
|
|
3
|
-
unSubscribeAfterRun: boolean = false,
|
|
4
|
-
) {
|
|
5
|
-
return function (
|
|
6
|
-
_target: any,
|
|
7
|
-
_propertyKey: string,
|
|
8
|
-
descriptor: PropertyDescriptor,
|
|
9
|
-
) {
|
|
10
|
-
const originalMethod = descriptor.value;
|
|
11
|
-
|
|
12
|
-
descriptor.value = function (event: any) {
|
|
13
|
-
originalMethod(event);
|
|
14
|
-
if (unSubscribeAfterRun) {
|
|
15
|
-
for (const event of eventsToSubscribe) {
|
|
16
|
-
window.removeEventListener(event, descriptor.value);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
for (const event of eventsToSubscribe) {
|
|
22
|
-
window.addEventListener(event as string, descriptor.value);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
}
|
package/src/eventSystem/index.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export abstract class Feedback<Model, ErrorModel extends Error = Error> {
|
|
2
|
-
protected successMessageResolver: (model: Model) => string;
|
|
3
|
-
protected failureMessageResolver: (error: ErrorModel) => string;
|
|
4
|
-
public shouldResolveSuccess: (model: Model) => boolean;
|
|
5
|
-
public shouldResolveFailure: (error: ErrorModel) => boolean;
|
|
6
|
-
|
|
7
|
-
constructor(
|
|
8
|
-
successMessageResolver: (model: Model) => string,
|
|
9
|
-
failureMessageResolver: (error: ErrorModel) => string,
|
|
10
|
-
shouldResolveSuccess: (model: Model) => boolean = () => true,
|
|
11
|
-
shouldResolveFailure: (error: ErrorModel) => boolean = () => true,
|
|
12
|
-
) {
|
|
13
|
-
this.successMessageResolver = successMessageResolver;
|
|
14
|
-
this.failureMessageResolver = failureMessageResolver;
|
|
15
|
-
this.shouldResolveSuccess = shouldResolveSuccess;
|
|
16
|
-
this.shouldResolveFailure = shouldResolveFailure;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public async handleSuccess(entity: Model) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public async handleFailure(error: ErrorModel) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public async handleInfo() {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async handleWarning() {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Feedback } from "./Feedback";
|
|
2
|
-
|
|
3
|
-
export function HandleFeedback<Model>(feedbacks: Feedback<Model>[]) {
|
|
4
|
-
return function (
|
|
5
|
-
_name: unknown,
|
|
6
|
-
_target: unknown,
|
|
7
|
-
descriptor: PropertyDescriptor,
|
|
8
|
-
) {
|
|
9
|
-
const originalMethod = descriptor.value;
|
|
10
|
-
descriptor.value = async function (...args: unknown[]) {
|
|
11
|
-
try {
|
|
12
|
-
const result = await originalMethod.apply(this, args);
|
|
13
|
-
for (const feedback of feedbacks) {
|
|
14
|
-
if (feedback.shouldResolveSuccess(result)) {
|
|
15
|
-
await feedback.handleSuccess(result);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return result;
|
|
19
|
-
} catch (error) {
|
|
20
|
-
for (const feedback of feedbacks) {
|
|
21
|
-
if (feedback.shouldResolveFailure(error as Error)) {
|
|
22
|
-
await feedback.handleFailure(error as Error);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { HandleFeedback } from "./HandleFeedback";
|
|
2
|
-
export { Feedback } from "./Feedback";
|
|
3
|
-
export type { FailureFeedback } from "./FailureFeedback";
|
|
4
|
-
export type { InfoFeedback } from "./InfoFeedback";
|
|
5
|
-
export type { SuccessFeedback } from "./SuccessFeedback";
|
|
6
|
-
export type { WarningFeedback } from "./WarningFeedback";
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { Axios, type InternalAxiosRequestConfig } from "axios";
|
|
2
|
-
import { type Interceptor } from "./Interceptor";
|
|
3
|
-
import { APIErrorHandlerRegistry } from "./ErrorHandlerRegistry";
|
|
4
|
-
|
|
5
|
-
export class ApiBuilder {
|
|
6
|
-
private axiosInstance: Axios;
|
|
7
|
-
|
|
8
|
-
constructor(axiosInstance: Axios) {
|
|
9
|
-
this.axiosInstance = axiosInstance;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
public setBaseURL(baseURL: string) {
|
|
13
|
-
this.axiosInstance.defaults.baseURL = baseURL;
|
|
14
|
-
return this;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
public setTimeout(timeInMilliSeconds: number) {
|
|
18
|
-
this.axiosInstance.defaults.timeout = timeInMilliSeconds;
|
|
19
|
-
return this;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public setHeaders(headers: Record<string, string | string[]>) {
|
|
23
|
-
this.axiosInstance.defaults.headers.common = headers;
|
|
24
|
-
return this;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public attachRequestInterceptors(interceptors: Interceptor[]) {
|
|
28
|
-
this.axiosInstance.interceptors.request.use(
|
|
29
|
-
(config: InternalAxiosRequestConfig) => {
|
|
30
|
-
for (const interceptor of interceptors) {
|
|
31
|
-
interceptor.intercept(config);
|
|
32
|
-
}
|
|
33
|
-
return config;
|
|
34
|
-
},
|
|
35
|
-
(error) => {
|
|
36
|
-
return Promise.reject(error);
|
|
37
|
-
},
|
|
38
|
-
);
|
|
39
|
-
return this;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public attachResponseInterceptors(apiErrorRegistry: APIErrorHandlerRegistry) {
|
|
43
|
-
this.axiosInstance.interceptors.response.use(
|
|
44
|
-
(response) => response,
|
|
45
|
-
(error) => {
|
|
46
|
-
apiErrorRegistry.handle(error);
|
|
47
|
-
throw error;
|
|
48
|
-
},
|
|
49
|
-
);
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public build() {
|
|
54
|
-
return this.axiosInstance;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
export default ApiBuilder;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { AxiosError } from "axios";
|
|
2
|
-
import { type Nullable } from "../types";
|
|
3
|
-
import { type ErrorHandler } from "../errorHandling";
|
|
4
|
-
|
|
5
|
-
export class APIErrorHandlerRegistry {
|
|
6
|
-
private static handlers: Map<number, ErrorHandler> = new Map();
|
|
7
|
-
private static instance: Nullable<APIErrorHandlerRegistry> = null;
|
|
8
|
-
|
|
9
|
-
private constructor() {}
|
|
10
|
-
|
|
11
|
-
static GetInstance() {
|
|
12
|
-
if (!APIErrorHandlerRegistry.instance) {
|
|
13
|
-
APIErrorHandlerRegistry.instance = new APIErrorHandlerRegistry();
|
|
14
|
-
}
|
|
15
|
-
return APIErrorHandlerRegistry.instance;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public static registerHandler(statusCode: number, handler: ErrorHandler) {
|
|
19
|
-
APIErrorHandlerRegistry.handlers.set(statusCode, handler);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public handle(error: AxiosError) {
|
|
23
|
-
const status = error.response?.status ?? 0;
|
|
24
|
-
const handler = APIErrorHandlerRegistry.handlers.get(status);
|
|
25
|
-
if (handler) {
|
|
26
|
-
handler.handleError(error);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|