@wordpress/dataviews 11.2.1-next.v.0 → 11.3.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/build/components/dataform-controls/combobox.cjs +80 -0
  3. package/build/components/dataform-controls/combobox.cjs.map +7 -0
  4. package/build/components/dataform-controls/date.cjs +35 -10
  5. package/build/components/dataform-controls/date.cjs.map +2 -2
  6. package/build/components/dataform-controls/index.cjs +2 -0
  7. package/build/components/dataform-controls/index.cjs.map +3 -3
  8. package/build/components/dataform-layouts/card/index.cjs +58 -3
  9. package/build/components/dataform-layouts/card/index.cjs.map +3 -3
  10. package/build/components/dataform-layouts/panel/dropdown.cjs +18 -8
  11. package/build/components/dataform-layouts/panel/dropdown.cjs.map +3 -3
  12. package/build/components/dataform-layouts/panel/index.cjs +5 -3
  13. package/build/components/dataform-layouts/panel/index.cjs.map +2 -2
  14. package/build/components/dataform-layouts/panel/modal.cjs +16 -10
  15. package/build/components/dataform-layouts/panel/modal.cjs.map +3 -3
  16. package/build/components/dataviews-bulk-actions/index.cjs +16 -18
  17. package/build/components/dataviews-bulk-actions/index.cjs.map +3 -3
  18. package/build/components/dataviews-item-actions/index.cjs +4 -1
  19. package/build/components/dataviews-item-actions/index.cjs.map +2 -2
  20. package/build/components/dataviews-layouts/activity/activity-item.cjs +6 -1
  21. package/build/components/dataviews-layouts/activity/activity-item.cjs.map +2 -2
  22. package/build/components/dataviews-layouts/table/column-header-menu.cjs +73 -66
  23. package/build/components/dataviews-layouts/table/column-header-menu.cjs.map +2 -2
  24. package/build/components/dataviews-layouts/table/index.cjs +3 -2
  25. package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
  26. package/build/components/dataviews-picker-footer/index.cjs +8 -15
  27. package/build/components/dataviews-picker-footer/index.cjs.map +3 -3
  28. package/build/field-types/index.cjs +2 -0
  29. package/build/field-types/index.cjs.map +3 -3
  30. package/build/field-types/utils/get-filter.cjs +36 -0
  31. package/build/field-types/utils/get-filter.cjs.map +7 -0
  32. package/build/hooks/use-report-validity.cjs +39 -0
  33. package/build/hooks/use-report-validity.cjs.map +7 -0
  34. package/build/types/field-api.cjs.map +1 -1
  35. package/build/utils/filter-sort-and-paginate.cjs +6 -174
  36. package/build/utils/filter-sort-and-paginate.cjs.map +2 -2
  37. package/build/utils/get-footer-message.cjs +49 -0
  38. package/build/utils/get-footer-message.cjs.map +7 -0
  39. package/build/utils/operators.cjs +203 -24
  40. package/build/utils/operators.cjs.map +2 -2
  41. package/build-module/components/dataform-controls/combobox.mjs +49 -0
  42. package/build-module/components/dataform-controls/combobox.mjs.map +7 -0
  43. package/build-module/components/dataform-controls/date.mjs +35 -10
  44. package/build-module/components/dataform-controls/date.mjs.map +2 -2
  45. package/build-module/components/dataform-controls/index.mjs +2 -0
  46. package/build-module/components/dataform-controls/index.mjs.map +2 -2
  47. package/build-module/components/dataform-layouts/card/index.mjs +59 -3
  48. package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
  49. package/build-module/components/dataform-layouts/panel/dropdown.mjs +20 -10
  50. package/build-module/components/dataform-layouts/panel/dropdown.mjs.map +2 -2
  51. package/build-module/components/dataform-layouts/panel/index.mjs +5 -3
  52. package/build-module/components/dataform-layouts/panel/index.mjs.map +2 -2
  53. package/build-module/components/dataform-layouts/panel/modal.mjs +18 -12
  54. package/build-module/components/dataform-layouts/panel/modal.mjs.map +2 -2
  55. package/build-module/components/dataviews-bulk-actions/index.mjs +17 -19
  56. package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
  57. package/build-module/components/dataviews-item-actions/index.mjs +4 -1
  58. package/build-module/components/dataviews-item-actions/index.mjs.map +2 -2
  59. package/build-module/components/dataviews-layouts/activity/activity-item.mjs +6 -1
  60. package/build-module/components/dataviews-layouts/activity/activity-item.mjs.map +2 -2
  61. package/build-module/components/dataviews-layouts/table/column-header-menu.mjs +74 -67
  62. package/build-module/components/dataviews-layouts/table/column-header-menu.mjs.map +2 -2
  63. package/build-module/components/dataviews-layouts/table/index.mjs +4 -3
  64. package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
  65. package/build-module/components/dataviews-picker-footer/index.mjs +8 -15
  66. package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
  67. package/build-module/field-types/index.mjs +2 -0
  68. package/build-module/field-types/index.mjs.map +2 -2
  69. package/build-module/field-types/utils/get-filter.mjs +15 -0
  70. package/build-module/field-types/utils/get-filter.mjs.map +7 -0
  71. package/build-module/hooks/use-report-validity.mjs +18 -0
  72. package/build-module/hooks/use-report-validity.mjs.map +7 -0
  73. package/build-module/utils/filter-sort-and-paginate.mjs +7 -198
  74. package/build-module/utils/filter-sort-and-paginate.mjs.map +2 -2
  75. package/build-module/utils/get-footer-message.mjs +28 -0
  76. package/build-module/utils/get-footer-message.mjs.map +7 -0
  77. package/build-module/utils/operators.mjs +203 -24
  78. package/build-module/utils/operators.mjs.map +2 -2
  79. package/build-style/style-rtl.css +15 -16
  80. package/build-style/style.css +15 -16
  81. package/build-types/components/dataform-controls/combobox.d.ts +6 -0
  82. package/build-types/components/dataform-controls/combobox.d.ts.map +1 -0
  83. package/build-types/components/dataform-controls/date.d.ts.map +1 -1
  84. package/build-types/components/dataform-controls/index.d.ts.map +1 -1
  85. package/build-types/components/dataform-layouts/card/index.d.ts +2 -0
  86. package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
  87. package/build-types/components/dataform-layouts/panel/dropdown.d.ts +3 -2
  88. package/build-types/components/dataform-layouts/panel/dropdown.d.ts.map +1 -1
  89. package/build-types/components/dataform-layouts/panel/index.d.ts.map +1 -1
  90. package/build-types/components/dataform-layouts/panel/modal.d.ts +3 -2
  91. package/build-types/components/dataform-layouts/panel/modal.d.ts.map +1 -1
  92. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  93. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  94. package/build-types/components/dataviews-layouts/activity/activity-item.d.ts.map +1 -1
  95. package/build-types/components/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  96. package/build-types/components/dataviews-layouts/table/index.d.ts.map +1 -1
  97. package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
  98. package/build-types/dataform/stories/content.story.d.ts +14 -0
  99. package/build-types/dataform/stories/content.story.d.ts.map +1 -0
  100. package/build-types/dataform/stories/index.story.d.ts +1 -1
  101. package/build-types/dataform/stories/index.story.d.ts.map +1 -1
  102. package/build-types/dataform/stories/validation.d.ts +1 -1
  103. package/build-types/dataform/stories/validation.d.ts.map +1 -1
  104. package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
  105. package/build-types/dataviews/stories/index.story.d.ts +4 -1
  106. package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
  107. package/build-types/dataviews/stories/layout-custom.d.ts +11 -0
  108. package/build-types/dataviews/stories/layout-custom.d.ts.map +1 -0
  109. package/build-types/dataviews-picker/stories/fixtures.d.ts.map +1 -1
  110. package/build-types/dataviews-picker/stories/index.story.d.ts +1 -1
  111. package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
  112. package/build-types/field-types/index.d.ts.map +1 -1
  113. package/build-types/field-types/stories/index.story.d.ts +1 -1
  114. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  115. package/build-types/field-types/utils/get-filter.d.ts +7 -0
  116. package/build-types/field-types/utils/get-filter.d.ts.map +1 -0
  117. package/build-types/hooks/use-report-validity.d.ts +14 -0
  118. package/build-types/hooks/use-report-validity.d.ts.map +1 -0
  119. package/build-types/types/field-api.d.ts +3 -0
  120. package/build-types/types/field-api.d.ts.map +1 -1
  121. package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -1
  122. package/build-types/utils/get-footer-message.d.ts +10 -0
  123. package/build-types/utils/get-footer-message.d.ts.map +1 -0
  124. package/build-types/utils/operators.d.ts +2 -1
  125. package/build-types/utils/operators.d.ts.map +1 -1
  126. package/build-wp/index.js +2730 -2179
  127. package/package.json +22 -20
  128. package/src/components/dataform-controls/combobox.tsx +58 -0
  129. package/src/components/dataform-controls/date.tsx +45 -10
  130. package/src/components/dataform-controls/index.tsx +2 -0
  131. package/src/components/dataform-layouts/card/index.tsx +81 -3
  132. package/src/components/dataform-layouts/panel/dropdown.tsx +26 -11
  133. package/src/components/dataform-layouts/panel/index.tsx +6 -4
  134. package/src/components/dataform-layouts/panel/modal.tsx +24 -12
  135. package/src/components/dataviews-bulk-actions/index.tsx +23 -20
  136. package/src/components/dataviews-bulk-actions/style.scss +0 -3
  137. package/src/components/dataviews-item-actions/index.tsx +6 -1
  138. package/src/components/dataviews-layouts/activity/activity-item.tsx +8 -1
  139. package/src/components/dataviews-layouts/table/column-header-menu.tsx +99 -73
  140. package/src/components/dataviews-layouts/table/index.tsx +12 -3
  141. package/src/components/dataviews-layouts/table/style.scss +14 -7
  142. package/src/components/dataviews-picker-footer/index.tsx +8 -18
  143. package/src/dataform/stories/content.story.mdx +159 -0
  144. package/src/dataform/stories/content.story.tsx +390 -0
  145. package/src/dataform/stories/index.story.tsx +8 -1
  146. package/src/dataform/stories/validation.tsx +98 -5
  147. package/src/dataviews/stories/best-practices.story.mdx +55 -0
  148. package/src/dataviews/stories/fixtures.tsx +1 -3
  149. package/src/dataviews/stories/index.story.tsx +6 -1
  150. package/src/dataviews/stories/layout-custom.tsx +140 -0
  151. package/src/dataviews/test/dataviews.tsx +66 -1
  152. package/src/dataviews-picker/stories/fixtures.tsx +1 -3
  153. package/src/dataviews-picker/stories/index.story.tsx +1 -1
  154. package/src/field-types/index.tsx +2 -0
  155. package/src/field-types/stories/index.story.tsx +2 -0
  156. package/src/field-types/utils/get-filter.ts +18 -0
  157. package/src/hooks/use-report-validity.ts +32 -0
  158. package/src/types/field-api.ts +11 -0
  159. package/src/utils/filter-sort-and-paginate.ts +11 -306
  160. package/src/utils/get-footer-message.ts +41 -0
  161. package/src/utils/operators.tsx +303 -31
