@box/metadata-view 1.51.25 → 1.52.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 (50) hide show
  1. package/dist/esm/lib/components/filter-row/advanced-field-content.js +53 -0
  2. package/dist/esm/lib/components/filter-row/advanced-filter-context.js +6 -0
  3. package/dist/esm/lib/components/filter-row/form-filter-chip.js +92 -63
  4. package/dist/esm/lib/components/filter-row/initial-field-values.js +18 -10
  5. package/dist/esm/lib/components/filter-row/is-blank-or-not-blank-filter.js +5 -0
  6. package/dist/esm/lib/components/filter-row/is-filter-selected.js +51 -8
  7. package/dist/esm/lib/components/filter-row/messages.js +4 -0
  8. package/dist/esm/lib/components/filter-row/metadata-filter-chip.js +77 -59
  9. package/dist/esm/lib/components/filter-row/select-filter-chip.js +1 -1
  10. package/dist/esm/lib/components/filter-row/use-form-filter-chip.js +41 -0
  11. package/dist/i18n/bn-IN.js +1 -0
  12. package/dist/i18n/da-DK.js +1 -0
  13. package/dist/i18n/de-DE.js +1 -0
  14. package/dist/i18n/en-AU.js +1 -0
  15. package/dist/i18n/en-CA.js +1 -0
  16. package/dist/i18n/en-GB.js +1 -0
  17. package/dist/i18n/en-US.js +1 -0
  18. package/dist/i18n/en-US.properties +2 -0
  19. package/dist/i18n/en-x-pseudo.js +1 -0
  20. package/dist/i18n/es-419.js +1 -0
  21. package/dist/i18n/es-ES.js +1 -0
  22. package/dist/i18n/fi-FI.js +1 -0
  23. package/dist/i18n/fr-CA.js +1 -0
  24. package/dist/i18n/fr-FR.js +1 -0
  25. package/dist/i18n/hi-IN.js +1 -0
  26. package/dist/i18n/it-IT.js +1 -0
  27. package/dist/i18n/ja-JP.js +1 -0
  28. package/dist/i18n/json/src/lib/components/filter-row/messages.json +1 -1
  29. package/dist/i18n/ko-KR.js +1 -0
  30. package/dist/i18n/nb-NO.js +1 -0
  31. package/dist/i18n/nl-NL.js +1 -0
  32. package/dist/i18n/pl-PL.js +1 -0
  33. package/dist/i18n/pt-BR.js +1 -0
  34. package/dist/i18n/ru-RU.js +1 -0
  35. package/dist/i18n/sv-SE.js +1 -0
  36. package/dist/i18n/tr-TR.js +1 -0
  37. package/dist/i18n/zh-CN.js +1 -0
  38. package/dist/i18n/zh-TW.js +1 -0
  39. package/dist/types/lib/components/filter-row/advanced-field-content.d.ts +12 -0
  40. package/dist/types/lib/components/filter-row/advanced-filter-context.d.ts +8 -0
  41. package/dist/types/lib/components/filter-row/form-filter-chip.d.ts +5 -2
  42. package/dist/types/lib/components/filter-row/initial-field-values.d.ts +4 -1
  43. package/dist/types/lib/components/filter-row/is-blank-or-not-blank-filter.d.ts +2 -0
  44. package/dist/types/lib/components/filter-row/is-filter-selected.d.ts +6 -3
  45. package/dist/types/lib/components/filter-row/messages.d.ts +5 -0
  46. package/dist/types/lib/components/filter-row/select-filter-chip.d.ts +1 -1
  47. package/dist/types/lib/components/filter-row/types.d.ts +4 -1
  48. package/dist/types/lib/components/filter-row/use-form-filter-chip.d.ts +18 -0
  49. package/dist/types/lib/test-utils/mock-data.d.ts +13 -1
  50. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ import { MetadataMultiSelectField as o, MetadataStringField as l, MetadataFloatField as c, MetadataDateField as s } from "@box/metadata-filter";
