Update Angular 18, ng-select, quill editor, ngx-currency, Umbau business-detail, edit-business, commercial-lsitings, remove ng-prime
This commit is contained in:
parent
9228cbebbe
commit
5fa2dd60fa
|
|
@ -21,12 +21,12 @@ export class SelectOptionsService {
|
||||||
];
|
];
|
||||||
public typesOfCommercialProperty: Array<KeyValueStyle> = [
|
public typesOfCommercialProperty: Array<KeyValueStyle> = [
|
||||||
{ name: 'Retail', value: '100', icon: 'fa-solid fa-money-bill-wave', textColorClass: 'text-pink-400' },
|
{ name: 'Retail', value: '100', icon: 'fa-solid fa-money-bill-wave', textColorClass: 'text-pink-400' },
|
||||||
{ name: 'Land', value: '101', icon: 'pi pi-building', textColorClass: 'text-blue-400' },
|
{ name: 'Land', value: '101', icon: 'fa-solid fa-building', textColorClass: 'text-blue-400' },
|
||||||
{ name: 'Industrial', value: '102', icon: 'fa-solid fa-industry', textColorClass: 'text-yellow-400' },
|
{ name: 'Industrial', value: '102', icon: 'fa-solid fa-industry', textColorClass: 'text-yellow-400' },
|
||||||
{ name: 'Office', value: '103', icon: 'fa-solid fa-umbrella', textColorClass: 'text-teal-400' },
|
{ name: 'Office', value: '103', icon: 'fa-solid fa-umbrella', textColorClass: 'text-teal-400' },
|
||||||
{ name: 'Mixed Use', value: '104', icon: 'fa-solid fa-rectangle-ad', textColorClass: 'text-orange-400' },
|
{ name: 'Mixed Use', value: '104', icon: 'fa-solid fa-rectangle-ad', textColorClass: 'text-orange-400' },
|
||||||
{ name: 'Multifamily', value: '105', icon: 'pi pi-star', textColorClass: 'text-purple-400' },
|
{ name: 'Multifamily', value: '105', icon: 'fa-solid fa-star', textColorClass: 'text-purple-400' },
|
||||||
{ name: 'Uncategorized', value: '106', icon: 'pi pi-question', textColorClass: 'text-cyan-400' },
|
{ name: 'Uncategorized', value: '106', icon: 'fa-solid fa-question', textColorClass: 'text-cyan-400' },
|
||||||
];
|
];
|
||||||
public prices: Array<KeyValue> = [
|
public prices: Array<KeyValue> = [
|
||||||
{ name: '$100K', value: '100000' },
|
{ name: '$100K', value: '100000' },
|
||||||
|
|
|
||||||
|
|
@ -13,53 +13,51 @@
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "^17.3.3",
|
"@angular/animations": "^18.0.6",
|
||||||
"@angular/cdk": "^17.3.2",
|
"@angular/cdk": "^18.0.6",
|
||||||
"@angular/common": "^17.3.3",
|
"@angular/common": "^18.0.6",
|
||||||
"@angular/compiler": "^17.3.3",
|
"@angular/compiler": "^18.0.6",
|
||||||
"@angular/core": "^17.3.3",
|
"@angular/core": "^18.0.6",
|
||||||
"@angular/forms": "^17.3.3",
|
"@angular/forms": "^18.0.6",
|
||||||
"@angular/platform-browser": "^17.3.3",
|
"@angular/platform-browser": "^18.0.6",
|
||||||
"@angular/platform-browser-dynamic": "^17.3.3",
|
"@angular/platform-browser-dynamic": "^18.0.6",
|
||||||
"@angular/platform-server": "^17.3.3",
|
"@angular/platform-server": "^18.0.6",
|
||||||
"@angular/router": "^17.3.3",
|
"@angular/router": "^18.0.6",
|
||||||
"@fortawesome/angular-fontawesome": "^0.14.1",
|
"@fortawesome/angular-fontawesome": "^0.15.0",
|
||||||
"@fortawesome/fontawesome-free": "^6.5.1",
|
"@fortawesome/fontawesome-free": "^6.5.2",
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
||||||
"@fortawesome/free-brands-svg-icons": "^6.5.1",
|
"@fortawesome/free-brands-svg-icons": "^6.5.2",
|
||||||
"@fortawesome/free-regular-svg-icons": "^6.5.1",
|
"@fortawesome/free-regular-svg-icons": "^6.5.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||||
"@ng-select/ng-select": "^12.0.7",
|
"@ng-select/ng-select": "^13.4.1",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^10.0.0",
|
||||||
"angular-cropperjs": "^14.0.1",
|
"angular-cropperjs": "^14.0.1",
|
||||||
"angular-mixed-cdk-drag-drop": "^2.2.3",
|
"angular-mixed-cdk-drag-drop": "^2.2.3",
|
||||||
"browser-bunyan": "^1.8.0",
|
"browser-bunyan": "^1.8.0",
|
||||||
"cropperjs": "^1.6.1",
|
"cropperjs": "^1.6.2",
|
||||||
"dayjs": "^1.11.11",
|
"dayjs": "^1.11.11",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"flowbite": "^2.4.1",
|
"flowbite": "^2.4.1",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"keycloak-angular": "^15.2.1",
|
"keycloak-angular": "^16.0.1",
|
||||||
"keycloak-js": "^24.0.4",
|
"keycloak-js": "^25.0.1",
|
||||||
"memoize-one": "^6.0.0",
|
"memoize-one": "^6.0.0",
|
||||||
"ngx-quill": "^25.3.2",
|
"ngx-currency": "^18.0.0",
|
||||||
|
"ngx-quill": "^26.0.5",
|
||||||
"on-change": "^5.0.1",
|
"on-change": "^5.0.1",
|
||||||
"primeflex": "^3.3.1",
|
|
||||||
"primeicons": "^6.0.1",
|
|
||||||
"primeng": "^17.16.1",
|
|
||||||
"rxjs": "~7.8.1",
|
"rxjs": "~7.8.1",
|
||||||
"tslib": "^2.3.0",
|
"tslib": "^2.6.3",
|
||||||
"urlcat": "^3.1.0",
|
"urlcat": "^3.1.0",
|
||||||
"uuid": "^9.0.1",
|
"uuid": "^10.0.0",
|
||||||
"zone.js": "~0.14.4"
|
"zone.js": "~0.14.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "^17.3.3",
|
"@angular-devkit/build-angular": "^18.0.7",
|
||||||
"@angular/cli": "^17.3.3",
|
"@angular/cli": "^18.0.7",
|
||||||
"@angular/compiler-cli": "^17.3.3",
|
"@angular/compiler-cli": "^18.0.6",
|
||||||
"@types/express": "^4.17.21",
|
"@types/express": "^4.17.21",
|
||||||
"@types/jasmine": "~5.1.4",
|
"@types/jasmine": "~5.1.4",
|
||||||
"@types/node": "^20.11.20",
|
"@types/node": "^20.14.9",
|
||||||
"autoprefixer": "^10.4.19",
|
"autoprefixer": "^10.4.19",
|
||||||
"http-server": "^14.1.1",
|
"http-server": "^14.1.1",
|
||||||
"jasmine-core": "~5.1.2",
|
"jasmine-core": "~5.1.2",
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
@if (loadingService.isLoading$ | async) {
|
@if (loadingService.isLoading$ | async) {
|
||||||
<div class="spinner-overlay">
|
<div class="spinner-overlay">
|
||||||
<div class="spinner-container">
|
<div class="spinner-container">
|
||||||
<p-progressSpinner></p-progressSpinner>
|
<!-- <p-progressSpinner></p-progressSpinner> -->
|
||||||
<div class="spinner-text" *ngIf="loadingService.loadingText$ | async as loadingText">{{ loadingText }}</div>
|
<div class="spinner-text" *ngIf="loadingService.loadingText$ | async as loadingText">{{ loadingText }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,7 @@ import { ActivatedRoute, NavigationEnd, Router, RouterOutlet } from '@angular/ro
|
||||||
import { initFlowbite } from 'flowbite';
|
import { initFlowbite } from 'flowbite';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { ConfirmationService } from 'primeng/api';
|
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
||||||
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
||||||
import { filter } from 'rxjs/operators';
|
import { filter } from 'rxjs/operators';
|
||||||
import { ListingCriteria } from '../../../bizmatch-server/src/models/main.model';
|
import { ListingCriteria } from '../../../bizmatch-server/src/models/main.model';
|
||||||
import build from '../build';
|
import build from '../build';
|
||||||
|
|
@ -18,8 +16,8 @@ import { createDefaultListingCriteria } from './utils/utils';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, RouterOutlet, HeaderComponent, ProgressSpinnerModule, FooterComponent, ConfirmDialogModule],
|
imports: [CommonModule, RouterOutlet, HeaderComponent, FooterComponent],
|
||||||
providers: [ConfirmationService],
|
providers: [],
|
||||||
templateUrl: './app.component.html',
|
templateUrl: './app.component.html',
|
||||||
styleUrl: './app.component.scss',
|
styleUrl: './app.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -30,14 +28,7 @@ export class AppComponent {
|
||||||
listingCriteria: ListingCriteria = onChange(createDefaultListingCriteria(), (path, value, previousValue, applyData) => {
|
listingCriteria: ListingCriteria = onChange(createDefaultListingCriteria(), (path, value, previousValue, applyData) => {
|
||||||
sessionStorage.setItem('criteria', JSON.stringify(value));
|
sessionStorage.setItem('criteria', JSON.stringify(value));
|
||||||
});
|
});
|
||||||
public constructor(
|
public constructor(public loadingService: LoadingService, private router: Router, private activatedRoute: ActivatedRoute, private keycloakService: KeycloakService, private userService: UserService) {
|
||||||
public loadingService: LoadingService,
|
|
||||||
private router: Router,
|
|
||||||
private activatedRoute: ActivatedRoute,
|
|
||||||
private keycloakService: KeycloakService,
|
|
||||||
private userService: UserService,
|
|
||||||
private confirmationService: ConfirmationService,
|
|
||||||
) {
|
|
||||||
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
|
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
|
||||||
let currentRoute = this.activatedRoute.root;
|
let currentRoute = this.activatedRoute.root;
|
||||||
while (currentRoute.children[0] !== undefined) {
|
while (currentRoute.children[0] !== undefined) {
|
||||||
|
|
@ -57,13 +48,13 @@ export class AppComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
showVersionDialog() {
|
showVersionDialog() {
|
||||||
this.confirmationService.confirm({
|
// this.confirmationService.confirm({
|
||||||
target: event.target as EventTarget,
|
// target: event.target as EventTarget,
|
||||||
message: `App Version: ${this.build.timestamp}`,
|
// message: `App Version: ${this.build.timestamp}`,
|
||||||
header: 'Version Info',
|
// header: 'Version Info',
|
||||||
icon: 'pi pi-info-circle',
|
// icon: 'pi pi-info-circle',
|
||||||
accept: () => {},
|
// accept: () => {},
|
||||||
reject: () => {},
|
// reject: () => {},
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,13 @@ export const appConfig: ApplicationConfig = {
|
||||||
provideQuillConfig({
|
provideQuillConfig({
|
||||||
modules: {
|
modules: {
|
||||||
syntax: true,
|
syntax: true,
|
||||||
toolbar: [['bold', 'italic', 'underline', 'strike'], [{ list: 'ordered' }, { list: 'bullet' }], [{ header: [1, 2, 3, 4, 5, 6, false] }], [{ color: [] }, { background: [] }], ['clean']],
|
toolbar: [
|
||||||
|
['bold', 'italic', 'underline'], // Einige Standardoptionen
|
||||||
|
[{ header: [1, 2, 3, false] }], // Benutzerdefinierte Header
|
||||||
|
[{ list: 'ordered' }, { list: 'bullet' }],
|
||||||
|
[{ color: [] }], // Dropdown mit Standardfarben
|
||||||
|
['clean'], // Entfernt Formatierungen
|
||||||
|
],
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||||
import { initFlowbite } from 'flowbite';
|
import { initFlowbite } from 'flowbite';
|
||||||
import { SidebarModule } from 'primeng/sidebar';
|
|
||||||
import { SharedModule } from '../../shared/shared/shared.module';
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-footer',
|
selector: 'app-footer',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, SidebarModule],
|
imports: [CommonModule, FormsModule, RouterModule, FontAwesomeModule],
|
||||||
templateUrl: './footer.component.html',
|
templateUrl: './footer.component.html',
|
||||||
styleUrl: './footer.component.scss',
|
styleUrl: './footer.component.scss',
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -87,18 +87,30 @@
|
||||||
class="flex flex-col font-medium p-4 md:p-0 mt-4 border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700"
|
class="flex flex-col font-medium p-4 md:p-0 mt-4 border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700"
|
||||||
>
|
>
|
||||||
<li>
|
<li>
|
||||||
<a class="block py-2 px-3 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500" aria-current="page">Businesses</a>
|
<a
|
||||||
|
routerLinkActive="active-link"
|
||||||
|
routerLink="/businessListings"
|
||||||
|
[ngClass]="{ 'bg-blue-700 text-white md:text-blue-700 md:bg-transparent md:dark:text-blue-500': isActive('/businessListings') }"
|
||||||
|
class="block py-2 px-3 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
||||||
|
aria-current="page"
|
||||||
|
>Businesses</a
|
||||||
|
>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
routerLinkActive="active-link"
|
||||||
|
routerLink="/commercialPropertyListings"
|
||||||
|
[ngClass]="{ 'bg-blue-700 text-white md:text-blue-700 md:bg-transparent md:dark:text-blue-500': isActive('/commercialPropertyListings') }"
|
||||||
|
class="block py-2 px-3 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
||||||
>Properties</a
|
>Properties</a
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
href="#"
|
routerLinkActive="active-link"
|
||||||
class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
routerLink="/brokerListings"
|
||||||
|
[ngClass]="{ 'bg-blue-700 text-white md:text-blue-700 md:bg-transparent md:dark:text-blue-500': isActive('/brokerListings') }"
|
||||||
|
class="block py-2 px-3 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
||||||
>Professionals</a
|
>Professionals</a
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,9 @@
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router, RouterModule } from '@angular/router';
|
||||||
import { faUserGear } from '@fortawesome/free-solid-svg-icons';
|
import { faUserGear } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { initFlowbite } from 'flowbite';
|
import { initFlowbite } from 'flowbite';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { MenuItem } from 'primeng/api';
|
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { MenubarModule } from 'primeng/menubar';
|
|
||||||
import { OverlayPanelModule } from 'primeng/overlaypanel';
|
|
||||||
import { TabMenuModule } from 'primeng/tabmenu';
|
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { KeycloakUser } from '../../../../../bizmatch-server/src/models/main.model';
|
import { KeycloakUser } from '../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../environments/environment';
|
import { environment } from '../../../environments/environment';
|
||||||
|
|
@ -16,7 +11,7 @@ import { map2User } from '../../utils/utils';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'header',
|
selector: 'header',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, MenubarModule, ButtonModule, OverlayPanelModule, TabMenuModule],
|
imports: [CommonModule, RouterModule],
|
||||||
templateUrl: './header.component.html',
|
templateUrl: './header.component.html',
|
||||||
styleUrl: './header.component.scss',
|
styleUrl: './header.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -24,9 +19,6 @@ export class HeaderComponent {
|
||||||
public buildVersion = environment.buildVersion;
|
public buildVersion = environment.buildVersion;
|
||||||
user$: Observable<KeycloakUser>;
|
user$: Observable<KeycloakUser>;
|
||||||
user: KeycloakUser;
|
user: KeycloakUser;
|
||||||
public tabItems: MenuItem[];
|
|
||||||
public loginItems: MenuItem[];
|
|
||||||
public menuItems: MenuItem[];
|
|
||||||
activeItem;
|
activeItem;
|
||||||
faUserGear = faUserGear;
|
faUserGear = faUserGear;
|
||||||
constructor(public keycloakService: KeycloakService, private router: Router) {}
|
constructor(public keycloakService: KeycloakService, private router: Router) {}
|
||||||
|
|
@ -52,4 +44,7 @@ export class HeaderComponent {
|
||||||
register() {
|
register() {
|
||||||
this.keycloakService.register({ redirectUri: `${window.location.origin}/account` });
|
this.keycloakService.register({ redirectUri: `${window.location.origin}/account` });
|
||||||
}
|
}
|
||||||
|
isActive(route: string): boolean {
|
||||||
|
return this.router.url === route;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
<div class="flex justify-content-between mt-3">
|
<div class="flex justify-content-between mt-3">
|
||||||
@if(ratioVariable){
|
@if(ratioVariable){
|
||||||
<div>
|
<div>
|
||||||
<p-selectButton [options]="stateOptions" [ngModel]="value" (ngModelChange)="changeAspectRation($event)" optionLabel="label" optionValue="value" class="small"></p-selectButton>
|
<!-- <p-selectButton [options]="stateOptions" [ngModel]="value" (ngModelChange)="changeAspectRation($event)" optionLabel="label" optionValue="value" class="small"></p-selectButton> -->
|
||||||
</div>
|
</div>
|
||||||
} @else {
|
} @else {
|
||||||
<div></div>
|
<div></div>
|
||||||
}
|
}
|
||||||
<div class="flex justify-content-between">
|
<div class="flex justify-content-between">
|
||||||
<p-button icon="pi" (click)="cancelUpload()" label="Cancel" [outlined]="true" size="small" class="mr-2"></p-button>
|
<!-- <p-button icon="pi" (click)="cancelUpload()" label="Cancel" [outlined]="true" size="small" class="mr-2"></p-button>
|
||||||
<p-button icon="pi pi-check" (click)="sendImage()" label="Finish" pAutoFocus [autofocus]="true" size="small"></p-button>
|
<p-button icon="pi pi-check" (click)="sendImage()" label="Finish" pAutoFocus [autofocus]="true" size="small"></p-button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
import { Component, ViewChild } from '@angular/core';
|
import { Component, ViewChild } from '@angular/core';
|
||||||
import { AngularCropperjsModule, CropperComponent } from 'angular-cropperjs';
|
import { AngularCropperjsModule, CropperComponent } from 'angular-cropperjs';
|
||||||
import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
||||||
import { FileUpload, FileUploadModule } from 'primeng/fileupload';
|
|
||||||
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
||||||
import { KeyValueRatio } from '../../../../../bizmatch-server/src/models/main.model';
|
import { KeyValueRatio } from '../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { ImageService } from '../../services/image.service';
|
import { ImageService } from '../../services/image.service';
|
||||||
import { LoadingService } from '../../services/loading.service';
|
import { LoadingService } from '../../services/loading.service';
|
||||||
|
|
@ -15,36 +12,35 @@ export const stateOptions: KeyValueRatio[] = [
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-image-cropper',
|
selector: 'app-image-cropper',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, FileUploadModule, AngularCropperjsModule, SelectButtonModule],
|
imports: [SharedModule, AngularCropperjsModule],
|
||||||
templateUrl: './image-cropper.component.html',
|
templateUrl: './image-cropper.component.html',
|
||||||
styleUrl: './image-cropper.component.scss',
|
styleUrl: './image-cropper.component.scss',
|
||||||
})
|
})
|
||||||
export class ImageCropperComponent {
|
export class ImageCropperComponent {
|
||||||
@ViewChild(CropperComponent) public angularCropper: CropperComponent;
|
@ViewChild(CropperComponent) public angularCropper: CropperComponent;
|
||||||
imageUrl: string; //wird im Template verwendet
|
imageUrl: string; //wird im Template verwendet
|
||||||
fileUpload: FileUpload;
|
|
||||||
value: number = stateOptions[0].value;
|
value: number = stateOptions[0].value;
|
||||||
cropperConfig = { aspectRatio: this.value };
|
cropperConfig = { aspectRatio: this.value };
|
||||||
ratioVariable: boolean;
|
ratioVariable: boolean;
|
||||||
stateOptions = stateOptions;
|
stateOptions = stateOptions;
|
||||||
constructor(private loadingService: LoadingService, private imageUploadService: ImageService, public config: DynamicDialogConfig, public ref: DynamicDialogRef) {}
|
constructor(private loadingService: LoadingService, private imageUploadService: ImageService) {}
|
||||||
ngOnInit(): void {
|
// ngOnInit(): void {
|
||||||
if (this.config.data) {
|
// if (this.config.data) {
|
||||||
this.imageUrl = this.config.data.imageUrl;
|
// this.imageUrl = this.config.data.imageUrl;
|
||||||
this.fileUpload = this.config.data.fileUpload;
|
// this.fileUpload = this.config.data.fileUpload;
|
||||||
this.cropperConfig = this.config.data.config ? this.config.data.config : this.cropperConfig;
|
// this.cropperConfig = this.config.data.config ? this.config.data.config : this.cropperConfig;
|
||||||
this.ratioVariable = this.config.data.ratioVariable;
|
// this.ratioVariable = this.config.data.ratioVariable;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
sendImage() {
|
// sendImage() {
|
||||||
this.fileUpload.clear();
|
// this.fileUpload.clear();
|
||||||
this.ref.close(this.angularCropper.cropper);
|
// this.ref.close(this.angularCropper.cropper);
|
||||||
}
|
// }
|
||||||
|
|
||||||
cancelUpload() {
|
// cancelUpload() {
|
||||||
this.fileUpload.clear();
|
// this.fileUpload.clear();
|
||||||
this.ref.close();
|
// this.ref.close();
|
||||||
}
|
// }
|
||||||
changeAspectRation(ratio: number) {
|
changeAspectRation(ratio: number) {
|
||||||
this.cropperConfig = { aspectRatio: ratio };
|
this.cropperConfig = { aspectRatio: ratio };
|
||||||
this.angularCropper.cropper.setAspectRatio(ratio);
|
this.angularCropper.cropper.setAspectRatio(ratio);
|
||||||
|
|
|
||||||
|
|
@ -1,115 +0,0 @@
|
||||||
// @layer primeng {
|
|
||||||
app-inputnumber,
|
|
||||||
.p-inputnumber {
|
|
||||||
display: inline-flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-button {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
flex: 0 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label,
|
|
||||||
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-inputnumber-input {
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-inputnumber-button-group {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up {
|
|
||||||
order: 3;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-horizontal .p-inputnumber-input {
|
|
||||||
order: 2;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down {
|
|
||||||
order: 1;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-vertical {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up {
|
|
||||||
order: 1;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-vertical .p-inputnumber-input {
|
|
||||||
order: 2;
|
|
||||||
border-radius: 0;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down {
|
|
||||||
order: 3;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-input {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-fluid app-inputnumber,
|
|
||||||
.p-fluid .p-inputnumber {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-fluid .p-inputnumber .p-inputnumber-input {
|
|
||||||
width: 1%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-clear-icon {
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
margin-top: -0.5rem;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-inputnumber-clearable {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -3,9 +3,6 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
||||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { MessageService } from 'primeng/api';
|
|
||||||
import { GalleriaModule } from 'primeng/galleria';
|
|
||||||
import { InputMaskModule } from 'primeng/inputmask';
|
|
||||||
import { lastValueFrom } from 'rxjs';
|
import { lastValueFrom } from 'rxjs';
|
||||||
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { KeycloakUser, ListingCriteria, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { KeycloakUser, ListingCriteria, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
|
|
@ -20,8 +17,8 @@ import { getCriteriaStateObject, getSessionStorageHandler, map2User } from '../.
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-details-business-listing',
|
selector: 'app-details-business-listing',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, GalleriaModule, InputMaskModule],
|
imports: [SharedModule],
|
||||||
providers: [MessageService],
|
providers: [],
|
||||||
templateUrl: './details-business-listing.component.html',
|
templateUrl: './details-business-listing.component.html',
|
||||||
styleUrl: './details-business-listing.component.scss',
|
styleUrl: './details-business-listing.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -63,7 +60,6 @@ export class DetailsBusinessListingComponent {
|
||||||
private userService: UserService,
|
private userService: UserService,
|
||||||
public selectOptions: SelectOptionsService,
|
public selectOptions: SelectOptionsService,
|
||||||
private mailService: MailService,
|
private mailService: MailService,
|
||||||
private messageService: MessageService,
|
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
public historyService: HistoryService,
|
public historyService: HistoryService,
|
||||||
public keycloakService: KeycloakService,
|
public keycloakService: KeycloakService,
|
||||||
|
|
@ -97,7 +93,7 @@ export class DetailsBusinessListingComponent {
|
||||||
this.mailinfo.userId = this.listing.userId;
|
this.mailinfo.userId = this.listing.userId;
|
||||||
this.mailinfo.listing = this.listing;
|
this.mailinfo.listing = this.listing;
|
||||||
await this.mailService.mail(this.mailinfo);
|
await this.mailService.mail(this.mailinfo);
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your message has been sent to the creator of the listing', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your message has been sent to the creator of the listing', life: 3000 });
|
||||||
}
|
}
|
||||||
get listingDetails() {
|
get listingDetails() {
|
||||||
let typeOfRealEstate = '';
|
let typeOfRealEstate = '';
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,12 @@
|
||||||
<div class="surface-ground h-full">
|
<!-- <div class="surface-ground h-full">
|
||||||
<div class="px-6 py-5">
|
<div class="px-6 py-5">
|
||||||
<div class="surface-card p-4 shadow-2 border-round">
|
<div class="surface-card p-4 shadow-2 border-round">
|
||||||
<div class="flex justify-content-between align-items-center align-content-center mb-2">
|
<div class="flex justify-content-between align-items-center align-content-center mb-2">
|
||||||
<div class="font-medium text-3xl text-900 mb-3">{{ listing?.title }}</div>
|
<div class="font-medium text-3xl text-900 mb-3">{{ listing?.title }}</div>
|
||||||
<!-- <button pButton pRipple type="button" label="Go back to listings" icon="pi pi-user-plus" class="mr-3 p-button-rounded"></button> -->
|
|
||||||
@if(historyService.canGoBack){
|
@if(historyService.canGoBack){
|
||||||
<p-button icon="pi pi-times" [rounded]="true" severity="danger" (click)="historyService.goBack()"></p-button>
|
<p-button icon="pi pi-times" [rounded]="true" severity="danger" (click)="historyService.goBack()"></p-button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="text-500 mb-5">Egestas sed tempus urna et pharetra pharetra massa massa ultricies.</div> -->
|
|
||||||
@if(listing){
|
@if(listing){
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="col-12 md:col-6">
|
<div class="col-12 md:col-6">
|
||||||
|
|
@ -69,7 +67,6 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="field mb-4 col-12 md:col-6">
|
<div class="field mb-4 col-12 md:col-6">
|
||||||
<label for="phoneNumber" class="font-medium text-900">Phone Number</label>
|
<label for="phoneNumber" class="font-medium text-900">Phone Number</label>
|
||||||
<!-- <input id="phoneNumber" type="text" pInputText [(ngModel)]="mailinfo.sender.phoneNumber" /> -->
|
|
||||||
<p-inputMask mask="(999) 999-9999" placeholder="(123) 456-7890" [(ngModel)]="mailinfo.sender.phoneNumber"></p-inputMask>
|
<p-inputMask mask="(999) 999-9999" placeholder="(123) 456-7890" [(ngModel)]="mailinfo.sender.phoneNumber"></p-inputMask>
|
||||||
</div>
|
</div>
|
||||||
<div class="field mb-4 col-12 md:col-6">
|
<div class="field mb-4 col-12 md:col-6">
|
||||||
|
|
@ -98,4 +95,4 @@
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,6 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { MessageService } from 'primeng/api';
|
|
||||||
import { GalleriaModule } from 'primeng/galleria';
|
|
||||||
import { InputMaskModule } from 'primeng/inputmask';
|
|
||||||
import { lastValueFrom } from 'rxjs';
|
import { lastValueFrom } from 'rxjs';
|
||||||
import { CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ErrorResponse, KeycloakUser, ListingCriteria, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ErrorResponse, KeycloakUser, ListingCriteria, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
|
|
@ -22,8 +19,8 @@ import { getCriteriaStateObject, getSessionStorageHandler, map2User } from '../.
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-details-commercial-property-listing',
|
selector: 'app-details-commercial-property-listing',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, GalleriaModule, InputMaskModule],
|
imports: [SharedModule],
|
||||||
providers: [MessageService],
|
providers: [],
|
||||||
templateUrl: './details-commercial-property-listing.component.html',
|
templateUrl: './details-commercial-property-listing.component.html',
|
||||||
styleUrl: './details-commercial-property-listing.component.scss',
|
styleUrl: './details-commercial-property-listing.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -64,7 +61,6 @@ export class DetailsCommercialPropertyListingComponent {
|
||||||
private userService: UserService,
|
private userService: UserService,
|
||||||
public selectOptions: SelectOptionsService,
|
public selectOptions: SelectOptionsService,
|
||||||
private mailService: MailService,
|
private mailService: MailService,
|
||||||
private messageService: MessageService,
|
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
public historyService: HistoryService,
|
public historyService: HistoryService,
|
||||||
public keycloakService: KeycloakService,
|
public keycloakService: KeycloakService,
|
||||||
|
|
@ -98,7 +94,7 @@ export class DetailsCommercialPropertyListingComponent {
|
||||||
this.errorResponse = result as ErrorResponse;
|
this.errorResponse = result as ErrorResponse;
|
||||||
} else {
|
} else {
|
||||||
this.errorResponse = null;
|
this.errorResponse = null;
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your message has been sent to the creator of the listing', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your message has been sent to the creator of the listing', life: 3000 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
containsError(fieldname: string) {
|
containsError(fieldname: string) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="surface-ground h-full">
|
<!-- <div class="surface-ground h-full">
|
||||||
<div class="px-6 py-5">
|
<div class="px-6 py-5">
|
||||||
@if (user){
|
@if (user){
|
||||||
<div class="surface-card p-4 shadow-2 border-round">
|
<div class="surface-card p-4 shadow-2 border-round">
|
||||||
|
|
@ -22,20 +22,12 @@
|
||||||
<span class="font-medium text-500">For Sale</span>
|
<span class="font-medium text-500">For Sale</span>
|
||||||
<div class="text-700 mt-2">{{ businessListings?.length + commercialPropListings?.length }}</div>
|
<div class="text-700 mt-2">{{ businessListings?.length + commercialPropListings?.length }}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="mr-5 mt-3">
|
|
||||||
<span class="font-medium text-500">Sold</span>
|
|
||||||
<div class="text-700 mt-2">8</div>
|
|
||||||
</div> -->
|
|
||||||
<div class="flex align-items-center mt-3">
|
<div class="flex align-items-center mt-3">
|
||||||
<!-- <span class="font-medium text-500">Logo</span> -->
|
|
||||||
<div>
|
<div>
|
||||||
@if(user.hasCompanyLogo){
|
@if(user.hasCompanyLogo){
|
||||||
<img src="{{ env.imageBaseUrl }}/pictures/logo/{{ emailToDirName(user.email) }}.avif?_ts={{ ts }}" class="mr-5 lg:mb-0" style="max-height: 60px; max-width: 100px" />
|
<img src="{{ env.imageBaseUrl }}/pictures/logo/{{ emailToDirName(user.email) }}.avif?_ts={{ ts }}" class="mr-5 lg:mb-0" style="max-height: 60px; max-width: 100px" />
|
||||||
}
|
}
|
||||||
<!-- <img *ngIf="!user.hasCompanyLogo" src="assets/images/placeholder.png"
|
|
||||||
class="mr-5 lg:mb-0" style="height:60px;max-width:100px" /> -->
|
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="text-700 mt-2">130</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -77,9 +69,6 @@
|
||||||
@for (area of user.areasServed; track area) {
|
@for (area of user.areasServed; track area) {
|
||||||
<p-tag styleClass="mr-2" value="{{ area.county }}-{{ area.state }}" [rounded]="true"></p-tag>
|
<p-tag styleClass="mr-2" value="{{ area.county }}-{{ area.state }}" [rounded]="true"></p-tag>
|
||||||
}
|
}
|
||||||
<!-- <p-tag styleClass="mr-2" severity="success" value="Javascript" [rounded]="true"></p-tag>
|
|
||||||
<p-tag styleClass="mr-2" severity="danger" value="Python" [rounded]="true"></p-tag>
|
|
||||||
<p-tag severity="warning" value="SQL" [rounded]="true"></p-tag> -->
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex align-items-center py-3 px-2 flex-wrap">
|
<li class="flex align-items-center py-3 px-2 flex-wrap">
|
||||||
|
|
@ -144,4 +133,4 @@
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ import { Component } from '@angular/core';
|
||||||
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { MessageService } from 'primeng/api';
|
|
||||||
import { GalleriaModule } from 'primeng/galleria';
|
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { KeycloakUser, ListingCriteria, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { KeycloakUser, ListingCriteria, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
|
|
@ -19,8 +17,7 @@ import { formatPhoneNumber, map2User } from '../../../utils/utils';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-details-user',
|
selector: 'app-details-user',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, GalleriaModule],
|
imports: [SharedModule],
|
||||||
providers: [MessageService],
|
|
||||||
templateUrl: './details-user.component.html',
|
templateUrl: './details-user.component.html',
|
||||||
styleUrl: './details-user.component.scss',
|
styleUrl: './details-user.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -44,7 +41,7 @@ export class DetailsUserComponent {
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private userService: UserService,
|
private userService: UserService,
|
||||||
private listingsService: ListingsService,
|
private listingsService: ListingsService,
|
||||||
private messageService: MessageService,
|
|
||||||
public selectOptions: SelectOptionsService,
|
public selectOptions: SelectOptionsService,
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,6 @@ import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
||||||
import { initFlowbite } from 'flowbite';
|
import { initFlowbite } from 'flowbite';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { KeycloakUser, ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model';
|
import { KeycloakUser, ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { ListingsService } from '../../services/listings.service';
|
import { ListingsService } from '../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../services/select-options.service';
|
import { SelectOptionsService } from '../../services/select-options.service';
|
||||||
|
|
@ -17,7 +12,7 @@ import { getCriteriaStateObject, getSessionStorageHandler, map2User, resetCriter
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-home',
|
selector: 'app-home',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, StyleClassModule, ButtonModule, CheckboxModule, InputTextModule, DropdownModule, FormsModule, RouterModule],
|
imports: [CommonModule, FormsModule, RouterModule],
|
||||||
templateUrl: './home.component.html',
|
templateUrl: './home.component.html',
|
||||||
styleUrl: './home.component.scss',
|
styleUrl: './home.component.scss',
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="sky-line" class="hidden-lg-down"></div>
|
<!-- <div id="sky-line" class="hidden-lg-down"></div>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="grid p-4 align-items-center">
|
<div class="grid p-4 align-items-center">
|
||||||
|
|
@ -60,4 +60,4 @@
|
||||||
<p-paginator (onPageChange)="onPageChange($event)" [first]="first" [rows]="rows" [totalRecords]="totalRecords" [rowsPerPageOptions]="[12, 24, 48]"></p-paginator>
|
<p-paginator (onPageChange)="onPageChange($event)" [first]="first" [rows]="rows" [totalRecords]="totalRecords" [rowsPerPageOptions]="[12, 24, 48]"></p-paginator>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,6 @@ import { ChangeDetectorRef, Component } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { InputGroupModule } from 'primeng/inputgroup';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { PaginatorModule } from 'primeng/paginator';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
||||||
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ListingCriteria, ListingType, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ListingCriteria, ListingType, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
|
|
@ -23,21 +15,7 @@ import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-broker-listings',
|
selector: 'app-broker-listings',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [CommonModule, FormsModule, RouterModule, NgOptimizedImage],
|
||||||
CommonModule,
|
|
||||||
StyleClassModule,
|
|
||||||
ButtonModule,
|
|
||||||
CheckboxModule,
|
|
||||||
InputTextModule,
|
|
||||||
DropdownModule,
|
|
||||||
FormsModule,
|
|
||||||
StyleClassModule,
|
|
||||||
ToggleButtonModule,
|
|
||||||
RouterModule,
|
|
||||||
PaginatorModule,
|
|
||||||
InputGroupModule,
|
|
||||||
NgOptimizedImage,
|
|
||||||
],
|
|
||||||
templateUrl: './broker-listings.component.html',
|
templateUrl: './broker-listings.component.html',
|
||||||
styleUrls: ['./broker-listings.component.scss', '../../pages.scss'],
|
styleUrls: ['./broker-listings.component.scss', '../../pages.scss'],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,6 @@ import { ChangeDetectorRef, Component } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { InputGroupModule } from 'primeng/inputgroup';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { PaginatorModule } from 'primeng/paginator';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
||||||
import { TooltipModule } from 'primeng/tooltip';
|
|
||||||
import { BusinessListing } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ListingCriteria, ListingType, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ListingCriteria, ListingType, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
|
|
@ -23,21 +14,7 @@ import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-business-listings',
|
selector: 'app-business-listings',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [CommonModule, FormsModule, RouterModule],
|
||||||
CommonModule,
|
|
||||||
StyleClassModule,
|
|
||||||
ButtonModule,
|
|
||||||
CheckboxModule,
|
|
||||||
InputTextModule,
|
|
||||||
DropdownModule,
|
|
||||||
FormsModule,
|
|
||||||
StyleClassModule,
|
|
||||||
ToggleButtonModule,
|
|
||||||
RouterModule,
|
|
||||||
PaginatorModule,
|
|
||||||
InputGroupModule,
|
|
||||||
TooltipModule,
|
|
||||||
],
|
|
||||||
templateUrl: './business-listings.component.html',
|
templateUrl: './business-listings.component.html',
|
||||||
styleUrls: ['./business-listings.component.scss', '../../pages.scss'],
|
styleUrls: ['./business-listings.component.scss', '../../pages.scss'],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,4 @@
|
||||||
<div id="sky-line" class="hidden-lg-down"></div>
|
<!--
|
||||||
<div class="search">
|
|
||||||
<div class="wrapper">
|
|
||||||
<div class="grid p-4 align-items-center">
|
|
||||||
<div class="col-2">
|
|
||||||
<p-dropdown [filter]="true" filterBy="name" [options]="states" [(ngModel)]="criteria.state" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Location" [style]="{ width: '100%' }">
|
|
||||||
<ng-template let-state pTemplate="item">
|
|
||||||
<div class="flex align-items-center gap-2">
|
|
||||||
<div>{{ state.name }} ({{ state.count }})</div>
|
|
||||||
</div>
|
|
||||||
</ng-template>
|
|
||||||
</p-dropdown>
|
|
||||||
</div>
|
|
||||||
<div class="col-2">
|
|
||||||
<p-dropdown
|
|
||||||
[filter]="true"
|
|
||||||
filterBy="name"
|
|
||||||
[options]="selectOptions.typesOfCommercialProperty"
|
|
||||||
[(ngModel)]="criteria.type"
|
|
||||||
optionLabel="name"
|
|
||||||
optionValue="value"
|
|
||||||
[showClear]="true"
|
|
||||||
placeholder="Categorie of Property"
|
|
||||||
[style]="{ width: '100%' }"
|
|
||||||
></p-dropdown>
|
|
||||||
</div>
|
|
||||||
<div class="col-2">
|
|
||||||
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.minPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Min Price" [style]="{ width: '100%' }"></p-dropdown>
|
|
||||||
</div>
|
|
||||||
<div class="col-2">
|
|
||||||
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.maxPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Max Price" [style]="{ width: '100%' }"></p-dropdown>
|
|
||||||
</div>
|
|
||||||
<div class="col-2">
|
|
||||||
<p-inputGroup>
|
|
||||||
<input id="name" type="text" pInputText [(ngModel)]="criteria.title" placeholder="Title" />
|
|
||||||
<button type="button" pButton icon="pi pi-times" class="p-button-secondary" (click)="reset()"></button>
|
|
||||||
</p-inputGroup>
|
|
||||||
</div>
|
|
||||||
<div class="col-1 col-offset-1">
|
|
||||||
<p-button label="Refine" (click)="refine()"></p-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="surface-200 h-full">
|
<div class="surface-200 h-full">
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
|
|
@ -66,7 +23,6 @@
|
||||||
<div class="flex flex-column w-full gap-3">
|
<div class="flex flex-column w-full gap-3">
|
||||||
<div class="flex w-full justify-content-between align-items-center flex-wrap gap-3">
|
<div class="flex w-full justify-content-between align-items-center flex-wrap gap-3">
|
||||||
<p class="font-semibold text-lg mt-0 mb-0">{{ listing.title }}</p>
|
<p class="font-semibold text-lg mt-0 mb-0">{{ listing.title }}</p>
|
||||||
<!-- <p-rating [ngModel]="val1" readonly="true" stars="5" [cancel]="false" ngClass="flex-shrink-0"></p-rating> -->
|
|
||||||
</div>
|
</div>
|
||||||
<p class="font-normal text-lg text-600 mt-0 mb-0">{{ listing.city }}</p>
|
<p class="font-normal text-lg text-600 mt-0 mb-0">{{ listing.city }}</p>
|
||||||
<div class="flex flex-wrap justify-content-between xl:h-2rem mt-auto">
|
<div class="flex flex-wrap justify-content-between xl:h-2rem mt-auto">
|
||||||
|
|
@ -94,12 +50,31 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="mb-2 surface-200 flex align-items-center justify-content-center paginator-bar">
|
</div> -->
|
||||||
<!-- @if(listings && listings.length>12){ -->
|
<div class="container mx-auto px-4 py-8">
|
||||||
<div class="mx-1 text-color">Total number of Listings: {{ totalRecords }}</div>
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
<p-paginator (onPageChange)="onPageChange($event)" [first]="first" [rows]="rows" [totalRecords]="totalRecords" [rowsPerPageOptions]="[12, 24, 48]"></p-paginator>
|
<!-- Property Card 1 -->
|
||||||
<!-- } -->
|
@for (listing of listings; track listing.id) {
|
||||||
|
<div class="bg-white rounded-lg shadow-md overflow-hidden">
|
||||||
|
@if (listing.imageOrder?.length>0){
|
||||||
|
<img src="{{ env.imageBaseUrl }}/pictures/property/{{ listing.imagePath }}/{{ listing.serialId }}/{{ listing.imageOrder[0] }}?_ts={{ ts }}" alt="Image" class="w-full h-48 object-cover" />
|
||||||
|
} @else {
|
||||||
|
<img src="assets/images/placeholder_properties.jpg" alt="Image" class="w-full h-48 object-cover" />
|
||||||
|
}
|
||||||
|
<div class="p-4">
|
||||||
|
<div class="flex items-center justify-between mb-2">
|
||||||
|
<span class="bg-gray-200 text-gray-700 text-xs font-semibold px-2 py-1 rounded">{{ selectOptions.getState(listing.state) }}</span>
|
||||||
|
<span class="text-gray-600 text-sm"><i [class]="selectOptions.getIconTypeOfCommercials(listing.type)" class="mr-1"></i> {{ selectOptions.getCommercialProperty(listing.type) }}</span>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-semibold mb-2">{{ listing.title }}</h3>
|
||||||
|
<p class="text-gray-600 mb-2">{{ listing.city }}</p>
|
||||||
|
<p class="text-xl font-bold mb-4">{{ listing.price | currency }}</p>
|
||||||
|
<button [routerLink]="['/details-commercial-property-listing', listing.id]" class="bg-green-500 text-white px-4 py-2 rounded-full w-full hover:bg-green-600 transition duration-300">
|
||||||
|
View Full Listing <i class="fas fa-arrow-right ml-1"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,6 @@ import { ChangeDetectorRef, Component } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
||||||
import onChange from 'on-change';
|
import onChange from 'on-change';
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { InputGroupModule } from 'primeng/inputgroup';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { PaginatorModule } from 'primeng/paginator';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
||||||
import { CommercialPropertyListing } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { CommercialPropertyListing } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
|
|
@ -22,7 +14,7 @@ import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-commercial-property-listings',
|
selector: 'app-commercial-property-listings',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, StyleClassModule, ButtonModule, CheckboxModule, InputTextModule, DropdownModule, FormsModule, StyleClassModule, ToggleButtonModule, RouterModule, PaginatorModule, InputGroupModule],
|
imports: [CommonModule, FormsModule, RouterModule],
|
||||||
templateUrl: './commercial-property-listings.component.html',
|
templateUrl: './commercial-property-listings.component.html',
|
||||||
styleUrls: ['./commercial-property-listings.component.scss', '../../pages.scss'],
|
styleUrls: ['./commercial-property-listings.component.scss', '../../pages.scss'],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
<div class="surface-ground">
|
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
|
||||||
<ul class="list-none m-0 p-0 flex flex-row lg:flex-column justify-content-evenly md:justify-content-between lg:justify-content-start mb-5 lg:pr-8 lg:mb-0">
|
|
||||||
<li>
|
|
||||||
<a routerLink="/account" routerLinkActive="text-blue-500" pRipple class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline">
|
|
||||||
<i class="pi pi-user md:mr-2"></i>
|
|
||||||
<span class="font-medium hidden md:block">Account</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
routerLink="/createBusinessListing"
|
|
||||||
routerLinkActive="text-blue-500"
|
|
||||||
pRipple
|
|
||||||
class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline"
|
|
||||||
>
|
|
||||||
<i class="pi pi-plus-circle md:mr-2"></i>
|
|
||||||
<span class="font-medium hidden md:block">Create Listing</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
routerLink="/myListings"
|
|
||||||
routerLinkActive="text-blue-500"
|
|
||||||
pRipple
|
|
||||||
class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline"
|
|
||||||
>
|
|
||||||
<i class="pi pi-list md:mr-2"></i>
|
|
||||||
<span class="font-medium hidden md:block">My Listings</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
routerLink="/myFavorites"
|
|
||||||
routerLinkActive="text-blue-500"
|
|
||||||
pRipple
|
|
||||||
class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline"
|
|
||||||
>
|
|
||||||
<i class="pi pi-star md:mr-2"></i>
|
|
||||||
<span class="font-medium hidden md:block">My Favorites</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a routerLink="/emailUs" routerLinkActive="text-blue-500" pRipple class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline">
|
|
||||||
<fa-icon [icon]="faEnvelope" class="mr-2 flex"></fa-icon>
|
|
||||||
<span class="font-medium hidden md:block">Email Us</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a (click)="logout()" routerLinkActive="text-blue-500" pRipple class="flex align-items-center cursor-pointer p-3 border-round text-800 hover:surface-200 transition-duration-150 transition-colors no-underline">
|
|
||||||
<fa-icon [icon]="faRightFromBracket" class="mr-2 flex"></fa-icon>
|
|
||||||
<span class="font-medium hidden md:block">Logout</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
ul {
|
|
||||||
text-wrap: nowrap;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { NavigationEnd, Router, RouterModule } from '@angular/router';
|
|
||||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
||||||
import { faEnvelope } from '@fortawesome/free-regular-svg-icons';
|
|
||||||
import { faRightFromBracket } from '@fortawesome/free-solid-svg-icons';
|
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { DividerModule } from 'primeng/divider';
|
|
||||||
import { RippleModule } from 'primeng/ripple';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'menu-account',
|
|
||||||
standalone: true,
|
|
||||||
imports: [CommonModule, StyleClassModule, ButtonModule, DividerModule, RouterModule, RippleModule, FontAwesomeModule],
|
|
||||||
templateUrl: './menu-account.component.html',
|
|
||||||
styleUrl: './menu-account.component.scss',
|
|
||||||
})
|
|
||||||
export class MenuAccountComponent {
|
|
||||||
activeLink: string;
|
|
||||||
faEnvelope = faEnvelope;
|
|
||||||
faRightFromBracket = faRightFromBracket;
|
|
||||||
constructor(private router: Router, public keycloakService: KeycloakService) {
|
|
||||||
// Abonniere Router-Events, um den aktiven Link zu ermitteln
|
|
||||||
this.router.events.subscribe(event => {
|
|
||||||
if (event instanceof NavigationEnd) {
|
|
||||||
this.activeLink = event.url;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
logout() {
|
|
||||||
sessionStorage.removeItem('USERID');
|
|
||||||
this.keycloakService.logout(window.location.origin + '/home');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -32,14 +32,6 @@
|
||||||
<i class="pi pi-check text-green-500 mr-3"></i>
|
<i class="pi pi-check text-green-500 mr-3"></i>
|
||||||
<span>Monthly/Yearly package</span>
|
<span>Monthly/Yearly package</span>
|
||||||
</li>
|
</li>
|
||||||
<!-- <li class="flex align-items-center my-4 bg-white-alpha-40 shadow-2 py-1 px-2 border-round-lg w-max">
|
|
||||||
<i class="pi pi-check text-green-500 mr-3"></i>
|
|
||||||
<span>Imperdiet proin</span>
|
|
||||||
</li>
|
|
||||||
<li class="flex align-items-center my-4 bg-white-alpha-40 shadow-2 py-1 px-2 border-round-lg w-max">
|
|
||||||
<i class="pi pi-check text-green-500 mr-3"></i>
|
|
||||||
<span>Nisi scelerisque</span>
|
|
||||||
</li> -->
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,194 +0,0 @@
|
||||||
<section id="content" role="main">
|
|
||||||
<article id="post-2" class="post-2 page type-page status-publish hentry pmpro-has-access">
|
|
||||||
<section class="entry-content">
|
|
||||||
<div class="container" style="padding: 3.5% 0 3.75% 0 !important">
|
|
||||||
<p>
|
|
||||||
<strong>Privacy Policy</strong><br />
|
|
||||||
We are committed to protecting your privacy. We have established this statement as a testament to our commitment to your privacy.
|
|
||||||
</p>
|
|
||||||
<p>This Privacy Policy relates to the use of any personal information you provide to us through this websites.</p>
|
|
||||||
<p>
|
|
||||||
By accepting the Privacy Policy during registration or the sending of an enquiry, you expressly consent to our collection, storage, use and disclosure of your personal information as described in this Privacy
|
|
||||||
Policy.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
We may update our Privacy Policy from time to time. Our Privacy Policy was last updated in Febuary 2018 and is effective upon acceptance for new users. By continuing to use our websites or otherwise continuing
|
|
||||||
to deal with us, you accept this Privacy Policy.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Collection of personal information</strong><br />
|
|
||||||
Anyone can browse our websites without revealing any personally identifiable information.
|
|
||||||
</p>
|
|
||||||
<p>However, should you wish to contact a business for sale, a franchise opportunity or an intermediary, we will require you to provide some personal information.</p>
|
|
||||||
<p>Should you wish to advertise your services, your business (es) or your franchise opportunity, we will require you to provide some personal information.</p>
|
|
||||||
<p>By providing personal information, you are consenting to the transfer and storage of that information on our servers located in the United States.</p>
|
|
||||||
<p>We may collect and store the following personal information:</p>
|
|
||||||
<p>
|
|
||||||
Your name, email address, physical address, telephone numbers, and (depending on the service used), your business information, financial information, such as credit / payment card details;<br />
|
|
||||||
transactional information based on your activities on the site; information that you disclose in a forum on any of our websites, feedback, correspondence through our websites, and correspondence sent to us;<br />
|
|
||||||
other information from your interaction with our websites, services, content and advertising, including computer and connection information, statistics on page views, traffic to and from the sites, ad data, IP
|
|
||||||
address and standard web log information;<br />
|
|
||||||
supplemental information from third parties (for example, if you incur a debt, we will generally conduct a credit check by obtaining additional information about you from a credit bureau, as permitted by law;
|
|
||||||
or if the information you provide cannot be verified,<br />
|
|
||||||
we may ask you to send us additional information, or to answer additional questions online to help verify your information).
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>How we use your information</strong><br />
|
|
||||||
The primary reason we collect your personal information is to improve the services we deliver to you through our website. By registering or sending an enquiry through our website, you agree that we may use your
|
|
||||||
personal information to:<br />
|
|
||||||
provide the services and customer support you request;<br />
|
|
||||||
connect you with relevant parties:<br />
|
|
||||||
If you are a buyer we will pass some or all of your details on to the seller / intermediary along with any message you have typed. This allows the seller to contact you in order to pursue a possible sale of a
|
|
||||||
business;<br />
|
|
||||||
If you are a seller / intermediary, we will disclose your details where you have given us permission to do so;<br />
|
|
||||||
resolve disputes, collect fees, and troubleshoot problems;<br />
|
|
||||||
prevent potentially prohibited or illegal activities, and enforce our Terms and Conditions;<br />
|
|
||||||
customize, measure and improve our services, conduct internal market research, provide content and advertising;<br />
|
|
||||||
tell you about other Biz-Match products and services, target marketing, send you service updates, and promotional offers based on your communication preferences.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Our disclosure of your information</strong><br />
|
|
||||||
We may disclose personal information to respond to legal requirements, enforce our policies, respond to claims that a listing or other content infringes the rights of others, or protect anyone’s rights,
|
|
||||||
property, or safety.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
We may also share your personal information with<br />
|
|
||||||
When you select to register an account as a business buyer, you provide your personal details and we will pass this on to a seller of a business or franchise when you request more information.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
When you select to register an account as a business broker or seller on the site, we provide a public platform on which to establish your business profile. This profile consists of pertinent facts about your
|
|
||||||
business along with your personal information; namely, the contact information you provide to facilitate contact between you and other users’ of the site. Direct email addresses and telephone numbers will not
|
|
||||||
be publicly displayed unless you specifically include it on your profile.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The information a user includes within the forums provided on the site is publicly available to other users’ of the site. Please be aware that any personal information you elect to provide in a public forum may
|
|
||||||
be used to send you unsolicited messages; we are not responsible for the personal information a user elects to disclose within their public profile, or in the private communications that users’ engage in on the
|
|
||||||
site.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
We post testimonials on the site obtained from users’. These testimonials may include the name, city, state or region and business of the user. We obtain permission from our users’ prior to posting their
|
|
||||||
testimonials on the site. We are not responsible for any personal information a user selects to include within their testimonial.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
When you elect to email a friend about the site, or a particular business, we request the third party’s email address to send this one time email. We do not share this information with any third parties for
|
|
||||||
their promotional purposes and only store the information to gauge the effectiveness of our referral program.
|
|
||||||
</p>
|
|
||||||
<p>We may share your personal information with our service providers where necessary. We employ the services of a payment processor to fulfil payment for services purchased on the site.</p>
|
|
||||||
<p>
|
|
||||||
We works with a number of partners or affiliates, where we provide marketing services for these companies. These third party agents collect your personal information to facilitate your service request and the
|
|
||||||
information submitted here is governed by their privacy policy.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Masking Policy</strong><br />
|
|
||||||
In some cases, where the third party agent collects your information, the affiliate portal may appear within a BizMatch.net frame. It is presented as a BizMatch.net page for a streamlined user interface however
|
|
||||||
the data collected on such pages is governed by the third party agent’s privacy policy.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Legal Disclosure</strong><br />
|
|
||||||
In certain circumstances, we may be legally required to disclose information collected on the site to law enforcement, government agencies or other third parties. We reserve the right to disclose information to
|
|
||||||
our service providers and to law enforcement or government agencies where a formal request such as in response to a court order, subpoena or judicial proceeding is made. Where we believe in good faith that
|
|
||||||
disclosure of information is necessary to prevent imminent physical or financial harm, or loss, or in protecting against illegal activity on the site, we reserve to disclose information.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Should the company undergo the merger, acquisition or sale of some or all of its assets, your personal information may likely be a part of the transferred assets. In such an event, your personal information on
|
|
||||||
the site, would be governed by this privacy statement; any changes to the privacy practices governing your information as a result of transfer would be relayed to you by means of a prominent notice on the Site,
|
|
||||||
or by email.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Using information from BizMatch.net website</strong><br />
|
|
||||||
In certain cases, (where you are receiving contact details of buyers interested in your business opportunity or a business opportunity you represent), you must comply with data protection laws, and give other
|
|
||||||
users a chance to remove themselves from your database and a chance to review what information you have collected about them.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>You agree to use BizMatch.net user information only for:</strong>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
BizMatch.net transaction-related purposes that are not unsolicited commercial messages;<br />
|
|
||||||
using services offered through BizMatch.net, or<br />
|
|
||||||
other purposes that a user expressly chooses.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Marketing</strong><br />
|
|
||||||
We do not sell or rent your personal information to third parties for their marketing purposes without your explicit consent. Where you explicitly express your consent at the point of collection to receive
|
|
||||||
offers from third party partners or affiliates, we will communicate to you on their behalf. We will not pass your information on.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
You will receive email marketing communications from us throughout the duration of your relationship with our websites. If you do not wish to receive marketing communications from us you may unsubscribe and /
|
|
||||||
or change your preferences at any time by following instructions included within a communication or emailing Customer Services.
|
|
||||||
</p>
|
|
||||||
<p>If you have an account with one of our websites you can also log in and click the email preferences link to unsubscribe and / or change your preferences.</p>
|
|
||||||
<p>
|
|
||||||
Please note that we reserve the right to send all website users notifications and administrative emails where necessary which are considered a part of the service. Given that these messages aren’t promotional
|
|
||||||
in nature, you will be unable to opt-out of them.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Cookies</strong><br />
|
|
||||||
A cookie is a small text file written to your hard drive that contains information about you. Cookies do not contain any personal information about users. Once you close your browser or log out of the website,
|
|
||||||
the cookie simply terminates. We use cookies so that we can personalise your experience of our websites.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you set up your browser to reject the cookie, you may still use the website however; doing so may interfere with your use of some aspects of our websites. Some of our business partners use cookies on our
|
|
||||||
site (for example, advertisers). We have no access to or control over these cookies.
|
|
||||||
</p>
|
|
||||||
<p>For more information about how BizMatch.net uses cookies please read our Cookie Policy.</p>
|
|
||||||
<p>
|
|
||||||
<strong>Spam, spyware or spoofing</strong><br />
|
|
||||||
We and our users do not tolerate spam. Make sure to set your email preferences so we can communicate with you, as you prefer. Please add us to your safe senders list. To report spam or spoof emails, please
|
|
||||||
contact us using the contact information provided in the Contact Us section of this privacy statement.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
You may not use our communication tools to send spam or otherwise send content that would breach our Terms and Conditions. We automatically scan and may manually filter messages to check for spam, viruses,
|
|
||||||
phishing attacks and other malicious activity or illegal or prohibited content. We may also store these messages for back up purposes only.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you send an email to an email address that is not registered in our community, we do not permanently store that email or use that email address for any marketing purpose. We do not rent or sell these email
|
|
||||||
addresses.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Account protection</strong><br />
|
|
||||||
Your password is the key to your account. Make sure this is stored safely. Use unique numbers, letters and special characters, and do not disclose your password to anyone. If you do share your password or your
|
|
||||||
personal information with others, remember that you are responsible for all actions taken in the name of your account. If you lose control of your password, you may lose substantial control over your personal
|
|
||||||
information and may be subject to legally binding actions taken on your behalf. Therefore, if your password has been compromised for any reason, you should immediately notify us and change your password.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Accessing, reviewing and changing your personal information</strong><br />
|
|
||||||
You can view and amend your personal information at any time by logging in to your account online. You must promptly update your personal information if it changes or is inaccurate.
|
|
||||||
</p>
|
|
||||||
<p>If at any time you wish to close your account, please contact Customer Services and instruct us to do so. We will process your request as soon as we can.</p>
|
|
||||||
<p>You may also contact us at any time to find out what information we hold about you, what we do with it and ask us to update it for you.</p>
|
|
||||||
<p>
|
|
||||||
We do retain personal information from closed accounts to comply with law, prevent fraud, collect any fees owed, resolve disputes, troubleshoot problems, assist with any investigations, enforce our Terms and
|
|
||||||
Conditions, and take other actions otherwise permitted by law.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Security</strong><br />
|
|
||||||
Your information is stored on our servers located in the USA. We treat data as an asset that must be protected and use a variety of tools (encryption, passwords, physical security, etc.) to protect your
|
|
||||||
personal information against unauthorized access and disclosure. However, no method of security is 100% effective and while we take every measure to protect your personal information, we make no guarantees of
|
|
||||||
its absolute security.
|
|
||||||
</p>
|
|
||||||
<p>We employ the use of SSL encryption during the transmission of sensitive data across our websites.</p>
|
|
||||||
<p>
|
|
||||||
<strong>Third parties</strong><br />
|
|
||||||
Except as otherwise expressly included in this Privacy Policy, this document addresses only the use and disclosure of information we collect from you. If you disclose your information to others, whether they
|
|
||||||
are buyers or sellers on our websites or other sites throughout the internet, different rules may apply to their use or disclosure of the information you disclose to them. Dynamis does not control the privacy
|
|
||||||
policies of third parties, and you are subject to the privacy policies of those third parties where applicable.
|
|
||||||
</p>
|
|
||||||
<p>We encourage you to ask questions before you disclose your personal information to others.</p>
|
|
||||||
<p>
|
|
||||||
<strong>General</strong><br />
|
|
||||||
We may change this Privacy Policy from time to time as we add new products and applications, as we improve our current offerings, and as technologies and laws change. You can determine when this Privacy Policy
|
|
||||||
was last revised by referring to the “Last Updated” legend at the top of this page.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Any changes will become effective upon our posting of the revised Privacy Policy on our affected websites. We will provide notice to you if these changes are material and, where required by applicable law, we
|
|
||||||
will obtain your consent. This notice may be provided by email, by posting notice of the changes on our affected websites or by other means, consistent with applicable laws.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Contact Us</strong><br />
|
|
||||||
If you have any questions or comments about our privacy policy, and you can’t find the answer to your question on our help pages, please contact us using this form or email support@bizmatch.net, or write to
|
|
||||||
us at BizMatch, 715 S. Tanahua, Corpus Christi, TX 78401.)
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
import { Component } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-privacy-statement',
|
|
||||||
standalone: true,
|
|
||||||
imports: [],
|
|
||||||
templateUrl: './privacy-statement.component.html',
|
|
||||||
styleUrl: './privacy-statement.component.scss'
|
|
||||||
})
|
|
||||||
export class PrivacyStatementComponent {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8">
|
<!-- <div class="surface-ground px-4 py-8 md:px-6 lg:px-8">
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
<div class="p-fluid flex flex-column lg:flex-row">
|
||||||
<menu-account></menu-account>
|
<menu-account></menu-account>
|
||||||
<p-toast></p-toast>
|
<p-toast></p-toast>
|
||||||
|
|
@ -114,7 +114,6 @@
|
||||||
<p-button class="mr-1" icon="pi pi-plus" severity="success" (click)="addArea()"></p-button>
|
<p-button class="mr-1" icon="pi pi-plus" severity="success" (click)="addArea()"></p-button>
|
||||||
<p-button icon="pi pi-minus" severity="danger" (click)="removeArea()" [disabled]="user.areasServed?.length < 2"></p-button>
|
<p-button icon="pi pi-minus" severity="danger" (click)="removeArea()" [disabled]="user.areasServed?.length < 2"></p-button>
|
||||||
<span class="text-xs"> (Add more Areas or remove existing ones.)</span>
|
<span class="text-xs"> (Add more Areas or remove existing ones.)</span>
|
||||||
<!-- <button pButton pRipple label="Add Licence" class="w-auto" (click)="addLicence()"></button> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="companyOverview" class="block font-medium text-900 mb-2">Licensed In</label>
|
<label for="companyOverview" class="block font-medium text-900 mb-2">Licensed In</label>
|
||||||
|
|
@ -143,7 +142,6 @@
|
||||||
<p-button class="mr-1" icon="pi pi-plus" severity="success" (click)="addLicence()"></p-button>
|
<p-button class="mr-1" icon="pi pi-plus" severity="success" (click)="addLicence()"></p-button>
|
||||||
<p-button icon="pi pi-minus" severity="danger" (click)="removeLicence()" [disabled]="user.licensedIn?.length < 2"></p-button>
|
<p-button icon="pi pi-minus" severity="danger" (click)="removeLicence()" [disabled]="user.licensedIn?.length < 2"></p-button>
|
||||||
<span class="text-xs"> (Add more licenses or remove existing ones.)</span>
|
<span class="text-xs"> (Add more licenses or remove existing ones.)</span>
|
||||||
<!-- <button pButton pRipple label="Add Licence" class="w-auto" (click)="addLicence()"></button> -->
|
|
||||||
</div>
|
</div>
|
||||||
} }
|
} }
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -160,7 +158,6 @@
|
||||||
<img src="{{ companyLogoUrl }}" class="rounded-profile" />
|
<img src="{{ companyLogoUrl }}" class="rounded-profile" />
|
||||||
<fa-icon [icon]="faTrash" (click)="deleteConfirm('logo')"></fa-icon>
|
<fa-icon [icon]="faTrash" (click)="deleteConfirm('logo')"></fa-icon>
|
||||||
</div>
|
</div>
|
||||||
<!-- <img src="profile/{{ user.id }}.avif" class="rounded-profile" /> -->
|
|
||||||
} @else {
|
} @else {
|
||||||
<img src="assets/images/placeholder.png" class="rounded-profile" />
|
<img src="assets/images/placeholder.png" class="rounded-profile" />
|
||||||
}
|
}
|
||||||
|
|
@ -263,4 +260,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p-confirmDialog></p-confirmDialog>
|
<p-confirmDialog></p-confirmDialog> -->
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,12 @@
|
||||||
import { HttpEventType } from '@angular/common/http';
|
import { ChangeDetectorRef, Component } from '@angular/core';
|
||||||
import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';
|
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { faTrash } from '@fortawesome/free-solid-svg-icons';
|
import { faTrash } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { AngularCropperjsModule } from 'angular-cropperjs';
|
import { AngularCropperjsModule } from 'angular-cropperjs';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
||||||
import { DialogModule } from 'primeng/dialog';
|
|
||||||
import { DialogService, DynamicDialogModule, DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
||||||
import { EditorModule } from 'primeng/editor';
|
|
||||||
import { FileUpload, FileUploadModule } from 'primeng/fileupload';
|
|
||||||
import { InputMaskModule } from 'primeng/inputmask';
|
|
||||||
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
||||||
import { lastValueFrom } from 'rxjs';
|
import { lastValueFrom } from 'rxjs';
|
||||||
import { User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { AutoCompleteCompleteEvent, Invoice, Subscription, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { AutoCompleteCompleteEvent, Invoice, Subscription, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
import { ImageCropperComponent, stateOptions } from '../../../components/image-cropper/image-cropper.component';
|
|
||||||
import { GeoService } from '../../../services/geo.service';
|
import { GeoService } from '../../../services/geo.service';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
import { LoadingService } from '../../../services/loading.service';
|
import { LoadingService } from '../../../services/loading.service';
|
||||||
|
|
@ -24,19 +14,19 @@ import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { SubscriptionsService } from '../../../services/subscriptions.service';
|
import { SubscriptionsService } from '../../../services/subscriptions.service';
|
||||||
import { UserService } from '../../../services/user.service';
|
import { UserService } from '../../../services/user.service';
|
||||||
import { SharedModule } from '../../../shared/shared/shared.module';
|
import { SharedModule } from '../../../shared/shared/shared.module';
|
||||||
import { getDialogWidth, getImageDimensions, map2User } from '../../../utils/utils';
|
import { map2User } from '../../../utils/utils';
|
||||||
import { TOOLBAR_OPTIONS } from '../../utils/defaults';
|
import { TOOLBAR_OPTIONS } from '../../utils/defaults';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-account',
|
selector: 'app-account',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, FileUploadModule, EditorModule, AngularCropperjsModule, DialogModule, SelectButtonModule, DynamicDialogModule, ConfirmDialogModule, InputMaskModule],
|
imports: [SharedModule, AngularCropperjsModule],
|
||||||
providers: [MessageService, DialogService, ConfirmationService],
|
providers: [],
|
||||||
templateUrl: './account.component.html',
|
templateUrl: './account.component.html',
|
||||||
styleUrl: './account.component.scss',
|
styleUrl: './account.component.scss',
|
||||||
})
|
})
|
||||||
export class AccountComponent {
|
export class AccountComponent {
|
||||||
@ViewChild('companyUpload') public companyUpload: FileUpload;
|
// @ViewChild('companyUpload') public companyUpload: FileUpload;
|
||||||
@ViewChild('profileUpload') public profileUpload: FileUpload;
|
// @ViewChild('profileUpload') public profileUpload: FileUpload;
|
||||||
private id: string | undefined = this.activatedRoute.snapshot.params['id'] as string | undefined;
|
private id: string | undefined = this.activatedRoute.snapshot.params['id'] as string | undefined;
|
||||||
user: User;
|
user: User;
|
||||||
subscriptions: Array<Subscription>;
|
subscriptions: Array<Subscription>;
|
||||||
|
|
@ -45,7 +35,6 @@ export class AccountComponent {
|
||||||
companyLogoUrl: string;
|
companyLogoUrl: string;
|
||||||
profileUrl: string;
|
profileUrl: string;
|
||||||
type: 'company' | 'profile';
|
type: 'company' | 'profile';
|
||||||
dialogRef: DynamicDialogRef | undefined;
|
|
||||||
environment = environment;
|
environment = environment;
|
||||||
editorModules = TOOLBAR_OPTIONS;
|
editorModules = TOOLBAR_OPTIONS;
|
||||||
env = environment;
|
env = environment;
|
||||||
|
|
@ -53,15 +42,12 @@ export class AccountComponent {
|
||||||
constructor(
|
constructor(
|
||||||
public userService: UserService,
|
public userService: UserService,
|
||||||
private subscriptionService: SubscriptionsService,
|
private subscriptionService: SubscriptionsService,
|
||||||
private messageService: MessageService,
|
|
||||||
private geoService: GeoService,
|
private geoService: GeoService,
|
||||||
public selectOptions: SelectOptionsService,
|
public selectOptions: SelectOptionsService,
|
||||||
private cdref: ChangeDetectorRef,
|
private cdref: ChangeDetectorRef,
|
||||||
private activatedRoute: ActivatedRoute,
|
private activatedRoute: ActivatedRoute,
|
||||||
private loadingService: LoadingService,
|
private loadingService: LoadingService,
|
||||||
private imageUploadService: ImageService,
|
private imageUploadService: ImageService,
|
||||||
public dialogService: DialogService,
|
|
||||||
private confirmationService: ConfirmationService,
|
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
private keycloakService: KeycloakService,
|
private keycloakService: KeycloakService,
|
||||||
) {}
|
) {}
|
||||||
|
|
@ -98,7 +84,7 @@ export class AccountComponent {
|
||||||
|
|
||||||
async updateProfile(user: User) {
|
async updateProfile(user: User) {
|
||||||
await this.userService.save(this.user);
|
await this.userService.save(this.user);
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Account changes have been persisted', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Account changes have been persisted', life: 3000 });
|
||||||
}
|
}
|
||||||
|
|
||||||
onUploadCompanyLogo(event: any) {
|
onUploadCompanyLogo(event: any) {
|
||||||
|
|
@ -134,77 +120,77 @@ export class AccountComponent {
|
||||||
get isProfessional() {
|
get isProfessional() {
|
||||||
return this.user.customerType === 'professional';
|
return this.user.customerType === 'professional';
|
||||||
}
|
}
|
||||||
select(event: any, type: 'company' | 'profile') {
|
// select(event: any, type: 'company' | 'profile') {
|
||||||
const imageUrl = URL.createObjectURL(event.files[0]);
|
// const imageUrl = URL.createObjectURL(event.files[0]);
|
||||||
this.type = type;
|
// this.type = type;
|
||||||
const config = { aspectRatio: type === 'company' ? stateOptions[0].value : stateOptions[2].value };
|
// const config = { aspectRatio: type === 'company' ? stateOptions[0].value : stateOptions[2].value };
|
||||||
getImageDimensions(imageUrl).then(dimensions => {
|
// getImageDimensions(imageUrl).then(dimensions => {
|
||||||
const dialogWidth = getDialogWidth(dimensions);
|
// const dialogWidth = getDialogWidth(dimensions);
|
||||||
|
|
||||||
this.dialogRef = this.dialogService.open(ImageCropperComponent, {
|
// this.dialogRef = this.dialogService.open(ImageCropperComponent, {
|
||||||
data: {
|
// data: {
|
||||||
imageUrl: imageUrl,
|
// imageUrl: imageUrl,
|
||||||
fileUpload: type === 'company' ? this.companyUpload : this.profileUpload,
|
// fileUpload: type === 'company' ? this.companyUpload : this.profileUpload,
|
||||||
config: config,
|
// config: config,
|
||||||
ratioVariable: type === 'company' ? true : false,
|
// ratioVariable: type === 'company' ? true : false,
|
||||||
},
|
// },
|
||||||
header: 'Edit Image',
|
// header: 'Edit Image',
|
||||||
width: dialogWidth,
|
// width: dialogWidth,
|
||||||
modal: true,
|
// modal: true,
|
||||||
closeOnEscape: true,
|
// closeOnEscape: true,
|
||||||
keepInViewport: true,
|
// keepInViewport: true,
|
||||||
closable: false,
|
// closable: false,
|
||||||
});
|
// });
|
||||||
this.dialogRef.onClose.subscribe(cropper => {
|
// this.dialogRef.onClose.subscribe(cropper => {
|
||||||
if (cropper) {
|
// if (cropper) {
|
||||||
this.loadingService.startLoading('uploadImage');
|
// this.loadingService.startLoading('uploadImage');
|
||||||
cropper.getCroppedCanvas().toBlob(async blob => {
|
// cropper.getCroppedCanvas().toBlob(async blob => {
|
||||||
this.imageUploadService.uploadImage(blob, type === 'company' ? 'uploadCompanyLogo' : 'uploadProfile', emailToDirName(this.user.email)).subscribe(
|
// this.imageUploadService.uploadImage(blob, type === 'company' ? 'uploadCompanyLogo' : 'uploadProfile', emailToDirName(this.user.email)).subscribe(
|
||||||
async event => {
|
// async event => {
|
||||||
if (event.type === HttpEventType.Response) {
|
// if (event.type === HttpEventType.Response) {
|
||||||
this.loadingService.stopLoading('uploadImage');
|
// this.loadingService.stopLoading('uploadImage');
|
||||||
if (this.type === 'company') {
|
// if (this.type === 'company') {
|
||||||
this.user.hasCompanyLogo = true; //
|
// this.user.hasCompanyLogo = true; //
|
||||||
this.companyLogoUrl = `${this.env.imageBaseUrl}/pictures/logo/${emailToDirName(this.user.email)}.avif?_ts=${new Date().getTime()}`;
|
// this.companyLogoUrl = `${this.env.imageBaseUrl}/pictures/logo/${emailToDirName(this.user.email)}.avif?_ts=${new Date().getTime()}`;
|
||||||
} else {
|
// } else {
|
||||||
this.user.hasProfile = true;
|
// this.user.hasProfile = true;
|
||||||
this.profileUrl = `${this.env.imageBaseUrl}/pictures/profile/${emailToDirName(this.user.email)}.avif?_ts=${new Date().getTime()}`;
|
// this.profileUrl = `${this.env.imageBaseUrl}/pictures/profile/${emailToDirName(this.user.email)}.avif?_ts=${new Date().getTime()}`;
|
||||||
}
|
// }
|
||||||
await this.userService.save(this.user);
|
// await this.userService.save(this.user);
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
error => console.error('Fehler beim Upload:', error),
|
// error => console.error('Fehler beim Upload:', error),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
deleteConfirm(type: 'profile' | 'logo') {
|
// deleteConfirm(type: 'profile' | 'logo') {
|
||||||
this.confirmationService.confirm({
|
// this.confirmationService.confirm({
|
||||||
target: event.target as EventTarget,
|
// target: event.target as EventTarget,
|
||||||
message: `Do you want to delete your ${type === 'logo' ? 'Logo' : 'Profile'} image`,
|
// message: `Do you want to delete your ${type === 'logo' ? 'Logo' : 'Profile'} image`,
|
||||||
header: 'Delete Confirmation',
|
// header: 'Delete Confirmation',
|
||||||
icon: 'pi pi-info-circle',
|
// icon: 'pi pi-info-circle',
|
||||||
acceptButtonStyleClass: 'p-button-danger p-button-text',
|
// acceptButtonStyleClass: 'p-button-danger p-button-text',
|
||||||
rejectButtonStyleClass: 'p-button-text p-button-text',
|
// rejectButtonStyleClass: 'p-button-text p-button-text',
|
||||||
acceptIcon: 'none',
|
// acceptIcon: 'none',
|
||||||
rejectIcon: 'none',
|
// rejectIcon: 'none',
|
||||||
|
|
||||||
accept: async () => {
|
// accept: async () => {
|
||||||
if (type === 'profile') {
|
// if (type === 'profile') {
|
||||||
this.user.hasProfile = false;
|
// this.user.hasProfile = false;
|
||||||
await Promise.all([this.imageService.deleteProfileImagesById(this.user.email), this.userService.save(this.user)]);
|
// await Promise.all([this.imageService.deleteProfileImagesById(this.user.email), this.userService.save(this.user)]);
|
||||||
} else {
|
// } else {
|
||||||
this.user.hasCompanyLogo = false;
|
// this.user.hasCompanyLogo = false;
|
||||||
await Promise.all([this.imageService.deleteLogoImagesById(this.user.email), this.userService.save(this.user)]);
|
// await Promise.all([this.imageService.deleteLogoImagesById(this.user.email), this.userService.save(this.user)]);
|
||||||
}
|
// }
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Image deleted' });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Image deleted' });
|
||||||
this.user = await this.userService.getById(this.user.id);
|
// this.user = await this.userService.getById(this.user.id);
|
||||||
},
|
// },
|
||||||
reject: () => {
|
// reject: () => {
|
||||||
console.log('deny');
|
// console.log('deny');
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -156,10 +156,11 @@
|
||||||
</div>
|
</div>
|
||||||
<p-toast></p-toast>
|
<p-toast></p-toast>
|
||||||
<p-confirmDialog></p-confirmDialog> -->
|
<p-confirmDialog></p-confirmDialog> -->
|
||||||
|
|
||||||
<div class="container mx-auto p-4">
|
<div class="container mx-auto p-4">
|
||||||
<div class="bg-white rounded-lg shadow-md p-6">
|
<div class="bg-white rounded-lg shadow-md p-6">
|
||||||
<h1 class="text-2xl font-semibold mb-6">Edit Listing</h1>
|
<h1 class="text-2xl font-semibold mb-6">Edit Listing</h1>
|
||||||
<form (ngSubmit)="onSubmit()" #listingForm="ngForm">
|
<form #listingForm="ngForm">
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label for="listingsCategory" class="block text-sm font-bold text-gray-700 mb-1">Listing category</label>
|
<label for="listingsCategory" class="block text-sm font-bold text-gray-700 mb-1">Listing category</label>
|
||||||
<select id="listingsCategory" [(ngModel)]="listing.listingsCategory" name="listingsCategory" class="w-full p-2 border border-gray-300 rounded-md">
|
<select id="listingsCategory" [(ngModel)]="listing.listingsCategory" name="listingsCategory" class="w-full p-2 border border-gray-300 rounded-md">
|
||||||
|
|
@ -186,7 +187,7 @@
|
||||||
<div class="flex mb-4 space-x-4">
|
<div class="flex mb-4 space-x-4">
|
||||||
<div class="w-1/2">
|
<div class="w-1/2">
|
||||||
<label for="state" class="block text-sm font-bold text-gray-700 mb-1">State</label>
|
<label for="state" class="block text-sm font-bold text-gray-700 mb-1">State</label>
|
||||||
<ng-select [items]="usStates" bindLabel="name" bindValue="value" [(ngModel)]="listing.state" name="state"> </ng-select>
|
<ng-select [items]="selectOptions?.states" bindLabel="name" bindValue="value" [(ngModel)]="listing.state" name="state"> </ng-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-1/2">
|
<div class="w-1/2">
|
||||||
<label for="city" class="block text-sm font-bold text-gray-700 mb-1">City</label>
|
<label for="city" class="block text-sm font-bold text-gray-700 mb-1">City</label>
|
||||||
|
|
@ -203,7 +204,7 @@
|
||||||
[(ngModel)]="listing.price"
|
[(ngModel)]="listing.price"
|
||||||
name="price"
|
name="price"
|
||||||
class="w-full p-2 border border-gray-300 rounded-md"
|
class="w-full p-2 border border-gray-300 rounded-md"
|
||||||
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 2 }"
|
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 0, align: 'left' }"
|
||||||
currencyMask
|
currencyMask
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -215,7 +216,7 @@
|
||||||
[(ngModel)]="listing.salesRevenue"
|
[(ngModel)]="listing.salesRevenue"
|
||||||
name="salesRevenue"
|
name="salesRevenue"
|
||||||
class="w-full p-2 border border-gray-300 rounded-md"
|
class="w-full p-2 border border-gray-300 rounded-md"
|
||||||
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 2 }"
|
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 0, align: 'left' }"
|
||||||
currencyMask
|
currencyMask
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -229,7 +230,7 @@
|
||||||
[(ngModel)]="listing.cashFlow"
|
[(ngModel)]="listing.cashFlow"
|
||||||
name="cashFlow"
|
name="cashFlow"
|
||||||
class="w-full p-2 border border-gray-300 rounded-md"
|
class="w-full p-2 border border-gray-300 rounded-md"
|
||||||
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 2 }"
|
[options]="{ prefix: '$', thousands: ',', decimal: '.', precision: 0, align: 'left' }"
|
||||||
currencyMask
|
currencyMask
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -290,14 +291,16 @@
|
||||||
<label class="flex items-center cursor-pointer">
|
<label class="flex items-center cursor-pointer">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<input type="checkbox" [(ngModel)]="listing.draft" name="draft" class="hidden" />
|
<input type="checkbox" [(ngModel)]="listing.draft" name="draft" class="hidden" />
|
||||||
<div class="toggle-bg block w-14 h-8 rounded-full bg-gray-600 transition"></div>
|
<div class="toggle-bg block w-12 h-6 rounded-full bg-gray-600 transition"></div>
|
||||||
<div class="dot absolute left-1 top-1 bg-white w-6 h-6 rounded-full transition"></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-3 text-gray-700 font-medium">Draft Mode (Will not be shown as public listing)</div>
|
<div class="ml-3 text-gray-700 font-medium">Draft Mode (Will not be shown as public listing)</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
@if (mode==='create'){
|
||||||
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-md hover:bg-blue-600">Update Listing</button>
|
<button (click)="save()" class="bg-blue-500 text-white px-4 py-2 rounded-md hover:bg-blue-600">Post Listing</button>
|
||||||
|
} @else {
|
||||||
|
<button (click)="save()" class="bg-blue-500 text-white px-4 py-2 rounded-md hover:bg-blue-600">Update Listing</button>
|
||||||
|
}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -14,14 +14,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type='checkbox'] {
|
// input[type='checkbox'] {
|
||||||
&:checked + .dot {
|
// &:checked + .dot {
|
||||||
transform: translateX(100%);
|
// transform: translateX(100%);
|
||||||
}
|
// }
|
||||||
&:checked + .block {
|
// &:checked + .block {
|
||||||
background-color: #4299e1;
|
// background-color: #4299e1;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
.dot {
|
.dot {
|
||||||
transition: all 0.3s ease-in-out;
|
transition: all 0.3s ease-in-out;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, ViewChild } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||||
import { lastValueFrom } from 'rxjs';
|
import { lastValueFrom } from 'rxjs';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
|
|
@ -11,17 +11,12 @@ import { AngularCropperjsModule } from 'angular-cropperjs';
|
||||||
import { MixedCdkDragDropModule } from 'angular-mixed-cdk-drag-drop';
|
import { MixedCdkDragDropModule } from 'angular-mixed-cdk-drag-drop';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { QuillModule } from 'ngx-quill';
|
import { QuillModule } from 'ngx-quill';
|
||||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
||||||
import { CarouselModule } from 'primeng/carousel';
|
import { NgSelectModule } from '@ng-select/ng-select';
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
import { NgxCurrencyDirective } from 'ngx-currency';
|
||||||
import { DialogModule } from 'primeng/dialog';
|
|
||||||
import { DialogService, DynamicDialogModule, DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
||||||
import { EditorModule } from 'primeng/editor';
|
|
||||||
import { FileUpload, FileUploadModule } from 'primeng/fileupload';
|
|
||||||
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { AutoCompleteCompleteEvent, ImageProperty, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { AutoCompleteCompleteEvent, ImageProperty, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
import { InputNumberModule } from '../../../components/inputnumber/inputnumber.component';
|
|
||||||
import { ArrayToStringPipe } from '../../../pipes/array-to-string.pipe';
|
import { ArrayToStringPipe } from '../../../pipes/array-to-string.pipe';
|
||||||
import { GeoService } from '../../../services/geo.service';
|
import { GeoService } from '../../../services/geo.service';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
|
|
@ -32,27 +27,12 @@ import { TOOLBAR_OPTIONS } from '../../utils/defaults';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'business-listing',
|
selector: 'business-listing',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [SharedModule, ArrayToStringPipe, AngularCropperjsModule, DragDropModule, MixedCdkDragDropModule, QuillModule, NgxCurrencyDirective, NgSelectModule],
|
||||||
SharedModule,
|
providers: [],
|
||||||
ArrayToStringPipe,
|
|
||||||
InputNumberModule,
|
|
||||||
CarouselModule,
|
|
||||||
DialogModule,
|
|
||||||
AngularCropperjsModule,
|
|
||||||
FileUploadModule,
|
|
||||||
EditorModule,
|
|
||||||
DynamicDialogModule,
|
|
||||||
DragDropModule,
|
|
||||||
ConfirmDialogModule,
|
|
||||||
MixedCdkDragDropModule,
|
|
||||||
QuillModule,
|
|
||||||
],
|
|
||||||
providers: [MessageService, DialogService, ConfirmationService],
|
|
||||||
templateUrl: './edit-business-listing.component.html',
|
templateUrl: './edit-business-listing.component.html',
|
||||||
styleUrl: './edit-business-listing.component.scss',
|
styleUrl: './edit-business-listing.component.scss',
|
||||||
})
|
})
|
||||||
export class EditBusinessListingComponent {
|
export class EditBusinessListingComponent {
|
||||||
@ViewChild(FileUpload) public fileUpload: FileUpload;
|
|
||||||
listingsCategory = 'business';
|
listingsCategory = 'business';
|
||||||
category: string;
|
category: string;
|
||||||
location: string;
|
location: string;
|
||||||
|
|
@ -82,7 +62,6 @@ export class EditBusinessListingComponent {
|
||||||
];
|
];
|
||||||
config = { aspectRatio: 16 / 9 };
|
config = { aspectRatio: 16 / 9 };
|
||||||
editorModules = TOOLBAR_OPTIONS;
|
editorModules = TOOLBAR_OPTIONS;
|
||||||
dialogRef: DynamicDialogRef | undefined;
|
|
||||||
draggedImage: ImageProperty;
|
draggedImage: ImageProperty;
|
||||||
faTrash = faTrash;
|
faTrash = faTrash;
|
||||||
data: CommercialPropertyListing;
|
data: CommercialPropertyListing;
|
||||||
|
|
@ -96,12 +75,10 @@ export class EditBusinessListingComponent {
|
||||||
private activatedRoute: ActivatedRoute,
|
private activatedRoute: ActivatedRoute,
|
||||||
private listingsService: ListingsService,
|
private listingsService: ListingsService,
|
||||||
public userService: UserService,
|
public userService: UserService,
|
||||||
private messageService: MessageService,
|
|
||||||
private geoService: GeoService,
|
private geoService: GeoService,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
private loadingService: LoadingService,
|
private loadingService: LoadingService,
|
||||||
public dialogService: DialogService,
|
|
||||||
private confirmationService: ConfirmationService,
|
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private keycloakService: KeycloakService,
|
private keycloakService: KeycloakService,
|
||||||
) {
|
) {
|
||||||
|
|
@ -139,7 +116,7 @@ export class EditBusinessListingComponent {
|
||||||
async save() {
|
async save() {
|
||||||
this.listing = await this.listingsService.save(this.listing, this.listing.listingsCategory);
|
this.listing = await this.listingsService.save(this.listing, this.listing.listingsCategory);
|
||||||
this.router.navigate(['editBusinessListing', this.listing.id]);
|
this.router.navigate(['editBusinessListing', this.listing.id]);
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing changes have been persisted', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing changes have been persisted', life: 3000 });
|
||||||
}
|
}
|
||||||
|
|
||||||
suggestions: string[] | undefined;
|
suggestions: string[] | undefined;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8">
|
<!-- <div class="surface-ground px-4 py-8 md:px-6 lg:px-8">
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
<div class="p-fluid flex flex-column lg:flex-row">
|
||||||
<menu-account></menu-account>
|
<menu-account></menu-account>
|
||||||
<p-toast></p-toast>
|
<p-toast></p-toast>
|
||||||
|
|
@ -28,7 +28,6 @@
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label for="description" class="block font-medium text-900 mb-2">Description</label>
|
<label for="description" class="block font-medium text-900 mb-2">Description</label>
|
||||||
<!-- <textarea id="description" type="text" pInputTextarea rows="5" [autoResize]="true" [(ngModel)]="listing.description"></textarea> -->
|
|
||||||
<p-editor [(ngModel)]="listing.description" [style]="{ height: '320px' }" [modules]="editorModules">
|
<p-editor [(ngModel)]="listing.description" [style]="{ height: '320px' }" [modules]="editorModules">
|
||||||
<ng-template pTemplate="header"></ng-template>
|
<ng-template pTemplate="header"></ng-template>
|
||||||
</p-editor>
|
</p-editor>
|
||||||
|
|
@ -95,14 +94,12 @@
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="mb-4 col-12 md:col-6">
|
<div class="mb-4 col-12 md:col-6">
|
||||||
<label for="price" class="block font-medium text-900 mb-2">Price</label>
|
<label for="price" class="block font-medium text-900 mb-2">Price</label>
|
||||||
<!-- <p-inputNumber mode="currency" currency="USD" locale="en-US" inputId="price" [(ngModel)]="listing.price" ></p-inputNumber> -->
|
|
||||||
<app-inputNumber mode="currency" currency="USD" locale="en-US" inputId="price" [(ngModel)]="listing.price"></app-inputNumber>
|
<app-inputNumber mode="currency" currency="USD" locale="en-US" inputId="price" [(ngModel)]="listing.price"></app-inputNumber>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4 col-12 md:col-6">
|
<div class="mb-4 col-12 md:col-6">
|
||||||
<div class="flex flex-column align-items-center flex-or">
|
<div class="flex flex-column align-items-center flex-or">
|
||||||
<span class="font-medium text-900 mb-2">Property Pictures</span>
|
<span class="font-medium text-900 mb-2">Property Pictures</span>
|
||||||
<span class="font-light text-sm text-900 mb-2">(Pictures can be uploaded once the listing is posted initially)</span>
|
<span class="font-light text-sm text-900 mb-2">(Pictures can be uploaded once the listing is posted initially)</span>
|
||||||
<!-- <img [src]="propertyPictureUrl" (error)="setImageToFallback($event)" class="image"/> -->
|
|
||||||
<p-fileUpload
|
<p-fileUpload
|
||||||
mode="basic"
|
mode="basic"
|
||||||
chooseLabel="Upload"
|
chooseLabel="Upload"
|
||||||
|
|
@ -144,4 +141,4 @@
|
||||||
</div>
|
</div>
|
||||||
<p-toast></p-toast>
|
<p-toast></p-toast>
|
||||||
<p-confirmDialog></p-confirmDialog>
|
<p-confirmDialog></p-confirmDialog>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,18 @@
|
||||||
import { Component, ViewChild } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||||
import { lastValueFrom } from 'rxjs';
|
import { lastValueFrom } from 'rxjs';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../../services/select-options.service';
|
import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { createDefaultCommercialPropertyListing, getDialogWidth, getImageDimensions, map2User, routeListingWithState } from '../../../utils/utils';
|
import { createDefaultCommercialPropertyListing, map2User, routeListingWithState } from '../../../utils/utils';
|
||||||
|
|
||||||
import { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';
|
import { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';
|
||||||
import { HttpEventType } from '@angular/common/http';
|
|
||||||
import { faTrash } from '@fortawesome/free-solid-svg-icons';
|
import { faTrash } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { AngularCropperjsModule } from 'angular-cropperjs';
|
import { AngularCropperjsModule } from 'angular-cropperjs';
|
||||||
import { MixedCdkDragDropModule } from 'angular-mixed-cdk-drag-drop';
|
import { MixedCdkDragDropModule } from 'angular-mixed-cdk-drag-drop';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
||||||
import { CarouselModule } from 'primeng/carousel';
|
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
||||||
import { DialogModule } from 'primeng/dialog';
|
|
||||||
import { DialogService, DynamicDialogModule, DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
||||||
import { EditorModule } from 'primeng/editor';
|
|
||||||
import { FileUpload, FileUploadModule } from 'primeng/fileupload';
|
|
||||||
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { AutoCompleteCompleteEvent, ImageProperty, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { AutoCompleteCompleteEvent, ImageProperty, emailToDirName } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
import { ImageCropperComponent } from '../../../components/image-cropper/image-cropper.component';
|
|
||||||
import { InputNumberModule } from '../../../components/inputnumber/inputnumber.component';
|
|
||||||
import { ArrayToStringPipe } from '../../../pipes/array-to-string.pipe';
|
import { ArrayToStringPipe } from '../../../pipes/array-to-string.pipe';
|
||||||
import { GeoService } from '../../../services/geo.service';
|
import { GeoService } from '../../../services/geo.service';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
|
|
@ -33,26 +23,13 @@ import { TOOLBAR_OPTIONS } from '../../utils/defaults';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'commercial-property-listing',
|
selector: 'commercial-property-listing',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [SharedModule, ArrayToStringPipe, AngularCropperjsModule, DragDropModule, MixedCdkDragDropModule],
|
||||||
SharedModule,
|
providers: [],
|
||||||
ArrayToStringPipe,
|
|
||||||
InputNumberModule,
|
|
||||||
CarouselModule,
|
|
||||||
DialogModule,
|
|
||||||
AngularCropperjsModule,
|
|
||||||
FileUploadModule,
|
|
||||||
EditorModule,
|
|
||||||
DynamicDialogModule,
|
|
||||||
DragDropModule,
|
|
||||||
ConfirmDialogModule,
|
|
||||||
MixedCdkDragDropModule,
|
|
||||||
],
|
|
||||||
providers: [MessageService, DialogService, ConfirmationService],
|
|
||||||
templateUrl: './edit-commercial-property-listing.component.html',
|
templateUrl: './edit-commercial-property-listing.component.html',
|
||||||
styleUrl: './edit-commercial-property-listing.component.scss',
|
styleUrl: './edit-commercial-property-listing.component.scss',
|
||||||
})
|
})
|
||||||
export class EditCommercialPropertyListingComponent {
|
export class EditCommercialPropertyListingComponent {
|
||||||
@ViewChild(FileUpload) public fileUpload: FileUpload;
|
// @ViewChild(FileUpload) public fileUpload: FileUpload;
|
||||||
listingsCategory = 'commercialProperty';
|
listingsCategory = 'commercialProperty';
|
||||||
category: string;
|
category: string;
|
||||||
location: string;
|
location: string;
|
||||||
|
|
@ -82,7 +59,7 @@ export class EditCommercialPropertyListingComponent {
|
||||||
];
|
];
|
||||||
config = { aspectRatio: 16 / 9 };
|
config = { aspectRatio: 16 / 9 };
|
||||||
editorModules = TOOLBAR_OPTIONS;
|
editorModules = TOOLBAR_OPTIONS;
|
||||||
dialogRef: DynamicDialogRef | undefined;
|
|
||||||
draggedImage: ImageProperty;
|
draggedImage: ImageProperty;
|
||||||
faTrash = faTrash;
|
faTrash = faTrash;
|
||||||
suggestions: string[] | undefined;
|
suggestions: string[] | undefined;
|
||||||
|
|
@ -97,12 +74,11 @@ export class EditCommercialPropertyListingComponent {
|
||||||
private activatedRoute: ActivatedRoute,
|
private activatedRoute: ActivatedRoute,
|
||||||
private listingsService: ListingsService,
|
private listingsService: ListingsService,
|
||||||
public userService: UserService,
|
public userService: UserService,
|
||||||
private messageService: MessageService,
|
|
||||||
private geoService: GeoService,
|
private geoService: GeoService,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
private loadingService: LoadingService,
|
private loadingService: LoadingService,
|
||||||
public dialogService: DialogService,
|
|
||||||
private confirmationService: ConfirmationService,
|
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private keycloakService: KeycloakService,
|
private keycloakService: KeycloakService,
|
||||||
) {
|
) {
|
||||||
|
|
@ -141,7 +117,7 @@ export class EditCommercialPropertyListingComponent {
|
||||||
async save() {
|
async save() {
|
||||||
this.listing = await this.listingsService.save(this.listing, this.listing.listingsCategory);
|
this.listing = await this.listingsService.save(this.listing, this.listing.listingsCategory);
|
||||||
this.router.navigate(['editCommercialPropertyListing', this.listing.id]);
|
this.router.navigate(['editCommercialPropertyListing', this.listing.id]);
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing changes have been persisted', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing changes have been persisted', life: 3000 });
|
||||||
}
|
}
|
||||||
|
|
||||||
async search(event: AutoCompleteCompleteEvent) {
|
async search(event: AutoCompleteCompleteEvent) {
|
||||||
|
|
@ -149,71 +125,71 @@ export class EditCommercialPropertyListingComponent {
|
||||||
this.suggestions = result.map(r => r.city).slice(0, 5);
|
this.suggestions = result.map(r => r.city).slice(0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
select(event: any) {
|
// select(event: any) {
|
||||||
const imageUrl = URL.createObjectURL(event.files[0]);
|
// const imageUrl = URL.createObjectURL(event.files[0]);
|
||||||
getImageDimensions(imageUrl).then(dimensions => {
|
// getImageDimensions(imageUrl).then(dimensions => {
|
||||||
const dialogWidth = getDialogWidth(dimensions);
|
// const dialogWidth = getDialogWidth(dimensions);
|
||||||
this.dialogRef = this.dialogService.open(ImageCropperComponent, {
|
// this.dialogRef = this.dialogService.open(ImageCropperComponent, {
|
||||||
data: {
|
// data: {
|
||||||
imageUrl: imageUrl,
|
// imageUrl: imageUrl,
|
||||||
fileUpload: this.fileUpload,
|
// fileUpload: this.fileUpload,
|
||||||
ratioVariable: false,
|
// ratioVariable: false,
|
||||||
},
|
// },
|
||||||
header: 'Edit Image',
|
// header: 'Edit Image',
|
||||||
width: dialogWidth,
|
// width: dialogWidth,
|
||||||
modal: true,
|
// modal: true,
|
||||||
closeOnEscape: true,
|
// closeOnEscape: true,
|
||||||
keepInViewport: true,
|
// keepInViewport: true,
|
||||||
closable: false,
|
// closable: false,
|
||||||
breakpoints: {
|
// breakpoints: {
|
||||||
'960px': '75vw',
|
// '960px': '75vw',
|
||||||
'640px': '90vw',
|
// '640px': '90vw',
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
this.dialogRef.onClose.subscribe(cropper => {
|
// this.dialogRef.onClose.subscribe(cropper => {
|
||||||
if (cropper) {
|
// if (cropper) {
|
||||||
this.loadingService.startLoading('uploadImage');
|
// this.loadingService.startLoading('uploadImage');
|
||||||
cropper.getCroppedCanvas().toBlob(async blob => {
|
// cropper.getCroppedCanvas().toBlob(async blob => {
|
||||||
this.imageService.uploadImage(blob, 'uploadPropertyPicture', this.listing.imagePath, this.listing.serialId).subscribe(
|
// this.imageService.uploadImage(blob, 'uploadPropertyPicture', this.listing.imagePath, this.listing.serialId).subscribe(
|
||||||
async event => {
|
// async event => {
|
||||||
if (event.type === HttpEventType.Response) {
|
// if (event.type === HttpEventType.Response) {
|
||||||
this.ts = new Date().getTime();
|
// this.ts = new Date().getTime();
|
||||||
console.log('Upload abgeschlossen', event.body);
|
// console.log('Upload abgeschlossen', event.body);
|
||||||
this.loadingService.stopLoading('uploadImage');
|
// this.loadingService.stopLoading('uploadImage');
|
||||||
this.listing = await lastValueFrom(this.listingsService.getListingById(this.id, 'commercialProperty'));
|
// this.listing = await lastValueFrom(this.listingsService.getListingById(this.id, 'commercialProperty'));
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
error => console.error('Fehler beim Upload:', error),
|
// error => console.error('Fehler beim Upload:', error),
|
||||||
);
|
// );
|
||||||
}, 'image/jpg');
|
// }, 'image/jpg');
|
||||||
cropper.destroy();
|
// cropper.destroy();
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
deleteConfirm(imageName: string) {
|
// deleteConfirm(imageName: string) {
|
||||||
this.confirmationService.confirm({
|
// this.confirmationService.confirm({
|
||||||
target: event.target as EventTarget,
|
// target: event.target as EventTarget,
|
||||||
message: `Do you want to delete this image ${imageName}?`,
|
// message: `Do you want to delete this image ${imageName}?`,
|
||||||
header: 'Delete Confirmation',
|
// header: 'Delete Confirmation',
|
||||||
icon: 'pi pi-info-circle',
|
// icon: 'pi pi-info-circle',
|
||||||
acceptButtonStyleClass: 'p-button-danger p-button-text',
|
// acceptButtonStyleClass: 'p-button-danger p-button-text',
|
||||||
rejectButtonStyleClass: 'p-button-text p-button-text',
|
// rejectButtonStyleClass: 'p-button-text p-button-text',
|
||||||
acceptIcon: 'none',
|
// acceptIcon: 'none',
|
||||||
rejectIcon: 'none',
|
// rejectIcon: 'none',
|
||||||
|
|
||||||
accept: async () => {
|
// accept: async () => {
|
||||||
this.listing.imageOrder = this.listing.imageOrder.filter(item => item !== imageName);
|
// this.listing.imageOrder = this.listing.imageOrder.filter(item => item !== imageName);
|
||||||
await Promise.all([this.imageService.deleteListingImage(this.listing.imagePath, this.listing.serialId, imageName), this.listingsService.save(this.listing, 'commercialProperty')]);
|
// await Promise.all([this.imageService.deleteListingImage(this.listing.imagePath, this.listing.serialId, imageName), this.listingsService.save(this.listing, 'commercialProperty')]);
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Image deleted' });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Image deleted' });
|
||||||
},
|
// },
|
||||||
reject: () => {
|
// reject: () => {
|
||||||
// this.messageService.add({ severity: 'error', summary: 'Rejected', detail: 'You have rejected' });
|
// // this.messageService.add({ severity: 'error', summary: 'Rejected', detail: 'You have rejected' });
|
||||||
console.log('deny');
|
// console.log('deny');
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
onDrop(event: { previousIndex: number; currentIndex: number }) {
|
onDrop(event: { previousIndex: number; currentIndex: number }) {
|
||||||
moveItemInArray(this.listing.imageOrder, event.previousIndex, event.currentIndex);
|
moveItemInArray(this.listing.imageOrder, event.previousIndex, event.currentIndex);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
<!-- <div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
<div class="p-fluid flex flex-column lg:flex-row">
|
||||||
<menu-account></menu-account>
|
<menu-account></menu-account>
|
||||||
<div class="surface-card p-5 shadow-2 border-round flex-auto">
|
<div class="surface-card p-5 shadow-2 border-round flex-auto">
|
||||||
|
|
@ -31,4 +31,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
|
|
||||||
import { MessageService } from 'primeng/api';
|
|
||||||
import { InputMaskModule } from 'primeng/inputmask';
|
|
||||||
import { User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ErrorResponse, KeycloakUser, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ErrorResponse, KeycloakUser, MailInfo } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
|
|
@ -13,8 +11,8 @@ import { map2User } from '../../../utils/utils';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-email-us',
|
selector: 'app-email-us',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SharedModule, InputMaskModule],
|
imports: [SharedModule],
|
||||||
providers: [MessageService],
|
providers: [],
|
||||||
templateUrl: './email-us.component.html',
|
templateUrl: './email-us.component.html',
|
||||||
styleUrl: './email-us.component.scss',
|
styleUrl: './email-us.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -23,7 +21,7 @@ export class EmailUsComponent {
|
||||||
keycloakUser: KeycloakUser;
|
keycloakUser: KeycloakUser;
|
||||||
user: User;
|
user: User;
|
||||||
errorResponse: ErrorResponse;
|
errorResponse: ErrorResponse;
|
||||||
constructor(private mailService: MailService, private userService: UserService, public keycloakService: KeycloakService, private messageService: MessageService) {
|
constructor(private mailService: MailService, private userService: UserService, public keycloakService: KeycloakService) {
|
||||||
this.mailinfo = { sender: {}, userId: '', email: '', url: environment.mailinfoUrl };
|
this.mailinfo = { sender: {}, userId: '', email: '', url: environment.mailinfoUrl };
|
||||||
}
|
}
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
|
|
@ -41,7 +39,7 @@ export class EmailUsComponent {
|
||||||
this.errorResponse = result as ErrorResponse;
|
this.errorResponse = result as ErrorResponse;
|
||||||
} else {
|
} else {
|
||||||
this.errorResponse = null;
|
this.errorResponse = null;
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your request has been forwarded to the support team of bizmatch.', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Your request has been forwarded to the support team of bizmatch.', life: 3000 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
containsError(fieldname: string) {
|
containsError(fieldname: string) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
|
<!--
|
||||||
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
<div class="p-fluid flex flex-column lg:flex-row">
|
||||||
<menu-account></menu-account>
|
<menu-account></menu-account>
|
||||||
|
|
@ -27,4 +27,4 @@
|
||||||
</p-table>
|
</p-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,11 @@ import { ListingsService } from '../../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../../services/select-options.service';
|
import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { SharedModule } from '../../../shared/shared/shared.module';
|
import { SharedModule } from '../../../shared/shared/shared.module';
|
||||||
import { map2User } from '../../../utils/utils';
|
import { map2User } from '../../../utils/utils';
|
||||||
import { MenuAccountComponent } from '../../menu-account/menu-account.component';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-favorites',
|
selector: 'app-favorites',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [MenuAccountComponent, SharedModule],
|
imports: [SharedModule],
|
||||||
templateUrl: './favorites.component.html',
|
templateUrl: './favorites.component.html',
|
||||||
styleUrl: './favorites.component.scss',
|
styleUrl: './favorites.component.scss',
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
<!-- <div class="surface-ground px-4 py-8 md:px-6 lg:px-8 h-full">
|
||||||
<div class="p-fluid flex flex-column lg:flex-row">
|
<div class="p-fluid flex flex-column lg:flex-row">
|
||||||
<menu-account></menu-account>
|
<menu-account></menu-account>
|
||||||
<p-toast></p-toast>
|
<p-toast></p-toast>
|
||||||
|
|
@ -42,4 +42,4 @@
|
||||||
</p-table>
|
</p-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { ChangeDetectorRef, Component } from '@angular/core';
|
import { ChangeDetectorRef, Component } from '@angular/core';
|
||||||
import { KeycloakService } from 'keycloak-angular';
|
import { KeycloakService } from 'keycloak-angular';
|
||||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
||||||
import { CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ListingType } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { ListingType } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
|
|
@ -8,12 +7,12 @@ import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { UserService } from '../../../services/user.service';
|
import { UserService } from '../../../services/user.service';
|
||||||
import { SharedModule } from '../../../shared/shared/shared.module';
|
import { SharedModule } from '../../../shared/shared/shared.module';
|
||||||
import { map2User } from '../../../utils/utils';
|
import { map2User } from '../../../utils/utils';
|
||||||
import { MenuAccountComponent } from '../../menu-account/menu-account.component';
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-my-listing',
|
selector: 'app-my-listing',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [MenuAccountComponent, SharedModule],
|
imports: [SharedModule],
|
||||||
providers: [ConfirmationService, MessageService],
|
providers: [],
|
||||||
templateUrl: './my-listing.component.html',
|
templateUrl: './my-listing.component.html',
|
||||||
styleUrl: './my-listing.component.scss',
|
styleUrl: './my-listing.component.scss',
|
||||||
})
|
})
|
||||||
|
|
@ -21,15 +20,7 @@ export class MyListingComponent {
|
||||||
listings: Array<ListingType> = []; //dataListings as unknown as Array<BusinessListing>;
|
listings: Array<ListingType> = []; //dataListings as unknown as Array<BusinessListing>;
|
||||||
myListings: Array<ListingType>;
|
myListings: Array<ListingType>;
|
||||||
user: User;
|
user: User;
|
||||||
constructor(
|
constructor(public userService: UserService, public keycloakService: KeycloakService, private listingsService: ListingsService, private cdRef: ChangeDetectorRef, public selectOptions: SelectOptionsService) {}
|
||||||
public userService: UserService,
|
|
||||||
public keycloakService: KeycloakService,
|
|
||||||
private listingsService: ListingsService,
|
|
||||||
private cdRef: ChangeDetectorRef,
|
|
||||||
public selectOptions: SelectOptionsService,
|
|
||||||
private confirmationService: ConfirmationService,
|
|
||||||
private messageService: MessageService,
|
|
||||||
) {}
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
// const keycloakUser = this.userService.getKeycloakUser();
|
// const keycloakUser = this.userService.getKeycloakUser();
|
||||||
const token = await this.keycloakService.getToken();
|
const token = await this.keycloakService.getToken();
|
||||||
|
|
@ -51,14 +42,14 @@ export class MyListingComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
confirm(event: Event, listing: ListingType) {
|
confirm(event: Event, listing: ListingType) {
|
||||||
this.confirmationService.confirm({
|
// this.confirmationService.confirm({
|
||||||
target: event.target as EventTarget,
|
// target: event.target as EventTarget,
|
||||||
message: 'Are you sure you want to delet this listing?',
|
// message: 'Are you sure you want to delet this listing?',
|
||||||
icon: 'pi pi-exclamation-triangle',
|
// icon: 'pi pi-exclamation-triangle',
|
||||||
accept: () => {
|
// accept: () => {
|
||||||
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing has been deleted', life: 3000 });
|
// this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Listing has been deleted', life: 3000 });
|
||||||
this.deleteListing(listing);
|
// this.deleteListing(listing);
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,455 +0,0 @@
|
||||||
<section id="content" role="main">
|
|
||||||
<article
|
|
||||||
id="post-1"
|
|
||||||
class="post-1 page type-page status-publish hentry pmpro-has-access"
|
|
||||||
>
|
|
||||||
<section class="entry-content">
|
|
||||||
<div class="container" style="padding: 3.5% 0 3.75% 0 !important">
|
|
||||||
<b><span>AGREEMENT BETWEEN USER AND BizMatch</span></b
|
|
||||||
><span
|
|
||||||
><p></p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The BizMatch Web Site is comprised of various Web pages operated
|
|
||||||
by BizMatch.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The BizMatch Web Site is offered to you conditioned on your
|
|
||||||
acceptance without modification of the terms, conditions, and
|
|
||||||
notices contained herein. Your use of the BizMatch Web Site
|
|
||||||
constitutes your agreement to all such terms, conditions, and
|
|
||||||
notices.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>MODIFICATION OF THESE TERMS OF USE</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>BizMatch reserves the right to change the terms, conditions, and
|
|
||||||
notices under which the BizMatch Web Site is offered, including
|
|
||||||
but not limited to the charges associated with the use of the
|
|
||||||
BizMatch Web Site.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>LINKS TO THIRD PARTY SITES</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The BizMatch Web Site may contain links to other Web Sites
|
|
||||||
("Linked Sites"). The Linked Sites are not under the control of
|
|
||||||
BizMatch and BizMatch is not responsible for the contents of any
|
|
||||||
Linked Site, including without limitation any link contained in a
|
|
||||||
Linked Site, or any changes or updates to a Linked Site. BizMatch
|
|
||||||
is not responsible for webcasting or any other form of
|
|
||||||
transmission received from any Linked Site. BizMatch is providing
|
|
||||||
these links to you only as a convenience, and the inclusion of any
|
|
||||||
link does not imply endorsement by BizMatch of the site or any
|
|
||||||
association with its operators.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>NO UNLAWFUL OR PROHIBITED USE</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>As a condition of your use of the BizMatch Web Site, you warrant
|
|
||||||
to BizMatch that you will not use the BizMatch Web Site for any
|
|
||||||
purpose that is unlawful or prohibited by these terms, conditions,
|
|
||||||
and notices. You may not use the BizMatch Web Site in any manner
|
|
||||||
which could damage, disable, overburden, or impair the BizMatch
|
|
||||||
Web Site or interfere with any other party’s use and enjoyment of
|
|
||||||
the BizMatch Web Site. You may not obtain or attempt to obtain any
|
|
||||||
materials or information through any means not intentionally made
|
|
||||||
available or provided for through the BizMatch Web Sites.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>USE OF COMMUNICATION SERVICES</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The BizMatch Web Site may contain bulletin board services, chat
|
|
||||||
areas, news groups, forums, communities, personal web pages,
|
|
||||||
calendars, and/or other message or communication facilities
|
|
||||||
designed to enable you to communicate with the public at large or
|
|
||||||
with a group (collectively, "Communication Services"), you agree
|
|
||||||
to use the Communication Services only to post, send and receive
|
|
||||||
messages and material that are proper and related to the
|
|
||||||
particular Communication Service. By way of example, and not as a
|
|
||||||
limitation, you agree that when using a Communication Service, you
|
|
||||||
will not:</span
|
|
||||||
><span><o p=""></o></span>
|
|
||||||
</p>
|
|
||||||
<p> </p>
|
|
||||||
<p class="MsoNormal"><!--[if !supportLists]--></p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Defame, abuse, harass, stalk, threaten or otherwise violate the
|
|
||||||
legal rights (such as rights of privacy and publicity) of
|
|
||||||
others.</span
|
|
||||||
><span><o p=""></o></span>
|
|
||||||
</p>
|
|
||||||
<p> </p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Publish, post, upload, distribute or disseminate any
|
|
||||||
inappropriate, profane, defamatory, infringing, obscene, indecent
|
|
||||||
or unlawful topic, name, material or information.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Upload files that contain software or other material protected by
|
|
||||||
intellectual property laws (or by rights of privacy of publicity)
|
|
||||||
unless you own or control the rights thereto or have received all
|
|
||||||
necessary consents.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Upload files that contain viruses, corrupted files, or any other
|
|
||||||
similar software or programs that may damage the operation of
|
|
||||||
another’s computer.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Advertise or offer to sell or buy any goods or services for any
|
|
||||||
business purpose, unless such Communication Service specifically
|
|
||||||
allows such messages.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Conduct or forward surveys, contests, pyramid schemes or chain
|
|
||||||
letters.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Download any file posted by another user of a Communication
|
|
||||||
Service that you know, or reasonably should know, cannot be
|
|
||||||
legally distributed in such manner.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Falsify or delete any author attributions, legal or other proper
|
|
||||||
notices or proprietary designations or labels of the origin or
|
|
||||||
source of software or other material contained in a file that is
|
|
||||||
uploaded.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Restrict or inhibit any other user from using and enjoying the
|
|
||||||
Communication Services.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Violate any code of conduct or other guidelines which may be
|
|
||||||
applicable for any particular Communication Service.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Harvest or otherwise collect information about others, including
|
|
||||||
e-mail addresses, without their consent.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<!--[if !supportLists]--><span
|
|
||||||
><span>§<span> </span></span></span
|
|
||||||
><!--[endif]--><span
|
|
||||||
>Violate any applicable laws or regulations.<o p=""></o
|
|
||||||
></span>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
<span
|
|
||||||
>BizMatch has no obligation to monitor the Communication Services.
|
|
||||||
However, BizMatch reserves the right to review materials posted to
|
|
||||||
a Communication Service and to remove any materials in its sole
|
|
||||||
discretion. BizMatch reserves the right to terminate your access
|
|
||||||
to any or all of the Communication Services at any time without
|
|
||||||
notice for any reason whatsoever.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>BizMatch reserves the right at all times to disclose any
|
|
||||||
information as necessary to satisfy any applicable law,
|
|
||||||
regulation, legal process or governmental request, or to edit,
|
|
||||||
refuse to post or to remove any information or materials, in whole
|
|
||||||
or in part, in BizMatch’s sole discretion.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>Always use caution when giving out any personally identifying
|
|
||||||
information about yourself or your children in any Communication
|
|
||||||
Service. BizMatch does not control or endorse the content,
|
|
||||||
messages or information found in any Communication Service and,
|
|
||||||
therefore, BizMatch specifically disclaims any liability with
|
|
||||||
regard to the Communication Services and any actions resulting
|
|
||||||
from your participation in any Communication Service. Managers and
|
|
||||||
hosts are not authorized BizMatch spokespersons, and their views
|
|
||||||
do not necessarily reflect those of BizMatch.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>Materials uploaded to a Communication Service may be subject to
|
|
||||||
posted limitations on usage, reproduction and/or dissemination.
|
|
||||||
You are responsible for adhering to such limitations if you
|
|
||||||
download the materials.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b
|
|
||||||
><span
|
|
||||||
>MATERIALS PROVIDED TO BizMatch OR POSTED AT ANY BizMatch WEB
|
|
||||||
SITE</span
|
|
||||||
></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>BizMatch does not claim ownership of the materials you provide to
|
|
||||||
BizMatch (including feedback and suggestions) or post, upload,
|
|
||||||
input or submit to any BizMatch Web Site or its associated
|
|
||||||
services (collectively "Submissions"). However, by posting,
|
|
||||||
uploading, inputting, providing or submitting your Submission you
|
|
||||||
are granting BizMatch, its affiliated companies and necessary
|
|
||||||
sublicensees permission to use your Submission in connection with
|
|
||||||
the operation of their Internet businesses including, without
|
|
||||||
limitation, the rights to: copy, distribute, transmit, publicly
|
|
||||||
display, publicly perform, reproduce, edit, translate and reformat
|
|
||||||
your Submission; and to publish your name in connection with your
|
|
||||||
Submission.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>No compensation will be paid with respect to the use of your
|
|
||||||
Submission, as provided herein. BizMatch is under no obligation to
|
|
||||||
post or use any Submission you may provide and may remove any
|
|
||||||
Submission at any time in BizMatch’s sole discretion.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>By posting, uploading, inputting, providing or submitting your
|
|
||||||
Submission you warrant and represent that you own or otherwise
|
|
||||||
control all of the rights to your Submission as described in this
|
|
||||||
section including, without limitation, all the rights necessary
|
|
||||||
for you to provide, post, upload, input or submit the
|
|
||||||
Submissions.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>LIABILITY DISCLAIMER</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>THE INFORMATION, SOFTWARE, PRODUCTS, AND SERVICES INCLUDED IN OR
|
|
||||||
AVAILABLE THROUGH THE BizMatch WEB SITE MAY INCLUDE INACCURACIES
|
|
||||||
OR TYPOGRAPHICAL ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE
|
|
||||||
INFORMATION HEREIN. BizMatch AND/OR ITS SUPPLIERS MAY MAKE
|
|
||||||
IMPROVEMENTS AND/OR CHANGES IN THE BizMatch WEB SITE AT ANY TIME.
|
|
||||||
ADVICE RECEIVED VIA THE BizMatch WEB SITE SHOULD NOT BE RELIED
|
|
||||||
UPON FOR PERSONAL, MEDICAL, LEGAL OR FINANCIAL DECISIONS AND YOU
|
|
||||||
SHOULD CONSULT AN APPROPRIATE PROFESSIONAL FOR SPECIFIC ADVICE
|
|
||||||
TAILORED TO YOUR SITUATION.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>BizMatch AND/OR ITS SUPPLIERS MAKE NO REPRESENTATIONS ABOUT THE
|
|
||||||
SUITABILITY, RELIABILITY, AVAILABILITY, TIMELINESS, AND ACCURACY
|
|
||||||
OF THE INFORMATION, SOFTWARE, PRODUCTS, SERVICES AND RELATED
|
|
||||||
GRAPHICS CONTAINED ON THE BizMatch WEB SITE FOR ANY PURPOSE. TO
|
|
||||||
THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, ALL SUCH
|
|
||||||
INFORMATION, SOFTWARE, PRODUCTS, SERVICES AND RELATED GRAPHICS ARE
|
|
||||||
PROVIDED "AS IS" WITHOUT WARRANTY OR CONDITION OF ANY KIND.
|
|
||||||
BizMatch AND/OR ITS SUPPLIERS HEREBY DISCLAIM ALL WARRANTIES AND
|
|
||||||
CONDITIONS WITH REGARD TO THIS INFORMATION, SOFTWARE, PRODUCTS,
|
|
||||||
SERVICES AND RELATED GRAPHICS, INCLUDING ALL IMPLIED WARRANTIES OR
|
|
||||||
CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
|
|
||||||
TITLE AND NON-INFRINGEMENT.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT
|
|
||||||
SHALL BizMatch AND/OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT,
|
|
||||||
INDIRECT, PUNITIVE, INCIDENTAL, SPECIAL, CONSEQUENTIAL DAMAGES OR
|
|
||||||
ANY DAMAGES WHATSOEVER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
|
|
||||||
LOSS OF USE, DATA OR PROFITS, ARISING OUT OF OR IN ANY WAY
|
|
||||||
CONNECTED WITH THE USE OR PERFORMANCE OF THE BizMatch WEB SITE,
|
|
||||||
WITH THE DELAY OR INABILITY TO USE THE BizMatch WEB SITE OR
|
|
||||||
RELATED SERVICES, THE PROVISION OF OR FAILURE TO PROVIDE SERVICES,
|
|
||||||
OR FOR ANY INFORMATION, SOFTWARE, PRODUCTS, SERVICES AND RELATED
|
|
||||||
GRAPHICS OBTAINED THROUGH THE BizMatch WEB SITE, OR OTHERWISE
|
|
||||||
ARISING OUT OF THE USE OF THE BizMatch WEB SITE, WHETHER BASED ON
|
|
||||||
CONTRACT, TORT, NEGLIGENCE, STRICT LIABILITY OR OTHERWISE, EVEN IF
|
|
||||||
BizMatch OR ANY OF ITS SUPPLIERS HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF DAMAGES. BECAUSE SOME STATES/JURISDICTIONS DO NOT
|
|
||||||
ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL
|
|
||||||
OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.
|
|
||||||
IF YOU ARE DISSATISFIED WITH ANY PORTION OF THE BizMatch WEB SITE,
|
|
||||||
OR WITH ANY OF THESE TERMS OF USE, YOUR SOLE AND EXCLUSIVE REMEDY
|
|
||||||
IS TO DISCONTINUE USING THE BizMatch WEB SITE.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span>SERVICE CONTACT : bizmatch@biz-match.com</span><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>TERMINATION/ACCESS RESTRICTION</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>BizMatch reserves the right, in its sole discretion, to terminate
|
|
||||||
your access to the BizMatch Web Site and the related services or
|
|
||||||
any portion thereof at any time, without notice. GENERAL To the
|
|
||||||
maximum extent permitted by law, this agreement is governed by the
|
|
||||||
laws of the State of Washington, U.S.A. and you hereby consent to
|
|
||||||
the exclusive jurisdiction and venue of courts in King County,
|
|
||||||
Washington, U.S.A. in all disputes arising out of or relating to
|
|
||||||
the use of the BizMatch Web Site. Use of the BizMatch Web Site is
|
|
||||||
unauthorized in any jurisdiction that does not give effect to all
|
|
||||||
provisions of these terms and conditions, including without
|
|
||||||
limitation this paragraph. You agree that no joint venture,
|
|
||||||
partnership, employment, or agency relationship exists between you
|
|
||||||
and BizMatch as a result of this agreement or use of the BizMatch
|
|
||||||
Web Site. BizMatch’s performance of this agreement is subject to
|
|
||||||
existing laws and legal process, and nothing contained in this
|
|
||||||
agreement is in derogation of BizMatch’s right to comply with
|
|
||||||
governmental, court and law enforcement requests or requirements
|
|
||||||
relating to your use of the BizMatch Web Site or information
|
|
||||||
provided to or gathered by BizMatch with respect to such use. If
|
|
||||||
any part of this agreement is determined to be invalid or
|
|
||||||
unenforceable pursuant to applicable law including, but not
|
|
||||||
limited to, the warranty disclaimers and liability limitations set
|
|
||||||
forth above, then the invalid or unenforceable provision will be
|
|
||||||
deemed superseded by a valid, enforceable provision that most
|
|
||||||
closely matches the intent of the original provision and the
|
|
||||||
remainder of the agreement shall continue in effect. Unless
|
|
||||||
otherwise specified herein, this agreement constitutes the entire
|
|
||||||
agreement between the user and BizMatch with respect to the
|
|
||||||
BizMatch Web Site and it supersedes all prior or contemporaneous
|
|
||||||
communications and proposals, whether electronic, oral or written,
|
|
||||||
between the user and BizMatch with respect to the BizMatch Web
|
|
||||||
Site. A printed version of this agreement and of any notice given
|
|
||||||
in electronic form shall be admissible in judicial or
|
|
||||||
administrative proceedings based upon or relating to this
|
|
||||||
agreement to the same extent an d subject to the same conditions
|
|
||||||
as other business documents and records originally generated and
|
|
||||||
maintained in printed form. It is the express wish to the parties
|
|
||||||
that this agreement and all related documents be drawn up in
|
|
||||||
English.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>COPYRIGHT AND TRADEMARK NOTICES:</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>All contents of the BizMatch Web Site are: Copyright 2011 by
|
|
||||||
Bizmatch Business Solutions and/or its suppliers. All rights
|
|
||||||
reserved.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b><span>TRADEMARKS</span></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The names of actual companies and products mentioned herein may
|
|
||||||
be the trademarks of their respective owners.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>The example companies, organizations, products, people and events
|
|
||||||
depicted herein are fictitious. No association with any real
|
|
||||||
company, organization, product, person, or event is intended or
|
|
||||||
should be inferred.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span>Any rights not expressly granted herein are reserved.</span
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b
|
|
||||||
><span
|
|
||||||
>NOTICES AND PROCEDURE FOR MAKING CLAIMS OF COPYRIGHT
|
|
||||||
INFRINGEMENT</span
|
|
||||||
></b
|
|
||||||
><span></span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<span
|
|
||||||
>Pursuant to Title 17, United States Code, Section 512(c)(2),
|
|
||||||
notifications of claimed copyright infringement under United
|
|
||||||
States copyright law should be sent to Service Provider’s
|
|
||||||
Designated Agent. ALL INQUIRIES NOT RELEVANT TO THE FOLLOWING
|
|
||||||
PROCEDURE WILL RECEIVE NO RESPONSE. See Notice and Procedure for
|
|
||||||
Making Claims of Copyright Infringement.</span
|
|
||||||
><span
|
|
||||||
><br />
|
|
||||||
<!--[if !supportLineBreakNewLine]--></span
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
<p class="MsoNormal"> </p>
|
|
||||||
<p class="MsoNormal">
|
|
||||||
We reserve the right to update or revise these Terms of Use at any
|
|
||||||
time without notice. Please check the Terms of Use periodically
|
|
||||||
for changes. The revised terms will be effective immediately as
|
|
||||||
soon as they are posted on the WebSite and by continuing to use
|
|
||||||
the Site you agree to be bound by the revised terms<span
|
|
||||||
><br />
|
|
||||||
<!--[endif]--></span
|
|
||||||
>
|
|
||||||
</p></span
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
import { Component } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-terms-of-use',
|
|
||||||
standalone: true,
|
|
||||||
imports: [],
|
|
||||||
templateUrl: './terms-of-use.component.html',
|
|
||||||
styleUrl: './terms-of-use.component.scss'
|
|
||||||
})
|
|
||||||
export class TermsOfUseComponent {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -64,4 +64,7 @@ export class SelectOptionsService {
|
||||||
const category = this.typesOfBusiness.find(c => c.value === String(value));
|
const category = this.typesOfBusiness.find(c => c.value === String(value));
|
||||||
return `${category?.icon} ${category?.textColorClass}`;
|
return `${category?.icon} ${category?.textColorClass}`;
|
||||||
}
|
}
|
||||||
|
getIconTypeOfCommercials(value: number): string {
|
||||||
|
return this.typesOfCommercialProperty.find(c => c.value === String(value))?.icon;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,72 +3,9 @@ import { NgModule } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||||
import { AutoCompleteModule } from 'primeng/autocomplete';
|
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { ChipModule } from 'primeng/chip';
|
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
||||||
import { ConfirmPopupModule } from 'primeng/confirmpopup';
|
|
||||||
import { DividerModule } from 'primeng/divider';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { InputGroupModule } from 'primeng/inputgroup';
|
|
||||||
import { InputNumberModule } from 'primeng/inputnumber';
|
|
||||||
import { InputSwitchModule } from 'primeng/inputswitch';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { InputTextareaModule } from 'primeng/inputtextarea';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { TableModule } from 'primeng/table';
|
|
||||||
import { TagModule } from 'primeng/tag';
|
|
||||||
import { ToastModule } from 'primeng/toast';
|
|
||||||
import { MenuAccountComponent } from '../../pages/menu-account/menu-account.component';
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [],
|
declarations: [],
|
||||||
imports: [
|
imports: [CommonModule, FormsModule, RouterModule, FontAwesomeModule],
|
||||||
CommonModule,
|
exports: [CommonModule, FormsModule, RouterModule, FontAwesomeModule],
|
||||||
StyleClassModule,
|
|
||||||
DividerModule,
|
|
||||||
ButtonModule,
|
|
||||||
TableModule,
|
|
||||||
InputTextModule,
|
|
||||||
DropdownModule,
|
|
||||||
FormsModule,
|
|
||||||
ChipModule,
|
|
||||||
InputTextareaModule,
|
|
||||||
RouterModule,
|
|
||||||
FontAwesomeModule,
|
|
||||||
MenuAccountComponent,
|
|
||||||
InputNumberModule,
|
|
||||||
ConfirmDialogModule,
|
|
||||||
ConfirmPopupModule,
|
|
||||||
ToastModule,
|
|
||||||
CheckboxModule,
|
|
||||||
AutoCompleteModule,
|
|
||||||
InputSwitchModule,
|
|
||||||
InputGroupModule,
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
CommonModule,
|
|
||||||
StyleClassModule,
|
|
||||||
DividerModule,
|
|
||||||
ButtonModule,
|
|
||||||
TableModule,
|
|
||||||
InputTextModule,
|
|
||||||
DropdownModule,
|
|
||||||
FormsModule,
|
|
||||||
ChipModule,
|
|
||||||
InputTextareaModule,
|
|
||||||
RouterModule,
|
|
||||||
FontAwesomeModule,
|
|
||||||
MenuAccountComponent,
|
|
||||||
InputNumberModule,
|
|
||||||
ConfirmDialogModule,
|
|
||||||
ConfirmPopupModule,
|
|
||||||
ToastModule,
|
|
||||||
CheckboxModule,
|
|
||||||
AutoCompleteModule,
|
|
||||||
TagModule,
|
|
||||||
InputSwitchModule,
|
|
||||||
InputGroupModule,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
export class SharedModule {}
|
export class SharedModule {}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// @import 'primeng/resources/primeng.css';
|
// @import 'primeng/resources/primeng.css';
|
||||||
// @import 'primeicons/primeicons.css';
|
// @import 'primeicons/primeicons.css';
|
||||||
|
@import '@ng-select/ng-select/themes/default.theme.css';
|
||||||
// @import 'primeflex/primeflex.css';
|
// @import 'primeflex/primeflex.css';
|
||||||
@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');
|
@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');
|
||||||
// @import 'primeng/resources/themes/lara-light-blue/theme.css';
|
// @import 'primeng/resources/themes/lara-light-blue/theme.css';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue