bx-rest 0.0.5 → 0.0.7
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/README.md +24 -0
- package/bx-rest.service.d.ts +6 -0
- package/consts/time.d.ts +3 -0
- package/esm2020/bx-rest.mjs +5 -0
- package/esm2020/bx-rest.service.mjs +14 -0
- package/esm2020/consts/time.mjs +4 -0
- package/esm2020/public-api.mjs +7 -0
- package/esm2020/rest/bx-rest.module.mjs +28 -0
- package/esm2020/services/base.mjs +174 -0
- package/fesm2015/bx-rest.mjs +225 -0
- package/fesm2015/bx-rest.mjs.map +1 -0
- package/fesm2020/bx-rest.mjs +222 -0
- package/fesm2020/bx-rest.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +40 -138
- package/public-api.d.ts +3 -0
- package/rest/bx-rest.module.d.ts +8 -0
- package/services/base.d.ts +32 -0
- package/LICENSE +0 -21
- package/src/consts/part-name-metods.ts +0 -11
- package/src/consts/time.ts +0 -3
- package/src/functions/isDate.ts +0 -8
- package/src/functions/isEqual.ts +0 -17
- package/src/functions/isValidDate.ts +0 -9
- package/src/functions/serializeJavascript.ts +0 -229
- package/src/index.d.ts +0 -19
- package/src/index.ts +0 -3
- package/src/rest/user/user.ts +0 -342
- package/src/services/base.ts +0 -187
- package/src/services/http/HttpBX.ts +0 -176
- package/src/services/http/HttpData.ts +0 -142
- package/src/services/http/base/HttpData.ts +0 -141
- package/src/services/http/base/base.ts +0 -40
- package/src/services/http/base/http.ts +0 -67
- package/src/services/http/http.ts +0 -182
- package/src/services/http/sessionKey.ts +0 -205
- package/src/services/map/base.ts +0 -8
- package/src/services/map/rest/user.ts +0 -82
- package/src/services/snack-bar/snack-bar.service.ts +0 -40
- package/src/services/snack-bar/toast-message/toast-message.component.html +0 -13
- package/src/services/snack-bar/toast-message/toast-message.component.scss +0 -53
- package/src/services/snack-bar/toast-message/toast-message.component.ts +0 -26
- package/src/services/vanilla/JSON.ts +0 -15
- package/src/services/vanilla/iframe.ts +0 -57
- package/src/services/vanilla/localStorage.ts +0 -42
- package/src/services/vanilla//321/201ookies.ts +0 -43
- package/src/store/auth.ts +0 -46
- package/src/store/users.ts +0 -88
- package/src/tsconfig.base.json +0 -6
- package/src/tsconfig.cjs.json +0 -10
- package/src/tsconfig.cjs.spec.json +0 -10
- package/src/tsconfig.esm.json +0 -9
- package/src/tsconfig.esm5.json +0 -11
- package/src/tsconfig.esm5.rollup.json +0 -8
- package/src/tsconfig.types.json +0 -14
- package/src/tsconfig.types.spec.json +0 -7
- package/src/typification/auth/OAuthBXParam.ts +0 -6
- package/src/typification/auth/application.ts +0 -8
- package/src/typification/auth/save.ts +0 -14
- package/src/typification/auth/urlData.ts +0 -4
- package/src/typification/rest/api-lib.ts +0 -18
- package/src/typification/rest/base/ApiPaginationBX.ts +0 -3
- package/src/typification/rest/base/OrderOptions.ts +0 -3
- package/src/typification/rest/base/YesNo.ts +0 -1
- package/src/typification/rest/base/fieldBXType.ts +0 -1
- package/src/typification/rest/base/filterGenerator.ts +0 -3
- package/src/typification/rest/base/httpAnswerBX.ts +0 -15
- package/src/typification/rest/batch/batchRequestParam.ts +0 -14
- package/src/typification/rest/lib.ts +0 -19
- package/src/typification/rest/settings.ts +0 -7
- package/src/typification/rest/support/param.ts +0 -8
- package/src/typification/rest/user/CustomUserFieldInfo.ts +0 -70
- package/src/typification/rest/user/UserFilterSearch.ts +0 -43
- package/src/typification/rest/user/get.ts +0 -17
- package/src/typification/rest/user/user.ts +0 -68
- package/src/typification/rest/user/userFilter.ts +0 -17
- package/tsconfig.json +0 -24
package/src/services/base.ts
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core'
|
|
2
|
-
import { time } from 'bx-rest/src/consts/time'
|
|
3
|
-
// import { environment } from 'bx-rest/src/environments/environment'
|
|
4
|
-
import { DateTime } from 'luxon'
|
|
5
|
-
import { DateTimeOptions } from 'luxon/src/datetime'
|
|
6
|
-
|
|
7
|
-
@Injectable({
|
|
8
|
-
providedIn: 'root'
|
|
9
|
-
})
|
|
10
|
-
export class BaseServices {
|
|
11
|
-
|
|
12
|
-
toStr(val: any): string {
|
|
13
|
-
return (val) ? String(val) : ''
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
toNumber(val: any): number {
|
|
17
|
-
return (val && Number(val)) ? Number(val) : 0
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
toDate(val: number | string | Date, format?: string, opt?: DateTimeOptions): Date {
|
|
21
|
-
if (val instanceof Date) {
|
|
22
|
-
return val
|
|
23
|
-
} else if (typeof val == 'string') {
|
|
24
|
-
if (format) {
|
|
25
|
-
if (opt) {
|
|
26
|
-
return DateTime.fromFormat(val, format, opt).toJSDate()
|
|
27
|
-
}
|
|
28
|
-
return DateTime.fromFormat(val, format).toJSDate()
|
|
29
|
-
} else {
|
|
30
|
-
return new Date(val)
|
|
31
|
-
}
|
|
32
|
-
} else if (typeof val == 'number') {
|
|
33
|
-
return new Date(val)
|
|
34
|
-
}
|
|
35
|
-
console.error('Wrong date format', val, format)
|
|
36
|
-
throw 'Wrong date format'
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getBXStrTime(date: Date): string {
|
|
40
|
-
return this.toISOStringWithTimezone(date)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
toISOStringWithTimezone(date: Date): string {
|
|
44
|
-
const tzOffset = -date.getTimezoneOffset()
|
|
45
|
-
const diff = tzOffset >= 0 ? '+' : '-'
|
|
46
|
-
const pad = (n: number) => `${Math.floor(Math.abs(n))}`.padStart(2, '0')
|
|
47
|
-
return date.getFullYear() +
|
|
48
|
-
'-' + pad(date.getMonth() + 1) +
|
|
49
|
-
'-' + pad(date.getDate()) +
|
|
50
|
-
'T' + pad(date.getHours()) +
|
|
51
|
-
':' + pad(date.getMinutes()) +
|
|
52
|
-
':' + pad(date.getSeconds()) +
|
|
53
|
-
diff + pad(tzOffset / 60) +
|
|
54
|
-
':' + pad(tzOffset % 60)
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
toBool(val: any) {
|
|
58
|
-
switch (typeof val) {
|
|
59
|
-
case 'string':
|
|
60
|
-
val = val.toLowerCase()
|
|
61
|
-
if (val === 'n' || val === 'y') { // битриксовые понятия о bool
|
|
62
|
-
return val === 'y'
|
|
63
|
-
} else if (val === 'true' || val === 'false') { // битриксовые понятия о bool
|
|
64
|
-
return val === 'true'
|
|
65
|
-
} else {
|
|
66
|
-
return false
|
|
67
|
-
}
|
|
68
|
-
default:
|
|
69
|
-
return Boolean(val)
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
toBXYorN(val: boolean) {
|
|
74
|
-
return (val) ? 'Y' : 'N'
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
typeof(val: any) {
|
|
78
|
-
return typeof val
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
typeDefClass(val: object): undefined | null | 'date' {
|
|
82
|
-
if (val) {
|
|
83
|
-
if (val instanceof Date) {
|
|
84
|
-
return 'date'
|
|
85
|
-
}
|
|
86
|
-
return undefined
|
|
87
|
-
} else {
|
|
88
|
-
return null
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
toJSON(val: object) {
|
|
93
|
-
return JSON.stringify(val)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
fromJSON<T>(val: string): T | undefined {
|
|
97
|
-
return JSON.parse(val)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
prepareBaseAddress(url: string, add: string = '') {
|
|
101
|
-
if (url.search('https://') !== 0 && url.search('http://')) {
|
|
102
|
-
url = 'https://' + url
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (url.lastIndexOf('/') !== (url.length - 1)) {
|
|
106
|
-
url = url + '/'
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
url = url + add
|
|
110
|
-
|
|
111
|
-
return url
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
getHomeAddress() {
|
|
115
|
-
// return this.prepareBaseAddress(environment.urls.home)
|
|
116
|
-
return this.prepareBaseAddress('b24.trace-studio.com')
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
dateDiff(a: Date, b: Date) {
|
|
120
|
-
return new Date(a.valueOf() - b.valueOf())
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
dateDiffInDays(a: Date, b: Date) {
|
|
124
|
-
return Math.floor(this.dateDiff(a, b).valueOf() / time.oneDayMilliseconds);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
getBase64File(file: File) {
|
|
128
|
-
return new Promise((resolve, reject) => {
|
|
129
|
-
const reader = new FileReader()
|
|
130
|
-
reader.readAsDataURL(file)
|
|
131
|
-
reader.onload = () => resolve(reader.result)
|
|
132
|
-
reader.onerror = error => reject(error)
|
|
133
|
-
})
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
async getBase64FileLikeStr(file: File): Promise<{ header: string, val: string } | undefined> {
|
|
137
|
-
let result = await this.getBase64File(file)
|
|
138
|
-
if (typeof result === 'string') {
|
|
139
|
-
let split = result.split(',')
|
|
140
|
-
return {
|
|
141
|
-
header: split[0],
|
|
142
|
-
val: split[1]
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return undefined
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
sumArray(numbers: number[]) {
|
|
149
|
-
return numbers.reduce((a, b) => {
|
|
150
|
-
return a + b;
|
|
151
|
-
})
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
isItTheSameDate(date1: Date, date2: Date) {
|
|
155
|
-
return date1.getDate() === date2.getDate()
|
|
156
|
-
&& date1.getMonth() === date2.getMonth()
|
|
157
|
-
&& date1.getFullYear() === date2.getFullYear()
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
toUnix(date: Date) {
|
|
161
|
-
return Math.floor(date.valueOf() / 1000)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
arrSum(x: number[]) {
|
|
165
|
-
let s = 0;
|
|
166
|
-
for (let i = 0; i < x.length; i++) {
|
|
167
|
-
s += x[i]
|
|
168
|
-
}
|
|
169
|
-
return s
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
getBaseUrlHttps(url: string, component = false) {
|
|
173
|
-
if (component) {
|
|
174
|
-
return encodeURI(this.cropUrl(url) + '/');
|
|
175
|
-
} else {
|
|
176
|
-
return encodeURI('https://' + this.cropUrl(url) + '/');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
cropUrl(url: string) {
|
|
181
|
-
url = (url) ? url.replace('https://', '') : ''
|
|
182
|
-
url = (url) ? url.replace('http://', '') : ''
|
|
183
|
-
url = (url) ? url.replace('https:', '') : ''
|
|
184
|
-
url = (url) ? url.replace('http:', '') : ''
|
|
185
|
-
return url
|
|
186
|
-
}
|
|
187
|
-
}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { Observable, throwError, take, mergeMap, forkJoin } from 'rxjs'
|
|
2
|
-
import { catchError, map } from 'rxjs/operators'
|
|
3
|
-
import { Injectable } from '@angular/core'
|
|
4
|
-
import clone from 'just-clone'
|
|
5
|
-
import { iHttpParamSettings } from 'bx-rest/src/typification/rest/settings'
|
|
6
|
-
import BaseHttpServices from 'bx-rest/src/services/http/http'
|
|
7
|
-
import {
|
|
8
|
-
iBatchRequestAnswer, iBatchRequestParam,
|
|
9
|
-
iBatchRequestParamArr,
|
|
10
|
-
iBatchRequestParamHttp, keyBatch
|
|
11
|
-
} from 'bx-rest/src/typification/rest/batch/batchRequestParam'
|
|
12
|
-
import flatten from 'just-flatten-it'
|
|
13
|
-
|
|
14
|
-
@Injectable({
|
|
15
|
-
providedIn: 'root'
|
|
16
|
-
})
|
|
17
|
-
export default class HttpBXServices extends BaseHttpServices {
|
|
18
|
-
|
|
19
|
-
timeNowOnServer() {
|
|
20
|
-
return this.httpGet<{ result?: Date, error?: string }>('server.time').pipe(
|
|
21
|
-
map(v => {
|
|
22
|
-
if (v && v.result) {
|
|
23
|
-
return new Date(v.result)
|
|
24
|
-
}
|
|
25
|
-
return undefined
|
|
26
|
-
}),
|
|
27
|
-
)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Это пиздец а не метод
|
|
32
|
-
* @param param
|
|
33
|
-
*/
|
|
34
|
-
branch<T, A>(param: iBatchRequestParamArr<T> | iBatchRequestParam<T>[]): Observable<iBatchRequestAnswer<A>[] | undefined> {
|
|
35
|
-
let prepareParam = Object.entries<string>(this.prepareBatch<T>(param))
|
|
36
|
-
const size = 50 // больше не отдаст
|
|
37
|
-
let subarray = [] //массив в который будет выведен результат.
|
|
38
|
-
for (let i = 0; i < Math.ceil(prepareParam.length / size); i++) {
|
|
39
|
-
subarray[i] = prepareParam.slice((i * size), (i * size) + size)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return forkJoin(
|
|
43
|
-
subarray.map(i => {
|
|
44
|
-
return this.httpPost('batch.json', {
|
|
45
|
-
halt: 0,
|
|
46
|
-
cmd: Object.assign({}, ...i.map(x => {
|
|
47
|
-
return {[x[0]]: x[1]}
|
|
48
|
-
}))
|
|
49
|
-
})
|
|
50
|
-
})
|
|
51
|
-
) as Observable<iBatchRequestAnswer<A>[]>
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
prepareBatch<T>(param: iBatchRequestParamArr<T> | iBatchRequestParam<T>[]): iBatchRequestParamHttp {
|
|
55
|
-
let res: iBatchRequestParamHttp = Object.keys(param).reduce(
|
|
56
|
-
(obj, key) => {
|
|
57
|
-
obj[key] = '';
|
|
58
|
-
return obj;
|
|
59
|
-
},
|
|
60
|
-
{} as iBatchRequestParamHttp
|
|
61
|
-
);
|
|
62
|
-
for (let key in param) {
|
|
63
|
-
if(typeof key === 'string' || typeof key === 'number' && param[key].param) {
|
|
64
|
-
res[key] = param[key].name + '?' + this.getHttpParamsGet(param[key].param).toString()
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return res
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
mapBranchResult<T>(res: iBatchRequestAnswer<T>[]){
|
|
71
|
-
return Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined)) as {[key:keyBatch]: T}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
mapBranchResultWithoutKey<T>(res: iBatchRequestAnswer<T>[]): T[]{
|
|
75
|
-
return flatten<T>(Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined)))
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
post<T>(name: string[],
|
|
79
|
-
params: any = {},
|
|
80
|
-
textError = '',
|
|
81
|
-
settings: iHttpParamSettings = this.defSettings) {
|
|
82
|
-
return this.httpPost<T>(this.getNameMethod(name), params, textError, settings)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
get<T>(name: string[],
|
|
86
|
-
params: any = {},
|
|
87
|
-
textError = '',
|
|
88
|
-
settings: iHttpParamSettings = this.defSettings) {
|
|
89
|
-
return this.httpGet<T>(this.getNameMethod(name), params, textError, settings)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
override httpPost<T>(url: string,
|
|
93
|
-
params: any = {},
|
|
94
|
-
textError = '',
|
|
95
|
-
settings: iHttpParamSettings = this.defSettings
|
|
96
|
-
): Observable<T | undefined> {
|
|
97
|
-
return this.session.getAuthParams().pipe(
|
|
98
|
-
mergeMap(auth => {
|
|
99
|
-
if (auth) {
|
|
100
|
-
const paramsClone = clone(params)
|
|
101
|
-
paramsClone[this.session.getKeyAuth()] = auth
|
|
102
|
-
return this.session.getBaseUrl().pipe(mergeMap(v => {
|
|
103
|
-
if (v) {
|
|
104
|
-
return this.http.post<T | undefined>(
|
|
105
|
-
this.prepareBaseAddress(v) + url,
|
|
106
|
-
this.getHttpParamsPost(paramsClone, new FormData(), false, [], settings))
|
|
107
|
-
.pipe(
|
|
108
|
-
take(1),
|
|
109
|
-
catchError(err => {
|
|
110
|
-
if (!textError.length && err.error.error_description) {
|
|
111
|
-
textError = err.error.error_description
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
this.snackBar.error('Ошибка: ' + textError)
|
|
115
|
-
return throwError(() => err)
|
|
116
|
-
})
|
|
117
|
-
)
|
|
118
|
-
}
|
|
119
|
-
return throwError(() => 'get base url error')
|
|
120
|
-
}))
|
|
121
|
-
} else {
|
|
122
|
-
this.snackBar.error('Error: Auth not get')
|
|
123
|
-
return throwError(() => 'auth not get')
|
|
124
|
-
}
|
|
125
|
-
}))
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
override httpGet<T>(
|
|
129
|
-
url: string,
|
|
130
|
-
params: any = {},
|
|
131
|
-
textError = '',
|
|
132
|
-
settings: iHttpParamSettings = this.defSettings
|
|
133
|
-
): Observable<T | undefined> {
|
|
134
|
-
return this.session.getAuthParams().pipe(
|
|
135
|
-
mergeMap(auth => {
|
|
136
|
-
if (auth) {
|
|
137
|
-
if (params === null) {
|
|
138
|
-
params = {}
|
|
139
|
-
}
|
|
140
|
-
const paramsClone = clone(params)
|
|
141
|
-
paramsClone[this.session.getKeyAuth()] = auth
|
|
142
|
-
let options = {
|
|
143
|
-
params: this.getHttpParamsGet(paramsClone)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return this.session.getBaseUrl().pipe(
|
|
147
|
-
mergeMap(v => {
|
|
148
|
-
if (v) {
|
|
149
|
-
return this.http.get<T>(this.prepareBaseAddress(v) + url, options).pipe(
|
|
150
|
-
take(1),
|
|
151
|
-
catchError(err => {
|
|
152
|
-
if (!textError.length && err.error.error_description) {
|
|
153
|
-
textError = err.error.error_description
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
this.snackBar.error('Ошибка: ' + textError)
|
|
157
|
-
return throwError(() => err)
|
|
158
|
-
}))
|
|
159
|
-
}
|
|
160
|
-
return throwError(() => 'get base url error')
|
|
161
|
-
})
|
|
162
|
-
)
|
|
163
|
-
} else {
|
|
164
|
-
this.snackBar.error('Error: Auth not get')
|
|
165
|
-
return throwError(() => 'auth not get')
|
|
166
|
-
}
|
|
167
|
-
})
|
|
168
|
-
)
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
getNameMethod(arr: string[]) {
|
|
172
|
-
return arr.join('.')
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { BaseServices } from 'bx-rest/src/services/base'
|
|
2
|
-
import { HttpParams } from '@angular/common/http'
|
|
3
|
-
import { iHttpParamSettings } from 'bx-rest/src/typification/rest/settings'
|
|
4
|
-
import iHttpAnswerBX from 'bx-rest/src/typification/rest/base/httpAnswerBX'
|
|
5
|
-
|
|
6
|
-
export class HttpData extends BaseServices {
|
|
7
|
-
|
|
8
|
-
defSettings: iHttpParamSettings = {
|
|
9
|
-
timeZone: {
|
|
10
|
-
calc: true,
|
|
11
|
-
levelOut: false
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
getHttpParamsGet( // не так уж и сложно сделать сложенный HttpParams, да гугл?
|
|
16
|
-
obj: any,
|
|
17
|
-
sendHttpParams: HttpParams = new HttpParams(),
|
|
18
|
-
thisArray = false,
|
|
19
|
-
nesting: string[] = [],
|
|
20
|
-
// settings = this.defSettings
|
|
21
|
-
_ = this.defSettings
|
|
22
|
-
): any {
|
|
23
|
-
for (const key in obj) {
|
|
24
|
-
let setKey = ''
|
|
25
|
-
if (nesting.length) {
|
|
26
|
-
let first = nesting[0]
|
|
27
|
-
setKey = (nesting.length > 1)
|
|
28
|
-
? first + '[' + nesting.slice(1).join('][') + '][' + key + ']'
|
|
29
|
-
: first + '[' + key + ']'
|
|
30
|
-
} else {
|
|
31
|
-
setKey = key
|
|
32
|
-
}
|
|
33
|
-
switch (typeof obj[key]) {
|
|
34
|
-
case 'string':
|
|
35
|
-
sendHttpParams = sendHttpParams.set(setKey, obj[key])
|
|
36
|
-
break
|
|
37
|
-
case 'symbol':
|
|
38
|
-
case 'number':
|
|
39
|
-
case 'bigint':
|
|
40
|
-
case 'boolean':
|
|
41
|
-
sendHttpParams = sendHttpParams.set(setKey, String(obj[key]))
|
|
42
|
-
break
|
|
43
|
-
case 'object':
|
|
44
|
-
nesting.push(key)
|
|
45
|
-
sendHttpParams = this.getHttpParamsGet(obj[key], sendHttpParams, false, nesting)
|
|
46
|
-
nesting.pop()
|
|
47
|
-
break
|
|
48
|
-
case 'function':
|
|
49
|
-
case 'undefined':
|
|
50
|
-
default:
|
|
51
|
-
console.error('Ты отправил что-то не то', obj[key], typeof obj[key], typeof obj)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return sendHttpParams
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getHttpParamsPost(
|
|
58
|
-
obj: any,
|
|
59
|
-
sendHttpParams: FormData = new FormData(),
|
|
60
|
-
thisArray = false,
|
|
61
|
-
nesting: string[] = [],
|
|
62
|
-
settings = this.defSettings
|
|
63
|
-
): any {
|
|
64
|
-
|
|
65
|
-
if (obj instanceof Blob) {
|
|
66
|
-
let first = nesting[0]
|
|
67
|
-
let setKey = (nesting.length > 1)
|
|
68
|
-
? first + '[' + nesting.slice(1).join('][') + ']'
|
|
69
|
-
: first
|
|
70
|
-
sendHttpParams.set(setKey, obj)
|
|
71
|
-
return sendHttpParams
|
|
72
|
-
} else if (obj instanceof Date) {
|
|
73
|
-
let first = nesting[0]
|
|
74
|
-
let tzoffset = (settings.timeZone.calc) ? obj.getTimezoneOffset() * 60000 : 0 // вычисляем влияние часового пояса
|
|
75
|
-
let levelOut = (settings.timeZone.levelOut) ? obj.getTimezoneOffset() * 60000 : 0 // вычисляем влияние часового пояса
|
|
76
|
-
let setKey = (nesting.length > 1)
|
|
77
|
-
? first + '[' + nesting.slice(1).join('][') + ']'
|
|
78
|
-
: first
|
|
79
|
-
sendHttpParams.set(setKey, (new Date(obj.valueOf() + tzoffset - levelOut)).toISOString())
|
|
80
|
-
return sendHttpParams
|
|
81
|
-
} else {
|
|
82
|
-
for (const key in obj) {
|
|
83
|
-
let setKey = ''
|
|
84
|
-
if (nesting.length) {
|
|
85
|
-
let first = nesting[0]
|
|
86
|
-
setKey = (nesting.length > 1)
|
|
87
|
-
? first + '[' + nesting.slice(1).join('][') + '][' + key + ']'
|
|
88
|
-
: first + '[' + key + ']'
|
|
89
|
-
} else {
|
|
90
|
-
setKey = key
|
|
91
|
-
}
|
|
92
|
-
switch (typeof obj[key]) {
|
|
93
|
-
case 'string':
|
|
94
|
-
sendHttpParams.set(setKey, obj[key])
|
|
95
|
-
break
|
|
96
|
-
case 'symbol':
|
|
97
|
-
case 'number':
|
|
98
|
-
case 'bigint':
|
|
99
|
-
case 'boolean':
|
|
100
|
-
sendHttpParams.set(setKey, String(obj[key]))
|
|
101
|
-
break
|
|
102
|
-
case 'object':
|
|
103
|
-
nesting.push(key)
|
|
104
|
-
sendHttpParams = this.getHttpParamsPost(
|
|
105
|
-
obj[key],
|
|
106
|
-
sendHttpParams,
|
|
107
|
-
false,
|
|
108
|
-
nesting,
|
|
109
|
-
settings
|
|
110
|
-
)
|
|
111
|
-
nesting.pop()
|
|
112
|
-
break
|
|
113
|
-
case 'function':
|
|
114
|
-
case 'undefined':
|
|
115
|
-
default:
|
|
116
|
-
console.error('Ты отправил что-то не то', obj[key], typeof obj[key], typeof obj)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return sendHttpParams
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
mapResult<T>(v: iHttpAnswerBX<T> | undefined): T | undefined {
|
|
124
|
-
if (v && (v.result || typeof v.result === 'boolean')) {
|
|
125
|
-
return v.result
|
|
126
|
-
}
|
|
127
|
-
return undefined
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
sliceArrayIntoChunks(arr: any[], chunkSize: number) {
|
|
131
|
-
const res = [];
|
|
132
|
-
for (let i = 0; i < arr.length; i += chunkSize) {
|
|
133
|
-
const chunk = arr.slice(i, i + chunkSize);
|
|
134
|
-
res.push(chunk);
|
|
135
|
-
}
|
|
136
|
-
return res;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
removingMultipleSlashes(str: string) {
|
|
140
|
-
return str.replace(/\/{2,}/g, '/')
|
|
141
|
-
}
|
|
142
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { BaseServices } from 'bx-rest/src/services/base'
|
|
2
|
-
import { HttpParams } from '@angular/common/http'
|
|
3
|
-
import { iHttpParamSettings } from 'bx-rest/src/typification/rest/settings'
|
|
4
|
-
import iHttpAnswerBX from 'bx-rest/src/typification/rest/base/httpAnswerBX'
|
|
5
|
-
|
|
6
|
-
export class HttpData extends BaseServices {
|
|
7
|
-
|
|
8
|
-
defSettings: iHttpParamSettings = {
|
|
9
|
-
timeZone: {
|
|
10
|
-
calc: true,
|
|
11
|
-
levelOut: false
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
getHttpParamsGet( // не так уж и сложно сделать сложенный HttpParams, да гугл?
|
|
16
|
-
obj: any,
|
|
17
|
-
sendHttpParams: HttpParams = new HttpParams(),
|
|
18
|
-
thisArray = false,
|
|
19
|
-
nesting: string[] = [],
|
|
20
|
-
// settings = this.defSettings
|
|
21
|
-
_ = this.defSettings
|
|
22
|
-
): any {
|
|
23
|
-
for (const key in obj) {
|
|
24
|
-
let setKey = ''
|
|
25
|
-
if (nesting.length) {
|
|
26
|
-
let first = nesting[0]
|
|
27
|
-
setKey = (nesting.length > 1)
|
|
28
|
-
? first + '[' + nesting.slice(1).join('][') + '][' + key + ']'
|
|
29
|
-
: first + '[' + key + ']'
|
|
30
|
-
} else {
|
|
31
|
-
setKey = key
|
|
32
|
-
}
|
|
33
|
-
switch (typeof obj[key]) {
|
|
34
|
-
case 'string':
|
|
35
|
-
sendHttpParams = sendHttpParams.set(setKey, obj[key])
|
|
36
|
-
break
|
|
37
|
-
case 'symbol':
|
|
38
|
-
case 'number':
|
|
39
|
-
case 'bigint':
|
|
40
|
-
case 'boolean':
|
|
41
|
-
sendHttpParams = sendHttpParams.set(setKey, String(obj[key]))
|
|
42
|
-
break
|
|
43
|
-
case 'object':
|
|
44
|
-
nesting.push(key)
|
|
45
|
-
sendHttpParams = this.getHttpParamsGet(obj[key], sendHttpParams, false, nesting)
|
|
46
|
-
nesting.pop()
|
|
47
|
-
break
|
|
48
|
-
case 'function':
|
|
49
|
-
case 'undefined':
|
|
50
|
-
default:
|
|
51
|
-
console.error('Ты отправил что-то не то', obj[key], typeof obj[key], typeof obj)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return sendHttpParams
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getHttpParamsPost(
|
|
58
|
-
obj: any,
|
|
59
|
-
sendHttpParams: FormData = new FormData(),
|
|
60
|
-
thisArray = false,
|
|
61
|
-
nesting: string[] = [],
|
|
62
|
-
settings = this.defSettings
|
|
63
|
-
): any {
|
|
64
|
-
|
|
65
|
-
if (obj instanceof Blob) {
|
|
66
|
-
let first = nesting[0]
|
|
67
|
-
let setKey = (nesting.length > 1)
|
|
68
|
-
? first + '[' + nesting.slice(1).join('][') + ']'
|
|
69
|
-
: first
|
|
70
|
-
sendHttpParams.set(setKey, obj)
|
|
71
|
-
return sendHttpParams
|
|
72
|
-
} else if (obj instanceof Date) {
|
|
73
|
-
let first = nesting[0]
|
|
74
|
-
let tzoffset = (settings.timeZone.calc) ? obj.getTimezoneOffset() * 60000 : 0 // вычисляем влияние часового пояса
|
|
75
|
-
let setKey = (nesting.length > 1)
|
|
76
|
-
? first + '[' + nesting.slice(1).join('][') + ']'
|
|
77
|
-
: first
|
|
78
|
-
sendHttpParams.set(setKey, (new Date(obj.valueOf() + tzoffset)).toISOString())
|
|
79
|
-
return sendHttpParams
|
|
80
|
-
} else {
|
|
81
|
-
for (const key in obj) {
|
|
82
|
-
let setKey = ''
|
|
83
|
-
if (nesting.length) {
|
|
84
|
-
let first = nesting[0]
|
|
85
|
-
setKey = (nesting.length > 1)
|
|
86
|
-
? first + '[' + nesting.slice(1).join('][') + '][' + key + ']'
|
|
87
|
-
: first + '[' + key + ']'
|
|
88
|
-
} else {
|
|
89
|
-
setKey = key
|
|
90
|
-
}
|
|
91
|
-
switch (typeof obj[key]) {
|
|
92
|
-
case 'string':
|
|
93
|
-
sendHttpParams.set(setKey, obj[key])
|
|
94
|
-
break
|
|
95
|
-
case 'symbol':
|
|
96
|
-
case 'number':
|
|
97
|
-
case 'bigint':
|
|
98
|
-
case 'boolean':
|
|
99
|
-
sendHttpParams.set(setKey, String(obj[key]))
|
|
100
|
-
break
|
|
101
|
-
case 'object':
|
|
102
|
-
nesting.push(key)
|
|
103
|
-
sendHttpParams = this.getHttpParamsPost(
|
|
104
|
-
obj[key],
|
|
105
|
-
sendHttpParams,
|
|
106
|
-
false,
|
|
107
|
-
nesting,
|
|
108
|
-
settings
|
|
109
|
-
)
|
|
110
|
-
nesting.pop()
|
|
111
|
-
break
|
|
112
|
-
case 'function':
|
|
113
|
-
case 'undefined':
|
|
114
|
-
default:
|
|
115
|
-
console.error('Ты отправил что-то не то', obj[key], typeof obj[key], typeof obj)
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return sendHttpParams
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
mapResult<T>(v: iHttpAnswerBX<T> | undefined): T | undefined {
|
|
123
|
-
if (v && (v.result || typeof v.result === 'boolean')) {
|
|
124
|
-
return v.result
|
|
125
|
-
}
|
|
126
|
-
return undefined
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
sliceArrayIntoChunks(arr: any[], chunkSize: number) {
|
|
130
|
-
const res = [];
|
|
131
|
-
for (let i = 0; i < arr.length; i += chunkSize) {
|
|
132
|
-
const chunk = arr.slice(i, i + chunkSize);
|
|
133
|
-
res.push(chunk);
|
|
134
|
-
}
|
|
135
|
-
return res;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
removingMultipleSlashes(str: string) {
|
|
139
|
-
return str.replace(/\/{2,}/g, '/')
|
|
140
|
-
}
|
|
141
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// import { iHttpParamSettings } from '../../../typification/rest/settings'
|
|
2
|
-
import { iHttpParamSettings } from 'bx-rest/src/typification/rest/settings'
|
|
3
|
-
import { HttpClient } from '@angular/common/http'
|
|
4
|
-
import SnackBarService from 'bx-rest/src/services/snack-bar/snack-bar.service'
|
|
5
|
-
import { Observable, of, } from 'rxjs'
|
|
6
|
-
import { HttpData } from 'bx-rest/src/services/http/HttpData'
|
|
7
|
-
import { Injectable } from '@angular/core'
|
|
8
|
-
|
|
9
|
-
@Injectable({
|
|
10
|
-
providedIn: 'root'
|
|
11
|
-
})
|
|
12
|
-
export abstract class BaseHttp extends HttpData {
|
|
13
|
-
|
|
14
|
-
protected constructor(public http: HttpClient, public snackBar: SnackBarService) {
|
|
15
|
-
super()
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
abstract httpGet<T>(
|
|
19
|
-
url: string,
|
|
20
|
-
params: any,
|
|
21
|
-
textError: string,
|
|
22
|
-
settings: iHttpParamSettings
|
|
23
|
-
): Observable<T | undefined>
|
|
24
|
-
|
|
25
|
-
abstract httpPost<T>(url: string,
|
|
26
|
-
params: any ,
|
|
27
|
-
textError: string,
|
|
28
|
-
settings: iHttpParamSettings
|
|
29
|
-
): Observable<T | undefined>
|
|
30
|
-
|
|
31
|
-
handleError<T>(
|
|
32
|
-
result?: T,
|
|
33
|
-
textError = 'получения данных') {
|
|
34
|
-
return (error: Error): Observable<T> => {
|
|
35
|
-
console.error(`failed: ${error.message}`)
|
|
36
|
-
this.snackBar.error('Ошибка: ' + textError)
|
|
37
|
-
return of(result as T)
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
}
|