2
+ import { useAdvancedFilterContext as F } from "./advanced-filter-context.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ const u = ({
5
+ fieldNamePrefix: a,
6
+ filterOptionsMap: d,
7
+ label: r
8
+ }) => {
9
+ const e = F();
10
+ return {
11
+ key: e?.resetKey,
12
+ fieldAdvancedFilterOptions: e?.currentOption,
13
+ fieldNamePrefix: a,
14
+ filterOptionsMap: d,
15
+ isAdvancedFilterEnabled: !0,
16
+ label: r,
17
+ onAdvancedFilterOptionChange: e ? (i, t) => e.onOptionChange(t) : void 0
18
+ };
19
+ }, f = ({
20
+ fieldType: a,
21
+ fieldNamePrefix: d,
22
+ filterOptionsMap: r,
23
+ label: e,
24
+ locale: i
25
+ }) => {
26
+ const t = u({
27
+ fieldNamePrefix: d,
28
+ filterOptionsMap: r,
29
+ label: e
30
+ });
31
+ switch (a) {
32
+ case "date":
33
+ return /* @__PURE__ */ n(s, {
34
+ ...t,
35
+ locale: i
36
+ });
37
+ case "float":
38
+ return /* @__PURE__ */ n(c, {
39
+ ...t
40
+ });
41
+ case "string":
42
+ return /* @__PURE__ */ n(l, {
43
+ ...t
44
+ });
45
+ default:
46
+ return /* @__PURE__ */ n(o, {
47
+ ...t
48
+ });
49
+ }
50
+ };
51
+ export {
52
+ f as AdvancedFieldContent
53
+ };
@@ -0,0 +1,6 @@
1
+ import { createContext as t, useContext as e } from "react";
2
+ const n = /* @__PURE__ */ t(null), r = () => e(n);
3
+ export {
4
+ n as AdvancedFilterContext,
5
+ r as useAdvancedFilterContext
6
+ };
@@ -1,79 +1,108 @@
1
- import { Popover as a, FilterChip as s, Button as f } from "@box/blueprint-web";
2
- import { useFormikContext as V, getIn as l } from "formik";
3
- import { useState as v, useMemo as M } from "react";
4
- import { useIntl as j } from "react-intl";
5
- import { s as h } from "../../../../chunks/filter-row.module.js";
6
- import { getDefaultFieldValue as z } from "./initial-field-values.js";
7
- import { isFilterSelected as N } from "./is-filter-selected.js";
8
- import y from "./messages.js";
9
- import { jsx as o, jsxs as n } from "react/jsx-runtime";
10
- const Q = ({
11
- children: C,
12
- formRef: F,
13
- icon: i,
1
+ import { Popover as n, FilterChip as l, Button as O } from "@box/blueprint-web";
2
+ import { useFormikContext as X, getIn as i } from "formik";
3
+ import { useState as c, useMemo as Y } from "react";
4
+ import { useIntl as Z } from "react-intl";
5
+ import { AdvancedFilterContext as _ } from "./advanced-filter-context.js";
6
+ import { s as T } from "../../../../chunks/filter-row.module.js";
7
+ import { getDefaultFieldValue as A } from "./initial-field-values.js";
8
+ import { isBlankOrNotBlankFilter as b } from "./is-blank-or-not-blank-filter.js";
9
+ import { extractAdvancedFilterOption as E, isFilterSelected as ee } from "./is-filter-selected.js";
10
+ import D from "./messages.js";
11
+ import { useFormFilterChip as te } from "./use-form-filter-chip.js";
12
+ import { jsx as r, jsxs as s } from "react/jsx-runtime";
13
+ const he = ({
14
+ children: u,
15
+ formRef: B,
16
+ icon: f,
14
17
  id: t,
15
- name: g
18
+ name: d = "",
19
+ isAdvancedFilterEnabled: e,
20
+ advancedFilterOptionsMap: S
16
21
  }) => {
17
22
  const {
18
- formatMessage: c
19
- } = j(), [T, m] = v(!1), {
20
- handleSubmit: D,
21
- setFieldValue: S,
22
- resetForm: b,
23
- values: r
24
- } = V(), p = l(r, `metadata.fields.${t}.fieldType`), B = () => {
25
- D(), m(!1);
26
- }, [I, R] = v(r), $ = (e) => {
27
- m(e), e ? R(r) : b({
28
- values: I
29
- });
30
- }, k = () => {
31
- S(`metadata.fields.${t}.value`, z(p));
32
- }, d = M(() => {
33
- const e = l(r, `metadata.fields.${t}.value`);
34
- return e ? N(e) : !1;
35
- }, [r, t]), x = () => {
36
- if (p === "date") {
37
- const e = l(r, `metadata.fields.${t}.value.customType`), O = e && e !== "anyTime" && e !== "customRange", u = l(r, `metadata.fields.${t}.value.relativeType`);
38
- return (O || u && u !== "customRange") && !d;
23
+ formatMessage: h
24
+ } = Z(), [k, y] = c(!1), {
25
+ handleSubmit: x,
26
+ setFieldValue: R,
27
+ resetForm: $,
28
+ values: a
29
+ } = X(), v = i(a, `metadata.fields.${t}.fieldType`), C = i(a, `metadata.fields.${t}.value`), I = e && C ? E(C) : void 0, {
30
+ appliedAdvancedFilterOption: F,
31
+ currentAdvancedFilterOption: V,
32
+ dynamicDisplayName: N,
33
+ handleAdvancedFilterOptionChange: M,
34
+ handleApply: P,
35
+ handleCancel: j,
36
+ handleClear: z
37
+ } = te({
38
+ name: d,
39
+ advancedFilterOptionsMap: S,
40
+ initialAdvancedFilterOption: I
41
+ }), [K, L] = c(0), w = () => {
42
+ e && P(), x(), y(!1);
43
+ }, [q, G] = c(a), H = (o) => {
44
+ y(o), o ? (G(a), e && L((m) => m + 1)) : ($({
45
+ values: q
46
+ }), e && j());
47
+ }, J = () => {
48
+ R(`metadata.fields.${t}.value`, A({
49
+ fieldType: v,
50
+ isAdvancedFilterEnabled: e
51
+ })), e && z();
52
+ }, p = Y(() => {
53
+ if (e && b(F))
54
+ return !0;
55
+ const o = i(a, `metadata.fields.${t}.value`);
56
+ return o ? ee(o) : !1;
57
+ }, [a, t, e, F]), Q = () => {
58
+ if (v === "date") {
59
+ const o = i(a, `metadata.fields.${t}.value.customType`), m = o && o !== "anyTime" && o !== "customRange", g = i(a, `metadata.fields.${t}.value.relativeType`);
60
+ return (m || g && g !== "customRange") && !p;
39
61
  }
40
62
  return !1;
41
- };
42
- return /* @__PURE__ */ o("div", {
43
- children: /* @__PURE__ */ n(a.Root, {
44
- onOpenChange: $,
45
- open: T,
46
- children: [/* @__PURE__ */ o(a.Trigger, {
47
- children: /* @__PURE__ */ n(s.TriggerChip, {
48
- selected: d,
63
+ }, U = e && p ? N : d, W = e ? /* @__PURE__ */ r(_.Provider, {
64
+ value: {
65
+ currentOption: V,
66
+ onOptionChange: M,
67
+ resetKey: K
68
+ },
69
+ children: u
70
+ }) : u;
71
+ return /* @__PURE__ */ r("div", {
72
+ children: /* @__PURE__ */ s(n.Root, {
73
+ onOpenChange: H,
74
+ open: k,
75
+ children: [/* @__PURE__ */ r(n.Trigger, {
76
+ children: /* @__PURE__ */ s(l.TriggerChip, {
77
+ selected: p,
49
78
  value: t,
50
- children: [i && /* @__PURE__ */ o(s.Icon, {
51
- icon: i
52
- }), /* @__PURE__ */ o(s.Label, {
53
- children: g
54
- }), /* @__PURE__ */ o(s.DropdownIndicator, {})]
79
+ children: [f && /* @__PURE__ */ r(l.Icon, {
80
+ icon: f
81
+ }), /* @__PURE__ */ r(l.Label, {
82
+ children: U
83
+ }), /* @__PURE__ */ r(l.DropdownIndicator, {})]
55
84
  }, t)
56
- }), /* @__PURE__ */ n(a.ContentContainer, {
85
+ }), /* @__PURE__ */ s(n.ContentContainer, {
57
86
  align: "start",
58
- className: h.popoverContent,
59
- container: F.current,
87
+ className: T.popoverContent,
88
+ container: B.current,
60
89
  "data-testid": "form-filter-chip-popover",
61
- children: [/* @__PURE__ */ o(a.MainContent, {
62
- children: C
63
- }), /* @__PURE__ */ n(a.Footer, {
64
- className: h.popoverFooter,
65
- children: [/* @__PURE__ */ o(f, {
66
- onClick: k,
90
+ children: [/* @__PURE__ */ r(n.MainContent, {
91
+ children: W
92
+ }), /* @__PURE__ */ s(n.Footer, {
93
+ className: T.popoverFooter,
94
+ children: [/* @__PURE__ */ r(O, {
95
+ onClick: J,
67
96
  size: "small",
68
97
  variant: "secondary",
69
- children: c(y.clearButton)
70
- }), /* @__PURE__ */ o(f, {
71
- disabled: x(),
72
- onClick: B,
98
+ children: h(D.clearButton)
99
+ }), /* @__PURE__ */ r(O, {
100
+ disabled: Q(),
101
+ onClick: w,
73
102
  size: "small",
74
103
  type: "submit",
75
104
  variant: "primary",
76
- children: c(y.applyButton)
105
+ children: h(D.applyButton)
77
106
  })]
78
107
  })]
79
108
  })]
@@ -81,5 +110,5 @@ const Q = ({
81
110
  });
82
111
  };
83
112
  export {
84
- Q as FormFilterChip
113
+ he as FormFilterChip
85
114
  };
@@ -1,35 +1,43 @@
1
- const o = (e) => ({
1
+ const c = (e) => ({
2
2
  key: e,
3
3
  id: e
4
- }), c = ({
4
+ }), d = ({
5
5
  fieldType: e,
6
6
  options: t
7
- }) => ["enum", "multiSelect"].includes(e) ? (t || []).map(o) : [], s = (e) => e === "date" ? {
7
+ }) => ["enum", "multiSelect"].includes(e) ? (t || []).map(c) : [], s = ({
8
+ fieldType: e,
9
+ isAdvancedFilterEnabled: t
10
+ }) => e === "date" ? {
8
11
  customType: "anyTime",
9
12
  range: {
10
13
  gt: "",
11
14
  lt: ""
12
15
  }
13
- } : e === "float" ? {
16
+ } : e === "float" ? t ? {
17
+ enum: []
18
+ } : {
14
19
  range: {
15
20
  gt: "",
16
21
  lt: ""
17
22
  }
18
23
  } : {
19
24
  enum: []
20
- }, f = (e) => Array.isArray(e) ? e.length > 1 ? "multiSelect" : "enum" : !e || typeof e != "object" ? "enum" : "customDays" in e || "relativeDays" in e || "customType" in e || "relativeType" in e ? "date" : "range" in e ? "float" : "enum" in e && e.enum.length > 1 ? "multiSelect" : "enum", y = (e, t) => {
25
+ }, l = (e) => Array.isArray(e) ? e.length > 1 ? "multiSelect" : "enum" : !e || typeof e != "object" ? "enum" : "customDays" in e || "relativeDays" in e || "customType" in e || "relativeType" in e ? "date" : "range" in e ? "float" : "enum" in e && e.enum.length > 1 ? "multiSelect" : "enum", o = (e, t) => {
21
26
  const i = e.reduce((n, r) => {
22
- const a = t?.[r.id]?.value, u = s(r.fieldType);
27
+ const a = t?.[r.id]?.value, u = s({
28
+ fieldType: r.fieldType,
29
+ isAdvancedFilterEnabled: r.isAdvancedFilterEnabled
30
+ });
23
31
  return n[r.id] = {
24
32
  value: a ?? u,
25
33
  fieldType: r.fieldType,
26
- options: c(r)
34
+ options: d(r)
27
35
  }, n;
28
36
  }, {});
29
37
  return t && Object.keys(t).filter((n) => !i[n]).forEach((n) => {
30
38
  i[n] = {
31
39
  value: t[n].value,
32
- fieldType: f(t[n].value)
40
+ fieldType: l(t[n].value)
33
41
  };
34
42
  }), {
35
43
  metadata: {
@@ -39,6 +47,6 @@ const o = (e) => ({
39
47
  };
40
48
  export {
41
49
  s as getDefaultFieldValue,
42
- y as getInitialFieldValues,
43
- f as inferFieldType
50
+ o as getInitialFieldValues,
51
+ l as inferFieldType
44
52
  };
@@ -0,0 +1,5 @@
1
+ import { FilterKeyTypes as e } from "@box/metadata-filter";
2
+ const l = (r) => r === e.IS_BLANK || r === e.IS_NOT_BLANK;
3
+ export {
4
+ l as isBlankOrNotBlankFilter
5
+ };
@@ -1,16 +1,59 @@
1
- function t(e) {
2
- if ("range" in e) {
1
+ import { FilterKeyTypes as d } from "@box/metadata-filter";
2
+ import { isBlankOrNotBlankFilter as i } from "./is-blank-or-not-blank-filter.js";
3
+ const o = (t) => !!t && typeof t == "object" && !Array.isArray(t) && "advancedFilterOption" in t, s = ({
4
+ value: t,
5
+ advancedFilterOption: r
6
+ }) => i(r) ? !0 : !!(t && t.length > 0 && t[0]), c = (t) => !!t && typeof t == "object" && !Array.isArray(t) && "advancedFilterOption" in t, a = ({
7
+ value: t,
8
+ advancedFilterOption: r
9
+ }) => {
10
+ if (i(r))
11
+ return !0;
12
+ if (typeof t == "string")
13
+ return !!t;
14
+ if (t && typeof t == "object" && "range" in t) {
3
15
  const {
4
16
  range: n
5
- } = e;
17
+ } = t;
6
18
  return !!(n && (n.gt || n.lt));
7
19
  }
8
- if ("enum" in e) {
9
- const n = e.enum;
10
- return !!(n && n.length > 0 && n[0]);
20
+ return !1;
21
+ }, f = (t) => {
22
+ if ("advancedFilterOption" in t)
23
+ return t.advancedFilterOption;
24
+ if ("enum" in t) {
25
+ const r = t.enum;
26
+ if (o(r))
27
+ return r.advancedFilterOption;
28
+ const n = r?.[0];
29
+ if (c(n))
30
+ return n.advancedFilterOption;
31
+ }
32
+ }, y = (t) => {
33
+ const r = f(t);
34
+ return r && r !== d.SELECT_FILTER_TYPE ? r : void 0;
35
+ }, m = (t) => {
36
+ if ("advancedFilterOption" in t && i(t.advancedFilterOption))
37
+ return !0;
38
+ if ("range" in t) {
39
+ const {
40
+ range: r
41
+ } = t;
42
+ return !!(r && (r.gt || r.lt));
43
+ }
44
+ if ("enum" in t) {
45
+ const r = t.enum;
46
+ if (o(r))
47
+ return s(r);
48
+ const n = r;
49
+ if (!n || n.length === 0)
50
+ return !1;
51
+ const e = n[0];
52
+ return c(e) ? a(e) : !!e;
11
53
  }
12
54
  return !1;
13
- }
55
+ };
14
56
  export {
15
- t as isFilterSelected
57
+ y as extractAdvancedFilterOption,
58
+ m as isFilterSelected
16
59
  };
@@ -31,6 +31,10 @@ const a = e({
31
31
  locationFilterTitle: {
32
32
  id: "groupSharedFeatures.metadataView.filterRow.locationFilterTitle",
33
33
  defaultMessage: "Location"
34
+ },
35
+ chipNameWithFilterOption: {
36
+ id: "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption",
37
+ defaultMessage: "{name} - {optionLabel}"
34
38
  }
35
39
  });
36
40
  export {
@@ -1,86 +1,104 @@
1
- import { MetadataStringField as f, MetadataFloatField as h, MetadataDateField as M } from "@box/metadata-filter";
2
- import { useIntl as C } from "react-intl";
3
- import { MetadataFileChip as b } from "../metadata-value/metadata-file-chip.js";
4
- import { FormFilterChip as n } from "./form-filter-chip.js";
5
- import { SelectFilterChip as v } from "./select-filter-chip.js";
1
+ import { MetadataStringField as M, MetadataFloatField as C, MetadataDateField as S } from "@box/metadata-filter";
2
+ import { useIntl as b } from "react-intl";
3
+ import { MetadataFileChip as x } from "../metadata-value/metadata-file-chip.js";
4
+ import { AdvancedFieldContent as A } from "./advanced-field-content.js";
5
+ import { FormFilterChip as o } from "./form-filter-chip.js";
6
+ import { SelectFilterChip as D } from "./select-filter-chip.js";
6
7
  import { jsx as t } from "react/jsx-runtime";
7
- const w = ({
8
- filterOption: c,
9
- formRef: i
8
+ const N = ({
9
+ filterOption: p,
10
+ formRef: a
10
11
  }) => {
11
12
  const {
12
- canUseRelativeDates: d,
13
- customDateFilterOptions: s,
14
- fieldType: o,
15
- icon: l,
13
+ advancedFilterOptionsMap: c,
14
+ canUseRelativeDates: m,
15
+ customDateFilterOptions: u,
16
+ fieldType: n,
17
+ icon: r,
16
18
  id: e,
17
- name: a,
18
- options: m,
19
- placeholder: p,
20
- variant: u
21
- } = c, {
22
- locale: F
23
- } = C(), r = `metadata.fields.${e}`;
24
- switch (o) {
19
+ isAdvancedFilterEnabled: F,
20
+ name: i,
21
+ options: f,
22
+ placeholder: h,
23
+ variant: v
24
+ } = p, {
25
+ locale: s
26
+ } = b(), l = `metadata.fields.${e}`, d = i ?? "";
27
+ if (n === "multiSelect" && v === "file")
28
+ return /* @__PURE__ */ t(x, {
29
+ id: e
30
+ });
31
+ if (F)
32
+ return /* @__PURE__ */ t(o, {
33
+ advancedFilterOptionsMap: c,
34
+ formRef: a,
35
+ icon: r,
36
+ id: e,
37
+ isAdvancedFilterEnabled: !0,
38
+ name: i,
39
+ children: /* @__PURE__ */ t(A, {
40
+ fieldType: n,
41
+ fieldNamePrefix: l,
42
+ filterOptionsMap: c,
43
+ label: d,
44
+ locale: s
45
+ })
46
+ }, e);
47
+ switch (n) {
25
48
  case "date":
26
- return /* @__PURE__ */ t(n, {
27
- formRef: i,
28
- icon: l,
49
+ return /* @__PURE__ */ t(o, {
50
+ formRef: a,
51
+ icon: r,
29
52
  id: e,
30
- name: a,
31
- children: /* @__PURE__ */ t(M, {
32
- canUseRelativeDates: d,
33
- customDateFilterOptions: s,
53
+ name: i,
54
+ children: /* @__PURE__ */ t(S, {
55
+ canUseRelativeDates: m,
56
+ customDateFilterOptions: u,
34
57
  direction: "vertical",
35
- fieldNamePrefix: r,
36
- label: a,
37
- locale: F
58
+ fieldNamePrefix: l,
59
+ label: d,
60
+ locale: s
38
61
  })
39
62
  }, e);
40
63
  case "float":
41
- return /* @__PURE__ */ t(n, {
42
- formRef: i,
43
- icon: l,
64
+ return /* @__PURE__ */ t(o, {
65
+ formRef: a,
66
+ icon: r,
44
67
  id: e,
45
- name: a,
46
- children: /* @__PURE__ */ t(h, {
47
- fieldNamePrefix: r,
48
- label: a
68
+ name: i,
69
+ children: /* @__PURE__ */ t(C, {
70
+ fieldNamePrefix: l,
71
+ label: d
49
72
  })
50
73
  }, e);
51
74
  case "string":
52
- return /* @__PURE__ */ t(n, {
53
- formRef: i,
54
- icon: l,
75
+ return /* @__PURE__ */ t(o, {
76
+ formRef: a,
77
+ icon: r,
55
78
  id: e,
56
- name: a,
57
- children: /* @__PURE__ */ t(f, {
58
- fieldNamePrefix: r,
59
- label: a
79
+ name: i,
80
+ children: /* @__PURE__ */ t(M, {
81
+ fieldNamePrefix: l,
82
+ label: d
60
83
  })
61
84
  }, e);
62
85
  case "multiSelect":
63
- if (u === "file")
64
- return /* @__PURE__ */ t(b, {
65
- id: e
66
- });
67
- // Non file variant multiselects falls through as enum
68
86
  case "enum":
69
- return /* @__PURE__ */ t(v, {
70
- fieldNamePrefix: r,
71
- formRef: i,
72
- icon: l,
87
+ return /* @__PURE__ */ t(D, {
88
+ fieldNamePrefix: l,
89
+ formRef: a,
90
+ icon: r,
73
91
  id: e,
74
- name: a,
75
- options: m,
76
- placeholder: p,
77
- type: o
92
+ name: i,
93
+ options: f,
94
+ placeholder: h,
95
+ type: n
78
96
  });
79
97
  default:
80
98
  return null;
81
99
  }
82
100
  };
83
101
  export {
84
- w as MetadataFilterChip,
85
- w as default
102
+ N as MetadataFilterChip,
103
+ N as default
86
104
  };
@@ -9,7 +9,7 @@ const R = ({
9
9
  formRef: C,
10
10
  icon: m,
11
11
  id: i,
12
- name: h,
12
+ name: h = "",
13
13
  options: f,
14
14
  type: l,
15
15
  placeholder: n
@@ -0,0 +1,41 @@
1
+ import { useState as p, useCallback as n, useMemo as A } from "react";
2
+ import { useIntl as C } from "react-intl";
3
+ import { isBlankOrNotBlankFilter as v } from "./is-blank-or-not-blank-filter.js";
4
+ import O from "./messages.js";
5
+ const b = ({
6
+ name: e,
7
+ advancedFilterOptionsMap: s,
8
+ initialAdvancedFilterOption: l
9
+ }) => {
10
+ const {
11
+ formatMessage: a
12
+ } = C(), [r, i] = p(l), [t, c] = p(l), d = n((o) => {
13
+ i(o);
14
+ }, []), m = n(() => {
15
+ c(r);
16
+ }, [r]), u = n(() => {
17
+ i(t);
18
+ }, [t]), h = n(() => {
19
+ i(void 0), c(void 0);
20
+ }, []), f = A(() => {
21
+ if (!t || !v(t))
22
+ return e;
23
+ const [, o] = s?.find(([F]) => F === t) ?? [];
24
+ return o ? a(O.chipNameWithFilterOption, {
25
+ name: e,
26
+ optionLabel: o
27
+ }) : e;
28
+ }, [e, t, s, a]);
29
+ return {
30
+ currentAdvancedFilterOption: r,
31
+ appliedAdvancedFilterOption: t,
32
+ dynamicDisplayName: f,
33
+ handleAdvancedFilterOptionChange: d,
34
+ handleApply: m,
35
+ handleCancel: u,
36
+ handleClear: h
37
+ };
38
+ };
39
+ export {
40
+ b as useFormFilterChip
41
+ };
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "সকল ফিল্টার",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "প্রয়োগ করুন",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "পরিষ্কার করুন",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "ফাইলের ধরন",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "কিওয়ার্ড লিখুন",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Alle filtre",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Anvend",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Ryd",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Filtype",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Indtast nøgleord",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Alle Filter",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Anwenden",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Leeren",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Dateityp",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Schlüsselwörter eingeben",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "All Filters",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Apply",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Clear",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "File Type",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Enter keywords",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "All Filters",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Apply",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Clear",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "File Type",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Enter keywords",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "All Filters",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Apply",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Clear",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "File Type",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Enter keywords",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "All Filters",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Apply",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Clear",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "File Type",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Enter keywords",
@@ -18,6 +18,8 @@ groupSharedFeatures.metadataView.filterRow.AllFilters = All Filters
18
18
  groupSharedFeatures.metadataView.filterRow.applyButton = Apply
19
19
  # Label for a filter chip that includes the name and count of selected options
20
20
  groupSharedFeatures.metadataView.filterRow.chipNameWithCount = {name} ({count})
21
+ # Label for a filter chip showing the field name and active filter option, e.g. "Modified - Is blank"
22
+ groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption = {name} - {optionLabel}
21
23
  # Button label to clear the current input in a textarea
22
24
  groupSharedFeatures.metadataView.filterRow.clearButton = Clear
23
25
  # Title for the file type filter group
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "⟦萬萬萬 Áĺĺ ₣їļτёŗş 國國國⟧",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "⟦萬 ΆΡΡļÿ 國⟧",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "⟦萬萬萬 {name} ({count}) 國國國⟧",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "⟦萬 Ċľéåя 國⟧",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "⟦萬萬 ₣ĩĺė ŦỳΡé 國國⟧",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "⟦萬萬萬萬 Σņŧεѓ κĕýшοгďś 國國國國⟧",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Todos los filtros",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Aplicar",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Eliminar",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Tipo de archivo",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Introducir palabras clave",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Todos los filtros",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Aplicar",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Eliminar",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Tipo de archivo",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Introducir palabras clave",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Kaikki suodattimet",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Käytä",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Tyhjennä",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Tiedostotyyppi",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Kirjoita hakusanat",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Tous les filtres",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "OK",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Effacer",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Type de fichier",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Saisir des mots-clés",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Tous les filtres",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "OK",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Effacer",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Type de fichier",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Saisir des mots-clés",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "सभी फ़िल्टर्स",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "लागू करें",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "साफ़ करें",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "फ़ाइल का प्रकार",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "कीवर्ड्स दर्ज करें",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Tutti i filtri",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Applica",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Cancella",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Tipo di file",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Inserisci parole chiave",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "すべてのフィルタ",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "適用",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "クリア",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "ファイルの種類",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "キーワードを入力",
@@ -1 +1 @@
1
- [{"id":"groupSharedFeatures.metadataView.filterRow.applyButton","description":"Button label to apply the current input as a filter to the metadata table","defaultMessage":"Apply"},{"id":"groupSharedFeatures.metadataView.filterRow.clearButton","description":"Button label to clear the current input in a textarea","defaultMessage":"Clear"},{"id":"groupSharedFeatures.metadataView.filterRow.textInputPlaceholder","description":"Placeholder text for the input field in the filter row","defaultMessage":"Set Value"},{"id":"groupSharedFeatures.metadataView.filterRow.AllFilters","description":"Button label to open the sidepanel with all filters","defaultMessage":"All Filters"},{"id":"groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder","description":"Placeholder text for the keyword search filter","defaultMessage":"Enter keywords"},{"id":"groupSharedFeatures.metadataView.filterRow.chipNameWithCount","description":"Label for a filter chip that includes the name and count of selected options","defaultMessage":"{name} ({count})"},{"id":"groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle","description":"Title for the file type filter group","defaultMessage":"File Type"},{"id":"groupSharedFeatures.metadataView.filterRow.locationFilterTitle","description":"Title for the location filter group","defaultMessage":"Location"}]
1
+ [{"id":"groupSharedFeatures.metadataView.filterRow.applyButton","description":"Button label to apply the current input as a filter to the metadata table","defaultMessage":"Apply"},{"id":"groupSharedFeatures.metadataView.filterRow.clearButton","description":"Button label to clear the current input in a textarea","defaultMessage":"Clear"},{"id":"groupSharedFeatures.metadataView.filterRow.textInputPlaceholder","description":"Placeholder text for the input field in the filter row","defaultMessage":"Set Value"},{"id":"groupSharedFeatures.metadataView.filterRow.AllFilters","description":"Button label to open the sidepanel with all filters","defaultMessage":"All Filters"},{"id":"groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder","description":"Placeholder text for the keyword search filter","defaultMessage":"Enter keywords"},{"id":"groupSharedFeatures.metadataView.filterRow.chipNameWithCount","description":"Label for a filter chip that includes the name and count of selected options","defaultMessage":"{name} ({count})"},{"id":"groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle","description":"Title for the file type filter group","defaultMessage":"File Type"},{"id":"groupSharedFeatures.metadataView.filterRow.locationFilterTitle","description":"Title for the location filter group","defaultMessage":"Location"},{"id":"groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption","description":"Label for a filter chip showing the field name and active filter option, e.g. \"Modified - Is blank\"","defaultMessage":"{name} - {optionLabel}"}]
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "모든 필터",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "적용",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name}({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "지우기",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "파일 유형",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "키워드 입력",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Alle filtre",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Bruk",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Tøm",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Filtype",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Skriv inn søkeord",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Alle filters",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Toepassen",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Wissen",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Bestandstype",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Zoekwoorden invoeren",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Wszystkie filtry",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Zastosuj",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Wyczyść",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Typ pliku",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Wprowadź słowa kluczowe",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Todos os filtros",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Aplicar",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Limpar",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Tipo de arquivo",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Inserir palavras-chave",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Все фильтры",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Применить",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Очистить",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Тип файла",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Введите ключевые слова",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Alla filter",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Tillämpa",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Rensa",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Filtyp",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Ange nyckelord",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "Tüm Filtreler",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "Uygula",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "Temizle",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "Dosya Türü",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "Anahtar kelimeleri girin",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "所有筛选条件",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "应用程序",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "清除",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "文件类型",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "输入关键字",
@@ -9,6 +9,7 @@ export default {
9
9
  "groupSharedFeatures.metadataView.filterRow.AllFilters": "全部篩選條件",
10
10
  "groupSharedFeatures.metadataView.filterRow.applyButton": "套用",
11
11
  "groupSharedFeatures.metadataView.filterRow.chipNameWithCount": "{name} ({count})",
12
+ "groupSharedFeatures.metadataView.filterRow.chipNameWithFilterOption": "{name} - {optionLabel}",
12
13
  "groupSharedFeatures.metadataView.filterRow.clearButton": "清除",
13
14
  "groupSharedFeatures.metadataView.filterRow.fileTypeFilterTitle": "檔案類型",
14
15
  "groupSharedFeatures.metadataView.filterRow.keywordSearchFilterPlaceholder": "輸入關鍵字",
@@ -0,0 +1,12 @@
1
+ import { AdvancedFilterOptionsMap, FilterOption } from './types';
2
+ type BaseAdvancedFieldProps = {
3
+ fieldNamePrefix: string;
4
+ filterOptionsMap?: AdvancedFilterOptionsMap;
5
+ label: string;
6
+ };
7
+ type AdvancedFieldContentProps = BaseAdvancedFieldProps & {
8
+ fieldType: FilterOption['fieldType'];
9
+ locale: string;
10
+ };
11
+ export declare const AdvancedFieldContent: ({ fieldType, fieldNamePrefix, filterOptionsMap, label, locale, }: AdvancedFieldContentProps) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,8 @@
1
+ import { FilterKey } from '@box/metadata-filter';
2
+ export type AdvancedFilterContextValue = {
3
+ currentOption: FilterKey | undefined;
4
+ onOptionChange: (option: FilterKey) => void;
5
+ resetKey: number;
6
+ };
7
+ export declare const AdvancedFilterContext: import('react').Context<AdvancedFilterContextValue>;
8
+ export declare const useAdvancedFilterContext: () => AdvancedFilterContextValue;
@@ -1,8 +1,11 @@
1
+ import { AdvancedFilterOptionsMap } from './types';
1
2
  export interface FormFilterChipProps {
2
3
  children: React.ReactNode;
3
4
  formRef: React.RefObject<HTMLFormElement>;
4
5
  icon?: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement>, 'ref'> & React.RefAttributes<SVGSVGElement>>;
5
6
  id: string;
6
- name: string;
7
+ name?: string;
8
+ isAdvancedFilterEnabled?: boolean;
9
+ advancedFilterOptionsMap?: AdvancedFilterOptionsMap;
7
10
  }
8
- export declare const FormFilterChip: ({ children, formRef, icon, id, name }: FormFilterChipProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const FormFilterChip: ({ children, formRef, icon, id, name, isAdvancedFilterEnabled, advancedFilterOptionsMap, }: FormFilterChipProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,9 @@
1
1
  import { MetadataFormFieldValue } from '@box/metadata-filter';
2
2
  import { MetadataFieldType } from '../../types';
3
3
  import { FilterOption, InitialFilterValues, MetadataFormValues } from './types';
4
- export declare const getDefaultFieldValue: (fieldType?: MetadataFieldType) => MetadataFormFieldValue;
4
+ export declare const getDefaultFieldValue: ({ fieldType, isAdvancedFilterEnabled, }: {
5
+ fieldType?: MetadataFieldType;
6
+ isAdvancedFilterEnabled?: boolean;
7
+ }) => MetadataFormFieldValue;
5
8
  export declare const inferFieldType: (value: MetadataFormFieldValue) => MetadataFieldType;
6
9
  export declare const getInitialFieldValues: (filterOptions: FilterOption[], customFieldValues?: InitialFilterValues) => MetadataFormValues;
@@ -0,0 +1,2 @@
1
+ import { FilterKey } from '@box/metadata-filter';
2
+ export declare const isBlankOrNotBlankFilter: (option?: FilterKey) => boolean;
@@ -1,5 +1,8 @@
1
- import { MetadataFormFieldValue } from '@box/metadata-filter';
1
+ import { FilterKey, MetadataFormFieldValue } from '@box/metadata-filter';
2
+ export declare const extractAdvancedFilterOption: (value: MetadataFormFieldValue) => FilterKey | undefined;
2
3
  /**
3
- * Returns true if the given field value is considered "selected" (i.e., not empty)
4
+ * Returns true if the given field value is considered "selected" (i.e., not empty).
5
+ * Also returns true when an isBlank/isNotBlank advanced filter option is applied,
6
+ * since those filters are active even when the field value itself is empty.
4
7
  */
5
- export declare function isFilterSelected(value: MetadataFormFieldValue): boolean;
8
+ export declare const isFilterSelected: (value: MetadataFormFieldValue) => boolean;
@@ -39,5 +39,10 @@ declare const messages: {
39
39
  description: string;
40
40
  id: string;
41
41
  };
42
+ chipNameWithFilterOption: {
43
+ defaultMessage: string;
44
+ description: string;
45
+ id: string;
46
+ };
42
47
  };
43
48
  export default messages;
@@ -4,7 +4,7 @@ export interface SelectFilterChipProps {
4
4
  formRef: React.RefObject<HTMLFormElement>;
5
5
  icon?: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement>, 'ref'> & React.RefAttributes<SVGSVGElement>>;
6
6
  id: string;
7
- name: string;
7
+ name?: string;
8
8
  options?: string[];
9
9
  placeholder?: string;
10
10
  type: MetadataFieldType;
@@ -1,4 +1,4 @@
1
- import { MetadataFormFieldValue, MetadataTemplateFieldOption } from '@box/metadata-filter';
1
+ import { FilterKey, MetadataFormFieldValue, MetadataTemplateFieldOption } from '@box/metadata-filter';
2
2
  import { ReactNode } from 'react';
3
3
  import { FilterVariant, MetadataFieldType } from '../../types';
4
4
  export interface CustomDateFilterOption {
@@ -18,11 +18,14 @@ export interface FilterGroup {
18
18
  title?: string;
19
19
  toggleable: boolean;
20
20
  }
21
+ export type AdvancedFilterOptionsMap = [FilterKey, string][];
21
22
  export interface FilterOption {
22
23
  customLabels?: string[];
23
24
  fieldType: MetadataFieldType;
24
25
  icon?: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement>, 'ref'> & React.RefAttributes<SVGSVGElement>>;
25
26
  id: string;
27
+ isAdvancedFilterEnabled?: boolean;
28
+ advancedFilterOptionsMap?: AdvancedFilterOptionsMap;
26
29
  isItemMetadata?: boolean;
27
30
  name?: string;
28
31
  options?: string[];
@@ -0,0 +1,18 @@
1
+ import { FilterKey } from '@box/metadata-filter';
2
+ import { AdvancedFilterOptionsMap } from './types';
3
+ type UseFormFilterChipProps = {
4
+ name: string;
5
+ advancedFilterOptionsMap?: AdvancedFilterOptionsMap;
6
+ initialAdvancedFilterOption?: FilterKey;
7
+ };
8
+ type UseFormFilterChipResult = {
9
+ currentAdvancedFilterOption: FilterKey | undefined;
10
+ appliedAdvancedFilterOption: FilterKey | undefined;
11
+ dynamicDisplayName: string;
12
+ handleAdvancedFilterOptionChange: (option: FilterKey) => void;
13
+ handleApply: () => void;
14
+ handleCancel: () => void;
15
+ handleClear: () => void;
16
+ };
17
+ export declare const useFormFilterChip: ({ name, advancedFilterOptionsMap, initialAdvancedFilterOption, }: UseFormFilterChipProps) => UseFormFilterChipResult;
18
+ export {};
@@ -2,7 +2,7 @@ import { Item } from '@box/types';
2
2
  import { SortDirection } from 'react-aria-components';
3
3
  import { ActionBarProps } from '../components/action-bar/action-bar';
4
4
  import { FilterRowProps } from '../components/filter-row/filter-row';
5
- import { FilterGroup, FilterOption, InitialFilterValues } from '../components/filter-row/types';
5
+ import { AdvancedFilterOptionsMap, FilterGroup, FilterOption, InitialFilterValues } from '../components/filter-row/types';
6
6
  import { ItemActionMenuProps } from '../components/item-action-menu/item-action-menu';
7
7
  import { MetadataTableProps } from '../components/metadata-table';
8
8
  import { PaginationProps } from '../components/pagination/pagination';
@@ -22,6 +22,17 @@ export declare const mockFilterOptionsWithoutName: FilterOption[];
22
22
  export declare const mockFilterGroupsWithoutName: FilterGroup[];
23
23
  export declare const mockFilterOptionsWithInvalidType: FilterOption[];
24
24
  export declare const mockFilterOptionsWithSomeChipsHidden: FilterOption[];
25
+ export declare const mockAdvancedDateFilterOptionsMap: AdvancedFilterOptionsMap;
26
+ export declare const mockAdvancedFloatFilterOptionsMap: AdvancedFilterOptionsMap;
27
+ export declare const mockAdvancedMultiSelectFilterOptionsMap: AdvancedFilterOptionsMap;
28
+ export declare const mockAdvancedStringFilterOptionsMap: AdvancedFilterOptionsMap;
29
+ export declare const ADVANCED_FILTER_IDS: {
30
+ readonly modifiedAt: "modified-at-filter";
31
+ readonly fileSize: "file-size-filter";
32
+ readonly phoneNumber: "phone-number-filter";
33
+ readonly roleAdvanced: "role-advanced-filter";
34
+ };
35
+ export declare const mockAdvancedFilterOptions: FilterOption[];
25
36
  export declare const mockFilterOptionsWithEnumPlaceholder: FilterOption[];
26
37
  export declare const mockMetadata: Item[];
27
38
  export declare const mockMetadataWithThumbnail: Item[];
@@ -92,4 +103,5 @@ export type SortArgs = {
92
103
  direction: SortDirection;
93
104
  };
94
105
  export declare const defaultSortArgs: SortArgs;
106
+ export declare const mockInitialAdvancedFilterValues: InitialFilterValues;
95
107
  export declare const mockInitialFilterValues: InitialFilterValues;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/metadata-view",
3
- "version": "1.51.25",
3
+ "version": "1.52.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
6
  "@box/blueprint-web": "^13.9.3",