Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9e1fa99
refactor(libs): move commonly used classes and methods to common
MrYuion Sep 18, 2025
9348db2
refactor: fix lib refs in apps
MrYuion Sep 18, 2025
5909bd1
refactor: make app components standalone
MrYuion Sep 19, 2025
7503ae7
Merge branch 'develop' into refactor/clean-libs
MrYuion Sep 19, 2025
a2e9f4b
chore: convert most components in concierge and workplace to standalone
MrYuion Sep 19, 2025
4ab0ac2
chore(control): make components standalone
MrYuion Sep 20, 2025
396c92c
chore(mocks): make mock initialisation explicit
MrYuion Sep 20, 2025
f4e2c62
chore: tweaks
MrYuion Sep 20, 2025
fefceb3
chore(mocks): update mocks
MrYuion Sep 20, 2025
3b8dd84
chore: fixes
MrYuion Sep 20, 2025
c3a57df
chore: fix event mocks
MrYuion Sep 20, 2025
32daa5e
chore: update suneditor toolbar to match with old quill implementation
MrYuion Sep 21, 2025
0d5516e
chore: minor fixes
MrYuion Sep 21, 2025
aa086aa
Merge branch 'develop' into refactor/clean-libs
MrYuion Sep 23, 2025
9fa4100
chore: remove unneeded module imports
MrYuion Sep 23, 2025
0b33dca
chore: tweak module imports
MrYuion Sep 29, 2025
4b525a0
chore: fix import issues
MrYuion Sep 29, 2025
4f6fa8b
chore: fix more imports
MrYuion Sep 29, 2025
fa31725
chore: fix to 2nd previous commit
MrYuion Sep 29, 2025
9e2d430
ci: update PR workflow to handle refactor branches
MrYuion Oct 9, 2025
79d5495
Merge branch 'develop' into refactor/clean-libs
MrYuion Oct 9, 2025
c3139c6
chore: fix more issues in concierge and workplace
MrYuion Oct 9, 2025
8b65bac
chore: minor fixes
MrYuion Oct 9, 2025
38318cd
chore: various minor fixes
MrYuion Oct 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: 'PR Flow'

