gantt-source_management 3.37.5

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 (166) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintrc.json +39 -0
  3. package/.prettierrc.cjs +5 -0
  4. package/README.md +129 -0
  5. package/cypress/e2e/add-rows-items.test.ts +26 -0
  6. package/cypress/e2e/basic.test.ts +173 -0
  7. package/cypress/e2e/calculated-zoom-mode.test.ts +163 -0
  8. package/cypress/e2e/calendar-dates.test.ts +285 -0
  9. package/cypress/e2e/dst.test.ts +691 -0
  10. package/cypress/e2e/grid-cells.test.ts +72 -0
  11. package/cypress/e2e/items-vertical.test.ts +305 -0
  12. package/cypress/e2e/items.test.ts +501 -0
  13. package/cypress/e2e/list-columns-toggle.test.ts +124 -0
  14. package/cypress/e2e/list-header-resize.test.ts +30 -0
  15. package/cypress/e2e/locale.test.ts +102 -0
  16. package/cypress/e2e/move-items-outside.test.ts +437 -0
  17. package/cypress/e2e/rows.test.ts +50 -0
  18. package/cypress/e2e/scroll-bar.test.ts +357 -0
  19. package/cypress/e2e/time-bookmarks.test.ts +92 -0
  20. package/cypress/e2e/utc-mode.test.ts +51 -0
  21. package/cypress/fixtures/example.json +5 -0
  22. package/cypress/helpers.ts +12 -0
  23. package/cypress/plugins/index.js +22 -0
  24. package/cypress/support/commands.ts +175 -0
  25. package/cypress/support/e2e.ts +31 -0
  26. package/cypress.config.js +24 -0
  27. package/dist/api/api.d.ts +182 -0
  28. package/dist/api/helpers.d.ts +9 -0
  29. package/dist/api/id.d.ts +14 -0
  30. package/dist/api/locale.d.ts +3 -0
  31. package/dist/api/main.d.ts +47 -0
  32. package/dist/api/public.d.ts +32 -0
  33. package/dist/api/slots.d.ts +22 -0
  34. package/dist/api/time.d.ts +104 -0
  35. package/dist/assets/2f1f893a.wasm +0 -0
  36. package/dist/gstc.d.ts +708 -0
  37. package/dist/gstc.esm.min.d.ts +708 -0
  38. package/dist/gstc.esm.min.js +574 -0
  39. package/dist/gstc.umd.min.d.ts +708 -0
  40. package/dist/gstc.umd.min.js +701 -0
  41. package/dist/gstc.wasm.esm.min.d.ts +708 -0
  42. package/dist/gstc.wasm.esm.min.js +574 -0
  43. package/dist/gstc.wasm.umd.min.d.ts +708 -0
  44. package/dist/gstc.wasm.umd.min.js +701 -0
  45. package/dist/plugins/calendar-scroll.d.ts +15 -0
  46. package/dist/plugins/calendar-scroll.esm.min.d.ts +15 -0
  47. package/dist/plugins/calendar-scroll.esm.min.js +13 -0
  48. package/dist/plugins/calendar-scroll.umd.min.d.ts +15 -0
  49. package/dist/plugins/calendar-scroll.umd.min.js +13 -0
  50. package/dist/plugins/dependency-lines.d.ts +47 -0
  51. package/dist/plugins/dependency-lines.esm.min.d.ts +47 -0
  52. package/dist/plugins/dependency-lines.esm.min.js +38 -0
  53. package/dist/plugins/dependency-lines.umd.min.d.ts +47 -0
  54. package/dist/plugins/dependency-lines.umd.min.js +38 -0
  55. package/dist/plugins/export-image.d.ts +12 -0
  56. package/dist/plugins/export-image.esm.min.d.ts +12 -0
  57. package/dist/plugins/export-image.esm.min.js +28 -0
  58. package/dist/plugins/export-image.umd.min.d.ts +12 -0
  59. package/dist/plugins/export-image.umd.min.js +34 -0
  60. package/dist/plugins/export-pdf.d.ts +12 -0
  61. package/dist/plugins/export-pdf.esm.min.d.ts +12 -0
  62. package/dist/plugins/export-pdf.esm.min.js +389 -0
  63. package/dist/plugins/export-pdf.umd.min.d.ts +12 -0
  64. package/dist/plugins/export-pdf.umd.min.js +511 -0
  65. package/dist/plugins/grab-scroll.d.ts +14 -0
  66. package/dist/plugins/grab-scroll.esm.min.d.ts +14 -0
  67. package/dist/plugins/grab-scroll.umd.min.d.ts +14 -0
  68. package/dist/plugins/highlight-weekends.d.ts +12 -0
  69. package/dist/plugins/highlight-weekends.esm.min.d.ts +12 -0
  70. package/dist/plugins/highlight-weekends.esm.min.js +14 -0
  71. package/dist/plugins/highlight-weekends.umd.min.d.ts +12 -0
  72. package/dist/plugins/highlight-weekends.umd.min.js +14 -0
  73. package/dist/plugins/item-movement.d.ts +97 -0
  74. package/dist/plugins/item-movement.esm.min.d.ts +97 -0
  75. package/dist/plugins/item-movement.esm.min.js +25 -0
  76. package/dist/plugins/item-movement.umd.min.d.ts +97 -0
  77. package/dist/plugins/item-movement.umd.min.js +25 -0
  78. package/dist/plugins/item-resizing.d.ts +102 -0
  79. package/dist/plugins/item-resizing.esm.min.d.ts +102 -0
  80. package/dist/plugins/item-resizing.esm.min.js +37 -0
  81. package/dist/plugins/item-resizing.umd.min.d.ts +102 -0
  82. package/dist/plugins/item-resizing.umd.min.js +37 -0
  83. package/dist/plugins/item-types.d.ts +13 -0
  84. package/dist/plugins/item-types.esm.min.d.ts +13 -0
  85. package/dist/plugins/item-types.esm.min.js +127 -0
  86. package/dist/plugins/item-types.umd.min.d.ts +13 -0
  87. package/dist/plugins/item-types.umd.min.js +127 -0
  88. package/dist/plugins/progress-bar.d.ts +13 -0
  89. package/dist/plugins/progress-bar.esm.min.d.ts +13 -0
  90. package/dist/plugins/progress-bar.esm.min.js +27 -0
  91. package/dist/plugins/progress-bar.umd.min.d.ts +13 -0
  92. package/dist/plugins/progress-bar.umd.min.js +27 -0
  93. package/dist/plugins/selection.d.ts +94 -0
  94. package/dist/plugins/selection.esm.min.d.ts +94 -0
  95. package/dist/plugins/selection.esm.min.js +26 -0
  96. package/dist/plugins/selection.umd.min.d.ts +94 -0
  97. package/dist/plugins/selection.umd.min.js +26 -0
  98. package/dist/plugins/time-bookmarks.d.ts +38 -0
  99. package/dist/plugins/time-bookmarks.esm.min.d.ts +38 -0
  100. package/dist/plugins/time-bookmarks.esm.min.js +50 -0
  101. package/dist/plugins/time-bookmarks.umd.min.d.ts +38 -0
  102. package/dist/plugins/time-bookmarks.umd.min.js +50 -0
  103. package/dist/plugins/timeline-pointer.d.ts +83 -0
  104. package/dist/plugins/timeline-pointer.esm.min.d.ts +83 -0
  105. package/dist/plugins/timeline-pointer.esm.min.js +13 -0
  106. package/dist/plugins/timeline-pointer.umd.min.d.ts +83 -0
  107. package/dist/plugins/timeline-pointer.umd.min.js +13 -0
  108. package/dist/style.css +811 -0
  109. package/dist/vendor.esm.min.js +128 -0
  110. package/examples/complex-1/faces/face-1.jpg +0 -0
  111. package/examples/complex-1/faces/face-10.jpg +0 -0
  112. package/examples/complex-1/faces/face-11.jpg +0 -0
  113. package/examples/complex-1/faces/face-12.jpg +0 -0
  114. package/examples/complex-1/faces/face-13.jpg +0 -0
  115. package/examples/complex-1/faces/face-14.jpg +0 -0
  116. package/examples/complex-1/faces/face-15.jpg +0 -0
  117. package/examples/complex-1/faces/face-16.jpg +0 -0
  118. package/examples/complex-1/faces/face-17.jpg +0 -0
  119. package/examples/complex-1/faces/face-18.jpg +0 -0
  120. package/examples/complex-1/faces/face-19.jpg +0 -0
  121. package/examples/complex-1/faces/face-2.jpg +0 -0
  122. package/examples/complex-1/faces/face-20.jpg +0 -0
  123. package/examples/complex-1/faces/face-21.jpg +0 -0
  124. package/examples/complex-1/faces/face-22.jpg +0 -0
  125. package/examples/complex-1/faces/face-23.jpg +0 -0
  126. package/examples/complex-1/faces/face-24.jpg +0 -0
  127. package/examples/complex-1/faces/face-25.jpg +0 -0
  128. package/examples/complex-1/faces/face-26.jpg +0 -0
  129. package/examples/complex-1/faces/face-27.jpg +0 -0
  130. package/examples/complex-1/faces/face-28.jpg +0 -0
  131. package/examples/complex-1/faces/face-29.jpg +0 -0
  132. package/examples/complex-1/faces/face-3.jpg +0 -0
  133. package/examples/complex-1/faces/face-30.jpg +0 -0
  134. package/examples/complex-1/faces/face-31.jpg +0 -0
  135. package/examples/complex-1/faces/face-32.jpg +0 -0
  136. package/examples/complex-1/faces/face-33.jpg +0 -0
  137. package/examples/complex-1/faces/face-34.jpg +0 -0
  138. package/examples/complex-1/faces/face-35.jpg +0 -0
  139. package/examples/complex-1/faces/face-36.jpg +0 -0
  140. package/examples/complex-1/faces/face-37.jpg +0 -0
  141. package/examples/complex-1/faces/face-38.jpg +0 -0
  142. package/examples/complex-1/faces/face-39.jpg +0 -0
  143. package/examples/complex-1/faces/face-4.jpg +0 -0
  144. package/examples/complex-1/faces/face-40.jpg +0 -0
  145. package/examples/complex-1/faces/face-41.jpg +0 -0
  146. package/examples/complex-1/faces/face-42.jpg +0 -0
  147. package/examples/complex-1/faces/face-43.jpg +0 -0
  148. package/examples/complex-1/faces/face-44.jpg +0 -0
  149. package/examples/complex-1/faces/face-45.jpg +0 -0
  150. package/examples/complex-1/faces/face-46.jpg +0 -0
  151. package/examples/complex-1/faces/face-47.jpg +0 -0
  152. package/examples/complex-1/faces/face-48.jpg +0 -0
  153. package/examples/complex-1/faces/face-49.jpg +0 -0
  154. package/examples/complex-1/faces/face-5.jpg +0 -0
  155. package/examples/complex-1/faces/face-50.jpg +0 -0
  156. package/examples/complex-1/faces/face-6.jpg +0 -0
  157. package/examples/complex-1/faces/face-7.jpg +0 -0
  158. package/examples/complex-1/faces/face-8.jpg +0 -0
  159. package/examples/complex-1/faces/face-9.jpg +0 -0
  160. package/examples/complex-1/index.html +61 -0
  161. package/examples/complex-1/index.js +923 -0
  162. package/examples/index.html +22 -0
  163. package/examples/reset.css +455 -0
  164. package/examples/server.js +18 -0
  165. package/package.json +150 -0
  166. package/tsconfig.json +17 -0
