@syncfusion/ej2-schedule 30.2.4 → 31.1.17

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.
Files changed (308) hide show
  1. package/dist/ej2-schedule.min.js +2 -2
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +132 -43
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +132 -43
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/dist/ts/common/calendar-util.d.ts +92 -0
  12. package/dist/ts/common/calendar-util.ts +261 -0
  13. package/dist/ts/common/index.d.ts +4 -0
  14. package/dist/ts/common/index.ts +4 -0
  15. package/dist/ts/components.d.ts +5 -0
  16. package/dist/ts/components.ts +5 -0
  17. package/dist/ts/index.d.ts +6 -0
  18. package/dist/ts/index.ts +7 -0
  19. package/dist/ts/recurrence-editor/date-generator.d.ts +76 -0
  20. package/dist/ts/recurrence-editor/date-generator.ts +1699 -0
  21. package/dist/ts/recurrence-editor/index.d.ts +6 -0
  22. package/dist/ts/recurrence-editor/index.ts +6 -0
  23. package/dist/ts/recurrence-editor/recurrence-editor-model.d.ts +112 -0
  24. package/dist/ts/recurrence-editor/recurrence-editor.d.ts +245 -0
  25. package/dist/ts/recurrence-editor/recurrence-editor.ts +1257 -0
  26. package/dist/ts/schedule/actions/action-base.d.ts +44 -0
  27. package/dist/ts/schedule/actions/action-base.ts +493 -0
  28. package/dist/ts/schedule/actions/crud.d.ts +41 -0
  29. package/dist/ts/schedule/actions/crud.ts +784 -0
  30. package/dist/ts/schedule/actions/data.d.ts +63 -0
  31. package/dist/ts/schedule/actions/data.ts +128 -0
  32. package/dist/ts/schedule/actions/drag.d.ts +75 -0
  33. package/dist/ts/schedule/actions/drag.ts +1401 -0
  34. package/dist/ts/schedule/actions/keyboard.d.ts +100 -0
  35. package/dist/ts/schedule/actions/keyboard.ts +1435 -0
  36. package/dist/ts/schedule/actions/resize.d.ts +27 -0
  37. package/dist/ts/schedule/actions/resize.ts +602 -0
  38. package/dist/ts/schedule/actions/scroll.d.ts +69 -0
  39. package/dist/ts/schedule/actions/scroll.ts +105 -0
  40. package/dist/ts/schedule/actions/touch.d.ts +32 -0
  41. package/dist/ts/schedule/actions/touch.ts +314 -0
  42. package/dist/ts/schedule/actions/virtual-scroll.d.ts +55 -0
  43. package/dist/ts/schedule/actions/virtual-scroll.ts +596 -0
  44. package/dist/ts/schedule/actions/work-cells.d.ts +14 -0
  45. package/dist/ts/schedule/actions/work-cells.ts +151 -0
  46. package/dist/ts/schedule/base/constant.d.ts +102 -0
  47. package/dist/ts/schedule/base/constant.ts +103 -0
  48. package/dist/ts/schedule/base/css-constant.d.ts +475 -0
  49. package/dist/ts/schedule/base/css-constant.ts +475 -0
  50. package/dist/ts/schedule/base/interface.d.ts +673 -0
  51. package/dist/ts/schedule/base/interface.ts +738 -0
  52. package/dist/ts/schedule/base/resource.d.ts +59 -0
  53. package/dist/ts/schedule/base/resource.ts +1091 -0
  54. package/dist/ts/schedule/base/schedule-model.d.ts +930 -0
  55. package/dist/ts/schedule/base/schedule.d.ts +1967 -0
  56. package/dist/ts/schedule/base/schedule.ts +4221 -0
  57. package/dist/ts/schedule/base/type.d.ts +134 -0
  58. package/dist/ts/schedule/base/type.ts +142 -0
  59. package/dist/ts/schedule/base/util.d.ts +266 -0
  60. package/dist/ts/schedule/base/util.ts +492 -0
  61. package/dist/ts/schedule/event-renderer/agenda-base.d.ts +15 -0
  62. package/dist/ts/schedule/event-renderer/agenda-base.ts +423 -0
  63. package/dist/ts/schedule/event-renderer/event-base.d.ts +101 -0
  64. package/dist/ts/schedule/event-renderer/event-base.ts +1501 -0
  65. package/dist/ts/schedule/event-renderer/inline-edit.d.ts +23 -0
  66. package/dist/ts/schedule/event-renderer/inline-edit.ts +287 -0
  67. package/dist/ts/schedule/event-renderer/month.d.ts +60 -0
  68. package/dist/ts/schedule/event-renderer/month.ts +760 -0
  69. package/dist/ts/schedule/event-renderer/timeline-view.d.ts +51 -0
  70. package/dist/ts/schedule/event-renderer/timeline-view.ts +606 -0
  71. package/dist/ts/schedule/event-renderer/vertical-view.d.ts +57 -0
  72. package/dist/ts/schedule/event-renderer/vertical-view.ts +898 -0
  73. package/dist/ts/schedule/event-renderer/year.d.ts +27 -0
  74. package/dist/ts/schedule/event-renderer/year.ts +623 -0
  75. package/dist/ts/schedule/exports/calendar-export.d.ts +16 -0
  76. package/dist/ts/schedule/exports/calendar-export.ts +160 -0
  77. package/dist/ts/schedule/exports/calendar-import.d.ts +18 -0
  78. package/dist/ts/schedule/exports/calendar-import.ts +277 -0
  79. package/dist/ts/schedule/exports/excel-export.d.ts +14 -0
  80. package/dist/ts/schedule/exports/excel-export.ts +89 -0
  81. package/dist/ts/schedule/exports/index.d.ts +7 -0
  82. package/dist/ts/schedule/exports/index.ts +7 -0
  83. package/dist/ts/schedule/exports/print.d.ts +20 -0
  84. package/dist/ts/schedule/exports/print.ts +233 -0
  85. package/dist/ts/schedule/index.d.ts +26 -0
  86. package/dist/ts/schedule/index.ts +26 -0
  87. package/dist/ts/schedule/models/event-settings-model.d.ts +165 -0
  88. package/dist/ts/schedule/models/event-settings.d.ts +149 -0
  89. package/dist/ts/schedule/models/event-settings.ts +187 -0
  90. package/dist/ts/schedule/models/field-options-model.d.ts +37 -0
  91. package/dist/ts/schedule/models/field-options.d.ts +31 -0
  92. package/dist/ts/schedule/models/field-options.ts +41 -0
  93. package/dist/ts/schedule/models/fields-model.d.ts +129 -0
  94. package/dist/ts/schedule/models/fields.d.ts +117 -0
  95. package/dist/ts/schedule/models/fields.ts +149 -0
  96. package/dist/ts/schedule/models/group-model.d.ts +69 -0
  97. package/dist/ts/schedule/models/group.d.ts +60 -0
  98. package/dist/ts/schedule/models/group.ts +75 -0
  99. package/dist/ts/schedule/models/header-rows-model.d.ts +33 -0
  100. package/dist/ts/schedule/models/header-rows.d.ts +30 -0
  101. package/dist/ts/schedule/models/header-rows.ts +35 -0
  102. package/dist/ts/schedule/models/models.d.ts +14 -0
  103. package/dist/ts/schedule/models/models.ts +15 -0
  104. package/dist/ts/schedule/models/quick-info-templates-model.d.ts +52 -0
  105. package/dist/ts/schedule/models/quick-info-templates.d.ts +47 -0
  106. package/dist/ts/schedule/models/quick-info-templates.ts +56 -0
  107. package/dist/ts/schedule/models/resources-model.d.ts +122 -0
  108. package/dist/ts/schedule/models/resources.d.ts +106 -0
  109. package/dist/ts/schedule/models/resources.ts +138 -0
  110. package/dist/ts/schedule/models/time-scale-model.d.ts +57 -0
  111. package/dist/ts/schedule/models/time-scale.d.ts +50 -0
  112. package/dist/ts/schedule/models/time-scale.ts +61 -0
  113. package/dist/ts/schedule/models/toolbar-model.d.ts +196 -0
  114. package/dist/ts/schedule/models/toolbar.d.ts +176 -0
  115. package/dist/ts/schedule/models/toolbar.ts +196 -0
  116. package/dist/ts/schedule/models/views-model.d.ts +370 -0
  117. package/dist/ts/schedule/models/views.d.ts +335 -0
  118. package/dist/ts/schedule/models/views.ts +408 -0
  119. package/dist/ts/schedule/models/work-hours-model.d.ts +29 -0
  120. package/dist/ts/schedule/models/work-hours.d.ts +24 -0
  121. package/dist/ts/schedule/models/work-hours.ts +31 -0
  122. package/dist/ts/schedule/popups/event-tooltip.d.ts +16 -0
  123. package/dist/ts/schedule/popups/event-tooltip.ts +203 -0
  124. package/dist/ts/schedule/popups/event-window.d.ts +118 -0
  125. package/dist/ts/schedule/popups/event-window.ts +2055 -0
  126. package/dist/ts/schedule/popups/form-validator.d.ts +16 -0
  127. package/dist/ts/schedule/popups/form-validator.ts +110 -0
  128. package/dist/ts/schedule/popups/quick-popups.d.ts +78 -0
  129. package/dist/ts/schedule/popups/quick-popups.ts +1470 -0
  130. package/dist/ts/schedule/renderer/agenda.d.ts +45 -0
  131. package/dist/ts/schedule/renderer/agenda.ts +497 -0
  132. package/dist/ts/schedule/renderer/day.d.ts +20 -0
  133. package/dist/ts/schedule/renderer/day.ts +28 -0
  134. package/dist/ts/schedule/renderer/header-renderer.d.ts +48 -0
  135. package/dist/ts/schedule/renderer/header-renderer.ts +736 -0
  136. package/dist/ts/schedule/renderer/month-agenda.d.ts +29 -0
  137. package/dist/ts/schedule/renderer/month-agenda.ts +184 -0
  138. package/dist/ts/schedule/renderer/month.d.ts +61 -0
  139. package/dist/ts/schedule/renderer/month.ts +766 -0
  140. package/dist/ts/schedule/renderer/renderer.d.ts +13 -0
  141. package/dist/ts/schedule/renderer/renderer.ts +165 -0
  142. package/dist/ts/schedule/renderer/timeline-header-row.d.ts +15 -0
  143. package/dist/ts/schedule/renderer/timeline-header-row.ts +132 -0
  144. package/dist/ts/schedule/renderer/timeline-month.d.ts +29 -0
  145. package/dist/ts/schedule/renderer/timeline-month.ts +184 -0
  146. package/dist/ts/schedule/renderer/timeline-view.d.ts +31 -0
  147. package/dist/ts/schedule/renderer/timeline-view.ts +308 -0
  148. package/dist/ts/schedule/renderer/timeline-year.d.ts +22 -0
  149. package/dist/ts/schedule/renderer/timeline-year.ts +450 -0
  150. package/dist/ts/schedule/renderer/vertical-view.d.ts +63 -0
  151. package/dist/ts/schedule/renderer/vertical-view.ts +911 -0
  152. package/dist/ts/schedule/renderer/view-base.d.ts +83 -0
  153. package/dist/ts/schedule/renderer/view-base.ts +709 -0
  154. package/dist/ts/schedule/renderer/week.d.ts +22 -0
  155. package/dist/ts/schedule/renderer/week.ts +35 -0
  156. package/dist/ts/schedule/renderer/work-week.d.ts +22 -0
  157. package/dist/ts/schedule/renderer/work-week.ts +36 -0
  158. package/dist/ts/schedule/renderer/year.d.ts +46 -0
  159. package/dist/ts/schedule/renderer/year.ts +470 -0
  160. package/dist/ts/schedule/timezone/timezone.d.ts +16 -0
  161. package/dist/ts/schedule/timezone/timezone.ts +313 -0
  162. package/package.json +56 -21
  163. package/src/schedule/actions/action-base.js +3 -0
  164. package/src/schedule/actions/drag.js +11 -4
  165. package/src/schedule/actions/keyboard.js +1 -1
  166. package/src/schedule/actions/resize.js +9 -5
  167. package/src/schedule/actions/virtual-scroll.js +3 -0
  168. package/src/schedule/base/css-constant.d.ts +2 -0
  169. package/src/schedule/base/css-constant.js +2 -0
  170. package/src/schedule/base/schedule.js +15 -1
  171. package/src/schedule/event-renderer/agenda-base.d.ts +1 -1
  172. package/src/schedule/event-renderer/agenda-base.js +5 -4
  173. package/src/schedule/event-renderer/inline-edit.js +11 -6
  174. package/src/schedule/event-renderer/month.js +5 -3
  175. package/src/schedule/event-renderer/vertical-view.js +3 -0
  176. package/src/schedule/event-renderer/year.d.ts +2 -0
  177. package/src/schedule/event-renderer/year.js +28 -4
  178. package/src/schedule/popups/event-tooltip.js +4 -0
  179. package/src/schedule/popups/event-window.js +2 -2
  180. package/src/schedule/popups/quick-popups.js +5 -1
  181. package/src/schedule/renderer/agenda.js +3 -2
  182. package/src/schedule/renderer/month.js +9 -7
  183. package/src/schedule/renderer/vertical-view.js +1 -1
  184. package/src/schedule/renderer/view-base.d.ts +2 -0
  185. package/src/schedule/renderer/view-base.js +9 -0
  186. package/src/schedule/renderer/year.js +3 -2
  187. package/styles/bds-lite.css +11 -8
  188. package/styles/bds.css +11 -8
  189. package/styles/bootstrap-dark-lite.css +12 -9
  190. package/styles/bootstrap-dark.css +12 -9
  191. package/styles/bootstrap-lite.css +12 -9
  192. package/styles/bootstrap.css +12 -9
  193. package/styles/bootstrap4-lite.css +11 -8
  194. package/styles/bootstrap4.css +11 -8
  195. package/styles/bootstrap5-dark-lite.css +11 -8
  196. package/styles/bootstrap5-dark.css +11 -8
  197. package/styles/bootstrap5-lite.css +11 -8
  198. package/styles/bootstrap5.3-lite.css +11 -8
  199. package/styles/bootstrap5.3.css +11 -8
  200. package/styles/bootstrap5.css +11 -8
  201. package/styles/fabric-dark-lite.css +12 -9
  202. package/styles/fabric-dark.css +12 -9
  203. package/styles/fabric-lite.css +12 -9
  204. package/styles/fabric.css +12 -9
  205. package/styles/fluent-dark-lite.css +13 -10
  206. package/styles/fluent-dark.css +13 -10
  207. package/styles/fluent-lite.css +13 -10
  208. package/styles/fluent.css +13 -10
  209. package/styles/fluent2-lite.css +11 -8
  210. package/styles/fluent2.css +11 -8
  211. package/styles/highcontrast-light-lite.css +12 -9
  212. package/styles/highcontrast-light.css +12 -9
  213. package/styles/highcontrast-lite.css +12 -9
  214. package/styles/highcontrast.css +12 -9
  215. package/styles/material-dark-lite.css +12 -9
  216. package/styles/material-dark.css +12 -9
  217. package/styles/material-lite.css +12 -9
  218. package/styles/material.css +12 -9
  219. package/styles/material3-dark-lite.css +11 -8
  220. package/styles/material3-dark.css +11 -8
  221. package/styles/material3-lite.css +11 -8
  222. package/styles/material3.css +11 -8
  223. package/styles/recurrence-editor/_bds-definition.scss +1 -0
  224. package/styles/recurrence-editor/_bootstrap-dark-definition.scss +1 -0
  225. package/styles/recurrence-editor/_bootstrap-definition.scss +1 -0
  226. package/styles/recurrence-editor/_bootstrap4-definition.scss +1 -0
  227. package/styles/recurrence-editor/_bootstrap5-definition.scss +1 -0
  228. package/styles/recurrence-editor/_bootstrap5.3-definition.scss +1 -0
  229. package/styles/recurrence-editor/_fabric-dark-definition.scss +1 -0
  230. package/styles/recurrence-editor/_fabric-definition.scss +1 -0
  231. package/styles/recurrence-editor/_fluent-definition.scss +1 -0
  232. package/styles/recurrence-editor/_fluent2-definition.scss +1 -0
  233. package/styles/recurrence-editor/_fusionnew-definition.scss +1 -0
  234. package/styles/recurrence-editor/_highcontrast-definition.scss +1 -0
  235. package/styles/recurrence-editor/_highcontrast-light-definition.scss +1 -0
  236. package/styles/recurrence-editor/_layout.scss +5 -1
  237. package/styles/recurrence-editor/_material-dark-definition.scss +1 -0
  238. package/styles/recurrence-editor/_material-definition.scss +1 -0
  239. package/styles/recurrence-editor/_material3-definition.scss +1 -0
  240. package/styles/recurrence-editor/_tailwind-definition.scss +1 -0
  241. package/styles/recurrence-editor/_tailwind3-definition.scss +1 -0
  242. package/styles/recurrence-editor/bds.css +3 -0
  243. package/styles/recurrence-editor/bootstrap-dark.css +4 -1
  244. package/styles/recurrence-editor/bootstrap.css +4 -1
  245. package/styles/recurrence-editor/bootstrap4.css +3 -0
  246. package/styles/recurrence-editor/bootstrap5-dark.css +3 -0
  247. package/styles/recurrence-editor/bootstrap5.3.css +3 -0
  248. package/styles/recurrence-editor/bootstrap5.css +3 -0
  249. package/styles/recurrence-editor/fabric-dark.css +4 -1
  250. package/styles/recurrence-editor/fabric.css +4 -1
  251. package/styles/recurrence-editor/fluent-dark.css +4 -1
  252. package/styles/recurrence-editor/fluent.css +4 -1
  253. package/styles/recurrence-editor/fluent2.css +3 -0
  254. package/styles/recurrence-editor/highcontrast-light.css +4 -1
  255. package/styles/recurrence-editor/highcontrast.css +4 -1
  256. package/styles/recurrence-editor/material-dark.css +4 -1
  257. package/styles/recurrence-editor/material.css +4 -1
  258. package/styles/recurrence-editor/material3-dark.css +3 -0
  259. package/styles/recurrence-editor/material3.css +3 -0
  260. package/styles/recurrence-editor/tailwind-dark.css +3 -0
  261. package/styles/recurrence-editor/tailwind.css +3 -0
  262. package/styles/recurrence-editor/tailwind3.css +3 -0
  263. package/styles/schedule/_bds-definition.scss +2 -0
  264. package/styles/schedule/_bootstrap-dark-definition.scss +2 -0
  265. package/styles/schedule/_bootstrap-definition.scss +2 -0
  266. package/styles/schedule/_bootstrap4-definition.scss +2 -0
  267. package/styles/schedule/_bootstrap5-definition.scss +2 -0
  268. package/styles/schedule/_bootstrap5.3-definition.scss +2 -0
  269. package/styles/schedule/_fabric-dark-definition.scss +2 -0
  270. package/styles/schedule/_fabric-definition.scss +2 -0
  271. package/styles/schedule/_fluent-definition.scss +3 -1
  272. package/styles/schedule/_fluent2-definition.scss +2 -0
  273. package/styles/schedule/_fusionnew-definition.scss +2 -0
  274. package/styles/schedule/_highcontrast-definition.scss +2 -0
  275. package/styles/schedule/_highcontrast-light-definition.scss +2 -0
  276. package/styles/schedule/_layout.scss +12 -11
  277. package/styles/schedule/_material-dark-definition.scss +2 -0
  278. package/styles/schedule/_material-definition.scss +2 -0
  279. package/styles/schedule/_material3-definition.scss +2 -0
  280. package/styles/schedule/_tailwind-definition.scss +2 -0
  281. package/styles/schedule/_tailwind3-definition.scss +2 -0
  282. package/styles/schedule/bds.css +8 -8
  283. package/styles/schedule/bootstrap-dark.css +8 -8
  284. package/styles/schedule/bootstrap.css +8 -8
  285. package/styles/schedule/bootstrap4.css +8 -8
  286. package/styles/schedule/bootstrap5-dark.css +8 -8
  287. package/styles/schedule/bootstrap5.3.css +8 -8
  288. package/styles/schedule/bootstrap5.css +8 -8
  289. package/styles/schedule/fabric-dark.css +8 -8
  290. package/styles/schedule/fabric.css +8 -8
  291. package/styles/schedule/fluent-dark.css +9 -9
  292. package/styles/schedule/fluent.css +9 -9
  293. package/styles/schedule/fluent2.css +8 -8
  294. package/styles/schedule/highcontrast-light.css +8 -8
  295. package/styles/schedule/highcontrast.css +8 -8
  296. package/styles/schedule/material-dark.css +8 -8
  297. package/styles/schedule/material.css +8 -8
  298. package/styles/schedule/material3-dark.css +8 -8
  299. package/styles/schedule/material3.css +8 -8
  300. package/styles/schedule/tailwind-dark.css +8 -8
  301. package/styles/schedule/tailwind.css +8 -8
  302. package/styles/schedule/tailwind3.css +8 -8
  303. package/styles/tailwind-dark-lite.css +11 -8
  304. package/styles/tailwind-dark.css +11 -8
  305. package/styles/tailwind-lite.css +11 -8
  306. package/styles/tailwind.css +11 -8
  307. package/styles/tailwind3-lite.css +11 -8
  308. package/styles/tailwind3.css +11 -8
