@box/metadata-filter 2.1.8 → 2.2.1

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 (29) hide show
  1. package/dist/chunks/metadata-filter.js +15 -13
  2. package/dist/chunks/metadata-taxonomy-field-advanced.module.js +6 -0
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/lib/components/metadata-filter-fields/components/index.js +1 -1
  5. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field-advanced.js +89 -0
  6. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field.js +46 -0
  7. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field-advanced.js +11 -2
  8. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field.js +10 -45
  9. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/metadata-taxonomy-picker-field-advanced.js +84 -0
  10. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/metadata-taxonomy-picker-field.js +46 -0
  11. package/dist/esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/value-mapping.js +32 -0
  12. package/dist/esm/lib/components/metadata-filter-fields/filter-field-types.js +1 -1
  13. package/dist/esm/lib/components/metadata-filter-fields/metadata-filter-fields-accordion.js +15 -13
  14. package/dist/esm/lib/components/metadata-filter-fields/metadata-filter-fields.js +16 -14
  15. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field-advanced.d.ts +3 -0
  16. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field.d.ts +3 -0
  17. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field-advanced.d.ts +9 -1
  18. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field.d.ts +9 -1
  19. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/metadata-taxonomy-picker-field-advanced.d.ts +16 -0
  20. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/metadata-taxonomy-picker-field.d.ts +14 -0
  21. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/picker/value-mapping.d.ts +33 -0
  22. package/dist/types/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/types.d.ts +13 -0
  23. package/dist/types/lib/components/metadata-filter-fields/metadata-filter-fields-accordion.d.ts +1 -1
  24. package/dist/types/lib/components/metadata-filter-fields/metadata-filter-fields.d.ts +1 -1
  25. package/dist/types/lib/components/metadata-filter-fields/types.d.ts +9 -1
  26. package/dist/types/lib/metadata-filter.d.ts +1 -1
  27. package/dist/types/lib/types.d.ts +5 -1
  28. package/package.json +9 -7
  29. package/dist/chunks/metadata-taxonomy-field-advanced.js +0 -92
@@ -12,35 +12,37 @@ import { jsx as u, jsxs as d } from "react/jsx-runtime";
12
12
  import '../styles/metadata-filter.css';var f = {
13
13
  container: "_container_p63iy_1",
14
14
  loadingIndicator: "_loadingIndicator_p63iy_7"
15
- }, p = ({ isAdvancedFilterEnabled: p, isModifiedMarkerEnabled: m, metadataTemplateOptions: h, portalElement: g, selectedMetadataTemplate: _, taxonomyOptionsFetcher: v, showMetadataSelector: y = !0, disableForm: b = !1, isLoading: x = !1, hasError: S = !1, locale: C = navigator.language, canUseRelativeDates: w, isMultilevelTaxonomyFieldEnabled: T = !1, filterOptionsMap: E, onAdvancedFilterOptionChange: D, fieldAdvancedFilterOptions: O, hasAccordion: k = !1, onDirtyChange: A, isAdvancedTaxonomy: j = !1, hasExperimentalVirtualization: M = !1 }) => {
16
- let { setFieldValue: N } = s(), P = l();
15
+ }, p = ({ isAdvancedFilterEnabled: p, isModifiedMarkerEnabled: m, metadataTemplateOptions: h, portalElement: g, selectedMetadataTemplate: _, taxonomyOptionsFetcher: v, showMetadataSelector: y = !0, disableForm: b = !1, isLoading: x = !1, hasError: S = !1, locale: C = navigator.language, canUseRelativeDates: w, isMultilevelTaxonomyFieldEnabled: T = !1, isTaxonomyPickerEnabled: E = !1, createTaxonomyItemsService: D, filterOptionsMap: O, onAdvancedFilterOptionChange: k, fieldAdvancedFilterOptions: A, hasAccordion: j = !1, onDirtyChange: M, isAdvancedTaxonomy: N = !1, hasExperimentalVirtualization: P = !1 }) => {
16
+ let { setFieldValue: F } = s(), I = l();
17
17
  return c(() => {
18
- _ ? N("metadata", a(_)) : N("metadata", e);
19
- }, [_, N]), /* @__PURE__ */ d("div", {
18
+ _ ? F("metadata", a(_)) : F("metadata", e);
19
+ }, [_, F]), /* @__PURE__ */ d("div", {
20
20
  className: f.container,
21
21
  children: [y && /* @__PURE__ */ u(i, {
22
22
  hasError: S,
23
23
  metadataTemplateOptions: h,
24
24
  portalElement: g
25
25
  }), !S && (x ? /* @__PURE__ */ u(o, {
26
- "aria-label": P.formatMessage(t.loading),
26
+ "aria-label": I.formatMessage(t.loading),
27
27
  className: f.loadingIndicator
28
- }) : _ ? /* @__PURE__ */ u(k ? r : n, {
28
+ }) : _ ? /* @__PURE__ */ u(j ? r : n, {
29
29
  canUseRelativeDates: w,
30
30
  disableForm: b,
31
- fieldAdvancedFilterOptions: O,
32
- filterOptionsMap: E,
33
- hasAccordion: k,
31
+ fieldAdvancedFilterOptions: A,
32
+ filterOptionsMap: O,
33
+ hasAccordion: j,
34
34
  isAdvancedFilterEnabled: p,
35
- isAdvancedTaxonomy: j,
35
+ isAdvancedTaxonomy: N,
36
36
  isModifiedMarkerEnabled: m,
37
37
  isMultilevelTaxonomyFieldEnabled: T,
38
+ isTaxonomyPickerEnabled: E,
39
+ createTaxonomyItemsService: D,
38
40
  locale: C,
39
- onAdvancedFilterOptionChange: D,
40
- onDirtyChange: A,
41
+ onAdvancedFilterOptionChange: k,
42
+ onDirtyChange: M,
41
43
  portalElement: g,
42
44
  taxonomyOptionsFetcher: v,
43
- hasExperimentalVirtualization: M
45
+ hasExperimentalVirtualization: P
44
46
  }) : null)]
45
47
  });
46
48
  };
@@ -0,0 +1,6 @@
1
+ import '../styles/metadata-taxonomy-field-advanced.css';var e = {
2
+ comboboxWrapper: "_comboboxWrapper_1e1d8_1",
3
+ disabled: "_disabled_1e1d8_1",
4
+ disabledTreeView: "_disabledTreeView_1e1d8_5"
5
+ };
6
+ export { e as t };
package/dist/esm/index.js CHANGED
@@ -7,7 +7,7 @@ import { MetadataFloatField as c } from "./lib/components/metadata-filter-fields
7
7
  import { MetadataMultiSelectField as l } from "./lib/components/metadata-filter-fields/components/metadata-multi-select-field/metadata-multi-select-field.js";
8
8
  import { MetadataStringField as u } from "./lib/components/metadata-filter-fields/components/metadata-string-field/metadata-string-field.js";
9
9
  import { MetadataTaxonomyField as d } from "./lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field.js";
10
- import { t as f } from "../chunks/metadata-taxonomy-field-advanced.js";
10
+ import { MetadataTaxonomyFieldAdvanced as f } from "./lib/components/metadata-filter-fields/components/metadata-taxonomy-field/metadata-taxonomy-field-advanced.js";
11
11
  import { t as p } from "../chunks/metadata-filter.js";
