@wordpress/dataviews 10.3.1-next.2f1c7c01b.0 → 10.4.1-next.dc3f6d3c1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -5
- package/README.md +413 -148
- package/build/components/dataviews-filters/filter.js +11 -1
- package/build/components/dataviews-filters/filter.js.map +2 -2
- package/build/components/dataviews-view-config/index.js +11 -396
- package/build/components/dataviews-view-config/index.js.map +3 -3
- package/build/components/dataviews-view-config/properties-section.js +177 -0
- package/build/components/dataviews-view-config/properties-section.js.map +7 -0
- package/build/constants.js +3 -0
- package/build/constants.js.map +2 -2
- package/build/dataform-controls/date.js +23 -7
- package/build/dataform-controls/date.js.map +2 -2
- package/build/dataform-controls/email.js +1 -1
- package/build/dataform-controls/email.js.map +1 -1
- package/build/dataform-layouts/details/index.js +78 -0
- package/build/dataform-layouts/details/index.js.map +7 -0
- package/build/dataform-layouts/index.js +5 -0
- package/build/dataform-layouts/index.js.map +3 -3
- package/build/dataform-layouts/normalize-form.js +5 -0
- package/build/dataform-layouts/normalize-form.js.map +2 -2
- package/build/dataviews-layouts/index.js +9 -0
- package/build/dataviews-layouts/index.js.map +3 -3
- package/build/dataviews-layouts/picker-table/index.js +422 -0
- package/build/dataviews-layouts/picker-table/index.js.map +7 -0
- package/build/dataviews-layouts/table/column-header-menu.js.map +2 -2
- package/build/dataviews-layouts/table/column-primary.js +1 -6
- package/build/dataviews-layouts/table/column-primary.js.map +2 -2
- package/build/dataviews-layouts/table/index.js +47 -2
- package/build/dataviews-layouts/table/index.js.map +2 -2
- package/build/field-types/date.js +4 -2
- package/build/field-types/date.js.map +2 -2
- package/build/types/dataform.js.map +1 -1
- package/build/types/dataviews.js.map +1 -1
- package/build/types/field-api.js.map +1 -1
- package/build/utils/normalize-fields.js +23 -3
- package/build/utils/normalize-fields.js.map +2 -2
- package/build/utils/week-starts-on.js +59 -0
- package/build/utils/week-starts-on.js.map +7 -0
- package/build-module/components/dataviews-filters/filter.js +11 -1
- package/build-module/components/dataviews-filters/filter.js.map +2 -2
- package/build-module/components/dataviews-view-config/index.js +15 -412
- package/build-module/components/dataviews-view-config/index.js.map +2 -2
- package/build-module/components/dataviews-view-config/properties-section.js +149 -0
- package/build-module/components/dataviews-view-config/properties-section.js.map +7 -0
- package/build-module/constants.js +2 -0
- package/build-module/constants.js.map +2 -2
- package/build-module/dataform-controls/date.js +23 -7
- package/build-module/dataform-controls/date.js.map +2 -2
- package/build-module/dataform-controls/email.js +2 -2
- package/build-module/dataform-controls/email.js.map +1 -1
- package/build-module/dataform-layouts/details/index.js +47 -0
- package/build-module/dataform-layouts/details/index.js.map +7 -0
- package/build-module/dataform-layouts/index.js +5 -0
- package/build-module/dataform-layouts/index.js.map +2 -2
- package/build-module/dataform-layouts/normalize-form.js +5 -0
- package/build-module/dataform-layouts/normalize-form.js.map +2 -2
- package/build-module/dataviews-layouts/index.js +11 -1
- package/build-module/dataviews-layouts/index.js.map +2 -2
- package/build-module/dataviews-layouts/picker-table/index.js +397 -0
- package/build-module/dataviews-layouts/picker-table/index.js.map +7 -0
- package/build-module/dataviews-layouts/table/column-header-menu.js.map +2 -2
- package/build-module/dataviews-layouts/table/column-primary.js +1 -6
- package/build-module/dataviews-layouts/table/column-primary.js.map +2 -2
- package/build-module/dataviews-layouts/table/index.js +48 -3
- package/build-module/dataviews-layouts/table/index.js.map +2 -2
- package/build-module/field-types/date.js +5 -3
- package/build-module/field-types/date.js.map +2 -2
- package/build-module/utils/normalize-fields.js +23 -3
- package/build-module/utils/normalize-fields.js.map +2 -2
- package/build-module/utils/week-starts-on.js +32 -0
- package/build-module/utils/week-starts-on.js.map +7 -0
- package/build-style/style-rtl.css +58 -54
- package/build-style/style.css +58 -54
- package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/utils.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/properties-section.d.ts +4 -0
- package/build-types/components/dataviews-view-config/properties-section.d.ts.map +1 -0
- package/build-types/constants.d.ts +1 -0
- package/build-types/constants.d.ts.map +1 -1
- package/build-types/dataform-controls/date.d.ts.map +1 -1
- package/build-types/dataform-layouts/details/index.d.ts +6 -0
- package/build-types/dataform-layouts/details/index.d.ts.map +1 -0
- package/build-types/dataform-layouts/get-summary-fields.d.ts.map +1 -1
- package/build-types/dataform-layouts/index.d.ts +5 -0
- package/build-types/dataform-layouts/index.d.ts.map +1 -1
- package/build-types/dataform-layouts/normalize-form.d.ts.map +1 -1
- package/build-types/dataviews-layouts/index.d.ts +8 -0
- package/build-types/dataviews-layouts/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/picker-table/index.d.ts +4 -0
- package/build-types/dataviews-layouts/picker-table/index.d.ts.map +1 -0
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts +3 -3
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/field-types/date.d.ts.map +1 -1
- package/build-types/stories/dataform.story.d.ts +3 -0
- package/build-types/stories/dataform.story.d.ts.map +1 -1
- package/build-types/stories/dataviews-picker.story.d.ts +2 -0
- package/build-types/stories/dataviews-picker.story.d.ts.map +1 -1
- package/build-types/stories/dataviews.story.d.ts +7 -1
- package/build-types/stories/dataviews.story.d.ts.map +1 -1
- package/build-types/stories/field-types.story.d.ts +27 -1
- package/build-types/stories/field-types.story.d.ts.map +1 -1
- package/build-types/types/dataform.d.ts +11 -3
- package/build-types/types/dataform.d.ts.map +1 -1
- package/build-types/types/dataviews.d.ts +23 -2
- package/build-types/types/dataviews.d.ts.map +1 -1
- package/build-types/types/field-api.d.ts +28 -1
- package/build-types/types/field-api.d.ts.map +1 -1
- package/build-types/utils/normalize-fields.d.ts.map +1 -1
- package/build-types/utils/week-starts-on.d.ts +20 -0
- package/build-types/utils/week-starts-on.d.ts.map +1 -0
- package/build-wp/index.js +1497 -1188
- package/package.json +15 -15
- package/src/components/dataviews/style.scss +2 -0
- package/src/components/dataviews-filters/filter.tsx +11 -1
- package/src/components/dataviews-footer/style.scss +1 -1
- package/src/components/dataviews-view-config/index.tsx +8 -504
- package/src/components/dataviews-view-config/properties-section.tsx +201 -0
- package/src/components/dataviews-view-config/style.scss +2 -39
- package/src/constants.ts +1 -0
- package/src/dataform-controls/date.tsx +24 -6
- package/src/dataform-controls/email.tsx +2 -2
- package/src/dataform-layouts/details/index.tsx +71 -0
- package/src/dataform-layouts/details/style.scss +5 -0
- package/src/dataform-layouts/index.tsx +5 -0
- package/src/dataform-layouts/normalize-form.ts +6 -0
- package/src/dataviews-layouts/index.ts +10 -0
- package/src/dataviews-layouts/list/style.scss +1 -0
- package/src/dataviews-layouts/picker-table/index.tsx +487 -0
- package/src/dataviews-layouts/picker-table/style.scss +47 -0
- package/src/dataviews-layouts/table/column-header-menu.tsx +3 -2
- package/src/dataviews-layouts/table/column-primary.tsx +4 -7
- package/src/dataviews-layouts/table/index.tsx +55 -2
- package/src/dataviews-layouts/table/style.scss +36 -19
- package/src/field-types/date.tsx +11 -5
- package/src/stories/dataform.story.tsx +84 -0
- package/src/stories/dataviews-picker.story.tsx +11 -6
- package/src/stories/dataviews.story.tsx +10 -2
- package/src/stories/field-types.story.tsx +67 -2
- package/src/style.scss +2 -0
- package/src/test/normalize-fields.ts +53 -0
- package/src/types/dataform.ts +18 -3
- package/src/types/dataviews.ts +36 -2
- package/src/types/field-api.ts +42 -1
- package/src/utils/normalize-fields.ts +51 -2
- package/src/utils/week-starts-on.ts +46 -0
- package/tsconfig.tsbuildinfo +1 -1
package/src/types/field-api.ts
CHANGED
|
@@ -308,9 +308,36 @@ export type Field< Item > = {
|
|
|
308
308
|
* Used for editing operations to update field values.
|
|
309
309
|
*/
|
|
310
310
|
setValue?: ( args: { item: Item; value: any } ) => DeepPartial< Item >;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Display format configuration for fields.
|
|
314
|
+
*/
|
|
315
|
+
format?: FormatDate;
|
|
311
316
|
};
|
|
312
317
|
|
|
313
|
-
|
|
318
|
+
/**
|
|
319
|
+
* Format for date fields:
|
|
320
|
+
*
|
|
321
|
+
* - date: the format string (e.g., 'F j, Y' for WordPress default format like 'March 10, 2023')
|
|
322
|
+
* - weekStartsOn: to specify the first day of the week ('sunday', 'monday', etc.).
|
|
323
|
+
*
|
|
324
|
+
* If not provided, defaults to WordPress date format settings.
|
|
325
|
+
*/
|
|
326
|
+
type FormatDate = {
|
|
327
|
+
date?: string;
|
|
328
|
+
weekStartsOn?: DayString;
|
|
329
|
+
};
|
|
330
|
+
export type DayNumber = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
331
|
+
export type DayString =
|
|
332
|
+
| 'sunday'
|
|
333
|
+
| 'monday'
|
|
334
|
+
| 'tuesday'
|
|
335
|
+
| 'wednesday'
|
|
336
|
+
| 'thursday'
|
|
337
|
+
| 'friday'
|
|
338
|
+
| 'saturday';
|
|
339
|
+
|
|
340
|
+
type NormalizedFieldBase< Item > = Omit< Field< Item >, 'Edit' > & {
|
|
314
341
|
label: string;
|
|
315
342
|
header: string | ReactElement;
|
|
316
343
|
getValue: ( args: { item: Item } ) => any;
|
|
@@ -326,6 +353,20 @@ export type NormalizedField< Item > = Omit< Field< Item >, 'Edit' > & {
|
|
|
326
353
|
readOnly: boolean;
|
|
327
354
|
};
|
|
328
355
|
|
|
356
|
+
type NormalizedFieldDate< Item > = NormalizedFieldBase< Item > & {
|
|
357
|
+
type: 'date';
|
|
358
|
+
format: Required< FormatDate >;
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
type NormalizedFieldGeneric< Item > = NormalizedFieldBase< Item > & {
|
|
362
|
+
type?: Exclude< FieldType, 'date' >;
|
|
363
|
+
format: {};
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
export type NormalizedField< Item > =
|
|
367
|
+
| NormalizedFieldGeneric< Item >
|
|
368
|
+
| NormalizedFieldDate< Item >;
|
|
369
|
+
|
|
329
370
|
/**
|
|
330
371
|
* A collection of dataview fields for a data type.
|
|
331
372
|
*/
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { FunctionComponent } from 'react';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { getSettings } from '@wordpress/date';
|
|
10
|
+
|
|
6
11
|
/**
|
|
7
12
|
* Internal dependencies
|
|
8
13
|
*/
|
|
9
14
|
import getFieldTypeDefinition from '../field-types';
|
|
10
15
|
import type {
|
|
16
|
+
DayString,
|
|
11
17
|
DataViewRenderFieldProps,
|
|
12
18
|
Field,
|
|
13
19
|
FieldTypeDefinition,
|
|
@@ -21,6 +27,7 @@ import {
|
|
|
21
27
|
SINGLE_SELECTION_OPERATORS,
|
|
22
28
|
} from '../constants';
|
|
23
29
|
import hasElements from './has-elements';
|
|
30
|
+
import { numberToWeekStartsOn, DAYS_OF_WEEK } from './week-starts-on';
|
|
24
31
|
|
|
25
32
|
const getValueFromId =
|
|
26
33
|
( id: string ) =>
|
|
@@ -182,8 +189,22 @@ export default function normalizeFields< Item >(
|
|
|
182
189
|
|
|
183
190
|
const filterBy = getFilterBy( field, fieldTypeDefinition );
|
|
184
191
|
|
|
185
|
-
|
|
186
|
-
|
|
192
|
+
/**
|
|
193
|
+
* NormalizedField is a discriminated union type: the shape of the format property
|
|
194
|
+
* depends on the type property. For example, for the 'date' type, the format
|
|
195
|
+
* contains date or weekStartsOn — which are not valid for other types.
|
|
196
|
+
*
|
|
197
|
+
* Being type and format interdependent, we need to write the code
|
|
198
|
+
* in a way that TypeScript is able to statically infer the types.
|
|
199
|
+
* That's why we have a return branch for every item in the union type.
|
|
200
|
+
*
|
|
201
|
+
* See a longer explanation with examples at
|
|
202
|
+
* https://github.com/WordPress/gutenberg/pull/72999#discussion_r2523145453
|
|
203
|
+
*/
|
|
204
|
+
const { type, ...fieldWithoutType } = field;
|
|
205
|
+
|
|
206
|
+
const baseField = {
|
|
207
|
+
...fieldWithoutType,
|
|
187
208
|
label: field.label || field.id,
|
|
188
209
|
header: field.header || field.label || field.id,
|
|
189
210
|
getValue,
|
|
@@ -200,6 +221,34 @@ export default function normalizeFields< Item >(
|
|
|
200
221
|
true,
|
|
201
222
|
filterBy,
|
|
202
223
|
readOnly: field.readOnly ?? fieldTypeDefinition.readOnly ?? false,
|
|
224
|
+
format: {},
|
|
203
225
|
};
|
|
226
|
+
|
|
227
|
+
if ( field.type === 'date' ) {
|
|
228
|
+
const format = {
|
|
229
|
+
date:
|
|
230
|
+
field.format?.date !== undefined &&
|
|
231
|
+
typeof field.format.date === 'string'
|
|
232
|
+
? field.format.date
|
|
233
|
+
: getSettings().formats.date,
|
|
234
|
+
weekStartsOn:
|
|
235
|
+
field.format?.weekStartsOn !== undefined &&
|
|
236
|
+
DAYS_OF_WEEK.includes(
|
|
237
|
+
field.format?.weekStartsOn as DayString
|
|
238
|
+
)
|
|
239
|
+
? field.format.weekStartsOn
|
|
240
|
+
: numberToWeekStartsOn(
|
|
241
|
+
getSettings().l10n.startOfWeek
|
|
242
|
+
),
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
...baseField,
|
|
247
|
+
type: 'date',
|
|
248
|
+
format,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return { ...baseField, type: field.type, format: {} };
|
|
204
253
|
} );
|
|
205
254
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { DayNumber, DayString } from '../types/field-api';
|
|
5
|
+
|
|
6
|
+
export const DAYS_OF_WEEK: DayString[] = [
|
|
7
|
+
'sunday',
|
|
8
|
+
'monday',
|
|
9
|
+
'tuesday',
|
|
10
|
+
'wednesday',
|
|
11
|
+
'thursday',
|
|
12
|
+
'friday',
|
|
13
|
+
'saturday',
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_DAY_STRING = 'sunday';
|
|
16
|
+
const DEFAULT_DAY_NUMBER = 0;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Converts a weekStartsOn string to a number (0-6).
|
|
20
|
+
*
|
|
21
|
+
* @param day - The day name ('sunday', 'monday', etc.)
|
|
22
|
+
* @return The corresponding number (0 for Sunday, 1 for Monday, etc.)
|
|
23
|
+
*/
|
|
24
|
+
export function weekStartsOnToNumber( day: DayString ): DayNumber {
|
|
25
|
+
const index = DAYS_OF_WEEK.indexOf( day );
|
|
26
|
+
if ( index === -1 ) {
|
|
27
|
+
return DEFAULT_DAY_NUMBER;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return index as DayNumber;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Converts a weekStartsOn number (0-6) to a string.
|
|
35
|
+
*
|
|
36
|
+
* @param day - The day number (0 for Sunday, 1 for Monday, etc.)
|
|
37
|
+
* @return The corresponding day name ('sunday', 'monday', etc.)
|
|
38
|
+
*/
|
|
39
|
+
export function numberToWeekStartsOn( day: DayNumber ): DayString {
|
|
40
|
+
const result = DAYS_OF_WEEK[ day ];
|
|
41
|
+
if ( result === undefined ) {
|
|
42
|
+
return DEFAULT_DAY_STRING;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return result;
|
|
46
|
+
}
|