@contember/react-select 1.3.0-alpha.20 → 1.3.0-alpha.21

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 (81) hide show
  1. package/dist/development/components/MultiSelect.cjs +15 -8
  2. package/dist/development/components/MultiSelect.cjs.map +1 -1
  3. package/dist/development/components/MultiSelect.js +16 -9
  4. package/dist/development/components/MultiSelect.js.map +1 -1
  5. package/dist/development/components/Select.cjs +15 -8
  6. package/dist/development/components/Select.cjs.map +1 -1
  7. package/dist/development/components/Select.js +16 -9
  8. package/dist/development/components/Select.js.map +1 -1
  9. package/dist/development/components/SelectDataView.cjs +23 -5
  10. package/dist/development/components/SelectDataView.cjs.map +1 -1
  11. package/dist/development/components/SelectDataView.js +24 -6
  12. package/dist/development/components/SelectDataView.js.map +1 -1
  13. package/dist/development/components/SortableMultiSelect.cjs +30 -10
  14. package/dist/development/components/SortableMultiSelect.cjs.map +1 -1
  15. package/dist/development/components/SortableMultiSelect.js +32 -12
  16. package/dist/development/components/SortableMultiSelect.js.map +1 -1
  17. package/dist/development/contexts.cjs +5 -0
  18. package/dist/development/contexts.cjs.map +1 -1
  19. package/dist/development/contexts.js +6 -1
  20. package/dist/development/contexts.js.map +1 -1
  21. package/dist/development/hooks/useSelectFilter.cjs +31 -0
  22. package/dist/development/hooks/useSelectFilter.cjs.map +1 -0
  23. package/dist/development/hooks/useSelectFilter.js +31 -0
  24. package/dist/development/hooks/useSelectFilter.js.map +1 -0
  25. package/dist/development/index.cjs +4 -0
  26. package/dist/development/index.cjs.map +1 -1
  27. package/dist/development/index.js +6 -2
  28. package/dist/development/index.js.map +1 -1
  29. package/dist/production/components/MultiSelect.cjs +6 -3
  30. package/dist/production/components/MultiSelect.cjs.map +1 -1
  31. package/dist/production/components/MultiSelect.js +7 -4
  32. package/dist/production/components/MultiSelect.js.map +1 -1
  33. package/dist/production/components/Select.cjs +6 -3
  34. package/dist/production/components/Select.cjs.map +1 -1
  35. package/dist/production/components/Select.js +7 -4
  36. package/dist/production/components/Select.js.map +1 -1
  37. package/dist/production/components/SelectDataView.cjs +15 -1
  38. package/dist/production/components/SelectDataView.cjs.map +1 -1
  39. package/dist/production/components/SelectDataView.js +16 -2
  40. package/dist/production/components/SelectDataView.js.map +1 -1
  41. package/dist/production/components/SortableMultiSelect.cjs +19 -3
  42. package/dist/production/components/SortableMultiSelect.cjs.map +1 -1
  43. package/dist/production/components/SortableMultiSelect.js +21 -5
  44. package/dist/production/components/SortableMultiSelect.js.map +1 -1
  45. package/dist/production/contexts.cjs +5 -0
  46. package/dist/production/contexts.cjs.map +1 -1
  47. package/dist/production/contexts.js +6 -1
  48. package/dist/production/contexts.js.map +1 -1
  49. package/dist/production/hooks/useSelectFilter.cjs +31 -0
  50. package/dist/production/hooks/useSelectFilter.cjs.map +1 -0
  51. package/dist/production/hooks/useSelectFilter.js +31 -0
  52. package/dist/production/hooks/useSelectFilter.js.map +1 -0
  53. package/dist/production/index.cjs +4 -0
  54. package/dist/production/index.cjs.map +1 -1
  55. package/dist/production/index.js +6 -2
  56. package/dist/production/index.js.map +1 -1
  57. package/dist/types/components/MultiSelect.d.ts +5 -4
  58. package/dist/types/components/MultiSelect.d.ts.map +1 -1
  59. package/dist/types/components/Select.d.ts +5 -4
  60. package/dist/types/components/Select.d.ts.map +1 -1
  61. package/dist/types/components/SelectDataView.d.ts.map +1 -1
  62. package/dist/types/components/SortableMultiSelect.d.ts +5 -4
  63. package/dist/types/components/SortableMultiSelect.d.ts.map +1 -1
  64. package/dist/types/contexts.d.ts +4 -0
  65. package/dist/types/contexts.d.ts.map +1 -1
  66. package/dist/types/hooks/index.d.ts +2 -0
  67. package/dist/types/hooks/index.d.ts.map +1 -0
  68. package/dist/types/hooks/useSelectFilter.d.ts +8 -0
  69. package/dist/types/hooks/useSelectFilter.d.ts.map +1 -0
  70. package/dist/types/index.d.ts +1 -0
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +6 -6
  74. package/src/components/MultiSelect.tsx +11 -5
  75. package/src/components/Select.tsx +12 -5
  76. package/src/components/SelectDataView.tsx +15 -4
  77. package/src/components/SortableMultiSelect.tsx +41 -6
  78. package/src/contexts.ts +6 -0
  79. package/src/hooks/index.ts +1 -0
  80. package/src/hooks/useSelectFilter.ts +35 -0
  81. package/src/index.ts +1 -0
@@ -5,8 +5,11 @@ const react = require("react");
5
5
  const contexts = require("../contexts.cjs");
6
6
  const reactBinding = require("@contember/react-binding");
7
7
  const reactUtils = require("@contember/react-utils");
8
- const MultiSelect = reactBinding.Component(({ field, children, options, onSelect, onUnselect }) => {
8
+ const useSelectFilter = require("../hooks/useSelectFilter.cjs");
9
+ const MultiSelect = reactBinding.Component(({ field, children, options, onSelect, onUnselect, filterField }) => {
9
10
  const entities = reactBinding.useEntityList({ field });
11
+ options ?? (options = entities.name);
12
+ const filter = useSelectFilter.useSelectFilter({ filterField, marker: entities.getMarker() });
10
13
  const entitiesArr = react.useMemo(() => Array.from(entities), [entities]);
11
14
  const selectedEntities = react.useMemo(() => Array.from(entities).map((it) => it.id), [entities]);
12
15
  const handler = reactUtils.useReferentiallyStableCallback((entity, action = "toggle") => {
@@ -25,27 +28,31 @@ const MultiSelect = reactBinding.Component(({ field, children, options, onSelect
25
28
  const isSelected = react.useCallback((entity) => {
26
29
  return selectedEntities.includes(entity.id);
27
30
  }, [selectedEntities]);
28
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children }, void 0, false, {
31
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsFilterContext.Provider, { value: filter, children }, void 0, false, {
29
32
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
30
- lineNumber: 41,
33
+ lineNumber: 46,
34
+ columnNumber: 7
35
+ }, void 0) }, void 0, false, {
36
+ fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
37
+ lineNumber: 45,
31
38
  columnNumber: 6
32
39
  }, void 0) }, void 0, false, {
33
40
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
34
- lineNumber: 40,
41
+ lineNumber: 44,
35
42
  columnNumber: 5
36
43
  }, void 0) }, void 0, false, {
37
44
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
38
- lineNumber: 39,
45
+ lineNumber: 43,
39
46
  columnNumber: 4
40
47
  }, void 0) }, void 0, false, {
41
48
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
42
- lineNumber: 38,
49
+ lineNumber: 42,
43
50
  columnNumber: 3
44
51
  }, void 0);