12
12
  import "./lib/components/metadata-filter-fields/components/index.js";
13
13
  export * from "@box/combobox-with-api";
@@ -4,5 +4,5 @@ import { MetadataFloatField as r } from "./metadata-float-field/metadata-float-f
4
4
  import { MetadataMultiSelectField as i } from "./metadata-multi-select-field/metadata-multi-select-field.js";
5
5
  import { MetadataStringField as a } from "./metadata-string-field/metadata-string-field.js";
6
6
  import { MetadataTaxonomyField as o } from "./metadata-taxonomy-field/metadata-taxonomy-field.js";
7
- import { t as s } from "../../../../../chunks/metadata-taxonomy-field-advanced.js";
7
+ import { MetadataTaxonomyFieldAdvanced as s } from "./metadata-taxonomy-field/metadata-taxonomy-field-advanced.js";
8
8
  export { e as MetadataDateField, t as MetadataDateFieldNonRelative, n as MetadataEnumField, r as MetadataFloatField, i as MetadataMultiSelectField, a as MetadataStringField, o as MetadataTaxonomyField, s as MetadataTaxonomyFieldAdvanced };
@@ -0,0 +1,89 @@
1
+ import e from "../../../../messages.js";
2
+ import { t } from "../../../../../../chunks/advanced-filter-select.js";
3
+ import { t as n } from "../../../../../../chunks/metadata-taxonomy-field-advanced.module.js";
4
+ import { createFieldValue as r, getInitialAdvancedFilterValue as i, getInputValue as a, isBlankOption as o } from "./utils.js";
5
+ import { ComboboxWithApiPagination as s, ComboboxWithApiTreeView as c } from "@box/combobox-with-api";
6
+ import { Field as l, getIn as u, useFormikContext as d } from "formik";
7
+ import { useCallback as f, useState as p } from "react";
8
+ import { useIntl as m } from "react-intl";
9
+ import h from "clsx";
10
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
+ var y = ({ className: y, disableForm: b, fieldNamePrefix: x, label: S, portalElement: C, taxonomyOptionsFetcher: w, isMultilevelTaxonomyFieldEnabled: T, hasAccordion: E, isAdvancedFilterEnabled: D, onAdvancedFilterOptionChange: O, fieldAdvancedFilterOptions: k, filterOptionsMap: A, isModified: j }) => {
12
+ let { setFieldValue: M, values: N } = d(), { metadata: { templateKey: P, scope: F } } = N, I = m(), L = `${x}.value`, { key: R, optionsRules: z, levels: B } = u(N, x), V = z?.selectableLevels, H = T && V?.some((e) => e > 1), [U, W] = p(i(k, A)), [G, K] = p(!1), q = f((e) => w ? w(F, P, R, V?.[0] ?? 0, e) : Promise.resolve({ options: [] }), [
13
+ R,
14
+ F,
15
+ V,
16
+ w,
17
+ P
18
+ ]), J = f((t) => t?.length === 0 ? I.formatMessage(e.multiselectPlaceholder) : "", [I]), Y = f((e, t, n) => {
19
+ W(e), O?.(L, e);
20
+ let i = r(o(e) ? [] : t, e, D);
21
+ n.setFieldValue(L, i);
22
+ }, [
23
+ L,
24
+ D,
25
+ O
26
+ ]), X = f((e) => {
27
+ e && K(!1);
28
+ }, []), Z = f((e) => {
29
+ M(L, r(e, U, D));
30
+ }, [
31
+ U,
32
+ L,
33
+ D,
34
+ M
35
+ ]);
36
+ return /* @__PURE__ */ _("div", {
37
+ "data-testid": `${S}-field`,
38
+ children: /* @__PURE__ */ _(l, {
39
+ name: L,
40
+ children: ({ field: e, form: r }) => {
41
+ let i = a(e.value, D);
42
+ return /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(t, {
43
+ disableForm: b ?? !1,
44
+ fieldAdvancedFilterOptions: k,
45
+ fieldNamePrefix: x,
46
+ filterOptionsMap: A,
47
+ isModified: j,
48
+ label: S,
49
+ onAdvancedFilterOptionChange: O,
50
+ onOpenChange: K,
51
+ onValueChange: (e) => Y(e, i, r),
52
+ open: G,
53
+ portalElement: C,
54
+ showLabel: !E,
55
+ value: U
56
+ }), !o(U) && /* @__PURE__ */ _("div", {
57
+ className: h(n.comboboxWrapper, b && n.disabled),
58
+ children: H ? /* @__PURE__ */ _(c, {
59
+ className: h(y, b && n.disabledTreeView),
60
+ defaultFetcher: q,
61
+ disabled: b,
62
+ hideLabel: !0,
63
+ label: S,
64
+ levels: B,
65
+ multiselect: !0,
66
+ onOpenChange: X,
67
+ onValueChange: Z,
68
+ placeholder: J(i),
69
+ portalElement: C,
70
+ selectableLevels: V,
71
+ value: i
72
+ }) : /* @__PURE__ */ _(s, {
73
+ className: y,
74
+ defaultFetcher: q,
75
+ disabled: b,
76
+ label: void 0,
77
+ multiselect: !0,
78
+ onOpenChange: X,
79
+ onValueChange: Z,
80
+ placeholder: J(i),
81
+ portalElement: C,
82
+ value: i
83
+ })
84
+ })] });
85
+ }
86
+ })
87
+ });
88
+ };
89
+ export { y as LegacyMetadataTaxonomyFieldAdvanced, y as default };
@@ -0,0 +1,46 @@
1
+ import e from "../../../../messages.js";
2
+ import { ComboboxWithApiPagination as t, ComboboxWithApiTreeView as n } from "@box/combobox-with-api";
3
+ import { Field as r, getIn as i, useFormikContext as a } from "formik";
4
+ import { useCallback as o } from "react";
5
+ import { useIntl as s } from "react-intl";
6
+ import { jsx as c } from "react/jsx-runtime";
7
+ var l = ({ className: l, disableForm: u, fieldNamePrefix: d, label: f, portalElement: p, taxonomyOptionsFetcher: m, isMultilevelTaxonomyFieldEnabled: h, hasAccordion: g }) => {
8
+ let { setFieldValue: _, values: v } = a(), { metadata: { templateKey: y, scope: b } } = v, x = s(), S = `${d}.value`, { key: C, optionsRules: { multiSelect: w, selectableLevels: T }, levels: E } = i(v, d), D = h && T?.some((e) => e > 1), O = o((e) => m(b, y, C, T?.[0], e), [
9
+ C,
10
+ b,
11
+ T,
12
+ m,
13
+ y
14
+ ]), k = o((t) => w || !t?.length ? x.formatMessage(e.taxonomyPlaceholder) : void 0, [w, x]), A = o((e) => _(S, e), [_, S]);
15
+ return /* @__PURE__ */ c("div", {
16
+ "data-testid": `${f}-field`,
17
+ children: /* @__PURE__ */ c(r, {
18
+ name: S,
19
+ children: ({ field: e }) => D ? /* @__PURE__ */ c(n, {
20
+ className: l,
21
+ defaultFetcher: O,
22
+ disabled: u,
23
+ hideLabel: g,
24
+ label: f,
25
+ levels: E,
26
+ multiselect: w,
27
+ onValueChange: A,
28
+ placeholder: k(e.value),
29
+ portalElement: p,
30
+ selectableLevels: T,
31
+ value: e.value
32
+ }) : /* @__PURE__ */ c(t, {
33
+ className: l,
34
+ defaultFetcher: O,
35
+ disabled: u,
36
+ label: g ? void 0 : f,
37
+ multiselect: w,
38
+ onValueChange: A,
39
+ placeholder: k(e.value),
40
+ portalElement: p,
41
+ value: e.value
42
+ })
43
+ })
44
+ });
45
+ };
46
+ export { l as LegacyMetadataTaxonomyField, l as default };
@@ -1,2 +1,11 @@
1
- import { t as e } from "../../../../../../chunks/metadata-taxonomy-field-advanced.js";
2
- export { e as MetadataTaxonomyFieldAdvanced, e as default };
1
+ import { LegacyMetadataTaxonomyFieldAdvanced as e } from "./legacy-metadata-taxonomy-field-advanced.js";
2
+ import { MetadataTaxonomyPickerFieldAdvanced as t } from "./picker/metadata-taxonomy-picker-field-advanced.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ var r = (r) => {
5
+ let { isTaxonomyPickerEnabled: i, createTaxonomyItemsService: a } = r;
6
+ return i && a ? /* @__PURE__ */ n(t, {
7
+ ...r,
8
+ createTaxonomyItemsService: a
9
+ }) : (i && process.env.NODE_ENV !== "production" && console.error("[metadata-filter] isTaxonomyPickerEnabled is true but createTaxonomyItemsService was not provided; falling back to the legacy taxonomy field."), /* @__PURE__ */ n(e, { ...r }));
10
+ };
11
+ export { r as MetadataTaxonomyFieldAdvanced, r as default };
@@ -1,46 +1,11 @@
1
- import e from "../../../../messages.js";
2
- import { ComboboxWithApiPagination as t, ComboboxWithApiTreeView as n } from "@box/combobox-with-api";
3
- import { Field as r, getIn as i, useFormikContext as a } from "formik";
4
- import { useCallback as o } from "react";
5
- import { useIntl as s } from "react-intl";
6
- import { jsx as c } from "react/jsx-runtime";
7
- var l = ({ className: l, disableForm: u, fieldNamePrefix: d, label: f, portalElement: p, taxonomyOptionsFetcher: m, isMultilevelTaxonomyFieldEnabled: h, hasAccordion: g }) => {
8
- let { setFieldValue: _, values: v } = a(), { metadata: { templateKey: y, scope: b } } = v, x = s(), S = `${d}.value`, { key: C, optionsRules: { multiSelect: w, selectableLevels: T }, levels: E } = i(v, d), D = h && T?.some((e) => e > 1), O = o((e) => m(b, y, C, T?.[0], e), [
9
- C,
10
- b,
11
- T,
12
- m,
13
- y
14
- ]), k = o((t) => w || !t?.length ? x.formatMessage(e.taxonomyPlaceholder) : void 0, [w, x]), A = o((e) => _(S, e), [_, S]);
15
- return /* @__PURE__ */ c("div", {
16
- "data-testid": `${f}-field`,
17
- children: /* @__PURE__ */ c(r, {
18
- name: S,
19
- children: ({ field: e }) => D ? /* @__PURE__ */ c(n, {
20
- className: l,
21
- defaultFetcher: O,
22
- disabled: u,
23
- hideLabel: g,
24
- label: f,
25
- levels: E,
26
- multiselect: w,
27
- onValueChange: A,
28
- placeholder: k(e.value),
29
- portalElement: p,
30
- selectableLevels: T,
31
- value: e.value
32
- }) : /* @__PURE__ */ c(t, {
33
- className: l,
34
- defaultFetcher: O,
35
- disabled: u,
36
- label: g ? void 0 : f,
37
- multiselect: w,
38
- onValueChange: A,
39
- placeholder: k(e.value),
40
- portalElement: p,
41
- value: e.value
42
- })
43
- })
44
- });
1
+ import { LegacyMetadataTaxonomyField as e } from "./legacy-metadata-taxonomy-field.js";
2
+ import { MetadataTaxonomyPickerField as t } from "./picker/metadata-taxonomy-picker-field.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ var r = (r) => {
5
+ let { isTaxonomyPickerEnabled: i, createTaxonomyItemsService: a } = r;
6
+ return i && a ? /* @__PURE__ */ n(t, {
7
+ ...r,
8
+ createTaxonomyItemsService: a
9
+ }) : (i && process.env.NODE_ENV !== "production" && console.error("[metadata-filter] isTaxonomyPickerEnabled is true but createTaxonomyItemsService was not provided; falling back to the legacy taxonomy field."), /* @__PURE__ */ n(e, { ...r }));
45
10
  };
