@geexcode/geex-angular 0.0.39 → 0.0.52

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/dist/index.mjs CHANGED
@@ -1,420 +1 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/provide-geex.ts
4
- import { Injector as Injector3 } from "@angular/core";
5
-
6
- // src/geex.ts
7
- import { InjectionToken, runInInjectionContext as runInInjectionContext2 } from "@angular/core";
8
-
9
- // src/modules.ts
10
- import { Apollo } from "apollo-angular";
11
- import { runInInjectionContext, signal } from "@angular/core";
12
- import { OAuthService } from "angular-oauth2-oidc";
13
- import { CookieService, deepCopy } from "@delon/util";
14
- import gql from "graphql-tag";
15
- import { firstValueFrom, map, fromEvent } from "rxjs";
16
- import { debounceTime, switchMap } from "rxjs/operators";
17
- import { toSignal } from "@angular/core/rxjs-interop";
18
- var LoginProviderEnum = {
19
- Local: "Local"
20
- };
21
- var OrgTypeEnum = {
22
- Default: "Default"
23
- };
24
- var ExtensionModule = {};
25
- var GQL_CHECK_TENANT = gql`mutation checkTenant($code: String!) { checkTenant(code: $code) { id code name isEnabled createdOn } }`;
26
- var GQL_FEDERATE_AUTH = gql`mutation federateAuthenticate(
27
- $code: String!
28
- $loginProvider: LoginProviderEnum!
29
- ) {
30
- federateAuthenticate(
31
- request: { code: $code, loginProvider: $loginProvider }
32
- ) {
33
- token
34
- loginProvider
35
- userId
36
- name
37
- user {
38
- id
39
- username
40
- nickname
41
- phoneNumber
42
- email
43
- isEnable
44
- openId
45
- loginProvider
46
- createdOn
47
- ... on IUser {
48
- roleNames
49
- roleIds
50
- permissions
51
- orgCodes
52
- avatarFileId
53
- orgs {
54
- allParentOrgs {
55
- code
56
- name
57
- }
58
- name
59
- code
60
- }
61
- claims {
62
- claimType
63
- claimValue
64
- }
65
- avatarFile {
66
- id
67
- createdOn
68
- fileSize
69
- mimeType
70
- storageType
71
- fileName
72
- md5
73
- url
74
- }
75
- }
76
- }
77
- }
78
- }
79
- `;
80
- var GQL_ON_PUBLIC_NOTIFY = gql`subscription onPublicNotify { onPublicNotify { __typename ... on DataChangeClientNotify { dataChangeType } } }`;
81
- var GQL_ORGS_CACHE = gql`query orgsCache { orgs(take: 999) { items { id orgType code name parentOrgCode } } }`;
82
- var GQL_INIT_SETTINGS = gql`query initSettings { initSettings { id name value } }`;
83
- function guardedSignal(innerSignal, isInitialized) {
84
- const guard = (() => {
85
- if (!isInitialized()) {
86
- throw new Error(`GuardedSignal not initialized.
87
- isInitialized: ${isInitialized.toString()}
88
- innerSignal: ${innerSignal.toString()}
89
- `);
90
- }
91
- return innerSignal();
92
- });
93
- if ("set" in innerSignal) {
94
- guard.set = innerSignal.set.bind(innerSignal);
95
- guard.update = innerSignal.update.bind(innerSignal);
96
- }
97
- if ("asReadonly" in innerSignal) {
98
- guard.asReadonly = innerSignal.asReadonly.bind(innerSignal);
99
- }
100
- return guard;
101
- }
102
- function createTenantModule(injector) {
103
- const _current = signal(null);
104
- let _initialized = false;
105
- let _initPromise = null;
106
- const module = {
107
- init: (force = false) => {
108
- if (force) {
109
- _initPromise = null;
110
- _initialized = false;
111
- }
112
- if (!_initPromise) {
113
- _initPromise = (async () => {
114
- try {
115
- const tenantCode = injector.get(CookieService).get("__tenant");
116
- if (tenantCode) {
117
- const tenantData = await module.loadTenantData(tenantCode);
118
- _current.set(tenantData ?? null);
119
- }
120
- _initialized = true;
121
- } catch (err) {
122
- console.error(err);
123
- }
124
- })();
125
- }
126
- return _initPromise;
127
- },
128
- current: guardedSignal(_current, () => _initialized),
129
- async loadTenantData(code) {
130
- const res = await firstValueFrom(
131
- injector.get(Apollo).mutate({ mutation: GQL_CHECK_TENANT, variables: { code } })
132
- );
133
- return res.data.checkTenant;
134
- },
135
- switchTenant(targetTenantCode) {
136
- const domainParts = location.hostname.split(".");
137
- if (domainParts.length > 2) {
138
- domainParts.shift();
139
- }
140
- const rootDomain = domainParts.join(".");
141
- injector.get(CookieService).put("__tenant", targetTenantCode, {
142
- secure: false,
143
- SameSite: "lax",
144
- HttpOnly: false,
145
- domain: rootDomain
146
- });
147
- }
148
- };
149
- return module;
150
- }
151
- function createAuthModule(injector) {
152
- const _user = signal(null);
153
- let _initialized = false;
154
- let _initPromise = null;
155
- const module = {
156
- init: (force = false) => {
157
- if (force) {
158
- _initPromise = null;
159
- _initialized = false;
160
- }
161
- if (!_initPromise) {
162
- _initPromise = (async () => {
163
- try {
164
- const userData = await module.loadUserData();
165
- _user.set(userData ?? null);
166
- _initialized = true;
167
- } catch (err) {
168
- console.error(err);
169
- }
170
- })();
171
- }
172
- return _initPromise;
173
- },
174
- user: guardedSignal(_user, () => _initialized),
175
- async loadUserData() {
176
- const oAuthService = injector.get(OAuthService);
177
- try {
178
- await oAuthService.loadDiscoveryDocument();
179
- if (!oAuthService.hasValidAccessToken()) {
180
- return void 0;
181
- }
182
- await oAuthService.loadUserProfile();
183
- const profile = oAuthService.getIdentityClaims();
184
- if (profile) {
185
- const result = await firstValueFrom(injector.get(Apollo).mutate({
186
- mutation: GQL_FEDERATE_AUTH,
187
- variables: {
188
- code: oAuthService.getAccessToken(),
189
- loginProvider: profile.login_provider
190
- }
191
- }).pipe(map((res) => res?.data?.federateAuthenticate.user)));
192
- return result;
193
- }
194
- } catch (err) {
195
- console.error(err);
196
- }
197
- return void 0;
198
- }
199
- };
200
- return module;
201
- }
202
- function createIdentityModule(injector) {
203
- const _orgsSignal = signal([]);
204
- const _userOwnedOrgsSignal = signal([]);
205
- let _initialized = false;
206
- let _initPromise = null;
207
- const module = {
208
- orgs: guardedSignal(_orgsSignal, () => _initialized),
209
- userOwnedOrgs: guardedSignal(_userOwnedOrgsSignal, () => _initialized),
210
- init: (force = false) => {
211
- if (force) {
212
- _initPromise = null;
213
- _initialized = false;
214
- }
215
- if (!_initPromise) {
216
- _initPromise = (async () => {
217
- try {
218
- await geex.tenant.init();
219
- await geex.auth.init();
220
- await new Promise((resolve, reject) => {
221
- const orgs$ = injector.get(Apollo).watchQuery({ query: GQL_ORGS_CACHE }).valueChanges.pipe(map((res) => deepCopy(res.data.orgs.items)));
222
- orgs$.subscribe({
223
- next: (orgs) => {
224
- runInInjectionContext(injector, () => {
225
- _orgsSignal.set(orgs);
226
- const userData = geex.auth.user();
227
- let allOwned = [];
228
- if (orgs?.length && userData) {
229
- if (userData.id === "000000000000000000000001") {
230
- allOwned = deepCopy(orgs);
231
- } else {
232
- const ownedCodes = userData.orgs.map((x) => x.code);
233
- allOwned = orgs.filter((o) => ownedCodes.some((code) => o.code.startsWith(code)));
234
- }
235
- }
236
- _userOwnedOrgsSignal.set(allOwned);
237
- resolve();
238
- });
239
- },
240
- error: (err) => {
241
- console.error(err);
242
- reject(err);
243
- }
244
- });
245
- });
246
- _initialized = true;
247
- } catch (error) {
248
- console.error(error);
249
- }
250
- })();
251
- }
252
- return _initPromise;
253
- }
254
- };
255
- return module;
256
- }
257
- function createMessagingModule(injector) {
258
- let _initialized = false;
259
- let _initPromise = null;
260
- const module = {
261
- init: (force = false) => {
262
- if (force) {
263
- _initPromise = null;
264
- _initialized = false;
265
- }
266
- if (!_initPromise) {
267
- _initPromise = (async () => {
268
- try {
269
- await geex.auth.init();
270
- if (injector.get(OAuthService).hasValidAccessToken()) {
271
- const subClient = injector.get(Apollo).use("subscription");
272
- subClient.subscribe({ query: GQL_ON_PUBLIC_NOTIFY }).pipe(map((res) => res?.data?.onPublicNotify)).subscribe((notify) => {
273
- module.onPublicNotify(notify);
274
- });
275
- }
276
- _initialized = true;
277
- } catch (err) {
278
- console.error(err);
279
- }
280
- })();
281
- }
282
- return _initPromise;
283
- },
284
- onPublicNotify(notify) {
285
- console.log("Public notify", notify);
286
- }
287
- };
288
- return module;
289
- }
290
- function createSettingsModule(injector) {
291
- const _settingsSignal = signal([]);
292
- let _initialized = false;
293
- let _initPromise = null;
294
- const module = {
295
- settings: guardedSignal(_settingsSignal, () => _initialized),
296
- init: (force = false) => {
297
- if (force) {
298
- _initPromise = null;
299
- _initialized = false;
300
- }
301
- if (!_initPromise) {
302
- _initPromise = (async () => {
303
- try {
304
- const res = await firstValueFrom(
305
- injector.get(Apollo).query({ query: GQL_INIT_SETTINGS })
306
- );
307
- const settings = res.data.initSettings;
308
- _settingsSignal.set(settings);
309
- _initialized = true;
310
- } catch (err) {
311
- console.error(err);
312
- }
313
- })();
314
- }
315
- return _initPromise;
316
- }
317
- };
318
- return module;
319
- }
320
- function createUiModule(injector) {
321
- const _fullScreenSignal = signal(false);
322
- const _isMobile = toSignal(fromEvent(window, "resize").pipe(
323
- debounceTime(200),
324
- switchMap(async () => window.innerHeight / window.innerWidth >= 1.5)
325
- ));
326
- let _initialized = false;
327
- let _initPromise = null;
328
- const module = {
329
- fullScreen: guardedSignal(_fullScreenSignal, () => _initialized),
330
- isMobile: guardedSignal(_isMobile, () => _initialized),
331
- activeRoutedComponent: void 0,
332
- init: (force = false) => {
333
- if (force) {
334
- _initPromise = null;
335
- _initialized = false;
336
- }
337
- if (!_initPromise) {
338
- _initPromise = (async () => {
339
- _initialized = true;
340
- })();
341
- }
342
- return _initPromise;
343
- }
344
- };
345
- return module;
346
- }
347
-
348
- // src/geex.ts
349
- var geex;
350
- var Geex = new InjectionToken("Geex");
351
- function configGeex(injector, overrides = {}) {
352
- runInInjectionContext2(injector, () => {
353
- const modules = {
354
- ...overrides
355
- };
356
- let _initPromise = null;
357
- modules.init ?? (modules.init = (force = false) => {
358
- if (force) {
359
- _initPromise = null;
360
- }
361
- if (!_initPromise) {
362
- _initPromise = (async () => {
363
- const entries = Object.entries(modules).filter(([key]) => key !== "init");
364
- return Object.fromEntries(await Promise.all(
365
- entries.map(async ([key, mod]) => {
366
- const maybeInit = mod.init;
367
- try {
368
- return [key, await maybeInit(force)];
369
- } catch (err) {
370
- console.error(err);
371
- return [key, null];
372
- }
373
- })
374
- ));
375
- })();
376
- }
377
- return _initPromise;
378
- });
379
- modules.tenant ?? (modules.tenant = createTenantModule(injector));
380
- modules.auth ?? (modules.auth = createAuthModule(injector));
381
- modules.identity ?? (modules.identity = createIdentityModule(injector));
382
- modules.messaging ?? (modules.messaging = createMessagingModule(injector));
383
- modules.settings ?? (modules.settings = createSettingsModule(injector));
384
- modules.ui ?? (modules.ui = createUiModule(injector));
385
- geex = modules;
386
- });
387
- }
388
-
389
- // src/provide-geex.ts
390
- function provideGeex(overrides = {}, extensions = {}) {
391
- return [
392
- {
393
- provide: Geex,
394
- useFactory: (injector) => {
395
- const mergedModules = {
396
- ...extensions,
397
- ...overrides
398
- };
399
- configGeex(injector, mergedModules);
400
- return geex;
401
- },
402
- deps: [Injector3]
403
- }
404
- ];
405
- }
406
- export {
407
- ExtensionModule,
408
- Geex,
409
- LoginProviderEnum,
410
- OrgTypeEnum,
411
- configGeex,
412
- createAuthModule,
413
- createIdentityModule,
414
- createMessagingModule,
415
- createSettingsModule,
416
- createTenantModule,
417
- createUiModule,
418
- geex,
419
- provideGeex
420
- };
1
+ export * from "./fesm2022/geexcode-geex-angular.mjs";