45
52
  }, ({ field, children }) => {
46
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasMany, { field, children }, void 0, false, {
53
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasMany, { field, expectedMutation: "connectOrDisconnect", children }, void 0, false, {
47
54
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
48
- lineNumber: 50,
55
+ lineNumber: 56,
49
56
  columnNumber: 3
50
57
  }, void 0);
51
58
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.cjs","sources":["../../../src/components/MultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext } from '../contexts'\nimport { Component, EntityAccessor, HasMany, SugaredQualifiedEntityList, SugaredRelativeEntityList, useEntityList } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\n\nexport type MultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectEvents\n\nexport const MultiSelect = Component(({ field, children, options, onSelect, onUnselect }: MultiSelectProps) => {\n\tconst entities = useEntityList({ field })\n\tconst entitiesArr = useMemo(() => Array.from(entities), [entities])\n\tconst selectedEntities = useMemo(() => Array.from(entities).map(it => it.id), [entities])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tentities.disconnectEntity(entity)\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tentities.connectEntity(entity)\n\t\t\tonSelect?.(entity)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasMany field={field}>\n\t\t\t{children}\n\t\t</HasMany>\n\t)\n})\n\n"],"names":["Component","useEntityList","useMemo","useReferentiallyStableCallback","isSelected","useCallback","jsxDEV","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","this","HasMany"],"mappings":";;;;;;;AAca,MAAA,cAAcA,aAAAA,UAAU,CAAC,EAAE,OAAO,UAAU,SAAS,UAAU,iBAAmC;AAC9G,QAAM,WAAWC,aAAAA,cAAc,EAAE,MAAO,CAAA;AAClC,QAAA,cAAcC,cAAQ,MAAM,MAAM,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAClE,QAAM,mBAAmBA,MAAA,QAAQ,MAAM,MAAM,KAAK,QAAQ,EAAE,IAAI,CAAA,OAAM,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;AAExF,QAAM,UAAUC,WAAA,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMC,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,eAAS,iBAAiB,MAAM;AAChC,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,eAAS,cAAc,MAAM;AAC7B,iBAAW,MAAM;AAAA,IAClB;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,kBAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAGpB,SAAAC,8BAAA,OAACC,SAA6B,6BAAA,UAA7B,EAAsC,OAAO,aAC7C,UAACD,8BAAAA,OAAAE,SAAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,+CAACC,mCAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAAH,8BAAA,OAACI,8BAAqB,UAArB,EAA8B,OAAO,SACpC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAQA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAE1B,SAAAL,8BAAAA,OAACM,aAAAA,SAAQ,EAAA,OACP,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAD,MAAA;AAEF,CAAC;;"}
1
+ {"version":3,"file":"MultiSelect.cjs","sources":["../../../src/components/MultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext, SelectOptionsFilterContext } from '../contexts'\nimport { Component, EntityAccessor, HasMany, SugaredQualifiedEntityList, SugaredRelativeEntityList, useEntityList } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\nimport { SelectFilterFieldProps, useSelectFilter } from '../hooks'\n\nexport type MultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions?: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectFilterFieldProps\n\t& SelectEvents\n\nexport const MultiSelect = Component(({ field, children, options, onSelect, onUnselect, filterField }: MultiSelectProps) => {\n\tconst entities = useEntityList({ field })\n\toptions ??= entities.name\n\tconst filter = useSelectFilter({ filterField, marker: entities.getMarker() })\n\tconst entitiesArr = useMemo(() => Array.from(entities), [entities])\n\tconst selectedEntities = useMemo(() => Array.from(entities).map(it => it.id), [entities])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tentities.disconnectEntity(entity)\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tentities.connectEntity(entity)\n\t\t\tonSelect?.(entity)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t<SelectOptionsFilterContext.Provider value={filter}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</SelectOptionsFilterContext.Provider>\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasMany field={field} expectedMutation=\"connectOrDisconnect\">\n\t\t\t{children}\n\t\t</HasMany>\n\t)\n})\n\n"],"names":["Component","useEntityList","useSelectFilter","useMemo","useReferentiallyStableCallback","isSelected","useCallback","jsxDEV","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","SelectOptionsFilterContext","this","HasMany"],"mappings":";;;;;;;;AAgBa,MAAA,cAAcA,aAAAA,UAAU,CAAC,EAAE,OAAO,UAAU,SAAS,UAAU,YAAY,kBAAoC;AAC3H,QAAM,WAAWC,aAAAA,cAAc,EAAE,MAAO,CAAA;AACxC,wBAAY,SAAS;AACf,QAAA,SAASC,gCAAgB,EAAE,aAAa,QAAQ,SAAS,aAAa;AACtE,QAAA,cAAcC,cAAQ,MAAM,MAAM,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAClE,QAAM,mBAAmBA,MAAA,QAAQ,MAAM,MAAM,KAAK,QAAQ,EAAE,IAAI,CAAA,OAAM,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;AAExF,QAAM,UAAUC,WAAA,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMC,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,eAAS,iBAAiB,MAAM;AAChC,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,eAAS,cAAc,MAAM;AAC7B,iBAAW,MAAM;AAAA,IAClB;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,kBAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAErB,SACEC,8BAAAA,OAAAC,SAAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAACD,8BAAA,OAAAE,SAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,+CAACC,SAAAA,0BAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAAH,8BAAAA,OAACI,SAAqB,qBAAA,UAArB,EAA8B,OAAO,SACrC,UAAAJ,8BAAAA,OAACK,SAAAA,2BAA2B,UAA3B,EAAoC,OAAO,QAC1C,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAUA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAC3B,SACEN,8BAAA,OAAAO,sBAAA,EAAQ,OAAc,kBAAiB,uBACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAD,MAAA;AAEF,CAAC;;"}
@@ -1,10 +1,13 @@
1
1
  import { jsxDEV } from "react/jsx-dev-runtime";
2
2
  import { useMemo, useCallback } from "react";
3
- import { SelectCurrentEntitiesContext, SelectIsSelectedContext, SelectHandleSelectContext, SelectOptionsContext } from "../contexts.js";
3
+ import { SelectCurrentEntitiesContext, SelectIsSelectedContext, SelectHandleSelectContext, SelectOptionsContext, SelectOptionsFilterContext } from "../contexts.js";
4
4
  import { Component, useEntityList, HasMany } from "@contember/react-binding";
5
5
  import { useReferentiallyStableCallback } from "@contember/react-utils";