46
- export { l as MetadataTaxonomyField, l as default };
11
+ export { r as MetadataTaxonomyField, r as default };
@@ -0,0 +1,84 @@
1
+ import e from "../../../../../messages.js";
2
+ import { t } from "../../../../../../../chunks/advanced-filter-select.js";
3
+ import { getTaxonomyPickerMode as n, mapFormValueToTaxonomyValues as r, mapLevelsToTaxonomyLevels as i, mapTaxonomyValuesToFormValue as a } from "./value-mapping.js";
4
+ import { t as o } from "../../../../../../../chunks/metadata-taxonomy-field-advanced.module.js";
5
+ import { createFieldValue as s, getInitialAdvancedFilterValue as c, getInputValue as l, isBlankOption as u } from "../utils.js";
6
+ import { Field as d, getIn as f, useFormikContext as p } from "formik";
7
+ import { useCallback as m, useMemo as h, useRef as g, useState as _ } from "react";
8
+ import { useIntl as v } from "react-intl";
9
+ import ee from "clsx";
10
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
11
+ import { MetadataTaxonomyPicker as S } from "@box/metadata-taxonomy-picker";
12
+ var C = ({ className: C, disableForm: w, fieldNamePrefix: T, label: E, portalElement: D, isMultilevelTaxonomyFieldEnabled: O, hasAccordion: k, isAdvancedFilterEnabled: A, onAdvancedFilterOptionChange: j, fieldAdvancedFilterOptions: M, filterOptionsMap: N, isModified: P, createTaxonomyItemsService: F }) => {
13
+ let { setFieldValue: I, values: L } = p(), { metadata: { templateKey: R, scope: z } } = L, B = v(), V = `${T}.value`, { key: H, optionsRules: U, levels: W } = f(L, T), G = U?.selectableLevels, K = n(O, G), [q, J] = _(c(M, N)), [Y, X] = _(!1), Z = g([]), Q = h(() => F({
14
+ scope: z,
15
+ templateKey: R,
16
+ fieldKey: H
17
+ }), [
18
+ F,
19
+ z,
20
+ R,
21
+ H
22
+ ]), $ = h(() => i(W, G), [W, G]), te = m((t) => t.length === 0 ? B.formatMessage(e.multiselectPlaceholder) : "", [B]), ne = m((e, t, n) => {
23
+ J(e), j?.(V, e);
24
+ let r = [];
25
+ u(e) || (r = t.length ? t : Z.current);
26
+ let i = s(r, e, A);
27
+ n.setFieldValue(V, i);
28
+ }, [
29
+ V,
30
+ A,
31
+ j
32
+ ]), re = h(() => ({ onOpenChange: (e) => {
33
+ e && X(!1);
34
+ } }), []), ie = m((e) => {
35
+ let t = a(e, K);
36
+ Z.current = t, I(V, s(t, q, A));
37
+ }, [
38
+ q,
39
+ V,
40
+ A,
41
+ K,
42
+ I
43
+ ]);
44
+ return /* @__PURE__ */ b("div", {
45
+ "data-testid": `${E}-field`,
46
+ children: /* @__PURE__ */ b(d, {
47
+ name: V,
48
+ children: ({ field: e, form: n }) => {
49
+ let i = l(e.value, A), a = r(i);
50
+ return /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(t, {
51
+ disableForm: w ?? !1,
52
+ fieldAdvancedFilterOptions: M,
53
+ fieldNamePrefix: T,
54
+ filterOptionsMap: N,
55
+ isModified: P,
56
+ label: E,
57
+ onAdvancedFilterOptionChange: j,
58
+ onOpenChange: X,
59
+ onValueChange: (e) => ne(e, i, n),
60
+ open: Y,
61
+ portalElement: D,
62
+ showLabel: !k,
63
+ value: q
64
+ }), !u(q) && /* @__PURE__ */ b("div", {
65
+ className: ee(o.comboboxWrapper, w && o.disabled),
66
+ children: /* @__PURE__ */ b(S, {
67
+ containerClassName: C,
68
+ disabled: w,
69
+ eventService: re,
70
+ itemsService: Q,
71
+ levels: $,
72
+ mode: K,
73
+ multiSelect: !0,
74
+ onValueChange: ie,
75
+ placeholder: te(a),
76
+ portalElement: D,
77
+ value: a
78
+ })
79
+ })] });
80
+ }
81
+ })
82
+ });
83
+ };
84
+ export { C as MetadataTaxonomyPickerFieldAdvanced, C as default };
@@ -0,0 +1,46 @@
1
+ import e from "../../../../../messages.js";
2
+ import { getTaxonomyPickerMode as t, mapFormValueToTaxonomyValues as n, mapLevelsToTaxonomyLevels as r, mapTaxonomyValuesToFormValue as i } from "./value-mapping.js";
3
+ import { Field as a, getIn as o, useFormikContext as s } from "formik";
4
+ import { useCallback as c, useMemo as l } from "react";
5
+ import { useIntl as u } from "react-intl";
6
+ import { jsx as d } from "react/jsx-runtime";
7
+ import { MetadataTaxonomyPicker as f } from "@box/metadata-taxonomy-picker";
8
+ var p = ({ className: p, disableForm: m, fieldNamePrefix: h, label: g, portalElement: _, isMultilevelTaxonomyFieldEnabled: v, hasAccordion: y, createTaxonomyItemsService: b }) => {
9
+ let { setFieldValue: x, values: S } = s(), { metadata: { templateKey: C, scope: w } } = S, T = u(), E = `${h}.value`, { key: D, optionsRules: { multiSelect: O, selectableLevels: k }, levels: A } = o(S, h), j = t(v, k), M = l(() => b({
10
+ scope: w,
11
+ templateKey: C,
12
+ fieldKey: D
13
+ }), [
14
+ b,
15
+ w,
16
+ C,
17
+ D
18
+ ]), N = l(() => r(A, k), [A, k]), P = c((t) => O || !t.length ? T.formatMessage(e.taxonomyPlaceholder) : void 0, [O, T]), F = c((e) => x(E, i(e, j)), [
19
+ x,
20
+ E,
21
+ j
22
+ ]);
23
+ return /* @__PURE__ */ d("div", {
24
+ "data-testid": `${g}-field`,
25
+ children: /* @__PURE__ */ d(a, {
26
+ name: E,
27
+ children: ({ field: e }) => {
28
+ let t = n(e.value);
29
+ return /* @__PURE__ */ d(f, {
30
+ containerClassName: p,
31
+ disabled: m,
32
+ itemsService: M,
33
+ label: y ? void 0 : g,
34
+ levels: N,
35
+ mode: j,
36
+ multiSelect: O,
37
+ onValueChange: F,
38
+ placeholder: P(t),
39
+ portalElement: _,
40
+ value: t
41
+ });
42
+ }
43
+ })
44
+ });
45
+ };
46
+ export { p as MetadataTaxonomyPickerField, p as default };
@@ -0,0 +1,32 @@
1
+ import { TaxonomyPickerMode as e } from "@box/metadata-taxonomy-picker";
2
+ function t(e) {
3
+ return Array.isArray(e) ? e.map((e) => ({
4
+ id: e.value,
5
+ displayName: e.displayValue ?? "",
6
+ level: e.level,
7
+ ancestors: e.ancestors
8
+ })) : [];
9
+ }
10
+ function n(t, n) {
11
+ return n === e.SingleLevel ? t.map((e) => ({
12
+ value: e.id,
13
+ displayValue: e.displayName
14
+ })) : t.map((e) => ({
15
+ value: e.id,
16
+ displayValue: e.displayName,
17
+ level: e.level,
18
+ selectable: !0,
19
+ ancestors: e.ancestors
20
+ }));
21
+ }
22
+ function r(t, n) {
23
+ return t && n?.some((e) => e > 1) ? e.MultiLevel : e.SingleLevel;
24
+ }
25
+ function i(e, t) {
26
+ return e?.map((e) => ({
27
+ level: e.level,
28
+ displayName: e.displayName,
29
+ selectable: !!t?.includes(e.level)
30
+ })) ?? [];
31
+ }
32
+ export { r as getTaxonomyPickerMode, t as mapFormValueToTaxonomyValues, i as mapLevelsToTaxonomyLevels, n as mapTaxonomyValuesToFormValue };
@@ -7,7 +7,7 @@ import { MetadataMultiSelectFieldAdvanced as a } from "./components/metadata-mul
7
7
  import { MetadataMultiSelectField as o } from "./components/metadata-multi-select-field/metadata-multi-select-field.js";
