Skip to content

Commit 5f6b9af

Browse files
committed
Adding initial parts for making the calendar work.
1 parent 7ab1482 commit 5f6b9af

64 files changed

Lines changed: 3875 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

eform-client/src/app/plugins/modules/backend-configuration-pn/backend-configuration-pn.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import {
5151
areaRulesReducer,
5252
documentsReducer,
5353
filesReducer,
54+
calendarReducer,
5455
propertiesReducer,
5556
propertyWorkersReducer,
5657
reportV1Reducer,
@@ -95,6 +96,7 @@ import {MatMenu, MatMenuItem, MatMenuTrigger} from "@angular/material/menu";
9596
areaRulesState: areaRulesReducer,
9697
documentsState: documentsReducer,
9798
filesState: filesReducer,
99+
calendarState: calendarReducer,
98100
propertiesState: propertiesReducer,
99101
propertyWorkersState: propertyWorkersReducer,
100102
reportsV1State: reportV1Reducer,

eform-client/src/app/plugins/modules/backend-configuration-pn/backend-configuration-pn.routing.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,14 @@ export const routes: Routes = [
144144
(m) => m.StatisticsModule
145145
),
146146
},
147+
{
148+
path: 'calendar',
149+
canActivate: [AuthGuard],
150+
loadChildren: () =>
151+
import('./modules/calendar/calendar.module').then(
152+
(m) => m.CalendarModule
153+
),
154+
},
147155
],
148156
},
149157
];
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface CalendarBoardModel {
2+
id: number;
3+
name: string;
4+
color: string;
5+
propertyId: number;
6+
}
7+
8+
export const CALENDAR_COLORS: string[] = [
9+
'#4CAF50', '#2196F3', '#FF9800', '#E91E63',
10+
'#9C27B0', '#00BCD4', '#FF5722', '#607D8B',
11+
'#795548', '#F44336', '#3F51B5', '#009688',
12+
];
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import {CalendarRepeatMeta, CalendarRepeatRule} from './calendar-task.model';
2+
3+
export interface CalendarTaskCreateModel {
4+
title: string;
5+
startHour: number;
6+
dur: number;
7+
tags: string[];
8+
assigneeIds: number[];
9+
boardId: number;
10+
color: string;
11+
descriptionHtml: string;
12+
repeatRule: CalendarRepeatRule;
13+
repeatMeta?: CalendarRepeatMeta;
14+
taskDate: string;
15+
driveLink?: string;
16+
propertyId: number;
17+
}
18+
19+
export interface CalendarTaskUpdateModel extends CalendarTaskCreateModel {
20+
id: number;
21+
repeatSeriesId?: string;
22+
}
23+
24+
export type RepeatEditScope = 'this' | 'thisAndFollowing' | 'all';
25+
export type RepeatDeleteScope = 'this' | 'thisAndFollowing' | 'all';
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
export type CalendarRepeatRule =
2+
| 'none'
3+
| 'daily'
4+
| 'weekly'
5+
| 'weekdays'
6+
| 'monthly'
7+
| 'yearly'
8+
| 'custom';
9+
10+
export interface CalendarTaskModel {
11+
id: number;
12+
title: string;
13+
startHour: number; // fractional hour, e.g. 9.5 = 09:30
14+
dur: number; // duration in hours
15+
startText: string; // "09:30"
16+
endText: string; // "10:00"
17+
tags: string[];
18+
assigneeIds: number[];
19+
boardId: number;
20+
color: string;
21+
descriptionHtml: string;
22+
repeatRule: CalendarRepeatRule;
23+
repeatMeta?: CalendarRepeatMeta;
24+
taskDate: string; // ISO "YYYY-MM-DD"
25+
repeatSeriesId?: string;
26+
completed: boolean;
27+
driveLink?: string;
28+
propertyId: number;
29+
}
30+
31+
export interface CalendarRepeatMeta {
32+
kind: string;
33+
n?: number;
34+
weekday?: number;
35+
weekdays?: number[];
36+
dom?: number;
37+
month?: number;
38+
endMode: 'never' | 'after' | 'until';
39+
afterCount?: number;
40+
untilTs?: number;
41+
}
42+
43+
export interface CalendarTaskLayoutModel extends CalendarTaskModel {
44+
_colIndex: number;
45+
_colCount: number;
46+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from './calendar-task.model';
2+
export * from './calendar-board.model';
3+
export * from './repeat-rule.model';
4+
export * from './calendar-task-request.model';
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export interface CustomRepeatConfig {
2+
step: number;
3+
unit: 'day' | 'week' | 'month' | 'year';
4+
weekdays: number[]; // 0=Sun … 6=Sat
5+
endMode: 'never' | 'after' | 'until';
6+
afterCount?: number;
7+
untilTs?: number;
8+
}

eform-client/src/app/plugins/modules/backend-configuration-pn/models/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ export * from './task-tracker';
1616
export * from './task-wizard';
1717
export * from './statistics';
1818
export * from './common-tag.model';
19+
export * from './calendar';
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import {CommonModule} from '@angular/common';
2+
import {NgModule} from '@angular/core';
3+
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
4+
import {RouterModule} from '@angular/router';
5+
import {TranslateModule} from '@ngx-translate/core';
6+
import {DragDropModule} from '@angular/cdk/drag-drop';
7+
import {OverlayModule} from '@angular/cdk/overlay';
8+
import {MatButtonModule} from '@angular/material/button';
9+
import {MatButtonToggleModule} from '@angular/material/button-toggle';
10+
import {MatCardModule} from '@angular/material/card';
11+
import {MatCheckboxModule} from '@angular/material/checkbox';
12+
import {MatChipsModule} from '@angular/material/chips';
13+
import {MatDialogModule} from '@angular/material/dialog';
14+
import {MatExpansionModule} from '@angular/material/expansion';
15+
import {MatFormFieldModule} from '@angular/material/form-field';
16+
import {MatIconModule} from '@angular/material/icon';
17+
import {MatInputModule} from '@angular/material/input';
18+
import {MatListModule} from '@angular/material/list';
19+
import {MatRadioModule} from '@angular/material/radio';
20+
import {MatSelectModule} from '@angular/material/select';
21+
import {MatTooltipModule} from '@angular/material/tooltip';
22+
import {MtxSelectModule} from '@ng-matero/extensions/select';
23+
import {MtxGridModule} from '@ng-matero/extensions/grid';
24+
import {EformSharedModule} from 'src/app/common/modules/eform-shared/eform-shared.module';
25+
import {EformImportedModule} from 'src/app/common/modules/eform-imported/eform-imported.module';
26+
27+
import {CalendarRouting} from './calendar.routing';
28+
import {
29+
CalendarContainerComponent,
30+
CalendarDayColumnComponent,
31+
CalendarHeaderComponent,
32+
CalendarMiniCalendarComponent,
33+
CalendarScheduleViewComponent,
34+
CalendarSidebarComponent,
35+
CalendarTaskBlockComponent,
36+
CalendarWeekGridComponent,
37+
} from './components';
38+
import {
39+
TaskCreateEditModalComponent,
40+
TaskPreviewModalComponent,
41+
TaskDeleteModalComponent,
42+
RepeatScopeModalComponent,
43+
CustomRepeatModalComponent,
44+
BoardCreateModalComponent,
45+
BoardDeleteModalComponent,
46+
} from './modals';
47+
48+
// Re-export modal components for barrel
49+
export {
50+
TaskCreateEditModalComponent,
51+
TaskPreviewModalComponent,
52+
TaskDeleteModalComponent,
53+
RepeatScopeModalComponent,
54+
CustomRepeatModalComponent,
55+
BoardCreateModalComponent,
56+
BoardDeleteModalComponent,
57+
};
58+
59+
@NgModule({
60+
declarations: [
61+
// Components
62+
CalendarContainerComponent,
63+
CalendarDayColumnComponent,
64+
CalendarHeaderComponent,
65+
CalendarSidebarComponent,
66+
CalendarWeekGridComponent,
67+
CalendarTaskBlockComponent,
68+
CalendarScheduleViewComponent,
69+
CalendarMiniCalendarComponent,
70+
// Modals
71+
TaskCreateEditModalComponent,
72+
TaskPreviewModalComponent,
73+
TaskDeleteModalComponent,
74+
RepeatScopeModalComponent,
75+
CustomRepeatModalComponent,
76+
BoardCreateModalComponent,
77+
BoardDeleteModalComponent,
78+
],
79+
imports: [
80+
CommonModule,
81+
FormsModule,
82+
ReactiveFormsModule,
83+
RouterModule,
84+
TranslateModule,
85+
CalendarRouting,
86+
DragDropModule,
87+
OverlayModule,
88+
EformSharedModule,
89+
EformImportedModule,
90+
MatButtonModule,
91+
MatButtonToggleModule,
92+
MatCardModule,
93+
MatCheckboxModule,
94+
MatChipsModule,
95+
MatDialogModule,
96+
MatExpansionModule,
97+
MatFormFieldModule,
98+
MatIconModule,
99+
MatInputModule,
100+
MatListModule,
101+
MatRadioModule,
102+
MatSelectModule,
103+
MatTooltipModule,
104+
MtxSelectModule,
105+
MtxGridModule,
106+
],
107+
providers: [],
108+
})
109+
export class CalendarModule {}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {NgModule} from '@angular/core';
2+
import {RouterModule, Routes} from '@angular/router';
3+
import {CalendarContainerComponent} from './components';
4+
5+
const routes: Routes = [
6+
{
7+
path: '',
8+
component: CalendarContainerComponent,
9+
},
10+
];
11+
12+
@NgModule({
13+
imports: [RouterModule.forChild(routes)],
14+
exports: [RouterModule],
15+
})
16+
export class CalendarRouting {}

0 commit comments

Comments
 (0)