@sneat/extensions-schedulus-main 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.js +2 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/index.js +2 -0
- package/esm2022/lib/index.js.map +1 -0
- package/esm2022/lib/pages/calendar/calendar-page.component.js +99 -0
- package/esm2022/lib/pages/calendar/calendar-page.component.js.map +1 -0
- package/esm2022/lib/pages/calendar-base-page.js +8 -0
- package/esm2022/lib/pages/calendar-base-page.js.map +1 -0
- package/esm2022/lib/pages/happening/happening-base-page.js +132 -0
- package/esm2022/lib/pages/happening/happening-base-page.js.map +1 -0
- package/esm2022/lib/pages/happening/happening-page.component.js +33 -0
- package/esm2022/lib/pages/happening/happening-page.component.js.map +1 -0
- package/esm2022/lib/pages/new-happening/new-happening-page.component.js +120 -0
- package/esm2022/lib/pages/new-happening/new-happening-page.component.js.map +1 -0
- package/esm2022/lib/schedulus-routing.js +40 -0
- package/esm2022/lib/schedulus-routing.js.map +1 -0
- package/esm2022/sneat-extensions-schedulus-main.js +5 -0
- package/esm2022/sneat-extensions-schedulus-main.js.map +1 -0
- package/index.d.ts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/pages/calendar/calendar-page.component.d.ts +18 -0
- package/lib/pages/calendar-base-page.d.ts +4 -0
- package/lib/pages/happening/happening-base-page.d.ts +16 -0
- package/lib/pages/happening/happening-page.component.d.ts +7 -0
- package/lib/pages/new-happening/new-happening-page.component.d.ts +17 -0
- package/lib/schedulus-routing.d.ts +2 -0
- package/package.json +26 -0
- package/sneat-extensions-schedulus-main.d.ts +5 -0
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
package/esm2022/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/extensions/schedulus/main/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC","sourcesContent":["export * from './lib';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/extensions/schedulus/main/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './schedulus-routing';\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, signal, inject, } from '@angular/core';
|
|
2
|
+
import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonLabel, IonMenuButton, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
3
|
+
import { virtualSliderAnimations } from '@sneat/components';
|
|
4
|
+
import { ScheduleNavService, ScheduleNavServiceModule, } from '@sneat/mod-schedulus-core';
|
|
5
|
+
import { SpaceBaseComponent, SpaceComponentBaseParams, SpacePageTitleComponent, } from '@sneat/space-components';
|
|
6
|
+
import { CalendarComponent, } from '@sneat/extensions-schedulus-shared';
|
|
7
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
8
|
+
import { ClassName } from '@sneat/ui';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class CalendarPageComponent extends SpaceBaseComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.scheduleNavService = inject(ScheduleNavService);
|
|
14
|
+
this.$tab = signal('day', ...(ngDevMode ? [{ debugName: "$tab" }] : []));
|
|
15
|
+
this.$date = signal('', ...(ngDevMode ? [{ debugName: "$date" }] : []));
|
|
16
|
+
this.$member = signal(undefined, ...(ngDevMode ? [{ debugName: "$member" }] : []));
|
|
17
|
+
// private filter: ICalendarFilter = emptyCalendarFilter;
|
|
18
|
+
this.onQueryParamsChanged = (queryParams) => {
|
|
19
|
+
const tab = queryParams.get('tab');
|
|
20
|
+
if (tab) {
|
|
21
|
+
switch (tab) {
|
|
22
|
+
case 'day':
|
|
23
|
+
case 'week':
|
|
24
|
+
case 'recurrings':
|
|
25
|
+
case 'singles':
|
|
26
|
+
this.$tab.set(tab);
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
// history.replaceState(history.state, document.title, `${location.href}?tab=${this.tab}`);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const date = queryParams.get('date');
|
|
34
|
+
if (date && date.match(/^\d{4}-\d{2}-\d{2}$/)) {
|
|
35
|
+
this.$date.set(date);
|
|
36
|
+
// this.activeDay.date = isoStringsToDate(date);
|
|
37
|
+
}
|
|
38
|
+
const memberID = queryParams.get('member');
|
|
39
|
+
if (memberID) {
|
|
40
|
+
// this.filterService.next({ ...this.filter, contactIDs: [memberID] });
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
// filterService.filter.subscribe({
|
|
44
|
+
// next: (filter) => {
|
|
45
|
+
// this.filter = filter;
|
|
46
|
+
// },
|
|
47
|
+
// });
|
|
48
|
+
this.route?.queryParamMap.subscribe({
|
|
49
|
+
next: this.onQueryParamsChanged,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
onTabChanged(tab) {
|
|
53
|
+
this.$tab.set(tab);
|
|
54
|
+
let { href } = location;
|
|
55
|
+
if (!href.includes('?')) {
|
|
56
|
+
href += '?tab=';
|
|
57
|
+
}
|
|
58
|
+
href = href.replace(/tab=.*?(&|$)/, `tab=${tab}`);
|
|
59
|
+
history.replaceState(history.state, document.title, href);
|
|
60
|
+
}
|
|
61
|
+
onDateChanged(date) {
|
|
62
|
+
this.$date.set(date);
|
|
63
|
+
}
|
|
64
|
+
goNew(type) {
|
|
65
|
+
if (!this.space) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const params = { type: type };
|
|
69
|
+
this.scheduleNavService.goNewHappening(this.space, params);
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: CalendarPageComponent, isStandalone: true, selector: "sneat-schedule-page", providers: [
|
|
73
|
+
{ provide: ClassName, useValue: 'CalendarPageComponent' },
|
|
74
|
+
SpaceComponentBaseParams,
|
|
75
|
+
], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <!--\t\t\t<ion-menu-button></ion-menu-button>-->\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if ($member(); as member) {\n <ion-title>\uD83D\uDCC5 {{ member.brief?.title }}</ion-title>\n } @else {\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Schedule\"\n icon=\"\uD83D\uDCC5\"\n [titlesBySpaceType]=\"{\n family: 'Family calendar',\n personal: 'Personal calendar',\n }\"\n />\n }\n <ion-buttons slot=\"end\">\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('recurring')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"duplicate-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\"\n >Add recurring\n </ion-label>\n </ion-button>\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('single')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"add-circle-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\">Add 1-timer</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-calendar\n [$space]=\"$space()\"\n [tab]=\"$tab()\"\n (tabChanged)=\"onTabChanged($event)\"\n (dateChanged)=\"onDateChanged($event)\"\n />\n</ion-content>\n", styles: ["ion-list.no-v-padding{padding-top:0;padding-bottom:0}ion-checkbox{margin-right:1em}ion-footer ion-toolbar{--padding-start: 4px}ion-footer ion-toolbar ion-button{--margin-top: 0;--margin-bottom: 0;text-transform:none}\n"], dependencies: [{ kind: "component", type: SpacePageTitleComponent, selector: "sneat-space-page-title", inputs: ["icon", "generalTitle", "space", "titlesBySpaceType"] }, { kind: "ngmodule", type: ScheduleNavServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: CalendarComponent, selector: "sneat-calendar", inputs: ["member", "tab"], outputs: ["tabChanged", "dateChanged"] }], animations: virtualSliderAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarPageComponent, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{ imports: [
|
|
80
|
+
SpacePageTitleComponent,
|
|
81
|
+
ScheduleNavServiceModule,
|
|
82
|
+
IonHeader,
|
|
83
|
+
IonToolbar,
|
|
84
|
+
IonButtons,
|
|
85
|
+
IonBackButton,
|
|
86
|
+
IonTitle,
|
|
87
|
+
IonIcon,
|
|
88
|
+
IonLabel,
|
|
89
|
+
IonButton,
|
|
90
|
+
IonContent,
|
|
91
|
+
IonMenuButton,
|
|
92
|
+
SpaceServiceModule,
|
|
93
|
+
CalendarComponent,
|
|
94
|
+
], providers: [
|
|
95
|
+
{ provide: ClassName, useValue: 'CalendarPageComponent' },
|
|
96
|
+
SpaceComponentBaseParams,
|
|
97
|
+
], animations: virtualSliderAnimations, changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-schedule-page', template: "<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <!--\t\t\t<ion-menu-button></ion-menu-button>-->\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if ($member(); as member) {\n <ion-title>\uD83D\uDCC5 {{ member.brief?.title }}</ion-title>\n } @else {\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Schedule\"\n icon=\"\uD83D\uDCC5\"\n [titlesBySpaceType]=\"{\n family: 'Family calendar',\n personal: 'Personal calendar',\n }\"\n />\n }\n <ion-buttons slot=\"end\">\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('recurring')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"duplicate-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\"\n >Add recurring\n </ion-label>\n </ion-button>\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('single')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"add-circle-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\">Add 1-timer</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-calendar\n [$space]=\"$space()\"\n [tab]=\"$tab()\"\n (tabChanged)=\"onTabChanged($event)\"\n (dateChanged)=\"onDateChanged($event)\"\n />\n</ion-content>\n", styles: ["ion-list.no-v-padding{padding-top:0;padding-bottom:0}ion-checkbox{margin-right:1em}ion-footer ion-toolbar{--padding-start: 4px}ion-footer ion-toolbar ion-button{--margin-top: 0;--margin-bottom: 0;text-transform:none}\n"] }]
|
|
98
|
+
}], ctorParameters: () => [] });
|
|
99
|
+
//# sourceMappingURL=calendar-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-page.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/calendar/calendar-page.component.ts","../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/calendar/calendar-page.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n signal,\n inject,\n} from '@angular/core';\nimport { ParamMap } from '@angular/router';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonLabel,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { virtualSliderAnimations } from '@sneat/components';\nimport {\n HappeningType,\n NewHappeningParams,\n ScheduleNavService,\n ScheduleNavServiceModule,\n} from '@sneat/mod-schedulus-core';\nimport {\n SpaceBaseComponent,\n SpaceComponentBaseParams,\n SpacePageTitleComponent,\n} from '@sneat/space-components';\nimport { IMemberContext } from '@sneat/contactus-core';\nimport {\n CalendarComponent,\n CalendarTab,\n} from '@sneat/extensions-schedulus-shared';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n imports: [\n SpacePageTitleComponent,\n ScheduleNavServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonLabel,\n IonButton,\n IonContent,\n IonMenuButton,\n SpaceServiceModule,\n CalendarComponent,\n ],\n providers: [\n { provide: ClassName, useValue: 'CalendarPageComponent' },\n SpaceComponentBaseParams,\n ],\n animations: virtualSliderAnimations,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-schedule-page',\n templateUrl: './calendar-page.component.html',\n styleUrls: ['./calendar-page.component.scss'],\n})\nexport class CalendarPageComponent extends SpaceBaseComponent {\n private readonly scheduleNavService = inject(ScheduleNavService);\n\n protected readonly $tab = signal<CalendarTab>('day');\n protected readonly $date = signal('');\n protected readonly $member = signal<IMemberContext | undefined>(undefined);\n\n public constructor() {\n super();\n\n // filterService.filter.subscribe({\n // \tnext: (filter) => {\n // \t\tthis.filter = filter;\n // \t},\n // });\n\n this.route?.queryParamMap.subscribe({\n next: this.onQueryParamsChanged,\n });\n }\n\n // private filter: ICalendarFilter = emptyCalendarFilter;\n\n private readonly onQueryParamsChanged = (queryParams: ParamMap) => {\n const tab = queryParams.get('tab') as CalendarTab;\n if (tab) {\n switch (tab) {\n case 'day':\n case 'week':\n case 'recurrings':\n case 'singles':\n this.$tab.set(tab);\n break;\n default:\n // history.replaceState(history.state, document.title, `${location.href}?tab=${this.tab}`);\n break;\n }\n }\n const date = queryParams.get('date');\n if (date && date.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n this.$date.set(date);\n // this.activeDay.date = isoStringsToDate(date);\n }\n const memberID = queryParams.get('member');\n if (memberID) {\n // this.filterService.next({ ...this.filter, contactIDs: [memberID] });\n }\n };\n\n protected onTabChanged(tab: CalendarTab): void {\n this.$tab.set(tab);\n let { href } = location;\n if (!href.includes('?')) {\n href += '?tab=';\n }\n href = href.replace(/tab=.*?(&|$)/, `tab=${tab}`);\n history.replaceState(history.state, document.title, href);\n }\n\n protected onDateChanged(date: string): void {\n this.$date.set(date);\n }\n\n protected goNew(type: HappeningType): void {\n if (!this.space) {\n return;\n }\n const params: NewHappeningParams = { type: type };\n this.scheduleNavService.goNewHappening(this.space, params);\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <!--\t\t\t<ion-menu-button></ion-menu-button>-->\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if ($member(); as member) {\n <ion-title>📅 {{ member.brief?.title }}</ion-title>\n } @else {\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Schedule\"\n icon=\"📅\"\n [titlesBySpaceType]=\"{\n family: 'Family calendar',\n personal: 'Personal calendar',\n }\"\n />\n }\n <ion-buttons slot=\"end\">\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('recurring')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"duplicate-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\"\n >Add recurring\n </ion-label>\n </ion-button>\n <ion-button\n class=\"sneat-hide-if-width-less-638\"\n color=\"primary\"\n [disabled]=\"!space.id\"\n (click)=\"goNew('single')\"\n style=\"text-transform: none\"\n >\n <ion-icon name=\"add-circle-outline\" slot=\"start\" />\n <ion-label class=\"sneat-hide-if-width-less-766\">Add 1-timer</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-calendar\n [$space]=\"$space()\"\n [tab]=\"$tab()\"\n (tabChanged)=\"onTabChanged($event)\"\n (dateChanged)=\"onDateChanged($event)\"\n />\n</ion-content>\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-base-page.js","sourceRoot":"","sources":["../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/calendar-base-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,OAAgB,gBAAiB,SAAQ,kBAAkB;IAC/D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;CACF","sourcesContent":["import { SpaceBaseComponent } from '@sneat/space-components';\n\nexport abstract class CalendarBasePage extends SpaceBaseComponent {\n protected constructor() {\n super();\n this.$defaultBackUrlSpacePath.set('calendar');\n }\n}\n"]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { computed, signal } from '@angular/core';
|
|
2
|
+
import { distinctUntilChanged, map, Subject, takeUntil, } from 'rxjs';
|
|
3
|
+
import { CalendarBasePage } from '../calendar-base-page';
|
|
4
|
+
const emptyHappeningContext = { id: '', space: { id: '' } };
|
|
5
|
+
export class HappeningBasePage extends CalendarBasePage {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
// typeof SingleHappeningKind | typeof RegularHappeningKind>,
|
|
8
|
+
super();
|
|
9
|
+
this.params = params;
|
|
10
|
+
this.happeningID$ = new Subject(); //TODO: switch to $happeningID signal?
|
|
11
|
+
this.$happening = signal(emptyHappeningContext, ...(ngDevMode ? [{ debugName: "$happening" }] : []));
|
|
12
|
+
this.$happeningID = computed(() => this.$happening().id || undefined, ...(ngDevMode ? [{ debugName: "$happeningID" }] : []));
|
|
13
|
+
this.setHappening = (happening) => {
|
|
14
|
+
const prevHappening = this.$happening();
|
|
15
|
+
if (!happening.dbo && prevHappening.brief) {
|
|
16
|
+
happening = { ...happening, brief: prevHappening.brief };
|
|
17
|
+
}
|
|
18
|
+
if (!this.$spaceID() && happening.space) {
|
|
19
|
+
this.setSpaceRef(happening.space); // we probably should never hit this case
|
|
20
|
+
}
|
|
21
|
+
this.$happening.set(happening);
|
|
22
|
+
};
|
|
23
|
+
this.onHappeningIDChanged = (id) => {
|
|
24
|
+
if (!id) {
|
|
25
|
+
this.$happening.set(emptyHappeningContext);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (this.$happeningID() === id) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const space = this.space;
|
|
32
|
+
if (!space) {
|
|
33
|
+
console.error('Space is not defined');
|
|
34
|
+
}
|
|
35
|
+
this.setHappening({ id, space });
|
|
36
|
+
this.watchHappeningChanges(id);
|
|
37
|
+
};
|
|
38
|
+
try {
|
|
39
|
+
const happening = window.history.state
|
|
40
|
+
.happening;
|
|
41
|
+
if (happening) {
|
|
42
|
+
this.happeningID$.next(happening.id);
|
|
43
|
+
this.setHappening(happening);
|
|
44
|
+
this.watchHappeningChanges(happening.id, happening.space);
|
|
45
|
+
}
|
|
46
|
+
this.trackHappeningIDFromUrl();
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.error(`Failed in ${this.className}.HappeningBasePage.constructor()`, e);
|
|
50
|
+
}
|
|
51
|
+
this.spaceChanged$.subscribe({
|
|
52
|
+
next: (space) => {
|
|
53
|
+
const happening = this.$happening();
|
|
54
|
+
if (space && happening) {
|
|
55
|
+
this.setHappening({ ...happening, space: space });
|
|
56
|
+
}
|
|
57
|
+
else if (!space) {
|
|
58
|
+
this.$happening.set(emptyHappeningContext);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
onSpaceIdChanged() {
|
|
64
|
+
super.onSpaceIdChanged();
|
|
65
|
+
this.calendariumSpaceSub?.unsubscribe();
|
|
66
|
+
this.calendariumSpaceSub = this.params.calendariumSpaceService
|
|
67
|
+
.watchSpaceModuleRecord(this.space.id)
|
|
68
|
+
.subscribe({
|
|
69
|
+
next: (calendariumSpace) => {
|
|
70
|
+
const happening = this.$happening();
|
|
71
|
+
if (happening?.id &&
|
|
72
|
+
!happening?.dbo // If we loaded happening record we use it as a brief and ignore the brief from calendariumSpace
|
|
73
|
+
) {
|
|
74
|
+
const brief = calendariumSpace.dbo?.recurringHappenings?.[happening?.id];
|
|
75
|
+
if (brief) {
|
|
76
|
+
this.setHappening({ ...happening, brief });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
watchHappeningChanges(id, space) {
|
|
83
|
+
if (!space) {
|
|
84
|
+
space = this.space;
|
|
85
|
+
}
|
|
86
|
+
if (!space?.id) {
|
|
87
|
+
console.warn('watchHappeningChanges: space is not defined');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
this.params.happeningService
|
|
92
|
+
.watchHappeningByID(space, id)
|
|
93
|
+
.pipe(this.takeUntilDestroyed(), takeUntil(this.happeningID$))
|
|
94
|
+
.subscribe({
|
|
95
|
+
next: (happening) => {
|
|
96
|
+
// This can be called twice - first for `snapshot.type=added`, then `snapshot.type=modified`
|
|
97
|
+
console.log('watchHappeningChanges() => happeningService.watchHappeningByID() => happening:', happening);
|
|
98
|
+
if (happening.id === this.$happeningID()) {
|
|
99
|
+
this.setHappening(happening);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
error: this.logErrorHandler('failed to get happening by ID'),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
console.error(`Failed in ${this.className}.watchHappeningChanges(id=${id})`, e);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
trackHappeningIDFromUrl() {
|
|
110
|
+
this.route?.params
|
|
111
|
+
.pipe(this.takeUntilDestroyed(), map((params) => params['happeningID']), distinctUntilChanged())
|
|
112
|
+
.subscribe({
|
|
113
|
+
next: (happeningID) => {
|
|
114
|
+
if (this.$happeningID() !== happeningID) {
|
|
115
|
+
this.$happening.set({
|
|
116
|
+
id: happeningID,
|
|
117
|
+
space: this.$space(),
|
|
118
|
+
});
|
|
119
|
+
this.happeningID$.next(happeningID);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
this.happeningID$
|
|
124
|
+
.pipe(this.takeUntilDestroyed(), distinctUntilChanged())
|
|
125
|
+
.subscribe({
|
|
126
|
+
next: (happeningID) => {
|
|
127
|
+
this.onHappeningIDChanged(happeningID);
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=happening-base-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"happening-base-page.js","sourceRoot":"","sources":["../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/happening/happening-base-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { computed, signal } from '@angular/core';\nimport { ISpaceRef } from '@sneat/core';\nimport { IHappeningContext } from '@sneat/mod-schedulus-core';\nimport {\n distinctUntilChanged,\n map,\n Subject,\n Subscription,\n takeUntil,\n} from 'rxjs';\nimport { CalendarBasePage } from '../calendar-base-page';\nimport { HappeningComponentBaseParams } from '@sneat/extensions-schedulus-shared';\n\nconst emptyHappeningContext = { id: '', space: { id: '' } };\n\nexport abstract class HappeningBasePage extends CalendarBasePage {\n private readonly happeningID$ = new Subject<string>(); //TODO: switch to $happeningID signal?\n protected readonly $happening = signal<IHappeningContext>(\n emptyHappeningContext,\n );\n protected readonly $happeningID = computed<string | undefined>(\n () => this.$happening().id || undefined,\n );\n\n // private calendariumSpaceDbo?: ICalendariumSpaceDbo | null;\n private calendariumSpaceSub?: Subscription;\n\n protected constructor(\n protected readonly params: HappeningComponentBaseParams, // \tHappeningModuleSchema,\n ) {\n // \ttypeof SingleHappeningKind | typeof RegularHappeningKind>,\n super();\n try {\n const happening = window.history.state\n .happening as unknown as IHappeningContext;\n if (happening) {\n this.happeningID$.next(happening.id);\n this.setHappening(happening);\n this.watchHappeningChanges(happening.id, happening.space);\n }\n this.trackHappeningIDFromUrl();\n } catch (e) {\n console.error(\n `Failed in ${this.className}.HappeningBasePage.constructor()`,\n e,\n );\n }\n this.spaceChanged$.subscribe({\n next: (space) => {\n const happening = this.$happening();\n if (space && happening) {\n this.setHappening({ ...happening, space: space });\n } else if (!space) {\n this.$happening.set(emptyHappeningContext);\n }\n },\n });\n }\n\n protected override onSpaceIdChanged(): void {\n super.onSpaceIdChanged();\n this.calendariumSpaceSub?.unsubscribe();\n this.calendariumSpaceSub = this.params.calendariumSpaceService\n .watchSpaceModuleRecord(this.space.id)\n .subscribe({\n next: (calendariumSpace) => {\n const happening = this.$happening();\n if (\n happening?.id &&\n !happening?.dbo // If we loaded happening record we use it as a brief and ignore the brief from calendariumSpace\n ) {\n const brief =\n calendariumSpace.dbo?.recurringHappenings?.[happening?.id];\n if (brief) {\n this.setHappening(\n { ...happening, brief },\n );\n }\n }\n },\n });\n }\n\n protected readonly setHappening = (\n happening: IHappeningContext,\n ): void => {\n const prevHappening = this.$happening();\n if (!happening.dbo && prevHappening.brief) {\n happening = { ...happening, brief: prevHappening.brief };\n }\n if (!this.$spaceID() && happening.space) {\n this.setSpaceRef(happening.space); // we probably should never hit this case\n }\n this.$happening.set(happening);\n };\n\n private readonly onHappeningIDChanged = (id?: string): void => {\n if (!id) {\n this.$happening.set(emptyHappeningContext);\n return;\n }\n if (this.$happeningID() === id) {\n return;\n }\n const space = this.space;\n if (!space) {\n console.error('Space is not defined');\n }\n this.setHappening({ id, space });\n this.watchHappeningChanges(id);\n };\n\n private watchHappeningChanges(id: string, space?: ISpaceRef): void {\n if (!space) {\n space = this.space;\n }\n if (!space?.id) {\n console.warn('watchHappeningChanges: space is not defined');\n return;\n }\n try {\n this.params.happeningService\n .watchHappeningByID(space, id)\n .pipe(this.takeUntilDestroyed(), takeUntil(this.happeningID$))\n .subscribe({\n next: (happening) => {\n // This can be called twice - first for `snapshot.type=added`, then `snapshot.type=modified`\n console.log(\n 'watchHappeningChanges() => happeningService.watchHappeningByID() => happening:',\n happening,\n );\n if (happening.id === this.$happeningID()) {\n this.setHappening(happening);\n }\n },\n error: this.logErrorHandler('failed to get happening by ID'),\n });\n } catch (e) {\n console.error(\n `Failed in ${this.className}.watchHappeningChanges(id=${id})`,\n e,\n );\n }\n }\n\n private trackHappeningIDFromUrl(): void {\n this.route?.params\n .pipe(\n this.takeUntilDestroyed(),\n map((params) => params['happeningID']),\n distinctUntilChanged(),\n )\n .subscribe({\n next: (happeningID) => {\n if (this.$happeningID() !== happeningID) {\n this.$happening.set({\n id: happeningID,\n space: this.$space(),\n });\n this.happeningID$.next(happeningID);\n }\n },\n });\n this.happeningID$\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged())\n .subscribe({\n next: (happeningID) => {\n this.onHappeningIDChanged(happeningID);\n },\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
2
|
+
import { IonBackButton, IonButtons, IonContent, IonHeader, IonMenuButton, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
3
|
+
import { ContactusServicesModule } from '@sneat/contactus-services';
|
|
4
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
5
|
+
import { ClassName } from '@sneat/ui';
|
|
6
|
+
import { HappeningBasePage } from './happening-base-page';
|
|
7
|
+
import { HappeningComponentBaseParams, HappeningComponentBaseParamsModule, HappeningFormComponent, HappeningServiceModule, } from '@sneat/extensions-schedulus-shared';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class HappeningPageComponent extends HappeningBasePage {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(inject(HappeningComponentBaseParams));
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HappeningPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: HappeningPageComponent, isStandalone: true, selector: "sneat-happening-page", providers: [{ provide: ClassName, useValue: 'HappeningPageComponent' }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title color=\"medium\">\n @if ($happening(); as happening) {\n @switch (happening.brief?.type) {\n @case (\"recurring\") {\n Recurring happening\n }\n @case (\"single\") {\n One-time happening\n }\n @default {\n {{ happening.brief?.title || happening.id }}\n }\n }\n } @else {\n Loading...\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"$happening.set($event)\"\n />\n <!--\t<ion-card>-->\n <!--\t\t<ion-item>-->\n <!--\t\t\t<ion-label>Title: {{happening?.brief?.title}}</ion-label>-->\n <!--\t\t</ion-item>-->\n <!--\t</ion-card>-->\n <!--\t<ion-card>-->\n <!--\t\t<ion-item-group>-->\n <!--\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t<ion-label>Timetable</ion-label>-->\n <!--\t\t\t</ion-item-divider>-->\n <!--\t\t\t<sneat-recurring-slots [slots]=\"happening?.dto?.slots\"></sneat-recurring-slots>-->\n <!--\t\t</ion-item-group>-->\n <!--\t</ion-card>-->\n</ion-content>\n", dependencies: [{ kind: "ngmodule", type: HappeningServiceModule }, { kind: "component", type: HappeningFormComponent, selector: "sneat-happening-form", inputs: ["$happening", "wd", "date"], outputs: ["happeningChange"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "ngmodule", type: HappeningComponentBaseParamsModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HappeningPageComponent, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{ imports: [
|
|
19
|
+
HappeningServiceModule,
|
|
20
|
+
HappeningFormComponent,
|
|
21
|
+
ContactusServicesModule,
|
|
22
|
+
HappeningComponentBaseParamsModule,
|
|
23
|
+
SpaceServiceModule,
|
|
24
|
+
IonHeader,
|
|
25
|
+
IonButtons,
|
|
26
|
+
IonToolbar,
|
|
27
|
+
IonMenuButton,
|
|
28
|
+
IonBackButton,
|
|
29
|
+
IonTitle,
|
|
30
|
+
IonContent,
|
|
31
|
+
], providers: [{ provide: ClassName, useValue: 'HappeningPageComponent' }], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-happening-page', template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title color=\"medium\">\n @if ($happening(); as happening) {\n @switch (happening.brief?.type) {\n @case (\"recurring\") {\n Recurring happening\n }\n @case (\"single\") {\n One-time happening\n }\n @default {\n {{ happening.brief?.title || happening.id }}\n }\n }\n } @else {\n Loading...\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"$happening.set($event)\"\n />\n <!--\t<ion-card>-->\n <!--\t\t<ion-item>-->\n <!--\t\t\t<ion-label>Title: {{happening?.brief?.title}}</ion-label>-->\n <!--\t\t</ion-item>-->\n <!--\t</ion-card>-->\n <!--\t<ion-card>-->\n <!--\t\t<ion-item-group>-->\n <!--\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t<ion-label>Timetable</ion-label>-->\n <!--\t\t\t</ion-item-divider>-->\n <!--\t\t\t<sneat-recurring-slots [slots]=\"happening?.dto?.slots\"></sneat-recurring-slots>-->\n <!--\t\t</ion-item-group>-->\n <!--\t</ion-card>-->\n</ion-content>\n" }]
|
|
32
|
+
}], ctorParameters: () => [] });
|
|
33
|
+
//# sourceMappingURL=happening-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"happening-page.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/happening/happening-page.component.ts","../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/happening/happening-page.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,4BAA4B,EAC5B,kCAAkC,EAClC,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;;AAsB5C,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAC3D;QACE,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC9C,CAAC;8GAHU,sBAAsB;kGAAtB,sBAAsB,mEALtB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,iDCpCzE,y4CAgDA,2CDzBI,sBAAsB,+BACtB,sBAAsB,oIACtB,uBAAuB,8BACvB,kCAAkC,8BAClC,kBAAkB,+BAClB,SAAS,oGACT,UAAU,8EACV,UAAU,mFACV,aAAa,+HACb,aAAa,4DACb,QAAQ,iFACR,UAAU;;2FAOD,sBAAsB;kBApBlC,SAAS;8BACC;wBACP,sBAAsB;wBACtB,sBAAsB;wBACtB,uBAAuB;wBACvB,kCAAkC;wBAClC,kBAAkB;wBAClB,SAAS;wBACT,UAAU;wBACV,UAAU;wBACV,aAAa;wBACb,aAAa;wBACb,QAAQ;wBACR,UAAU;qBACX,aACU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,mBACtD,uBAAuB,CAAC,MAAM,YACrC,sBAAsB","sourcesContent":["import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { ContactusServicesModule } from '@sneat/contactus-services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { HappeningBasePage } from './happening-base-page';\nimport {\n HappeningComponentBaseParams,\n HappeningComponentBaseParamsModule,\n HappeningFormComponent,\n HappeningServiceModule,\n} from '@sneat/extensions-schedulus-shared';\n\n@Component({\n imports: [\n HappeningServiceModule,\n HappeningFormComponent,\n ContactusServicesModule,\n HappeningComponentBaseParamsModule,\n SpaceServiceModule,\n IonHeader,\n IonButtons,\n IonToolbar,\n IonMenuButton,\n IonBackButton,\n IonTitle,\n IonContent,\n ],\n providers: [{ provide: ClassName, useValue: 'HappeningPageComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-happening-page',\n templateUrl: './happening-page.component.html',\n})\nexport class HappeningPageComponent extends HappeningBasePage {\n public constructor() {\n super(inject(HappeningComponentBaseParams));\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title color=\"medium\">\n @if ($happening(); as happening) {\n @switch (happening.brief?.type) {\n @case (\"recurring\") {\n Recurring happening\n }\n @case (\"single\") {\n One-time happening\n }\n @default {\n {{ happening.brief?.title || happening.id }}\n }\n }\n } @else {\n Loading...\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"$happening.set($event)\"\n />\n <!--\t<ion-card>-->\n <!--\t\t<ion-item>-->\n <!--\t\t\t<ion-label>Title: {{happening?.brief?.title}}</ion-label>-->\n <!--\t\t</ion-item>-->\n <!--\t</ion-card>-->\n <!--\t<ion-card>-->\n <!--\t\t<ion-item-group>-->\n <!--\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t<ion-label>Timetable</ion-label>-->\n <!--\t\t\t</ion-item-divider>-->\n <!--\t\t\t<sneat-recurring-slots [slots]=\"happening?.dto?.slots\"></sneat-recurring-slots>-->\n <!--\t\t</ion-item-group>-->\n <!--\t</ion-card>-->\n</ion-content>\n"]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Component, signal, ViewChild } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { IonBackButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
4
|
+
import { ContactusServicesModule } from '@sneat/contactus-services';
|
|
5
|
+
import { newEmptyHappeningContext, } from '@sneat/mod-schedulus-core';
|
|
6
|
+
import { SpaceComponentBaseParams } from '@sneat/space-components';
|
|
7
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
8
|
+
import { ClassName } from '@sneat/ui';
|
|
9
|
+
import { first } from 'rxjs';
|
|
10
|
+
import { CalendarBasePage } from '../calendar-base-page';
|
|
11
|
+
import { HappeningFormComponent } from '@sneat/extensions-schedulus-shared';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class NewHappeningPageComponent extends CalendarBasePage {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this.$happening = signal({
|
|
17
|
+
id: '',
|
|
18
|
+
space: { id: '' },
|
|
19
|
+
}, ...(ngDevMode ? [{ debugName: "$happening" }] : []));
|
|
20
|
+
this.isToDo = location.pathname.includes('/new-task');
|
|
21
|
+
this.date = history.state.date || '';
|
|
22
|
+
const type = window.history.state?.type;
|
|
23
|
+
if (type && this.space?.id && !this.$happening().id) {
|
|
24
|
+
this.createHappeningContext(type);
|
|
25
|
+
}
|
|
26
|
+
this.route.queryParamMap
|
|
27
|
+
.pipe(this.takeUntilDestroyed(), first())
|
|
28
|
+
.subscribe({
|
|
29
|
+
next: (queryParams) => {
|
|
30
|
+
console.log('NewHappeningPage.constructor() => queryParams:', queryParams);
|
|
31
|
+
const type = queryParams.get('type');
|
|
32
|
+
if (type !== 'single' && type !== 'recurring') {
|
|
33
|
+
console.warn('unknown happening type passed in URL: type=' + type);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (this.space && !this.$happening().id) {
|
|
37
|
+
this.createHappeningContext(type);
|
|
38
|
+
}
|
|
39
|
+
if (!this.wd) {
|
|
40
|
+
this.wd = queryParams.get('wd');
|
|
41
|
+
}
|
|
42
|
+
if (!this.date) {
|
|
43
|
+
this.date = queryParams.get('date') || '';
|
|
44
|
+
}
|
|
45
|
+
// if (!this.initialHappeningType) {
|
|
46
|
+
// this.initialHappeningType = queryParams.get('type') as HappeningType;
|
|
47
|
+
// }
|
|
48
|
+
},
|
|
49
|
+
error: this.logErrorHandler('failed to get query params'),
|
|
50
|
+
});
|
|
51
|
+
this.spaceChanged$.pipe(this.takeUntilDestroyed()).subscribe({
|
|
52
|
+
next: () => {
|
|
53
|
+
const happening = this.$happening();
|
|
54
|
+
if (happening) {
|
|
55
|
+
this.$happening.set({ ...happening, space: this.space });
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
createHappeningContext(type) {
|
|
61
|
+
const space = this.space;
|
|
62
|
+
if (!space) {
|
|
63
|
+
throw new Error('!space');
|
|
64
|
+
}
|
|
65
|
+
this.$happening.set(newEmptyHappeningContext(space, type, 'activity', 'active'));
|
|
66
|
+
}
|
|
67
|
+
// TODO(fix): protected onCommuneIdsChanged() {
|
|
68
|
+
// super.onCommuneIdsChanged();
|
|
69
|
+
// this.subscriptions.push(this.memberService.watchByCommuneId(this.communeRealId).subscribe(members => {
|
|
70
|
+
// this.members = members.map(m => new Member(m));
|
|
71
|
+
// this.members.sort((a, b) => a.title > b.title ? 1 : b.title > a.title ? -1 : 0); // TODO: Decouple
|
|
72
|
+
// this.adults = this.members.filter(m => m.dto.age === 'adult');
|
|
73
|
+
// this.kids = this.members.filter(m => m.dto.age === 'child');
|
|
74
|
+
// }));
|
|
75
|
+
// }
|
|
76
|
+
onHappeningChanged(happening) {
|
|
77
|
+
const happeningType = happening.brief?.type;
|
|
78
|
+
const typeChange = happeningType && happeningType !== happening.brief?.type;
|
|
79
|
+
this.$happening.set(happening);
|
|
80
|
+
if (typeChange) {
|
|
81
|
+
this.onHappeningTypeChanged(happeningType);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
onHappeningTypeChanged(happeningType) {
|
|
85
|
+
let { href } = location;
|
|
86
|
+
if (!href.includes('?')) {
|
|
87
|
+
href += '?type=';
|
|
88
|
+
}
|
|
89
|
+
href = href.replace(/type=\w*/, `type=${happeningType}`);
|
|
90
|
+
history.replaceState(history.state, document.title, href);
|
|
91
|
+
}
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewHappeningPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
93
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NewHappeningPageComponent, isStandalone: true, selector: "sneat-happening-new", providers: [
|
|
94
|
+
{ provide: ClassName, useValue: 'NewHappeningPageComponent' },
|
|
95
|
+
SpaceComponentBaseParams,
|
|
96
|
+
], viewQueries: [{ propertyName: "happeningPageFormComponent", first: true, predicate: ["happeningPageFormComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if (isToDo) {\n <ion-title>\n New task\n @if (space) {\n @ {{ space.brief?.title }}\n }\n </ion-title>\n } @else {\n <ion-title>\n @if (space) {\n New happening @ {{ space.brief?.title }}\n } @else {\n New activity\n }\n </ion-title>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n #happeningPageFormComponent\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"onHappeningChanged($event)\"\n [wd]=\"wd\"\n [date]=\"date\"\n />\n</ion-content>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: HappeningFormComponent, selector: "sneat-happening-form", inputs: ["$happening", "wd", "date"], outputs: ["happeningChange"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewHappeningPageComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'sneat-happening-new', imports: [
|
|
101
|
+
FormsModule,
|
|
102
|
+
ReactiveFormsModule,
|
|
103
|
+
HappeningFormComponent,
|
|
104
|
+
ContactusServicesModule,
|
|
105
|
+
SpaceServiceModule,
|
|
106
|
+
IonHeader,
|
|
107
|
+
IonToolbar,
|
|
108
|
+
IonButtons,
|
|
109
|
+
IonBackButton,
|
|
110
|
+
IonTitle,
|
|
111
|
+
IonContent,
|
|
112
|
+
], providers: [
|
|
113
|
+
{ provide: ClassName, useValue: 'NewHappeningPageComponent' },
|
|
114
|
+
SpaceComponentBaseParams,
|
|
115
|
+
], template: "<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if (isToDo) {\n <ion-title>\n New task\n @if (space) {\n @ {{ space.brief?.title }}\n }\n </ion-title>\n } @else {\n <ion-title>\n @if (space) {\n New happening @ {{ space.brief?.title }}\n } @else {\n New activity\n }\n </ion-title>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n #happeningPageFormComponent\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"onHappeningChanged($event)\"\n [wd]=\"wd\"\n [date]=\"date\"\n />\n</ion-content>\n" }]
|
|
116
|
+
}], ctorParameters: () => [], propDecorators: { happeningPageFormComponent: [{
|
|
117
|
+
type: ViewChild,
|
|
118
|
+
args: ['happeningPageFormComponent']
|
|
119
|
+
}] } });
|
|
120
|
+
//# sourceMappingURL=new-happening-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-happening-page.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/new-happening/new-happening-page.component.ts","../../../../../../../../../libs/extensions/schedulus/main/src/lib/pages/new-happening/new-happening-page.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAIL,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;;AAuB5E,MAAM,OAAO,yBAA0B,SAAQ,gBAAgB;IAe7D;QACE,KAAK,EAAE,CAAC;QANS,eAAU,GAAG,MAAM,CAAoB;YACxD,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;SAClB,sDAAC,CAAC;QAID,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAI,OAAO,CAAC,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAqB,CAAC;QACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa;aACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC;aACxC,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBACpB,OAAO,CAAC,GAAG,CACT,gDAAgD,EAChD,WAAW,CACZ,CAAC;gBACF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,6CAA6C,GAAG,IAAI,CAAC,CAAC;oBACnE,OAAO;gBACT,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAiB,CAAC;gBAClD,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,CAAC;gBACD,oCAAoC;gBACpC,yEAAyE;gBACzE,IAAI;YACN,CAAC;YACD,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC;SAC1D,CAAC,CAAC;QACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;YAC3D,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,IAAmB;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,mCAAmC;IACnC,6GAA6G;IAC7G,0DAA0D;IAC1D,6GAA6G;IAC7G,yEAAyE;IACzE,uEAAuE;IACvE,WAAW;IACX,IAAI;IAEM,kBAAkB,CAAC,SAA4B;QACvD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,aAAa,IAAI,aAAa,KAAK,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,aAA4B;QACzD,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,QAAQ,CAAC;QACnB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;8GAlGU,yBAAyB;kGAAzB,yBAAyB,kEALzB;YACT,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;YAC7D,wBAAwB;SACzB,2LC3CH,w0BAkCA,2CDNI,WAAW,8BACX,mBAAmB,+BACnB,sBAAsB,oIACtB,uBAAuB,8BACvB,kBAAkB,+BAClB,SAAS,oGACT,UAAU,mFACV,UAAU,8EACV,aAAa,4DACb,QAAQ,iFACR,UAAU;;2FAOD,yBAAyB;kBArBrC,SAAS;+BACE,qBAAqB,WAEtB;wBACP,WAAW;wBACX,mBAAmB;wBACnB,sBAAsB;wBACtB,uBAAuB;wBACvB,kBAAkB;wBAClB,SAAS;wBACT,UAAU;wBACV,UAAU;wBACV,aAAa;wBACb,QAAQ;wBACR,UAAU;qBACX,aACU;wBACT,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;wBAC7D,wBAAwB;qBACzB;;sBAGA,SAAS;uBAAC,4BAA4B","sourcesContent":["import { Component, signal, ViewChild } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { ContactusServicesModule } from '@sneat/contactus-services';\nimport {\n HappeningType,\n WeekdayCode2,\n IHappeningContext,\n newEmptyHappeningContext,\n} from '@sneat/mod-schedulus-core';\nimport { SpaceComponentBaseParams } from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { first } from 'rxjs';\nimport { CalendarBasePage } from '../calendar-base-page';\nimport { HappeningFormComponent } from '@sneat/extensions-schedulus-shared';\n\n@Component({\n selector: 'sneat-happening-new',\n templateUrl: './new-happening-page.component.html',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n HappeningFormComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonContent,\n ],\n providers: [\n { provide: ClassName, useValue: 'NewHappeningPageComponent' },\n SpaceComponentBaseParams,\n ],\n})\nexport class NewHappeningPageComponent extends CalendarBasePage {\n @ViewChild('happeningPageFormComponent')\n happeningPageFormComponent?: HappeningFormComponent;\n\n protected isToDo: boolean;\n\n // protected initialHappeningType?: HappeningType;\n protected wd?: WeekdayCode2;\n protected date?: string;\n\n protected readonly $happening = signal<IHappeningContext>({\n id: '',\n space: { id: '' },\n });\n\n constructor() {\n super();\n this.isToDo = location.pathname.includes('/new-task');\n this.date = (history.state.date as string) || '';\n\n const type = window.history.state?.type as HappeningType;\n if (type && this.space?.id && !this.$happening().id) {\n this.createHappeningContext(type);\n }\n this.route.queryParamMap\n .pipe(this.takeUntilDestroyed(), first())\n .subscribe({\n next: (queryParams) => {\n console.log(\n 'NewHappeningPage.constructor() => queryParams:',\n queryParams,\n );\n const type = queryParams.get('type');\n if (type !== 'single' && type !== 'recurring') {\n console.warn('unknown happening type passed in URL: type=' + type);\n return;\n }\n if (this.space && !this.$happening().id) {\n this.createHappeningContext(type);\n }\n if (!this.wd) {\n this.wd = queryParams.get('wd') as WeekdayCode2;\n }\n if (!this.date) {\n this.date = queryParams.get('date') || '';\n }\n // if (!this.initialHappeningType) {\n // \tthis.initialHappeningType = queryParams.get('type') as HappeningType;\n // }\n },\n error: this.logErrorHandler('failed to get query params'),\n });\n this.spaceChanged$.pipe(this.takeUntilDestroyed()).subscribe({\n next: () => {\n const happening = this.$happening();\n if (happening) {\n this.$happening.set({ ...happening, space: this.space });\n }\n },\n });\n }\n\n private createHappeningContext(type: HappeningType): void {\n const space = this.space;\n if (!space) {\n throw new Error('!space');\n }\n this.$happening.set(\n newEmptyHappeningContext(space, type, 'activity', 'active'),\n );\n }\n\n // TODO(fix): protected onCommuneIdsChanged() {\n // super.onCommuneIdsChanged();\n // this.subscriptions.push(this.memberService.watchByCommuneId(this.communeRealId).subscribe(members => {\n // this.members = members.map(m => new Member(m));\n // this.members.sort((a, b) => a.title > b.title ? 1 : b.title > a.title ? -1 : 0); // TODO: Decouple\n // this.adults = this.members.filter(m => m.dto.age === 'adult');\n // this.kids = this.members.filter(m => m.dto.age === 'child');\n // }));\n // }\n\n protected onHappeningChanged(happening: IHappeningContext): void {\n const happeningType = happening.brief?.type;\n const typeChange = happeningType && happeningType !== happening.brief?.type;\n this.$happening.set(happening);\n if (typeChange) {\n this.onHappeningTypeChanged(happeningType);\n }\n }\n\n private onHappeningTypeChanged(happeningType: HappeningType): void {\n let { href } = location;\n if (!href.includes('?')) {\n href += '?type=';\n }\n href = href.replace(/type=\\w*/, `type=${happeningType}`);\n history.replaceState(history.state, document.title, href);\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n @if (isToDo) {\n <ion-title>\n New task\n @if (space) {\n @ {{ space.brief?.title }}\n }\n </ion-title>\n } @else {\n <ion-title>\n @if (space) {\n New happening @ {{ space.brief?.title }}\n } @else {\n New activity\n }\n </ion-title>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-happening-form\n #happeningPageFormComponent\n [$space]=\"$space()\"\n [$happening]=\"$happening()\"\n (happeningChange)=\"onHappeningChanged($event)\"\n [wd]=\"wd\"\n [date]=\"date\"\n />\n</ion-content>\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// import {guardRoute} from '../../utils/guard-route';
|
|
2
|
+
export const calendariumRoutes = [
|
|
3
|
+
{
|
|
4
|
+
path: 'calendar',
|
|
5
|
+
data: { title: 'Calendar' },
|
|
6
|
+
loadComponent: () => import('./pages/calendar/calendar-page.component').then((m) => m.CalendarPageComponent),
|
|
7
|
+
// ...guardRoute,
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
path: 'new-happening',
|
|
11
|
+
data: { title: 'New happening' },
|
|
12
|
+
loadComponent: () => import('./pages/new-happening/new-happening-page.component').then((m) => m.NewHappeningPageComponent),
|
|
13
|
+
// ...guardRoute,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
path: 'happening/:happeningID',
|
|
17
|
+
data: { title: 'Happening' },
|
|
18
|
+
loadComponent: () => import('./pages/happening/happening-page.component').then((m) => m.HappeningPageComponent),
|
|
19
|
+
// ...guardRoute,
|
|
20
|
+
},
|
|
21
|
+
// {
|
|
22
|
+
// path: 'new-task',
|
|
23
|
+
// loadChildren: () => import('./new-happening/new-happening-page.module')
|
|
24
|
+
// .then(m => m.NewHappeningPageModule),
|
|
25
|
+
// ...guardRoute,
|
|
26
|
+
// },
|
|
27
|
+
// {
|
|
28
|
+
// path: 'regular-task',
|
|
29
|
+
// loadChildren: () => import('./happening/regular/regular-happening.page.module')
|
|
30
|
+
// .then(m => m.RegularHappeningPageModule),
|
|
31
|
+
// ...guardRoute,
|
|
32
|
+
// },
|
|
33
|
+
// {
|
|
34
|
+
// path: 'task',
|
|
35
|
+
// loadChildren: () => import('./happening/single/single-happening-page.module')
|
|
36
|
+
// .then(m => m.SingleHappeningPageModule),
|
|
37
|
+
// ...guardRoute,
|
|
38
|
+
// },
|
|
39
|
+
];
|
|
40
|
+
//# sourceMappingURL=schedulus-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedulus-routing.js","sourceRoot":"","sources":["../../../../../../../libs/extensions/schedulus/main/src/lib/schedulus-routing.ts"],"names":[],"mappings":"AACA,sDAAsD;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAY;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC3B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,0CAA0C,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAC/B;QACH,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;QAChC,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,oDAAoD,CAAC,CAAC,IAAI,CAC/D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CACnC;QACH,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC5B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,4CAA4C,CAAC,CAAC,IAAI,CACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAChC;QACH,iBAAiB;KAClB;IACD,IAAI;IACJ,qBAAqB;IACrB,2EAA2E;IAC3E,0CAA0C;IAC1C,kBAAkB;IAClB,KAAK;IACL,IAAI;IACJ,yBAAyB;IACzB,mFAAmF;IACnF,8CAA8C;IAC9C,kBAAkB;IAClB,KAAK;IACL,IAAI;IACJ,iBAAiB;IACjB,iFAAiF;IACjF,6CAA6C;IAC7C,kBAAkB;IAClB,KAAK;CACN,CAAC","sourcesContent":["import { Route } from '@angular/router';\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const calendariumRoutes: Route[] = [\n {\n path: 'calendar',\n data: { title: 'Calendar' },\n loadComponent: () =>\n import('./pages/calendar/calendar-page.component').then(\n (m) => m.CalendarPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-happening',\n data: { title: 'New happening' },\n loadComponent: () =>\n import('./pages/new-happening/new-happening-page.component').then(\n (m) => m.NewHappeningPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'happening/:happeningID',\n data: { title: 'Happening' },\n loadComponent: () =>\n import('./pages/happening/happening-page.component').then(\n (m) => m.HappeningPageComponent,\n ),\n // ...guardRoute,\n },\n // {\n // \tpath: 'new-task',\n // \tloadChildren: () => import('./new-happening/new-happening-page.module')\n // \t\t.then(m => m.NewHappeningPageModule),\n // \t...guardRoute,\n // },\n // {\n // \tpath: 'regular-task',\n // \tloadChildren: () => import('./happening/regular/regular-happening.page.module')\n // \t\t.then(m => m.RegularHappeningPageModule),\n // \t...guardRoute,\n // },\n // {\n // \tpath: 'task',\n // \tloadChildren: () => import('./happening/single/single-happening-page.module')\n // \t\t.then(m => m.SingleHappeningPageModule),\n // \t...guardRoute,\n // },\n];\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-extensions-schedulus-main.js","sourceRoot":"","sources":["../../../../../../libs/extensions/schedulus/main/src/sneat-extensions-schedulus-main.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './schedulus-routing';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { HappeningType } from '@sneat/mod-schedulus-core';
|
|
2
|
+
import { SpaceBaseComponent } from '@sneat/space-components';
|
|
3
|
+
import { IMemberContext } from '@sneat/contactus-core';
|
|
4
|
+
import { CalendarTab } from '@sneat/extensions-schedulus-shared';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class CalendarPageComponent extends SpaceBaseComponent {
|
|
7
|
+
private readonly scheduleNavService;
|
|
8
|
+
protected readonly $tab: import("@angular/core").WritableSignal<CalendarTab>;
|
|
9
|
+
protected readonly $date: import("@angular/core").WritableSignal<string>;
|
|
10
|
+
protected readonly $member: import("@angular/core").WritableSignal<IMemberContext | undefined>;
|
|
11
|
+
constructor();
|
|
12
|
+
private readonly onQueryParamsChanged;
|
|
13
|
+
protected onTabChanged(tab: CalendarTab): void;
|
|
14
|
+
protected onDateChanged(date: string): void;
|
|
15
|
+
protected goNew(type: HappeningType): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarPageComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarPageComponent, "sneat-schedule-page", never, {}, {}, never, never, true, never>;
|
|
18
|
+
}
|