6
- const MultiSelect = Component(({ field, children, options, onSelect, onUnselect }) => {
6
+ import { useSelectFilter } from "../hooks/useSelectFilter.js";
7
+ const MultiSelect = Component(({ field, children, options, onSelect, onUnselect, filterField }) => {
7
8
  const entities = useEntityList({ field });
9
+ options ?? (options = entities.name);
10
+ const filter = useSelectFilter({ filterField, marker: entities.getMarker() });
8
11
  const entitiesArr = useMemo(() => Array.from(entities), [entities]);
9
12
  const selectedEntities = useMemo(() => Array.from(entities).map((it) => it.id), [entities]);
10
13
  const handler = useReferentiallyStableCallback((entity, action = "toggle") => {
@@ -23,27 +26,31 @@ const MultiSelect = Component(({ field, children, options, onSelect, onUnselect
23
26
  const isSelected = useCallback((entity) => {
24
27
  return selectedEntities.includes(entity.id);
25
28
  }, [selectedEntities]);
26
- return /* @__PURE__ */ jsxDEV(SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDEV(SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDEV(SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDEV(SelectOptionsContext.Provider, { value: options, children }, void 0, false, {
29
+ return /* @__PURE__ */ jsxDEV(SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDEV(SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDEV(SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDEV(SelectOptionsContext.Provider, { value: options, children: /* @__PURE__ */ jsxDEV(SelectOptionsFilterContext.Provider, { value: filter, children }, void 0, false, {
27
30
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
28
- lineNumber: 41,
31
+ lineNumber: 46,
32
+ columnNumber: 7
33
+ }, void 0) }, void 0, false, {
34
+ fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
35
+ lineNumber: 45,
29
36
  columnNumber: 6
30
37
  }, void 0) }, void 0, false, {
31
38
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
32
- lineNumber: 40,
39
+ lineNumber: 44,
33
40
  columnNumber: 5
34
41
  }, void 0) }, void 0, false, {
35
42
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
36
- lineNumber: 39,
43
+ lineNumber: 43,
37
44
  columnNumber: 4
38
45
  }, void 0) }, void 0, false, {
39
46
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
40
- lineNumber: 38,
47
+ lineNumber: 42,
41
48
  columnNumber: 3
42
49
  }, void 0);
43
50
  }, ({ field, children }) => {
44
- return /* @__PURE__ */ jsxDEV(HasMany, { field, children }, void 0, false, {
51
+ return /* @__PURE__ */ jsxDEV(HasMany, { field, expectedMutation: "connectOrDisconnect", children }, void 0, false, {
45
52
  fileName: "/__w/interface/interface/packages/react-select/src/components/MultiSelect.tsx",
46
- lineNumber: 50,
53
+ lineNumber: 56,
47
54
  columnNumber: 3
48
55
  }, void 0);
49
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.js","sources":["../../../src/components/MultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext } from '../contexts'\nimport { Component, EntityAccessor, HasMany, SugaredQualifiedEntityList, SugaredRelativeEntityList, useEntityList } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\n\nexport type MultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectEvents\n\nexport const MultiSelect = Component(({ field, children, options, onSelect, onUnselect }: MultiSelectProps) => {\n\tconst entities = useEntityList({ field })\n\tconst entitiesArr = useMemo(() => Array.from(entities), [entities])\n\tconst selectedEntities = useMemo(() => Array.from(entities).map(it => it.id), [entities])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tentities.disconnectEntity(entity)\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tentities.connectEntity(entity)\n\t\t\tonSelect?.(entity)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasMany field={field}>\n\t\t\t{children}\n\t\t</HasMany>\n\t)\n})\n\n"],"names":["isSelected","this"],"mappings":";;;;;AAca,MAAA,cAAc,UAAU,CAAC,EAAE,OAAO,UAAU,SAAS,UAAU,iBAAmC;AAC9G,QAAM,WAAW,cAAc,EAAE,MAAO,CAAA;AAClC,QAAA,cAAc,QAAQ,MAAM,MAAM,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAClE,QAAM,mBAAmB,QAAQ,MAAM,MAAM,KAAK,QAAQ,EAAE,IAAI,CAAA,OAAM,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;AAExF,QAAM,UAAU,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMA,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,eAAS,iBAAiB,MAAM;AAChC,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,eAAS,cAAc,MAAM;AAC7B,iBAAW,MAAM;AAAA,IAClB;AAAA,EAAA,CACA;AACK,QAAA,aAAa,YAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAGpB,SAAA,uBAAC,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAAC,uBAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,iCAAC,0BAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAA,uBAAC,qBAAqB,UAArB,EAA8B,OAAO,SACpC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAQA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAE1B,SAAA,uBAAC,SAAQ,EAAA,OACP,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF,CAAC;"}
1
+ {"version":3,"file":"MultiSelect.js","sources":["../../../src/components/MultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext, SelectOptionsFilterContext } from '../contexts'\nimport { Component, EntityAccessor, HasMany, SugaredQualifiedEntityList, SugaredRelativeEntityList, useEntityList } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\nimport { SelectFilterFieldProps, useSelectFilter } from '../hooks'\n\nexport type MultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions?: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectFilterFieldProps\n\t& SelectEvents\n\nexport const MultiSelect = Component(({ field, children, options, onSelect, onUnselect, filterField }: MultiSelectProps) => {\n\tconst entities = useEntityList({ field })\n\toptions ??= entities.name\n\tconst filter = useSelectFilter({ filterField, marker: entities.getMarker() })\n\tconst entitiesArr = useMemo(() => Array.from(entities), [entities])\n\tconst selectedEntities = useMemo(() => Array.from(entities).map(it => it.id), [entities])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tentities.disconnectEntity(entity)\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tentities.connectEntity(entity)\n\t\t\tonSelect?.(entity)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t<SelectOptionsFilterContext.Provider value={filter}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</SelectOptionsFilterContext.Provider>\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasMany field={field} expectedMutation=\"connectOrDisconnect\">\n\t\t\t{children}\n\t\t</HasMany>\n\t)\n})\n\n"],"names":["isSelected","this"],"mappings":";;;;;;AAgBa,MAAA,cAAc,UAAU,CAAC,EAAE,OAAO,UAAU,SAAS,UAAU,YAAY,kBAAoC;AAC3H,QAAM,WAAW,cAAc,EAAE,MAAO,CAAA;AACxC,wBAAY,SAAS;AACf,QAAA,SAAS,gBAAgB,EAAE,aAAa,QAAQ,SAAS,aAAa;AACtE,QAAA,cAAc,QAAQ,MAAM,MAAM,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAClE,QAAM,mBAAmB,QAAQ,MAAM,MAAM,KAAK,QAAQ,EAAE,IAAI,CAAA,OAAM,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;AAExF,QAAM,UAAU,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMA,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,eAAS,iBAAiB,MAAM;AAChC,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,eAAS,cAAc,MAAM;AAC7B,iBAAW,MAAM;AAAA,IAClB;AAAA,EAAA,CACA;AACK,QAAA,aAAa,YAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAErB,SACE,uBAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAAC,uBAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,iCAAC,0BAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAA,uBAAC,qBAAqB,UAArB,EAA8B,OAAO,SACrC,UAAA,uBAAC,2BAA2B,UAA3B,EAAoC,OAAO,QAC1C,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAUA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAC3B,SACE,uBAAA,SAAA,EAAQ,OAAc,kBAAiB,uBACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF,CAAC;"}
@@ -5,9 +5,12 @@ const react = require("react");
5
5
  const contexts = require("../contexts.cjs");
6
6
  const reactBinding = require("@contember/react-binding");
7
7
  const reactUtils = require("@contember/react-utils");
8
- const Select = reactBinding.Component(({ field, children, onUnselect, onSelect, options }) => {
8
+ const useSelectFilter = require("../hooks/useSelectFilter.cjs");
9
+ const Select = reactBinding.Component(({ field, children, onUnselect, onSelect, options, filterField }) => {
9
10
  const entity = reactBinding.useEntity();
10
11
  const selectedEntity = entity.getEntity({ field });
12
+ options ?? (options = selectedEntity.name);
13
+ const filter = useSelectFilter.useSelectFilter({ filterField, marker: selectedEntity.getMarker() });
11
14
  const entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges;
12
15
  const entitiesArr = react.useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity]);
13
16
  const handleSelect = reactUtils.useReferentiallyStableCallback((selected, action = "toggle") => {
@@ -23,27 +26,31 @@ const Select = reactBinding.Component(({ field, children, onUnselect, onSelect,
23
26
  }
24
27
  });
25
28
  const isSelected = react.useCallback((entity2) => entity2.id === selectedEntity.id, [selectedEntity.id]);
26
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handleSelect, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children }, void 0, false, {
29
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handleSelect, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsFilterContext.Provider, { value: filter, children }, void 0, false, {
27
30
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
28
- lineNumber: 39,
31
+ lineNumber: 45,
32
+ columnNumber: 7
33
+ }, void 0) }, void 0, false, {
34
+ fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
35
+ lineNumber: 44,
29
36
  columnNumber: 6
30
37
  }, void 0) }, void 0, false, {
31
38
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
32
- lineNumber: 38,
39
+ lineNumber: 43,
33
40
  columnNumber: 5
34
41
  }, void 0) }, void 0, false, {
35
42
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
36
- lineNumber: 37,
43
+ lineNumber: 42,
37
44
  columnNumber: 4
38
45
  }, void 0) }, void 0, false, {
39
46
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
40
- lineNumber: 36,
47
+ lineNumber: 41,
41
48
  columnNumber: 3
42
49
  }, void 0);
43
50
  }, ({ field, children }) => {
44
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasOne, { field, children }, void 0, false, {
51
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasOne, { field, expectedMutation: "connectOrDisconnect", children }, void 0, false, {
45
52
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
46
- lineNumber: 48,
53
+ lineNumber: 55,
47
54
  columnNumber: 3
48
55
  }, void 0);
49
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Select.cjs","sources":["../../../src/components/Select.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext } from '../contexts'\nimport { Component, EntityAccessor, HasOne, SugaredQualifiedEntityList, SugaredRelativeSingleEntity, useEntity } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\n\nexport type SelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeSingleEntity['field']\n\t\toptions: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectEvents\n\nexport const Select = Component(({ field, children, onUnselect, onSelect, options }: SelectProps) => {\n\tconst entity = useEntity()\n\tconst selectedEntity = entity.getEntity({ field })\n\tconst entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges\n\tconst entitiesArr = useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity])\n\n\tconst handleSelect = useReferentiallyStableCallback<SelectHandler>((selected, action = 'toggle') => {\n\t\tif (action === 'toggle') {\n\t\t\taction = selected.id === selectedEntity.id ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect') {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t\tonUnselect?.(selected)\n\t\t} else if (action === 'select') {\n\t\t\tentity.connectEntityAtField({ field }, selected)\n\t\t\tonSelect?.(selected)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => entity.id === selectedEntity.id, [selectedEntity.id])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handleSelect}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasOne field={field}>\n\t\t\t{children}\n\t\t</HasOne>\n\t)\n})\n\n"],"names":["Component","useEntity","useMemo","useReferentiallyStableCallback","useCallback","entity","jsxDEV","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","this","HasOne"],"mappings":";;;;;;;AAca,MAAA,SAASA,aAAAA,UAAU,CAAC,EAAE,OAAO,UAAU,YAAY,UAAU,cAA2B;AACpG,QAAM,SAASC,aAAAA;AACf,QAAM,iBAAiB,OAAO,UAAU,EAAE,MAAO,CAAA;AAC3C,QAAA,eAAe,eAAe,kBAAkB,eAAe;AACrE,QAAM,cAAcC,MAAAA,QAAQ,MAAM,eAAe,CAAC,cAAc,IAAI,CAAA,GAAI,CAAC,cAAc,cAAc,CAAC;AAEtG,QAAM,eAAeC,WAAA,+BAA8C,CAAC,UAAU,SAAS,aAAa;AACnG,QAAI,WAAW,UAAU;AACxB,eAAS,SAAS,OAAO,eAAe,KAAK,aAAa;AAAA,IAC3D;AACA,QAAI,WAAW,YAAY;AACnB,aAAA,wBAAwB,EAAE,MAAA,CAAO;AACxC,mBAAa,QAAQ;AAAA,IAAA,WACX,WAAW,UAAU;AAC/B,aAAO,qBAAqB,EAAE,MAAM,GAAG,QAAQ;AAC/C,iBAAW,QAAQ;AAAA,IACpB;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,MAAAA,YAAY,CAACC,YAA2BA,QAAO,OAAO,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;AAG9G,SAAAC,8BAAA,OAACC,SAA6B,6BAAA,UAA7B,EAAsC,OAAO,aAC7C,UAACD,8BAAAA,OAAAE,SAAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,+CAACC,mCAA0B,UAA1B,EAAmC,OAAO,cAC1C,UAAAH,8BAAA,OAACI,8BAAqB,UAArB,EAA8B,OAAO,SACpC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAQA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAE1B,SAAAL,8BAAAA,OAACM,aAAAA,QAAO,EAAA,OACN,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAD,MAAA;AAEF,CAAC;;"}
1
+ {"version":3,"file":"Select.cjs","sources":["../../../src/components/Select.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext, SelectOptionsFilterContext } from '../contexts'\nimport { Component, EntityAccessor, HasOne, SugaredQualifiedEntityList, SugaredRelativeSingleEntity, useEntity } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\nimport { SelectFilterFieldProps, useSelectFilter } from '../hooks'\n\nexport type SelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeSingleEntity['field']\n\t\toptions?: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectFilterFieldProps\n\t& SelectEvents\n\nexport const Select = Component(({ field, children, onUnselect, onSelect, options, filterField }: SelectProps) => {\n\tconst entity = useEntity()\n\tconst selectedEntity = entity.getEntity({ field })\n\toptions ??= selectedEntity.name\n\tconst filter = useSelectFilter({ filterField, marker: selectedEntity.getMarker() })\n\n\tconst entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges\n\tconst entitiesArr = useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity])\n\n\tconst handleSelect = useReferentiallyStableCallback<SelectHandler>((selected, action = 'toggle') => {\n\t\tif (action === 'toggle') {\n\t\t\taction = selected.id === selectedEntity.id ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect') {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t\tonUnselect?.(selected)\n\t\t} else if (action === 'select') {\n\t\t\tentity.connectEntityAtField({ field }, selected)\n\t\t\tonSelect?.(selected)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => entity.id === selectedEntity.id, [selectedEntity.id])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handleSelect}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t<SelectOptionsFilterContext.Provider value={filter}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</SelectOptionsFilterContext.Provider>\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasOne field={field} expectedMutation=\"connectOrDisconnect\">\n\t\t\t{children}\n\t\t</HasOne>\n\t)\n})\n\n"],"names":["Component","useEntity","useSelectFilter","useMemo","useReferentiallyStableCallback","useCallback","entity","jsxDEV","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","SelectOptionsFilterContext","this","HasOne"],"mappings":";;;;;;;;AAgBa,MAAA,SAASA,aAAAA,UAAU,CAAC,EAAE,OAAO,UAAU,YAAY,UAAU,SAAS,kBAA+B;AACjH,QAAM,SAASC,aAAAA;AACf,QAAM,iBAAiB,OAAO,UAAU,EAAE,MAAO,CAAA;AACjD,wBAAY,eAAe;AACrB,QAAA,SAASC,gCAAgB,EAAE,aAAa,QAAQ,eAAe,aAAa;AAE5E,QAAA,eAAe,eAAe,kBAAkB,eAAe;AACrE,QAAM,cAAcC,MAAAA,QAAQ,MAAM,eAAe,CAAC,cAAc,IAAI,CAAA,GAAI,CAAC,cAAc,cAAc,CAAC;AAEtG,QAAM,eAAeC,WAAA,+BAA8C,CAAC,UAAU,SAAS,aAAa;AACnG,QAAI,WAAW,UAAU;AACxB,eAAS,SAAS,OAAO,eAAe,KAAK,aAAa;AAAA,IAC3D;AACA,QAAI,WAAW,YAAY;AACnB,aAAA,wBAAwB,EAAE,MAAA,CAAO;AACxC,mBAAa,QAAQ;AAAA,IAAA,WACX,WAAW,UAAU;AAC/B,aAAO,qBAAqB,EAAE,MAAM,GAAG,QAAQ;AAC/C,iBAAW,QAAQ;AAAA,IACpB;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,MAAAA,YAAY,CAACC,YAA2BA,QAAO,OAAO,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;AAE/G,SACEC,8BAAAA,OAAAC,SAAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAACD,8BAAA,OAAAE,SAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,+CAACC,SAAAA,0BAA0B,UAA1B,EAAmC,OAAO,cAC1C,UAAAH,8BAAAA,OAACI,SAAqB,qBAAA,UAArB,EAA8B,OAAO,SACrC,UAAAJ,8BAAAA,OAACK,SAAAA,2BAA2B,UAA3B,EAAoC,OAAO,QAC1C,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAUA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAC3B,SACEN,8BAAA,OAAAO,qBAAA,EAAO,OAAc,kBAAiB,uBACrC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAD,MAAA;AAEF,CAAC;;"}
@@ -1,11 +1,14 @@
1
1
  import { jsxDEV } from "react/jsx-dev-runtime";
2
2
  import { useMemo, useCallback } from "react";
3
- import { SelectCurrentEntitiesContext, SelectIsSelectedContext, SelectHandleSelectContext, SelectOptionsContext } from "../contexts.js";
3
+ import { SelectCurrentEntitiesContext, SelectIsSelectedContext, SelectHandleSelectContext, SelectOptionsContext, SelectOptionsFilterContext } from "../contexts.js";
4
4
  import { Component, useEntity, HasOne } from "@contember/react-binding";
5
5
  import { useReferentiallyStableCallback } from "@contember/react-utils";
6
- const Select = Component(({ field, children, onUnselect, onSelect, options }) => {
6
+ import { useSelectFilter } from "../hooks/useSelectFilter.js";
7
+ const Select = Component(({ field, children, onUnselect, onSelect, options, filterField }) => {
7
8
  const entity = useEntity();
8
9
  const selectedEntity = entity.getEntity({ field });
10
+ options ?? (options = selectedEntity.name);
11
+ const filter = useSelectFilter({ filterField, marker: selectedEntity.getMarker() });
9
12
  const entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges;
10
13
  const entitiesArr = useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity]);
11
14
  const handleSelect = useReferentiallyStableCallback((selected, action = "toggle") => {
@@ -21,27 +24,31 @@ const Select = Component(({ field, children, onUnselect, onSelect, options }) =>
21
24
  }
22
25
  });
23
26
  const isSelected = useCallback((entity2) => entity2.id === selectedEntity.id, [selectedEntity.id]);
24
- return /* @__PURE__ */ jsxDEV(SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDEV(SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDEV(SelectHandleSelectContext.Provider, { value: handleSelect, children: /* @__PURE__ */ jsxDEV(SelectOptionsContext.Provider, { value: options, children }, void 0, false, {
27
+ return /* @__PURE__ */ jsxDEV(SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDEV(SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDEV(SelectHandleSelectContext.Provider, { value: handleSelect, children: /* @__PURE__ */ jsxDEV(SelectOptionsContext.Provider, { value: options, children: /* @__PURE__ */ jsxDEV(SelectOptionsFilterContext.Provider, { value: filter, children }, void 0, false, {
25
28
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
26
- lineNumber: 39,
29
+ lineNumber: 45,
30
+ columnNumber: 7
31
+ }, void 0) }, void 0, false, {
32
+ fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
33
+ lineNumber: 44,
27
34
  columnNumber: 6
28
35
  }, void 0) }, void 0, false, {
29
36
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
30
- lineNumber: 38,
37
+ lineNumber: 43,
31
38
  columnNumber: 5
32
39
  }, void 0) }, void 0, false, {
33
40
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
34
- lineNumber: 37,
41
+ lineNumber: 42,
35
42
  columnNumber: 4
36
43
  }, void 0) }, void 0, false, {
37
44
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
38
- lineNumber: 36,
45
+ lineNumber: 41,
39
46
  columnNumber: 3
40
47
  }, void 0);
41
48
  }, ({ field, children }) => {
42
- return /* @__PURE__ */ jsxDEV(HasOne, { field, children }, void 0, false, {
49
+ return /* @__PURE__ */ jsxDEV(HasOne, { field, expectedMutation: "connectOrDisconnect", children }, void 0, false, {
43
50
  fileName: "/__w/interface/interface/packages/react-select/src/components/Select.tsx",
44
- lineNumber: 48,
51
+ lineNumber: 55,
45
52
  columnNumber: 3
46
53
  }, void 0);
47
54
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../../../src/components/Select.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext } from '../contexts'\nimport { Component, EntityAccessor, HasOne, SugaredQualifiedEntityList, SugaredRelativeSingleEntity, useEntity } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\n\nexport type SelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeSingleEntity['field']\n\t\toptions: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectEvents\n\nexport const Select = Component(({ field, children, onUnselect, onSelect, options }: SelectProps) => {\n\tconst entity = useEntity()\n\tconst selectedEntity = entity.getEntity({ field })\n\tconst entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges\n\tconst entitiesArr = useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity])\n\n\tconst handleSelect = useReferentiallyStableCallback<SelectHandler>((selected, action = 'toggle') => {\n\t\tif (action === 'toggle') {\n\t\t\taction = selected.id === selectedEntity.id ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect') {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t\tonUnselect?.(selected)\n\t\t} else if (action === 'select') {\n\t\t\tentity.connectEntityAtField({ field }, selected)\n\t\t\tonSelect?.(selected)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => entity.id === selectedEntity.id, [selectedEntity.id])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handleSelect}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasOne field={field}>\n\t\t\t{children}\n\t\t</HasOne>\n\t)\n})\n\n"],"names":["entity","this"],"mappings":";;;;;AAca,MAAA,SAAS,UAAU,CAAC,EAAE,OAAO,UAAU,YAAY,UAAU,cAA2B;AACpG,QAAM,SAAS;AACf,QAAM,iBAAiB,OAAO,UAAU,EAAE,MAAO,CAAA;AAC3C,QAAA,eAAe,eAAe,kBAAkB,eAAe;AACrE,QAAM,cAAc,QAAQ,MAAM,eAAe,CAAC,cAAc,IAAI,CAAA,GAAI,CAAC,cAAc,cAAc,CAAC;AAEtG,QAAM,eAAe,+BAA8C,CAAC,UAAU,SAAS,aAAa;AACnG,QAAI,WAAW,UAAU;AACxB,eAAS,SAAS,OAAO,eAAe,KAAK,aAAa;AAAA,IAC3D;AACA,QAAI,WAAW,YAAY;AACnB,aAAA,wBAAwB,EAAE,MAAA,CAAO;AACxC,mBAAa,QAAQ;AAAA,IAAA,WACX,WAAW,UAAU;AAC/B,aAAO,qBAAqB,EAAE,MAAM,GAAG,QAAQ;AAC/C,iBAAW,QAAQ;AAAA,IACpB;AAAA,EAAA,CACA;AACK,QAAA,aAAa,YAAY,CAACA,YAA2BA,QAAO,OAAO,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;AAG9G,SAAA,uBAAC,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAAC,uBAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,iCAAC,0BAA0B,UAA1B,EAAmC,OAAO,cAC1C,UAAA,uBAAC,qBAAqB,UAArB,EAA8B,OAAO,SACpC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAQA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAE1B,SAAA,uBAAC,QAAO,EAAA,OACN,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF,CAAC;"}
1
+ {"version":3,"file":"Select.js","sources":["../../../src/components/Select.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext, SelectOptionsFilterContext } from '../contexts'\nimport { Component, EntityAccessor, HasOne, SugaredQualifiedEntityList, SugaredRelativeSingleEntity, useEntity } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { SelectEvents } from '../types'\nimport { SelectFilterFieldProps, useSelectFilter } from '../hooks'\n\nexport type SelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeSingleEntity['field']\n\t\toptions?: SugaredQualifiedEntityList['entities']\n\t}\n\t& SelectFilterFieldProps\n\t& SelectEvents\n\nexport const Select = Component(({ field, children, onUnselect, onSelect, options, filterField }: SelectProps) => {\n\tconst entity = useEntity()\n\tconst selectedEntity = entity.getEntity({ field })\n\toptions ??= selectedEntity.name\n\tconst filter = useSelectFilter({ filterField, marker: selectedEntity.getMarker() })\n\n\tconst entityExists = selectedEntity.existsOnServer || selectedEntity.hasUnpersistedChanges\n\tconst entitiesArr = useMemo(() => entityExists ? [selectedEntity] : [], [entityExists, selectedEntity])\n\n\tconst handleSelect = useReferentiallyStableCallback<SelectHandler>((selected, action = 'toggle') => {\n\t\tif (action === 'toggle') {\n\t\t\taction = selected.id === selectedEntity.id ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect') {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t\tonUnselect?.(selected)\n\t\t} else if (action === 'select') {\n\t\t\tentity.connectEntityAtField({ field }, selected)\n\t\t\tonSelect?.(selected)\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => entity.id === selectedEntity.id, [selectedEntity.id])\n\n\treturn (\n\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t<SelectHandleSelectContext.Provider value={handleSelect}>\n\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t<SelectOptionsFilterContext.Provider value={filter}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</SelectOptionsFilterContext.Provider>\n\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t</SelectIsSelectedContext.Provider>\n\t\t</SelectCurrentEntitiesContext.Provider>\n\t)\n}, ({ field, children }) => {\n\treturn (\n\t\t<HasOne field={field} expectedMutation=\"connectOrDisconnect\">\n\t\t\t{children}\n\t\t</HasOne>\n\t)\n})\n\n"],"names":["entity","this"],"mappings":";;;;;;AAgBa,MAAA,SAAS,UAAU,CAAC,EAAE,OAAO,UAAU,YAAY,UAAU,SAAS,kBAA+B;AACjH,QAAM,SAAS;AACf,QAAM,iBAAiB,OAAO,UAAU,EAAE,MAAO,CAAA;AACjD,wBAAY,eAAe;AACrB,QAAA,SAAS,gBAAgB,EAAE,aAAa,QAAQ,eAAe,aAAa;AAE5E,QAAA,eAAe,eAAe,kBAAkB,eAAe;AACrE,QAAM,cAAc,QAAQ,MAAM,eAAe,CAAC,cAAc,IAAI,CAAA,GAAI,CAAC,cAAc,cAAc,CAAC;AAEtG,QAAM,eAAe,+BAA8C,CAAC,UAAU,SAAS,aAAa;AACnG,QAAI,WAAW,UAAU;AACxB,eAAS,SAAS,OAAO,eAAe,KAAK,aAAa;AAAA,IAC3D;AACA,QAAI,WAAW,YAAY;AACnB,aAAA,wBAAwB,EAAE,MAAA,CAAO;AACxC,mBAAa,QAAQ;AAAA,IAAA,WACX,WAAW,UAAU;AAC/B,aAAO,qBAAqB,EAAE,MAAM,GAAG,QAAQ;AAC/C,iBAAW,QAAQ;AAAA,IACpB;AAAA,EAAA,CACA;AACK,QAAA,aAAa,YAAY,CAACA,YAA2BA,QAAO,OAAO,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;AAE/G,SACE,uBAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAAC,uBAAA,wBAAwB,UAAxB,EAAiC,OAAO,YACxC,iCAAC,0BAA0B,UAA1B,EAAmC,OAAO,cAC1C,UAAA,uBAAC,qBAAqB,UAArB,EAA8B,OAAO,SACrC,UAAA,uBAAC,2BAA2B,UAA3B,EAAoC,OAAO,QAC1C,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAUA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,OAAO,eAAe;AAC3B,SACE,uBAAA,QAAA,EAAO,OAAc,kBAAiB,uBACrC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF,CAAC;"}
@@ -1,16 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxDevRuntime = require("react/jsx-dev-runtime");
4
+ const react = require("react");
4
5
  const contexts = require("../contexts.cjs");
5
6
  const reactDataview = require("@contember/react-dataview");
6
7
  const SelectDataView = (props) => {
7
8
  const handleSelect = contexts.useSelectHandleSelect();
8
9
  const entities = contexts.useSelectOptions();
9
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactDataview.DataView, { ...props, onSelectHighlighted: handleSelect, entities }, void 0, false, {
10
- fileName: "/__w/interface/interface/packages/react-select/src/components/SelectDataView.tsx",
11
- lineNumber: 15,
12
- columnNumber: 3
13
- }, void 0);
10
+ const filter = contexts.useSelectOptionsFilter();
11
+ const defaultFilterTypes = react.useMemo(() => filter ? { query: filter } : {}, [filter]);
12
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(
13
+ reactDataview.DataView,
14
+ {
15
+ filterTypes: defaultFilterTypes,
16
+ ...props,
17
+ onSelectHighlighted: handleSelect,
18
+ entities,
19
+ filteringStateStorage: "null",
20
+ sortingStateStorage: "null",
21
+ currentPageStateStorage: "null"
22
+ },
23
+ void 0,
24
+ false,
25
+ {
26
+ fileName: "/__w/interface/interface/packages/react-select/src/components/SelectDataView.tsx",
27
+ lineNumber: 18,
28
+ columnNumber: 3
29
+ },
30
+ void 0
31
+ );
14
32
  };
15
33
  exports.SelectDataView = SelectDataView;
16
34
  //# sourceMappingURL=SelectDataView.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDataView.cjs","sources":["../../../src/components/SelectDataView.tsx"],"sourcesContent":["import React, { ReactNode } from 'react'\nimport { useSelectHandleSelect, useSelectOptions } from '../contexts'\nimport { DataViewProps, DataView } from '@contember/react-dataview'\n\nexport type SelectDataViewProps =\n\t& Omit<DataViewProps, 'entities'>\n\t& {\n\t\tchildren: ReactNode\n\t}\n\nexport const SelectDataView = (props: SelectDataViewProps) => {\n\tconst handleSelect = useSelectHandleSelect()\n\tconst entities = useSelectOptions()\n\treturn (\n\t\t<DataView {...props} onSelectHighlighted={handleSelect} entities={entities} />\n\t)\n}\n"],"names":["useSelectHandleSelect","useSelectOptions","DataView","this"],"mappings":";;;;;AAUa,MAAA,iBAAiB,CAAC,UAA+B;AAC7D,QAAM,eAAeA,SAAAA;AACrB,QAAM,WAAWC,SAAAA;AACjB,8CACEC,cAAAA,UAAU,EAAA,GAAG,OAAO,qBAAqB,cAAc,SAAxD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAA4E,GAAAC,MAAA;AAE9E;;"}
1
+ {"version":3,"file":"SelectDataView.cjs","sources":["../../../src/components/SelectDataView.tsx"],"sourcesContent":["import React, { ReactNode, useMemo } from 'react'\nimport { useSelectHandleSelect, useSelectOptions, useSelectOptionsFilter } from '../contexts'\nimport { DataViewProps, DataView, DataViewFilterHandlerRegistry } from '@contember/react-dataview'\n\nexport type SelectDataViewProps =\n\t& Omit<DataViewProps, 'entities'>\n\t& {\n\t\tchildren: ReactNode\n\t}\n\nexport const SelectDataView = (props: SelectDataViewProps) => {\n\tconst handleSelect = useSelectHandleSelect()\n\tconst entities = useSelectOptions()\n\tconst filter = useSelectOptionsFilter()\n\tconst defaultFilterTypes = useMemo((): DataViewFilterHandlerRegistry => filter ? { query: filter } : {}, [filter])\n\n\treturn (\n\t\t<DataView\n\t\t\tfilterTypes={defaultFilterTypes}\n\t\t\t{...props}\n\t\t\tonSelectHighlighted={handleSelect}\n\t\t\tentities={entities}\n\t\t\tfilteringStateStorage=\"null\"\n\t\t\tsortingStateStorage=\"null\"\n\t\t\tcurrentPageStateStorage=\"null\"\n\t\t/>\n\t)\n}\n"],"names":["useSelectHandleSelect","useSelectOptions","useSelectOptionsFilter","useMemo","jsxDEV","DataView","this"],"mappings":";;;;;;AAUa,MAAA,iBAAiB,CAAC,UAA+B;AAC7D,QAAM,eAAeA,SAAAA;AACrB,QAAM,WAAWC,SAAAA;AACjB,QAAM,SAASC,SAAAA;AACf,QAAM,qBAAqBC,MAAAA,QAAQ,MAAqC,SAAS,EAAE,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAGhH,SAAAC,8BAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACA,aAAa;AAAA,MACZ,GAAG;AAAA,MACJ,qBAAqB;AAAA,MACrB;AAAA,MACA,uBAAsB;AAAA,MACtB,qBAAoB;AAAA,MACpB,yBAAwB;AAAA,IAAA;AAAA,IAPzB;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAC;AAAAA,EAAA;AAUF;;"}
@@ -1,14 +1,32 @@
1
1
  import { jsxDEV } from "react/jsx-dev-runtime";
2
- import { useSelectHandleSelect, useSelectOptions } from "../contexts.js";
2
+ import { useMemo } from "react";
3
+ import { useSelectHandleSelect, useSelectOptions, useSelectOptionsFilter } from "../contexts.js";
3
4
  import { DataView } from "@contember/react-dataview";
4
5
  const SelectDataView = (props) => {
5
6
  const handleSelect = useSelectHandleSelect();
6
7
  const entities = useSelectOptions();
7
- return /* @__PURE__ */ jsxDEV(DataView, { ...props, onSelectHighlighted: handleSelect, entities }, void 0, false, {
8
- fileName: "/__w/interface/interface/packages/react-select/src/components/SelectDataView.tsx",
9
- lineNumber: 15,
10
- columnNumber: 3
11
- }, void 0);
8
+ const filter = useSelectOptionsFilter();
9
+ const defaultFilterTypes = useMemo(() => filter ? { query: filter } : {}, [filter]);
10
+ return /* @__PURE__ */ jsxDEV(
11
+ DataView,
12
+ {
13
+ filterTypes: defaultFilterTypes,
14
+ ...props,
15
+ onSelectHighlighted: handleSelect,
16
+ entities,
17
+ filteringStateStorage: "null",
18
+ sortingStateStorage: "null",
19
+ currentPageStateStorage: "null"
20
+ },
21
+ void 0,
22
+ false,
23
+ {
24
+ fileName: "/__w/interface/interface/packages/react-select/src/components/SelectDataView.tsx",
25
+ lineNumber: 18,
26
+ columnNumber: 3
27
+ },
28
+ void 0
29
+ );
12
30
  };
13
31
  export {
14
32
  SelectDataView
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDataView.js","sources":["../../../src/components/SelectDataView.tsx"],"sourcesContent":["import React, { ReactNode } from 'react'\nimport { useSelectHandleSelect, useSelectOptions } from '../contexts'\nimport { DataViewProps, DataView } from '@contember/react-dataview'\n\nexport type SelectDataViewProps =\n\t& Omit<DataViewProps, 'entities'>\n\t& {\n\t\tchildren: ReactNode\n\t}\n\nexport const SelectDataView = (props: SelectDataViewProps) => {\n\tconst handleSelect = useSelectHandleSelect()\n\tconst entities = useSelectOptions()\n\treturn (\n\t\t<DataView {...props} onSelectHighlighted={handleSelect} entities={entities} />\n\t)\n}\n"],"names":["this"],"mappings":";;;AAUa,MAAA,iBAAiB,CAAC,UAA+B;AAC7D,QAAM,eAAe;AACrB,QAAM,WAAW;AACjB,gCACE,UAAU,EAAA,GAAG,OAAO,qBAAqB,cAAc,SAAxD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAA4E,GAAAA,MAAA;AAE9E;"}
1
+ {"version":3,"file":"SelectDataView.js","sources":["../../../src/components/SelectDataView.tsx"],"sourcesContent":["import React, { ReactNode, useMemo } from 'react'\nimport { useSelectHandleSelect, useSelectOptions, useSelectOptionsFilter } from '../contexts'\nimport { DataViewProps, DataView, DataViewFilterHandlerRegistry } from '@contember/react-dataview'\n\nexport type SelectDataViewProps =\n\t& Omit<DataViewProps, 'entities'>\n\t& {\n\t\tchildren: ReactNode\n\t}\n\nexport const SelectDataView = (props: SelectDataViewProps) => {\n\tconst handleSelect = useSelectHandleSelect()\n\tconst entities = useSelectOptions()\n\tconst filter = useSelectOptionsFilter()\n\tconst defaultFilterTypes = useMemo((): DataViewFilterHandlerRegistry => filter ? { query: filter } : {}, [filter])\n\n\treturn (\n\t\t<DataView\n\t\t\tfilterTypes={defaultFilterTypes}\n\t\t\t{...props}\n\t\t\tonSelectHighlighted={handleSelect}\n\t\t\tentities={entities}\n\t\t\tfilteringStateStorage=\"null\"\n\t\t\tsortingStateStorage=\"null\"\n\t\t\tcurrentPageStateStorage=\"null\"\n\t\t/>\n\t)\n}\n"],"names":["this"],"mappings":";;;;AAUa,MAAA,iBAAiB,CAAC,UAA+B;AAC7D,QAAM,eAAe;AACrB,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,qBAAqB,QAAQ,MAAqC,SAAS,EAAE,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAGhH,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAa;AAAA,MACZ,GAAG;AAAA,MACJ,qBAAqB;AAAA,MACrB;AAAA,MACA,uBAAsB;AAAA,MACtB,qBAAoB;AAAA,MACpB,yBAAwB;AAAA,IAAA;AAAA,IAPzB;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA;AAUF;"}
@@ -6,9 +6,25 @@ const contexts = require("../contexts.cjs");
6
6
  const reactBinding = require("@contember/react-binding");
7
7
  const reactUtils = require("@contember/react-utils");
8
8
  const reactRepeater = require("@contember/react-repeater");
9
- const SortableMultiSelect = reactBinding.Component(({ field, children, sortableBy, connectAt, options, onSelect, onUnselect }) => {
9
+ const useSelectFilter = require("../hooks/useSelectFilter.cjs");
10
+ const SortableMultiSelect = reactBinding.Component(({ field, children, sortableBy, connectAt, options, onSelect, onUnselect, filterField }) => {
10
11
  const list = reactBinding.useEntityList({ field });
11
12
  const entitiesArr = react.useMemo(() => Array.from(list), [list]);
13
+ const optionsMarker = react.useMemo(() => {
14
+ const desugared = reactBinding.QueryLanguage.desugarRelativeSingleEntity({ field: connectAt }, list.environment);
15
+ let marker = list.getMarker();
16
+ for (let relation of desugared.hasOneRelationPath) {
17
+ const placeholder = reactBinding.PlaceholderGenerator.getHasOneRelationPlaceholder(relation);
18
+ const relationMarker = marker.fields.markers.get(placeholder);
19
+ if (!relationMarker || relationMarker instanceof reactBinding.FieldMarker) {
20
+ throw new Error("Invalid marker");
21
+ }
22
+ marker = relationMarker;
23
+ }
24
+ return marker;
25
+ }, [connectAt, list]);
26
+ options ?? (options = optionsMarker.environment.getSubTreeNode().entity.name);
27
+ const filter = useSelectFilter.useSelectFilter({ filterField, marker: optionsMarker });
12
28
  const selectedEntities = react.useMemo(() => Array.from(list).map((it) => it.getEntity({ field: connectAt }).id), [connectAt, list]);
13
29
  const handler = reactUtils.useReferentiallyStableCallback((entity, action = "toggle") => {
14
30
  const isSelected2 = selectedEntities.includes(entity.id);
@@ -28,35 +44,39 @@ const SortableMultiSelect = reactBinding.Component(({ field, children, sortableB
28
44
  const isSelected = react.useCallback((entity) => {
29
45
  return selectedEntities.includes(entity.id);
30
46
  }, [selectedEntities]);
31
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactRepeater.Repeater, { field, sortableBy, initialEntityCount: 0, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children }, void 0, false, {
47
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactRepeater.Repeater, { field, sortableBy, initialEntityCount: 0, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectCurrentEntitiesContext.Provider, { value: entitiesArr, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectIsSelectedContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectHandleSelectContext.Provider, { value: handler, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsContext.Provider, { value: options, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(contexts.SelectOptionsFilterContext.Provider, { value: filter, children }, void 0, false, {
48
+ fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
49
+ lineNumber: 82,
50
+ columnNumber: 8
51
+ }, void 0) }, void 0, false, {
32
52
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
33
- lineNumber: 48,
53
+ lineNumber: 81,
34
54
  columnNumber: 7
35
55
  }, void 0) }, void 0, false, {
36
56
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
37
- lineNumber: 47,
57
+ lineNumber: 80,
38
58
  columnNumber: 6
39
59
  }, void 0) }, void 0, false, {
40
60
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
41
- lineNumber: 46,
61
+ lineNumber: 79,
42
62
  columnNumber: 5
43
63
  }, void 0) }, void 0, false, {
44
64
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
45
- lineNumber: 45,
65
+ lineNumber: 78,
46
66
  columnNumber: 4
47
67
  }, void 0) }, void 0, false, {
48
68
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
49
- lineNumber: 44,
69
+ lineNumber: 77,
50
70
  columnNumber: 3
51
71
  }, void 0);
52
72
  }, ({ children, field, sortableBy, connectAt }) => {
53
- return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactRepeater.Repeater, { field, sortableBy, initialEntityCount: 0, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasOne, { field: connectAt, children }, void 0, false, {
73
+ return /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactRepeater.Repeater, { field, sortableBy, initialEntityCount: 0, children: /* @__PURE__ */ jsxDevRuntime.jsxDEV(reactBinding.HasOne, { field: connectAt, expectedMutation: "connectOrDisconnect", children }, void 0, false, {
54
74
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
55
- lineNumber: 59,
75
+ lineNumber: 94,
56
76
  columnNumber: 4
57
77
  }, void 0) }, void 0, false, {
58
78
  fileName: "/__w/interface/interface/packages/react-select/src/components/SortableMultiSelect.tsx",
59
- lineNumber: 58,
79
+ lineNumber: 93,
60
80
  columnNumber: 3
61
81
  }, void 0);
62
82
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SortableMultiSelect.cjs","sources":["../../../src/components/SortableMultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext } from '../contexts'\nimport { Component, EntityAccessor, HasOne, SugaredQualifiedEntityList, SugaredRelativeEntityList, SugaredRelativeSingleEntity, SugaredRelativeSingleField, useEntityList } from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { Repeater } from '@contember/react-repeater'\nimport { SelectEvents } from '../types'\n\nexport type SortableMultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions: SugaredQualifiedEntityList['entities']\n\t\tsortableBy: SugaredRelativeSingleField['field']\n\t\tconnectAt: SugaredRelativeSingleEntity['field']\n\t}\n\t& SelectEvents\n\nexport const SortableMultiSelect = Component(({ field, children, sortableBy, connectAt, options, onSelect, onUnselect }: SortableMultiSelectProps) => {\n\tconst list = useEntityList({ field })\n\tconst entitiesArr = useMemo(() => Array.from(list), [list])\n\n\tconst selectedEntities = useMemo(() => Array.from(list).map(it => it.getEntity({ field: connectAt }).id), [connectAt, list])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tArray.from(list).find(it => it.getEntity({ field: connectAt }).id === entity.id)?.deleteEntity()\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tlist.createNewEntity(getEntity => {\n\t\t\t\tgetEntity().connectEntityAtField({ field: connectAt }, entity)\n\t\t\t\tonSelect?.(entity)\n\t\t\t})\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<Repeater field={field} sortableBy={sortableBy} initialEntityCount={0}>\n\t\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t\t</SelectIsSelectedContext.Provider>\n\t\t\t</SelectCurrentEntitiesContext.Provider>\n\t\t</Repeater>\n\t)\n}, ({ children, field, sortableBy, connectAt }) => {\n\treturn (\n\t\t<Repeater field={field} sortableBy={sortableBy} initialEntityCount={0}>\n\t\t\t<HasOne field={connectAt}>\n\t\t\t\t{children}\n\t\t\t</HasOne>\n\t\t</Repeater>\n\t)\n})\n\n"],"names":["Component","useEntityList","useMemo","useReferentiallyStableCallback","isSelected","useCallback","jsxDEV","Repeater","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","this","HasOne"],"mappings":";;;;;;;;AAiBa,MAAA,sBAAsBA,aAAU,UAAA,CAAC,EAAE,OAAO,UAAU,YAAY,WAAW,SAAS,UAAU,iBAA2C;AACrJ,QAAM,OAAOC,aAAAA,cAAc,EAAE,MAAO,CAAA;AAC9B,QAAA,cAAcC,cAAQ,MAAM,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;AAEpD,QAAA,mBAAmBA,cAAQ,MAAM,MAAM,KAAK,IAAI,EAAE,IAAI,CAAM,OAAA,GAAG,UAAU,EAAE,OAAO,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;AAE3H,QAAM,UAAUC,WAAA,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMC,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,YAAM,KAAK,IAAI,EAAE,KAAK,CAAA,OAAM,GAAG,UAAU,EAAE,OAAO,UAAW,CAAA,EAAE,OAAO,OAAO,EAAE,GAAG;AAClF,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,WAAK,gBAAgB,CAAa,cAAA;AACjC,kBAAA,EAAY,qBAAqB,EAAE,OAAO,UAAA,GAAa,MAAM;AAC7D,mBAAW,MAAM;AAAA,MAAA,CACjB;AAAA,IACF;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,kBAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAErB,SACEC,8BAAAA,OAAAC,cAAAA,UAAA,EAAS,OAAc,YAAwB,oBAAoB,GACnE,UAACD,8BAAAA,OAAAE,SAAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,+CAACC,SAAwB,wBAAA,UAAxB,EAAiC,OAAO,YACxC,UAAAH,qCAACI,SAAAA,0BAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAAJ,8BAAA,OAACK,8BAAqB,UAArB,EAA8B,OAAO,SACpC,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAUA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,UAAU,OAAO,YAAY,gBAAgB;AAEjD,SAAAN,8BAAAA,OAACC,cAAAA,UAAS,EAAA,OAAc,YAAwB,oBAAoB,GACnE,UAACD,8BAAA,OAAAO,aAAA,QAAA,EAAO,OAAO,WACb,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAD,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAIA,GAAAA,MAAA;AAEF,CAAC;;"}
1
+ {"version":3,"file":"SortableMultiSelect.cjs","sources":["../../../src/components/SortableMultiSelect.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo } from 'react'\nimport { SelectCurrentEntitiesContext, SelectHandler, SelectHandleSelectContext, SelectIsSelectedContext, SelectOptionsContext, SelectOptionsFilterContext } from '../contexts'\nimport {\n\tComponent,\n\tEntityAccessor,\n\tFieldMarker,\n\tHasOne,\n\tMeaningfulMarker,\n\tPlaceholderGenerator,\n\tQueryLanguage,\n\tSugaredQualifiedEntityList,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tuseEntityList,\n} from '@contember/react-binding'\nimport { useReferentiallyStableCallback } from '@contember/react-utils'\nimport { Repeater } from '@contember/react-repeater'\nimport { SelectEvents } from '../types'\nimport { SelectFilterFieldProps, useSelectFilter } from '../hooks'\n\nexport type SortableMultiSelectProps =\n\t& {\n\t\tchildren: ReactNode\n\t\tfield: SugaredRelativeEntityList['field']\n\t\toptions?: SugaredQualifiedEntityList['entities']\n\t\tsortableBy: SugaredRelativeSingleField['field']\n\t\tconnectAt: SugaredRelativeSingleEntity['field']\n\t}\n\t& SelectFilterFieldProps\n\t& SelectEvents\n\nexport const SortableMultiSelect = Component(({ field, children, sortableBy, connectAt, options, onSelect, onUnselect, filterField }: SortableMultiSelectProps) => {\n\tconst list = useEntityList({ field })\n\tconst entitiesArr = useMemo(() => Array.from(list), [list])\n\n\tconst optionsMarker = useMemo(() => {\n\t\tconst desugared = QueryLanguage.desugarRelativeSingleEntity({ field: connectAt }, list.environment)\n\t\tlet marker: Exclude<MeaningfulMarker, FieldMarker> = list.getMarker()\n\t\tfor (let relation of desugared.hasOneRelationPath) {\n\t\t\tconst placeholder = PlaceholderGenerator.getHasOneRelationPlaceholder(relation)\n\t\t\tconst relationMarker = marker.fields.markers.get(placeholder)\n\t\t\tif (!relationMarker || relationMarker instanceof FieldMarker) {\n\t\t\t\tthrow new Error('Invalid marker')\n\t\t\t}\n\t\t\tmarker = relationMarker\n\t\t}\n\t\treturn marker\n\t}, [connectAt, list])\n\n\toptions ??= optionsMarker.environment.getSubTreeNode().entity.name\n\n\tconst filter = useSelectFilter({ filterField, marker: optionsMarker })\n\n\tconst selectedEntities = useMemo(() => Array.from(list).map(it => it.getEntity({ field: connectAt }).id), [connectAt, list])\n\n\tconst handler = useReferentiallyStableCallback<SelectHandler>((entity, action = 'toggle') => {\n\t\tconst isSelected = selectedEntities.includes(entity.id)\n\t\tif (action === 'toggle') {\n\t\t\taction = isSelected ? 'unselect' : 'select'\n\t\t}\n\t\tif (action === 'unselect' && isSelected) {\n\t\t\tArray.from(list).find(it => it.getEntity({ field: connectAt }).id === entity.id)?.deleteEntity()\n\t\t\tonUnselect?.(entity)\n\t\t} else if (action === 'select' && !isSelected) {\n\t\t\tlist.createNewEntity(getEntity => {\n\t\t\t\tgetEntity().connectEntityAtField({ field: connectAt }, entity)\n\t\t\t\tonSelect?.(entity)\n\t\t\t})\n\t\t}\n\t})\n\tconst isSelected = useCallback((entity: EntityAccessor) => {\n\t\treturn selectedEntities.includes(entity.id)\n\t}, [selectedEntities])\n\n\treturn (\n\t\t<Repeater field={field} sortableBy={sortableBy} initialEntityCount={0}>\n\t\t\t<SelectCurrentEntitiesContext.Provider value={entitiesArr}>\n\t\t\t\t<SelectIsSelectedContext.Provider value={isSelected}>\n\t\t\t\t\t<SelectHandleSelectContext.Provider value={handler}>\n\t\t\t\t\t\t<SelectOptionsContext.Provider value={options}>\n\t\t\t\t\t\t\t<SelectOptionsFilterContext.Provider value={filter}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</SelectOptionsFilterContext.Provider>\n\t\t\t\t\t\t</SelectOptionsContext.Provider>\n\t\t\t\t\t</SelectHandleSelectContext.Provider>\n\t\t\t\t</SelectIsSelectedContext.Provider>\n\t\t\t</SelectCurrentEntitiesContext.Provider>\n\t\t</Repeater>\n\t)\n}, ({ children, field, sortableBy, connectAt }) => {\n\treturn (\n\t\t<Repeater field={field} sortableBy={sortableBy} initialEntityCount={0}>\n\t\t\t<HasOne field={connectAt} expectedMutation=\"connectOrDisconnect\">\n\t\t\t\t{children}\n\t\t\t</HasOne>\n\t\t</Repeater>\n\t)\n})\n\n"],"names":["Component","useEntityList","useMemo","QueryLanguage","PlaceholderGenerator","FieldMarker","useSelectFilter","useReferentiallyStableCallback","isSelected","useCallback","Repeater","jsxDEV","SelectCurrentEntitiesContext","SelectIsSelectedContext","SelectHandleSelectContext","SelectOptionsContext","SelectOptionsFilterContext","this","HasOne"],"mappings":";;;;;;;;;AAgCO,MAAM,sBAAsBA,aAAA,UAAU,CAAC,EAAE,OAAO,UAAU,YAAY,WAAW,SAAS,UAAU,YAAY,YAAA,MAA4C;AAClK,QAAM,OAAOC,aAAAA,cAAc,EAAE,MAAO,CAAA;AAC9B,QAAA,cAAcC,cAAQ,MAAM,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;AAEpD,QAAA,gBAAgBA,MAAAA,QAAQ,MAAM;AAC7B,UAAA,YAAYC,2BAAc,4BAA4B,EAAE,OAAO,UAAU,GAAG,KAAK,WAAW;AAC9F,QAAA,SAAiD,KAAK;AACjD,aAAA,YAAY,UAAU,oBAAoB;AAC5C,YAAA,cAAcC,aAAAA,qBAAqB,6BAA6B,QAAQ;AAC9E,YAAM,iBAAiB,OAAO,OAAO,QAAQ,IAAI,WAAW;AACxD,UAAA,CAAC,kBAAkB,0BAA0BC,0BAAa;AACvD,cAAA,IAAI,MAAM,gBAAgB;AAAA,MACjC;AACS,eAAA;AAAA,IACV;AACO,WAAA;AAAA,EAAA,GACL,CAAC,WAAW,IAAI,CAAC;AAEpB,wBAAY,cAAc,YAAY,eAAe,EAAE,OAAO;AAE9D,QAAM,SAASC,gBAAAA,gBAAgB,EAAE,aAAa,QAAQ,eAAe;AAE/D,QAAA,mBAAmBJ,cAAQ,MAAM,MAAM,KAAK,IAAI,EAAE,IAAI,CAAM,OAAA,GAAG,UAAU,EAAE,OAAO,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;AAE3H,QAAM,UAAUK,WAAA,+BAA8C,CAAC,QAAQ,SAAS,aAAa;AAC5F,UAAMC,cAAa,iBAAiB,SAAS,OAAO,EAAE;AACtD,QAAI,WAAW,UAAU;AACxB,eAASA,cAAa,aAAa;AAAA,IACpC;AACI,QAAA,WAAW,cAAcA,aAAY;AACxC,YAAM,KAAK,IAAI,EAAE,KAAK,CAAA,OAAM,GAAG,UAAU,EAAE,OAAO,UAAW,CAAA,EAAE,OAAO,OAAO,EAAE,GAAG;AAClF,mBAAa,MAAM;AAAA,IACT,WAAA,WAAW,YAAY,CAACA,aAAY;AAC9C,WAAK,gBAAgB,CAAa,cAAA;AACjC,kBAAA,EAAY,qBAAqB,EAAE,OAAO,UAAA,GAAa,MAAM;AAC7D,mBAAW,MAAM;AAAA,MAAA,CACjB;AAAA,IACF;AAAA,EAAA,CACA;AACK,QAAA,aAAaC,kBAAY,CAAC,WAA2B;AACnD,WAAA,iBAAiB,SAAS,OAAO,EAAE;AAAA,EAAA,GACxC,CAAC,gBAAgB,CAAC;AAErB,8CACEC,wBAAS,EAAA,OAAc,YAAwB,oBAAoB,GACnE,UAACC,8BAAAA,OAAAC,SAAA,6BAA6B,UAA7B,EAAsC,OAAO,aAC7C,UAAAD,8BAAA,OAACE,iCAAwB,UAAxB,EAAiC,OAAO,YACxC,UAACF,8BAAAA,OAAAG,SAAAA,0BAA0B,UAA1B,EAAmC,OAAO,SAC1C,UAAAH,8BAAAA,OAACI,8BAAqB,UAArB,EAA8B,OAAO,SACrC,+CAACC,oCAA2B,UAA3B,EAAoC,OAAO,QAC1C,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA,EATD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAUA,EAXD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAYA,GAAAA,MAAA;AAEF,GAAG,CAAC,EAAE,UAAU,OAAO,YAAY,gBAAgB;AAClD,SACEN,8BAAA,OAAAD,cAAA,UAAA,EAAS,OAAc,YAAwB,oBAAoB,GACnE,UAACC,8BAAA,OAAAO,aAAA,QAAA,EAAO,OAAO,WAAW,kBAAiB,uBACzC,YADF,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAD,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAIA,GAAAA,MAAA;AAEF,CAAC;;"}