@foxy.io/elements 1.15.0 → 1.16.0-beta.3

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/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +1 -1
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  5. package/dist/cdn/foxy-attribute-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-form.js +1 -1
  7. package/dist/cdn/foxy-cancellation-form.js +1 -1
  8. package/dist/cdn/foxy-collection-page.js +1 -1
  9. package/dist/cdn/foxy-collection-pages.js +1 -1
  10. package/dist/cdn/foxy-coupon-card.js +1 -1
  11. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  12. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  13. package/dist/cdn/foxy-coupon-form.js +1 -1
  14. package/dist/cdn/foxy-custom-field-card.js +1 -1
  15. package/dist/cdn/foxy-custom-field-form.js +1 -1
  16. package/dist/cdn/foxy-customer-api.js +1 -1
  17. package/dist/cdn/foxy-customer-card.js +1 -1
  18. package/dist/cdn/foxy-customer-form.js +1 -1
  19. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  20. package/dist/cdn/foxy-customer-portal.js +7 -7
  21. package/dist/cdn/foxy-customer.js +6 -6
  22. package/dist/cdn/foxy-customers-table.js +1 -1
  23. package/dist/cdn/foxy-discount-card.js +1 -1
  24. package/dist/cdn/foxy-donation.js +1 -1
  25. package/dist/cdn/foxy-email-template-form.js +1 -1
  26. package/dist/cdn/foxy-error-entry-card.js +1 -1
  27. package/dist/cdn/foxy-form-dialog.js +1 -1
  28. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  29. package/dist/cdn/foxy-gift-card-card.js +1 -1
  30. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  31. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  32. package/dist/cdn/foxy-gift-card-form.js +1 -1
  33. package/dist/cdn/foxy-i18n.js +1 -1
  34. package/dist/cdn/foxy-items-form.js +1 -1
  35. package/dist/cdn/foxy-nucleon-element.js +1 -1
  36. package/dist/cdn/foxy-pagination.js +1 -1
  37. package/dist/cdn/foxy-payment-card.js +1 -1
  38. package/dist/cdn/foxy-payment-method-card.js +1 -1
  39. package/dist/cdn/foxy-query-builder.js +1 -1
  40. package/dist/cdn/foxy-report-form.js +195 -0
  41. package/dist/cdn/foxy-reports-table.js +41 -0
  42. package/dist/cdn/foxy-sign-in-form.js +1 -1
  43. package/dist/cdn/foxy-spinner.js +2 -2
  44. package/dist/cdn/foxy-subscription-card.js +1 -1
  45. package/dist/cdn/foxy-subscription-form.js +4 -4
  46. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  47. package/dist/cdn/foxy-swipe-actions.js +1 -0
  48. package/dist/cdn/foxy-table.js +1 -1
  49. package/dist/cdn/foxy-tax-card.js +1 -1
  50. package/dist/cdn/foxy-tax-form.js +1 -1
  51. package/dist/cdn/foxy-template-config-form.js +1 -1
  52. package/dist/cdn/foxy-template-form.js +1 -1
  53. package/dist/cdn/foxy-transaction-card.js +1 -1
  54. package/dist/cdn/foxy-transactions-table.js +1 -1
  55. package/dist/cdn/foxy-user-form.js +1 -1
  56. package/dist/cdn/foxy-users-table.js +1 -1
  57. package/dist/cdn/{shared-09c5f9f1.js → shared-03949800.js} +1 -1
  58. package/dist/cdn/{shared-9221e6b2.js → shared-0479553e.js} +1 -1
  59. package/dist/cdn/shared-102cccce.js +1 -0
  60. package/dist/cdn/{shared-b0f0e8b5.js → shared-11c2efc8.js} +1 -1
  61. package/dist/cdn/{shared-a040d79d.js → shared-15d3d613.js} +1 -1
  62. package/dist/cdn/shared-1b98e51a.js +1 -0
  63. package/dist/cdn/shared-1dedbcf4.js +1 -0
  64. package/dist/cdn/{shared-59e44f29.js → shared-1faaa1b6.js} +1 -1
  65. package/dist/cdn/{shared-65dfd512.js → shared-3a7ec144.js} +1 -1
  66. package/dist/cdn/shared-3d12e221.js +1 -0
  67. package/dist/cdn/{shared-023a97c2.js → shared-42457145.js} +6 -6
  68. package/dist/cdn/{shared-9cd49a3e.js → shared-447623da.js} +4 -4
  69. package/dist/cdn/{shared-5535f38f.js → shared-50f0611d.js} +1 -1
  70. package/dist/cdn/shared-5499ce50.js +201 -0
  71. package/dist/cdn/{shared-448781f9.js → shared-571516a4.js} +1 -1
  72. package/dist/cdn/shared-58debe59.js +1 -0
  73. package/dist/cdn/shared-5bf4b9f9.js +1 -0
  74. package/dist/cdn/shared-5bf947db.js +1 -0
  75. package/dist/cdn/shared-667a8855.js +1 -0
  76. package/dist/cdn/{shared-f4ad24f4.js → shared-6b326bd8.js} +1 -1
  77. package/dist/cdn/{shared-46ee137f.js → shared-70c7bf00.js} +10 -10
  78. package/dist/cdn/{shared-0f38a631.js → shared-70d6309f.js} +1 -1
  79. package/dist/cdn/{shared-9fc4a896.js → shared-712b7f69.js} +1 -1
  80. package/dist/cdn/{shared-073cb8e9.js → shared-7823570c.js} +1 -1
  81. package/dist/cdn/{shared-d58c947c.js → shared-7991f6c1.js} +2 -2
  82. package/dist/cdn/{shared-5a54a9bc.js → shared-7a93239c.js} +1 -1
  83. package/dist/cdn/{shared-340f7584.js → shared-7eaa7ada.js} +10 -10
  84. package/dist/cdn/shared-7f33a83a.js +159 -0
  85. package/dist/cdn/{shared-7f0a9790.js → shared-84731e61.js} +1 -1
  86. package/dist/cdn/shared-864a9f46.js +1 -0
  87. package/dist/cdn/shared-8c308dc1.js +12 -0
  88. package/dist/cdn/shared-8c3463b5.js +1 -0
  89. package/dist/cdn/shared-930bbe32.js +1 -0
  90. package/dist/cdn/{shared-218ba06e.js → shared-99065f2a.js} +1 -1
  91. package/dist/cdn/{shared-1a67bc75.js → shared-9aed33de.js} +4 -4
  92. package/dist/cdn/{shared-60126eee.js → shared-9b0b7e4d.js} +1 -1
  93. package/dist/cdn/shared-a821b675.js +1 -0
  94. package/dist/cdn/{shared-756034e4.js → shared-afa7534d.js} +1 -1
  95. package/dist/cdn/shared-b4159722.js +1 -0
  96. package/dist/cdn/shared-c937b8af.js +29 -0
  97. package/dist/cdn/{shared-6d45a07b.js → shared-d3bf9ac0.js} +2 -2
  98. package/dist/cdn/{shared-b710881a.js → shared-d519a301.js} +2 -2
  99. package/dist/cdn/{shared-fab8c705.js → shared-dfb99fb9.js} +10 -10
  100. package/dist/cdn/shared-e6dd0f55.js +1 -0
  101. package/dist/cdn/{shared-625c1272.js → shared-ea015924.js} +15 -15
  102. package/dist/cdn/{shared-ecfd3539.js → shared-ebd1dc3f.js} +1 -1
  103. package/dist/cdn/{shared-07134f93.js → shared-f3b35364.js} +1 -1
  104. package/dist/cdn/shared-f7a9db82.js +1 -0
  105. package/dist/cdn/shared-f92fa56a.js +1 -0
  106. package/dist/cdn/translations/report-form/en.json +38 -0
  107. package/dist/cdn/translations/reports-table/en.json +21 -0
  108. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js +12 -3
  109. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js.map +1 -1
  110. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js +2 -1
  111. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js.map +1 -1
  112. package/dist/elements/public/ReportForm/ReportForm.d.ts +48 -0
  113. package/dist/elements/public/ReportForm/ReportForm.js +391 -0
  114. package/dist/elements/public/ReportForm/ReportForm.js.map +1 -0
  115. package/dist/elements/public/ReportForm/index.d.ts +11 -0
  116. package/dist/elements/public/ReportForm/index.js +13 -0
  117. package/dist/elements/public/ReportForm/index.js.map +1 -0
  118. package/dist/elements/public/ReportForm/types.d.ts +17 -0
  119. package/dist/elements/public/ReportForm/types.js +2 -0
  120. package/dist/elements/public/ReportForm/types.js.map +1 -0
  121. package/dist/elements/public/ReportForm/utils.d.ts +16 -0
  122. package/dist/elements/public/ReportForm/utils.js +73 -0
  123. package/dist/elements/public/ReportForm/utils.js.map +1 -0
  124. package/dist/elements/public/ReportsTable/ReportsTable.d.ts +21 -0
  125. package/dist/elements/public/ReportsTable/ReportsTable.js +101 -0
  126. package/dist/elements/public/ReportsTable/ReportsTable.js.map +1 -0
  127. package/dist/elements/public/ReportsTable/index.d.ts +4 -0
  128. package/dist/elements/public/ReportsTable/index.js +6 -0
  129. package/dist/elements/public/ReportsTable/index.js.map +1 -0
  130. package/dist/elements/public/ReportsTable/types.d.ts +3 -0
  131. package/dist/elements/public/ReportsTable/types.js +2 -0
  132. package/dist/elements/public/ReportsTable/types.js.map +1 -0
  133. package/dist/elements/public/SwipeActions/SwipeActions.d.ts +13 -0
  134. package/dist/elements/public/SwipeActions/SwipeActions.js +116 -0
  135. package/dist/elements/public/SwipeActions/SwipeActions.js.map +1 -0
  136. package/dist/elements/public/SwipeActions/index.d.ts +2 -0
  137. package/dist/elements/public/SwipeActions/index.js +4 -0
  138. package/dist/elements/public/SwipeActions/index.js.map +1 -0
  139. package/dist/elements/public/index.d.ts +3 -0
  140. package/dist/elements/public/index.defined.d.ts +3 -0
  141. package/dist/elements/public/index.defined.js +3 -0
  142. package/dist/elements/public/index.defined.js.map +1 -1
  143. package/dist/elements/public/index.js +3 -0
  144. package/dist/elements/public/index.js.map +1 -1
  145. package/dist/mixins/themeable.js +6571 -0
  146. package/dist/mixins/themeable.js.map +1 -1
  147. package/package.json +3 -3
  148. package/dist/cdn/shared-00d6a968.js +0 -1
  149. package/dist/cdn/shared-027c537d.js +0 -1
  150. package/dist/cdn/shared-21419f10.js +0 -1
  151. package/dist/cdn/shared-39e3ae67.js +0 -1
  152. package/dist/cdn/shared-3f0a9c2c.js +0 -1
  153. package/dist/cdn/shared-3f965dce.js +0 -1
  154. package/dist/cdn/shared-5e2fd1c7.js +0 -1
  155. package/dist/cdn/shared-60d43523.js +0 -1
  156. package/dist/cdn/shared-63eaded9.js +0 -159
  157. package/dist/cdn/shared-84d2d490.js +0 -1
  158. package/dist/cdn/shared-8b20bc23.js +0 -12
  159. package/dist/cdn/shared-8c8a910c.js +0 -1
  160. package/dist/cdn/shared-ab71552b.js +0 -1
  161. package/dist/cdn/shared-ae8cd227.js +0 -1
  162. package/dist/cdn/shared-ba39823e.js +0 -1
  163. package/dist/cdn/shared-df730f90.js +0 -1
  164. package/dist/cdn/shared-e55088b4.js +0 -1
  165. package/dist/cdn/shared-f2a69797.js +0 -1
  166. package/dist/cdn/shared-ff79f3f9.js +0 -230
