@neuralinnovations/dataisland-sdk 0.0.1-dev6 → 0.0.1-dev60
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/LICENSE +201 -0
- package/README.md +232 -3
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +103 -0
- package/dist/src/appBuilder.d.ts +44 -0
- package/dist/src/appBuilder.d.ts.map +1 -0
- package/dist/src/appBuilder.js +10 -0
- package/dist/src/appBuilder.js.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts +7 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js +21 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js.map +1 -0
- package/dist/src/commands/startCommandHandler.d.ts +7 -0
- package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/startCommandHandler.js +30 -0
- package/dist/src/commands/startCommandHandler.js.map +1 -0
- package/dist/src/context.d.ts +24 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +31 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/credentials.d.ts +33 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +87 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/dataIslandApp.d.ts +55 -0
- package/dist/src/dataIslandApp.d.ts.map +1 -0
- package/dist/src/dataIslandApp.js +10 -0
- package/dist/src/dataIslandApp.js.map +1 -0
- package/dist/src/disposable.d.ts +84 -0
- package/dist/src/disposable.d.ts.map +1 -0
- package/dist/src/disposable.js +147 -0
- package/dist/src/disposable.js.map +1 -0
- package/dist/src/dto/accessGroupResponse.d.ts +30 -0
- package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
- package/dist/src/dto/accessGroupResponse.js +3 -0
- package/dist/src/dto/accessGroupResponse.js.map +1 -0
- package/dist/src/dto/acquiringResponse.d.ts +46 -0
- package/dist/src/dto/acquiringResponse.d.ts.map +1 -0
- package/dist/src/dto/acquiringResponse.js +11 -0
- package/dist/src/dto/acquiringResponse.js.map +1 -0
- package/dist/src/dto/badRequestResponse.d.ts +6 -0
- package/dist/src/dto/badRequestResponse.d.ts.map +1 -0
- package/dist/src/dto/badRequestResponse.js +3 -0
- package/dist/src/dto/badRequestResponse.js.map +1 -0
- package/dist/src/dto/chatResponse.d.ts +84 -0
- package/dist/src/dto/chatResponse.d.ts.map +1 -0
- package/dist/src/dto/chatResponse.js +45 -0
- package/dist/src/dto/chatResponse.js.map +1 -0
- package/dist/src/dto/limitsResponse.d.ts +29 -0
- package/dist/src/dto/limitsResponse.d.ts.map +1 -0
- package/dist/src/dto/limitsResponse.js +13 -0
- package/dist/src/dto/limitsResponse.js.map +1 -0
- package/dist/src/dto/quizResponse.d.ts +11 -0
- package/dist/src/dto/quizResponse.d.ts.map +1 -0
- package/dist/src/dto/quizResponse.js +3 -0
- package/dist/src/dto/quizResponse.js.map +1 -0
- package/dist/src/dto/statisticsResponse.d.ts +11 -0
- package/dist/src/dto/statisticsResponse.d.ts.map +1 -0
- package/dist/src/dto/statisticsResponse.js +3 -0
- package/dist/src/dto/statisticsResponse.js.map +1 -0
- package/dist/src/dto/userInfoResponse.d.ts +91 -0
- package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
- package/dist/src/dto/userInfoResponse.js +3 -0
- package/dist/src/dto/userInfoResponse.js.map +1 -0
- package/dist/src/dto/workspacesResponse.d.ts +51 -0
- package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
- package/dist/src/dto/workspacesResponse.js +11 -0
- package/dist/src/dto/workspacesResponse.js.map +1 -0
- package/dist/src/events.d.ts +17 -0
- package/dist/src/events.d.ts.map +1 -0
- package/dist/src/events.js +52 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/index.d.ts +73 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +122 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal/app.impl.d.ts +30 -0
- package/dist/src/internal/app.impl.d.ts.map +1 -0
- package/dist/src/internal/app.impl.js +180 -0
- package/dist/src/internal/app.impl.js.map +1 -0
- package/dist/src/internal/appBuilder.impl.d.ts +27 -0
- package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
- package/dist/src/internal/appBuilder.impl.js +71 -0
- package/dist/src/internal/appBuilder.impl.js.map +1 -0
- package/dist/src/internal/createApp.impl.d.ts +4 -0
- package/dist/src/internal/createApp.impl.d.ts.map +1 -0
- package/dist/src/internal/createApp.impl.js +11 -0
- package/dist/src/internal/createApp.impl.js.map +1 -0
- package/dist/src/internal/registry.d.ts +66 -0
- package/dist/src/internal/registry.d.ts.map +1 -0
- package/dist/src/internal/registry.js +114 -0
- package/dist/src/internal/registry.js.map +1 -0
- package/dist/src/middleware.d.ts +6 -0
- package/dist/src/middleware.d.ts.map +1 -0
- package/dist/src/middleware.js +3 -0
- package/dist/src/middleware.js.map +1 -0
- package/dist/src/services/acquiringService.d.ts +9 -0
- package/dist/src/services/acquiringService.d.ts.map +1 -0
- package/dist/src/services/acquiringService.js +19 -0
- package/dist/src/services/acquiringService.js.map +1 -0
- package/dist/src/services/anonymousService.d.ts +8 -0
- package/dist/src/services/anonymousService.d.ts.map +1 -0
- package/dist/src/services/anonymousService.js +41 -0
- package/dist/src/services/anonymousService.js.map +1 -0
- package/dist/src/services/commandService.d.ts +18 -0
- package/dist/src/services/commandService.d.ts.map +1 -0
- package/dist/src/services/commandService.js +40 -0
- package/dist/src/services/commandService.js.map +1 -0
- package/dist/src/services/cookieService.d.ts +7 -0
- package/dist/src/services/cookieService.d.ts.map +1 -0
- package/dist/src/services/cookieService.js +18 -0
- package/dist/src/services/cookieService.js.map +1 -0
- package/dist/src/services/credentialService.d.ts +9 -0
- package/dist/src/services/credentialService.d.ts.map +1 -0
- package/dist/src/services/credentialService.js +26 -0
- package/dist/src/services/credentialService.js.map +1 -0
- package/dist/src/services/httpMethod.d.ts +2 -0
- package/dist/src/services/httpMethod.d.ts.map +1 -0
- package/dist/src/services/httpMethod.js +3 -0
- package/dist/src/services/httpMethod.js.map +1 -0
- package/dist/src/services/middlewareService.d.ts +10 -0
- package/dist/src/services/middlewareService.d.ts.map +1 -0
- package/dist/src/services/middlewareService.js +34 -0
- package/dist/src/services/middlewareService.js.map +1 -0
- package/dist/src/services/organizationService.d.ts +10 -0
- package/dist/src/services/organizationService.d.ts.map +1 -0
- package/dist/src/services/organizationService.js +19 -0
- package/dist/src/services/organizationService.js.map +1 -0
- package/dist/src/services/requestBuilder.d.ts +17 -0
- package/dist/src/services/requestBuilder.d.ts.map +1 -0
- package/dist/src/services/requestBuilder.js +105 -0
- package/dist/src/services/requestBuilder.js.map +1 -0
- package/dist/src/services/responseUtils.d.ts +8 -0
- package/dist/src/services/responseUtils.d.ts.map +1 -0
- package/dist/src/services/responseUtils.js +40 -0
- package/dist/src/services/responseUtils.js.map +1 -0
- package/dist/src/services/rpcService.d.ts +77 -0
- package/dist/src/services/rpcService.d.ts.map +1 -0
- package/dist/src/services/rpcService.js +125 -0
- package/dist/src/services/rpcService.js.map +1 -0
- package/dist/src/services/service.d.ts +21 -0
- package/dist/src/services/service.d.ts.map +1 -0
- package/dist/src/services/service.js +41 -0
- package/dist/src/services/service.js.map +1 -0
- package/dist/src/services/userProfileService.d.ts +10 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +59 -0
- package/dist/src/services/userProfileService.js.map +1 -0
- package/dist/src/storages/acquirings/acquiring.d.ts +41 -0
- package/dist/src/storages/acquirings/acquiring.d.ts.map +1 -0
- package/dist/src/storages/acquirings/acquiring.impl.d.ts +20 -0
- package/dist/src/storages/acquirings/acquiring.impl.d.ts.map +1 -0
- package/dist/src/storages/acquirings/acquiring.impl.js +92 -0
- package/dist/src/storages/acquirings/acquiring.impl.js.map +1 -0
- package/dist/src/storages/acquirings/acquiring.js +10 -0
- package/dist/src/storages/acquirings/acquiring.js.map +1 -0
- package/dist/src/storages/chats/answer.d.ts +41 -0
- package/dist/src/storages/chats/answer.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.d.ts +29 -0
- package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.js +116 -0
- package/dist/src/storages/chats/answer.impl.js.map +1 -0
- package/dist/src/storages/chats/answer.js +15 -0
- package/dist/src/storages/chats/answer.js.map +1 -0
- package/dist/src/storages/chats/chat.d.ts +51 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +27 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +93 -0
- package/dist/src/storages/chats/chat.impl.js.map +1 -0
- package/dist/src/storages/chats/chat.js +12 -0
- package/dist/src/storages/chats/chat.js.map +1 -0
- package/dist/src/storages/chats/chats.d.ts +51 -0
- package/dist/src/storages/chats/chats.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.d.ts +20 -0
- package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.js +184 -0
- package/dist/src/storages/chats/chats.impl.js.map +1 -0
- package/dist/src/storages/chats/chats.js +16 -0
- package/dist/src/storages/chats/chats.js.map +1 -0
- package/dist/src/storages/files/file.d.ts +59 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +28 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +127 -0
- package/dist/src/storages/files/file.impl.js.map +1 -0
- package/dist/src/storages/files/file.js +17 -0
- package/dist/src/storages/files/file.js.map +1 -0
- package/dist/src/storages/files/files.d.ts +39 -0
- package/dist/src/storages/files/files.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.d.ts +24 -0
- package/dist/src/storages/files/files.impl.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.js +168 -0
- package/dist/src/storages/files/files.impl.js.map +1 -0
- package/dist/src/storages/files/files.js +20 -0
- package/dist/src/storages/files/files.js.map +1 -0
- package/dist/src/storages/files/filesPage.d.ts +28 -0
- package/dist/src/storages/files/filesPage.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
- package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.js +38 -0
- package/dist/src/storages/files/filesPage.impl.js.map +1 -0
- package/dist/src/storages/files/filesPage.js +10 -0
- package/dist/src/storages/files/filesPage.js.map +1 -0
- package/dist/src/storages/groups/group.d.ts +63 -0
- package/dist/src/storages/groups/group.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.d.ts +38 -0
- package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.js +210 -0
- package/dist/src/storages/groups/group.impl.js.map +1 -0
- package/dist/src/storages/groups/group.js +15 -0
- package/dist/src/storages/groups/group.js.map +1 -0
- package/dist/src/storages/groups/groups.d.ts +43 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +31 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +136 -0
- package/dist/src/storages/groups/groups.impl.js.map +1 -0
- package/dist/src/storages/groups/groups.js +20 -0
- package/dist/src/storages/groups/groups.js.map +1 -0
- package/dist/src/storages/organizations/organization.d.ts +103 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +44 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +255 -0
- package/dist/src/storages/organizations/organization.impl.js.map +1 -0
- package/dist/src/storages/organizations/organization.js +18 -0
- package/dist/src/storages/organizations/organization.js.map +1 -0
- package/dist/src/storages/organizations/organizations.d.ts +51 -0
- package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts +39 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.js +173 -0
- package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
- package/dist/src/storages/organizations/organizations.js +20 -0
- package/dist/src/storages/organizations/organizations.js.map +1 -0
- package/dist/src/storages/user/userProfile.d.ts +59 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +22 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +118 -0
- package/dist/src/storages/user/userProfile.impl.js.map +1 -0
- package/dist/src/storages/user/userProfile.js +12 -0
- package/dist/src/storages/user/userProfile.js.map +1 -0
- package/dist/src/storages/workspaces/workspace.d.ts +44 -0
- package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
- package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspace.impl.js +98 -0
- package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
- package/dist/src/storages/workspaces/workspace.js +18 -0
- package/dist/src/storages/workspaces/workspace.js.map +1 -0
- package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
- package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
- package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspaces.impl.js +153 -0
- package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
- package/dist/src/storages/workspaces/workspaces.js +19 -0
- package/dist/src/storages/workspaces/workspaces.js.map +1 -0
- package/dist/src/unitTest.d.ts +12 -0
- package/dist/src/unitTest.d.ts.map +1 -0
- package/dist/src/unitTest.js +44 -0
- package/dist/src/unitTest.js.map +1 -0
- package/dist/src/utils/browserUtils.d.ts +4 -0
- package/dist/src/utils/browserUtils.d.ts.map +1 -0
- package/dist/src/utils/browserUtils.js +64 -0
- package/dist/src/utils/browserUtils.js.map +1 -0
- package/dist/src/utils/request.d.ts +6 -0
- package/dist/src/utils/request.d.ts.map +1 -0
- package/dist/src/utils/request.js +3 -0
- package/dist/src/utils/request.js.map +1 -0
- package/dist/src/utils/utils.d.ts +3 -0
- package/dist/src/utils/utils.d.ts.map +1 -0
- package/dist/src/utils/utils.js +13 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +46 -5
- package/src/commands/deleteUserFullCommandHandler.ts +19 -0
- package/src/commands/startCommandHandler.ts +19 -5
- package/src/context.ts +4 -2
- package/src/credentials.ts +22 -0
- package/src/dataIslandApp.ts +8 -2
- package/src/disposable.ts +18 -5
- package/src/dto/accessGroupResponse.ts +19 -16
- package/src/dto/acquiringResponse.ts +54 -0
- package/src/dto/badRequestResponse.ts +6 -0
- package/src/dto/chatResponse.ts +60 -54
- package/src/dto/limitsResponse.ts +32 -0
- package/src/dto/quizResponse.ts +12 -0
- package/src/dto/statisticsResponse.ts +12 -0
- package/src/dto/userInfoResponse.ts +63 -2
- package/src/dto/workspacesResponse.ts +17 -3
- package/src/index.ts +57 -16
- package/src/internal/app.impl.ts +54 -12
- package/src/internal/registry.ts +54 -6
- package/src/middleware.ts +2 -0
- package/src/services/acquiringService.ts +21 -0
- package/src/services/anonymousService.ts +43 -0
- package/src/services/commandService.ts +4 -2
- package/src/services/cookieService.ts +16 -0
- package/src/services/httpMethod.ts +1 -0
- package/src/services/middlewareService.ts +1 -0
- package/src/services/organizationService.ts +2 -2
- package/src/services/requestBuilder.ts +10 -8
- package/src/services/responseUtils.ts +12 -0
- package/src/services/rpcService.ts +1 -0
- package/src/services/userProfileService.ts +36 -4
- package/src/storages/acquirings/acquiring.impl.ts +132 -0
- package/src/storages/acquirings/acquiring.ts +54 -0
- package/src/storages/chats/answer.impl.ts +160 -0
- package/src/storages/chats/answer.ts +53 -0
- package/src/storages/chats/chat.impl.ts +115 -0
- package/src/storages/chats/chat.ts +65 -0
- package/src/storages/chats/chats.impl.ts +255 -0
- package/src/storages/chats/chats.ts +60 -0
- package/src/storages/files/file.impl.ts +159 -0
- package/src/storages/files/file.ts +74 -0
- package/src/storages/{files.impl.ts → files/files.impl.ts} +67 -46
- package/src/storages/{files.ts → files/files.ts} +14 -7
- package/src/storages/files/filesPage.impl.ts +37 -0
- package/src/storages/{filesPage.ts → files/filesPage.ts} +6 -0
- package/src/storages/groups/group.impl.ts +276 -0
- package/src/storages/groups/group.ts +73 -0
- package/src/storages/groups/groups.impl.ts +180 -0
- package/src/storages/groups/groups.ts +50 -0
- package/src/storages/organizations/organization.impl.ts +387 -0
- package/src/storages/organizations/organization.ts +127 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +55 -13
- package/src/storages/{organizations.ts → organizations/organizations.ts} +7 -1
- package/src/storages/user/userProfile.impl.ts +140 -0
- package/src/storages/user/userProfile.ts +75 -0
- package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +27 -7
- package/src/storages/{workspace.ts → workspaces/workspace.ts} +8 -3
- package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +29 -32
- package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
- package/src/unitTest.ts +3 -3
- package/src/utils/browserUtils.ts +68 -0
- package/src/utils/request.ts +6 -0
- package/src/utils/utils.ts +8 -0
- package/.browserslistrc +0 -5
- package/.editorconfig +0 -25
- package/.eslintrc.json +0 -44
- package/.github/workflows/publish-npm.yml +0 -28
- package/.prettierignore +0 -1
- package/.prettierrc +0 -11
- package/.yarnrc +0 -2
- package/babel.config.js +0 -6
- package/jest.config.ts +0 -199
- package/jest.setup.ts +0 -2
- package/src/storages/chat.ts +0 -21
- package/src/storages/chats.ts +0 -17
- package/src/storages/file.impl.ts +0 -69
- package/src/storages/file.ts +0 -28
- package/src/storages/groups.impl.ts +0 -337
- package/src/storages/groups.ts +0 -43
- package/src/storages/organization.impl.ts +0 -68
- package/src/storages/organization.ts +0 -33
- package/src/storages/userProfile.impl.ts +0 -56
- package/src/storages/userProfile.ts +0 -42
- package/test/commands.test.ts +0 -24
- package/test/data/test_file.pdf +0 -0
- package/test/disposable.test.ts +0 -39
- package/test/events.test.ts +0 -151
- package/test/files.test.ts +0 -52
- package/test/index.test.ts +0 -122
- package/test/organization.test.ts +0 -57
- package/test/registry.test.ts +0 -44
- package/test/services.test.ts +0 -56
- package/test/setup.ts +0 -54
- package/test/unitTest.test.ts +0 -21
- package/test/workspace.test.ts +0 -71
- package/tsconfig.json +0 -31
@@ -0,0 +1,387 @@
|
|
1
|
+
import {OrganizationId} from "./organizations"
|
2
|
+
import {Disposable} from "../../disposable"
|
3
|
+
import {
|
4
|
+
CurrentLimitItem,
|
5
|
+
CurrentLimitRecordData,
|
6
|
+
CurrentLimitsData,
|
7
|
+
OrganizationDto,
|
8
|
+
OrganizationSegmentData,
|
9
|
+
UserDto,
|
10
|
+
UserLimitsData,
|
11
|
+
UsersStatisticsResponse
|
12
|
+
} from "../../dto/userInfoResponse"
|
13
|
+
import {WorkspaceId, Workspaces} from "../workspaces/workspaces"
|
14
|
+
import {WorkspacesImpl} from "../workspaces/workspaces.impl"
|
15
|
+
import {Context} from "../../context"
|
16
|
+
import {Organization, OrganizationEvent} from "./organization"
|
17
|
+
import {GroupsImpl} from "../groups/groups.impl"
|
18
|
+
import {Groups} from "../groups/groups"
|
19
|
+
import {ChatsImpl} from "../chats/chats.impl"
|
20
|
+
import {Chats} from "../chats/chats"
|
21
|
+
import {RpcService} from "../../services/rpcService"
|
22
|
+
import {ResponseUtils} from "../../services/responseUtils"
|
23
|
+
import {StatisticsResponse} from "../../dto/statisticsResponse"
|
24
|
+
import {
|
25
|
+
LimitActionType,
|
26
|
+
SegmentData,
|
27
|
+
SegmentsData
|
28
|
+
} from "../../dto/limitsResponse"
|
29
|
+
import {InviteCodeResponse} from "../../dto/accessGroupResponse"
|
30
|
+
import {FileId} from "../files/file"
|
31
|
+
import {QuizData} from "../../dto/quizResponse"
|
32
|
+
|
33
|
+
export class OrganizationImpl extends Organization implements Disposable {
|
34
|
+
private _isDisposed: boolean = false
|
35
|
+
private _isAdmin: boolean = false
|
36
|
+
private _content?: OrganizationDto
|
37
|
+
private readonly _workspaces: WorkspacesImpl
|
38
|
+
private readonly _accessGroups: GroupsImpl
|
39
|
+
private readonly _chats: ChatsImpl
|
40
|
+
|
41
|
+
constructor(private readonly context: Context) {
|
42
|
+
super()
|
43
|
+
this._workspaces = new WorkspacesImpl(this, this.context)
|
44
|
+
this._accessGroups = new GroupsImpl(this, this.context)
|
45
|
+
this._chats = new ChatsImpl(this, this.context)
|
46
|
+
}
|
47
|
+
|
48
|
+
public async initFrom(
|
49
|
+
content: OrganizationDto,
|
50
|
+
isAdmin: boolean
|
51
|
+
): Promise<OrganizationImpl> {
|
52
|
+
this._content = content
|
53
|
+
this._isAdmin = isAdmin
|
54
|
+
|
55
|
+
// init workspaces by organization id
|
56
|
+
const promises = [
|
57
|
+
this._workspaces.initFrom(content.id),
|
58
|
+
this._chats.initFrom(content.id),
|
59
|
+
this._accessGroups.initialize()
|
60
|
+
]
|
61
|
+
|
62
|
+
await Promise.all(promises)
|
63
|
+
|
64
|
+
return this
|
65
|
+
}
|
66
|
+
|
67
|
+
get isAdmin(): boolean {
|
68
|
+
return this._isAdmin
|
69
|
+
}
|
70
|
+
|
71
|
+
get isDisposed(): boolean {
|
72
|
+
return this._isDisposed
|
73
|
+
}
|
74
|
+
|
75
|
+
dispose(): void {
|
76
|
+
this._isDisposed = true
|
77
|
+
}
|
78
|
+
|
79
|
+
get id(): OrganizationId {
|
80
|
+
return <OrganizationId>this._content?.id
|
81
|
+
}
|
82
|
+
|
83
|
+
get name(): string {
|
84
|
+
return <OrganizationId>this._content?.profile.name
|
85
|
+
}
|
86
|
+
|
87
|
+
get description(): string {
|
88
|
+
return <OrganizationId>this._content?.profile.description
|
89
|
+
}
|
90
|
+
|
91
|
+
get workspaces(): Workspaces {
|
92
|
+
return this._workspaces
|
93
|
+
}
|
94
|
+
|
95
|
+
get accessGroups(): Groups {
|
96
|
+
return this._accessGroups
|
97
|
+
}
|
98
|
+
|
99
|
+
get chats(): Chats {
|
100
|
+
return this._chats
|
101
|
+
}
|
102
|
+
|
103
|
+
async members(): Promise<UserDto[]> {
|
104
|
+
// send request to the server
|
105
|
+
const response = await this.context
|
106
|
+
.resolve(RpcService)
|
107
|
+
?.requestBuilder("api/v1/Organizations/members")
|
108
|
+
.searchParam("id", this.id)
|
109
|
+
.sendGet()
|
110
|
+
|
111
|
+
// check response status
|
112
|
+
if (ResponseUtils.isFail(response)) {
|
113
|
+
await ResponseUtils.throwError(
|
114
|
+
`Failed during fetch of organization members ${this.id}`,
|
115
|
+
response
|
116
|
+
)
|
117
|
+
}
|
118
|
+
|
119
|
+
return (await response!.json() as {
|
120
|
+
members: UserDto[]
|
121
|
+
}).members as UserDto[]
|
122
|
+
}
|
123
|
+
|
124
|
+
async change(name: string, description: string): Promise<void> {
|
125
|
+
if (!this._content) {
|
126
|
+
throw new Error("Organization is not loaded.")
|
127
|
+
}
|
128
|
+
|
129
|
+
if (name === this.name && description === this.description) {
|
130
|
+
return Promise.resolve()
|
131
|
+
}
|
132
|
+
if (name === undefined || name === null || name.trim() === "") {
|
133
|
+
throw new Error("Name is required. Please provide a valid name.")
|
134
|
+
}
|
135
|
+
if (
|
136
|
+
description === undefined ||
|
137
|
+
description === null ||
|
138
|
+
description.trim() === ""
|
139
|
+
) {
|
140
|
+
throw new Error(
|
141
|
+
"Description is required. Please provide a valid description."
|
142
|
+
)
|
143
|
+
}
|
144
|
+
|
145
|
+
const response = await this.context
|
146
|
+
.resolve(RpcService)
|
147
|
+
?.requestBuilder("api/v1/Organizations")
|
148
|
+
.sendPutJson({
|
149
|
+
organizationId: this.id,
|
150
|
+
profile: {
|
151
|
+
name,
|
152
|
+
description
|
153
|
+
}
|
154
|
+
})
|
155
|
+
|
156
|
+
if (ResponseUtils.isFail(response)) {
|
157
|
+
await ResponseUtils.throwError("Failed to change organization", response)
|
158
|
+
}
|
159
|
+
|
160
|
+
if (this._content) {
|
161
|
+
this._content.profile.name = name
|
162
|
+
this._content.profile.description = description
|
163
|
+
}
|
164
|
+
|
165
|
+
this.dispatch({
|
166
|
+
type: OrganizationEvent.CHANGED,
|
167
|
+
data: this
|
168
|
+
})
|
169
|
+
}
|
170
|
+
|
171
|
+
async statistics(dateFrom: number, dateTo: number): Promise<StatisticsResponse> {
|
172
|
+
// send request to the server
|
173
|
+
const response = await this.context
|
174
|
+
.resolve(RpcService)
|
175
|
+
?.requestBuilder("api/v1/Stats/organization")
|
176
|
+
.searchParam("organizationId", this.id)
|
177
|
+
.searchParam("dateFrom", dateFrom.toString())
|
178
|
+
.searchParam("dateTo", dateTo.toString())
|
179
|
+
.sendGet()
|
180
|
+
|
181
|
+
// check response status
|
182
|
+
if (ResponseUtils.isFail(response)) {
|
183
|
+
await ResponseUtils.throwError(
|
184
|
+
`Failed during fetch of organization statistics ${this.id}`,
|
185
|
+
response
|
186
|
+
)
|
187
|
+
}
|
188
|
+
|
189
|
+
return await response!.json() as StatisticsResponse
|
190
|
+
}
|
191
|
+
|
192
|
+
async membersStatistics(dateFrom: number, dateTo: number): Promise<UsersStatisticsResponse> {
|
193
|
+
// send request to the server
|
194
|
+
const response = await this.context
|
195
|
+
.resolve(RpcService)
|
196
|
+
?.requestBuilder("api/v1/Stats/organization/members")
|
197
|
+
.searchParam("organizationId", this.id)
|
198
|
+
.searchParam("dateFrom", dateFrom.toString())
|
199
|
+
.searchParam("dateTo", dateTo.toString())
|
200
|
+
.sendGet()
|
201
|
+
|
202
|
+
// check response status
|
203
|
+
if (ResponseUtils.isFail(response)) {
|
204
|
+
await ResponseUtils.throwError(
|
205
|
+
`Failed during fetch of organization members statistics ${this.id}`,
|
206
|
+
response
|
207
|
+
)
|
208
|
+
}
|
209
|
+
|
210
|
+
return await response!.json() as UsersStatisticsResponse
|
211
|
+
}
|
212
|
+
|
213
|
+
async userStatistic(userId: string, dateFrom: number, dateTo: number): Promise<StatisticsResponse> {
|
214
|
+
// send request to the server
|
215
|
+
const response = await this.context
|
216
|
+
.resolve(RpcService)
|
217
|
+
?.requestBuilder("api/v1/Stats/user")
|
218
|
+
.searchParam("userId", userId)
|
219
|
+
.searchParam("organizationId", this.id)
|
220
|
+
.searchParam("dateFrom", dateFrom.toString())
|
221
|
+
.searchParam("dateTo", dateTo.toString())
|
222
|
+
.sendGet()
|
223
|
+
|
224
|
+
// check response status
|
225
|
+
if (ResponseUtils.isFail(response)) {
|
226
|
+
await ResponseUtils.throwError(
|
227
|
+
`Failed during fetch of user statistics ${this.id}`,
|
228
|
+
response
|
229
|
+
)
|
230
|
+
}
|
231
|
+
|
232
|
+
return await response!.json() as StatisticsResponse
|
233
|
+
}
|
234
|
+
|
235
|
+
async userLimits(): Promise<CurrentLimitsData> {
|
236
|
+
// fetch limits
|
237
|
+
const response = await this.context.resolve(RpcService)
|
238
|
+
?.requestBuilder("api/v1/Users/limits")
|
239
|
+
.sendGet()
|
240
|
+
|
241
|
+
// check response status
|
242
|
+
if (ResponseUtils.isFail(response)) {
|
243
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
244
|
+
}
|
245
|
+
|
246
|
+
// parse limits from the server's response
|
247
|
+
const limits = (await response!.json()) as UserLimitsData
|
248
|
+
|
249
|
+
const currentLimits = {
|
250
|
+
segment: limits.userSegment.key,
|
251
|
+
limits: []
|
252
|
+
} as CurrentLimitsData
|
253
|
+
for (const limit of limits.userLimits) {
|
254
|
+
const type = limit.action as LimitActionType
|
255
|
+
const currentItem = {
|
256
|
+
action: type,
|
257
|
+
records: []
|
258
|
+
} as CurrentLimitItem
|
259
|
+
|
260
|
+
if (limit.records.length == 0) continue
|
261
|
+
|
262
|
+
for (const record of limit.records) {
|
263
|
+
const segmentRecord = limits.userSegment.dayItems.find(item => item.daysCount == record.daysCount)
|
264
|
+
if (segmentRecord == null) {
|
265
|
+
throw new Error(`Invalid response during get limits in organization: ${this.id}. Days count with ${type} not found in segment ${limits.userSegment.key}`)
|
266
|
+
}
|
267
|
+
const actionRecord = segmentRecord?.actionItems.find(item => item.type == type)
|
268
|
+
if (actionRecord == null) {
|
269
|
+
throw new Error(`Invalid response during get limits in organization: ${this.id}. Type ${type} not found in segment ${limits.userSegment.key}`)
|
270
|
+
}
|
271
|
+
|
272
|
+
const currentRecord = {} as CurrentLimitRecordData
|
273
|
+
currentRecord.daysCount = record.daysCount
|
274
|
+
currentRecord.activeTill = record.activeTill
|
275
|
+
currentRecord.all = actionRecord?.tokenLimit ?? actionRecord?.countLimit
|
276
|
+
|
277
|
+
const available = record.tokenLimit ?? record.countLimit
|
278
|
+
currentRecord.used = currentRecord.all - available
|
279
|
+
|
280
|
+
currentItem.records.push(currentRecord)
|
281
|
+
}
|
282
|
+
|
283
|
+
currentLimits.limits.push(currentItem)
|
284
|
+
}
|
285
|
+
|
286
|
+
return currentLimits
|
287
|
+
}
|
288
|
+
|
289
|
+
async organizationLimits(): Promise<SegmentData> {
|
290
|
+
// fetch limits
|
291
|
+
const response = await this.context.resolve(RpcService)
|
292
|
+
?.requestBuilder("api/v1/Descriptions/limits/organization")
|
293
|
+
.searchParam("organizationId", this.id)
|
294
|
+
.sendGet()
|
295
|
+
|
296
|
+
// check response status
|
297
|
+
if (ResponseUtils.isFail(response)) {
|
298
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
299
|
+
}
|
300
|
+
|
301
|
+
const json = await response!.json()
|
302
|
+
|
303
|
+
// parse limits from the server's response
|
304
|
+
const limits = (json as OrganizationSegmentData).segment
|
305
|
+
|
306
|
+
return limits
|
307
|
+
}
|
308
|
+
|
309
|
+
async limitSegments(): Promise<SegmentData[]> {
|
310
|
+
// fetch limits
|
311
|
+
const response = await this.context.resolve(RpcService)
|
312
|
+
?.requestBuilder("api/v1/Descriptions/limits/segments")
|
313
|
+
.sendGet()
|
314
|
+
|
315
|
+
// check response status
|
316
|
+
if (ResponseUtils.isFail(response)) {
|
317
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
318
|
+
}
|
319
|
+
const json = await response!.json()
|
320
|
+
|
321
|
+
// parse limits from the server's response
|
322
|
+
const limits = (json as SegmentsData).segments
|
323
|
+
|
324
|
+
return limits
|
325
|
+
}
|
326
|
+
|
327
|
+
async inviteUsers(emails: string[], accessGroups: string[]): Promise<void> {
|
328
|
+
const response = await this.context
|
329
|
+
.resolve(RpcService)
|
330
|
+
?.requestBuilder("api/v1/Invites")
|
331
|
+
.sendPostJson({
|
332
|
+
organizationId: this.id,
|
333
|
+
emails: emails,
|
334
|
+
accessGroupIds: accessGroups
|
335
|
+
})
|
336
|
+
if (ResponseUtils.isFail(response)) {
|
337
|
+
await ResponseUtils.throwError(
|
338
|
+
`Invite users failed for organization ${this.id}`,
|
339
|
+
response
|
340
|
+
)
|
341
|
+
}
|
342
|
+
}
|
343
|
+
|
344
|
+
async createInviteCode(accessGroups: string[]): Promise<string> {
|
345
|
+
const response = await this.context
|
346
|
+
.resolve(RpcService)
|
347
|
+
?.requestBuilder("api/v1/Invites/link")
|
348
|
+
.sendPostJson({
|
349
|
+
organizationId: this.id,
|
350
|
+
accessGroupIds: accessGroups
|
351
|
+
})
|
352
|
+
if (ResponseUtils.isFail(response)) {
|
353
|
+
await ResponseUtils.throwError(
|
354
|
+
`Invite code creation failed for organization ${this.id}`,
|
355
|
+
response
|
356
|
+
)
|
357
|
+
}
|
358
|
+
|
359
|
+
const json = await response!.json()
|
360
|
+
|
361
|
+
const code = (json as InviteCodeResponse).code
|
362
|
+
|
363
|
+
return code
|
364
|
+
}
|
365
|
+
|
366
|
+
async createQuiz(workspaces: WorkspaceId[], query: string, questionsCount: number, optionsCount: number, fileId: FileId): Promise<QuizData> {
|
367
|
+
const response = await this.context
|
368
|
+
.resolve(RpcService)
|
369
|
+
?.requestBuilder("api/v1/Quiz")
|
370
|
+
.sendPostJson({
|
371
|
+
query: query,
|
372
|
+
questionsCount: questionsCount,
|
373
|
+
optionsCount: optionsCount,
|
374
|
+
organizationId: this.id,
|
375
|
+
workspaceIds: workspaces,
|
376
|
+
fileId: fileId
|
377
|
+
})
|
378
|
+
if (ResponseUtils.isFail(response)) {
|
379
|
+
await ResponseUtils.throwError(
|
380
|
+
`Quiz creation failed for organization ${this.id} with query ${query}`,
|
381
|
+
response
|
382
|
+
)
|
383
|
+
}
|
384
|
+
|
385
|
+
return (await response!.json()) as QuizData
|
386
|
+
}
|
387
|
+
}
|
@@ -0,0 +1,127 @@
|
|
1
|
+
import {WorkspaceId, Workspaces} from "../workspaces/workspaces"
|
2
|
+
import { OrganizationId } from "./organizations"
|
3
|
+
import { Groups } from "../groups/groups"
|
4
|
+
import { Chats } from "../chats/chats"
|
5
|
+
import { EventDispatcher } from "../../events"
|
6
|
+
import {
|
7
|
+
CurrentLimitsData,
|
8
|
+
UserDto,
|
9
|
+
UsersStatisticsResponse
|
10
|
+
} from "../../dto/userInfoResponse"
|
11
|
+
import { GroupId } from "../groups/group"
|
12
|
+
import { StatisticsResponse } from "../../dto/statisticsResponse"
|
13
|
+
import { SegmentData } from "../../dto/limitsResponse"
|
14
|
+
import {FileId} from "../files/file"
|
15
|
+
import {QuizData} from "../../dto/quizResponse"
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Organization event.
|
19
|
+
*/
|
20
|
+
export enum OrganizationEvent {
|
21
|
+
CHANGED = "changed"
|
22
|
+
}
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Organization.
|
26
|
+
*/
|
27
|
+
export abstract class Organization extends EventDispatcher<
|
28
|
+
OrganizationEvent,
|
29
|
+
Organization
|
30
|
+
> {
|
31
|
+
/**
|
32
|
+
* Organization id.
|
33
|
+
*/
|
34
|
+
abstract get id(): OrganizationId
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Organization name.
|
38
|
+
*/
|
39
|
+
abstract get name(): string
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Organization description.
|
43
|
+
*/
|
44
|
+
abstract get description(): string
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Workspaces.
|
48
|
+
*/
|
49
|
+
abstract get workspaces(): Workspaces
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Chats.
|
53
|
+
*/
|
54
|
+
abstract get chats(): Chats
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Groups.
|
58
|
+
*/
|
59
|
+
abstract get accessGroups(): Groups
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Get organization members
|
63
|
+
*/
|
64
|
+
abstract members(): Promise<UserDto[]>
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Get organization statistics
|
68
|
+
* @param dateFrom
|
69
|
+
* @param dateTo
|
70
|
+
*/
|
71
|
+
abstract statistics(dateFrom: number, dateTo: number): Promise<StatisticsResponse>
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Get organization statistics
|
75
|
+
* @param dateFrom
|
76
|
+
* @param dateTo
|
77
|
+
*/
|
78
|
+
abstract membersStatistics(dateFrom: number, dateTo: number): Promise<UsersStatisticsResponse>
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Get statistics for user
|
82
|
+
* @param userid
|
83
|
+
* @param dateFrom
|
84
|
+
* @param dateTo
|
85
|
+
*/
|
86
|
+
abstract userStatistic(userid: string, dateFrom: number, dateTo: number): Promise<StatisticsResponse>
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Get user limits data
|
90
|
+
*/
|
91
|
+
abstract userLimits(): Promise<CurrentLimitsData>
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Get default organization limits
|
95
|
+
*/
|
96
|
+
abstract organizationLimits(): Promise<SegmentData>
|
97
|
+
|
98
|
+
/**
|
99
|
+
* Get all available segments data
|
100
|
+
*/
|
101
|
+
abstract limitSegments(): Promise<SegmentData[]>
|
102
|
+
|
103
|
+
/**
|
104
|
+
* Change organization name and description.
|
105
|
+
*/
|
106
|
+
abstract change(name: string, description: string): Promise<void>
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Invite users with given emails to organization
|
110
|
+
*/
|
111
|
+
abstract inviteUsers(emails: string[], accessGroups: GroupId[]): Promise<void>
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Create invite code for users outside organization
|
115
|
+
*/
|
116
|
+
abstract createInviteCode(accessGroups: GroupId[]): Promise<string>
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Create quiz for given topic
|
120
|
+
* @param workspaces - workspaces to search for topic
|
121
|
+
* @param query - search query and quiz topic
|
122
|
+
* @param questionsCount - count of quiz tests
|
123
|
+
* @param optionsCount - count of one question options
|
124
|
+
* @param fileId - file id in case of test-on-file
|
125
|
+
*/
|
126
|
+
abstract createQuiz(workspaces: WorkspaceId[], query: string, questionsCount: number, optionsCount: number, fileId: FileId): Promise<QuizData>
|
127
|
+
}
|
@@ -4,11 +4,12 @@ import {
|
|
4
4
|
Organizations
|
5
5
|
} from "./organizations"
|
6
6
|
import { OrganizationImpl } from "./organization.impl"
|
7
|
-
import { RpcService } from "
|
8
|
-
import { OrganizationDto, UserSettings } from "
|
9
|
-
import { Context } from "
|
7
|
+
import { RpcService } from "../../services/rpcService"
|
8
|
+
import { ApplyInviteCodeResponse, OrganizationDto, UserSettings } from "../../dto/userInfoResponse"
|
9
|
+
import { Context } from "../../context"
|
10
10
|
import { Organization } from "./organization"
|
11
|
-
import { ResponseUtils } from "
|
11
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
12
|
+
import { UserProfileService } from "../../services/userProfileService"
|
12
13
|
|
13
14
|
export class OrganizationsImpl extends Organizations {
|
14
15
|
constructor(public readonly context: Context) {
|
@@ -61,6 +62,27 @@ export class OrganizationsImpl extends Organizations {
|
|
61
62
|
return this.internalDeleteOrganization(id)
|
62
63
|
}
|
63
64
|
|
65
|
+
async applyInviteCode(code: string): Promise<ApplyInviteCodeResponse> {
|
66
|
+
const response = await this.context
|
67
|
+
.resolve(RpcService)
|
68
|
+
?.requestBuilder("api/v1/Invites/apply")
|
69
|
+
.sendPutJson({
|
70
|
+
code: code
|
71
|
+
})
|
72
|
+
if (ResponseUtils.isFail(response)) {
|
73
|
+
await ResponseUtils.throwError(
|
74
|
+
"Invite code validation failed",
|
75
|
+
response
|
76
|
+
)
|
77
|
+
}
|
78
|
+
|
79
|
+
await this.context.resolve(UserProfileService)?.fetch()
|
80
|
+
|
81
|
+
const result = (await response?.json()) as ApplyInviteCodeResponse
|
82
|
+
|
83
|
+
return result
|
84
|
+
}
|
85
|
+
|
64
86
|
//----------------------------------------------------------------------------
|
65
87
|
// INTERNALS
|
66
88
|
//----------------------------------------------------------------------------
|
@@ -79,17 +101,22 @@ export class OrganizationsImpl extends Organizations {
|
|
79
101
|
if (!this.contains(id)) {
|
80
102
|
throw new Error(`Organization delete, id: ${id} is not found`)
|
81
103
|
}
|
104
|
+
// send request to the server
|
82
105
|
const response = await this.context
|
83
106
|
.resolve(RpcService)
|
84
107
|
?.requestBuilder("/api/v1/Organizations")
|
85
108
|
.searchParam("id", id)
|
86
109
|
.sendDelete()
|
110
|
+
|
111
|
+
// check response status
|
87
112
|
if (ResponseUtils.isFail(response)) {
|
88
113
|
await ResponseUtils.throwError(
|
89
114
|
`Organization ${id} delete, failed`,
|
90
115
|
response
|
91
116
|
)
|
92
117
|
}
|
118
|
+
|
119
|
+
// check organization in collection
|
93
120
|
const org = <OrganizationImpl>this.get(id)
|
94
121
|
const index = this.organizations.indexOf(org)
|
95
122
|
if (index < 0) {
|
@@ -134,7 +161,8 @@ export class OrganizationsImpl extends Organizations {
|
|
134
161
|
profile: {
|
135
162
|
name: name,
|
136
163
|
description: description
|
137
|
-
}
|
164
|
+
},
|
165
|
+
currentOrganizationId: this.currentOrganizationId
|
138
166
|
})
|
139
167
|
if (ResponseUtils.isFail(response)) {
|
140
168
|
await ResponseUtils.throwError(
|
@@ -142,7 +170,9 @@ export class OrganizationsImpl extends Organizations {
|
|
142
170
|
response
|
143
171
|
)
|
144
172
|
}
|
145
|
-
const content = (await response!.json()
|
173
|
+
const content = (await response!.json() as {
|
174
|
+
organization: OrganizationDto
|
175
|
+
}).organization as OrganizationDto
|
146
176
|
|
147
177
|
// create organization and init from content
|
148
178
|
const org = await new OrganizationImpl(this.context).initFrom(content, true)
|
@@ -170,22 +200,34 @@ export class OrganizationsImpl extends Organizations {
|
|
170
200
|
organizations: OrganizationDto[],
|
171
201
|
settings: UserSettings | null | undefined
|
172
202
|
): Promise<void> {
|
203
|
+
|
204
|
+
this.organizations = []
|
205
|
+
|
206
|
+
// set current organization
|
173
207
|
this.currentOrganizationId = settings?.activeOrganizationId
|
208
|
+
|
209
|
+
// wait list
|
210
|
+
const waitList: Promise<OrganizationImpl>[] = []
|
211
|
+
|
212
|
+
// init organizations
|
174
213
|
for (const organization of organizations) {
|
175
214
|
// create organization and init from content
|
176
|
-
const
|
215
|
+
const orgPromise = new OrganizationImpl(this.context).initFrom(
|
177
216
|
organization,
|
178
217
|
adminInOrganization.includes(organization.id)
|
179
218
|
)
|
180
219
|
|
220
|
+
// add organization to wait list
|
221
|
+
waitList.push(orgPromise)
|
222
|
+
}
|
223
|
+
|
224
|
+
// wait for all organizations
|
225
|
+
const orgImpls = await Promise.all(waitList)
|
226
|
+
|
227
|
+
// add organizations to collection
|
228
|
+
for (const org of orgImpls) {
|
181
229
|
// add organization to collection
|
182
230
|
this.organizations.push(org)
|
183
|
-
|
184
|
-
// dispatch event, organization added
|
185
|
-
this.dispatch({
|
186
|
-
type: OrganizationsEvent.ADDED,
|
187
|
-
data: org
|
188
|
-
})
|
189
231
|
}
|
190
232
|
}
|
191
233
|
}
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import {
|
1
|
+
import { ApplyInviteCodeResponse } from "../../dto/userInfoResponse"
|
2
|
+
import { EventDispatcher } from "../../events"
|
2
3
|
import { Organization } from "./organization"
|
3
4
|
|
4
5
|
/**
|
@@ -53,4 +54,9 @@ export abstract class Organizations extends EventDispatcher<
|
|
53
54
|
* Delete organization.
|
54
55
|
*/
|
55
56
|
abstract delete(id: OrganizationId): Promise<void>
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Apply invite code for user
|
60
|
+
*/
|
61
|
+
abstract applyInviteCode(code: string): Promise<ApplyInviteCodeResponse>
|
56
62
|
}
|