@@ -0,0 +1,15 @@
1
+ // packages/dataviews/src/field-types/utils/get-filter.ts
2
+ import { getOperatorByName } from "../../utils/operators.mjs";
3
+ function getFilter(fieldType) {
4
+ return fieldType.validOperators.reduce((accumulator, operator) => {
5
+ const operatorObj = getOperatorByName(operator);
6
+ if (operatorObj?.filter) {
7
+ accumulator[operator] = operatorObj.filter;
8
+ }
9
+ return accumulator;
10
+ }, {});
11
+ }
12
+ export {
13
+ getFilter as default
14
+ };
15
+ //# sourceMappingURL=get-filter.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/field-types/utils/get-filter.ts"],
4
+ "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { FilterOperatorMap } from '../../types';\nimport type { FieldType } from '../../types/private';\nimport { getOperatorByName } from '../../utils/operators';\n\nexport default function getFilter< Item >(\n\tfieldType: FieldType< Item >\n): FilterOperatorMap< Item > {\n\treturn fieldType.validOperators.reduce( ( accumulator, operator ) => {\n\t\tconst operatorObj = getOperatorByName( operator );\n\t\tif ( operatorObj?.filter ) {\n\t\t\taccumulator[ operator ] = operatorObj.filter;\n\t\t}\n\t\treturn accumulator;\n\t}, {} as FilterOperatorMap< Item > );\n}\n"],
5
+ "mappings": ";AAKA,SAAS,yBAAyB;AAEnB,SAAR,UACN,WAC4B;AAC5B,SAAO,UAAU,eAAe,OAAQ,CAAE,aAAa,aAAc;AACpE,UAAM,cAAc,kBAAmB,QAAS;AAChD,QAAK,aAAa,QAAS;AAC1B,kBAAa,QAAS,IAAI,YAAY;AAAA,IACvC;AACA,WAAO;AAAA,EACR,GAAG,CAAC,CAA+B;AACpC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ // packages/dataviews/src/hooks/use-report-validity.ts
2
+ import { useEffect } from "@wordpress/element";
3
+ function useReportValidity(ref, shouldReport) {
4
+ useEffect(() => {
5
+ if (shouldReport && ref.current) {
6
+ const inputs = ref.current.querySelectorAll(
7
+ "input, textarea, select"
8
+ );
9
+ inputs.forEach((input) => {
10
+ input.reportValidity();
11
+ });
12
+ }
13
+ }, [shouldReport, ref]);
14
+ }
15
+ export {
16
+ useReportValidity as default
17
+ };
18
+ //# sourceMappingURL=use-report-validity.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hooks/use-report-validity.ts"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Triggers `reportValidity()` on all form inputs within a container element.\n * This fires the browser's `invalid` event on each input, which validated\n * controls listen to in order to display their error states.\n *\n * Used by panel and card layouts to show validation errors\n * immediately when their content becomes visible after prior interaction.\n *\n * @param ref A ref to the container element.\n * @param shouldReport Whether to trigger reportValidity. Typically\n * derived from `touched` state and open/visible state.\n */\nexport default function useReportValidity(\n\tref: React.RefObject< HTMLElement | null >,\n\tshouldReport: boolean\n) {\n\tuseEffect( () => {\n\t\tif ( shouldReport && ref.current ) {\n\t\t\tconst inputs = ref.current.querySelectorAll(\n\t\t\t\t'input, textarea, select'\n\t\t\t);\n\t\t\tinputs.forEach( ( input ) => {\n\t\t\t\t( input as HTMLInputElement ).reportValidity();\n\t\t\t} );\n\t\t}\n\t}, [ shouldReport, ref ] );\n}\n"],
5
+ "mappings": ";AAGA,SAAS,iBAAiB;AAcX,SAAR,kBACN,KACA,cACC;AACD,YAAW,MAAM;AAChB,QAAK,gBAAgB,IAAI,SAAU;AAClC,YAAM,SAAS,IAAI,QAAQ;AAAA,QAC1B;AAAA,MACD;AACA,aAAO,QAAS,CAAE,UAAW;AAC5B,QAAE,MAA4B,eAAe;AAAA,MAC9C,CAAE;AAAA,IACH;AAAA,EACD,GAAG,CAAE,cAAc,GAAI,CAAE;AAC1B;",
6
+ "names": []
7
+ }
@@ -1,51 +1,12 @@
1
1
  // packages/dataviews/src/utils/filter-sort-and-paginate.ts
