@equinor/fusion-framework-react-components-people-provider 1.5.3 → 1.5.4
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/CHANGELOG.md +257 -236
- package/dist/esm/PeopleResolver.js +2 -1
- package/dist/esm/PeopleResolver.js.map +1 -1
- package/dist/esm/PeopleResolverProvider.js +2 -2
- package/dist/esm/PeopleResolverProvider.js.map +1 -1
- package/dist/esm/PersonController.js.map +1 -1
- package/dist/esm/create-resolver.js.map +1 -1
- package/dist/esm/makeResolver.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/PeopleResolver.d.ts +2 -1
- package/dist/types/PeopleResolverProvider.d.ts +3 -3
- package/dist/types/PersonController.d.ts +1 -1
- package/dist/types/create-resolver.d.ts +2 -2
- package/dist/types/makeResolver.d.ts +2 -2
- package/dist/types/version.d.ts +1 -1
- package/package.json +8 -9
- package/src/PeopleResolver.tsx +19 -18
- package/src/PeopleResolverProvider.tsx +16 -16
- package/src/PersonController.ts +209 -219
- package/src/create-resolver.ts +40 -40
- package/src/makeResolver.tsx +13 -13
- package/src/types.ts +2 -2
- package/src/version.ts +1 -1
package/src/PersonController.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EMPTY, Observable, concat, from, fromEvent, of } from 'rxjs';
|
|
1
|
+
import { EMPTY, type Observable, concat, from, fromEvent, of } from 'rxjs';
|
|
2
2
|
import { catchError, filter, find, map, switchMap, take, takeUntil } from 'rxjs/operators';
|
|
3
3
|
|
|
4
4
|
import type { ApiPerson, PeopleApiClient } from '@equinor/fusion-framework-module-services/people';
|
|
@@ -8,11 +8,11 @@ import type { ApiResponse as QueryPersonApiResponse } from '@equinor/fusion-fram
|
|
|
8
8
|
import { Query } from '@equinor/fusion-query';
|
|
9
9
|
import { queryValue } from '@equinor/fusion-query/operators';
|
|
10
10
|
|
|
11
|
-
import { ApiProviderError } from '@equinor/fusion-framework-module-services/provider';
|
|
11
|
+
import type { ApiProviderError } from '@equinor/fusion-framework-module-services/provider';
|
|
12
12
|
|
|
13
13
|
type GetPersonResult = GetPersonApiResponse<
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
'v4',
|
|
15
|
+
{ azureId: ''; expand: ['positions', 'manager'] }
|
|
16
16
|
>;
|
|
17
17
|
|
|
18
18
|
type PersonSearchResult = QueryPersonApiResponse<'v2'>;
|
|
@@ -20,247 +20,237 @@ type PersonSearchResult = QueryPersonApiResponse<'v2'>;
|
|
|
20
20
|
type MatcherArgs = { upn: string; azureId?: string } | { upn?: string; azureId: string };
|
|
21
21
|
|
|
22
22
|
type ResolverArgs<T> = T extends object
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
? { [K in keyof T]: T[K] } & { signal?: AbortSignal }
|
|
24
|
+
: { signal?: AbortSignal };
|
|
25
25
|
|
|
26
26
|
const personMatcher =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
(args: MatcherArgs) =>
|
|
28
|
+
<T extends { azureUniqueId?: string; upn?: string }>(value: T): value is T => {
|
|
29
|
+
const { azureId, upn } = args;
|
|
30
|
+
if (azureId && upn) {
|
|
31
|
+
return (
|
|
32
|
+
value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase() &&
|
|
33
|
+
value.azureUniqueId === azureId
|
|
34
|
+
);
|
|
35
|
+
} else if (azureId) {
|
|
36
|
+
return value.azureUniqueId === azureId;
|
|
37
|
+
} else if (upn) {
|
|
38
|
+
return value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase();
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
42
|
|
|
43
43
|
export interface IPersonController {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult>;
|
|
45
|
+
getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>>;
|
|
46
|
+
getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string>;
|
|
47
|
+
search(args: ResolverArgs<{ search: string }>): Observable<PersonSearchResult>;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
export type PersonControllerOptions = {
|
|
51
|
-
|
|
51
|
+
fallbackImage?: Blob;
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
export class PersonController implements IPersonController {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
#personQuery: Query<GetPersonResult, ResolverArgs<{ azureId: string }>>;
|
|
56
|
+
#personSearchQuery: Query<PersonSearchResult, ResolverArgs<{ search: string }>>;
|
|
57
|
+
#personPhotoQuery: Query<Blob, ResolverArgs<{ azureId: string }>>;
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
throw err;
|
|
117
|
-
}),
|
|
118
|
-
);
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
}
|
|
59
|
+
constructor(client: PeopleApiClient, options?: PersonControllerOptions) {
|
|
60
|
+
const expire = 3 * 60 * 1000;
|
|
61
|
+
this.#personQuery = new Query({
|
|
62
|
+
expire,
|
|
63
|
+
queueOperator: 'merge',
|
|
64
|
+
key: ({ azureId }) => azureId,
|
|
65
|
+
client: {
|
|
66
|
+
fn: ({ azureId }, signal): Observable<GetPersonResult> => {
|
|
67
|
+
return client
|
|
68
|
+
.get('v4', 'json$', { azureId, expand: ['manager', 'positions'] }, { signal })
|
|
69
|
+
.pipe(
|
|
70
|
+
map((result) => {
|
|
71
|
+
const { positions = [] } = result;
|
|
72
|
+
return {
|
|
73
|
+
...result,
|
|
74
|
+
positions: positions.filter((x) => new Date(x.appliesTo) > new Date()),
|
|
75
|
+
};
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
this.#personSearchQuery = new Query({
|
|
82
|
+
expire,
|
|
83
|
+
queueOperator: 'merge',
|
|
84
|
+
key: ({ search }) => search,
|
|
85
|
+
client: {
|
|
86
|
+
fn: ({ search }, signal) => {
|
|
87
|
+
return client.query('v2', 'json$', { search }, { signal });
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
this.#personPhotoQuery = new Query({
|
|
92
|
+
expire,
|
|
93
|
+
queueOperator: 'merge',
|
|
94
|
+
key: ({ azureId }) => azureId,
|
|
95
|
+
client: {
|
|
96
|
+
fn: ({ azureId }, signal): Observable<Blob> => {
|
|
97
|
+
return client.photo('v2', 'blob$', { azureId }, { signal }).pipe(
|
|
98
|
+
map((result) => {
|
|
99
|
+
return result.blob;
|
|
100
|
+
}),
|
|
101
|
+
catchError((err) => {
|
|
102
|
+
if (
|
|
103
|
+
(err as Error).name === 'ApiProviderError' &&
|
|
104
|
+
(err as ApiProviderError).response?.status === 404 &&
|
|
105
|
+
options?.fallbackImage
|
|
106
|
+
) {
|
|
107
|
+
return of(options?.fallbackImage);
|
|
108
|
+
}
|
|
109
|
+
throw err;
|
|
110
|
+
}),
|
|
111
|
+
);
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
123
116
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
117
|
+
public search(args: { search: string; signal?: AbortSignal }): Observable<PersonSearchResult> {
|
|
118
|
+
const { search, signal } = args;
|
|
119
|
+
return this.#personSearchQuery.query({ search }, { signal }).pipe(queryValue);
|
|
120
|
+
}
|
|
128
121
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
/** TODO why does this need to have data?!? */
|
|
123
|
+
public getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string> {
|
|
124
|
+
const { azureId, upn, signal } = args;
|
|
132
125
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
throw Error('invalid args provided');
|
|
126
|
+
if (azureId) {
|
|
127
|
+
return this._getPersonPhotoByAzureId(azureId, signal);
|
|
128
|
+
} else if (upn) {
|
|
129
|
+
return this._getPersonPhotoByUpn(upn, signal);
|
|
139
130
|
}
|
|
131
|
+
throw Error('invalid args provided');
|
|
132
|
+
}
|
|
140
133
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
throw Error('invalid args provided');
|
|
134
|
+
public getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult> {
|
|
135
|
+
const { azureId, upn, signal } = args;
|
|
136
|
+
if (azureId) {
|
|
137
|
+
return this._getPersonByAzureId(azureId, signal);
|
|
138
|
+
} else if (upn) {
|
|
139
|
+
return this._getPersonByUpn(upn, signal);
|
|
149
140
|
}
|
|
141
|
+
throw Error('invalid args provided');
|
|
142
|
+
}
|
|
150
143
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
throw Error('invalid args provided');
|
|
144
|
+
public getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>> {
|
|
145
|
+
const { azureId, upn, signal } = args;
|
|
146
|
+
if (azureId) {
|
|
147
|
+
return this._getPersonInfoById(azureId, signal);
|
|
148
|
+
} else if (upn) {
|
|
149
|
+
return this._getPersonInfoByUpn(upn, signal);
|
|
159
150
|
}
|
|
151
|
+
throw Error('invalid args provided');
|
|
152
|
+
}
|
|
160
153
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
154
|
+
protected _getPersonByUpn(upn: string, signal?: AbortSignal): Observable<GetPersonResult> {
|
|
155
|
+
const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
|
|
156
|
+
return concat(
|
|
157
|
+
this._personCache$({ upn }),
|
|
158
|
+
this._getPersonInfoByUpn(upn, signal).pipe(
|
|
159
|
+
filter(isApiPerson('v2')),
|
|
160
|
+
switchMap(({ azureUniqueId: azureId }) => {
|
|
161
|
+
return this._getPersonByAzureId(azureId, signal);
|
|
162
|
+
}),
|
|
163
|
+
),
|
|
164
|
+
).pipe(
|
|
165
|
+
/** */
|
|
166
|
+
filter(isApiPerson('v4')),
|
|
167
|
+
takeUntil(abort$),
|
|
168
|
+
);
|
|
169
|
+
}
|
|
177
170
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
171
|
+
public _getPersonByAzureId(azureId: string, signal?: AbortSignal): Observable<GetPersonResult> {
|
|
172
|
+
return this.#personQuery.query({ azureId }, { signal }).pipe(queryValue);
|
|
173
|
+
}
|
|
181
174
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
takeUntil(abort$),
|
|
196
|
-
);
|
|
197
|
-
}
|
|
175
|
+
protected _getPersonInfoById(azureId: string, signal?: AbortSignal): Observable<ApiPerson<'v2'>> {
|
|
176
|
+
const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
|
|
177
|
+
return concat(
|
|
178
|
+
/** */
|
|
179
|
+
this._personCache$({ azureId }),
|
|
180
|
+
this._queryCache$({ azureId }),
|
|
181
|
+
this._getPersonByAzureId(azureId, signal),
|
|
182
|
+
).pipe(
|
|
183
|
+
/** */
|
|
184
|
+
filter(isApiPerson('v2')),
|
|
185
|
+
takeUntil(abort$),
|
|
186
|
+
);
|
|
187
|
+
}
|
|
198
188
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
189
|
+
protected _getPersonInfoByUpn(upn: string, signal?: AbortSignal): Observable<ApiPerson<'v2'>> {
|
|
190
|
+
const matcher = personMatcher({ upn });
|
|
191
|
+
const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
|
|
192
|
+
return concat(
|
|
193
|
+
this._personCache$({ upn }),
|
|
194
|
+
this._queryCache$({ upn }),
|
|
195
|
+
this.#personSearchQuery.query({ search: upn }, { signal }).pipe(
|
|
196
|
+
/** extract first match, should only be 0 or 1 */
|
|
197
|
+
map((x) => x.value.find(matcher)),
|
|
198
|
+
/** type cast and end stream */
|
|
199
|
+
find(isApiPerson('v2')),
|
|
200
|
+
),
|
|
201
|
+
).pipe(
|
|
202
|
+
/** */
|
|
203
|
+
find(isApiPerson('v2')),
|
|
204
|
+
filter(isApiPerson('v2')),
|
|
205
|
+
filter(isApiPerson('v2')),
|
|
206
|
+
takeUntil(abort$),
|
|
207
|
+
);
|
|
208
|
+
}
|
|
219
209
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
210
|
+
protected _getPersonPhotoByAzureId(azureId: string, signal?: AbortSignal): Observable<string> {
|
|
211
|
+
return this.#personPhotoQuery.query({ azureId }, { signal }).pipe(
|
|
212
|
+
/** */
|
|
213
|
+
take(1),
|
|
214
|
+
map((result) => URL.createObjectURL(result.value)),
|
|
215
|
+
);
|
|
216
|
+
}
|
|
227
217
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
218
|
+
protected _getPersonPhotoByUpn(upn: string, signal?: AbortSignal) {
|
|
219
|
+
return this._getPersonInfoByUpn(upn, signal).pipe(
|
|
220
|
+
/** */
|
|
221
|
+
take(1),
|
|
222
|
+
switchMap((x) => this._getPersonPhotoByAzureId(x.azureUniqueId, signal)),
|
|
223
|
+
);
|
|
224
|
+
}
|
|
235
225
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
226
|
+
protected _personCache$(args: MatcherArgs): Observable<GetPersonResult> {
|
|
227
|
+
const mather = personMatcher(args);
|
|
228
|
+
return this.#personQuery.cache.state$.pipe(
|
|
229
|
+
/** make subscription cold */
|
|
230
|
+
take(1),
|
|
231
|
+
/** map out cached ApiPerson_v2 which matches upn */
|
|
232
|
+
map((x) => Object.values(x).find((x) => mather(x.value))?.value),
|
|
233
|
+
find(isApiPerson('v4')),
|
|
234
|
+
filter(isApiPerson('v4')),
|
|
235
|
+
);
|
|
236
|
+
}
|
|
247
237
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
);
|
|
261
|
-
}),
|
|
262
|
-
find(isApiPerson('v2')),
|
|
263
|
-
filter(isApiPerson('v2')),
|
|
238
|
+
protected _queryCache$(args: MatcherArgs): Observable<ApiPerson<'v2'>> {
|
|
239
|
+
const mather = personMatcher(args);
|
|
240
|
+
return this.#personSearchQuery.cache.state$.pipe(
|
|
241
|
+
/** make subscription cold */
|
|
242
|
+
take(1),
|
|
243
|
+
switchMap((entry) => {
|
|
244
|
+
/** expand cache records */
|
|
245
|
+
return from(Object.values(entry)).pipe(
|
|
246
|
+
/** find matching cache record item */
|
|
247
|
+
map((x) => x.value.find((x) => mather(x))),
|
|
248
|
+
/** type cast and end stream */
|
|
249
|
+
find(isApiPerson('v2')),
|
|
264
250
|
);
|
|
265
|
-
|
|
251
|
+
}),
|
|
252
|
+
find(isApiPerson('v2')),
|
|
253
|
+
filter(isApiPerson('v2')),
|
|
254
|
+
);
|
|
255
|
+
}
|
|
266
256
|
}
|
package/src/create-resolver.ts
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
import { firstValueFrom, map } from 'rxjs';
|
|
2
2
|
|
|
3
|
-
import { PersonDetails, PersonInfo, PersonResolver } from '@equinor/fusion-wc-person';
|
|
4
|
-
import { IPersonController } from './PersonController';
|
|
3
|
+
import type { PersonDetails, PersonInfo, PersonResolver } from '@equinor/fusion-wc-person';
|
|
4
|
+
import type { IPersonController } from './PersonController';
|
|
5
5
|
|
|
6
6
|
export const createResolver = (controller: IPersonController): PersonResolver => ({
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
7
|
+
getDetails(args) {
|
|
8
|
+
return firstValueFrom(
|
|
9
|
+
controller.getPerson(args).pipe(
|
|
10
|
+
/** TODO */
|
|
11
|
+
map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonDetails),
|
|
12
|
+
),
|
|
13
|
+
);
|
|
14
|
+
},
|
|
15
|
+
getInfo(args) {
|
|
16
|
+
return firstValueFrom(
|
|
17
|
+
controller.getPersonInfo(args).pipe(
|
|
18
|
+
/** TODO */
|
|
19
|
+
map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonInfo),
|
|
20
|
+
),
|
|
21
|
+
);
|
|
22
|
+
},
|
|
23
|
+
getPhoto(args) {
|
|
24
|
+
return firstValueFrom(controller.getPhoto(args));
|
|
25
|
+
},
|
|
26
|
+
search(args) {
|
|
27
|
+
return firstValueFrom(
|
|
28
|
+
controller.search(args).pipe(
|
|
29
|
+
map((x) =>
|
|
30
|
+
x.map(
|
|
31
|
+
(x) =>
|
|
32
|
+
({
|
|
33
|
+
...x,
|
|
34
|
+
azureId: x.azureUniqueId,
|
|
35
|
+
// TODO
|
|
36
|
+
// @asbjornhaland
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
38
|
+
// @ts-ignore https://github.com/equinor/fusion-web-components/issues/804
|
|
39
|
+
}) as unknown as PersonInfo,
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
),
|
|
43
|
+
);
|
|
44
|
+
},
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
export default createResolver;
|
package/src/makeResolver.tsx
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
2
|
import { PeopleResolverComponent } from './PeopleResolver';
|
|
3
|
-
import { PersonController, PersonControllerOptions } from './PersonController';
|
|
3
|
+
import { PersonController, type PersonControllerOptions } from './PersonController';
|
|
4
4
|
import { createResolver } from './create-resolver';
|
|
5
|
-
import { IApiProvider } from '@equinor/fusion-framework-module-services';
|
|
5
|
+
import type { IApiProvider } from '@equinor/fusion-framework-module-services';
|
|
6
6
|
|
|
7
7
|
export const makeResolver = (services: IApiProvider, options?: PersonControllerOptions) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
return lazy(async () => {
|
|
9
|
+
const client = await services.createPeopleClient();
|
|
10
|
+
const controller = new PersonController(client, options);
|
|
11
|
+
const resolver = createResolver(controller);
|
|
12
|
+
const Component = ({ children }: { readonly children?: React.ReactNode }) => (
|
|
13
|
+
<PeopleResolverComponent resolver={resolver}>{children}</PeopleResolverComponent>
|
|
14
|
+
);
|
|
15
|
+
return {
|
|
16
|
+
default: Component,
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
19
|
};
|
package/src/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ApiResponse as PersonDetailApiResponse } from '@equinor/fusion-framework-module-services/people/get';
|
|
2
2
|
|
|
3
3
|
export type ApiPerson = PersonDetailApiResponse<
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
'v4',
|
|
5
|
+
{ azureId: ''; expand: ['positions', 'manager'] }
|
|
6
6
|
>;
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '1.5.
|
|
2
|
+
export const version = '1.5.4';
|