on:
push:
branches: [feat/*, fix/*, custom/*]
branches: [feat/*, fix/*, custom/*, refactor/*]
pull_request:
branches: [feat/*, fix/*, custom/*]
branches: [feat/*, fix/*, custom/*, refactor/*]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
Expand Down
39 changes: 39 additions & 0 deletions apps/assistant-panel/src/app/app.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { Component, inject, OnInit } from '@angular/core';
import { PlaceOS_Service } from '@placeos/common';

@Component({
selector: 'app-root',
template: `
<global-banner />
<div class="relative h-1/2 w-full flex-1">
<router-outlet></router-outlet>
</div>
@if (has_chat) {
<global-chat />
}
<global-loading />
<!-- <debug-console *ngIf="debug"></debug-console> -->
`,
styles: [
`
:host {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
}
`,
],
standalone: false,
})
export class AppComponent implements OnInit {
private _placeos = inject(PlaceOS_Service);

public get has_chat(): boolean {
return this._placeos.has_chat;
}

public ngOnInit(): void {
this._placeos.init();
}
}
35 changes: 8 additions & 27 deletions apps/assistant-panel/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,54 +7,35 @@ import {
NgModule,
provideZonelessChangeDetection,
} from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { Router, RouterModule } from '@angular/router';
import { ServiceWorkerModule } from '@angular/service-worker';

import { MatRippleModule } from '@angular/material/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSnackBarModule } from '@angular/material/snack-bar';

import * as Sentry from '@sentry/angular';

import { AppComponent } from 'libs/components/src/lib/app.component';
import {
GlobalBannerComponent,
GlobalLoadingComponent,
} from '@placeos/components';
import { environment } from '../environments/environment';
import { routes } from './app.routes';

import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { GlobalBannerComponent } from 'libs/components/src/lib/global-banner.component';
import { GlobalLoadingComponent } from 'libs/components/src/lib/global-loading.component';
import { IconComponent } from 'libs/components/src/lib/icon.component';
import { TranslatePipe } from 'libs/components/src/lib/translate.pipe';

import { AppComponent } from './app.component';
import { BootstrapComponent } from './bootstrap.component';
import { PanelViewComponent } from './panel-view.component';

const MAT_MODULES: any[] = [
MatFormFieldModule,
MatInputModule,
MatSnackBarModule,
MatRippleModule,
MatAutocompleteModule,
];

@NgModule({
declarations: [AppComponent, BootstrapComponent, PanelViewComponent],
declarations: [AppComponent],
bootstrap: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
RouterModule.forRoot(routes, { useHash: true }),
FormsModule,
ReactiveFormsModule,
...MAT_MODULES,
GlobalLoadingComponent,
GlobalBannerComponent,
IconComponent,
TranslatePipe,
BootstrapComponent,
PanelViewComponent,
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production,
}),
Expand Down
21 changes: 17 additions & 4 deletions apps/assistant-panel/src/app/bootstrap.component.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import { CommonModule } from '@angular/common';
import { Component, OnInit, inject } from '@angular/core';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatRippleModule } from '@angular/material/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { ActivatedRoute, Router } from '@angular/router';
import { AsyncHandler } from '@placeos/common';
import { OrganisationService } from '@placeos/organisation';
import { AsyncHandler, OrganisationService, Space } from '@placeos/common';
import { TranslatePipe } from '@placeos/components';
import { querySystems } from '@placeos/ts-client';
import { Space } from 'libs/events/src/lib/space.class';
import { BehaviorSubject, combineLatest, of } from 'rxjs';
import { debounceTime, map, shareReplay, switchMap } from 'rxjs/operators';

Expand Down Expand Up @@ -116,7 +121,15 @@ const SYS_ID_KEY = 'PLACEOS.ASSISTANT.system';
</div>
`,
styles: [],
standalone: false,
imports: [
MatAutocompleteModule,
MatFormFieldModule,
MatInputModule,
MatProgressSpinnerModule,
MatRippleModule,
CommonModule,
TranslatePipe,
],
})
export class BootstrapComponent extends AsyncHandler implements OnInit {
private _org = inject(OrganisationService);
Expand Down
21 changes: 17 additions & 4 deletions apps/assistant-panel/src/app/panel-view.component.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
import { Component, ElementRef, inject, viewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { AsyncHandler, currentUser } from '@placeos/common';
import { ChatService } from 'libs/components/src/lib/chat/chat.service';
import {
ChatService,
DateFromPipe,
IconComponent,
SanitizePipe,
} from '@placeos/components';
import { first, map, tap } from 'rxjs/operators';

import { OrganisationService } from '@placeos/organisation';
import { CommonModule } from '@angular/common';
import { MatRippleModule } from '@angular/material/core';
import { OrganisationService } from '@placeos/common';
import * as tf from '@tensorflow/tfjs';

declare let loadVosklet: any;
Expand Down Expand Up @@ -219,7 +226,13 @@ declare let loadVosklet: any;
}
`,
],
standalone: false,
imports: [
MatRippleModule,
CommonModule,
IconComponent,
SanitizePipe,
DateFromPipe,
],
})
export class PanelViewComponent extends AsyncHandler {
private _route = inject(ActivatedRoute);
Expand Down Expand Up @@ -480,7 +493,7 @@ export class PanelViewComponent extends AsyncHandler {
this.interval('check_listening', () => this.startListening(), 500);
}

public _last_text: string = '';
public _last_text = '';

private _speakText(text: string) {
if (this._last_text === text) return;
Expand Down
2 changes: 1 addition & 1 deletion apps/assistant-panel/src/test-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ globalThis.ngJest = {
},
};
import { defineGlobalsInjections } from '@ngneat/spectator';
import { TranslatePipe } from '@placeos/components';
import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
import { TranslatePipe } from 'libs/components/src/lib/translate.pipe';
import { MockPipe } from 'ng-mocks';

setupZoneTestEnv();
Expand Down
41 changes: 41 additions & 0 deletions apps/booking-panel/src/app/app.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Component, inject, OnInit } from '@angular/core';
import { PlaceOS_Service, setMocks } from '@placeos/common';
import { mocksInit } from '@placeos/mocks';

@Component({
selector: 'app-root',
template: `
<global-banner />
<div class="relative h-1/2 w-full flex-1">
<router-outlet></router-outlet>
</div>
@if (has_chat) {
<global-chat />
}
<global-loading />
<!-- <debug-console *ngIf="debug"></debug-console> -->
`,
styles: [
`
:host {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
}
`,
],
standalone: false,
})
export class AppComponent implements OnInit {
private _placeos = inject(PlaceOS_Service);

public get has_chat(): boolean {
return this._placeos.has_chat;
}

public ngOnInit(): void {
setMocks(mocksInit);
this._placeos.init();
}
}
63 changes: 17 additions & 46 deletions apps/booking-panel/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,24 @@ import {
NgModule,
provideZonelessChangeDetection,
} from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { Router } from '@angular/router';
import { ServiceWorkerModule } from '@angular/service-worker';

import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSnackBarModule } from '@angular/material/snack-bar';

import { AppRoutingModule } from './app-routing.module';

import { AppComponent } from 'libs/components/src/lib/app.component';
import { environment } from '../environments/environment';
import { SharedOverlaysModule } from './overlays/overlays.module';

import { MatRippleModule } from '@angular/material/core';
import * as Sentry from '@sentry/angular';
import { BootstrapComponent } from './bootstrap.component';
import { AppCheckinModule } from './checkin/checkin.module';
import { EventPanelComponent } from './event-panel.component';
import { AppPanelViewModule } from './new-panel/panel-view.module';

import { LocaleService } from 'libs/common/src/lib/locale.service';
import { AuthenticatedImageDirective } from 'libs/components/src/lib/authenticated-image.directive';
import { GlobalBannerComponent } from 'libs/components/src/lib/global-banner.component';
import { GlobalLoadingComponent } from 'libs/components/src/lib/global-loading.component';
import { IconComponent } from 'libs/components/src/lib/icon.component';
import { SafePipe } from 'libs/components/src/lib/safe.pipe';
import { TranslatePipe } from 'libs/components/src/lib/translate.pipe';
import { LocaleService } from '@placeos/common';
import {
GlobalBannerComponent,
GlobalLoadingComponent,
} from '@placeos/components';

import { registerLocaleData } from '@angular/common';
import localeAr from '@angular/common/locales/ar';
Expand All @@ -43,41 +30,25 @@ import localeFr from '@angular/common/locales/fr';
import localeIt from '@angular/common/locales/it';
import localeJa from '@angular/common/locales/ja';
import localeZh from '@angular/common/locales/zh';
import { MatDialogModule } from '@angular/material/dialog';
import { SanitizePipe } from 'libs/components/src/lib/sanitise.pipe';

const MAT_MODULES: any[] = [
MatFormFieldModule,
MatInputModule,
MatAutocompleteModule,
MatSnackBarModule,
MatRippleModule,
MatDialogModule,
];

const STANDALONE_COMPONENTS = [
GlobalBannerComponent,
GlobalLoadingComponent,
IconComponent,
AuthenticatedImageDirective,
TranslatePipe,
SafePipe,
SanitizePipe,
];
import { AppComponent } from './app.component';
import { CheckinViewComponent } from './checkin/checkin-view.component';
import { PanelViewComponent } from './new-panel/panel-view.component';

@NgModule({
declarations: [AppComponent, BootstrapComponent, EventPanelComponent],
declarations: [AppComponent],
bootstrap: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
AppRoutingModule,
FormsModule,
SharedOverlaysModule,
AppPanelViewModule,
AppCheckinModule,
...MAT_MODULES,
...STANDALONE_COMPONENTS,
GlobalBannerComponent,
GlobalLoadingComponent,

BootstrapComponent,
EventPanelComponent,
CheckinViewComponent,
PanelViewComponent,

ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production,
}),
Expand Down
24 changes: 20 additions & 4 deletions apps/booking-panel/src/app/bootstrap.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@ import { querySystems } from '@placeos/ts-client';
import { BehaviorSubject, combineLatest, of } from 'rxjs';
import { debounceTime, map, shareReplay, switchMap, tap } from 'rxjs/operators';

import { AsyncHandler } from 'libs/common/src/lib/async-handler.class';
import { OrganisationService } from 'libs/organisation/src/lib/organisation.service';
import { AsyncHandler, OrganisationService } from '@placeos/common';

import { Space } from 'libs/events/src/lib/space.class';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatRippleModule } from '@angular/material/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { Space } from '@placeos/common';
import { TranslatePipe } from '@placeos/components';

@Component({
selector: '[app-bootstrap]',
Expand Down Expand Up @@ -121,7 +128,16 @@ import { Space } from 'libs/events/src/lib/space.class';
}
`,
],
standalone: false,
imports: [
CommonModule,
MatRippleModule,
TranslatePipe,
MatProgressSpinnerModule,
MatAutocompleteModule,
MatFormFieldModule,
MatInputModule,
FormsModule,
],
})
export class BootstrapComponent extends AsyncHandler implements OnInit {
private route = inject(ActivatedRoute);
Expand Down
Loading
Loading