2
2
  import removeAccents from "remove-accents";
3
- import { subDays, subWeeks, subMonths, subYears } from "date-fns";
4
3
  import deprecated from "@wordpress/deprecated";
5
- import { getDate } from "@wordpress/date";
6
- import {
7
- OPERATOR_IS,
8
- OPERATOR_IS_NOT,
9
- OPERATOR_IS_NONE,
10
- OPERATOR_IS_ANY,
11
- OPERATOR_IS_ALL,
12
- OPERATOR_IS_NOT_ALL,
13
- OPERATOR_LESS_THAN,
14
- OPERATOR_GREATER_THAN,
15
- OPERATOR_LESS_THAN_OR_EQUAL,
16
- OPERATOR_GREATER_THAN_OR_EQUAL,
17
- OPERATOR_BEFORE,
18
- OPERATOR_AFTER,
19
- OPERATOR_BEFORE_INC,
20
- OPERATOR_AFTER_INC,
21
- OPERATOR_CONTAINS,
22
- OPERATOR_NOT_CONTAINS,
23
- OPERATOR_STARTS_WITH,
24
- OPERATOR_BETWEEN,
25
- OPERATOR_ON,
26
- OPERATOR_NOT_ON,
27
- OPERATOR_IN_THE_PAST,
28
- OPERATOR_OVER
29
- } from "../constants.mjs";
4
+ import { OPERATOR_IS_NOT_ALL } from "../constants.mjs";
30
5
  import normalizeFields from "../field-types/index.mjs";