@@ -0,0 +1,391 @@
1
+ import { Choice, Group, PropertyTable } from "../../private/index.js";
2
+ import { html } from 'lit-element';
3
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
4
+ import { getCurrentMonth, getCurrentQuarter, getCurrentYear, getLast30Days, getLast365Days, getPreviousMonth, getPreviousQuarter, getPreviousYear, toAPIDateTime, toDatePickerValue, toDateTimePickerValue, } from "./utils.js";
5
+ import { ChoiceChangeEvent } from "../../private/Choice/ChoiceChangeEvent.js";
6
+ import { ConfigurableMixin } from "../../../mixins/configurable.js";
7
+ import { NucleonElement } from "../NucleonElement/NucleonElement.js";
8
+ import { ResponsiveMixin } from "../../../mixins/responsive.js";
9
+ import { ThemeableMixin } from "../../../mixins/themeable.js";
10
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
11
+ import { classMap } from "../../../utils/class-map.js";
12
+ import { ifDefined } from 'lit-html/directives/if-defined';
13
+ import { live } from 'lit-html/directives/live';
14
+ import { render } from 'lit-html';
15
+ const Base = ScopedElementsMixin(ResponsiveMixin(ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, 'report-form')))));
16
+ /**
17
+ * Form element for creating or editing reports (`fx:report`).
18
+ *
19
+ * @slot name:before
20
+ * @slot name:after
21
+ *
22
+ * @slot range:before
23
+ * @slot range:after
24
+ *
25
+ * @slot timestamps:before
26
+ * @slot timestamps:after
27
+ *
28
+ * @slot delete:before
29
+ * @slot delete:after
30
+ *
31
+ * @slot create:before
32
+ * @slot create:after
33
+ *
34
+ * @element foxy-report-form
35
+ * @since 1.16.0
36
+ */
37
+ export class ReportForm extends Base {
38
+ constructor() {
39
+ super(...arguments);
40
+ this.templates = {};
41
+ this.__showRangeTime = false;
42
+ }
43
+ static get scopedElements() {
44
+ return {
45
+ 'vaadin-date-time-picker': customElements.get('vaadin-date-time-picker'),
46
+ 'vaadin-date-picker': customElements.get('vaadin-date-picker'),
47
+ 'vaadin-checkbox': customElements.get('vaadin-checkbox'),
48
+ 'vaadin-select': customElements.get('vaadin-select'),
49
+ 'vaadin-button': customElements.get('vaadin-button'),
50
+ 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),
51
+ 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),
52
+ 'foxy-spinner': customElements.get('foxy-spinner'),
53
+ 'foxy-i18n': customElements.get('foxy-i18n'),
54
+ 'x-property-table': PropertyTable,
55
+ 'x-choice': Choice,
56
+ 'x-group': Group,
57
+ };
58
+ }
59
+ static get properties() {
60
+ return {
61
+ ...super.properties,
62
+ __showRangeTime: { attribute: false },
63
+ };
64
+ }
65
+ static get v8n() {
66
+ return [
67
+ ({ name: v }) => !!v || 'name_required',
68
+ ({ datetime_start: v }) => !!v || 'datetime_start_required',
69
+ ({ datetime_end: v }) => !!v || 'datetime_end_required',
70
+ ];
71
+ }
72
+ render() {
73
+ var _a, _b;
74
+ const hidden = this.hiddenSelector;
75
+ return html `
76
+ <div
77
+ data-testid="wrapper"
78
+ aria-busy=${this.in('busy')}
79
+ aria-live="polite"
80
+ class="space-y-l relative"
81
+ >
82
+ <div class="space-y-m">
83
+ ${hidden.matches('name', true) ? '' : this.__renderName()}
84
+ ${hidden.matches('range', true) ? '' : this.__renderRange()}
85
+ ${hidden.matches('timestamps', true) || !this.data ? '' : this.__renderTimestamps()}
86
+ ${hidden.matches('create', true) || this.data ? '' : this.__renderCreate()}
87
+ ${hidden.matches('delete', true) || !this.data ? '' : this.__renderDelete()}
88
+ </div>
89
+
90
+ <div
91
+ data-testid="spinner"
92
+ class=${classMap({
93
+ 'transition duration-500 ease-in-out absolute inset-0 flex': true,
94
+ 'opacity-0 pointer-events-none': this.in('idle'),
95
+ })}
96
+ >
97
+ <foxy-spinner
98
+ layout="vertical"
99
+ class="m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l"
100
+ state=${this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty'}
101
+ lang=${this.lang}
102
+ ns="${this.ns} ${(_b = (_a = customElements.get('foxy-spinner')) === null || _a === void 0 ? void 0 : _a.defaultNS) !== null && _b !== void 0 ? _b : ''}"
103
+ >
104
+ </foxy-spinner>
105
+ </div>
106
+ </div>
107
+ `;
108
+ }
109
+ __renderName() {
110
+ const scope = 'name';
111
+ const items = ['complete', 'customers', 'customers_ltv'];
112
+ const isDisabled = !this.in('idle') || this.disabledSelector.matches(scope);
113
+ const isReadonly = this.readonlySelector.matches(scope);
114
+ return html `
115
+ <div data-testid=${scope}>
116
+ ${this.renderTemplateOrSlot(`${scope}:before`)}
117
+
118
+ <x-group frame>
119
+ <foxy-i18n lang=${this.lang} slot="header" key="name" ns=${this.ns}></foxy-i18n>
120
+
121
+ <x-choice
122
+ data-testid="name-choice"
123
+ .value=${this.form.name}
124
+ .items=${items}
125
+ ?readonly=${isReadonly}
126
+ ?disabled=${isDisabled}
127
+ @change=${(evt) => {
128
+ if (evt instanceof ChoiceChangeEvent) {
129
+ this.edit({ name: evt.detail });
130
+ }
131
+ }}
132
+ >
133
+ ${items.map(value => {
134
+ return html `
135
+ <div slot="${value}-label" class="py-s leading-s">
136
+ <foxy-i18n class="block" lang=${this.lang} key="name_${value}" ns=${this.ns}>
137
+ </foxy-i18n>
138
+
139
+ <foxy-i18n
140
+ class="block text-s opacity-70"
141
+ lang=${this.lang}
142
+ key="name_${value}_explainer"
143
+ ns=${this.ns}
144
+ >
145
+ </foxy-i18n>
146
+ </div>
147
+ `;
148
+ })}
149
+ </x-choice>
150
+ </x-group>
151
+
152
+ ${this.renderTemplateOrSlot(`${scope}:after`)}
153
+ </div>
154
+ `;
155
+ }
156
+ __renderRangePreset() {
157
+ var _a;
158
+ const options = [
159
+ [
160
+ { value: '0', label: 'preset_previous_quarter', ...getPreviousQuarter() },
161
+ { value: '1', label: 'preset_previous_month', ...getPreviousMonth() },
162
+ { value: '2', label: 'preset_previous_year', ...getPreviousYear() },
163
+ ],
164
+ [
165
+ { value: '3', label: 'preset_this_quarter', ...getCurrentQuarter() },
166
+ { value: '4', label: 'preset_this_month', ...getCurrentMonth() },
167
+ { value: '5', label: 'preset_this_year', ...getCurrentYear() },
168
+ ],
169
+ [
170
+ { value: '6', label: 'preset_last_365_days', ...getLast365Days() },
171
+ { value: '7', label: 'preset_last_30_days', ...getLast30Days() },
172
+ ],
173
+ ];
174
+ const currentOption = options.flat(1).find(option => {
175
+ const { datetime_end: end, datetime_start: start } = this.form;
176
+ return (start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end);
177
+ });
178
+ const renderer = (root) => {
179
+ const custom = html `<vaadin-item value="custom">${this.t('preset_custom')}</vaadin-item>`;
180
+ const separator = html `<hr />`;
181
+ const predefined = options.map(group => {
182
+ const items = group.map(({ value, label }) => {
183
+ return html `<vaadin-item value=${value}>${this.t(label)}</vaadin-item>`;
184
+ });
185
+ return html `${items}${separator}`;
186
+ });
187
+ if (!root.firstElementChild)
188
+ root.appendChild(document.createElement('vaadin-list-box'));
189
+ render(html `${predefined}${custom}`, root.firstElementChild);
190
+ };
191
+ return html `
192
+ <div>
193
+ <vaadin-select
194
+ data-testid="range:preset"
195
+ label=${this.t('preset')}
196
+ class="w-full -mt-m -mb-xs"
197
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
198
+ ?readonly=${this.readonlySelector.matches('range', true)}
199
+ .value=${live((_a = currentOption === null || currentOption === void 0 ? void 0 : currentOption.value) !== null && _a !== void 0 ? _a : 'custom')}
200
+ .renderer=${renderer}
201
+ @change=${(evt) => {
202
+ const select = evt.currentTarget;
203
+ const option = options.flat(1).find(option => option.value === select.value);
204
+ if (option) {
205
+ this.edit({
206
+ datetime_start: toAPIDateTime(option.start),
207
+ datetime_end: toAPIDateTime(option.end),
208
+ });
209
+ }
210
+ }}
211
+ >
212
+ </vaadin-select>
213
+ </div>
214
+ `;
215
+ }
216
+ __renderRangeDateTimePicker(type) {
217
+ const field = type === 'end' ? 'datetime_end' : 'datetime_start';
218
+ const error = this.errors.find(error => error.startsWith(`${field}_`));
219
+ const value = this.form[field];
220
+ return html `
221
+ <vaadin-date-time-picker
222
+ date-placeholder=${this.t('select_date')}
223
+ time-placeholder=${this.t('select_time')}
224
+ error-message=${ifDefined(error ? this.t(error) : undefined)}
225
+ data-testid="range:${type}"
226
+ class="w-full"
227
+ label=${this.t(type)}
228
+ step="1"
229
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
230
+ ?readonly=${this.readonlySelector.matches('range', true)}
231
+ .checkValidity=${() => !error}
232
+ .value=${value ? toDateTimePickerValue(value) : ''}
233
+ @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
234
+ @change=${(evt) => {
235
+ const picker = evt.currentTarget;
236
+ this.edit({ [field]: picker.value });
237
+ }}
238
+ >
239
+ </vaadin-date-time-picker>
240
+ `;
241
+ }
242
+ __renderRangeDatePicker(type) {
243
+ const field = type === 'end' ? 'datetime_end' : 'datetime_start';
244
+ const error = this.errors.find(error => error.startsWith(`${field}_`));
245
+ const value = this.form[field];
246
+ return html `
247
+ <vaadin-date-picker
248
+ error-message=${ifDefined(error ? this.t(error) : undefined)}
249
+ placeholder=${this.t('select_date')}
250
+ data-testid="range:${type}"
251
+ class="w-full"
252
+ label=${this.t(type)}
253
+ step="1"
254
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
255
+ ?readonly=${this.readonlySelector.matches('range', true)}
256
+ .checkValidity=${() => !error}
257
+ .value=${value ? toDatePickerValue(value) : ''}
258
+ @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
259
+ @change=${(evt) => {
260
+ const picker = evt.currentTarget;
261
+ const time = type === 'end' ? '23:59:59' : '00:00:00';
262
+ this.edit({ [field]: `${picker.value}T${time}` });
263
+ }}
264
+ >
265
+ </vaadin-date-picker>
266
+ `;
267
+ }
268
+ __renderRange() {
269
+ const renderer = this.__showRangeTime
270
+ ? this.__renderRangeDateTimePicker
271
+ : this.__renderRangeDatePicker;
272
+ return html `
273
+ <div data-testid="range">
274
+ ${this.renderTemplateOrSlot('range:before')}
275
+
276
+ <x-group frame>
277
+ <foxy-i18n slot="header" lang=${this.lang} key="range" ns=${this.ns}></foxy-i18n>
278
+
279
+ <div class="p-m grid gap-m ${this.__showRangeTime ? 'grid-cols-1' : 'sm-grid-cols-2'}">
280
+ <div class=${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}>
281
+ ${this.__renderRangePreset()}
282
+ </div>
283
+
284
+ ${renderer.call(this, 'start')} ${renderer.call(this, 'end')}
285
+
286
+ <vaadin-checkbox
287
+ data-testid="range:toggle"
288
+ class="-my-xs w-full ${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}"
289
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
290
+ ?checked=${this.__showRangeTime}
291
+ @change=${(evt) => {
292
+ const checkbox = evt.currentTarget;
293
+ this.__showRangeTime = checkbox.checked;
294
+ }}
295
+ >
296
+ <foxy-i18n lang=${this.lang} key="use_precise_time" ns=${this.ns}></foxy-i18n>
297
+ </vaadin-checkbox>
298
+ </div>
299
+ </x-group>
300
+
301
+ ${this.renderTemplateOrSlot('range:after')}
302
+ </div>
303
+ `;
304
+ }
305
+ __renderTimestamps() {
306
+ return html `
307
+ <div>
308
+ ${this.renderTemplateOrSlot('timestamps:before')}
309
+
310
+ <x-property-table
311
+ data-testid="timestamps"
312
+ .items=${['date_modified', 'date_created'].map(field => {
313
+ var _a;
314
+ return ({
315
+ name: this.t(field),
316
+ value: ((_a = this.data) === null || _a === void 0 ? void 0 : _a[field]) ? this.t('date', { value: new Date(this.data[field]) })
317
+ : '',
318
+ });
319
+ })}
320
+ >
321
+ </x-property-table>
322
+
323
+ ${this.renderTemplateOrSlot('timestamps:after')}
324
+ </div>
325
+ `;
326
+ }
327
+ __renderCreate() {
328
+ const isCleanTemplateInvalid = this.in({ idle: { template: { clean: 'invalid' } } });
329
+ const isDirtyTemplateInvalid = this.in({ idle: { template: { dirty: 'invalid' } } });
330
+ const isCleanSnapshotInvalid = this.in({ idle: { snapshot: { clean: 'invalid' } } });
331
+ const isDirtySnapshotInvalid = this.in({ idle: { snapshot: { dirty: 'invalid' } } });
332
+ const isTemplateInvalid = isCleanTemplateInvalid || isDirtyTemplateInvalid;
333
+ const isSnaphotInvalid = isCleanSnapshotInvalid || isDirtySnapshotInvalid;
334
+ const isInvalid = isTemplateInvalid || isSnaphotInvalid;
335
+ const isIdle = this.in('idle');
336
+ return html `
337
+ <div>
338
+ ${this.renderTemplateOrSlot('create:before')}
339
+
340
+ <vaadin-button
341
+ data-testid="create"
342
+ class="w-full"
343
+ theme="primary success"
344
+ ?disabled=${!isIdle || isInvalid || this.disabledSelector.matches('create', true)}
345
+ @click=${this.submit}
346
+ >
347
+ <foxy-i18n ns=${this.ns} key="create" lang=${this.lang}></foxy-i18n>
348
+ </vaadin-button>
349
+
350
+ ${this.renderTemplateOrSlot('create:after')}
351
+ </div>
352
+ `;
353
+ }
354
+ __renderDelete() {
355
+ return html `
356
+ <div>
357
+ <foxy-internal-confirm-dialog
358
+ data-testid="confirm"
359
+ message="delete_prompt"
360
+ confirm="delete"
361
+ cancel="cancel"
362
+ header="delete"
363
+ theme="primary error"
364
+ lang=${this.lang}
365
+ ns=${this.ns}
366
+ id="confirm"
367
+ @hide=${(evt) => !evt.detail.cancelled && this.delete()}
368
+ >
369
+ </foxy-internal-confirm-dialog>
370
+
371
+ ${this.renderTemplateOrSlot('delete:before')}
372
+
373
+ <vaadin-button
374
+ data-testid="delete"
375
+ theme="primary error"
376
+ class="w-full"
377
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('delete', true)}
378
+ @click=${(evt) => {
379
+ const confirm = this.renderRoot.querySelector('#confirm');
380
+ confirm.show(evt.currentTarget);
381
+ }}
382
+ >
383
+ <foxy-i18n ns=${this.ns} key="delete" lang=${this.lang}></foxy-i18n>
384
+ </vaadin-button>
385
+
386
+ ${this.renderTemplateOrSlot('delete:after')}
387
+ </div>
388
+ `;
389
+ }
390
+ }
391
+ //# sourceMappingURL=ReportForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/ReportForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Choice, Group, PropertyTable } from '../../private/index';\nimport { Data, Templates } from './types';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport {\n getCurrentMonth,\n getCurrentQuarter,\n getCurrentYear,\n getLast30Days,\n getLast365Days,\n getPreviousMonth,\n getPreviousQuarter,\n getPreviousYear,\n toAPIDateTime,\n toDatePickerValue,\n toDateTimePickerValue,\n} from './utils';\n\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { CheckboxElement } from '@vaadin/vaadin-checkbox';\nimport { ChoiceChangeEvent } from '../../private/Choice/ChoiceChangeEvent';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DateTimePicker } from '@vaadin/vaadin-date-time-picker';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { SelectElement } from '@vaadin/vaadin-select';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { live } from 'lit-html/directives/live';\nimport { render } from 'lit-html';\n\nconst Base = ScopedElementsMixin(\n ResponsiveMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, 'report-form')))\n )\n);\n\n/**\n * Form element for creating or editing reports (`fx:report`).\n *\n * @slot name:before\n * @slot name:after\n *\n * @slot range:before\n * @slot range:after\n *\n * @slot timestamps:before\n * @slot timestamps:after\n *\n * @slot delete:before\n * @slot delete:after\n *\n * @slot create:before\n * @slot create:after\n *\n * @element foxy-report-form\n * @since 1.16.0\n */\nexport class ReportForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-date-time-picker': customElements.get('vaadin-date-time-picker'),\n 'vaadin-date-picker': customElements.get('vaadin-date-picker'),\n 'vaadin-checkbox': customElements.get('vaadin-checkbox'),\n 'vaadin-select': customElements.get('vaadin-select'),\n 'vaadin-button': customElements.get('vaadin-button'),\n\n 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),\n 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n\n 'x-property-table': PropertyTable,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __showRangeTime: { attribute: false },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name_required',\n ({ datetime_start: v }) => !!v || 'datetime_start_required',\n ({ datetime_end: v }) => !!v || 'datetime_end_required',\n ];\n }\n\n templates: Templates = {};\n\n private __showRangeTime = false;\n\n render(): TemplateResult {\n const hidden = this.hiddenSelector;\n\n return html`\n <div\n data-testid=\"wrapper\"\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n class=\"space-y-l relative\"\n >\n <div class=\"space-y-m\">\n ${hidden.matches('name', true) ? '' : this.__renderName()}\n ${hidden.matches('range', true) ? '' : this.__renderRange()}\n ${hidden.matches('timestamps', true) || !this.data ? '' : this.__renderTimestamps()}\n ${hidden.matches('create', true) || this.data ? '' : this.__renderCreate()}\n ${hidden.matches('delete', true) || !this.data ? '' : this.__renderDelete()}\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': this.in('idle'),\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=${this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty'}\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private __renderName() {\n const scope = 'name';\n const items = ['complete', 'customers', 'customers_ltv'];\n const isDisabled = !this.in('idle') || this.disabledSelector.matches(scope);\n const isReadonly = this.readonlySelector.matches(scope);\n\n return html`\n <div data-testid=${scope}>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <x-group frame>\n <foxy-i18n lang=${this.lang} slot=\"header\" key=\"name\" ns=${this.ns}></foxy-i18n>\n\n <x-choice\n data-testid=\"name-choice\"\n .value=${this.form.name}\n .items=${items}\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @change=${(evt: Event) => {\n if (evt instanceof ChoiceChangeEvent) {\n this.edit({ name: evt.detail as Data['name'] });\n }\n }}\n >\n ${items.map(value => {\n return html`\n <div slot=\"${value}-label\" class=\"py-s leading-s\">\n <foxy-i18n class=\"block\" lang=${this.lang} key=\"name_${value}\" ns=${this.ns}>\n </foxy-i18n>\n\n <foxy-i18n\n class=\"block text-s opacity-70\"\n lang=${this.lang}\n key=\"name_${value}_explainer\"\n ns=${this.ns}\n >\n </foxy-i18n>\n </div>\n `;\n })}\n </x-choice>\n </x-group>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderRangePreset() {\n const options = [\n [\n { value: '0', label: 'preset_previous_quarter', ...getPreviousQuarter() },\n { value: '1', label: 'preset_previous_month', ...getPreviousMonth() },\n { value: '2', label: 'preset_previous_year', ...getPreviousYear() },\n ],\n [\n { value: '3', label: 'preset_this_quarter', ...getCurrentQuarter() },\n { value: '4', label: 'preset_this_month', ...getCurrentMonth() },\n { value: '5', label: 'preset_this_year', ...getCurrentYear() },\n ],\n [\n { value: '6', label: 'preset_last_365_days', ...getLast365Days() },\n { value: '7', label: 'preset_last_30_days', ...getLast30Days() },\n ],\n ];\n\n const currentOption = options.flat(1).find(option => {\n const { datetime_end: end, datetime_start: start } = this.form;\n return (\n start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end\n );\n });\n\n const renderer = (root: Element) => {\n const custom = html`<vaadin-item value=\"custom\">${this.t('preset_custom')}</vaadin-item>`;\n const separator = html`<hr />`;\n const predefined = options.map(group => {\n const items = group.map(({ value, label }) => {\n return html`<vaadin-item value=${value}>${this.t(label)}</vaadin-item>`;\n });\n\n return html`${items}${separator}`;\n });\n\n if (!root.firstElementChild) root.appendChild(document.createElement('vaadin-list-box'));\n render(html`${predefined}${custom}`, root.firstElementChild as Element);\n };\n\n return html`\n <div>\n <vaadin-select\n data-testid=\"range:preset\"\n label=${this.t('preset')}\n class=\"w-full -mt-m -mb-xs\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .value=${live(currentOption?.value ?? 'custom')}\n .renderer=${renderer}\n @change=${(evt: CustomEvent) => {\n const select = evt.currentTarget as SelectElement;\n const option = options.flat(1).find(option => option.value === select.value);\n\n if (option) {\n this.edit({\n datetime_start: toAPIDateTime(option.start),\n datetime_end: toAPIDateTime(option.end),\n });\n }\n }}\n >\n </vaadin-select>\n </div>\n `;\n }\n\n private __renderRangeDateTimePicker(type: 'start' | 'end') {\n const field = type === 'end' ? 'datetime_end' : 'datetime_start';\n const error = this.errors.find(error => error.startsWith(`${field}_`));\n const value = this.form[field as keyof Data] as string;\n\n return html`\n <vaadin-date-time-picker\n date-placeholder=${this.t('select_date')}\n time-placeholder=${this.t('select_time')}\n error-message=${ifDefined(error ? this.t(error) : undefined)}\n data-testid=\"range:${type}\"\n class=\"w-full\"\n label=${this.t(type)}\n step=\"1\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .checkValidity=${() => !error}\n .value=${value ? toDateTimePickerValue(value) : ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @change=${(evt: CustomEvent) => {\n const picker = evt.currentTarget as DateTimePicker;\n this.edit({ [field]: picker.value });\n }}\n >\n </vaadin-date-time-picker>\n `;\n }\n\n private __renderRangeDatePicker(type: 'start' | 'end') {\n const field = type === 'end' ? 'datetime_end' : 'datetime_start';\n const error = this.errors.find(error => error.startsWith(`${field}_`));\n const value = this.form[field as keyof Data] as string;\n\n return html`\n <vaadin-date-picker\n error-message=${ifDefined(error ? this.t(error) : undefined)}\n placeholder=${this.t('select_date')}\n data-testid=\"range:${type}\"\n class=\"w-full\"\n label=${this.t(type)}\n step=\"1\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .checkValidity=${() => !error}\n .value=${value ? toDatePickerValue(value) : ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @change=${(evt: CustomEvent) => {\n const picker = evt.currentTarget as DateTimePicker;\n const time = type === 'end' ? '23:59:59' : '00:00:00';\n\n this.edit({ [field]: `${picker.value}T${time}` });\n }}\n >\n </vaadin-date-picker>\n `;\n }\n\n private __renderRange() {\n const renderer = this.__showRangeTime\n ? this.__renderRangeDateTimePicker\n : this.__renderRangeDatePicker;\n\n return html`\n <div data-testid=\"range\">\n ${this.renderTemplateOrSlot('range:before')}\n\n <x-group frame>\n <foxy-i18n slot=\"header\" lang=${this.lang} key=\"range\" ns=${this.ns}></foxy-i18n>\n\n <div class=\"p-m grid gap-m ${this.__showRangeTime ? 'grid-cols-1' : 'sm-grid-cols-2'}\">\n <div class=${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}>\n ${this.__renderRangePreset()}\n </div>\n\n ${renderer.call(this, 'start')} ${renderer.call(this, 'end')}\n\n <vaadin-checkbox\n data-testid=\"range:toggle\"\n class=\"-my-xs w-full ${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?checked=${this.__showRangeTime}\n @change=${(evt: CustomEvent) => {\n const checkbox = evt.currentTarget as CheckboxElement;\n this.__showRangeTime = checkbox.checked;\n }}\n >\n <foxy-i18n lang=${this.lang} key=\"use_precise_time\" ns=${this.ns}></foxy-i18n>\n </vaadin-checkbox>\n </div>\n </x-group>\n\n ${this.renderTemplateOrSlot('range:after')}\n </div>\n `;\n }\n\n private __renderTimestamps() {\n return html`\n <div>\n ${this.renderTemplateOrSlot('timestamps:before')}\n\n <x-property-table\n data-testid=\"timestamps\"\n .items=${(['date_modified', 'date_created'] as const).map(field => ({\n name: this.t(field),\n value: this.data?.[field]\n ? this.t('date', { value: new Date(this.data[field] as string) })\n : '',\n }))}\n >\n </x-property-table>\n\n ${this.renderTemplateOrSlot('timestamps:after')}\n </div>\n `;\n }\n\n private __renderCreate() {\n const isCleanTemplateInvalid = this.in({ idle: { template: { clean: 'invalid' } } });\n const isDirtyTemplateInvalid = this.in({ idle: { template: { dirty: 'invalid' } } });\n const isCleanSnapshotInvalid = this.in({ idle: { snapshot: { clean: 'invalid' } } });\n const isDirtySnapshotInvalid = this.in({ idle: { snapshot: { dirty: 'invalid' } } });\n const isTemplateInvalid = isCleanTemplateInvalid || isDirtyTemplateInvalid;\n const isSnaphotInvalid = isCleanSnapshotInvalid || isDirtySnapshotInvalid;\n const isInvalid = isTemplateInvalid || isSnaphotInvalid;\n const isIdle = this.in('idle');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('create:before')}\n\n <vaadin-button\n data-testid=\"create\"\n class=\"w-full\"\n theme=\"primary success\"\n ?disabled=${!isIdle || isInvalid || this.disabledSelector.matches('create', true)}\n @click=${this.submit}\n >\n <foxy-i18n ns=${this.ns} key=\"create\" lang=${this.lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('create:after')}\n </div>\n `;\n }\n\n private __renderDelete() {\n return html`\n <div>\n <foxy-internal-confirm-dialog\n data-testid=\"confirm\"\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${this.lang}\n ns=${this.ns}\n id=\"confirm\"\n @hide=${(evt: DialogHideEvent) => !evt.detail.cancelled && this.delete()}\n >\n </foxy-internal-confirm-dialog>\n\n ${this.renderTemplateOrSlot('delete:before')}\n\n <vaadin-button\n data-testid=\"delete\"\n theme=\"primary error\"\n class=\"w-full\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('delete', true)}\n @click=${(evt: CustomEvent) => {\n const confirm = this.renderRoot.querySelector('#confirm') as InternalConfirmDialog;\n confirm.show(evt.currentTarget as ButtonElement);\n }}\n >\n <foxy-i18n ns=${this.ns} key=\"delete\" lang=${this.lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('delete:after')}\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import '@vaadin/vaadin-date-time-picker';
2
+ import '@vaadin/vaadin-date-picker';
3
+ import '@vaadin/vaadin-checkbox';
4
+ import '@vaadin/vaadin-button';
5
+ import '@vaadin/vaadin-select';
6
+ import '../../internal/InternalConfirmDialog/index';
7
+ import '../../internal/InternalSandbox/index';
8
+ import '../Spinner/index';
9
+ import '../I18n/index';
10
+ import { ReportForm } from './ReportForm';
11
+ export { ReportForm };
@@ -0,0 +1,13 @@
1
+ import '@vaadin/vaadin-date-time-picker';
2
+ import '@vaadin/vaadin-date-picker';
3
+ import '@vaadin/vaadin-checkbox';
4
+ import '@vaadin/vaadin-button';
5
+ import '@vaadin/vaadin-select';
6
+ import "../../internal/InternalConfirmDialog/index.js";
7
+ import "../../internal/InternalSandbox/index.js";
8
+ import "../Spinner/index.js";
9
+ import "../I18n/index.js";
10
+ import { ReportForm } from "./ReportForm.js";
11
+ customElements.define('foxy-report-form', ReportForm);
12
+ export { ReportForm };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,iCAAiC,CAAC;AACzC,OAAO,4BAA4B,CAAC;AACpC,OAAO,yBAAyB,CAAC;AACjC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,uBAAuB,CAAC;AAC/B,uDAAoD;AACpD,iDAA8C;AAC9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAE1C,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-date-time-picker';\nimport '@vaadin/vaadin-date-picker';\nimport '@vaadin/vaadin-checkbox';\nimport '@vaadin/vaadin-button';\nimport '@vaadin/vaadin-select';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalSandbox/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { ReportForm } from './ReportForm';\n\ncustomElements.define('foxy-report-form', ReportForm);\n\nexport { ReportForm };\n"]}
@@ -0,0 +1,17 @@
1
+ import { Rels } from '@foxy.io/sdk/backend';
2
+ import { Renderer } from '../../../mixins/configurable';
3
+ import { ReportForm } from './ReportForm';
4
+ import { Resource } from '@foxy.io/sdk/core';
5
+ export declare type Data = Resource<Rels.Report>;
6
+ export declare type Templates = {
7
+ 'name:before'?: Renderer<ReportForm>;
8
+ 'name:after'?: Renderer<ReportForm>;
9
+ 'range:before'?: Renderer<ReportForm>;
10
+ 'range:after'?: Renderer<ReportForm>;
11
+ 'timestamps:before'?: Renderer<ReportForm>;
12
+ 'timestamps:after'?: Renderer<ReportForm>;
13
+ 'delete:before'?: Renderer<ReportForm>;
14
+ 'delete:after'?: Renderer<ReportForm>;
15
+ 'create:before'?: Renderer<ReportForm>;
16
+ 'create:after'?: Renderer<ReportForm>;
17
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Rels } from '@foxy.io/sdk/backend';\nimport { Renderer } from '../../../mixins/configurable';\nimport { ReportForm } from './ReportForm';\nimport { Resource } from '@foxy.io/sdk/core';\n\nexport type Data = Resource<Rels.Report>;\n\nexport type Templates = {\n 'name:before'?: Renderer<ReportForm>;\n 'name:after'?: Renderer<ReportForm>;\n 'range:before'?: Renderer<ReportForm>;\n 'range:after'?: Renderer<ReportForm>;\n 'timestamps:before'?: Renderer<ReportForm>;\n 'timestamps:after'?: Renderer<ReportForm>;\n 'delete:before'?: Renderer<ReportForm>;\n 'delete:after'?: Renderer<ReportForm>;\n 'create:before'?: Renderer<ReportForm>;\n 'create:after'?: Renderer<ReportForm>;\n};\n"]}
@@ -0,0 +1,16 @@
1
+ declare type Range = {
2
+ start: Date;
3
+ end: Date;
4
+ };
5
+ export declare function getPreviousQuarter(now?: Date): Range;
6
+ export declare function getCurrentQuarter(now?: Date): Range;
7
+ export declare function getPreviousMonth(now?: Date): Range;
8
+ export declare function getCurrentMonth(now?: Date): Range;
9
+ export declare function getPreviousYear(now?: Date): Range;
10
+ export declare function getCurrentYear(now?: Date): Range;
11
+ export declare function getLast365Days(now?: Date): Range;
12
+ export declare function getLast30Days(now?: Date): Range;
13
+ export declare function toAPIDateTime(date: Date): string;
14
+ export declare function toDateTimePickerValue(apiValue: string): string;
15
+ export declare function toDatePickerValue(apiValue: string): string;
16
+ export {};
@@ -0,0 +1,73 @@
1
+ const quarters = [
2
+ [0, 1, 2],
3
+ [3, 4, 5],
4
+ [6, 7, 8],
5
+ [9, 10, 11],
6
+ ];
7
+ export function getPreviousQuarter(now = new Date()) {
8
+ const currentMonth = now.getMonth();
9
+ const currentQuarter = quarters.findIndex(months => months.includes(currentMonth));
10
+ const previousQuarter = currentQuarter === 0 ? quarters.length - 1 : currentQuarter - 1;
11
+ const previousQuarterStart = quarters[previousQuarter][0];
12
+ const start = new Date(now.getFullYear(), previousQuarterStart);
13
+ const previousQuarterEnd = quarters[previousQuarter][2];
14
+ const end = new Date(new Date(now.getFullYear(), previousQuarterEnd + 1).getTime() - 1);
15
+ return { start, end };
16
+ }
17
+ export function getCurrentQuarter(now = new Date()) {
18
+ const currentMonth = now.getMonth();
19
+ const currentQuarter = quarters.findIndex(months => months.includes(currentMonth));
20
+ const currentQuarterStart = quarters[currentQuarter][0];
21
+ const start = new Date(now.getFullYear(), currentQuarterStart);
22
+ const currentQuarterEnd = quarters[currentQuarter][2];
23
+ const end = new Date(new Date(now.getFullYear(), currentQuarterEnd + 1).getTime() - 1);
24
+ return { start, end };
25
+ }
26
+ export function getPreviousMonth(now = new Date()) {
27
+ const start = new Date(now.getFullYear(), now.getMonth() - 1);
28
+ const end = new Date(new Date(now.getFullYear(), now.getMonth()).getTime() - 1);
29
+ return { start, end };
30
+ }
31
+ export function getCurrentMonth(now = new Date()) {
32
+ const start = new Date(now.getFullYear(), now.getMonth());
33
+ const end = new Date(new Date(now.getFullYear(), now.getMonth() + 1).getTime() - 1);
34
+ return { start, end };
35
+ }
36
+ export function getPreviousYear(now = new Date()) {
37
+ const start = new Date(now.getFullYear() - 1, 0);
38
+ const end = new Date(new Date(now.getFullYear(), 0).getTime() - 1);
39
+ return { start, end };
40
+ }
41
+ export function getCurrentYear(now = new Date()) {
42
+ const start = new Date(now.getFullYear(), 0);
43
+ const end = new Date(new Date(now.getFullYear() + 1, 0).getTime() - 1);
44
+ return { start, end };
45
+ }
46
+ export function getLast365Days(now = new Date()) {
47
+ const start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 365);
48
+ const end = new Date(new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).getTime() - 1);
49
+ return { start, end };
50
+ }
51
+ export function getLast30Days(now = new Date()) {
52
+ const start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 30);
53
+ const end = new Date(new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).getTime() - 1);
54
+ return { start, end };
55
+ }
56
+ export function toAPIDateTime(date) {
57
+ const YYYY = date.getFullYear().toString().padStart(4, '0');
58
+ const MM = (date.getMonth() + 1).toString().padStart(2, '0');
59
+ const DD = date.getDate().toString().padStart(2, '0');
60
+ const hh = date.getHours().toString().padStart(2, '0');
61
+ const mm = date.getMinutes().toString().padStart(2, '0');
62
+ const ss = date.getSeconds().toString().padStart(2, '0');
63
+ return `${YYYY}-${MM}-${DD}T${hh}:${mm}:${ss}`;
64
+ }
65
+ export function toDateTimePickerValue(apiValue) {
66
+ var _a, _b;
67
+ return (_b = (_a = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.exec(apiValue)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : '';
68
+ }
69
+ export function toDatePickerValue(apiValue) {
70
+ var _a, _b;
71
+ return (_b = (_a = /^\d{4}-\d{2}-\d{2}/.exec(apiValue)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : '';
72
+ }
73
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/utils.ts"],"names":[],"mappings":"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","sourcesContent":["type Quarter = [number, number, number];\ntype Year = [Quarter, Quarter, Quarter, Quarter];\ntype Range = { start: Date; end: Date };\n\nconst quarters: Year = [\n [0, 1, 2],\n [3, 4, 5],\n [6, 7, 8],\n [9, 10, 11],\n];\n\nexport function getPreviousQuarter(now = new Date()): Range {\n const currentMonth = now.getMonth();\n const currentQuarter = quarters.findIndex(months => months.includes(currentMonth));\n const previousQuarter = currentQuarter === 0 ? quarters.length - 1 : currentQuarter - 1;\n\n const previousQuarterStart = quarters[previousQuarter][0];\n const start = new Date(now.getFullYear(), previousQuarterStart);\n\n const previousQuarterEnd = quarters[previousQuarter][2];\n const end = new Date(new Date(now.getFullYear(), previousQuarterEnd + 1).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getCurrentQuarter(now = new Date()): Range {\n const currentMonth = now.getMonth();\n const currentQuarter = quarters.findIndex(months => months.includes(currentMonth));\n\n const currentQuarterStart = quarters[currentQuarter][0];\n const start = new Date(now.getFullYear(), currentQuarterStart);\n\n const currentQuarterEnd = quarters[currentQuarter][2];\n const end = new Date(new Date(now.getFullYear(), currentQuarterEnd + 1).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getPreviousMonth(now = new Date()): Range {\n const start = new Date(now.getFullYear(), now.getMonth() - 1);\n const end = new Date(new Date(now.getFullYear(), now.getMonth()).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getCurrentMonth(now = new Date()): Range {\n const start = new Date(now.getFullYear(), now.getMonth());\n const end = new Date(new Date(now.getFullYear(), now.getMonth() + 1).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getPreviousYear(now = new Date()): Range {\n const start = new Date(now.getFullYear() - 1, 0);\n const end = new Date(new Date(now.getFullYear(), 0).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getCurrentYear(now = new Date()): Range {\n const start = new Date(now.getFullYear(), 0);\n const end = new Date(new Date(now.getFullYear() + 1, 0).getTime() - 1);\n\n return { start, end };\n}\n\nexport function getLast365Days(now = new Date()): Range {\n const start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 365);\n const end = new Date(\n new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).getTime() - 1\n );\n\n return { start, end };\n}\n\nexport function getLast30Days(now = new Date()): Range {\n const start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 30);\n const end = new Date(\n new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).getTime() - 1\n );\n\n return { start, end };\n}\n\nexport function toAPIDateTime(date: Date): string {\n const YYYY = date.getFullYear().toString().padStart(4, '0');\n const MM = (date.getMonth() + 1).toString().padStart(2, '0');\n const DD = date.getDate().toString().padStart(2, '0');\n const hh = date.getHours().toString().padStart(2, '0');\n const mm = date.getMinutes().toString().padStart(2, '0');\n const ss = date.getSeconds().toString().padStart(2, '0');\n\n return `${YYYY}-${MM}-${DD}T${hh}:${mm}:${ss}`;\n}\n\nexport function toDateTimePickerValue(apiValue: string): string {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.exec(apiValue)?.[0] ?? '';\n}\n\nexport function toDatePickerValue(apiValue: string): string {\n return /^\\d{4}-\\d{2}-\\d{2}/.exec(apiValue)?.[0] ?? '';\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { Column } from '../Table/types';
2
+ import { Data } from './types';
3
+ import { Table } from '../Table/Table';
4
+ declare const ReportsTable_base: typeof Table & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
5
+ defaultNS: string;
6
+ };
7
+ /**
8
+ * Configurable table element for 'fx:reports' collection.
9
+ *
10
+ * @element foxy-reports-table
11
+ * @since 1.16.0
12
+ */
13
+ export declare class ReportsTable extends ReportsTable_base<Data> {
14
+ static readonly nameColumn: Column<Data>;
15
+ static readonly startColumn: Column<Data>;
16
+ static readonly endColumn: Column<Data>;
17
+ static readonly createdOnColumn: Column<Data>;
18
+ static readonly linkColumn: Column<Data>;
19
+ columns: Column<import("@foxy.io/sdk/core").Resource<import("@foxy.io/sdk/dist/types/backend/Rels").Reports, undefined>>[];
20
+ }
21
+ export {};