@@ -0,0 +1,102 @@
1
+ function plural(n) {
2
+ return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; // eslint-disable-line
3
+ }
4
+ /* eslint-disable */
5
+ function translate(number, withoutSuffix, key) {
6
+ const result = `${number} `;
7
+ switch (key) {
8
+ case 'm':
9
+ return withoutSuffix ? 'minuta' : 'minutę';
10
+ case 'mm':
11
+ return result + (plural(number) ? 'minuty' : 'minut');
12
+ case 'h':
13
+ return withoutSuffix ? 'godzina' : 'godzinę';
14
+ case 'hh':
15
+ return result + (plural(number) ? 'godziny' : 'godzin');
16
+ case 'MM':
17
+ return result + (plural(number) ? 'miesiące' : 'miesięcy');
18
+ case 'yy':
19
+ return result + (plural(number) ? 'lata' : 'lat');
20
+ }
21
+ }
22
+ /* eslint-enable */
23
+
24
+ const monthFormat =
25
+ 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
26
+ const monthStandalone =
27
+ 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
28
+ const MONTHS_IN_FORMAT = /D MMMM/;
29
+
30
+ const months = (dayjsInstance, format) => {
31
+ if (MONTHS_IN_FORMAT.test(format)) {
32
+ return monthFormat[dayjsInstance.month()];
33
+ }
34
+ return monthStandalone[dayjsInstance.month()];
35
+ };
36
+ months.s = monthStandalone;
37
+ months.f = monthFormat;
38
+
39
+ const locale = {
40
+ name: 'pl',
41
+ weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
42
+ weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
43
+ weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
44
+ months,
45
+ monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
46
+ ordinal: (n) => `${n}.`,
47
+ weekStart: 1,
48
+ yearStart: 4,
49
+ relativeTime: {
50
+ future: 'za %s',
51
+ past: '%s temu',
52
+ s: 'kilka sekund',
53
+ m: translate,
54
+ mm: translate,
55
+ h: translate,
56
+ hh: translate,
57
+ d: '1 dzień',
58
+ dd: '%d dni',
59
+ M: 'miesiąc',
60
+ MM: translate,
61
+ y: 'rok',
62
+ yy: translate,
63
+ },
64
+ formats: {
65
+ LT: 'HH:mm',
66
+ LTS: 'HH:mm:ss',
67
+ L: 'DD.MM.YYYY',
68
+ LL: 'D MMMM YYYY',
69
+ LLL: 'D MMMM YYYY HH:mm',
70
+ LLLL: 'dddd, D MMMM YYYY HH:mm',
71
+ },
72
+ };
73
+
74
+ describe('Locale', () => {
75
+ it('should update and display locale configuration', () => {
76
+ let state;
77
+ cy.load('/examples/complex-1')
78
+ .window()
79
+ .then((win) => {
80
+ // @ts-ignore
81
+ state = win.state;
82
+ expect(state.get('config.locale.weekdays.6')).to.eq('Saturday');
83
+ })
84
+ .get('.gstc__chart-calendar-date[data-gstcid="gstcid-1580511600000"] .gstc-date-small')
85
+ .should('be.visible')
86
+ .then(($el) => {
87
+ expect($el.text()).to.eq('Saturday');
88
+ state.update('config.locale', locale);
89
+ })
90
+ .wait(Cypress.env('wait'))
91
+ .then(() => {
92
+ expect(state.get('config.locale.weekdays.6')).to.eq('sobota');
93
+ })
94
+ .get('.gstc__chart-calendar-date[data-gstcid="gstcid-1580511600000"] .gstc-date-small')
95
+ .should('be.visible')
96
+ .wait(Cypress.env('wait'))
97
+ .then(($el) => {
98
+ // @ts-ignore
99
+ expect($el.text()).to.eq('sobota');
100
+ });
101
+ });
102
+ });
@@ -0,0 +1,437 @@
1
+ import { DataChartTime, DataScrollHorizontal, ItemData } from '../../dist/gstc';
2
+ import { fixed } from '../helpers';
3
+
4
+ describe('Move items outside view', () => {
5
+ it('should calculate right scroll and item position', () => {
6
+ let state, gstc;
7
+ cy.load('/examples/complex-1')
8
+ .window()
9
+ .then((win) => {
10
+ // @ts-ignore
11
+ state = win.state;
12
+ // @ts-ignore
13
+ gstc = win.gstc;
14
+ })
15
+ .scrollH(1000)
16
+ .get('#expand-time')
17
+ .click()
18
+ .wait(Cypress.env('wait'))
19
+ .then(() => {
20
+ state.update('config.scroll.horizontal.multiplier', 3);
21
+ state.update('config.chart.items.gstcid-2.time', (itemTime) => {
22
+ itemTime.start = gstc.api.time.date('2020-03-25').valueOf();
23
+ itemTime.end = gstc.api.time.date('2020-03-30').endOf('day').valueOf();
24
+ return itemTime;
25
+ });
26
+ })
27
+ .get('.gstc__list-column-row-expander-toggle[data-gstcid="gstcid-1"]')
28
+ .click()
29
+ .get('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]')
30
+ .should('be.visible')
31
+ .then(() => {
32
+ const time: DataChartTime = state.get('$data.chart.time');
33
+ expect(time.toDate.format('YYYY-MM-DD')).to.eq('2020-03-31');
34
+ })
35
+ .move('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]', 160, 0)
36
+ .move('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]', 100, 0)
37
+ .then(() => {
38
+ const horizontalScroll: DataScrollHorizontal = state.get('$data.scroll.horizontal');
39
+ const time: DataChartTime = state.get('$data.chart.time');
40
+ expect(time.toDate.format('YYYY-MM-DD')).to.eq('2020-04-02');
41
+ expect(horizontalScroll.data.leftGlobalDate.format('YYYY-MM-DD')).to.eq('2020-03-18');
42
+ const itemsData = state.get('$data.chart.items');
43
+ expect(itemsData['gstcid-2'].time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-02 23:59:59');
44
+ });
45
+ });
46
+
47
+ it('should calculate right item position in normal mode', () => {
48
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
49
+ let state, gstc, secondaryItem, secondaryItemData;
50
+ cy.load('/examples/complex-1')
51
+ .window()
52
+ .then((win) => {
53
+ // @ts-ignore
54
+ state = win.state;
55
+ // @ts-ignore
56
+ gstc = win.gstc;
57
+ })
58
+ .then(() => {
59
+ gstc.api.scrollToTime(gstc.api.time.date('2020-02-14'), false);
60
+ })
61
+ .wait(Cypress.env('wait'))
62
+ .then(() => {
63
+ state.update('config.scroll.horizontal.multiplier', 3);
64
+ state.update('config.chart.items.gstcid-15', (item) => {
65
+ item.time.start = gstc.api.time.date('2020-02-20').valueOf();
66
+ item.time.end = gstc.api.time.date('2020-02-24').endOf('day').valueOf();
67
+ return item;
68
+ });
69
+ })
70
+ .wait(Cypress.env('wait'))
71
+ .then(() => {
72
+ const itemData = state.get('$data.chart.items.gstcid-15');
73
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-20 00:00:00');
74
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-24 23:59:59');
75
+ expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
76
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
77
+ expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
78
+ secondaryItemData = gstc.api.mergeDeep({}, itemData);
79
+ secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
80
+ })
81
+ .get(itemClass)
82
+ .should('be.visible')
83
+ .move(itemClass, 250, 0)
84
+ .get(itemClass)
85
+ .should('be.visible')
86
+ .then(() => {
87
+ const itemData = state.get('$data.chart.items.gstcid-15');
88
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-23 00:00:00');
89
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-27 23:59:59');
90
+
91
+ expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
92
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
93
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
94
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
95
+ expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
96
+ expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
97
+
98
+ const item = state.get('config.chart.items.gstcid-15');
99
+ expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
100
+ expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
101
+ });
102
+ });
103
+
104
+ // it('should calculate right item position in normal mode with hidden dates', () => {
105
+ // const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
106
+ // let state, gstc, secondaryItem, secondaryItemData;
107
+ // cy.load('/examples/complex-1')
108
+ // .window()
109
+ // .then((win) => {
110
+ // // @ts-ignore
111
+ // state = win.state;
112
+ // // @ts-ignore
113
+ // gstc = win.gstc;
114
+ // })
115
+ // .then(() => {
116
+ // gstc.api.scrollToTime(gstc.api.time.date('2020-02-14'), false);
117
+ // })
118
+ // .wait(Cypress.env('wait'))
119
+ // .get('#hide-weekends')
120
+ // .click()
121
+ // .wait(Cypress.env('wait'))
122
+ // .then(() => {
123
+ // state.update('config.chart.items.gstcid-15', (item) => {
124
+ // item.time.start = gstc.api.time.date('2020-02-20').valueOf();
125
+ // item.time.end = gstc.api.time.date('2020-02-26').endOf('day').valueOf();
126
+ // return item;
127
+ // });
128
+ // })
129
+ // .wait(Cypress.env('wait'))
130
+ // .then(() => {
131
+ // const itemData = state.get('$data.chart.items.gstcid-15');
132
+ // expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-20 00:00:00');
133
+ // expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-26 23:59:59');
134
+ // expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
135
+ // expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
136
+ // expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
137
+ // secondaryItemData = gstc.api.mergeDeep({}, itemData);
138
+ // secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
139
+ // })
140
+ // .get(itemClass)
141
+ // .should('be.visible')
142
+ // .move(itemClass, 400, 0)
143
+ // .get(itemClass)
144
+ // .should('be.visible')
145
+ // .then(() => {
146
+ // const itemData = state.get('$data.chart.items.gstcid-15');
147
+ // expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-27 00:00:00');
148
+ // expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-04 23:59:59');
149
+ // expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
150
+ // expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
151
+ // expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
152
+ // expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
153
+ // expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
154
+ // expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
155
+
156
+ // const item = state.get('config.chart.items.gstcid-15');
157
+ // expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
158
+ // expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
159
+ // });
160
+ // });
161
+
162
+ it('should calculate right item position in normal mode with hidden dates when moving out of time (left)', () => {
163
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
164
+ let state, gstc, secondaryItem, secondaryItemData;
165
+ cy.load('/examples/complex-1')
166
+ .window()
167
+ .then((win) => {
168
+ // @ts-ignore
169
+ state = win.state;
170
+ // @ts-ignore
171
+ gstc = win.gstc;
172
+ })
173
+ .get('#hide-weekends')
174
+ .click()
175
+ .get('#expand-time')
176
+ .click()
177
+ .wait(Cypress.env('wait'))
178
+ .then(() => {
179
+ state.update('config.scroll.horizontal.multiplier', 3);
180
+ state.update('config.plugin.ItemMovement.autoScroll.edgeThreshold.horizontal', 0);
181
+ state.update('config.chart.items.gstcid-15', (item) => {
182
+ item.time.start = gstc.api.time.date('2020-02-04').valueOf();
183
+ item.time.end = gstc.api.time.date('2020-02-10').endOf('day').valueOf();
184
+ return item;
185
+ });
186
+ })
187
+ .wait(Cypress.env('wait'))
188
+ .then(() => {
189
+ const itemData = state.get('$data.chart.items.gstcid-15');
190
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-04 00:00:00');
191
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-10 23:59:59');
192
+ expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
193
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
194
+ expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
195
+ secondaryItemData = gstc.api.mergeDeep({}, itemData);
196
+ secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
197
+ })
198
+ .get(itemClass)
199
+ .should('be.visible')
200
+ .move(itemClass, -100, 0)
201
+ .move(itemClass, -83, 0)
202
+ .move(itemClass, -83, 0)
203
+ .move(itemClass, -83, 0)
204
+ .get(itemClass)
205
+ .should('be.visible')
206
+ .then(() => {
207
+ const itemData = state.get('$data.chart.items.gstcid-15');
208
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-29 00:00:00');
209
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-04 23:59:59');
210
+ expect(fixed(itemData.position.left)).to.be.lessThan(fixed(secondaryItemData.position.left));
211
+ expect(fixed(itemData.position.right)).to.be.lessThan(fixed(secondaryItemData.position.right));
212
+ expect(fixed(itemData.position.left)).not.to.eq(fixed(itemData.position.actualLeft));
213
+ expect(fixed(itemData.position.right)).to.be.eq(fixed(itemData.position.actualRight));
214
+ expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
215
+ expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
216
+
217
+ const item = state.get('config.chart.items.gstcid-15');
218
+ expect(item.time.start).to.be.below(secondaryItem.time.start);
219
+ expect(item.time.end).to.be.below(secondaryItem.time.end);
220
+ });
221
+ });
222
+
223
+ it('should calculate right item position in normal mode with hidden dates when moving out of time (right)', () => {
224
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
225
+ let state, gstc, secondaryItem, secondaryItemData;
226
+ cy.load('/examples/complex-1')
227
+ .window()
228
+ .then((win) => {
229
+ // @ts-ignore
230
+ state = win.state;
231
+ // @ts-ignore
232
+ gstc = win.gstc;
233
+ })
234
+ .then(() => {
235
+ gstc.api.scrollToTime(gstc.api.time.date('2020-03-13'), false);
236
+ })
237
+ .wait(Cypress.env('wait'))
238
+ .get('#expand-time')
239
+ .click()
240
+ .get('#hide-weekends')
241
+ .click()
242
+ .wait(Cypress.env('wait'))
243
+ .then(() => {
244
+ state.update('config.scroll.horizontal.multiplier', 3);
245
+ state.update('config.chart.items.gstcid-15', (item) => {
246
+ item.time.start = gstc.api.time.date('2020-03-20').valueOf();
247
+ item.time.end = gstc.api.time.date('2020-03-26').endOf('day').valueOf();
248
+ return item;
249
+ });
250
+ })
251
+ .wait(Cypress.env('wait'))
252
+ .then(() => {
253
+ const itemData = state.get('$data.chart.items.gstcid-15');
254
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-20 00:00:00');
255
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-26 23:59:59');
256
+ expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
257
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
258
+ expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
259
+ secondaryItemData = gstc.api.mergeDeep({}, itemData);
260
+ secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
261
+ })
262
+ .get(itemClass)
263
+ .should('be.visible')
264
+ .move(itemClass, 400, 0)
265
+ .move(itemClass, 50, 0)
266
+ .move(itemClass, 50, 0)
267
+ .move(itemClass, 80, 0)
268
+ .scrollH(100)
269
+ .get(itemClass)
270
+ .should('be.visible')
271
+ .then(() => {
272
+ const itemData = state.get('$data.chart.items.gstcid-15');
273
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-31 00:00:00');
274
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-06 23:59:59');
275
+ expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
276
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
277
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
278
+ expect(fixed(itemData.position.right)).to.be.eq(fixed(itemData.position.actualRight));
279
+ //expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width)); // TODO: DST is changing the width
280
+
281
+ const item = state.get('config.chart.items.gstcid-15');
282
+ expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
283
+ expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
284
+ });
285
+ });
286
+
287
+ it('should calculate right item position in calculatedZoomMode', () => {
288
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
289
+ let state, gstc, secondaryItem, secondaryItemData;
290
+ cy.load('/examples/one-month')
291
+ .window()
292
+ .then((win) => {
293
+ // @ts-ignore
294
+ state = win.state;
295
+ // @ts-ignore
296
+ gstc = win.gstc;
297
+ })
298
+ .then(() => {
299
+ state.update('config.scroll.horizontal.multiplier', 3);
300
+ state.update('config.chart.items.gstcid-15', (item) => {
301
+ item.time.start = gstc.api.time.date('2020-01-20').valueOf();
302
+ item.time.end = gstc.api.time.date('2020-01-24').endOf('day').valueOf();
303
+ return item;
304
+ });
305
+ })
306
+ .wait(Cypress.env('wait'))
307
+ .then(() => {
308
+ const itemData = state.get('$data.chart.items.gstcid-15');
309
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-20 00:00:00');
310
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-24 23:59:59');
311
+ expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
312
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
313
+ expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
314
+ secondaryItemData = gstc.api.mergeDeep({}, itemData);
315
+ secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
316
+ })
317
+ .get(itemClass)
318
+ .should('be.visible')
319
+ .move(itemClass, 300, 0)
320
+ .wait(Cypress.env('wait'))
321
+ .then(() => {
322
+ const itemData = state.get('$data.chart.items.gstcid-15');
323
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-29 00:00:00');
324
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-02 23:59:59');
325
+
326
+ expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
327
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
328
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
329
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight)); // probably cypress bug because in the console everything is fine
330
+ expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
331
+ expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width)); // probably cypress bug because in the console everything is fine
332
+
333
+ const item = state.get('config.chart.items.gstcid-15');
334
+ expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
335
+ expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
336
+ });
337
+ });
338
+
339
+ it('should calculate right item position in calculatedZoomMode with hidden weekends', () => {
340
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
341
+ let state, gstc;
342
+ cy.load('/examples/one-month')
343
+ .window()
344
+ .then((win) => {
345
+ // @ts-ignore
346
+ state = win.state;
347
+ // @ts-ignore
348
+ gstc = win.gstc;
349
+ })
350
+ .get('#hide-weekends')
351
+ .click()
352
+ .wait(Cypress.env('wait'))
353
+ .then(() => {
354
+ state.update('config.scroll.horizontal.multiplier', 3);
355
+ state.update('config.chart.items.gstcid-15', (item) => {
356
+ item.time.start = gstc.api.time.date('2020-01-24').valueOf();
357
+ item.time.end = gstc.api.time.date('2020-01-31').endOf('day').valueOf();
358
+ return item;
359
+ });
360
+ })
361
+ .wait(Cypress.env('wait'))
362
+ .then(() => {
363
+ const itemData = state.get('$data.chart.items.gstcid-15');
364
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-24 00:00:00');
365
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-31 23:59:59');
366
+ expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
367
+ expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
368
+ expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
369
+ })
370
+ .move(itemClass, 50, 0)
371
+ .move(itemClass, 50, 0)
372
+ .then(() => {
373
+ const itemData: ItemData = state.get('$data.chart.items.gstcid-15');
374
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-30 00:00:00');
375
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-06 23:59:59');
376
+ const time: DataChartTime = state.get('$data.chart.time');
377
+ const cellWidth = time.allDates[time.level][0].width;
378
+ expect(fixed(itemData.width)).to.eq(fixed(6 * cellWidth));
379
+ expect(fixed(itemData.actualWidth)).to.eq(fixed(2 * cellWidth));
380
+ })
381
+ .get(itemClass)
382
+ .should('be.visible')
383
+ .get('#btn-next-month')
384
+ .click()
385
+ .wait(300)
386
+ .then(() => {
387
+ const itemData = state.get('$data.chart.items.gstcid-15');
388
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-30 00:00:00');
389
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-06 23:59:59');
390
+ const time: DataChartTime = state.get('$data.chart.time');
391
+ const cellWidth = time.allDates[time.level][0].width;
392
+ expect(fixed(itemData.width)).to.eq(fixed(6 * cellWidth));
393
+ expect(fixed(itemData.actualWidth)).to.eq(fixed(4 * cellWidth));
394
+ });
395
+ });
396
+
397
+ it('should show arrow on hidden dates when scroll is moved to the end of the view', () => {
398
+ const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
399
+ let state, gstc;
400
+ cy.load('/examples/complex-1')
401
+ .window()
402
+ .then((win) => {
403
+ // @ts-ignore
404
+ state = win.state;
405
+ // @ts-ignore
406
+ gstc = win.gstc;
407
+ })
408
+ .get('#hide-weekends')
409
+ .click()
410
+ .wait(Cypress.env('wait'))
411
+ .get('#expand-time')
412
+ .click()
413
+ .wait(Cypress.env('wait'))
414
+ .then(() => {
415
+ state.update('config.scroll.horizontal.multiplier', 3);
416
+ state.update('config.chart.items.gstcid-15', (item) => {
417
+ item.time.start = gstc.api.time.date('2020-03-10').valueOf();
418
+ item.time.end = gstc.api.time.date('2020-04-01').endOf('day').valueOf();
419
+ return item;
420
+ });
421
+ gstc.api.scrollToTime(gstc.api.time.date('2020-03-16'), false);
422
+ })
423
+ .wait(Cypress.env('wait'))
424
+ .then(() => {
425
+ const itemData = state.get('$data.chart.items.gstcid-15');
426
+ expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-10 00:00:00');
427
+ expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-01 23:59:59');
428
+ expect(fixed(itemData.width)).to.be.greaterThan(fixed(itemData.actualWidth));
429
+ expect(fixed(itemData.position.left)).to.be.lessThan(fixed(itemData.position.actualLeft));
430
+ expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
431
+ })
432
+ .get(`${itemClass} .gstc__chart-timeline-items-row-item--left-cut-icon`)
433
+ .should('be.visible')
434
+ .get(`${itemClass} .gstc__chart-timeline-items-row-item--right-cut-icon`)
435
+ .should('be.visible');
436
+ });
437
+ });
@@ -0,0 +1,50 @@
1
+ describe('Rows', () => {
2
+ it('should hide items from collapsed rows', () => {
3
+ let state, gstc;
4
+ const toggleClass = '.gstc__list-column-row-expander-toggle[data-gstcid="gstcid-1"]';
5
+ cy.load('/examples/one-month')
6
+ .window()
7
+ .then((win) => {
8
+ // @ts-ignore
9
+ state = win.state;
10
+ // @ts-ignore
11
+ gstc = win.gstc;
12
+ function getRandomFaceImage() {
13
+ return `./faces/face-${Math.ceil(Math.random() * 50)}.jpg`;
14
+ }
15
+ const iterations = 100;
16
+ const GSTCID = gstc.api.GSTCID;
17
+ const rows = {};
18
+ for (let i = 0; i < iterations; i++) {
19
+ const id = GSTCID(String(i));
20
+ rows[id] = {
21
+ id,
22
+ label: `John Doe ${i}`,
23
+ parentId: i === 1 ? undefined : GSTCID(String(1)), //withParent ? GSTCID(String(i - 1)) : undefined,
24
+ expanded: false,
25
+ img: getRandomFaceImage(),
26
+ progress: Math.floor(Math.random() * 100),
27
+ };
28
+ }
29
+ state.update('config.list.rows', rows);
30
+ })
31
+ .wait(Cypress.env('wait'))
32
+ .get(toggleClass)
33
+ .click()
34
+ .wait(Cypress.env('wait'))
35
+ .click()
36
+ .wait(Cypress.env('wait'))
37
+ .move('.gstc__list-column-header-resizer-dots--gstcid-progress', 20, 0)
38
+ .wait(Cypress.env('wait'))
39
+ .get('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]')
40
+ .should('not.exist')
41
+ .get('#btn-next-month')
42
+ .click()
43
+ .wait(300)
44
+ .get('#btn-prev-month')
45
+ .click()
46
+ .wait(300)
47
+ .get('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]')
48
+ .should('not.exist');
49
+ });
50
+ });