8
8
  import { MetadataStringField as s } from "./components/metadata-string-field/metadata-string-field.js";
9
9
  import { MetadataTaxonomyField as c } from "./components/metadata-taxonomy-field/metadata-taxonomy-field.js";
10
- import { t as l } from "../../../../chunks/metadata-taxonomy-field-advanced.js";
10
+ import { MetadataTaxonomyFieldAdvanced as l } from "./components/metadata-taxonomy-field/metadata-taxonomy-field-advanced.js";
11
11
  import { jsx as u } from "react/jsx-runtime";
12
12
  var d = {
13
13
  date: (e) => /* @__PURE__ */ u(t, { ...e }),
@@ -7,25 +7,25 @@ import { FieldArray as o, getIn as s, useFormikContext as c } from "formik";
7
7
  import { useMemo as l } from "react";
8
8
  import { FormattedMessage as u, useIntl as d } from "react-intl";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
- var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher: _, canUseRelativeDates: v, isAdvancedFilterEnabled: y, isModifiedMarkerEnabled: b, onAdvancedFilterOptionChange: x, fieldAdvancedFilterOptions: S, isMultilevelTaxonomyFieldEnabled: C, filterOptionsMap: w, hasAccordion: T, isAdvancedTaxonomy: E }) => {
11
- let { values: D } = c(), O = d(), k = "metadata.fields", A = s(D, k), j = l(() => A.map((e, t) => `field-${e.key}-${t}`), [A]);
12
- return A.length ? /* @__PURE__ */ f(o, {
13
- name: k,
10
+ var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher: _, canUseRelativeDates: v, isAdvancedFilterEnabled: y, isModifiedMarkerEnabled: b, onAdvancedFilterOptionChange: x, fieldAdvancedFilterOptions: S, isMultilevelTaxonomyFieldEnabled: C, isTaxonomyPickerEnabled: w, createTaxonomyItemsService: T, filterOptionsMap: E, hasAccordion: D, isAdvancedTaxonomy: O }) => {
11
+ let { values: k } = c(), A = d(), j = "metadata.fields", M = s(k, j), N = l(() => M.map((e, t) => `field-${e.key}-${t}`), [M]);
12
+ return M.length ? /* @__PURE__ */ f(o, {
13
+ name: j,
14
14
  validateOnChange: !1,
15
15
  children: () => /* @__PURE__ */ f(i, {
16
- defaultValue: j,
16
+ defaultValue: N,
17
17
  type: "multiple",
18
- children: A.map((t, o) => {
18
+ children: M.map((t, o) => {
19
19
  let { MetadataFilterField: c, showField: l, getFilterOptionsForField: u } = n({
20
20
  field: t,
21
21
  isAdvancedFilterEnabled: y,
22
- isAdvancedTaxonomy: E,
23
- intl: O,
24
- filterOptionsMap: w
25
- }), d = s(D, `metadata.fields[${o}].value`), k = S?.[t.key], A = r(t.type, d, y, k);
22
+ isAdvancedTaxonomy: O,
23
+ intl: A,
24
+ filterOptionsMap: E
25
+ }), d = s(k, `metadata.fields[${o}].value`), j = S?.[t.key], M = r(t.type, d, y, j);
26
26
  return l && /* @__PURE__ */ f(i.Item, {
27
- iconAriaLabel: A && b ? O.formatMessage(e.filterModifiedAriaLabel) : void 0,
28
- iconVariant: A && b ? "status-modified" : void 0,
27
+ iconAriaLabel: M && b ? A.formatMessage(e.filterModifiedAriaLabel) : void 0,
28
+ iconVariant: M && b ? "status-modified" : void 0,
29
29
  title: t.displayName,
30
30
  value: `field-${t.key}-${o}`,
31
31
  children: /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f(c, {
@@ -34,9 +34,11 @@ var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher:
34
34
  fieldAdvancedFilterOptions: S?.[t.key],
35
35
  fieldNamePrefix: `metadata.fields[${o}]`,
36
36
  filterOptionsMap: u(),
37
- hasAccordion: T,
37
+ hasAccordion: D,
38
38
  isAdvancedFilterEnabled: y,
39
39
  isMultilevelTaxonomyFieldEnabled: C,
40
+ isTaxonomyPickerEnabled: w,
41
+ createTaxonomyItemsService: T,
40
42
  label: t.displayName,
41
43
  locale: h,
42
44
  onAdvancedFilterOptionChange: x,
@@ -7,26 +7,26 @@ import { FieldArray as o, getIn as s, useFormikContext as c } from "formik";
7
7
  import { useEffect as l } from "react";
8
8
  import { FormattedMessage as u, useIntl as d } from "react-intl";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
- var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher: _, canUseRelativeDates: v, isAdvancedFilterEnabled: y, isModifiedMarkerEnabled: b, onAdvancedFilterOptionChange: x, fieldAdvancedFilterOptions: S, isMultilevelTaxonomyFieldEnabled: C, filterOptionsMap: w, onDirtyChange: T, isAdvancedTaxonomy: E, hasExperimentalVirtualization: D }) => {
11
- let { values: O } = c(), k = d(), A = "metadata.fields", j = s(O, A);
10
+ var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher: _, canUseRelativeDates: v, isAdvancedFilterEnabled: y, isModifiedMarkerEnabled: b, onAdvancedFilterOptionChange: x, fieldAdvancedFilterOptions: S, isMultilevelTaxonomyFieldEnabled: C, isTaxonomyPickerEnabled: w, createTaxonomyItemsService: T, filterOptionsMap: E, onDirtyChange: D, isAdvancedTaxonomy: O, hasExperimentalVirtualization: k }) => {
11
+ let { values: A } = c(), j = d(), M = "metadata.fields", N = s(A, M);
12
12
  return l(() => {
13
- T && T(r(j, O, y));
13
+ D && D(r(N, A, y));
14
14
  }, [
15
- O,
15
+ A,
16
16
  y,
17
- T,
18
- j
19
- ]), j.length ? /* @__PURE__ */ f(o, {
20
- name: A,
17
+ D,
18
+ N
19
+ ]), N.length ? /* @__PURE__ */ f(o, {
20
+ name: M,
21
21
  validateOnChange: !1,
22
- children: () => j.map((e, t) => {
22
+ children: () => N.map((e, t) => {
23
23
  let { MetadataFilterField: r, showField: o, getFilterOptionsForField: c } = n({
24
24
  field: e,
25
25
  isAdvancedFilterEnabled: y,
26
- isAdvancedTaxonomy: E,
27
- intl: k,
28
- filterOptionsMap: w
29
- }), l = s(O, `metadata.fields[${t}].value`), u = e.advancedFilterOptionToExecute, d = i(e.type, l, y, u);
26
+ isAdvancedTaxonomy: O,
27
+ intl: j,
28
+ filterOptionsMap: E
29
+ }), l = s(A, `metadata.fields[${t}].value`), u = e.advancedFilterOptionToExecute, d = i(e.type, l, y, u);
30
30
  return o && /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f(r, {
31
31
  canUseRelativeDates: v,
32
32
  disableForm: m,
@@ -36,12 +36,14 @@ var m = ({ disableForm: m, locale: h, portalElement: g, taxonomyOptionsFetcher:
36
36
  isAdvancedFilterEnabled: y,
37
37
  isModified: d && b,
38
38
  isMultilevelTaxonomyFieldEnabled: C,
39
+ isTaxonomyPickerEnabled: w,
40
+ createTaxonomyItemsService: T,
39
41
  label: e.displayName,
40
42
  locale: h,
41
43
  onAdvancedFilterOptionChange: x,
42
44
  portalElement: g,
43
45
  taxonomyOptionsFetcher: _,
44
- hasExperimentalVirtualization: D
46
+ hasExperimentalVirtualization: k
45
47
  }), !!e.description && /* @__PURE__ */ f(a, {
46
48
  as: "span",
47
49
  color: "textOnLightSecondary",
@@ -0,0 +1,3 @@
1
+ import { MetadataTaxonomyFieldProps } from '../../types';
2
+ export declare const LegacyMetadataTaxonomyFieldAdvanced: ({ className, disableForm, fieldNamePrefix, label, portalElement, taxonomyOptionsFetcher, isMultilevelTaxonomyFieldEnabled, hasAccordion, isAdvancedFilterEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, filterOptionsMap, isModified, }: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default LegacyMetadataTaxonomyFieldAdvanced;
@@ -0,0 +1,3 @@
1
+ import { MetadataTaxonomyFieldProps } from '../../types';
2
+ export declare const LegacyMetadataTaxonomyField: ({ className, disableForm, fieldNamePrefix, label, portalElement, taxonomyOptionsFetcher, isMultilevelTaxonomyFieldEnabled, hasAccordion, }: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default LegacyMetadataTaxonomyField;
@@ -1,3 +1,11 @@
1
1
  import { MetadataTaxonomyFieldProps } from '../../types';
2
- export declare const MetadataTaxonomyFieldAdvanced: ({ className, disableForm, fieldNamePrefix, label, portalElement, taxonomyOptionsFetcher, isMultilevelTaxonomyFieldEnabled, hasAccordion, isAdvancedFilterEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, filterOptionsMap, isModified, }: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
2
+ /**
3
+ * Dispatches the advanced taxonomy filter field between the new
4
+ * `MetadataTaxonomyPicker` experience (when `isTaxonomyPickerEnabled` is set and a
5
+ * `createTaxonomyItemsService` factory is provided) and the legacy
6
+ * `@box/combobox-with-api` field otherwise. The operator dropdown,
7
+ * blank-operator collapse, and wrapped `{ value, advancedFilterOption }` payload
8
+ * behave identically across both branches.
9
+ */
10
+ export declare const MetadataTaxonomyFieldAdvanced: (props: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
3
11
  export default MetadataTaxonomyFieldAdvanced;
@@ -1,3 +1,11 @@
1
1
  import { MetadataTaxonomyFieldProps } from '../../types';
2
- export declare const MetadataTaxonomyField: ({ className, disableForm, fieldNamePrefix, label, portalElement, taxonomyOptionsFetcher, isMultilevelTaxonomyFieldEnabled, hasAccordion, }: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
2
+ /**
3
+ * Dispatches the basic taxonomy filter field between the new
4
+ * `MetadataTaxonomyPicker` experience (when `isTaxonomyPickerEnabled` is set and a
5
+ * `createTaxonomyItemsService` factory is provided) and the legacy
6
+ * `@box/combobox-with-api` field otherwise. This branch is the single migration
7
+ * boundary; remove the legacy field and this dispatcher's fallback once the
8
+ * picker is fully rolled out.
9
+ */
10
+ export declare const MetadataTaxonomyField: (props: MetadataTaxonomyFieldProps) => import("react/jsx-runtime").JSX.Element;
3
11
  export default MetadataTaxonomyField;
@@ -0,0 +1,16 @@
1
+ import { MetadataTaxonomyFieldProps } from '../../../types';
2
+ import { CreateTaxonomyItemsService } from '../types';
3
+ export type MetadataTaxonomyPickerFieldAdvancedProps = MetadataTaxonomyFieldProps & {
4
+ createTaxonomyItemsService: CreateTaxonomyItemsService;
5
+ };
6
+ /**
7
+ * Advanced taxonomy filter field backed by `@box/metadata-taxonomy-picker`.
8
+ * Keeps the operator dropdown (match any / match all / is blank / is not blank)
9
+ * above the picker, hides the picker for blank operators, forces multi-select,
10
+ * and preserves the wrapped `{ value, advancedFilterOption }` payload so saved
11
+ * filters round-trip unchanged. The picker's `itemsService` is built from the
12
+ * host-provided `createTaxonomyItemsService` factory. Selected via the
13
+ * `isTaxonomyPickerEnabled` flag in `MetadataTaxonomyFieldAdvanced`.
14
+ */
15
+ export declare const MetadataTaxonomyPickerFieldAdvanced: ({ className, disableForm, fieldNamePrefix, label, portalElement, isMultilevelTaxonomyFieldEnabled, hasAccordion, isAdvancedFilterEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, filterOptionsMap, isModified, createTaxonomyItemsService, }: MetadataTaxonomyPickerFieldAdvancedProps) => import("react/jsx-runtime").JSX.Element;
16
+ export default MetadataTaxonomyPickerFieldAdvanced;
@@ -0,0 +1,14 @@
1
+ import { MetadataTaxonomyFieldProps } from '../../../types';
2
+ import { CreateTaxonomyItemsService } from '../types';
3
+ export type MetadataTaxonomyPickerFieldProps = MetadataTaxonomyFieldProps & {
4
+ createTaxonomyItemsService: CreateTaxonomyItemsService;
5
+ };
6
+ /**
7
+ * Basic taxonomy filter field backed by `@box/metadata-taxonomy-picker`. Builds
8
+ * the picker's `itemsService` from the host-provided `createTaxonomyItemsService`
9
+ * factory and keeps the Formik value shape identical to the legacy combobox so
10
+ * persisted filters round-trip unchanged. Selected via the
11
+ * `isTaxonomyPickerEnabled` flag in `MetadataTaxonomyField`.
12
+ */
13
+ export declare const MetadataTaxonomyPickerField: ({ className, disableForm, fieldNamePrefix, label, portalElement, isMultilevelTaxonomyFieldEnabled, hasAccordion, createTaxonomyItemsService, }: MetadataTaxonomyPickerFieldProps) => import("react/jsx-runtime").JSX.Element;
14
+ export default MetadataTaxonomyPickerField;
@@ -0,0 +1,33 @@
1
+ import { Level, TreeOptionType } from '@box/combobox-with-api';
2
+ import { TaxonomyLevel, TaxonomyValue, TaxonomyPickerMode } from '@box/metadata-taxonomy-picker';
3
+ /**
4
+ * Maps the Formik-stored taxonomy value to the picker's `TaxonomyValue[]`.
5
+ *
6
+ * The filter persists single-level values as bare `{ value, displayValue }`
7
+ * options and multi-level values as full `TreeOptionType`s; both map to the
8
+ * picker shape. Non-array inputs (e.g. an empty `''`) map to `[]`.
9
+ */
10
+ export declare function mapFormValueToTaxonomyValues(value: unknown): TaxonomyValue[];
11
+ /**
12
+ * Maps the picker's `TaxonomyValue[]` back to the Formik value shape.
13
+ *
14
+ * To keep the persisted filter payload byte-for-byte identical to the legacy
15
+ * comboboxes, single-level values are written as bare `{ value, displayValue }`
16
+ * (matching `ComboboxWithApiPagination`'s `BaseOptionType`) while multi-level
17
+ * values carry the full `{ value, displayValue, level, selectable, ancestors }`
18
+ * shape (matching `ComboboxWithApiTreeView`'s `TreeOptionType`).
19
+ */
20
+ export declare function mapTaxonomyValuesToFormValue(values: TaxonomyValue[], mode: TaxonomyPickerMode): TreeOptionType[];
21
+ /**
22
+ * Derives the picker mode the same way the legacy field chose between the tree
23
+ * view and the flat pagination combobox: multi-level only when the
24
+ * multi-level feature flag is on AND the field has a selectable level deeper
25
+ * than the root.
26
+ */
27
+ export declare function getTaxonomyPickerMode(isMultilevelTaxonomyFieldEnabled: boolean | undefined, selectableLevels: number[] | undefined): TaxonomyPickerMode;
28
+ /**
29
+ * Maps the field's taxonomy `levels` to the picker's `TaxonomyLevel[]`, marking
30
+ * each level selectable based on `selectableLevels`. Drives the level-filter
31
+ * dropdown and search auto-scope in multi-level mode.
32
+ */
33
+ export declare function mapLevelsToTaxonomyLevels(levels: Level[] | undefined, selectableLevels: number[] | undefined): TaxonomyLevel[];
@@ -1,10 +1,23 @@
1
1
  import { FetcherResponse, TreeOptionType, TreeQueryInput } from '@box/combobox-with-api';
2
+ import { TaxonomyItemsService } from '@box/metadata-taxonomy-picker';
2
3
  import { FilterKey, FilterOption, TaxonomyMultiSelectFilterKey, TaxonomySingleSelectFilterKey } from '../../../../types';
3
4
  import { MetadataFieldProps } from '../../types';
4
5
  export type MetadataTaxonomyFieldProps = Omit<MetadataFieldProps, 'portalElement'> & {
5
6
  portalElement?: HTMLElement | (() => HTMLElement);
6
7
  };
7
8
  export type TaxonomyOptionsFetcher = (scope: string, templateKey: string, fieldKey: string, level: number, options: TreeQueryInput) => Promise<FetcherResponse<TreeOptionType>>;
9
+ /**
10
+ * Builds the per-field `TaxonomyItemsService` consumed by the new
11
+ * `MetadataTaxonomyPicker` experience. Called once per taxonomy field with that
12
+ * field's identity; browse/search level scoping is supplied by the picker per
13
+ * request, so it is intentionally not a parameter here. Mirrors the
14
+ * `metadata-editor` integration so hosts can share a single factory.
15
+ */
16
+ export type CreateTaxonomyItemsService = (params: {
17
+ scope: string;
18
+ templateKey: string;
19
+ fieldKey: string;
20
+ }) => TaxonomyItemsService;
8
21
  export interface TaxonomyFieldValue<T> {
9
22
  value: T[];
10
23
  advancedFilterOption: FilterKey;
@@ -1,3 +1,3 @@
1
1
  import { MetadataFilterFieldsProps } from './types';
2
- export declare const MetadataFilterFieldsAccordion: ({ disableForm, locale, portalElement, taxonomyOptionsFetcher, canUseRelativeDates, isAdvancedFilterEnabled, isModifiedMarkerEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, isMultilevelTaxonomyFieldEnabled, filterOptionsMap, hasAccordion, isAdvancedTaxonomy, }: MetadataFilterFieldsProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataFilterFieldsAccordion: ({ disableForm, locale, portalElement, taxonomyOptionsFetcher, canUseRelativeDates, isAdvancedFilterEnabled, isModifiedMarkerEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, isMultilevelTaxonomyFieldEnabled, isTaxonomyPickerEnabled, createTaxonomyItemsService, filterOptionsMap, hasAccordion, isAdvancedTaxonomy, }: MetadataFilterFieldsProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default MetadataFilterFieldsAccordion;
@@ -1,3 +1,3 @@
1
1
  import { MetadataFilterFieldsProps } from './types';
2
- export declare const MetadataFilterFields: ({ disableForm, locale, portalElement, taxonomyOptionsFetcher, canUseRelativeDates, isAdvancedFilterEnabled, isModifiedMarkerEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, isMultilevelTaxonomyFieldEnabled, filterOptionsMap, onDirtyChange, isAdvancedTaxonomy, hasExperimentalVirtualization, }: MetadataFilterFieldsProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataFilterFields: ({ disableForm, locale, portalElement, taxonomyOptionsFetcher, canUseRelativeDates, isAdvancedFilterEnabled, isModifiedMarkerEnabled, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, isMultilevelTaxonomyFieldEnabled, isTaxonomyPickerEnabled, createTaxonomyItemsService, filterOptionsMap, onDirtyChange, isAdvancedTaxonomy, hasExperimentalVirtualization, }: MetadataFilterFieldsProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default MetadataFilterFields;
@@ -1,6 +1,6 @@
1
1
  import { Level } from '@box/combobox-with-api';
2
2
  import { FilterKey, FilterOption, FilterOptionsMap, MetadataTemplateFieldOption, MetadataTemplateFieldType, RangeValue } from '../../types';
3
- import { TaxonomyOptionsFetcher } from './components/metadata-taxonomy-field/types';
3
+ import { CreateTaxonomyItemsService, TaxonomyOptionsFetcher } from './components/metadata-taxonomy-field/types';
4
4
  export type CustomDateFilterOption = {
5
5
  name: string;
6
6
  from: number;
@@ -20,6 +20,10 @@ export type MetadataFilterFieldsProps = {
20
20
  taxonomyOptionsFetcher: TaxonomyOptionsFetcher;
21
21
  canUseRelativeDates: boolean;
22
22
  isMultilevelTaxonomyFieldEnabled?: boolean;
23
+ /** When true, taxonomy filter fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. */
24
+ isTaxonomyPickerEnabled?: boolean;
25
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
26
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
23
27
  isAdvancedFilterEnabled?: boolean;
24
28
  isModifiedMarkerEnabled?: boolean;
25
29
  filterOptionsMap?: FilterOptionsMap;
@@ -41,6 +45,10 @@ export type MetadataFieldProps = {
41
45
  canUseRelativeDates?: boolean;
42
46
  isAdvancedFilterEnabled?: boolean;
43
47
  isMultilevelTaxonomyFieldEnabled?: boolean;
48
+ /** When true, taxonomy filter fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. */
49
+ isTaxonomyPickerEnabled?: boolean;
50
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
51
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
44
52
  levels?: Level[];
45
53
  filterOptionsMap?: FilterOption[];
46
54
  onAdvancedFilterOptionChange?: (fieldKey: string, option: FilterKey) => void;
@@ -1,2 +1,2 @@
1
1
  import { MetadataFilterProps } from './types';
2
- export declare const MetadataFilter: ({ isAdvancedFilterEnabled, isModifiedMarkerEnabled, metadataTemplateOptions, portalElement, selectedMetadataTemplate, taxonomyOptionsFetcher, showMetadataSelector, disableForm, isLoading, hasError, locale, canUseRelativeDates, isMultilevelTaxonomyFieldEnabled, filterOptionsMap, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, hasAccordion, onDirtyChange, isAdvancedTaxonomy, hasExperimentalVirtualization, }: MetadataFilterProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataFilter: ({ isAdvancedFilterEnabled, isModifiedMarkerEnabled, metadataTemplateOptions, portalElement, selectedMetadataTemplate, taxonomyOptionsFetcher, showMetadataSelector, disableForm, isLoading, hasError, locale, canUseRelativeDates, isMultilevelTaxonomyFieldEnabled, isTaxonomyPickerEnabled, createTaxonomyItemsService, filterOptionsMap, onAdvancedFilterOptionChange, fieldAdvancedFilterOptions, hasAccordion, onDirtyChange, isAdvancedTaxonomy, hasExperimentalVirtualization, }: MetadataFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { BaseOptionType, Level } from '@box/combobox-with-api';
2
- import { TaxonomyOptionsFetcher } from './components/metadata-filter-fields/components/metadata-taxonomy-field/types';
2
+ import { CreateTaxonomyItemsService, TaxonomyOptionsFetcher } from './components/metadata-filter-fields/components/metadata-taxonomy-field/types';
3
3
  export type MetadataFormFieldValue = EnumType | RangeType | FloatType;
4
4
  export type EnumType = {
5
5
  enum: Array<string>;
@@ -124,6 +124,10 @@ export type MetadataFilterProps = {
124
124
  taxonomyOptionsFetcher: TaxonomyOptionsFetcher;
125
125
  canUseRelativeDates?: boolean;
126
126
  isMultilevelTaxonomyFieldEnabled?: boolean;
127
+ /** When true, taxonomy filter fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. */
128
+ isTaxonomyPickerEnabled?: boolean;
129
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
130
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
127
131
  isAdvancedFilterEnabled?: boolean;
128
132
  isModifiedMarkerEnabled?: boolean;
129
133
  filterOptionsMap?: FilterOptionsMap;
package/package.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@box/metadata-filter",
3
- "version": "2.1.8",
3
+ "version": "2.2.1",
4
4
  "peerDependencies": {
5
- "@box/blueprint-web": "^16.4.0",
6
- "@box/blueprint-web-assets": "^5.2.5",
7
- "@box/combobox-with-api": "^2.1.8",
5
+ "@box/blueprint-web": "^16.4.2",
6
+ "@box/blueprint-web-assets": "^5.2.7",
7
+ "@box/combobox-with-api": "^2.1.10",
8
+ "@box/metadata-taxonomy-picker": "^3.1.10",
8
9
  "formik": "^2.0.3",
9
10
  "react": "^17.0.0 || ^18.0.0",
10
11
  "react-dom": "^17.0.0 || ^18.0.0",
11
12
  "react-intl": "6.4.2"
12
13
  },
13
14
  "devDependencies": {
14
- "@box/blueprint-web": "^16.4.0",
15
- "@box/blueprint-web-assets": "^5.2.5",
16
- "@box/storybook-utils": "^1.1.7",
15
+ "@box/blueprint-web": "^16.4.2",
16
+ "@box/blueprint-web-assets": "^5.2.7",
17
+ "@box/metadata-taxonomy-picker": "^3.1.10",
18
+ "@box/storybook-utils": "^1.1.9",
17
19
  "react": "^18.3.0",
18
20
  "react-dom": "^18.3.0",
19
21
  "react-intl": "6.4.2"
@@ -1,92 +0,0 @@
1
- import e from "../esm/lib/messages.js";
2
- import { t } from "./advanced-filter-select.js";
3
- import { createFieldValue as n, getInitialAdvancedFilterValue as r, getInputValue as i, isBlankOption as a } from "../esm/lib/components/metadata-filter-fields/components/metadata-taxonomy-field/utils.js";
4
- import { ComboboxWithApiPagination as o, ComboboxWithApiTreeView as s } from "@box/combobox-with-api";
5
- import { Field as c, getIn as l, useFormikContext as u } from "formik";
6
- import { useCallback as d, useState as f } from "react";
7
- import { useIntl as p } from "react-intl";
8
- import m from "clsx";
9
- import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
10
- import '../styles/metadata-taxonomy-field-advanced.css';var v = {
11
- comboboxWrapper: "_comboboxWrapper_1e1d8_1",
12
- disabled: "_disabled_1e1d8_1",
13
- disabledTreeView: "_disabledTreeView_1e1d8_5"
14
- }, y = ({ className: y, disableForm: b, fieldNamePrefix: x, label: S, portalElement: C, taxonomyOptionsFetcher: w, isMultilevelTaxonomyFieldEnabled: T, hasAccordion: E, isAdvancedFilterEnabled: D, onAdvancedFilterOptionChange: O, fieldAdvancedFilterOptions: k, filterOptionsMap: A, isModified: j }) => {
15
- let { setFieldValue: M, values: N } = u(), { metadata: { templateKey: P, scope: F } } = N, I = p(), L = `${x}.value`, { key: R, optionsRules: z, levels: B } = l(N, x), V = z?.selectableLevels, H = T && V?.some((e) => e > 1), [U, W] = f(r(k, A)), [G, K] = f(!1), q = d((e) => w ? w(F, P, R, V?.[0] ?? 0, e) : Promise.resolve({ options: [] }), [
16
- R,
17
- F,
18
- V,
19
- w,
20
- P
21
- ]), J = d((t) => t?.length === 0 ? I.formatMessage(e.multiselectPlaceholder) : "", [I]), Y = d((e, t, r) => {
22
- W(e), O?.(L, e);
23
- let i = n(a(e) ? [] : t, e, D);
24
- r.setFieldValue(L, i);
25
- }, [
26
- L,
27
- D,
28
- O
29
- ]), X = d((e) => {
30
- e && K(!1);
31
- }, []), Z = d((e) => {
32
- M(L, n(e, U, D));
33
- }, [
34
- U,
35
- L,
36
- D,
37
- M
38
- ]);
39
- return /* @__PURE__ */ g("div", {
40
- "data-testid": `${S}-field`,
41
- children: /* @__PURE__ */ g(c, {
42
- name: L,
43
- children: ({ field: e, form: n }) => {
44
- let r = i(e.value, D);
45
- return /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(t, {
46
- disableForm: b ?? !1,
47
- fieldAdvancedFilterOptions: k,
48
- fieldNamePrefix: x,
49
- filterOptionsMap: A,
50
- isModified: j,
51
- label: S,
52
- onAdvancedFilterOptionChange: O,
53
- onOpenChange: K,
54
- onValueChange: (e) => Y(e, r, n),
55
- open: G,
56
- portalElement: C,
57
- showLabel: !E,
58
- value: U
59
- }), !a(U) && /* @__PURE__ */ g("div", {
60
- className: m(v.comboboxWrapper, b && v.disabled),
61
- children: H ? /* @__PURE__ */ g(s, {
62
- className: m(y, b && v.disabledTreeView),
63
- defaultFetcher: q,
64
- disabled: b,
65
- hideLabel: !0,
66
- label: S,
67
- levels: B,
68
- multiselect: !0,
69
- onOpenChange: X,
70
- onValueChange: Z,
71
- placeholder: J(r),
72
- portalElement: C,
73
- selectableLevels: V,
74
- value: r
75
- }) : /* @__PURE__ */ g(o, {
76
- className: y,
77
- defaultFetcher: q,
78
- disabled: b,
79
- label: void 0,
80
- multiselect: !0,
81
- onOpenChange: X,
82
- onValueChange: Z,
83
- placeholder: J(r),
84
- portalElement: C,
85
- value: r
86
- })
87
- })] });
88
- }
89
- })
90
- });
91
- };
92
- export { y as t };