guest page
This commit is contained in:
30
package-lock.json
generated
30
package-lock.json
generated
@@ -5905,6 +5905,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
|
||||||
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
|
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
|
||||||
},
|
},
|
||||||
|
"dom7": {
|
||||||
|
"version": "2.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/dom7/-/dom7-2.1.5.tgz",
|
||||||
|
"integrity": "sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==",
|
||||||
|
"requires": {
|
||||||
|
"ssr-window": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"domain-browser": {
|
"domain-browser": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
|
||||||
@@ -11368,6 +11376,14 @@
|
|||||||
"resize-observer-polyfill": "^1.5.0"
|
"resize-observer-polyfill": "^1.5.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ngx-swiper-wrapper": {
|
||||||
|
"version": "9.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ngx-swiper-wrapper/-/ngx-swiper-wrapper-9.0.1.tgz",
|
||||||
|
"integrity": "sha512-Bm0zZZiJSn+Ubif4zLMJ0A4RmKSS4utCnmjpeNCLH4Y2rwLyYMoVggF+zpxhiPZ5f+xVc2QBped3VZvu1tzL9w==",
|
||||||
|
"requires": {
|
||||||
|
"swiper": "^5.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nice-try": {
|
"nice-try": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
||||||
@@ -15152,6 +15168,11 @@
|
|||||||
"tweetnacl": "~0.14.0"
|
"tweetnacl": "~0.14.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ssr-window": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A=="
|
||||||
|
},
|
||||||
"ssri": {
|
"ssri": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
|
||||||
@@ -15660,6 +15681,15 @@
|
|||||||
"util.promisify": "~1.0.0"
|
"util.promisify": "~1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"swiper": {
|
||||||
|
"version": "5.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/swiper/-/swiper-5.4.5.tgz",
|
||||||
|
"integrity": "sha512-7QjA0XpdOmiMoClfaZ2lYN6ICHcMm72LXiY+NF4fQLFidigameaofvpjEEiTQuw3xm5eksG5hzkaRsjQX57vtA==",
|
||||||
|
"requires": {
|
||||||
|
"dom7": "^2.1.5",
|
||||||
|
"ssr-window": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"symbol-observable": {
|
"symbol-observable": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
"build": "ng build",
|
"build": "ng build",
|
||||||
"deploy": "ng build --prod && firebase deploy",
|
"deploy": "ng build --prod && firebase deploy",
|
||||||
"test": "ng test",
|
"test": "ng test",
|
||||||
"lint": "ng lint --fix"
|
"lint": "ng lint --fix",
|
||||||
|
"postinstall": "ngcc"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
"ngx-hocs-unsubscriber": "^1.1.7",
|
"ngx-hocs-unsubscriber": "^1.1.7",
|
||||||
"ngx-mat-select-search": "^2.1.2",
|
"ngx-mat-select-search": "^2.1.2",
|
||||||
"ngx-perfect-scrollbar": "^9.0.0",
|
"ngx-perfect-scrollbar": "^9.0.0",
|
||||||
|
"ngx-swiper-wrapper": "^9.0.1",
|
||||||
"rxjs": "~6.5.5",
|
"rxjs": "~6.5.5",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"zone.js": "~0.10.2"
|
"zone.js": "~0.10.2"
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: 'brand',
|
path: 'brand',
|
||||||
loadChildren: () => import('./modules/brand/brand.module').then(m => m.BrandModule),
|
loadChildren: () => import('./modules/brand/brand.module').then(m => m.BrandModule),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'guest',
|
||||||
|
loadChildren: () => import('./modules/guest/guest.module').then(m => m.GuestModule),
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
8
src/app/modules/guest/guest.component.html
Normal file
8
src/app/modules/guest/guest.component.html
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<div *ngIf="songs$|async as songs" class="view">
|
||||||
|
<swiper>
|
||||||
|
<div *ngFor="let song of songs" class="song">
|
||||||
|
<app-song-text [showSwitch]="false" [text]="song|async"
|
||||||
|
chordMode="hide"></app-song-text>
|
||||||
|
</div>
|
||||||
|
</swiper>
|
||||||
|
</div>
|
||||||
16
src/app/modules/guest/guest.component.less
Normal file
16
src/app/modules/guest/guest.component.less
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.view {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: #0003;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
z-index: 1;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
app-song-text {
|
||||||
|
margin: 20px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
25
src/app/modules/guest/guest.component.spec.ts
Normal file
25
src/app/modules/guest/guest.component.spec.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
|
||||||
|
import {GuestComponent} from './guest.component';
|
||||||
|
|
||||||
|
describe('GuestComponent', () => {
|
||||||
|
let component: GuestComponent;
|
||||||
|
let fixture: ComponentFixture<GuestComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [GuestComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(GuestComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
35
src/app/modules/guest/guest.component.ts
Normal file
35
src/app/modules/guest/guest.component.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import {Component, OnInit} from '@angular/core';
|
||||||
|
import {SongService} from '../songs/services/song.service';
|
||||||
|
import {GlobalSettingsService} from '../../services/global-settings.service';
|
||||||
|
import {Observable} from 'rxjs';
|
||||||
|
import {map, switchMap} from 'rxjs/operators';
|
||||||
|
import {ShowSongService} from '../shows/services/show-song.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-guest',
|
||||||
|
templateUrl: './guest.component.html',
|
||||||
|
styleUrls: ['./guest.component.less']
|
||||||
|
})
|
||||||
|
export class GuestComponent implements OnInit {
|
||||||
|
public songs$: Observable<Observable<string>[]>;
|
||||||
|
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private songService: SongService,
|
||||||
|
private globalSettingsService: GlobalSettingsService,
|
||||||
|
private showSongService: ShowSongService,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ngOnInit(): void {
|
||||||
|
this.songs$ = this.globalSettingsService.get$.pipe(
|
||||||
|
map(_ => _.currentShow),
|
||||||
|
switchMap(_ => this.showSongService.list$(_)),
|
||||||
|
map(_ => _
|
||||||
|
.sort((x, y) => x.order - y.order)
|
||||||
|
.map(showSong => this.songService.read$(showSong.songId).pipe(map(song => song.text)))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
36
src/app/modules/guest/guest.module.ts
Normal file
36
src/app/modules/guest/guest.module.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {CommonModule} from '@angular/common';
|
||||||
|
import {GuestComponent} from './guest.component';
|
||||||
|
import {RouterModule} from '@angular/router';
|
||||||
|
import {SWIPER_CONFIG, SwiperConfigInterface, SwiperModule} from 'ngx-swiper-wrapper';
|
||||||
|
import {SongTextModule} from '../../widget-modules/components/song-text/song-text.module';
|
||||||
|
|
||||||
|
const DEFAULT_SWIPER_CONFIG: SwiperConfigInterface = {
|
||||||
|
a11y: true,
|
||||||
|
direction: 'horizontal',
|
||||||
|
slidesPerView: 1,
|
||||||
|
keyboard: true,
|
||||||
|
mousewheel: true,
|
||||||
|
scrollbar: false,
|
||||||
|
navigation: true,
|
||||||
|
pagination: false,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [GuestComponent],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
RouterModule.forChild([{path: '', component: GuestComponent}]),
|
||||||
|
SwiperModule,
|
||||||
|
SongTextModule
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
{
|
||||||
|
provide: SWIPER_CONFIG,
|
||||||
|
useValue: DEFAULT_SWIPER_CONFIG
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class GuestModule {
|
||||||
|
}
|
||||||
@@ -35,14 +35,14 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: 300ms all ease-in-out;
|
transition: 300ms all ease-in-out;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
.card-1;
|
// .card-1;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.card-2;
|
.card-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
.card-5;
|
.card-2;
|
||||||
|
|
||||||
.head {
|
.head {
|
||||||
background: #4286f4;
|
background: #4286f4;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Worship Generator</title>
|
<title>Worship Generator</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'/>
|
<meta content="width=device-width, initial-scale=1.0, user-scalable=no" name="viewport">
|
||||||
|
|
||||||
<link href="apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180">
|
<link href="apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180">
|
||||||
<link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png">
|
<link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png">
|
||||||
|
|||||||
@@ -122,3 +122,14 @@ mat-dialog-container.mat-dialog-container {
|
|||||||
.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {
|
.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {
|
||||||
transform: translateY(-1.0em) scale(0.75);
|
transform: translateY(-1.0em) scale(0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
body {
|
||||||
|
.swiper-button-next, .swiper-button-prev {
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-button-next.swiper-button-disabled, .swiper-button-prev.swiper-button-disabled {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user