blob: 73feecfdba3ef80cd790bca79344da60e8f7d1b8 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { DatePipe, registerLocaleData } from "@angular/common";
import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http";
import en from "@angular/common/locales/en";
import { APP_INITIALIZER, NgModule, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { RouterModule } from "@angular/router";
import { FormlyModule } from "@ngx-formly/core";
import { NzButtonModule } from "ng-zorro-antd/button";
import { NzCollapseModule } from "ng-zorro-antd/collapse";
import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
import { NzDropDownModule } from "ng-zorro-antd/dropdown";
import { NzFormModule } from "ng-zorro-antd/form";
import { NzAutocompleteModule } from "ng-zorro-antd/auto-complete";
import { NzIconModule } from "ng-zorro-antd/icon";
import { NzInputModule } from "ng-zorro-antd/input";
import { NzPopoverModule } from "ng-zorro-antd/popover";
import { NzListModule } from "ng-zorro-antd/list";
import { NzTableModule } from "ng-zorro-antd/table";
import { NzToolTipModule } from "ng-zorro-antd/tooltip";
import { NzSelectModule } from "ng-zorro-antd/select";
import { NzSpaceModule } from "ng-zorro-antd/space";
import { NzBadgeModule } from "ng-zorro-antd/badge";
import { NzUploadModule } from "ng-zorro-antd/upload";
import { NgxJsonViewerModule } from "ngx-json-viewer";
import { ColorPickerModule } from "ngx-color-picker";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
import { ArrayTypeComponent } from "./common/formly/array.type";
import { TEXERA_FORMLY_CONFIG } from "./common/formly/formly-config";
import { MultiSchemaTypeComponent } from "./common/formly/multischema.type";
import { NullTypeComponent } from "./common/formly/null.type";
import { ObjectTypeComponent } from "./common/formly/object.type";
import { UserService } from "./common/service/user/user.service";
import { GuiConfigService } from "./common/service/gui-config.service";
import { DashboardComponent } from "./dashboard/component/dashboard.component";
import { UserWorkflowComponent } from "./dashboard/component/user/user-workflow/user-workflow.component";
import { ShareAccessComponent } from "./dashboard/component/user/share-access/share-access.component";
import { WorkflowExecutionHistoryComponent } from "./dashboard/component/user/user-workflow/ngbd-modal-workflow-executions/workflow-execution-history.component";
import { UserQuotaComponent } from "./dashboard/component/user/user-quota/user-quota.component";
import { UserIconComponent } from "./dashboard/component/user/user-icon/user-icon.component";
import { UserAvatarComponent } from "./dashboard/component/user/user-avatar/user-avatar.component";
import { CodeEditorComponent } from "./workspace/component/code-editor-dialog/code-editor.component";
import { AnnotationSuggestionComponent } from "./workspace/component/code-editor-dialog/annotation-suggestion.component";
import { CodeareaCustomTemplateComponent } from "./workspace/component/codearea-custom-template/codearea-custom-template.component";
import { MiniMapComponent } from "./workspace/component/workflow-editor/mini-map/mini-map.component";
import { MenuComponent } from "./workspace/component/menu/menu.component";
import { OperatorLabelComponent } from "./workspace/component/left-panel/operator-menu/operator-label/operator-label.component";
import { OperatorMenuComponent } from "./workspace/component/left-panel/operator-menu/operator-menu.component";
import { SettingsComponent } from "./workspace/component/left-panel/settings/settings.component";
import { PropertyEditorComponent } from "./workspace/component/property-editor/property-editor.component";
import { TypeCastingDisplayComponent } from "./workspace/component/property-editor/typecasting-display/type-casting-display.component";
import { ResultPanelComponent } from "./workspace/component/result-panel/result-panel.component";
import { VisualizationFrameContentComponent } from "./workspace/component/visualization-panel-content/visualization-frame-content.component";
import { WorkflowEditorComponent } from "./workspace/component/workflow-editor/workflow-editor.component";
import { WorkspaceComponent } from "./workspace/component/workspace.component";
import { NzCardModule } from "ng-zorro-antd/card";
import { NzTagModule } from "ng-zorro-antd/tag";
import { NzAvatarModule } from "ng-zorro-antd/avatar";
import { BlobErrorHttpInterceptor } from "./common/service/blob-error-http-interceptor.service";
import { ConsoleFrameComponent } from "./workspace/component/result-panel/console-frame/console-frame.component";
import { ResultTableFrameComponent } from "./workspace/component/result-panel/result-table-frame/result-table-frame.component";
import { RowModalComponent } from "./workspace/component/result-panel/result-panel-modal.component";
import { OperatorPropertyEditFrameComponent } from "./workspace/component/property-editor/operator-property-edit-frame/operator-property-edit-frame.component";
import { NzTabsModule } from "ng-zorro-antd/tabs";
import { VersionsListComponent } from "./workspace/component/left-panel/versions-list/versions-list.component";
import { NzPaginationModule } from "ng-zorro-antd/pagination";
import { JwtModule } from "@auth0/angular-jwt";
import { AuthService } from "./common/service/user/auth.service";
import { UserProjectComponent } from "./dashboard/component/user/user-project/user-project.component";
import { UserProjectSectionComponent } from "./dashboard/component/user/user-project/user-project-section/user-project-section.component";
import { NgbdModalAddProjectWorkflowComponent } from "./dashboard/component/user/user-project/user-project-section/ngbd-modal-add-project-workflow/ngbd-modal-add-project-workflow.component";
import { NgbdModalRemoveProjectWorkflowComponent } from "./dashboard/component/user/user-project/user-project-section/ngbd-modal-remove-project-workflow/ngbd-modal-remove-project-workflow.component";
import { PresetWrapperComponent } from "./common/formly/preset-wrapper/preset-wrapper.component";
import { NzModalCommentBoxComponent } from "./workspace/component/workflow-editor/comment-box-modal/nz-modal-comment-box.component";
import { NzCommentModule } from "ng-zorro-antd/comment";
import { AdminUserComponent } from "./dashboard/component/admin/user/admin-user.component";
import { AdminExecutionComponent } from "./dashboard/component/admin/execution/admin-execution.component";
import { NzPopconfirmModule } from "ng-zorro-antd/popconfirm";
import { AdminGuardService } from "./dashboard/service/admin/guard/admin-guard.service";
import { ContextMenuComponent } from "./workspace/component/workflow-editor/context-menu/context-menu/context-menu.component";
import { CoeditorUserIconComponent } from "./workspace/component/menu/coeditor-user-icon/coeditor-user-icon.component";
import { AgentPanelComponent } from "./workspace/component/agent-panel/agent-panel.component";
import { AgentChatComponent } from "./workspace/component/agent-panel/agent-chat/agent-chat.component";
import { AgentRegistrationComponent } from "./workspace/component/agent-panel/agent-registration/agent-registration.component";
import { InputAutoCompleteComponent } from "./workspace/component/input-autocomplete/input-autocomplete.component";
import { CollabWrapperComponent } from "./common/formly/collab-wrapper/collab-wrapper/collab-wrapper.component";
import { TexeraCopilot } from "./workspace/service/copilot/texera-copilot";
import { NzSwitchModule } from "ng-zorro-antd/switch";
import { AboutComponent } from "./hub/component/about/about.component";
import { NzLayoutModule } from "ng-zorro-antd/layout";
import { AuthGuardService } from "./common/service/user/auth-guard.service";
import { LocalLoginComponent } from "./hub/component/about/local-login/local-login.component";
import { MarkdownModule } from "ngx-markdown";
import { FileSaverService } from "./dashboard/service/user/file/file-saver.service";
import { DragDropModule } from "@angular/cdk/drag-drop";
import { UserWorkflowListItemComponent } from "./dashboard/component/user/user-workflow/user-workflow-list-item/user-workflow-list-item.component";
import { UserProjectListItemComponent } from "./dashboard/component/user/user-project/user-project-list-item/user-project-list-item.component";
import { SortButtonComponent } from "./dashboard/component/user/sort-button/sort-button.component";
import { FiltersComponent } from "./dashboard/component/user/filters/filters.component";
import { FiltersInstructionsComponent } from "./dashboard/component/user/filters-instructions/filters-instructions.component";
import { SearchComponent } from "./dashboard/component/user/search/search.component";
import { SearchResultsComponent } from "./dashboard/component/user/search-results/search-results.component";
import { PortPropertyEditFrameComponent } from "./workspace/component/property-editor/port-property-edit-frame/port-property-edit-frame.component";
import { AdminGmailComponent } from "./dashboard/component/admin/gmail/admin-gmail.component";
import { PublicProjectComponent } from "./dashboard/component/user/user-project/public-project/public-project.component";
import { FormlyNgZorroAntdModule } from "@ngx-formly/ng-zorro-antd";
import { FlarumComponent } from "./dashboard/component/user/flarum/flarum.component";
import { NzAlertModule } from "ng-zorro-antd/alert";
import { LeftPanelComponent } from "./workspace/component/left-panel/left-panel.component";
import { ErrorFrameComponent } from "./workspace/component/result-panel/error-frame/error-frame.component";
import { NzResizableModule } from "ng-zorro-antd/resizable";
import { WorkflowRuntimeStatisticsComponent } from "./dashboard/component/user/user-workflow/ngbd-modal-workflow-executions/workflow-runtime-statistics/workflow-runtime-statistics.component";
import { TimeTravelComponent } from "./workspace/component/left-panel/time-travel/time-travel.component";
import { NzMessageModule } from "ng-zorro-antd/message";
import { NzModalModule } from "ng-zorro-antd/modal";
import { NzDescriptionsModule } from "ng-zorro-antd/descriptions";
import { OverlayModule } from "@angular/cdk/overlay";
import { HighlightSearchTermsPipe } from "./dashboard/component/user/user-workflow/user-workflow-list-item/highlight-search-terms.pipe";
import { en_US, provideNzI18n } from "ng-zorro-antd/i18n";
import { FilesUploaderComponent } from "./dashboard/component/user/files-uploader/files-uploader.component";
import { UserDatasetComponent } from "./dashboard/component/user/user-dataset/user-dataset.component";
import { UserDatasetVersionCreatorComponent } from "./dashboard/component/user/user-dataset/user-dataset-explorer/user-dataset-version-creator/user-dataset-version-creator.component";
import { DatasetDetailComponent } from "./dashboard/component/user/user-dataset/user-dataset-explorer/dataset-detail.component";
import { UserDatasetVersionFiletreeComponent } from "./dashboard/component/user/user-dataset/user-dataset-explorer/user-dataset-version-filetree/user-dataset-version-filetree.component";
import { UserDatasetFileRendererComponent } from "./dashboard/component/user/user-dataset/user-dataset-explorer/user-dataset-file-renderer/user-dataset-file-renderer.component";
import { NzSpinModule } from "ng-zorro-antd/spin";
import { UserDatasetListItemComponent } from "./dashboard/component/user/user-dataset/user-dataset-list-item/user-dataset-list-item.component";
import { NgxFileDropModule } from "ngx-file-drop";
import { NzTreeModule } from "ng-zorro-antd/tree";
import { NzTreeViewModule } from "ng-zorro-antd/tree-view";
import { NzNoAnimationModule } from "ng-zorro-antd/core/no-animation";
import { TreeModule } from "@ali-hm/angular-tree-component";
import { FileSelectionComponent } from "./workspace/component/file-selection/file-selection.component";
import { ResultExportationComponent } from "./workspace/component/result-exportation/result-exportation.component";
import { ReportGenerationService } from "./workspace/service/report-generation/report-generation.service";
import { SearchBarComponent } from "./dashboard/component/user/search-bar/search-bar.component";
import { ListItemComponent } from "./dashboard/component/user/list-item/list-item.component";
import { HubComponent } from "./hub/component/hub.component";
import { HubWorkflowDetailComponent } from "./hub/component/workflow/detail/hub-workflow-detail.component";
import { LandingPageComponent } from "./hub/component/landing-page/landing-page.component";
import { BrowseSectionComponent } from "./hub/component/browse-section/browse-section.component";
import { BreakpointConditionInputComponent } from "./workspace/component/code-editor-dialog/breakpoint-condition-input/breakpoint-condition-input.component";
import { CodeDebuggerComponent } from "./workspace/component/code-editor-dialog/code-debugger.component";
import { GoogleAuthService } from "./common/service/user/google-auth.service";
import {
GoogleLoginProvider,
GoogleSigninButtonModule,
SocialAuthServiceConfig,
SocialLoginModule,
} from "@abacritt/angularx-social-login";
import { catchError, firstValueFrom, lastValueFrom, of } from "rxjs";
import { HubSearchResultComponent } from "./hub/component/hub-search-result/hub-search-result.component";
import { UserDatasetStagedObjectsListComponent } from "./dashboard/component/user/user-dataset/user-dataset-explorer/user-dataset-staged-objects-list/user-dataset-staged-objects-list.component";
import { NzEmptyModule } from "ng-zorro-antd/empty";
import { NzDividerModule } from "ng-zorro-antd/divider";
import { NzProgressModule } from "ng-zorro-antd/progress";
import { ComputingUnitSelectionComponent } from "./workspace/component/power-button/computing-unit-selection.component";
import { NzSliderModule } from "ng-zorro-antd/slider";
import { AdminSettingsComponent } from "./dashboard/component/admin/settings/admin-settings.component";
import { FormlyRepeatDndComponent } from "./common/formly/repeat-dnd/repeat-dnd.component";
import { NzInputNumberModule } from "ng-zorro-antd/input-number";
import { NzCheckboxModule } from "ng-zorro-antd/checkbox";
registerLocaleData(en);
@NgModule({
declarations: [
FormlyRepeatDndComponent,
AdminGmailComponent,
PublicProjectComponent,
AppComponent,
WorkspaceComponent,
MenuComponent,
OperatorMenuComponent,
SettingsComponent,
PropertyEditorComponent,
VersionsListComponent,
TimeTravelComponent,
WorkflowEditorComponent,
ResultPanelComponent,
ResultExportationComponent,
OperatorLabelComponent,
DashboardComponent,
AdminUserComponent,
AdminExecutionComponent,
UserIconComponent,
UserAvatarComponent,
LocalLoginComponent,
UserWorkflowComponent,
UserQuotaComponent,
RowModalComponent,
OperatorLabelComponent,
MiniMapComponent,
ArrayTypeComponent,
ObjectTypeComponent,
PresetWrapperComponent,
MultiSchemaTypeComponent,
NullTypeComponent,
VisualizationFrameContentComponent,
CodeareaCustomTemplateComponent,
CodeEditorComponent,
AnnotationSuggestionComponent,
TypeCastingDisplayComponent,
ShareAccessComponent,
WorkflowExecutionHistoryComponent,
ConsoleFrameComponent,
ErrorFrameComponent,
ResultTableFrameComponent,
OperatorPropertyEditFrameComponent,
ResultTableFrameComponent,
OperatorPropertyEditFrameComponent,
UserProjectComponent,
UserProjectSectionComponent,
NgbdModalAddProjectWorkflowComponent,
NgbdModalRemoveProjectWorkflowComponent,
FilesUploaderComponent,
UserDatasetComponent,
UserDatasetVersionCreatorComponent,
DatasetDetailComponent,
UserDatasetVersionFiletreeComponent,
UserDatasetListItemComponent,
UserDatasetFileRendererComponent,
UserDatasetStagedObjectsListComponent,
NzModalCommentBoxComponent,
LeftPanelComponent,
LocalLoginComponent,
ContextMenuComponent,
CoeditorUserIconComponent,
AgentPanelComponent,
AgentChatComponent,
AgentRegistrationComponent,
InputAutoCompleteComponent,
FileSelectionComponent,
CollabWrapperComponent,
AboutComponent,
UserWorkflowListItemComponent,
UserProjectListItemComponent,
SortButtonComponent,
FiltersComponent,
FiltersInstructionsComponent,
SearchComponent,
SearchResultsComponent,
PortPropertyEditFrameComponent,
WorkflowRuntimeStatisticsComponent,
FlarumComponent,
HighlightSearchTermsPipe,
SearchBarComponent,
ListItemComponent,
HubComponent,
HubWorkflowDetailComponent,
LandingPageComponent,
BrowseSectionComponent,
BreakpointConditionInputComponent,
CodeDebuggerComponent,
HubSearchResultComponent,
ComputingUnitSelectionComponent,
AdminSettingsComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
JwtModule.forRoot({
config: {
tokenGetter: AuthService.getAccessToken,
skipWhenExpired: false,
throwNoTokenError: false,
disallowedRoutes: ["forum/api/users"],
},
}),
BrowserAnimationsModule,
RouterModule,
FormsModule,
ReactiveFormsModule,
FormlyModule.forRoot(TEXERA_FORMLY_CONFIG),
FormlyNgZorroAntdModule,
OverlayModule,
NzDatePickerModule,
NzDropDownModule,
NzButtonModule,
NzAutocompleteModule,
NzIconModule,
NzFormModule,
NzListModule,
NzInputModule,
NzPopoverModule,
NzCollapseModule,
NzToolTipModule,
NzTableModule,
NzSelectModule,
NzSpaceModule,
NzBadgeModule,
NzUploadModule,
NgxJsonViewerModule,
NzMessageModule,
NzModalModule,
NzDescriptionsModule,
NzCardModule,
NzTagModule,
NzPopconfirmModule,
NzAvatarModule,
NzTabsModule,
NzPaginationModule,
NzCommentModule,
ColorPickerModule,
NzSwitchModule,
NzLayoutModule,
NzSliderModule,
MarkdownModule.forRoot(),
DragDropModule,
NzAlertModule,
NzResizableModule,
NzSpinModule,
NgxFileDropModule,
NzTreeModule,
NzTreeViewModule,
NzNoAnimationModule,
TreeModule,
SocialLoginModule,
GoogleSigninButtonModule,
NzEmptyModule,
NzDividerModule,
NzProgressModule,
NzInputNumberModule,
NzCheckboxModule,
],
providers: [
provideNzI18n(en_US),
AuthGuardService,
AdminGuardService,
DatePipe,
UserService,
GuiConfigService,
FileSaverService,
ReportGenerationService,
TexeraCopilot,
{
provide: HTTP_INTERCEPTORS,
useClass: BlobErrorHttpInterceptor,
multi: true,
},
{
provide: "SocialAuthServiceConfig",
useFactory: (googleAuthService: GoogleAuthService, userService: UserService) => {
return lastValueFrom(googleAuthService.getClientId()).then(clientId => ({
providers: [
{
id: GoogleLoginProvider.PROVIDER_ID,
provider: new GoogleLoginProvider(clientId, { oneTapEnabled: !userService.isLogin() }),
},
],
})) as Promise<SocialAuthServiceConfig>;
},
deps: [GoogleAuthService, UserService],
},
{
provide: APP_INITIALIZER,
useFactory: (configService: GuiConfigService) => () =>
firstValueFrom(
configService.load().pipe(
catchError((err: unknown) => {
console.error("Failed to load GUI config during app init:", err);
// swallow error so the app can still bootstrap; app.component.ts will show the error message as HTML.
return of(null);
})
)
),
deps: [GuiConfigService],
multi: true,
},
],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}