31
6
  function normalizeSearchInput(input = "") {
32
7
  return removeAccents(input.trim().toLowerCase());
33
8
  }
34
9
  var EMPTY_ARRAY = [];
35
- function getRelativeDate(value, unit) {
36
- switch (unit) {
37
- case "days":
38
- return subDays(/* @__PURE__ */ new Date(), value);
39
- case "weeks":
40
- return subWeeks(/* @__PURE__ */ new Date(), value);
41
- case "months":
42
- return subMonths(/* @__PURE__ */ new Date(), value);
43
- case "years":
44
- return subYears(/* @__PURE__ */ new Date(), value);
45
- default:
46
- return /* @__PURE__ */ new Date();
47
- }
48
- }
49
10
  function filterSortAndPaginate(data, view, fields) {
50
11
  if (!data) {
51
12
  return {
@@ -75,169 +36,17 @@ function filterSortAndPaginate(data, view, fields) {
75
36
  (_field) => _field.id === filter.field
76
37
  );
77
38
  if (field) {
78
- if (filter.operator === OPERATOR_IS_ANY && filter?.value?.length > 0) {
79
- filteredData = filteredData.filter((item) => {
80
- const fieldValue = field.getValue({ item });
81
- if (Array.isArray(fieldValue)) {
82
- return filter.value.some(
83
- (filterValue) => fieldValue.includes(filterValue)
84
- );
85
- } else if (typeof fieldValue === "string") {
86
- return filter.value.includes(fieldValue);
87
- }
88
- return false;
89
- });
90
- } else if (filter.operator === OPERATOR_IS_NONE && filter?.value?.length > 0) {
91
- filteredData = filteredData.filter((item) => {
92
- const fieldValue = field.getValue({ item });
93
- if (Array.isArray(fieldValue)) {
94
- return !filter.value.some(
95
- (filterValue) => fieldValue.includes(filterValue)
96
- );
97
- } else if (typeof fieldValue === "string") {
98
- return !filter.value.includes(fieldValue);
99
- }
100
- return false;
101
- });
102
- } else if (filter.operator === OPERATOR_IS_ALL && filter?.value?.length > 0) {
103
- filteredData = filteredData.filter((item) => {
104
- return filter.value.every((value) => {
105
- return field.getValue({ item })?.includes(value);
106
- });
107
- });
108
- } else if (filter.operator === OPERATOR_IS_NOT_ALL && filter?.value?.length > 0) {
39
+ if (filter.operator === OPERATOR_IS_NOT_ALL) {
109
40
  deprecated("The 'isNotAll' filter operator", {
110
41
  since: "7.0",
111
42
  alternative: "'isNone'"
112
43
  });
113
- filteredData = filteredData.filter((item) => {
114
- return filter.value.every((value) => {
115
- return !field.getValue({ item })?.includes(value);
116
- });
117
- });
118
- } else if (filter.operator === OPERATOR_IS) {
119
- filteredData = filteredData.filter((item) => {
120
- return filter.value === field.getValue({ item }) || filter.value === void 0;
121
- });
122
- } else if (filter.operator === OPERATOR_IS_NOT) {
123
- filteredData = filteredData.filter((item) => {
124
- return filter.value !== field.getValue({ item });
125
- });
126
- } else if (filter.operator === OPERATOR_ON && filter.value !== void 0) {
127
- const filterDate = getDate(filter.value);
128
- filteredData = filteredData.filter((item) => {
129
- const fieldDate = getDate(field.getValue({ item }));
130
- return filterDate.getTime() === fieldDate.getTime();
131
- });
132
- } else if (filter.operator === OPERATOR_NOT_ON && filter.value !== void 0) {
133
- const filterDate = getDate(filter.value);
134
- filteredData = filteredData.filter((item) => {
135
- const fieldDate = getDate(field.getValue({ item }));
136
- return filterDate.getTime() !== fieldDate.getTime();
137
- });
138
- } else if (filter.operator === OPERATOR_LESS_THAN && filter.value !== void 0) {
139
- filteredData = filteredData.filter((item) => {
140
- const fieldValue = field.getValue({ item });
141
- return fieldValue < filter.value;
142
- });
143
- } else if (filter.operator === OPERATOR_GREATER_THAN && filter.value !== void 0) {
144
- filteredData = filteredData.filter((item) => {
145
- const fieldValue = field.getValue({ item });
146
- return fieldValue > filter.value;
147
- });
148
- } else if (filter.operator === OPERATOR_LESS_THAN_OR_EQUAL && filter.value !== void 0) {
149
- filteredData = filteredData.filter((item) => {
150
- const fieldValue = field.getValue({ item });
151
- return fieldValue <= filter.value;
152
- });
153
- } else if (filter.operator === OPERATOR_GREATER_THAN_OR_EQUAL && filter.value !== void 0) {
154
- filteredData = filteredData.filter((item) => {
155
- const fieldValue = field.getValue({ item });
156
- return fieldValue >= filter.value;
157
- });
158
- } else if (filter.operator === OPERATOR_CONTAINS && filter?.value !== void 0) {
159
- filteredData = filteredData.filter((item) => {
160
- const fieldValue = field.getValue({ item });
161
- return typeof fieldValue === "string" && filter.value && fieldValue.toLowerCase().includes(
162
- String(filter.value).toLowerCase()
163
- );
164
- });
165
- } else if (filter.operator === OPERATOR_NOT_CONTAINS && filter?.value !== void 0) {
166
- filteredData = filteredData.filter((item) => {
167
- const fieldValue = field.getValue({ item });
168
- return typeof fieldValue === "string" && filter.value && !fieldValue.toLowerCase().includes(
169
- String(filter.value).toLowerCase()
170
- );
171
- });
172
- } else if (filter.operator === OPERATOR_STARTS_WITH && filter?.value !== void 0) {
173
- filteredData = filteredData.filter((item) => {
174
- const fieldValue = field.getValue({ item });
175
- return typeof fieldValue === "string" && filter.value && fieldValue.toLowerCase().startsWith(
176
- String(filter.value).toLowerCase()
177
- );
178
- });
179
- } else if (filter.operator === OPERATOR_BEFORE && filter.value !== void 0) {
180
- const filterValue = getDate(filter.value);
181
- filteredData = filteredData.filter((item) => {
182
- const fieldValue = getDate(
183
- field.getValue({ item })
184
- );
185
- return fieldValue < filterValue;
186
- });
187
- } else if (filter.operator === OPERATOR_AFTER && filter.value !== void 0) {
188
- const filterValue = getDate(filter.value);
189
- filteredData = filteredData.filter((item) => {
190
- const fieldValue = getDate(
191
- field.getValue({ item })
192
- );
193
- return fieldValue > filterValue;
194
- });
195
- } else if (filter.operator === OPERATOR_BEFORE_INC && filter.value !== void 0) {
196
- const filterValue = getDate(filter.value);
197
- filteredData = filteredData.filter((item) => {
198
- const fieldValue = getDate(
199
- field.getValue({ item })
200
- );
201
- return fieldValue <= filterValue;
202
- });
203
- } else if (filter.operator === OPERATOR_AFTER_INC && filter.value !== void 0) {
204
- const filterValue = getDate(filter.value);
205
- filteredData = filteredData.filter((item) => {
206
- const fieldValue = getDate(
207
- field.getValue({ item })
208
- );
209
- return fieldValue >= filterValue;
210
- });
211
- } else if (filter.operator === OPERATOR_BETWEEN && Array.isArray(filter.value) && filter.value.length === 2 && filter.value[0] !== void 0 && filter.value[1] !== void 0) {
212
- filteredData = filteredData.filter((item) => {
213
- const fieldValue = field.getValue({ item });
214
- if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") {
215
- return fieldValue >= filter.value[0] && fieldValue <= filter.value[1];
216
- }
217
- return false;
218
- });
219
- } else if (filter.operator === OPERATOR_IN_THE_PAST && filter.value?.value !== void 0 && filter.value?.unit !== void 0) {
220
- const targetDate = getRelativeDate(
221
- filter.value.value,
222
- filter.value.unit
223
- );
224
- filteredData = filteredData.filter((item) => {
225
- const fieldValue = getDate(
226
- field.getValue({ item })
227
- );
228
- return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date();
229
- });
230
- } else if (filter.operator === OPERATOR_OVER && filter.value?.value !== void 0 && filter.value?.unit !== void 0) {
231
- const targetDate = getRelativeDate(
232
- filter.value.value,
233
- filter.value.unit
44
+ }
45
+ const handler = field.filter[filter.operator];
46
+ if (handler) {
47
+ filteredData = filteredData.filter(
48
+ (item) => handler(item, field, filter.value)
234
49
  );
235
- filteredData = filteredData.filter((item) => {
236
- const fieldValue = getDate(
237
- field.getValue({ item })
238
- );
239
- return fieldValue < targetDate;
240
- });
241
50
  }
242
51
  }
243
52
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/filter-sort-and-paginate.ts"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\nimport { subDays, subWeeks, subMonths, subYears } from 'date-fns';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport { getDate } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport {\n\tOPERATOR_IS,\n\tOPERATOR_IS_NOT,\n\tOPERATOR_IS_NONE,\n\tOPERATOR_IS_ANY,\n\tOPERATOR_IS_ALL,\n\tOPERATOR_IS_NOT_ALL,\n\tOPERATOR_LESS_THAN,\n\tOPERATOR_GREATER_THAN,\n\tOPERATOR_LESS_THAN_OR_EQUAL,\n\tOPERATOR_GREATER_THAN_OR_EQUAL,\n\tOPERATOR_BEFORE,\n\tOPERATOR_AFTER,\n\tOPERATOR_BEFORE_INC,\n\tOPERATOR_AFTER_INC,\n\tOPERATOR_CONTAINS,\n\tOPERATOR_NOT_CONTAINS,\n\tOPERATOR_STARTS_WITH,\n\tOPERATOR_BETWEEN,\n\tOPERATOR_ON,\n\tOPERATOR_NOT_ON,\n\tOPERATOR_IN_THE_PAST,\n\tOPERATOR_OVER,\n} from '../constants';\nimport normalizeFields from '../field-types';\nimport type { Field, View } from '../types';\n\nfunction normalizeSearchInput( input = '' ) {\n\treturn removeAccents( input.trim().toLowerCase() );\n}\n\nconst EMPTY_ARRAY: [] = [];\n\n/**\n * Calculates a date offset from now.\n *\n * @param value Number of units to offset.\n * @param unit Unit of time to offset.\n * @return Date offset from now.\n */\nfunction getRelativeDate( value: number, unit: string ): Date {\n\tswitch ( unit ) {\n\t\tcase 'days':\n\t\t\treturn subDays( new Date(), value );\n\t\tcase 'weeks':\n\t\t\treturn subWeeks( new Date(), value );\n\t\tcase 'months':\n\t\t\treturn subMonths( new Date(), value );\n\t\tcase 'years':\n\t\t\treturn subYears( new Date(), value );\n\t\tdefault:\n\t\t\treturn new Date();\n\t}\n}\n\n/**\n * Applies the filtering, sorting and pagination to the raw data based on the view configuration.\n *\n * @param data Raw data.\n * @param view View config.\n * @param fields Fields config.\n *\n * @return Filtered, sorted and paginated data.\n */\nexport default function filterSortAndPaginate< Item >(\n\tdata: Item[],\n\tview: View,\n\tfields: Field< Item >[]\n): {\n\tdata: Item[];\n\tpaginationInfo: { totalItems: number; totalPages: number };\n} {\n\tif ( ! data ) {\n\t\treturn {\n\t\t\tdata: EMPTY_ARRAY,\n\t\t\tpaginationInfo: { totalItems: 0, totalPages: 0 },\n\t\t};\n\t}\n\tconst _fields = normalizeFields( fields );\n\tlet filteredData = [ ...data ];\n\t// Handle global search.\n\tif ( view.search ) {\n\t\tconst normalizedSearch = normalizeSearchInput( view.search );\n\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\treturn _fields\n\t\t\t\t.filter( ( field ) => field.enableGlobalSearch )\n\t\t\t\t.some( ( field ) => {\n\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\tconst values = Array.isArray( fieldValue )\n\t\t\t\t\t\t? fieldValue\n\t\t\t\t\t\t: [ fieldValue ];\n\t\t\t\t\treturn values.some( ( value ) =>\n\t\t\t\t\t\tnormalizeSearchInput( String( value ) ).includes(\n\t\t\t\t\t\t\tnormalizedSearch\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t} );\n\t}\n\n\tif ( view.filters && view.filters?.length > 0 ) {\n\t\tview.filters.forEach( ( filter ) => {\n\t\t\tconst field = _fields.find(\n\t\t\t\t( _field ) => _field.id === filter.field\n\t\t\t);\n\t\t\tif ( field ) {\n\t\t\t\tif (\n\t\t\t\t\tfilter.operator === OPERATOR_IS_ANY &&\n\t\t\t\t\tfilter?.value?.length > 0\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\tif ( Array.isArray( fieldValue ) ) {\n\t\t\t\t\t\t\treturn filter.value.some( ( filterValue: any ) =>\n\t\t\t\t\t\t\t\tfieldValue.includes( filterValue )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if ( typeof fieldValue === 'string' ) {\n\t\t\t\t\t\t\treturn filter.value.includes( fieldValue );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_IS_NONE &&\n\t\t\t\t\tfilter?.value?.length > 0\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\tif ( Array.isArray( fieldValue ) ) {\n\t\t\t\t\t\t\treturn ! filter.value.some( ( filterValue: any ) =>\n\t\t\t\t\t\t\t\tfieldValue.includes( filterValue )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if ( typeof fieldValue === 'string' ) {\n\t\t\t\t\t\t\treturn ! filter.value.includes( fieldValue );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_IS_ALL &&\n\t\t\t\t\tfilter?.value?.length > 0\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\treturn filter.value.every( ( value: any ) => {\n\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t.getValue( { item } )\n\t\t\t\t\t\t\t\t?.includes( value );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_IS_NOT_ALL &&\n\t\t\t\t\tfilter?.value?.length > 0\n\t\t\t\t) {\n\t\t\t\t\tdeprecated( \"The 'isNotAll' filter operator\", {\n\t\t\t\t\t\tsince: '7.0',\n\t\t\t\t\t\talternative: \"'isNone'\",\n\t\t\t\t\t} );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\treturn filter.value.every( ( value: any ) => {\n\t\t\t\t\t\t\treturn ! field\n\t\t\t\t\t\t\t\t.getValue( { item } )\n\t\t\t\t\t\t\t\t?.includes( value );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t} else if ( filter.operator === OPERATOR_IS ) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tfilter.value === field.getValue( { item } ) ||\n\t\t\t\t\t\t\tfilter.value === undefined\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} else if ( filter.operator === OPERATOR_IS_NOT ) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\treturn filter.value !== field.getValue( { item } );\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_ON &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterDate = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldDate = getDate( field.getValue( { item } ) );\n\t\t\t\t\t\treturn filterDate.getTime() === fieldDate.getTime();\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_NOT_ON &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterDate = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldDate = getDate( field.getValue( { item } ) );\n\t\t\t\t\t\treturn filterDate.getTime() !== fieldDate.getTime();\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_LESS_THAN &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn fieldValue < filter.value;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_GREATER_THAN &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn fieldValue > filter.value;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_LESS_THAN_OR_EQUAL &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn fieldValue <= filter.value;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_GREATER_THAN_OR_EQUAL &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn fieldValue >= filter.value;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_CONTAINS &&\n\t\t\t\t\tfilter?.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\ttypeof fieldValue === 'string' &&\n\t\t\t\t\t\t\tfilter.value &&\n\t\t\t\t\t\t\tfieldValue\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(\n\t\t\t\t\t\t\t\t\tString( filter.value ).toLowerCase()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_NOT_CONTAINS &&\n\t\t\t\t\tfilter?.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\ttypeof fieldValue === 'string' &&\n\t\t\t\t\t\t\tfilter.value &&\n\t\t\t\t\t\t\t! fieldValue\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(\n\t\t\t\t\t\t\t\t\tString( filter.value ).toLowerCase()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_STARTS_WITH &&\n\t\t\t\t\tfilter?.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\ttypeof fieldValue === 'string' &&\n\t\t\t\t\t\t\tfilter.value &&\n\t\t\t\t\t\t\tfieldValue\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.startsWith(\n\t\t\t\t\t\t\t\t\tString( filter.value ).toLowerCase()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_BEFORE &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterValue = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn fieldValue < filterValue;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_AFTER &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterValue = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn fieldValue > filterValue;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_BEFORE_INC &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterValue = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn fieldValue <= filterValue;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_AFTER_INC &&\n\t\t\t\t\tfilter.value !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst filterValue = getDate( filter.value );\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn fieldValue >= filterValue;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_BETWEEN &&\n\t\t\t\t\tArray.isArray( filter.value ) &&\n\t\t\t\t\tfilter.value.length === 2 &&\n\t\t\t\t\tfilter.value[ 0 ] !== undefined &&\n\t\t\t\t\tfilter.value[ 1 ] !== undefined\n\t\t\t\t) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof fieldValue === 'number' ||\n\t\t\t\t\t\t\tfieldValue instanceof Date ||\n\t\t\t\t\t\t\ttypeof fieldValue === 'string'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tfieldValue >= filter.value[ 0 ] &&\n\t\t\t\t\t\t\t\tfieldValue <= filter.value[ 1 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_IN_THE_PAST &&\n\t\t\t\t\tfilter.value?.value !== undefined &&\n\t\t\t\t\tfilter.value?.unit !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst targetDate = getRelativeDate(\n\t\t\t\t\t\tfilter.value.value,\n\t\t\t\t\t\tfilter.value.unit\n\t\t\t\t\t);\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tfieldValue >= targetDate && fieldValue <= new Date()\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} else if (\n\t\t\t\t\tfilter.operator === OPERATOR_OVER &&\n\t\t\t\t\tfilter.value?.value !== undefined &&\n\t\t\t\t\tfilter.value?.unit !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst targetDate = getRelativeDate(\n\t\t\t\t\t\tfilter.value.value,\n\t\t\t\t\t\tfilter.value.unit\n\t\t\t\t\t);\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\t\t\t\tconst fieldValue = getDate(\n\t\t\t\t\t\t\tfield.getValue( { item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn fieldValue < targetDate;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t// Handle sorting.\n\tconst sortByField = view.sort?.field\n\t\t? _fields.find( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\tfield.enableSorting !== false &&\n\t\t\t\t\tfield.id === view.sort?.field\n\t\t\t\t);\n\t\t } )\n\t\t: null;\n\tconst groupByField = view.groupBy?.field\n\t\t? _fields.find( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\tfield.enableSorting !== false &&\n\t\t\t\t\tfield.id === view.groupBy?.field\n\t\t\t\t);\n\t\t } )\n\t\t: null;\n\tif ( sortByField || groupByField ) {\n\t\tfilteredData.sort( ( a, b ) => {\n\t\t\tif ( groupByField ) {\n\t\t\t\tconst groupCompare = groupByField.sort(\n\t\t\t\t\ta,\n\t\t\t\t\tb,\n\t\t\t\t\tview.groupBy?.direction ?? 'asc'\n\t\t\t\t);\n\n\t\t\t\t// If items are in different groups, return the group comparison result.\n\t\t\t\t// Otherwise, fall back to sorting by the sort field.\n\t\t\t\tif ( groupCompare !== 0 ) {\n\t\t\t\t\treturn groupCompare;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( sortByField ) {\n\t\t\t\treturn sortByField.sort( a, b, view.sort?.direction ?? 'desc' );\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t} );\n\t}\n\n\t// Handle pagination.\n\tlet totalItems = filteredData.length;\n\tlet totalPages = 1;\n\tif ( view.page !== undefined && view.perPage !== undefined ) {\n\t\tconst start = ( view.page - 1 ) * view.perPage;\n\t\ttotalItems = filteredData?.length || 0;\n\t\ttotalPages = Math.ceil( totalItems / view.perPage );\n\t\tfilteredData = filteredData?.slice( start, start + view.perPage );\n\t}\n\n\treturn {\n\t\tdata: filteredData,\n\t\tpaginationInfo: {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t},\n\t};\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { OPERATOR_IS_NOT_ALL } from '../constants';\nimport normalizeFields from '../field-types';\nimport type { Field, Operator, View } from '../types';\n\nfunction normalizeSearchInput( input = '' ) {\n\treturn removeAccents( input.trim().toLowerCase() );\n}\n\nconst EMPTY_ARRAY: [] = [];\n\n/**\n * Applies the filtering, sorting and pagination to the raw data based on the view configuration.\n *\n * @param data Raw data.\n * @param view View config.\n * @param fields Fields config.\n *\n * @return Filtered, sorted and paginated data.\n */\nexport default function filterSortAndPaginate< Item >(\n\tdata: Item[],\n\tview: View,\n\tfields: Field< Item >[]\n): {\n\tdata: Item[];\n\tpaginationInfo: { totalItems: number; totalPages: number };\n} {\n\tif ( ! data ) {\n\t\treturn {\n\t\t\tdata: EMPTY_ARRAY,\n\t\t\tpaginationInfo: { totalItems: 0, totalPages: 0 },\n\t\t};\n\t}\n\tconst _fields = normalizeFields( fields );\n\tlet filteredData = [ ...data ];\n\t// Handle global search.\n\tif ( view.search ) {\n\t\tconst normalizedSearch = normalizeSearchInput( view.search );\n\t\tfilteredData = filteredData.filter( ( item ) => {\n\t\t\treturn _fields\n\t\t\t\t.filter( ( field ) => field.enableGlobalSearch )\n\t\t\t\t.some( ( field ) => {\n\t\t\t\t\tconst fieldValue = field.getValue( { item } );\n\t\t\t\t\tconst values = Array.isArray( fieldValue )\n\t\t\t\t\t\t? fieldValue\n\t\t\t\t\t\t: [ fieldValue ];\n\t\t\t\t\treturn values.some( ( value ) =>\n\t\t\t\t\t\tnormalizeSearchInput( String( value ) ).includes(\n\t\t\t\t\t\t\tnormalizedSearch\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t} );\n\t}\n\n\tif ( view.filters && view.filters?.length > 0 ) {\n\t\tview.filters.forEach( ( filter ) => {\n\t\t\tconst field = _fields.find(\n\t\t\t\t( _field ) => _field.id === filter.field\n\t\t\t);\n\t\t\tif ( field ) {\n\t\t\t\t// Show deprecation warning for `isNotAll` operator.\n\t\t\t\t// We still handle this by mapping it to `isNone` in `getFilter`.\n\t\t\t\tif ( filter.operator === OPERATOR_IS_NOT_ALL ) {\n\t\t\t\t\tdeprecated( \"The 'isNotAll' filter operator\", {\n\t\t\t\t\t\tsince: '7.0',\n\t\t\t\t\t\talternative: \"'isNone'\",\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst handler = field.filter[ filter.operator as Operator ];\n\t\t\t\tif ( handler ) {\n\t\t\t\t\tfilteredData = filteredData.filter( ( item ) =>\n\t\t\t\t\t\thandler( item, field, filter.value )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t// Handle sorting.\n\tconst sortByField = view.sort?.field\n\t\t? _fields.find( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\tfield.enableSorting !== false &&\n\t\t\t\t\tfield.id === view.sort?.field\n\t\t\t\t);\n\t\t } )\n\t\t: null;\n\tconst groupByField = view.groupBy?.field\n\t\t? _fields.find( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\tfield.enableSorting !== false &&\n\t\t\t\t\tfield.id === view.groupBy?.field\n\t\t\t\t);\n\t\t } )\n\t\t: null;\n\tif ( sortByField || groupByField ) {\n\t\tfilteredData.sort( ( a, b ) => {\n\t\t\tif ( groupByField ) {\n\t\t\t\tconst groupCompare = groupByField.sort(\n\t\t\t\t\ta,\n\t\t\t\t\tb,\n\t\t\t\t\tview.groupBy?.direction ?? 'asc'\n\t\t\t\t);\n\n\t\t\t\t// If items are in different groups, return the group comparison result.\n\t\t\t\t// Otherwise, fall back to sorting by the sort field.\n\t\t\t\tif ( groupCompare !== 0 ) {\n\t\t\t\t\treturn groupCompare;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( sortByField ) {\n\t\t\t\treturn sortByField.sort( a, b, view.sort?.direction ?? 'desc' );\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t} );\n\t}\n\n\t// Handle pagination.\n\tlet totalItems = filteredData.length;\n\tlet totalPages = 1;\n\tif ( view.page !== undefined && view.perPage !== undefined ) {\n\t\tconst start = ( view.page - 1 ) * view.perPage;\n\t\ttotalItems = filteredData?.length || 0;\n\t\ttotalPages = Math.ceil( totalItems / view.perPage );\n\t\tfilteredData = filteredData?.slice( start, start + view.perPage );\n\t}\n\n\treturn {\n\t\tdata: filteredData,\n\t\tpaginationInfo: {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t},\n\t};\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,28 @@
1
+ // packages/dataviews/src/utils/get-footer-message.ts
2
+ import { _n, sprintf } from "@wordpress/i18n";
3
+ function getFooterMessage(selectionCount, itemsCount, totalItems) {
4
+ if (selectionCount > 0) {
5
+ return sprintf(
6
+ /* translators: %d: number of items. */
7
+ _n("%d Item selected", "%d Items selected", selectionCount),
8
+ selectionCount
9
+ );
10
+ }
11
+ if (totalItems > itemsCount) {
12
+ return sprintf(
13
+ /* translators: %1$d: number of items. %2$d: total number of items. */
14
+ _n("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems),
15
+ itemsCount,
16
+ totalItems
17
+ );
18
+ }
19
+ return sprintf(
20
+ /* translators: %d: number of items. */
21
+ _n("%d Item", "%d Items", itemsCount),
22
+ itemsCount
23
+ );
24
+ }
25
+ export {
26
+ getFooterMessage as default
27
+ };
28
+ //# sourceMappingURL=get-footer-message.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/get-footer-message.ts"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Get the footer message for the DataViews footer.\n *\n * @param selectionCount - The number of items selected.\n * @param itemsCount - The number of items in the current page.\n * @param totalItems - The total number of items.\n * @return - The footer message.\n */\nexport default function getFooterMessage(\n\tselectionCount: number,\n\titemsCount: number,\n\ttotalItems: number\n): string {\n\tif ( selectionCount > 0 ) {\n\t\treturn sprintf(\n\t\t\t/* translators: %d: number of items. */\n\t\t\t_n( '%d Item selected', '%d Items selected', selectionCount ),\n\t\t\tselectionCount\n\t\t);\n\t}\n\n\tif ( totalItems > itemsCount ) {\n\t\treturn sprintf(\n\t\t\t/* translators: %1$d: number of items. %2$d: total number of items. */\n\t\t\t_n( '%1$d of %2$d Item', '%1$d of %2$d Items', totalItems ),\n\t\t\titemsCount,\n\t\t\ttotalItems\n\t\t);\n\t}\n\n\treturn sprintf(\n\t\t/* translators: %d: number of items. */\n\t\t_n( '%d Item', '%d Items', itemsCount ),\n\t\titemsCount\n\t);\n}\n"],
5
+ "mappings": ";AAGA,SAAS,IAAI,eAAe;AAUb,SAAR,iBACN,gBACA,YACA,YACS;AACT,MAAK,iBAAiB,GAAI;AACzB,WAAO;AAAA;AAAA,MAEN,GAAI,oBAAoB,qBAAqB,cAAe;AAAA,MAC5D;AAAA,IACD;AAAA,EACD;AAEA,MAAK,aAAa,YAAa;AAC9B,WAAO;AAAA;AAAA,MAEN,GAAI,qBAAqB,sBAAsB,UAAW;AAAA,MAC1D;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA;AAAA,IAEN,GAAI,WAAW,YAAY,UAAW;AAAA,IACtC;AAAA,EACD;AACD;",
6
+ "names": []
7
+ }