@neuralinnovations/dataisland-sdk 0.0.1-dev4 → 0.0.1-dev41
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 +283 -37
- 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 +27 -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 +38 -0
- package/dist/src/dto/acquiringResponse.d.ts.map +1 -0
- package/dist/src/dto/acquiringResponse.js +12 -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 +83 -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/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 +88 -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 +45 -0
- package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
- package/dist/src/dto/workspacesResponse.js +3 -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 +66 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +113 -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 +8 -0
- package/dist/src/services/acquiringService.d.ts.map +1 -0
- package/dist/src/services/acquiringService.js +40 -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 +9 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +43 -0
- package/dist/src/services/userProfileService.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 +43 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +25 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +85 -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 +45 -0
- package/dist/src/storages/chats/chats.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.d.ts +19 -0
- package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.js +147 -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 +47 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +25 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +93 -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 +39 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +30 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +132 -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 +95 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +42 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +240 -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 +46 -0
- package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.js +158 -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 +54 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +21 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +114 -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 +152 -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 +16 -5
- package/src/context.ts +4 -2
- package/src/credentials.ts +22 -0
- package/src/{appSdk.ts → dataIslandApp.ts} +9 -3
- package/src/disposable.ts +18 -5
- package/src/dto/accessGroupResponse.ts +19 -16
- package/src/dto/acquiringResponse.ts +45 -0
- package/src/dto/badRequestResponse.ts +6 -0
- package/src/dto/chatResponse.ts +59 -54
- package/src/dto/limitsResponse.ts +33 -0
- package/src/dto/statisticsResponse.ts +12 -0
- package/src/dto/userInfoResponse.ts +59 -2
- package/src/dto/workspacesResponse.ts +5 -3
- package/src/index.ts +46 -24
- package/src/internal/app.impl.ts +52 -10
- package/src/internal/createApp.impl.ts +4 -4
- package/src/internal/registry.ts +54 -6
- package/src/middleware.ts +2 -0
- package/src/services/acquiringService.ts +50 -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 +18 -4
- package/src/storages/chats/answer.impl.ts +160 -0
- package/src/storages/chats/answer.ts +53 -0
- package/src/storages/chats/chat.impl.ts +107 -0
- package/src/storages/chats/chat.ts +55 -0
- package/src/storages/chats/chats.impl.ts +204 -0
- package/src/storages/chats/chats.ts +53 -0
- package/src/storages/files/file.impl.ts +111 -0
- package/src/storages/files/file.ts +58 -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 +175 -0
- package/src/storages/groups/groups.ts +45 -0
- package/src/storages/organizations/organization.impl.ts +357 -0
- package/src/storages/organizations/organization.ts +118 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +31 -13
- package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
- package/src/storages/user/userProfile.impl.ts +136 -0
- package/src/storages/user/userProfile.ts +69 -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} +27 -32
- package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
- package/src/unitTest.ts +14 -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,204 @@
|
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import { ChatDto, ChatListResponse } from "../../dto/chatResponse"
|
3
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
4
|
+
import { RpcService } from "../../services/rpcService"
|
5
|
+
import { OrganizationImpl } from "../organizations/organization.impl"
|
6
|
+
import { OrganizationId } from "../organizations/organizations"
|
7
|
+
import { Chat } from "./chat"
|
8
|
+
import { ChatImpl } from "./chat.impl"
|
9
|
+
import { Chats, ChatsEvent } from "./chats"
|
10
|
+
|
11
|
+
export class ChatsImpl extends Chats {
|
12
|
+
private readonly _chats: Chat[] = []
|
13
|
+
|
14
|
+
constructor(
|
15
|
+
public readonly organization: OrganizationImpl,
|
16
|
+
private readonly context: Context
|
17
|
+
) {
|
18
|
+
super()
|
19
|
+
}
|
20
|
+
|
21
|
+
async initFrom(organizationId: OrganizationId): Promise<void> {
|
22
|
+
// init chats from the server's response
|
23
|
+
const limit = 100
|
24
|
+
const page = 0
|
25
|
+
const response = await this.context
|
26
|
+
.resolve(RpcService)
|
27
|
+
?.requestBuilder("api/v1/Chats/list")
|
28
|
+
.searchParam("organizationId", organizationId)
|
29
|
+
.searchParam("limit", limit.toString())
|
30
|
+
.searchParam("page", page.toString())
|
31
|
+
.sendGet()
|
32
|
+
|
33
|
+
// check response status
|
34
|
+
if (ResponseUtils.isFail(response)) {
|
35
|
+
await ResponseUtils.throwError(
|
36
|
+
`Chats list org id:${organizationId}, page:${page}, limit:${limit}, failed`,
|
37
|
+
response
|
38
|
+
)
|
39
|
+
}
|
40
|
+
|
41
|
+
// parse chats from the server's response
|
42
|
+
const chats = (await response!.json()) as ChatListResponse
|
43
|
+
|
44
|
+
// init chats
|
45
|
+
for (const cht of chats.chats) {
|
46
|
+
// create chat implementation
|
47
|
+
const chat = await new ChatImpl(this.context, this.organization).initFrom(cht)
|
48
|
+
|
49
|
+
// add chat to the collection
|
50
|
+
this._chats.push(chat)
|
51
|
+
|
52
|
+
// dispatch event
|
53
|
+
this.dispatch({
|
54
|
+
type: ChatsEvent.ADDED,
|
55
|
+
data: chat
|
56
|
+
})
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
get collection(): readonly Chat[] {
|
62
|
+
return this._chats
|
63
|
+
}
|
64
|
+
|
65
|
+
get(id: string): Chat {
|
66
|
+
return <Chat>this.tryGet(id)
|
67
|
+
}
|
68
|
+
|
69
|
+
tryGet(id: string): Chat | undefined {
|
70
|
+
return this._chats.find(chat => chat.id === id)
|
71
|
+
}
|
72
|
+
|
73
|
+
async create(model: string): Promise<Chat | undefined> {
|
74
|
+
if (model === undefined || model === null) {
|
75
|
+
throw new Error("Create chat, model is undefined or null")
|
76
|
+
}
|
77
|
+
|
78
|
+
if (model.length === 0) {
|
79
|
+
throw new Error("Create chat, model is empty")
|
80
|
+
}
|
81
|
+
|
82
|
+
// send create request to the server
|
83
|
+
const response = await this.context
|
84
|
+
.resolve(RpcService)
|
85
|
+
?.requestBuilder("api/v1/Chats/workspaces")
|
86
|
+
.sendPostJson({ organizationId: this.organization.id, model: model })
|
87
|
+
|
88
|
+
// check response status
|
89
|
+
if (ResponseUtils.isFail(response)) {
|
90
|
+
if (await ResponseUtils.isLimitReached()){
|
91
|
+
return undefined
|
92
|
+
}
|
93
|
+
|
94
|
+
await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
|
95
|
+
}
|
96
|
+
|
97
|
+
// parse workspace from the server's response
|
98
|
+
const content = (await response!.json() as {
|
99
|
+
chat: ChatDto
|
100
|
+
}).chat as ChatDto
|
101
|
+
|
102
|
+
// create workspace implementation
|
103
|
+
const chat = new ChatImpl(this.context, this.organization)
|
104
|
+
await chat.initFrom(content)
|
105
|
+
|
106
|
+
// add chat to the collection
|
107
|
+
this._chats.push(chat)
|
108
|
+
|
109
|
+
// dispatch event
|
110
|
+
this.dispatch({
|
111
|
+
type: ChatsEvent.ADDED,
|
112
|
+
data: chat
|
113
|
+
})
|
114
|
+
|
115
|
+
return chat
|
116
|
+
}
|
117
|
+
|
118
|
+
async createWithFile(fileId: string): Promise<Chat | undefined> {
|
119
|
+
if (fileId === undefined || fileId === null) {
|
120
|
+
throw new Error("Create chat with file, id is undefined or null")
|
121
|
+
}
|
122
|
+
if (fileId.length === 0 || fileId.trim().length === 0) {
|
123
|
+
throw new Error("Create chat with file, id is empty")
|
124
|
+
}
|
125
|
+
|
126
|
+
// send create request to the server
|
127
|
+
const response = await this.context
|
128
|
+
.resolve(RpcService)
|
129
|
+
?.requestBuilder("api/v1/Chats/file")
|
130
|
+
.sendPostJson({
|
131
|
+
organizationId: this.organization.id,
|
132
|
+
fileId: fileId,
|
133
|
+
model: "search"
|
134
|
+
})
|
135
|
+
|
136
|
+
// check response status
|
137
|
+
if (ResponseUtils.isFail(response)) {
|
138
|
+
if (await ResponseUtils.isLimitReached()){
|
139
|
+
return undefined
|
140
|
+
}
|
141
|
+
|
142
|
+
await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
|
143
|
+
}
|
144
|
+
|
145
|
+
// parse workspace from the server's response
|
146
|
+
const content = (await response!.json() as {
|
147
|
+
chat: ChatDto
|
148
|
+
}).chat as ChatDto
|
149
|
+
|
150
|
+
// create workspace implementation
|
151
|
+
const chat = new ChatImpl(this.context, this.organization)
|
152
|
+
await chat.initFrom(content)
|
153
|
+
|
154
|
+
// add chat to the collection
|
155
|
+
this._chats.push(chat)
|
156
|
+
|
157
|
+
// dispatch event
|
158
|
+
this.dispatch({
|
159
|
+
type: ChatsEvent.ADDED,
|
160
|
+
data: chat
|
161
|
+
})
|
162
|
+
|
163
|
+
return chat
|
164
|
+
}
|
165
|
+
|
166
|
+
|
167
|
+
async delete(id: string): Promise<void> {
|
168
|
+
// get chat by id
|
169
|
+
const chat = <ChatImpl>this.tryGet(id)
|
170
|
+
|
171
|
+
// check if chat is found
|
172
|
+
if (!chat) {
|
173
|
+
throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
|
174
|
+
}
|
175
|
+
|
176
|
+
// send delete request to the server
|
177
|
+
const response = await this.context
|
178
|
+
.resolve(RpcService)
|
179
|
+
?.requestBuilder("api/v1/Chats")
|
180
|
+
.searchParam("id", id)
|
181
|
+
.sendDelete()
|
182
|
+
|
183
|
+
// check response status
|
184
|
+
if (ResponseUtils.isFail(response)) {
|
185
|
+
await ResponseUtils.throwError(
|
186
|
+
`Failed to delete chat: ${id}, organization: ${this.organization.id}`,
|
187
|
+
response
|
188
|
+
)
|
189
|
+
}
|
190
|
+
|
191
|
+
// remove chat from the collection
|
192
|
+
const index = this._chats.indexOf(<ChatImpl>chat)
|
193
|
+
if (index < 0) {
|
194
|
+
throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
|
195
|
+
}
|
196
|
+
this._chats.splice(index, 1)
|
197
|
+
|
198
|
+
// dispatch event
|
199
|
+
this.dispatch({
|
200
|
+
type: ChatsEvent.REMOVED,
|
201
|
+
data: chat
|
202
|
+
})
|
203
|
+
}
|
204
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { EventDispatcher } from "../../events"
|
2
|
+
import { Chat, ChatId } from "./chat"
|
3
|
+
import { Organization } from "../organizations/organization"
|
4
|
+
|
5
|
+
export enum ChatsEvent {
|
6
|
+
ADDED = "added",
|
7
|
+
REMOVED = "removed"
|
8
|
+
}
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Chats storage.
|
12
|
+
*/
|
13
|
+
export abstract class Chats extends EventDispatcher<ChatsEvent, Chat> {
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Organization.
|
17
|
+
*/
|
18
|
+
abstract get organization(): Organization
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Chats list.
|
22
|
+
*/
|
23
|
+
abstract get collection(): ReadonlyArray<Chat>
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Create new chat.
|
27
|
+
*/
|
28
|
+
abstract create(model: string): Promise<Chat | undefined>
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Create chat with specific file
|
32
|
+
* @param fileId
|
33
|
+
*/
|
34
|
+
abstract createWithFile(fileId: string): Promise<Chat | undefined>
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Get chat by id.
|
38
|
+
* @param id
|
39
|
+
*/
|
40
|
+
abstract get(id: ChatId): Chat
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Try to get chat by id.
|
44
|
+
* @param id
|
45
|
+
*/
|
46
|
+
abstract tryGet(id: ChatId): Chat | undefined
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Delete chat.
|
50
|
+
* @param id
|
51
|
+
*/
|
52
|
+
abstract delete(id: ChatId): Promise<void>
|
53
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import { Disposable } from "../../disposable"
|
3
|
+
import { FileDto, FileProgressDto } from "../../dto/workspacesResponse"
|
4
|
+
import { RpcService } from "../../services/rpcService"
|
5
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
6
|
+
import { File, FileStatus } from "./file"
|
7
|
+
import { FilesEvent } from "./files"
|
8
|
+
import { isNullOrUndefined } from "../../utils/utils"
|
9
|
+
|
10
|
+
export class FileImpl extends File implements Disposable {
|
11
|
+
private _isDisposed: boolean = false
|
12
|
+
private _content?: FileDto
|
13
|
+
private _progress?: FileProgressDto
|
14
|
+
|
15
|
+
constructor(private readonly context: Context) {
|
16
|
+
super()
|
17
|
+
}
|
18
|
+
|
19
|
+
async initFrom(file: FileDto): Promise<File> {
|
20
|
+
this._content = file
|
21
|
+
|
22
|
+
await this.updateStatus()
|
23
|
+
|
24
|
+
return this
|
25
|
+
}
|
26
|
+
|
27
|
+
get isDisposed(): boolean {
|
28
|
+
return this._isDisposed
|
29
|
+
}
|
30
|
+
|
31
|
+
dispose(): void {
|
32
|
+
this._isDisposed = true
|
33
|
+
}
|
34
|
+
|
35
|
+
get id(): string {
|
36
|
+
return <string>this._content?.id
|
37
|
+
}
|
38
|
+
|
39
|
+
get name(): string {
|
40
|
+
return <string>this._content?.name
|
41
|
+
}
|
42
|
+
|
43
|
+
get createdAt(): number {
|
44
|
+
return <number>this._content?.createdAt
|
45
|
+
}
|
46
|
+
|
47
|
+
get modifiedAt(): number {
|
48
|
+
return <number>this._content?.modifiedAt
|
49
|
+
}
|
50
|
+
|
51
|
+
get url(): string {
|
52
|
+
return <string>this._content?.url
|
53
|
+
}
|
54
|
+
|
55
|
+
get previewUrl(): string {
|
56
|
+
return <string>this._content?.previewUrl
|
57
|
+
}
|
58
|
+
|
59
|
+
get progress(): FileProgressDto {
|
60
|
+
return <FileProgressDto>this._progress
|
61
|
+
}
|
62
|
+
|
63
|
+
get status(): FileStatus {
|
64
|
+
|
65
|
+
if (
|
66
|
+
isNullOrUndefined(this._progress) || isNullOrUndefined(this._progress.success)
|
67
|
+
|| (this._progress.success && this._progress.completed_parts_count < this._progress.file_parts_count)) {
|
68
|
+
return FileStatus.UPLOADING
|
69
|
+
} else if (this._progress.success) {
|
70
|
+
return FileStatus.SUCCESS
|
71
|
+
} else {
|
72
|
+
return FileStatus.FAILED
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
public fetchAfter() {
|
77
|
+
if (this.status === FileStatus.UPLOADING) {
|
78
|
+
setTimeout(async () => await this.updateStatus(), 500)
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
async updateStatus(): Promise<void> {
|
83
|
+
const response = await this.context
|
84
|
+
.resolve(RpcService)
|
85
|
+
?.requestBuilder("api/v1/Files/fetch")
|
86
|
+
.searchParam("id", this.id)
|
87
|
+
.sendGet()
|
88
|
+
|
89
|
+
if (ResponseUtils.isFail(response)) {
|
90
|
+
await ResponseUtils.throwError(`Failed to get file ${this.id}`, response)
|
91
|
+
}
|
92
|
+
|
93
|
+
const prev_progress = this._progress
|
94
|
+
this._progress = (await response!.json() as {
|
95
|
+
progress: FileProgressDto
|
96
|
+
}).progress as FileProgressDto
|
97
|
+
|
98
|
+
if (isNullOrUndefined(prev_progress) ||
|
99
|
+
(!isNullOrUndefined(this.progress.success) && this.progress.completed_parts_count > prev_progress.completed_parts_count) ||
|
100
|
+
this.status === FileStatus.SUCCESS ||
|
101
|
+
this.status === FileStatus.FAILED) {
|
102
|
+
// dispatch event, file updated
|
103
|
+
this.dispatch({
|
104
|
+
type: FilesEvent.UPDATED,
|
105
|
+
data: this
|
106
|
+
})
|
107
|
+
}
|
108
|
+
|
109
|
+
this.fetchAfter()
|
110
|
+
}
|
111
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import { FileProgressDto } from "../../dto/workspacesResponse"
|
2
|
+
import { EventDispatcher } from "../../events"
|
3
|
+
import { FilesEvent } from "./files"
|
4
|
+
|
5
|
+
export type FileId = string
|
6
|
+
|
7
|
+
export enum FileStatus {
|
8
|
+
UPLOADING = "uploading",
|
9
|
+
SUCCESS = "success",
|
10
|
+
FAILED = "failed"
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* File.
|
15
|
+
*/
|
16
|
+
export abstract class File extends EventDispatcher<
|
17
|
+
FilesEvent,
|
18
|
+
File
|
19
|
+
> {
|
20
|
+
/**
|
21
|
+
* File id.
|
22
|
+
*/
|
23
|
+
abstract get id(): FileId
|
24
|
+
|
25
|
+
/**
|
26
|
+
* File name.
|
27
|
+
*/
|
28
|
+
abstract get name(): string
|
29
|
+
|
30
|
+
/**
|
31
|
+
* File date added.
|
32
|
+
*/
|
33
|
+
abstract get createdAt(): number
|
34
|
+
|
35
|
+
/**
|
36
|
+
* File date modified.
|
37
|
+
*/
|
38
|
+
abstract get modifiedAt(): number
|
39
|
+
/**
|
40
|
+
* File uploading progress
|
41
|
+
*/
|
42
|
+
abstract get progress(): FileProgressDto
|
43
|
+
|
44
|
+
/**
|
45
|
+
* File uploading status
|
46
|
+
*/
|
47
|
+
abstract get status(): FileStatus
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Get temporary url.
|
51
|
+
*/
|
52
|
+
abstract get url(): string
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Get temporary url.
|
56
|
+
*/
|
57
|
+
abstract get previewUrl(): string
|
58
|
+
}
|
@@ -1,34 +1,14 @@
|
|
1
|
-
import { Context } from "
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import { RpcService } from "../services/rpcService"
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import { FileDto, FileListResponse } from "../../dto/workspacesResponse"
|
3
|
+
import { RpcService } from "../../services/rpcService"
|
5
4
|
import { FileImpl } from "./file.impl"
|
6
5
|
import { Files, FilesEvent, UploadFile } from "./files"
|
7
|
-
import { WorkspaceImpl } from "
|
8
|
-
import { ResponseUtils } from "
|
6
|
+
import { WorkspaceImpl } from "../workspaces/workspace.impl"
|
7
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
9
8
|
import { File } from "./file"
|
10
9
|
import { FilesPage } from "./filesPage"
|
11
|
-
|
12
|
-
|
13
|
-
private _isDisposed: boolean = false
|
14
|
-
|
15
|
-
public files: File[] = []
|
16
|
-
public total: number = 0
|
17
|
-
public filesPerPage: number = 0
|
18
|
-
public page: number = 0
|
19
|
-
|
20
|
-
get pages(): number {
|
21
|
-
return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
|
22
|
-
}
|
23
|
-
|
24
|
-
get isDisposed(): boolean {
|
25
|
-
return this._isDisposed
|
26
|
-
}
|
27
|
-
|
28
|
-
dispose(): void {
|
29
|
-
this._isDisposed = true
|
30
|
-
}
|
31
|
-
}
|
10
|
+
import { FilesPageImpl } from "./filesPage.impl"
|
11
|
+
// import { FormData } from "../../utils/request"
|
32
12
|
|
33
13
|
export class FilesImpl extends Files {
|
34
14
|
constructor(
|
@@ -41,12 +21,25 @@ export class FilesImpl extends Files {
|
|
41
21
|
// Object used as files page data, returned by "query"
|
42
22
|
public filesList?: FilesPage
|
43
23
|
|
44
|
-
async upload(
|
45
|
-
|
24
|
+
async upload(files: UploadFile[]): Promise<File[]> {
|
25
|
+
const loaded_files = []
|
26
|
+
for (const file of files) {
|
27
|
+
const loaded_file = await this.internalUpload(file)
|
28
|
+
if (loaded_file != undefined){
|
29
|
+
loaded_files.push(loaded_file)
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return loaded_files
|
33
|
+
}
|
34
|
+
|
35
|
+
async get(fileId: string): Promise<File>{
|
36
|
+
return await this.internalGetFile(fileId)
|
46
37
|
}
|
47
38
|
|
48
|
-
async delete(
|
49
|
-
|
39
|
+
async delete(ids: string[]): Promise<void> {
|
40
|
+
for (const id of ids) {
|
41
|
+
await this.internalDeleteFile(id)
|
42
|
+
}
|
50
43
|
}
|
51
44
|
|
52
45
|
async query(query: string, page: number, limit: number): Promise<FilesPage> {
|
@@ -57,8 +50,39 @@ export class FilesImpl extends Files {
|
|
57
50
|
// INTERNALS
|
58
51
|
//----------------------------------------------------------------------------
|
59
52
|
|
53
|
+
|
54
|
+
async internalGetFile(id: string): Promise<File>{
|
55
|
+
if (id === undefined || id === null) {
|
56
|
+
throw new Error("File get, id is undefined or null")
|
57
|
+
}
|
58
|
+
if (id.length === 0 || id.trim().length === 0) {
|
59
|
+
throw new Error("File get, id is empty")
|
60
|
+
}
|
61
|
+
|
62
|
+
const response = await this.context
|
63
|
+
.resolve(RpcService)
|
64
|
+
?.requestBuilder("api/v1/Files")
|
65
|
+
.searchParam("id", id)
|
66
|
+
.sendGet()
|
67
|
+
|
68
|
+
if (ResponseUtils.isFail(response)) {
|
69
|
+
await ResponseUtils.throwError(
|
70
|
+
`Failed to get file ${id}`,
|
71
|
+
response
|
72
|
+
)
|
73
|
+
}
|
74
|
+
|
75
|
+
// parse file from the server's response
|
76
|
+
const result = (await response!.json() as { file: FileDto }).file as FileDto
|
77
|
+
|
78
|
+
// create file implementation
|
79
|
+
const fileImpl = new FileImpl(this.context)
|
80
|
+
|
81
|
+
return await fileImpl.initFrom(result)
|
82
|
+
}
|
83
|
+
|
60
84
|
/**
|
61
|
-
* Delete
|
85
|
+
* Delete file.
|
62
86
|
* @param id
|
63
87
|
*/
|
64
88
|
async internalDeleteFile(id: string): Promise<void> {
|
@@ -74,13 +98,14 @@ export class FilesImpl extends Files {
|
|
74
98
|
?.requestBuilder("/api/v1/Files")
|
75
99
|
.searchParam("id", id)
|
76
100
|
.sendDelete()
|
101
|
+
|
77
102
|
if (ResponseUtils.isFail(response)) {
|
78
103
|
await ResponseUtils.throwError(`File ${id} delete, failed`, response)
|
79
104
|
}
|
80
105
|
const file = <FileImpl>this.filesList!.files.find(f => f.id === id)
|
81
106
|
const index = this.filesList!.files.indexOf(file)
|
82
107
|
if (index < 0) {
|
83
|
-
throw new Error("
|
108
|
+
throw new Error("File delete, index is not found")
|
84
109
|
}
|
85
110
|
|
86
111
|
// remove file from collection
|
@@ -122,7 +147,6 @@ export class FilesImpl extends Files {
|
|
122
147
|
const response = await this.context
|
123
148
|
.resolve(RpcService)
|
124
149
|
?.requestBuilder("api/v1/Files/list")
|
125
|
-
|
126
150
|
.searchParam("workspaceId", this.workspace.id)
|
127
151
|
.searchParam("organizationId", this.workspace.organization.id)
|
128
152
|
.searchParam("query", query)
|
@@ -151,16 +175,10 @@ export class FilesImpl extends Files {
|
|
151
175
|
for (const fl of files.files) {
|
152
176
|
|
153
177
|
// create file implementation
|
154
|
-
const file = new FileImpl(this.context).initFrom(fl)
|
178
|
+
const file = await new FileImpl(this.context).initFrom(fl)
|
155
179
|
|
156
180
|
// add file to the collection
|
157
181
|
filesList.files.push(file)
|
158
|
-
|
159
|
-
// dispatch event, file added
|
160
|
-
this.dispatch({
|
161
|
-
type: FilesEvent.ADDED,
|
162
|
-
data: file
|
163
|
-
})
|
164
182
|
}
|
165
183
|
|
166
184
|
// set files list
|
@@ -169,7 +187,7 @@ export class FilesImpl extends Files {
|
|
169
187
|
return filesList
|
170
188
|
}
|
171
189
|
|
172
|
-
async internalUpload(file: UploadFile): Promise<File> {
|
190
|
+
async internalUpload(file: UploadFile): Promise<File | undefined> {
|
173
191
|
// check file
|
174
192
|
if (file === undefined || file === null) {
|
175
193
|
throw new Error("File upload, file is undefined or null")
|
@@ -190,17 +208,20 @@ export class FilesImpl extends Files {
|
|
190
208
|
|
191
209
|
// check response status
|
192
210
|
if (ResponseUtils.isFail(response)) {
|
211
|
+
if (await ResponseUtils.isLimitReached()){
|
212
|
+
return undefined
|
213
|
+
}
|
214
|
+
|
193
215
|
await ResponseUtils.throwError(`File upload ${file.name}`, response)
|
194
216
|
}
|
195
217
|
|
196
218
|
// parse file from the server's response
|
197
|
-
const result = (await response!.json()).file as FileDto
|
219
|
+
const result = (await response!.json() as { file: FileDto }).file as FileDto
|
198
220
|
|
199
221
|
// create file implementation
|
200
|
-
const fileImpl = new FileImpl(this.context)
|
222
|
+
const fileImpl = new FileImpl(this.context)
|
201
223
|
|
202
|
-
|
203
|
-
this.filesList?.files.push(fileImpl)
|
224
|
+
await fileImpl.initFrom(result)
|
204
225
|
|
205
226
|
// dispatch event, file added
|
206
227
|
this.dispatch({
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { EventDispatcher } from "
|
1
|
+
import { EventDispatcher } from "../../events"
|
2
2
|
import { File, FileId } from "./file"
|
3
3
|
import { FilesPage } from "./filesPage"
|
4
4
|
|
@@ -7,7 +7,8 @@ import { FilesPage } from "./filesPage"
|
|
7
7
|
*/
|
8
8
|
export enum FilesEvent {
|
9
9
|
ADDED = "added",
|
10
|
-
REMOVED = "removed"
|
10
|
+
REMOVED = "removed",
|
11
|
+
UPDATED = "updated"
|
11
12
|
}
|
12
13
|
|
13
14
|
/**
|
@@ -20,15 +21,21 @@ export type UploadFile = globalThis.File
|
|
20
21
|
*/
|
21
22
|
export abstract class Files extends EventDispatcher<FilesEvent, File> {
|
22
23
|
/**
|
23
|
-
*
|
24
|
+
* Upload file.
|
24
25
|
*/
|
25
|
-
abstract upload(
|
26
|
+
abstract upload(files: UploadFile[]): Promise<File[]>
|
26
27
|
|
27
28
|
/**
|
28
|
-
*
|
29
|
-
* @param
|
29
|
+
* Get file by ID
|
30
|
+
* @param fileId
|
30
31
|
*/
|
31
|
-
abstract
|
32
|
+
abstract get(fileId: FileId): Promise<File>
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Delete files.
|
36
|
+
* @param ids
|
37
|
+
*/
|
38
|
+
abstract delete(ids: FileId[]): Promise<void>
|
32
39
|
|
33
40
|
/**
|
34
41
|
* Query files.
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { FilesPage } from "./filesPage"
|
2
|
+
import { Disposable } from "../../disposable"
|
3
|
+
import { File } from "./file"
|
4
|
+
|
5
|
+
export class FilesPageImpl extends FilesPage implements Disposable {
|
6
|
+
private _isDisposed: boolean = false
|
7
|
+
|
8
|
+
public files: File[] = []
|
9
|
+
public total: number = 0
|
10
|
+
public filesPerPage: number = 0
|
11
|
+
public page: number = 0
|
12
|
+
|
13
|
+
get pages(): number {
|
14
|
+
return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
|
15
|
+
}
|
16
|
+
|
17
|
+
get isDisposed(): boolean {
|
18
|
+
return this._isDisposed
|
19
|
+
}
|
20
|
+
|
21
|
+
dispose(): void {
|
22
|
+
this._isDisposed = true
|
23
|
+
}
|
24
|
+
|
25
|
+
equals(other?: FilesPage | null): boolean {
|
26
|
+
if (other === undefined) return false
|
27
|
+
if (other === null) return false
|
28
|
+
if (other === this) return true
|
29
|
+
return (
|
30
|
+
other.pages === this.pages &&
|
31
|
+
other.total === this.total &&
|
32
|
+
other.page === this.page &&
|
33
|
+
(other.files === this.files ||
|
34
|
+
other.files.every((file, index) => file.id === this.files[index].id))
|
35
|
+
)
|
36
|
+
}
|
37
|
+
}
|