Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] Add @gauzy/plugin-integration-ai-ui Package #8438

Merged
merged 4 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

43 changes: 0 additions & 43 deletions apps/gauzy/src/app/pages/integrations/gauzy-ai/gauzy-ai.module.ts

This file was deleted.

4 changes: 2 additions & 2 deletions apps/gauzy/src/app/pages/integrations/integrations.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ export class IntegrationsModule {
location: 'integrations',
// Register the path 'gauzy-ai'
path: 'gauzy-ai',
// Register the loadChildren function to load the GauzyAIModule lazy module
loadChildren: () => import('./gauzy-ai/gauzy-ai.module').then((m) => m.GauzyAIModule)
// Register the loadChildren function to load the IntegrationAiUiModule lazy module
loadChildren: () => import('@gauzy/plugin-integration-ai-ui').then((m) => m.IntegrationAiUiModule)
rahul-rocket marked this conversation as resolved.
Show resolved Hide resolved
});

// Register the routes for github integration
Expand Down
6 changes: 6 additions & 0 deletions packages/plugins/integration-ai-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@
"@angular/core": "^16.2.12"
},
"dependencies": {
"@angular/forms": "^16.2.12",
"@angular/router": "^16.2.12",
"@gauzy/contracts": "^0.1.0",
"@nebular/theme": "^12.0.0",
"@ngneat/until-destroy": "^9.2.0",
"@ngx-translate/core": "^15.0.0",
"ngx-permissions": "^13.0.1",
"rxjs": "^7.4.0",
"tslib": "^2.6.2"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { GauzyAIAuthorizationComponent } from './authorization.component';
import { IntegrationAIAuthorizationComponent } from './authorization.component';

describe('GauzyAIAuthorizationComponent', () => {
let component: GauzyAIAuthorizationComponent;
let fixture: ComponentFixture<GauzyAIAuthorizationComponent>;
describe('IntegrationAIAuthorizationComponent', () => {
let component: IntegrationAIAuthorizationComponent;
let fixture: ComponentFixture<IntegrationAIAuthorizationComponent>;

beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [GauzyAIAuthorizationComponent],
declarations: [IntegrationAIAuthorizationComponent],
teardown: { destroyAfterEach: false }
}).compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(GauzyAIAuthorizationComponent);
fixture = TestBed.createComponent(IntegrationAIAuthorizationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ import { ReplacePipe } from '@gauzy/ui-core/shared';
styleUrls: ['./authorization.component.scss'],
providers: []
})
export class GauzyAIAuthorizationComponent implements AfterViewInit, OnInit, OnDestroy {
export class IntegrationAIAuthorizationComponent implements AfterViewInit, OnInit, OnDestroy {
public organization: IOrganization;

/**
* The form property is a readonly FormGroup that is built using the buildForm static method.
*/
readonly form: UntypedFormGroup = GauzyAIAuthorizationComponent.buildForm(this._formBuilder);
readonly form: UntypedFormGroup = IntegrationAIAuthorizationComponent.buildForm(this._formBuilder);

/**
* Static method to build the Angular FormGroup using the FormBuilder.
Expand Down Expand Up @@ -161,7 +161,7 @@ export class GauzyAIAuthorizationComponent implements AfterViewInit, OnInit, OnD
.subscribe();
} catch (error) {
// Log any errors that occur during the process
console.log('Error while creating new integration for Gauzy AI', error);
console.log('Error while creating new integration for Integration AI', error);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ <h5>
<ngx-integration-setting-card
[title]="'INTEGRATIONS.GAUZY_AI_PAGE.CONSUMER_KEYS' | translate"
[items]="settings"
(saved)="updateIntegrationSettings($event)"
(saved)="updateIntegrationSettings()"
></ngx-integration-setting-card>
</ng-container>
<ng-container *ngIf="openAISettings$ | async as openAISettings">
<ngx-integration-setting-card
[title]="'INTEGRATIONS.GAUZY_AI_PAGE.OPEN_AI_API_KEYS' | translate"
[items]="openAISettings"
(saved)="updateIntegrationSettings($event)"
(saved)="updateIntegrationSettings()"
></ngx-integration-setting-card>
</ng-container>
</nb-tab>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import { SettingTitlesEnum } from '../integration-setting-card/integration-setti
templateUrl: './view.component.html',
providers: [TitleCasePipe]
})
export class GauzyAIViewComponent extends TranslationBaseComponent implements OnInit {
export class IntegrationAIViewComponent extends TranslationBaseComponent implements OnInit {
rahul-rocket marked this conversation as resolved.
Show resolved Hide resolved
public organization: IOrganization;
public organization$: Observable<IOrganization>; // Observable to hold the selected organization
public settings$: Observable<IIntegrationSetting[]>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,95 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { filter, merge } from 'rxjs';
import {
NbButtonModule,
NbCardModule,
NbIconModule,
NbInputModule,
NbTabsetModule,
NbToggleModule,
NbTooltipModule
} from '@nebular/theme';
import { NgxPermissionsModule, NgxPermissionsService } from 'ngx-permissions';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
import { LanguagesEnum } from '@gauzy/contracts';
import { distinctUntilChange } from '@gauzy/ui-core/common';
import { Store } from '@gauzy/ui-core/core';
import { HttpLoaderFactory, I18nService } from '@gauzy/ui-core/i18n';
import { SharedModule, WorkInProgressModule, getBrowserLanguage } from '@gauzy/ui-core/shared';
import { IntegrationAiRoutes } from './integration-ai.routes';
import { IntegrationAILayoutComponent } from './integration-ai.layout.component';
import { IntegrationAIAuthorizationComponent } from './components/authorization/authorization.component';
import { IntegrationAIViewComponent } from './components/view/view.component';
import { IntegrationSettingCardComponent } from './components/integration-setting-card/integration-setting-card.component';

@NgModule({
declarations: [],
imports: [CommonModule],
exports: []
declarations: [
IntegrationAILayoutComponent,
IntegrationAIAuthorizationComponent,
IntegrationAIViewComponent,
IntegrationSettingCardComponent
],
imports: [
NbButtonModule,
NbCardModule,
NbIconModule,
NbInputModule,
NbTabsetModule,
NbToggleModule,
NbToggleModule,
rahul-rocket marked this conversation as resolved.
Show resolved Hide resolved
NbTooltipModule,
NgxPermissionsModule.forRoot(),
TranslateModule.forRoot({
defaultLanguage: getBrowserLanguage(), // Get the browser language and fall back to a default if needed
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
}),
IntegrationAiRoutes,
WorkInProgressModule,
SharedModule
]
})
export class IntegrationAiUiModule {}
@UntilDestroy()
export class IntegrationAiUiModule {
constructor(
readonly _translateService: TranslateService,
readonly _ngxPermissionsService: NgxPermissionsService,
readonly _store: Store,
readonly _i18nService: I18nService
) {
this.initializeUiPermissions(); // Initialize UI permissions
this.initializeUiLanguagesAndLocale(); // Initialize UI languages and Update Locale
}

/**
* Initialize UI permissions
*/
private initializeUiPermissions() {
// Load permissions
const permissions = this._store.userRolePermissions.map(({ permission }) => permission);
this._ngxPermissionsService.flushPermissions(); // Flush permissions
this._ngxPermissionsService.loadPermissions(permissions); // Load permissions
}

/**
* Initialize UI languages and Update Locale
*/
private initializeUiLanguagesAndLocale() {
// Observable that emits when preferred language changes.
const preferredLanguage$ = merge(this._store.preferredLanguage$, this._i18nService.preferredLanguage$).pipe(
distinctUntilChange(),
filter((lang: LanguagesEnum) => !!lang),
untilDestroyed(this)
);

// Subscribe to preferred language changes
preferredLanguage$.subscribe((lang: string | LanguagesEnum) => {
this._translateService.use(lang);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Component, OnInit } from '@angular/core';

@Component({
template: ` <router-outlet></router-outlet> `
})
export class IntegrationAILayoutComponent implements OnInit {
ngOnInit() {}
}
Loading
Loading