@@ -0,0 +1,22 @@
1
+ import { Schedule } from '../base/schedule';
2
+ import { VerticalView } from './vertical-view';
3
+ /**
4
+ * week view
5
+ */
6
+ export declare class Week extends VerticalView {
7
+ viewClass: string;
8
+ /**
9
+ * Constructor for week view
10
+ *
11
+ * @param {Schedule} parent Accepts the schedule instance
12
+ */
13
+ constructor(parent: Schedule);
14
+ startDate(): Date;
15
+ endDate(): Date;
16
+ /**
17
+ * Get module name.
18
+ *
19
+ * @returns {string} Returns the module name.
20
+ */
21
+ protected getModuleName(): string;
22
+ }
@@ -0,0 +1,35 @@
1
+ import { Schedule } from '../base/schedule';
2
+ import { VerticalView } from './vertical-view';
3
+
4
+ /**
5
+ * week view
6
+ */
7
+ export class Week extends VerticalView {
8
+ public viewClass: string = 'e-week-view';
9
+
10
+ /**
11
+ * Constructor for week view
12
+ *
13
+ * @param {Schedule} parent Accepts the schedule instance
14
+ */
15
+ constructor(parent: Schedule) {
16
+ super(parent);
17
+ }
18
+
19
+ public startDate(): Date {
20
+ return this.getViewStartDate();
21
+ }
22
+
23
+ public endDate(): Date {
24
+ return this.getViewEndDate();
25
+ }
26
+
27
+ /**
28
+ * Get module name.
29
+ *
30
+ * @returns {string} Returns the module name.
31
+ */
32
+ protected getModuleName(): string {
33
+ return 'week';
34
+ }
35
+ }
@@ -0,0 +1,22 @@
1
+ import { Schedule } from '../base/schedule';
2
+ import { VerticalView } from './vertical-view';
3
+ /**
4
+ * work week view
5
+ */
6
+ export declare class WorkWeek extends VerticalView {
7
+ viewClass: string;
8
+ /**
9
+ * Constructor for work week view
10
+ *
11
+ * @param {Schedule} parent Accepts the schedule instance
12
+ */
13
+ constructor(parent: Schedule);
14
+ startDate(): Date;
15
+ endDate(): Date;
16
+ /**
17
+ * Get module name.
18
+ *
19
+ * @returns {string} Returns the module name.
20
+ */
21
+ protected getModuleName(): string;
22
+ }
@@ -0,0 +1,36 @@
1
+ import { Schedule } from '../base/schedule';
2
+ import { VerticalView } from './vertical-view';
3
+
4
+ /**
5
+ * work week view
6
+ */
7
+ export class WorkWeek extends VerticalView {
8
+ public viewClass: string = 'e-work-week-view';
9
+
10
+ /**
11
+ * Constructor for work week view
12
+ *
13
+ * @param {Schedule} parent Accepts the schedule instance
14
+ */
15
+ constructor(parent: Schedule) {
16
+ super(parent);
17
+ }
18
+
19
+ public startDate(): Date {
20
+ return this.getViewStartDate();
21
+ }
22
+
23
+ public endDate(): Date {
24
+ return this.getViewEndDate();
25
+ }
26
+
27
+ /**
28
+ * Get module name.
29
+ *
30
+ * @returns {string} Returns the module name.
31
+ */
32
+ protected getModuleName(): string {
33
+ return 'workWeek';
34
+ }
35
+
36
+ }
@@ -0,0 +1,46 @@
1
+ import { Schedule } from '../base/schedule';
2
+ import { ViewBase } from './view-base';
3
+ import { IRenderer, TdData, NotifyEventArgs } from '../base/interface';
4
+ import { NavigationDirection } from '../base/type';
5
+ /**
6
+ * year view
7
+ */
8
+ export declare class Year extends ViewBase implements IRenderer {
9
+ viewClass: string;
10
+ isInverseTableSelect: boolean;
11
+ colLevels: TdData[][];
12
+ rowCount: number;
13
+ columnCount: number;
14
+ private yearEventModule;
15
+ constructor(parent: Schedule);
16
+ protected getModuleName(): string;
17
+ renderLayout(className: string): void;
18
+ renderHeader(headerWrapper: HTMLElement): void;
19
+ renderContent(content: HTMLElement): void;
20
+ renderCalendarHeader(currentDate: Date): HTMLElement;
21
+ renderCalendarContent(currentDate: Date): HTMLElement;
22
+ createTableColGroup(count: number): HTMLElement;
23
+ getMonthName(date: Date): string;
24
+ generateColumnLevels(): TdData[][];
25
+ getDateSlots(renderDates: Date[], workDays: number[], startHour?: string, endHour?: string): TdData[];
26
+ getMonthDates(date: Date): Date[];
27
+ getRowColumnCount(type: string): number;
28
+ isCurrentDate(date: Date): boolean;
29
+ getMonths(): number[];
30
+ private renderTemplates;
31
+ private onCellClick;
32
+ onContentScroll(e: Event): void;
33
+ onScrollUiUpdate(args: NotifyEventArgs): void;
34
+ getStartDate(): Date;
35
+ getEndDate(): Date;
36
+ startDate(): Date;
37
+ endDate(): Date;
38
+ getEndDateFromStartDate(start: Date): Date;
39
+ getNextPreviousDate(type: NavigationDirection): Date;
40
+ getDateRangeText(date?: Date, dateCollection?: Date[]): string;
41
+ addEventListener(): void;
42
+ removeEventListener(): void;
43
+ onDataReady(args: NotifyEventArgs): void;
44
+ scrollToDate(scrollDate: Date): void;
45
+ destroy(): void;
46
+ }
@@ -0,0 +1,470 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { EventHandler, formatUnit, createElement, addClass, closest, prepend, append, extend, isNullOrUndefined } from '@syncfusion/ej2-base';
3
+ import { Schedule } from '../base/schedule';
4
+ import { ViewBase } from './view-base';
5
+ import { IRenderer, EventClickArgs, TdData, NotifyEventArgs, CellTemplateArgs, CallbackFunction, CellClickEventArgs } from '../base/interface';
6
+ import { YearEvent } from '../event-renderer/year';
7
+ import * as util from '../base/util';
8
+ import * as event from '../base/constant';
9
+ import * as cls from '../base/css-constant';
10
+ import { NavigationDirection } from '../base/type';
11
+
12
+ /**
13
+ * year view
14
+ */
15
+ export class Year extends ViewBase implements IRenderer {
16
+ public viewClass: string = 'e-year-view';
17
+ public isInverseTableSelect: boolean = false;
18
+ public colLevels: TdData[][];
19
+ public rowCount: number;
20
+ public columnCount: number;
21
+ private yearEventModule: YearEvent = null;
22
+
23
+ constructor(parent: Schedule) {
24
+ super(parent);
25
+ }
26
+
27
+ protected getModuleName(): string {
28
+ return 'year';
29
+ }
30
+
31
+ public renderLayout(className: string): void {
32
+ if (this.parent.resourceBase) {
33
+ this.parent.resourceBase.generateResourceLevels([(<TdData>{ renderDates: this.parent.activeView.renderDates })]);
34
+ }
35
+ this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));
36
+ const viewTypeClass: string = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
37
+ addClass([this.element], [this.viewClass, viewTypeClass, className]);
38
+ this.renderPanel(className);
39
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
40
+ addClass([this.element], [cls.VIRTUAL_SCROLL_CLASS]);
41
+ }
42
+ const calendarTable: HTMLElement = this.createTableLayout(cls.OUTER_TABLE_CLASS) as HTMLElement;
43
+ this.element.appendChild(calendarTable);
44
+ this.element.querySelector('table').setAttribute('role', 'presentation');
45
+ const calendarTBody: HTMLElement = calendarTable.querySelector('tbody');
46
+ this.rowCount = this.getRowColumnCount('row');
47
+ this.columnCount = this.getRowColumnCount('column');
48
+ this.renderHeader(calendarTBody);
49
+ this.renderContent(calendarTBody);
50
+ if (this.parent.currentView !== 'Year' && this.parent.uiStateValues.isGroupAdaptive) {
51
+ this.generateColumnLevels();
52
+ this.renderResourceMobileLayout();
53
+ }
54
+ EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), 'scroll', this.onContentScroll, this);
55
+ this.parent.notify(event.contentReady, {});
56
+ }
57
+
58
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
+ public renderHeader(headerWrapper: HTMLElement): void { /** */ }
60
+
61
+ public renderContent(content: HTMLElement): void {
62
+ const tr: HTMLElement = createElement('tr');
63
+ content.appendChild(tr);
64
+ const td: HTMLElement = createElement('td');
65
+ tr.appendChild(td);
66
+ this.element.querySelector('tbody').appendChild(tr);
67
+ const contentWrapper: HTMLElement = createElement('div', { className: cls.CONTENT_WRAP_CLASS });
68
+ td.appendChild(contentWrapper);
69
+ const calendarTable: HTMLElement = this.createTableLayout('e-calendar-table') as HTMLElement;
70
+ contentWrapper.appendChild(calendarTable);
71
+ const cTr: HTMLElement = createElement('tr');
72
+ calendarTable.querySelector('tbody').appendChild(cTr);
73
+ const cTd: HTMLElement = createElement('td');
74
+ cTr.appendChild(cTd);
75
+ const calendarWrapper: HTMLElement = createElement('div', { className: 'e-calendar-wrapper' });
76
+ cTd.appendChild(calendarWrapper);
77
+ const months: number[] = this.getMonths();
78
+ for (const month of months) {
79
+ const currentMonth: Date = new Date(this.parent.selectedDate.getFullYear(), month, 1);
80
+ const calendarElement: HTMLElement = createElement('div', {
81
+ className: 'e-month-calendar e-calendar',
82
+ attrs: { 'data-role': 'calendar' }
83
+ });
84
+ calendarElement.appendChild(this.renderCalendarHeader(currentMonth));
85
+ calendarElement.appendChild(this.renderCalendarContent(currentMonth));
86
+ calendarWrapper.appendChild(calendarElement);
87
+ }
88
+ this.renderDates.splice(0, 1);
89
+ }
90
+ public renderCalendarHeader(currentDate: Date): HTMLElement {
91
+ const headerWrapper: HTMLElement = createElement('div', { className: 'e-header e-month' });
92
+ const headerContent: HTMLElement = createElement('div', { className: 'e-day e-title' });
93
+ if (this.parent.activeViewOptions.monthHeaderTemplate) {
94
+ const args: CellTemplateArgs = { date: currentDate, type: 'monthHeader' };
95
+ this.renderTemplates(this.parent.getMonthHeaderTemplate(), args, 'monthHeaderTemplate',
96
+ this.parent.activeViewOptions.monthHeaderTemplateName, headerContent);
97
+ }
98
+ else {
99
+ headerContent.innerHTML = this.getMonthName(currentDate);
100
+ }
101
+ headerWrapper.appendChild(headerContent);
102
+ this.parent.trigger(event.renderCell, { elementType: 'headerCells', element: headerContent, date: currentDate });
103
+ return headerWrapper;
104
+ }
105
+
106
+ public renderCalendarContent(currentDate: Date): HTMLElement {
107
+ const dateCollection: Date[] = this.getMonthDates(currentDate);
108
+ const contentWrapper: HTMLElement = createElement('div', { className: 'e-content e-month' });
109
+ const contentTable: HTMLElement = this.createTableLayout('e-calendar-table ' + cls.CONTENT_TABLE_CLASS) as HTMLElement;
110
+ contentWrapper.appendChild(contentTable);
111
+ this.setAriaAttributes(contentTable);
112
+ const thead: HTMLElement = createElement('thead', { className: 'e-week-header' });
113
+ const tr: HTMLElement = createElement('tr');
114
+ let currentWeek: Date = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.activeViewOptions.firstDayOfWeek);
115
+ if (this.parent.activeViewOptions.showWeekNumber) {
116
+ tr.appendChild(createElement('th'));
117
+ }
118
+ for (let i: number = 0; i < util.WEEK_LENGTH; i++) {
119
+ if (this.parent.activeViewOptions.dayHeaderTemplate) {
120
+ const th: HTMLElement = createElement('th');
121
+ const args: CellTemplateArgs = { date: currentWeek, type: 'dayHeader' };
122
+ this.renderTemplates(this.parent.getDayHeaderTemplate(), args, 'dayHeaderTemplate',
123
+ this.parent.activeViewOptions.dayHeaderTemplateName, th);
124
+ tr.appendChild(th);
125
+ }
126
+ else {
127
+ tr.appendChild(createElement('th', { innerHTML: this.parent.getDayNames('narrow')[currentWeek.getDay()] }));
128
+ }
129
+ const nextDay: Date = new Date(currentWeek.getTime() + util.MS_PER_DAY);
130
+ currentWeek = nextDay.getDate() === currentWeek.getDate() ? util.addDays(nextDay, 1) : nextDay;
131
+ }
132
+ thead.appendChild(tr);
133
+ prepend([thead], contentTable);
134
+ const tbody: HTMLTableSectionElement = contentTable.querySelector('tbody');
135
+ while (dateCollection.length > 0) {
136
+ const weekDates: Date[] = dateCollection.splice(0, util.WEEK_LENGTH);
137
+ const tr: HTMLElement = createElement('tr');
138
+ if (this.parent.activeViewOptions.showWeekNumber) {
139
+ const weekNumber: string = this.parent.getWeekNumberContent(weekDates);
140
+ const td: HTMLElement = createElement('td', {
141
+ className: 'e-week-number',
142
+ attrs: { 'title': this.parent.localeObj.getConstant('week') + ' ' + weekNumber },
143
+ innerHTML: weekNumber
144
+ });
145
+ tr.appendChild(td);
146
+ this.parent.trigger(event.renderCell, { elementType: 'weekNumberCells', element: td });
147
+ }
148
+ for (const date of weekDates) {
149
+ const td: HTMLElement = createElement('td', {
150
+ className: 'e-cell ' + cls.WORK_CELLS_CLASS,
151
+ attrs: { 'data-date': date.getTime().toString() }
152
+ });
153
+ if (this.parent.activeViewOptions.cellHeaderTemplate) {
154
+ const args: CellTemplateArgs = { date: date, type: 'monthCells' };
155
+ this.renderTemplates(this.parent.getCellHeaderTemplate(), args, 'cellHeaderTemplate',
156
+ this.parent.activeViewOptions.cellHeaderTemplateName, td);
157
+ }
158
+ else {
159
+ const span: HTMLElement = createElement('span', {
160
+ className: 'e-day', innerHTML: this.parent.globalize.formatDate(date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }),
161
+ attrs: { title: this.parent.globalize.formatDate(date, { type: 'date', skeleton: 'full' }) }
162
+ });
163
+ td.appendChild(span);
164
+ }
165
+ if (this.parent.activeViewOptions.cellTemplate) {
166
+ const args: CellTemplateArgs = { date: date, type: 'monthCells' };
167
+ this.renderTemplates(this.parent.getCellTemplate(), args, 'cellTemplate',
168
+ this.parent.activeViewOptions.cellTemplateName, td);
169
+ }
170
+
171
+ let classList: string[] = [];
172
+ if (currentDate.getMonth() !== date.getMonth()) {
173
+ classList.push(cls.OTHERMONTH_CLASS);
174
+ if (td.firstElementChild && !this.parent.activeViewOptions.cellTemplate) {
175
+ td.firstElementChild.setAttribute('aria-disabled', 'true');
176
+ }
177
+ }
178
+ if (this.isCurrentDate(date) && currentDate.getMonth() === date.getMonth()) {
179
+ classList = classList.concat(['e-today', 'e-selected']);
180
+ }
181
+ if (classList.length > 0) {
182
+ addClass([td], classList);
183
+ }
184
+ tr.appendChild(td);
185
+ if (currentDate.getMonth() === date.getMonth()) {
186
+ this.renderDates.push(new Date(date));
187
+ }
188
+ if (!this.parent.isMinMaxDate(date)) {
189
+ addClass([td], cls.DISABLE_DATES);
190
+ }
191
+ else {
192
+ EventHandler.add(td, 'click', this.onCellClick, this);
193
+ if (!this.parent.isAdaptive) {
194
+ EventHandler.add(td, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
195
+ }
196
+ }
197
+ this.parent.trigger(event.renderCell, { elementType: 'workCells', element: td, date: date });
198
+ }
199
+ tbody.appendChild(tr);
200
+ }
201
+ return contentWrapper;
202
+ }
203
+
204
+ public createTableColGroup(count: number): HTMLElement {
205
+ const colGroupEle: HTMLElement = createElement('colgroup');
206
+ for (let i: number = 0; i < count; i++) {
207
+ colGroupEle.appendChild(createElement('col'));
208
+ }
209
+ return colGroupEle;
210
+ }
211
+
212
+ public getMonthName(date: Date): string {
213
+ const month: string = this.parent.globalize.formatDate(date, {
214
+ format: this.parent.activeViewOptions.dateFormat || 'MMMM y',
215
+ calendar: this.parent.getCalendarMode()
216
+ });
217
+ return util.capitalizeFirstWord(month, 'multiple');
218
+ }
219
+
220
+ public generateColumnLevels(): TdData[][] {
221
+ let colLevels: TdData[][] = [];
222
+ const level: TdData[] = this.getDateSlots([this.parent.selectedDate], this.parent.activeViewOptions.workDays);
223
+ if (this.parent.activeViewOptions.group.resources.length > 0) {
224
+ colLevels = this.parent.resourceBase.generateResourceLevels(level);
225
+ if (this.parent.uiStateValues.isGroupAdaptive) {
226
+ const resourceLevel: TdData = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];
227
+ colLevels = [this.getDateSlots([this.parent.selectedDate], resourceLevel.workDays)];
228
+ }
229
+ } else {
230
+ colLevels.push(level);
231
+ }
232
+ colLevels.pop();
233
+ this.colLevels = colLevels;
234
+ return colLevels;
235
+ }
236
+
237
+ // eslint-disable-next-line max-len
238
+ public getDateSlots(renderDates: Date[], workDays: number[], startHour: string = this.parent.workHours.start, endHour: string = this.parent.workHours.end): TdData[] {
239
+ const dateCol: TdData[] = [{
240
+ date: renderDates[0], type: 'dateHeader', className: [cls.HEADER_CELLS_CLASS], colSpan: 1, workDays: workDays,
241
+ startHour: new Date(+this.parent.globalize.parseDate(startHour, { skeleton: 'Hm' })),
242
+ endHour: new Date(+this.parent.globalize.parseDate(endHour, { skeleton: 'Hm' }))
243
+ }];
244
+ return dateCol;
245
+ }
246
+
247
+ public getMonthDates(date: Date): Date[] {
248
+ const startDate: Date = util.getWeekFirstDate(util.firstDateOfMonth(date), this.parent.activeViewOptions.firstDayOfWeek);
249
+ const endDate: Date = util.addDays(new Date(+startDate), (6 * util.WEEK_LENGTH));
250
+ const dateCollection: Date[] = [];
251
+ for (let start: Date = startDate; start.getTime() < endDate.getTime(); start = util.addDays(start, 1)) {
252
+ dateCollection.push(util.resetTime(new Date(start)));
253
+ }
254
+ return dateCollection;
255
+ }
256
+
257
+ public getRowColumnCount(type: string): number {
258
+ const months: number[] = this.getMonths();
259
+ const year: number = this.parent.selectedDate.getFullYear();
260
+ const monthDaysCount: number[] = [];
261
+ for (const month of months) {
262
+ monthDaysCount.push(new Date(year, month, 1).getDay() + new Date(year, month + 1, 0).getDate());
263
+ }
264
+ const maxCount: number = Math.max(...monthDaysCount);
265
+ let count: number;
266
+ if (type === 'row') {
267
+ count = this.parent.activeViewOptions.orientation === 'Horizontal' ? months.length : maxCount;
268
+ } else {
269
+ count = this.parent.activeViewOptions.orientation === 'Horizontal' ? maxCount : months.length;
270
+ }
271
+ return count;
272
+ }
273
+
274
+ public isCurrentDate(date: Date): boolean {
275
+ return util.resetTime(new Date()).getTime() === util.resetTime(new Date(date.getTime())).getTime();
276
+ }
277
+
278
+ public getMonths(): number[] {
279
+ // eslint-disable-next-line prefer-spread
280
+ return Array.apply(null, { length: this.parent.activeViewOptions.monthsCount }).map((value: number, index: number) =>
281
+ this.parent.firstMonthOfYear + index);
282
+ }
283
+
284
+ private renderTemplates(fn: CallbackFunction, args: CellTemplateArgs, tName: string, vName: string, ele: HTMLElement): void {
285
+ const templateId: string = this.parent.element.id + '_' + vName + tName;
286
+ const template: HTMLElement[] =
287
+ [].slice.call(fn(args, this.parent, tName, templateId, false, undefined, undefined, this.parent.root));
288
+ append(template, ele);
289
+ }
290
+
291
+ private onCellClick(e: Event): void {
292
+ let target: Element = closest((e.target as Element), '.' + cls.WORK_CELLS_CLASS);
293
+ const startDate: Date = this.parent.getDateFromElement(target);
294
+ this.parent.activeCellsData = this.parent.getCellDetails(target);
295
+ const isPrevious: boolean = startDate.getTime() < this.getStartDate().getTime();
296
+ if (isPrevious || startDate.getTime() > this.getEndDate().getTime()) {
297
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate(isPrevious ? 'Previous' : 'Next'), e);
298
+ const activeDate: number = this.parent.activeCellsData.startTime.getTime();
299
+ const inRange: boolean = activeDate >= this.getStartDate().getTime() && activeDate <= this.getEndDate().getTime();
300
+ const dateAttr: number = inRange ? activeDate : (isPrevious ? this.getEndDate() : this.getStartDate()).getTime();
301
+ const selectedCell: HTMLTableCellElement = this.parent.element.querySelector(':not(.' + cls.OTHERMONTH_CLASS + ')[data-date="' + dateAttr + '"]');
302
+ this.parent.selectCell(selectedCell);
303
+ this.parent.activeCellsData = this.parent.getCellDetails(selectedCell);
304
+ } else {
305
+ const endDate: Date = util.addDays(new Date(startDate.getTime()), 1);
306
+ const filteredEvents: Record<string, any>[] = this.parent.eventBase.filterEvents(startDate, endDate);
307
+ const moreEventArgs: EventClickArgs = { date: startDate, event: filteredEvents, element: e.target } as EventClickArgs;
308
+ if (target.classList.contains(cls.OTHERMONTH_CLASS)) {
309
+ target = this.parent.element.querySelector(':not(.' + cls.OTHERMONTH_CLASS + ')[data-date="' + target.getAttribute('data-date') + '"]') as HTMLTableCellElement;
310
+ }
311
+ this.parent.activeCellsData = this.parent.getCellDetails(target);
312
+ const args: CellClickEventArgs =
313
+ <CellClickEventArgs>extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });
314
+ this.parent.trigger(event.cellClick, args);
315
+ this.parent.quickPopup.moreEventClick(moreEventArgs, endDate);
316
+ }
317
+ }
318
+
319
+ public onContentScroll(e: Event): void {
320
+ const target: HTMLElement = e.target as HTMLElement;
321
+ const headerWrapper: HTMLElement = this.getDatesHeaderElement();
322
+ this.parent.notify(event.virtualScroll, e);
323
+ if (headerWrapper) {
324
+ (<HTMLElement>headerWrapper.firstElementChild).scrollLeft = target.scrollLeft;
325
+ }
326
+ const scrollTopSelector: string = `.${cls.MONTH_HEADER_WRAPPER},.${cls.RESOURCE_COLUMN_WRAP_CLASS}`;
327
+ const scrollTopElement: HTMLElement = this.element.querySelector(scrollTopSelector) as HTMLElement;
328
+ if (scrollTopElement) {
329
+ scrollTopElement.scrollTop = target.scrollTop;
330
+ }
331
+ if (!this.parent.isAdaptive) {
332
+ this.parent.uiStateValues.top = (e.target as HTMLElement).scrollTop;
333
+ }
334
+ this.parent.uiStateValues.left = (e.target as HTMLElement).scrollLeft;
335
+ this.setPersistence();
336
+ }
337
+
338
+ public onScrollUiUpdate(args: NotifyEventArgs): void {
339
+ let height: number = this.parent.element.offsetHeight - this.getHeaderBarHeight();
340
+ const headerWrapper: HTMLElement = this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS) as HTMLElement;
341
+ if (headerWrapper) {
342
+ height -= headerWrapper.offsetHeight;
343
+ }
344
+ const contentWrapper: HTMLElement = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
345
+ if (contentWrapper) {
346
+ contentWrapper.style.height = formatUnit(height);
347
+ }
348
+ if (!this.parent.isAdaptive && headerWrapper) {
349
+ const scrollBarWidth: number = util.getScrollBarWidth();
350
+ if (contentWrapper.offsetWidth - contentWrapper.clientWidth > 0) {
351
+ (headerWrapper.firstElementChild as HTMLElement).style[<any>args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';
352
+ headerWrapper.style[<any>args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';
353
+ } else {
354
+ (headerWrapper.firstElementChild as HTMLElement).style[<any>args.cssProperties.border] = '';
355
+ headerWrapper.style[<any>args.cssProperties.padding] = '';
356
+ }
357
+ }
358
+ this.setColWidth(this.getContentAreaElement());
359
+ const leftPanelSelector: string = `.${cls.MONTH_HEADER_WRAPPER},.${cls.RESOURCE_COLUMN_WRAP_CLASS}`;
360
+ const leftPanelElement: HTMLElement = this.element.querySelector(leftPanelSelector) as HTMLElement;
361
+ if (leftPanelElement) {
362
+ const isYScroll: boolean = contentWrapper.scrollWidth > contentWrapper.clientWidth;
363
+ leftPanelElement.style.height = formatUnit(height - (isYScroll ? 17 : 0));
364
+ }
365
+ if (!args.isPreventScrollUpdate) {
366
+ if (this.parent.uiStateValues.isInitial) {
367
+ this.parent.uiStateValues.isInitial = false;
368
+ this.parent.uiStateValues.top = this.parent.uiStateValues.left = 0;
369
+ } else {
370
+ if (leftPanelElement) {
371
+ leftPanelElement.scrollTop = this.parent.uiStateValues.top;
372
+ }
373
+ contentWrapper.scrollTop = this.parent.uiStateValues.top;
374
+ contentWrapper.scrollLeft = this.parent.uiStateValues.left;
375
+ }
376
+ }
377
+ this.retainScrollPosition();
378
+ }
379
+
380
+ public getStartDate(): Date {
381
+ return new Date(this.parent.selectedDate.getFullYear(), this.parent.firstMonthOfYear % 12, 1);
382
+ }
383
+
384
+ public getEndDate(): Date {
385
+ return util.addDays(util.addMonths(this.getStartDate(), this.parent.monthsCount), -1);
386
+ }
387
+
388
+ public startDate(): Date {
389
+ return this.parent.currentView === 'Year' ? util.getWeekFirstDate(this.getStartDate(), this.parent.activeViewOptions.firstDayOfWeek) : this.getStartDate();
390
+ }
391
+
392
+ public endDate(): Date {
393
+ return this.parent.currentView === 'Year' ? util.addDays(util.getWeekLastDate(this.getEndDate(), this.parent.activeViewOptions.firstDayOfWeek), 1) :
394
+ util.addDays(this.getEndDate(), 1);
395
+ }
396
+
397
+ public getEndDateFromStartDate(start: Date): Date {
398
+ let date: Date = new Date(start.getTime());
399
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
400
+ date = util.lastDateOfMonth(date);
401
+ }
402
+ return util.addDays(new Date(date.getTime()), 1);
403
+ }
404
+
405
+ public getNextPreviousDate(type: NavigationDirection): Date {
406
+ return util.addYears(this.parent.selectedDate, ((type === 'Next') ? 1 : -1));
407
+ }
408
+
409
+ public getDateRangeText(date: Date = this.parent.selectedDate, dateCollection: Date[] = null): string {
410
+ const isDateColAvail: boolean = !isNullOrUndefined(dateCollection) && dateCollection.length > 0;
411
+ const startDate: Date = isDateColAvail ? dateCollection[0] : this.getStartDate();
412
+ const endDate: Date = isDateColAvail ? dateCollection[dateCollection.length - 1] : this.getEndDate();
413
+ if (startDate.getFullYear() !== endDate.getFullYear()) {
414
+ return this.parent.globalize.formatDate(startDate, { format: 'MMM y', calendar: this.parent.getCalendarMode() })
415
+ + ' - ' + this.parent.globalize.formatDate(endDate, { format: 'MMM y', calendar: this.parent.getCalendarMode() });
416
+ }
417
+ else {
418
+ return this.parent.globalize.formatDate(isDateColAvail ? dateCollection[0] : date, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
419
+ }
420
+ }
421
+
422
+ public addEventListener(): void {
423
+ this.parent.on(event.scrollUiUpdate, this.onScrollUiUpdate, this);
424
+ this.parent.on(event.dataReady, this.onDataReady, this);
425
+ }
426
+
427
+ public removeEventListener(): void {
428
+ if (this.parent) {
429
+ this.parent.off(event.scrollUiUpdate, this.onScrollUiUpdate);
430
+ this.parent.off(event.dataReady, this.onDataReady);
431
+ }
432
+ }
433
+
434
+ public onDataReady(args: NotifyEventArgs): void {
435
+ this.yearEventModule = new YearEvent(this.parent);
436
+ this.yearEventModule.renderAppointments();
437
+ this.parent.notify(event.eventsLoaded, args);
438
+ }
439
+
440
+ public scrollToDate(scrollDate: Date): void {
441
+ const date: number = +new Date(util.resetTime(scrollDate));
442
+ let element: HTMLElement = this.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')[data-date="' + date + '"]');
443
+ if (element) {
444
+ element = closest(element, '.e-month-calendar') as HTMLElement;
445
+ this.getContentAreaElement().scrollTop = element.offsetTop;
446
+ }
447
+ }
448
+
449
+ public destroy(): void {
450
+ if (!this.parent || this.parent && this.parent.isDestroyed) {
451
+ this.parent = null;
452
+ return;
453
+ }
454
+ if (this.element) {
455
+ const contentScroll: Element = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
456
+ if (contentScroll) {
457
+ EventHandler.remove(contentScroll, 'scroll', this.onContentScroll);
458
+ }
459
+ if (this.yearEventModule) {
460
+ this.yearEventModule.destroy();
461
+ this.yearEventModule = null;
462
+ }
463
+ if (this.parent.resourceBase) {
464
+ this.parent.resourceBase.destroy();
465
+ }
466
+ super.destroy();
467
+ }
468
+ }
469
+
470
+ }
@@ -0,0 +1,16 @@
1
+ import { TimezoneFields } from '../base/interface';
2
+ /**
3
+ * Time zone
4
+ */
5
+ export declare class Timezone {
6
+ timezoneData: TimezoneFields[];
7
+ constructor();
8
+ offset(date: Date, timezone: string): number;
9
+ convert(date: Date, fromOffset: number | string, toOffset: number | string): Date;
10
+ add(date: Date, timezone: string): Date;
11
+ remove(date: Date, timezone: string): Date;
12
+ removeLocalOffset(date: Date): Date;
13
+ getLocalTimezoneName(): string;
14
+ private getTimezoneData;
15
+ }
16
+ export declare const timezoneData: TimezoneFields[];